diff --git a/src/renderer/src/components/NewWorkspaceComposerModal.tsx b/src/renderer/src/components/NewWorkspaceComposerModal.tsx
index f04a8f80d..aa46a10f7 100644
--- a/src/renderer/src/components/NewWorkspaceComposerModal.tsx
+++ b/src/renderer/src/components/NewWorkspaceComposerModal.tsx
@@ -1,4 +1,4 @@
-import React, { Suspense, useCallback, useEffect, useMemo, useState } from 'react'
+import React, { Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { useAppStore } from '@/store'
import { lazyWithRetry } from '@/lib/lazy-with-retry'
import {
@@ -20,6 +20,7 @@ import type { LinkedWorkItemSummary } from '@/lib/new-workspace'
import { shouldAllowComposerEnterSubmitTarget } from '@/lib/new-workspace-enter-guard'
import { isScreenSubmitShortcut } from '@/lib/screen-submit-shortcut'
import type {
+ GitHubWorkItem,
TuiAgent,
WorkspaceCreateTelemetrySource,
WorkspaceStatus
@@ -41,9 +42,11 @@ type ComposerModalData = {
initialEphemeralVmRecipeId?: string
initialProjectGroupId?: string
linkedWorkItem?: LinkedWorkItemSummary | null
+ initialGitHubWorkItem?: GitHubWorkItem | null
taskSourceContext?: TaskSourceContext | null
initialBaseBranch?: string
initialWorkspaceStatus?: WorkspaceStatus
+ enableIssueAutomation?: boolean
/** Telemetry surface that opened the composer. Set by each
* `openModal('new-workspace-composer', ...)` site so
* `workspace_created.source` carries the right value. Falls back to
@@ -58,42 +61,29 @@ export default function NewWorkspaceComposerModal(): React.JSX.Element | null {
const modalData = useAppStore((s) => s.modalData as ComposerModalData | undefined)
const closeModal = useAppStore((s) => s.closeModal)
- // Why: Dialog open-state transitions must be driven by the store, not a
- // mirror useState, so palette/open-modal calls feel instantaneous and the
- // modal doesn't linger with stale data after close.
- const handleOpenChange = useCallback(
- (open: boolean) => {
- if (!open) {
- closeModal()
- }
- },
- [closeModal]
- )
-
if (!visible) {
return null
}
- return (
-
- )
+ return
}
function ComposerModalBody({
modalData,
- onClose,
- onOpenChange
+ onClose
}: {
modalData: ComposerModalData
onClose: () => void
- onOpenChange: (open: boolean) => void
}): React.JSX.Element {
+ const submitCancelledRef = useRef(false)
+ const handleDismiss = useCallback(() => {
+ submitCancelledRef.current = true
+ onClose()
+ }, [onClose])
+ const isSubmissionCancelled = useCallback(() => submitCancelledRef.current, [])
+
return (
-