@bastani/atomic 0.8.31-alpha.5 → 0.9.0-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 +28 -1
- package/dist/builtin/cursor/CHANGELOG.md +10 -1
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/cursor/src/proto/protobuf-codec-json.ts +44 -0
- package/dist/builtin/cursor/src/proto/protobuf-codec-request.ts +271 -0
- package/dist/builtin/cursor/src/proto/protobuf-codec-wire.ts +231 -0
- package/dist/builtin/cursor/src/proto/protobuf-codec.ts +5 -523
- package/dist/builtin/cursor/src/stream.ts +6 -70
- package/dist/builtin/cursor/src/transport-errors.ts +74 -0
- package/dist/builtin/cursor/src/transport-frame.ts +56 -0
- package/dist/builtin/cursor/src/transport-http2.ts +122 -0
- package/dist/builtin/cursor/src/transport-native-client.ts +161 -0
- package/dist/builtin/cursor/src/transport-run-stream.ts +188 -0
- package/dist/builtin/cursor/src/transport-timeouts.ts +87 -0
- package/dist/builtin/cursor/src/transport-types.ts +140 -0
- package/dist/builtin/cursor/src/transport.ts +24 -790
- package/dist/builtin/intercom/CHANGELOG.md +9 -0
- package/dist/builtin/intercom/broker/client.ts +0 -35
- package/dist/builtin/intercom/contact-supervisor-tool.ts +289 -0
- package/dist/builtin/intercom/index-heavy.ts +77 -1336
- package/dist/builtin/intercom/intercom-tool.ts +409 -0
- package/dist/builtin/intercom/intercom-utils.ts +401 -0
- package/dist/builtin/intercom/lifecycle.ts +133 -0
- package/dist/builtin/intercom/overlay.ts +96 -0
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/intercom/subagent-relay.ts +137 -0
- package/dist/builtin/mcp/CHANGELOG.md +9 -0
- package/dist/builtin/mcp/config-write-utils.ts +104 -0
- package/dist/builtin/mcp/config.ts +4 -180
- package/dist/builtin/mcp/mcp-panel-renderer.ts +243 -0
- package/dist/builtin/mcp/mcp-panel-state.ts +227 -0
- package/dist/builtin/mcp/mcp-panel-types.ts +86 -0
- package/dist/builtin/mcp/mcp-panel.ts +145 -579
- package/dist/builtin/mcp/mcp-setup-panel.ts +4 -81
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/mcp/proxy-auth.ts +61 -0
- package/dist/builtin/mcp/proxy-call.ts +373 -0
- package/dist/builtin/mcp/proxy-connect.ts +58 -0
- package/dist/builtin/mcp/proxy-info-modes.ts +326 -0
- package/dist/builtin/mcp/proxy-modes.ts +3 -805
- package/dist/builtin/mcp/proxy-types.ts +3 -0
- package/dist/builtin/mcp/ui-server-http.ts +81 -0
- package/dist/builtin/mcp/ui-server.ts +2 -127
- package/dist/builtin/subagents/CHANGELOG.md +9 -0
- package/dist/builtin/subagents/package.json +4 -4
- package/dist/builtin/subagents/src/agents/agent-discovery.ts +127 -0
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +175 -0
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +310 -0
- package/dist/builtin/subagents/src/agents/agent-management.ts +3 -309
- package/dist/builtin/subagents/src/agents/agent-overrides.ts +397 -0
- package/dist/builtin/subagents/src/agents/agent-paths.ts +88 -0
- package/dist/builtin/subagents/src/agents/agent-types.ts +136 -0
- package/dist/builtin/subagents/src/agents/agents.ts +22 -895
- package/dist/builtin/subagents/src/agents/skills-paths.ts +333 -0
- package/dist/builtin/subagents/src/agents/skills.ts +3 -326
- package/dist/builtin/subagents/src/extension/index.ts +4 -118
- package/dist/builtin/subagents/src/extension/prompt-guidance.ts +13 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +401 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +131 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +213 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +84 -0
- package/dist/builtin/subagents/src/runs/background/async-execution.ts +13 -795
- package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +215 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +136 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +105 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +112 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +159 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +127 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +427 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +273 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +269 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +196 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +70 -0
- package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +44 -2233
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +75 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +202 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +97 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +160 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +72 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +161 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +203 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +234 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +103 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +29 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +4 -1328
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +117 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +35 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +194 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +183 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +185 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +229 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +194 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +94 -1043
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +135 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +107 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-types.ts +17 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +454 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +219 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +77 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +34 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +56 -0
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +6 -1082
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +207 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +140 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +266 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +270 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +157 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +375 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +463 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +17 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +320 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +207 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +121 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +113 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +150 -2522
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +0 -16
- package/dist/builtin/subagents/src/runs/shared/nested-events-control.ts +167 -0
- package/dist/builtin/subagents/src/runs/shared/nested-events-core.ts +219 -0
- package/dist/builtin/subagents/src/runs/shared/nested-events-projection.ts +121 -0
- package/dist/builtin/subagents/src/runs/shared/nested-events-registry.ts +289 -0
- package/dist/builtin/subagents/src/runs/shared/nested-events-sanitize.ts +201 -0
- package/dist/builtin/subagents/src/runs/shared/nested-events.ts +50 -935
- package/dist/builtin/subagents/src/runs/shared/worktree.ts +0 -78
- package/dist/builtin/subagents/src/shared/types-async.ts +265 -0
- package/dist/builtin/subagents/src/shared/types-config.ts +125 -0
- package/dist/builtin/subagents/src/shared/types-depth.ts +121 -0
- package/dist/builtin/subagents/src/shared/types-output.ts +63 -0
- package/dist/builtin/subagents/src/shared/types-results.ts +318 -0
- package/dist/builtin/subagents/src/shared/types-runtime.ts +136 -0
- package/dist/builtin/subagents/src/shared/types.ts +10 -975
- package/dist/builtin/subagents/src/slash/slash-commands.ts +0 -12
- package/dist/builtin/subagents/src/tui/render-chain-graph.ts +247 -0
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +259 -0
- package/dist/builtin/subagents/src/tui/render-layout.ts +120 -0
- package/dist/builtin/subagents/src/tui/render-result-animation.ts +56 -0
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +154 -0
- package/dist/builtin/subagents/src/tui/render-result.ts +390 -0
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +83 -0
- package/dist/builtin/subagents/src/tui/render-status-progress.ts +133 -0
- package/dist/builtin/subagents/src/tui/render-widget-graph.ts +166 -0
- package/dist/builtin/subagents/src/tui/render-widget.ts +273 -0
- package/dist/builtin/subagents/src/tui/render.ts +14 -1801
- package/dist/builtin/web-access/CHANGELOG.md +9 -0
- package/dist/builtin/web-access/content-tools.ts +348 -0
- package/dist/builtin/web-access/curator-page-assets/script-1.ts +400 -0
- package/dist/builtin/web-access/curator-page-assets/script-2.ts +400 -0
- package/dist/builtin/web-access/curator-page-assets/script-3.ts +400 -0
- package/dist/builtin/web-access/curator-page-assets/script-4.ts +400 -0
- package/dist/builtin/web-access/curator-page-assets/script-5.ts +398 -0
- package/dist/builtin/web-access/curator-page-assets/styles-1.ts +394 -0
- package/dist/builtin/web-access/curator-page-assets/styles-2.ts +394 -0
- package/dist/builtin/web-access/curator-page-assets/styles-3.ts +393 -0
- package/dist/builtin/web-access/curator-page.ts +17 -3180
- package/dist/builtin/web-access/curator-server-helpers.ts +115 -0
- package/dist/builtin/web-access/curator-server.ts +2 -113
- package/dist/builtin/web-access/exa-mcp.ts +218 -0
- package/dist/builtin/web-access/exa.ts +2 -207
- package/dist/builtin/web-access/extract-frames.ts +228 -0
- package/dist/builtin/web-access/extract.ts +13 -214
- package/dist/builtin/web-access/github-config.ts +156 -0
- package/dist/builtin/web-access/github-extract.ts +3 -154
- package/dist/builtin/web-access/index-heavy.ts +8 -1904
- package/dist/builtin/web-access/package.json +3 -2
- package/dist/builtin/web-access/web-search-activity.ts +102 -0
- package/dist/builtin/web-access/web-search-browser.ts +116 -0
- package/dist/builtin/web-access/web-search-command.ts +242 -0
- package/dist/builtin/web-access/web-search-config.ts +163 -0
- package/dist/builtin/web-access/web-search-curator.ts +214 -0
- package/dist/builtin/web-access/web-search-features.ts +165 -0
- package/dist/builtin/web-access/web-search-formatting.ts +117 -0
- package/dist/builtin/web-access/web-search-return.ts +136 -0
- package/dist/builtin/web-access/web-search-summary.ts +170 -0
- package/dist/builtin/web-access/web-search-tool.ts +290 -0
- package/dist/builtin/web-access/web-search-types.ts +50 -0
- package/dist/builtin/workflows/CHANGELOG.md +16 -1
- package/dist/builtin/workflows/README.md +189 -122
- package/dist/builtin/workflows/builtin/deep-research-codebase-runner.ts +492 -0
- package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +346 -0
- package/dist/builtin/workflows/builtin/deep-research-codebase.ts +36 -849
- package/dist/builtin/workflows/builtin/goal-artifacts.ts +43 -0
- package/dist/builtin/workflows/builtin/goal-ledger.ts +54 -0
- package/dist/builtin/workflows/builtin/goal-prompts.ts +360 -0
- package/dist/builtin/workflows/builtin/goal-reducer.ts +141 -0
- package/dist/builtin/workflows/builtin/goal-reports.ts +56 -0
- package/dist/builtin/workflows/builtin/goal-review.ts +84 -0
- package/dist/builtin/workflows/builtin/goal-runner.ts +336 -0
- package/dist/builtin/workflows/builtin/goal-schemas.ts +60 -0
- package/dist/builtin/workflows/builtin/goal-types.ts +132 -0
- package/dist/builtin/workflows/builtin/goal.ts +40 -1201
- package/dist/builtin/workflows/builtin/index.d.ts +1 -0
- package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +432 -0
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +476 -0
- package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +312 -0
- package/dist/builtin/workflows/builtin/open-claude-design.d.ts +1 -0
- package/dist/builtin/workflows/builtin/open-claude-design.ts +47 -1131
- package/dist/builtin/workflows/builtin/ralph-core.ts +408 -0
- package/dist/builtin/workflows/builtin/ralph-models.ts +123 -0
- package/dist/builtin/workflows/builtin/ralph-runner.ts +499 -0
- package/dist/builtin/workflows/builtin/ralph.ts +50 -1019
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +8 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +13 -15
- package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +9 -0
- package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
- package/dist/builtin/workflows/src/authoring/typebox-defaults.ts +217 -0
- package/dist/builtin/workflows/src/authoring/workflow.ts +184 -0
- package/dist/builtin/workflows/src/authoring.d.ts +14 -66
- package/dist/builtin/workflows/src/engine/graph-inference.ts +100 -0
- package/dist/builtin/workflows/src/engine/options.ts +40 -0
- package/dist/builtin/workflows/src/engine/primitives/chain.ts +29 -0
- package/dist/builtin/workflows/src/engine/primitives/exit.ts +2 -0
- package/dist/builtin/workflows/src/engine/primitives/parallel.ts +47 -0
- package/dist/builtin/workflows/src/engine/primitives/task.ts +108 -0
- package/dist/builtin/workflows/src/engine/primitives/ui.ts +41 -0
- package/dist/builtin/workflows/src/engine/primitives/workflow.ts +159 -0
- package/dist/builtin/workflows/src/engine/replay.ts +8 -0
- package/dist/builtin/workflows/src/engine/run.ts +356 -0
- package/dist/builtin/workflows/src/engine/runtime.ts +160 -0
- package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +186 -0
- package/dist/builtin/workflows/src/extension/config-file-loader.ts +152 -0
- package/dist/builtin/workflows/src/extension/config-loader.ts +2 -167
- package/dist/builtin/workflows/src/extension/discovery-loaders.ts +115 -0
- package/dist/builtin/workflows/src/extension/discovery.ts +3 -117
- package/dist/builtin/workflows/src/extension/extension-factory.ts +120 -0
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +109 -0
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +270 -0
- package/dist/builtin/workflows/src/extension/index.ts +42 -4166
- package/dist/builtin/workflows/src/extension/public-types.ts +295 -0
- package/dist/builtin/workflows/src/extension/render-component.ts +14 -0
- package/dist/builtin/workflows/src/extension/runtime-direct.ts +96 -0
- package/dist/builtin/workflows/src/extension/runtime.ts +1 -92
- package/dist/builtin/workflows/src/extension/ui-surface.ts +286 -0
- package/dist/builtin/workflows/src/extension/wiring.ts +6 -475
- package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +111 -0
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +213 -0
- package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +81 -0
- package/dist/builtin/workflows/src/extension/workflow-command-utils.ts +181 -0
- package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +9 -3
- package/dist/builtin/workflows/src/extension/workflow-policy.ts +15 -0
- package/dist/builtin/workflows/src/extension/workflow-ports.ts +41 -0
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +23 -0
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +286 -0
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +1 -19
- package/dist/builtin/workflows/src/extension/workflow-stage-results.ts +264 -0
- package/dist/builtin/workflows/src/extension/workflow-targets.ts +181 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +175 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +205 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-helpers.ts +66 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-inspection.ts +164 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-registration.ts +54 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +164 -0
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +102 -0
- package/dist/builtin/workflows/src/index.ts +0 -2
- package/dist/builtin/workflows/src/runs/background/runner.ts +6 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +431 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +232 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +74 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-child-workflow.ts +1 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +167 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +450 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-direct.ts +233 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +195 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +368 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-inputs.ts +83 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +441 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +160 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +274 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +122 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-run.ts +1 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +204 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +194 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-context.ts +120 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +126 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +359 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +135 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +61 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +2 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +293 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +109 -0
- package/dist/builtin/workflows/src/runs/foreground/executor.ts +19 -5354
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +219 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +500 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +129 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +53 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +146 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +55 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +82 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +141 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +13 -1355
- package/dist/builtin/workflows/src/runs/shared/graph-inference.ts +2 -100
- package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +453 -0
- package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +442 -0
- package/dist/builtin/workflows/src/runs/shared/model-fallback.ts +2 -836
- package/dist/builtin/workflows/src/runs/shared/worktree-diff.ts +165 -0
- package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +220 -0
- package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +335 -0
- package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +92 -0
- package/dist/builtin/workflows/src/runs/shared/worktree.ts +18 -791
- package/dist/builtin/workflows/src/sdk-surface.ts +6 -9
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +371 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +439 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +206 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +282 -0
- package/dist/builtin/workflows/src/shared/authoring-contract.d.ts +5 -598
- package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +428 -0
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +9 -431
- package/dist/builtin/workflows/src/shared/store-factory.ts +16 -0
- package/dist/builtin/workflows/src/shared/store-internal.ts +219 -0
- package/dist/builtin/workflows/src/shared/store-prompt-methods.ts +219 -0
- package/dist/builtin/workflows/src/shared/store-public-types.ts +215 -0
- package/dist/builtin/workflows/src/shared/store-run-methods.ts +223 -0
- package/dist/builtin/workflows/src/shared/store-stage-methods.ts +305 -0
- package/dist/builtin/workflows/src/shared/store.ts +11 -1138
- package/dist/builtin/workflows/src/shared/types.ts +25 -8
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +49 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +84 -0
- package/dist/builtin/workflows/src/shared/workflow-failures-classifier.ts +266 -0
- package/dist/builtin/workflows/src/shared/workflow-failures-contract.ts +75 -0
- package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +477 -0
- package/dist/builtin/workflows/src/shared/workflow-failures-signals.ts +248 -0
- package/dist/builtin/workflows/src/shared/workflow-failures.ts +13 -1001
- package/dist/builtin/workflows/src/tui/chat-surface.ts +0 -66
- package/dist/builtin/workflows/src/tui/graph-view-constants.ts +45 -0
- package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +161 -0
- package/dist/builtin/workflows/src/tui/graph-view-input.ts +333 -0
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +336 -0
- package/dist/builtin/workflows/src/tui/graph-view-render.ts +194 -0
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +306 -0
- package/dist/builtin/workflows/src/tui/graph-view-types.ts +70 -0
- package/dist/builtin/workflows/src/tui/graph-view.ts +4 -1386
- package/dist/builtin/workflows/src/tui/inline-form-editor-text.ts +121 -0
- package/dist/builtin/workflows/src/tui/inline-form-editor.ts +11 -223
- package/dist/builtin/workflows/src/tui/inputs-picker-editing.ts +151 -0
- package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +305 -0
- package/dist/builtin/workflows/src/tui/inputs-picker-render.ts +300 -0
- package/dist/builtin/workflows/src/tui/inputs-picker-types.ts +190 -0
- package/dist/builtin/workflows/src/tui/inputs-picker.ts +19 -997
- package/dist/builtin/workflows/src/tui/prompt-card-input.ts +226 -0
- package/dist/builtin/workflows/src/tui/prompt-card-render.ts +373 -0
- package/dist/builtin/workflows/src/tui/prompt-card-select.ts +116 -0
- package/dist/builtin/workflows/src/tui/prompt-card-state.ts +61 -0
- package/dist/builtin/workflows/src/tui/prompt-card-text.ts +129 -0
- package/dist/builtin/workflows/src/tui/prompt-card.ts +8 -910
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +315 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-custom-ui.ts +127 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +187 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +222 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +152 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +464 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-transcript.ts +242 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +151 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +141 -1777
- package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +85 -0
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +1 -129
- package/dist/builtin/workflows/src/workflows/registry.ts +7 -3
- package/dist/config-self-update.d.ts +21 -0
- package/dist/config-self-update.d.ts.map +1 -0
- package/dist/config-self-update.js +265 -0
- package/dist/config-self-update.js.map +1 -0
- package/dist/config.d.ts +3 -12
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -252
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-accessors.d.ts +3 -0
- package/dist/core/agent-session-accessors.d.ts.map +1 -0
- package/dist/core/agent-session-accessors.js +36 -0
- package/dist/core/agent-session-accessors.js.map +1 -0
- package/dist/core/agent-session-auto-compaction.d.ts +32 -0
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -0
- package/dist/core/agent-session-auto-compaction.js +219 -0
- package/dist/core/agent-session-auto-compaction.js.map +1 -0
- package/dist/core/agent-session-bash.d.ts +30 -0
- package/dist/core/agent-session-bash.d.ts.map +1 -0
- package/dist/core/agent-session-bash.js +79 -0
- package/dist/core/agent-session-bash.js.map +1 -0
- package/dist/core/agent-session-compaction.d.ts +44 -0
- package/dist/core/agent-session-compaction.d.ts.map +1 -0
- package/dist/core/agent-session-compaction.js +282 -0
- package/dist/core/agent-session-compaction.js.map +1 -0
- package/dist/core/agent-session-events.d.ts +65 -0
- package/dist/core/agent-session-events.d.ts.map +1 -0
- package/dist/core/agent-session-events.js +373 -0
- package/dist/core/agent-session-events.js.map +1 -0
- package/dist/core/agent-session-export.d.ts +42 -0
- package/dist/core/agent-session-export.d.ts.map +1 -0
- package/dist/core/agent-session-export.js +199 -0
- package/dist/core/agent-session-export.js.map +1 -0
- package/dist/core/agent-session-extension-bindings.d.ts +37 -0
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -0
- package/dist/core/agent-session-extension-bindings.js +231 -0
- package/dist/core/agent-session-extension-bindings.js.map +1 -0
- package/dist/core/agent-session-message-queue.d.ts +85 -0
- package/dist/core/agent-session-message-queue.d.ts.map +1 -0
- package/dist/core/agent-session-message-queue.js +264 -0
- package/dist/core/agent-session-message-queue.js.map +1 -0
- package/dist/core/agent-session-methods.d.ts +300 -0
- package/dist/core/agent-session-methods.d.ts.map +1 -0
- package/dist/core/agent-session-methods.js +2 -0
- package/dist/core/agent-session-methods.js.map +1 -0
- package/dist/core/agent-session-models.d.ts +111 -0
- package/dist/core/agent-session-models.d.ts.map +1 -0
- package/dist/core/agent-session-models.js +368 -0
- package/dist/core/agent-session-models.js.map +1 -0
- package/dist/core/agent-session-prompt.d.ts +61 -0
- package/dist/core/agent-session-prompt.d.ts.map +1 -0
- package/dist/core/agent-session-prompt.js +330 -0
- package/dist/core/agent-session-prompt.js.map +1 -0
- package/dist/core/agent-session-retry.d.ts +62 -0
- package/dist/core/agent-session-retry.d.ts.map +1 -0
- package/dist/core/agent-session-retry.js +202 -0
- package/dist/core/agent-session-retry.js.map +1 -0
- package/dist/core/agent-session-services.d.ts +0 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +0 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-skill-block.d.ts +13 -0
- package/dist/core/agent-session-skill-block.d.ts.map +1 -0
- package/dist/core/agent-session-skill-block.js +37 -0
- package/dist/core/agent-session-skill-block.js.map +1 -0
- package/dist/core/agent-session-state.d.ts +48 -0
- package/dist/core/agent-session-state.d.ts.map +1 -0
- package/dist/core/agent-session-state.js +129 -0
- package/dist/core/agent-session-state.js.map +1 -0
- package/dist/core/agent-session-tool-hooks.d.ts +7 -0
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -0
- package/dist/core/agent-session-tool-hooks.js +72 -0
- package/dist/core/agent-session-tool-hooks.js.map +1 -0
- package/dist/core/agent-session-tool-registry.d.ts +15 -0
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -0
- package/dist/core/agent-session-tool-registry.js +149 -0
- package/dist/core/agent-session-tool-registry.js.map +1 -0
- package/dist/core/agent-session-tree.d.ts +46 -0
- package/dist/core/agent-session-tree.d.ts.map +1 -0
- package/dist/core/agent-session-tree.js +217 -0
- package/dist/core/agent-session-tree.js.map +1 -0
- package/dist/core/agent-session-types.d.ts +157 -0
- package/dist/core/agent-session-types.d.ts.map +1 -0
- package/dist/core/agent-session-types.js +41 -0
- package/dist/core/agent-session-types.js.map +1 -0
- package/dist/core/agent-session.d.ts +66 -688
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +26 -3153
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +1 -1
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/auth-storage-backends.d.ts +49 -0
- package/dist/core/auth-storage-backends.d.ts.map +1 -0
- package/dist/core/auth-storage-backends.js +185 -0
- package/dist/core/auth-storage-backends.js.map +1 -0
- package/dist/core/auth-storage.d.ts +2 -49
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -183
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/context-compaction-metrics.d.ts +16 -0
- package/dist/core/compaction/context-compaction-metrics.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-metrics.js +58 -0
- package/dist/core/compaction/context-compaction-metrics.js.map +1 -0
- package/dist/core/compaction/context-compaction-prompt.d.ts +9 -0
- package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-prompt.js +161 -0
- package/dist/core/compaction/context-compaction-prompt.js.map +1 -0
- package/dist/core/compaction/context-compaction-runner.d.ts +5 -0
- package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-runner.js +181 -0
- package/dist/core/compaction/context-compaction-runner.js.map +1 -0
- package/dist/core/compaction/context-compaction-strategy.d.ts +5 -0
- package/dist/core/compaction/context-compaction-strategy.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-strategy.js +27 -0
- package/dist/core/compaction/context-compaction-strategy.js.map +1 -0
- package/dist/core/compaction/context-compaction-types.d.ts +73 -0
- package/dist/core/compaction/context-compaction-types.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-types.js +6 -0
- package/dist/core/compaction/context-compaction-types.js.map +1 -0
- package/dist/core/compaction/context-compaction.d.ts +9 -200
- package/dist/core/compaction/context-compaction.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction.js +7 -1943
- package/dist/core/compaction/context-compaction.js.map +1 -1
- package/dist/core/compaction/context-deletion-application.d.ts +13 -0
- package/dist/core/compaction/context-deletion-application.d.ts.map +1 -0
- package/dist/core/compaction/context-deletion-application.js +259 -0
- package/dist/core/compaction/context-deletion-application.js.map +1 -0
- package/dist/core/compaction/context-deletion-store.d.ts +78 -0
- package/dist/core/compaction/context-deletion-store.d.ts.map +1 -0
- package/dist/core/compaction/context-deletion-store.js +162 -0
- package/dist/core/compaction/context-deletion-store.js.map +1 -0
- package/dist/core/compaction/context-deletion-targets.d.ts +40 -0
- package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -0
- package/dist/core/compaction/context-deletion-targets.js +267 -0
- package/dist/core/compaction/context-deletion-targets.js.map +1 -0
- package/dist/core/compaction/context-deletion-tool-definitions.d.ts +187 -0
- package/dist/core/compaction/context-deletion-tool-definitions.d.ts.map +1 -0
- package/dist/core/compaction/context-deletion-tool-definitions.js +98 -0
- package/dist/core/compaction/context-deletion-tool-definitions.js.map +1 -0
- package/dist/core/compaction/context-deletion-tool-helpers.d.ts +19 -0
- package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -0
- package/dist/core/compaction/context-deletion-tool-helpers.js +137 -0
- package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -0
- package/dist/core/compaction/context-deletion-tools.d.ts +4 -0
- package/dist/core/compaction/context-deletion-tools.d.ts.map +1 -0
- package/dist/core/compaction/context-deletion-tools.js +395 -0
- package/dist/core/compaction/context-deletion-tools.js.map +1 -0
- package/dist/core/compaction/context-transcript-analysis.d.ts +9 -0
- package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -0
- package/dist/core/compaction/context-transcript-analysis.js +234 -0
- package/dist/core/compaction/context-transcript-analysis.js.map +1 -0
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +2 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/template-js/data-tree.js +287 -0
- package/dist/core/export-html/template-js/entries-navigation.js +424 -0
- package/dist/core/export-html/template-js/initialization.js +312 -0
- package/dist/core/export-html/template-js/message-tools.js +415 -0
- package/dist/core/export-html/template-js/tree-filter-render.js +421 -0
- package/dist/core/export-html/template-script.d.ts +3 -0
- package/dist/core/export-html/template-script.d.ts.map +1 -0
- package/dist/core/export-html/template-script.js +13 -0
- package/dist/core/export-html/template-script.js.map +1 -0
- package/dist/core/export-html/template.js +3 -1
- package/dist/core/extensions/agent-events.d.ts +159 -0
- package/dist/core/extensions/agent-events.d.ts.map +1 -0
- package/dist/core/extensions/agent-events.js +2 -0
- package/dist/core/extensions/agent-events.js.map +1 -0
- package/dist/core/extensions/api-types.d.ts +189 -0
- package/dist/core/extensions/api-types.d.ts.map +1 -0
- package/dist/core/extensions/api-types.js +2 -0
- package/dist/core/extensions/api-types.js.map +1 -0
- package/dist/core/extensions/command-types.d.ts +14 -0
- package/dist/core/extensions/command-types.d.ts.map +1 -0
- package/dist/core/extensions/command-types.js +2 -0
- package/dist/core/extensions/command-types.js.map +1 -0
- package/dist/core/extensions/context-types.d.ts +130 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -0
- package/dist/core/extensions/context-types.js +2 -0
- package/dist/core/extensions/context-types.js.map +1 -0
- package/dist/core/extensions/event-results.d.ts +61 -0
- package/dist/core/extensions/event-results.d.ts.map +1 -0
- package/dist/core/extensions/event-results.js +2 -0
- package/dist/core/extensions/event-results.js.map +1 -0
- package/dist/core/extensions/event-types.d.ts +6 -0
- package/dist/core/extensions/event-types.d.ts.map +1 -0
- package/dist/core/extensions/event-types.js +2 -0
- package/dist/core/extensions/event-types.js.map +1 -0
- package/dist/core/extensions/loader-api.d.ts +10 -0
- package/dist/core/extensions/loader-api.d.ts.map +1 -0
- package/dist/core/extensions/loader-api.js +143 -0
- package/dist/core/extensions/loader-api.js.map +1 -0
- package/dist/core/extensions/loader-core.d.ts +10 -0
- package/dist/core/extensions/loader-core.d.ts.map +1 -0
- package/dist/core/extensions/loader-core.js +98 -0
- package/dist/core/extensions/loader-core.js.map +1 -0
- package/dist/core/extensions/loader-discovery.d.ts +7 -0
- package/dist/core/extensions/loader-discovery.d.ts.map +1 -0
- package/dist/core/extensions/loader-discovery.js +139 -0
- package/dist/core/extensions/loader-discovery.js.map +1 -0
- package/dist/core/extensions/loader-resources.d.ts +11 -0
- package/dist/core/extensions/loader-resources.d.ts.map +1 -0
- package/dist/core/extensions/loader-resources.js +10 -0
- package/dist/core/extensions/loader-resources.js.map +1 -0
- package/dist/core/extensions/loader-runtime.d.ts +7 -0
- package/dist/core/extensions/loader-runtime.d.ts.map +1 -0
- package/dist/core/extensions/loader-runtime.js +51 -0
- package/dist/core/extensions/loader-runtime.js.map +1 -0
- package/dist/core/extensions/loader-virtual-modules.d.ts +9 -0
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/loader-virtual-modules.js +124 -0
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +5 -28
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +4 -542
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/message-types.d.ts +34 -0
- package/dist/core/extensions/message-types.d.ts.map +1 -0
- package/dist/core/extensions/message-types.js +2 -0
- package/dist/core/extensions/message-types.js.map +1 -0
- package/dist/core/extensions/provider-types.d.ts +71 -0
- package/dist/core/extensions/provider-types.d.ts.map +1 -0
- package/dist/core/extensions/provider-types.js +2 -0
- package/dist/core/extensions/provider-types.js.map +1 -0
- package/dist/core/extensions/runner-context.d.ts +42 -0
- package/dist/core/extensions/runner-context.d.ts.map +1 -0
- package/dist/core/extensions/runner-context.js +112 -0
- package/dist/core/extensions/runner-context.js.map +1 -0
- package/dist/core/extensions/runner-events.d.ts +47 -0
- package/dist/core/extensions/runner-events.d.ts.map +1 -0
- package/dist/core/extensions/runner-events.js +280 -0
- package/dist/core/extensions/runner-events.js.map +1 -0
- package/dist/core/extensions/runner-handlers.d.ts +32 -0
- package/dist/core/extensions/runner-handlers.d.ts.map +1 -0
- package/dist/core/extensions/runner-handlers.js +2 -0
- package/dist/core/extensions/runner-handlers.js.map +1 -0
- package/dist/core/extensions/runner-project-trust.d.ts +6 -0
- package/dist/core/extensions/runner-project-trust.d.ts.map +1 -0
- package/dist/core/extensions/runner-project-trust.js +27 -0
- package/dist/core/extensions/runner-project-trust.js.map +1 -0
- package/dist/core/extensions/runner-registries.d.ts +8 -0
- package/dist/core/extensions/runner-registries.d.ts.map +1 -0
- package/dist/core/extensions/runner-registries.js +76 -0
- package/dist/core/extensions/runner-registries.js.map +1 -0
- package/dist/core/extensions/runner-shortcuts.d.ts +10 -0
- package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -0
- package/dist/core/extensions/runner-shortcuts.js +71 -0
- package/dist/core/extensions/runner-shortcuts.js.map +1 -0
- package/dist/core/extensions/runner-ui.d.ts +3 -0
- package/dist/core/extensions/runner-ui.d.ts.map +1 -0
- package/dist/core/extensions/runner-ui.js +50 -0
- package/dist/core/extensions/runner-ui.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +7 -74
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +67 -673
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +179 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -0
- package/dist/core/extensions/runtime-types.js +2 -0
- package/dist/core/extensions/runtime-types.js.map +1 -0
- package/dist/core/extensions/session-events.d.ts +89 -0
- package/dist/core/extensions/session-events.d.ts.map +1 -0
- package/dist/core/extensions/session-events.js +2 -0
- package/dist/core/extensions/session-events.js.map +1 -0
- package/dist/core/extensions/tool-events.d.ts +127 -0
- package/dist/core/extensions/tool-events.d.ts.map +1 -0
- package/dist/core/extensions/tool-events.js +26 -0
- package/dist/core/extensions/tool-events.js.map +1 -0
- package/dist/core/extensions/tool-types.d.ts +100 -0
- package/dist/core/extensions/tool-types.d.ts.map +1 -0
- package/dist/core/extensions/tool-types.js +11 -0
- package/dist/core/extensions/tool-types.js.map +1 -0
- package/dist/core/extensions/types.d.ts +20 -1288
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +4 -34
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +200 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -0
- package/dist/core/extensions/ui-types.js +2 -0
- package/dist/core/extensions/ui-types.js.map +1 -0
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/model-registry-auth.d.ts +7 -0
- package/dist/core/model-registry-auth.d.ts.map +1 -0
- package/dist/core/model-registry-auth.js +64 -0
- package/dist/core/model-registry-auth.js.map +1 -0
- package/dist/core/model-registry-builtins.d.ts +9 -0
- package/dist/core/model-registry-builtins.d.ts.map +1 -0
- package/dist/core/model-registry-builtins.js +126 -0
- package/dist/core/model-registry-builtins.js.map +1 -0
- package/dist/core/model-registry-custom-loader.d.ts +3 -0
- package/dist/core/model-registry-custom-loader.d.ts.map +1 -0
- package/dist/core/model-registry-custom-loader.js +213 -0
- package/dist/core/model-registry-custom-loader.js.map +1 -0
- package/dist/core/model-registry-dynamic.d.ts +6 -0
- package/dist/core/model-registry-dynamic.d.ts.map +1 -0
- package/dist/core/model-registry-dynamic.js +155 -0
- package/dist/core/model-registry-dynamic.js.map +1 -0
- package/dist/core/model-registry-loader.d.ts +4 -0
- package/dist/core/model-registry-loader.d.ts.map +1 -0
- package/dist/core/model-registry-loader.js +20 -0
- package/dist/core/model-registry-loader.js.map +1 -0
- package/dist/core/model-registry-schemas.d.ts +1136 -0
- package/dist/core/model-registry-schemas.d.ts.map +1 -0
- package/dist/core/model-registry-schemas.js +171 -0
- package/dist/core/model-registry-schemas.js.map +1 -0
- package/dist/core/model-registry-types.d.ts +74 -0
- package/dist/core/model-registry-types.d.ts.map +1 -0
- package/dist/core/model-registry-types.js +2 -0
- package/dist/core/model-registry-types.js.map +1 -0
- package/dist/core/model-registry.d.ts +3 -76
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +24 -733
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts +19 -0
- package/dist/core/model-resolver-cli.d.ts.map +1 -0
- package/dist/core/model-resolver-cli.js +118 -0
- package/dist/core/model-resolver-cli.js.map +1 -0
- package/dist/core/model-resolver-defaults.d.ts +5 -0
- package/dist/core/model-resolver-defaults.d.ts.map +1 -0
- package/dist/core/model-resolver-defaults.js +47 -0
- package/dist/core/model-resolver-defaults.js.map +1 -0
- package/dist/core/model-resolver-initial.d.ts +31 -0
- package/dist/core/model-resolver-initial.d.ts.map +1 -0
- package/dist/core/model-resolver-initial.js +116 -0
- package/dist/core/model-resolver-initial.js.map +1 -0
- package/dist/core/model-resolver-patterns.d.ts +26 -0
- package/dist/core/model-resolver-patterns.d.ts.map +1 -0
- package/dist/core/model-resolver-patterns.js +139 -0
- package/dist/core/model-resolver-patterns.js.map +1 -0
- package/dist/core/model-resolver-scope.d.ts +15 -0
- package/dist/core/model-resolver-scope.d.ts.map +1 -0
- package/dist/core/model-resolver-scope.js +66 -0
- package/dist/core/model-resolver-scope.js.map +1 -0
- package/dist/core/model-resolver-types.d.ts +29 -0
- package/dist/core/model-resolver-types.d.ts.map +1 -0
- package/dist/core/model-resolver-types.js +2 -0
- package/dist/core/model-resolver-types.js.map +1 -0
- package/dist/core/model-resolver.d.ts +6 -107
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +5 -549
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager-auto-resources.d.ts +5 -0
- package/dist/core/package-manager-auto-resources.d.ts.map +1 -0
- package/dist/core/package-manager-auto-resources.js +109 -0
- package/dist/core/package-manager-auto-resources.js.map +1 -0
- package/dist/core/package-manager-command.d.ts +11 -0
- package/dist/core/package-manager-command.d.ts.map +1 -0
- package/dist/core/package-manager-command.js +102 -0
- package/dist/core/package-manager-command.js.map +1 -0
- package/dist/core/package-manager-constants.d.ts +4 -0
- package/dist/core/package-manager-constants.d.ts.map +1 -0
- package/dist/core/package-manager-constants.js +4 -0
- package/dist/core/package-manager-constants.js.map +1 -0
- package/dist/core/package-manager-env.d.ts +4 -0
- package/dist/core/package-manager-env.d.ts.map +1 -0
- package/dist/core/package-manager-env.js +40 -0
- package/dist/core/package-manager-env.js.map +1 -0
- package/dist/core/package-manager-git.d.ts +10 -0
- package/dist/core/package-manager-git.d.ts.map +1 -0
- package/dist/core/package-manager-git.js +271 -0
- package/dist/core/package-manager-git.js.map +1 -0
- package/dist/core/package-manager-manifest.d.ts +7 -0
- package/dist/core/package-manager-manifest.d.ts.map +1 -0
- package/dist/core/package-manager-manifest.js +45 -0
- package/dist/core/package-manager-manifest.js.map +1 -0
- package/dist/core/package-manager-npm.d.ts +25 -0
- package/dist/core/package-manager-npm.d.ts.map +1 -0
- package/dist/core/package-manager-npm.js +252 -0
- package/dist/core/package-manager-npm.js.map +1 -0
- package/dist/core/package-manager-operations.d.ts +11 -0
- package/dist/core/package-manager-operations.d.ts.map +1 -0
- package/dist/core/package-manager-operations.js +196 -0
- package/dist/core/package-manager-operations.js.map +1 -0
- package/dist/core/package-manager-paths.d.ts +14 -0
- package/dist/core/package-manager-paths.d.ts.map +1 -0
- package/dist/core/package-manager-paths.js +61 -0
- package/dist/core/package-manager-paths.js.map +1 -0
- package/dist/core/package-manager-progress.d.ts +4 -0
- package/dist/core/package-manager-progress.d.ts.map +1 -0
- package/dist/core/package-manager-progress.js +16 -0
- package/dist/core/package-manager-progress.js.map +1 -0
- package/dist/core/package-manager-resolver.d.ts +5 -0
- package/dist/core/package-manager-resolver.d.ts.map +1 -0
- package/dist/core/package-manager-resolver.js +149 -0
- package/dist/core/package-manager-resolver.js.map +1 -0
- package/dist/core/package-manager-resource-accumulator.d.ts +6 -0
- package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -0
- package/dist/core/package-manager-resource-accumulator.js +67 -0
- package/dist/core/package-manager-resource-accumulator.js.map +1 -0
- package/dist/core/package-manager-resource-collector.d.ts +5 -0
- package/dist/core/package-manager-resource-collector.d.ts.map +1 -0
- package/dist/core/package-manager-resource-collector.js +148 -0
- package/dist/core/package-manager-resource-collector.js.map +1 -0
- package/dist/core/package-manager-resource-files.d.ts +14 -0
- package/dist/core/package-manager-resource-files.d.ts.map +1 -0
- package/dist/core/package-manager-resource-files.js +265 -0
- package/dist/core/package-manager-resource-files.js.map +1 -0
- package/dist/core/package-manager-resource-patterns.d.ts +12 -0
- package/dist/core/package-manager-resource-patterns.d.ts.map +1 -0
- package/dist/core/package-manager-resource-patterns.js +136 -0
- package/dist/core/package-manager-resource-patterns.js.map +1 -0
- package/dist/core/package-manager-settings.d.ts +10 -0
- package/dist/core/package-manager-settings.d.ts.map +1 -0
- package/dist/core/package-manager-settings.js +91 -0
- package/dist/core/package-manager-settings.js.map +1 -0
- package/dist/core/package-manager-source.d.ts +21 -0
- package/dist/core/package-manager-source.d.ts.map +1 -0
- package/dist/core/package-manager-source.js +146 -0
- package/dist/core/package-manager-source.js.map +1 -0
- package/dist/core/package-manager-types.d.ts +169 -0
- package/dist/core/package-manager-types.d.ts.map +1 -0
- package/dist/core/package-manager-types.js +9 -0
- package/dist/core/package-manager-types.js.map +1 -0
- package/dist/core/package-manager.d.ts +9 -174
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +56 -2100
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader-assets.d.ts +6 -0
- package/dist/core/resource-loader-assets.d.ts.map +1 -0
- package/dist/core/resource-loader-assets.js +209 -0
- package/dist/core/resource-loader-assets.js.map +1 -0
- package/dist/core/resource-loader-context-files.d.ts +10 -0
- package/dist/core/resource-loader-context-files.d.ts.map +1 -0
- package/dist/core/resource-loader-context-files.js +74 -0
- package/dist/core/resource-loader-context-files.js.map +1 -0
- package/dist/core/resource-loader-core.d.ts +83 -0
- package/dist/core/resource-loader-core.d.ts.map +1 -0
- package/dist/core/resource-loader-core.js +170 -0
- package/dist/core/resource-loader-core.js.map +1 -0
- package/dist/core/resource-loader-discovery.d.ts +4 -0
- package/dist/core/resource-loader-discovery.d.ts.map +1 -0
- package/dist/core/resource-loader-discovery.js +28 -0
- package/dist/core/resource-loader-discovery.js.map +1 -0
- package/dist/core/resource-loader-extensions.d.ts +13 -0
- package/dist/core/resource-loader-extensions.d.ts.map +1 -0
- package/dist/core/resource-loader-extensions.js +110 -0
- package/dist/core/resource-loader-extensions.js.map +1 -0
- package/dist/core/resource-loader-helpers.d.ts +4 -0
- package/dist/core/resource-loader-helpers.d.ts.map +1 -0
- package/dist/core/resource-loader-helpers.js +23 -0
- package/dist/core/resource-loader-helpers.js.map +1 -0
- package/dist/core/resource-loader-internals.d.ts +97 -0
- package/dist/core/resource-loader-internals.d.ts.map +1 -0
- package/dist/core/resource-loader-internals.js +4 -0
- package/dist/core/resource-loader-internals.js.map +1 -0
- package/dist/core/resource-loader-package-resources.d.ts +31 -0
- package/dist/core/resource-loader-package-resources.d.ts.map +1 -0
- package/dist/core/resource-loader-package-resources.js +112 -0
- package/dist/core/resource-loader-package-resources.js.map +1 -0
- package/dist/core/resource-loader-paths.d.ts +4 -0
- package/dist/core/resource-loader-paths.d.ts.map +1 -0
- package/dist/core/resource-loader-paths.js +22 -0
- package/dist/core/resource-loader-paths.js.map +1 -0
- package/dist/core/resource-loader-reload.d.ts +6 -0
- package/dist/core/resource-loader-reload.d.ts.map +1 -0
- package/dist/core/resource-loader-reload.js +230 -0
- package/dist/core/resource-loader-reload.js.map +1 -0
- package/dist/core/resource-loader-source-info.d.ts +9 -0
- package/dist/core/resource-loader-source-info.d.ts.map +1 -0
- package/dist/core/resource-loader-source-info.js +101 -0
- package/dist/core/resource-loader-source-info.js.map +1 -0
- package/dist/core/resource-loader-types.d.ts +130 -0
- package/dist/core/resource-loader-types.d.ts.map +1 -0
- package/dist/core/resource-loader-types.js +2 -0
- package/dist/core/resource-loader-types.js.map +1 -0
- package/dist/core/resource-loader.d.ts +3 -242
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +2 -976
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +7 -0
- package/dist/core/sdk-exports.d.ts.map +1 -0
- package/dist/core/sdk-exports.js +5 -0
- package/dist/core/sdk-exports.js.map +1 -0
- package/dist/core/sdk-types.d.ts +83 -0
- package/dist/core/sdk-types.d.ts.map +1 -0
- package/dist/core/sdk-types.js +2 -0
- package/dist/core/sdk-types.js.map +1 -0
- package/dist/core/sdk.d.ts +3 -91
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +2 -7
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-archive.d.ts +27 -0
- package/dist/core/session-manager-archive.d.ts.map +1 -0
- package/dist/core/session-manager-archive.js +114 -0
- package/dist/core/session-manager-archive.js.map +1 -0
- package/dist/core/session-manager-core.d.ts +104 -0
- package/dist/core/session-manager-core.d.ts.map +1 -0
- package/dist/core/session-manager-core.js +346 -0
- package/dist/core/session-manager-core.js.map +1 -0
- package/dist/core/session-manager-entries.d.ts +38 -0
- package/dist/core/session-manager-entries.d.ts.map +1 -0
- package/dist/core/session-manager-entries.js +124 -0
- package/dist/core/session-manager-entries.js.map +1 -0
- package/dist/core/session-manager-history.d.ts +38 -0
- package/dist/core/session-manager-history.d.ts.map +1 -0
- package/dist/core/session-manager-history.js +379 -0
- package/dist/core/session-manager-history.js.map +1 -0
- package/dist/core/session-manager-list.d.ts +5 -0
- package/dist/core/session-manager-list.d.ts.map +1 -0
- package/dist/core/session-manager-list.js +196 -0
- package/dist/core/session-manager-list.js.map +1 -0
- package/dist/core/session-manager-migrations.d.ts +11 -0
- package/dist/core/session-manager-migrations.d.ts.map +1 -0
- package/dist/core/session-manager-migrations.js +80 -0
- package/dist/core/session-manager-migrations.js.map +1 -0
- package/dist/core/session-manager-paths.d.ts +7 -0
- package/dist/core/session-manager-paths.d.ts.map +1 -0
- package/dist/core/session-manager-paths.js +22 -0
- package/dist/core/session-manager-paths.js.map +1 -0
- package/dist/core/session-manager-storage.d.ts +15 -0
- package/dist/core/session-manager-storage.d.ts.map +1 -0
- package/dist/core/session-manager-storage.js +127 -0
- package/dist/core/session-manager-storage.js.map +1 -0
- package/dist/core/session-manager-types.d.ts +172 -0
- package/dist/core/session-manager-types.d.ts.map +1 -0
- package/dist/core/session-manager-types.js +2 -0
- package/dist/core/session-manager-types.js.map +1 -0
- package/dist/core/session-manager-validation.d.ts +7 -0
- package/dist/core/session-manager-validation.d.ts.map +1 -0
- package/dist/core/session-manager-validation.js +34 -0
- package/dist/core/session-manager-validation.js.map +1 -0
- package/dist/core/session-manager.d.ts +8 -390
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +7 -1418
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +65 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -0
- package/dist/core/settings-manager-basic-accessors.js +253 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -0
- package/dist/core/settings-manager-core.d.ts +57 -0
- package/dist/core/settings-manager-core.d.ts.map +1 -0
- package/dist/core/settings-manager-core.js +387 -0
- package/dist/core/settings-manager-core.js.map +1 -0
- package/dist/core/settings-manager-internals.d.ts +13 -0
- package/dist/core/settings-manager-internals.d.ts.map +1 -0
- package/dist/core/settings-manager-internals.js +4 -0
- package/dist/core/settings-manager-internals.js.map +1 -0
- package/dist/core/settings-manager-resource-accessors.d.ts +43 -0
- package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -0
- package/dist/core/settings-manager-resource-accessors.js +172 -0
- package/dist/core/settings-manager-resource-accessors.js.map +1 -0
- package/dist/core/settings-manager-ui-accessors.d.ts +44 -0
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -0
- package/dist/core/settings-manager-ui-accessors.js +208 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -0
- package/dist/core/settings-manager.d.ts +6 -321
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +5 -1060
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-merge.d.ts +4 -0
- package/dist/core/settings-merge.d.ts.map +1 -0
- package/dist/core/settings-merge.js +26 -0
- package/dist/core/settings-merge.js.map +1 -0
- package/dist/core/settings-storage.d.ts +20 -0
- package/dist/core/settings-storage.d.ts.map +1 -0
- package/dist/core/settings-storage.js +100 -0
- package/dist/core/settings-storage.js.map +1 -0
- package/dist/core/settings-types.d.ts +123 -0
- package/dist/core/settings-types.d.ts.map +1 -0
- package/dist/core/settings-types.js +2 -0
- package/dist/core/settings-types.js.map +1 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +7 -0
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +0 -5
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +10 -11
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff-preserve.d.ts +18 -0
- package/dist/core/tools/edit-diff-preserve.d.ts.map +1 -0
- package/dist/core/tools/edit-diff-preserve.js +85 -0
- package/dist/core/tools/edit-diff-preserve.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +3 -2
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +15 -18
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/index.d.ts +0 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +0 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/todos-execute.d.ts +5 -0
- package/dist/core/tools/todos-execute.d.ts.map +1 -0
- package/dist/core/tools/todos-execute.js +200 -0
- package/dist/core/tools/todos-execute.js.map +1 -0
- package/dist/core/tools/todos-locks.d.ts +4 -0
- package/dist/core/tools/todos-locks.d.ts.map +1 -0
- package/dist/core/tools/todos-locks.js +80 -0
- package/dist/core/tools/todos-locks.js.map +1 -0
- package/dist/core/tools/todos-model.d.ts +21 -0
- package/dist/core/tools/todos-model.d.ts.map +1 -0
- package/dist/core/tools/todos-model.js +71 -0
- package/dist/core/tools/todos-model.js.map +1 -0
- package/dist/core/tools/todos-mutations.d.ts +6 -0
- package/dist/core/tools/todos-mutations.d.ts.map +1 -0
- package/dist/core/tools/todos-mutations.js +85 -0
- package/dist/core/tools/todos-mutations.js.map +1 -0
- package/dist/core/tools/todos-paths.d.ts +5 -0
- package/dist/core/tools/todos-paths.d.ts.map +1 -0
- package/dist/core/tools/todos-paths.js +25 -0
- package/dist/core/tools/todos-paths.js.map +1 -0
- package/dist/core/tools/todos-render.d.ts +10 -0
- package/dist/core/tools/todos-render.d.ts.map +1 -0
- package/dist/core/tools/todos-render.js +159 -0
- package/dist/core/tools/todos-render.js.map +1 -0
- package/dist/core/tools/todos-storage.d.ts +9 -0
- package/dist/core/tools/todos-storage.d.ts.map +1 -0
- package/dist/core/tools/todos-storage.js +183 -0
- package/dist/core/tools/todos-storage.js.map +1 -0
- package/dist/core/tools/todos-types.d.ts +46 -0
- package/dist/core/tools/todos-types.d.ts.map +1 -0
- package/dist/core/tools/todos-types.js +27 -0
- package/dist/core/tools/todos-types.js.map +1 -0
- package/dist/core/tools/todos.d.ts +12 -32
- package/dist/core/tools/todos.d.ts.map +1 -1
- package/dist/core/tools/todos.js +7 -893
- package/dist/core/tools/todos.js.map +1 -1
- package/dist/index-extensions.d.ts +3 -0
- package/dist/index-extensions.d.ts.map +1 -0
- package/dist/index-extensions.js +2 -0
- package/dist/index-extensions.js.map +1 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/main-app-mode.d.ts +15 -0
- package/dist/main-app-mode.d.ts.map +1 -0
- package/dist/main-app-mode.js +51 -0
- package/dist/main-app-mode.js.map +1 -0
- package/dist/main-session-options.d.ts +12 -0
- package/dist/main-session-options.d.ts.map +1 -0
- package/dist/main-session-options.js +87 -0
- package/dist/main-session-options.js.map +1 -0
- package/dist/main-session.d.ts +9 -0
- package/dist/main-session.d.ts.map +1 -0
- package/dist/main-session.js +188 -0
- package/dist/main-session.js.map +1 -0
- package/dist/main-stdio.d.ts +12 -0
- package/dist/main-stdio.d.ts.map +1 -0
- package/dist/main-stdio.js +68 -0
- package/dist/main-stdio.js.map +1 -0
- package/dist/main.d.ts +2 -3
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +11 -388
- package/dist/main.js.map +1 -1
- package/dist/migrations-config-values.d.ts +9 -0
- package/dist/migrations-config-values.d.ts.map +1 -0
- package/dist/migrations-config-values.js +298 -0
- package/dist/migrations-config-values.js.map +1 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +2 -296
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +0 -7
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts +9 -0
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-actions.js +244 -0
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-editor.d.ts +18 -0
- package/dist/modes/interactive/components/chat-session-host-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-editor.js +165 -0
- package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-events.d.ts +5 -0
- package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-events.js +200 -0
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +13 -0
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-rendering.js +185 -0
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +13 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.js +101 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +53 -0
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-state.js +42 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-types.d.ts +63 -0
- package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-types.js +2 -0
- package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-utils.d.ts +28 -0
- package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host-utils.js +103 -0
- package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts +6 -129
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +50 -1022
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.d.ts +65 -0
- package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector-list.js +458 -0
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +3 -58
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +2 -457
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-delete.d.ts +10 -0
- package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-delete.js +40 -0
- package/dist/modes/interactive/components/session-selector-delete.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-header.d.ts +33 -0
- package/dist/modes/interactive/components/session-selector-header.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-header.js +117 -0
- package/dist/modes/interactive/components/session-selector-header.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-list.d.ts +49 -0
- package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-list.js +307 -0
- package/dist/modes/interactive/components/session-selector-list.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-tree.d.ts +25 -0
- package/dist/modes/interactive/components/session-selector-tree.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-tree.js +53 -0
- package/dist/modes/interactive/components/session-selector-tree.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-types.d.ts +4 -0
- package/dist/modes/interactive/components/session-selector-types.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-types.js +2 -0
- package/dist/modes/interactive/components/session-selector-types.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-utils.d.ts +4 -0
- package/dist/modes/interactive/components/session-selector-utils.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-utils.js +37 -0
- package/dist/modes/interactive/components/session-selector-utils.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +3 -49
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +5 -542
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts +3 -0
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js +84 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector-items.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector-items.js +211 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector-options.d.ts +6 -0
- package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector-options.js +14 -0
- package/dist/modes/interactive/components/settings-selector-options.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts +44 -0
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector-submenus.js +228 -0
- package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector-types.d.ts +67 -0
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector-types.js +2 -0
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +2 -63
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +5 -538
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-component.d.ts +21 -0
- package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector-component.js +80 -0
- package/dist/modes/interactive/components/tree-selector-component.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector-content.d.ts +8 -0
- package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector-content.js +263 -0
- package/dist/modes/interactive/components/tree-selector-content.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector-help.d.ts +16 -0
- package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector-help.js +103 -0
- package/dist/modes/interactive/components/tree-selector-help.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector-label-input.d.ts +16 -0
- package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector-label-input.js +46 -0
- package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector-list.d.ts +33 -0
- package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector-list.js +336 -0
- package/dist/modes/interactive/components/tree-selector-list.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector-model.d.ts +7 -0
- package/dist/modes/interactive/components/tree-selector-model.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector-model.js +358 -0
- package/dist/modes/interactive/components/tree-selector-model.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector-types.d.ts +57 -0
- package/dist/modes/interactive/components/tree-selector-types.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector-types.js +6 -0
- package/dist/modes/interactive/components/tree-selector-types.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector-viewport.d.ts +10 -0
- package/dist/modes/interactive/components/tree-selector-viewport.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector-viewport.js +32 -0
- package/dist/modes/interactive/components/tree-selector-viewport.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +2 -88
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +1 -1200
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.d.ts +2 -0
- package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-agent-events.js +370 -0
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -0
- package/dist/modes/interactive/interactive-auth-login.d.ts +2 -0
- package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-auth-login.js +214 -0
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -0
- package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -0
- package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-auth-routing.js +128 -0
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -0
- package/dist/modes/interactive/interactive-autocomplete.d.ts +2 -0
- package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-autocomplete.js +140 -0
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -0
- package/dist/modes/interactive/interactive-bash-compact.d.ts +2 -0
- package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-bash-compact.js +112 -0
- package/dist/modes/interactive/interactive-bash-compact.js.map +1 -0
- package/dist/modes/interactive/interactive-editor-actions.d.ts +2 -0
- package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-editor-actions.js +131 -0
- package/dist/modes/interactive/interactive-editor-actions.js.map +1 -0
- package/dist/modes/interactive/interactive-extension-context.d.ts +2 -0
- package/dist/modes/interactive/interactive-extension-context.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-extension-context.js +159 -0
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -0
- package/dist/modes/interactive/interactive-extension-custom-ui.d.ts +2 -0
- package/dist/modes/interactive/interactive-extension-custom-ui.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-extension-custom-ui.js +208 -0
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -0
- package/dist/modes/interactive/interactive-extension-dialogs.d.ts +2 -0
- package/dist/modes/interactive/interactive-extension-dialogs.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-extension-dialogs.js +162 -0
- package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -0
- package/dist/modes/interactive/interactive-extension-runtime.d.ts +2 -0
- package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-extension-runtime.js +179 -0
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -0
- package/dist/modes/interactive/interactive-extension-widgets.d.ts +2 -0
- package/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-extension-widgets.js +113 -0
- package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -0
- package/dist/modes/interactive/interactive-hotkeys-debug.d.ts +2 -0
- package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-hotkeys-debug.js +186 -0
- package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -0
- package/dist/modes/interactive/interactive-input-handling.d.ts +2 -0
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-input-handling.js +275 -0
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts +103 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode-base.js +130 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -0
- package/dist/modes/interactive/interactive-mode-deps.d.ts +81 -0
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode-deps.js +74 -0
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -0
- package/dist/modes/interactive/interactive-mode-helpers.d.ts +21 -0
- package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode-helpers.js +77 -0
- package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -0
- package/dist/modes/interactive/interactive-mode-surface.d.ts +313 -0
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode-surface.js +2 -0
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -0
- package/dist/modes/interactive/interactive-mode-types.d.ts +29 -0
- package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode-types.js +2 -0
- package/dist/modes/interactive/interactive-mode-types.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +30 -404
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +29 -5260
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.d.ts +2 -0
- package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-model-routing.js +269 -0
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -0
- package/dist/modes/interactive/interactive-process-lifecycle.d.ts +2 -0
- package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-process-lifecycle.js +189 -0
- package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -0
- package/dist/modes/interactive/interactive-queueing.d.ts +2 -0
- package/dist/modes/interactive/interactive-queueing.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-queueing.js +163 -0
- package/dist/modes/interactive/interactive-queueing.js.map +1 -0
- package/dist/modes/interactive/interactive-render-chat.d.ts +2 -0
- package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-render-chat.js +170 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -0
- package/dist/modes/interactive/interactive-resource-disclosure.d.ts +2 -0
- package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-resource-disclosure.js +101 -0
- package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -0
- package/dist/modes/interactive/interactive-resource-paths.d.ts +2 -0
- package/dist/modes/interactive/interactive-resource-paths.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-resource-paths.js +228 -0
- package/dist/modes/interactive/interactive-resource-paths.js.map +1 -0
- package/dist/modes/interactive/interactive-resource-rendering.d.ts +2 -0
- package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-resource-rendering.js +181 -0
- package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -0
- package/dist/modes/interactive/interactive-selectors.d.ts +2 -0
- package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-selectors.js +198 -0
- package/dist/modes/interactive/interactive-selectors.js.map +1 -0
- package/dist/modes/interactive/interactive-session-routing.d.ts +2 -0
- package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-session-routing.js +232 -0
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -0
- package/dist/modes/interactive/interactive-session-runtime.d.ts +2 -0
- package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-session-runtime.js +131 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -0
- package/dist/modes/interactive/interactive-slash-commands.d.ts +2 -0
- package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-slash-commands.js +338 -0
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -0
- package/dist/modes/interactive/interactive-startup.d.ts +2 -0
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-startup.js +348 -0
- package/dist/modes/interactive/interactive-startup.js.map +1 -0
- package/dist/modes/interactive/model-search.d.ts +5 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -1
- package/dist/modes/interactive/model-search.js +9 -0
- package/dist/modes/interactive/model-search.js.map +1 -1
- package/dist/modes/interactive/theme/color-utils.d.ts +20 -0
- package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -0
- package/dist/modes/interactive/theme/color-utils.js +204 -0
- package/dist/modes/interactive/theme/color-utils.js.map +1 -0
- package/dist/modes/interactive/theme/export-colors.d.ts +19 -0
- package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -0
- package/dist/modes/interactive/theme/export-colors.js +69 -0
- package/dist/modes/interactive/theme/export-colors.js.map +1 -0
- package/dist/modes/interactive/theme/global-theme.d.ts +12 -0
- package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/global-theme.js +150 -0
- package/dist/modes/interactive/theme/global-theme.js.map +1 -0
- package/dist/modes/interactive/theme/terminal-detection.d.ts +30 -0
- package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -0
- package/dist/modes/interactive/theme/terminal-detection.js +89 -0
- package/dist/modes/interactive/theme/terminal-detection.js.map +1 -0
- package/dist/modes/interactive/theme/theme-class.d.ts +30 -0
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-class.js +83 -0
- package/dist/modes/interactive/theme/theme-class.js.map +1 -0
- package/dist/modes/interactive/theme/theme-loading.d.ts +17 -0
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-loading.js +155 -0
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -0
- package/dist/modes/interactive/theme/theme-parse.d.ts +5 -0
- package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-parse.js +52 -0
- package/dist/modes/interactive/theme/theme-parse.js.map +1 -0
- package/dist/modes/interactive/theme/theme-schema.d.ts +255 -0
- package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-schema.js +78 -0
- package/dist/modes/interactive/theme/theme-schema.js.map +1 -0
- package/dist/modes/interactive/theme/theme.d.ts +6 -108
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +6 -1065
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/theme/tui-theme.d.ts +15 -0
- package/dist/modes/interactive/theme/tui-theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/tui-theme.js +199 -0
- package/dist/modes/interactive/theme/tui-theme.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +1 -61
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +1 -72
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts +14 -0
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-command-handler.js +226 -0
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -0
- package/dist/modes/rpc/rpc-extension-ui.d.ts +15 -0
- package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-extension-ui.js +196 -0
- package/dist/modes/rpc/rpc-extension-ui.js.map +1 -0
- package/dist/modes/rpc/rpc-input.d.ts +12 -0
- package/dist/modes/rpc/rpc-input.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-input.js +54 -0
- package/dist/modes/rpc/rpc-input.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +43 -607
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-responses.d.ts +8 -0
- package/dist/modes/rpc/rpc-responses.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-responses.js +27 -0
- package/dist/modes/rpc/rpc-responses.js.map +1 -0
- package/dist/modes/rpc/rpc-session-binding.d.ts +25 -0
- package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-session-binding.js +70 -0
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -0
- package/dist/package-manager-cli-parser.d.ts +28 -0
- package/dist/package-manager-cli-parser.d.ts.map +1 -0
- package/dist/package-manager-cli-parser.js +269 -0
- package/dist/package-manager-cli-parser.js.map +1 -0
- package/dist/package-manager-cli.d.ts +0 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +2 -267
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +10 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +12 -5
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/version-check.d.ts +1 -0
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +17 -0
- package/dist/utils/version-check.js.map +1 -1
- package/docs/custom-provider.md +4 -3
- package/docs/development.md +4 -0
- package/docs/models.md +3 -2
- package/docs/packages.md +2 -2
- package/docs/quickstart.md +1 -1
- package/docs/sdk.md +2 -40
- package/docs/security.md +1 -1
- package/docs/workflows.md +246 -179
- package/examples/extensions/custom-provider-anthropic/index.ts +1 -106
- package/examples/extensions/gondolin/index.ts +0 -23
- package/examples/extensions/overlay-qa-animation-components.ts +255 -0
- package/examples/extensions/overlay-qa-focus-components.ts +222 -0
- package/examples/extensions/overlay-qa-position-components.ts +433 -0
- package/examples/extensions/overlay-qa-shared.ts +37 -0
- package/examples/extensions/overlay-qa-streaming-input-components.ts +205 -0
- package/examples/extensions/overlay-qa-tests.ts +17 -1156
- package/examples/extensions/overlay-qa-toggle-passive-components.ts +169 -0
- package/examples/extensions/space-invaders.ts +0 -60
- package/examples/extensions/subagent/display.ts +148 -0
- package/examples/extensions/subagent/index.ts +11 -858
- package/examples/extensions/subagent/render.ts +383 -0
- package/examples/extensions/subagent/runner.ts +252 -0
- package/examples/extensions/subagent/schemas.ts +59 -0
- package/examples/extensions/subagent/types.ts +36 -0
- package/examples/extensions/tic-tac-toe-instructions.ts +65 -0
- package/examples/extensions/tic-tac-toe-rendering.ts +414 -0
- package/examples/extensions/tic-tac-toe-state.ts +158 -0
- package/examples/extensions/tic-tac-toe.ts +92 -754
- package/examples/rpc-extension-ui-components.ts +189 -0
- package/examples/rpc-extension-ui.ts +2 -179
- package/package.json +7 -7
- package/dist/builtin/workflows/src/workflows/define-workflow.ts +0 -277
- package/dist/core/tools/bash-policy.d.ts +0 -62
- package/dist/core/tools/bash-policy.d.ts.map +0 -1
- package/dist/core/tools/bash-policy.js +0 -1069
- package/dist/core/tools/bash-policy.js.map +0 -1
|
@@ -17,1391 +17,9 @@
|
|
|
17
17
|
* - DESIGN.md §4 (Elevation), §5 (Components)
|
|
18
18
|
*/
|
|
19
19
|
import type { Component } from "@earendil-works/pi-tui";
|
|
20
|
-
import {
|
|
21
|
-
Key,
|
|
22
|
-
matchesKey,
|
|
23
|
-
sliceColumns,
|
|
24
|
-
truncateToWidth,
|
|
25
|
-
visibleWidth,
|
|
26
|
-
} from "./text-helpers.js";
|
|
27
|
-
import type { Store } from "../shared/store.js";
|
|
28
|
-
import type {
|
|
29
|
-
PendingPrompt,
|
|
30
|
-
StageSnapshot,
|
|
31
|
-
StoreSnapshot,
|
|
32
|
-
RunSnapshot,
|
|
33
|
-
} from "../shared/store-types.js";
|
|
34
|
-
import type { GraphTheme } from "./graph-theme.js";
|
|
35
|
-
import type { SwitcherState } from "./switcher.js";
|
|
36
|
-
import type { LayoutNode } from "./layout.js";
|
|
37
|
-
import {
|
|
38
|
-
expandWorkflowGraph,
|
|
39
|
-
expandedStageTarget,
|
|
40
|
-
type ExpandedWorkflowGraph,
|
|
41
|
-
type ExpandedWorkflowStage,
|
|
42
|
-
} from "../shared/expanded-workflow-graph.js";
|
|
43
|
-
import { computeLayout, NODE_W, NODE_H } from "./layout.js";
|
|
44
|
-
import { renderHeader, renderOutlinePill } from "./header.js";
|
|
45
|
-
import { renderNodeCard } from "./node-card.js";
|
|
46
|
-
import { renderSwitcher, filterStages } from "./switcher.js";
|
|
47
|
-
import { renderToasts, createToastManager } from "./toast.js";
|
|
48
|
-
import { hexToAnsi, hexBg, RESET, BOLD } from "./color-utils.js";
|
|
49
|
-
import { GraphCanvas } from "./graph-canvas.js";
|
|
50
|
-
import {
|
|
51
|
-
createPromptCardState,
|
|
52
|
-
defaultResponseFor,
|
|
53
|
-
handlePromptCardInput,
|
|
54
|
-
renderPromptCard,
|
|
55
|
-
type PromptCardState,
|
|
56
|
-
} from "./prompt-card.js";
|
|
57
|
-
import { isKeybindingsLike, type KeybindingsLike } from "./keybindings-adapter.js";
|
|
20
|
+
import { GraphViewInputController } from "./graph-view-input.js";
|
|
58
21
|
|
|
59
|
-
export type GraphViewMode
|
|
22
|
+
export type { GraphViewMode, GraphViewOpts } from "./graph-view-types.js";
|
|
60
23
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
runId: string | null;
|
|
64
|
-
store: Store;
|
|
65
|
-
graphTheme: GraphTheme;
|
|
66
|
-
onClose?: () => void;
|
|
67
|
-
/**
|
|
68
|
-
* Invoked when the user presses `q` inside the pane on an in-flight
|
|
69
|
-
* run. Fires immediately (no confirm) per the toggle-driven UX:
|
|
70
|
-
* `h` hides without quitting; `q` is reserved for terminating the
|
|
71
|
-
* current run.
|
|
72
|
-
*/
|
|
73
|
-
onKill?: (runId: string) => void;
|
|
74
|
-
/**
|
|
75
|
-
* Invoked when the user presses `h` inside the pane. Hides without
|
|
76
|
-
* unmounting (overlay-adapter calls `setHidden(true)`). Re-open via
|
|
77
|
-
* `F2` or `/workflow connect <id>`.
|
|
78
|
-
*/
|
|
79
|
-
onHide?: () => void;
|
|
80
|
-
/**
|
|
81
|
-
* Invoked when the user submits (or skips) a HIL prompt rendered inside
|
|
82
|
-
* the pane. The callback typically calls `store.resolvePendingPrompt`;
|
|
83
|
-
* GraphView itself stays UI-only.
|
|
84
|
-
*/
|
|
85
|
-
onPromptResolve?: (runId: string, promptId: string, response: unknown) => void;
|
|
86
|
-
/**
|
|
87
|
-
* Invoked when the user presses Enter on a focused graph node — the
|
|
88
|
-
* parent attach shell swaps the popup interior to that stage's chat
|
|
89
|
-
* pane. When unset, Enter is a no-op (preserves graph mode).
|
|
90
|
-
*/
|
|
91
|
-
onStageAttach?: (runId: string, stageId: string) => void;
|
|
92
|
-
/**
|
|
93
|
-
* Invoked when the user presses `Ctrl+D` while in graph mode. Mirrors
|
|
94
|
-
* the in-chat back affordance: detaches the whole popup (host calls
|
|
95
|
-
* `setHidden(true)`). Falls back to `onHide` when unset.
|
|
96
|
-
*/
|
|
97
|
-
onDetach?: () => void;
|
|
98
|
-
/**
|
|
99
|
-
* When provided, GraphView restores focus to this stage on construction
|
|
100
|
-
* — used by the attach shell so returning from the chat lands the
|
|
101
|
-
* cursor on the same node the user just attached to.
|
|
102
|
-
*/
|
|
103
|
-
initialFocusedStageId?: string;
|
|
104
|
-
/**
|
|
105
|
-
* Optional accessor returning the current terminal row count. When
|
|
106
|
-
* present in overlay mode the renderer expands the frame to roughly
|
|
107
|
-
* `viewportRows` lines (clamped to at least the header + statusline
|
|
108
|
-
* budget) so the popup fills the terminal under pi-tui's
|
|
109
|
-
* `width: "100%" / maxHeight: "100%"` geometry. Returning `undefined`
|
|
110
|
-
* falls back to the constant `OVERLAY_LINE_COUNT` rectangle.
|
|
111
|
-
*/
|
|
112
|
-
getViewportRows?: () => number | undefined;
|
|
113
|
-
/**
|
|
114
|
-
* Invoked on each animation tick (~10 FPS) so the host can call
|
|
115
|
-
* `tui.requestRender()`. Only wired in `overlay` mode; supplying it
|
|
116
|
-
* starts the tick loop in the constructor so duration counters and
|
|
117
|
-
* the running-stage border pulse refresh without requiring a key
|
|
118
|
-
* press. The host is responsible for gating the underlying
|
|
119
|
-
* `requestRender` on overlay visibility / focus (see
|
|
120
|
-
* `overlay-adapter.ts`).
|
|
121
|
-
*/
|
|
122
|
-
requestRender?: () => void;
|
|
123
|
-
/** Host Pi keybindings manager used by run-level prompt cards. */
|
|
124
|
-
piKeybindings?: unknown;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const HINT_KEYS: Array<{ key: string; label: string }> = [
|
|
128
|
-
{ key: "↑↓←→", label: "navigate" },
|
|
129
|
-
{ key: "↵", label: "attach" },
|
|
130
|
-
{ key: "/", label: "stages" },
|
|
131
|
-
{ key: "ctrl+d", label: "detach" },
|
|
132
|
-
{ key: "q", label: "kill" },
|
|
133
|
-
];
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Bottom mode pill. The status bar mirrors the top header band: a
|
|
137
|
-
* three-row chrome strip with an outlined pill flush-left and hints
|
|
138
|
-
* flowing right of it on the centre row.
|
|
139
|
-
*/
|
|
140
|
-
const MODE_PILL_LABEL = "GRAPH";
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Fixed line count emitted by `_renderOverlay`. pi-tui paints the
|
|
144
|
-
* overlay in the same buffer as the chat, so a *variable* line count
|
|
145
|
-
* causes the chat to scroll every time the focused-stage section grows
|
|
146
|
-
* or shrinks — that's exactly the duplicate-rows bug we hit when
|
|
147
|
-
* navigating with j/k. Padding to a constant height keeps the overlay
|
|
148
|
-
* a stable rectangle that pi-tui can diff cell-by-cell.
|
|
149
|
-
*
|
|
150
|
-
* Mirrors the doom-overlay reference extension, which always emits the
|
|
151
|
-
* same number of lines per frame regardless of game state.
|
|
152
|
-
*/
|
|
153
|
-
const OVERLAY_LINE_COUNT = 32;
|
|
154
|
-
const OVERLAY_VERTICAL_MARGIN_ROWS = 1;
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Animation tick period. Overlay re-renders fire on this cadence so
|
|
158
|
-
* duration counters tick from active elapsed time (freezing while paused)
|
|
159
|
-
* and the running-stage border lerps between `borderDim` and
|
|
160
|
-
* `warning` without a key press. The host-supplied `requestRender`
|
|
161
|
-
* gate prevents work while the overlay is hidden or unfocused.
|
|
162
|
-
*/
|
|
163
|
-
const ANIMATION_TICK_MS = 100;
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Full lerp period of `pulseT` for running-stage borders, in ms.
|
|
167
|
-
* `pulsePhase ∈ [0, 1)` cycles every `PULSE_PERIOD_MS` so the sine
|
|
168
|
-
* eased lerp inside `pickBorder` traces one full breath per cycle.
|
|
169
|
-
*/
|
|
170
|
-
const PULSE_PERIOD_MS = 2000;
|
|
171
|
-
const GRAPH_SCROLL_STEP_ROWS = 4;
|
|
172
|
-
|
|
173
|
-
export class GraphView implements Component {
|
|
174
|
-
private mode: GraphViewMode;
|
|
175
|
-
private runId: string | null;
|
|
176
|
-
private store: Store;
|
|
177
|
-
private graphTheme: GraphTheme;
|
|
178
|
-
private onClose?: () => void;
|
|
179
|
-
private onKill?: (runId: string) => void;
|
|
180
|
-
private onHide?: () => void;
|
|
181
|
-
private onPromptResolve?: (runId: string, promptId: string, response: unknown) => void;
|
|
182
|
-
private onStageAttach?: (runId: string, stageId: string) => void;
|
|
183
|
-
private onDetach?: () => void;
|
|
184
|
-
private initialFocusedStageId?: string;
|
|
185
|
-
private getViewportRows?: () => number | undefined;
|
|
186
|
-
private requestRender?: () => void;
|
|
187
|
-
private piKeybindings?: unknown;
|
|
188
|
-
|
|
189
|
-
/** Active HIL prompt state, set when `_rebuildLayout` sees a new prompt id. */
|
|
190
|
-
private promptState: PromptCardState | null = null;
|
|
191
|
-
|
|
192
|
-
private focusedIndex = 0;
|
|
193
|
-
private switcherOpen = false;
|
|
194
|
-
private switcherState: SwitcherState = { query: "", selectedIndex: 0 };
|
|
195
|
-
private toastManager = createToastManager();
|
|
196
|
-
private detailsExpanded = true;
|
|
197
|
-
private cachedLayout: LayoutNode[] = [];
|
|
198
|
-
private expandedGraph: ExpandedWorkflowGraph = { stages: [], targets: new Map() };
|
|
199
|
-
private currentSnapshot: StoreSnapshot | null = null;
|
|
200
|
-
private graphScrollOffset = 0;
|
|
201
|
-
private graphScrollColOffset = 0;
|
|
202
|
-
private pendingEnsureFocusedVisible = true;
|
|
203
|
-
private lastAutoFocusedAwaitingInputKey: string | null = null;
|
|
204
|
-
|
|
205
|
-
private _intervalId: ReturnType<typeof setInterval> | null = null;
|
|
206
|
-
private _lastGTime: number | null = null;
|
|
207
|
-
private _unsubscribe: (() => void) | null = null;
|
|
208
|
-
|
|
209
|
-
constructor(opts: GraphViewOpts) {
|
|
210
|
-
this.mode = opts.mode;
|
|
211
|
-
this.runId = opts.runId;
|
|
212
|
-
this.store = opts.store;
|
|
213
|
-
this.graphTheme = opts.graphTheme;
|
|
214
|
-
this.onClose = opts.onClose;
|
|
215
|
-
this.onKill = opts.onKill;
|
|
216
|
-
this.onHide = opts.onHide;
|
|
217
|
-
this.onPromptResolve = opts.onPromptResolve;
|
|
218
|
-
this.onStageAttach = opts.onStageAttach;
|
|
219
|
-
this.onDetach = opts.onDetach;
|
|
220
|
-
this.initialFocusedStageId = opts.initialFocusedStageId;
|
|
221
|
-
this.getViewportRows = opts.getViewportRows;
|
|
222
|
-
this.requestRender = opts.requestRender;
|
|
223
|
-
this.piKeybindings = opts.piKeybindings;
|
|
224
|
-
|
|
225
|
-
this._unsubscribe = this.store.subscribe((snap) => {
|
|
226
|
-
this.currentSnapshot = snap;
|
|
227
|
-
this._rebuildLayout();
|
|
228
|
-
});
|
|
229
|
-
this.currentSnapshot = this.store.snapshot();
|
|
230
|
-
this._rebuildLayout();
|
|
231
|
-
|
|
232
|
-
// Animation tick: while the overlay is mounted, fire a render
|
|
233
|
-
// request every `ANIMATION_TICK_MS` so the duration counter on
|
|
234
|
-
// each running stage advances and the border-pulse lerp animates
|
|
235
|
-
// even when the user isn't pressing keys. Only overlay mode owns
|
|
236
|
-
// visible animations; widget mode renders a single status line
|
|
237
|
-
// that never needs a steady cadence. The host's `requestRender`
|
|
238
|
-
// is responsible for gating on overlay visibility / focus — see
|
|
239
|
-
// `overlay-adapter.ts` and `workflow-attach-pane.ts`. With that
|
|
240
|
-
// gate in place the previous tmux scrollback "ghost overlay"
|
|
241
|
-
// failure mode does not apply: pi-tui owns the screen buffer
|
|
242
|
-
// and diff-blits frames in place.
|
|
243
|
-
if (this.mode === "overlay" && this.requestRender) {
|
|
244
|
-
this._intervalId = setInterval(() => {
|
|
245
|
-
this.requestRender?.();
|
|
246
|
-
}, ANIMATION_TICK_MS);
|
|
247
|
-
(this._intervalId as { unref?: () => void }).unref?.();
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
private _rebuildLayout(): void {
|
|
252
|
-
const run = this._getCurrentRun();
|
|
253
|
-
if (!run) {
|
|
254
|
-
this.cachedLayout = [];
|
|
255
|
-
this.expandedGraph = { stages: [], targets: new Map() };
|
|
256
|
-
this.focusedIndex = 0;
|
|
257
|
-
this.graphScrollOffset = 0;
|
|
258
|
-
this.graphScrollColOffset = 0;
|
|
259
|
-
this.pendingEnsureFocusedVisible = true;
|
|
260
|
-
this.promptState = null;
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
const previousFocusedStageId = this.cachedLayout[this.focusedIndex]?.stage.id;
|
|
265
|
-
const graphStages = this._graphStages(run);
|
|
266
|
-
const nextLayout = computeLayout(graphStages, { orientation: "vertical" });
|
|
267
|
-
this.cachedLayout = nextLayout;
|
|
268
|
-
|
|
269
|
-
let focusNeedsReveal = this.pendingEnsureFocusedVisible;
|
|
270
|
-
// One-shot: if the host passed `initialFocusedStageId`, snap the
|
|
271
|
-
// cursor to that stage now that the layout exists. The attach shell
|
|
272
|
-
// uses this when swapping back from chat mode so the focus lands on
|
|
273
|
-
// the same node the user just attached to.
|
|
274
|
-
if (this.initialFocusedStageId !== undefined) {
|
|
275
|
-
const idx = this.cachedLayout.findIndex(
|
|
276
|
-
(n) =>
|
|
277
|
-
n.stage.id === this.initialFocusedStageId ||
|
|
278
|
-
expandedStageTarget(this.expandedGraph, n.stage.id)?.stageId === this.initialFocusedStageId,
|
|
279
|
-
);
|
|
280
|
-
if (idx >= 0 && idx !== this.focusedIndex) {
|
|
281
|
-
this.focusedIndex = idx;
|
|
282
|
-
focusNeedsReveal = true;
|
|
283
|
-
}
|
|
284
|
-
this.initialFocusedStageId = undefined;
|
|
285
|
-
} else if (previousFocusedStageId !== undefined) {
|
|
286
|
-
const idx = this.cachedLayout.findIndex(
|
|
287
|
-
(n) => n.stage.id === previousFocusedStageId,
|
|
288
|
-
);
|
|
289
|
-
if (idx >= 0 && idx !== this.focusedIndex) {
|
|
290
|
-
this.focusedIndex = idx;
|
|
291
|
-
focusNeedsReveal = true;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
const awaitingTarget = this._awaitingInputFocusTarget();
|
|
296
|
-
if (awaitingTarget) {
|
|
297
|
-
if (awaitingTarget.key !== this.lastAutoFocusedAwaitingInputKey) {
|
|
298
|
-
this.focusedIndex = awaitingTarget.index;
|
|
299
|
-
focusNeedsReveal = true;
|
|
300
|
-
this.lastAutoFocusedAwaitingInputKey = awaitingTarget.key;
|
|
301
|
-
}
|
|
302
|
-
} else {
|
|
303
|
-
this.lastAutoFocusedAwaitingInputKey = null;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
if (this.cachedLayout.length === 0) {
|
|
307
|
-
this.focusedIndex = 0;
|
|
308
|
-
this.graphScrollOffset = 0;
|
|
309
|
-
this.graphScrollColOffset = 0;
|
|
310
|
-
} else if (this.focusedIndex >= this.cachedLayout.length) {
|
|
311
|
-
this.focusedIndex = this.cachedLayout.length - 1;
|
|
312
|
-
focusNeedsReveal = true;
|
|
313
|
-
}
|
|
314
|
-
this.pendingEnsureFocusedVisible = focusNeedsReveal;
|
|
315
|
-
this._syncPromptState(run.pendingPrompt);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
private _awaitingInputFocusTarget(): { index: number; key: string } | null {
|
|
319
|
-
let newest: { index: number; key: string; createdAt: number } | null = null;
|
|
320
|
-
for (let index = 0; index < this.cachedLayout.length; index++) {
|
|
321
|
-
const stage = this.cachedLayout[index]!.stage;
|
|
322
|
-
const target = this._awaitingInputKey(stage);
|
|
323
|
-
if (!target) continue;
|
|
324
|
-
if (!newest || target.createdAt >= newest.createdAt) {
|
|
325
|
-
newest = { index, key: target.key, createdAt: target.createdAt };
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
return newest ? { index: newest.index, key: newest.key } : null;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
private _awaitingInputKey(stage: StageSnapshot): { key: string; createdAt: number } | null {
|
|
332
|
-
const target = expandedStageTarget(this.expandedGraph, stage.id);
|
|
333
|
-
const prefix = target ? `${target.runId}:${target.stageId}` : stage.id;
|
|
334
|
-
if (stage.pendingPrompt) {
|
|
335
|
-
return {
|
|
336
|
-
key: `prompt:${prefix}:${stage.pendingPrompt.id}`,
|
|
337
|
-
createdAt: stage.pendingPrompt.createdAt,
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
|
-
if (stage.inputRequest) {
|
|
341
|
-
return {
|
|
342
|
-
key: `input-request:${prefix}:${stage.inputRequest.id}`,
|
|
343
|
-
createdAt: stage.inputRequest.createdAt,
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
if (stage.status === "awaiting_input") {
|
|
347
|
-
return {
|
|
348
|
-
key: `awaiting:${prefix}:${stage.awaitingInputSince ?? "active"}`,
|
|
349
|
-
createdAt: stage.awaitingInputSince ?? stage.startedAt ?? 0,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
return null;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
private _graphStages(run: RunSnapshot): ExpandedWorkflowStage[] {
|
|
356
|
-
this.expandedGraph = this.currentSnapshot
|
|
357
|
-
? expandWorkflowGraph(this.currentSnapshot, run.id)
|
|
358
|
-
: { stages: [], targets: new Map() };
|
|
359
|
-
const stages = [...this.expandedGraph.stages];
|
|
360
|
-
const hasStagePrompt = stages.some((stage) =>
|
|
361
|
-
stage.pendingPrompt !== undefined ||
|
|
362
|
-
(stage.status === "awaiting_input" && stage.promptFootprint?.kind === "custom")
|
|
363
|
-
);
|
|
364
|
-
if (!hasStagePrompt) return stages;
|
|
365
|
-
return stages.filter((stage) => {
|
|
366
|
-
// Prompt-node injection can leave unstarted author stages in the store
|
|
367
|
-
// while the prompt node owns focus; hide only these inert placeholders.
|
|
368
|
-
const isUnstartedPlaceholder =
|
|
369
|
-
stage.status === "pending" &&
|
|
370
|
-
stage.startedAt === undefined &&
|
|
371
|
-
stage.pendingPrompt === undefined &&
|
|
372
|
-
stage.toolEvents.length === 0;
|
|
373
|
-
return !isUnstartedPlaceholder;
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
/**
|
|
378
|
-
* Mirror the run's `pendingPrompt` into a UI working state. A new prompt
|
|
379
|
-
* id resets the state (caret + buffer); a cleared prompt drops the state
|
|
380
|
-
* so the card disappears.
|
|
381
|
-
*/
|
|
382
|
-
private _syncPromptState(prompt: PendingPrompt | undefined): void {
|
|
383
|
-
if (!prompt) {
|
|
384
|
-
this.promptState = null;
|
|
385
|
-
return;
|
|
386
|
-
}
|
|
387
|
-
if (!this.promptState || this.promptState.prompt.id !== prompt.id) {
|
|
388
|
-
this.promptState = createPromptCardState(prompt);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
private _getCurrentRun(): RunSnapshot | null {
|
|
393
|
-
if (!this.currentSnapshot) return null;
|
|
394
|
-
// Pin to the first run we see so a completed run stays visible after
|
|
395
|
-
// `activeRunId()` clears. Caller can still pass an explicit runId.
|
|
396
|
-
if (this.runId == null) {
|
|
397
|
-
const activeId = this.store.activeRunId();
|
|
398
|
-
if (activeId != null) {
|
|
399
|
-
this.runId = activeId;
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
if (this.runId == null) return null;
|
|
403
|
-
return this.currentSnapshot.runs.find((r) => r.id === this.runId) ?? null;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
/** Render to string lines. width = terminal columns. */
|
|
407
|
-
render(width: number): string[] {
|
|
408
|
-
if (this.mode === "widget") {
|
|
409
|
-
return this._renderWidget(width);
|
|
410
|
-
}
|
|
411
|
-
return this._renderOverlay(width);
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
private _renderWidget(width: number): string[] {
|
|
415
|
-
const run = this._getCurrentRun();
|
|
416
|
-
if (!run) {
|
|
417
|
-
return [`${hexToAnsi(this.graphTheme.dim)}no active workflow${RESET}`];
|
|
418
|
-
}
|
|
419
|
-
const displayStages = this._displayStages(run);
|
|
420
|
-
const headerLines = renderHeader({ ...run, stages: displayStages }, { width, theme: this.graphTheme });
|
|
421
|
-
const counts = this._counts(displayStages);
|
|
422
|
-
const trailer =
|
|
423
|
-
`${hexToAnsi(this.graphTheme.dim)}` +
|
|
424
|
-
`${counts.completed}/${displayStages.length} done` +
|
|
425
|
-
(counts.running > 0 ? ` · ${counts.running} running` : "") +
|
|
426
|
-
(counts.failed > 0 ? ` · ${counts.failed} failed` : "") +
|
|
427
|
-
(counts.blocked > 0 ? ` · ${counts.blocked} blocked` : "") +
|
|
428
|
-
RESET;
|
|
429
|
-
return [...headerLines, ` ${trailer}`];
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
/**
|
|
433
|
-
* Number of rows the overlay frame must paint. Pi-tui anchors the
|
|
434
|
-
* overlay vertically by counting rendered lines, so to truly fill the
|
|
435
|
-
* terminal under `maxHeight: "100%"` the component must emit
|
|
436
|
-
* approximately `terminal.rows` lines. When a host reports fewer
|
|
437
|
-
* than the legacy 32 rows, honour that shorter viewport where the
|
|
438
|
-
* graph chrome can still fit so the bottom status controls are not
|
|
439
|
-
* clipped by pi-tui's overlay max-height slicing. A host that doesn't
|
|
440
|
-
* surface terminal dimensions keeps the previous stable rectangle.
|
|
441
|
-
*/
|
|
442
|
-
private _overlayLineCount(): number {
|
|
443
|
-
const reported = this.getViewportRows?.();
|
|
444
|
-
if (typeof reported !== "number" || !Number.isFinite(reported)) {
|
|
445
|
-
return OVERLAY_LINE_COUNT;
|
|
446
|
-
}
|
|
447
|
-
// Header (3) + one body row + statusline (3) is the absolute
|
|
448
|
-
// minimum useful frame. Margins are dropped automatically at this
|
|
449
|
-
// size by `_overlayVerticalMarginRows`.
|
|
450
|
-
return Math.max(7, Math.floor(reported));
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
/** Rows available for the graph body (between header and statusline). */
|
|
454
|
-
private _overlayBodyRows(lineCount: number): number {
|
|
455
|
-
return Math.max(1, lineCount - 3 /* header */ - 3 /* statusline */);
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
private _overlayVerticalMarginRows(lineCount = this._overlayLineCount()): number {
|
|
459
|
-
return lineCount >= 9 ? OVERLAY_VERTICAL_MARGIN_ROWS : 0;
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
private _overlayPanelLineCount(): number {
|
|
463
|
-
const lineCount = this._overlayLineCount();
|
|
464
|
-
const margins = this._overlayVerticalMarginRows(lineCount) * 2;
|
|
465
|
-
return Math.max(7, lineCount - margins);
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
private _marginRow(width: number): string {
|
|
469
|
-
return " ".repeat(width);
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
private _withVerticalMargins(panelLines: string[], width: number): string[] {
|
|
473
|
-
const expected = this._overlayLineCount();
|
|
474
|
-
const marginRows = this._overlayVerticalMarginRows(expected);
|
|
475
|
-
const panelTarget = this._overlayPanelLineCount();
|
|
476
|
-
const body = panelLines.slice(0, panelTarget);
|
|
477
|
-
while (body.length < panelTarget) body.push(this._blankRow(width));
|
|
478
|
-
const margins = Array.from({ length: marginRows }, () => this._marginRow(width));
|
|
479
|
-
const lines = [...margins, ...body, ...margins];
|
|
480
|
-
if (lines.length > expected) return lines.slice(0, expected);
|
|
481
|
-
while (lines.length < expected) {
|
|
482
|
-
const insertAt = marginRows > 0 ? Math.max(0, lines.length - marginRows) : lines.length;
|
|
483
|
-
lines.splice(insertAt, 0, this._blankRow(width));
|
|
484
|
-
}
|
|
485
|
-
return lines;
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
private _renderOverlay(width: number): string[] {
|
|
489
|
-
const frameWidth = Math.max(40, width);
|
|
490
|
-
const lines: string[] = [];
|
|
491
|
-
const run = this._getCurrentRun();
|
|
492
|
-
|
|
493
|
-
if (!run) {
|
|
494
|
-
return this._renderEmptyState(frameWidth);
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
// 1. Header chrome (3 rows: outline pill + session name + counts).
|
|
498
|
-
lines.push(
|
|
499
|
-
...renderHeader({ ...run, stages: this._displayStages(run) }, { width: frameWidth, theme: this.graphTheme }),
|
|
500
|
-
);
|
|
501
|
-
|
|
502
|
-
// 2. Graph occupies the full body. No section labels, no focused-
|
|
503
|
-
// stage panel — status colour on each card carries that signal.
|
|
504
|
-
const graphLines = this._renderGraph(frameWidth);
|
|
505
|
-
const bodyTarget = this._overlayBodyRows(this._overlayPanelLineCount());
|
|
506
|
-
const visibleGraph = this._visibleGraphLines(
|
|
507
|
-
graphLines,
|
|
508
|
-
frameWidth,
|
|
509
|
-
bodyTarget,
|
|
510
|
-
);
|
|
511
|
-
for (let i = 0; i < visibleGraph.topPad; i++)
|
|
512
|
-
lines.push(this._blankRow(frameWidth));
|
|
513
|
-
for (const line of visibleGraph.lines) {
|
|
514
|
-
lines.push(this._canvasRow(line, frameWidth));
|
|
515
|
-
}
|
|
516
|
-
while (lines.length < 3 + bodyTarget)
|
|
517
|
-
lines.push(this._blankRow(frameWidth));
|
|
518
|
-
if (lines.length > 3 + bodyTarget) lines.length = 3 + bodyTarget;
|
|
519
|
-
|
|
520
|
-
// 3. Switcher overlay — floats over the body when open.
|
|
521
|
-
if (this.switcherOpen) {
|
|
522
|
-
const bodyStart = 3;
|
|
523
|
-
const bodyEnd = 3 + bodyTarget;
|
|
524
|
-
for (let row = bodyStart; row < bodyEnd; row++) {
|
|
525
|
-
lines[row] = this._blankRow(frameWidth);
|
|
526
|
-
}
|
|
527
|
-
const switcherWidth = Math.min(60, Math.max(40, frameWidth - 8));
|
|
528
|
-
const switcherLines = renderSwitcher(this._displayStages(run), this.switcherState, {
|
|
529
|
-
width: switcherWidth,
|
|
530
|
-
theme: this.graphTheme,
|
|
531
|
-
});
|
|
532
|
-
const insertAt = Math.max(bodyStart, bodyStart + Math.min(2, Math.floor((bodyTarget - switcherLines.length) / 3)));
|
|
533
|
-
const switcherLeft = Math.max(2, Math.floor((frameWidth - switcherWidth) / 2));
|
|
534
|
-
for (let i = 0; i < switcherLines.length; i++) {
|
|
535
|
-
const lineIdx = insertAt + i;
|
|
536
|
-
if (lineIdx >= bodyEnd) break;
|
|
537
|
-
const base = lines[lineIdx] ?? this._blankRow(frameWidth);
|
|
538
|
-
const merged = this._overlayCard(base, switcherLines[i]!, switcherLeft, frameWidth);
|
|
539
|
-
if (lineIdx < lines.length) lines[lineIdx] = merged;
|
|
540
|
-
else lines.push(merged);
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
// 4. Pending HIL prompt — floats over the graph body, centred. The
|
|
545
|
-
// chat editor remains free regardless: the overlay is the only
|
|
546
|
-
// surface that interacts with the prompt. When the stage switcher is
|
|
547
|
-
// open it owns the body/input, so hide the prompt card until it closes.
|
|
548
|
-
if (this.promptState && !this.switcherOpen) {
|
|
549
|
-
const cardWidth = Math.min(72, Math.max(40, frameWidth - 6));
|
|
550
|
-
const cardLines = renderPromptCard({
|
|
551
|
-
state: this.promptState,
|
|
552
|
-
theme: this.graphTheme,
|
|
553
|
-
width: cardWidth,
|
|
554
|
-
cursorOn: ((Date.now() / 530) | 0) % 2 === 0,
|
|
555
|
-
});
|
|
556
|
-
const bodyStart = 3;
|
|
557
|
-
const bodyEnd = 3 + bodyTarget;
|
|
558
|
-
const slot = Math.max(
|
|
559
|
-
bodyStart,
|
|
560
|
-
bodyStart + Math.floor((bodyTarget - cardLines.length) / 2),
|
|
561
|
-
);
|
|
562
|
-
const leftPad = Math.max(0, Math.floor((frameWidth - cardWidth) / 2));
|
|
563
|
-
for (let i = 0; i < cardLines.length; i++) {
|
|
564
|
-
const lineIdx = slot + i;
|
|
565
|
-
if (lineIdx >= bodyEnd) break;
|
|
566
|
-
const base = lines[lineIdx] ?? this._blankRow(frameWidth);
|
|
567
|
-
lines[lineIdx] = this._overlayCard(base, cardLines[i]!, leftPad, frameWidth);
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
// 4. Toast overlay — top-right of header band.
|
|
572
|
-
const toastLines = renderToasts(this.toastManager.active(), {
|
|
573
|
-
theme: this.graphTheme,
|
|
574
|
-
});
|
|
575
|
-
if (toastLines.length > 0) {
|
|
576
|
-
for (let i = 0; i < toastLines.length && i < lines.length; i++) {
|
|
577
|
-
const existing = lines[i] ?? "";
|
|
578
|
-
const merged = `${existing} ${toastLines[i]}`;
|
|
579
|
-
lines[i] = truncateToWidth(merged, frameWidth, "", true);
|
|
580
|
-
}
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
// 5. Three-row statusline pinned to the bottom.
|
|
584
|
-
lines.push(...this._renderStatusline(frameWidth));
|
|
585
|
-
|
|
586
|
-
return this._withVerticalMargins(lines, frameWidth);
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
private _renderEmptyState(width: number): string[] {
|
|
590
|
-
const t = this.graphTheme;
|
|
591
|
-
const muted = hexToAnsi(t.textMuted);
|
|
592
|
-
const dim = hexToAnsi(t.dim);
|
|
593
|
-
const accent = hexToAnsi(t.accent);
|
|
594
|
-
const chromeBg = hexBg(t.backgroundPanel);
|
|
595
|
-
|
|
596
|
-
const {
|
|
597
|
-
top,
|
|
598
|
-
mid,
|
|
599
|
-
bot,
|
|
600
|
-
visibleWidth: pillW,
|
|
601
|
-
} = renderOutlinePill("ORCHESTRATOR", t.accent, chromeBg);
|
|
602
|
-
const idleLabel = ` ${muted}idle${RESET}`;
|
|
603
|
-
const fillerVisible = Math.max(0, width - 1 - pillW - 6 /* " idle" */ - 2);
|
|
604
|
-
const filler = " ".repeat(fillerVisible);
|
|
605
|
-
const lines: string[] = [
|
|
606
|
-
`${chromeBg} ${RESET}${top}${chromeBg}${" ".repeat(6 + fillerVisible)}${" ".repeat(2)}${RESET}`,
|
|
607
|
-
`${chromeBg} ${RESET}${mid}${chromeBg}${idleLabel}${filler}${" ".repeat(2)}${RESET}`,
|
|
608
|
-
`${chromeBg} ${RESET}${bot}${chromeBg}${" ".repeat(6 + fillerVisible)}${" ".repeat(2)}${RESET}`,
|
|
609
|
-
];
|
|
610
|
-
const bodyTarget = this._overlayBodyRows(this._overlayPanelLineCount());
|
|
611
|
-
const body: string[] = [
|
|
612
|
-
this._canvasRow(` ${muted}No active workflow run.${RESET}`, width),
|
|
613
|
-
this._canvasRow(
|
|
614
|
-
` ${dim}Start one with ${accent}/workflow <name>${RESET}${dim} or press ${accent}F2${RESET}${dim} on an active run.${RESET}`,
|
|
615
|
-
width,
|
|
616
|
-
),
|
|
617
|
-
];
|
|
618
|
-
const topPad = Math.max(0, Math.floor((bodyTarget - body.length) / 2));
|
|
619
|
-
for (let i = 0; i < topPad; i++) lines.push(this._blankRow(width));
|
|
620
|
-
for (const l of body) lines.push(l);
|
|
621
|
-
while (lines.length < 3 + bodyTarget) lines.push(this._blankRow(width));
|
|
622
|
-
lines.push(...this._renderStatusline(width));
|
|
623
|
-
return this._withVerticalMargins(lines, width);
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
private _renderGraph(width: number): string[] {
|
|
627
|
-
const run = this._getCurrentRun();
|
|
628
|
-
if (!run || this.cachedLayout.length === 0) {
|
|
629
|
-
const dim = hexToAnsi(this.graphTheme.dim);
|
|
630
|
-
return [
|
|
631
|
-
this._centerCanvasContent(
|
|
632
|
-
`${dim}waiting for stage events…${RESET}`,
|
|
633
|
-
width,
|
|
634
|
-
),
|
|
635
|
-
];
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
const graphInner = Math.max(1, width - 4);
|
|
639
|
-
const canvasWidth = this.cachedLayout.reduce(
|
|
640
|
-
(max, node) => Math.max(max, node.x + NODE_W),
|
|
641
|
-
0,
|
|
642
|
-
);
|
|
643
|
-
// Centre the whole graph horizontally when it fits; otherwise keep a
|
|
644
|
-
// small gutter and reveal focused nodes by horizontally scrolling the
|
|
645
|
-
// graph canvas. Do not switch to a compact list: the orchestrator pane
|
|
646
|
-
// should always preserve the node-card graph view.
|
|
647
|
-
const leftMargin = Math.max(
|
|
648
|
-
2,
|
|
649
|
-
canvasWidth <= graphInner ? Math.floor((graphInner - canvasWidth) / 2) : 2,
|
|
650
|
-
);
|
|
651
|
-
const viewportWidth = Math.max(1, width - leftMargin);
|
|
652
|
-
const fullCanvasWidth = Math.max(canvasWidth, viewportWidth);
|
|
653
|
-
this._clampGraphHorizontalScroll(fullCanvasWidth, viewportWidth);
|
|
654
|
-
if (this.pendingEnsureFocusedVisible) {
|
|
655
|
-
this._scrollFocusedColumnIntoView(viewportWidth, fullCanvasWidth);
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
// Pulse phase ∈ [0, 1) derived from wall-clock time so cards lerp
|
|
659
|
-
// their border colour on the same beat regardless of how often
|
|
660
|
-
// render() fires. The animation tick (`ANIMATION_TICK_MS`) only
|
|
661
|
-
// controls render cadence — it does not advance the phase.
|
|
662
|
-
const pulsePhase = (Date.now() % PULSE_PERIOD_MS) / PULSE_PERIOD_MS;
|
|
663
|
-
|
|
664
|
-
// 1. Plot parent → child edges into a sparse char canvas so they
|
|
665
|
-
// survive crisp through column gaps. Node-card bodies overwrite
|
|
666
|
-
// edge cells per-row when we compose the final output below.
|
|
667
|
-
const edgeCanvas = new GraphCanvas();
|
|
668
|
-
const edgeColor = this.graphTheme.borderDim;
|
|
669
|
-
const nodeByStageId = new Map(
|
|
670
|
-
this.cachedLayout.map((n) => [n.stage.id, n]),
|
|
671
|
-
);
|
|
672
|
-
for (const node of this.cachedLayout) {
|
|
673
|
-
for (const parentId of node.stage.parentIds) {
|
|
674
|
-
const parent = nodeByStageId.get(parentId);
|
|
675
|
-
if (!parent) continue;
|
|
676
|
-
this._plotEdge(
|
|
677
|
-
edgeCanvas,
|
|
678
|
-
parent.x,
|
|
679
|
-
parent.y,
|
|
680
|
-
node.x,
|
|
681
|
-
node.y,
|
|
682
|
-
edgeColor,
|
|
683
|
-
);
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
const edgeLines = edgeCanvas.toLines();
|
|
687
|
-
|
|
688
|
-
// 2. Render each node card and record its row span / start column.
|
|
689
|
-
interface Placement {
|
|
690
|
-
startCol: number;
|
|
691
|
-
width: number;
|
|
692
|
-
line: string;
|
|
693
|
-
}
|
|
694
|
-
const placements: Map<number, Placement[]> = new Map();
|
|
695
|
-
for (let ni = 0; ni < this.cachedLayout.length; ni++) {
|
|
696
|
-
const node = this.cachedLayout[ni]!;
|
|
697
|
-
const focused = ni === this.focusedIndex;
|
|
698
|
-
const cardLines = renderNodeCard(node.stage, {
|
|
699
|
-
width: NODE_W,
|
|
700
|
-
height: NODE_H,
|
|
701
|
-
focused,
|
|
702
|
-
pulsePhase,
|
|
703
|
-
theme: this.graphTheme,
|
|
704
|
-
stages: this.cachedLayout.map((layoutNode) => layoutNode.stage),
|
|
705
|
-
});
|
|
706
|
-
for (let li = 0; li < cardLines.length; li++) {
|
|
707
|
-
const rowIdx = node.y + li;
|
|
708
|
-
let bucket = placements.get(rowIdx);
|
|
709
|
-
if (!bucket) {
|
|
710
|
-
bucket = [];
|
|
711
|
-
placements.set(rowIdx, bucket);
|
|
712
|
-
}
|
|
713
|
-
bucket.push({ startCol: node.x, width: NODE_W, line: cardLines[li]! });
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
// 3. Compose each output row by interleaving edge segments with the
|
|
718
|
-
// card placements at their assigned columns.
|
|
719
|
-
const totalRows = Math.max(
|
|
720
|
-
edgeLines.length,
|
|
721
|
-
...this.cachedLayout.map((n) => n.y + NODE_H),
|
|
722
|
-
);
|
|
723
|
-
const composed: string[] = [];
|
|
724
|
-
for (let rowIdx = 0; rowIdx < totalRows; rowIdx++) {
|
|
725
|
-
const edgeRowChars = this._edgeRowToCells(edgeLines[rowIdx] ?? "");
|
|
726
|
-
const cards = placements.get(rowIdx) ?? [];
|
|
727
|
-
composed.push(this._composeRow(edgeRowChars, cards, edgeColor));
|
|
728
|
-
}
|
|
729
|
-
|
|
730
|
-
// Pad the full graph canvas, then crop a horizontal viewport when the
|
|
731
|
-
// fan-out is wider than the terminal. Cards/edges only paint cells they
|
|
732
|
-
// occupy; everywhere else needs explicit bg so default terminal colours
|
|
733
|
-
// never leak through.
|
|
734
|
-
const bg = hexBg(this.graphTheme.bg);
|
|
735
|
-
const leftPad = `${bg}${" ".repeat(leftMargin)}${RESET}`;
|
|
736
|
-
return composed.map((line) => {
|
|
737
|
-
const full = this._padCanvas(line, fullCanvasWidth);
|
|
738
|
-
const sliced = this._sliceColumns(
|
|
739
|
-
full,
|
|
740
|
-
this.graphScrollColOffset,
|
|
741
|
-
this.graphScrollColOffset + viewportWidth,
|
|
742
|
-
);
|
|
743
|
-
return `${leftPad}${this._padCanvas(sliced, viewportWidth)}`;
|
|
744
|
-
});
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
private _visibleGraphLines(
|
|
748
|
-
graphLines: string[],
|
|
749
|
-
frameWidth: number,
|
|
750
|
-
bodyRows: number,
|
|
751
|
-
): { lines: string[]; topPad: number } {
|
|
752
|
-
if (graphLines.length <= bodyRows) {
|
|
753
|
-
this.graphScrollOffset = 0;
|
|
754
|
-
this.pendingEnsureFocusedVisible = false;
|
|
755
|
-
return {
|
|
756
|
-
lines: graphLines,
|
|
757
|
-
topPad: Math.min(3, Math.max(0, Math.floor((bodyRows - graphLines.length) / 2))),
|
|
758
|
-
};
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
this._clampGraphScroll(graphLines.length, bodyRows);
|
|
762
|
-
if (this.pendingEnsureFocusedVisible) {
|
|
763
|
-
this._scrollFocusedIntoView(frameWidth, bodyRows, graphLines.length);
|
|
764
|
-
this.pendingEnsureFocusedVisible = false;
|
|
765
|
-
}
|
|
766
|
-
this._clampGraphScroll(graphLines.length, bodyRows);
|
|
767
|
-
return {
|
|
768
|
-
lines: graphLines.slice(
|
|
769
|
-
this.graphScrollOffset,
|
|
770
|
-
this.graphScrollOffset + bodyRows,
|
|
771
|
-
),
|
|
772
|
-
topPad: 0,
|
|
773
|
-
};
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
private _clampGraphScroll(totalRows: number, bodyRows: number): void {
|
|
777
|
-
const maxOffset = Math.max(0, totalRows - bodyRows);
|
|
778
|
-
this.graphScrollOffset = Math.max(
|
|
779
|
-
0,
|
|
780
|
-
Math.min(maxOffset, this.graphScrollOffset),
|
|
781
|
-
);
|
|
782
|
-
}
|
|
783
|
-
|
|
784
|
-
private _clampGraphHorizontalScroll(totalCols: number, viewportCols: number): void {
|
|
785
|
-
const maxOffset = Math.max(0, totalCols - viewportCols);
|
|
786
|
-
this.graphScrollColOffset = Math.max(
|
|
787
|
-
0,
|
|
788
|
-
Math.min(maxOffset, this.graphScrollColOffset),
|
|
789
|
-
);
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
private _scrollFocusedColumnIntoView(
|
|
793
|
-
viewportCols: number,
|
|
794
|
-
totalCols: number,
|
|
795
|
-
): void {
|
|
796
|
-
const node = this.cachedLayout[this.focusedIndex];
|
|
797
|
-
if (!node) return;
|
|
798
|
-
const start = node.x;
|
|
799
|
-
const end = node.x + NODE_W - 1;
|
|
800
|
-
if (start < this.graphScrollColOffset) {
|
|
801
|
-
this.graphScrollColOffset = start;
|
|
802
|
-
} else if (end >= this.graphScrollColOffset + viewportCols) {
|
|
803
|
-
this.graphScrollColOffset = end - viewportCols + 1;
|
|
804
|
-
}
|
|
805
|
-
this._clampGraphHorizontalScroll(totalCols, viewportCols);
|
|
806
|
-
}
|
|
807
|
-
|
|
808
|
-
private _scrollFocusedIntoView(
|
|
809
|
-
frameWidth: number,
|
|
810
|
-
bodyRows: number,
|
|
811
|
-
totalRows: number,
|
|
812
|
-
): void {
|
|
813
|
-
const range = this._focusedGraphRowRange(frameWidth);
|
|
814
|
-
if (!range) return;
|
|
815
|
-
if (range.start < this.graphScrollOffset) {
|
|
816
|
-
this.graphScrollOffset = range.start;
|
|
817
|
-
} else if (range.end >= this.graphScrollOffset + bodyRows) {
|
|
818
|
-
this.graphScrollOffset = range.end - bodyRows + 1;
|
|
819
|
-
}
|
|
820
|
-
this._clampGraphScroll(totalRows, bodyRows);
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
private _focusedGraphRowRange(_frameWidth: number): { start: number; end: number } | null {
|
|
824
|
-
const node = this.cachedLayout[this.focusedIndex];
|
|
825
|
-
if (!node) return null;
|
|
826
|
-
return { start: node.y, end: node.y + NODE_H - 1 };
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
/**
|
|
830
|
-
* Plot a parent → child edge for the vertical orientation. The edge
|
|
831
|
-
* exits from the parent's bottom-centre, runs through a horizontal
|
|
832
|
-
* spine half-way down the gap, and re-enters from the child's
|
|
833
|
-
* top-centre. Cells are merged by direction set so fan-out, fan-in,
|
|
834
|
-
* and crossings produce stable orthogonal junctions instead of
|
|
835
|
-
* stacked rounded corners.
|
|
836
|
-
*/
|
|
837
|
-
private _plotEdge(
|
|
838
|
-
canvas: GraphCanvas,
|
|
839
|
-
px: number,
|
|
840
|
-
py: number,
|
|
841
|
-
cx: number,
|
|
842
|
-
cy: number,
|
|
843
|
-
color: string,
|
|
844
|
-
): void {
|
|
845
|
-
const parentCol = px + Math.floor(NODE_W / 2);
|
|
846
|
-
const childCol = cx + Math.floor(NODE_W / 2);
|
|
847
|
-
const parentExitRow = py + NODE_H; // first row below parent's bottom border
|
|
848
|
-
const childEntryRow = cy - 1; // last row above child's top border
|
|
849
|
-
if (childEntryRow < parentExitRow) return;
|
|
850
|
-
|
|
851
|
-
if (parentCol === childCol) {
|
|
852
|
-
canvas.vline(parentCol, parentExitRow, childEntryRow, color);
|
|
853
|
-
return;
|
|
854
|
-
}
|
|
855
|
-
|
|
856
|
-
const spineRow = Math.max(
|
|
857
|
-
parentExitRow,
|
|
858
|
-
Math.min(childEntryRow, Math.floor((parentExitRow + childEntryRow) / 2)),
|
|
859
|
-
);
|
|
860
|
-
|
|
861
|
-
// Down stub from parent into the spine row.
|
|
862
|
-
if (spineRow > parentExitRow) {
|
|
863
|
-
canvas.vline(parentCol, parentExitRow, spineRow - 1, color);
|
|
864
|
-
}
|
|
865
|
-
this._placeJunction(canvas, spineRow, parentCol, ["u", childCol > parentCol ? "r" : "l"], color);
|
|
866
|
-
|
|
867
|
-
// Horizontal spine segment.
|
|
868
|
-
const hloCol = Math.min(parentCol, childCol) + 1;
|
|
869
|
-
const hhiCol = Math.max(parentCol, childCol) - 1;
|
|
870
|
-
if (hhiCol >= hloCol) {
|
|
871
|
-
canvas.hline(spineRow, hloCol, hhiCol, color);
|
|
872
|
-
}
|
|
873
|
-
this._placeJunction(canvas, spineRow, childCol, [childCol > parentCol ? "l" : "r", "d"], color);
|
|
874
|
-
|
|
875
|
-
// Down stub from spine into child.
|
|
876
|
-
if (childEntryRow > spineRow) {
|
|
877
|
-
canvas.vline(childCol, spineRow + 1, childEntryRow, color);
|
|
878
|
-
}
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
private _placeJunction(
|
|
882
|
-
canvas: GraphCanvas,
|
|
883
|
-
row: number,
|
|
884
|
-
col: number,
|
|
885
|
-
newDirs: Array<"u" | "d" | "l" | "r">,
|
|
886
|
-
color: string,
|
|
887
|
-
): void {
|
|
888
|
-
canvas.mergeCell(row, col, newDirs, color);
|
|
889
|
-
}
|
|
890
|
-
|
|
891
|
-
/**
|
|
892
|
-
* Split the canvas-rendered edge row at card boundaries into spans of
|
|
893
|
-
* `{ startCol, visibleWidth, content }` so the composer can interleave
|
|
894
|
-
* cards without colliding.
|
|
895
|
-
*/
|
|
896
|
-
private _edgeRowToCells(line: string): string {
|
|
897
|
-
return line;
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
/**
|
|
901
|
-
* Interleave a single edge row with the node cards that cross it.
|
|
902
|
-
* Cards take precedence at their column ranges; edge characters fill
|
|
903
|
-
* the gaps. Returns one composed line padded with spaces.
|
|
904
|
-
*/
|
|
905
|
-
private _composeRow(
|
|
906
|
-
edgeRow: string,
|
|
907
|
-
cards: Array<{ startCol: number; width: number; line: string }>,
|
|
908
|
-
_edgeColor: string,
|
|
909
|
-
): string {
|
|
910
|
-
const bg = hexBg(this.graphTheme.bg);
|
|
911
|
-
const sorted = cards.slice().sort((a, b) => a.startCol - b.startCol);
|
|
912
|
-
let cursor = 0;
|
|
913
|
-
let out = "";
|
|
914
|
-
for (const card of sorted) {
|
|
915
|
-
if (card.startCol > cursor) {
|
|
916
|
-
// Edge segment up to card start — prepend bg so empty cells
|
|
917
|
-
// in this stretch keep the body bg instead of falling back
|
|
918
|
-
// to the terminal default once any prior RESET fired.
|
|
919
|
-
out += `${bg}${this._edgeSegment(edgeRow, cursor, card.startCol)}`;
|
|
920
|
-
cursor = card.startCol;
|
|
921
|
-
}
|
|
922
|
-
out += card.line;
|
|
923
|
-
cursor += card.width;
|
|
924
|
-
}
|
|
925
|
-
// Trailing edge tail — same bg re-priming.
|
|
926
|
-
out += `${bg}${this._edgeSegment(edgeRow, cursor, Math.max(cursor, visibleWidth(edgeRow)))}`;
|
|
927
|
-
return out;
|
|
928
|
-
}
|
|
929
|
-
|
|
930
|
-
private _edgeSegment(line: string, fromCol: number, toCol: number): string {
|
|
931
|
-
if (fromCol >= toCol) return "";
|
|
932
|
-
const segment = this._sliceColumns(line, fromCol, toCol);
|
|
933
|
-
const visible = visibleWidth(segment);
|
|
934
|
-
return `${segment}${" ".repeat(Math.max(0, toCol - fromCol - visible))}`;
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
private _sliceColumns(line: string, fromCol: number, toCol: number): string {
|
|
938
|
-
if (fromCol >= toCol) return "";
|
|
939
|
-
return sliceColumns(line, fromCol, toCol - fromCol, true);
|
|
940
|
-
}
|
|
941
|
-
|
|
942
|
-
// -------------------------------------------------------------------------
|
|
943
|
-
// Chrome / canvas / section helpers
|
|
944
|
-
// -------------------------------------------------------------------------
|
|
945
|
-
|
|
946
|
-
/**
|
|
947
|
-
* Three-row statusline pinned to the bottom of the overlay. Mirrors
|
|
948
|
-
* the header band: `backgroundPanel` chrome, outlined accent pill
|
|
949
|
-
* flush-left, hints flowing right on the centre row.
|
|
950
|
-
*/
|
|
951
|
-
private _renderStatusline(width: number): string[] {
|
|
952
|
-
const t = this.graphTheme;
|
|
953
|
-
const chromeBg = hexBg(t.backgroundPanel);
|
|
954
|
-
const text = hexToAnsi(t.text);
|
|
955
|
-
const muted = hexToAnsi(t.textMuted);
|
|
956
|
-
const dim = hexToAnsi(t.dim);
|
|
957
|
-
|
|
958
|
-
const {
|
|
959
|
-
top,
|
|
960
|
-
mid,
|
|
961
|
-
bot,
|
|
962
|
-
visibleWidth: pillW,
|
|
963
|
-
} = renderOutlinePill(MODE_PILL_LABEL, t.accent, chromeBg);
|
|
964
|
-
|
|
965
|
-
// Hints — `<key> <label>` separated by ` · `.
|
|
966
|
-
const sep = `${chromeBg} ${dim}·${RESET}${chromeBg} `;
|
|
967
|
-
const segments = HINT_KEYS.map(
|
|
968
|
-
({ key, label }) =>
|
|
969
|
-
`${text}${BOLD}${key}${RESET}${chromeBg} ${muted}${label}${RESET}${chromeBg}`,
|
|
970
|
-
);
|
|
971
|
-
const hintsStyledRaw = segments.join(sep);
|
|
972
|
-
|
|
973
|
-
const leftEdgePad = 1;
|
|
974
|
-
const rightEdgePad = 2;
|
|
975
|
-
const hintsBudget = Math.max(0, width - leftEdgePad - pillW - rightEdgePad);
|
|
976
|
-
const hintsStyled = truncateToWidth(hintsStyledRaw, hintsBudget, "");
|
|
977
|
-
const hintsVisibleLen = visibleWidth(hintsStyled);
|
|
978
|
-
const fillerVisible = Math.max(0, hintsBudget - hintsVisibleLen);
|
|
979
|
-
const filler = " ".repeat(fillerVisible);
|
|
980
|
-
const blankAcross = " ".repeat(Math.max(0, width - leftEdgePad - pillW));
|
|
981
|
-
|
|
982
|
-
return [
|
|
983
|
-
`${chromeBg} ${RESET}${top}${chromeBg}${blankAcross}${RESET}`,
|
|
984
|
-
`${chromeBg} ${RESET}${mid}${chromeBg}${filler}${hintsStyled}${chromeBg}${" ".repeat(rightEdgePad)}${RESET}`,
|
|
985
|
-
`${chromeBg} ${RESET}${bot}${chromeBg}${blankAcross}${RESET}`,
|
|
986
|
-
];
|
|
987
|
-
}
|
|
988
|
-
|
|
989
|
-
/** Blank canvas row — single line of `bg`. */
|
|
990
|
-
private _blankRow(width: number): string {
|
|
991
|
-
return `${hexBg(this.graphTheme.bg)}${" ".repeat(width)}${RESET}`;
|
|
992
|
-
}
|
|
993
|
-
|
|
994
|
-
private _centerCanvasContent(content: string, width: number): string {
|
|
995
|
-
const truncated = truncateToWidth(content, width, "…", true);
|
|
996
|
-
const leftPad = Math.max(0, Math.floor((width - visibleWidth(truncated)) / 2));
|
|
997
|
-
return `${" ".repeat(leftPad)}${truncated}`;
|
|
998
|
-
}
|
|
999
|
-
|
|
1000
|
-
/** Wrap content in a canvas-bg row, padded to `width`. Re-emits the
|
|
1001
|
-
* bg ANSI right before the trailing fill so any internal `RESET`
|
|
1002
|
-
* from cards/edges doesn't let the terminal default bleed through. */
|
|
1003
|
-
private _canvasRow(content: string, width: number): string {
|
|
1004
|
-
const bg = hexBg(this.graphTheme.bg);
|
|
1005
|
-
const truncated = truncateToWidth(content, width, "…", true);
|
|
1006
|
-
const padLen = Math.max(0, width - visibleWidth(truncated));
|
|
1007
|
-
return `${bg}${truncated}${bg}${" ".repeat(padLen)}${RESET}`;
|
|
1008
|
-
}
|
|
1009
|
-
|
|
1010
|
-
/** Pad pre-styled content out to canvas width without truncation.
|
|
1011
|
-
* Re-emits the body bg ANSI right before the trailing fill so any
|
|
1012
|
-
* internal RESET inside `content` doesn't leak the terminal default. */
|
|
1013
|
-
private _padCanvas(content: string, width: number): string {
|
|
1014
|
-
const bg = hexBg(this.graphTheme.bg);
|
|
1015
|
-
const padLen = Math.max(0, width - visibleWidth(content));
|
|
1016
|
-
return `${bg}${content}${bg}${" ".repeat(padLen)}${RESET}`;
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
|
-
/**
|
|
1020
|
-
* Compose a pre-styled card line over a canvas row at `leftPad` columns.
|
|
1021
|
-
* The base row keeps its `bg` (so background colour matches canvas);
|
|
1022
|
-
* the card slice replaces the cells starting at `leftPad`, and the
|
|
1023
|
-
* residual columns to the right are repainted with bg.
|
|
1024
|
-
*
|
|
1025
|
-
* We don't try to keep the parts of `base` that fall *under* the card
|
|
1026
|
-
* — pi-tui paints flat lines, not z-buffered cells, so the card's panel
|
|
1027
|
-
* background winning is fine.
|
|
1028
|
-
*/
|
|
1029
|
-
private _overlayCard(
|
|
1030
|
-
_base: string,
|
|
1031
|
-
cardLine: string,
|
|
1032
|
-
leftPad: number,
|
|
1033
|
-
totalWidth: number,
|
|
1034
|
-
): string {
|
|
1035
|
-
const bg = hexBg(this.graphTheme.bg);
|
|
1036
|
-
const cardW = visibleWidth(cardLine);
|
|
1037
|
-
const rightPadLen = Math.max(0, totalWidth - leftPad - cardW);
|
|
1038
|
-
return `${bg}${" ".repeat(leftPad)}${RESET}${cardLine}${bg}${" ".repeat(rightPadLen)}${RESET}`;
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
private _displayStages(run: RunSnapshot): StageSnapshot[] {
|
|
1042
|
-
return this.cachedLayout.length > 0
|
|
1043
|
-
? this.cachedLayout.map((layoutNode) => layoutNode.stage)
|
|
1044
|
-
: [...run.stages];
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
|
-
private _counts(stages: readonly StageSnapshot[]): {
|
|
1048
|
-
pending: number;
|
|
1049
|
-
running: number;
|
|
1050
|
-
awaiting_input: number;
|
|
1051
|
-
paused: number;
|
|
1052
|
-
blocked: number;
|
|
1053
|
-
completed: number;
|
|
1054
|
-
failed: number;
|
|
1055
|
-
skipped: number;
|
|
1056
|
-
} {
|
|
1057
|
-
const c = {
|
|
1058
|
-
pending: 0,
|
|
1059
|
-
running: 0,
|
|
1060
|
-
awaiting_input: 0,
|
|
1061
|
-
paused: 0,
|
|
1062
|
-
blocked: 0,
|
|
1063
|
-
completed: 0,
|
|
1064
|
-
failed: 0,
|
|
1065
|
-
skipped: 0,
|
|
1066
|
-
};
|
|
1067
|
-
for (const s of stages) c[s.status]++;
|
|
1068
|
-
return c;
|
|
1069
|
-
}
|
|
1070
|
-
|
|
1071
|
-
// -------------------------------------------------------------------------
|
|
1072
|
-
// Input handling
|
|
1073
|
-
// -------------------------------------------------------------------------
|
|
1074
|
-
|
|
1075
|
-
/** Returns true if consumed. */
|
|
1076
|
-
handleInput(data: string): boolean {
|
|
1077
|
-
if (this.switcherOpen) {
|
|
1078
|
-
return this._handleSwitcherInput(data);
|
|
1079
|
-
}
|
|
1080
|
-
// Stage-local HIL is represented by graph nodes and remains graph-first;
|
|
1081
|
-
// only the legacy run-level prompt card sets `promptState`. Keep that
|
|
1082
|
-
// fallback answerable, but let a narrow set of non-text graph controls
|
|
1083
|
-
// through first so the workflow overlay can still be detached or scrolled
|
|
1084
|
-
// instead of feeling modal while a prompt is visible. Printable keys such
|
|
1085
|
-
// as "/" belong to the prompt card while legacy run-level text/editor
|
|
1086
|
-
// prompts own input.
|
|
1087
|
-
if (this.promptState) {
|
|
1088
|
-
if (this._isNonTextGraphControlBeforePrompt(data)) {
|
|
1089
|
-
return this._handleGraphInput(data);
|
|
1090
|
-
}
|
|
1091
|
-
return this._handlePromptInput(data);
|
|
1092
|
-
}
|
|
1093
|
-
return this._handleGraphInput(data);
|
|
1094
|
-
}
|
|
1095
|
-
|
|
1096
|
-
private _promptKeybindings(): KeybindingsLike | undefined {
|
|
1097
|
-
return isKeybindingsLike(this.piKeybindings) ? this.piKeybindings : undefined;
|
|
1098
|
-
}
|
|
1099
|
-
|
|
1100
|
-
private _isNonTextGraphControlBeforePrompt(data: string): boolean {
|
|
1101
|
-
return (
|
|
1102
|
-
this._mouseWheelDeltaRows(data) !== 0 ||
|
|
1103
|
-
matchesKey(data, Key.ctrl("d"))
|
|
1104
|
-
);
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
private _handlePromptInput(data: string): boolean {
|
|
1108
|
-
const state = this.promptState;
|
|
1109
|
-
if (!state) return false;
|
|
1110
|
-
const action = handlePromptCardInput(data, state, this._promptKeybindings());
|
|
1111
|
-
if (action.kind === "noop") return true;
|
|
1112
|
-
const runId = this.runId;
|
|
1113
|
-
if (!runId) return true;
|
|
1114
|
-
const response =
|
|
1115
|
-
action.kind === "cancel" ? defaultResponseFor(state.prompt) : action.response;
|
|
1116
|
-
this._resolvePrompt(runId, state.prompt.id, response);
|
|
1117
|
-
return true;
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
|
-
private _resolvePrompt(runId: string, promptId: string, response: unknown): void {
|
|
1121
|
-
// Clear local state immediately so the card disappears even if the
|
|
1122
|
-
// host doesn't re-emit a store snapshot between resolve and render.
|
|
1123
|
-
this.promptState = null;
|
|
1124
|
-
if (this.onPromptResolve) {
|
|
1125
|
-
this.onPromptResolve(runId, promptId, response);
|
|
1126
|
-
return;
|
|
1127
|
-
}
|
|
1128
|
-
// Fallback path used by callers that wire GraphView directly without
|
|
1129
|
-
// injecting onPromptResolve. Best-effort — if the store rejects (stale
|
|
1130
|
-
// id) we already cleared local state, so we don't try to re-arm.
|
|
1131
|
-
this.store.resolvePendingPrompt(runId, promptId, response);
|
|
1132
|
-
}
|
|
1133
|
-
|
|
1134
|
-
private _handleGraphInput(data: string): boolean {
|
|
1135
|
-
const stageCount = this.cachedLayout.length;
|
|
1136
|
-
const wheelDeltaRows = this._mouseWheelDeltaRows(data);
|
|
1137
|
-
if (wheelDeltaRows !== 0) {
|
|
1138
|
-
this._scrollGraphBy(wheelDeltaRows);
|
|
1139
|
-
return true;
|
|
1140
|
-
}
|
|
1141
|
-
|
|
1142
|
-
// Vertical-graph navigation: up/down step between depth levels
|
|
1143
|
-
// (col), left/right step between siblings at the same depth (row).
|
|
1144
|
-
// j/k preserved as a flat-order fallback for muscle memory.
|
|
1145
|
-
if (matchesKey(data, Key.down))
|
|
1146
|
-
return this._moveByDepth(+1);
|
|
1147
|
-
if (matchesKey(data, Key.up))
|
|
1148
|
-
return this._moveByDepth(-1);
|
|
1149
|
-
if (matchesKey(data, Key.right))
|
|
1150
|
-
return this._moveBySibling(+1);
|
|
1151
|
-
if (matchesKey(data, Key.left))
|
|
1152
|
-
return this._moveBySibling(-1);
|
|
1153
|
-
if (matchesKey(data, "j")) {
|
|
1154
|
-
this._setFocusedIndex(Math.min(this.focusedIndex + 1, stageCount - 1));
|
|
1155
|
-
return true;
|
|
1156
|
-
}
|
|
1157
|
-
if (matchesKey(data, "k")) {
|
|
1158
|
-
this._setFocusedIndex(Math.max(this.focusedIndex - 1, 0));
|
|
1159
|
-
return true;
|
|
1160
|
-
}
|
|
1161
|
-
if (matchesKey(data, "g")) {
|
|
1162
|
-
const now = Date.now();
|
|
1163
|
-
if (this._lastGTime != null && now - this._lastGTime < 500) {
|
|
1164
|
-
this._setFocusedIndex(0);
|
|
1165
|
-
this._lastGTime = null;
|
|
1166
|
-
} else {
|
|
1167
|
-
this._lastGTime = now;
|
|
1168
|
-
}
|
|
1169
|
-
return true;
|
|
1170
|
-
}
|
|
1171
|
-
if (matchesKey(data, "/")) {
|
|
1172
|
-
this.switcherOpen = true;
|
|
1173
|
-
this.switcherState = { query: "", selectedIndex: 0 };
|
|
1174
|
-
return true;
|
|
1175
|
-
}
|
|
1176
|
-
if (matchesKey(data, Key.enter)) {
|
|
1177
|
-
// Enter attaches the popup interior to the focused stage. The
|
|
1178
|
-
// attach shell swaps in the stage-chat view without remounting
|
|
1179
|
-
// the overlay; without a callback, fall back to the legacy
|
|
1180
|
-
// expand/collapse toggle so non-attach hosts still work.
|
|
1181
|
-
if (this._attachFocusedStage()) return true;
|
|
1182
|
-
this.detailsExpanded = !this.detailsExpanded;
|
|
1183
|
-
return true;
|
|
1184
|
-
}
|
|
1185
|
-
// `ctrl+d` detaches the whole popup (host hides the overlay). This
|
|
1186
|
-
// is the graph-mode counterpart of the in-chat back affordance.
|
|
1187
|
-
if (matchesKey(data, Key.ctrl("d"))) {
|
|
1188
|
-
if (this.onDetach) {
|
|
1189
|
-
this.onDetach();
|
|
1190
|
-
} else if (this.onHide) {
|
|
1191
|
-
this.onHide();
|
|
1192
|
-
}
|
|
1193
|
-
return true;
|
|
1194
|
-
}
|
|
1195
|
-
// `q` kills the active run (no confirm). `h` hides the pane via
|
|
1196
|
-
// the overlay's setHidden() flag (not unmount); Escape/Ctrl+C closes.
|
|
1197
|
-
if (matchesKey(data, "q")) {
|
|
1198
|
-
const run = this._getCurrentRun();
|
|
1199
|
-
const targetRunId = this._focusedStageTarget()?.runId ?? run?.id;
|
|
1200
|
-
const targetRun = targetRunId !== undefined
|
|
1201
|
-
? this.currentSnapshot?.runs.find((candidate) => candidate.id === targetRunId)
|
|
1202
|
-
: undefined;
|
|
1203
|
-
if (targetRun && targetRun.endedAt === undefined && this.onKill) {
|
|
1204
|
-
this.onKill(targetRun.id);
|
|
1205
|
-
}
|
|
1206
|
-
this.onClose?.();
|
|
1207
|
-
return true;
|
|
1208
|
-
}
|
|
1209
|
-
if (matchesKey(data, "h") && this.onHide) {
|
|
1210
|
-
this.onHide();
|
|
1211
|
-
return true;
|
|
1212
|
-
}
|
|
1213
|
-
if (matchesKey(data, Key.escape) || matchesKey(data, Key.ctrl("c"))) {
|
|
1214
|
-
this.onClose?.();
|
|
1215
|
-
return true;
|
|
1216
|
-
}
|
|
1217
|
-
return false;
|
|
1218
|
-
}
|
|
1219
|
-
|
|
1220
|
-
private _handleSwitcherInput(data: string): boolean {
|
|
1221
|
-
const stages = this.cachedLayout.map((layoutNode) => layoutNode.stage);
|
|
1222
|
-
|
|
1223
|
-
if (matchesKey(data, Key.escape)) {
|
|
1224
|
-
this.switcherOpen = false;
|
|
1225
|
-
return true;
|
|
1226
|
-
}
|
|
1227
|
-
if (matchesKey(data, Key.enter)) {
|
|
1228
|
-
const filtered = filterStages(stages, this.switcherState.query);
|
|
1229
|
-
const selected = filtered[this.switcherState.selectedIndex];
|
|
1230
|
-
if (selected) {
|
|
1231
|
-
const idx = this.cachedLayout.findIndex(
|
|
1232
|
-
(n) => n.stage.id === selected.id,
|
|
1233
|
-
);
|
|
1234
|
-
if (idx !== -1) {
|
|
1235
|
-
this._setFocusedIndex(idx);
|
|
1236
|
-
// Selecting from the `/` switcher should complete the same
|
|
1237
|
-
// action as pressing Enter on a graph node: jump straight
|
|
1238
|
-
// into that stage's chat when the attach shell is present.
|
|
1239
|
-
this.switcherOpen = false;
|
|
1240
|
-
if (this._attachFocusedStage()) return true;
|
|
1241
|
-
}
|
|
1242
|
-
}
|
|
1243
|
-
this.switcherOpen = false;
|
|
1244
|
-
return true;
|
|
1245
|
-
}
|
|
1246
|
-
if (matchesKey(data, Key.down)) {
|
|
1247
|
-
const filtered = filterStages(stages, this.switcherState.query);
|
|
1248
|
-
this.switcherState = {
|
|
1249
|
-
...this.switcherState,
|
|
1250
|
-
selectedIndex: Math.min(
|
|
1251
|
-
this.switcherState.selectedIndex + 1,
|
|
1252
|
-
filtered.length - 1,
|
|
1253
|
-
),
|
|
1254
|
-
};
|
|
1255
|
-
return true;
|
|
1256
|
-
}
|
|
1257
|
-
if (matchesKey(data, Key.up)) {
|
|
1258
|
-
this.switcherState = {
|
|
1259
|
-
...this.switcherState,
|
|
1260
|
-
selectedIndex: Math.max(this.switcherState.selectedIndex - 1, 0),
|
|
1261
|
-
};
|
|
1262
|
-
return true;
|
|
1263
|
-
}
|
|
1264
|
-
if (matchesKey(data, Key.backspace)) {
|
|
1265
|
-
this.switcherState = {
|
|
1266
|
-
query: this.switcherState.query.slice(0, -1),
|
|
1267
|
-
selectedIndex: 0,
|
|
1268
|
-
};
|
|
1269
|
-
return true;
|
|
1270
|
-
}
|
|
1271
|
-
if (data.length === 1 && data >= " ") {
|
|
1272
|
-
this.switcherState = {
|
|
1273
|
-
query: this.switcherState.query + data,
|
|
1274
|
-
selectedIndex: 0,
|
|
1275
|
-
};
|
|
1276
|
-
return true;
|
|
1277
|
-
}
|
|
1278
|
-
return false;
|
|
1279
|
-
}
|
|
1280
|
-
|
|
1281
|
-
dispose(): void {
|
|
1282
|
-
if (this._intervalId != null) {
|
|
1283
|
-
clearInterval(this._intervalId);
|
|
1284
|
-
this._intervalId = null;
|
|
1285
|
-
}
|
|
1286
|
-
if (this._unsubscribe) {
|
|
1287
|
-
this._unsubscribe();
|
|
1288
|
-
this._unsubscribe = null;
|
|
1289
|
-
}
|
|
1290
|
-
}
|
|
1291
|
-
|
|
1292
|
-
invalidate(): void {
|
|
1293
|
-
this._rebuildLayout();
|
|
1294
|
-
}
|
|
1295
|
-
|
|
1296
|
-
/**
|
|
1297
|
-
* Move focus to the nearest node `step` depth-levels away (↑/↓).
|
|
1298
|
-
* Picks the sibling with the closest `row` to the current node so
|
|
1299
|
-
* navigation feels spatially continuous in the vertical layout.
|
|
1300
|
-
*/
|
|
1301
|
-
private _moveByDepth(step: number): boolean {
|
|
1302
|
-
const cur = this.cachedLayout[this.focusedIndex];
|
|
1303
|
-
if (!cur) return true;
|
|
1304
|
-
const targetCol = cur.col + step;
|
|
1305
|
-
const candidates = this.cachedLayout
|
|
1306
|
-
.map((n, i) => ({ n, i }))
|
|
1307
|
-
.filter(({ n }) => n.col === targetCol);
|
|
1308
|
-
if (candidates.length === 0) return true;
|
|
1309
|
-
let best = candidates[0]!;
|
|
1310
|
-
let bestDist = Math.abs(best.n.row - cur.row);
|
|
1311
|
-
for (const c of candidates) {
|
|
1312
|
-
const d = Math.abs(c.n.row - cur.row);
|
|
1313
|
-
if (d < bestDist) {
|
|
1314
|
-
best = c;
|
|
1315
|
-
bestDist = d;
|
|
1316
|
-
}
|
|
1317
|
-
}
|
|
1318
|
-
this._setFocusedIndex(best.i);
|
|
1319
|
-
return true;
|
|
1320
|
-
}
|
|
1321
|
-
|
|
1322
|
-
/**
|
|
1323
|
-
* Move focus to the next sibling at the same depth (←/→). Clamps
|
|
1324
|
-
* at the band edges — no wrap, so the user always knows when they
|
|
1325
|
-
* hit a boundary.
|
|
1326
|
-
*/
|
|
1327
|
-
private _moveBySibling(step: number): boolean {
|
|
1328
|
-
const cur = this.cachedLayout[this.focusedIndex];
|
|
1329
|
-
if (!cur) return true;
|
|
1330
|
-
const siblings = this.cachedLayout
|
|
1331
|
-
.map((n, i) => ({ n, i }))
|
|
1332
|
-
.filter(({ n }) => n.col === cur.col)
|
|
1333
|
-
.sort((a, b) => a.n.row - b.n.row);
|
|
1334
|
-
const pos = siblings.findIndex(({ i }) => i === this.focusedIndex);
|
|
1335
|
-
if (pos === -1) return true;
|
|
1336
|
-
const next = siblings[pos + step];
|
|
1337
|
-
if (!next) return true;
|
|
1338
|
-
this._setFocusedIndex(next.i);
|
|
1339
|
-
return true;
|
|
1340
|
-
}
|
|
1341
|
-
|
|
1342
|
-
private _attachFocusedStage(): boolean {
|
|
1343
|
-
if (!this.onStageAttach) return false;
|
|
1344
|
-
const node = this.cachedLayout[this.focusedIndex];
|
|
1345
|
-
const run = this._getCurrentRun();
|
|
1346
|
-
if (!node || !run) return false;
|
|
1347
|
-
const target = expandedStageTarget(this.expandedGraph, node.stage.id) ?? {
|
|
1348
|
-
runId: run.id,
|
|
1349
|
-
stageId: node.stage.id,
|
|
1350
|
-
};
|
|
1351
|
-
this.onStageAttach(target.runId, target.stageId);
|
|
1352
|
-
return true;
|
|
1353
|
-
}
|
|
1354
|
-
|
|
1355
|
-
private _focusedStageTarget(): { runId: string; stageId: string } | undefined {
|
|
1356
|
-
const node = this.cachedLayout[this.focusedIndex];
|
|
1357
|
-
if (!node) return undefined;
|
|
1358
|
-
const target = expandedStageTarget(this.expandedGraph, node.stage.id);
|
|
1359
|
-
return target ? { runId: target.runId, stageId: target.stageId } : undefined;
|
|
1360
|
-
}
|
|
1361
|
-
|
|
1362
|
-
private _setFocusedIndex(index: number): void {
|
|
1363
|
-
const max = Math.max(0, this.cachedLayout.length - 1);
|
|
1364
|
-
const next = Math.max(0, Math.min(index, max));
|
|
1365
|
-
if (next === this.focusedIndex) return;
|
|
1366
|
-
this.focusedIndex = next;
|
|
1367
|
-
this.pendingEnsureFocusedVisible = true;
|
|
1368
|
-
}
|
|
1369
|
-
|
|
1370
|
-
private _scrollGraphBy(deltaRows: number): void {
|
|
1371
|
-
this.pendingEnsureFocusedVisible = false;
|
|
1372
|
-
this.graphScrollOffset = Math.max(0, this.graphScrollOffset + deltaRows);
|
|
1373
|
-
}
|
|
1374
|
-
|
|
1375
|
-
private _mouseWheelDeltaRows(data: string): number {
|
|
1376
|
-
const sgr = data.match(/^\x1b\[<(\d+);\d+;\d+M$/);
|
|
1377
|
-
if (sgr) {
|
|
1378
|
-
return this._wheelDeltaForButtonCode(Number.parseInt(sgr[1]!, 10));
|
|
1379
|
-
}
|
|
1380
|
-
if (data.startsWith("\x1b[M") && data.length >= 6) {
|
|
1381
|
-
return this._wheelDeltaForButtonCode(data.charCodeAt(3) - 32);
|
|
1382
|
-
}
|
|
1383
|
-
return 0;
|
|
1384
|
-
}
|
|
1385
|
-
|
|
1386
|
-
private _wheelDeltaForButtonCode(code: number): number {
|
|
1387
|
-
if ((code & 64) === 0) return 0;
|
|
1388
|
-
const direction = code & 3;
|
|
1389
|
-
if (direction === 0) return -GRAPH_SCROLL_STEP_ROWS;
|
|
1390
|
-
if (direction === 1) return GRAPH_SCROLL_STEP_ROWS;
|
|
1391
|
-
return 0;
|
|
1392
|
-
}
|
|
1393
|
-
|
|
1394
|
-
// ---- test seams ----
|
|
1395
|
-
get _focusedIndex(): number {
|
|
1396
|
-
return this.focusedIndex;
|
|
1397
|
-
}
|
|
1398
|
-
get _switcherOpen(): boolean {
|
|
1399
|
-
return this.switcherOpen;
|
|
1400
|
-
}
|
|
1401
|
-
get _switcherState(): SwitcherState {
|
|
1402
|
-
return this.switcherState;
|
|
1403
|
-
}
|
|
1404
|
-
get _graphScrollOffset(): number {
|
|
1405
|
-
return this.graphScrollOffset;
|
|
1406
|
-
}
|
|
1407
|
-
}
|
|
24
|
+
/** Public facade preserving the historical `./graph-view.js` import path. */
|
|
25
|
+
export class GraphView extends GraphViewInputController implements Component {}
|