@tutti-os/agent-gui 0.0.98 → 0.0.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AgentGUI-Bkk2TRS0.d.ts → AgentGUI-DgBjACOL.d.ts} +12 -3
- package/dist/agent-conversation/index.d.ts +4 -4
- package/dist/agent-conversation/index.js +8 -9
- package/dist/agent-conversation/index.js.map +1 -1
- package/dist/agent-gui.d.ts +5 -4
- package/dist/agent-gui.js +19 -19
- package/dist/agent-message-center/index.d.ts +4 -6
- package/dist/agent-message-center/index.js +13 -52
- package/dist/agent-message-center/index.js.map +1 -1
- package/dist/agent-title-text.js +1 -1
- package/dist/{agentConversationVM-C335TR6S.d.ts → agentConversationVM-BzHZhwFP.d.ts} +1 -1
- package/dist/{agentGuiNodeTypes-DAsluxjv.d.ts → agentGuiNodeTypes-C-wBSM-Y.d.ts} +19 -4
- package/dist/app/renderer/agentactivity.css +141 -36
- package/dist/chunk-2RQM7PJN.js +16 -0
- package/dist/chunk-2RQM7PJN.js.map +1 -0
- package/dist/{chunk-FSKGEGGX.js → chunk-4E3QCW6L.js} +17 -3
- package/dist/chunk-4E3QCW6L.js.map +1 -0
- package/dist/{chunk-63BE6RGM.js → chunk-4YCCATI4.js} +14 -374
- package/dist/chunk-4YCCATI4.js.map +1 -0
- package/dist/{chunk-IYEXLOUE.js → chunk-4YVKAPKW.js} +5 -8
- package/dist/chunk-4YVKAPKW.js.map +1 -0
- package/dist/{chunk-7O4D4KOE.js → chunk-BQJOYTW2.js} +939 -751
- package/dist/chunk-BQJOYTW2.js.map +1 -0
- package/dist/{chunk-MRRICFWA.js → chunk-D7HMQLBO.js} +159 -55
- package/dist/chunk-D7HMQLBO.js.map +1 -0
- package/dist/{chunk-OTRZBTFQ.js → chunk-DWUVRWXD.js} +2 -2
- package/dist/{chunk-RHTZAODZ.js → chunk-E5AD46HP.js} +2 -2
- package/dist/{chunk-3NOJFKDV.js → chunk-EUW6VPIK.js} +414 -49
- package/dist/chunk-EUW6VPIK.js.map +1 -0
- package/dist/{chunk-Y35GDLP2.js → chunk-F5UR6EJG.js} +2 -17
- package/dist/chunk-F5UR6EJG.js.map +1 -0
- package/dist/{chunk-J7ZYAUPC.js → chunk-FAE7CXZO.js} +8 -6
- package/dist/chunk-FAE7CXZO.js.map +1 -0
- package/dist/{chunk-CPUEPDF7.js → chunk-GCW57WYQ.js} +646 -595
- package/dist/chunk-GCW57WYQ.js.map +1 -0
- package/dist/{chunk-7M77BK6K.js → chunk-JWHPVETQ.js} +154 -147
- package/dist/chunk-JWHPVETQ.js.map +1 -0
- package/dist/{chunk-4ROALW3K.js → chunk-KAV2WHTG.js} +82 -61
- package/dist/chunk-KAV2WHTG.js.map +1 -0
- package/dist/{chunk-T6PEJFRP.js → chunk-MES7BQWI.js} +378 -369
- package/dist/chunk-MES7BQWI.js.map +1 -0
- package/dist/chunk-MIJXEELH.js +96 -0
- package/dist/chunk-MIJXEELH.js.map +1 -0
- package/dist/{chunk-QWGJ5TEG.js → chunk-QY22OBJS.js} +28 -30
- package/dist/chunk-QY22OBJS.js.map +1 -0
- package/dist/{chunk-MASXZENX.js → chunk-UESYITH6.js} +21 -2
- package/dist/chunk-UESYITH6.js.map +1 -0
- package/dist/{chunk-SPZJCTBV.js → chunk-XFRY2WWB.js} +348 -322
- package/dist/chunk-XFRY2WWB.js.map +1 -0
- package/dist/context-mention-palette/index.d.ts +5 -1
- package/dist/context-mention-palette/index.js +10 -11
- package/dist/contribution-CTVBPN0R.d.ts +119 -0
- package/dist/i18n/index.d.ts +16 -2
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +8 -7
- package/dist/index.js +21 -20
- package/dist/index.js.map +1 -1
- package/dist/mention-search.d.ts +18 -6
- package/dist/mention-search.js +8 -9
- package/dist/workbench/contribution.d.ts +6 -107
- package/dist/workbench/contribution.js +7 -3
- package/dist/workbench/index.d.ts +6 -4
- package/dist/workbench/index.js +27 -21
- package/dist/workbench/launch.d.ts +13 -5
- package/dist/workbench/launch.js +1 -1
- package/dist/workbench/sessionTitle.d.ts +5 -7
- package/dist/workbench/sessionTitle.js +3 -4
- package/dist/workbench/state.js +3 -1
- package/dist/workspace-agent-generated-files.d.ts +8 -13
- package/dist/workspace-agent-generated-files.js +6 -21
- package/dist/{workspaceAgentActivityListTypes-C7gPWYiA.d.ts → workspaceAgentActivityListTypes-DZfS_HgG.d.ts} +3 -26
- package/package.json +12 -12
- package/dist/chunk-3NOJFKDV.js.map +0 -1
- package/dist/chunk-4ROALW3K.js.map +0 -1
- package/dist/chunk-63BE6RGM.js.map +0 -1
- package/dist/chunk-7M77BK6K.js.map +0 -1
- package/dist/chunk-7O4D4KOE.js.map +0 -1
- package/dist/chunk-CPUEPDF7.js.map +0 -1
- package/dist/chunk-FSKGEGGX.js.map +0 -1
- package/dist/chunk-GAD6Y3BF.js +0 -88
- package/dist/chunk-GAD6Y3BF.js.map +0 -1
- package/dist/chunk-GCBDIQDX.js +0 -22
- package/dist/chunk-GCBDIQDX.js.map +0 -1
- package/dist/chunk-IYEXLOUE.js.map +0 -1
- package/dist/chunk-J7ZYAUPC.js.map +0 -1
- package/dist/chunk-MASXZENX.js.map +0 -1
- package/dist/chunk-MRRICFWA.js.map +0 -1
- package/dist/chunk-QWGJ5TEG.js.map +0 -1
- package/dist/chunk-SPZJCTBV.js.map +0 -1
- package/dist/chunk-T6PEJFRP.js.map +0 -1
- package/dist/chunk-Y35GDLP2.js.map +0 -1
- package/dist/chunk-Y5M6Q6WX.js +0 -25
- package/dist/chunk-Y5M6Q6WX.js.map +0 -1
- /package/dist/{chunk-OTRZBTFQ.js.map → chunk-DWUVRWXD.js.map} +0 -0
- /package/dist/{chunk-RHTZAODZ.js.map → chunk-E5AD46HP.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../shared/agentConversation/planImplementationPresentation.ts","../shared/agentConversation/agentPlanPromptDispatch.ts","../shared/agentConversation/approvalOptionPresentation.ts","../shared/agentConversation/promptToolDetails.ts","../shared/agentConversation/components/AgentAskUserPromptSurface.tsx","../shared/agentConversation/interactiveAnswerPayload.ts","../shared/agentConversation/components/interactivePromptPresentation.tsx","../shared/agentConversation/components/useAskUserAnswerFlow.ts","../shared/agentConversation/components/AgentInteractiveDecisionPromptSurfaces.tsx","../shared/agentConversation/components/AgentInteractivePromptSurface.tsx"],"sourcesContent":["import type { AgentConversationPromptVM } from \"./contracts/agentConversationVM\";\n\nexport const PLAN_IMPLEMENTATION_PROMPT = \"Implement the plan.\";\nexport const PLAN_IMPLEMENTATION_ACTION_IMPLEMENT = \"implement\";\nexport const PLAN_IMPLEMENTATION_ACTION_FEEDBACK = \"feedback\";\nexport const PLAN_IMPLEMENTATION_ACTION_SKIP = \"skip\";\n\nexport function planImplementationPromptFromPlanTurn(\n planTurnId: string,\n title: string\n): Extract<AgentConversationPromptVM, { kind: \"plan-implementation\" }> {\n return {\n kind: \"plan-implementation\",\n requestId: planTurnId,\n title\n };\n}\n\ninterface PlanTimelineItem {\n turnId?: string | null;\n occurredAtUnixMs?: number | null;\n createdAtUnixMs?: number | null;\n seq?: number | null;\n payload?: Record<string, unknown> | null;\n}\n\nfunction itemTime(item: PlanTimelineItem): number {\n return item.occurredAtUnixMs ?? item.createdAtUnixMs ?? item.seq ?? 0;\n}\n\nfunction isPlanItem(item: PlanTimelineItem): boolean {\n return item.payload?.messageKind === \"plan\";\n}\n\nexport function latestPlanTurnId(\n timelineItems: readonly PlanTimelineItem[]\n): string | null {\n let latestTurnId: string | null = null;\n let latestTime = Number.NEGATIVE_INFINITY;\n for (const item of timelineItems) {\n const turnId = item.turnId?.trim();\n if (!turnId) continue;\n const time = itemTime(item);\n if (time >= latestTime) {\n latestTime = time;\n latestTurnId = turnId;\n }\n }\n if (!latestTurnId) return null;\n return timelineItems.some(\n (item) => item.turnId?.trim() === latestTurnId && isPlanItem(item)\n )\n ? latestTurnId\n : null;\n}\n","import {\n selectPlanDecisionForTurn,\n selectWorkspaceAgentConsumerSession,\n type AgentSessionEngine,\n type AgentSessionEngineState\n} from \"@tutti-os/agent-activity-core\";\nimport {\n PLAN_IMPLEMENTATION_ACTION_FEEDBACK,\n PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,\n PLAN_IMPLEMENTATION_ACTION_SKIP\n} from \"./planImplementationPresentation\";\n\nexport type AgentPlanPromptAction =\n | typeof PLAN_IMPLEMENTATION_ACTION_IMPLEMENT\n | typeof PLAN_IMPLEMENTATION_ACTION_FEEDBACK\n | typeof PLAN_IMPLEMENTATION_ACTION_SKIP;\n\nexport function selectAgentPlanPromptTurn(\n state: AgentSessionEngineState,\n agentSessionId: string,\n requestId: string\n) {\n const latestTurn = selectWorkspaceAgentConsumerSession(\n state,\n agentSessionId\n )?.latestTurn;\n return latestTurn?.turnId === requestId &&\n latestTurn.phase === \"settled\" &&\n latestTurn.outcome === \"completed\"\n ? latestTurn\n : null;\n}\n\nexport function dispatchAgentPlanPromptAction(input: {\n action: AgentPlanPromptAction;\n agentSessionId: string;\n engine: AgentSessionEngine;\n feedbackText?: string;\n nowUnixMs?: () => number;\n requestId: string;\n workspaceId: string;\n}): boolean {\n const turn = selectAgentPlanPromptTurn(\n input.engine.getSnapshot(),\n input.agentSessionId,\n input.requestId\n );\n if (!turn) return false;\n const scopeKey = [\n \"plan-implementation\",\n input.workspaceId,\n input.agentSessionId,\n turn.turnId\n ].join(\":\");\n if (input.action === PLAN_IMPLEMENTATION_ACTION_IMPLEMENT) {\n const existing = selectPlanDecisionForTurn(\n input.engine.getSnapshot(),\n input.agentSessionId,\n turn.turnId\n );\n input.engine.dispatch({\n type: \"plan/decisionRequested\",\n action: \"implement\",\n agentSessionId: input.agentSessionId,\n commandId: `plan-decision:${scopeKey}`,\n idempotencyKey: scopeKey,\n promptKind: \"plan-implementation\",\n requestId: input.requestId,\n turnId: turn.turnId,\n workspaceId: input.workspaceId,\n ...(existing?.status === \"failed\" || existing?.status === \"unknown\"\n ? { retry: true }\n : {}),\n timeoutMs: 30_000\n });\n return true;\n }\n if (input.action === PLAN_IMPLEMENTATION_ACTION_SKIP) {\n input.engine.dispatch({\n type: \"plan/skipped\",\n agentSessionId: input.agentSessionId,\n requestId: input.requestId,\n turnId: turn.turnId,\n workspaceId: input.workspaceId\n });\n return true;\n }\n const text = input.feedbackText?.trim() ?? \"\";\n if (!text) return false;\n const requestedAtUnixMs = (input.nowUnixMs ?? Date.now)();\n input.engine.dispatch({\n type: \"plan/feedbackRequested\",\n agentSessionId: input.agentSessionId,\n clientSubmitId: `${scopeKey}:feedback:${requestedAtUnixMs}`,\n content: [{ type: \"text\", text }],\n displayPrompt: text,\n expiresAtUnixMs: requestedAtUnixMs + 120_000,\n requestedAtUnixMs,\n requestId: input.requestId,\n runtimeContent: [{ type: \"text\", text }],\n turnId: turn.turnId,\n workspaceId: input.workspaceId\n });\n return true;\n}\n","import { translate } from \"../../i18n/index\";\n\nexport interface ApprovalOptionVisualPresentation {\n label: string;\n commandPrefix?: string;\n}\n\nexport function approvalOptionDisplayLabel(\n option: {\n id: string;\n kind: string;\n label: string;\n },\n intent: { feedback?: boolean } = {}\n): string {\n const idToken = normalizeApprovalOptionToken(option.id);\n const kindToken = normalizeApprovalOptionToken(option.kind);\n const label = option.label.trim();\n const specificTranslationKey = approvalOptionSpecificTranslationKey(\n idToken,\n label,\n intent\n );\n if (specificTranslationKey) {\n return translate(specificTranslationKey);\n }\n const providerLabelTranslation =\n approvalOptionProviderLabelTranslation(label);\n if (providerLabelTranslation) {\n return translate(\n providerLabelTranslation.key,\n providerLabelTranslation.params\n );\n }\n if (\n (idToken === \"allowonce\" || kindToken === \"allowonce\") &&\n isGenericAllowOnceLabel(label)\n ) {\n return translate(\"agentHost.agentGui.approvalOptions.allowOnce\");\n }\n if (isGenericAllowForSessionLabel(label)) {\n return translate(\"agentHost.agentGui.approvalOptions.allowForSession\");\n }\n if (\n (idToken === \"allowalways\" ||\n idToken === \"allowall\" ||\n kindToken === \"allowalways\") &&\n isGenericApprovalLabel(label)\n ) {\n return translate(\"agentHost.agentGui.approvalOptions.allowAlways\");\n }\n if (idToken === \"rejectalways\" || kindToken === \"rejectalways\") {\n return translate(\"agentHost.agentGui.approvalOptions.rejectAlways\");\n }\n if (\n idToken === \"rejectonce\" ||\n idToken === \"reject\" ||\n idToken === \"deny\" ||\n kindToken === \"rejectonce\" ||\n kindToken === \"reject\" ||\n kindToken === \"deny\"\n ) {\n return intent.feedback\n ? translate(\"agentHost.agentGui.approvalOptions.rejectWithFollowUp\")\n : translate(\"agentHost.agentGui.approvalOptions.rejectOnce\");\n }\n return label || option.id;\n}\n\nexport function approvalOptionVisualPresentation(\n option: {\n id: string;\n kind: string;\n label: string;\n },\n intent: { feedback?: boolean } = {}\n): ApprovalOptionVisualPresentation {\n const commandPrefix = approvalOptionCommandPrefix(option.label);\n if (commandPrefix) {\n return {\n label: translate(\n \"agentHost.agentGui.approvalOptions.allowAlwaysForCommandPrefixLead\"\n ),\n commandPrefix\n };\n }\n return {\n label: approvalOptionDisplayLabel(option, intent)\n };\n}\n\nexport function normalizeApprovalOptionToken(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"\");\n}\n\nfunction approvalOptionSpecificTranslationKey(\n token: string,\n label: string,\n intent: { feedback?: boolean } = {}\n): string | null {\n const labelToken = normalizeApprovalOptionToken(label);\n switch (token) {\n case \"approved\":\n return isGenericAllowOnceLabel(label)\n ? \"agentHost.agentGui.approvalOptions.allowOnce\"\n : null;\n case \"approvedforsession\":\n return isGenericAllowForSessionLabel(label)\n ? \"agentHost.agentGui.approvalOptions.allowForSession\"\n : null;\n case \"approvedalways\":\n return isGenericApprovalLabel(label)\n ? \"agentHost.agentGui.approvalOptions.allowAlways\"\n : null;\n case \"bypasspermissions\":\n return \"agentHost.agentGui.approvalOptions.bypassPermissions\";\n case \"auto\":\n return labelToken === \"yesanduseautomode\"\n ? \"agentHost.agentGui.approvalOptions.autoMode\"\n : null;\n case \"acceptedits\":\n return \"agentHost.agentGui.approvalOptions.acceptEdits\";\n case \"default\":\n return labelToken === \"yesandmanuallyapproveedits\"\n ? \"agentHost.agentGui.approvalOptions.manualApproval\"\n : null;\n case \"cancel\":\n return !intent.feedback && labelToken === \"cancel\"\n ? \"common.cancel\"\n : null;\n default:\n return null;\n }\n}\n\nfunction approvalOptionProviderLabelTranslation(\n label: string\n): { key: string; params: Record<string, string> } | null {\n const commandPrefix = approvalOptionCommandPrefix(label);\n if (commandPrefix) {\n return {\n key: \"agentHost.agentGui.approvalOptions.allowAlwaysForCommandPrefix\",\n params: { command: commandPrefix }\n };\n }\n\n const allowScopeMatch = label.match(/^Yes,\\s*and don't ask again for (.+)$/i);\n if (allowScopeMatch?.[1]) {\n return {\n key: \"agentHost.agentGui.approvalOptions.allowAlwaysForScope\",\n params: { scope: allowScopeMatch[1] }\n };\n }\n\n const alwaysAllowMatch = label.match(/^Always Allow\\s+(.+)$/i);\n if (alwaysAllowMatch?.[1]) {\n return {\n key: \"agentHost.agentGui.approvalOptions.alwaysAllowScope\",\n params: { scope: alwaysAllowMatch[1] }\n };\n }\n\n return null;\n}\n\nfunction approvalOptionCommandPrefix(label: string): string | null {\n const commandPrefixMatch = label.match(\n /^Yes,\\s*and don't ask again for commands that start with `([^`]+)`$/i\n );\n return commandPrefixMatch?.[1]?.trim() || null;\n}\n\nfunction isGenericApprovalLabel(label: string): boolean {\n const token = normalizeApprovalOptionToken(label);\n return (\n token === \"\" ||\n token === \"allowalways\" ||\n token === \"allowall\" ||\n token === \"alwaysallow\" ||\n token === \"allowanddontaskagain\" ||\n token === \"yesanddontaskagain\"\n );\n}\n\nfunction isGenericAllowOnceLabel(label: string): boolean {\n const token = normalizeApprovalOptionToken(label);\n return (\n token === \"\" ||\n token === \"allow\" ||\n token === \"allowonce\" ||\n token === \"approve\" ||\n token === \"approveonce\" ||\n token === \"yes\" ||\n token === \"yesproceed\" ||\n token === \"yesandproceed\"\n );\n}\n\nfunction isGenericAllowForSessionLabel(label: string): boolean {\n const token = normalizeApprovalOptionToken(label);\n return (\n token === \"allowforthissession\" ||\n token === \"allowforsession\" ||\n token === \"approveforsession\"\n );\n}\n","import { extractAgentMcpToolTarget } from \"../agentMcpToolTarget\";\n\nexport interface PromptToolDetail {\n kind: \"command\" | \"mcp\" | \"path\" | \"query\";\n value: string;\n meta?: string;\n}\n\nexport function getPromptToolDetails(\n input: Record<string, unknown> | null\n): PromptToolDetail[] {\n if (!input) {\n return [];\n }\n const mcpTarget = extractAgentMcpToolTarget({ input });\n const mcpDetails: PromptToolDetail[] = mcpTarget\n ? [\n {\n kind: \"mcp\",\n value: mcpTarget.displayName,\n ...(mcpTarget.instruction ? { meta: mcpTarget.instruction } : {})\n }\n ]\n : [];\n const detailInput = resolveToolDetailInput(input);\n const command =\n commandStringValue(detailInput.command) ??\n commandStringValue(detailInput.cmd);\n if (command) {\n return [\n ...mcpDetails,\n {\n kind: \"command\",\n value: command,\n ...(stringValue(detailInput.description)\n ? { meta: stringValue(detailInput.description) as string }\n : {})\n }\n ];\n }\n const filePath =\n stringValue(detailInput.file_path) ??\n stringValue(detailInput.filePath) ??\n stringValue(detailInput.path) ??\n stringValue(detailInput.notebook_path);\n if (filePath) {\n const lineRange = formatLineRange(detailInput);\n return [\n ...mcpDetails,\n {\n kind: \"path\",\n value: filePath,\n ...(lineRange ? { meta: lineRange } : {})\n }\n ];\n }\n const query =\n stringValue(detailInput.query) ??\n stringValue(detailInput.search_query) ??\n stringValue(detailInput.searchQuery) ??\n stringValue(detailInput.pattern);\n if (query) {\n return [\n ...mcpDetails,\n {\n kind: \"query\",\n value: query\n }\n ];\n }\n return mcpDetails;\n}\n\nexport function isPromptRequestIdTitle(value: string): boolean {\n return /^requestid\\s*:/iu.test(value.trim());\n}\n\nfunction resolveToolDetailInput(\n input: Record<string, unknown>\n): Record<string, unknown> {\n const toolCall = objectValue(input.toolCall);\n return (\n firstObjectValue(input, [\n \"command\",\n \"cmd\",\n \"file_path\",\n \"filePath\",\n \"path\",\n \"notebook_path\",\n \"query\",\n \"search_query\",\n \"searchQuery\",\n \"pattern\"\n ]) ??\n firstObjectValue(toolCall, [\n \"input\",\n \"rawInput\",\n \"raw_input\",\n \"arguments\",\n \"args\"\n ]) ??\n toolCall ??\n input\n );\n}\n\nfunction firstObjectValue(\n input: Record<string, unknown> | null,\n keys: readonly string[]\n): Record<string, unknown> | null {\n if (!input) {\n return null;\n }\n if (keys.some((key) => stringValue(input[key]))) {\n return input;\n }\n for (const key of keys) {\n const value = objectValue(input[key]);\n if (value) {\n return value;\n }\n }\n return null;\n}\n\nfunction formatLineRange(input: Record<string, unknown>): string | null {\n const start = numericValue(input.startLine) ?? numericValue(input.start_line);\n const end = numericValue(input.endLine) ?? numericValue(input.end_line);\n if (start === null || end === null) {\n return null;\n }\n return start === end ? `L${start}` : `L${start}-${end}`;\n}\n\nfunction stringValue(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction commandStringValue(value: unknown): string | null {\n if (typeof value === \"string\") {\n return stringValue(value);\n }\n if (!Array.isArray(value)) {\n return null;\n }\n const shellFlag = stringValue(value[value.length - 2]);\n const shellCommand = stringValue(value[value.length - 1]);\n if ((shellFlag === \"-c\" || shellFlag === \"-lc\") && shellCommand) {\n return shellCommand;\n }\n const parts = value.flatMap((part) => {\n const text = stringValue(part);\n return text ? [text] : [];\n });\n return parts.length > 0 ? parts.join(\" \") : null;\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction numericValue(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n","import type { JSX } from \"react\";\nimport { Button } from \"@tutti-os/ui-system\";\nimport { MessageSquareMoreIcon } from \"../../../app/renderer/components/icons/MessageSquareMoreIcon\";\nimport styles from \"../../../agent-gui/agentGuiNode/AgentGUIConversation.styles\";\nimport type { AgentConversationPromptVM } from \"../contracts/agentConversationVM\";\nimport { buildAskUserAnswerPayload } from \"../interactiveAnswerPayload\";\nimport type {\n AgentInteractivePromptSurfaceProps,\n AgentInteractivePromptVariant\n} from \"./AgentInteractivePromptSurface\";\nimport {\n interactiveOptionLabel,\n interactivePromptCardClassName,\n interactivePromptClassName,\n stripPromptTitlePunctuation\n} from \"./interactivePromptPresentation\";\nimport { useAskUserAnswerFlow } from \"./useAskUserAnswerFlow\";\n\ntype AskUserPrompt = Extract<AgentConversationPromptVM, { kind: \"ask-user\" }>;\n\ntype SharedAskUserSurfaceProps = Pick<\n AgentInteractivePromptSurfaceProps,\n \"edgeGlow\" | \"isSubmitting\" | \"labels\" | \"onSubmit\"\n> & {\n embedded?: boolean;\n prompt: AskUserPrompt;\n};\n\nexport function AgentAskUserPromptSurface({\n prompt,\n variant,\n ...props\n}: SharedAskUserSurfaceProps & {\n variant: AgentInteractivePromptVariant;\n}): JSX.Element {\n \"use memo\";\n const question = prompt.questions[0] ?? null;\n const useCompactQuickAnswer =\n variant === \"compact\" &&\n prompt.questions.length === 1 &&\n question !== null &&\n !question.multiSelect &&\n question.options.length > 0;\n\n if (useCompactQuickAnswer) {\n return (\n <CompactQuickAnswerSurface\n {...props}\n prompt={prompt}\n question={question}\n />\n );\n }\n\n return (\n <AskUserAnswerFlowSurface\n key={prompt.requestId}\n {...props}\n prompt={prompt}\n />\n );\n}\n\nfunction CompactQuickAnswerSurface({\n prompt,\n question,\n embedded = false,\n edgeGlow = false,\n isSubmitting,\n onSubmit\n}: Omit<SharedAskUserSurfaceProps, \"labels\"> & {\n question: AskUserPrompt[\"questions\"][number];\n}): JSX.Element {\n return (\n <section className={interactivePromptClassName(embedded)}>\n <div className={interactivePromptCardClassName(edgeGlow)}>\n <div className={styles.interactivePromptHeader}>\n <span className={styles.interactivePromptLead}>\n {stripPromptTitlePunctuation(question.header)}\n </span>\n </div>\n <div className={styles.interactivePromptQuestion}>\n {question.question}\n </div>\n <div className={styles.interactivePromptOptions}>\n {question.options.map((option) => (\n <button\n key={option.label}\n type=\"button\"\n className={styles.interactiveOptionButton}\n aria-label={interactiveOptionLabel(\n option.label,\n option.description\n )}\n disabled={isSubmitting}\n onClick={() =>\n onSubmit({\n requestId: prompt.requestId,\n action: \"submit\",\n payload: {\n ...buildAskUserAnswerPayload({\n [question.id]: option.label\n })\n }\n })\n }\n >\n <span className={styles.interactiveOptionTitle}>\n {option.label}\n </span>\n {option.description ? (\n <span className={styles.interactiveOptionDescription}>\n {option.description}\n </span>\n ) : null}\n </button>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nfunction AskUserAnswerFlowSurface({\n prompt,\n embedded = false,\n edgeGlow = false,\n isSubmitting,\n onSubmit,\n labels\n}: SharedAskUserSurfaceProps): JSX.Element {\n \"use memo\";\n const flow = useAskUserAnswerFlow({\n isSubmitting,\n questions: prompt.questions\n });\n const question = flow.currentQuestion;\n\n if (!question) {\n return (\n <section className={interactivePromptClassName(embedded)}>\n <div className={interactivePromptCardClassName(edgeGlow)}>\n <div\n className={`${styles.interactivePromptLead} inline-flex items-center gap-1.5`}\n >\n <MessageSquareMoreIcon\n size={15}\n active\n aria-hidden=\"true\"\n className=\"shrink-0\"\n />\n {stripPromptTitlePunctuation(labels.waitingForAnswer)}\n </div>\n </div>\n </section>\n );\n }\n\n return (\n <section className={interactivePromptClassName(embedded)}>\n <div className={interactivePromptCardClassName(edgeGlow)}>\n <div className={styles.interactivePromptHeader}>\n <span className={styles.interactivePromptLead}>\n {stripPromptTitlePunctuation(question.header)}\n </span>\n <span className={styles.interactivePromptMeta}>\n {flow.currentIndex + 1}/{prompt.questions.length}\n </span>\n </div>\n <div className={styles.interactivePromptQuestion}>\n {question.question}\n </div>\n {question.options.length > 0 ? (\n <div className={styles.interactivePromptOptions}>\n {question.options.map((option) => {\n const active = flow.selectedOptions.includes(option.label);\n return (\n <button\n key={option.label}\n type=\"button\"\n className={styles.interactiveOptionButton}\n data-active={active}\n aria-pressed={active}\n aria-label={interactiveOptionLabel(\n option.label,\n option.description\n )}\n disabled={isSubmitting}\n onClick={() => flow.toggleOption(option.label)}\n >\n <span className={styles.interactiveOptionTitle}>\n {option.label}\n </span>\n {option.description ? (\n <span className={styles.interactiveOptionDescription}>\n {option.description}\n </span>\n ) : null}\n </button>\n );\n })}\n </div>\n ) : null}\n <textarea\n value={flow.freeText}\n placeholder={labels.answerPlaceholder}\n disabled={isSubmitting}\n className={styles.interactivePromptTextarea}\n onChange={(event) => flow.setFreeText(event.currentTarget.value)}\n />\n <div className={styles.interactivePromptActions}>\n {prompt.questions.length > 1 ? (\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n disabled={isSubmitting || flow.currentIndex === 0}\n onClick={flow.goToPreviousQuestion}\n >\n {labels.previousQuestion}\n </Button>\n ) : null}\n {flow.isLastQuestion ? (\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n disabled={isSubmitting || !flow.allQuestionsAnswered}\n onClick={() =>\n onSubmit({\n requestId: prompt.requestId,\n action: \"submit\",\n payload: { ...flow.answerPayload }\n })\n }\n >\n {labels.submitAnswers}\n </Button>\n ) : (\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n disabled={isSubmitting || !flow.currentQuestionAnswered}\n onClick={flow.goToNextQuestion}\n >\n {labels.nextQuestion}\n </Button>\n )}\n </div>\n </div>\n </section>\n );\n}\n","/**\n * Wire contract for the answer submitted back to an interactive `ask-user`\n * prompt. This payload crosses the renderer → daemon boundary (it rides\n * `submitInteractive({ action: \"submit\", payload })`), so its shape is a\n * cross-language contract, not an internal detail.\n *\n * Consumers that MUST stay in sync with this shape:\n * - daemon (Go) standard ACP adapter — forwards `answersByQuestionId` verbatim.\n * - daemon (Go) codex app-server adapter — `appServerUserInputAnswers` reshapes\n * `answersByQuestionId` into codex's `requestUserInput` response.\n *\n * Field semantics:\n * - `answersByQuestionId` is the canonical, machine-readable answer: question id\n * → the chosen option label(s) / free text. This is what providers consume.\n * - `answers` is a flat, human-readable display list (one entry per answered\n * question, multi-select joined). Never the source of truth for routing.\n *\n * Always build this with {@link buildAskUserAnswerPayload} so producers can't\n * drift on field names or which field is authoritative.\n */\nexport interface InteractiveAnswerPayload {\n answers: string[];\n answersByQuestionId: Record<string, string | string[]>;\n}\n\n/**\n * Builds the canonical interactive answer payload from the per-question answers.\n * `answers` is derived from `answersByQuestionId` (multi-select values joined)\n * so the two fields can never disagree.\n */\nexport function buildAskUserAnswerPayload(\n answersByQuestionId: Record<string, string | string[]>\n): InteractiveAnswerPayload {\n const answers = Object.values(answersByQuestionId).map((value) =>\n Array.isArray(value) ? value.join(\", \") : value\n );\n return { answers, answersByQuestionId };\n}\n","import type { JSX } from \"react\";\nimport { translate } from \"../../../i18n/index\";\nimport {\n Spinner,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger\n} from \"@tutti-os/ui-system\";\nimport { normalizeApprovalOptionToken } from \"../approvalOptionPresentation\";\nimport {\n getPromptToolDetails,\n type PromptToolDetail\n} from \"../promptToolDetails\";\nimport styles from \"../../../agent-gui/agentGuiNode/AgentGUIConversation.styles\";\nconst COMMAND_TOOLTIP_DELAY_MS = 1000;\n\nexport function isEnterLikeKey(event: KeyboardEvent): boolean {\n return (\n event.key === \"Enter\" ||\n event.code === \"Enter\" ||\n event.code === \"NumpadEnter\"\n );\n}\n\nexport function isEditableKeyboardTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n const tagName = target.tagName.toLowerCase();\n return (\n tagName === \"input\" ||\n tagName === \"textarea\" ||\n tagName === \"select\" ||\n target.isContentEditable\n );\n}\n\nexport function approvalOptionShortcutLabel(\n optionIndex: number,\n isDarwin: boolean\n): string | null {\n if (optionIndex === 0) {\n return translate(\"agentHost.agentGui.shortcutEnter\");\n }\n if (optionIndex === 1) {\n return isDarwin\n ? translate(\"agentHost.agentGui.shortcutCmdEnter\")\n : translate(\"agentHost.agentGui.shortcutCtrEnter\");\n }\n return null;\n}\n\nexport function isDarwinPlatform(platform: string | undefined): boolean {\n if (platform) {\n return platform === \"darwin\";\n }\n if (typeof navigator === \"undefined\") {\n return false;\n }\n const userAgentPlatform =\n \"userAgentData\" in navigator\n ? (\n navigator as Navigator & {\n userAgentData?: { platform?: string };\n }\n ).userAgentData?.platform\n : undefined;\n const navigatorPlatform = userAgentPlatform ?? navigator.platform ?? \"\";\n return /mac/i.test(navigatorPlatform);\n}\n\nexport function InteractiveOptionSpinner(): JSX.Element {\n \"use memo\";\n return (\n <Spinner\n className={styles.interactiveOptionSpinner}\n testId=\"agent-interactive-option-spinner\"\n />\n );\n}\n\nexport function SendFilledIcon(): JSX.Element {\n \"use memo\";\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.74311 8.80587C2.84592 8.40096 3.14571 8.08844 3.54551 7.97033L18.5197 3.51569C18.9336 3.39383 19.3809 3.5054 19.6881 3.81262C19.9951 4.11984 20.1076 4.56798 19.9857 4.9817L15.5311 19.9559C15.413 20.3557 15.1005 20.6555 14.6956 20.7583C14.2895 20.8597 13.869 20.7438 13.5721 20.4469L10.455 15.1823C10.8585 14.6483 12.1563 12.9094 14.3475 9.96528C14.6086 9.70419 14.6382 9.31168 14.4138 9.08692C14.1891 8.86221 13.796 8.8913 13.5348 9.15252L8.31088 13.0423L3.05316 9.92799C2.7562 9.63104 2.64049 9.21071 2.74311 8.80587Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport function interactivePromptClassName(embedded: boolean): string {\n return embedded\n ? `${styles.interactivePrompt} agent-gui-conversation__interactive-prompt--embedded`\n : styles.interactivePrompt;\n}\n\nexport function interactivePromptCardClassName(edgeGlow: boolean): string {\n return edgeGlow\n ? `${styles.interactivePromptCard} agent-gui-edge-glow`\n : styles.interactivePromptCard;\n}\n\nexport interface LabeledPromptToolDetail {\n kind: PromptToolDetail[\"kind\"];\n label: string;\n value: string;\n meta?: string;\n}\n\nexport function formatToolDetails(\n input: Record<string, unknown> | null\n): LabeledPromptToolDetail[] {\n return getPromptToolDetails(input).map((detail) => ({\n kind: detail.kind,\n label: promptToolDetailLabel(detail.kind),\n value: detail.value,\n ...(detail.meta ? { meta: detail.meta } : {})\n }));\n}\n\nexport function PromptDetailValue({\n detail,\n previewMode\n}: {\n detail: LabeledPromptToolDetail;\n previewMode: boolean;\n}): JSX.Element {\n \"use memo\";\n if (detail.kind !== \"command\") {\n return (\n <span className={styles.interactiveOptionDescription}>\n {detail.value}\n </span>\n );\n }\n return (\n <CommandTextWithTooltip\n value={detail.value}\n testId=\"agent-interactive-command-detail\"\n tooltipsEnabled={!previewMode}\n />\n );\n}\n\nexport function CommandTextWithTooltip({\n value,\n testId,\n tooltipsEnabled = true\n}: {\n value: string;\n testId: string;\n tooltipsEnabled?: boolean;\n}): JSX.Element {\n \"use memo\";\n const content = (\n <span\n className={`${styles.interactiveOptionDescription} ${styles.interactiveOptionCommandDescription}`}\n data-agent-interactive-command-detail={\n testId === \"agent-interactive-command-detail\" ? \"true\" : undefined\n }\n data-agent-interactive-command-prefix-option={\n testId === \"agent-interactive-command-prefix-option\"\n ? \"true\"\n : undefined\n }\n >\n {value}\n </span>\n );\n\n if (!tooltipsEnabled) {\n return content;\n }\n\n return (\n <TooltipProvider delayDuration={COMMAND_TOOLTIP_DELAY_MS}>\n <Tooltip>\n <TooltipTrigger asChild>{content}</TooltipTrigger>\n <TooltipContent className={styles.interactiveOptionCommandTooltip}>\n {value}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nexport function promptToolDetailLabel(kind: PromptToolDetail[\"kind\"]): string {\n switch (kind) {\n case \"command\":\n return translate(\"agentHost.agentTool.details.command\");\n case \"mcp\":\n return translate(\"agentHost.agentTool.details.mcp\");\n case \"path\":\n return translate(\"agentHost.agentTool.details.path\");\n case \"query\":\n return translate(\"agentHost.agentTool.details.query\");\n }\n}\n\nexport function isApprovalFeedbackOption(option: {\n id: string;\n kind: string;\n}): boolean {\n return (\n isDenyApprovalOptionToken(option.id) ||\n isDenyApprovalOptionToken(option.kind)\n );\n}\n\nexport function approvalFeedbackOptionId(\n options: readonly { id: string; kind: string }[]\n): string | null {\n const explicitFeedbackOption = options.find((option) =>\n isExplicitFeedbackDenyApprovalOption(option)\n );\n if (explicitFeedbackOption) {\n return explicitFeedbackOption.id;\n }\n return options.find(isApprovalFeedbackOption)?.id ?? null;\n}\n\nexport function isExplicitFeedbackDenyApprovalOption(option: {\n id: string;\n kind: string;\n}): boolean {\n for (const value of [option.id, option.kind]) {\n switch (normalizeApprovalOptionToken(value ?? \"\")) {\n case \"abort\":\n case \"cancel\":\n case \"cancelled\":\n case \"canceled\":\n case \"denywithfeedback\":\n case \"rejectwithfeedback\":\n return true;\n default:\n break;\n }\n }\n return false;\n}\n\nexport function isDenyApprovalOptionToken(\n value: string | null | undefined\n): boolean {\n switch (normalizeApprovalOptionToken(value ?? \"\")) {\n case \"abort\":\n case \"cancel\":\n case \"cancelled\":\n case \"canceled\":\n case \"deny\":\n case \"denied\":\n case \"reject\":\n case \"rejected\":\n case \"rejectonce\":\n case \"disallow\":\n case \"decline\":\n case \"declined\":\n case \"no\":\n return true;\n default:\n return false;\n }\n}\n\nexport function stripPromptTitlePunctuation(value: string): string {\n return value.trim().replace(/[.。]+$/u, \"\");\n}\n\nexport function interactiveOptionLabel(\n label: string,\n description: string | null | undefined\n): string {\n const trimmedDescription = description?.trim();\n return trimmedDescription ? `${label} ${trimmedDescription}` : label;\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport type { AgentAskUserQuestionVM } from \"../contracts/agentAskUserQuestionItemVM\";\nimport {\n buildAskUserAnswerPayload,\n type InteractiveAnswerPayload\n} from \"../interactiveAnswerPayload\";\n\nexport interface AskUserAnswerFlow {\n allQuestionsAnswered: boolean;\n answerPayload: InteractiveAnswerPayload;\n currentIndex: number;\n currentQuestion: AgentAskUserQuestionVM | null;\n currentQuestionAnswered: boolean;\n freeText: string;\n isLastQuestion: boolean;\n selectedOptions: string[];\n goToNextQuestion: () => void;\n goToPreviousQuestion: () => void;\n setFreeText: (value: string) => void;\n toggleOption: (optionLabel: string) => void;\n}\n\nfunction readOwnValue<T>(\n values: Record<string, T>,\n key: string,\n fallback: T\n): T {\n return Object.prototype.hasOwnProperty.call(values, key)\n ? values[key]!\n : fallback;\n}\n\nfunction writeOwnValue<T>(\n values: Record<string, T>,\n key: string,\n value: T\n): void {\n Object.defineProperty(values, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n}\n\nexport function useAskUserAnswerFlow({\n isSubmitting,\n questions\n}: {\n isSubmitting: boolean;\n questions: AgentAskUserQuestionVM[];\n}): AskUserAnswerFlow {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [selectedByQuestionId, setSelectedByQuestionId] = useState<\n Record<string, string[]>\n >({});\n const [freeTextByQuestionId, setFreeTextByQuestionId] = useState<\n Record<string, string>\n >({});\n\n const currentQuestion = questions[currentIndex] ?? null;\n const selectedOptions = currentQuestion\n ? readOwnValue(selectedByQuestionId, currentQuestion.id, [])\n : [];\n const freeText = currentQuestion\n ? readOwnValue(freeTextByQuestionId, currentQuestion.id, \"\")\n : \"\";\n const currentQuestionAnswered =\n currentQuestion !== null &&\n (selectedOptions.length > 0 || freeText.trim() !== \"\");\n const isLastQuestion = currentIndex >= questions.length - 1;\n\n const answerPayload = useMemo(() => {\n const answersByQuestionId: Record<string, string | string[]> = {};\n for (const question of questions) {\n const selected = readOwnValue(selectedByQuestionId, question.id, []);\n const customAnswer = readOwnValue(\n freeTextByQuestionId,\n question.id,\n \"\"\n ).trim();\n if (question.multiSelect) {\n const answers = customAnswer ? [...selected, customAnswer] : selected;\n if (answers.length > 0) {\n writeOwnValue(answersByQuestionId, question.id, answers);\n }\n continue;\n }\n const answer = customAnswer || selected[0];\n if (answer) {\n writeOwnValue(answersByQuestionId, question.id, answer);\n }\n }\n return buildAskUserAnswerPayload(answersByQuestionId);\n }, [freeTextByQuestionId, questions, selectedByQuestionId]);\n\n const allQuestionsAnswered =\n questions.length > 0 &&\n questions.every((question) =>\n Object.prototype.hasOwnProperty.call(\n answerPayload.answersByQuestionId,\n question.id\n )\n );\n\n const toggleOption = useCallback(\n (optionLabel: string) => {\n if (isSubmitting || !currentQuestion) return;\n setSelectedByQuestionId((current) => {\n const existing = readOwnValue(current, currentQuestion.id, []);\n const next = currentQuestion.multiSelect\n ? existing.includes(optionLabel)\n ? existing.filter((value) => value !== optionLabel)\n : [...existing, optionLabel]\n : existing.includes(optionLabel)\n ? []\n : [optionLabel];\n const updated = { ...current };\n writeOwnValue(updated, currentQuestion.id, next);\n return updated;\n });\n },\n [currentQuestion, isSubmitting]\n );\n\n const setFreeText = useCallback(\n (value: string) => {\n if (isSubmitting || !currentQuestion) return;\n setFreeTextByQuestionId((current) => {\n const updated = { ...current };\n writeOwnValue(updated, currentQuestion.id, value);\n return updated;\n });\n },\n [currentQuestion, isSubmitting]\n );\n\n const goToPreviousQuestion = useCallback(() => {\n if (isSubmitting) return;\n setCurrentIndex((current) => Math.max(current - 1, 0));\n }, [isSubmitting]);\n\n const goToNextQuestion = useCallback(() => {\n if (isSubmitting || !currentQuestionAnswered) return;\n setCurrentIndex((current) => Math.min(current + 1, questions.length - 1));\n }, [currentQuestionAnswered, isSubmitting, questions.length]);\n\n return {\n allQuestionsAnswered,\n answerPayload,\n currentIndex,\n currentQuestion,\n currentQuestionAnswered,\n freeText,\n isLastQuestion,\n selectedOptions,\n goToNextQuestion,\n goToPreviousQuestion,\n setFreeText,\n toggleOption\n };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ShortcutBadge } from \"@tutti-os/ui-system\";\nimport {\n getOptionalAgentHostApi,\n useOptionalAgentHostApi\n} from \"../../../agentActivityHost\";\nimport {\n approvalOptionDisplayLabel,\n approvalOptionVisualPresentation\n} from \"../approvalOptionPresentation\";\nimport type { AgentConversationPromptVM } from \"../contracts/agentConversationVM\";\nimport {\n PLAN_IMPLEMENTATION_ACTION_FEEDBACK,\n PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,\n PLAN_IMPLEMENTATION_ACTION_SKIP\n} from \"../planImplementationPresentation\";\nimport type { AgentInteractivePromptSurfaceProps } from \"./AgentInteractivePromptSurface\";\nimport {\n approvalFeedbackOptionId,\n approvalOptionShortcutLabel,\n CommandTextWithTooltip,\n formatToolDetails,\n InteractiveOptionSpinner,\n interactiveOptionLabel,\n interactivePromptCardClassName,\n interactivePromptClassName,\n isDarwinPlatform,\n isEditableKeyboardTarget,\n isEnterLikeKey,\n PromptDetailValue,\n SendFilledIcon,\n stripPromptTitlePunctuation\n} from \"./interactivePromptPresentation\";\nimport styles from \"../../../agent-gui/agentGuiNode/AgentGUIConversation.styles\";\n\nexport function ApprovalPromptSurface({\n prompt,\n embedded = false,\n edgeGlow = false,\n keyboardShortcuts = true,\n previewMode = false,\n isSubmitting,\n onSubmit,\n labels\n}: AgentInteractivePromptSurfaceProps & {\n prompt: Extract<AgentConversationPromptVM, { kind: \"approval\" }>;\n embedded?: boolean;\n}) {\n \"use memo\";\n const promptDetails = useMemo(\n () => formatToolDetails(prompt.input ?? null),\n [prompt.input]\n );\n const [submittingOptionId, setSubmittingOptionId] = useState<string | null>(\n null\n );\n const [pendingFeedbackOptionId, setPendingFeedbackOptionId] = useState<\n string | null\n >(null);\n const [feedback, setFeedback] = useState(\"\");\n const feedbackTextareaRef = useRef<HTMLTextAreaElement | null>(null);\n const agentHostApi = useOptionalAgentHostApi() ?? getOptionalAgentHostApi();\n const isDarwin = isDarwinPlatform(agentHostApi?.meta?.platform);\n const feedbackOptionId = useMemo(\n () => approvalFeedbackOptionId(prompt.options),\n [prompt.options]\n );\n const feedbackValue = feedback.trim();\n\n useEffect(() => {\n setSubmittingOptionId(null);\n setPendingFeedbackOptionId(null);\n setFeedback(\"\");\n }, [prompt.requestId]);\n\n useEffect(() => {\n if (!isSubmitting) {\n setSubmittingOptionId(null);\n }\n }, [isSubmitting]);\n\n useEffect(() => {\n if (pendingFeedbackOptionId !== null) {\n feedbackTextareaRef.current?.focus();\n }\n }, [pendingFeedbackOptionId]);\n\n const submitOption = useCallback(\n (optionId: string) => {\n const feedbackOption = feedbackOptionId === optionId;\n if (feedbackOption && pendingFeedbackOptionId !== optionId) {\n setFeedback(\"\");\n setPendingFeedbackOptionId(optionId);\n return;\n }\n setSubmittingOptionId(optionId);\n onSubmit({\n requestId: prompt.requestId,\n ...(feedbackOption ? { action: \"deny\" } : {}),\n optionId,\n ...(feedbackOption && feedbackValue\n ? { payload: { denyMessage: feedbackValue } }\n : {})\n });\n },\n [\n feedbackOptionId,\n feedbackValue,\n onSubmit,\n pendingFeedbackOptionId,\n prompt.requestId\n ]\n );\n\n useEffect(() => {\n if (\n !keyboardShortcuts ||\n isSubmitting ||\n submittingOptionId !== null ||\n prompt.options.length === 0\n ) {\n return undefined;\n }\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (\n !isEnterLikeKey(event) ||\n isEditableKeyboardTarget(event.target) ||\n event.isComposing ||\n event.altKey ||\n event.shiftKey\n ) {\n return;\n }\n const optionIndex = event.metaKey || event.ctrlKey ? 1 : 0;\n const option = prompt.options[optionIndex];\n if (!option) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n submitOption(option.id);\n };\n\n window.addEventListener(\"keydown\", handleKeyDown, true);\n return () => window.removeEventListener(\"keydown\", handleKeyDown, true);\n }, [\n isSubmitting,\n keyboardShortcuts,\n prompt.options,\n submitOption,\n submittingOptionId\n ]);\n\n return (\n <section className={interactivePromptClassName(embedded)}>\n <div className={interactivePromptCardClassName(edgeGlow)}>\n <div className={styles.interactivePromptLead}>\n {stripPromptTitlePunctuation(labels.approvalLead)}\n </div>\n {promptDetails.length > 0 ? (\n <div className={styles.interactivePromptOptions}>\n {promptDetails.map((detail) => (\n <div\n key={`${detail.label}:${detail.value}`}\n className={styles.interactiveOptionDisplay}\n >\n <span className={styles.interactiveOptionTitle}>\n {detail.label}\n </span>\n <PromptDetailValue detail={detail} previewMode={previewMode} />\n {detail.meta ? (\n <span className={styles.interactiveOptionDescription}>\n {detail.meta}\n </span>\n ) : null}\n </div>\n ))}\n </div>\n ) : null}\n <div className={styles.interactivePromptOptions}>\n {prompt.options.map((option, optionIndex) => {\n const showSpinner = submittingOptionId === option.id;\n const optionSupportsFeedback = feedbackOptionId === option.id;\n const optionLabel = approvalOptionDisplayLabel(option, {\n feedback: optionSupportsFeedback\n });\n const optionPresentation = approvalOptionVisualPresentation(\n option,\n { feedback: optionSupportsFeedback }\n );\n const shortcutLabel = approvalOptionShortcutLabel(\n optionIndex,\n isDarwin\n );\n const showFeedbackComposer = pendingFeedbackOptionId === option.id;\n if (showFeedbackComposer) {\n return (\n <div\n key={option.id}\n className={styles.interactiveFeedbackComposer}\n >\n <textarea\n ref={feedbackTextareaRef}\n value={feedback}\n placeholder={labels.feedbackPlaceholder}\n disabled={isSubmitting || submittingOptionId !== null}\n className={styles.interactivePromptTextarea}\n aria-label={interactiveOptionLabel(\n optionLabel,\n option.description\n )}\n onChange={(event) => setFeedback(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (\n !keyboardShortcuts ||\n event.key !== \"Enter\" ||\n (!event.metaKey && !event.ctrlKey) ||\n event.nativeEvent.isComposing\n ) {\n return;\n }\n event.preventDefault();\n if (!feedbackValue) {\n feedbackTextareaRef.current?.focus();\n return;\n }\n submitOption(option.id);\n }}\n />\n <button\n type=\"button\"\n className={styles.interactiveFeedbackSendButton}\n disabled={\n isSubmitting ||\n submittingOptionId !== null ||\n !feedbackValue\n }\n aria-label={labels.sendFeedback}\n title={labels.sendFeedback}\n aria-busy={showSpinner}\n onClick={() => {\n if (!feedbackValue) {\n feedbackTextareaRef.current?.focus();\n return;\n }\n submitOption(option.id);\n }}\n >\n {showSpinner ? (\n <InteractiveOptionSpinner />\n ) : (\n <SendFilledIcon />\n )}\n </button>\n </div>\n );\n }\n return (\n <button\n key={option.id}\n type=\"button\"\n className={styles.interactiveOptionButton}\n aria-label={interactiveOptionLabel(\n optionLabel,\n option.description\n )}\n disabled={isSubmitting || submittingOptionId !== null}\n onClick={() => submitOption(option.id)}\n >\n <span className={styles.interactiveOptionTitle}>\n {optionPresentation.label}\n </span>\n {optionPresentation.commandPrefix ? (\n <CommandTextWithTooltip\n value={optionPresentation.commandPrefix}\n testId=\"agent-interactive-command-prefix-option\"\n tooltipsEnabled={!previewMode}\n />\n ) : null}\n {option.description ? (\n <span className={styles.interactiveOptionDescription}>\n {option.description}\n </span>\n ) : null}\n {keyboardShortcuts && shortcutLabel && !showSpinner ? (\n <ShortcutBadge\n className={styles.interactiveOptionShortcut}\n aria-hidden=\"true\"\n >\n {shortcutLabel}\n </ShortcutBadge>\n ) : null}\n {showSpinner ? <InteractiveOptionSpinner /> : null}\n </button>\n );\n })}\n </div>\n </div>\n </section>\n );\n}\n\nexport function ExitPlanPromptSurface({\n prompt,\n variant = \"full\",\n embedded = false,\n edgeGlow = false,\n isSubmitting,\n onSubmit,\n labels\n}: AgentInteractivePromptSurfaceProps & {\n prompt: Extract<AgentConversationPromptVM, { kind: \"exit-plan\" }>;\n embedded?: boolean;\n}) {\n \"use memo\";\n const [feedback, setFeedback] = useState(\"\");\n // Compact (message-center deck): only the permission-mode decision buttons are\n // offered; refining / staying in plan is deferred to the conversation.\n const showFeedbackFooter = variant !== \"compact\";\n const [submittingOptionId, setSubmittingOptionId] = useState<string | null>(\n null\n );\n const trimmed = feedback.trim();\n const continueLabel =\n trimmed === \"\" ? labels.stayInPlan : labels.sendFeedback;\n // Render the permission modes the runtime actually offered (\"Yes, and ...\")\n // so newly added modes (e.g. \"auto\") appear automatically. Localized\n // label/description are looked up by option id, falling back to the runtime's\n // own label for ids we don't have copy for. Only when the runtime sent no\n // options (Codex plan / legacy exitplanmode) do we use the curated defaults.\n const modes =\n prompt.options.length > 0\n ? prompt.options.map((option) => {\n const known = labels.planModes.find((mode) => mode.id === option.id);\n return {\n id: option.id,\n label: known?.label ?? option.label,\n description: known?.description ?? option.description ?? \"\"\n };\n })\n : labels.planModes;\n\n useEffect(() => {\n setSubmittingOptionId(null);\n }, [prompt.requestId]);\n\n useEffect(() => {\n if (!isSubmitting) {\n setSubmittingOptionId(null);\n }\n }, [isSubmitting]);\n\n return (\n <section className={interactivePromptClassName(embedded)}>\n <div className={interactivePromptCardClassName(edgeGlow)}>\n <div className={styles.interactivePromptLead}>\n {stripPromptTitlePunctuation(labels.planLead)}\n </div>\n <div className={styles.interactivePromptOptions}>\n {modes.map((mode) => {\n const showSpinner = submittingOptionId === mode.id;\n return (\n <button\n key={mode.id}\n type=\"button\"\n className={styles.interactiveOptionButton}\n aria-label={interactiveOptionLabel(\n mode.label,\n mode.description\n )}\n disabled={isSubmitting || submittingOptionId !== null}\n onClick={() => {\n setSubmittingOptionId(mode.id);\n onSubmit({\n requestId: prompt.requestId,\n action: \"allow\",\n optionId: mode.id\n });\n }}\n >\n <span className={styles.interactiveOptionTitle}>\n {mode.label}\n </span>\n <span className={styles.interactiveOptionDescription}>\n {mode.description}\n </span>\n {showSpinner ? <InteractiveOptionSpinner /> : null}\n </button>\n );\n })}\n </div>\n {showFeedbackFooter ? (\n <div className={styles.interactivePromptFooter}>\n <textarea\n value={feedback}\n placeholder={labels.feedbackPlaceholder}\n disabled={isSubmitting}\n className={styles.interactivePromptTextarea}\n onChange={(event) => setFeedback(event.currentTarget.value)}\n />\n <div className={styles.interactivePromptActions}>\n <button\n type=\"button\"\n disabled={isSubmitting}\n onClick={() =>\n onSubmit({\n requestId: prompt.requestId,\n // The runtime models exit-plan as an approval that requires\n // an option id, so \"keep planning\" submits its `plan` option\n // id (when present) rather than a bare deny. `action: deny`\n // is kept so the controller doesn't flip plan mode off.\n action: \"deny\",\n ...(prompt.keepPlanningOptionId\n ? { optionId: prompt.keepPlanningOptionId }\n : {}),\n payload: trimmed ? { denyMessage: trimmed } : undefined\n })\n }\n >\n {continueLabel}\n </button>\n </div>\n </div>\n ) : (\n // Compact (deck): no textarea, but keep declining reachable — the deck\n // must still let the user keep planning (refining/feedback is deferred\n // to the conversation via the card's \"open conversation\" jump).\n <div className={styles.interactivePromptActions}>\n <button\n type=\"button\"\n disabled={isSubmitting}\n onClick={() =>\n onSubmit({\n requestId: prompt.requestId,\n action: \"deny\",\n ...(prompt.keepPlanningOptionId\n ? { optionId: prompt.keepPlanningOptionId }\n : {})\n })\n }\n >\n {labels.stayInPlan}\n </button>\n </div>\n )}\n </div>\n </section>\n );\n}\n\n// Codex plan-mode \"implement this plan?\" decision. No server request; actions\n// are routed by the consumer (controller inline, desktop chrome in the message\n// center) keyed on the action id rather than a server submitInteractive.\nexport function PlanImplementationSurface({\n prompt,\n variant = \"full\",\n embedded = false,\n edgeGlow = false,\n isSubmitting,\n onSubmit,\n labels\n}: AgentInteractivePromptSurfaceProps & {\n prompt: Extract<AgentConversationPromptVM, { kind: \"plan-implementation\" }>;\n embedded?: boolean;\n}) {\n \"use memo\";\n const [feedback, setFeedback] = useState(\"\");\n const trimmed = feedback.trim();\n const continueLabel =\n trimmed === \"\"\n ? labels.planImplementationSkip\n : labels.planImplementationSend;\n // Compact (message-center deck): only the \"implement\" decision is offered.\n // Refining or staying in plan mode is deferred to the conversation, reachable\n // via the card's \"open conversation\" jump.\n const showFeedbackFooter = variant !== \"compact\";\n\n return (\n <section className={interactivePromptClassName(embedded)}>\n <div className={interactivePromptCardClassName(edgeGlow)}>\n <div className={styles.interactivePromptLead}>\n {stripPromptTitlePunctuation(labels.planImplementationLead)}\n </div>\n <div className={styles.interactivePromptOptions}>\n <button\n type=\"button\"\n className={styles.interactiveOptionButton}\n data-testid=\"agent-plan-implementation-implement\"\n disabled={isSubmitting}\n onClick={() =>\n onSubmit({\n requestId: prompt.requestId,\n action: PLAN_IMPLEMENTATION_ACTION_IMPLEMENT\n })\n }\n >\n <span className={styles.interactiveOptionTitle}>\n {labels.planImplementationConfirm}\n </span>\n </button>\n </div>\n {showFeedbackFooter ? (\n <div className={styles.interactivePromptFooter}>\n <textarea\n value={feedback}\n placeholder={labels.planImplementationFeedbackPlaceholder}\n disabled={isSubmitting}\n className={styles.interactivePromptTextarea}\n data-testid=\"agent-plan-implementation-feedback\"\n onChange={(event) => setFeedback(event.currentTarget.value)}\n />\n <div className={styles.interactivePromptActions}>\n <button\n type=\"button\"\n data-testid=\"agent-plan-implementation-continue\"\n disabled={isSubmitting}\n onClick={() =>\n onSubmit({\n requestId: prompt.requestId,\n action:\n trimmed === \"\"\n ? PLAN_IMPLEMENTATION_ACTION_SKIP\n : PLAN_IMPLEMENTATION_ACTION_FEEDBACK,\n payload: trimmed ? { text: trimmed } : undefined\n })\n }\n >\n {continueLabel}\n </button>\n </div>\n </div>\n ) : null}\n </div>\n </section>\n );\n}\n","import type { JSX } from \"react\";\nimport type { AgentConversationPromptVM } from \"../contracts/agentConversationVM\";\nimport { AgentAskUserPromptSurface } from \"./AgentAskUserPromptSurface\";\nimport {\n ApprovalPromptSurface,\n ExitPlanPromptSurface,\n PlanImplementationSurface\n} from \"./AgentInteractiveDecisionPromptSurfaces\";\n\n/**\n * Where the prompt is rendered, which sets its interaction budget:\n * - \"full\" (conversation / composer): the user is focused here, so every action\n * is shown — primary decisions plus rich follow-ups (feedback textareas,\n * multi-step wizards, \"stay in plan\").\n * - \"compact\" (message-center attention deck): a glanceable needs-attention card\n * across many sessions. Ask-user prompts retain the full answer flow in a\n * denser layout; other prompt kinds may intentionally limit secondary actions.\n */\nexport type AgentInteractivePromptVariant = \"full\" | \"compact\";\n\nexport interface AgentInteractivePromptSurfaceProps {\n prompt: AgentConversationPromptVM;\n variant?: AgentInteractivePromptVariant;\n edgeGlow?: boolean;\n keyboardShortcuts?: boolean;\n previewMode?: boolean;\n isSubmitting: boolean;\n onSubmit: (input: {\n requestId: string;\n action?: string;\n optionId?: string;\n payload?: Record<string, unknown>;\n }) => void;\n labels: {\n approvalLead: string;\n planLead: string;\n planModes: Array<{ id: string; label: string; description: string }>;\n stayInPlan: string;\n sendFeedback: string;\n feedbackPlaceholder: string;\n previousQuestion: string;\n nextQuestion: string;\n submitAnswers: string;\n answerPlaceholder: string;\n waitingForAnswer: string;\n planImplementationLead: string;\n planImplementationConfirm: string;\n planImplementationFeedbackPlaceholder: string;\n planImplementationSend: string;\n planImplementationSkip: string;\n };\n}\n\nexport function AgentInteractivePromptSurface({\n prompt,\n variant = \"full\",\n edgeGlow = false,\n embedded = false,\n keyboardShortcuts = true,\n previewMode = false,\n isSubmitting,\n onSubmit,\n labels\n}: AgentInteractivePromptSurfaceProps & {\n embedded?: boolean;\n}): JSX.Element | null {\n \"use memo\";\n\n if (prompt.kind === \"approval\") {\n return (\n <ApprovalPromptSurface\n prompt={prompt}\n embedded={embedded}\n edgeGlow={edgeGlow}\n keyboardShortcuts={keyboardShortcuts}\n previewMode={previewMode}\n isSubmitting={isSubmitting}\n onSubmit={onSubmit}\n labels={labels}\n />\n );\n }\n if (prompt.kind === \"exit-plan\") {\n return (\n <ExitPlanPromptSurface\n prompt={prompt}\n variant={variant}\n embedded={embedded}\n edgeGlow={edgeGlow}\n previewMode={previewMode}\n isSubmitting={isSubmitting}\n onSubmit={onSubmit}\n labels={labels}\n />\n );\n }\n if (prompt.kind === \"plan-implementation\") {\n return (\n <PlanImplementationSurface\n prompt={prompt}\n variant={variant}\n embedded={embedded}\n edgeGlow={edgeGlow}\n previewMode={previewMode}\n isSubmitting={isSubmitting}\n onSubmit={onSubmit}\n labels={labels}\n />\n );\n }\n return (\n <AgentAskUserPromptSurface\n key={prompt.requestId}\n prompt={prompt}\n variant={variant}\n embedded={embedded}\n edgeGlow={edgeGlow}\n isSubmitting={isSubmitting}\n onSubmit={onSubmit}\n labels={labels}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAEO,IAAM,6BAA6B;AACnC,IAAM,uCAAuC;AAC7C,IAAM,sCAAsC;AAC5C,IAAM,kCAAkC;AAExC,SAAS,qCACd,YACA,OACqE;AACrE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX;AAAA,EACF;AACF;AAUA,SAAS,SAAS,MAAgC;AAChD,SAAO,KAAK,oBAAoB,KAAK,mBAAmB,KAAK,OAAO;AACtE;AAEA,SAAS,WAAW,MAAiC;AACnD,SAAO,KAAK,SAAS,gBAAgB;AACvC;AAEO,SAAS,iBACd,eACe;AACf,MAAI,eAA8B;AAClC,MAAI,aAAa,OAAO;AACxB,aAAW,QAAQ,eAAe;AAChC,UAAM,SAAS,KAAK,QAAQ,KAAK;AACjC,QAAI,CAAC,OAAQ;AACb,UAAM,OAAO,SAAS,IAAI;AAC1B,QAAI,QAAQ,YAAY;AACtB,mBAAa;AACb,qBAAe;AAAA,IACjB;AAAA,EACF;AACA,MAAI,CAAC,aAAc,QAAO;AAC1B,SAAO,cAAc;AAAA,IACnB,CAAC,SAAS,KAAK,QAAQ,KAAK,MAAM,gBAAgB,WAAW,IAAI;AAAA,EACnE,IACI,eACA;AACN;;;ACtDA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAYA,SAAS,0BACd,OACA,gBACA,WACA;AACA,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,EACF,GAAG;AACH,SAAO,YAAY,WAAW,aAC5B,WAAW,UAAU,aACrB,WAAW,YAAY,cACrB,aACA;AACN;AAEO,SAAS,8BAA8B,OAQlC;AACV,QAAM,OAAO;AAAA,IACX,MAAM,OAAO,YAAY;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACA,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,WAAW;AAAA,IACf;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,EACP,EAAE,KAAK,GAAG;AACV,MAAI,MAAM,WAAW,sCAAsC;AACzD,UAAM,WAAW;AAAA,MACf,MAAM,OAAO,YAAY;AAAA,MACzB,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AACA,UAAM,OAAO,SAAS;AAAA,MACpB,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,gBAAgB,MAAM;AAAA,MACtB,WAAW,iBAAiB,QAAQ;AAAA,MACpC,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,WAAW,MAAM;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,aAAa,MAAM;AAAA,MACnB,GAAI,UAAU,WAAW,YAAY,UAAU,WAAW,YACtD,EAAE,OAAO,KAAK,IACd,CAAC;AAAA,MACL,WAAW;AAAA,IACb,CAAC;AACD,WAAO;AAAA,EACT;AACA,MAAI,MAAM,WAAW,iCAAiC;AACpD,UAAM,OAAO,SAAS;AAAA,MACpB,MAAM;AAAA,MACN,gBAAgB,MAAM;AAAA,MACtB,WAAW,MAAM;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,aAAa,MAAM;AAAA,IACrB,CAAC;AACD,WAAO;AAAA,EACT;AACA,QAAM,OAAO,MAAM,cAAc,KAAK,KAAK;AAC3C,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,qBAAqB,MAAM,aAAa,KAAK,KAAK;AACxD,QAAM,OAAO,SAAS;AAAA,IACpB,MAAM;AAAA,IACN,gBAAgB,MAAM;AAAA,IACtB,gBAAgB,GAAG,QAAQ,aAAa,iBAAiB;AAAA,IACzD,SAAS,CAAC,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,IAChC,eAAe;AAAA,IACf,iBAAiB,oBAAoB;AAAA,IACrC;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,gBAAgB,CAAC,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,IACvC,QAAQ,KAAK;AAAA,IACb,aAAa,MAAM;AAAA,EACrB,CAAC;AACD,SAAO;AACT;;;ACjGO,SAAS,2BACd,QAKA,SAAiC,CAAC,GAC1B;AACR,QAAM,UAAU,6BAA6B,OAAO,EAAE;AACtD,QAAM,YAAY,6BAA6B,OAAO,IAAI;AAC1D,QAAM,QAAQ,OAAO,MAAM,KAAK;AAChC,QAAM,yBAAyB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,wBAAwB;AAC1B,WAAO,UAAU,sBAAsB;AAAA,EACzC;AACA,QAAM,2BACJ,uCAAuC,KAAK;AAC9C,MAAI,0BAA0B;AAC5B,WAAO;AAAA,MACL,yBAAyB;AAAA,MACzB,yBAAyB;AAAA,IAC3B;AAAA,EACF;AACA,OACG,YAAY,eAAe,cAAc,gBAC1C,wBAAwB,KAAK,GAC7B;AACA,WAAO,UAAU,8CAA8C;AAAA,EACjE;AACA,MAAI,8BAA8B,KAAK,GAAG;AACxC,WAAO,UAAU,oDAAoD;AAAA,EACvE;AACA,OACG,YAAY,iBACX,YAAY,cACZ,cAAc,kBAChB,uBAAuB,KAAK,GAC5B;AACA,WAAO,UAAU,gDAAgD;AAAA,EACnE;AACA,MAAI,YAAY,kBAAkB,cAAc,gBAAgB;AAC9D,WAAO,UAAU,iDAAiD;AAAA,EACpE;AACA,MACE,YAAY,gBACZ,YAAY,YACZ,YAAY,UACZ,cAAc,gBACd,cAAc,YACd,cAAc,QACd;AACA,WAAO,OAAO,WACV,UAAU,uDAAuD,IACjE,UAAU,+CAA+C;AAAA,EAC/D;AACA,SAAO,SAAS,OAAO;AACzB;AAEO,SAAS,iCACd,QAKA,SAAiC,CAAC,GACA;AAClC,QAAM,gBAAgB,4BAA4B,OAAO,KAAK;AAC9D,MAAI,eAAe;AACjB,WAAO;AAAA,MACL,OAAO;AAAA,QACL;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,OAAO,2BAA2B,QAAQ,MAAM;AAAA,EAClD;AACF;AAEO,SAAS,6BAA6B,OAAuB;AAClE,SAAO,MACJ,KAAK,EACL,YAAY,EACZ,QAAQ,eAAe,EAAE;AAC9B;AAEA,SAAS,qCACP,OACA,OACA,SAAiC,CAAC,GACnB;AACf,QAAM,aAAa,6BAA6B,KAAK;AACrD,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,wBAAwB,KAAK,IAChC,iDACA;AAAA,IACN,KAAK;AACH,aAAO,8BAA8B,KAAK,IACtC,uDACA;AAAA,IACN,KAAK;AACH,aAAO,uBAAuB,KAAK,IAC/B,mDACA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,eAAe,sBAClB,gDACA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,eAAe,+BAClB,sDACA;AAAA,IACN,KAAK;AACH,aAAO,CAAC,OAAO,YAAY,eAAe,WACtC,kBACA;AAAA,IACN;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,uCACP,OACwD;AACxD,QAAM,gBAAgB,4BAA4B,KAAK;AACvD,MAAI,eAAe;AACjB,WAAO;AAAA,MACL,KAAK;AAAA,MACL,QAAQ,EAAE,SAAS,cAAc;AAAA,IACnC;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM,MAAM,wCAAwC;AAC5E,MAAI,kBAAkB,CAAC,GAAG;AACxB,WAAO;AAAA,MACL,KAAK;AAAA,MACL,QAAQ,EAAE,OAAO,gBAAgB,CAAC,EAAE;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,mBAAmB,MAAM,MAAM,wBAAwB;AAC7D,MAAI,mBAAmB,CAAC,GAAG;AACzB,WAAO;AAAA,MACL,KAAK;AAAA,MACL,QAAQ,EAAE,OAAO,iBAAiB,CAAC,EAAE;AAAA,IACvC;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,4BAA4B,OAA8B;AACjE,QAAM,qBAAqB,MAAM;AAAA,IAC/B;AAAA,EACF;AACA,SAAO,qBAAqB,CAAC,GAAG,KAAK,KAAK;AAC5C;AAEA,SAAS,uBAAuB,OAAwB;AACtD,QAAM,QAAQ,6BAA6B,KAAK;AAChD,SACE,UAAU,MACV,UAAU,iBACV,UAAU,cACV,UAAU,iBACV,UAAU,0BACV,UAAU;AAEd;AAEA,SAAS,wBAAwB,OAAwB;AACvD,QAAM,QAAQ,6BAA6B,KAAK;AAChD,SACE,UAAU,MACV,UAAU,WACV,UAAU,eACV,UAAU,aACV,UAAU,iBACV,UAAU,SACV,UAAU,gBACV,UAAU;AAEd;AAEA,SAAS,8BAA8B,OAAwB;AAC7D,QAAM,QAAQ,6BAA6B,KAAK;AAChD,SACE,UAAU,yBACV,UAAU,qBACV,UAAU;AAEd;;;ACxMO,SAAS,qBACd,OACoB;AACpB,MAAI,CAAC,OAAO;AACV,WAAO,CAAC;AAAA,EACV;AACA,QAAM,YAAY,0BAA0B,EAAE,MAAM,CAAC;AACrD,QAAM,aAAiC,YACnC;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,OAAO,UAAU;AAAA,MACjB,GAAI,UAAU,cAAc,EAAE,MAAM,UAAU,YAAY,IAAI,CAAC;AAAA,IACjE;AAAA,EACF,IACA,CAAC;AACL,QAAM,cAAc,uBAAuB,KAAK;AAChD,QAAM,UACJ,mBAAmB,YAAY,OAAO,KACtC,mBAAmB,YAAY,GAAG;AACpC,MAAI,SAAS;AACX,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAI,YAAY,YAAY,WAAW,IACnC,EAAE,MAAM,YAAY,YAAY,WAAW,EAAY,IACvD,CAAC;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACA,QAAM,WACJ,YAAY,YAAY,SAAS,KACjC,YAAY,YAAY,QAAQ,KAChC,YAAY,YAAY,IAAI,KAC5B,YAAY,YAAY,aAAa;AACvC,MAAI,UAAU;AACZ,UAAM,YAAY,gBAAgB,WAAW;AAC7C,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAI,YAAY,EAAE,MAAM,UAAU,IAAI,CAAC;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AACA,QAAM,QACJ,YAAY,YAAY,KAAK,KAC7B,YAAY,YAAY,YAAY,KACpC,YAAY,YAAY,WAAW,KACnC,YAAY,YAAY,OAAO;AACjC,MAAI,OAAO;AACT,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,uBAAuB,OAAwB;AAC7D,SAAO,mBAAmB,KAAK,MAAM,KAAK,CAAC;AAC7C;AAEA,SAAS,uBACP,OACyB;AACzB,QAAM,WAAW,YAAY,MAAM,QAAQ;AAC3C,SACE,iBAAiB,OAAO;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,KACD,iBAAiB,UAAU;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,KACD,YACA;AAEJ;AAEA,SAAS,iBACP,OACA,MACgC;AAChC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,MAAI,KAAK,KAAK,CAAC,QAAQ,YAAY,MAAM,GAAG,CAAC,CAAC,GAAG;AAC/C,WAAO;AAAA,EACT;AACA,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,YAAY,MAAM,GAAG,CAAC;AACpC,QAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAA+C;AACtE,QAAM,QAAQ,aAAa,MAAM,SAAS,KAAK,aAAa,MAAM,UAAU;AAC5E,QAAM,MAAM,aAAa,MAAM,OAAO,KAAK,aAAa,MAAM,QAAQ;AACtE,MAAI,UAAU,QAAQ,QAAQ,MAAM;AAClC,WAAO;AAAA,EACT;AACA,SAAO,UAAU,MAAM,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG;AACvD;AAEA,SAAS,YAAY,OAA+B;AAClD,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AACpE;AAEA,SAAS,mBAAmB,OAA+B;AACzD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,YAAY,KAAK;AAAA,EAC1B;AACA,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,WAAO;AAAA,EACT;AACA,QAAM,YAAY,YAAY,MAAM,MAAM,SAAS,CAAC,CAAC;AACrD,QAAM,eAAe,YAAY,MAAM,MAAM,SAAS,CAAC,CAAC;AACxD,OAAK,cAAc,QAAQ,cAAc,UAAU,cAAc;AAC/D,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,MAAM,QAAQ,CAAC,SAAS;AACpC,UAAM,OAAO,YAAY,IAAI;AAC7B,WAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA,EAC1B,CAAC;AACD,SAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,IAAI;AAC9C;AAEA,SAAS,YAAY,OAAgD;AACnE,SAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC5D,QACD;AACN;AAEA,SAAS,aAAa,OAA+B;AACnD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;;;ACpKA,SAAS,cAAc;;;AC6BhB,SAAS,0BACd,qBAC0B;AAC1B,QAAM,UAAU,OAAO,OAAO,mBAAmB,EAAE;AAAA,IAAI,CAAC,UACtD,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI;AAAA,EAC5C;AACA,SAAO,EAAE,SAAS,oBAAoB;AACxC;;;ACnCA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAmEH,cA+GE,YA/GF;AA5DJ,IAAM,2BAA2B;AAE1B,SAAS,eAAe,OAA+B;AAC5D,SACE,MAAM,QAAQ,WACd,MAAM,SAAS,WACf,MAAM,SAAS;AAEnB;AAEO,SAAS,yBAAyB,QAAqC;AAC5E,MAAI,EAAE,kBAAkB,cAAc;AACpC,WAAO;AAAA,EACT;AACA,QAAM,UAAU,OAAO,QAAQ,YAAY;AAC3C,SACE,YAAY,WACZ,YAAY,cACZ,YAAY,YACZ,OAAO;AAEX;AAEO,SAAS,4BACd,aACA,UACe;AACf,MAAI,gBAAgB,GAAG;AACrB,WAAO,UAAU,kCAAkC;AAAA,EACrD;AACA,MAAI,gBAAgB,GAAG;AACrB,WAAO,WACH,UAAU,qCAAqC,IAC/C,UAAU,qCAAqC;AAAA,EACrD;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,UAAuC;AACtE,MAAI,UAAU;AACZ,WAAO,aAAa;AAAA,EACtB;AACA,MAAI,OAAO,cAAc,aAAa;AACpC,WAAO;AAAA,EACT;AACA,QAAM,oBACJ,mBAAmB,YAEb,UAGA,eAAe,WACjB;AACN,QAAM,oBAAoB,qBAAqB,UAAU,YAAY;AACrE,SAAO,OAAO,KAAK,iBAAiB;AACtC;AAEO,SAAS,2BAAwC;AACtD;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,oCAAO;AAAA,MAClB,QAAO;AAAA;AAAA,EACT;AAEJ;AAEO,SAAS,iBAA8B;AAC5C;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,2BAA2B,UAA2B;AACpE,SAAO,WACH,GAAG,oCAAO,iBAAiB,0DAC3B,oCAAO;AACb;AAEO,SAAS,+BAA+B,UAA2B;AACxE,SAAO,WACH,GAAG,oCAAO,qBAAqB,yBAC/B,oCAAO;AACb;AASO,SAAS,kBACd,OAC2B;AAC3B,SAAO,qBAAqB,KAAK,EAAE,IAAI,CAAC,YAAY;AAAA,IAClD,MAAM,OAAO;AAAA,IACb,OAAO,sBAAsB,OAAO,IAAI;AAAA,IACxC,OAAO,OAAO;AAAA,IACd,GAAI,OAAO,OAAO,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,EAC7C,EAAE;AACJ;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAGgB;AACd;AACA,MAAI,OAAO,SAAS,WAAW;AAC7B,WACE,oBAAC,UAAK,WAAW,oCAAO,8BACrB,iBAAO,OACV;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,OAAO;AAAA,MACd,QAAO;AAAA,MACP,iBAAiB,CAAC;AAAA;AAAA,EACpB;AAEJ;AAEO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAIgB;AACd;AACA,QAAM,UACJ;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,oCAAO,4BAA4B,IAAI,oCAAO,mCAAmC;AAAA,MAC/F,yCACE,WAAW,qCAAqC,SAAS;AAAA,MAE3D,gDACE,WAAW,4CACP,SACA;AAAA,MAGL;AAAA;AAAA,EACH;AAGF,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,mBAAgB,eAAe,0BAC9B,+BAAC,WACC;AAAA,wBAAC,kBAAe,SAAO,MAAE,mBAAQ;AAAA,IACjC,oBAAC,kBAAe,WAAW,oCAAO,iCAC/B,iBACH;AAAA,KACF,GACF;AAEJ;AAEO,SAAS,sBAAsB,MAAwC;AAC5E,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,UAAU,qCAAqC;AAAA,IACxD,KAAK;AACH,aAAO,UAAU,iCAAiC;AAAA,IACpD,KAAK;AACH,aAAO,UAAU,kCAAkC;AAAA,IACrD,KAAK;AACH,aAAO,UAAU,mCAAmC;AAAA,EACxD;AACF;AAEO,SAAS,yBAAyB,QAG7B;AACV,SACE,0BAA0B,OAAO,EAAE,KACnC,0BAA0B,OAAO,IAAI;AAEzC;AAEO,SAAS,yBACd,SACe;AACf,QAAM,yBAAyB,QAAQ;AAAA,IAAK,CAAC,WAC3C,qCAAqC,MAAM;AAAA,EAC7C;AACA,MAAI,wBAAwB;AAC1B,WAAO,uBAAuB;AAAA,EAChC;AACA,SAAO,QAAQ,KAAK,wBAAwB,GAAG,MAAM;AACvD;AAEO,SAAS,qCAAqC,QAGzC;AACV,aAAW,SAAS,CAAC,OAAO,IAAI,OAAO,IAAI,GAAG;AAC5C,YAAQ,6BAA6B,SAAS,EAAE,GAAG;AAAA,MACjD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT;AACE;AAAA,IACJ;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,0BACd,OACS;AACT,UAAQ,6BAA6B,SAAS,EAAE,GAAG;AAAA,IACjD,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,4BAA4B,OAAuB;AACjE,SAAO,MAAM,KAAK,EAAE,QAAQ,WAAW,EAAE;AAC3C;AAEO,SAAS,uBACd,OACA,aACQ;AACR,QAAM,qBAAqB,aAAa,KAAK;AAC7C,SAAO,qBAAqB,GAAG,KAAK,IAAI,kBAAkB,KAAK;AACjE;;;AC5RA,SAAS,aAAa,SAAS,gBAAgB;AAsB/C,SAAS,aACP,QACA,KACA,UACG;AACH,SAAO,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG,IACnD,OAAO,GAAG,IACV;AACN;AAEA,SAAS,cACP,QACA,KACA,OACM;AACN,SAAO,eAAe,QAAQ,KAAK;AAAA,IACjC,cAAc;AAAA,IACd,YAAY;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AACF,GAGsB;AACpB,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAClD,QAAM,CAAC,sBAAsB,uBAAuB,IAAI,SAEtD,CAAC,CAAC;AACJ,QAAM,CAAC,sBAAsB,uBAAuB,IAAI,SAEtD,CAAC,CAAC;AAEJ,QAAM,kBAAkB,UAAU,YAAY,KAAK;AACnD,QAAM,kBAAkB,kBACpB,aAAa,sBAAsB,gBAAgB,IAAI,CAAC,CAAC,IACzD,CAAC;AACL,QAAM,WAAW,kBACb,aAAa,sBAAsB,gBAAgB,IAAI,EAAE,IACzD;AACJ,QAAM,0BACJ,oBAAoB,SACnB,gBAAgB,SAAS,KAAK,SAAS,KAAK,MAAM;AACrD,QAAM,iBAAiB,gBAAgB,UAAU,SAAS;AAE1D,QAAM,gBAAgB,QAAQ,MAAM;AAClC,UAAM,sBAAyD,CAAC;AAChE,eAAW,YAAY,WAAW;AAChC,YAAM,WAAW,aAAa,sBAAsB,SAAS,IAAI,CAAC,CAAC;AACnE,YAAM,eAAe;AAAA,QACnB;AAAA,QACA,SAAS;AAAA,QACT;AAAA,MACF,EAAE,KAAK;AACP,UAAI,SAAS,aAAa;AACxB,cAAM,UAAU,eAAe,CAAC,GAAG,UAAU,YAAY,IAAI;AAC7D,YAAI,QAAQ,SAAS,GAAG;AACtB,wBAAc,qBAAqB,SAAS,IAAI,OAAO;AAAA,QACzD;AACA;AAAA,MACF;AACA,YAAM,SAAS,gBAAgB,SAAS,CAAC;AACzC,UAAI,QAAQ;AACV,sBAAc,qBAAqB,SAAS,IAAI,MAAM;AAAA,MACxD;AAAA,IACF;AACA,WAAO,0BAA0B,mBAAmB;AAAA,EACtD,GAAG,CAAC,sBAAsB,WAAW,oBAAoB,CAAC;AAE1D,QAAM,uBACJ,UAAU,SAAS,KACnB,UAAU;AAAA,IAAM,CAAC,aACf,OAAO,UAAU,eAAe;AAAA,MAC9B,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,EACF;AAEF,QAAM,eAAe;AAAA,IACnB,CAAC,gBAAwB;AACvB,UAAI,gBAAgB,CAAC,gBAAiB;AACtC,8BAAwB,CAAC,YAAY;AACnC,cAAM,WAAW,aAAa,SAAS,gBAAgB,IAAI,CAAC,CAAC;AAC7D,cAAM,OAAO,gBAAgB,cACzB,SAAS,SAAS,WAAW,IAC3B,SAAS,OAAO,CAAC,UAAU,UAAU,WAAW,IAChD,CAAC,GAAG,UAAU,WAAW,IAC3B,SAAS,SAAS,WAAW,IAC3B,CAAC,IACD,CAAC,WAAW;AAClB,cAAM,UAAU,EAAE,GAAG,QAAQ;AAC7B,sBAAc,SAAS,gBAAgB,IAAI,IAAI;AAC/C,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAC,iBAAiB,YAAY;AAAA,EAChC;AAEA,QAAM,cAAc;AAAA,IAClB,CAAC,UAAkB;AACjB,UAAI,gBAAgB,CAAC,gBAAiB;AACtC,8BAAwB,CAAC,YAAY;AACnC,cAAM,UAAU,EAAE,GAAG,QAAQ;AAC7B,sBAAc,SAAS,gBAAgB,IAAI,KAAK;AAChD,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAC,iBAAiB,YAAY;AAAA,EAChC;AAEA,QAAM,uBAAuB,YAAY,MAAM;AAC7C,QAAI,aAAc;AAClB,oBAAgB,CAAC,YAAY,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;AAAA,EACvD,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,mBAAmB,YAAY,MAAM;AACzC,QAAI,gBAAgB,CAAC,wBAAyB;AAC9C,oBAAgB,CAAC,YAAY,KAAK,IAAI,UAAU,GAAG,UAAU,SAAS,CAAC,CAAC;AAAA,EAC1E,GAAG,CAAC,yBAAyB,cAAc,UAAU,MAAM,CAAC;AAE5D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AHnHM,gBAAAA,MAwCM,QAAAC,aAxCN;AAlBC,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEgB;AACd;AACA,QAAM,WAAW,OAAO,UAAU,CAAC,KAAK;AACxC,QAAM,wBACJ,YAAY,aACZ,OAAO,UAAU,WAAW,KAC5B,aAAa,QACb,CAAC,SAAS,eACV,SAAS,QAAQ,SAAS;AAE5B,MAAI,uBAAuB;AACzB,WACE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MAEE,GAAG;AAAA,MACJ;AAAA;AAAA,IAFK,OAAO;AAAA,EAGd;AAEJ;AAEA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAEgB;AACd,SACE,gBAAAA,KAAC,aAAQ,WAAW,2BAA2B,QAAQ,GACrD,0BAAAC,MAAC,SAAI,WAAW,+BAA+B,QAAQ,GACrD;AAAA,oBAAAD,KAAC,SAAI,WAAW,oCAAO,yBACrB,0BAAAA,KAAC,UAAK,WAAW,oCAAO,uBACrB,sCAA4B,SAAS,MAAM,GAC9C,GACF;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAW,oCAAO,2BACpB,mBAAS,UACZ;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACpB,mBAAS,QAAQ,IAAI,CAAC,WACrB,gBAAAC;AAAA,MAAC;AAAA;AAAA,QAEC,MAAK;AAAA,QACL,WAAW,oCAAO;AAAA,QAClB,cAAY;AAAA,UACV,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,UAAU;AAAA,QACV,SAAS,MACP,SAAS;AAAA,UACP,WAAW,OAAO;AAAA,UAClB,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,GAAG,0BAA0B;AAAA,cAC3B,CAAC,SAAS,EAAE,GAAG,OAAO;AAAA,YACxB,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,QAGH;AAAA,0BAAAD,KAAC,UAAK,WAAW,oCAAO,wBACrB,iBAAO,OACV;AAAA,UACC,OAAO,cACN,gBAAAA,KAAC,UAAK,WAAW,oCAAO,8BACrB,iBAAO,aACV,IACE;AAAA;AAAA;AAAA,MA3BC,OAAO;AAAA,IA4Bd,CACD,GACH;AAAA,KACF,GACF;AAEJ;AAEA,SAAS,yBAAyB;AAAA,EAChC;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC;AACA,QAAM,OAAO,qBAAqB;AAAA,IAChC;AAAA,IACA,WAAW,OAAO;AAAA,EACpB,CAAC;AACD,QAAM,WAAW,KAAK;AAEtB,MAAI,CAAC,UAAU;AACb,WACE,gBAAAA,KAAC,aAAQ,WAAW,2BAA2B,QAAQ,GACrD,0BAAAA,KAAC,SAAI,WAAW,+BAA+B,QAAQ,GACrD,0BAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,oCAAO,qBAAqB;AAAA,QAE1C;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,MAAM;AAAA,cACN,QAAM;AAAA,cACN,eAAY;AAAA,cACZ,WAAU;AAAA;AAAA,UACZ;AAAA,UACC,4BAA4B,OAAO,gBAAgB;AAAA;AAAA;AAAA,IACtD,GACF,GACF;AAAA,EAEJ;AAEA,SACE,gBAAAA,KAAC,aAAQ,WAAW,2BAA2B,QAAQ,GACrD,0BAAAC,MAAC,SAAI,WAAW,+BAA+B,QAAQ,GACrD;AAAA,oBAAAA,MAAC,SAAI,WAAW,oCAAO,yBACrB;AAAA,sBAAAD,KAAC,UAAK,WAAW,oCAAO,uBACrB,sCAA4B,SAAS,MAAM,GAC9C;AAAA,MACA,gBAAAC,MAAC,UAAK,WAAW,oCAAO,uBACrB;AAAA,aAAK,eAAe;AAAA,QAAE;AAAA,QAAE,OAAO,UAAU;AAAA,SAC5C;AAAA,OACF;AAAA,IACA,gBAAAD,KAAC,SAAI,WAAW,oCAAO,2BACpB,mBAAS,UACZ;AAAA,IACC,SAAS,QAAQ,SAAS,IACzB,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACpB,mBAAS,QAAQ,IAAI,CAAC,WAAW;AAChC,YAAM,SAAS,KAAK,gBAAgB,SAAS,OAAO,KAAK;AACzD,aACE,gBAAAC;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,WAAW,oCAAO;AAAA,UAClB,eAAa;AAAA,UACb,gBAAc;AAAA,UACd,cAAY;AAAA,YACV,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AAAA,UACA,UAAU;AAAA,UACV,SAAS,MAAM,KAAK,aAAa,OAAO,KAAK;AAAA,UAE7C;AAAA,4BAAAD,KAAC,UAAK,WAAW,oCAAO,wBACrB,iBAAO,OACV;AAAA,YACC,OAAO,cACN,gBAAAA,KAAC,UAAK,WAAW,oCAAO,8BACrB,iBAAO,aACV,IACE;AAAA;AAAA;AAAA,QAnBC,OAAO;AAAA,MAoBd;AAAA,IAEJ,CAAC,GACH,IACE;AAAA,IACJ,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,KAAK;AAAA,QACZ,aAAa,OAAO;AAAA,QACpB,UAAU;AAAA,QACV,WAAW,oCAAO;AAAA,QAClB,UAAU,CAAC,UAAU,KAAK,YAAY,MAAM,cAAc,KAAK;AAAA;AAAA,IACjE;AAAA,IACA,gBAAAC,MAAC,SAAI,WAAW,oCAAO,0BACpB;AAAA,aAAO,UAAU,SAAS,IACzB,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,UAAU,gBAAgB,KAAK,iBAAiB;AAAA,UAChD,SAAS,KAAK;AAAA,UAEb,iBAAO;AAAA;AAAA,MACV,IACE;AAAA,MACH,KAAK,iBACJ,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,UAAU,gBAAgB,CAAC,KAAK;AAAA,UAChC,SAAS,MACP,SAAS;AAAA,YACP,WAAW,OAAO;AAAA,YAClB,QAAQ;AAAA,YACR,SAAS,EAAE,GAAG,KAAK,cAAc;AAAA,UACnC,CAAC;AAAA,UAGF,iBAAO;AAAA;AAAA,MACV,IAEA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,UAAU,gBAAgB,CAAC,KAAK;AAAA,UAChC,SAAS,KAAK;AAAA,UAEb,iBAAO;AAAA;AAAA,MACV;AAAA,OAEJ;AAAA,KACF,GACF;AAEJ;;;AI7PA,SAAS,eAAAE,cAAa,WAAW,WAAAC,UAAS,QAAQ,YAAAC,iBAAgB;AAClE,SAAS,qBAAqB;AA4JtB,gBAAAC,MAMM,QAAAC,aANN;AA1HD,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,GAGG;AACD;AACA,QAAM,gBAAgBC;AAAA,IACpB,MAAM,kBAAkB,OAAO,SAAS,IAAI;AAAA,IAC5C,CAAC,OAAO,KAAK;AAAA,EACf;AACA,QAAM,CAAC,oBAAoB,qBAAqB,IAAIC;AAAA,IAClD;AAAA,EACF;AACA,QAAM,CAAC,yBAAyB,0BAA0B,IAAIA,UAE5D,IAAI;AACN,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAS,EAAE;AAC3C,QAAM,sBAAsB,OAAmC,IAAI;AACnE,QAAM,eAAe,wBAAwB,KAAK,wBAAwB;AAC1E,QAAM,WAAW,iBAAiB,cAAc,MAAM,QAAQ;AAC9D,QAAM,mBAAmBD;AAAA,IACvB,MAAM,yBAAyB,OAAO,OAAO;AAAA,IAC7C,CAAC,OAAO,OAAO;AAAA,EACjB;AACA,QAAM,gBAAgB,SAAS,KAAK;AAEpC,YAAU,MAAM;AACd,0BAAsB,IAAI;AAC1B,+BAA2B,IAAI;AAC/B,gBAAY,EAAE;AAAA,EAChB,GAAG,CAAC,OAAO,SAAS,CAAC;AAErB,YAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB,4BAAsB,IAAI;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,YAAU,MAAM;AACd,QAAI,4BAA4B,MAAM;AACpC,0BAAoB,SAAS,MAAM;AAAA,IACrC;AAAA,EACF,GAAG,CAAC,uBAAuB,CAAC;AAE5B,QAAM,eAAeE;AAAA,IACnB,CAAC,aAAqB;AACpB,YAAM,iBAAiB,qBAAqB;AAC5C,UAAI,kBAAkB,4BAA4B,UAAU;AAC1D,oBAAY,EAAE;AACd,mCAA2B,QAAQ;AACnC;AAAA,MACF;AACA,4BAAsB,QAAQ;AAC9B,eAAS;AAAA,QACP,WAAW,OAAO;AAAA,QAClB,GAAI,iBAAiB,EAAE,QAAQ,OAAO,IAAI,CAAC;AAAA,QAC3C;AAAA,QACA,GAAI,kBAAkB,gBAClB,EAAE,SAAS,EAAE,aAAa,cAAc,EAAE,IAC1C,CAAC;AAAA,MACP,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAEA,YAAU,MAAM;AACd,QACE,CAAC,qBACD,gBACA,uBAAuB,QACvB,OAAO,QAAQ,WAAW,GAC1B;AACA,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB,CAAC,UAA+B;AACpD,UACE,CAAC,eAAe,KAAK,KACrB,yBAAyB,MAAM,MAAM,KACrC,MAAM,eACN,MAAM,UACN,MAAM,UACN;AACA;AAAA,MACF;AACA,YAAM,cAAc,MAAM,WAAW,MAAM,UAAU,IAAI;AACzD,YAAM,SAAS,OAAO,QAAQ,WAAW;AACzC,UAAI,CAAC,QAAQ;AACX;AAAA,MACF;AACA,YAAM,eAAe;AACrB,YAAM,gBAAgB;AACtB,mBAAa,OAAO,EAAE;AAAA,IACxB;AAEA,WAAO,iBAAiB,WAAW,eAAe,IAAI;AACtD,WAAO,MAAM,OAAO,oBAAoB,WAAW,eAAe,IAAI;AAAA,EACxE,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,gBAAAJ,KAAC,aAAQ,WAAW,2BAA2B,QAAQ,GACrD,0BAAAC,MAAC,SAAI,WAAW,+BAA+B,QAAQ,GACrD;AAAA,oBAAAD,KAAC,SAAI,WAAW,oCAAO,uBACpB,sCAA4B,OAAO,YAAY,GAClD;AAAA,IACC,cAAc,SAAS,IACtB,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACpB,wBAAc,IAAI,CAAC,WAClB,gBAAAC;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW,oCAAO;AAAA,QAElB;AAAA,0BAAAD,KAAC,UAAK,WAAW,oCAAO,wBACrB,iBAAO,OACV;AAAA,UACA,gBAAAA,KAAC,qBAAkB,QAAgB,aAA0B;AAAA,UAC5D,OAAO,OACN,gBAAAA,KAAC,UAAK,WAAW,oCAAO,8BACrB,iBAAO,MACV,IACE;AAAA;AAAA;AAAA,MAXC,GAAG,OAAO,KAAK,IAAI,OAAO,KAAK;AAAA,IAYtC,CACD,GACH,IACE;AAAA,IACJ,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACpB,iBAAO,QAAQ,IAAI,CAAC,QAAQ,gBAAgB;AAC3C,YAAM,cAAc,uBAAuB,OAAO;AAClD,YAAM,yBAAyB,qBAAqB,OAAO;AAC3D,YAAM,cAAc,2BAA2B,QAAQ;AAAA,QACrD,UAAU;AAAA,MACZ,CAAC;AACD,YAAM,qBAAqB;AAAA,QACzB;AAAA,QACA,EAAE,UAAU,uBAAuB;AAAA,MACrC;AACA,YAAM,gBAAgB;AAAA,QACpB;AAAA,QACA;AAAA,MACF;AACA,YAAM,uBAAuB,4BAA4B,OAAO;AAChE,UAAI,sBAAsB;AACxB,eACE,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW,oCAAO;AAAA,YAElB;AAAA,8BAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,KAAK;AAAA,kBACL,OAAO;AAAA,kBACP,aAAa,OAAO;AAAA,kBACpB,UAAU,gBAAgB,uBAAuB;AAAA,kBACjD,WAAW,oCAAO;AAAA,kBAClB,cAAY;AAAA,oBACV;AAAA,oBACA,OAAO;AAAA,kBACT;AAAA,kBACA,UAAU,CAAC,UAAU,YAAY,MAAM,cAAc,KAAK;AAAA,kBAC1D,WAAW,CAAC,UAAU;AACpB,wBACE,CAAC,qBACD,MAAM,QAAQ,WACb,CAAC,MAAM,WAAW,CAAC,MAAM,WAC1B,MAAM,YAAY,aAClB;AACA;AAAA,oBACF;AACA,0BAAM,eAAe;AACrB,wBAAI,CAAC,eAAe;AAClB,0CAAoB,SAAS,MAAM;AACnC;AAAA,oBACF;AACA,iCAAa,OAAO,EAAE;AAAA,kBACxB;AAAA;AAAA,cACF;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAW,oCAAO;AAAA,kBAClB,UACE,gBACA,uBAAuB,QACvB,CAAC;AAAA,kBAEH,cAAY,OAAO;AAAA,kBACnB,OAAO,OAAO;AAAA,kBACd,aAAW;AAAA,kBACX,SAAS,MAAM;AACb,wBAAI,CAAC,eAAe;AAClB,0CAAoB,SAAS,MAAM;AACnC;AAAA,oBACF;AACA,iCAAa,OAAO,EAAE;AAAA,kBACxB;AAAA,kBAEC,wBACC,gBAAAA,KAAC,4BAAyB,IAE1B,gBAAAA,KAAC,kBAAe;AAAA;AAAA,cAEpB;AAAA;AAAA;AAAA,UAvDK,OAAO;AAAA,QAwDd;AAAA,MAEJ;AACA,aACE,gBAAAC;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,WAAW,oCAAO;AAAA,UAClB,cAAY;AAAA,YACV;AAAA,YACA,OAAO;AAAA,UACT;AAAA,UACA,UAAU,gBAAgB,uBAAuB;AAAA,UACjD,SAAS,MAAM,aAAa,OAAO,EAAE;AAAA,UAErC;AAAA,4BAAAD,KAAC,UAAK,WAAW,oCAAO,wBACrB,6BAAmB,OACtB;AAAA,YACC,mBAAmB,gBAClB,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,mBAAmB;AAAA,gBAC1B,QAAO;AAAA,gBACP,iBAAiB,CAAC;AAAA;AAAA,YACpB,IACE;AAAA,YACH,OAAO,cACN,gBAAAA,KAAC,UAAK,WAAW,oCAAO,8BACrB,iBAAO,aACV,IACE;AAAA,YACH,qBAAqB,iBAAiB,CAAC,cACtC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,oCAAO;AAAA,gBAClB,eAAY;AAAA,gBAEX;AAAA;AAAA,YACH,IACE;AAAA,YACH,cAAc,gBAAAA,KAAC,4BAAyB,IAAK;AAAA;AAAA;AAAA,QAjCzC,OAAO;AAAA,MAkCd;AAAA,IAEJ,CAAC,GACH;AAAA,KACF,GACF;AAEJ;AAEO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAGG;AACD;AACA,QAAM,CAAC,UAAU,WAAW,IAAIG,UAAS,EAAE;AAG3C,QAAM,qBAAqB,YAAY;AACvC,QAAM,CAAC,oBAAoB,qBAAqB,IAAIA;AAAA,IAClD;AAAA,EACF;AACA,QAAM,UAAU,SAAS,KAAK;AAC9B,QAAM,gBACJ,YAAY,KAAK,OAAO,aAAa,OAAO;AAM9C,QAAM,QACJ,OAAO,QAAQ,SAAS,IACpB,OAAO,QAAQ,IAAI,CAAC,WAAW;AAC7B,UAAM,QAAQ,OAAO,UAAU,KAAK,CAAC,SAAS,KAAK,OAAO,OAAO,EAAE;AACnE,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,OAAO,OAAO,SAAS,OAAO;AAAA,MAC9B,aAAa,OAAO,eAAe,OAAO,eAAe;AAAA,IAC3D;AAAA,EACF,CAAC,IACD,OAAO;AAEb,YAAU,MAAM;AACd,0BAAsB,IAAI;AAAA,EAC5B,GAAG,CAAC,OAAO,SAAS,CAAC;AAErB,YAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB,4BAAsB,IAAI;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,SACE,gBAAAH,KAAC,aAAQ,WAAW,2BAA2B,QAAQ,GACrD,0BAAAC,MAAC,SAAI,WAAW,+BAA+B,QAAQ,GACrD;AAAA,oBAAAD,KAAC,SAAI,WAAW,oCAAO,uBACpB,sCAA4B,OAAO,QAAQ,GAC9C;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACpB,gBAAM,IAAI,CAAC,SAAS;AACnB,YAAM,cAAc,uBAAuB,KAAK;AAChD,aACE,gBAAAC;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,WAAW,oCAAO;AAAA,UAClB,cAAY;AAAA,YACV,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,UACA,UAAU,gBAAgB,uBAAuB;AAAA,UACjD,SAAS,MAAM;AACb,kCAAsB,KAAK,EAAE;AAC7B,qBAAS;AAAA,cACP,WAAW,OAAO;AAAA,cAClB,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,YACjB,CAAC;AAAA,UACH;AAAA,UAEA;AAAA,4BAAAD,KAAC,UAAK,WAAW,oCAAO,wBACrB,eAAK,OACR;AAAA,YACA,gBAAAA,KAAC,UAAK,WAAW,oCAAO,8BACrB,eAAK,aACR;AAAA,YACC,cAAc,gBAAAA,KAAC,4BAAyB,IAAK;AAAA;AAAA;AAAA,QAvBzC,KAAK;AAAA,MAwBZ;AAAA,IAEJ,CAAC,GACH;AAAA,IACC,qBACC,gBAAAC,MAAC,SAAI,WAAW,oCAAO,yBACrB;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,aAAa,OAAO;AAAA,UACpB,UAAU;AAAA,UACV,WAAW,oCAAO;AAAA,UAClB,UAAU,CAAC,UAAU,YAAY,MAAM,cAAc,KAAK;AAAA;AAAA,MAC5D;AAAA,MACA,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACrB,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU;AAAA,UACV,SAAS,MACP,SAAS;AAAA,YACP,WAAW,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAKlB,QAAQ;AAAA,YACR,GAAI,OAAO,uBACP,EAAE,UAAU,OAAO,qBAAqB,IACxC,CAAC;AAAA,YACL,SAAS,UAAU,EAAE,aAAa,QAAQ,IAAI;AAAA,UAChD,CAAC;AAAA,UAGF;AAAA;AAAA,MACH,GACF;AAAA,OACF;AAAA;AAAA;AAAA;AAAA,MAKA,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACrB,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU;AAAA,UACV,SAAS,MACP,SAAS;AAAA,YACP,WAAW,OAAO;AAAA,YAClB,QAAQ;AAAA,YACR,GAAI,OAAO,uBACP,EAAE,UAAU,OAAO,qBAAqB,IACxC,CAAC;AAAA,UACP,CAAC;AAAA,UAGF,iBAAO;AAAA;AAAA,MACV,GACF;AAAA;AAAA,KAEJ,GACF;AAEJ;AAKO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAGG;AACD;AACA,QAAM,CAAC,UAAU,WAAW,IAAIG,UAAS,EAAE;AAC3C,QAAM,UAAU,SAAS,KAAK;AAC9B,QAAM,gBACJ,YAAY,KACR,OAAO,yBACP,OAAO;AAIb,QAAM,qBAAqB,YAAY;AAEvC,SACE,gBAAAH,KAAC,aAAQ,WAAW,2BAA2B,QAAQ,GACrD,0BAAAC,MAAC,SAAI,WAAW,+BAA+B,QAAQ,GACrD;AAAA,oBAAAD,KAAC,SAAI,WAAW,oCAAO,uBACpB,sCAA4B,OAAO,sBAAsB,GAC5D;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACrB,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAW,oCAAO;AAAA,QAClB,eAAY;AAAA,QACZ,UAAU;AAAA,QACV,SAAS,MACP,SAAS;AAAA,UACP,WAAW,OAAO;AAAA,UAClB,QAAQ;AAAA,QACV,CAAC;AAAA,QAGH,0BAAAA,KAAC,UAAK,WAAW,oCAAO,wBACrB,iBAAO,2BACV;AAAA;AAAA,IACF,GACF;AAAA,IACC,qBACC,gBAAAC,MAAC,SAAI,WAAW,oCAAO,yBACrB;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,aAAa,OAAO;AAAA,UACpB,UAAU;AAAA,UACV,WAAW,oCAAO;AAAA,UAClB,eAAY;AAAA,UACZ,UAAU,CAAC,UAAU,YAAY,MAAM,cAAc,KAAK;AAAA;AAAA,MAC5D;AAAA,MACA,gBAAAA,KAAC,SAAI,WAAW,oCAAO,0BACrB,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,eAAY;AAAA,UACZ,UAAU;AAAA,UACV,SAAS,MACP,SAAS;AAAA,YACP,WAAW,OAAO;AAAA,YAClB,QACE,YAAY,KACR,kCACA;AAAA,YACN,SAAS,UAAU,EAAE,MAAM,QAAQ,IAAI;AAAA,UACzC,CAAC;AAAA,UAGF;AAAA;AAAA,MACH,GACF;AAAA,OACF,IACE;AAAA,KACN,GACF;AAEJ;;;ACldM,gBAAAK,YAAA;AAjBC,SAAS,8BAA8B;AAAA,EAC5C;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,GAEuB;AACrB;AAEA,MAAI,OAAO,SAAS,YAAY;AAC9B,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AACA,MAAI,OAAO,SAAS,aAAa;AAC/B,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AACA,MAAI,OAAO,SAAS,uBAAuB;AACzC,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AACA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IAPK,OAAO;AAAA,EAQd;AAEJ;","names":["jsx","jsxs","useCallback","useMemo","useState","jsx","jsxs","useMemo","useState","useCallback","jsx"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { A as AgentContextMentionItem } from '../agentFileMentionContracts-58IjMU-u.js';
|
|
2
2
|
import { AgentMentionSearchState, AgentMentionBrowseCategory, AgentMentionFilterId, AgentMentionGroupId } from '../mention-search.js';
|
|
3
3
|
export { AgentMentionGroup, AgentMentionSearchController } from '../mention-search.js';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
4
5
|
export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, AgentContextMentionInsertResult, AgentContextMentionProvider, AgentContextMentionProviderId, AgentContextMentionQueryInput } from '../context-mention-provider.js';
|
|
5
6
|
import '@tutti-os/ui-rich-text/at-panel';
|
|
7
|
+
import '@tutti-os/workspace-file-reference/contracts';
|
|
6
8
|
import '@tutti-os/ui-rich-text/types';
|
|
7
9
|
import '@tutti-os/workspace-external-core/contracts';
|
|
8
10
|
|
|
@@ -35,10 +37,12 @@ interface AgentFileMentionPaletteProps {
|
|
|
35
37
|
* 仅 workspace-issue / workspace-app 行渲染该入口。
|
|
36
38
|
*/
|
|
37
39
|
onOpenReferences?: (item: AgentContextMentionItem) => void;
|
|
40
|
+
/** Controlled provenance filter supplied by the AgentGUI orchestration layer. */
|
|
41
|
+
provenanceFilterControl?: ReactNode;
|
|
38
42
|
}
|
|
39
43
|
declare function flattenAgentMentionPaletteEntries(state: AgentMentionSearchState): AgentMentionPaletteEntry[];
|
|
40
44
|
declare function groupStartKeys(state: AgentMentionSearchState): string[];
|
|
41
|
-
declare function AgentFileMentionPalette({ state, highlightedKey, label, loadingLabel, emptyLabel, errorLabel, tabHintLabel, maxHeightPx, shouldCenterHighlightedItem, onHighlightChange, onSelectItem, onSelectCategory, onSelectFilter, onExpandGroup, onNavigateHierarchy, onNavigateIntoItem, onOpenReferences }: AgentFileMentionPaletteProps): React.JSX.Element;
|
|
45
|
+
declare function AgentFileMentionPalette({ state, highlightedKey, label, loadingLabel, emptyLabel, errorLabel, tabHintLabel, maxHeightPx, shouldCenterHighlightedItem, onHighlightChange, onSelectItem, onSelectCategory, onSelectFilter, onExpandGroup, onNavigateHierarchy, onNavigateIntoItem, onOpenReferences, provenanceFilterControl }: AgentFileMentionPaletteProps): React.JSX.Element;
|
|
42
46
|
declare const AgentContextMentionPalette: typeof AgentFileMentionPalette;
|
|
43
47
|
type AgentContextMentionPaletteProps = AgentFileMentionPaletteProps;
|
|
44
48
|
|
|
@@ -3,26 +3,25 @@ import {
|
|
|
3
3
|
AgentFileMentionPalette,
|
|
4
4
|
flattenAgentMentionPaletteEntries,
|
|
5
5
|
groupStartKeys
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-FAE7CXZO.js";
|
|
7
7
|
import {
|
|
8
8
|
AgentMentionSearchController
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
9
|
+
} from "../chunk-EUW6VPIK.js";
|
|
10
|
+
import "../chunk-4YCCATI4.js";
|
|
11
|
+
import "../chunk-GCW57WYQ.js";
|
|
12
|
+
import "../chunk-F5UR6EJG.js";
|
|
13
13
|
import "../chunk-LUGELG5V.js";
|
|
14
14
|
import {
|
|
15
15
|
AGENT_CONTEXT_MENTION_PROVIDER_IDS
|
|
16
16
|
} from "../chunk-JM24HADP.js";
|
|
17
|
-
import "../chunk-
|
|
17
|
+
import "../chunk-DWUVRWXD.js";
|
|
18
18
|
import "../chunk-YMXYBG7U.js";
|
|
19
|
-
import "../chunk-
|
|
20
|
-
import "../chunk-Y5M6Q6WX.js";
|
|
19
|
+
import "../chunk-UESYITH6.js";
|
|
21
20
|
import "../chunk-PJP5BUU6.js";
|
|
22
21
|
import "../chunk-H6IQ63DQ.js";
|
|
23
|
-
import "../chunk-
|
|
24
|
-
import "../chunk-
|
|
25
|
-
import "../chunk-
|
|
22
|
+
import "../chunk-MIJXEELH.js";
|
|
23
|
+
import "../chunk-E5AD46HP.js";
|
|
24
|
+
import "../chunk-4E3QCW6L.js";
|
|
26
25
|
import "../chunk-5X7YDOC6.js";
|
|
27
26
|
import "../chunk-KJQERFKX.js";
|
|
28
27
|
import "../chunk-UGVI47X6.js";
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { AgentSessionEngineState, AgentSessionEngine } from '@tutti-os/agent-activity-core';
|
|
3
|
+
import { WorkbenchFrame, WorkbenchHostDockEntry, WorkbenchHostLaunchRequest, WorkbenchHostNodeBodyContext, WorkbenchContribution } from '@tutti-os/workbench-surface';
|
|
4
|
+
import { A as AgentGUIAgent, d as AgentGUIAgentDirectoryPort } from './types-CnT8rNUI.js';
|
|
5
|
+
import { AgentGuiWorkbenchProvider, AgentGuiWorkbenchState } from './workbench/types.js';
|
|
6
|
+
|
|
7
|
+
interface AgentGuiWorkbenchConversationIdentity {
|
|
8
|
+
agentTitle?: string | null;
|
|
9
|
+
iconUrl?: string | null;
|
|
10
|
+
title: string | null;
|
|
11
|
+
}
|
|
12
|
+
declare function resolveAgentGuiWorkbenchConversationIdentity(input: {
|
|
13
|
+
agents: readonly AgentGUIAgent[];
|
|
14
|
+
dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;
|
|
15
|
+
engineState: AgentSessionEngineState;
|
|
16
|
+
workbenchState: AgentGuiWorkbenchState | null;
|
|
17
|
+
}): AgentGuiWorkbenchConversationIdentity | null;
|
|
18
|
+
declare function agentGuiWorkbenchConversationIdentitiesEqual(left: AgentGuiWorkbenchConversationIdentity | null, right: AgentGuiWorkbenchConversationIdentity | null): boolean;
|
|
19
|
+
|
|
20
|
+
declare const agentGuiWorkbenchDefaultNodeFrame: WorkbenchFrame;
|
|
21
|
+
declare const agentGuiWorkbenchDefaultUsableWidthRatio = 0.9;
|
|
22
|
+
declare const agentGuiWorkbenchDefaultUsableHeightRatio = 0.9;
|
|
23
|
+
declare const agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;
|
|
24
|
+
declare const agentGuiWorkbenchNewWindowCascadeOffset: {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
};
|
|
28
|
+
declare const agentGuiWorkbenchProviderRailWidthPx = 52;
|
|
29
|
+
declare const agentGuiWorkbenchDefaultCopy: AgentGuiWorkbenchContributionCopy;
|
|
30
|
+
type AgentGuiWorkbenchProviderAvailability = Partial<Record<AgentGuiWorkbenchProvider, boolean | "available" | "ready" | "unavailable" | {
|
|
31
|
+
available?: boolean | null;
|
|
32
|
+
status?: string | null;
|
|
33
|
+
} | null | undefined>>;
|
|
34
|
+
interface BuildAgentGuiDockEntriesInput {
|
|
35
|
+
agentDirectory: AgentGUIAgentDirectoryPort;
|
|
36
|
+
defaultProvider?: AgentGuiWorkbenchProvider | null;
|
|
37
|
+
dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;
|
|
38
|
+
label?: string;
|
|
39
|
+
providerAvailability?: AgentGuiWorkbenchProviderAvailability;
|
|
40
|
+
renderPreview?: CreateAgentGuiWorkbenchContributionInput["renderPreview"];
|
|
41
|
+
resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput["resolveDockPopupIdentity"];
|
|
42
|
+
resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput["resolveDockPopupTitle"];
|
|
43
|
+
sectionId?: string;
|
|
44
|
+
unifiedDockIconUrl?: string;
|
|
45
|
+
}
|
|
46
|
+
declare function buildAgentGuiDockEntries(input: BuildAgentGuiDockEntriesInput): WorkbenchHostDockEntry[];
|
|
47
|
+
declare function resolveAgentGuiUnifiedDockLaunchPayload(input: Pick<BuildAgentGuiDockEntriesInput, "agentDirectory" | "defaultProvider" | "providerAvailability">): {
|
|
48
|
+
provider: AgentGuiWorkbenchProvider;
|
|
49
|
+
agentTargetId?: string;
|
|
50
|
+
};
|
|
51
|
+
declare function resolveAgentGuiWorkbenchDefaultLaunchFrame(input: {
|
|
52
|
+
frame: WorkbenchFrame;
|
|
53
|
+
request: Pick<WorkbenchHostLaunchRequest, "layoutConstraints" | "surfaceSize">;
|
|
54
|
+
}): WorkbenchFrame;
|
|
55
|
+
declare function resolveAgentGuiWorkbenchContributionCopy(copy?: AgentGuiWorkbenchContributionCopyOverrides): AgentGuiWorkbenchContributionCopy;
|
|
56
|
+
|
|
57
|
+
declare const AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT = "tutti:agent-gui-workbench-conversation-rail-toggle";
|
|
58
|
+
declare const AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT = "tutti:agent-gui-workbench-new-conversation";
|
|
59
|
+
/**
|
|
60
|
+
* Fired when the empty-hero "Import session" suggestion is chosen. The host
|
|
61
|
+
* chrome (which owns the external-agent import wizard state) listens for this
|
|
62
|
+
* and opens the wizard.
|
|
63
|
+
*/
|
|
64
|
+
declare const AGENT_GUI_WORKBENCH_OPEN_EXTERNAL_IMPORT_EVENT = "tutti:agent-gui-workbench-open-external-import";
|
|
65
|
+
interface AgentGuiWorkbenchConversationRailToggleDetail {
|
|
66
|
+
conversationRailCollapsed: boolean;
|
|
67
|
+
instanceId: string;
|
|
68
|
+
}
|
|
69
|
+
interface AgentGuiWorkbenchNewConversationDetail {
|
|
70
|
+
instanceId: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
interface AgentGuiWorkbenchContributionCopy {
|
|
74
|
+
collapseConversationRail: string;
|
|
75
|
+
close: string;
|
|
76
|
+
expandConversationRail: string;
|
|
77
|
+
fallbackAgentLabel: string;
|
|
78
|
+
maximize: string;
|
|
79
|
+
minimize: string;
|
|
80
|
+
newConversation: string;
|
|
81
|
+
nodeTitle: string;
|
|
82
|
+
openDetachedWindow: string;
|
|
83
|
+
restore: string;
|
|
84
|
+
untitledConversation: string;
|
|
85
|
+
}
|
|
86
|
+
type AgentGuiWorkbenchContributionCopyOverrides = Partial<AgentGuiWorkbenchContributionCopy>;
|
|
87
|
+
interface AgentGuiWorkbenchRenderBodyHelpers {
|
|
88
|
+
agentDirectory: AgentGUIAgentDirectoryPort;
|
|
89
|
+
nodeTypeId: string;
|
|
90
|
+
onStateChange(state: AgentGuiWorkbenchState): void;
|
|
91
|
+
provider: AgentGuiWorkbenchProvider;
|
|
92
|
+
}
|
|
93
|
+
interface CreateAgentGuiWorkbenchContributionInput {
|
|
94
|
+
agentDirectory: AgentGUIAgentDirectoryPort;
|
|
95
|
+
copy?: AgentGuiWorkbenchContributionCopyOverrides;
|
|
96
|
+
defaultProvider?: AgentGuiWorkbenchProvider | null;
|
|
97
|
+
dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;
|
|
98
|
+
dockSectionId?: string;
|
|
99
|
+
frame?: WorkbenchFrame;
|
|
100
|
+
id?: string;
|
|
101
|
+
providerAvailability?: AgentGuiWorkbenchProviderAvailability;
|
|
102
|
+
renderBody(context: WorkbenchHostNodeBodyContext<AgentGuiWorkbenchState | null, unknown>, helpers: AgentGuiWorkbenchRenderBodyHelpers): ReactNode;
|
|
103
|
+
renderPreview?(context: WorkbenchHostNodeBodyContext<AgentGuiWorkbenchState | null, unknown>, helpers: AgentGuiWorkbenchRenderBodyHelpers): ReactNode;
|
|
104
|
+
renderMinimizedPreview(context: WorkbenchHostNodeBodyContext<AgentGuiWorkbenchState | null, unknown>, helpers: AgentGuiWorkbenchRenderBodyHelpers): ReactNode;
|
|
105
|
+
resolveDockPopupTitle?: (state: AgentGuiWorkbenchState | null) => string | null;
|
|
106
|
+
resolveDockPopupIdentity?: (state: AgentGuiWorkbenchState | null) => AgentGuiWorkbenchConversationIdentity | null;
|
|
107
|
+
sessionEngine?: AgentSessionEngine;
|
|
108
|
+
onOpenDetachedWindow?: (input: {
|
|
109
|
+
agentSessionId?: string | null;
|
|
110
|
+
agentTargetId?: string | null;
|
|
111
|
+
provider: AgentGuiWorkbenchProvider;
|
|
112
|
+
workspaceId: string;
|
|
113
|
+
}) => void | Promise<void>;
|
|
114
|
+
unifiedDockIconUrl?: string;
|
|
115
|
+
workspaceId: string;
|
|
116
|
+
}
|
|
117
|
+
declare function createAgentGuiWorkbenchContribution(input: CreateAgentGuiWorkbenchContributionInput): WorkbenchContribution;
|
|
118
|
+
|
|
119
|
+
export { AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT as A, type BuildAgentGuiDockEntriesInput as B, type CreateAgentGuiWorkbenchContributionInput as C, AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT as a, AGENT_GUI_WORKBENCH_OPEN_EXTERNAL_IMPORT_EVENT as b, type AgentGuiWorkbenchContributionCopy as c, type AgentGuiWorkbenchContributionCopyOverrides as d, type AgentGuiWorkbenchConversationIdentity as e, type AgentGuiWorkbenchConversationRailToggleDetail as f, type AgentGuiWorkbenchNewConversationDetail as g, type AgentGuiWorkbenchProviderAvailability as h, type AgentGuiWorkbenchRenderBodyHelpers as i, agentGuiWorkbenchCompactVisibleAreaRatio as j, agentGuiWorkbenchConversationIdentitiesEqual as k, agentGuiWorkbenchDefaultCopy as l, agentGuiWorkbenchDefaultNodeFrame as m, agentGuiWorkbenchDefaultUsableHeightRatio as n, agentGuiWorkbenchDefaultUsableWidthRatio as o, agentGuiWorkbenchNewWindowCascadeOffset as p, agentGuiWorkbenchProviderRailWidthPx as q, buildAgentGuiDockEntries as r, createAgentGuiWorkbenchContribution as s, resolveAgentGuiUnifiedDockLaunchPayload as t, resolveAgentGuiWorkbenchContributionCopy as u, resolveAgentGuiWorkbenchConversationIdentity as v, resolveAgentGuiWorkbenchDefaultLaunchFrame as w };
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -416,6 +416,13 @@ declare const agentGuiI18nResources: {
|
|
|
416
416
|
readonly mentionFilterFile: "Files";
|
|
417
417
|
readonly mentionFilterApp: "Apps";
|
|
418
418
|
readonly mentionFilterAgent: "Agents";
|
|
419
|
+
readonly provenanceFilterAllAgents: "All agents";
|
|
420
|
+
readonly provenanceFilterAllMembers: "All members";
|
|
421
|
+
readonly provenanceFilterAllSources: "All sources";
|
|
422
|
+
readonly provenanceFilterAgents: "Agents";
|
|
423
|
+
readonly provenanceFilterFilteredSources: "Filtered sources";
|
|
424
|
+
readonly provenanceFilterMembers: "Members";
|
|
425
|
+
readonly provenanceFilterReset: "Reset";
|
|
419
426
|
readonly mentionFilterSession: "Sessions";
|
|
420
427
|
readonly mentionFilterCollab: "Collaboration";
|
|
421
428
|
readonly mentionFilterIssue: "Tasks";
|
|
@@ -1149,7 +1156,7 @@ declare const agentGuiI18nResources: {
|
|
|
1149
1156
|
readonly workspaceAgentMessageCenterOpenChat: "Open session";
|
|
1150
1157
|
readonly workspaceAgentsNoSessions: "No sessions";
|
|
1151
1158
|
readonly workspaceAgentsNoActivities: "No current activity";
|
|
1152
|
-
readonly
|
|
1159
|
+
readonly workspaceAgentsUntitledConversation: "Untitled conversation";
|
|
1153
1160
|
readonly workspaceAgentsGenericAgentName: "Agent";
|
|
1154
1161
|
readonly workspaceAgentsSessionCount_one: "{{count}} session";
|
|
1155
1162
|
readonly workspaceAgentsSessionCount_other: "{{count}} sessions";
|
|
@@ -2914,6 +2921,13 @@ declare const agentGuiI18nResources: {
|
|
|
2914
2921
|
readonly mentionFilterFile: "文件";
|
|
2915
2922
|
readonly mentionFilterApp: "应用";
|
|
2916
2923
|
readonly mentionFilterAgent: "智能体";
|
|
2924
|
+
readonly provenanceFilterAllAgents: "全部智能体";
|
|
2925
|
+
readonly provenanceFilterAllMembers: "全部成员";
|
|
2926
|
+
readonly provenanceFilterAllSources: "全部来源";
|
|
2927
|
+
readonly provenanceFilterAgents: "智能体";
|
|
2928
|
+
readonly provenanceFilterFilteredSources: "已筛选来源";
|
|
2929
|
+
readonly provenanceFilterMembers: "成员";
|
|
2930
|
+
readonly provenanceFilterReset: "重置";
|
|
2917
2931
|
readonly mentionFilterSession: "会话";
|
|
2918
2932
|
readonly mentionFilterCollab: "协作";
|
|
2919
2933
|
readonly mentionFilterIssue: "任务";
|
|
@@ -3647,7 +3661,7 @@ declare const agentGuiI18nResources: {
|
|
|
3647
3661
|
readonly workspaceAgentMessageCenterOpenChat: "打开会话";
|
|
3648
3662
|
readonly workspaceAgentsNoSessions: "暂无会话";
|
|
3649
3663
|
readonly workspaceAgentsNoActivities: "暂无进行中的操作";
|
|
3650
|
-
readonly
|
|
3664
|
+
readonly workspaceAgentsUntitledConversation: "未命名对话";
|
|
3651
3665
|
readonly workspaceAgentsGenericAgentName: "智能体";
|
|
3652
3666
|
readonly workspaceAgentsSessionCount_one: "{{count}} 个会话";
|
|
3653
3667
|
readonly workspaceAgentsSessionCount_other: "{{count}} 个会话";
|
package/dist/i18n/index.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
export { AgentCustomMentionChipContext, AgentCustomMentionIdentity, AgentCustomMentionKindDefinition, AgentCustomMentionPresentation, getAgentCustomMentionKind, registerAgentCustomMentionKind, resetAgentCustomMentionKindsForTests } from './custom-mention.js';
|
|
2
2
|
export { A as AGENT_PASTED_TEXT_BLOCK_KIND, a as AGENT_PASTED_TEXT_MENTION_KIND } from './pastedTextKinds-D-XuInaS.js';
|
|
3
|
-
import { A as AgentActivityRuntime } from './AgentGUI-
|
|
4
|
-
export { a as AgentActivityRuntimeDeleteSessionsBatchInput, b as AgentActivityRuntimeDeleteSessionsBatchResult, c as AgentActivityRuntimeListSessionMessagesInput, d as AgentActivityRuntimePromptContentBlock, e as AgentActivityRuntimeProvider, f as AgentActivityRuntimeProviderProps, g as AgentActivityRuntimeSessionSectionDeletionCandidates, h as AgentActivityRuntimeSessionSectionScopeInput, i as AgentActivityRuntimeSetSessionPinnedInput, j as AgentActivityRuntimeUpdateSessionSettingsInput, k as AgentActivityRuntimeUpdateSessionSettingsResult, l as AgentActivityRuntimeUploadPromptContentInput, m as AgentActivityRuntimeUploadPromptContentResult, n as AgentGUI, o as AgentGUIAccountMenuState, p as AgentGUIAgentsEmptyRenderer, q as AgentGUIComposerContentType, r as AgentGUIComposerFocusMethod, s as AgentGUIEngagementContext, t as AgentGUIEngagementEvent, u as AgentGUIEngagementEventSink, v as AgentGUIProps, w as AgentGUIProviderUnavailableStateContext, x as AgentGUIProviderUnavailableStateRenderer, y as AgentGUISidebarFooterContext, z as AgentGUISidebarFooterRenderer, B as resetAgentActivityRuntimeForTests, C as setAgentActivityRuntimeForTests, D as useAgentActivityRuntime, E as useAgentActivitySnapshot, F as useOptionalAgentActivityRuntime } from './AgentGUI-
|
|
3
|
+
import { A as AgentActivityRuntime } from './AgentGUI-DgBjACOL.js';
|
|
4
|
+
export { a as AgentActivityRuntimeDeleteSessionsBatchInput, b as AgentActivityRuntimeDeleteSessionsBatchResult, c as AgentActivityRuntimeListSessionMessagesInput, d as AgentActivityRuntimePromptContentBlock, e as AgentActivityRuntimeProvider, f as AgentActivityRuntimeProviderProps, g as AgentActivityRuntimeSessionSectionDeletionCandidates, h as AgentActivityRuntimeSessionSectionScopeInput, i as AgentActivityRuntimeSetSessionPinnedInput, j as AgentActivityRuntimeUpdateSessionSettingsInput, k as AgentActivityRuntimeUpdateSessionSettingsResult, l as AgentActivityRuntimeUploadPromptContentInput, m as AgentActivityRuntimeUploadPromptContentResult, n as AgentGUI, o as AgentGUIAccountMenuState, p as AgentGUIAgentsEmptyRenderer, q as AgentGUIComposerContentType, r as AgentGUIComposerFocusMethod, s as AgentGUIEngagementContext, t as AgentGUIEngagementEvent, u as AgentGUIEngagementEventSink, v as AgentGUIProps, w as AgentGUIProviderUnavailableStateContext, x as AgentGUIProviderUnavailableStateRenderer, y as AgentGUISidebarFooterContext, z as AgentGUISidebarFooterRenderer, B as resetAgentActivityRuntimeForTests, C as setAgentActivityRuntimeForTests, D as useAgentActivityRuntime, E as useAgentActivitySnapshot, F as useOptionalAgentActivityRuntime } from './AgentGUI-DgBjACOL.js';
|
|
5
5
|
export { agentGUIAgentIsReady, normalizeAgentGUIAgents, resolveAgentGUISelectedDirectoryAgent } from './agents.js';
|
|
6
6
|
import { n as AgentGUIProvider, h as AgentGUIAgentTarget, i as AgentGUIAgentTargetBadge } from './types-CnT8rNUI.js';
|
|
7
7
|
export { A as AgentGUIAgent, a as AgentGUIAgentAvailability, b as AgentGUIAgentAvailabilityAction, c as AgentGUIAgentAvailabilityStatus, d as AgentGUIAgentDirectoryPort, e as AgentGUIAgentDirectorySnapshot, f as AgentGUIAgentDirectoryStatus, g as AgentGUIAgentOwner, j as AgentGUIAgentTargetRef, k as AgentGUIAllAgentsPresentation, l as AgentGUIHomeSuggestionId, o as AgentGUIProviderRailAllPresentation, p as AgentGUIProviderRailMode, q as AgentGUIProviderReadinessGate, r as AgentGUIProviderReadinessGateAction, s as AgentGUIProviderReadinessGateStatus } from './types-CnT8rNUI.js';
|
|
8
8
|
export { AgentGuiI18nProvider, agentGuiI18nModule, agentGuiI18nResources } from './i18n/index.js';
|
|
9
9
|
export { agentGuiDockIconUrl, agentGuiDockIconUrls } from './dock-icons.js';
|
|
10
|
-
import { h as AgentHostInputApi } from './agentGuiNodeTypes-
|
|
11
|
-
export { f as AgentHostApi, g as AgentHostApplyWorkspaceGitPatchInput, i as AgentHostRuntimeApi, j as AgentHostSelectFilesInput, l as AgentProbeProvider, m as AgentProbeSnapshot, n as AgentProviderProbeListInput, o as AgentProviderProbeListResult, r as AgentUsageQuota, s as AgentUsageSnapshot, P as PersistWriteResult, R as ReadWorkspaceAgentReadStateInput, W as WorkspaceAgentReadStateSnapshot, t as WriteWorkspaceAgentReadStateInput } from './agentGuiNodeTypes-
|
|
10
|
+
import { h as AgentHostInputApi } from './agentGuiNodeTypes-C-wBSM-Y.js';
|
|
11
|
+
export { f as AgentHostApi, g as AgentHostApplyWorkspaceGitPatchInput, i as AgentHostRuntimeApi, j as AgentHostSelectFilesInput, l as AgentProbeProvider, m as AgentProbeSnapshot, n as AgentProviderProbeListInput, o as AgentProviderProbeListResult, r as AgentUsageQuota, s as AgentUsageSnapshot, P as PersistWriteResult, R as ReadWorkspaceAgentReadStateInput, W as WorkspaceAgentReadStateSnapshot, t as WriteWorkspaceAgentReadStateInput } from './agentGuiNodeTypes-C-wBSM-Y.js';
|
|
12
12
|
export { AgentActivityAdapter, AgentActivityMessage, AgentActivityNeedsAttentionItem, AgentActivitySnapshot, selectNeedsAttentionCount, selectNeedsAttentionItems } from '@tutti-os/agent-activity-core';
|
|
13
13
|
export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, AgentContextMentionProvider, AgentContextMentionProviderId } from './context-mention-provider.js';
|
|
14
14
|
export { preloadAgentMentionBrowse } from './mention-search.js';
|
|
@@ -20,12 +20,13 @@ import '@tutti-os/workspace-file-reference/contracts';
|
|
|
20
20
|
import './agentFileMentionContracts-58IjMU-u.js';
|
|
21
21
|
import '@tutti-os/workspace-file-manager/services';
|
|
22
22
|
import '@tutti-os/workspace-file-reference/core';
|
|
23
|
-
import './agentConversationVM-
|
|
23
|
+
import './agentConversationVM-BzHZhwFP.js';
|
|
24
24
|
import '@tutti-os/workspace-issue-manager/core';
|
|
25
|
-
import './workspaceAgentActivityListTypes-
|
|
25
|
+
import './workspaceAgentActivityListTypes-DZfS_HgG.js';
|
|
26
26
|
import '@tutti-os/workspace-user-project/i18n';
|
|
27
27
|
import '@tutti-os/workspace-user-project/ui';
|
|
28
28
|
import '@tutti-os/workspace-user-project/contracts';
|
|
29
|
+
import '@tutti-os/workspace-file-reference/react';
|
|
29
30
|
import '@tutti-os/ui-rich-text/types';
|
|
30
31
|
import '@tutti-os/workspace-external-core/contracts';
|
|
31
32
|
import '@tutti-os/ui-rich-text/at-panel';
|
|
@@ -59,7 +60,7 @@ declare function resolveAgentGUIAgentTarget(input: {
|
|
|
59
60
|
}): AgentGUIAgentTarget | null;
|
|
60
61
|
|
|
61
62
|
declare const AGENT_GUI_DETAIL_MIN_WIDTH_PX = 220;
|
|
62
|
-
declare const AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX
|
|
63
|
+
declare const AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX: number;
|
|
63
64
|
declare const AGENT_GUI_EXPANDED_TARGET_WIDTH_PX = 800;
|
|
64
65
|
interface AgentGUIExpandedWindowFrameInput {
|
|
65
66
|
position: {
|
package/dist/index.js
CHANGED
|
@@ -7,22 +7,22 @@ import {
|
|
|
7
7
|
localAgentGUIAgentTargetId,
|
|
8
8
|
normalizeAgentGUIAgentTargets,
|
|
9
9
|
resolveAgentGUIAgentTarget
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-BQJOYTW2.js";
|
|
11
11
|
import {
|
|
12
12
|
AGENT_GUI_DETAIL_MIN_WIDTH_PX,
|
|
13
13
|
AGENT_GUI_EXPANDED_TARGET_WIDTH_PX,
|
|
14
14
|
AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX,
|
|
15
15
|
resolveAgentGUIExpandedWindowFrame,
|
|
16
16
|
shouldAutoCollapseAgentGUIConversationRail
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-D7HMQLBO.js";
|
|
18
|
+
import "./chunk-KAV2WHTG.js";
|
|
19
|
+
import "./chunk-4YVKAPKW.js";
|
|
20
|
+
import "./chunk-QY22OBJS.js";
|
|
21
21
|
import "./chunk-L3GMMGRS.js";
|
|
22
22
|
import "./chunk-UHBCM6RO.js";
|
|
23
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-JWHPVETQ.js";
|
|
24
24
|
import "./chunk-7BXWPI4F.js";
|
|
25
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-FAE7CXZO.js";
|
|
26
26
|
import {
|
|
27
27
|
agentGUIAgentIsReady,
|
|
28
28
|
normalizeAgentGUIAgents,
|
|
@@ -38,21 +38,23 @@ import {
|
|
|
38
38
|
} from "./chunk-4YG7YK7S.js";
|
|
39
39
|
import {
|
|
40
40
|
preloadAgentMentionBrowse
|
|
41
|
-
} from "./chunk-
|
|
42
|
-
import "./chunk-
|
|
43
|
-
import "./chunk-
|
|
44
|
-
import "./chunk-
|
|
41
|
+
} from "./chunk-EUW6VPIK.js";
|
|
42
|
+
import "./chunk-4YCCATI4.js";
|
|
43
|
+
import "./chunk-GCW57WYQ.js";
|
|
44
|
+
import "./chunk-F5UR6EJG.js";
|
|
45
45
|
import "./chunk-LUGELG5V.js";
|
|
46
46
|
import {
|
|
47
47
|
AGENT_CONTEXT_MENTION_PROVIDER_IDS
|
|
48
48
|
} from "./chunk-JM24HADP.js";
|
|
49
49
|
import {
|
|
50
50
|
dispatchAgentPlanPromptAction,
|
|
51
|
-
selectAgentPlanPromptTurn
|
|
51
|
+
selectAgentPlanPromptTurn
|
|
52
|
+
} from "./chunk-XFRY2WWB.js";
|
|
53
|
+
import {
|
|
52
54
|
useEngineSelector
|
|
53
|
-
} from "./chunk-
|
|
54
|
-
import "./chunk-
|
|
55
|
-
import "./chunk-
|
|
55
|
+
} from "./chunk-2RQM7PJN.js";
|
|
56
|
+
import "./chunk-MES7BQWI.js";
|
|
57
|
+
import "./chunk-DWUVRWXD.js";
|
|
56
58
|
import "./chunk-YMXYBG7U.js";
|
|
57
59
|
import {
|
|
58
60
|
AgentActivityHostProvider,
|
|
@@ -62,17 +64,16 @@ import {
|
|
|
62
64
|
useAgentActivityRuntime,
|
|
63
65
|
useAgentActivitySnapshot,
|
|
64
66
|
useOptionalAgentActivityRuntime
|
|
65
|
-
} from "./chunk-
|
|
66
|
-
import "./chunk-Y5M6Q6WX.js";
|
|
67
|
+
} from "./chunk-UESYITH6.js";
|
|
67
68
|
import "./chunk-PJP5BUU6.js";
|
|
68
69
|
import "./chunk-H6IQ63DQ.js";
|
|
69
|
-
import "./chunk-
|
|
70
|
+
import "./chunk-MIJXEELH.js";
|
|
70
71
|
import {
|
|
71
72
|
AgentGuiI18nProvider,
|
|
72
73
|
agentGuiI18nModule,
|
|
73
74
|
agentGuiI18nResources
|
|
74
|
-
} from "./chunk-
|
|
75
|
-
import "./chunk-
|
|
75
|
+
} from "./chunk-E5AD46HP.js";
|
|
76
|
+
import "./chunk-4E3QCW6L.js";
|
|
76
77
|
import {
|
|
77
78
|
getAgentCustomMentionKind,
|
|
78
79
|
registerAgentCustomMentionKind,
|