@bastani/atomic 0.9.13 → 0.9.14-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 +58 -0
- package/README.md +3 -3
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/subagents/CHANGELOG.md +14 -0
- package/dist/builtin/subagents/README.md +6 -4
- package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
- package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
- package/dist/builtin/subagents/agents/debugger.md +1 -1
- package/dist/builtin/subagents/agents/worker.md +1 -1
- package/dist/builtin/subagents/package.json +6 -5
- package/dist/builtin/subagents/src/agents/agent-discovery.ts +17 -11
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +115 -43
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +10 -8
- package/dist/builtin/subagents/src/agents/agent-management.ts +8 -7
- package/dist/builtin/subagents/src/agents/agent-overrides.ts +2 -2
- package/dist/builtin/subagents/src/agents/agent-scope.ts +1 -1
- package/dist/builtin/subagents/src/agents/agent-selection.ts +1 -1
- package/dist/builtin/subagents/src/agents/agent-serializer.ts +24 -3
- package/dist/builtin/subagents/src/agents/agent-types.ts +3 -1
- package/dist/builtin/subagents/src/agents/agents.ts +7 -5
- package/dist/builtin/subagents/src/agents/frontmatter.ts +67 -22
- package/dist/builtin/subagents/src/agents/identity.ts +1 -1
- package/dist/builtin/subagents/src/agents/skills-paths.ts +1 -1
- package/dist/builtin/subagents/src/agents/skills.ts +64 -6
- package/dist/builtin/subagents/src/extension/config.ts +1 -1
- package/dist/builtin/subagents/src/extension/control-notices.ts +2 -2
- package/dist/builtin/subagents/src/extension/doctor.ts +15 -5
- package/dist/builtin/subagents/src/extension/fanout-child.ts +12 -12
- package/dist/builtin/subagents/src/extension/index.ts +23 -23
- package/dist/builtin/subagents/src/extension/notification-content.ts +1 -1
- package/dist/builtin/subagents/src/extension/schemas.ts +1 -1
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +3 -3
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +3 -3
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +1 -1
- package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/completion-notification.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +27 -11
- package/dist/builtin/subagents/src/runs/foreground/notify.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +11 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +15 -14
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +19 -19
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +14 -13
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +9 -9
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +7 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +6 -6
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +24 -23
- package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +1 -1
- package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +17 -8
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +60 -12
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +8 -8
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-control.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +4 -4
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +4 -4
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-registry.ts +5 -5
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-rendering.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/long-running-guard.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +3 -3
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +2 -2
- package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/single-output.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +1 -1
- package/dist/builtin/subagents/src/shared/artifacts.ts +2 -2
- package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +1 -1
- package/dist/builtin/subagents/src/shared/fast-mode.ts +1 -1
- package/dist/builtin/subagents/src/shared/formatters.ts +2 -2
- package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -1
- package/dist/builtin/subagents/src/shared/model-resolution.ts +1 -1
- package/dist/builtin/subagents/src/shared/session-tokens.ts +1 -1
- package/dist/builtin/subagents/src/shared/settings.ts +4 -4
- package/dist/builtin/subagents/src/shared/status-format.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +16 -4
- package/dist/builtin/subagents/src/shared/types-depth.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-nested.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-output.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-results.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-runtime.ts +1 -1
- package/dist/builtin/subagents/src/shared/types.ts +6 -6
- package/dist/builtin/subagents/src/shared/utils.ts +3 -3
- package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +1 -1
- package/dist/builtin/subagents/src/slash/slash-bridge.ts +3 -3
- package/dist/builtin/subagents/src/slash/slash-commands.ts +6 -6
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +3 -3
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-layout.ts +1 -1
- package/dist/builtin/subagents/src/tui/render-progress.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +7 -7
- package/dist/builtin/subagents/src/tui/render-result.ts +10 -10
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -1
- package/dist/builtin/subagents/src/tui/render-status-progress.ts +5 -5
- package/dist/builtin/subagents/src/tui/render.ts +4 -4
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +57 -0
- package/dist/builtin/workflows/README.md +39 -8
- package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +16 -5
- package/dist/builtin/workflows/builtin/adversarial-verification.ts +4 -0
- package/dist/builtin/workflows/builtin/classify-and-act.ts +4 -0
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +4 -0
- package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +12 -4
- package/dist/builtin/workflows/builtin/generate-and-filter.ts +4 -0
- package/dist/builtin/workflows/builtin/goal-models.ts +8 -10
- package/dist/builtin/workflows/builtin/goal.ts +4 -0
- package/dist/builtin/workflows/builtin/index.d.ts +0 -4
- package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +4 -2
- package/dist/builtin/workflows/builtin/loop-until-done.ts +4 -0
- package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +305 -0
- package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +115 -171
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +9 -25
- package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +19 -86
- package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -6
- package/dist/builtin/workflows/builtin/open-claude-design.d.ts +0 -5
- package/dist/builtin/workflows/builtin/open-claude-design.ts +11 -15
- package/dist/builtin/workflows/builtin/ralph-models.ts +24 -29
- package/dist/builtin/workflows/builtin/ralph.ts +4 -0
- package/dist/builtin/workflows/builtin/tournament-runner.ts +6 -3
- package/dist/builtin/workflows/builtin/tournament.ts +4 -0
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +25 -31
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +1 -0
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +16 -10
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_manual_edit_applier.toml +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/android.md +6 -0
- package/dist/builtin/workflows/skills/impeccable/reference/animate.md +3 -0
- package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +3 -1
- package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +6 -1
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +18 -2
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +24 -30
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +16 -10
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/distill.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/extract.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +12 -6
- package/dist/builtin/workflows/skills/impeccable/reference/init.md +12 -3
- package/dist/builtin/workflows/skills/impeccable/reference/ios.md +6 -0
- package/dist/builtin/workflows/skills/impeccable/reference/live-setup.md +102 -0
- package/dist/builtin/workflows/skills/impeccable/reference/live.md +113 -521
- package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +39 -26
- package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/polish.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +25 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +332 -221
- package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +10 -19
- package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +91 -38
- package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +19 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +56 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +10 -16
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +140 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +1174 -694
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns.mjs +1 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +5 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +431 -45
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +10 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +47 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +23 -22
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +0 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +384 -384
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/color.mjs +466 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +2 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/embed-prompt.mjs +270 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +51 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +70 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +336 -90
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +38 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +77 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/design-parser.mjs +102 -19
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +44 -59
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +3 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/open-system-browser.mjs +57 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/roll-selection.mjs +369 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +31 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +73 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-css.mjs +617 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-verify.mjs +71 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/browser-script-parts.mjs +29 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +54 -7
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +157 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/journal.mjs +205 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nuxt.mjs +170 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/script-src.mjs +26 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/instructions.mjs +169 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/roots.mjs +670 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +232 -35
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-ast.mjs +969 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +621 -74
- package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +66 -28
- package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +12 -12
- package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-surfaces.mjs +75 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/vocabulary.mjs +135 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +23 -37
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +945 -115
- package/dist/builtin/workflows/skills/impeccable/scripts/live-complete.mjs +33 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-copy-edit-agent.mjs +132 -15
- package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +173 -425
- package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +2 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +16 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/live-resume.mjs +39 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +194 -27
- package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +10 -4
- package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +50 -31
- package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +91 -28
- package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +8 -5
- package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +759 -109
- package/dist/builtin/workflows/src/authoring/workflow.ts +9 -0
- package/dist/builtin/workflows/src/authoring.d.ts +3 -0
- package/dist/builtin/workflows/src/durable/completed-catalog.ts +23 -2
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +30 -17
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +14 -0
- package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +60 -57
- package/dist/builtin/workflows/src/durable/dbos-process-owner.ts +87 -0
- package/dist/builtin/workflows/src/durable/dbos-registration-diagnostics.ts +113 -0
- package/dist/builtin/workflows/src/durable/factory.ts +11 -8
- package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +5 -0
- package/dist/builtin/workflows/src/durable/tool-primitive.ts +186 -20
- package/dist/builtin/workflows/src/durable/types.ts +4 -0
- package/dist/builtin/workflows/src/durable/workflow-heartbeat-anchor.ts +153 -0
- package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +28 -0
- package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +9 -1
- package/dist/builtin/workflows/src/engine/run.ts +1 -0
- package/dist/builtin/workflows/src/extension/adopt-session-run-state.ts +20 -0
- package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +9 -30
- package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +28 -10
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +138 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +3365 -1341
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-delivery.ts +197 -0
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-notice.ts +115 -0
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-scheduler.ts +962 -0
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +4 -1
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +29 -5
- package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +32 -1
- package/dist/builtin/workflows/src/runs/background/cancellation-registry.ts +10 -1
- package/dist/builtin/workflows/src/runs/background/job-tracker.ts +10 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +16 -11
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +31 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +41 -10
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +48 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +4 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +45 -12
- package/dist/builtin/workflows/src/sdk-surface.ts +9 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +10 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +10 -0
- package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +14 -2
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +12 -0
- package/dist/builtin/workflows/src/shared/prompt-answer.ts +130 -0
- package/dist/builtin/workflows/src/shared/session-scoped-singleton.ts +98 -0
- package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +9 -1
- package/dist/builtin/workflows/src/shared/store-factory.ts +9 -1
- package/dist/builtin/workflows/src/shared/store-public-types.ts +2 -1
- package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +7 -0
- package/dist/builtin/workflows/src/shared/store-types.ts +18 -1
- package/dist/builtin/workflows/src/shared/tool-payload-bounds.ts +576 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +1 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +1 -0
- package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.d.ts +21 -0
- package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.ts +25 -0
- package/dist/builtin/workflows/src/tui/graph-theme.ts +8 -1
- package/dist/builtin/workflows/src/tui/graph-view-constants.ts +11 -0
- package/dist/builtin/workflows/src/tui/graph-view-input.ts +100 -5
- package/dist/builtin/workflows/src/tui/graph-view-layout.ts +42 -11
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +55 -6
- package/dist/builtin/workflows/src/tui/graph-view-render.ts +71 -6
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +43 -0
- package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +2 -0
- package/dist/builtin/workflows/src/tui/node-card.ts +5 -1
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +11 -2
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +36 -10
- package/dist/builtin/workflows/src/tui/switcher.ts +11 -4
- package/dist/builtin/workflows/src/tui/tool-detail.ts +348 -0
- package/dist/builtin/workflows/src/tui/workflow-status.ts +5 -2
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts +1 -1
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/credential-print.d.ts +1 -1
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/list-models.d.ts +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +9 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +7 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session-custom-message-commit.js +2 -2
- package/dist/core/agent-session-custom-message-commit.js.map +1 -1
- package/dist/core/agent-session-export.d.ts +6 -1
- package/dist/core/agent-session-export.d.ts.map +1 -1
- package/dist/core/agent-session-export.js +6 -3
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +6 -4
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +5 -2
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +12 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +31 -10
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-skill-block.d.ts +1 -0
- package/dist/core/agent-session-skill-block.d.ts.map +1 -1
- package/dist/core/agent-session-skill-block.js +18 -2
- package/dist/core/agent-session-skill-block.js.map +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +2 -1
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +2 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.js +2 -2
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +0 -6
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/cloudflare-gateway-binding.d.ts +11 -0
- package/dist/core/cloudflare-gateway-binding.d.ts.map +1 -0
- package/dist/core/cloudflare-gateway-binding.js +11 -0
- package/dist/core/cloudflare-gateway-binding.js.map +1 -0
- package/dist/core/codex-fast-mode-transport.d.ts +12 -0
- package/dist/core/codex-fast-mode-transport.d.ts.map +1 -0
- package/dist/core/codex-fast-mode-transport.js +130 -0
- package/dist/core/codex-fast-mode-transport.js.map +1 -0
- package/dist/core/codex-fast-mode.d.ts +20 -6
- package/dist/core/codex-fast-mode.d.ts.map +1 -1
- package/dist/core/codex-fast-mode.js +111 -3
- package/dist/core/codex-fast-mode.js.map +1 -1
- package/dist/core/diagnostics.d.ts +4 -0
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/event-bus.d.ts +12 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +22 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/experimental.d.ts +25 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +24 -0
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/template-js/tree-filter-render.js +4 -3
- package/dist/core/export-html/template.js +4 -3
- package/dist/core/extension-session-state.d.ts +28 -0
- package/dist/core/extension-session-state.d.ts.map +1 -0
- package/dist/core/extension-session-state.js +55 -0
- package/dist/core/extension-session-state.js.map +1 -0
- package/dist/core/extensions/api-types.d.ts +6 -0
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +4 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -0
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -0
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +16 -10
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +12 -1
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +2 -0
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +8 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +3 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +3 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +26 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js +17 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +5 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/keybindings.d.ts +24 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +6 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-config.d.ts +5 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +1 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts +1 -1
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +3 -3
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +1 -1
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +1 -1
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-runtime.d.ts +54 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +96 -13
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/oauth-login.js.map +1 -1
- package/dist/core/project-trust.d.ts +10 -0
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js +12 -0
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/resource-loader-assets.d.ts.map +1 -1
- package/dist/core/resource-loader-assets.js +14 -5
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +3 -0
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +5 -0
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +2 -0
- package/dist/core/resource-loader-internals.d.ts.map +1 -1
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +2 -0
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +2 -0
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/resource-loader.d.ts +2 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +1 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk-types.d.ts +7 -6
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +17 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +7 -1
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +11 -2
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +2 -2
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js +6 -4
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-list.d.ts.map +1 -1
- package/dist/core/session-manager-list.js +5 -1
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-types.d.ts +25 -2
- package/dist/core/session-manager-types.d.ts.map +1 -1
- package/dist/core/session-manager-types.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +8 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +9 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-types.d.ts +4 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/skill-catalog.d.ts +35 -0
- package/dist/core/skill-catalog.d.ts.map +1 -0
- package/dist/core/skill-catalog.js +264 -0
- package/dist/core/skill-catalog.js.map +1 -0
- package/dist/core/skills-async.d.ts.map +1 -1
- package/dist/core/skills-async.js +12 -6
- package/dist/core/skills-async.js.map +1 -1
- package/dist/core/skills.d.ts +2 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +8 -5
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.js +2 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts +25 -2
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.js +47 -18
- package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js +5 -2
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js +3 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +8 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +2 -0
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +2 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +3 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/hashline-engine/format.d.ts +2 -0
- package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/format.js +4 -2
- package/dist/core/tools/hashline-engine/format.js.map +1 -1
- package/dist/core/tools/hashline-engine/messages.d.ts +2 -0
- package/dist/core/tools/hashline-engine/messages.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/messages.js +4 -2
- package/dist/core/tools/hashline-engine/messages.js.map +1 -1
- package/dist/core/tools/hashline-engine/parser.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/parser.js +16 -4
- package/dist/core/tools/hashline-engine/parser.js.map +1 -1
- package/dist/core/tools/hashline-engine/tokenizer.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/tokenizer.js +37 -27
- package/dist/core/tools/hashline-engine/tokenizer.js.map +1 -1
- package/dist/core/tools/hashline.d.ts.map +1 -1
- package/dist/core/tools/hashline.js +8 -2
- package/dist/core/tools/hashline.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +2 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +8 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/search.d.ts.map +1 -1
- package/dist/core/tools/search.js +2 -0
- package/dist/core/tools/search.js.map +1 -1
- package/dist/core/tools/todos.d.ts +3 -12
- package/dist/core/tools/todos.d.ts.map +1 -1
- package/dist/core/tools/todos.js +19 -4
- package/dist/core/tools/todos.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +2 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/main-runtime-api-key.d.ts +1 -1
- package/dist/main-runtime-api-key.js.map +1 -1
- package/dist/main-session-options.d.ts +1 -1
- package/dist/main-session-options.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +8 -0
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +8 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +26 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +38 -0
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.d.ts +37 -0
- package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +54 -1
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.js +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/reserved-bottom-overlay.d.ts +95 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.d.ts.map +1 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.js +234 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +4 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +4 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +7 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +12 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +5 -4
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.js +2 -2
- package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js +94 -6
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +41 -3
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +80 -11
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.d.ts +2 -0
- package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +8 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.js +13 -3
- package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +3 -4
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +6 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.js +2 -2
- package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +7 -3
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +7 -1
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +2 -2
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +34 -9
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts +21 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +140 -38
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts +17 -0
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
- package/dist/modes/interactive/model-catalog-refresh.js +84 -0
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +2 -0
- package/dist/modes/interactive/theme/light.json +2 -0
- package/dist/modes/interactive/theme/theme-class.d.ts +12 -3
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +6 -1
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +23 -10
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js +1 -0
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.d.ts +8 -0
- package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.js +3 -1
- package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +9 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +2 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +1 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +1 -0
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts +3 -1
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +3 -2
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/json-event.d.ts +6 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +17 -2
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +5 -4
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-responses.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/create-harness.d.ts.map +1 -1
- package/dist/server/create-harness.js +11 -0
- package/dist/server/create-harness.js.map +1 -1
- package/dist/utils/abort.d.ts +9 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +19 -0
- package/dist/utils/abort.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +16 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +19 -19
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/custom-provider.md +9 -8
- package/docs/development.md +0 -1
- package/docs/docs.json +0 -1
- package/docs/environment-variables.md +3 -0
- package/docs/extensions.md +100 -2
- package/docs/json.md +3 -1
- package/docs/keybindings.md +8 -3
- package/docs/models/artificial-analysis-index.md +2 -2
- package/docs/models/model-selection.md +32 -23
- package/docs/models/pareto-efficiency.md +25 -24
- package/docs/providers.md +95 -2
- package/docs/quickstart.md +4 -2
- package/docs/rpc.md +21 -7
- package/docs/sdk.md +26 -1
- package/docs/session-format.md +5 -2
- package/docs/settings.md +34 -3
- package/docs/skills.md +16 -1
- package/docs/terminal-setup.md +15 -2
- package/docs/themes.md +22 -4
- package/docs/tools.md +3 -1
- package/docs/tui.md +2 -0
- package/docs/usage.md +5 -4
- package/docs/workflows.md +96 -19
- package/npm-shrinkwrap.json +211 -232
- package/package.json +8 -8
- package/dist/builtin/i-have-adhd/CHANGELOG.md +0 -30
- package/dist/builtin/i-have-adhd/LICENSE +0 -21
- package/dist/builtin/i-have-adhd/README.md +0 -18
- package/dist/builtin/i-have-adhd/index.ts +0 -238
- package/dist/builtin/i-have-adhd/package.json +0 -56
- package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +0 -140
- package/dist/builtin/workflows/builtin/open-claude-design-feedback.ts +0 -359
- package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-core.mjs +0 -180
- package/docs/i-have-adhd.md +0 -36
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GRAPH_SCROLL_STEP_COLS } from "./graph-view-constants.js";
|
|
2
2
|
import { GraphViewRenderer } from "./graph-view-render.js";
|
|
3
|
-
import { isKeybindingsLike, type KeybindingsLike } from "./keybindings-adapter.js";
|
|
3
|
+
import { APP_ACTION, isKeybindingsLike, type KeybindingsLike, matchesAction } from "./keybindings-adapter.js";
|
|
4
4
|
import { isTerminalLeftMousePress, parseTerminalMouseInput, terminalMouseWheelDirection } from "./mouse-input.js";
|
|
5
5
|
import { defaultResponseFor, handlePromptCardInput } from "./prompt-card.js";
|
|
6
6
|
import { filterStages, type SwitcherState } from "./switcher.js";
|
|
@@ -12,11 +12,14 @@ interface MouseWheelDelta {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
const GRAPH_SCROLL_WHEEL_LINES = 4;
|
|
15
|
+
/** Raw Ctrl+O is only a compatibility fallback for hosts without keybindings. */
|
|
16
|
+
const TOOL_EXPAND_FALLBACK = "\x0f";
|
|
15
17
|
|
|
16
18
|
/** Keyboard, mouse, switcher, prompt, and focus navigation handling. */
|
|
17
19
|
export abstract class GraphViewInputController extends GraphViewRenderer {
|
|
18
20
|
/** Returns true if consumed. */
|
|
19
21
|
handleInput(data: string): boolean {
|
|
22
|
+
if (this.toolDetail !== null) return this._handleToolDetailInput(data);
|
|
20
23
|
if (this._isReturnToMainChatInput(data)) {
|
|
21
24
|
this._returnToMainChat();
|
|
22
25
|
return true;
|
|
@@ -35,10 +38,89 @@ export abstract class GraphViewInputController extends GraphViewRenderer {
|
|
|
35
38
|
return this._handleGraphInput(data);
|
|
36
39
|
}
|
|
37
40
|
|
|
41
|
+
private _handleToolDetailInput(data: string): boolean {
|
|
42
|
+
if (this.graphLayout.handleScrollbarInput(data)) {
|
|
43
|
+
this.pendingEnsureFocusedVisible = false;
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
const wheelDelta = this._mouseWheelDelta(data);
|
|
47
|
+
if (wheelDelta) {
|
|
48
|
+
if (wheelDelta.rows !== 0) this._scrollGraphVertically(wheelDelta.rows);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
if (this._matchesToolExpandInput(data)) {
|
|
52
|
+
this.toolDetailExpanded = !this.toolDetailExpanded;
|
|
53
|
+
this.pendingEnsureFocusedVisible = true;
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
if (this._isReturnToMainChatInput(data) || matchesKey(data, Key.escape)) {
|
|
57
|
+
this._closeToolDetail();
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
if (matchesKey(data, Key.ctrl("c"))) {
|
|
61
|
+
this.onClose?.();
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
if (matchesKey(data, "h") && this.onHide) {
|
|
65
|
+
this.onHide();
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
// A capped payload still renders far more rows than a terminal shows, so
|
|
69
|
+
// the detail must be readable without a mouse: these keys drive the same
|
|
70
|
+
// vertical scroll the wheel and scrollbar drive.
|
|
71
|
+
if (matchesKey(data, Key.down)) {
|
|
72
|
+
this._scrollGraphVertically(1);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
if (matchesKey(data, Key.up)) {
|
|
76
|
+
this._scrollGraphVertically(-1);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
if (matchesKey(data, Key.pageDown)) {
|
|
80
|
+
this._scrollGraphVertically(this._toolDetailPageRows());
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
if (matchesKey(data, Key.pageUp)) {
|
|
84
|
+
this._scrollGraphVertically(-this._toolDetailPageRows());
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
if (matchesKey(data, Key.home)) {
|
|
88
|
+
this.pendingEnsureFocusedVisible = false;
|
|
89
|
+
this.graphLayout.scrollView.scrollToStart();
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
if (matchesKey(data, Key.end)) {
|
|
93
|
+
this.pendingEnsureFocusedVisible = false;
|
|
94
|
+
this.graphLayout.scrollView.scrollToEnd();
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
if (
|
|
98
|
+
matchesKey(data, Key.enter) ||
|
|
99
|
+
matchesKey(data, Key.left) ||
|
|
100
|
+
matchesKey(data, Key.right) ||
|
|
101
|
+
matchesKey(data, "/") ||
|
|
102
|
+
parseTerminalMouseInput(data) !== null
|
|
103
|
+
)
|
|
104
|
+
return true;
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** One page is the visible body, less a row of overlap for continuity. */
|
|
109
|
+
private _toolDetailPageRows(): number {
|
|
110
|
+
return Math.max(1, this.graphLayout.viewportRows - 1);
|
|
111
|
+
}
|
|
112
|
+
|
|
38
113
|
private _promptKeybindings(): KeybindingsLike | undefined {
|
|
39
114
|
return isKeybindingsLike(this.piKeybindings) ? this.piKeybindings : undefined;
|
|
40
115
|
}
|
|
41
116
|
|
|
117
|
+
private _matchesToolExpandInput(data: string): boolean {
|
|
118
|
+
const keybindings = this._promptKeybindings();
|
|
119
|
+
// Do not run a raw fallback beside a host manager: a user remap must win,
|
|
120
|
+
// and an explicitly unbound action must remain unbound.
|
|
121
|
+
return keybindings ? matchesAction(keybindings, data, APP_ACTION.toolsExpand) : data === TOOL_EXPAND_FALLBACK;
|
|
122
|
+
}
|
|
123
|
+
|
|
42
124
|
private _isReturnToMainChatInput(data: string): boolean {
|
|
43
125
|
return matchesKey(data, Key.ctrl("x"));
|
|
44
126
|
}
|
|
@@ -151,11 +233,13 @@ export abstract class GraphViewInputController extends GraphViewRenderer {
|
|
|
151
233
|
const idx = this.cachedLayout.findIndex((n) => n.stage.id === selected.id);
|
|
152
234
|
if (idx !== -1) {
|
|
153
235
|
this._setFocusedIndex(idx);
|
|
154
|
-
// Selecting from the
|
|
155
|
-
//
|
|
156
|
-
//
|
|
236
|
+
// Selecting from the switcher opens tool detail or preserves the
|
|
237
|
+
// existing stage attach path; stages without an attach callback
|
|
238
|
+
// retain their historical no-op behavior.
|
|
157
239
|
this.switcherOpen = false;
|
|
158
|
-
if (this.
|
|
240
|
+
if (this.cachedLayout[idx]?.stage.nodeKind === "tool") this._openFocusedToolDetail();
|
|
241
|
+
else this._attachFocusedStage();
|
|
242
|
+
return true;
|
|
159
243
|
}
|
|
160
244
|
}
|
|
161
245
|
this.switcherOpen = false;
|
|
@@ -241,6 +325,9 @@ export abstract class GraphViewInputController extends GraphViewRenderer {
|
|
|
241
325
|
}
|
|
242
326
|
|
|
243
327
|
private _activateFocusedNode(): void {
|
|
328
|
+
// Tool nodes open a read-only snapshot detail; they never enter the
|
|
329
|
+
// stage-chat attach path even though they share the graph card shape.
|
|
330
|
+
if (this._openFocusedToolDetail()) return;
|
|
244
331
|
// Enter and direct node clicks attach the popup interior to the focused
|
|
245
332
|
// stage. The attach shell swaps in the stage-chat view without remounting
|
|
246
333
|
// the overlay; without a callback, fall back to the legacy expand/collapse
|
|
@@ -309,10 +396,18 @@ export abstract class GraphViewInputController extends GraphViewRenderer {
|
|
|
309
396
|
if (direction === "right") return { cols: GRAPH_SCROLL_STEP_COLS, rows: 0 };
|
|
310
397
|
return null;
|
|
311
398
|
}
|
|
399
|
+
|
|
312
400
|
get _graphScrollbarGeometry() {
|
|
313
401
|
return this.graphLayout.scrollbarGeometry;
|
|
314
402
|
}
|
|
315
403
|
|
|
404
|
+
get _toolDetail(): typeof this.toolDetail {
|
|
405
|
+
return this.toolDetail;
|
|
406
|
+
}
|
|
407
|
+
get _toolDetailExpanded(): boolean {
|
|
408
|
+
return this.toolDetailExpanded;
|
|
409
|
+
}
|
|
410
|
+
|
|
316
411
|
// ---- test seams ----
|
|
317
412
|
get _focusedIndex(): number {
|
|
318
413
|
return this.focusedIndex;
|
|
@@ -85,6 +85,7 @@ export class GraphViewLayout {
|
|
|
85
85
|
private readonly callbacks: GraphViewLayoutCallbacks;
|
|
86
86
|
private bodyViewportRows = 0;
|
|
87
87
|
private bodyContentRows = 0;
|
|
88
|
+
private lastBodyWidth: number | undefined;
|
|
88
89
|
private scrollbar: ScrollbarGeometry | undefined;
|
|
89
90
|
private draggingScrollbar: { grabOffset: number } | undefined;
|
|
90
91
|
|
|
@@ -93,7 +94,12 @@ export class GraphViewLayout {
|
|
|
93
94
|
|
|
94
95
|
const margin = new CallbackComponent(() => [""]);
|
|
95
96
|
const header = new CallbackComponent((width) => this.callbacks.renderHeader(width));
|
|
96
|
-
const body = new CallbackComponent((width) =>
|
|
97
|
+
const body = new CallbackComponent((width) => {
|
|
98
|
+
// The ScrollView reserves its scrollbar column from the width it hands
|
|
99
|
+
// the body, so this is the only place the real body width is known.
|
|
100
|
+
this.lastBodyWidth = width;
|
|
101
|
+
return this.renderBody(width);
|
|
102
|
+
});
|
|
97
103
|
const footer = new CallbackComponent((width) => this.callbacks.renderFooter(width));
|
|
98
104
|
this.scrollView = new ScrollView(body, {
|
|
99
105
|
axis: "vertical",
|
|
@@ -117,16 +123,20 @@ export class GraphViewLayout {
|
|
|
117
123
|
const safeHeight = Math.max(1, Math.floor(height));
|
|
118
124
|
const marginRows = graphLayoutMarginRows(safeHeight);
|
|
119
125
|
this.bodyViewportRows = graphLayoutBodyRows(safeHeight);
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
// Content height can depend on the width the body is laid out at, and that
|
|
127
|
+
// is narrower than the frame whenever the ScrollView reserves its
|
|
128
|
+
// scrollbar column. Measuring at the frame width clamps the scroll range
|
|
129
|
+
// to a height the body never produced, which strands its tail rows for
|
|
130
|
+
// every input path. Measure at the width the body actually received last
|
|
131
|
+
// time, then reconcile if this frame disagrees; when no column is
|
|
132
|
+
// reserved the two are already the same width and nothing re-runs.
|
|
133
|
+
const requestedTop = this.scrollView.scrollTop;
|
|
134
|
+
const expectedWidth = this.lastBodyWidth ?? safeWidth;
|
|
135
|
+
let frame = this.renderPass(safeWidth, safeHeight, expectedWidth);
|
|
136
|
+
const measuredWidth = this.lastBodyWidth ?? safeWidth;
|
|
137
|
+
if (measuredWidth !== expectedWidth && this.contentRowsFor(measuredWidth) !== this.bodyContentRows) {
|
|
138
|
+
frame = this.renderPass(safeWidth, safeHeight, measuredWidth, requestedTop);
|
|
139
|
+
}
|
|
130
140
|
const bodyBox = getScrollViewBox(frame, this.scrollView);
|
|
131
141
|
this.scrollbar = bodyBox ? getScrollbarGeometry(bodyBox) : undefined;
|
|
132
142
|
if (!this.scrollbar) this.draggingScrollbar = undefined;
|
|
@@ -142,6 +152,27 @@ export class GraphViewLayout {
|
|
|
142
152
|
};
|
|
143
153
|
}
|
|
144
154
|
|
|
155
|
+
private contentRowsFor(width: number): number {
|
|
156
|
+
return Math.max(0, Math.floor(this.callbacks.bodyContentHeight(width, this.bodyViewportRows)));
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* One full layout pass whose scroll range is measured at `measureWidth`.
|
|
161
|
+
*
|
|
162
|
+
* `restoreTop` re-applies a scroll position that a previous pass' stale,
|
|
163
|
+
* shorter content height clamped away, so reconciling never scrolls the
|
|
164
|
+
* user back up a frame.
|
|
165
|
+
*/
|
|
166
|
+
private renderPass(safeWidth: number, safeHeight: number, measureWidth: number, restoreTop?: number): LayoutFrame {
|
|
167
|
+
const requestRender = this.callbacks.requestRender ?? EMPTY_RENDER;
|
|
168
|
+
this.bodyContentRows = this.contentRowsFor(measureWidth);
|
|
169
|
+
this.scrollView.updateLayout(this.bodyContentRows, this.bodyViewportRows, requestRender);
|
|
170
|
+
if (restoreTop !== undefined && this.scrollView.scrollTop < restoreTop) this.scrollView.scrollTo(restoreTop);
|
|
171
|
+
this.scrollView.setScrollbar(this.bodyContentRows > this.bodyViewportRows ? "always" : "hidden");
|
|
172
|
+
this.callbacks.beforeFrame?.(this.scrollView, this.bodyViewportRows, this.bodyContentRows, safeWidth);
|
|
173
|
+
return renderLayoutFrame(this.root, safeWidth, safeHeight, requestRender);
|
|
174
|
+
}
|
|
175
|
+
|
|
145
176
|
/** Repaint the thumb after overlays that cover the body rows. */
|
|
146
177
|
paintScrollbar(lines: string[], width: number): void {
|
|
147
178
|
const geometry = this.scrollbar;
|
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
import { BOLD, hexBg, hexToAnsi, RESET } from "./color-utils.js";
|
|
2
2
|
import type { GraphCanvas } from "./graph-canvas.js";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
COMPACT_HINT_KEYS,
|
|
5
|
+
COMPACT_TOOL_DETAIL_HINT_KEYS,
|
|
6
|
+
HINT_KEYS,
|
|
7
|
+
MODE_PILL_LABEL,
|
|
8
|
+
TOOL_DETAIL_HINT_KEYS,
|
|
9
|
+
} from "./graph-view-constants.js";
|
|
4
10
|
import { GraphViewState } from "./graph-view-state.js";
|
|
5
11
|
import { renderOutlinePill } from "./header.js";
|
|
12
|
+
import { APP_ACTION, isKeybindingsLike } from "./keybindings-adapter.js";
|
|
6
13
|
import { NODE_H, NODE_W } from "./layout.js";
|
|
7
14
|
import { sliceColumns, truncateToWidth, visibleWidth } from "./text-helpers.js";
|
|
8
15
|
import { OVERLAY_HIDDEN_STATUS_KEYS, WORKFLOW_STATUS_KEY } from "./workflow-status.js";
|
|
9
16
|
|
|
17
|
+
export function toolExpandKey(piKeybindings: unknown): string {
|
|
18
|
+
const keybindings = isKeybindingsLike(piKeybindings) ? piKeybindings : undefined;
|
|
19
|
+
const keys = keybindings?.getKeys?.(APP_ACTION.toolsExpand);
|
|
20
|
+
// Missing manager → default. Empty list → explicitly unbound; do not
|
|
21
|
+
// invent a keyless `expand` label the way `"".join` used to.
|
|
22
|
+
if (keys === undefined) return "ctrl+o";
|
|
23
|
+
return keys.filter((key) => key.length > 0).join("/");
|
|
24
|
+
}
|
|
10
25
|
/** Low-level overlay geometry, chrome, ANSI canvas, and edge helpers. */
|
|
11
26
|
export abstract class GraphViewRenderHelpers extends GraphViewState {
|
|
12
27
|
/**
|
|
@@ -45,13 +60,47 @@ export abstract class GraphViewRenderHelpers extends GraphViewState {
|
|
|
45
60
|
const rightEdgePad = 2;
|
|
46
61
|
const hintsBudget = Math.max(0, width - leftEdgePad - pillW - rightEdgePad);
|
|
47
62
|
const fullHierarchyHint = "ctrl+x return to main chat";
|
|
63
|
+
// A focused tool node has no stage chat, but Enter now opens its read-only
|
|
64
|
+
// detail, so it keeps an activation hint of its own instead of losing the
|
|
65
|
+
// `↵` affordance entirely the way an unfocusable node does. Both lookups
|
|
66
|
+
// resolve once per frame: the two hint lists below are built eagerly, and
|
|
67
|
+
// re-resolving focus inside each would double this frame's layout reads.
|
|
68
|
+
const chatTarget = this.toolDetail === null ? this._focusedStageChatTarget() : undefined;
|
|
69
|
+
const focusedToolNode = this.toolDetail === null && this._focusedTool() !== undefined;
|
|
70
|
+
const relabelActivation = (
|
|
71
|
+
keys: ReadonlyArray<{ key: string; label: string }>,
|
|
72
|
+
label: string,
|
|
73
|
+
): Array<{ key: string; label: string }> =>
|
|
74
|
+
keys.map((hint) => (hint.key === "↵" ? { key: hint.key, label } : hint));
|
|
75
|
+
const toolDetailExpandKey = toolExpandKey(this.piKeybindings);
|
|
76
|
+
const expandHint =
|
|
77
|
+
toolDetailExpandKey.length > 0
|
|
78
|
+
? [{ key: toolDetailExpandKey, label: this.toolDetailExpanded ? "collapse" : "expand" }]
|
|
79
|
+
: [];
|
|
80
|
+
const toolDetailHintKeys = this.toolDetail === null ? [] : [...TOOL_DETAIL_HINT_KEYS, ...expandHint];
|
|
81
|
+
const compactToolDetailHintKeys =
|
|
82
|
+
this.toolDetail === null ? [] : [...COMPACT_TOOL_DETAIL_HINT_KEYS, ...expandHint];
|
|
48
83
|
const availableHintKeys =
|
|
49
|
-
this.
|
|
84
|
+
this.toolDetail !== null
|
|
85
|
+
? toolDetailHintKeys
|
|
86
|
+
: focusedToolNode
|
|
87
|
+
? relabelActivation(HINT_KEYS, "open tool detail")
|
|
88
|
+
: chatTarget === undefined
|
|
89
|
+
? HINT_KEYS.filter(({ key }) => key !== "↵")
|
|
90
|
+
: HINT_KEYS;
|
|
50
91
|
const availableCompactHintKeys =
|
|
51
|
-
this.
|
|
52
|
-
?
|
|
53
|
-
:
|
|
54
|
-
|
|
92
|
+
this.toolDetail !== null
|
|
93
|
+
? compactToolDetailHintKeys
|
|
94
|
+
: focusedToolNode
|
|
95
|
+
? relabelActivation(COMPACT_HINT_KEYS, "tool detail")
|
|
96
|
+
: chatTarget === undefined
|
|
97
|
+
? COMPACT_HINT_KEYS.filter(({ key }) => key !== "↵")
|
|
98
|
+
: COMPACT_HINT_KEYS;
|
|
99
|
+
const fullHintWidth =
|
|
100
|
+
this.toolDetail !== null
|
|
101
|
+
? toolDetailHintKeys.map(({ key, label }) => `${key} ${label}`).join(" · ")
|
|
102
|
+
: fullHierarchyHint;
|
|
103
|
+
const hintKeys = hintsBudget >= visibleWidth(fullHintWidth) ? availableHintKeys : availableCompactHintKeys;
|
|
55
104
|
const statusText = this._externalStatusText();
|
|
56
105
|
const statusSegment = statusText ? [`${accent}${statusText}${RESET}${chromeBg}`] : [];
|
|
57
106
|
const hintSegments = hintKeys.map(
|
|
@@ -2,12 +2,15 @@ import type { RunSnapshot } from "../shared/store-types.js";
|
|
|
2
2
|
import { hexBg, hexToAnsi, RESET } from "./color-utils.js";
|
|
3
3
|
import { GraphViewGraphRenderer } from "./graph-view-graph-render.js";
|
|
4
4
|
import { GRAPH_HEADER_ROWS, GraphViewLayout, graphLayoutNaturalHeight } from "./graph-view-layout.js";
|
|
5
|
+
import { toolExpandKey } from "./graph-view-render-helpers.js";
|
|
5
6
|
import type { GraphViewOpts } from "./graph-view-types.js";
|
|
6
7
|
import { renderHeader, renderOutlinePill } from "./header.js";
|
|
8
|
+
import { isKeybindingsLike } from "./keybindings-adapter.js";
|
|
7
9
|
import { NODE_H } from "./layout.js";
|
|
8
10
|
import { renderPromptCard } from "./prompt-card.js";
|
|
9
11
|
import { renderSwitcher } from "./switcher.js";
|
|
10
12
|
import { truncateToWidth, visibleWidth } from "./text-helpers.js";
|
|
13
|
+
import { renderToolDetailLines } from "./tool-detail.js";
|
|
11
14
|
|
|
12
15
|
/**
|
|
13
16
|
* `renderLayoutFrame` wraps each painted row with its segment reset. The
|
|
@@ -23,20 +26,28 @@ function stripLayoutWrapper(line: string): string {
|
|
|
23
26
|
const end = endsWithWrapper ? line.length - LAYOUT_OSC_RESET.length : line.length;
|
|
24
27
|
return line.slice(start, Math.max(start, end));
|
|
25
28
|
}
|
|
29
|
+
/** One frame's tool-message geometry, derived once and shared by both callbacks. */
|
|
30
|
+
interface ToolDetailFrame {
|
|
31
|
+
readonly width: number;
|
|
32
|
+
readonly blockWidth: number;
|
|
33
|
+
readonly leftPad: number;
|
|
34
|
+
readonly lines: readonly string[];
|
|
35
|
+
}
|
|
36
|
+
|
|
26
37
|
/** Overlay/widget rendering orchestration for GraphView. */
|
|
27
38
|
export abstract class GraphViewRenderer extends GraphViewGraphRenderer {
|
|
28
39
|
protected readonly graphLayout: GraphViewLayout;
|
|
29
40
|
private lastOverlayFrameHeight = 0;
|
|
30
41
|
private hasReportedViewportRows = false;
|
|
31
42
|
private renderRun: RunSnapshot | null | undefined;
|
|
32
|
-
|
|
43
|
+
private detailFrame: ToolDetailFrame | null = null;
|
|
33
44
|
constructor(opts: GraphViewOpts) {
|
|
34
45
|
super(opts);
|
|
35
46
|
this.graphLayout = new GraphViewLayout({
|
|
36
47
|
renderHeader: (width) => this._renderHeader(width),
|
|
37
48
|
renderBody: (width, top, rows, contentRows) => this._renderBody(width, top, rows, contentRows),
|
|
38
49
|
renderFooter: (width) => this._renderStatusline(width),
|
|
39
|
-
bodyContentHeight: (
|
|
50
|
+
bodyContentHeight: (width, viewportRows) => this._graphBodyContentHeight(width, viewportRows),
|
|
40
51
|
beforeFrame: (scrollView, viewportRows, contentRows, width) =>
|
|
41
52
|
this._prepareGraphScroll(scrollView, viewportRows, contentRows, width),
|
|
42
53
|
requestRender: () => this.requestRender?.(),
|
|
@@ -77,6 +88,10 @@ export abstract class GraphViewRenderer extends GraphViewGraphRenderer {
|
|
|
77
88
|
const frameWidth = Math.max(40, width);
|
|
78
89
|
const run = this._getCurrentRun();
|
|
79
90
|
this.renderRun = run;
|
|
91
|
+
// One frame, one detail layout: the scroll clamp and the painted rows
|
|
92
|
+
// must come from the same line array, and a running node's timing must
|
|
93
|
+
// still advance between frames.
|
|
94
|
+
this.detailFrame = null;
|
|
80
95
|
try {
|
|
81
96
|
const frameHeight = this._overlayFrameHeight(run);
|
|
82
97
|
const layoutFrame = this.graphLayout.render(frameWidth, frameHeight);
|
|
@@ -91,9 +106,14 @@ export abstract class GraphViewRenderer extends GraphViewGraphRenderer {
|
|
|
91
106
|
const bodyStart = layoutFrame.bodyBox?.rect.y ?? layoutFrame.topMarginRows + GRAPH_HEADER_ROWS;
|
|
92
107
|
const bodyRows = layoutFrame.bodyBox?.rect.height ?? this.graphLayout.viewportRows;
|
|
93
108
|
if (run) {
|
|
94
|
-
this.
|
|
95
|
-
|
|
96
|
-
|
|
109
|
+
if (this.toolDetail !== null) {
|
|
110
|
+
this.graphNodeHitRects = [];
|
|
111
|
+
this.lastGraphViewport = null;
|
|
112
|
+
} else {
|
|
113
|
+
this._recordGraphNodeHitRects(bodyStart + this.lastGraphTopPad, this.lastGraphVisibleRows);
|
|
114
|
+
this._renderSwitcherOverlay(lines, run, frameWidth, bodyStart, bodyRows);
|
|
115
|
+
this._renderPromptOverlay(lines, frameWidth, bodyStart, bodyRows);
|
|
116
|
+
}
|
|
97
117
|
} else {
|
|
98
118
|
this.graphNodeHitRects = [];
|
|
99
119
|
this.lastGraphViewport = null;
|
|
@@ -127,8 +147,42 @@ export abstract class GraphViewRenderer extends GraphViewGraphRenderer {
|
|
|
127
147
|
return this.renderRun !== undefined ? this.renderRun : this._getCurrentRun();
|
|
128
148
|
}
|
|
129
149
|
|
|
130
|
-
|
|
150
|
+
/**
|
|
151
|
+
* Lay the tool message block out once per frame width.
|
|
152
|
+
*
|
|
153
|
+
* The height callback and the body callback are invoked separately by the
|
|
154
|
+
* layout, and the body may be handed a narrower width when the ScrollView
|
|
155
|
+
* reserves its scrollbar column. Both go through here, so the rows the
|
|
156
|
+
* scroll range is clamped to are the rows that were actually produced.
|
|
157
|
+
*/
|
|
158
|
+
private _toolDetailFrame(node: NonNullable<GraphViewRenderer["toolDetail"]>, width: number): ToolDetailFrame {
|
|
159
|
+
const safeWidth = Math.max(1, Math.floor(width));
|
|
160
|
+
const cached = this.detailFrame;
|
|
161
|
+
if (cached !== null && cached.width === safeWidth) return cached;
|
|
162
|
+
// Match the flat message surface used by agent tool calls. The one-cell
|
|
163
|
+
// leading inset gives the block the same breathing room without drawing a
|
|
164
|
+
// standalone rounded panel or hiding content behind a border.
|
|
165
|
+
const blockWidth = Math.max(1, safeWidth - 1);
|
|
166
|
+
const frame: ToolDetailFrame = {
|
|
167
|
+
width: safeWidth,
|
|
168
|
+
blockWidth,
|
|
169
|
+
leftPad: safeWidth > 1 ? 1 : 0,
|
|
170
|
+
lines: renderToolDetailLines(node, {
|
|
171
|
+
theme: this.graphTheme,
|
|
172
|
+
width: blockWidth,
|
|
173
|
+
expanded: this.toolDetailExpanded,
|
|
174
|
+
expandKey: toolExpandKey(isKeybindingsLike(this.piKeybindings) ? this.piKeybindings : undefined),
|
|
175
|
+
}),
|
|
176
|
+
};
|
|
177
|
+
this.detailFrame = frame;
|
|
178
|
+
return frame;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
private _graphBodyContentHeight(width: number, viewportRows: number): number {
|
|
131
182
|
const rows = Math.max(0, Math.floor(viewportRows));
|
|
183
|
+
if (this.toolDetail !== null) {
|
|
184
|
+
return Math.max(rows, this._toolDetailFrame(this.toolDetail, width).lines.length);
|
|
185
|
+
}
|
|
132
186
|
if (!this._currentRenderRun() || this.cachedRenderGeometry.totalRows <= 0) return rows;
|
|
133
187
|
return Math.max(rows, this.cachedRenderGeometry.totalRows);
|
|
134
188
|
}
|
|
@@ -141,6 +195,11 @@ export abstract class GraphViewRenderer extends GraphViewGraphRenderer {
|
|
|
141
195
|
): void {
|
|
142
196
|
const run = this._currentRenderRun();
|
|
143
197
|
if (viewportRows <= 0) return;
|
|
198
|
+
if (this.toolDetail !== null) {
|
|
199
|
+
if (this.pendingEnsureFocusedVisible) scrollView.scrollToStart();
|
|
200
|
+
this.pendingEnsureFocusedVisible = false;
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
144
203
|
if (!run || this.cachedRenderGeometry.totalRows <= 0) {
|
|
145
204
|
scrollView.scrollToStart();
|
|
146
205
|
this.pendingEnsureFocusedVisible = false;
|
|
@@ -188,6 +247,12 @@ export abstract class GraphViewRenderer extends GraphViewGraphRenderer {
|
|
|
188
247
|
}
|
|
189
248
|
|
|
190
249
|
private _renderBody(width: number, top: number, rows: number, _contentRows: number): string[] {
|
|
250
|
+
if (this.toolDetail !== null) {
|
|
251
|
+
const detail = this._toolDetailFrame(this.toolDetail, width);
|
|
252
|
+
return detail.lines
|
|
253
|
+
.slice(top, top + rows)
|
|
254
|
+
.map((line) => this._canvasRow(`${" ".repeat(detail.leftPad)}${line}`, width));
|
|
255
|
+
}
|
|
191
256
|
const run = this._currentRenderRun();
|
|
192
257
|
const raw = run ? this._renderGraph(width, top, rows, run) : this._renderEmptyBody(width, rows);
|
|
193
258
|
return raw.map((line) => this._canvasRow(line, width));
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
type ExpandedWorkflowGraph,
|
|
4
4
|
type ExpandedWorkflowStage,
|
|
5
5
|
type ExpandedWorkflowStageTarget,
|
|
6
|
+
type ExpandedWorkflowTool,
|
|
6
7
|
expandedStageTarget,
|
|
7
8
|
expandWorkflowGraph,
|
|
8
9
|
refreshExpandedWorkflowGraph,
|
|
@@ -103,6 +104,10 @@ export abstract class GraphViewState {
|
|
|
103
104
|
targets: new Map(),
|
|
104
105
|
};
|
|
105
106
|
protected currentSnapshot: StoreSnapshot | null = null;
|
|
107
|
+
/** Selected read-only tool detail; tool nodes never become stage chats. */
|
|
108
|
+
protected toolDetail: ExpandedWorkflowTool | null = null;
|
|
109
|
+
/** Tool message blocks open collapsed and own expansion independently of graph cards. */
|
|
110
|
+
protected toolDetailExpanded = false;
|
|
106
111
|
protected abstract _graphScrollTop(): number;
|
|
107
112
|
protected graphScrollColOffset = 0;
|
|
108
113
|
protected graphNodeHitRects: GraphNodeHitRect[] = [];
|
|
@@ -192,6 +197,7 @@ export abstract class GraphViewState {
|
|
|
192
197
|
this.lastGraphViewport = null;
|
|
193
198
|
this.pendingEnsureFocusedVisible = true;
|
|
194
199
|
this.promptState = null;
|
|
200
|
+
this.toolDetail = null;
|
|
195
201
|
this.topologySnapshot = this.currentSnapshot;
|
|
196
202
|
this.hasAnimatingStages = false;
|
|
197
203
|
this.lastBuiltSnapshotVersion = version;
|
|
@@ -219,6 +225,7 @@ export abstract class GraphViewState {
|
|
|
219
225
|
(stage) => stage.status === "running" || stage.status === "awaiting_input",
|
|
220
226
|
);
|
|
221
227
|
this._finalizeFocusAndPrompt(run, previousFocusedStageId, true);
|
|
228
|
+
this._syncToolDetail();
|
|
222
229
|
this.lastBuiltSnapshotVersion = version;
|
|
223
230
|
return;
|
|
224
231
|
}
|
|
@@ -233,6 +240,7 @@ export abstract class GraphViewState {
|
|
|
233
240
|
this.graphNodeHitRects = [];
|
|
234
241
|
this.lastGraphViewport = null;
|
|
235
242
|
this._finalizeFocusAndPrompt(run, previousFocusedStageId, false);
|
|
243
|
+
this._syncToolDetail();
|
|
236
244
|
this.lastBuiltSnapshotVersion = version;
|
|
237
245
|
}
|
|
238
246
|
|
|
@@ -434,6 +442,41 @@ export abstract class GraphViewState {
|
|
|
434
442
|
if (!stage || stage.nodeKind === "tool") return undefined;
|
|
435
443
|
return expandedStageTarget(this.expandedGraph, stage.id);
|
|
436
444
|
}
|
|
445
|
+
/** Resolve the focused graph projection back to its full tool snapshot. */
|
|
446
|
+
protected _focusedTool(): ExpandedWorkflowTool | undefined {
|
|
447
|
+
const stage = this.cachedLayout[this.focusedIndex]?.stage;
|
|
448
|
+
if (stage?.nodeKind !== "tool") return undefined;
|
|
449
|
+
return this.expandedGraph.tools.find((tool) => tool.id === stage.id);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
protected _openFocusedToolDetail(): boolean {
|
|
453
|
+
const tool = this._focusedTool();
|
|
454
|
+
if (tool === undefined) return false;
|
|
455
|
+
this.toolDetail = tool;
|
|
456
|
+
this.toolDetailExpanded = false;
|
|
457
|
+
this.graphLayoutInvalidateForDetail();
|
|
458
|
+
return true;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
protected _closeToolDetail(): boolean {
|
|
462
|
+
if (this.toolDetail === null) return false;
|
|
463
|
+
this.toolDetail = null;
|
|
464
|
+
this.toolDetailExpanded = false;
|
|
465
|
+
this.graphLayoutInvalidateForDetail();
|
|
466
|
+
return true;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
private _syncToolDetail(): void {
|
|
470
|
+
if (this.toolDetail === null) return;
|
|
471
|
+
this.toolDetail = this.expandedGraph.tools.find((tool) => tool.id === this.toolDetail?.id) ?? null;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/** Let the renderer discard any cached body frame after a detail transition. */
|
|
475
|
+
private graphLayoutInvalidateForDetail(): void {
|
|
476
|
+
this.pendingEnsureFocusedVisible = true;
|
|
477
|
+
this.graphNodeHitRects = [];
|
|
478
|
+
this.lastGraphViewport = null;
|
|
479
|
+
}
|
|
437
480
|
|
|
438
481
|
/**
|
|
439
482
|
* Pending queued messages for a rendered node. Tool nodes own no session, and
|
|
@@ -272,9 +272,13 @@ export function renderNodeCard(stage: StageSnapshot, opts: NodeCardOpts): string
|
|
|
272
272
|
const top = `${bg}${bc}╭${topMiddle}╮${RESET}`;
|
|
273
273
|
const bottom = `${bg}${bc}╰${"─".repeat(innerWidth)}╯${RESET}`;
|
|
274
274
|
|
|
275
|
+
// A tool card is a fixed-size graph node, not a result preview: the read-only
|
|
276
|
+
// detail view owns args, result, error, and timing. The body is constant in
|
|
277
|
+
// every state so the card stops competing with it, while the status, meta,
|
|
278
|
+
// and dependency rows below keep their own content.
|
|
275
279
|
const bodyText =
|
|
276
280
|
stage.nodeKind === "tool"
|
|
277
|
-
?
|
|
281
|
+
? "durable tool"
|
|
278
282
|
: stage.status === "blocked"
|
|
279
283
|
? blockedBadgeText(stage, opts.stages, innerWidth)
|
|
280
284
|
: durationText(stage);
|
|
@@ -33,6 +33,12 @@ function postMortemUnavailableMessage(reason: StageChatViewContext["postMortemUn
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
/**
|
|
37
|
+
* `renderTranscript` paints the archived chat rows into the budget it is given.
|
|
38
|
+
* `StageChatView` passes the search-aware painter so an open find box searches
|
|
39
|
+
* and highlights a read-only archive exactly as it does a live chat; the
|
|
40
|
+
* default keeps this function usable on its own.
|
|
41
|
+
*/
|
|
36
42
|
export function renderReadOnlyArchiveBody(
|
|
37
43
|
ctx: StageChatViewContext,
|
|
38
44
|
width: number,
|
|
@@ -40,6 +46,7 @@ export function renderReadOnlyArchiveBody(
|
|
|
40
46
|
stage: StageSnapshot | undefined,
|
|
41
47
|
indicatorLines: readonly string[] = [],
|
|
42
48
|
renderIndicator: () => readonly string[] = () => indicatorLines,
|
|
49
|
+
renderTranscript: (rows: number) => string[] = (rows) => ctx.chatHost.renderBody(width, rows),
|
|
43
50
|
): string[] {
|
|
44
51
|
if (stage?.promptFootprint) {
|
|
45
52
|
return renderReadOnlyPromptArchiveBody(ctx, width, budget, stage);
|
|
@@ -74,7 +81,7 @@ export function renderReadOnlyArchiveBody(
|
|
|
74
81
|
const reservedIndicatorRows =
|
|
75
82
|
indicatorLines.length > 0 && transcriptBudget > indicatorLines.length ? indicatorLines.length : 0;
|
|
76
83
|
const transcriptRows = transcriptBudget - reservedIndicatorRows;
|
|
77
|
-
const lines = transcriptRows > 0 ?
|
|
84
|
+
const lines = transcriptRows > 0 ? renderTranscript(transcriptRows) : [];
|
|
78
85
|
const visibleIndicatorLines =
|
|
79
86
|
reservedIndicatorRows > 0 ? [...renderIndicator().slice(0, reservedIndicatorRows)] : [];
|
|
80
87
|
while (visibleIndicatorLines.length < reservedIndicatorRows) visibleIndicatorLines.push(blankLine(width));
|
|
@@ -171,12 +178,14 @@ function formatReadOnlyPromptAnswer(value: unknown, kind: PendingPrompt["kind"])
|
|
|
171
178
|
}
|
|
172
179
|
}
|
|
173
180
|
|
|
181
|
+
/** `renderTranscript` as in `renderReadOnlyArchiveBody`: a paused chat is searchable too. */
|
|
174
182
|
export function renderPausedBody(
|
|
175
183
|
ctx: StageChatViewContext,
|
|
176
184
|
width: number,
|
|
177
185
|
budget: number,
|
|
178
186
|
indicatorLines: readonly string[] = [],
|
|
179
187
|
renderIndicator: () => readonly string[] = () => indicatorLines,
|
|
188
|
+
renderTranscript: (rows: number) => string[] = (rows) => ctx.chatHost.renderBody(width, rows),
|
|
180
189
|
): string[] {
|
|
181
190
|
const t = ctx.theme;
|
|
182
191
|
const callout: string[] = [];
|
|
@@ -194,7 +203,7 @@ export function renderPausedBody(
|
|
|
194
203
|
const reservedIndicatorRows =
|
|
195
204
|
indicatorLines.length > 0 && transcriptBudget > indicatorLines.length ? indicatorLines.length : 0;
|
|
196
205
|
const transcriptRows = transcriptBudget - reservedIndicatorRows;
|
|
197
|
-
const lines = transcriptRows > 0 ?
|
|
206
|
+
const lines = transcriptRows > 0 ? renderTranscript(transcriptRows) : [];
|
|
198
207
|
const visibleIndicatorLines =
|
|
199
208
|
reservedIndicatorRows > 0 ? [...renderIndicator().slice(0, reservedIndicatorRows)] : [];
|
|
200
209
|
while (visibleIndicatorLines.length < reservedIndicatorRows) visibleIndicatorLines.push(blankLine(width));
|