@bastani/atomic 0.9.2 → 0.9.3-alpha.2
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 +66 -0
- package/README.md +2 -2
- package/dist/builtin/cursor/CHANGELOG.md +15 -0
- package/dist/builtin/cursor/README.md +2 -1
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/cursor/src/cursor-models-raw.json +2 -9
- package/dist/builtin/cursor/src/model-mapper.ts +14 -3
- package/dist/builtin/cursor/src/proto/protobuf-codec-base64.ts +22 -0
- package/dist/builtin/cursor/src/proto/protobuf-codec-request.ts +53 -13
- package/dist/builtin/cursor/src/proto/protobuf-codec-wire.ts +24 -7
- package/dist/builtin/cursor/src/proto/protobuf-codec.ts +3 -2
- package/dist/builtin/cursor/src/stream.ts +5 -11
- package/dist/builtin/cursor/src/transport-types.ts +3 -0
- package/dist/builtin/cursor/src/transport.ts +1 -0
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/direct-tools.ts +4 -2
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/mcp/proxy-call.ts +3 -1
- package/dist/builtin/mcp/utils.ts +18 -7
- package/dist/builtin/subagents/CHANGELOG.md +20 -0
- package/dist/builtin/subagents/README.md +6 -6
- package/dist/builtin/subagents/agents/code-simplifier.md +7 -6
- package/dist/builtin/subagents/agents/codebase-analyzer.md +5 -4
- package/dist/builtin/subagents/agents/codebase-locator.md +3 -3
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +10 -10
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +4 -4
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +3 -3
- package/dist/builtin/subagents/agents/codebase-research-locator.md +4 -4
- package/dist/builtin/subagents/agents/debugger.md +5 -5
- package/dist/builtin/subagents/agents/worker.md +56 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +11 -11
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +3 -5
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +3 -3
- package/dist/builtin/subagents/src/extension/fanout-child.ts +1 -0
- package/dist/builtin/subagents/src/extension/index.ts +6 -3
- package/dist/builtin/subagents/src/extension/schemas.ts +2 -7
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +4 -3
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +1 -4
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +15 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +35 -1
- package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/nested-render.ts +2 -2
- package/dist/builtin/subagents/src/runs/shared/pi-args.ts +2 -1
- package/dist/builtin/subagents/src/runs/shared/subagent-prompt-runtime.ts +4 -2
- package/dist/builtin/subagents/src/shared/types-async.ts +1 -0
- package/dist/builtin/subagents/src/shared/types-depth.ts +5 -5
- package/dist/builtin/subagents/src/shared/types-runtime.ts +2 -1
- package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +27 -5
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-layout.ts +27 -4
- package/dist/builtin/subagents/src/tui/render-result-animation.ts +22 -31
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +6 -6
- package/dist/builtin/subagents/src/tui/render-result.ts +20 -19
- package/dist/builtin/subagents/src/tui/render-status-progress.ts +3 -3
- package/dist/builtin/subagents/src/tui/render-widget.ts +46 -7
- package/dist/builtin/subagents/src/tui/render.ts +2 -2
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +56 -0
- package/dist/builtin/workflows/README.md +3 -3
- package/dist/builtin/workflows/builtin/goal-artifacts.ts +11 -6
- package/dist/builtin/workflows/builtin/goal-ledger.ts +33 -1
- package/dist/builtin/workflows/builtin/goal-prompts.ts +23 -28
- package/dist/builtin/workflows/builtin/goal-reducer.ts +2 -2
- package/dist/builtin/workflows/builtin/goal-reports.ts +2 -5
- package/dist/builtin/workflows/builtin/goal-review.ts +1 -1
- package/dist/builtin/workflows/builtin/goal-runner.ts +10 -17
- package/dist/builtin/workflows/builtin/open-claude-design-feedback.ts +3 -3
- package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +1 -3
- package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +1 -1
- package/dist/builtin/workflows/builtin/ralph-core.ts +7 -17
- package/dist/builtin/workflows/builtin/ralph-runner.ts +11 -18
- package/dist/builtin/workflows/builtin/shared-prompts.ts +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/authoring.d.ts +1 -1
- package/dist/builtin/workflows/src/durable/backend.ts +343 -0
- package/dist/builtin/workflows/src/durable/child-primitive.ts +79 -0
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +421 -0
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +171 -0
- package/dist/builtin/workflows/src/durable/factory.ts +96 -0
- package/dist/builtin/workflows/src/durable/file-backend.ts +433 -0
- package/dist/builtin/workflows/src/durable/index.ts +73 -0
- package/dist/builtin/workflows/src/durable/resume-catalog.ts +217 -0
- package/dist/builtin/workflows/src/durable/resume-runtime.ts +299 -0
- package/dist/builtin/workflows/src/durable/scoped-backend.ts +171 -0
- package/dist/builtin/workflows/src/durable/stage-primitive.ts +284 -0
- package/dist/builtin/workflows/src/durable/tool-primitive.ts +180 -0
- package/dist/builtin/workflows/src/durable/types.ts +168 -0
- package/dist/builtin/workflows/src/durable/ui-primitive.ts +96 -0
- package/dist/builtin/workflows/src/engine/options.ts +3 -0
- package/dist/builtin/workflows/src/engine/primitives/parallel.ts +2 -2
- package/dist/builtin/workflows/src/engine/primitives/task.ts +4 -4
- package/dist/builtin/workflows/src/engine/primitives/ui.ts +22 -8
- package/dist/builtin/workflows/src/engine/primitives/workflow.ts +8 -0
- package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +69 -0
- package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +31 -0
- package/dist/builtin/workflows/src/engine/run.ts +148 -6
- package/dist/builtin/workflows/src/engine/runtime.ts +8 -2
- package/dist/builtin/workflows/src/extension/config-loader.ts +35 -15
- package/dist/builtin/workflows/src/extension/discovery.ts +20 -8
- package/dist/builtin/workflows/src/extension/extension-factory.ts +6 -12
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +5 -1
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +4 -2
- package/dist/builtin/workflows/src/extension/runtime.ts +48 -9
- package/dist/builtin/workflows/src/extension/wiring.ts +1 -1
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +143 -4
- package/dist/builtin/workflows/src/runs/background/quit.ts +61 -0
- package/dist/builtin/workflows/src/runs/background/status.ts +1 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +5 -5
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +74 -33
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-context.ts +20 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +8 -7
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +1 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +19 -2
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +4 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +10 -10
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +5 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +25 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +3 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +16 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +20 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +23 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +30 -1
- package/dist/builtin/workflows/src/shared/store-public-types.ts +6 -2
- package/dist/builtin/workflows/src/shared/store-run-methods.ts +12 -6
- package/dist/builtin/workflows/src/shared/types.ts +55 -0
- package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +11 -10
- package/dist/builtin/workflows/src/tui/graph-view-constants.ts +1 -1
- package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +41 -0
- package/dist/builtin/workflows/src/tui/graph-view-input.ts +82 -24
- package/dist/builtin/workflows/src/tui/graph-view-render.ts +7 -0
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +22 -2
- package/dist/builtin/workflows/src/tui/graph-view-types.ts +4 -5
- package/dist/builtin/workflows/src/tui/overlay-adapter.ts +9 -11
- package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +9 -3
- package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +11 -2
- package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +35 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +51 -17
- package/dist/builtin/workflows/src/tui/stage-chat-view-status.ts +36 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +5 -1
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +3 -1
- package/dist/builtin/workflows/src/tui/status-list.ts +14 -2
- package/dist/builtin/workflows/src/tui/widget.ts +23 -8
- package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +5 -4
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +8 -8
- package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +151 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +9 -9
- package/dist/cli/args.js.map +1 -1
- package/dist/config-self-update.d.ts.map +1 -1
- package/dist/config-self-update.js +3 -4
- package/dist/config-self-update.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -5
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts +1 -0
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +1 -0
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +23 -0
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/bash-executor.d.ts +2 -0
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +1 -0
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +29 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +36 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/context-compaction-metrics.d.ts +14 -2
- package/dist/core/compaction/context-compaction-metrics.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-metrics.js +50 -1
- package/dist/core/compaction/context-compaction-metrics.js.map +1 -1
- package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-prompt.js +2 -0
- package/dist/core/compaction/context-compaction-prompt.js.map +1 -1
- package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-runner.js +1 -1
- package/dist/core/compaction/context-compaction-runner.js.map +1 -1
- package/dist/core/compaction/context-deletion-application.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-application.js +5 -5
- package/dist/core/compaction/context-deletion-application.js.map +1 -1
- package/dist/core/compaction/context-deletion-targets.d.ts +2 -0
- package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-targets.js +23 -3
- package/dist/core/compaction/context-deletion-targets.js.map +1 -1
- package/dist/core/compaction/context-deletion-tool-definitions.d.ts +6 -0
- package/dist/core/compaction/context-deletion-tool-definitions.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-tool-definitions.js.map +1 -1
- package/dist/core/compaction/context-deletion-tools.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-tools.js +18 -10
- package/dist/core/compaction/context-deletion-tools.js.map +1 -1
- package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -1
- package/dist/core/compaction/context-transcript-analysis.js +2 -4
- package/dist/core/compaction/context-transcript-analysis.js.map +1 -1
- package/dist/core/copilot-gemini-tool-arguments.d.ts.map +1 -1
- package/dist/core/copilot-gemini-tool-arguments.js +2 -60
- package/dist/core/copilot-gemini-tool-arguments.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +2 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +57 -32
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +11 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/tool-events.d.ts +13 -13
- package/dist/core/extensions/tool-events.d.ts.map +1 -1
- package/dist/core/extensions/tool-events.js +3 -3
- package/dist/core/extensions/tool-events.js.map +1 -1
- package/dist/core/extensions/types.d.ts +1 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/flattened-tool-arguments.d.ts +18 -0
- package/dist/core/flattened-tool-arguments.d.ts.map +1 -1
- package/dist/core/flattened-tool-arguments.js +104 -0
- package/dist/core/flattened-tool-arguments.js.map +1 -1
- package/dist/core/messages.d.ts +1 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +46 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +1 -1
- package/dist/core/sdk-exports.d.ts.map +1 -1
- package/dist/core/sdk-exports.js +1 -1
- package/dist/core/sdk-exports.js.map +1 -1
- package/dist/core/sdk-types.d.ts +2 -2
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +12 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +15 -7
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +20 -9
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +2 -2
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js +9 -3
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-history.d.ts.map +1 -1
- package/dist/core/session-manager-history.js +2 -1
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/session-manager-list.d.ts +3 -3
- package/dist/core/session-manager-list.d.ts.map +1 -1
- package/dist/core/session-manager-list.js +27 -8
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-storage.d.ts +3 -1
- package/dist/core/session-manager-storage.d.ts.map +1 -1
- package/dist/core/session-manager-storage.js +55 -12
- package/dist/core/session-manager-storage.js.map +1 -1
- package/dist/core/session-manager-tool-dependencies.d.ts +10 -0
- package/dist/core/session-manager-tool-dependencies.d.ts.map +1 -0
- package/dist/core/session-manager-tool-dependencies.js +133 -0
- package/dist/core/session-manager-tool-dependencies.js.map +1 -0
- package/dist/core/session-manager-types.d.ts +22 -0
- package/dist/core/session-manager-types.d.ts.map +1 -1
- package/dist/core/session-manager-types.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +4 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +18 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-resource-accessors.d.ts +4 -0
- package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-resource-accessors.js +15 -0
- package/dist/core/settings-manager-resource-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +11 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/system-prompt.d.ts +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/artifact-protocol.d.ts +11 -0
- package/dist/core/tools/artifact-protocol.d.ts.map +1 -0
- package/dist/core/tools/artifact-protocol.js +76 -0
- package/dist/core/tools/artifact-protocol.js.map +1 -0
- package/dist/core/tools/artifacts.d.ts +18 -0
- package/dist/core/tools/artifacts.d.ts.map +1 -0
- package/dist/core/tools/artifacts.js +90 -0
- package/dist/core/tools/artifacts.js.map +1 -0
- package/dist/core/tools/bash-async-jobs.d.ts +20 -0
- package/dist/core/tools/bash-async-jobs.d.ts.map +1 -0
- package/dist/core/tools/bash-async-jobs.js +59 -0
- package/dist/core/tools/bash-async-jobs.js.map +1 -0
- package/dist/core/tools/bash-async-output.d.ts +10 -0
- package/dist/core/tools/bash-async-output.d.ts.map +1 -0
- package/dist/core/tools/bash-async-output.js +80 -0
- package/dist/core/tools/bash-async-output.js.map +1 -0
- package/dist/core/tools/bash-interceptor.d.ts +10 -0
- package/dist/core/tools/bash-interceptor.d.ts.map +1 -0
- package/dist/core/tools/bash-interceptor.js +39 -0
- package/dist/core/tools/bash-interceptor.js.map +1 -0
- package/dist/core/tools/bash-leading-cd.d.ts +7 -0
- package/dist/core/tools/bash-leading-cd.d.ts.map +1 -0
- package/dist/core/tools/bash-leading-cd.js +59 -0
- package/dist/core/tools/bash-leading-cd.js.map +1 -0
- package/dist/core/tools/bash-pty-native.d.ts +14 -0
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -0
- package/dist/core/tools/bash-pty-native.js +71 -0
- package/dist/core/tools/bash-pty-native.js.map +1 -0
- package/dist/core/tools/bash.d.ts +28 -17
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +152 -35
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/block-resolver.d.ts +16 -0
- package/dist/core/tools/block-resolver.d.ts.map +1 -0
- package/dist/core/tools/block-resolver.js +74 -0
- package/dist/core/tools/block-resolver.js.map +1 -0
- package/dist/core/tools/conflict-registry.d.ts +16 -0
- package/dist/core/tools/conflict-registry.d.ts.map +1 -0
- package/dist/core/tools/conflict-registry.js +44 -0
- package/dist/core/tools/conflict-registry.js.map +1 -0
- package/dist/core/tools/directory-tree.d.ts +13 -0
- package/dist/core/tools/directory-tree.d.ts.map +1 -0
- package/dist/core/tools/directory-tree.js +81 -0
- package/dist/core/tools/directory-tree.js.map +1 -0
- package/dist/core/tools/edit.d.ts +4 -29
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +136 -228
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/fetch-url.d.ts +74 -0
- package/dist/core/tools/fetch-url.d.ts.map +1 -0
- package/dist/core/tools/fetch-url.js +518 -0
- package/dist/core/tools/fetch-url.js.map +1 -0
- package/dist/core/tools/find.d.ts +27 -9
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +400 -176
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/glob-path-utils.d.ts +8 -0
- package/dist/core/tools/glob-path-utils.d.ts.map +1 -0
- package/dist/core/tools/glob-path-utils.js +26 -0
- package/dist/core/tools/glob-path-utils.js.map +1 -0
- package/dist/core/tools/grep.d.ts +12 -0
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +141 -17
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/hashline-engine/apply.d.ts +11 -0
- package/dist/core/tools/hashline-engine/apply.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/apply.js +752 -0
- package/dist/core/tools/hashline-engine/apply.js.map +1 -0
- package/dist/core/tools/hashline-engine/block.d.ts +40 -0
- package/dist/core/tools/hashline-engine/block.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/block.js +117 -0
- package/dist/core/tools/hashline-engine/block.js.map +1 -0
- package/dist/core/tools/hashline-engine/diff-preview.d.ts +15 -0
- package/dist/core/tools/hashline-engine/diff-preview.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/diff-preview.js +98 -0
- package/dist/core/tools/hashline-engine/diff-preview.js.map +1 -0
- package/dist/core/tools/hashline-engine/format.d.ts +71 -0
- package/dist/core/tools/hashline-engine/format.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/format.js +178 -0
- package/dist/core/tools/hashline-engine/format.js.map +1 -0
- package/dist/core/tools/hashline-engine/fs.d.ts +81 -0
- package/dist/core/tools/hashline-engine/fs.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/fs.js +143 -0
- package/dist/core/tools/hashline-engine/fs.js.map +1 -0
- package/dist/core/tools/hashline-engine/index.d.ts +18 -0
- package/dist/core/tools/hashline-engine/index.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/index.js +20 -0
- package/dist/core/tools/hashline-engine/index.js.map +1 -0
- package/dist/core/tools/hashline-engine/input.d.ts +101 -0
- package/dist/core/tools/hashline-engine/input.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/input.js +398 -0
- package/dist/core/tools/hashline-engine/input.js.map +1 -0
- package/dist/core/tools/hashline-engine/messages.d.ts +99 -0
- package/dist/core/tools/hashline-engine/messages.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/messages.js +144 -0
- package/dist/core/tools/hashline-engine/messages.js.map +1 -0
- package/dist/core/tools/hashline-engine/mismatch.d.ts +45 -0
- package/dist/core/tools/hashline-engine/mismatch.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/mismatch.js +90 -0
- package/dist/core/tools/hashline-engine/mismatch.js.map +1 -0
- package/dist/core/tools/hashline-engine/normalize.d.ts +21 -0
- package/dist/core/tools/hashline-engine/normalize.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/normalize.js +33 -0
- package/dist/core/tools/hashline-engine/normalize.js.map +1 -0
- package/dist/core/tools/hashline-engine/parser.d.ts +24 -0
- package/dist/core/tools/hashline-engine/parser.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/parser.js +381 -0
- package/dist/core/tools/hashline-engine/parser.js.map +1 -0
- package/dist/core/tools/hashline-engine/patcher.d.ts +118 -0
- package/dist/core/tools/hashline-engine/patcher.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/patcher.js +341 -0
- package/dist/core/tools/hashline-engine/patcher.js.map +1 -0
- package/dist/core/tools/hashline-engine/prefixes.d.ts +43 -0
- package/dist/core/tools/hashline-engine/prefixes.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/prefixes.js +135 -0
- package/dist/core/tools/hashline-engine/prefixes.js.map +1 -0
- package/dist/core/tools/hashline-engine/recovery.d.ts +41 -0
- package/dist/core/tools/hashline-engine/recovery.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/recovery.js +168 -0
- package/dist/core/tools/hashline-engine/recovery.js.map +1 -0
- package/dist/core/tools/hashline-engine/snapshots.d.ts +65 -0
- package/dist/core/tools/hashline-engine/snapshots.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/snapshots.js +108 -0
- package/dist/core/tools/hashline-engine/snapshots.js.map +1 -0
- package/dist/core/tools/hashline-engine/stream.d.ts +3 -0
- package/dist/core/tools/hashline-engine/stream.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/stream.js +111 -0
- package/dist/core/tools/hashline-engine/stream.js.map +1 -0
- package/dist/core/tools/hashline-engine/tokenizer.d.ts +69 -0
- package/dist/core/tools/hashline-engine/tokenizer.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/tokenizer.js +430 -0
- package/dist/core/tools/hashline-engine/tokenizer.js.map +1 -0
- package/dist/core/tools/hashline-engine/types.d.ts +166 -0
- package/dist/core/tools/hashline-engine/types.d.ts.map +1 -0
- package/dist/core/tools/hashline-engine/types.js +9 -0
- package/dist/core/tools/hashline-engine/types.js.map +1 -0
- package/dist/core/tools/hashline.d.ts +29 -0
- package/dist/core/tools/hashline.d.ts.map +1 -0
- package/dist/core/tools/hashline.js +110 -0
- package/dist/core/tools/hashline.js.map +1 -0
- package/dist/core/tools/index.d.ts +6 -4
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +52 -35
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/notebook.d.ts +38 -0
- package/dist/core/tools/notebook.d.ts.map +1 -0
- package/dist/core/tools/notebook.js +125 -0
- package/dist/core/tools/notebook.js.map +1 -0
- package/dist/core/tools/read-document-extract.d.ts +9 -0
- package/dist/core/tools/read-document-extract.d.ts.map +1 -0
- package/dist/core/tools/read-document-extract.js +212 -0
- package/dist/core/tools/read-document-extract.js.map +1 -0
- package/dist/core/tools/read-selectors.d.ts +24 -0
- package/dist/core/tools/read-selectors.d.ts.map +1 -0
- package/dist/core/tools/read-selectors.js +277 -0
- package/dist/core/tools/read-selectors.js.map +1 -0
- package/dist/core/tools/read-url.d.ts +37 -0
- package/dist/core/tools/read-url.d.ts.map +1 -0
- package/dist/core/tools/read-url.js +39 -0
- package/dist/core/tools/read-url.js.map +1 -0
- package/dist/core/tools/read.d.ts +11 -11
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +224 -94
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/resource-selectors.d.ts +44 -0
- package/dist/core/tools/resource-selectors.d.ts.map +1 -0
- package/dist/core/tools/resource-selectors.js +808 -0
- package/dist/core/tools/resource-selectors.js.map +1 -0
- package/dist/core/tools/search-details.d.ts +26 -0
- package/dist/core/tools/search-details.d.ts.map +1 -0
- package/dist/core/tools/search-details.js +24 -0
- package/dist/core/tools/search-details.js.map +1 -0
- package/dist/core/tools/search-line-ranges.d.ts +11 -0
- package/dist/core/tools/search-line-ranges.d.ts.map +1 -0
- package/dist/core/tools/search-line-ranges.js +65 -0
- package/dist/core/tools/search-line-ranges.js.map +1 -0
- package/dist/core/tools/search-native.d.ts +97 -0
- package/dist/core/tools/search-native.d.ts.map +1 -0
- package/dist/core/tools/search-native.js +27 -0
- package/dist/core/tools/search-native.js.map +1 -0
- package/dist/core/tools/search.d.ts +24 -0
- package/dist/core/tools/search.d.ts.map +1 -0
- package/dist/core/tools/search.js +573 -0
- package/dist/core/tools/search.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +4 -4
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js +3 -3
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/url-ip-guards.d.ts +4 -0
- package/dist/core/tools/url-ip-guards.d.ts.map +1 -0
- package/dist/core/tools/url-ip-guards.js +126 -0
- package/dist/core/tools/url-ip-guards.js.map +1 -0
- package/dist/core/tools/write.d.ts +12 -2
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +166 -14
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +2 -3
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/index-extensions.d.ts +2 -2
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +1 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.js +12 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts +4 -0
- package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js +131 -0
- package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts +2 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +7 -1
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +15 -4
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +9 -2
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +7 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +2 -0
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +3 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +26 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector-content.js +0 -5
- package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +1 -0
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +80 -2
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.js +3 -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 +51 -0
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +5 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +5 -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.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +12 -0
- 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-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +4 -1
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-onboarding.d.ts +11 -0
- package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-onboarding.js +220 -0
- package/dist/modes/interactive/interactive-onboarding.js.map +1 -0
- package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +4 -0
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +6 -0
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +9 -4
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +28 -0
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +21 -1
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/markit.d.ts +8 -0
- package/dist/utils/markit.d.ts.map +1 -0
- package/dist/utils/markit.js +53 -0
- package/dist/utils/markit.js.map +1 -0
- package/dist/utils/paths.d.ts +2 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +14 -1
- package/dist/utils/paths.js.map +1 -1
- package/docs/compaction.md +18 -1
- package/docs/containerization.md +1 -1
- package/docs/docs.json +1 -0
- package/docs/extensions.md +25 -36
- package/docs/models.md +1 -1
- package/docs/providers.md +2 -1
- package/docs/quickstart.md +11 -6
- package/docs/sdk.md +5 -5
- package/docs/session-format.md +6 -0
- package/docs/sessions.md +6 -0
- package/docs/settings.md +7 -0
- package/docs/subagents.md +3 -2
- package/docs/tools.md +49 -0
- package/docs/usage.md +3 -3
- package/docs/workflows.md +112 -8
- package/examples/extensions/subagent/README.md +5 -5
- package/examples/extensions/subagent/agents/planner.md +1 -1
- package/examples/extensions/subagent/agents/reviewer.md +1 -1
- package/examples/extensions/subagent/agents/scout.md +2 -2
- package/examples/extensions/subagent/display.ts +3 -3
- package/examples/sdk/05-tools.ts +3 -3
- package/examples/sdk/README.md +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { lstatSync, realpathSync, statSync } from "node:fs";
|
|
2
|
+
import { isAbsolute, resolve, relative } from "node:path";
|
|
3
|
+
import { InteractiveModeBase } from "./interactive-mode-base.js";
|
|
4
|
+
import { isUnknownModel } from "./interactive-mode-helpers.js";
|
|
5
|
+
export const ONBOARDING_PLACEHOLDER = "Paste a ticket, issue, path to a spec, or task prompt…";
|
|
6
|
+
export const ONBOARDING_COPY = [
|
|
7
|
+
"Atomic runs agent loops as workflows you can watch and trust:",
|
|
8
|
+
"implement a ticket, research a codebase, design a UI, or build",
|
|
9
|
+
"your own loop.",
|
|
10
|
+
"",
|
|
11
|
+
"Paste a ticket description, GitHub issue, path to a spec, or task prompt to start.",
|
|
12
|
+
"/chat to chat normally · /atomic for guides",
|
|
13
|
+
"If you have not logged in yet, first run /login.",
|
|
14
|
+
].join("\n");
|
|
15
|
+
export const NORMAL_CHAT_TRANSITION_COPY = [
|
|
16
|
+
"You're in a normal coding-agent session now. Atomic can chat and edit like other",
|
|
17
|
+
"coding agents, but it also runs loops and workflows. Ask Atomic to build any loop,",
|
|
18
|
+
"or run a built-in workflow like `goal` for small focused changes or `ralph` for",
|
|
19
|
+
"larger, cross-cutting work. Run `/workflow list` to see built-ins, and use `/atomic`",
|
|
20
|
+
"for help running or building your own loops and workflows.",
|
|
21
|
+
].join("\n");
|
|
22
|
+
export const ONBOARDING_SEED_STASHED_COPY = [
|
|
23
|
+
"Task saved for after login. Run /login to connect a provider; once login finishes,",
|
|
24
|
+
"Atomic will continue with your saved task.",
|
|
25
|
+
].join("\n");
|
|
26
|
+
export const ONBOARDING_SEED_REPLACED_COPY = [
|
|
27
|
+
"Latest task saved for after login, replacing the previous saved task. Run /login to",
|
|
28
|
+
"connect a provider; once login finishes, Atomic will continue with the latest task.",
|
|
29
|
+
].join("\n");
|
|
30
|
+
export const ONBOARDING_HANDOFF_NOTICE = "Handing your task to the normal coding-agent session.";
|
|
31
|
+
export const ONBOARDING_ROUTING_THINKING_LEVEL = "high";
|
|
32
|
+
function isInside(baseDir, candidate) {
|
|
33
|
+
const rel = relative(baseDir, candidate);
|
|
34
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
35
|
+
}
|
|
36
|
+
function pathCandidatesWithOptionalLocationSuffix(pathText) {
|
|
37
|
+
const candidates = [pathText, pathText.replace(/:\d+:\d+$/, ""), pathText.replace(/:\d+$/, "")];
|
|
38
|
+
return candidates.filter((candidate, index) => candidate && candidates.indexOf(candidate) === index);
|
|
39
|
+
}
|
|
40
|
+
function firstSeedLine(seed) { return seed.trim().split(/\r?\n/, 1)[0]?.trim() ?? ""; }
|
|
41
|
+
function getContainedExistingPath(pathText, cwd) {
|
|
42
|
+
if (!pathText || /\r|\n/.test(pathText) || /^[a-z]+:\/\//i.test(pathText))
|
|
43
|
+
return undefined;
|
|
44
|
+
const root = resolve(cwd);
|
|
45
|
+
let rootReal;
|
|
46
|
+
try {
|
|
47
|
+
rootReal = realpathSync(root);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
for (const candidate of pathCandidatesWithOptionalLocationSuffix(pathText)) {
|
|
53
|
+
const absolute = isAbsolute(candidate) ? resolve(candidate) : resolve(cwd, candidate);
|
|
54
|
+
if (!isInside(root, absolute))
|
|
55
|
+
continue;
|
|
56
|
+
try {
|
|
57
|
+
lstatSync(absolute);
|
|
58
|
+
const real = realpathSync(absolute);
|
|
59
|
+
if (isInside(rootReal, real))
|
|
60
|
+
return real;
|
|
61
|
+
}
|
|
62
|
+
catch { }
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
export function isCwdLocalExistingPathSeed(seed, cwd) {
|
|
67
|
+
const trimmed = firstSeedLine(seed);
|
|
68
|
+
if (!trimmed || !isAbsolute(trimmed))
|
|
69
|
+
return false;
|
|
70
|
+
const real = getContainedExistingPath(trimmed, cwd);
|
|
71
|
+
if (!real)
|
|
72
|
+
return false;
|
|
73
|
+
try {
|
|
74
|
+
const stat = statSync(real);
|
|
75
|
+
return stat.isFile() || stat.isDirectory();
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export function isExistingAbsolutePathSeed(seed) {
|
|
82
|
+
const trimmed = firstSeedLine(seed);
|
|
83
|
+
if (!trimmed || /\r|\n/.test(trimmed) || /^[a-z]+:\/\//i.test(trimmed) || !isAbsolute(trimmed))
|
|
84
|
+
return false;
|
|
85
|
+
for (const candidate of pathCandidatesWithOptionalLocationSuffix(trimmed)) {
|
|
86
|
+
if (!isAbsolute(candidate))
|
|
87
|
+
continue;
|
|
88
|
+
try {
|
|
89
|
+
const stat = statSync(candidate);
|
|
90
|
+
if (stat.isFile() || stat.isDirectory())
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch { }
|
|
94
|
+
}
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
function sameModel(a, b) {
|
|
98
|
+
return a.provider === b.provider && a.id === b.id;
|
|
99
|
+
}
|
|
100
|
+
function backtickFenceFor(seed) {
|
|
101
|
+
let longest = 0;
|
|
102
|
+
for (const match of seed.matchAll(/`+/g))
|
|
103
|
+
longest = Math.max(longest, match[0].length);
|
|
104
|
+
return "`".repeat(Math.max(3, longest + 1));
|
|
105
|
+
}
|
|
106
|
+
export function buildOnboardingHandoffPrompt(seed) {
|
|
107
|
+
const fence = backtickFenceFor(seed);
|
|
108
|
+
return [
|
|
109
|
+
"First-run onboarding handoff: continue as a normal Atomic coding-agent session.",
|
|
110
|
+
"",
|
|
111
|
+
"Original task seed:",
|
|
112
|
+
`${fence}text`,
|
|
113
|
+
seed,
|
|
114
|
+
fence,
|
|
115
|
+
"",
|
|
116
|
+
"Perform a quick scope-routing pass before acting. Atomic has switched the selected model",
|
|
117
|
+
"to high reasoning for this routing decision when the model supports it. First estimate the",
|
|
118
|
+
"likely scope from the seed text alone: tickets, GitHub issues, and especially specs often",
|
|
119
|
+
"name enough work items, files, systems, tests, docs, migrations, or acceptance criteria to",
|
|
120
|
+
"classify the task without immediately inspecting the repo. Treat that text-only estimate as",
|
|
121
|
+
"an initial confidence signal for routing, not as final implementation planning.",
|
|
122
|
+
"",
|
|
123
|
+
"If the seed makes the task clearly tiny or small and the routing choice is high-confidence,",
|
|
124
|
+
"you may route directly without codebase probing. If the seed references a local path, issue,",
|
|
125
|
+
"spec, or repo area that must be read to understand the task, inspect only that targeted",
|
|
126
|
+
"context. When the scope is medium, large, unclear, risky, or otherwise not obviously tiny,",
|
|
127
|
+
"gather quick read-only codebase context with targeted subagents such as `codebase-locator`,",
|
|
128
|
+
"`codebase-analyzer`, and `codebase-pattern-finder`. Use those subagents with their normal",
|
|
129
|
+
"default model/thinking settings; do not override their models just for routing. Do only the",
|
|
130
|
+
"probing needed to route scope; do not turn this into an open-ended research project.",
|
|
131
|
+
"",
|
|
132
|
+
"Then make the final choice in this high-reasoning parent session using the existing Atomic",
|
|
133
|
+
"workflow guidance: choose `goal` for clearly small, focused fixes or quick fixes; choose `ralph`",
|
|
134
|
+
"for non-trivial, broad, cross-cutting, risky, unclear, or around-2K+-changed-line work.",
|
|
135
|
+
"Start the selected workflow with the original seed. After the `goal` or `ralph` run is",
|
|
136
|
+
"dispatched, show the new developer the workflow id and succinct next steps:",
|
|
137
|
+
"- `/workflow status <workflow-id>` checks progress.",
|
|
138
|
+
"- `/workflow connect <workflow-id>` opens the graph viewer to watch, attach, and steer.",
|
|
139
|
+
"- They can ask in this chat for status or to steer the run at any point.",
|
|
140
|
+
"Then continue normally in this session. Slash commands should behave like normal",
|
|
141
|
+
"coding-agent slash commands from here on.",
|
|
142
|
+
].join("\n");
|
|
143
|
+
}
|
|
144
|
+
InteractiveModeBase.prototype.isFirstRunOnboardingEligible = function () {
|
|
145
|
+
const hasInitialInput = Boolean(this.options.initialMessage) || Boolean(this.options.initialMessages?.length);
|
|
146
|
+
return this.session.state.messages.length === 0
|
|
147
|
+
&& !hasInitialInput
|
|
148
|
+
&& !this.settingsManager.getOnboardedVersion()
|
|
149
|
+
&& Boolean(this.settingsManager.getFirstRunOnboardingStartedVersion());
|
|
150
|
+
};
|
|
151
|
+
InteractiveModeBase.prototype.isFirstRunOnboardingReadyForHandoff = function () {
|
|
152
|
+
const registry = this.session.modelRegistry;
|
|
153
|
+
if (!registry)
|
|
154
|
+
return true;
|
|
155
|
+
const model = this.session.model;
|
|
156
|
+
if (!model || isUnknownModel(model))
|
|
157
|
+
return false;
|
|
158
|
+
if (typeof registry.hasConfiguredAuth === "function") {
|
|
159
|
+
return registry.hasConfiguredAuth(model);
|
|
160
|
+
}
|
|
161
|
+
if (typeof registry.getAvailable === "function") {
|
|
162
|
+
return registry.getAvailable().some((availableModel) => sameModel(availableModel, model));
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
};
|
|
166
|
+
InteractiveModeBase.prototype.stashFirstRunOnboardingSeed = function (seed) {
|
|
167
|
+
const replaced = Boolean(this.pendingFirstRunOnboardingSeed);
|
|
168
|
+
this.pendingFirstRunOnboardingSeed = seed;
|
|
169
|
+
this.showStatus(replaced ? ONBOARDING_SEED_REPLACED_COPY : ONBOARDING_SEED_STASHED_COPY);
|
|
170
|
+
};
|
|
171
|
+
InteractiveModeBase.prototype.resumePendingFirstRunOnboardingSeed = async function () {
|
|
172
|
+
if (!this.firstRunOnboardingActive || !this.pendingFirstRunOnboardingSeed)
|
|
173
|
+
return;
|
|
174
|
+
if (!this.isFirstRunOnboardingReadyForHandoff())
|
|
175
|
+
return;
|
|
176
|
+
const seed = this.pendingFirstRunOnboardingSeed;
|
|
177
|
+
this.pendingFirstRunOnboardingSeed = undefined;
|
|
178
|
+
try {
|
|
179
|
+
await this.handleOnboardingWorkflowSeed(seed);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
this.pendingFirstRunOnboardingSeed = seed;
|
|
183
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
184
|
+
this.showError(errorMessage);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
InteractiveModeBase.prototype.clearPendingFirstRunOnboardingSeed = function () {
|
|
188
|
+
this.firstRunOnboardingSeedInFlight = false;
|
|
189
|
+
this.pendingFirstRunOnboardingSeed = undefined;
|
|
190
|
+
};
|
|
191
|
+
InteractiveModeBase.prototype.clearFirstRunOnboardingUi = function () {
|
|
192
|
+
this.firstRunOnboardingActive = false;
|
|
193
|
+
InteractiveModeBase.prototype.clearPendingFirstRunOnboardingSeed.call(this);
|
|
194
|
+
this.defaultEditor.setPlaceholder(undefined);
|
|
195
|
+
if (this.firstRunOnboardingHeaderComponents.length > 0) {
|
|
196
|
+
this.headerContainer.children = this.headerContainer.children.filter((child) => !this.firstRunOnboardingHeaderComponents.includes(child));
|
|
197
|
+
this.firstRunOnboardingHeaderComponents = [];
|
|
198
|
+
}
|
|
199
|
+
this.ui.requestRender();
|
|
200
|
+
};
|
|
201
|
+
InteractiveModeBase.prototype.completeFirstRunOnboarding = function () {
|
|
202
|
+
this.settingsManager.setOnboardedVersion(this.version);
|
|
203
|
+
InteractiveModeBase.prototype.clearFirstRunOnboardingUi.call(this);
|
|
204
|
+
};
|
|
205
|
+
InteractiveModeBase.prototype.handleOnboardingWorkflowSeed = async function (seed) {
|
|
206
|
+
const handoffPrompt = buildOnboardingHandoffPrompt(seed);
|
|
207
|
+
this.session.setThinkingLevel(ONBOARDING_ROUTING_THINKING_LEVEL);
|
|
208
|
+
this.footer.invalidate();
|
|
209
|
+
this.updateEditorBorderColor();
|
|
210
|
+
this.flushPendingBashComponents();
|
|
211
|
+
if (this.onInputCallback) {
|
|
212
|
+
this.onInputCallback(handoffPrompt);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.pendingUserInputs.push(handoffPrompt);
|
|
216
|
+
}
|
|
217
|
+
this.showStatus(ONBOARDING_HANDOFF_NOTICE);
|
|
218
|
+
this.completeFirstRunOnboarding();
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=interactive-onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-onboarding.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-onboarding.ts"],"names":[],"mappings":"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","sourcesContent":["import { lstatSync, realpathSync, statSync } from \"node:fs\";\nimport { isAbsolute, resolve, relative } from \"node:path\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport type { Api, Model } from \"./interactive-mode-deps.ts\";\nimport { isUnknownModel } from \"./interactive-mode-helpers.ts\";\n\nexport const ONBOARDING_PLACEHOLDER = \"Paste a ticket, issue, path to a spec, or task prompt…\";\n\nexport const ONBOARDING_COPY = [\n \"Atomic runs agent loops as workflows you can watch and trust:\",\n \"implement a ticket, research a codebase, design a UI, or build\",\n \"your own loop.\",\n \"\",\n \"Paste a ticket description, GitHub issue, path to a spec, or task prompt to start.\",\n \"/chat to chat normally · /atomic for guides\",\n \"If you have not logged in yet, first run /login.\",\n].join(\"\\n\");\n\nexport const NORMAL_CHAT_TRANSITION_COPY = [\n \"You're in a normal coding-agent session now. Atomic can chat and edit like other\",\n \"coding agents, but it also runs loops and workflows. Ask Atomic to build any loop,\",\n \"or run a built-in workflow like `goal` for small focused changes or `ralph` for\",\n \"larger, cross-cutting work. Run `/workflow list` to see built-ins, and use `/atomic`\",\n \"for help running or building your own loops and workflows.\",\n].join(\"\\n\");\n\nexport const ONBOARDING_SEED_STASHED_COPY = [\n \"Task saved for after login. Run /login to connect a provider; once login finishes,\",\n \"Atomic will continue with your saved task.\",\n].join(\"\\n\");\n\nexport const ONBOARDING_SEED_REPLACED_COPY = [\n \"Latest task saved for after login, replacing the previous saved task. Run /login to\",\n \"connect a provider; once login finishes, Atomic will continue with the latest task.\",\n].join(\"\\n\");\n\nexport const ONBOARDING_HANDOFF_NOTICE = \"Handing your task to the normal coding-agent session.\";\nexport const ONBOARDING_ROUTING_THINKING_LEVEL = \"high\";\n\nfunction isInside(baseDir: string, candidate: string): boolean {\n const rel = relative(baseDir, candidate);\n return rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\n\nfunction pathCandidatesWithOptionalLocationSuffix(pathText: string): string[] {\n const candidates = [pathText, pathText.replace(/:\\d+:\\d+$/, \"\"), pathText.replace(/:\\d+$/, \"\")];\n return candidates.filter((candidate, index) => candidate && candidates.indexOf(candidate) === index);\n}\n\nfunction firstSeedLine(seed: string): string { return seed.trim().split(/\\r?\\n/, 1)[0]?.trim() ?? \"\"; }\n\nfunction getContainedExistingPath(pathText: string, cwd: string): string | undefined {\n if (!pathText || /\\r|\\n/.test(pathText) || /^[a-z]+:\\/\\//i.test(pathText)) return undefined;\n const root = resolve(cwd);\n let rootReal: string;\n try { rootReal = realpathSync(root); } catch { return undefined; }\n for (const candidate of pathCandidatesWithOptionalLocationSuffix(pathText)) {\n const absolute = isAbsolute(candidate) ? resolve(candidate) : resolve(cwd, candidate);\n if (!isInside(root, absolute)) continue;\n try {\n lstatSync(absolute);\n const real = realpathSync(absolute);\n if (isInside(rootReal, real)) return real;\n } catch {}\n }\n return undefined;\n}\n\nexport function isCwdLocalExistingPathSeed(seed: string, cwd: string): boolean {\n const trimmed = firstSeedLine(seed);\n if (!trimmed || !isAbsolute(trimmed)) return false;\n const real = getContainedExistingPath(trimmed, cwd);\n if (!real) return false;\n try {\n const stat = statSync(real);\n return stat.isFile() || stat.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport function isExistingAbsolutePathSeed(seed: string): boolean {\n const trimmed = firstSeedLine(seed);\n if (!trimmed || /\\r|\\n/.test(trimmed) || /^[a-z]+:\\/\\//i.test(trimmed) || !isAbsolute(trimmed)) return false;\n for (const candidate of pathCandidatesWithOptionalLocationSuffix(trimmed)) {\n if (!isAbsolute(candidate)) continue;\n try {\n const stat = statSync(candidate);\n if (stat.isFile() || stat.isDirectory()) return true;\n } catch {}\n }\n return false;\n}\n\nfunction sameModel(a: Model<Api>, b: Model<Api>): boolean {\n return a.provider === b.provider && a.id === b.id;\n}\n\nfunction backtickFenceFor(seed: string): string {\n let longest = 0;\n for (const match of seed.matchAll(/`+/g)) longest = Math.max(longest, match[0].length);\n return \"`\".repeat(Math.max(3, longest + 1));\n}\n\nexport function buildOnboardingHandoffPrompt(seed: string): string {\n const fence = backtickFenceFor(seed);\n return [\n \"First-run onboarding handoff: continue as a normal Atomic coding-agent session.\",\n \"\",\n \"Original task seed:\",\n `${fence}text`,\n seed,\n fence,\n \"\",\n \"Perform a quick scope-routing pass before acting. Atomic has switched the selected model\",\n \"to high reasoning for this routing decision when the model supports it. First estimate the\",\n \"likely scope from the seed text alone: tickets, GitHub issues, and especially specs often\",\n \"name enough work items, files, systems, tests, docs, migrations, or acceptance criteria to\",\n \"classify the task without immediately inspecting the repo. Treat that text-only estimate as\",\n \"an initial confidence signal for routing, not as final implementation planning.\",\n \"\",\n \"If the seed makes the task clearly tiny or small and the routing choice is high-confidence,\",\n \"you may route directly without codebase probing. If the seed references a local path, issue,\",\n \"spec, or repo area that must be read to understand the task, inspect only that targeted\",\n \"context. When the scope is medium, large, unclear, risky, or otherwise not obviously tiny,\",\n \"gather quick read-only codebase context with targeted subagents such as `codebase-locator`,\",\n \"`codebase-analyzer`, and `codebase-pattern-finder`. Use those subagents with their normal\",\n \"default model/thinking settings; do not override their models just for routing. Do only the\",\n \"probing needed to route scope; do not turn this into an open-ended research project.\",\n \"\",\n \"Then make the final choice in this high-reasoning parent session using the existing Atomic\",\n \"workflow guidance: choose `goal` for clearly small, focused fixes or quick fixes; choose `ralph`\",\n \"for non-trivial, broad, cross-cutting, risky, unclear, or around-2K+-changed-line work.\",\n \"Start the selected workflow with the original seed. After the `goal` or `ralph` run is\",\n \"dispatched, show the new developer the workflow id and succinct next steps:\",\n \"- `/workflow status <workflow-id>` checks progress.\",\n \"- `/workflow connect <workflow-id>` opens the graph viewer to watch, attach, and steer.\",\n \"- They can ask in this chat for status or to steer the run at any point.\",\n \"Then continue normally in this session. Slash commands should behave like normal\",\n \"coding-agent slash commands from here on.\",\n ].join(\"\\n\");\n}\n\nInteractiveModeBase.prototype.isFirstRunOnboardingEligible = function(this: InteractiveModeBase): boolean {\n const hasInitialInput = Boolean(this.options.initialMessage) || Boolean(this.options.initialMessages?.length);\n return this.session.state.messages.length === 0\n && !hasInitialInput\n && !this.settingsManager.getOnboardedVersion()\n && Boolean(this.settingsManager.getFirstRunOnboardingStartedVersion());\n};\n\nInteractiveModeBase.prototype.isFirstRunOnboardingReadyForHandoff = function(this: InteractiveModeBase): boolean {\n const registry = this.session.modelRegistry;\n if (!registry) return true;\n const model = this.session.model;\n if (!model || isUnknownModel(model)) return false;\n if (typeof registry.hasConfiguredAuth === \"function\") {\n return registry.hasConfiguredAuth(model);\n }\n if (typeof registry.getAvailable === \"function\") {\n return registry.getAvailable().some((availableModel) => sameModel(availableModel, model));\n }\n return true;\n};\n\nInteractiveModeBase.prototype.stashFirstRunOnboardingSeed = function(this: InteractiveModeBase, seed: string): void {\n const replaced = Boolean(this.pendingFirstRunOnboardingSeed);\n this.pendingFirstRunOnboardingSeed = seed;\n this.showStatus(replaced ? ONBOARDING_SEED_REPLACED_COPY : ONBOARDING_SEED_STASHED_COPY);\n};\n\nInteractiveModeBase.prototype.resumePendingFirstRunOnboardingSeed = async function(this: InteractiveModeBase): Promise<void> {\n if (!this.firstRunOnboardingActive || !this.pendingFirstRunOnboardingSeed) return;\n if (!this.isFirstRunOnboardingReadyForHandoff()) return;\n const seed = this.pendingFirstRunOnboardingSeed;\n this.pendingFirstRunOnboardingSeed = undefined;\n try {\n await this.handleOnboardingWorkflowSeed(seed);\n } catch (error: unknown) {\n this.pendingFirstRunOnboardingSeed = seed;\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.showError(errorMessage);\n }\n};\n\nInteractiveModeBase.prototype.clearPendingFirstRunOnboardingSeed = function(this: InteractiveModeBase): void {\n this.firstRunOnboardingSeedInFlight = false;\n this.pendingFirstRunOnboardingSeed = undefined;\n};\n\nInteractiveModeBase.prototype.clearFirstRunOnboardingUi = function(this: InteractiveModeBase): void {\n this.firstRunOnboardingActive = false;\n InteractiveModeBase.prototype.clearPendingFirstRunOnboardingSeed.call(this);\n this.defaultEditor.setPlaceholder(undefined);\n if (this.firstRunOnboardingHeaderComponents.length > 0) {\n this.headerContainer.children = this.headerContainer.children.filter(\n (child) => !this.firstRunOnboardingHeaderComponents.includes(child),\n );\n this.firstRunOnboardingHeaderComponents = [];\n }\n this.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.completeFirstRunOnboarding = function(this: InteractiveModeBase): void {\n this.settingsManager.setOnboardedVersion(this.version);\n InteractiveModeBase.prototype.clearFirstRunOnboardingUi.call(this);\n};\n\nInteractiveModeBase.prototype.handleOnboardingWorkflowSeed = async function(\n this: InteractiveModeBase,\n seed: string,\n): Promise<void> {\n const handoffPrompt = buildOnboardingHandoffPrompt(seed);\n this.session.setThinkingLevel(ONBOARDING_ROUTING_THINKING_LEVEL);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n this.flushPendingBashComponents();\n if (this.onInputCallback) {\n this.onInputCallback(handoffPrompt);\n } else {\n this.pendingUserInputs.push(handoffPrompt);\n }\n this.showStatus(ONBOARDING_HANDOFF_NOTICE);\n this.completeFirstRunOnboarding();\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-selectors.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-selectors.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Component, setCodexFastModeEnvironmentSettings, configureHttpDispatcher, AssistantMessageComponent, FastModeSelectorComponent, SettingsSelectorComponent, ToolExecutionComponent, getAvailableThemes } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.showSelector = function(this: InteractiveModeBase, create: (done: () => void) => { component: Component; focus: Component }): void {\n const done = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n };\n const { component, focus } = create(done);\n this.editorContainer.clear();\n this.editorContainer.addChild(component);\n this.ui.setFocus(focus);\n this.ui.requestRender();\n };\n\nInteractiveModeBase.prototype.showFastModeSelector = function(this: InteractiveModeBase): void {\n if (!this.hasCodexFastModeSupportedModels()) {\n this.showWarning(\n \"Codex fast mode requires an available openai/* or openai-codex/* model.\",\n );\n return;\n }\n\n this.showSelector((done) => {\n let pendingStatusMessage: string | undefined;\n const selector = new FastModeSelectorComponent(\n this.settingsManager.getCodexFastModeSettings(),\n {\n onChange: (settings, changedRow) => {\n this.settingsManager.setCodexFastModeSettings({ [changedRow]: settings[changedRow] });\n const effectiveSettings = this.settingsManager.getCodexFastModeSettings();\n setCodexFastModeEnvironmentSettings(effectiveSettings);\n this.footer.invalidate();\n this.refreshBuiltInHeader();\n const changedLabel = changedRow === \"chat\" ? \"Chat\" : \"Workflow\";\n const changedState = effectiveSettings[changedRow] ? \"on\" : \"off\";\n pendingStatusMessage = `${changedLabel} fast mode ${changedState}`;\n },\n onCancel: async () => {\n await this.settingsManager.flush();\n done();\n if (pendingStatusMessage) {\n this.showStatus(pendingStatusMessage);\n }\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showSettingsSelector = function(this: InteractiveModeBase): void {\n this.showSelector((done) => {\n const selector = new SettingsSelectorComponent(\n {\n autoCompact: this.session.autoCompactionEnabled,\n showImages: this.settingsManager.getShowImages(),\n imageWidthCells: this.settingsManager.getImageWidthCells(),\n autoResizeImages: this.settingsManager.getImageAutoResize(),\n blockImages: this.settingsManager.getBlockImages(),\n enableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n steeringMode: this.session.steeringMode,\n followUpMode: this.session.followUpMode,\n transport: this.settingsManager.getTransport(),\n httpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),\n thinkingLevel: this.session.thinkingLevel,\n availableThinkingLevels: this.session.getAvailableThinkingLevels(),\n currentTheme: this.settingsManager.getThemeSetting() || \"dark\",\n terminalTheme: this.themeController.getTerminalTheme(),\n availableThemes: getAvailableThemes(),\n hideThinkingBlock: this.hideThinkingBlock,\n collapseChangelog: this.settingsManager.getCollapseChangelog(),\n enableInstallTelemetry:\n this.settingsManager.getEnableInstallTelemetry(),\n doubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n treeFilterMode: this.settingsManager.getTreeFilterMode(),\n showHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n editorPaddingX: this.settingsManager.getEditorPaddingX(),\n autocompleteMaxVisible:\n this.settingsManager.getAutocompleteMaxVisible(),\n quietStartup: this.settingsManager.getQuietStartup(),\n defaultProjectTrust: this.settingsManager.getDefaultProjectTrust(),\n clearOnShrink: this.settingsManager.getClearOnShrink(),\n showTerminalProgress: this.settingsManager.getShowTerminalProgress(),\n warnings: this.settingsManager.getWarnings(),\n },\n {\n onAutoCompactChange: (enabled) => {\n this.session.setAutoCompactionEnabled(enabled);\n this.usageMeter.setAutoCompactEnabled(enabled);\n },\n onShowImagesChange: (enabled) => {\n this.settingsManager.setShowImages(enabled);\n for (const child of this.chatContainer.children) {\n if (child instanceof ToolExecutionComponent) {\n child.setShowImages(enabled);\n }\n }\n },\n onImageWidthCellsChange: (width) => {\n this.settingsManager.setImageWidthCells(width);\n for (const child of this.chatContainer.children) {\n if (child instanceof ToolExecutionComponent) {\n child.setImageWidthCells(width);\n }\n }\n },\n onAutoResizeImagesChange: (enabled) => {\n this.settingsManager.setImageAutoResize(enabled);\n },\n onBlockImagesChange: (blocked) => {\n this.settingsManager.setBlockImages(blocked);\n },\n onEnableSkillCommandsChange: (enabled) => {\n this.settingsManager.setEnableSkillCommands(enabled);\n this.setupAutocompleteProvider();\n },\n onSteeringModeChange: (mode) => {\n this.session.setSteeringMode(mode);\n },\n onFollowUpModeChange: (mode) => {\n this.session.setFollowUpMode(mode);\n },\n onTransportChange: (transport) => {\n this.settingsManager.setTransport(transport);\n this.session.agent.transport = transport;\n },\n onHttpIdleTimeoutChange: (timeoutMs) => {\n this.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n configureHttpDispatcher(timeoutMs);\n },\n onThinkingLevelChange: (level) => {\n this.session.setThinkingLevel(level);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n },\n onThemeChange: (themeSetting) => {\n this.settingsManager.setTheme(themeSetting);\n void this.themeController.applyFromSettings();\n },\n onThemePreview: (themeName) => this.themeController.preview(themeName),\n onHideThinkingBlockChange: (hidden) => {\n this.hideThinkingBlock = hidden;\n this.settingsManager.setHideThinkingBlock(hidden);\n for (const child of this.chatContainer.children) {\n if (child instanceof AssistantMessageComponent) {\n child.setHideThinkingBlock(hidden);\n }\n }\n this.chatContainer.clear();\n this.rebuildChatFromMessages();\n },\n onCollapseChangelogChange: (collapsed) => {\n this.settingsManager.setCollapseChangelog(collapsed);\n },\n onEnableInstallTelemetryChange: (enabled) => {\n this.settingsManager.setEnableInstallTelemetry(enabled);\n },\n onQuietStartupChange: (enabled) => {\n this.settingsManager.setQuietStartup(enabled);\n },\n onDefaultProjectTrustChange: (defaultProjectTrust) => {\n this.settingsManager.setDefaultProjectTrust(defaultProjectTrust);\n },\n onDoubleEscapeActionChange: (action) => {\n this.settingsManager.setDoubleEscapeAction(action);\n },\n onTreeFilterModeChange: (mode) => {\n this.settingsManager.setTreeFilterMode(mode);\n },\n onShowHardwareCursorChange: (enabled) => {\n this.settingsManager.setShowHardwareCursor(enabled);\n this.ui.setShowHardwareCursor(enabled);\n },\n onEditorPaddingXChange: (padding) => {\n this.settingsManager.setEditorPaddingX(padding);\n this.defaultEditor.setPaddingX(padding);\n if (\n this.editor !== this.defaultEditor &&\n this.editor.setPaddingX !== undefined\n ) {\n this.editor.setPaddingX(padding);\n }\n },\n onAutocompleteMaxVisibleChange: (maxVisible) => {\n this.settingsManager.setAutocompleteMaxVisible(maxVisible);\n this.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n if (\n this.editor !== this.defaultEditor &&\n this.editor.setAutocompleteMaxVisible !== undefined\n ) {\n this.editor.setAutocompleteMaxVisible(maxVisible);\n }\n },\n onClearOnShrinkChange: (enabled) => {\n this.settingsManager.setClearOnShrink(enabled);\n this.ui.setClearOnShrink(enabled);\n },\n onShowTerminalProgressChange: (enabled) => {\n this.settingsManager.setShowTerminalProgress(enabled);\n },\n onWarningsChange: (warnings) => {\n this.settingsManager.setWarnings(warnings);\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector.getSettingsList() };\n });\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-selectors.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-selectors.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Component, setCodexFastModeEnvironmentSettings, configureHttpDispatcher, AssistantMessageComponent, FastModeSelectorComponent, SettingsSelectorComponent, ToolExecutionComponent, getAvailableThemes } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.showSelector = function(this: InteractiveModeBase, create: (done: () => void) => { component: Component; focus: Component }): void {\n const done = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n };\n const { component, focus } = create(done);\n this.editorContainer.clear();\n this.editorContainer.addChild(component);\n this.ui.setFocus(focus);\n this.ui.requestRender();\n };\n\nInteractiveModeBase.prototype.showFastModeSelector = function(this: InteractiveModeBase): void {\n if (!this.hasCodexFastModeSupportedModels()) {\n this.showWarning(\n \"Codex fast mode requires an available openai/* or openai-codex/* model.\",\n );\n return;\n }\n\n this.showSelector((done) => {\n let pendingStatusMessage: string | undefined;\n const selector = new FastModeSelectorComponent(\n this.settingsManager.getCodexFastModeSettings(),\n {\n onChange: (settings, changedRow) => {\n this.settingsManager.setCodexFastModeSettings({ [changedRow]: settings[changedRow] });\n const effectiveSettings = this.settingsManager.getCodexFastModeSettings();\n setCodexFastModeEnvironmentSettings(effectiveSettings);\n this.footer.invalidate();\n this.refreshBuiltInHeader();\n const changedLabel = changedRow === \"chat\" ? \"Chat\" : \"Workflow\";\n const changedState = effectiveSettings[changedRow] ? \"on\" : \"off\";\n pendingStatusMessage = `${changedLabel} fast mode ${changedState}`;\n },\n onCancel: async () => {\n await this.settingsManager.flush();\n done();\n if (pendingStatusMessage) {\n this.showStatus(pendingStatusMessage);\n }\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showSettingsSelector = function(this: InteractiveModeBase): void {\n this.showSelector((done) => {\n const selector = new SettingsSelectorComponent(\n {\n autoCompact: this.session.autoCompactionEnabled,\n showImages: this.settingsManager.getShowImages(),\n imageWidthCells: this.settingsManager.getImageWidthCells(),\n autoResizeImages: this.settingsManager.getImageAutoResize(),\n blockImages: this.settingsManager.getBlockImages(),\n enableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n steeringMode: this.session.steeringMode,\n followUpMode: this.session.followUpMode,\n transport: this.settingsManager.getTransport(),\n httpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),\n bashInterceptorEnabled: this.settingsManager.getBashInterceptorEnabled(),\n thinkingLevel: this.session.thinkingLevel,\n availableThinkingLevels: this.session.getAvailableThinkingLevels(),\n currentTheme: this.settingsManager.getThemeSetting() || \"dark\",\n terminalTheme: this.themeController.getTerminalTheme(),\n availableThemes: getAvailableThemes(),\n hideThinkingBlock: this.hideThinkingBlock,\n collapseChangelog: this.settingsManager.getCollapseChangelog(),\n enableInstallTelemetry:\n this.settingsManager.getEnableInstallTelemetry(),\n doubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n treeFilterMode: this.settingsManager.getTreeFilterMode(),\n showHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n editorPaddingX: this.settingsManager.getEditorPaddingX(),\n autocompleteMaxVisible:\n this.settingsManager.getAutocompleteMaxVisible(),\n quietStartup: this.settingsManager.getQuietStartup(),\n defaultProjectTrust: this.settingsManager.getDefaultProjectTrust(),\n clearOnShrink: this.settingsManager.getClearOnShrink(),\n showTerminalProgress: this.settingsManager.getShowTerminalProgress(),\n warnings: this.settingsManager.getWarnings(),\n },\n {\n onAutoCompactChange: (enabled) => {\n this.session.setAutoCompactionEnabled(enabled);\n this.usageMeter.setAutoCompactEnabled(enabled);\n },\n onShowImagesChange: (enabled) => {\n this.settingsManager.setShowImages(enabled);\n for (const child of this.chatContainer.children) {\n if (child instanceof ToolExecutionComponent) {\n child.setShowImages(enabled);\n }\n }\n },\n onImageWidthCellsChange: (width) => {\n this.settingsManager.setImageWidthCells(width);\n for (const child of this.chatContainer.children) {\n if (child instanceof ToolExecutionComponent) {\n child.setImageWidthCells(width);\n }\n }\n },\n onAutoResizeImagesChange: (enabled) => {\n this.settingsManager.setImageAutoResize(enabled);\n },\n onBlockImagesChange: (blocked) => {\n this.settingsManager.setBlockImages(blocked);\n },\n onEnableSkillCommandsChange: (enabled) => {\n this.settingsManager.setEnableSkillCommands(enabled);\n this.setupAutocompleteProvider();\n },\n onSteeringModeChange: (mode) => {\n this.session.setSteeringMode(mode);\n },\n onFollowUpModeChange: (mode) => {\n this.session.setFollowUpMode(mode);\n },\n onTransportChange: (transport) => {\n this.settingsManager.setTransport(transport);\n this.session.agent.transport = transport;\n },\n onHttpIdleTimeoutChange: (timeoutMs) => {\n this.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n configureHttpDispatcher(timeoutMs);\n },\n onBashInterceptorEnabledChange: (enabled) => {\n this.settingsManager.setBashInterceptorEnabled(enabled);\n },\n onThinkingLevelChange: (level) => {\n this.session.setThinkingLevel(level);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n },\n onThemeChange: (themeSetting) => {\n this.settingsManager.setTheme(themeSetting);\n void this.themeController.applyFromSettings();\n },\n onThemePreview: (themeName) => this.themeController.preview(themeName),\n onHideThinkingBlockChange: (hidden) => {\n this.hideThinkingBlock = hidden;\n this.settingsManager.setHideThinkingBlock(hidden);\n for (const child of this.chatContainer.children) {\n if (child instanceof AssistantMessageComponent) {\n child.setHideThinkingBlock(hidden);\n }\n }\n this.chatContainer.clear();\n this.rebuildChatFromMessages();\n },\n onCollapseChangelogChange: (collapsed) => {\n this.settingsManager.setCollapseChangelog(collapsed);\n },\n onEnableInstallTelemetryChange: (enabled) => {\n this.settingsManager.setEnableInstallTelemetry(enabled);\n },\n onQuietStartupChange: (enabled) => {\n this.settingsManager.setQuietStartup(enabled);\n },\n onDefaultProjectTrustChange: (defaultProjectTrust) => {\n this.settingsManager.setDefaultProjectTrust(defaultProjectTrust);\n },\n onDoubleEscapeActionChange: (action) => {\n this.settingsManager.setDoubleEscapeAction(action);\n },\n onTreeFilterModeChange: (mode) => {\n this.settingsManager.setTreeFilterMode(mode);\n },\n onShowHardwareCursorChange: (enabled) => {\n this.settingsManager.setShowHardwareCursor(enabled);\n this.ui.setShowHardwareCursor(enabled);\n },\n onEditorPaddingXChange: (padding) => {\n this.settingsManager.setEditorPaddingX(padding);\n this.defaultEditor.setPaddingX(padding);\n if (\n this.editor !== this.defaultEditor &&\n this.editor.setPaddingX !== undefined\n ) {\n this.editor.setPaddingX(padding);\n }\n },\n onAutocompleteMaxVisibleChange: (maxVisible) => {\n this.settingsManager.setAutocompleteMaxVisible(maxVisible);\n this.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n if (\n this.editor !== this.defaultEditor &&\n this.editor.setAutocompleteMaxVisible !== undefined\n ) {\n this.editor.setAutocompleteMaxVisible(maxVisible);\n }\n },\n onClearOnShrinkChange: (enabled) => {\n this.settingsManager.setClearOnShrink(enabled);\n this.ui.setClearOnShrink(enabled);\n },\n onShowTerminalProgressChange: (enabled) => {\n this.settingsManager.setShowTerminalProgress(enabled);\n },\n onWarningsChange: (warnings) => {\n this.settingsManager.setWarnings(warnings);\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector.getSettingsList() };\n });\n };\n"]}
|
|
@@ -55,6 +55,7 @@ InteractiveModeBase.prototype.showSettingsSelector = function () {
|
|
|
55
55
|
followUpMode: this.session.followUpMode,
|
|
56
56
|
transport: this.settingsManager.getTransport(),
|
|
57
57
|
httpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),
|
|
58
|
+
bashInterceptorEnabled: this.settingsManager.getBashInterceptorEnabled(),
|
|
58
59
|
thinkingLevel: this.session.thinkingLevel,
|
|
59
60
|
availableThinkingLevels: this.session.getAvailableThinkingLevels(),
|
|
60
61
|
currentTheme: this.settingsManager.getThemeSetting() || "dark",
|
|
@@ -118,6 +119,9 @@ InteractiveModeBase.prototype.showSettingsSelector = function () {
|
|
|
118
119
|
this.settingsManager.setHttpIdleTimeoutMs(timeoutMs);
|
|
119
120
|
configureHttpDispatcher(timeoutMs);
|
|
120
121
|
},
|
|
122
|
+
onBashInterceptorEnabledChange: (enabled) => {
|
|
123
|
+
this.settingsManager.setBashInterceptorEnabled(enabled);
|
|
124
|
+
},
|
|
121
125
|
onThinkingLevelChange: (level) => {
|
|
122
126
|
this.session.setThinkingLevel(level);
|
|
123
127
|
this.footer.invalidate();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-selectors.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Component, setCodexFastModeEnvironmentSettings, configureHttpDispatcher, AssistantMessageComponent, FastModeSelectorComponent, SettingsSelectorComponent, ToolExecutionComponent, getAvailableThemes } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.showSelector = function(this: InteractiveModeBase, create: (done: () => void) => { component: Component; focus: Component }): void {\n const done = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n };\n const { component, focus } = create(done);\n this.editorContainer.clear();\n this.editorContainer.addChild(component);\n this.ui.setFocus(focus);\n this.ui.requestRender();\n };\n\nInteractiveModeBase.prototype.showFastModeSelector = function(this: InteractiveModeBase): void {\n if (!this.hasCodexFastModeSupportedModels()) {\n this.showWarning(\n \"Codex fast mode requires an available openai/* or openai-codex/* model.\",\n );\n return;\n }\n\n this.showSelector((done) => {\n let pendingStatusMessage: string | undefined;\n const selector = new FastModeSelectorComponent(\n this.settingsManager.getCodexFastModeSettings(),\n {\n onChange: (settings, changedRow) => {\n this.settingsManager.setCodexFastModeSettings({ [changedRow]: settings[changedRow] });\n const effectiveSettings = this.settingsManager.getCodexFastModeSettings();\n setCodexFastModeEnvironmentSettings(effectiveSettings);\n this.footer.invalidate();\n this.refreshBuiltInHeader();\n const changedLabel = changedRow === \"chat\" ? \"Chat\" : \"Workflow\";\n const changedState = effectiveSettings[changedRow] ? \"on\" : \"off\";\n pendingStatusMessage = `${changedLabel} fast mode ${changedState}`;\n },\n onCancel: async () => {\n await this.settingsManager.flush();\n done();\n if (pendingStatusMessage) {\n this.showStatus(pendingStatusMessage);\n }\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showSettingsSelector = function(this: InteractiveModeBase): void {\n this.showSelector((done) => {\n const selector = new SettingsSelectorComponent(\n {\n autoCompact: this.session.autoCompactionEnabled,\n showImages: this.settingsManager.getShowImages(),\n imageWidthCells: this.settingsManager.getImageWidthCells(),\n autoResizeImages: this.settingsManager.getImageAutoResize(),\n blockImages: this.settingsManager.getBlockImages(),\n enableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n steeringMode: this.session.steeringMode,\n followUpMode: this.session.followUpMode,\n transport: this.settingsManager.getTransport(),\n httpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),\n thinkingLevel: this.session.thinkingLevel,\n availableThinkingLevels: this.session.getAvailableThinkingLevels(),\n currentTheme: this.settingsManager.getThemeSetting() || \"dark\",\n terminalTheme: this.themeController.getTerminalTheme(),\n availableThemes: getAvailableThemes(),\n hideThinkingBlock: this.hideThinkingBlock,\n collapseChangelog: this.settingsManager.getCollapseChangelog(),\n enableInstallTelemetry:\n this.settingsManager.getEnableInstallTelemetry(),\n doubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n treeFilterMode: this.settingsManager.getTreeFilterMode(),\n showHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n editorPaddingX: this.settingsManager.getEditorPaddingX(),\n autocompleteMaxVisible:\n this.settingsManager.getAutocompleteMaxVisible(),\n quietStartup: this.settingsManager.getQuietStartup(),\n defaultProjectTrust: this.settingsManager.getDefaultProjectTrust(),\n clearOnShrink: this.settingsManager.getClearOnShrink(),\n showTerminalProgress: this.settingsManager.getShowTerminalProgress(),\n warnings: this.settingsManager.getWarnings(),\n },\n {\n onAutoCompactChange: (enabled) => {\n this.session.setAutoCompactionEnabled(enabled);\n this.usageMeter.setAutoCompactEnabled(enabled);\n },\n onShowImagesChange: (enabled) => {\n this.settingsManager.setShowImages(enabled);\n for (const child of this.chatContainer.children) {\n if (child instanceof ToolExecutionComponent) {\n child.setShowImages(enabled);\n }\n }\n },\n onImageWidthCellsChange: (width) => {\n this.settingsManager.setImageWidthCells(width);\n for (const child of this.chatContainer.children) {\n if (child instanceof ToolExecutionComponent) {\n child.setImageWidthCells(width);\n }\n }\n },\n onAutoResizeImagesChange: (enabled) => {\n this.settingsManager.setImageAutoResize(enabled);\n },\n onBlockImagesChange: (blocked) => {\n this.settingsManager.setBlockImages(blocked);\n },\n onEnableSkillCommandsChange: (enabled) => {\n this.settingsManager.setEnableSkillCommands(enabled);\n this.setupAutocompleteProvider();\n },\n onSteeringModeChange: (mode) => {\n this.session.setSteeringMode(mode);\n },\n onFollowUpModeChange: (mode) => {\n this.session.setFollowUpMode(mode);\n },\n onTransportChange: (transport) => {\n this.settingsManager.setTransport(transport);\n this.session.agent.transport = transport;\n },\n onHttpIdleTimeoutChange: (timeoutMs) => {\n this.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n configureHttpDispatcher(timeoutMs);\n },\n onThinkingLevelChange: (level) => {\n this.session.setThinkingLevel(level);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n },\n onThemeChange: (themeSetting) => {\n this.settingsManager.setTheme(themeSetting);\n void this.themeController.applyFromSettings();\n },\n onThemePreview: (themeName) => this.themeController.preview(themeName),\n onHideThinkingBlockChange: (hidden) => {\n this.hideThinkingBlock = hidden;\n this.settingsManager.setHideThinkingBlock(hidden);\n for (const child of this.chatContainer.children) {\n if (child instanceof AssistantMessageComponent) {\n child.setHideThinkingBlock(hidden);\n }\n }\n this.chatContainer.clear();\n this.rebuildChatFromMessages();\n },\n onCollapseChangelogChange: (collapsed) => {\n this.settingsManager.setCollapseChangelog(collapsed);\n },\n onEnableInstallTelemetryChange: (enabled) => {\n this.settingsManager.setEnableInstallTelemetry(enabled);\n },\n onQuietStartupChange: (enabled) => {\n this.settingsManager.setQuietStartup(enabled);\n },\n onDefaultProjectTrustChange: (defaultProjectTrust) => {\n this.settingsManager.setDefaultProjectTrust(defaultProjectTrust);\n },\n onDoubleEscapeActionChange: (action) => {\n this.settingsManager.setDoubleEscapeAction(action);\n },\n onTreeFilterModeChange: (mode) => {\n this.settingsManager.setTreeFilterMode(mode);\n },\n onShowHardwareCursorChange: (enabled) => {\n this.settingsManager.setShowHardwareCursor(enabled);\n this.ui.setShowHardwareCursor(enabled);\n },\n onEditorPaddingXChange: (padding) => {\n this.settingsManager.setEditorPaddingX(padding);\n this.defaultEditor.setPaddingX(padding);\n if (\n this.editor !== this.defaultEditor &&\n this.editor.setPaddingX !== undefined\n ) {\n this.editor.setPaddingX(padding);\n }\n },\n onAutocompleteMaxVisibleChange: (maxVisible) => {\n this.settingsManager.setAutocompleteMaxVisible(maxVisible);\n this.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n if (\n this.editor !== this.defaultEditor &&\n this.editor.setAutocompleteMaxVisible !== undefined\n ) {\n this.editor.setAutocompleteMaxVisible(maxVisible);\n }\n },\n onClearOnShrinkChange: (enabled) => {\n this.settingsManager.setClearOnShrink(enabled);\n this.ui.setClearOnShrink(enabled);\n },\n onShowTerminalProgressChange: (enabled) => {\n this.settingsManager.setShowTerminalProgress(enabled);\n },\n onWarningsChange: (warnings) => {\n this.settingsManager.setWarnings(warnings);\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector.getSettingsList() };\n });\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-selectors.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Component, setCodexFastModeEnvironmentSettings, configureHttpDispatcher, AssistantMessageComponent, FastModeSelectorComponent, SettingsSelectorComponent, ToolExecutionComponent, getAvailableThemes } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.showSelector = function(this: InteractiveModeBase, create: (done: () => void) => { component: Component; focus: Component }): void {\n const done = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n };\n const { component, focus } = create(done);\n this.editorContainer.clear();\n this.editorContainer.addChild(component);\n this.ui.setFocus(focus);\n this.ui.requestRender();\n };\n\nInteractiveModeBase.prototype.showFastModeSelector = function(this: InteractiveModeBase): void {\n if (!this.hasCodexFastModeSupportedModels()) {\n this.showWarning(\n \"Codex fast mode requires an available openai/* or openai-codex/* model.\",\n );\n return;\n }\n\n this.showSelector((done) => {\n let pendingStatusMessage: string | undefined;\n const selector = new FastModeSelectorComponent(\n this.settingsManager.getCodexFastModeSettings(),\n {\n onChange: (settings, changedRow) => {\n this.settingsManager.setCodexFastModeSettings({ [changedRow]: settings[changedRow] });\n const effectiveSettings = this.settingsManager.getCodexFastModeSettings();\n setCodexFastModeEnvironmentSettings(effectiveSettings);\n this.footer.invalidate();\n this.refreshBuiltInHeader();\n const changedLabel = changedRow === \"chat\" ? \"Chat\" : \"Workflow\";\n const changedState = effectiveSettings[changedRow] ? \"on\" : \"off\";\n pendingStatusMessage = `${changedLabel} fast mode ${changedState}`;\n },\n onCancel: async () => {\n await this.settingsManager.flush();\n done();\n if (pendingStatusMessage) {\n this.showStatus(pendingStatusMessage);\n }\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showSettingsSelector = function(this: InteractiveModeBase): void {\n this.showSelector((done) => {\n const selector = new SettingsSelectorComponent(\n {\n autoCompact: this.session.autoCompactionEnabled,\n showImages: this.settingsManager.getShowImages(),\n imageWidthCells: this.settingsManager.getImageWidthCells(),\n autoResizeImages: this.settingsManager.getImageAutoResize(),\n blockImages: this.settingsManager.getBlockImages(),\n enableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n steeringMode: this.session.steeringMode,\n followUpMode: this.session.followUpMode,\n transport: this.settingsManager.getTransport(),\n httpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),\n bashInterceptorEnabled: this.settingsManager.getBashInterceptorEnabled(),\n thinkingLevel: this.session.thinkingLevel,\n availableThinkingLevels: this.session.getAvailableThinkingLevels(),\n currentTheme: this.settingsManager.getThemeSetting() || \"dark\",\n terminalTheme: this.themeController.getTerminalTheme(),\n availableThemes: getAvailableThemes(),\n hideThinkingBlock: this.hideThinkingBlock,\n collapseChangelog: this.settingsManager.getCollapseChangelog(),\n enableInstallTelemetry:\n this.settingsManager.getEnableInstallTelemetry(),\n doubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n treeFilterMode: this.settingsManager.getTreeFilterMode(),\n showHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n editorPaddingX: this.settingsManager.getEditorPaddingX(),\n autocompleteMaxVisible:\n this.settingsManager.getAutocompleteMaxVisible(),\n quietStartup: this.settingsManager.getQuietStartup(),\n defaultProjectTrust: this.settingsManager.getDefaultProjectTrust(),\n clearOnShrink: this.settingsManager.getClearOnShrink(),\n showTerminalProgress: this.settingsManager.getShowTerminalProgress(),\n warnings: this.settingsManager.getWarnings(),\n },\n {\n onAutoCompactChange: (enabled) => {\n this.session.setAutoCompactionEnabled(enabled);\n this.usageMeter.setAutoCompactEnabled(enabled);\n },\n onShowImagesChange: (enabled) => {\n this.settingsManager.setShowImages(enabled);\n for (const child of this.chatContainer.children) {\n if (child instanceof ToolExecutionComponent) {\n child.setShowImages(enabled);\n }\n }\n },\n onImageWidthCellsChange: (width) => {\n this.settingsManager.setImageWidthCells(width);\n for (const child of this.chatContainer.children) {\n if (child instanceof ToolExecutionComponent) {\n child.setImageWidthCells(width);\n }\n }\n },\n onAutoResizeImagesChange: (enabled) => {\n this.settingsManager.setImageAutoResize(enabled);\n },\n onBlockImagesChange: (blocked) => {\n this.settingsManager.setBlockImages(blocked);\n },\n onEnableSkillCommandsChange: (enabled) => {\n this.settingsManager.setEnableSkillCommands(enabled);\n this.setupAutocompleteProvider();\n },\n onSteeringModeChange: (mode) => {\n this.session.setSteeringMode(mode);\n },\n onFollowUpModeChange: (mode) => {\n this.session.setFollowUpMode(mode);\n },\n onTransportChange: (transport) => {\n this.settingsManager.setTransport(transport);\n this.session.agent.transport = transport;\n },\n onHttpIdleTimeoutChange: (timeoutMs) => {\n this.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n configureHttpDispatcher(timeoutMs);\n },\n onBashInterceptorEnabledChange: (enabled) => {\n this.settingsManager.setBashInterceptorEnabled(enabled);\n },\n onThinkingLevelChange: (level) => {\n this.session.setThinkingLevel(level);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n },\n onThemeChange: (themeSetting) => {\n this.settingsManager.setTheme(themeSetting);\n void this.themeController.applyFromSettings();\n },\n onThemePreview: (themeName) => this.themeController.preview(themeName),\n onHideThinkingBlockChange: (hidden) => {\n this.hideThinkingBlock = hidden;\n this.settingsManager.setHideThinkingBlock(hidden);\n for (const child of this.chatContainer.children) {\n if (child instanceof AssistantMessageComponent) {\n child.setHideThinkingBlock(hidden);\n }\n }\n this.chatContainer.clear();\n this.rebuildChatFromMessages();\n },\n onCollapseChangelogChange: (collapsed) => {\n this.settingsManager.setCollapseChangelog(collapsed);\n },\n onEnableInstallTelemetryChange: (enabled) => {\n this.settingsManager.setEnableInstallTelemetry(enabled);\n },\n onQuietStartupChange: (enabled) => {\n this.settingsManager.setQuietStartup(enabled);\n },\n onDefaultProjectTrustChange: (defaultProjectTrust) => {\n this.settingsManager.setDefaultProjectTrust(defaultProjectTrust);\n },\n onDoubleEscapeActionChange: (action) => {\n this.settingsManager.setDoubleEscapeAction(action);\n },\n onTreeFilterModeChange: (mode) => {\n this.settingsManager.setTreeFilterMode(mode);\n },\n onShowHardwareCursorChange: (enabled) => {\n this.settingsManager.setShowHardwareCursor(enabled);\n this.ui.setShowHardwareCursor(enabled);\n },\n onEditorPaddingXChange: (padding) => {\n this.settingsManager.setEditorPaddingX(padding);\n this.defaultEditor.setPaddingX(padding);\n if (\n this.editor !== this.defaultEditor &&\n this.editor.setPaddingX !== undefined\n ) {\n this.editor.setPaddingX(padding);\n }\n },\n onAutocompleteMaxVisibleChange: (maxVisible) => {\n this.settingsManager.setAutocompleteMaxVisible(maxVisible);\n this.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n if (\n this.editor !== this.defaultEditor &&\n this.editor.setAutocompleteMaxVisible !== undefined\n ) {\n this.editor.setAutocompleteMaxVisible(maxVisible);\n }\n },\n onClearOnShrinkChange: (enabled) => {\n this.settingsManager.setClearOnShrink(enabled);\n this.ui.setClearOnShrink(enabled);\n },\n onShowTerminalProgressChange: (enabled) => {\n this.settingsManager.setShowTerminalProgress(enabled);\n },\n onWarningsChange: (warnings) => {\n this.settingsManager.setWarnings(warnings);\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector.getSettingsList() };\n });\n };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-session-routing.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-session-routing.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type ExtensionCommandContext, Loader, Spacer, APP_NAME, MissingSessionCwdError, SessionManager, keyText, SessionSelectorComponent, TreeSelectorComponent, TrustSelectorComponent, hasProjectConfigDir, ProjectTrustStore, theme } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.handleCloneCommand = async function(this: InteractiveModeBase): Promise<void> {\n const leafId = this.sessionManager.getLeafId();\n if (!leafId) {\n this.showStatus(\"Nothing to clone yet\");\n return;\n }\n\n try {\n const result = await this.runtimeHost.fork(leafId, { position: \"at\" });\n if (result.cancelled) {\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(\"\");\n this.showStatus(\"Cloned to new session\");\n } catch (error: unknown) {\n this.showError(error instanceof Error ? error.message : String(error));\n }\n };\n\nInteractiveModeBase.prototype.maybeSaveImplicitProjectTrustAfterReload = function(this: InteractiveModeBase): boolean {\n const cwd = this.sessionManager.getCwd();\n if (this.autoTrustOnReloadCwd !== cwd) {\n return false;\n }\n if (!this.settingsManager.isProjectTrusted() || !hasProjectConfigDir(cwd)) {\n return false;\n }\n\n const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);\n try {\n if (trustStore.get(cwd) !== null) {\n this.autoTrustOnReloadCwd = undefined;\n return false;\n }\n trustStore.set(cwd, true);\n this.autoTrustOnReloadCwd = undefined;\n return true;\n } catch (error) {\n this.showWarning(\n `Could not save project trust after reload: ${error instanceof Error ? error.message : String(error)}`,\n );\n return false;\n }\n };\n\nInteractiveModeBase.prototype.showTrustSelector = function(this: InteractiveModeBase): void {\n const cwd = this.sessionManager.getCwd();\n const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);\n const savedDecision = trustStore.getEntry(cwd);\n this.showSelector((done) => {\n const selector = new TrustSelectorComponent({\n cwd,\n savedDecision,\n projectTrusted: this.settingsManager.isProjectTrusted(),\n onSelect: (selection) => {\n trustStore.setMany(selection.updates);\n done();\n this.showStatus(\n `Saved trust decision: ${selection.trusted ? \"trusted\" : \"untrusted\"}. Restart ${APP_NAME} for this to take effect.`,\n );\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n });\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showTreeSelector = function(this: InteractiveModeBase, initialSelectedId?: string): void {\n const tree = this.sessionManager.getTree();\n const realLeafId = this.sessionManager.getLeafId();\n const initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n if (tree.length === 0) {\n this.showStatus(\"No entries in session\");\n return;\n }\n\n this.showSelector((done) => {\n const selector = new TreeSelectorComponent(\n tree,\n realLeafId,\n this.ui.terminal.rows,\n async (entryId) => {\n // Selecting the current leaf is a no-op (already there)\n if (entryId === realLeafId) {\n done();\n this.showStatus(\"Already at this point\");\n return;\n }\n\n // Ask about summarization\n done(); // Close selector first\n\n // Loop until user makes a complete choice or cancels to tree\n let wantsSummary = false;\n let customInstructions: string | undefined;\n\n // Check if we should skip the prompt (user preference to always default to no summary)\n if (!this.settingsManager.getBranchSummarySkipPrompt()) {\n while (true) {\n const summaryChoice = await this.showExtensionSelector(\n \"Summarize branch?\",\n [\"No summary\", \"Summarize\", \"Summarize with custom prompt\"],\n );\n\n if (summaryChoice === undefined) {\n // User pressed escape - re-show tree selector with same selection\n this.showTreeSelector(entryId);\n return;\n }\n\n wantsSummary = summaryChoice !== \"No summary\";\n\n if (summaryChoice === \"Summarize with custom prompt\") {\n customInstructions = await this.showExtensionEditor(\n \"Custom summarization instructions\",\n );\n if (customInstructions === undefined) {\n // User cancelled - loop back to summary selector\n continue;\n }\n }\n\n // User made a complete choice\n break;\n }\n }\n\n // Set up escape handler and loader if summarizing\n let summaryLoader: Loader | undefined;\n const originalOnEscape = this.defaultEditor.onEscape;\n\n if (wantsSummary) {\n this.defaultEditor.onEscape = () => {\n this.session.abortBranchSummary();\n };\n this.chatContainer.addChild(new Spacer(1));\n summaryLoader = new Loader(\n this.ui,\n (spinner) => theme.fg(\"accent\", spinner),\n (text) => theme.fg(\"muted\", text),\n `Summarizing branch... (${keyText(\"app.interrupt\")} Cancel)`,\n );\n this.statusContainer.addChild(summaryLoader);\n this.ui.requestRender();\n }\n\n try {\n const result = await this.session.navigateTree(entryId, {\n summarize: wantsSummary,\n customInstructions,\n });\n\n if (result.aborted) {\n // Summarization aborted - re-show tree selector with same selection\n this.showStatus(\"Branch summarization cancelled\");\n this.showTreeSelector(entryId);\n return;\n }\n if (result.cancelled) {\n this.showStatus(\"Navigation cancelled\");\n return;\n }\n\n // Update UI\n this.chatContainer.clear();\n this.renderInitialMessages();\n if (result.editorText && !this.editor.getText().trim()) {\n this.editor.setText(result.editorText);\n }\n this.showStatus(\"Navigated to selected point\");\n void this.flushCompactionQueue({ willRetry: false });\n } catch (error) {\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n } finally {\n if (summaryLoader) {\n summaryLoader.stop();\n this.statusContainer.clear();\n }\n this.defaultEditor.onEscape = originalOnEscape;\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n (entryId, label) => {\n this.sessionManager.appendLabelChange(entryId, label);\n this.ui.requestRender();\n },\n initialSelectedId,\n initialFilterMode,\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showSessionSelector = function(this: InteractiveModeBase): void {\n this.showSelector((done) => {\n const selector = new SessionSelectorComponent(\n (onProgress) =>\n SessionManager.list(\n this.sessionManager.getCwd(),\n this.sessionManager.getSessionDir(),\n onProgress,\n ),\n (onProgress) =>\n this.sessionManager.usesDefaultSessionDir()\n ? SessionManager.listAll(onProgress)\n : SessionManager.listAll(\n this.sessionManager.getSessionDir(),\n onProgress,\n ),\n async (sessionPath) => {\n done();\n await this.handleResumeSession(sessionPath);\n },\n () => {\n done();\n this.ui.requestRender();\n },\n () => {\n void this.shutdown();\n },\n () => this.ui.requestRender(),\n {\n renameSession: async (\n sessionFilePath: string,\n nextName: string | undefined,\n ) => {\n const next = (nextName ?? \"\").trim();\n if (!next) return;\n const mgr = SessionManager.open(sessionFilePath);\n mgr.appendSessionInfo(next);\n },\n showRenameHint: true,\n keybindings: this.keybindings,\n },\n\n this.sessionManager.getSessionFile(),\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.handleResumeSession = async function(this: InteractiveModeBase, sessionPath: string, options?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1]): Promise<{ cancelled: boolean }> {\n if (this.loadingAnimation) {\n this.loadingAnimation.stop();\n this.loadingAnimation = undefined;\n }\n this.statusContainer.clear();\n try {\n const result = await this.runtimeHost.switchSession(sessionPath, {\n withSession: options?.withSession,\n projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),\n });\n if (result.cancelled) {\n return result;\n }\n this.renderCurrentSessionState();\n this.showStatus(\"Resumed session\");\n return result;\n } catch (error: unknown) {\n if (error instanceof MissingSessionCwdError) {\n const selectedCwd = await this.promptForMissingSessionCwd(error);\n if (!selectedCwd) {\n this.showStatus(\"Resume cancelled\");\n return { cancelled: true };\n }\n const result = await this.runtimeHost.switchSession(sessionPath, {\n cwdOverride: selectedCwd,\n withSession: options?.withSession,\n projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),\n });\n if (result.cancelled) {\n return result;\n }\n this.renderCurrentSessionState();\n this.showStatus(\"Resumed session in current cwd\");\n return result;\n }\n return this.handleFatalRuntimeError(\"Failed to resume session\", error);\n }\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-session-routing.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-session-routing.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type ExtensionCommandContext, Loader, Spacer, APP_NAME, MissingSessionCwdError, SessionManager, keyText, SessionSelectorComponent, TreeSelectorComponent, TrustSelectorComponent, hasProjectConfigDir, ProjectTrustStore, theme } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.handleCloneCommand = async function(this: InteractiveModeBase): Promise<void> {\n const leafId = this.sessionManager.getLeafId();\n if (!leafId) {\n this.showStatus(\"Nothing to clone yet\");\n return;\n }\n\n try {\n const result = await this.runtimeHost.fork(leafId, { position: \"at\" });\n if (result.cancelled) {\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(\"\");\n this.showStatus(\"Cloned to new session\");\n } catch (error: unknown) {\n this.showError(error instanceof Error ? error.message : String(error));\n }\n };\n\nInteractiveModeBase.prototype.maybeSaveImplicitProjectTrustAfterReload = function(this: InteractiveModeBase): boolean {\n const cwd = this.sessionManager.getCwd();\n if (this.autoTrustOnReloadCwd !== cwd) {\n return false;\n }\n if (!this.settingsManager.isProjectTrusted() || !hasProjectConfigDir(cwd)) {\n return false;\n }\n\n const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);\n try {\n if (trustStore.get(cwd) !== null) {\n this.autoTrustOnReloadCwd = undefined;\n return false;\n }\n trustStore.set(cwd, true);\n this.autoTrustOnReloadCwd = undefined;\n return true;\n } catch (error) {\n this.showWarning(\n `Could not save project trust after reload: ${error instanceof Error ? error.message : String(error)}`,\n );\n return false;\n }\n };\n\nInteractiveModeBase.prototype.showTrustSelector = function(this: InteractiveModeBase): void {\n const cwd = this.sessionManager.getCwd();\n const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);\n const savedDecision = trustStore.getEntry(cwd);\n this.showSelector((done) => {\n const selector = new TrustSelectorComponent({\n cwd,\n savedDecision,\n projectTrusted: this.settingsManager.isProjectTrusted(),\n onSelect: (selection) => {\n trustStore.setMany(selection.updates);\n done();\n this.showStatus(\n `Saved trust decision: ${selection.trusted ? \"trusted\" : \"untrusted\"}. Restart ${APP_NAME} for this to take effect.`,\n );\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n });\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showTreeSelector = function(this: InteractiveModeBase, initialSelectedId?: string): void {\n const tree = this.sessionManager.getTree();\n const realLeafId = this.sessionManager.getLeafId();\n const initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n if (tree.length === 0) {\n this.showStatus(\"No entries in session\");\n return;\n }\n\n this.showSelector((done) => {\n const selector = new TreeSelectorComponent(\n tree,\n realLeafId,\n this.ui.terminal.rows,\n async (entryId) => {\n // Selecting the current leaf is a no-op (already there)\n if (entryId === realLeafId) {\n done();\n this.showStatus(\"Already at this point\");\n return;\n }\n\n // Ask about summarization\n done(); // Close selector first\n\n // Loop until user makes a complete choice or cancels to tree\n let wantsSummary = false;\n let customInstructions: string | undefined;\n\n // Check if we should skip the prompt (user preference to always default to no summary)\n if (!this.settingsManager.getBranchSummarySkipPrompt()) {\n while (true) {\n const summaryChoice = await this.showExtensionSelector(\n \"Summarize branch?\",\n [\"No summary\", \"Summarize\", \"Summarize with custom prompt\"],\n );\n\n if (summaryChoice === undefined) {\n // User pressed escape - re-show tree selector with same selection\n this.showTreeSelector(entryId);\n return;\n }\n\n wantsSummary = summaryChoice !== \"No summary\";\n\n if (summaryChoice === \"Summarize with custom prompt\") {\n customInstructions = await this.showExtensionEditor(\n \"Custom summarization instructions\",\n );\n if (customInstructions === undefined) {\n // User cancelled - loop back to summary selector\n continue;\n }\n }\n\n // User made a complete choice\n break;\n }\n }\n\n // Set up escape handler and loader if summarizing\n let summaryLoader: Loader | undefined;\n const originalOnEscape = this.defaultEditor.onEscape;\n\n if (wantsSummary) {\n this.defaultEditor.onEscape = () => {\n this.session.abortBranchSummary();\n };\n this.chatContainer.addChild(new Spacer(1));\n summaryLoader = new Loader(\n this.ui,\n (spinner) => theme.fg(\"accent\", spinner),\n (text) => theme.fg(\"muted\", text),\n `Summarizing branch... (${keyText(\"app.interrupt\")} Cancel)`,\n );\n this.statusContainer.addChild(summaryLoader);\n this.ui.requestRender();\n }\n\n try {\n const result = await this.session.navigateTree(entryId, {\n summarize: wantsSummary,\n customInstructions,\n });\n\n if (result.aborted) {\n // Summarization aborted - re-show tree selector with same selection\n this.showStatus(\"Branch summarization cancelled\");\n this.showTreeSelector(entryId);\n return;\n }\n if (result.cancelled) {\n this.showStatus(\"Navigation cancelled\");\n return;\n }\n\n // Update UI\n this.chatContainer.clear();\n this.renderInitialMessages();\n if (result.editorText && !this.editor.getText().trim()) {\n this.editor.setText(result.editorText);\n }\n this.showStatus(\"Navigated to selected point\");\n void this.flushCompactionQueue({ willRetry: false });\n } catch (error) {\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n } finally {\n if (summaryLoader) {\n summaryLoader.stop();\n this.statusContainer.clear();\n }\n this.defaultEditor.onEscape = originalOnEscape;\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n (entryId, label) => {\n this.sessionManager.appendLabelChange(entryId, label);\n this.ui.requestRender();\n },\n initialSelectedId,\n initialFilterMode,\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showSessionSelector = function(this: InteractiveModeBase): void {\n this.showSelector((done) => {\n const selector = new SessionSelectorComponent(\n (onProgress) =>\n SessionManager.list(\n this.sessionManager.getCwd(),\n this.sessionManager.getSessionDir(),\n onProgress,\n ),\n (onProgress) =>\n this.sessionManager.usesDefaultSessionDir()\n ? SessionManager.listAll(onProgress)\n : SessionManager.listAll(\n this.sessionManager.getSessionDir(),\n onProgress,\n ),\n async (sessionPath) => {\n done();\n await this.handleResumeSession(sessionPath);\n },\n () => {\n done();\n this.ui.requestRender();\n },\n () => {\n void this.shutdown();\n },\n () => this.ui.requestRender(),\n {\n renameSession: async (\n sessionFilePath: string,\n nextName: string | undefined,\n ) => {\n const next = (nextName ?? \"\").trim();\n if (!next) return;\n const mgr = SessionManager.open(sessionFilePath);\n mgr.appendSessionInfo(next);\n },\n showRenameHint: true,\n keybindings: this.keybindings,\n },\n\n this.sessionManager.getSessionFile(),\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.handleResumeSession = async function(this: InteractiveModeBase, sessionPath: string, options?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1]): Promise<{ cancelled: boolean }> {\n if (this.loadingAnimation) {\n this.loadingAnimation.stop();\n this.loadingAnimation = undefined;\n }\n this.statusContainer.clear();\n try {\n const result = await this.runtimeHost.switchSession(sessionPath, {\n withSession: options?.withSession,\n projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),\n });\n if (result.cancelled) {\n return result;\n }\n this.renderCurrentSessionState();\n if (this.firstRunOnboardingActive) {\n this.clearFirstRunOnboardingUi();\n }\n this.showStatus(\"Resumed session\");\n return result;\n } catch (error: unknown) {\n if (error instanceof MissingSessionCwdError) {\n const selectedCwd = await this.promptForMissingSessionCwd(error);\n if (!selectedCwd) {\n this.showStatus(\"Resume cancelled\");\n return { cancelled: true };\n }\n const result = await this.runtimeHost.switchSession(sessionPath, {\n cwdOverride: selectedCwd,\n withSession: options?.withSession,\n projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),\n });\n if (result.cancelled) {\n return result;\n }\n this.renderCurrentSessionState();\n if (this.firstRunOnboardingActive) {\n this.clearFirstRunOnboardingUi();\n }\n this.showStatus(\"Resumed session in current cwd\");\n return result;\n }\n return this.handleFatalRuntimeError(\"Failed to resume session\", error);\n }\n };\n"]}
|
|
@@ -204,6 +204,9 @@ InteractiveModeBase.prototype.handleResumeSession = async function (sessionPath,
|
|
|
204
204
|
return result;
|
|
205
205
|
}
|
|
206
206
|
this.renderCurrentSessionState();
|
|
207
|
+
if (this.firstRunOnboardingActive) {
|
|
208
|
+
this.clearFirstRunOnboardingUi();
|
|
209
|
+
}
|
|
207
210
|
this.showStatus("Resumed session");
|
|
208
211
|
return result;
|
|
209
212
|
}
|
|
@@ -223,6 +226,9 @@ InteractiveModeBase.prototype.handleResumeSession = async function (sessionPath,
|
|
|
223
226
|
return result;
|
|
224
227
|
}
|
|
225
228
|
this.renderCurrentSessionState();
|
|
229
|
+
if (this.firstRunOnboardingActive) {
|
|
230
|
+
this.clearFirstRunOnboardingUi();
|
|
231
|
+
}
|
|
226
232
|
this.showStatus("Resumed session in current cwd");
|
|
227
233
|
return result;
|
|
228
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-session-routing.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-session-routing.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type ExtensionCommandContext, Loader, Spacer, APP_NAME, MissingSessionCwdError, SessionManager, keyText, SessionSelectorComponent, TreeSelectorComponent, TrustSelectorComponent, hasProjectConfigDir, ProjectTrustStore, theme } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.handleCloneCommand = async function(this: InteractiveModeBase): Promise<void> {\n const leafId = this.sessionManager.getLeafId();\n if (!leafId) {\n this.showStatus(\"Nothing to clone yet\");\n return;\n }\n\n try {\n const result = await this.runtimeHost.fork(leafId, { position: \"at\" });\n if (result.cancelled) {\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(\"\");\n this.showStatus(\"Cloned to new session\");\n } catch (error: unknown) {\n this.showError(error instanceof Error ? error.message : String(error));\n }\n };\n\nInteractiveModeBase.prototype.maybeSaveImplicitProjectTrustAfterReload = function(this: InteractiveModeBase): boolean {\n const cwd = this.sessionManager.getCwd();\n if (this.autoTrustOnReloadCwd !== cwd) {\n return false;\n }\n if (!this.settingsManager.isProjectTrusted() || !hasProjectConfigDir(cwd)) {\n return false;\n }\n\n const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);\n try {\n if (trustStore.get(cwd) !== null) {\n this.autoTrustOnReloadCwd = undefined;\n return false;\n }\n trustStore.set(cwd, true);\n this.autoTrustOnReloadCwd = undefined;\n return true;\n } catch (error) {\n this.showWarning(\n `Could not save project trust after reload: ${error instanceof Error ? error.message : String(error)}`,\n );\n return false;\n }\n };\n\nInteractiveModeBase.prototype.showTrustSelector = function(this: InteractiveModeBase): void {\n const cwd = this.sessionManager.getCwd();\n const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);\n const savedDecision = trustStore.getEntry(cwd);\n this.showSelector((done) => {\n const selector = new TrustSelectorComponent({\n cwd,\n savedDecision,\n projectTrusted: this.settingsManager.isProjectTrusted(),\n onSelect: (selection) => {\n trustStore.setMany(selection.updates);\n done();\n this.showStatus(\n `Saved trust decision: ${selection.trusted ? \"trusted\" : \"untrusted\"}. Restart ${APP_NAME} for this to take effect.`,\n );\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n });\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showTreeSelector = function(this: InteractiveModeBase, initialSelectedId?: string): void {\n const tree = this.sessionManager.getTree();\n const realLeafId = this.sessionManager.getLeafId();\n const initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n if (tree.length === 0) {\n this.showStatus(\"No entries in session\");\n return;\n }\n\n this.showSelector((done) => {\n const selector = new TreeSelectorComponent(\n tree,\n realLeafId,\n this.ui.terminal.rows,\n async (entryId) => {\n // Selecting the current leaf is a no-op (already there)\n if (entryId === realLeafId) {\n done();\n this.showStatus(\"Already at this point\");\n return;\n }\n\n // Ask about summarization\n done(); // Close selector first\n\n // Loop until user makes a complete choice or cancels to tree\n let wantsSummary = false;\n let customInstructions: string | undefined;\n\n // Check if we should skip the prompt (user preference to always default to no summary)\n if (!this.settingsManager.getBranchSummarySkipPrompt()) {\n while (true) {\n const summaryChoice = await this.showExtensionSelector(\n \"Summarize branch?\",\n [\"No summary\", \"Summarize\", \"Summarize with custom prompt\"],\n );\n\n if (summaryChoice === undefined) {\n // User pressed escape - re-show tree selector with same selection\n this.showTreeSelector(entryId);\n return;\n }\n\n wantsSummary = summaryChoice !== \"No summary\";\n\n if (summaryChoice === \"Summarize with custom prompt\") {\n customInstructions = await this.showExtensionEditor(\n \"Custom summarization instructions\",\n );\n if (customInstructions === undefined) {\n // User cancelled - loop back to summary selector\n continue;\n }\n }\n\n // User made a complete choice\n break;\n }\n }\n\n // Set up escape handler and loader if summarizing\n let summaryLoader: Loader | undefined;\n const originalOnEscape = this.defaultEditor.onEscape;\n\n if (wantsSummary) {\n this.defaultEditor.onEscape = () => {\n this.session.abortBranchSummary();\n };\n this.chatContainer.addChild(new Spacer(1));\n summaryLoader = new Loader(\n this.ui,\n (spinner) => theme.fg(\"accent\", spinner),\n (text) => theme.fg(\"muted\", text),\n `Summarizing branch... (${keyText(\"app.interrupt\")} Cancel)`,\n );\n this.statusContainer.addChild(summaryLoader);\n this.ui.requestRender();\n }\n\n try {\n const result = await this.session.navigateTree(entryId, {\n summarize: wantsSummary,\n customInstructions,\n });\n\n if (result.aborted) {\n // Summarization aborted - re-show tree selector with same selection\n this.showStatus(\"Branch summarization cancelled\");\n this.showTreeSelector(entryId);\n return;\n }\n if (result.cancelled) {\n this.showStatus(\"Navigation cancelled\");\n return;\n }\n\n // Update UI\n this.chatContainer.clear();\n this.renderInitialMessages();\n if (result.editorText && !this.editor.getText().trim()) {\n this.editor.setText(result.editorText);\n }\n this.showStatus(\"Navigated to selected point\");\n void this.flushCompactionQueue({ willRetry: false });\n } catch (error) {\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n } finally {\n if (summaryLoader) {\n summaryLoader.stop();\n this.statusContainer.clear();\n }\n this.defaultEditor.onEscape = originalOnEscape;\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n (entryId, label) => {\n this.sessionManager.appendLabelChange(entryId, label);\n this.ui.requestRender();\n },\n initialSelectedId,\n initialFilterMode,\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showSessionSelector = function(this: InteractiveModeBase): void {\n this.showSelector((done) => {\n const selector = new SessionSelectorComponent(\n (onProgress) =>\n SessionManager.list(\n this.sessionManager.getCwd(),\n this.sessionManager.getSessionDir(),\n onProgress,\n ),\n (onProgress) =>\n this.sessionManager.usesDefaultSessionDir()\n ? SessionManager.listAll(onProgress)\n : SessionManager.listAll(\n this.sessionManager.getSessionDir(),\n onProgress,\n ),\n async (sessionPath) => {\n done();\n await this.handleResumeSession(sessionPath);\n },\n () => {\n done();\n this.ui.requestRender();\n },\n () => {\n void this.shutdown();\n },\n () => this.ui.requestRender(),\n {\n renameSession: async (\n sessionFilePath: string,\n nextName: string | undefined,\n ) => {\n const next = (nextName ?? \"\").trim();\n if (!next) return;\n const mgr = SessionManager.open(sessionFilePath);\n mgr.appendSessionInfo(next);\n },\n showRenameHint: true,\n keybindings: this.keybindings,\n },\n\n this.sessionManager.getSessionFile(),\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.handleResumeSession = async function(this: InteractiveModeBase, sessionPath: string, options?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1]): Promise<{ cancelled: boolean }> {\n if (this.loadingAnimation) {\n this.loadingAnimation.stop();\n this.loadingAnimation = undefined;\n }\n this.statusContainer.clear();\n try {\n const result = await this.runtimeHost.switchSession(sessionPath, {\n withSession: options?.withSession,\n projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),\n });\n if (result.cancelled) {\n return result;\n }\n this.renderCurrentSessionState();\n this.showStatus(\"Resumed session\");\n return result;\n } catch (error: unknown) {\n if (error instanceof MissingSessionCwdError) {\n const selectedCwd = await this.promptForMissingSessionCwd(error);\n if (!selectedCwd) {\n this.showStatus(\"Resume cancelled\");\n return { cancelled: true };\n }\n const result = await this.runtimeHost.switchSession(sessionPath, {\n cwdOverride: selectedCwd,\n withSession: options?.withSession,\n projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),\n });\n if (result.cancelled) {\n return result;\n }\n this.renderCurrentSessionState();\n this.showStatus(\"Resumed session in current cwd\");\n return result;\n }\n return this.handleFatalRuntimeError(\"Failed to resume session\", error);\n }\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-session-routing.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-session-routing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAgC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,cAAc,EAAE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAE7Q,mBAAmB,CAAC,SAAS,CAAC,kBAAkB,GAAG,KAAK;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,wCAAwC,GAAG;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,oBAAoB,KAAK,GAAG,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CACd,8CAA8C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACvG,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,GAAG;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7E,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC;YAC1C,GAAG;YACH,aAAa;YACb,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;YACvD,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE;gBACtB,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,UAAU,CACb,yBAAyB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,aAAa,QAAQ,2BAA2B,CACrH,CAAC;YACJ,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YAC1B,CAAC;SACF,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAoC,iBAA0B;IAC3G,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;IACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;IAEnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CACxC,IAAI,EACJ,UAAU,EACV,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EACrB,KAAK,EAAE,OAAO,EAAE,EAAE;YAChB,wDAAwD;YACxD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC3B,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;gBACzC,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,IAAI,EAAE,CAAC,CAAC,uBAAuB;YAE/B,6DAA6D;YAC7D,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,kBAAsC,CAAC;YAE3C,uFAAuF;YACvF,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE,EAAE,CAAC;gBACvD,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,CACpD,mBAAmB,EACnB,CAAC,YAAY,EAAE,WAAW,EAAE,8BAA8B,CAAC,CAC5D,CAAC;oBAEF,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;wBAChC,kEAAkE;wBAClE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;wBAC/B,OAAO;oBACT,CAAC;oBAED,YAAY,GAAG,aAAa,KAAK,YAAY,CAAC;oBAE9C,IAAI,aAAa,KAAK,8BAA8B,EAAE,CAAC;wBACrD,kBAAkB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CACjD,mCAAmC,CACpC,CAAC;wBACF,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;4BACrC,iDAAiD;4BACjD,SAAS;wBACX,CAAC;oBACH,CAAC;oBAED,8BAA8B;oBAC9B,MAAM;gBACR,CAAC;YACH,CAAC;YAED,kDAAkD;YAClD,IAAI,aAAiC,CAAC;YACtC,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YAErD,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,GAAG,EAAE;oBACjC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBACpC,CAAC,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,aAAa,GAAG,IAAI,MAAM,CACxB,IAAI,CAAC,EAAE,EACP,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EACxC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EACjC,0BAA0B,OAAO,CAAC,eAAe,CAAC,UAAU,CAC7D,CAAC;gBACF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC7C,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE;oBACtD,SAAS,EAAE,YAAY;oBACvB,kBAAkB;iBACnB,CAAC,CAAC;gBAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,oEAAoE;oBACpE,IAAI,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;oBAClD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;oBACxC,OAAO;gBACT,CAAC;gBAED,YAAY;gBACZ,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;oBACvD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACzC,CAAC;gBACD,IAAI,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;gBAC/C,KAAK,IAAI,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,aAAa,EAAE,CAAC;oBAClB,aAAa,CAAC,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC/B,CAAC;gBACD,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YACjD,CAAC;QACH,CAAC,EACD,GAAG,EAAE;YACH,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC,EACD,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YACjB,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC,EACD,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,mBAAmB,GAAG;IAChD,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAC3C,CAAC,UAAU,EAAE,EAAE,CACb,cAAc,CAAC,IAAI,CACjB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAC5B,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EACnC,UAAU,CACX,EACH,CAAC,UAAU,EAAE,EAAE,CACb,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE;YACzC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC;YACpC,CAAC,CAAC,cAAc,CAAC,OAAO,CACpB,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EACnC,UAAU,CACX,EACP,KAAK,EAAE,WAAW,EAAE,EAAE;YACpB,IAAI,EAAE,CAAC;YACP,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,EACD,GAAG,EAAE;YACH,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC,EACD,GAAG,EAAE;YACH,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvB,CAAC,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAC7B;YACE,aAAa,EAAE,KAAK,EAClB,eAAuB,EACvB,QAA4B,EAC5B,EAAE;gBACF,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACjD,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,EAED,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CACrC,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,mBAAmB,GAAG,KAAK,WAAqC,WAAmB,EAAE,OAAiE;IAChL,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE;YAC/D,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,0BAA0B,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;SACzE,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;gBACpC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE;gBAC/D,WAAW,EAAE,WAAW;gBACxB,WAAW,EAAE,OAAO,EAAE,WAAW;gBACjC,0BAA0B,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;aACzE,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAClC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type ExtensionCommandContext, Loader, Spacer, APP_NAME, MissingSessionCwdError, SessionManager, keyText, SessionSelectorComponent, TreeSelectorComponent, TrustSelectorComponent, hasProjectConfigDir, ProjectTrustStore, theme } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.handleCloneCommand = async function(this: InteractiveModeBase): Promise<void> {\n const leafId = this.sessionManager.getLeafId();\n if (!leafId) {\n this.showStatus(\"Nothing to clone yet\");\n return;\n }\n\n try {\n const result = await this.runtimeHost.fork(leafId, { position: \"at\" });\n if (result.cancelled) {\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(\"\");\n this.showStatus(\"Cloned to new session\");\n } catch (error: unknown) {\n this.showError(error instanceof Error ? error.message : String(error));\n }\n };\n\nInteractiveModeBase.prototype.maybeSaveImplicitProjectTrustAfterReload = function(this: InteractiveModeBase): boolean {\n const cwd = this.sessionManager.getCwd();\n if (this.autoTrustOnReloadCwd !== cwd) {\n return false;\n }\n if (!this.settingsManager.isProjectTrusted() || !hasProjectConfigDir(cwd)) {\n return false;\n }\n\n const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);\n try {\n if (trustStore.get(cwd) !== null) {\n this.autoTrustOnReloadCwd = undefined;\n return false;\n }\n trustStore.set(cwd, true);\n this.autoTrustOnReloadCwd = undefined;\n return true;\n } catch (error) {\n this.showWarning(\n `Could not save project trust after reload: ${error instanceof Error ? error.message : String(error)}`,\n );\n return false;\n }\n };\n\nInteractiveModeBase.prototype.showTrustSelector = function(this: InteractiveModeBase): void {\n const cwd = this.sessionManager.getCwd();\n const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);\n const savedDecision = trustStore.getEntry(cwd);\n this.showSelector((done) => {\n const selector = new TrustSelectorComponent({\n cwd,\n savedDecision,\n projectTrusted: this.settingsManager.isProjectTrusted(),\n onSelect: (selection) => {\n trustStore.setMany(selection.updates);\n done();\n this.showStatus(\n `Saved trust decision: ${selection.trusted ? \"trusted\" : \"untrusted\"}. Restart ${APP_NAME} for this to take effect.`,\n );\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n });\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showTreeSelector = function(this: InteractiveModeBase, initialSelectedId?: string): void {\n const tree = this.sessionManager.getTree();\n const realLeafId = this.sessionManager.getLeafId();\n const initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n if (tree.length === 0) {\n this.showStatus(\"No entries in session\");\n return;\n }\n\n this.showSelector((done) => {\n const selector = new TreeSelectorComponent(\n tree,\n realLeafId,\n this.ui.terminal.rows,\n async (entryId) => {\n // Selecting the current leaf is a no-op (already there)\n if (entryId === realLeafId) {\n done();\n this.showStatus(\"Already at this point\");\n return;\n }\n\n // Ask about summarization\n done(); // Close selector first\n\n // Loop until user makes a complete choice or cancels to tree\n let wantsSummary = false;\n let customInstructions: string | undefined;\n\n // Check if we should skip the prompt (user preference to always default to no summary)\n if (!this.settingsManager.getBranchSummarySkipPrompt()) {\n while (true) {\n const summaryChoice = await this.showExtensionSelector(\n \"Summarize branch?\",\n [\"No summary\", \"Summarize\", \"Summarize with custom prompt\"],\n );\n\n if (summaryChoice === undefined) {\n // User pressed escape - re-show tree selector with same selection\n this.showTreeSelector(entryId);\n return;\n }\n\n wantsSummary = summaryChoice !== \"No summary\";\n\n if (summaryChoice === \"Summarize with custom prompt\") {\n customInstructions = await this.showExtensionEditor(\n \"Custom summarization instructions\",\n );\n if (customInstructions === undefined) {\n // User cancelled - loop back to summary selector\n continue;\n }\n }\n\n // User made a complete choice\n break;\n }\n }\n\n // Set up escape handler and loader if summarizing\n let summaryLoader: Loader | undefined;\n const originalOnEscape = this.defaultEditor.onEscape;\n\n if (wantsSummary) {\n this.defaultEditor.onEscape = () => {\n this.session.abortBranchSummary();\n };\n this.chatContainer.addChild(new Spacer(1));\n summaryLoader = new Loader(\n this.ui,\n (spinner) => theme.fg(\"accent\", spinner),\n (text) => theme.fg(\"muted\", text),\n `Summarizing branch... (${keyText(\"app.interrupt\")} Cancel)`,\n );\n this.statusContainer.addChild(summaryLoader);\n this.ui.requestRender();\n }\n\n try {\n const result = await this.session.navigateTree(entryId, {\n summarize: wantsSummary,\n customInstructions,\n });\n\n if (result.aborted) {\n // Summarization aborted - re-show tree selector with same selection\n this.showStatus(\"Branch summarization cancelled\");\n this.showTreeSelector(entryId);\n return;\n }\n if (result.cancelled) {\n this.showStatus(\"Navigation cancelled\");\n return;\n }\n\n // Update UI\n this.chatContainer.clear();\n this.renderInitialMessages();\n if (result.editorText && !this.editor.getText().trim()) {\n this.editor.setText(result.editorText);\n }\n this.showStatus(\"Navigated to selected point\");\n void this.flushCompactionQueue({ willRetry: false });\n } catch (error) {\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n } finally {\n if (summaryLoader) {\n summaryLoader.stop();\n this.statusContainer.clear();\n }\n this.defaultEditor.onEscape = originalOnEscape;\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n (entryId, label) => {\n this.sessionManager.appendLabelChange(entryId, label);\n this.ui.requestRender();\n },\n initialSelectedId,\n initialFilterMode,\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showSessionSelector = function(this: InteractiveModeBase): void {\n this.showSelector((done) => {\n const selector = new SessionSelectorComponent(\n (onProgress) =>\n SessionManager.list(\n this.sessionManager.getCwd(),\n this.sessionManager.getSessionDir(),\n onProgress,\n ),\n (onProgress) =>\n this.sessionManager.usesDefaultSessionDir()\n ? SessionManager.listAll(onProgress)\n : SessionManager.listAll(\n this.sessionManager.getSessionDir(),\n onProgress,\n ),\n async (sessionPath) => {\n done();\n await this.handleResumeSession(sessionPath);\n },\n () => {\n done();\n this.ui.requestRender();\n },\n () => {\n void this.shutdown();\n },\n () => this.ui.requestRender(),\n {\n renameSession: async (\n sessionFilePath: string,\n nextName: string | undefined,\n ) => {\n const next = (nextName ?? \"\").trim();\n if (!next) return;\n const mgr = SessionManager.open(sessionFilePath);\n mgr.appendSessionInfo(next);\n },\n showRenameHint: true,\n keybindings: this.keybindings,\n },\n\n this.sessionManager.getSessionFile(),\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.handleResumeSession = async function(this: InteractiveModeBase, sessionPath: string, options?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1]): Promise<{ cancelled: boolean }> {\n if (this.loadingAnimation) {\n this.loadingAnimation.stop();\n this.loadingAnimation = undefined;\n }\n this.statusContainer.clear();\n try {\n const result = await this.runtimeHost.switchSession(sessionPath, {\n withSession: options?.withSession,\n projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),\n });\n if (result.cancelled) {\n return result;\n }\n this.renderCurrentSessionState();\n if (this.firstRunOnboardingActive) {\n this.clearFirstRunOnboardingUi();\n }\n this.showStatus(\"Resumed session\");\n return result;\n } catch (error: unknown) {\n if (error instanceof MissingSessionCwdError) {\n const selectedCwd = await this.promptForMissingSessionCwd(error);\n if (!selectedCwd) {\n this.showStatus(\"Resume cancelled\");\n return { cancelled: true };\n }\n const result = await this.runtimeHost.switchSession(sessionPath, {\n cwdOverride: selectedCwd,\n withSession: options?.withSession,\n projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),\n });\n if (result.cancelled) {\n return result;\n }\n this.renderCurrentSessionState();\n if (this.firstRunOnboardingActive) {\n this.clearFirstRunOnboardingUi();\n }\n this.showStatus(\"Resumed session in current cwd\");\n return result;\n }\n return this.handleFatalRuntimeError(\"Failed to resume session\", error);\n }\n };\n"]}
|