@bastani/atomic 0.9.5-alpha.8 → 0.9.5-alpha.9
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/CHANGELOG.md +16 -0
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/CHANGELOG.md +11 -0
- package/dist/builtin/mcp/README.md +6 -6
- package/dist/builtin/mcp/direct-tools.ts +41 -23
- package/dist/builtin/mcp/index.ts +31 -4
- package/dist/builtin/mcp/init.ts +4 -43
- package/dist/builtin/mcp/metadata-hydration.ts +37 -0
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/mcp/proxy-info-modes.ts +67 -14
- package/dist/builtin/mcp/startup-warmup.ts +98 -0
- package/dist/builtin/mcp/tool-result-renderer.ts +3 -3
- package/dist/builtin/subagents/CHANGELOG.md +12 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/index.ts +14 -25
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +89 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +23 -18
- package/dist/builtin/subagents/src/runs/background/result-watcher.ts +20 -10
- package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +13 -3
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +10 -2
- package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +28 -1
- package/dist/builtin/subagents/src/tui/render-widget.ts +29 -0
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +18 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/builtin/goal-runner.ts +39 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +16 -13
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.native.md +58 -0
- package/dist/builtin/workflows/skills/impeccable/reference/android.md +40 -0
- package/dist/builtin/workflows/skills/impeccable/reference/animate.md +2 -0
- package/dist/builtin/workflows/skills/impeccable/reference/audit.md +2 -0
- package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +139 -0
- package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +69 -62
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +21 -7
- package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +92 -0
- package/dist/builtin/workflows/skills/impeccable/reference/init.md +29 -7
- package/dist/builtin/workflows/skills/impeccable/reference/ios.md +45 -0
- package/dist/builtin/workflows/skills/impeccable/reference/layout.md +25 -1
- package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +23 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +2 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +75 -14
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +31 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +64 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +118 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +16 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +66 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +42 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +4 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +660 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-before-edit.mjs +516 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +1764 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +61 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +4 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +13 -16
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +17 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +104 -37
- package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +9 -0
- package/dist/builtin/workflows/src/durable/backend.ts +12 -0
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +17 -1
- package/dist/builtin/workflows/src/durable/resume-catalog.ts +12 -0
- package/dist/builtin/workflows/src/durable/resume-runtime.ts +5 -2
- package/dist/builtin/workflows/src/durable/types.ts +16 -0
- package/dist/builtin/workflows/src/engine/primitives/task.ts +1 -0
- package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +1 -2
- package/dist/builtin/workflows/src/engine/run-returned-status.ts +50 -16
- package/dist/builtin/workflows/src/engine/run.ts +20 -19
- package/dist/builtin/workflows/src/engine/runtime.ts +5 -0
- package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +9 -2
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +137 -27
- package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +22 -6
- package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
- package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +13 -1
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +19 -4
- package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +9 -0
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +48 -23
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +20 -8
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +24 -8
- package/dist/builtin/workflows/src/runs/background/status.ts +4 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +29 -8
- package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +2 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +3 -2
- package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +155 -20
- package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +6 -0
- package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -1
- package/dist/builtin/workflows/src/shared/returned-run-status.ts +116 -0
- package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +2 -0
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +21 -3
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +3 -0
- package/dist/builtin/workflows/src/tui/graph-view-types.ts +3 -0
- package/dist/builtin/workflows/src/tui/status-list.ts +22 -15
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +4 -4
- package/dist/core/agent-session-auto-compaction.d.ts +23 -3
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +129 -17
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +7 -0
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +6 -3
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +1 -1
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session.d.ts +4 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +4 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +8 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +2 -1
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +6 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +72 -29
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts +1 -0
- package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.js +24 -9
- package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
- package/dist/core/slash-commands.d.ts +2 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +141 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/main-deferred-startup.d.ts.map +1 -1
- package/dist/main-deferred-startup.js +2 -2
- package/dist/main-deferred-startup.js.map +1 -1
- package/dist/main-early-input.d.ts.map +1 -1
- package/dist/main-early-input.js +7 -0
- package/dist/main-early-input.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +0 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +1 -0
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +21 -9
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +41 -28
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -0
- package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +41 -6
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +3 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -2
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +3 -1
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js +0 -3
- package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +15 -1
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +5 -1
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +20 -21
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/global-theme.js +26 -2
- package/dist/modes/interactive/theme/global-theme.js.map +1 -1
- package/dist/utils/fs-watch.d.ts +24 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js +60 -5
- package/dist/utils/fs-watch.js.map +1 -1
- package/docs/compaction.md +5 -1
- package/docs/development.md +4 -0
- package/docs/extensions.md +5 -0
- package/docs/json.md +1 -1
- package/docs/quickstart.md +1 -1
- package/docs/settings.md +1 -1
- package/docs/subagents.md +4 -0
- package/docs/windows.md +4 -0
- package/docs/workflows.md +8 -6
- package/npm-shrinkwrap.json +23 -23
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-early-input.js","sourceRoot":"","sources":["../src/main-early-input.ts"],"names":[],"mappings":"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","sourcesContent":["export interface EarlyInputState {\n\ttext: string;\n\tsubmissions: string[];\n\tpendingEscape?: string;\n}\n\nexport interface EarlyInputSnapshot {\n\ttext: string;\n\tsubmissions: string[];\n}\n\nexport interface EarlyInputCapture {\n\tconsume(): EarlyInputSnapshot;\n}\n\ninterface EarlyInputStream {\n\tisTTY?: boolean;\n\tisRaw?: boolean;\n\tsetRawMode?(mode: boolean): void;\n\tsetEncoding?(encoding: BufferEncoding): void;\n\tresume(): void;\n\ton(event: \"data\", listener: (chunk: Buffer | string) => void): void;\n\toff?(event: \"data\", listener: (chunk: Buffer | string) => void): void;\n\tremoveListener(event: \"data\", listener: (chunk: Buffer | string) => void): void;\n}\n\ntype EarlyInputProcessEvent = \"exit\" | \"SIGINT\" | \"SIGTERM\" | \"SIGHUP\" | \"uncaughtException\";\ntype EarlyInputProcessListener = (error?: Error) => void;\n\ninterface EarlyInputProcess {\n\tpid: number;\n\tplatform: NodeJS.Platform;\n\ton(event: EarlyInputProcessEvent, listener: EarlyInputProcessListener): void;\n\toff?(event: EarlyInputProcessEvent, listener: EarlyInputProcessListener): void;\n\tremoveListener(event: EarlyInputProcessEvent, listener: EarlyInputProcessListener): void;\n\tkill(pid: number, signal: NodeJS.Signals): void;\n}\n\nexport interface StartEarlyInputCaptureOptions {\n\tenabled: boolean;\n\tstdin?: EarlyInputStream;\n\tprocess?: EarlyInputProcess;\n}\n\nconst PENDING_ESCAPE_CLEAR_MS = 50;\n\nfunction submitCurrentText(state: EarlyInputState): void {\n\tconst submitted = state.text.trim();\n\tstate.text = \"\";\n\tif (submitted.length > 0) state.submissions.push(submitted);\n}\n\nfunction escapeSequenceEndIndex(sequence: string): number | undefined {\n\tconst chars = Array.from(sequence);\n\tconst first = chars[0];\n\tif (first !== \"\\x1b\") return 1;\n\tconst next = chars[1];\n\tif (next === undefined) return undefined;\n\tif (next !== \"[\" && next !== \"O\") return 1;\n\tfor (let index = 2; index < chars.length; index += 1) {\n\t\tconst code = chars[index]?.charCodeAt(0) ?? 0;\n\t\tif (code >= 0x40 && code <= 0x7e) return index + 1;\n\t}\n\treturn undefined;\n}\n\nfunction takePendingEscape(state: EarlyInputState): string {\n\tconst pending = state.pendingEscape ?? \"\";\n\tstate.pendingEscape = undefined;\n\treturn pending;\n}\n\nexport function applyEarlyInputChunk(state: EarlyInputState, chunk: string): void {\n\tconst chars = Array.from(`${takePendingEscape(state)}${chunk}`);\n\tfor (let index = 0; index < chars.length;) {\n\t\tconst char = chars[index] ?? \"\";\n\t\tif (char === \"\\x1b\") {\n\t\t\tconst remaining = chars.slice(index).join(\"\");\n\t\t\tconst endIndex = escapeSequenceEndIndex(remaining);\n\t\t\tif (endIndex === undefined) {\n\t\t\t\tstate.pendingEscape = remaining.slice(0, 16);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tindex += endIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"\\r\" || char === \"\\n\") {\n\t\t\tsubmitCurrentText(state);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"\\b\" || char === \"\\x7f\") {\n\t\t\tstate.text = Array.from(state.text).slice(0, -1).join(\"\");\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tconst code = char.charCodeAt(0);\n\t\tif (code >= 0x20 && code !== 0x7f) state.text += char;\n\t\tindex += 1;\n\t}\n}\n\nfunction removeProcessListener(\n\tprocessLike: EarlyInputProcess,\n\tevent: EarlyInputProcessEvent,\n\tlistener: EarlyInputProcessListener,\n): void {\n\tif (processLike.off) processLike.off(event, listener);\n\telse processLike.removeListener(event, listener);\n}\n\nexport function startEarlyInputCapture(options: StartEarlyInputCaptureOptions): EarlyInputCapture | undefined {\n\tconst stdin = options.stdin ?? process.stdin;\n\tconst processLike = options.process ?? process;\n\tif (!options.enabled || stdin.isTTY !== true || !stdin.setRawMode) return undefined;\n\n\tconst state: EarlyInputState = { text: \"\", submissions: [] };\n\tconst wasRaw = stdin.isRaw === true;\n\tlet consumed = false;\n\tlet onData: (chunk: Buffer | string) => void;\n\tconst registeredProcessListeners: Array<{ event: EarlyInputProcessEvent; listener: EarlyInputProcessListener }> = [];\n\tlet pendingEscapeTimer: ReturnType<typeof setTimeout> | undefined;\n\tconst clearPendingEscapeTimer = () => {\n\t\tif (pendingEscapeTimer === undefined) return;\n\t\tclearTimeout(pendingEscapeTimer);\n\t\tpendingEscapeTimer = undefined;\n\t};\n\tconst schedulePendingEscapeClear = () => {\n\t\tclearPendingEscapeTimer();\n\t\tif (state.pendingEscape === undefined) return;\n\t\tpendingEscapeTimer = setTimeout(() => {\n\t\t\tstate.pendingEscape = undefined;\n\t\t\tpendingEscapeTimer = undefined;\n\t\t}, PENDING_ESCAPE_CLEAR_MS);\n\t};\n\tconst cleanup = () => {\n\t\tif (consumed) return;\n\t\tconsumed = true;\n\t\tif (stdin.off) stdin.off(\"data\", onData);\n\t\telse stdin.removeListener(\"data\", onData);\n\t\tfor (const { event, listener } of registeredProcessListeners) {\n\t\t\tremoveProcessListener(processLike, event, listener);\n\t\t}\n\t\tclearPendingEscapeTimer();\n\t\tstate.pendingEscape = undefined;\n\t\tstdin.setRawMode?.(wasRaw);\n\t};\n\tconst forwardSignal = (signal: NodeJS.Signals) => {\n\t\tcleanup();\n\t\tprocessLike.kill(processLike.pid, signal);\n\t};\n\tconst registerProcessListener = (event: EarlyInputProcessEvent, listener: EarlyInputProcessListener) => {\n\t\tregisteredProcessListeners.push({ event, listener });\n\t\tprocessLike.on(event, listener);\n\t};\n\tonData = (chunk: Buffer | string) => {\n\t\tconst text = chunk.toString();\n\t\tif (text.includes(\"\\x03\")) {\n\t\t\tforwardSignal(\"SIGINT\");\n\t\t\treturn;\n\t\t}\n\t\tclearPendingEscapeTimer();\n\t\tapplyEarlyInputChunk(state, text);\n\t\tschedulePendingEscapeClear();\n\t};\n\n\tstdin.setRawMode(true);\n\tstdin.setEncoding?.(\"utf8\");\n\tstdin.on(\"data\", onData);\n\tregisterProcessListener(\"exit\", cleanup);\n\tregisterProcessListener(\"SIGINT\", () => forwardSignal(\"SIGINT\"));\n\tregisterProcessListener(\"SIGTERM\", () => forwardSignal(\"SIGTERM\"));\n\tif (processLike.platform !== \"win32\") {\n\t\tregisterProcessListener(\"SIGHUP\", () => forwardSignal(\"SIGHUP\"));\n\t}\n\tregisterProcessListener(\"uncaughtException\", (error) => {\n\t\tcleanup();\n\t\tthrow error ?? new Error(\"Uncaught exception during startup input capture\");\n\t});\n\tstdin.resume();\n\n\treturn {\n\t\tconsume() {\n\t\t\tcleanup();\n\t\t\tstate.pendingEscape = undefined;\n\t\t\treturn { text: state.text, submissions: [...state.submissions] };\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"main-early-input.js","sourceRoot":"","sources":["../src/main-early-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { recordTimeSinceReset } from \"./core/timings.ts\";\n\nexport interface EarlyInputState {\n\ttext: string;\n\tsubmissions: string[];\n\tpendingEscape?: string;\n}\n\nexport interface EarlyInputSnapshot {\n\ttext: string;\n\tsubmissions: string[];\n}\n\nexport interface EarlyInputCapture {\n\tconsume(): EarlyInputSnapshot;\n}\n\ninterface EarlyInputStream {\n\tisTTY?: boolean;\n\tisRaw?: boolean;\n\tsetRawMode?(mode: boolean): void;\n\tsetEncoding?(encoding: BufferEncoding): void;\n\tresume(): void;\n\ton(event: \"data\", listener: (chunk: Buffer | string) => void): void;\n\toff?(event: \"data\", listener: (chunk: Buffer | string) => void): void;\n\tremoveListener(event: \"data\", listener: (chunk: Buffer | string) => void): void;\n}\n\ntype EarlyInputProcessEvent = \"exit\" | \"SIGINT\" | \"SIGTERM\" | \"SIGHUP\" | \"uncaughtException\";\ntype EarlyInputProcessListener = (error?: Error) => void;\n\ninterface EarlyInputProcess {\n\tpid: number;\n\tplatform: NodeJS.Platform;\n\ton(event: EarlyInputProcessEvent, listener: EarlyInputProcessListener): void;\n\toff?(event: EarlyInputProcessEvent, listener: EarlyInputProcessListener): void;\n\tremoveListener(event: EarlyInputProcessEvent, listener: EarlyInputProcessListener): void;\n\tkill(pid: number, signal: NodeJS.Signals): void;\n}\n\nexport interface StartEarlyInputCaptureOptions {\n\tenabled: boolean;\n\tstdin?: EarlyInputStream;\n\tprocess?: EarlyInputProcess;\n}\n\nconst PENDING_ESCAPE_CLEAR_MS = 50;\n\nfunction submitCurrentText(state: EarlyInputState): void {\n\tconst submitted = state.text.trim();\n\tstate.text = \"\";\n\tif (submitted.length > 0) state.submissions.push(submitted);\n}\n\nfunction escapeSequenceEndIndex(sequence: string): number | undefined {\n\tconst chars = Array.from(sequence);\n\tconst first = chars[0];\n\tif (first !== \"\\x1b\") return 1;\n\tconst next = chars[1];\n\tif (next === undefined) return undefined;\n\tif (next !== \"[\" && next !== \"O\") return 1;\n\tfor (let index = 2; index < chars.length; index += 1) {\n\t\tconst code = chars[index]?.charCodeAt(0) ?? 0;\n\t\tif (code >= 0x40 && code <= 0x7e) return index + 1;\n\t}\n\treturn undefined;\n}\n\nfunction takePendingEscape(state: EarlyInputState): string {\n\tconst pending = state.pendingEscape ?? \"\";\n\tstate.pendingEscape = undefined;\n\treturn pending;\n}\n\nexport function applyEarlyInputChunk(state: EarlyInputState, chunk: string): void {\n\tconst chars = Array.from(`${takePendingEscape(state)}${chunk}`);\n\tfor (let index = 0; index < chars.length;) {\n\t\tconst char = chars[index] ?? \"\";\n\t\tif (char === \"\\x1b\") {\n\t\t\tconst remaining = chars.slice(index).join(\"\");\n\t\t\tconst endIndex = escapeSequenceEndIndex(remaining);\n\t\t\tif (endIndex === undefined) {\n\t\t\t\tstate.pendingEscape = remaining.slice(0, 16);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tindex += endIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"\\r\" || char === \"\\n\") {\n\t\t\tsubmitCurrentText(state);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"\\b\" || char === \"\\x7f\") {\n\t\t\tstate.text = Array.from(state.text).slice(0, -1).join(\"\");\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tconst code = char.charCodeAt(0);\n\t\tif (code >= 0x20 && code !== 0x7f) state.text += char;\n\t\tindex += 1;\n\t}\n}\n\nfunction removeProcessListener(\n\tprocessLike: EarlyInputProcess,\n\tevent: EarlyInputProcessEvent,\n\tlistener: EarlyInputProcessListener,\n): void {\n\tif (processLike.off) processLike.off(event, listener);\n\telse processLike.removeListener(event, listener);\n}\n\nexport function startEarlyInputCapture(options: StartEarlyInputCaptureOptions): EarlyInputCapture | undefined {\n\tconst stdin = options.stdin ?? process.stdin;\n\tconst processLike = options.process ?? process;\n\tif (!options.enabled || stdin.isTTY !== true || !stdin.setRawMode) return undefined;\n\n\tconst state: EarlyInputState = { text: \"\", submissions: [] };\n\tconst wasRaw = stdin.isRaw === true;\n\tlet consumed = false;\n\tlet firstRawKeyRecorded = false;\n\tlet onData: (chunk: Buffer | string) => void;\n\tconst registeredProcessListeners: Array<{ event: EarlyInputProcessEvent; listener: EarlyInputProcessListener }> = [];\n\tlet pendingEscapeTimer: ReturnType<typeof setTimeout> | undefined;\n\tconst clearPendingEscapeTimer = () => {\n\t\tif (pendingEscapeTimer === undefined) return;\n\t\tclearTimeout(pendingEscapeTimer);\n\t\tpendingEscapeTimer = undefined;\n\t};\n\tconst schedulePendingEscapeClear = () => {\n\t\tclearPendingEscapeTimer();\n\t\tif (state.pendingEscape === undefined) return;\n\t\tpendingEscapeTimer = setTimeout(() => {\n\t\t\tstate.pendingEscape = undefined;\n\t\t\tpendingEscapeTimer = undefined;\n\t\t}, PENDING_ESCAPE_CLEAR_MS);\n\t};\n\tconst cleanup = () => {\n\t\tif (consumed) return;\n\t\tconsumed = true;\n\t\tif (stdin.off) stdin.off(\"data\", onData);\n\t\telse stdin.removeListener(\"data\", onData);\n\t\tfor (const { event, listener } of registeredProcessListeners) {\n\t\t\tremoveProcessListener(processLike, event, listener);\n\t\t}\n\t\tclearPendingEscapeTimer();\n\t\tstate.pendingEscape = undefined;\n\t\tstdin.setRawMode?.(wasRaw);\n\t};\n\tconst forwardSignal = (signal: NodeJS.Signals) => {\n\t\tcleanup();\n\t\tprocessLike.kill(processLike.pid, signal);\n\t};\n\tconst registerProcessListener = (event: EarlyInputProcessEvent, listener: EarlyInputProcessListener) => {\n\t\tregisteredProcessListeners.push({ event, listener });\n\t\tprocessLike.on(event, listener);\n\t};\n\tonData = (chunk: Buffer | string) => {\n\t\tif (!firstRawKeyRecorded) {\n\t\t\tfirstRawKeyRecorded = true;\n\t\t\trecordTimeSinceReset(\"startup-input-first-raw-key\");\n\t\t}\n\t\tconst text = chunk.toString();\n\t\tif (text.includes(\"\\x03\")) {\n\t\t\tforwardSignal(\"SIGINT\");\n\t\t\treturn;\n\t\t}\n\t\tclearPendingEscapeTimer();\n\t\tapplyEarlyInputChunk(state, text);\n\t\tschedulePendingEscapeClear();\n\t};\n\n\tstdin.setRawMode(true);\n\trecordTimeSinceReset(\"startup-input-raw-mode-enabled\");\n\tstdin.setEncoding?.(\"utf8\");\n\tstdin.on(\"data\", onData);\n\tregisterProcessListener(\"exit\", cleanup);\n\tregisterProcessListener(\"SIGINT\", () => forwardSignal(\"SIGINT\"));\n\tregisterProcessListener(\"SIGTERM\", () => forwardSignal(\"SIGTERM\"));\n\tif (processLike.platform !== \"win32\") {\n\t\tregisterProcessListener(\"SIGHUP\", () => forwardSignal(\"SIGHUP\"));\n\t}\n\tregisterProcessListener(\"uncaughtException\", (error) => {\n\t\tcleanup();\n\t\tthrow error ?? new Error(\"Uncaught exception during startup input capture\");\n\t});\n\tstdin.resume();\n\n\treturn {\n\t\tconsume() {\n\t\t\tcleanup();\n\t\t\tstate.pendingEscape = undefined;\n\t\t\treturn { text: state.text, submissions: [...state.submissions] };\n\t\t},\n\t};\n}\n"]}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAqBnE,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAAC,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEvH,MAAM,WAAW,WAAW;IAC3B,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,iBA4c/D","sourcesContent":["import chalk from \"chalk\";\nimport { parseArgs, printHelp } from \"./cli/args.ts\";\nimport { listModels } from \"./cli/list-models.ts\";\nimport { createProjectTrustContext } from \"./cli/project-trust.ts\";\nimport { ENV_OFFLINE, ENV_SESSION_DIR, ENV_SKIP_VERSION_CHECK, ENV_STARTUP_BENCHMARK, expandTildePath, getAgentDir, getEnvValue, setEnvValue, VERSION } from \"./config.ts\";\nimport { type CreateAgentSessionRuntimeFactory, createAgentSessionRuntime } from \"./core/agent-session-runtime.ts\";\nimport { type AgentSessionRuntimeDiagnostic, createAgentSessionFromServices, createAgentSessionServices } from \"./core/agent-session-services.ts\";\nimport { formatNoModelsAvailableMessage } from \"./core/auth-guidance.ts\";\nimport { AuthStorage } from \"./core/auth-storage.ts\";\nimport { getBuiltinPackagePaths } from \"./core/builtin-packages.ts\";\nimport { configureHttpDispatcher } from \"./core/http-dispatcher.ts\";\nimport type { ExtensionFactory } from \"./core/extensions/types.ts\";\nimport { resolveModelScope, resolveModelScopeWithDiagnostics } from \"./core/model-resolver.ts\";\nimport { restoreStdout, takeOverStdout } from \"./core/output-guard.ts\";\nimport { resolveProjectTrusted } from \"./core/project-trust.ts\";\nimport { getMissingSessionCwdIssue, MissingSessionCwdError } from \"./core/session-cwd.ts\";\nimport { SessionManager } from \"./core/session-manager.ts\";\nimport { SettingsManager } from \"./core/settings-manager.ts\";\nimport { endTimingSpan, printTimings, resetTimings, startTimingSpan, time } from \"./core/timings.ts\";\nimport { hasProjectTrustInputs, ProjectTrustStore } from \"./core/trust-manager.ts\";\nimport { runMigrations, showDeprecationWarnings } from \"./migrations.ts\";\nimport { type AppMode, isPlainRuntimeMetadataCommand, isReadOnlyRuntimeMetadataCommand, prepareInitialMessage, resolveAppMode, resolveCliPaths, resolveExcludedToolsForAppMode, toPrintOutputMode } from \"./main-app-mode.ts\";\nimport { type EarlyInputCapture, startEarlyInputCapture } from \"./main-early-input.ts\";\nimport { computeDeferExtensions, computeStartupInputCaptureEnabled, formatScopedModelList } from \"./main-deferred-startup.ts\";\nimport { createSessionManager, promptForMissingSessionCwd, validateForkFlags, validateSessionIdFlags } from \"./main-session.ts\";\nimport { buildSessionOptions } from \"./main-session-options.ts\";\nimport { collectSettingsDiagnostics, drainProcessStdio, isTruthyEnvFlag, readPipedStdin, reportDiagnostics } from \"./main-stdio.ts\";\nimport { InteractiveMode, runPrintMode, runRpcMode } from \"./modes/index.ts\";\nimport { initTheme, stopThemeWatcher } from \"./modes/interactive/theme/theme.ts\";\nimport { handleConfigCommand, handlePackageCommand } from \"./package-manager-cli.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\n\nexport type { AppMode } from \"./main-app-mode.ts\"; export { resolveExcludedToolsForAppMode } from \"./main-app-mode.ts\";\n\nexport interface MainOptions {\n\textensionFactories?: ExtensionFactory[];\n\tbuiltinPackagePaths?: string[];\n}\n\nexport async function main(args: string[], options?: MainOptions) {\n\tresetTimings();\n\tconst offlineMode = args.includes(\"--offline\") || isTruthyEnvFlag(getEnvValue(ENV_OFFLINE));\n\tif (offlineMode) {\n\t\tsetEnvValue(ENV_OFFLINE, \"1\");\n\t\tsetEnvValue(ENV_SKIP_VERSION_CHECK, \"1\");\n\t}\n\n\tif (await handlePackageCommand(args, { extensionFactories: options?.extensionFactories })) {\n\t\tconst exitCode = process.exitCode ?? 0;\n\t\tawait drainProcessStdio();\n\t\tprocess.exit(exitCode);\n\t\treturn;\n\t}\n\n\tif (await handleConfigCommand(args, { extensionFactories: options?.extensionFactories })) {\n\t\treturn;\n\t}\n\n\tconst parsed = parseArgs(args);\n\tif (parsed.diagnostics.length > 0) {\n\t\tfor (const d of parsed.diagnostics) {\n\t\t\tconst color = d.type === \"error\" ? chalk.red : chalk.yellow;\n\t\t\tconsole.error(color(`${d.type === \"error\" ? \"Error\" : \"Warning\"}: ${d.message}`));\n\t\t}\n\t\tif (parsed.diagnostics.some((d) => d.type === \"error\")) {\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\ttime(\"parseArgs\");\n\n\tif (parsed.version) {\n\t\tconsole.log(VERSION);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.export) {\n\t\tlet result: string;\n\t\ttry {\n\t\t\tconst outputPath = parsed.messages.length > 0 ? parsed.messages[0] : undefined;\n\t\t\tconst { exportFromFile } = await import(\"./core/export-html/index.ts\");\n\t\t\tresult = await exportFromFile(parsed.export, outputPath);\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Failed to export session\";\n\t\t\tconsole.error(chalk.red(`Error: ${message}`));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconsole.log(`Exported to: ${result}`);\n\t\tprocess.exit(0);\n\t}\n\n\tlet appMode = resolveAppMode(parsed, process.stdin.isTTY, process.stdout.isTTY);\n\tconst shouldTakeOverStdout = appMode !== \"interactive\";\n\tconst shouldRestoreStdoutForMetadata = isPlainRuntimeMetadataCommand(parsed);\n\tif (shouldTakeOverStdout) {\n\t\ttakeOverStdout();\n\t}\n\n\tif (parsed.mode === \"rpc\" && parsed.fileArgs.length > 0) {\n\t\tconsole.error(chalk.red(\"Error: @file arguments are not supported in RPC mode\"));\n\t\tprocess.exit(1);\n\t}\n\n\tvalidateForkFlags(parsed);\n\tvalidateSessionIdFlags(parsed);\n\n\tconst cwd = process.cwd();\n\tconst agentDir = getAgentDir();\n\tconst projectTrustStore = new ProjectTrustStore(agentDir);\n\tconst startupHasTrustInputs = hasProjectTrustInputs(cwd);\n\tconst startupStoredProjectTrust = startupHasTrustInputs ? projectTrustStore.get(cwd) : null;\n\tconst startupGlobalSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: false });\n\tconst startupDefaultProjectTrust = startupGlobalSettingsManager.getDefaultProjectTrust();\n\tconst startupProjectTrusted = parsed.projectTrustOverride ?? startupStoredProjectTrust ?? (!startupHasTrustInputs || startupDefaultProjectTrust === \"always\");\n\tconst resolvedExtensionPaths = resolveCliPaths(cwd, parsed.extensions), resolvedSkillPaths = resolveCliPaths(cwd, parsed.skills);\n\tconst resolvedPromptTemplatePaths = resolveCliPaths(cwd, parsed.promptTemplates), resolvedThemePaths = resolveCliPaths(cwd, parsed.themes);\n\tlet startupEarlyInputCapture: EarlyInputCapture | undefined = startEarlyInputCapture({ enabled: computeStartupInputCaptureEnabled({\n\t\tappMode, stdinIsTTY: process.stdin.isTTY === true, parsed, sessionCwd: cwd, projectTrustStore, resolvedExtensionPathCount: resolvedExtensionPaths?.length ?? 0,\n\t\tresolvedResourcePathCount: (resolvedSkillPaths?.length ?? 0) + (resolvedPromptTemplatePaths?.length ?? 0) + (resolvedThemePaths?.length ?? 0), deprecationWarningCount: 0,\n\t}) });\n\t// Run migrations after computing startup project trust so project-local migrations\n\t// cannot read or mutate untrusted project config before approval.\n\tconst { migratedAuthProviders: migratedProviders, deprecationWarnings } = runMigrations(cwd, {\n\t\tprojectTrusted: startupProjectTrusted,\n\t});\n\ttime(\"runMigrations\");\n\tif (deprecationWarnings.length > 0) {\n\t\tstartupEarlyInputCapture?.consume(); startupEarlyInputCapture = undefined;\n\t}\n\n\tconst startupSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: startupProjectTrusted });\n\treportDiagnostics(collectSettingsDiagnostics(startupSettingsManager, \"startup session lookup\"));\n\n\t// Decide the final runtime cwd before creating cwd-bound runtime services.\n\t// --session and --resume may select a session from another project, so project-local\n\t// settings, resources, provider registrations, and models must be resolved only after\n\t// the target session cwd is known. The startup-cwd settings manager is used only for\n\t// sessionDir lookup during session selection.\n\tconst envSessionDir = getEnvValue(ENV_SESSION_DIR);\n\tconst sessionDir =\n\t\t(parsed.sessionDir ? normalizePath(parsed.sessionDir) : undefined) ??\n\t\t(envSessionDir ? expandTildePath(envSessionDir) : undefined) ??\n\t\tstartupSettingsManager.getSessionDir();\n\tlet sessionManager = await createSessionManager(parsed, cwd, sessionDir, startupSettingsManager);\n\tconst missingSessionCwdIssue = getMissingSessionCwdIssue(sessionManager, cwd);\n\tif (missingSessionCwdIssue) {\n\t\tstartupEarlyInputCapture?.consume(); startupEarlyInputCapture = undefined;\n\t\tif (appMode === \"interactive\") {\n\t\t\tconst selectedCwd = await promptForMissingSessionCwd(missingSessionCwdIssue, startupSettingsManager);\n\t\t\tif (!selectedCwd) {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t\tsessionManager = SessionManager.open(missingSessionCwdIssue.sessionFile!, sessionDir, selectedCwd);\n\t\t} else {\n\t\t\tconsole.error(chalk.red(new MissingSessionCwdError(missingSessionCwdIssue).message));\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\tif (parsed.name !== undefined) {\n\t\tconst name = parsed.name.trim();\n\t\tif (!name) {\n\t\t\tconsole.error(chalk.red(\"Error: --name requires a non-empty value\"));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tsessionManager.appendSessionInfo(name);\n\t}\n\ttime(\"createSessionManager\");\n\n\tconst sessionCwd = sessionManager.getCwd();\n\tconst autoTrustOnReloadCwd =\n\t\tparsed.projectTrustOverride === undefined && !hasProjectTrustInputs(sessionCwd) ? sessionCwd : undefined;\n\n\tconst builtinPackagePaths = options?.builtinPackagePaths ?? getBuiltinPackagePaths();\n\tconst authStorage = AuthStorage.create();\n\tconst trustPromptMode: AppMode = parsed.help || parsed.listModels !== undefined ? \"print\" : appMode;\n\tconst projectTrustByCwd = new Map<string, boolean>();\n\tconst borrowedExtensionSourceTrustByPath = new Map<string, boolean>();\n\tlet deferredExtensionLoad = false;\n\tconst createRuntime: CreateAgentSessionRuntimeFactory = async ({\n\t\tcwd,\n\t\tagentDir,\n\t\tsessionManager,\n\t\tsessionStartEvent,\n\t\tprojectTrustContext,\n\t}) => {\n\t\tconst cachedProjectTrust = projectTrustByCwd.get(cwd);\n\t\tconst hasTrustInputs = hasProjectTrustInputs(cwd);\n\t\tconst storedProjectTrust = hasTrustInputs ? projectTrustStore.get(cwd) : null;\n\t\tconst initialProjectTrusted = parsed.projectTrustOverride ?? cachedProjectTrust ?? storedProjectTrust ?? !hasTrustInputs;\n\t\tconst shouldResolveProjectTrust =\n\t\t\tparsed.projectTrustOverride === undefined && cachedProjectTrust === undefined && hasTrustInputs;\n\t\tconst runtimeSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: initialProjectTrusted });\n\t\t// Defer extension loading to after first paint only when nothing before the TUI\n\t\t// starts needs extensions. Model scopes can be resolved again after extensions load.\n\t\tconst deferExtensions = computeDeferExtensions({\n\t\t\tappMode,\n\t\t\tstdinIsTTY: process.stdin.isTTY === true,\n\t\t\thasSessionStartEvent: sessionStartEvent !== undefined,\n\t\t\thelp: parsed.help,\n\t\t\tlistModels: parsed.listModels,\n\t\t\tshouldResolveProjectTrust,\n\t\t\tstoredProjectTrust,\n\t\t\tresolvedExtensionPathCount: resolvedExtensionPaths?.length ?? 0,\n\t\t\tresolvedResourcePathCount: (resolvedSkillPaths?.length ?? 0) + (resolvedPromptTemplatePaths?.length ?? 0) + (resolvedThemePaths?.length ?? 0),\n\t\t\thasSystemPromptInput: parsed.systemPrompt !== undefined || (parsed.appendSystemPrompt?.length ?? 0) > 0,\n\t\t\tunknownFlagCount: parsed.unknownFlags.size,\n\t\t\tprovider: parsed.provider,\n\t\t\tmodel: parsed.model,\n\t\t});\n\t\tif (sessionStartEvent === undefined) {\n\t\t\tdeferredExtensionLoad = deferExtensions;\n\t\t\tstartupEarlyInputCapture ??= startEarlyInputCapture({ enabled: deferExtensions && deprecationWarnings.length === 0 });\n\t\t}\n\t\tconst getProjectTrustContext = () =>\n\t\t\tprojectTrustContext ??\n\t\t\tcreateProjectTrustContext({\n\t\t\t\tcwd,\n\t\t\t\tmode: sessionStartEvent === undefined ? trustPromptMode : appMode,\n\t\t\t\tsettingsManager: runtimeSettingsManager,\n\t\t\t\thasUI: sessionStartEvent === undefined && trustPromptMode === \"interactive\",\n\t\t\t});\n\t\tconst services = await createAgentSessionServices({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tauthStorage,\n\t\t\tsettingsManager: runtimeSettingsManager,\n\t\t\textensionFlagValues: parsed.unknownFlags,\n\t\t\tresourceLoaderReloadOptions:\n\t\t\t\tdeferExtensions\n\t\t\t\t\t? { deferExtensions: true, deferResources: true }\n\t\t\t\t\t: shouldResolveProjectTrust || (resolvedExtensionPaths?.length ?? 0) > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tresolveProjectTrust: shouldResolveProjectTrust\n\t\t\t\t\t\t\t\t? async ({ extensionsResult }) => {\n\t\t\t\t\t\t\t\t\t\tconst trusted = await resolveProjectTrusted({\n\t\t\t\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t\t\t\t\ttrustStore: projectTrustStore,\n\t\t\t\t\t\t\t\t\t\t\tdefaultProjectTrust: runtimeSettingsManager.getDefaultProjectTrust(),\n\t\t\t\t\t\t\t\t\t\t\textensionsResult,\n\t\t\t\t\t\t\t\t\t\t\tprojectTrustContext: getProjectTrustContext(),\n\t\t\t\t\t\t\t\t\t\t\tonExtensionError: (message) => console.error(chalk.yellow(`Warning: ${message}`)),\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tprojectTrustByCwd.set(cwd, trusted);\n\t\t\t\t\t\t\t\t\t\tif (trusted && !initialProjectTrusted) {\n\t\t\t\t\t\t\t\t\t\t\trunMigrations(cwd, { projectTrusted: true });\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn trusted;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tresolveBorrowedProjectTrust: async ({ source, extensionsResult }) => {\n\t\t\t\t\t\t\t\tconst cachedTrust = borrowedExtensionSourceTrustByPath.get(source);\n\t\t\t\t\t\t\t\tif (cachedTrust !== undefined) {\n\t\t\t\t\t\t\t\t\treturn cachedTrust;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst trusted = await resolveProjectTrusted({\n\t\t\t\t\t\t\t\t\tcwd: source,\n\t\t\t\t\t\t\t\t\ttrustStore: projectTrustStore,\n\t\t\t\t\t\t\t\t\ttrustOverride: parsed.projectTrustOverride,\n\t\t\t\t\t\t\t\t\tdefaultProjectTrust: runtimeSettingsManager.getDefaultProjectTrust(),\n\t\t\t\t\t\t\t\t\textensionsResult,\n\t\t\t\t\t\t\t\t\tprojectTrustContext: getProjectTrustContext(),\n\t\t\t\t\t\t\t\t\tpromptMessage: `Trust extension source?\\n${source}\\n\\nThis allows Atomic to load project-local .atomic/.pi resources and .agents/skills from this -e source, including extensions and workflows that can execute code.`,\n\t\t\t\t\t\t\t\t\tonExtensionError: (message) => console.error(chalk.yellow(`Warning: ${message}`)),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tborrowedExtensionSourceTrustByPath.set(source, trusted);\n\t\t\t\t\t\t\t\treturn trusted;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\tresourceLoaderOptions: {\n\t\t\t\tadditionalExtensionPaths: resolvedExtensionPaths,\n\t\t\t\tadditionalSkillPaths: resolvedSkillPaths,\n\t\t\t\tadditionalPromptTemplatePaths: resolvedPromptTemplatePaths,\n\t\t\t\tadditionalThemePaths: resolvedThemePaths,\n\t\t\t\tbuiltinPackagePaths,\n\t\t\t\tnoExtensions: parsed.noExtensions,\n\t\t\t\tnoSkills: parsed.noSkills,\n\t\t\t\tnoPromptTemplates: parsed.noPromptTemplates,\n\t\t\t\tnoThemes: parsed.noThemes,\n\t\t\t\tnoContextFiles: parsed.noContextFiles,\n\t\t\t\tsystemPrompt: parsed.systemPrompt,\n\t\t\t\tappendSystemPrompt: parsed.appendSystemPrompt,\n\t\t\t\textensionFactories: options?.extensionFactories,\n\t\t\t},\n\t\t});\n\t\tconst { settingsManager, modelRegistry, resourceLoader } = services;\n\t\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [\n\t\t\t...services.diagnostics,\n\t\t\t...collectSettingsDiagnostics(settingsManager, \"runtime creation\"),\n\t\t\t...resourceLoader.getExtensions().errors.map(({ path, error }) => ({\n\t\t\t\ttype: \"error\" as const,\n\t\t\t\tmessage: `Failed to load extension \"${path}\": ${error}`,\n\t\t\t})),\n\t\t];\n\n\t\tconst modelPatterns = parsed.models ?? settingsManager.getEnabledModels();\n\t\tconst scopedModels =\n\t\t\tmodelPatterns && modelPatterns.length > 0\n\t\t\t\t? deferredExtensionLoad\n\t\t\t\t\t? (await resolveModelScopeWithDiagnostics(modelPatterns, modelRegistry)).scopedModels\n\t\t\t\t\t: await resolveModelScope(modelPatterns, modelRegistry)\n\t\t\t\t: [];\n\t\tconst {\n\t\t\toptions: sessionOptions,\n\t\t\tcliThinkingFromModel,\n\t\t\tdiagnostics: sessionOptionDiagnostics,\n\t\t} = buildSessionOptions(\n\t\t\tparsed,\n\t\t\tscopedModels,\n\t\t\tsessionManager.buildSessionContext().messages.length > 0,\n\t\t\tmodelRegistry,\n\t\t\tsettingsManager,\n\t\t);\n\t\tdiagnostics.push(...sessionOptionDiagnostics);\n\n\t\tif (parsed.apiKey) {\n\t\t\tif (!sessionOptions.model) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"--api-key requires a model to be specified via --model, --provider/--model, or --models\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tauthStorage.setRuntimeApiKey(sessionOptions.model.provider, parsed.apiKey);\n\t\t\t}\n\t\t}\n\n\t\tconst created = await createAgentSessionFromServices({\n\t\t\tservices,\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent,\n\t\t\tmodel: sessionOptions.model,\n\t\t\tthinkingLevel: sessionOptions.thinkingLevel,\n\t\t\tcontextWindow: sessionOptions.contextWindow,\n\t\t\tcontextWindowStrict: sessionOptions.contextWindowStrict,\n\t\t\tscopedModels: sessionOptions.scopedModels,\n\t\t\ttools: sessionOptions.tools,\n\t\t\texcludedTools: resolveExcludedToolsForAppMode(appMode, sessionOptions.excludedTools),\n\t\t\tnoTools: sessionOptions.noTools,\n\t\t\tcustomTools: sessionOptions.customTools,\n\t\t});\n\t\tif (created.contextWindowWarning) {\n\t\t\tdiagnostics.push({ type: \"warning\", message: created.contextWindowWarning });\n\t\t}\n\t\tif (created.contextWindowError) {\n\t\t\tdiagnostics.push({ type: \"error\", message: created.contextWindowError });\n\t\t}\n\n\t\tconst cliThinkingOverride = parsed.thinking !== undefined || cliThinkingFromModel;\n\t\tif (created.session.model && cliThinkingOverride) {\n\t\t\tcreated.session.setThinkingLevel(created.session.thinkingLevel);\n\t\t}\n\t\tconst hasFatalDiagnostics = diagnostics.some((diagnostic) => diagnostic.type === \"error\");\n\t\tif (\n\t\t\tcreated.session.model &&\n\t\t\tparsed.contextWindow !== undefined &&\n\t\t\t!created.contextWindowError &&\n\t\t\t!hasFatalDiagnostics &&\n\t\t\t!isReadOnlyRuntimeMetadataCommand(parsed)\n\t\t) {\n\t\t\tcreated.session.setContextWindow(parsed.contextWindow, { persistDefault: true });\n\t\t}\n\n\t\treturn {\n\t\t\t...created,\n\t\t\tservices,\n\t\t\tdiagnostics,\n\t\t};\n\t};\n\ttime(\"createRuntimeFactory\");\n\tconst runtimeCreationSpan = startTimingSpan(\"createAgentSessionRuntime\");\n\tconst runtime = await createAgentSessionRuntime(createRuntime, {\n\t\tcwd: sessionManager.getCwd(),\n\t\tagentDir,\n\t\tsessionManager,\n\t});\n\tendTimingSpan(runtimeCreationSpan);\n\tconst { services, session, modelFallbackMessage } = runtime;\n\tconst { settingsManager, modelRegistry, resourceLoader } = services;\n\tconfigureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());\n\n\tif (parsed.help) {\n\t\tconst extensionFlags = resourceLoader\n\t\t\t.getExtensions()\n\t\t\t.extensions.flatMap((extension) => Array.from(extension.flags.values()));\n\t\tif (shouldRestoreStdoutForMetadata) {\n\t\t\trestoreStdout();\n\t\t}\n\t\tprintHelp(extensionFlags);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.listModels !== undefined) {\n\t\tconst searchPattern = typeof parsed.listModels === \"string\" ? parsed.listModels : undefined;\n\t\tif (shouldRestoreStdoutForMetadata) {\n\t\t\trestoreStdout();\n\t\t}\n\t\tawait listModels(modelRegistry, searchPattern);\n\t\tprocess.exit(0);\n\t}\n\n\t// Read piped stdin content (if any) - skip for RPC mode which uses stdin for JSON-RPC\n\tlet stdinContent: string | undefined;\n\tif (appMode !== \"rpc\") {\n\t\tstdinContent = await readPipedStdin();\n\t\tif (stdinContent !== undefined && appMode === \"interactive\") {\n\t\t\tappMode = \"print\";\n\t\t}\n\t}\n\ttime(\"readPipedStdin\");\n\n\tconst { initialMessage, initialImages } = await prepareInitialMessage(\n\t\tparsed,\n\t\tsettingsManager.getImageAutoResize(),\n\t\tstdinContent,\n\t);\n\ttime(\"prepareInitialMessage\");\n\tinitTheme(settingsManager.getTheme(), appMode === \"interactive\");\n\ttime(\"initTheme\");\n\n\t// Show deprecation warnings in interactive mode\n\tif (appMode === \"interactive\" && deprecationWarnings.length > 0) {\n\t\tawait showDeprecationWarnings(deprecationWarnings);\n\t}\n\n\tconst scopedModels = [...session.scopedModels];\n\ttime(\"resolveModelScope\");\n\treportDiagnostics(runtime.diagnostics);\n\tif (runtime.diagnostics.some((diagnostic) => diagnostic.type === \"error\")) {\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\ttime(\"createAgentSession\");\n\n\tif (appMode !== \"interactive\" && !session.model) {\n\t\tconsole.error(chalk.red(formatNoModelsAvailableMessage()));\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\n\tconst startupBenchmark = isTruthyEnvFlag(getEnvValue(ENV_STARTUP_BENCHMARK));\n\tif (startupBenchmark && appMode !== \"interactive\") {\n\t\tconsole.error(chalk.red(`Error: ${ENV_STARTUP_BENCHMARK} only supports interactive mode`));\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\n\tif (appMode === \"rpc\") {\n\t\tprintTimings();\n\t\tawait runRpcMode(runtime);\n\t} else if (appMode === \"interactive\") {\n\t\tif (scopedModels.length > 0 && (parsed.verbose || !settingsManager.getQuietStartup())) {\n\t\t\tconsole.log(chalk.dim(`Model scope: ${formatScopedModelList(scopedModels)} ${chalk.gray(\"(ctrl+p cycle)\")}`));\n\t\t}\n\n\t\tconst interactiveMode = new InteractiveMode(runtime, {\n\t\t\tmigratedProviders,\n\t\t\tmodelFallbackMessage,\n\t\t\tautoTrustOnReloadCwd,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t\tinitialMessages: parsed.messages,\n\t\t\tverbose: parsed.verbose,\n\t\t\tdeferredExtensionLoad,\n\t\t\tstartupInputCapture: startupEarlyInputCapture,\n\t\t\tdeferredModelScopePatterns: deferredExtensionLoad ? (parsed.models ?? settingsManager.getEnabledModels()) : undefined,\n\t\t\tdeferredModelScopePreserveThinking: parsed.thinking !== undefined,\n\t\t});\n\t\tif (startupBenchmark) {\n\t\t\tawait interactiveMode.init();\n\t\t\ttime(\"interactiveMode.init\");\n\t\t\tawait interactiveMode.deferredStartupPromise;\n\t\t\tprintTimings();\n\t\t\tinteractiveMode.stop();\n\t\t\tstopThemeWatcher();\n\t\t\tif (process.stdout.writableLength > 0) {\n\t\t\t\tawait new Promise<void>((resolve) => process.stdout.once(\"drain\", resolve));\n\t\t\t}\n\t\t\tif (process.stderr.writableLength > 0) {\n\t\t\t\tawait new Promise<void>((resolve) => process.stderr.once(\"drain\", resolve));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprintTimings();\n\t\tawait interactiveMode.run();\n\t} else {\n\t\tprintTimings();\n\t\tconst exitCode = await runPrintMode(runtime, {\n\t\t\tmode: toPrintOutputMode(appMode),\n\t\t\tmessages: parsed.messages,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t});\n\t\tstopThemeWatcher();\n\t\trestoreStdout();\n\t\tif (exitCode !== 0) {\n\t\t\tprocess.exitCode = exitCode;\n\t\t}\n\t\treturn;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAqBnE,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAAC,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEvH,MAAM,WAAW,WAAW;IAC3B,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,iBA4c/D","sourcesContent":["import chalk from \"chalk\";\nimport { parseArgs, printHelp } from \"./cli/args.ts\";\nimport { listModels } from \"./cli/list-models.ts\";\nimport { createProjectTrustContext } from \"./cli/project-trust.ts\";\nimport { ENV_OFFLINE, ENV_SESSION_DIR, ENV_SKIP_VERSION_CHECK, ENV_STARTUP_BENCHMARK, expandTildePath, getAgentDir, getEnvValue, setEnvValue, VERSION } from \"./config.ts\";\nimport { type CreateAgentSessionRuntimeFactory, createAgentSessionRuntime } from \"./core/agent-session-runtime.ts\";\nimport { type AgentSessionRuntimeDiagnostic, createAgentSessionFromServices, createAgentSessionServices } from \"./core/agent-session-services.ts\";\nimport { formatNoModelsAvailableMessage } from \"./core/auth-guidance.ts\";\nimport { AuthStorage } from \"./core/auth-storage.ts\";\nimport { getBuiltinPackagePaths } from \"./core/builtin-packages.ts\";\nimport { configureHttpDispatcher } from \"./core/http-dispatcher.ts\";\nimport type { ExtensionFactory } from \"./core/extensions/types.ts\";\nimport { resolveModelScope, resolveModelScopeWithDiagnostics } from \"./core/model-resolver.ts\";\nimport { restoreStdout, takeOverStdout } from \"./core/output-guard.ts\";\nimport { resolveProjectTrusted } from \"./core/project-trust.ts\";\nimport { getMissingSessionCwdIssue, MissingSessionCwdError } from \"./core/session-cwd.ts\";\nimport { SessionManager } from \"./core/session-manager.ts\";\nimport { SettingsManager } from \"./core/settings-manager.ts\";\nimport { endTimingSpan, printTimings, resetTimings, startTimingSpan, time } from \"./core/timings.ts\";\nimport { hasProjectTrustInputs, ProjectTrustStore } from \"./core/trust-manager.ts\";\nimport { runMigrations, showDeprecationWarnings } from \"./migrations.ts\";\nimport { type AppMode, isPlainRuntimeMetadataCommand, isReadOnlyRuntimeMetadataCommand, prepareInitialMessage, resolveAppMode, resolveCliPaths, resolveExcludedToolsForAppMode, toPrintOutputMode } from \"./main-app-mode.ts\";\nimport { type EarlyInputCapture, startEarlyInputCapture } from \"./main-early-input.ts\";\nimport { computeDeferExtensions, computeStartupInputCaptureEnabled, formatScopedModelList } from \"./main-deferred-startup.ts\";\nimport { createSessionManager, promptForMissingSessionCwd, validateForkFlags, validateSessionIdFlags } from \"./main-session.ts\";\nimport { buildSessionOptions } from \"./main-session-options.ts\";\nimport { collectSettingsDiagnostics, drainProcessStdio, isTruthyEnvFlag, readPipedStdin, reportDiagnostics } from \"./main-stdio.ts\";\nimport { InteractiveMode, runPrintMode, runRpcMode } from \"./modes/index.ts\";\nimport { initTheme, stopThemeWatcher } from \"./modes/interactive/theme/theme.ts\";\nimport { handleConfigCommand, handlePackageCommand } from \"./package-manager-cli.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\n\nexport type { AppMode } from \"./main-app-mode.ts\"; export { resolveExcludedToolsForAppMode } from \"./main-app-mode.ts\";\n\nexport interface MainOptions {\n\textensionFactories?: ExtensionFactory[];\n\tbuiltinPackagePaths?: string[];\n}\n\nexport async function main(args: string[], options?: MainOptions) {\n\tresetTimings();\n\tconst offlineMode = args.includes(\"--offline\") || isTruthyEnvFlag(getEnvValue(ENV_OFFLINE));\n\tif (offlineMode) {\n\t\tsetEnvValue(ENV_OFFLINE, \"1\");\n\t\tsetEnvValue(ENV_SKIP_VERSION_CHECK, \"1\");\n\t}\n\n\tif (await handlePackageCommand(args, { extensionFactories: options?.extensionFactories })) {\n\t\tconst exitCode = process.exitCode ?? 0;\n\t\tawait drainProcessStdio();\n\t\tprocess.exit(exitCode);\n\t\treturn;\n\t}\n\n\tif (await handleConfigCommand(args, { extensionFactories: options?.extensionFactories })) {\n\t\treturn;\n\t}\n\n\tconst parsed = parseArgs(args);\n\tif (parsed.diagnostics.length > 0) {\n\t\tfor (const d of parsed.diagnostics) {\n\t\t\tconst color = d.type === \"error\" ? chalk.red : chalk.yellow;\n\t\t\tconsole.error(color(`${d.type === \"error\" ? \"Error\" : \"Warning\"}: ${d.message}`));\n\t\t}\n\t\tif (parsed.diagnostics.some((d) => d.type === \"error\")) {\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\ttime(\"parseArgs\");\n\n\tif (parsed.version) {\n\t\tconsole.log(VERSION);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.export) {\n\t\tlet result: string;\n\t\ttry {\n\t\t\tconst outputPath = parsed.messages.length > 0 ? parsed.messages[0] : undefined;\n\t\t\tconst { exportFromFile } = await import(\"./core/export-html/index.ts\");\n\t\t\tresult = await exportFromFile(parsed.export, outputPath);\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Failed to export session\";\n\t\t\tconsole.error(chalk.red(`Error: ${message}`));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconsole.log(`Exported to: ${result}`);\n\t\tprocess.exit(0);\n\t}\n\n\tlet appMode = resolveAppMode(parsed, process.stdin.isTTY, process.stdout.isTTY);\n\tconst shouldTakeOverStdout = appMode !== \"interactive\";\n\tconst shouldRestoreStdoutForMetadata = isPlainRuntimeMetadataCommand(parsed);\n\tif (shouldTakeOverStdout) {\n\t\ttakeOverStdout();\n\t}\n\n\tif (parsed.mode === \"rpc\" && parsed.fileArgs.length > 0) {\n\t\tconsole.error(chalk.red(\"Error: @file arguments are not supported in RPC mode\"));\n\t\tprocess.exit(1);\n\t}\n\n\tvalidateForkFlags(parsed);\n\tvalidateSessionIdFlags(parsed);\n\n\tconst cwd = process.cwd();\n\tconst agentDir = getAgentDir();\n\tconst projectTrustStore = new ProjectTrustStore(agentDir);\n\tconst startupHasTrustInputs = hasProjectTrustInputs(cwd);\n\tconst startupStoredProjectTrust = startupHasTrustInputs ? projectTrustStore.get(cwd) : null;\n\tconst startupGlobalSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: false });\n\tconst startupDefaultProjectTrust = startupGlobalSettingsManager.getDefaultProjectTrust();\n\tconst startupProjectTrusted = parsed.projectTrustOverride ?? startupStoredProjectTrust ?? (!startupHasTrustInputs || startupDefaultProjectTrust === \"always\");\n\tconst resolvedExtensionPaths = resolveCliPaths(cwd, parsed.extensions), resolvedSkillPaths = resolveCliPaths(cwd, parsed.skills);\n\tconst resolvedPromptTemplatePaths = resolveCliPaths(cwd, parsed.promptTemplates), resolvedThemePaths = resolveCliPaths(cwd, parsed.themes);\n\tlet startupEarlyInputCapture: EarlyInputCapture | undefined = startEarlyInputCapture({ enabled: computeStartupInputCaptureEnabled({\n\t\tappMode, stdinIsTTY: process.stdin.isTTY === true, parsed, sessionCwd: cwd, projectTrustStore, resolvedExtensionPathCount: resolvedExtensionPaths?.length ?? 0,\n\t\tresolvedResourcePathCount: (resolvedSkillPaths?.length ?? 0) + (resolvedPromptTemplatePaths?.length ?? 0) + (resolvedThemePaths?.length ?? 0), deprecationWarningCount: 0,\n\t}) });\n\t// Run migrations after computing startup project trust so project-local migrations\n\t// cannot read or mutate untrusted project config before approval.\n\tconst { migratedAuthProviders: migratedProviders, deprecationWarnings } = runMigrations(cwd, {\n\t\tprojectTrusted: startupProjectTrusted,\n\t});\n\ttime(\"runMigrations\");\n\tif (deprecationWarnings.length > 0) {\n\t\tstartupEarlyInputCapture?.consume(); startupEarlyInputCapture = undefined;\n\t}\n\n\tconst startupSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: startupProjectTrusted });\n\treportDiagnostics(collectSettingsDiagnostics(startupSettingsManager, \"startup session lookup\"));\n\n\t// Decide the final runtime cwd before creating cwd-bound runtime services.\n\t// --session and --resume may select a session from another project, so project-local\n\t// settings, resources, provider registrations, and models must be resolved only after\n\t// the target session cwd is known. The startup-cwd settings manager is used only for\n\t// sessionDir lookup during session selection.\n\tconst envSessionDir = getEnvValue(ENV_SESSION_DIR);\n\tconst sessionDir =\n\t\t(parsed.sessionDir ? normalizePath(parsed.sessionDir) : undefined) ??\n\t\t(envSessionDir ? expandTildePath(envSessionDir) : undefined) ??\n\t\tstartupSettingsManager.getSessionDir();\n\tlet sessionManager = await createSessionManager(parsed, cwd, sessionDir, startupSettingsManager);\n\tconst missingSessionCwdIssue = getMissingSessionCwdIssue(sessionManager, cwd);\n\tif (missingSessionCwdIssue) {\n\t\tstartupEarlyInputCapture?.consume(); startupEarlyInputCapture = undefined;\n\t\tif (appMode === \"interactive\") {\n\t\t\tconst selectedCwd = await promptForMissingSessionCwd(missingSessionCwdIssue, startupSettingsManager);\n\t\t\tif (!selectedCwd) {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t\tsessionManager = SessionManager.open(missingSessionCwdIssue.sessionFile!, sessionDir, selectedCwd);\n\t\t} else {\n\t\t\tconsole.error(chalk.red(new MissingSessionCwdError(missingSessionCwdIssue).message));\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\tif (parsed.name !== undefined) {\n\t\tconst name = parsed.name.trim();\n\t\tif (!name) {\n\t\t\tconsole.error(chalk.red(\"Error: --name requires a non-empty value\"));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tsessionManager.appendSessionInfo(name);\n\t}\n\ttime(\"createSessionManager\");\n\n\tconst sessionCwd = sessionManager.getCwd();\n\tconst autoTrustOnReloadCwd =\n\t\tparsed.projectTrustOverride === undefined && !hasProjectTrustInputs(sessionCwd) ? sessionCwd : undefined;\n\n\tconst builtinPackagePaths = options?.builtinPackagePaths ?? getBuiltinPackagePaths();\n\tconst authStorage = AuthStorage.create();\n\tconst trustPromptMode: AppMode = parsed.help || parsed.listModels !== undefined ? \"print\" : appMode;\n\tconst projectTrustByCwd = new Map<string, boolean>();\n\tconst borrowedExtensionSourceTrustByPath = new Map<string, boolean>();\n\tlet deferredExtensionLoad = false;\n\tconst createRuntime: CreateAgentSessionRuntimeFactory = async ({\n\t\tcwd,\n\t\tagentDir,\n\t\tsessionManager,\n\t\tsessionStartEvent,\n\t\tprojectTrustContext,\n\t}) => {\n\t\tconst cachedProjectTrust = projectTrustByCwd.get(cwd);\n\t\tconst hasTrustInputs = hasProjectTrustInputs(cwd);\n\t\tconst storedProjectTrust = hasTrustInputs ? projectTrustStore.get(cwd) : null;\n\t\tconst initialProjectTrusted = parsed.projectTrustOverride ?? cachedProjectTrust ?? storedProjectTrust ?? !hasTrustInputs;\n\t\tconst shouldResolveProjectTrust =\n\t\t\tparsed.projectTrustOverride === undefined && cachedProjectTrust === undefined && hasTrustInputs;\n\t\tconst runtimeSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: initialProjectTrusted });\n\t\t// Defer extension loading to after first paint only when nothing before the TUI\n\t\t// starts needs extensions. Model scopes can be resolved again after extensions load.\n\t\tconst deferExtensions = computeDeferExtensions({\n\t\t\tappMode,\n\t\t\tstdinIsTTY: process.stdin.isTTY === true,\n\t\t\thasSessionStartEvent: sessionStartEvent !== undefined,\n\t\t\thelp: parsed.help,\n\t\t\tlistModels: parsed.listModels,\n\t\t\tshouldResolveProjectTrust,\n\t\t\tstoredProjectTrust,\n\t\t\tresolvedExtensionPathCount: resolvedExtensionPaths?.length ?? 0,\n\t\t\tresolvedResourcePathCount: (resolvedSkillPaths?.length ?? 0) + (resolvedPromptTemplatePaths?.length ?? 0) + (resolvedThemePaths?.length ?? 0),\n\t\t\thasSystemPromptInput: parsed.systemPrompt !== undefined || (parsed.appendSystemPrompt?.length ?? 0) > 0,\n\t\t\tunknownFlagCount: parsed.unknownFlags.size,\n\t\t\tprovider: parsed.provider,\n\t\t\tmodel: parsed.model,\n\t\t});\n\t\tif (sessionStartEvent === undefined) {\n\t\t\tdeferredExtensionLoad = deferExtensions;\n\t\t\tstartupEarlyInputCapture ??= startEarlyInputCapture({ enabled: deferExtensions && deprecationWarnings.length === 0 });\n\t\t}\n\t\tconst getProjectTrustContext = () =>\n\t\t\tprojectTrustContext ??\n\t\t\tcreateProjectTrustContext({\n\t\t\t\tcwd,\n\t\t\t\tmode: sessionStartEvent === undefined ? trustPromptMode : appMode,\n\t\t\t\tsettingsManager: runtimeSettingsManager,\n\t\t\t\thasUI: sessionStartEvent === undefined && trustPromptMode === \"interactive\",\n\t\t\t});\n\t\tconst services = await createAgentSessionServices({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tauthStorage,\n\t\t\tsettingsManager: runtimeSettingsManager,\n\t\t\textensionFlagValues: parsed.unknownFlags,\n\t\t\tresourceLoaderReloadOptions:\n\t\t\t\tdeferExtensions\n\t\t\t\t\t? { deferExtensions: true, deferResources: true }\n\t\t\t\t\t: shouldResolveProjectTrust || (resolvedExtensionPaths?.length ?? 0) > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tresolveProjectTrust: shouldResolveProjectTrust\n\t\t\t\t\t\t\t\t? async ({ extensionsResult }) => {\n\t\t\t\t\t\t\t\t\t\tconst trusted = await resolveProjectTrusted({\n\t\t\t\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t\t\t\t\ttrustStore: projectTrustStore,\n\t\t\t\t\t\t\t\t\t\t\tdefaultProjectTrust: runtimeSettingsManager.getDefaultProjectTrust(),\n\t\t\t\t\t\t\t\t\t\t\textensionsResult,\n\t\t\t\t\t\t\t\t\t\t\tprojectTrustContext: getProjectTrustContext(),\n\t\t\t\t\t\t\t\t\t\t\tonExtensionError: (message) => console.error(chalk.yellow(`Warning: ${message}`)),\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tprojectTrustByCwd.set(cwd, trusted);\n\t\t\t\t\t\t\t\t\t\tif (trusted && !initialProjectTrusted) {\n\t\t\t\t\t\t\t\t\t\t\trunMigrations(cwd, { projectTrusted: true });\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn trusted;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tresolveBorrowedProjectTrust: async ({ source, extensionsResult }) => {\n\t\t\t\t\t\t\t\tconst cachedTrust = borrowedExtensionSourceTrustByPath.get(source);\n\t\t\t\t\t\t\t\tif (cachedTrust !== undefined) {\n\t\t\t\t\t\t\t\t\treturn cachedTrust;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst trusted = await resolveProjectTrusted({\n\t\t\t\t\t\t\t\t\tcwd: source,\n\t\t\t\t\t\t\t\t\ttrustStore: projectTrustStore,\n\t\t\t\t\t\t\t\t\ttrustOverride: parsed.projectTrustOverride,\n\t\t\t\t\t\t\t\t\tdefaultProjectTrust: runtimeSettingsManager.getDefaultProjectTrust(),\n\t\t\t\t\t\t\t\t\textensionsResult,\n\t\t\t\t\t\t\t\t\tprojectTrustContext: getProjectTrustContext(),\n\t\t\t\t\t\t\t\t\tpromptMessage: `Trust extension source?\\n${source}\\n\\nThis allows Atomic to load project-local .atomic/.pi resources and .agents/skills from this -e source, including extensions and workflows that can execute code.`,\n\t\t\t\t\t\t\t\t\tonExtensionError: (message) => console.error(chalk.yellow(`Warning: ${message}`)),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tborrowedExtensionSourceTrustByPath.set(source, trusted);\n\t\t\t\t\t\t\t\treturn trusted;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\tresourceLoaderOptions: {\n\t\t\t\tadditionalExtensionPaths: resolvedExtensionPaths,\n\t\t\t\tadditionalSkillPaths: resolvedSkillPaths,\n\t\t\t\tadditionalPromptTemplatePaths: resolvedPromptTemplatePaths,\n\t\t\t\tadditionalThemePaths: resolvedThemePaths,\n\t\t\t\tbuiltinPackagePaths,\n\t\t\t\tnoExtensions: parsed.noExtensions,\n\t\t\t\tnoSkills: parsed.noSkills,\n\t\t\t\tnoPromptTemplates: parsed.noPromptTemplates,\n\t\t\t\tnoThemes: parsed.noThemes,\n\t\t\t\tnoContextFiles: parsed.noContextFiles,\n\t\t\t\tsystemPrompt: parsed.systemPrompt,\n\t\t\t\tappendSystemPrompt: parsed.appendSystemPrompt,\n\t\t\t\textensionFactories: options?.extensionFactories,\n\t\t\t},\n\t\t});\n\t\tconst { settingsManager, modelRegistry, resourceLoader } = services;\n\t\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [\n\t\t\t...services.diagnostics,\n\t\t\t...collectSettingsDiagnostics(settingsManager, \"runtime creation\"),\n\t\t\t...resourceLoader.getExtensions().errors.map(({ path, error }) => ({\n\t\t\t\ttype: \"error\" as const,\n\t\t\t\tmessage: `Failed to load extension \"${path}\": ${error}`,\n\t\t\t})),\n\t\t];\n\n\t\tconst modelPatterns = parsed.models ?? settingsManager.getEnabledModels();\n\t\tconst scopedModels =\n\t\t\tmodelPatterns && modelPatterns.length > 0\n\t\t\t\t? deferredExtensionLoad\n\t\t\t\t\t? (await resolveModelScopeWithDiagnostics(modelPatterns, modelRegistry)).scopedModels\n\t\t\t\t\t: await resolveModelScope(modelPatterns, modelRegistry)\n\t\t\t\t: [];\n\t\tconst {\n\t\t\toptions: sessionOptions,\n\t\t\tcliThinkingFromModel,\n\t\t\tdiagnostics: sessionOptionDiagnostics,\n\t\t} = buildSessionOptions(\n\t\t\tparsed,\n\t\t\tscopedModels,\n\t\t\tsessionManager.buildSessionContext().messages.length > 0,\n\t\t\tmodelRegistry,\n\t\t\tsettingsManager,\n\t\t);\n\t\tdiagnostics.push(...sessionOptionDiagnostics);\n\n\t\tif (parsed.apiKey) {\n\t\t\tif (!sessionOptions.model) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"--api-key requires a model to be specified via --model, --provider/--model, or --models\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tauthStorage.setRuntimeApiKey(sessionOptions.model.provider, parsed.apiKey);\n\t\t\t}\n\t\t}\n\n\t\tconst created = await createAgentSessionFromServices({\n\t\t\tservices,\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent,\n\t\t\tmodel: sessionOptions.model,\n\t\t\tthinkingLevel: sessionOptions.thinkingLevel,\n\t\t\tcontextWindow: sessionOptions.contextWindow,\n\t\t\tcontextWindowStrict: sessionOptions.contextWindowStrict,\n\t\t\tscopedModels: sessionOptions.scopedModels,\n\t\t\ttools: sessionOptions.tools,\n\t\t\texcludedTools: resolveExcludedToolsForAppMode(appMode, sessionOptions.excludedTools),\n\t\t\tnoTools: sessionOptions.noTools,\n\t\t\tcustomTools: sessionOptions.customTools,\n\t\t});\n\t\tif (created.contextWindowWarning) {\n\t\t\tdiagnostics.push({ type: \"warning\", message: created.contextWindowWarning });\n\t\t}\n\t\tif (created.contextWindowError) {\n\t\t\tdiagnostics.push({ type: \"error\", message: created.contextWindowError });\n\t\t}\n\n\t\tconst cliThinkingOverride = parsed.thinking !== undefined || cliThinkingFromModel;\n\t\tif (created.session.model && cliThinkingOverride) {\n\t\t\tcreated.session.setThinkingLevel(created.session.thinkingLevel);\n\t\t}\n\t\tconst hasFatalDiagnostics = diagnostics.some((diagnostic) => diagnostic.type === \"error\");\n\t\tif (\n\t\t\tcreated.session.model &&\n\t\t\tparsed.contextWindow !== undefined &&\n\t\t\t!created.contextWindowError &&\n\t\t\t!hasFatalDiagnostics &&\n\t\t\t!isReadOnlyRuntimeMetadataCommand(parsed)\n\t\t) {\n\t\t\tcreated.session.setContextWindow(parsed.contextWindow, { persistDefault: true });\n\t\t}\n\n\t\treturn {\n\t\t\t...created,\n\t\t\tservices,\n\t\t\tdiagnostics,\n\t\t};\n\t};\n\ttime(\"createRuntimeFactory\");\n\tconst runtimeCreationSpan = startTimingSpan(\"createAgentSessionRuntime\");\n\tconst runtime = await createAgentSessionRuntime(createRuntime, {\n\t\tcwd: sessionManager.getCwd(),\n\t\tagentDir,\n\t\tsessionManager,\n\t});\n\tendTimingSpan(runtimeCreationSpan);\n\tconst { services, session, modelFallbackMessage } = runtime;\n\tconst { settingsManager, modelRegistry, resourceLoader } = services;\n\tconfigureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());\n\n\tif (parsed.help) {\n\t\tconst extensionFlags = resourceLoader\n\t\t\t.getExtensions()\n\t\t\t.extensions.flatMap((extension) => Array.from(extension.flags.values()));\n\t\tif (shouldRestoreStdoutForMetadata) {\n\t\t\trestoreStdout();\n\t\t}\n\t\tprintHelp(extensionFlags);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.listModels !== undefined) {\n\t\tconst searchPattern = typeof parsed.listModels === \"string\" ? parsed.listModels : undefined;\n\t\tif (shouldRestoreStdoutForMetadata) {\n\t\t\trestoreStdout();\n\t\t}\n\t\tawait listModels(modelRegistry, searchPattern);\n\t\tprocess.exit(0);\n\t}\n\n\t// Read piped stdin content (if any) - skip for RPC mode which uses stdin for JSON-RPC\n\tlet stdinContent: string | undefined;\n\tif (appMode !== \"rpc\") {\n\t\tstdinContent = await readPipedStdin();\n\t\tif (stdinContent !== undefined && appMode === \"interactive\") {\n\t\t\tappMode = \"print\";\n\t\t}\n\t}\n\ttime(\"readPipedStdin\");\n\n\tconst { initialMessage, initialImages } = await prepareInitialMessage(\n\t\tparsed,\n\t\tsettingsManager.getImageAutoResize(),\n\t\tstdinContent,\n\t);\n\ttime(\"prepareInitialMessage\");\n\tinitTheme(settingsManager.getTheme(), appMode === \"interactive\");\n\ttime(\"initTheme\");\n\n\t// Show deprecation warnings in interactive mode\n\tif (appMode === \"interactive\" && deprecationWarnings.length > 0) {\n\t\tawait showDeprecationWarnings(deprecationWarnings);\n\t}\n\n\tconst scopedModels = [...session.scopedModels];\n\ttime(\"resolveModelScope\");\n\treportDiagnostics(runtime.diagnostics);\n\tif (runtime.diagnostics.some((diagnostic) => diagnostic.type === \"error\")) {\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\ttime(\"createAgentSession\");\n\n\tif (appMode !== \"interactive\" && !session.model) {\n\t\tconsole.error(chalk.red(formatNoModelsAvailableMessage()));\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\n\tconst startupBenchmark = isTruthyEnvFlag(getEnvValue(ENV_STARTUP_BENCHMARK));\n\tif (startupBenchmark && appMode !== \"interactive\") {\n\t\tconsole.error(chalk.red(`Error: ${ENV_STARTUP_BENCHMARK} only supports interactive mode`));\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\n\tif (appMode === \"rpc\") {\n\t\tprintTimings();\n\t\tawait runRpcMode(runtime);\n\t} else if (appMode === \"interactive\") {\n\t\tif (scopedModels.length > 0 && (parsed.verbose || !settingsManager.getQuietStartup())) {\n\t\t\tconsole.log(chalk.dim(`Model scope: ${formatScopedModelList(scopedModels)} ${chalk.gray(\"(ctrl+p cycle)\")}`));\n\t\t}\n\n\t\tconst interactiveMode = new InteractiveMode(runtime, {\n\t\t\tmigratedProviders,\n\t\t\tmodelFallbackMessage,\n\t\t\tautoTrustOnReloadCwd,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t\tinitialMessages: parsed.messages,\n\t\t\tverbose: parsed.verbose,\n\t\t\tdeferredExtensionLoad,\n\t\t\tstartupInputCapture: startupEarlyInputCapture,\n\t\t\tdeferredModelScopePatterns: deferredExtensionLoad ? (parsed.models ?? settingsManager.getEnabledModels()) : undefined,\n\t\t\tdeferredModelScopePreserveThinking: parsed.thinking !== undefined,\n\t\t});\n\t\tif (startupBenchmark) {\n\t\t\tawait interactiveMode.init();\n\t\t\ttime(\"interactiveMode.init\");\n\t\t\tawait interactiveMode.ensureDeferredStartupComplete();\n\t\t\tprintTimings();\n\t\t\tinteractiveMode.stop();\n\t\t\tstopThemeWatcher();\n\t\t\tif (process.stdout.writableLength > 0) {\n\t\t\t\tawait new Promise<void>((resolve) => process.stdout.once(\"drain\", resolve));\n\t\t\t}\n\t\t\tif (process.stderr.writableLength > 0) {\n\t\t\t\tawait new Promise<void>((resolve) => process.stderr.once(\"drain\", resolve));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprintTimings();\n\t\tawait interactiveMode.run();\n\t} else {\n\t\tprintTimings();\n\t\tconst exitCode = await runPrintMode(runtime, {\n\t\t\tmode: toPrintOutputMode(appMode),\n\t\t\tmessages: parsed.messages,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t});\n\t\tstopThemeWatcher();\n\t\trestoreStdout();\n\t\tif (exitCode !== 0) {\n\t\t\tprocess.exitCode = exitCode;\n\t\t}\n\t\treturn;\n\t}\n}\n"]}
|
package/dist/main.js
CHANGED
|
@@ -409,7 +409,7 @@ export async function main(args, options) {
|
|
|
409
409
|
if (startupBenchmark) {
|
|
410
410
|
await interactiveMode.init();
|
|
411
411
|
time("interactiveMode.init");
|
|
412
|
-
await interactiveMode.
|
|
412
|
+
await interactiveMode.ensureDeferredStartupComplete();
|
|
413
413
|
printTimings();
|
|
414
414
|
interactiveMode.stop();
|
|
415
415
|
stopThemeWatcher();
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3K,OAAO,EAAyC,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAsC,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAClJ,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAgB,6BAA6B,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9N,OAAO,EAA0B,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChI,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpI,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEE,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAOvH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc,EAAE,OAAqB;IAC/D,YAAY,EAAE,CAAC;IACf,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5F,IAAI,WAAW,EAAE,CAAC;QACjB,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC9B,WAAW,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM,oBAAoB,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC3F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACvC,MAAM,iBAAiB,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO;IACR,CAAC;IAED,IAAI,MAAM,mBAAmB,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC1F,OAAO;IACR,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,CAAC;IAElB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvE,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;YACpF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChF,MAAM,oBAAoB,GAAG,OAAO,KAAK,aAAa,CAAC;IACvD,MAAM,8BAA8B,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,oBAAoB,EAAE,CAAC;QAC1B,cAAc,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,yBAAyB,GAAG,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,MAAM,4BAA4B,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IACtG,MAAM,0BAA0B,GAAG,4BAA4B,CAAC,sBAAsB,EAAE,CAAC;IACzF,MAAM,qBAAqB,GAAG,MAAM,CAAC,oBAAoB,IAAI,yBAAyB,IAAI,CAAC,CAAC,qBAAqB,IAAI,0BAA0B,KAAK,QAAQ,CAAC,CAAC;IAC9J,MAAM,sBAAsB,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACjI,MAAM,2BAA2B,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3I,IAAI,wBAAwB,GAAkC,sBAAsB,CAAC,EAAE,OAAO,EAAE,iCAAiC,CAAC;YACjI,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,IAAI,CAAC;YAC9J,yBAAyB,EAAE,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC;SACzK,CAAC,EAAE,CAAC,CAAC;IACN,mFAAmF;IACnF,kEAAkE;IAClE,MAAM,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE;QAC5F,cAAc,EAAE,qBAAqB;KACrC,CAAC,CAAC;IACH,IAAI,CAAC,eAAe,CAAC,CAAC;IACtB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,wBAAwB,EAAE,OAAO,EAAE,CAAC;QAAC,wBAAwB,GAAG,SAAS,CAAC;IAC3E,CAAC;IAED,MAAM,sBAAsB,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAChH,iBAAiB,CAAC,0BAA0B,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAEhG,2EAA2E;IAC3E,qFAAqF;IACrF,sFAAsF;IACtF,qFAAqF;IACrF,8CAA8C;IAC9C,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,UAAU,GACf,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,sBAAsB,CAAC,aAAa,EAAE,CAAC;IACxC,IAAI,cAAc,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IACjG,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC9E,IAAI,sBAAsB,EAAE,CAAC;QAC5B,wBAAwB,EAAE,OAAO,EAAE,CAAC;QAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1E,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,MAAM,0BAA0B,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;YACrG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACpG,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAE7B,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,oBAAoB,GACzB,MAAM,CAAC,oBAAoB,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1G,MAAM,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,sBAAsB,EAAE,CAAC;IACrF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IACzC,MAAM,eAAe,GAAY,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACpG,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrD,MAAM,kCAAkC,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtE,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,MAAM,aAAa,GAAqC,KAAK,EAAE,EAC9D,GAAG,EACH,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACnB,EAAE,EAAE;QACJ,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,kBAAkB,GAAG,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,MAAM,qBAAqB,GAAG,MAAM,CAAC,oBAAoB,IAAI,kBAAkB,IAAI,kBAAkB,IAAI,CAAC,cAAc,CAAC;QACzH,MAAM,yBAAyB,GAC9B,MAAM,CAAC,oBAAoB,KAAK,SAAS,IAAI,kBAAkB,KAAK,SAAS,IAAI,cAAc,CAAC;QACjG,MAAM,sBAAsB,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAChH,gFAAgF;QAChF,qFAAqF;QACrF,MAAM,eAAe,GAAG,sBAAsB,CAAC;YAC9C,OAAO;YACP,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;YACxC,oBAAoB,EAAE,iBAAiB,KAAK,SAAS;YACrD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,yBAAyB;YACzB,kBAAkB;YAClB,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,IAAI,CAAC;YAC/D,yBAAyB,EAAE,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC;YAC7I,oBAAoB,EAAE,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;YACvG,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI;YAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;SACnB,CAAC,CAAC;QACH,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACrC,qBAAqB,GAAG,eAAe,CAAC;YACxC,wBAAwB,KAAK,sBAAsB,CAAC,EAAE,OAAO,EAAE,eAAe,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QACvH,CAAC;QACD,MAAM,sBAAsB,GAAG,GAAG,EAAE,CACnC,mBAAmB;YACnB,yBAAyB,CAAC;gBACzB,GAAG;gBACH,IAAI,EAAE,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO;gBACjE,eAAe,EAAE,sBAAsB;gBACvC,KAAK,EAAE,iBAAiB,KAAK,SAAS,IAAI,eAAe,KAAK,aAAa;aAC3E,CAAC,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;YACjD,GAAG;YACH,QAAQ;YACR,WAAW;YACX,eAAe,EAAE,sBAAsB;YACvC,mBAAmB,EAAE,MAAM,CAAC,YAAY;YACxC,2BAA2B,EAC1B,eAAe;gBACd,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;gBACjD,CAAC,CAAC,yBAAyB,IAAI,CAAC,sBAAsB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;oBACxE,CAAC,CAAC;wBACA,mBAAmB,EAAE,yBAAyB;4BAC7C,CAAC,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;gCAC/B,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;oCAC3C,GAAG;oCACH,UAAU,EAAE,iBAAiB;oCAC7B,mBAAmB,EAAE,sBAAsB,CAAC,sBAAsB,EAAE;oCACpE,gBAAgB;oCAChB,mBAAmB,EAAE,sBAAsB,EAAE;oCAC7C,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;iCACjF,CAAC,CAAC;gCACH,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gCACpC,IAAI,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;oCACvC,aAAa,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;gCAC9C,CAAC;gCACD,OAAO,OAAO,CAAC;4BAChB,CAAC;4BACF,CAAC,CAAC,SAAS;wBACZ,2BAA2B,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE;4BACnE,MAAM,WAAW,GAAG,kCAAkC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;4BACnE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gCAC/B,OAAO,WAAW,CAAC;4BACpB,CAAC;4BACD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;gCAC3C,GAAG,EAAE,MAAM;gCACX,UAAU,EAAE,iBAAiB;gCAC7B,aAAa,EAAE,MAAM,CAAC,oBAAoB;gCAC1C,mBAAmB,EAAE,sBAAsB,CAAC,sBAAsB,EAAE;gCACpE,gBAAgB;gCAChB,mBAAmB,EAAE,sBAAsB,EAAE;gCAC7C,aAAa,EAAE,4BAA4B,MAAM,sKAAsK;gCACvN,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;6BACjF,CAAC,CAAC;4BACH,kCAAkC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;4BACxD,OAAO,OAAO,CAAC;wBAChB,CAAC;qBACD;oBACF,CAAC,CAAC,SAAS;YACb,qBAAqB,EAAE;gBACtB,wBAAwB,EAAE,sBAAsB;gBAChD,oBAAoB,EAAE,kBAAkB;gBACxC,6BAA6B,EAAE,2BAA2B;gBAC1D,oBAAoB,EAAE,kBAAkB;gBACxC,mBAAmB;gBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gBAC7C,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;aAC/C;SACD,CAAC,CAAC;QACH,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC;QACpE,MAAM,WAAW,GAAoC;YACpD,GAAG,QAAQ,CAAC,WAAW;YACvB,GAAG,0BAA0B,CAAC,eAAe,EAAE,kBAAkB,CAAC;YAClE,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClE,IAAI,EAAE,OAAgB;gBACtB,OAAO,EAAE,6BAA6B,IAAI,MAAM,KAAK,EAAE;aACvD,CAAC,CAAC;SACH,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,gBAAgB,EAAE,CAAC;QAC1E,MAAM,YAAY,GACjB,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YACxC,CAAC,CAAC,qBAAqB;gBACtB,CAAC,CAAC,CAAC,MAAM,gCAAgC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY;gBACrF,CAAC,CAAC,MAAM,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,EACL,OAAO,EAAE,cAAc,EACvB,oBAAoB,EACpB,WAAW,EAAE,wBAAwB,GACrC,GAAG,mBAAmB,CACtB,MAAM,EACN,YAAY,EACZ,cAAc,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EACxD,aAAa,EACb,eAAe,CACf,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,CAAC;QAE9C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC3B,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,yFAAyF;iBAClG,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5E,CAAC;QACF,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,8BAA8B,CAAC;YACpD,QAAQ;YACR,cAAc;YACd,iBAAiB;YACjB,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,mBAAmB,EAAE,cAAc,CAAC,mBAAmB;YACvD,YAAY,EAAE,cAAc,CAAC,YAAY;YACzC,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,aAAa,EAAE,8BAA8B,CAAC,OAAO,EAAE,cAAc,CAAC,aAAa,CAAC;YACpF,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,WAAW,EAAE,cAAc,CAAC,WAAW;SACvC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAClC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,oBAAoB,CAAC;QAClF,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,mBAAmB,EAAE,CAAC;YAClD,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC1F,IACC,OAAO,CAAC,OAAO,CAAC,KAAK;YACrB,MAAM,CAAC,aAAa,KAAK,SAAS;YAClC,CAAC,OAAO,CAAC,kBAAkB;YAC3B,CAAC,mBAAmB;YACpB,CAAC,gCAAgC,CAAC,MAAM,CAAC,EACxC,CAAC;YACF,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,OAAO;YACN,GAAG,OAAO;YACV,QAAQ;YACR,WAAW;SACX,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC7B,MAAM,mBAAmB,GAAG,eAAe,CAAC,2BAA2B,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,aAAa,EAAE;QAC9D,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE;QAC5B,QAAQ;QACR,cAAc;KACd,CAAC,CAAC;IACH,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IAC5D,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC;IACpE,uBAAuB,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAEhE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,cAAc;aACnC,aAAa,EAAE;aACf,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,8BAA8B,EAAE,CAAC;YACpC,aAAa,EAAE,CAAC;QACjB,CAAC;QACD,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,IAAI,8BAA8B,EAAE,CAAC;YACpC,aAAa,EAAE,CAAC;QACjB,CAAC;QACD,MAAM,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,sFAAsF;IACtF,IAAI,YAAgC,CAAC;IACrC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACvB,YAAY,GAAG,MAAM,cAAc,EAAE,CAAC;QACtC,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC7D,OAAO,GAAG,OAAO,CAAC;QACnB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAEvB,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,MAAM,qBAAqB,CACpE,MAAM,EACN,eAAe,CAAC,kBAAkB,EAAE,EACpC,YAAY,CACZ,CAAC;IACF,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC9B,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,KAAK,aAAa,CAAC,CAAC;IACjE,IAAI,CAAC,WAAW,CAAC,CAAC;IAElB,gDAAgD;IAChD,IAAI,OAAO,KAAK,aAAa,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1B,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QAC3E,wBAAwB,EAAE,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAE3B,IAAI,OAAO,KAAK,aAAa,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;QAC3D,wBAAwB,EAAE,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC7E,IAAI,gBAAgB,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,qBAAqB,iCAAiC,CAAC,CAAC,CAAC;QAC3F,wBAAwB,EAAE,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACvB,YAAY,EAAE,CAAC;QACf,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QACtC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;YACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,qBAAqB,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/G,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE;YACpD,iBAAiB;YACjB,oBAAoB;YACpB,oBAAoB;YACpB,cAAc;YACd,aAAa;YACb,eAAe,EAAE,MAAM,CAAC,QAAQ;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,qBAAqB;YACrB,mBAAmB,EAAE,wBAAwB;YAC7C,0BAA0B,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACrH,kCAAkC,EAAE,MAAM,CAAC,QAAQ,KAAK,SAAS;SACjE,CAAC,CAAC;QACH,IAAI,gBAAgB,EAAE,CAAC;YACtB,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC7B,MAAM,eAAe,CAAC,sBAAsB,CAAC;YAC7C,YAAY,EAAE,CAAC;YACf,eAAe,CAAC,IAAI,EAAE,CAAC;YACvB,gBAAgB,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO;QACR,CAAC;QAED,YAAY,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACP,YAAY,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE;YAC5C,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC;YAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc;YACd,aAAa;SACb,CAAC,CAAC;QACH,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,CAAC;QACD,OAAO;IACR,CAAC;AACF,CAAC","sourcesContent":["import chalk from \"chalk\";\nimport { parseArgs, printHelp } from \"./cli/args.ts\";\nimport { listModels } from \"./cli/list-models.ts\";\nimport { createProjectTrustContext } from \"./cli/project-trust.ts\";\nimport { ENV_OFFLINE, ENV_SESSION_DIR, ENV_SKIP_VERSION_CHECK, ENV_STARTUP_BENCHMARK, expandTildePath, getAgentDir, getEnvValue, setEnvValue, VERSION } from \"./config.ts\";\nimport { type CreateAgentSessionRuntimeFactory, createAgentSessionRuntime } from \"./core/agent-session-runtime.ts\";\nimport { type AgentSessionRuntimeDiagnostic, createAgentSessionFromServices, createAgentSessionServices } from \"./core/agent-session-services.ts\";\nimport { formatNoModelsAvailableMessage } from \"./core/auth-guidance.ts\";\nimport { AuthStorage } from \"./core/auth-storage.ts\";\nimport { getBuiltinPackagePaths } from \"./core/builtin-packages.ts\";\nimport { configureHttpDispatcher } from \"./core/http-dispatcher.ts\";\nimport type { ExtensionFactory } from \"./core/extensions/types.ts\";\nimport { resolveModelScope, resolveModelScopeWithDiagnostics } from \"./core/model-resolver.ts\";\nimport { restoreStdout, takeOverStdout } from \"./core/output-guard.ts\";\nimport { resolveProjectTrusted } from \"./core/project-trust.ts\";\nimport { getMissingSessionCwdIssue, MissingSessionCwdError } from \"./core/session-cwd.ts\";\nimport { SessionManager } from \"./core/session-manager.ts\";\nimport { SettingsManager } from \"./core/settings-manager.ts\";\nimport { endTimingSpan, printTimings, resetTimings, startTimingSpan, time } from \"./core/timings.ts\";\nimport { hasProjectTrustInputs, ProjectTrustStore } from \"./core/trust-manager.ts\";\nimport { runMigrations, showDeprecationWarnings } from \"./migrations.ts\";\nimport { type AppMode, isPlainRuntimeMetadataCommand, isReadOnlyRuntimeMetadataCommand, prepareInitialMessage, resolveAppMode, resolveCliPaths, resolveExcludedToolsForAppMode, toPrintOutputMode } from \"./main-app-mode.ts\";\nimport { type EarlyInputCapture, startEarlyInputCapture } from \"./main-early-input.ts\";\nimport { computeDeferExtensions, computeStartupInputCaptureEnabled, formatScopedModelList } from \"./main-deferred-startup.ts\";\nimport { createSessionManager, promptForMissingSessionCwd, validateForkFlags, validateSessionIdFlags } from \"./main-session.ts\";\nimport { buildSessionOptions } from \"./main-session-options.ts\";\nimport { collectSettingsDiagnostics, drainProcessStdio, isTruthyEnvFlag, readPipedStdin, reportDiagnostics } from \"./main-stdio.ts\";\nimport { InteractiveMode, runPrintMode, runRpcMode } from \"./modes/index.ts\";\nimport { initTheme, stopThemeWatcher } from \"./modes/interactive/theme/theme.ts\";\nimport { handleConfigCommand, handlePackageCommand } from \"./package-manager-cli.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\n\nexport type { AppMode } from \"./main-app-mode.ts\"; export { resolveExcludedToolsForAppMode } from \"./main-app-mode.ts\";\n\nexport interface MainOptions {\n\textensionFactories?: ExtensionFactory[];\n\tbuiltinPackagePaths?: string[];\n}\n\nexport async function main(args: string[], options?: MainOptions) {\n\tresetTimings();\n\tconst offlineMode = args.includes(\"--offline\") || isTruthyEnvFlag(getEnvValue(ENV_OFFLINE));\n\tif (offlineMode) {\n\t\tsetEnvValue(ENV_OFFLINE, \"1\");\n\t\tsetEnvValue(ENV_SKIP_VERSION_CHECK, \"1\");\n\t}\n\n\tif (await handlePackageCommand(args, { extensionFactories: options?.extensionFactories })) {\n\t\tconst exitCode = process.exitCode ?? 0;\n\t\tawait drainProcessStdio();\n\t\tprocess.exit(exitCode);\n\t\treturn;\n\t}\n\n\tif (await handleConfigCommand(args, { extensionFactories: options?.extensionFactories })) {\n\t\treturn;\n\t}\n\n\tconst parsed = parseArgs(args);\n\tif (parsed.diagnostics.length > 0) {\n\t\tfor (const d of parsed.diagnostics) {\n\t\t\tconst color = d.type === \"error\" ? chalk.red : chalk.yellow;\n\t\t\tconsole.error(color(`${d.type === \"error\" ? \"Error\" : \"Warning\"}: ${d.message}`));\n\t\t}\n\t\tif (parsed.diagnostics.some((d) => d.type === \"error\")) {\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\ttime(\"parseArgs\");\n\n\tif (parsed.version) {\n\t\tconsole.log(VERSION);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.export) {\n\t\tlet result: string;\n\t\ttry {\n\t\t\tconst outputPath = parsed.messages.length > 0 ? parsed.messages[0] : undefined;\n\t\t\tconst { exportFromFile } = await import(\"./core/export-html/index.ts\");\n\t\t\tresult = await exportFromFile(parsed.export, outputPath);\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Failed to export session\";\n\t\t\tconsole.error(chalk.red(`Error: ${message}`));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconsole.log(`Exported to: ${result}`);\n\t\tprocess.exit(0);\n\t}\n\n\tlet appMode = resolveAppMode(parsed, process.stdin.isTTY, process.stdout.isTTY);\n\tconst shouldTakeOverStdout = appMode !== \"interactive\";\n\tconst shouldRestoreStdoutForMetadata = isPlainRuntimeMetadataCommand(parsed);\n\tif (shouldTakeOverStdout) {\n\t\ttakeOverStdout();\n\t}\n\n\tif (parsed.mode === \"rpc\" && parsed.fileArgs.length > 0) {\n\t\tconsole.error(chalk.red(\"Error: @file arguments are not supported in RPC mode\"));\n\t\tprocess.exit(1);\n\t}\n\n\tvalidateForkFlags(parsed);\n\tvalidateSessionIdFlags(parsed);\n\n\tconst cwd = process.cwd();\n\tconst agentDir = getAgentDir();\n\tconst projectTrustStore = new ProjectTrustStore(agentDir);\n\tconst startupHasTrustInputs = hasProjectTrustInputs(cwd);\n\tconst startupStoredProjectTrust = startupHasTrustInputs ? projectTrustStore.get(cwd) : null;\n\tconst startupGlobalSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: false });\n\tconst startupDefaultProjectTrust = startupGlobalSettingsManager.getDefaultProjectTrust();\n\tconst startupProjectTrusted = parsed.projectTrustOverride ?? startupStoredProjectTrust ?? (!startupHasTrustInputs || startupDefaultProjectTrust === \"always\");\n\tconst resolvedExtensionPaths = resolveCliPaths(cwd, parsed.extensions), resolvedSkillPaths = resolveCliPaths(cwd, parsed.skills);\n\tconst resolvedPromptTemplatePaths = resolveCliPaths(cwd, parsed.promptTemplates), resolvedThemePaths = resolveCliPaths(cwd, parsed.themes);\n\tlet startupEarlyInputCapture: EarlyInputCapture | undefined = startEarlyInputCapture({ enabled: computeStartupInputCaptureEnabled({\n\t\tappMode, stdinIsTTY: process.stdin.isTTY === true, parsed, sessionCwd: cwd, projectTrustStore, resolvedExtensionPathCount: resolvedExtensionPaths?.length ?? 0,\n\t\tresolvedResourcePathCount: (resolvedSkillPaths?.length ?? 0) + (resolvedPromptTemplatePaths?.length ?? 0) + (resolvedThemePaths?.length ?? 0), deprecationWarningCount: 0,\n\t}) });\n\t// Run migrations after computing startup project trust so project-local migrations\n\t// cannot read or mutate untrusted project config before approval.\n\tconst { migratedAuthProviders: migratedProviders, deprecationWarnings } = runMigrations(cwd, {\n\t\tprojectTrusted: startupProjectTrusted,\n\t});\n\ttime(\"runMigrations\");\n\tif (deprecationWarnings.length > 0) {\n\t\tstartupEarlyInputCapture?.consume(); startupEarlyInputCapture = undefined;\n\t}\n\n\tconst startupSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: startupProjectTrusted });\n\treportDiagnostics(collectSettingsDiagnostics(startupSettingsManager, \"startup session lookup\"));\n\n\t// Decide the final runtime cwd before creating cwd-bound runtime services.\n\t// --session and --resume may select a session from another project, so project-local\n\t// settings, resources, provider registrations, and models must be resolved only after\n\t// the target session cwd is known. The startup-cwd settings manager is used only for\n\t// sessionDir lookup during session selection.\n\tconst envSessionDir = getEnvValue(ENV_SESSION_DIR);\n\tconst sessionDir =\n\t\t(parsed.sessionDir ? normalizePath(parsed.sessionDir) : undefined) ??\n\t\t(envSessionDir ? expandTildePath(envSessionDir) : undefined) ??\n\t\tstartupSettingsManager.getSessionDir();\n\tlet sessionManager = await createSessionManager(parsed, cwd, sessionDir, startupSettingsManager);\n\tconst missingSessionCwdIssue = getMissingSessionCwdIssue(sessionManager, cwd);\n\tif (missingSessionCwdIssue) {\n\t\tstartupEarlyInputCapture?.consume(); startupEarlyInputCapture = undefined;\n\t\tif (appMode === \"interactive\") {\n\t\t\tconst selectedCwd = await promptForMissingSessionCwd(missingSessionCwdIssue, startupSettingsManager);\n\t\t\tif (!selectedCwd) {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t\tsessionManager = SessionManager.open(missingSessionCwdIssue.sessionFile!, sessionDir, selectedCwd);\n\t\t} else {\n\t\t\tconsole.error(chalk.red(new MissingSessionCwdError(missingSessionCwdIssue).message));\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\tif (parsed.name !== undefined) {\n\t\tconst name = parsed.name.trim();\n\t\tif (!name) {\n\t\t\tconsole.error(chalk.red(\"Error: --name requires a non-empty value\"));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tsessionManager.appendSessionInfo(name);\n\t}\n\ttime(\"createSessionManager\");\n\n\tconst sessionCwd = sessionManager.getCwd();\n\tconst autoTrustOnReloadCwd =\n\t\tparsed.projectTrustOverride === undefined && !hasProjectTrustInputs(sessionCwd) ? sessionCwd : undefined;\n\n\tconst builtinPackagePaths = options?.builtinPackagePaths ?? getBuiltinPackagePaths();\n\tconst authStorage = AuthStorage.create();\n\tconst trustPromptMode: AppMode = parsed.help || parsed.listModels !== undefined ? \"print\" : appMode;\n\tconst projectTrustByCwd = new Map<string, boolean>();\n\tconst borrowedExtensionSourceTrustByPath = new Map<string, boolean>();\n\tlet deferredExtensionLoad = false;\n\tconst createRuntime: CreateAgentSessionRuntimeFactory = async ({\n\t\tcwd,\n\t\tagentDir,\n\t\tsessionManager,\n\t\tsessionStartEvent,\n\t\tprojectTrustContext,\n\t}) => {\n\t\tconst cachedProjectTrust = projectTrustByCwd.get(cwd);\n\t\tconst hasTrustInputs = hasProjectTrustInputs(cwd);\n\t\tconst storedProjectTrust = hasTrustInputs ? projectTrustStore.get(cwd) : null;\n\t\tconst initialProjectTrusted = parsed.projectTrustOverride ?? cachedProjectTrust ?? storedProjectTrust ?? !hasTrustInputs;\n\t\tconst shouldResolveProjectTrust =\n\t\t\tparsed.projectTrustOverride === undefined && cachedProjectTrust === undefined && hasTrustInputs;\n\t\tconst runtimeSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: initialProjectTrusted });\n\t\t// Defer extension loading to after first paint only when nothing before the TUI\n\t\t// starts needs extensions. Model scopes can be resolved again after extensions load.\n\t\tconst deferExtensions = computeDeferExtensions({\n\t\t\tappMode,\n\t\t\tstdinIsTTY: process.stdin.isTTY === true,\n\t\t\thasSessionStartEvent: sessionStartEvent !== undefined,\n\t\t\thelp: parsed.help,\n\t\t\tlistModels: parsed.listModels,\n\t\t\tshouldResolveProjectTrust,\n\t\t\tstoredProjectTrust,\n\t\t\tresolvedExtensionPathCount: resolvedExtensionPaths?.length ?? 0,\n\t\t\tresolvedResourcePathCount: (resolvedSkillPaths?.length ?? 0) + (resolvedPromptTemplatePaths?.length ?? 0) + (resolvedThemePaths?.length ?? 0),\n\t\t\thasSystemPromptInput: parsed.systemPrompt !== undefined || (parsed.appendSystemPrompt?.length ?? 0) > 0,\n\t\t\tunknownFlagCount: parsed.unknownFlags.size,\n\t\t\tprovider: parsed.provider,\n\t\t\tmodel: parsed.model,\n\t\t});\n\t\tif (sessionStartEvent === undefined) {\n\t\t\tdeferredExtensionLoad = deferExtensions;\n\t\t\tstartupEarlyInputCapture ??= startEarlyInputCapture({ enabled: deferExtensions && deprecationWarnings.length === 0 });\n\t\t}\n\t\tconst getProjectTrustContext = () =>\n\t\t\tprojectTrustContext ??\n\t\t\tcreateProjectTrustContext({\n\t\t\t\tcwd,\n\t\t\t\tmode: sessionStartEvent === undefined ? trustPromptMode : appMode,\n\t\t\t\tsettingsManager: runtimeSettingsManager,\n\t\t\t\thasUI: sessionStartEvent === undefined && trustPromptMode === \"interactive\",\n\t\t\t});\n\t\tconst services = await createAgentSessionServices({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tauthStorage,\n\t\t\tsettingsManager: runtimeSettingsManager,\n\t\t\textensionFlagValues: parsed.unknownFlags,\n\t\t\tresourceLoaderReloadOptions:\n\t\t\t\tdeferExtensions\n\t\t\t\t\t? { deferExtensions: true, deferResources: true }\n\t\t\t\t\t: shouldResolveProjectTrust || (resolvedExtensionPaths?.length ?? 0) > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tresolveProjectTrust: shouldResolveProjectTrust\n\t\t\t\t\t\t\t\t? async ({ extensionsResult }) => {\n\t\t\t\t\t\t\t\t\t\tconst trusted = await resolveProjectTrusted({\n\t\t\t\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t\t\t\t\ttrustStore: projectTrustStore,\n\t\t\t\t\t\t\t\t\t\t\tdefaultProjectTrust: runtimeSettingsManager.getDefaultProjectTrust(),\n\t\t\t\t\t\t\t\t\t\t\textensionsResult,\n\t\t\t\t\t\t\t\t\t\t\tprojectTrustContext: getProjectTrustContext(),\n\t\t\t\t\t\t\t\t\t\t\tonExtensionError: (message) => console.error(chalk.yellow(`Warning: ${message}`)),\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tprojectTrustByCwd.set(cwd, trusted);\n\t\t\t\t\t\t\t\t\t\tif (trusted && !initialProjectTrusted) {\n\t\t\t\t\t\t\t\t\t\t\trunMigrations(cwd, { projectTrusted: true });\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn trusted;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tresolveBorrowedProjectTrust: async ({ source, extensionsResult }) => {\n\t\t\t\t\t\t\t\tconst cachedTrust = borrowedExtensionSourceTrustByPath.get(source);\n\t\t\t\t\t\t\t\tif (cachedTrust !== undefined) {\n\t\t\t\t\t\t\t\t\treturn cachedTrust;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst trusted = await resolveProjectTrusted({\n\t\t\t\t\t\t\t\t\tcwd: source,\n\t\t\t\t\t\t\t\t\ttrustStore: projectTrustStore,\n\t\t\t\t\t\t\t\t\ttrustOverride: parsed.projectTrustOverride,\n\t\t\t\t\t\t\t\t\tdefaultProjectTrust: runtimeSettingsManager.getDefaultProjectTrust(),\n\t\t\t\t\t\t\t\t\textensionsResult,\n\t\t\t\t\t\t\t\t\tprojectTrustContext: getProjectTrustContext(),\n\t\t\t\t\t\t\t\t\tpromptMessage: `Trust extension source?\\n${source}\\n\\nThis allows Atomic to load project-local .atomic/.pi resources and .agents/skills from this -e source, including extensions and workflows that can execute code.`,\n\t\t\t\t\t\t\t\t\tonExtensionError: (message) => console.error(chalk.yellow(`Warning: ${message}`)),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tborrowedExtensionSourceTrustByPath.set(source, trusted);\n\t\t\t\t\t\t\t\treturn trusted;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\tresourceLoaderOptions: {\n\t\t\t\tadditionalExtensionPaths: resolvedExtensionPaths,\n\t\t\t\tadditionalSkillPaths: resolvedSkillPaths,\n\t\t\t\tadditionalPromptTemplatePaths: resolvedPromptTemplatePaths,\n\t\t\t\tadditionalThemePaths: resolvedThemePaths,\n\t\t\t\tbuiltinPackagePaths,\n\t\t\t\tnoExtensions: parsed.noExtensions,\n\t\t\t\tnoSkills: parsed.noSkills,\n\t\t\t\tnoPromptTemplates: parsed.noPromptTemplates,\n\t\t\t\tnoThemes: parsed.noThemes,\n\t\t\t\tnoContextFiles: parsed.noContextFiles,\n\t\t\t\tsystemPrompt: parsed.systemPrompt,\n\t\t\t\tappendSystemPrompt: parsed.appendSystemPrompt,\n\t\t\t\textensionFactories: options?.extensionFactories,\n\t\t\t},\n\t\t});\n\t\tconst { settingsManager, modelRegistry, resourceLoader } = services;\n\t\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [\n\t\t\t...services.diagnostics,\n\t\t\t...collectSettingsDiagnostics(settingsManager, \"runtime creation\"),\n\t\t\t...resourceLoader.getExtensions().errors.map(({ path, error }) => ({\n\t\t\t\ttype: \"error\" as const,\n\t\t\t\tmessage: `Failed to load extension \"${path}\": ${error}`,\n\t\t\t})),\n\t\t];\n\n\t\tconst modelPatterns = parsed.models ?? settingsManager.getEnabledModels();\n\t\tconst scopedModels =\n\t\t\tmodelPatterns && modelPatterns.length > 0\n\t\t\t\t? deferredExtensionLoad\n\t\t\t\t\t? (await resolveModelScopeWithDiagnostics(modelPatterns, modelRegistry)).scopedModels\n\t\t\t\t\t: await resolveModelScope(modelPatterns, modelRegistry)\n\t\t\t\t: [];\n\t\tconst {\n\t\t\toptions: sessionOptions,\n\t\t\tcliThinkingFromModel,\n\t\t\tdiagnostics: sessionOptionDiagnostics,\n\t\t} = buildSessionOptions(\n\t\t\tparsed,\n\t\t\tscopedModels,\n\t\t\tsessionManager.buildSessionContext().messages.length > 0,\n\t\t\tmodelRegistry,\n\t\t\tsettingsManager,\n\t\t);\n\t\tdiagnostics.push(...sessionOptionDiagnostics);\n\n\t\tif (parsed.apiKey) {\n\t\t\tif (!sessionOptions.model) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"--api-key requires a model to be specified via --model, --provider/--model, or --models\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tauthStorage.setRuntimeApiKey(sessionOptions.model.provider, parsed.apiKey);\n\t\t\t}\n\t\t}\n\n\t\tconst created = await createAgentSessionFromServices({\n\t\t\tservices,\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent,\n\t\t\tmodel: sessionOptions.model,\n\t\t\tthinkingLevel: sessionOptions.thinkingLevel,\n\t\t\tcontextWindow: sessionOptions.contextWindow,\n\t\t\tcontextWindowStrict: sessionOptions.contextWindowStrict,\n\t\t\tscopedModels: sessionOptions.scopedModels,\n\t\t\ttools: sessionOptions.tools,\n\t\t\texcludedTools: resolveExcludedToolsForAppMode(appMode, sessionOptions.excludedTools),\n\t\t\tnoTools: sessionOptions.noTools,\n\t\t\tcustomTools: sessionOptions.customTools,\n\t\t});\n\t\tif (created.contextWindowWarning) {\n\t\t\tdiagnostics.push({ type: \"warning\", message: created.contextWindowWarning });\n\t\t}\n\t\tif (created.contextWindowError) {\n\t\t\tdiagnostics.push({ type: \"error\", message: created.contextWindowError });\n\t\t}\n\n\t\tconst cliThinkingOverride = parsed.thinking !== undefined || cliThinkingFromModel;\n\t\tif (created.session.model && cliThinkingOverride) {\n\t\t\tcreated.session.setThinkingLevel(created.session.thinkingLevel);\n\t\t}\n\t\tconst hasFatalDiagnostics = diagnostics.some((diagnostic) => diagnostic.type === \"error\");\n\t\tif (\n\t\t\tcreated.session.model &&\n\t\t\tparsed.contextWindow !== undefined &&\n\t\t\t!created.contextWindowError &&\n\t\t\t!hasFatalDiagnostics &&\n\t\t\t!isReadOnlyRuntimeMetadataCommand(parsed)\n\t\t) {\n\t\t\tcreated.session.setContextWindow(parsed.contextWindow, { persistDefault: true });\n\t\t}\n\n\t\treturn {\n\t\t\t...created,\n\t\t\tservices,\n\t\t\tdiagnostics,\n\t\t};\n\t};\n\ttime(\"createRuntimeFactory\");\n\tconst runtimeCreationSpan = startTimingSpan(\"createAgentSessionRuntime\");\n\tconst runtime = await createAgentSessionRuntime(createRuntime, {\n\t\tcwd: sessionManager.getCwd(),\n\t\tagentDir,\n\t\tsessionManager,\n\t});\n\tendTimingSpan(runtimeCreationSpan);\n\tconst { services, session, modelFallbackMessage } = runtime;\n\tconst { settingsManager, modelRegistry, resourceLoader } = services;\n\tconfigureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());\n\n\tif (parsed.help) {\n\t\tconst extensionFlags = resourceLoader\n\t\t\t.getExtensions()\n\t\t\t.extensions.flatMap((extension) => Array.from(extension.flags.values()));\n\t\tif (shouldRestoreStdoutForMetadata) {\n\t\t\trestoreStdout();\n\t\t}\n\t\tprintHelp(extensionFlags);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.listModels !== undefined) {\n\t\tconst searchPattern = typeof parsed.listModels === \"string\" ? parsed.listModels : undefined;\n\t\tif (shouldRestoreStdoutForMetadata) {\n\t\t\trestoreStdout();\n\t\t}\n\t\tawait listModels(modelRegistry, searchPattern);\n\t\tprocess.exit(0);\n\t}\n\n\t// Read piped stdin content (if any) - skip for RPC mode which uses stdin for JSON-RPC\n\tlet stdinContent: string | undefined;\n\tif (appMode !== \"rpc\") {\n\t\tstdinContent = await readPipedStdin();\n\t\tif (stdinContent !== undefined && appMode === \"interactive\") {\n\t\t\tappMode = \"print\";\n\t\t}\n\t}\n\ttime(\"readPipedStdin\");\n\n\tconst { initialMessage, initialImages } = await prepareInitialMessage(\n\t\tparsed,\n\t\tsettingsManager.getImageAutoResize(),\n\t\tstdinContent,\n\t);\n\ttime(\"prepareInitialMessage\");\n\tinitTheme(settingsManager.getTheme(), appMode === \"interactive\");\n\ttime(\"initTheme\");\n\n\t// Show deprecation warnings in interactive mode\n\tif (appMode === \"interactive\" && deprecationWarnings.length > 0) {\n\t\tawait showDeprecationWarnings(deprecationWarnings);\n\t}\n\n\tconst scopedModels = [...session.scopedModels];\n\ttime(\"resolveModelScope\");\n\treportDiagnostics(runtime.diagnostics);\n\tif (runtime.diagnostics.some((diagnostic) => diagnostic.type === \"error\")) {\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\ttime(\"createAgentSession\");\n\n\tif (appMode !== \"interactive\" && !session.model) {\n\t\tconsole.error(chalk.red(formatNoModelsAvailableMessage()));\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\n\tconst startupBenchmark = isTruthyEnvFlag(getEnvValue(ENV_STARTUP_BENCHMARK));\n\tif (startupBenchmark && appMode !== \"interactive\") {\n\t\tconsole.error(chalk.red(`Error: ${ENV_STARTUP_BENCHMARK} only supports interactive mode`));\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\n\tif (appMode === \"rpc\") {\n\t\tprintTimings();\n\t\tawait runRpcMode(runtime);\n\t} else if (appMode === \"interactive\") {\n\t\tif (scopedModels.length > 0 && (parsed.verbose || !settingsManager.getQuietStartup())) {\n\t\t\tconsole.log(chalk.dim(`Model scope: ${formatScopedModelList(scopedModels)} ${chalk.gray(\"(ctrl+p cycle)\")}`));\n\t\t}\n\n\t\tconst interactiveMode = new InteractiveMode(runtime, {\n\t\t\tmigratedProviders,\n\t\t\tmodelFallbackMessage,\n\t\t\tautoTrustOnReloadCwd,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t\tinitialMessages: parsed.messages,\n\t\t\tverbose: parsed.verbose,\n\t\t\tdeferredExtensionLoad,\n\t\t\tstartupInputCapture: startupEarlyInputCapture,\n\t\t\tdeferredModelScopePatterns: deferredExtensionLoad ? (parsed.models ?? settingsManager.getEnabledModels()) : undefined,\n\t\t\tdeferredModelScopePreserveThinking: parsed.thinking !== undefined,\n\t\t});\n\t\tif (startupBenchmark) {\n\t\t\tawait interactiveMode.init();\n\t\t\ttime(\"interactiveMode.init\");\n\t\t\tawait interactiveMode.deferredStartupPromise;\n\t\t\tprintTimings();\n\t\t\tinteractiveMode.stop();\n\t\t\tstopThemeWatcher();\n\t\t\tif (process.stdout.writableLength > 0) {\n\t\t\t\tawait new Promise<void>((resolve) => process.stdout.once(\"drain\", resolve));\n\t\t\t}\n\t\t\tif (process.stderr.writableLength > 0) {\n\t\t\t\tawait new Promise<void>((resolve) => process.stderr.once(\"drain\", resolve));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprintTimings();\n\t\tawait interactiveMode.run();\n\t} else {\n\t\tprintTimings();\n\t\tconst exitCode = await runPrintMode(runtime, {\n\t\t\tmode: toPrintOutputMode(appMode),\n\t\t\tmessages: parsed.messages,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t});\n\t\tstopThemeWatcher();\n\t\trestoreStdout();\n\t\tif (exitCode !== 0) {\n\t\t\tprocess.exitCode = exitCode;\n\t\t}\n\t\treturn;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3K,OAAO,EAAyC,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAsC,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAClJ,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAgB,6BAA6B,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9N,OAAO,EAA0B,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChI,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpI,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEE,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAOvH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc,EAAE,OAAqB;IAC/D,YAAY,EAAE,CAAC;IACf,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5F,IAAI,WAAW,EAAE,CAAC;QACjB,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC9B,WAAW,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM,oBAAoB,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC3F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACvC,MAAM,iBAAiB,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO;IACR,CAAC;IAED,IAAI,MAAM,mBAAmB,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC1F,OAAO;IACR,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,CAAC;IAElB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvE,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;YACpF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChF,MAAM,oBAAoB,GAAG,OAAO,KAAK,aAAa,CAAC;IACvD,MAAM,8BAA8B,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,oBAAoB,EAAE,CAAC;QAC1B,cAAc,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,yBAAyB,GAAG,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,MAAM,4BAA4B,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IACtG,MAAM,0BAA0B,GAAG,4BAA4B,CAAC,sBAAsB,EAAE,CAAC;IACzF,MAAM,qBAAqB,GAAG,MAAM,CAAC,oBAAoB,IAAI,yBAAyB,IAAI,CAAC,CAAC,qBAAqB,IAAI,0BAA0B,KAAK,QAAQ,CAAC,CAAC;IAC9J,MAAM,sBAAsB,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACjI,MAAM,2BAA2B,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3I,IAAI,wBAAwB,GAAkC,sBAAsB,CAAC,EAAE,OAAO,EAAE,iCAAiC,CAAC;YACjI,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,IAAI,CAAC;YAC9J,yBAAyB,EAAE,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC;SACzK,CAAC,EAAE,CAAC,CAAC;IACN,mFAAmF;IACnF,kEAAkE;IAClE,MAAM,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE;QAC5F,cAAc,EAAE,qBAAqB;KACrC,CAAC,CAAC;IACH,IAAI,CAAC,eAAe,CAAC,CAAC;IACtB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,wBAAwB,EAAE,OAAO,EAAE,CAAC;QAAC,wBAAwB,GAAG,SAAS,CAAC;IAC3E,CAAC;IAED,MAAM,sBAAsB,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAChH,iBAAiB,CAAC,0BAA0B,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAEhG,2EAA2E;IAC3E,qFAAqF;IACrF,sFAAsF;IACtF,qFAAqF;IACrF,8CAA8C;IAC9C,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,UAAU,GACf,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,sBAAsB,CAAC,aAAa,EAAE,CAAC;IACxC,IAAI,cAAc,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IACjG,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC9E,IAAI,sBAAsB,EAAE,CAAC;QAC5B,wBAAwB,EAAE,OAAO,EAAE,CAAC;QAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1E,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,MAAM,0BAA0B,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;YACrG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACpG,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAE7B,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,oBAAoB,GACzB,MAAM,CAAC,oBAAoB,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1G,MAAM,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,sBAAsB,EAAE,CAAC;IACrF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IACzC,MAAM,eAAe,GAAY,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACpG,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrD,MAAM,kCAAkC,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtE,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,MAAM,aAAa,GAAqC,KAAK,EAAE,EAC9D,GAAG,EACH,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACnB,EAAE,EAAE;QACJ,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,kBAAkB,GAAG,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,MAAM,qBAAqB,GAAG,MAAM,CAAC,oBAAoB,IAAI,kBAAkB,IAAI,kBAAkB,IAAI,CAAC,cAAc,CAAC;QACzH,MAAM,yBAAyB,GAC9B,MAAM,CAAC,oBAAoB,KAAK,SAAS,IAAI,kBAAkB,KAAK,SAAS,IAAI,cAAc,CAAC;QACjG,MAAM,sBAAsB,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAChH,gFAAgF;QAChF,qFAAqF;QACrF,MAAM,eAAe,GAAG,sBAAsB,CAAC;YAC9C,OAAO;YACP,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;YACxC,oBAAoB,EAAE,iBAAiB,KAAK,SAAS;YACrD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,yBAAyB;YACzB,kBAAkB;YAClB,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,IAAI,CAAC;YAC/D,yBAAyB,EAAE,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC;YAC7I,oBAAoB,EAAE,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;YACvG,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI;YAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;SACnB,CAAC,CAAC;QACH,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACrC,qBAAqB,GAAG,eAAe,CAAC;YACxC,wBAAwB,KAAK,sBAAsB,CAAC,EAAE,OAAO,EAAE,eAAe,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QACvH,CAAC;QACD,MAAM,sBAAsB,GAAG,GAAG,EAAE,CACnC,mBAAmB;YACnB,yBAAyB,CAAC;gBACzB,GAAG;gBACH,IAAI,EAAE,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO;gBACjE,eAAe,EAAE,sBAAsB;gBACvC,KAAK,EAAE,iBAAiB,KAAK,SAAS,IAAI,eAAe,KAAK,aAAa;aAC3E,CAAC,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;YACjD,GAAG;YACH,QAAQ;YACR,WAAW;YACX,eAAe,EAAE,sBAAsB;YACvC,mBAAmB,EAAE,MAAM,CAAC,YAAY;YACxC,2BAA2B,EAC1B,eAAe;gBACd,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;gBACjD,CAAC,CAAC,yBAAyB,IAAI,CAAC,sBAAsB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;oBACxE,CAAC,CAAC;wBACA,mBAAmB,EAAE,yBAAyB;4BAC7C,CAAC,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;gCAC/B,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;oCAC3C,GAAG;oCACH,UAAU,EAAE,iBAAiB;oCAC7B,mBAAmB,EAAE,sBAAsB,CAAC,sBAAsB,EAAE;oCACpE,gBAAgB;oCAChB,mBAAmB,EAAE,sBAAsB,EAAE;oCAC7C,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;iCACjF,CAAC,CAAC;gCACH,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gCACpC,IAAI,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;oCACvC,aAAa,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;gCAC9C,CAAC;gCACD,OAAO,OAAO,CAAC;4BAChB,CAAC;4BACF,CAAC,CAAC,SAAS;wBACZ,2BAA2B,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE;4BACnE,MAAM,WAAW,GAAG,kCAAkC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;4BACnE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gCAC/B,OAAO,WAAW,CAAC;4BACpB,CAAC;4BACD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;gCAC3C,GAAG,EAAE,MAAM;gCACX,UAAU,EAAE,iBAAiB;gCAC7B,aAAa,EAAE,MAAM,CAAC,oBAAoB;gCAC1C,mBAAmB,EAAE,sBAAsB,CAAC,sBAAsB,EAAE;gCACpE,gBAAgB;gCAChB,mBAAmB,EAAE,sBAAsB,EAAE;gCAC7C,aAAa,EAAE,4BAA4B,MAAM,sKAAsK;gCACvN,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;6BACjF,CAAC,CAAC;4BACH,kCAAkC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;4BACxD,OAAO,OAAO,CAAC;wBAChB,CAAC;qBACD;oBACF,CAAC,CAAC,SAAS;YACb,qBAAqB,EAAE;gBACtB,wBAAwB,EAAE,sBAAsB;gBAChD,oBAAoB,EAAE,kBAAkB;gBACxC,6BAA6B,EAAE,2BAA2B;gBAC1D,oBAAoB,EAAE,kBAAkB;gBACxC,mBAAmB;gBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gBAC7C,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;aAC/C;SACD,CAAC,CAAC;QACH,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC;QACpE,MAAM,WAAW,GAAoC;YACpD,GAAG,QAAQ,CAAC,WAAW;YACvB,GAAG,0BAA0B,CAAC,eAAe,EAAE,kBAAkB,CAAC;YAClE,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClE,IAAI,EAAE,OAAgB;gBACtB,OAAO,EAAE,6BAA6B,IAAI,MAAM,KAAK,EAAE;aACvD,CAAC,CAAC;SACH,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,gBAAgB,EAAE,CAAC;QAC1E,MAAM,YAAY,GACjB,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YACxC,CAAC,CAAC,qBAAqB;gBACtB,CAAC,CAAC,CAAC,MAAM,gCAAgC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY;gBACrF,CAAC,CAAC,MAAM,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,EACL,OAAO,EAAE,cAAc,EACvB,oBAAoB,EACpB,WAAW,EAAE,wBAAwB,GACrC,GAAG,mBAAmB,CACtB,MAAM,EACN,YAAY,EACZ,cAAc,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EACxD,aAAa,EACb,eAAe,CACf,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,CAAC;QAE9C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC3B,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,yFAAyF;iBAClG,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5E,CAAC;QACF,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,8BAA8B,CAAC;YACpD,QAAQ;YACR,cAAc;YACd,iBAAiB;YACjB,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,mBAAmB,EAAE,cAAc,CAAC,mBAAmB;YACvD,YAAY,EAAE,cAAc,CAAC,YAAY;YACzC,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,aAAa,EAAE,8BAA8B,CAAC,OAAO,EAAE,cAAc,CAAC,aAAa,CAAC;YACpF,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,WAAW,EAAE,cAAc,CAAC,WAAW;SACvC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAClC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,oBAAoB,CAAC;QAClF,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,mBAAmB,EAAE,CAAC;YAClD,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC1F,IACC,OAAO,CAAC,OAAO,CAAC,KAAK;YACrB,MAAM,CAAC,aAAa,KAAK,SAAS;YAClC,CAAC,OAAO,CAAC,kBAAkB;YAC3B,CAAC,mBAAmB;YACpB,CAAC,gCAAgC,CAAC,MAAM,CAAC,EACxC,CAAC;YACF,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,OAAO;YACN,GAAG,OAAO;YACV,QAAQ;YACR,WAAW;SACX,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC7B,MAAM,mBAAmB,GAAG,eAAe,CAAC,2BAA2B,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,aAAa,EAAE;QAC9D,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE;QAC5B,QAAQ;QACR,cAAc;KACd,CAAC,CAAC;IACH,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IAC5D,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC;IACpE,uBAAuB,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAEhE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,cAAc;aACnC,aAAa,EAAE;aACf,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,8BAA8B,EAAE,CAAC;YACpC,aAAa,EAAE,CAAC;QACjB,CAAC;QACD,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,IAAI,8BAA8B,EAAE,CAAC;YACpC,aAAa,EAAE,CAAC;QACjB,CAAC;QACD,MAAM,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,sFAAsF;IACtF,IAAI,YAAgC,CAAC;IACrC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACvB,YAAY,GAAG,MAAM,cAAc,EAAE,CAAC;QACtC,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC7D,OAAO,GAAG,OAAO,CAAC;QACnB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAEvB,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,MAAM,qBAAqB,CACpE,MAAM,EACN,eAAe,CAAC,kBAAkB,EAAE,EACpC,YAAY,CACZ,CAAC;IACF,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC9B,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,KAAK,aAAa,CAAC,CAAC;IACjE,IAAI,CAAC,WAAW,CAAC,CAAC;IAElB,gDAAgD;IAChD,IAAI,OAAO,KAAK,aAAa,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1B,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QAC3E,wBAAwB,EAAE,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAE3B,IAAI,OAAO,KAAK,aAAa,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;QAC3D,wBAAwB,EAAE,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC7E,IAAI,gBAAgB,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,qBAAqB,iCAAiC,CAAC,CAAC,CAAC;QAC3F,wBAAwB,EAAE,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACvB,YAAY,EAAE,CAAC;QACf,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QACtC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;YACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,qBAAqB,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/G,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE;YACpD,iBAAiB;YACjB,oBAAoB;YACpB,oBAAoB;YACpB,cAAc;YACd,aAAa;YACb,eAAe,EAAE,MAAM,CAAC,QAAQ;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,qBAAqB;YACrB,mBAAmB,EAAE,wBAAwB;YAC7C,0BAA0B,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACrH,kCAAkC,EAAE,MAAM,CAAC,QAAQ,KAAK,SAAS;SACjE,CAAC,CAAC;QACH,IAAI,gBAAgB,EAAE,CAAC;YACtB,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC7B,MAAM,eAAe,CAAC,6BAA6B,EAAE,CAAC;YACtD,YAAY,EAAE,CAAC;YACf,eAAe,CAAC,IAAI,EAAE,CAAC;YACvB,gBAAgB,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO;QACR,CAAC;QAED,YAAY,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACP,YAAY,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE;YAC5C,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC;YAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc;YACd,aAAa;SACb,CAAC,CAAC;QACH,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,CAAC;QACD,OAAO;IACR,CAAC;AACF,CAAC","sourcesContent":["import chalk from \"chalk\";\nimport { parseArgs, printHelp } from \"./cli/args.ts\";\nimport { listModels } from \"./cli/list-models.ts\";\nimport { createProjectTrustContext } from \"./cli/project-trust.ts\";\nimport { ENV_OFFLINE, ENV_SESSION_DIR, ENV_SKIP_VERSION_CHECK, ENV_STARTUP_BENCHMARK, expandTildePath, getAgentDir, getEnvValue, setEnvValue, VERSION } from \"./config.ts\";\nimport { type CreateAgentSessionRuntimeFactory, createAgentSessionRuntime } from \"./core/agent-session-runtime.ts\";\nimport { type AgentSessionRuntimeDiagnostic, createAgentSessionFromServices, createAgentSessionServices } from \"./core/agent-session-services.ts\";\nimport { formatNoModelsAvailableMessage } from \"./core/auth-guidance.ts\";\nimport { AuthStorage } from \"./core/auth-storage.ts\";\nimport { getBuiltinPackagePaths } from \"./core/builtin-packages.ts\";\nimport { configureHttpDispatcher } from \"./core/http-dispatcher.ts\";\nimport type { ExtensionFactory } from \"./core/extensions/types.ts\";\nimport { resolveModelScope, resolveModelScopeWithDiagnostics } from \"./core/model-resolver.ts\";\nimport { restoreStdout, takeOverStdout } from \"./core/output-guard.ts\";\nimport { resolveProjectTrusted } from \"./core/project-trust.ts\";\nimport { getMissingSessionCwdIssue, MissingSessionCwdError } from \"./core/session-cwd.ts\";\nimport { SessionManager } from \"./core/session-manager.ts\";\nimport { SettingsManager } from \"./core/settings-manager.ts\";\nimport { endTimingSpan, printTimings, resetTimings, startTimingSpan, time } from \"./core/timings.ts\";\nimport { hasProjectTrustInputs, ProjectTrustStore } from \"./core/trust-manager.ts\";\nimport { runMigrations, showDeprecationWarnings } from \"./migrations.ts\";\nimport { type AppMode, isPlainRuntimeMetadataCommand, isReadOnlyRuntimeMetadataCommand, prepareInitialMessage, resolveAppMode, resolveCliPaths, resolveExcludedToolsForAppMode, toPrintOutputMode } from \"./main-app-mode.ts\";\nimport { type EarlyInputCapture, startEarlyInputCapture } from \"./main-early-input.ts\";\nimport { computeDeferExtensions, computeStartupInputCaptureEnabled, formatScopedModelList } from \"./main-deferred-startup.ts\";\nimport { createSessionManager, promptForMissingSessionCwd, validateForkFlags, validateSessionIdFlags } from \"./main-session.ts\";\nimport { buildSessionOptions } from \"./main-session-options.ts\";\nimport { collectSettingsDiagnostics, drainProcessStdio, isTruthyEnvFlag, readPipedStdin, reportDiagnostics } from \"./main-stdio.ts\";\nimport { InteractiveMode, runPrintMode, runRpcMode } from \"./modes/index.ts\";\nimport { initTheme, stopThemeWatcher } from \"./modes/interactive/theme/theme.ts\";\nimport { handleConfigCommand, handlePackageCommand } from \"./package-manager-cli.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\n\nexport type { AppMode } from \"./main-app-mode.ts\"; export { resolveExcludedToolsForAppMode } from \"./main-app-mode.ts\";\n\nexport interface MainOptions {\n\textensionFactories?: ExtensionFactory[];\n\tbuiltinPackagePaths?: string[];\n}\n\nexport async function main(args: string[], options?: MainOptions) {\n\tresetTimings();\n\tconst offlineMode = args.includes(\"--offline\") || isTruthyEnvFlag(getEnvValue(ENV_OFFLINE));\n\tif (offlineMode) {\n\t\tsetEnvValue(ENV_OFFLINE, \"1\");\n\t\tsetEnvValue(ENV_SKIP_VERSION_CHECK, \"1\");\n\t}\n\n\tif (await handlePackageCommand(args, { extensionFactories: options?.extensionFactories })) {\n\t\tconst exitCode = process.exitCode ?? 0;\n\t\tawait drainProcessStdio();\n\t\tprocess.exit(exitCode);\n\t\treturn;\n\t}\n\n\tif (await handleConfigCommand(args, { extensionFactories: options?.extensionFactories })) {\n\t\treturn;\n\t}\n\n\tconst parsed = parseArgs(args);\n\tif (parsed.diagnostics.length > 0) {\n\t\tfor (const d of parsed.diagnostics) {\n\t\t\tconst color = d.type === \"error\" ? chalk.red : chalk.yellow;\n\t\t\tconsole.error(color(`${d.type === \"error\" ? \"Error\" : \"Warning\"}: ${d.message}`));\n\t\t}\n\t\tif (parsed.diagnostics.some((d) => d.type === \"error\")) {\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\ttime(\"parseArgs\");\n\n\tif (parsed.version) {\n\t\tconsole.log(VERSION);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.export) {\n\t\tlet result: string;\n\t\ttry {\n\t\t\tconst outputPath = parsed.messages.length > 0 ? parsed.messages[0] : undefined;\n\t\t\tconst { exportFromFile } = await import(\"./core/export-html/index.ts\");\n\t\t\tresult = await exportFromFile(parsed.export, outputPath);\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Failed to export session\";\n\t\t\tconsole.error(chalk.red(`Error: ${message}`));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconsole.log(`Exported to: ${result}`);\n\t\tprocess.exit(0);\n\t}\n\n\tlet appMode = resolveAppMode(parsed, process.stdin.isTTY, process.stdout.isTTY);\n\tconst shouldTakeOverStdout = appMode !== \"interactive\";\n\tconst shouldRestoreStdoutForMetadata = isPlainRuntimeMetadataCommand(parsed);\n\tif (shouldTakeOverStdout) {\n\t\ttakeOverStdout();\n\t}\n\n\tif (parsed.mode === \"rpc\" && parsed.fileArgs.length > 0) {\n\t\tconsole.error(chalk.red(\"Error: @file arguments are not supported in RPC mode\"));\n\t\tprocess.exit(1);\n\t}\n\n\tvalidateForkFlags(parsed);\n\tvalidateSessionIdFlags(parsed);\n\n\tconst cwd = process.cwd();\n\tconst agentDir = getAgentDir();\n\tconst projectTrustStore = new ProjectTrustStore(agentDir);\n\tconst startupHasTrustInputs = hasProjectTrustInputs(cwd);\n\tconst startupStoredProjectTrust = startupHasTrustInputs ? projectTrustStore.get(cwd) : null;\n\tconst startupGlobalSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: false });\n\tconst startupDefaultProjectTrust = startupGlobalSettingsManager.getDefaultProjectTrust();\n\tconst startupProjectTrusted = parsed.projectTrustOverride ?? startupStoredProjectTrust ?? (!startupHasTrustInputs || startupDefaultProjectTrust === \"always\");\n\tconst resolvedExtensionPaths = resolveCliPaths(cwd, parsed.extensions), resolvedSkillPaths = resolveCliPaths(cwd, parsed.skills);\n\tconst resolvedPromptTemplatePaths = resolveCliPaths(cwd, parsed.promptTemplates), resolvedThemePaths = resolveCliPaths(cwd, parsed.themes);\n\tlet startupEarlyInputCapture: EarlyInputCapture | undefined = startEarlyInputCapture({ enabled: computeStartupInputCaptureEnabled({\n\t\tappMode, stdinIsTTY: process.stdin.isTTY === true, parsed, sessionCwd: cwd, projectTrustStore, resolvedExtensionPathCount: resolvedExtensionPaths?.length ?? 0,\n\t\tresolvedResourcePathCount: (resolvedSkillPaths?.length ?? 0) + (resolvedPromptTemplatePaths?.length ?? 0) + (resolvedThemePaths?.length ?? 0), deprecationWarningCount: 0,\n\t}) });\n\t// Run migrations after computing startup project trust so project-local migrations\n\t// cannot read or mutate untrusted project config before approval.\n\tconst { migratedAuthProviders: migratedProviders, deprecationWarnings } = runMigrations(cwd, {\n\t\tprojectTrusted: startupProjectTrusted,\n\t});\n\ttime(\"runMigrations\");\n\tif (deprecationWarnings.length > 0) {\n\t\tstartupEarlyInputCapture?.consume(); startupEarlyInputCapture = undefined;\n\t}\n\n\tconst startupSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: startupProjectTrusted });\n\treportDiagnostics(collectSettingsDiagnostics(startupSettingsManager, \"startup session lookup\"));\n\n\t// Decide the final runtime cwd before creating cwd-bound runtime services.\n\t// --session and --resume may select a session from another project, so project-local\n\t// settings, resources, provider registrations, and models must be resolved only after\n\t// the target session cwd is known. The startup-cwd settings manager is used only for\n\t// sessionDir lookup during session selection.\n\tconst envSessionDir = getEnvValue(ENV_SESSION_DIR);\n\tconst sessionDir =\n\t\t(parsed.sessionDir ? normalizePath(parsed.sessionDir) : undefined) ??\n\t\t(envSessionDir ? expandTildePath(envSessionDir) : undefined) ??\n\t\tstartupSettingsManager.getSessionDir();\n\tlet sessionManager = await createSessionManager(parsed, cwd, sessionDir, startupSettingsManager);\n\tconst missingSessionCwdIssue = getMissingSessionCwdIssue(sessionManager, cwd);\n\tif (missingSessionCwdIssue) {\n\t\tstartupEarlyInputCapture?.consume(); startupEarlyInputCapture = undefined;\n\t\tif (appMode === \"interactive\") {\n\t\t\tconst selectedCwd = await promptForMissingSessionCwd(missingSessionCwdIssue, startupSettingsManager);\n\t\t\tif (!selectedCwd) {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t\tsessionManager = SessionManager.open(missingSessionCwdIssue.sessionFile!, sessionDir, selectedCwd);\n\t\t} else {\n\t\t\tconsole.error(chalk.red(new MissingSessionCwdError(missingSessionCwdIssue).message));\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\tif (parsed.name !== undefined) {\n\t\tconst name = parsed.name.trim();\n\t\tif (!name) {\n\t\t\tconsole.error(chalk.red(\"Error: --name requires a non-empty value\"));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tsessionManager.appendSessionInfo(name);\n\t}\n\ttime(\"createSessionManager\");\n\n\tconst sessionCwd = sessionManager.getCwd();\n\tconst autoTrustOnReloadCwd =\n\t\tparsed.projectTrustOverride === undefined && !hasProjectTrustInputs(sessionCwd) ? sessionCwd : undefined;\n\n\tconst builtinPackagePaths = options?.builtinPackagePaths ?? getBuiltinPackagePaths();\n\tconst authStorage = AuthStorage.create();\n\tconst trustPromptMode: AppMode = parsed.help || parsed.listModels !== undefined ? \"print\" : appMode;\n\tconst projectTrustByCwd = new Map<string, boolean>();\n\tconst borrowedExtensionSourceTrustByPath = new Map<string, boolean>();\n\tlet deferredExtensionLoad = false;\n\tconst createRuntime: CreateAgentSessionRuntimeFactory = async ({\n\t\tcwd,\n\t\tagentDir,\n\t\tsessionManager,\n\t\tsessionStartEvent,\n\t\tprojectTrustContext,\n\t}) => {\n\t\tconst cachedProjectTrust = projectTrustByCwd.get(cwd);\n\t\tconst hasTrustInputs = hasProjectTrustInputs(cwd);\n\t\tconst storedProjectTrust = hasTrustInputs ? projectTrustStore.get(cwd) : null;\n\t\tconst initialProjectTrusted = parsed.projectTrustOverride ?? cachedProjectTrust ?? storedProjectTrust ?? !hasTrustInputs;\n\t\tconst shouldResolveProjectTrust =\n\t\t\tparsed.projectTrustOverride === undefined && cachedProjectTrust === undefined && hasTrustInputs;\n\t\tconst runtimeSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: initialProjectTrusted });\n\t\t// Defer extension loading to after first paint only when nothing before the TUI\n\t\t// starts needs extensions. Model scopes can be resolved again after extensions load.\n\t\tconst deferExtensions = computeDeferExtensions({\n\t\t\tappMode,\n\t\t\tstdinIsTTY: process.stdin.isTTY === true,\n\t\t\thasSessionStartEvent: sessionStartEvent !== undefined,\n\t\t\thelp: parsed.help,\n\t\t\tlistModels: parsed.listModels,\n\t\t\tshouldResolveProjectTrust,\n\t\t\tstoredProjectTrust,\n\t\t\tresolvedExtensionPathCount: resolvedExtensionPaths?.length ?? 0,\n\t\t\tresolvedResourcePathCount: (resolvedSkillPaths?.length ?? 0) + (resolvedPromptTemplatePaths?.length ?? 0) + (resolvedThemePaths?.length ?? 0),\n\t\t\thasSystemPromptInput: parsed.systemPrompt !== undefined || (parsed.appendSystemPrompt?.length ?? 0) > 0,\n\t\t\tunknownFlagCount: parsed.unknownFlags.size,\n\t\t\tprovider: parsed.provider,\n\t\t\tmodel: parsed.model,\n\t\t});\n\t\tif (sessionStartEvent === undefined) {\n\t\t\tdeferredExtensionLoad = deferExtensions;\n\t\t\tstartupEarlyInputCapture ??= startEarlyInputCapture({ enabled: deferExtensions && deprecationWarnings.length === 0 });\n\t\t}\n\t\tconst getProjectTrustContext = () =>\n\t\t\tprojectTrustContext ??\n\t\t\tcreateProjectTrustContext({\n\t\t\t\tcwd,\n\t\t\t\tmode: sessionStartEvent === undefined ? trustPromptMode : appMode,\n\t\t\t\tsettingsManager: runtimeSettingsManager,\n\t\t\t\thasUI: sessionStartEvent === undefined && trustPromptMode === \"interactive\",\n\t\t\t});\n\t\tconst services = await createAgentSessionServices({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tauthStorage,\n\t\t\tsettingsManager: runtimeSettingsManager,\n\t\t\textensionFlagValues: parsed.unknownFlags,\n\t\t\tresourceLoaderReloadOptions:\n\t\t\t\tdeferExtensions\n\t\t\t\t\t? { deferExtensions: true, deferResources: true }\n\t\t\t\t\t: shouldResolveProjectTrust || (resolvedExtensionPaths?.length ?? 0) > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tresolveProjectTrust: shouldResolveProjectTrust\n\t\t\t\t\t\t\t\t? async ({ extensionsResult }) => {\n\t\t\t\t\t\t\t\t\t\tconst trusted = await resolveProjectTrusted({\n\t\t\t\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t\t\t\t\ttrustStore: projectTrustStore,\n\t\t\t\t\t\t\t\t\t\t\tdefaultProjectTrust: runtimeSettingsManager.getDefaultProjectTrust(),\n\t\t\t\t\t\t\t\t\t\t\textensionsResult,\n\t\t\t\t\t\t\t\t\t\t\tprojectTrustContext: getProjectTrustContext(),\n\t\t\t\t\t\t\t\t\t\t\tonExtensionError: (message) => console.error(chalk.yellow(`Warning: ${message}`)),\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tprojectTrustByCwd.set(cwd, trusted);\n\t\t\t\t\t\t\t\t\t\tif (trusted && !initialProjectTrusted) {\n\t\t\t\t\t\t\t\t\t\t\trunMigrations(cwd, { projectTrusted: true });\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn trusted;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tresolveBorrowedProjectTrust: async ({ source, extensionsResult }) => {\n\t\t\t\t\t\t\t\tconst cachedTrust = borrowedExtensionSourceTrustByPath.get(source);\n\t\t\t\t\t\t\t\tif (cachedTrust !== undefined) {\n\t\t\t\t\t\t\t\t\treturn cachedTrust;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst trusted = await resolveProjectTrusted({\n\t\t\t\t\t\t\t\t\tcwd: source,\n\t\t\t\t\t\t\t\t\ttrustStore: projectTrustStore,\n\t\t\t\t\t\t\t\t\ttrustOverride: parsed.projectTrustOverride,\n\t\t\t\t\t\t\t\t\tdefaultProjectTrust: runtimeSettingsManager.getDefaultProjectTrust(),\n\t\t\t\t\t\t\t\t\textensionsResult,\n\t\t\t\t\t\t\t\t\tprojectTrustContext: getProjectTrustContext(),\n\t\t\t\t\t\t\t\t\tpromptMessage: `Trust extension source?\\n${source}\\n\\nThis allows Atomic to load project-local .atomic/.pi resources and .agents/skills from this -e source, including extensions and workflows that can execute code.`,\n\t\t\t\t\t\t\t\t\tonExtensionError: (message) => console.error(chalk.yellow(`Warning: ${message}`)),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tborrowedExtensionSourceTrustByPath.set(source, trusted);\n\t\t\t\t\t\t\t\treturn trusted;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\tresourceLoaderOptions: {\n\t\t\t\tadditionalExtensionPaths: resolvedExtensionPaths,\n\t\t\t\tadditionalSkillPaths: resolvedSkillPaths,\n\t\t\t\tadditionalPromptTemplatePaths: resolvedPromptTemplatePaths,\n\t\t\t\tadditionalThemePaths: resolvedThemePaths,\n\t\t\t\tbuiltinPackagePaths,\n\t\t\t\tnoExtensions: parsed.noExtensions,\n\t\t\t\tnoSkills: parsed.noSkills,\n\t\t\t\tnoPromptTemplates: parsed.noPromptTemplates,\n\t\t\t\tnoThemes: parsed.noThemes,\n\t\t\t\tnoContextFiles: parsed.noContextFiles,\n\t\t\t\tsystemPrompt: parsed.systemPrompt,\n\t\t\t\tappendSystemPrompt: parsed.appendSystemPrompt,\n\t\t\t\textensionFactories: options?.extensionFactories,\n\t\t\t},\n\t\t});\n\t\tconst { settingsManager, modelRegistry, resourceLoader } = services;\n\t\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [\n\t\t\t...services.diagnostics,\n\t\t\t...collectSettingsDiagnostics(settingsManager, \"runtime creation\"),\n\t\t\t...resourceLoader.getExtensions().errors.map(({ path, error }) => ({\n\t\t\t\ttype: \"error\" as const,\n\t\t\t\tmessage: `Failed to load extension \"${path}\": ${error}`,\n\t\t\t})),\n\t\t];\n\n\t\tconst modelPatterns = parsed.models ?? settingsManager.getEnabledModels();\n\t\tconst scopedModels =\n\t\t\tmodelPatterns && modelPatterns.length > 0\n\t\t\t\t? deferredExtensionLoad\n\t\t\t\t\t? (await resolveModelScopeWithDiagnostics(modelPatterns, modelRegistry)).scopedModels\n\t\t\t\t\t: await resolveModelScope(modelPatterns, modelRegistry)\n\t\t\t\t: [];\n\t\tconst {\n\t\t\toptions: sessionOptions,\n\t\t\tcliThinkingFromModel,\n\t\t\tdiagnostics: sessionOptionDiagnostics,\n\t\t} = buildSessionOptions(\n\t\t\tparsed,\n\t\t\tscopedModels,\n\t\t\tsessionManager.buildSessionContext().messages.length > 0,\n\t\t\tmodelRegistry,\n\t\t\tsettingsManager,\n\t\t);\n\t\tdiagnostics.push(...sessionOptionDiagnostics);\n\n\t\tif (parsed.apiKey) {\n\t\t\tif (!sessionOptions.model) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"--api-key requires a model to be specified via --model, --provider/--model, or --models\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tauthStorage.setRuntimeApiKey(sessionOptions.model.provider, parsed.apiKey);\n\t\t\t}\n\t\t}\n\n\t\tconst created = await createAgentSessionFromServices({\n\t\t\tservices,\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent,\n\t\t\tmodel: sessionOptions.model,\n\t\t\tthinkingLevel: sessionOptions.thinkingLevel,\n\t\t\tcontextWindow: sessionOptions.contextWindow,\n\t\t\tcontextWindowStrict: sessionOptions.contextWindowStrict,\n\t\t\tscopedModels: sessionOptions.scopedModels,\n\t\t\ttools: sessionOptions.tools,\n\t\t\texcludedTools: resolveExcludedToolsForAppMode(appMode, sessionOptions.excludedTools),\n\t\t\tnoTools: sessionOptions.noTools,\n\t\t\tcustomTools: sessionOptions.customTools,\n\t\t});\n\t\tif (created.contextWindowWarning) {\n\t\t\tdiagnostics.push({ type: \"warning\", message: created.contextWindowWarning });\n\t\t}\n\t\tif (created.contextWindowError) {\n\t\t\tdiagnostics.push({ type: \"error\", message: created.contextWindowError });\n\t\t}\n\n\t\tconst cliThinkingOverride = parsed.thinking !== undefined || cliThinkingFromModel;\n\t\tif (created.session.model && cliThinkingOverride) {\n\t\t\tcreated.session.setThinkingLevel(created.session.thinkingLevel);\n\t\t}\n\t\tconst hasFatalDiagnostics = diagnostics.some((diagnostic) => diagnostic.type === \"error\");\n\t\tif (\n\t\t\tcreated.session.model &&\n\t\t\tparsed.contextWindow !== undefined &&\n\t\t\t!created.contextWindowError &&\n\t\t\t!hasFatalDiagnostics &&\n\t\t\t!isReadOnlyRuntimeMetadataCommand(parsed)\n\t\t) {\n\t\t\tcreated.session.setContextWindow(parsed.contextWindow, { persistDefault: true });\n\t\t}\n\n\t\treturn {\n\t\t\t...created,\n\t\t\tservices,\n\t\t\tdiagnostics,\n\t\t};\n\t};\n\ttime(\"createRuntimeFactory\");\n\tconst runtimeCreationSpan = startTimingSpan(\"createAgentSessionRuntime\");\n\tconst runtime = await createAgentSessionRuntime(createRuntime, {\n\t\tcwd: sessionManager.getCwd(),\n\t\tagentDir,\n\t\tsessionManager,\n\t});\n\tendTimingSpan(runtimeCreationSpan);\n\tconst { services, session, modelFallbackMessage } = runtime;\n\tconst { settingsManager, modelRegistry, resourceLoader } = services;\n\tconfigureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());\n\n\tif (parsed.help) {\n\t\tconst extensionFlags = resourceLoader\n\t\t\t.getExtensions()\n\t\t\t.extensions.flatMap((extension) => Array.from(extension.flags.values()));\n\t\tif (shouldRestoreStdoutForMetadata) {\n\t\t\trestoreStdout();\n\t\t}\n\t\tprintHelp(extensionFlags);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.listModels !== undefined) {\n\t\tconst searchPattern = typeof parsed.listModels === \"string\" ? parsed.listModels : undefined;\n\t\tif (shouldRestoreStdoutForMetadata) {\n\t\t\trestoreStdout();\n\t\t}\n\t\tawait listModels(modelRegistry, searchPattern);\n\t\tprocess.exit(0);\n\t}\n\n\t// Read piped stdin content (if any) - skip for RPC mode which uses stdin for JSON-RPC\n\tlet stdinContent: string | undefined;\n\tif (appMode !== \"rpc\") {\n\t\tstdinContent = await readPipedStdin();\n\t\tif (stdinContent !== undefined && appMode === \"interactive\") {\n\t\t\tappMode = \"print\";\n\t\t}\n\t}\n\ttime(\"readPipedStdin\");\n\n\tconst { initialMessage, initialImages } = await prepareInitialMessage(\n\t\tparsed,\n\t\tsettingsManager.getImageAutoResize(),\n\t\tstdinContent,\n\t);\n\ttime(\"prepareInitialMessage\");\n\tinitTheme(settingsManager.getTheme(), appMode === \"interactive\");\n\ttime(\"initTheme\");\n\n\t// Show deprecation warnings in interactive mode\n\tif (appMode === \"interactive\" && deprecationWarnings.length > 0) {\n\t\tawait showDeprecationWarnings(deprecationWarnings);\n\t}\n\n\tconst scopedModels = [...session.scopedModels];\n\ttime(\"resolveModelScope\");\n\treportDiagnostics(runtime.diagnostics);\n\tif (runtime.diagnostics.some((diagnostic) => diagnostic.type === \"error\")) {\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\ttime(\"createAgentSession\");\n\n\tif (appMode !== \"interactive\" && !session.model) {\n\t\tconsole.error(chalk.red(formatNoModelsAvailableMessage()));\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\n\tconst startupBenchmark = isTruthyEnvFlag(getEnvValue(ENV_STARTUP_BENCHMARK));\n\tif (startupBenchmark && appMode !== \"interactive\") {\n\t\tconsole.error(chalk.red(`Error: ${ENV_STARTUP_BENCHMARK} only supports interactive mode`));\n\t\tstartupEarlyInputCapture?.consume();\n\t\tprocess.exit(1);\n\t}\n\n\tif (appMode === \"rpc\") {\n\t\tprintTimings();\n\t\tawait runRpcMode(runtime);\n\t} else if (appMode === \"interactive\") {\n\t\tif (scopedModels.length > 0 && (parsed.verbose || !settingsManager.getQuietStartup())) {\n\t\t\tconsole.log(chalk.dim(`Model scope: ${formatScopedModelList(scopedModels)} ${chalk.gray(\"(ctrl+p cycle)\")}`));\n\t\t}\n\n\t\tconst interactiveMode = new InteractiveMode(runtime, {\n\t\t\tmigratedProviders,\n\t\t\tmodelFallbackMessage,\n\t\t\tautoTrustOnReloadCwd,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t\tinitialMessages: parsed.messages,\n\t\t\tverbose: parsed.verbose,\n\t\t\tdeferredExtensionLoad,\n\t\t\tstartupInputCapture: startupEarlyInputCapture,\n\t\t\tdeferredModelScopePatterns: deferredExtensionLoad ? (parsed.models ?? settingsManager.getEnabledModels()) : undefined,\n\t\t\tdeferredModelScopePreserveThinking: parsed.thinking !== undefined,\n\t\t});\n\t\tif (startupBenchmark) {\n\t\t\tawait interactiveMode.init();\n\t\t\ttime(\"interactiveMode.init\");\n\t\t\tawait interactiveMode.ensureDeferredStartupComplete();\n\t\t\tprintTimings();\n\t\t\tinteractiveMode.stop();\n\t\t\tstopThemeWatcher();\n\t\t\tif (process.stdout.writableLength > 0) {\n\t\t\t\tawait new Promise<void>((resolve) => process.stdout.once(\"drain\", resolve));\n\t\t\t}\n\t\t\tif (process.stderr.writableLength > 0) {\n\t\t\t\tawait new Promise<void>((resolve) => process.stderr.once(\"drain\", resolve));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprintTimings();\n\t\tawait interactiveMode.run();\n\t} else {\n\t\tprintTimings();\n\t\tconst exitCode = await runPrintMode(runtime, {\n\t\t\tmode: toPrintOutputMode(appMode),\n\t\t\tmessages: parsed.messages,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t});\n\t\tstopThemeWatcher();\n\t\trestoreStdout();\n\t\tif (exitCode !== 0) {\n\t\t\tprocess.exitCode = exitCode;\n\t\t}\n\t\treturn;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-actions.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-actions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAYpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAOzE,wBAAsB,oBAAoB,CACxC,WAAW,SAAS,uBAAuB,EAC3C,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzD;AAED,wBAAsB,iBAAiB,CAAC,WAAW,SAAS,uBAAuB,EACjF,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,EACxC,IAAI,GAAE,MAAM,GAAG,UAAmB,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA4Ef;AAED,wBAAsB,0BAA0B,CAC9C,WAAW,SAAS,uBAAuB,EAC3C,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzD;AAED,wBAAsB,oBAAoB,CAAC,WAAW,SAAS,uBAAuB,EACpF,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,+BAA+B,CACnD,WAAW,SAAS,uBAAuB,EAC3C,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBzD;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,SAAS,uBAAuB,EAC3C,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,OAAO,CAsBnD","sourcesContent":["import type { BashExecutionMessage } from \"../../../core/messages.ts\";\nimport { combineQueuedMessagesForEditor } from \"../chat-input-actions.ts\";\nimport type { ChatMessageEntry } from \"./chat-message-renderer.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.ts\";\nimport { setChatSessionEditorText } from \"./chat-session-host-editor.ts\";\nimport {\n decrementOptimisticUserSignature,\n incrementOptimisticUserSignature,\n isChatSessionBashRunning,\n isChatSessionStreaming,\n notifyChatSessionStatus,\n notifyChatSessionWarning,\n requiredChatSessionCommand,\n syncChatSessionAnimationTick,\n} from \"./chat-session-host-runtime.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport {\n errorMessage,\n parseBashInput,\n userMessageSignature,\n} from \"./chat-session-host-utils.ts\";\n\nexport async function interruptChatSession<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n try {\n restoreQueuedMessagesToEditor(state);\n state.sdkBusy = false;\n state.workingMessage = undefined;\n await state.commands.interrupt?.();\n } catch (err) {\n state.statusMessage = errorMessage(err);\n } finally {\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function submitChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n mode: \"auto\" | \"followUp\" = \"auto\",\n submittedText?: string,\n): Promise<void> {\n const text = (submittedText ?? state.inputBuffer).trim();\n if (!text) return;\n if (text.startsWith(\"/\") && state.commands.handleSlashCommand) {\n const handled = await state.commands.handleSlashCommand(text);\n if (handled) {\n setChatSessionEditorText(state, \"\");\n state.requestRender?.();\n return;\n }\n }\n if (state.compacting) {\n setChatSessionEditorText(state, \"\");\n state.compactionQueuedMessages = [...state.compactionQueuedMessages, text];\n notifyChatSessionStatus(state, \"Queued message until compaction completes\");\n return;\n }\n const bash = parseBashInput(text);\n if (bash?.command) {\n if (isChatSessionBashRunning(state)) {\n notifyChatSessionWarning(state, \"A bash command is already running. esc cancel first.\");\n setChatSessionEditorText(state, text);\n return;\n }\n setChatSessionEditorText(state, \"\");\n await runChatSessionBashCommand(state, bash.command, bash.excludeFromContext);\n return;\n }\n setChatSessionEditorText(state, \"\");\n const isPaused = state.isPaused?.() === true;\n const isStreaming = isChatSessionStreaming(state);\n const shouldAppendOptimisticUser = mode === \"auto\" && !isStreaming;\n const optimisticSignature = shouldAppendOptimisticUser\n ? userMessageSignature(text)\n : undefined;\n if (optimisticSignature !== undefined) {\n state.liveChat.appendUserText(text);\n state.bodyViewport.scrollToBottom();\n incrementOptimisticUserSignature(state, optimisticSignature);\n }\n state.requestRender?.();\n try {\n if (isPaused) {\n state.sdkBusy = true;\n state.statusMessage = \"resuming…\";\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n await requiredChatSessionCommand(state, \"resume\")(text);\n state.sdkBusy = false;\n state.statusMessage = \"\";\n syncChatSessionAnimationTick(state);\n return;\n }\n if (mode === \"followUp\" && isStreaming) {\n await queueChatSessionFollowUp(state, text);\n return;\n }\n if (isStreaming) {\n await queueChatSessionSteer(state, text);\n } else {\n state.sdkBusy = true;\n syncChatSessionAnimationTick(state);\n await state.commands.ensureAttached?.();\n await requiredChatSessionCommand(state, \"prompt\")(text);\n state.sdkBusy = false;\n syncChatSessionAnimationTick(state);\n }\n } catch (err) {\n if (optimisticSignature !== undefined) {\n decrementOptimisticUserSignature(state, optimisticSignature);\n }\n state.sdkBusy = false;\n state.statusMessage = errorMessage(err);\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function abortChatSessionCompaction<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n try {\n await state.commands.abortCompaction?.();\n state.compacting = false;\n state.sdkBusy = false;\n notifyChatSessionStatus(state, \"Compaction cancelled\");\n } catch (err) {\n notifyChatSessionWarning(state, errorMessage(err));\n } finally {\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function abortChatSessionBash<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n try {\n await state.commands.abortBash?.();\n state.localBashRunning = false;\n notifyChatSessionStatus(state, \"Bash command cancelled\");\n } catch (err) {\n notifyChatSessionWarning(state, errorMessage(err));\n } finally {\n state.requestRender?.();\n }\n}\n\nexport async function flushChatSessionCompactionQueue<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n const queued = [...state.compactionQueuedMessages];\n state.compactionQueuedMessages = [];\n if (queued.length === 0) return;\n let nextIndex = 0;\n try {\n const first = queued[0];\n if (first !== undefined) {\n await requiredChatSessionCommand(state, \"prompt\")(first);\n nextIndex = 1;\n }\n for (; nextIndex < queued.length; nextIndex++) {\n await queueChatSessionFollowUp(state, queued[nextIndex]!);\n }\n } catch (err) {\n state.compactionQueuedMessages = [\n ...queued.slice(nextIndex),\n ...state.compactionQueuedMessages,\n ];\n notifyChatSessionWarning(state, errorMessage(err));\n state.requestRender?.();\n }\n}\n\nexport function restoreQueuedMessagesToEditor<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): boolean {\n const queuedMessages = [\n ...state.pendingSteeringMessages,\n ...state.pendingFollowUpMessages,\n ...state.compactionQueuedMessages,\n ];\n if (queuedMessages.length === 0) {\n notifyChatSessionStatus(state, \"No queued messages to restore\");\n return false;\n }\n const restoredText = combineQueuedMessagesForEditor(queuedMessages, state.inputBuffer);\n state.pendingSteeringMessages = [];\n state.pendingFollowUpMessages = [];\n state.compactionQueuedMessages = [];\n setChatSessionEditorText(state, restoredText);\n state.getAgentSession?.()?.clearQueue();\n notifyChatSessionStatus(\n state,\n `Restored ${queuedMessages.length} queued message${queuedMessages.length === 1 ? \"\" : \"s\"} to editor`,\n );\n state.requestRender?.();\n return true;\n}\n\nasync function runChatSessionBashCommand<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(\n state: ChatSessionHostState<TExtraEntry>,\n command: string,\n excludeFromContext: boolean,\n): Promise<void> {\n const runBash = state.commands.runBash;\n if (!runBash) {\n notifyChatSessionWarning(state, \"no bash command configured for this chat session\");\n return;\n }\n const bashMessage: BashExecutionMessage = {\n role: \"bashExecution\",\n command,\n output: \"\",\n exitCode: undefined,\n cancelled: false,\n truncated: false,\n timestamp: Date.now(),\n ...(excludeFromContext ? { excludeFromContext: true } : {}),\n };\n const bashEntry: ChatMessageEntry = {\n role: \"tool\",\n kind: \"bashExecution\",\n message: bashMessage,\n isPartial: true,\n };\n state.transcript.push(bashEntry);\n state.localBashRunning = true;\n state.bodyViewport.scrollToBottom();\n state.requestRender?.();\n try {\n const result = await runBash({\n command,\n excludeFromContext,\n onChunk: (chunk) => {\n bashMessage.output += chunk;\n state.requestRender?.();\n },\n });\n bashMessage.output = result.output;\n bashMessage.exitCode = result.exitCode;\n bashMessage.cancelled = result.cancelled;\n bashMessage.truncated = result.truncated;\n if (result.fullOutputPath !== undefined) {\n bashMessage.fullOutputPath = result.fullOutputPath;\n }\n } catch (err) {\n bashMessage.output = errorMessage(err);\n bashMessage.exitCode = undefined;\n bashMessage.cancelled = false;\n bashMessage.truncated = false;\n } finally {\n bashEntry.isPartial = false;\n state.localBashRunning = false;\n state.requestRender?.();\n }\n}\n\nasync function queueChatSessionSteer<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n text: string,\n): Promise<void> {\n const agentSession = state.getAgentSession?.();\n if (agentSession?.isStreaming) {\n await agentSession.prompt(text, { streamingBehavior: \"steer\" });\n return;\n }\n await requiredChatSessionCommand(state, \"steer\")(text);\n}\n\nasync function queueChatSessionFollowUp<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n text: string,\n): Promise<void> {\n const agentSession = state.getAgentSession?.();\n if (agentSession?.isStreaming) {\n await agentSession.prompt(text, { streamingBehavior: \"followUp\" });\n return;\n }\n await requiredChatSessionCommand(state, \"followUp\")(text);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chat-session-host-actions.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-actions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAYpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAOzE,wBAAsB,oBAAoB,CACxC,WAAW,SAAS,uBAAuB,EAC3C,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzD;AAED,wBAAsB,iBAAiB,CAAC,WAAW,SAAS,uBAAuB,EACjF,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,EACxC,IAAI,GAAE,MAAM,GAAG,UAAmB,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA4Ef;AAED,wBAAsB,0BAA0B,CAC9C,WAAW,SAAS,uBAAuB,EAC3C,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzD;AAED,wBAAsB,oBAAoB,CAAC,WAAW,SAAS,uBAAuB,EACpF,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,+BAA+B,CACnD,WAAW,SAAS,uBAAuB,EAC3C,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBzD;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,SAAS,uBAAuB,EAC3C,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,OAAO,CAkBnD","sourcesContent":["import type { BashExecutionMessage } from \"../../../core/messages.ts\";\nimport { combineQueuedMessagesForEditor } from \"../chat-input-actions.ts\";\nimport type { ChatMessageEntry } from \"./chat-message-renderer.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.ts\";\nimport { setChatSessionEditorText } from \"./chat-session-host-editor.ts\";\nimport {\n decrementOptimisticUserSignature,\n incrementOptimisticUserSignature,\n isChatSessionBashRunning,\n isChatSessionStreaming,\n notifyChatSessionStatus,\n notifyChatSessionWarning,\n requiredChatSessionCommand,\n syncChatSessionAnimationTick,\n} from \"./chat-session-host-runtime.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport {\n errorMessage,\n parseBashInput,\n userMessageSignature,\n} from \"./chat-session-host-utils.ts\";\n\nexport async function interruptChatSession<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n try {\n restoreQueuedMessagesToEditor(state);\n state.sdkBusy = false;\n state.workingMessage = undefined;\n await state.commands.interrupt?.();\n } catch (err) {\n state.statusMessage = errorMessage(err);\n } finally {\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function submitChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n mode: \"auto\" | \"followUp\" = \"auto\",\n submittedText?: string,\n): Promise<void> {\n const text = (submittedText ?? state.inputBuffer).trim();\n if (!text) return;\n if (text.startsWith(\"/\") && state.commands.handleSlashCommand) {\n const handled = await state.commands.handleSlashCommand(text);\n if (handled) {\n setChatSessionEditorText(state, \"\");\n state.requestRender?.();\n return;\n }\n }\n if (state.compacting) {\n setChatSessionEditorText(state, \"\");\n state.compactionQueuedMessages = [...state.compactionQueuedMessages, text];\n notifyChatSessionStatus(state, \"Queued message until compaction completes\");\n return;\n }\n const bash = parseBashInput(text);\n if (bash?.command) {\n if (isChatSessionBashRunning(state)) {\n notifyChatSessionWarning(state, \"A bash command is already running. esc cancel first.\");\n setChatSessionEditorText(state, text);\n return;\n }\n setChatSessionEditorText(state, \"\");\n await runChatSessionBashCommand(state, bash.command, bash.excludeFromContext);\n return;\n }\n setChatSessionEditorText(state, \"\");\n const isPaused = state.isPaused?.() === true;\n const isStreaming = isChatSessionStreaming(state);\n const shouldAppendOptimisticUser = mode === \"auto\" && !isStreaming;\n const optimisticSignature = shouldAppendOptimisticUser\n ? userMessageSignature(text)\n : undefined;\n if (optimisticSignature !== undefined) {\n state.liveChat.appendUserText(text);\n state.bodyViewport.scrollToBottom();\n incrementOptimisticUserSignature(state, optimisticSignature);\n }\n state.requestRender?.();\n try {\n if (isPaused) {\n state.sdkBusy = true;\n state.statusMessage = \"resuming…\";\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n await requiredChatSessionCommand(state, \"resume\")(text);\n state.sdkBusy = false;\n state.statusMessage = \"\";\n syncChatSessionAnimationTick(state);\n return;\n }\n if (mode === \"followUp\" && isStreaming) {\n await queueChatSessionFollowUp(state, text);\n return;\n }\n if (isStreaming) {\n await queueChatSessionSteer(state, text);\n } else {\n state.sdkBusy = true;\n syncChatSessionAnimationTick(state);\n await state.commands.ensureAttached?.();\n await requiredChatSessionCommand(state, \"prompt\")(text);\n state.sdkBusy = false;\n syncChatSessionAnimationTick(state);\n }\n } catch (err) {\n if (optimisticSignature !== undefined) {\n decrementOptimisticUserSignature(state, optimisticSignature);\n }\n state.sdkBusy = false;\n state.statusMessage = errorMessage(err);\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function abortChatSessionCompaction<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n try {\n await state.commands.abortCompaction?.();\n state.compacting = false;\n state.sdkBusy = false;\n notifyChatSessionStatus(state, \"Compaction cancelled\");\n } catch (err) {\n notifyChatSessionWarning(state, errorMessage(err));\n } finally {\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function abortChatSessionBash<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n try {\n await state.commands.abortBash?.();\n state.localBashRunning = false;\n notifyChatSessionStatus(state, \"Bash command cancelled\");\n } catch (err) {\n notifyChatSessionWarning(state, errorMessage(err));\n } finally {\n state.requestRender?.();\n }\n}\n\nexport async function flushChatSessionCompactionQueue<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n const queued = [...state.compactionQueuedMessages];\n state.compactionQueuedMessages = [];\n if (queued.length === 0) return;\n let nextIndex = 0;\n try {\n const first = queued[0];\n if (first !== undefined) {\n await requiredChatSessionCommand(state, \"prompt\")(first);\n nextIndex = 1;\n }\n for (; nextIndex < queued.length; nextIndex++) {\n await queueChatSessionFollowUp(state, queued[nextIndex]!);\n }\n } catch (err) {\n state.compactionQueuedMessages = [\n ...queued.slice(nextIndex),\n ...state.compactionQueuedMessages,\n ];\n notifyChatSessionWarning(state, errorMessage(err));\n state.requestRender?.();\n }\n}\n\nexport function restoreQueuedMessagesToEditor<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): boolean {\n const queuedMessages = [\n ...state.pendingSteeringMessages,\n ...state.pendingFollowUpMessages,\n ...state.compactionQueuedMessages,\n ];\n if (queuedMessages.length === 0) {\n notifyChatSessionStatus(state, \"No queued messages to restore\");\n return false;\n }\n const restoredText = combineQueuedMessagesForEditor(queuedMessages, state.inputBuffer);\n state.pendingSteeringMessages = [];\n state.pendingFollowUpMessages = [];\n state.compactionQueuedMessages = [];\n setChatSessionEditorText(state, restoredText);\n state.getAgentSession?.()?.clearQueue();\n state.requestRender?.();\n return true;\n}\n\nasync function runChatSessionBashCommand<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(\n state: ChatSessionHostState<TExtraEntry>,\n command: string,\n excludeFromContext: boolean,\n): Promise<void> {\n const runBash = state.commands.runBash;\n if (!runBash) {\n notifyChatSessionWarning(state, \"no bash command configured for this chat session\");\n return;\n }\n const bashMessage: BashExecutionMessage = {\n role: \"bashExecution\",\n command,\n output: \"\",\n exitCode: undefined,\n cancelled: false,\n truncated: false,\n timestamp: Date.now(),\n ...(excludeFromContext ? { excludeFromContext: true } : {}),\n };\n const bashEntry: ChatMessageEntry = {\n role: \"tool\",\n kind: \"bashExecution\",\n message: bashMessage,\n isPartial: true,\n };\n state.transcript.push(bashEntry);\n state.localBashRunning = true;\n state.bodyViewport.scrollToBottom();\n state.requestRender?.();\n try {\n const result = await runBash({\n command,\n excludeFromContext,\n onChunk: (chunk) => {\n bashMessage.output += chunk;\n state.requestRender?.();\n },\n });\n bashMessage.output = result.output;\n bashMessage.exitCode = result.exitCode;\n bashMessage.cancelled = result.cancelled;\n bashMessage.truncated = result.truncated;\n if (result.fullOutputPath !== undefined) {\n bashMessage.fullOutputPath = result.fullOutputPath;\n }\n } catch (err) {\n bashMessage.output = errorMessage(err);\n bashMessage.exitCode = undefined;\n bashMessage.cancelled = false;\n bashMessage.truncated = false;\n } finally {\n bashEntry.isPartial = false;\n state.localBashRunning = false;\n state.requestRender?.();\n }\n}\n\nasync function queueChatSessionSteer<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n text: string,\n): Promise<void> {\n const agentSession = state.getAgentSession?.();\n if (agentSession?.isStreaming) {\n await agentSession.prompt(text, { streamingBehavior: \"steer\" });\n return;\n }\n await requiredChatSessionCommand(state, \"steer\")(text);\n}\n\nasync function queueChatSessionFollowUp<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n text: string,\n): Promise<void> {\n const agentSession = state.getAgentSession?.();\n if (agentSession?.isStreaming) {\n await agentSession.prompt(text, { streamingBehavior: \"followUp\" });\n return;\n }\n await requiredChatSessionCommand(state, \"followUp\")(text);\n}\n"]}
|
|
@@ -166,7 +166,6 @@ export function restoreQueuedMessagesToEditor(state) {
|
|
|
166
166
|
state.compactionQueuedMessages = [];
|
|
167
167
|
setChatSessionEditorText(state, restoredText);
|
|
168
168
|
state.getAgentSession?.()?.clearQueue();
|
|
169
|
-
notifyChatSessionStatus(state, `Restored ${queuedMessages.length} queued message${queuedMessages.length === 1 ? "" : "s"} to editor`);
|
|
170
169
|
state.requestRender?.();
|
|
171
170
|
return true;
|
|
172
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-actions.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-actions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BashExecutionMessage } from \"../../../core/messages.ts\";\nimport { combineQueuedMessagesForEditor } from \"../chat-input-actions.ts\";\nimport type { ChatMessageEntry } from \"./chat-message-renderer.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.ts\";\nimport { setChatSessionEditorText } from \"./chat-session-host-editor.ts\";\nimport {\n decrementOptimisticUserSignature,\n incrementOptimisticUserSignature,\n isChatSessionBashRunning,\n isChatSessionStreaming,\n notifyChatSessionStatus,\n notifyChatSessionWarning,\n requiredChatSessionCommand,\n syncChatSessionAnimationTick,\n} from \"./chat-session-host-runtime.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport {\n errorMessage,\n parseBashInput,\n userMessageSignature,\n} from \"./chat-session-host-utils.ts\";\n\nexport async function interruptChatSession<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n try {\n restoreQueuedMessagesToEditor(state);\n state.sdkBusy = false;\n state.workingMessage = undefined;\n await state.commands.interrupt?.();\n } catch (err) {\n state.statusMessage = errorMessage(err);\n } finally {\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function submitChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n mode: \"auto\" | \"followUp\" = \"auto\",\n submittedText?: string,\n): Promise<void> {\n const text = (submittedText ?? state.inputBuffer).trim();\n if (!text) return;\n if (text.startsWith(\"/\") && state.commands.handleSlashCommand) {\n const handled = await state.commands.handleSlashCommand(text);\n if (handled) {\n setChatSessionEditorText(state, \"\");\n state.requestRender?.();\n return;\n }\n }\n if (state.compacting) {\n setChatSessionEditorText(state, \"\");\n state.compactionQueuedMessages = [...state.compactionQueuedMessages, text];\n notifyChatSessionStatus(state, \"Queued message until compaction completes\");\n return;\n }\n const bash = parseBashInput(text);\n if (bash?.command) {\n if (isChatSessionBashRunning(state)) {\n notifyChatSessionWarning(state, \"A bash command is already running. esc cancel first.\");\n setChatSessionEditorText(state, text);\n return;\n }\n setChatSessionEditorText(state, \"\");\n await runChatSessionBashCommand(state, bash.command, bash.excludeFromContext);\n return;\n }\n setChatSessionEditorText(state, \"\");\n const isPaused = state.isPaused?.() === true;\n const isStreaming = isChatSessionStreaming(state);\n const shouldAppendOptimisticUser = mode === \"auto\" && !isStreaming;\n const optimisticSignature = shouldAppendOptimisticUser\n ? userMessageSignature(text)\n : undefined;\n if (optimisticSignature !== undefined) {\n state.liveChat.appendUserText(text);\n state.bodyViewport.scrollToBottom();\n incrementOptimisticUserSignature(state, optimisticSignature);\n }\n state.requestRender?.();\n try {\n if (isPaused) {\n state.sdkBusy = true;\n state.statusMessage = \"resuming…\";\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n await requiredChatSessionCommand(state, \"resume\")(text);\n state.sdkBusy = false;\n state.statusMessage = \"\";\n syncChatSessionAnimationTick(state);\n return;\n }\n if (mode === \"followUp\" && isStreaming) {\n await queueChatSessionFollowUp(state, text);\n return;\n }\n if (isStreaming) {\n await queueChatSessionSteer(state, text);\n } else {\n state.sdkBusy = true;\n syncChatSessionAnimationTick(state);\n await state.commands.ensureAttached?.();\n await requiredChatSessionCommand(state, \"prompt\")(text);\n state.sdkBusy = false;\n syncChatSessionAnimationTick(state);\n }\n } catch (err) {\n if (optimisticSignature !== undefined) {\n decrementOptimisticUserSignature(state, optimisticSignature);\n }\n state.sdkBusy = false;\n state.statusMessage = errorMessage(err);\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function abortChatSessionCompaction<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n try {\n await state.commands.abortCompaction?.();\n state.compacting = false;\n state.sdkBusy = false;\n notifyChatSessionStatus(state, \"Compaction cancelled\");\n } catch (err) {\n notifyChatSessionWarning(state, errorMessage(err));\n } finally {\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function abortChatSessionBash<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n try {\n await state.commands.abortBash?.();\n state.localBashRunning = false;\n notifyChatSessionStatus(state, \"Bash command cancelled\");\n } catch (err) {\n notifyChatSessionWarning(state, errorMessage(err));\n } finally {\n state.requestRender?.();\n }\n}\n\nexport async function flushChatSessionCompactionQueue<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n const queued = [...state.compactionQueuedMessages];\n state.compactionQueuedMessages = [];\n if (queued.length === 0) return;\n let nextIndex = 0;\n try {\n const first = queued[0];\n if (first !== undefined) {\n await requiredChatSessionCommand(state, \"prompt\")(first);\n nextIndex = 1;\n }\n for (; nextIndex < queued.length; nextIndex++) {\n await queueChatSessionFollowUp(state, queued[nextIndex]!);\n }\n } catch (err) {\n state.compactionQueuedMessages = [\n ...queued.slice(nextIndex),\n ...state.compactionQueuedMessages,\n ];\n notifyChatSessionWarning(state, errorMessage(err));\n state.requestRender?.();\n }\n}\n\nexport function restoreQueuedMessagesToEditor<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): boolean {\n const queuedMessages = [\n ...state.pendingSteeringMessages,\n ...state.pendingFollowUpMessages,\n ...state.compactionQueuedMessages,\n ];\n if (queuedMessages.length === 0) {\n notifyChatSessionStatus(state, \"No queued messages to restore\");\n return false;\n }\n const restoredText = combineQueuedMessagesForEditor(queuedMessages, state.inputBuffer);\n state.pendingSteeringMessages = [];\n state.pendingFollowUpMessages = [];\n state.compactionQueuedMessages = [];\n setChatSessionEditorText(state, restoredText);\n state.getAgentSession?.()?.clearQueue();\n notifyChatSessionStatus(\n state,\n `Restored ${queuedMessages.length} queued message${queuedMessages.length === 1 ? \"\" : \"s\"} to editor`,\n );\n state.requestRender?.();\n return true;\n}\n\nasync function runChatSessionBashCommand<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(\n state: ChatSessionHostState<TExtraEntry>,\n command: string,\n excludeFromContext: boolean,\n): Promise<void> {\n const runBash = state.commands.runBash;\n if (!runBash) {\n notifyChatSessionWarning(state, \"no bash command configured for this chat session\");\n return;\n }\n const bashMessage: BashExecutionMessage = {\n role: \"bashExecution\",\n command,\n output: \"\",\n exitCode: undefined,\n cancelled: false,\n truncated: false,\n timestamp: Date.now(),\n ...(excludeFromContext ? { excludeFromContext: true } : {}),\n };\n const bashEntry: ChatMessageEntry = {\n role: \"tool\",\n kind: \"bashExecution\",\n message: bashMessage,\n isPartial: true,\n };\n state.transcript.push(bashEntry);\n state.localBashRunning = true;\n state.bodyViewport.scrollToBottom();\n state.requestRender?.();\n try {\n const result = await runBash({\n command,\n excludeFromContext,\n onChunk: (chunk) => {\n bashMessage.output += chunk;\n state.requestRender?.();\n },\n });\n bashMessage.output = result.output;\n bashMessage.exitCode = result.exitCode;\n bashMessage.cancelled = result.cancelled;\n bashMessage.truncated = result.truncated;\n if (result.fullOutputPath !== undefined) {\n bashMessage.fullOutputPath = result.fullOutputPath;\n }\n } catch (err) {\n bashMessage.output = errorMessage(err);\n bashMessage.exitCode = undefined;\n bashMessage.cancelled = false;\n bashMessage.truncated = false;\n } finally {\n bashEntry.isPartial = false;\n state.localBashRunning = false;\n state.requestRender?.();\n }\n}\n\nasync function queueChatSessionSteer<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n text: string,\n): Promise<void> {\n const agentSession = state.getAgentSession?.();\n if (agentSession?.isStreaming) {\n await agentSession.prompt(text, { streamingBehavior: \"steer\" });\n return;\n }\n await requiredChatSessionCommand(state, \"steer\")(text);\n}\n\nasync function queueChatSessionFollowUp<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n text: string,\n): Promise<void> {\n const agentSession = state.getAgentSession?.();\n if (agentSession?.isStreaming) {\n await agentSession.prompt(text, { streamingBehavior: \"followUp\" });\n return;\n }\n await requiredChatSessionCommand(state, \"followUp\")(text);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chat-session-host-actions.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-actions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BashExecutionMessage } from \"../../../core/messages.ts\";\nimport { combineQueuedMessagesForEditor } from \"../chat-input-actions.ts\";\nimport type { ChatMessageEntry } from \"./chat-message-renderer.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.ts\";\nimport { setChatSessionEditorText } from \"./chat-session-host-editor.ts\";\nimport {\n decrementOptimisticUserSignature,\n incrementOptimisticUserSignature,\n isChatSessionBashRunning,\n isChatSessionStreaming,\n notifyChatSessionStatus,\n notifyChatSessionWarning,\n requiredChatSessionCommand,\n syncChatSessionAnimationTick,\n} from \"./chat-session-host-runtime.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport {\n errorMessage,\n parseBashInput,\n userMessageSignature,\n} from \"./chat-session-host-utils.ts\";\n\nexport async function interruptChatSession<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n try {\n restoreQueuedMessagesToEditor(state);\n state.sdkBusy = false;\n state.workingMessage = undefined;\n await state.commands.interrupt?.();\n } catch (err) {\n state.statusMessage = errorMessage(err);\n } finally {\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function submitChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n mode: \"auto\" | \"followUp\" = \"auto\",\n submittedText?: string,\n): Promise<void> {\n const text = (submittedText ?? state.inputBuffer).trim();\n if (!text) return;\n if (text.startsWith(\"/\") && state.commands.handleSlashCommand) {\n const handled = await state.commands.handleSlashCommand(text);\n if (handled) {\n setChatSessionEditorText(state, \"\");\n state.requestRender?.();\n return;\n }\n }\n if (state.compacting) {\n setChatSessionEditorText(state, \"\");\n state.compactionQueuedMessages = [...state.compactionQueuedMessages, text];\n notifyChatSessionStatus(state, \"Queued message until compaction completes\");\n return;\n }\n const bash = parseBashInput(text);\n if (bash?.command) {\n if (isChatSessionBashRunning(state)) {\n notifyChatSessionWarning(state, \"A bash command is already running. esc cancel first.\");\n setChatSessionEditorText(state, text);\n return;\n }\n setChatSessionEditorText(state, \"\");\n await runChatSessionBashCommand(state, bash.command, bash.excludeFromContext);\n return;\n }\n setChatSessionEditorText(state, \"\");\n const isPaused = state.isPaused?.() === true;\n const isStreaming = isChatSessionStreaming(state);\n const shouldAppendOptimisticUser = mode === \"auto\" && !isStreaming;\n const optimisticSignature = shouldAppendOptimisticUser\n ? userMessageSignature(text)\n : undefined;\n if (optimisticSignature !== undefined) {\n state.liveChat.appendUserText(text);\n state.bodyViewport.scrollToBottom();\n incrementOptimisticUserSignature(state, optimisticSignature);\n }\n state.requestRender?.();\n try {\n if (isPaused) {\n state.sdkBusy = true;\n state.statusMessage = \"resuming…\";\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n await requiredChatSessionCommand(state, \"resume\")(text);\n state.sdkBusy = false;\n state.statusMessage = \"\";\n syncChatSessionAnimationTick(state);\n return;\n }\n if (mode === \"followUp\" && isStreaming) {\n await queueChatSessionFollowUp(state, text);\n return;\n }\n if (isStreaming) {\n await queueChatSessionSteer(state, text);\n } else {\n state.sdkBusy = true;\n syncChatSessionAnimationTick(state);\n await state.commands.ensureAttached?.();\n await requiredChatSessionCommand(state, \"prompt\")(text);\n state.sdkBusy = false;\n syncChatSessionAnimationTick(state);\n }\n } catch (err) {\n if (optimisticSignature !== undefined) {\n decrementOptimisticUserSignature(state, optimisticSignature);\n }\n state.sdkBusy = false;\n state.statusMessage = errorMessage(err);\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function abortChatSessionCompaction<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n try {\n await state.commands.abortCompaction?.();\n state.compacting = false;\n state.sdkBusy = false;\n notifyChatSessionStatus(state, \"Compaction cancelled\");\n } catch (err) {\n notifyChatSessionWarning(state, errorMessage(err));\n } finally {\n syncChatSessionAnimationTick(state);\n state.requestRender?.();\n }\n}\n\nexport async function abortChatSessionBash<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n try {\n await state.commands.abortBash?.();\n state.localBashRunning = false;\n notifyChatSessionStatus(state, \"Bash command cancelled\");\n } catch (err) {\n notifyChatSessionWarning(state, errorMessage(err));\n } finally {\n state.requestRender?.();\n }\n}\n\nexport async function flushChatSessionCompactionQueue<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): Promise<void> {\n const queued = [...state.compactionQueuedMessages];\n state.compactionQueuedMessages = [];\n if (queued.length === 0) return;\n let nextIndex = 0;\n try {\n const first = queued[0];\n if (first !== undefined) {\n await requiredChatSessionCommand(state, \"prompt\")(first);\n nextIndex = 1;\n }\n for (; nextIndex < queued.length; nextIndex++) {\n await queueChatSessionFollowUp(state, queued[nextIndex]!);\n }\n } catch (err) {\n state.compactionQueuedMessages = [\n ...queued.slice(nextIndex),\n ...state.compactionQueuedMessages,\n ];\n notifyChatSessionWarning(state, errorMessage(err));\n state.requestRender?.();\n }\n}\n\nexport function restoreQueuedMessagesToEditor<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(state: ChatSessionHostState<TExtraEntry>): boolean {\n const queuedMessages = [\n ...state.pendingSteeringMessages,\n ...state.pendingFollowUpMessages,\n ...state.compactionQueuedMessages,\n ];\n if (queuedMessages.length === 0) {\n notifyChatSessionStatus(state, \"No queued messages to restore\");\n return false;\n }\n const restoredText = combineQueuedMessagesForEditor(queuedMessages, state.inputBuffer);\n state.pendingSteeringMessages = [];\n state.pendingFollowUpMessages = [];\n state.compactionQueuedMessages = [];\n setChatSessionEditorText(state, restoredText);\n state.getAgentSession?.()?.clearQueue();\n state.requestRender?.();\n return true;\n}\n\nasync function runChatSessionBashCommand<\n TExtraEntry extends ChatTranscriptEntryLike,\n>(\n state: ChatSessionHostState<TExtraEntry>,\n command: string,\n excludeFromContext: boolean,\n): Promise<void> {\n const runBash = state.commands.runBash;\n if (!runBash) {\n notifyChatSessionWarning(state, \"no bash command configured for this chat session\");\n return;\n }\n const bashMessage: BashExecutionMessage = {\n role: \"bashExecution\",\n command,\n output: \"\",\n exitCode: undefined,\n cancelled: false,\n truncated: false,\n timestamp: Date.now(),\n ...(excludeFromContext ? { excludeFromContext: true } : {}),\n };\n const bashEntry: ChatMessageEntry = {\n role: \"tool\",\n kind: \"bashExecution\",\n message: bashMessage,\n isPartial: true,\n };\n state.transcript.push(bashEntry);\n state.localBashRunning = true;\n state.bodyViewport.scrollToBottom();\n state.requestRender?.();\n try {\n const result = await runBash({\n command,\n excludeFromContext,\n onChunk: (chunk) => {\n bashMessage.output += chunk;\n state.requestRender?.();\n },\n });\n bashMessage.output = result.output;\n bashMessage.exitCode = result.exitCode;\n bashMessage.cancelled = result.cancelled;\n bashMessage.truncated = result.truncated;\n if (result.fullOutputPath !== undefined) {\n bashMessage.fullOutputPath = result.fullOutputPath;\n }\n } catch (err) {\n bashMessage.output = errorMessage(err);\n bashMessage.exitCode = undefined;\n bashMessage.cancelled = false;\n bashMessage.truncated = false;\n } finally {\n bashEntry.isPartial = false;\n state.localBashRunning = false;\n state.requestRender?.();\n }\n}\n\nasync function queueChatSessionSteer<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n text: string,\n): Promise<void> {\n const agentSession = state.getAgentSession?.();\n if (agentSession?.isStreaming) {\n await agentSession.prompt(text, { streamingBehavior: \"steer\" });\n return;\n }\n await requiredChatSessionCommand(state, \"steer\")(text);\n}\n\nasync function queueChatSessionFollowUp<TExtraEntry extends ChatTranscriptEntryLike>(\n state: ChatSessionHostState<TExtraEntry>,\n text: string,\n): Promise<void> {\n const agentSession = state.getAgentSession?.();\n if (agentSession?.isStreaming) {\n await agentSession.prompt(text, { streamingBehavior: \"followUp\" });\n return;\n }\n await requiredChatSessionCommand(state, \"followUp\")(text);\n}\n"]}
|