@pentoshi/clai 3.9.2 → 3.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/compaction-attempt.d.ts +22 -0
- package/dist/agent/compaction-attempt.js +69 -0
- package/dist/agent/compaction-attempt.js.map +1 -0
- package/dist/agent/compaction-summary.d.ts +27 -0
- package/dist/agent/compaction-summary.js +62 -0
- package/dist/agent/compaction-summary.js.map +1 -1
- package/dist/agent/context-breakdown.d.ts +2 -0
- package/dist/agent/context-breakdown.js +37 -0
- package/dist/agent/context-breakdown.js.map +1 -1
- package/dist/agent/context-manager.d.ts +7 -1
- package/dist/agent/context-manager.js +64 -15
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/continue-orient.d.ts +8 -0
- package/dist/agent/continue-orient.js +26 -3
- package/dist/agent/continue-orient.js.map +1 -1
- package/dist/agent/durable-envelope.d.ts +39 -0
- package/dist/agent/durable-envelope.js +195 -0
- package/dist/agent/durable-envelope.js.map +1 -0
- package/dist/agent/events.d.ts +21 -0
- package/dist/agent/loop-guard.d.ts +13 -5
- package/dist/agent/loop-guard.js +114 -1
- package/dist/agent/loop-guard.js.map +1 -1
- package/dist/agent/outcomes.d.ts +29 -0
- package/dist/agent/outcomes.js +118 -3
- package/dist/agent/outcomes.js.map +1 -1
- package/dist/agent/plan-decision.js +8 -3
- package/dist/agent/plan-decision.js.map +1 -1
- package/dist/agent/plan-tool.d.ts +5 -0
- package/dist/agent/plan-tool.js +166 -6
- package/dist/agent/plan-tool.js.map +1 -1
- package/dist/agent/reliability-policy.d.ts +11 -6
- package/dist/agent/reliability-policy.js +19 -13
- package/dist/agent/reliability-policy.js.map +1 -1
- package/dist/agent/request-budget.d.ts +24 -0
- package/dist/agent/request-budget.js +59 -0
- package/dist/agent/request-budget.js.map +1 -0
- package/dist/agent/responder-context.js +2 -2
- package/dist/agent/responder-context.js.map +1 -1
- package/dist/agent/responder-parent.d.ts +30 -0
- package/dist/agent/responder-parent.js +82 -0
- package/dist/agent/responder-parent.js.map +1 -0
- package/dist/agent/runner.d.ts +15 -2
- package/dist/agent/runner.js +766 -213
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/scope-context.d.ts +5 -0
- package/dist/agent/scope-context.js +7 -1
- package/dist/agent/scope-context.js.map +1 -1
- package/dist/agent/session-policy.js +1 -0
- package/dist/agent/session-policy.js.map +1 -1
- package/dist/agent/stop-summary.js +13 -7
- package/dist/agent/stop-summary.js.map +1 -1
- package/dist/agent/task-analyzer.js +7 -3
- package/dist/agent/task-analyzer.js.map +1 -1
- package/dist/agent/task-evidence.js +2 -0
- package/dist/agent/task-evidence.js.map +1 -1
- package/dist/agent/task-sync.d.ts +11 -0
- package/dist/agent/task-sync.js +31 -0
- package/dist/agent/task-sync.js.map +1 -1
- package/dist/agent/tool-call-parser.d.ts +6 -13
- package/dist/agent/tool-call-parser.js +186 -82
- package/dist/agent/tool-call-parser.js.map +1 -1
- package/dist/agent/tool-history.d.ts +8 -2
- package/dist/agent/tool-history.js +8 -1
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/agent/turn-outcome.d.ts +4 -1
- package/dist/agent/turn-outcome.js +16 -2
- package/dist/agent/turn-outcome.js.map +1 -1
- package/dist/app/adapters/agent-event-adapter.js +27 -0
- package/dist/app/adapters/agent-event-adapter.js.map +1 -1
- package/dist/app/adapters/current-agent-adapter.js +1 -0
- package/dist/app/adapters/current-agent-adapter.js.map +1 -1
- package/dist/app/adapters/current-interactive-sessions-adapter.d.ts +4 -0
- package/dist/app/adapters/current-interactive-sessions-adapter.js +11 -0
- package/dist/app/adapters/current-interactive-sessions-adapter.js.map +1 -0
- package/dist/app/adapters/current-jobs-adapter.js +4 -3
- package/dist/app/adapters/current-jobs-adapter.js.map +1 -1
- package/dist/app/adapters/current-store-adapter.js +4 -3
- package/dist/app/adapters/current-store-adapter.js.map +1 -1
- package/dist/app/adapters/current-updates-adapter.d.ts +1 -1
- package/dist/app/adapters/current-updates-adapter.js +34 -5
- package/dist/app/adapters/current-updates-adapter.js.map +1 -1
- package/dist/app/adapters/quiet-meta-tools.js +2 -1
- package/dist/app/adapters/quiet-meta-tools.js.map +1 -1
- package/dist/app/controllers/cancel-all-result.d.ts +8 -0
- package/dist/app/controllers/cancel-all-result.js +32 -0
- package/dist/app/controllers/cancel-all-result.js.map +1 -0
- package/dist/app/controllers/job-controller.d.ts +4 -3
- package/dist/app/controllers/job-controller.js +9 -6
- package/dist/app/controllers/job-controller.js.map +1 -1
- package/dist/app/controllers/plan-controller.js +14 -0
- package/dist/app/controllers/plan-controller.js.map +1 -1
- package/dist/app/controllers/responder-settlement.js +2 -2
- package/dist/app/controllers/responder-settlement.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.d.ts +23 -1
- package/dist/app/controllers/session-compact-helper.js +117 -7
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-context-usage.d.ts +24 -0
- package/dist/app/controllers/session-context-usage.js +89 -0
- package/dist/app/controllers/session-context-usage.js.map +1 -0
- package/dist/app/controllers/session-controller.d.ts +25 -17
- package/dist/app/controllers/session-controller.js +142 -128
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-prompt-queue.d.ts +3 -0
- package/dist/app/controllers/session-prompt-queue.js +20 -1
- package/dist/app/controllers/session-prompt-queue.js.map +1 -1
- package/dist/app/controllers/session-responder.js +16 -6
- package/dist/app/controllers/session-responder.js.map +1 -1
- package/dist/app/controllers/session-turn-request.d.ts +18 -0
- package/dist/app/controllers/session-turn-request.js +31 -0
- package/dist/app/controllers/session-turn-request.js.map +1 -0
- package/dist/app/controllers/turn-continuation.d.ts +14 -0
- package/dist/app/controllers/turn-continuation.js +46 -0
- package/dist/app/controllers/turn-continuation.js.map +1 -0
- package/dist/app/events/app-event.d.ts +21 -0
- package/dist/app/events/app-event.js +1 -0
- package/dist/app/events/app-event.js.map +1 -1
- package/dist/app/ports/agent-port.d.ts +7 -0
- package/dist/app/ports/interactive-sessions-port.d.ts +21 -0
- package/dist/app/ports/interactive-sessions-port.js +9 -0
- package/dist/app/ports/interactive-sessions-port.js.map +1 -0
- package/dist/app/ports/jobs-port.d.ts +4 -3
- package/dist/app/ports/persistence-port.d.ts +11 -0
- package/dist/app/ports/updates-port.d.ts +8 -0
- package/dist/attachments/service.js +13 -2
- package/dist/attachments/service.js.map +1 -1
- package/dist/commands/providers.js +13 -10
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.js +14 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +21 -8
- package/dist/index.js.map +1 -1
- package/dist/interactive-session/artifact-writer.d.ts +54 -0
- package/dist/interactive-session/artifact-writer.js +161 -0
- package/dist/interactive-session/artifact-writer.js.map +1 -0
- package/dist/interactive-session/cleanup.d.ts +36 -0
- package/dist/interactive-session/cleanup.js +157 -0
- package/dist/interactive-session/cleanup.js.map +1 -0
- package/dist/interactive-session/config.d.ts +118 -0
- package/dist/interactive-session/config.js +141 -0
- package/dist/interactive-session/config.js.map +1 -0
- package/dist/interactive-session/input-policy.d.ts +41 -0
- package/dist/interactive-session/input-policy.js +163 -0
- package/dist/interactive-session/input-policy.js.map +1 -0
- package/dist/interactive-session/manager.d.ts +107 -0
- package/dist/interactive-session/manager.js +927 -0
- package/dist/interactive-session/manager.js.map +1 -0
- package/dist/interactive-session/output-store.d.ts +81 -0
- package/dist/interactive-session/output-store.js +239 -0
- package/dist/interactive-session/output-store.js.map +1 -0
- package/dist/interactive-session/output-view.d.ts +20 -0
- package/dist/interactive-session/output-view.js +142 -0
- package/dist/interactive-session/output-view.js.map +1 -0
- package/dist/interactive-session/recovery-journal.d.ts +55 -0
- package/dist/interactive-session/recovery-journal.js +115 -0
- package/dist/interactive-session/recovery-journal.js.map +1 -0
- package/dist/interactive-session/registry.d.ts +59 -0
- package/dist/interactive-session/registry.js +170 -0
- package/dist/interactive-session/registry.js.map +1 -0
- package/dist/interactive-session/runtime.d.ts +107 -0
- package/dist/interactive-session/runtime.js +191 -0
- package/dist/interactive-session/runtime.js.map +1 -0
- package/dist/interactive-session/session-runtime.d.ts +50 -0
- package/dist/interactive-session/session-runtime.js +63 -0
- package/dist/interactive-session/session-runtime.js.map +1 -0
- package/dist/interactive-session/streaming-redactor.d.ts +53 -0
- package/dist/interactive-session/streaming-redactor.js +263 -0
- package/dist/interactive-session/streaming-redactor.js.map +1 -0
- package/dist/interactive-session/telemetry.d.ts +30 -0
- package/dist/interactive-session/telemetry.js +47 -0
- package/dist/interactive-session/telemetry.js.map +1 -0
- package/dist/interactive-session/transport-factory.d.ts +8 -0
- package/dist/interactive-session/transport-factory.js +16 -0
- package/dist/interactive-session/transport-factory.js.map +1 -0
- package/dist/interactive-session/transport-node-pty.d.ts +49 -0
- package/dist/interactive-session/transport-node-pty.js +219 -0
- package/dist/interactive-session/transport-node-pty.js.map +1 -0
- package/dist/interactive-session/transport-pipe.d.ts +9 -0
- package/dist/interactive-session/transport-pipe.js +215 -0
- package/dist/interactive-session/transport-pipe.js.map +1 -0
- package/dist/interactive-session/transport.d.ts +104 -0
- package/dist/interactive-session/transport.js +89 -0
- package/dist/interactive-session/transport.js.map +1 -0
- package/dist/interactive-session/types.d.ts +254 -0
- package/dist/interactive-session/types.js +191 -0
- package/dist/interactive-session/types.js.map +1 -0
- package/dist/llm/adapters/anthropic-tools.d.ts +14 -1
- package/dist/llm/adapters/anthropic-tools.js +36 -5
- package/dist/llm/adapters/anthropic-tools.js.map +1 -1
- package/dist/llm/adapters/gemini-tools.d.ts +3 -1
- package/dist/llm/adapters/gemini-tools.js +5 -2
- package/dist/llm/adapters/gemini-tools.js.map +1 -1
- package/dist/llm/adapters/ollama-tools.js +8 -3
- package/dist/llm/adapters/ollama-tools.js.map +1 -1
- package/dist/llm/adapters/openai-tools.js +8 -1
- package/dist/llm/adapters/openai-tools.js.map +1 -1
- package/dist/llm/agentrouter.js +2 -0
- package/dist/llm/agentrouter.js.map +1 -1
- package/dist/llm/anthropic.d.ts +8 -0
- package/dist/llm/anthropic.js +68 -9
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/aws-mantle.js +60 -12
- package/dist/llm/aws-mantle.js.map +1 -1
- package/dist/llm/bynara.js +2 -0
- package/dist/llm/bynara.js.map +1 -1
- package/dist/llm/capabilities.d.ts +7 -0
- package/dist/llm/capabilities.js +22 -0
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/gemini.d.ts +3 -0
- package/dist/llm/gemini.js +71 -11
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/groq.d.ts +20 -1
- package/dist/llm/groq.js +32 -4
- package/dist/llm/groq.js.map +1 -1
- package/dist/llm/http.d.ts +29 -0
- package/dist/llm/http.js +122 -29
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/kimchi.js +2 -0
- package/dist/llm/kimchi.js.map +1 -1
- package/dist/llm/nvidia.js +2 -0
- package/dist/llm/nvidia.js.map +1 -1
- package/dist/llm/ollama.d.ts +5 -0
- package/dist/llm/ollama.js +53 -6
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/openai.js +2 -0
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/openrouter.js +2 -0
- package/dist/llm/openrouter.js.map +1 -1
- package/dist/llm/qwen-cloud.js +2 -0
- package/dist/llm/qwen-cloud.js.map +1 -1
- package/dist/llm/router.d.ts +16 -0
- package/dist/llm/router.js +79 -23
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/sampling.d.ts +32 -0
- package/dist/llm/sampling.js +48 -0
- package/dist/llm/sampling.js.map +1 -0
- package/dist/llm/stream-progress.d.ts +4 -0
- package/dist/llm/stream-progress.js +43 -0
- package/dist/llm/stream-progress.js.map +1 -0
- package/dist/llm/system-messages.d.ts +29 -0
- package/dist/llm/system-messages.js +51 -0
- package/dist/llm/system-messages.js.map +1 -0
- package/dist/llm/token-usage.d.ts +4 -1
- package/dist/llm/token-usage.js +56 -4
- package/dist/llm/token-usage.js.map +1 -1
- package/dist/llm/tool-protocol.js +30 -0
- package/dist/llm/tool-protocol.js.map +1 -1
- package/dist/os/process-identity.d.ts +46 -0
- package/dist/os/process-identity.js +147 -0
- package/dist/os/process-identity.js.map +1 -0
- package/dist/os/process-tree.d.ts +15 -0
- package/dist/os/process-tree.js +77 -0
- package/dist/os/process-tree.js.map +1 -0
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/system.agent.md +13 -12
- package/dist/repl/prompt-line.d.ts +5 -0
- package/dist/repl/prompt-line.js +7 -1
- package/dist/repl/prompt-line.js.map +1 -1
- package/dist/repl.js +71 -41
- package/dist/repl.js.map +1 -1
- package/dist/safety/classifier.js +98 -44
- package/dist/safety/classifier.js.map +1 -1
- package/dist/safety/engagement-policy.d.ts +8 -0
- package/dist/safety/engagement-policy.js +52 -7
- package/dist/safety/engagement-policy.js.map +1 -1
- package/dist/safety/patterns.d.ts +44 -0
- package/dist/safety/patterns.js +168 -37
- package/dist/safety/patterns.js.map +1 -1
- package/dist/store/config.d.ts +9 -1
- package/dist/store/config.js +51 -1
- package/dist/store/config.js.map +1 -1
- package/dist/store/history-index.d.ts +12 -0
- package/dist/store/history-index.js +47 -18
- package/dist/store/history-index.js.map +1 -1
- package/dist/store/history.d.ts +5 -2
- package/dist/store/history.js +153 -62
- package/dist/store/history.js.map +1 -1
- package/dist/store/plan.d.ts +81 -5
- package/dist/store/plan.js +406 -46
- package/dist/store/plan.js.map +1 -1
- package/dist/store/redaction-cache.d.ts +12 -0
- package/dist/store/redaction-cache.js +51 -0
- package/dist/store/redaction-cache.js.map +1 -0
- package/dist/store/responder-settlement.d.ts +5 -1
- package/dist/store/responder-settlement.js +42 -30
- package/dist/store/responder-settlement.js.map +1 -1
- package/dist/store/scope.js +36 -27
- package/dist/store/scope.js.map +1 -1
- package/dist/store/task-transitions.d.ts +19 -0
- package/dist/store/task-transitions.js +46 -0
- package/dist/store/task-transitions.js.map +1 -0
- package/dist/tools/capabilities.js +33 -18
- package/dist/tools/capabilities.js.map +1 -1
- package/dist/tools/command-intent.d.ts +24 -0
- package/dist/tools/command-intent.js +158 -4
- package/dist/tools/command-intent.js.map +1 -1
- package/dist/tools/definitions.d.ts +5 -1
- package/dist/tools/definitions.js +257 -21
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/fs.d.ts +16 -0
- package/dist/tools/fs.js +122 -46
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/image.js +1 -1
- package/dist/tools/image.js.map +1 -1
- package/dist/tools/interactive-session-tools.d.ts +11 -0
- package/dist/tools/interactive-session-tools.js +261 -0
- package/dist/tools/interactive-session-tools.js.map +1 -0
- package/dist/tools/jobs.d.ts +78 -4
- package/dist/tools/jobs.js +486 -127
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/net-ping-sweep.d.ts +3 -1
- package/dist/tools/net-ping-sweep.js +64 -26
- package/dist/tools/net-ping-sweep.js.map +1 -1
- package/dist/tools/nmap-runner.js +5 -2
- package/dist/tools/nmap-runner.js.map +1 -1
- package/dist/tools/pdf.js +50 -7
- package/dist/tools/pdf.js.map +1 -1
- package/dist/tools/registry.js +158 -96
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/shell.d.ts +24 -2
- package/dist/tools/shell.js +113 -28
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/tool-types.d.ts +2 -0
- package/dist/tools/validate.d.ts +8 -5
- package/dist/tools/validate.js +177 -7
- package/dist/tools/validate.js.map +1 -1
- package/dist/tools/wordlists.js +69 -17
- package/dist/tools/wordlists.js.map +1 -1
- package/dist/tui/state.d.ts +4 -0
- package/dist/tui/state.js +88 -2
- package/dist/tui/state.js.map +1 -1
- package/dist/tui-v2/actions/keymap.js +3 -8
- package/dist/tui-v2/actions/keymap.js.map +1 -1
- package/dist/tui-v2/app/App.js +52 -4
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/app/commands/config-commands.js +5 -2
- package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
- package/dist/tui-v2/app/commands/picker-commands.js +3 -0
- package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
- package/dist/tui-v2/app/plan-lifecycle.d.ts +1 -1
- package/dist/tui-v2/app/plan-lifecycle.js +2 -1
- package/dist/tui-v2/app/plan-lifecycle.js.map +1 -1
- package/dist/tui-v2/bootstrap/composition-root.d.ts +3 -0
- package/dist/tui-v2/bootstrap/composition-root.js +3 -0
- package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js +10 -0
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/tui-v2/components/composer/composer-input-box.d.ts +1 -1
- package/dist/tui-v2/components/composer/composer-input-box.js +12 -3
- package/dist/tui-v2/components/composer/composer-input-box.js.map +1 -1
- package/dist/tui-v2/components/jobs/jobs-panel.js +19 -6
- package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
- package/dist/tui-v2/components/plan/plan-view.js +9 -6
- package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
- package/dist/tui-v2/components/status/status-line.d.ts +15 -0
- package/dist/tui-v2/components/status/status-line.js +33 -25
- package/dist/tui-v2/components/status/status-line.js.map +1 -1
- package/dist/tui-v2/components/transcript/assistant-message.js +17 -9
- package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.js +49 -22
- package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/intro-card.js +3 -0
- package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/thinking-block.js +2 -1
- package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-view.js +27 -2
- package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
- package/dist/tui-v2/components/transcript/use-transcript-selection.js +57 -6
- package/dist/tui-v2/components/transcript/use-transcript-selection.js.map +1 -1
- package/dist/tui-v2/composer/composer-editor.js +12 -6
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/tui-v2/rendering/incremental-strip.d.ts +11 -0
- package/dist/tui-v2/rendering/incremental-strip.js +89 -0
- package/dist/tui-v2/rendering/incremental-strip.js.map +1 -0
- package/dist/tui-v2/rendering/plan-view.d.ts +12 -0
- package/dist/tui-v2/rendering/plan-view.js +71 -2
- package/dist/tui-v2/rendering/plan-view.js.map +1 -1
- package/dist/tui-v2/rendering/streaming-markdown.d.ts +25 -0
- package/dist/tui-v2/rendering/streaming-markdown.js +108 -0
- package/dist/tui-v2/rendering/streaming-markdown.js.map +1 -0
- package/dist/tui-v2/rendering/thinking-tail.d.ts +5 -0
- package/dist/tui-v2/rendering/thinking-tail.js +26 -0
- package/dist/tui-v2/rendering/thinking-tail.js.map +1 -0
- package/dist/tui-v2/state/transcript-hydrate.js +6 -2
- package/dist/tui-v2/state/transcript-hydrate.js.map +1 -1
- package/dist/tui-v2/state/transcript-reducer.js +146 -25
- package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
- package/dist/tui-v2/state/transcript-types.d.ts +6 -0
- package/dist/tui-v2/state/transcript-types.js +17 -0
- package/dist/tui-v2/state/transcript-types.js.map +1 -1
- package/dist/types.d.ts +34 -0
- package/dist/types.js.map +1 -1
- package/dist/ui/intro-header.d.ts +1 -0
- package/dist/ui/intro-header.js +10 -13
- package/dist/ui/intro-header.js.map +1 -1
- package/dist/ui/markdown.js +9 -2
- package/dist/ui/markdown.js.map +1 -1
- package/dist/ui/mentions.d.ts +5 -0
- package/dist/ui/mentions.js +66 -7
- package/dist/ui/mentions.js.map +1 -1
- package/dist/ui/thinking.d.ts +5 -1
- package/dist/ui/thinking.js +3 -2
- package/dist/ui/thinking.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +2 -1
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public domain contracts for agent-controlled interactive terminal sessions.
|
|
3
|
+
*
|
|
4
|
+
* Deliberate non-goals encoded here: no user keyboard passthrough, no transfer
|
|
5
|
+
* of the host controlling terminal, no reattachment after restart, no screen
|
|
6
|
+
* emulation, and no command rewriting. Nothing in this module carries raw
|
|
7
|
+
* commands, input bytes, environment values, or unredacted output.
|
|
8
|
+
*/
|
|
9
|
+
export type SessionOperation = "start" | "send" | "read" | "status" | "list" | "resize" | "close";
|
|
10
|
+
export type SessionState = "starting" | "running" | "closing" | "exited" | "failed" | "closed";
|
|
11
|
+
export declare const TERMINAL_SESSION_STATES: readonly SessionState[];
|
|
12
|
+
export declare function isTerminalState(state: SessionState): boolean;
|
|
13
|
+
export type TerminationReason = "process-exit" | "explicit-close" | "cancelled" | "idle-timeout" | "lifetime-timeout" | "conversation-teardown" | "app-shutdown" | "output-limit" | "launch-failure";
|
|
14
|
+
export type SessionTransportKind = "pty" | "pipe";
|
|
15
|
+
export type TerminalMode = "required" | "preferred" | "pipe";
|
|
16
|
+
export type OutputStream = "terminal" | "stdout" | "stderr";
|
|
17
|
+
export type OutputView = "plain" | "encoded";
|
|
18
|
+
export interface TerminalDimensions {
|
|
19
|
+
readonly columns: number;
|
|
20
|
+
readonly rows: number;
|
|
21
|
+
}
|
|
22
|
+
export type ControlInput = "interrupt" | "eof" | "suspend" | "escape" | "tab" | "backspace" | "up" | "down" | "left" | "right";
|
|
23
|
+
export declare const CONTROL_INPUTS: readonly ControlInput[];
|
|
24
|
+
export type SubmitBehavior = "enter" | "none";
|
|
25
|
+
export type SessionInput = {
|
|
26
|
+
readonly kind: "text";
|
|
27
|
+
readonly text: string;
|
|
28
|
+
readonly submit: SubmitBehavior;
|
|
29
|
+
} | {
|
|
30
|
+
readonly kind: "control";
|
|
31
|
+
readonly control: ControlInput;
|
|
32
|
+
} | {
|
|
33
|
+
readonly kind: "eof";
|
|
34
|
+
};
|
|
35
|
+
export type SessionInputKind = SessionInput["kind"];
|
|
36
|
+
export interface ProcessOutcome {
|
|
37
|
+
readonly exitCode?: number | undefined;
|
|
38
|
+
readonly signal?: string | undefined;
|
|
39
|
+
readonly endedAt: number;
|
|
40
|
+
}
|
|
41
|
+
export type ProcessIdentityComparison = "match" | "mismatch" | "gone" | "unknown";
|
|
42
|
+
export interface OutputEvent {
|
|
43
|
+
/** Inclusive canonical safe-byte offset. */
|
|
44
|
+
readonly startCursor: number;
|
|
45
|
+
/** Exclusive canonical safe-byte offset. */
|
|
46
|
+
readonly endCursor: number;
|
|
47
|
+
readonly stream: OutputStream;
|
|
48
|
+
readonly observedAt: number;
|
|
49
|
+
readonly bytes: Uint8Array;
|
|
50
|
+
}
|
|
51
|
+
export interface PresentedOutputEvent {
|
|
52
|
+
readonly startCursor: number;
|
|
53
|
+
readonly endCursor: number;
|
|
54
|
+
readonly stream: OutputStream;
|
|
55
|
+
readonly observedAt: number;
|
|
56
|
+
/** Inert text for `plain`, base64 for `encoded`. */
|
|
57
|
+
readonly content: string;
|
|
58
|
+
readonly decodingLoss?: boolean | undefined;
|
|
59
|
+
}
|
|
60
|
+
export interface ArtifactReference {
|
|
61
|
+
readonly path: string;
|
|
62
|
+
readonly bytes: number;
|
|
63
|
+
readonly droppedBytes: number;
|
|
64
|
+
readonly redacted: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface ArtifactReceipt extends ArtifactReference {
|
|
67
|
+
readonly chunks: readonly string[];
|
|
68
|
+
readonly sha256: string;
|
|
69
|
+
}
|
|
70
|
+
export interface OutputPage {
|
|
71
|
+
readonly events: readonly PresentedOutputEvent[];
|
|
72
|
+
readonly requestedCursor: number;
|
|
73
|
+
readonly nextCursor: number;
|
|
74
|
+
readonly hasMore: boolean;
|
|
75
|
+
readonly earliestAvailableCursor: number;
|
|
76
|
+
readonly latestCursor: number;
|
|
77
|
+
readonly view: OutputView;
|
|
78
|
+
readonly decodingLoss: boolean;
|
|
79
|
+
readonly omittedBytes?: number | undefined;
|
|
80
|
+
readonly artifact: ArtifactReference;
|
|
81
|
+
}
|
|
82
|
+
export interface InteractiveSessionRecord {
|
|
83
|
+
readonly id: string;
|
|
84
|
+
readonly ownerId: string;
|
|
85
|
+
state: SessionState;
|
|
86
|
+
readonly transport: SessionTransportKind;
|
|
87
|
+
readonly startedAt: number;
|
|
88
|
+
lastActivityAt: number;
|
|
89
|
+
endedAt?: number | undefined;
|
|
90
|
+
dimensions?: TerminalDimensions | undefined;
|
|
91
|
+
degradedReason?: "PTY_UNAVAILABLE" | undefined;
|
|
92
|
+
processOutcome?: ProcessOutcome | undefined;
|
|
93
|
+
terminationReason?: TerminationReason | undefined;
|
|
94
|
+
artifact: ArtifactReceipt;
|
|
95
|
+
earliestCursor: number;
|
|
96
|
+
latestCursor: number;
|
|
97
|
+
inputClosed: boolean;
|
|
98
|
+
cleanupVerified?: boolean | undefined;
|
|
99
|
+
}
|
|
100
|
+
/** Immutable, non-disclosing projection handed to callers. */
|
|
101
|
+
export interface SessionSummary {
|
|
102
|
+
readonly id: string;
|
|
103
|
+
readonly state: SessionState;
|
|
104
|
+
readonly transport: SessionTransportKind;
|
|
105
|
+
readonly startedAt: number;
|
|
106
|
+
readonly lastActivityAt: number;
|
|
107
|
+
readonly endedAt?: number | undefined;
|
|
108
|
+
readonly dimensions?: TerminalDimensions | undefined;
|
|
109
|
+
readonly degradedReason?: "PTY_UNAVAILABLE" | undefined;
|
|
110
|
+
readonly processOutcome?: ProcessOutcome | undefined;
|
|
111
|
+
readonly terminationReason?: TerminationReason | undefined;
|
|
112
|
+
readonly earliestCursor: number;
|
|
113
|
+
readonly latestCursor: number;
|
|
114
|
+
readonly inputClosed: boolean;
|
|
115
|
+
readonly artifact: ArtifactReference;
|
|
116
|
+
readonly cleanupVerified?: boolean | undefined;
|
|
117
|
+
}
|
|
118
|
+
export interface OwnerScoped {
|
|
119
|
+
readonly ownerId: string;
|
|
120
|
+
}
|
|
121
|
+
export interface StartRequest extends OwnerScoped {
|
|
122
|
+
readonly command: string;
|
|
123
|
+
readonly cwd?: string | undefined;
|
|
124
|
+
readonly terminalMode?: TerminalMode | undefined;
|
|
125
|
+
readonly columns?: number | undefined;
|
|
126
|
+
readonly rows?: number | undefined;
|
|
127
|
+
readonly idleTimeoutMs?: number | undefined;
|
|
128
|
+
readonly lifetimeTimeoutMs?: number | undefined;
|
|
129
|
+
readonly deadlineMs?: number | undefined;
|
|
130
|
+
readonly signal?: AbortSignal | undefined;
|
|
131
|
+
}
|
|
132
|
+
export interface SendRequest extends OwnerScoped {
|
|
133
|
+
readonly id: string;
|
|
134
|
+
readonly input: SessionInput;
|
|
135
|
+
readonly cursor?: number | undefined;
|
|
136
|
+
readonly quietMs?: number | undefined;
|
|
137
|
+
readonly deadlineMs?: number | undefined;
|
|
138
|
+
readonly view?: OutputView | undefined;
|
|
139
|
+
readonly signal?: AbortSignal | undefined;
|
|
140
|
+
}
|
|
141
|
+
export interface ReadRequest extends OwnerScoped {
|
|
142
|
+
readonly id: string;
|
|
143
|
+
readonly cursor: number;
|
|
144
|
+
readonly waitMs?: number | undefined;
|
|
145
|
+
readonly view?: OutputView | undefined;
|
|
146
|
+
readonly signal?: AbortSignal | undefined;
|
|
147
|
+
}
|
|
148
|
+
export interface ResizeRequest extends OwnerScoped, TerminalDimensions {
|
|
149
|
+
readonly id: string;
|
|
150
|
+
}
|
|
151
|
+
export interface CloseRequest extends OwnerScoped {
|
|
152
|
+
readonly id: string;
|
|
153
|
+
readonly deadlineMs?: number | undefined;
|
|
154
|
+
}
|
|
155
|
+
export interface StartResult {
|
|
156
|
+
readonly operation: "start";
|
|
157
|
+
readonly sessionId: string;
|
|
158
|
+
readonly state: SessionState;
|
|
159
|
+
readonly transport: SessionTransportKind;
|
|
160
|
+
readonly dimensions?: TerminalDimensions | undefined;
|
|
161
|
+
readonly degradedReason?: "PTY_UNAVAILABLE" | undefined;
|
|
162
|
+
readonly cursor: number;
|
|
163
|
+
readonly artifact: ArtifactReference;
|
|
164
|
+
readonly retriedLaunch?: boolean | undefined;
|
|
165
|
+
}
|
|
166
|
+
export type DeliveryStatus = "delivered" | "not-delivered" | "unknown";
|
|
167
|
+
export interface SendResult {
|
|
168
|
+
readonly operation: "send";
|
|
169
|
+
readonly sessionId: string;
|
|
170
|
+
readonly inputSequence: number;
|
|
171
|
+
readonly delivery: DeliveryStatus;
|
|
172
|
+
readonly deliveredBytes: number;
|
|
173
|
+
readonly state: SessionState;
|
|
174
|
+
readonly page?: OutputPage | undefined;
|
|
175
|
+
readonly error?: StableError | undefined;
|
|
176
|
+
}
|
|
177
|
+
export interface ReadResult {
|
|
178
|
+
readonly operation: "read";
|
|
179
|
+
readonly sessionId: string;
|
|
180
|
+
readonly state: SessionState;
|
|
181
|
+
readonly page?: OutputPage | undefined;
|
|
182
|
+
readonly error?: StableError | undefined;
|
|
183
|
+
}
|
|
184
|
+
export interface StatusResult {
|
|
185
|
+
readonly operation: "status";
|
|
186
|
+
readonly session: SessionSummary;
|
|
187
|
+
}
|
|
188
|
+
export interface ListResult {
|
|
189
|
+
readonly operation: "list";
|
|
190
|
+
readonly sessions: readonly SessionSummary[];
|
|
191
|
+
}
|
|
192
|
+
export interface ResizeResult {
|
|
193
|
+
readonly operation: "resize";
|
|
194
|
+
readonly sessionId: string;
|
|
195
|
+
readonly state: SessionState;
|
|
196
|
+
readonly dimensions: TerminalDimensions;
|
|
197
|
+
}
|
|
198
|
+
export interface CloseResult {
|
|
199
|
+
readonly operation: "close";
|
|
200
|
+
readonly sessionId: string;
|
|
201
|
+
readonly state: SessionState;
|
|
202
|
+
readonly terminationReason?: TerminationReason | undefined;
|
|
203
|
+
readonly processOutcome?: ProcessOutcome | undefined;
|
|
204
|
+
readonly cleanupVerified: boolean;
|
|
205
|
+
readonly artifact: ArtifactReference;
|
|
206
|
+
readonly error?: StableError | undefined;
|
|
207
|
+
}
|
|
208
|
+
export interface CloseOwnerResult {
|
|
209
|
+
readonly closed: number;
|
|
210
|
+
readonly failures: readonly StableError[];
|
|
211
|
+
}
|
|
212
|
+
export interface CloseAllResult extends CloseOwnerResult {
|
|
213
|
+
readonly owners: number;
|
|
214
|
+
}
|
|
215
|
+
export type InteractiveSessionToolResult = StartResult | SendResult | ReadResult | StatusResult | ListResult | ResizeResult | CloseResult;
|
|
216
|
+
export declare const STABLE_ERROR_CODES: readonly ["INVALID_REQUEST", "INVALID_CONFIGURATION", "SESSION_NOT_FOUND", "LIMIT_REACHED", "PTY_UNAVAILABLE", "SESSION_NOT_RUNNING", "SESSION_CLOSING", "INPUT_CLOSED", "INPUT_REJECTED", "INPUT_DELIVERY_UNKNOWN", "UNSUPPORTED_CONTROL", "UNSUPPORTED_OPERATION", "BACKPRESSURE", "DEADLINE_EXCEEDED", "CANCELLED", "OUTPUT_GAP", "LAUNCH_FAILED", "PERSIST_FAILED", "CLEANUP_FAILED"];
|
|
217
|
+
export type StableErrorCode = (typeof STABLE_ERROR_CODES)[number];
|
|
218
|
+
export type StableErrorDetailValue = string | number | boolean;
|
|
219
|
+
/**
|
|
220
|
+
* Detail keys are allowlisted so a native error, command line, or output byte
|
|
221
|
+
* can never reach a model, transcript, or log through an error payload.
|
|
222
|
+
*/
|
|
223
|
+
export declare const STABLE_ERROR_DETAIL_KEYS: readonly ["earliestAvailableCursor", "latestCursor", "requestedCursor", "omittedBytes", "deliveredBytes", "queuedBytes", "limitBytes", "liveSessions", "limit", "inputSequence", "control", "transport", "terminalMode", "field", "columns", "rows", "elapsedMs", "deadlineMs", "survivingDescendants", "cleanupVerified", "terminationReason", "reason", "artifactPath"];
|
|
224
|
+
export type StableErrorDetailKey = (typeof STABLE_ERROR_DETAIL_KEYS)[number];
|
|
225
|
+
export interface StableError {
|
|
226
|
+
readonly code: StableErrorCode;
|
|
227
|
+
readonly message: string;
|
|
228
|
+
readonly retryable: boolean;
|
|
229
|
+
readonly operation: SessionOperation;
|
|
230
|
+
readonly sessionId?: string | undefined;
|
|
231
|
+
readonly state?: SessionState | undefined;
|
|
232
|
+
readonly details?: Readonly<Partial<Record<StableErrorDetailKey, StableErrorDetailValue>>> | undefined;
|
|
233
|
+
}
|
|
234
|
+
export interface SessionErrorInit {
|
|
235
|
+
readonly code: StableErrorCode;
|
|
236
|
+
readonly operation: SessionOperation;
|
|
237
|
+
readonly message: string;
|
|
238
|
+
readonly sessionId?: string | undefined;
|
|
239
|
+
readonly state?: SessionState | undefined;
|
|
240
|
+
readonly details?: Readonly<Partial<Record<StableErrorDetailKey, StableErrorDetailValue>>> | undefined;
|
|
241
|
+
/** Only `LAUNCH_FAILED` and `PERSIST_FAILED` may set this explicitly. */
|
|
242
|
+
readonly retryable?: boolean | undefined;
|
|
243
|
+
}
|
|
244
|
+
/** Single construction point for every interactive-session failure. */
|
|
245
|
+
export declare function sessionError(init: SessionErrorInit): StableError;
|
|
246
|
+
/** Carrier so internal layers can reject with a StableError and be unwrapped. */
|
|
247
|
+
export declare class SessionErrorException extends Error {
|
|
248
|
+
readonly stable: StableError;
|
|
249
|
+
constructor(stable: StableError);
|
|
250
|
+
}
|
|
251
|
+
export declare function throwSessionError(init: SessionErrorInit): never;
|
|
252
|
+
export declare function asStableError(value: unknown, fallback: SessionErrorInit): StableError;
|
|
253
|
+
export declare function toSummary(record: InteractiveSessionRecord): SessionSummary;
|
|
254
|
+
export declare function artifactReference(receipt: ArtifactReceipt): ArtifactReference;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public domain contracts for agent-controlled interactive terminal sessions.
|
|
3
|
+
*
|
|
4
|
+
* Deliberate non-goals encoded here: no user keyboard passthrough, no transfer
|
|
5
|
+
* of the host controlling terminal, no reattachment after restart, no screen
|
|
6
|
+
* emulation, and no command rewriting. Nothing in this module carries raw
|
|
7
|
+
* commands, input bytes, environment values, or unredacted output.
|
|
8
|
+
*/
|
|
9
|
+
export const TERMINAL_SESSION_STATES = [
|
|
10
|
+
"exited",
|
|
11
|
+
"failed",
|
|
12
|
+
"closed",
|
|
13
|
+
];
|
|
14
|
+
export function isTerminalState(state) {
|
|
15
|
+
return TERMINAL_SESSION_STATES.includes(state);
|
|
16
|
+
}
|
|
17
|
+
export const CONTROL_INPUTS = [
|
|
18
|
+
"interrupt",
|
|
19
|
+
"eof",
|
|
20
|
+
"suspend",
|
|
21
|
+
"escape",
|
|
22
|
+
"tab",
|
|
23
|
+
"backspace",
|
|
24
|
+
"up",
|
|
25
|
+
"down",
|
|
26
|
+
"left",
|
|
27
|
+
"right",
|
|
28
|
+
];
|
|
29
|
+
// --- Stable errors -----------------------------------------------------
|
|
30
|
+
export const STABLE_ERROR_CODES = [
|
|
31
|
+
"INVALID_REQUEST",
|
|
32
|
+
"INVALID_CONFIGURATION",
|
|
33
|
+
"SESSION_NOT_FOUND",
|
|
34
|
+
"LIMIT_REACHED",
|
|
35
|
+
"PTY_UNAVAILABLE",
|
|
36
|
+
"SESSION_NOT_RUNNING",
|
|
37
|
+
"SESSION_CLOSING",
|
|
38
|
+
"INPUT_CLOSED",
|
|
39
|
+
"INPUT_REJECTED",
|
|
40
|
+
"INPUT_DELIVERY_UNKNOWN",
|
|
41
|
+
"UNSUPPORTED_CONTROL",
|
|
42
|
+
"UNSUPPORTED_OPERATION",
|
|
43
|
+
"BACKPRESSURE",
|
|
44
|
+
"DEADLINE_EXCEEDED",
|
|
45
|
+
"CANCELLED",
|
|
46
|
+
"OUTPUT_GAP",
|
|
47
|
+
"LAUNCH_FAILED",
|
|
48
|
+
"PERSIST_FAILED",
|
|
49
|
+
"CLEANUP_FAILED",
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* Detail keys are allowlisted so a native error, command line, or output byte
|
|
53
|
+
* can never reach a model, transcript, or log through an error payload.
|
|
54
|
+
*/
|
|
55
|
+
export const STABLE_ERROR_DETAIL_KEYS = [
|
|
56
|
+
"earliestAvailableCursor",
|
|
57
|
+
"latestCursor",
|
|
58
|
+
"requestedCursor",
|
|
59
|
+
"omittedBytes",
|
|
60
|
+
"deliveredBytes",
|
|
61
|
+
"queuedBytes",
|
|
62
|
+
"limitBytes",
|
|
63
|
+
"liveSessions",
|
|
64
|
+
"limit",
|
|
65
|
+
"inputSequence",
|
|
66
|
+
"control",
|
|
67
|
+
"transport",
|
|
68
|
+
"terminalMode",
|
|
69
|
+
"field",
|
|
70
|
+
"columns",
|
|
71
|
+
"rows",
|
|
72
|
+
"elapsedMs",
|
|
73
|
+
"deadlineMs",
|
|
74
|
+
"survivingDescendants",
|
|
75
|
+
"cleanupVerified",
|
|
76
|
+
"terminationReason",
|
|
77
|
+
"reason",
|
|
78
|
+
"artifactPath",
|
|
79
|
+
];
|
|
80
|
+
const MAX_ERROR_MESSAGE_CHARS = 400;
|
|
81
|
+
const MAX_ERROR_DETAIL_CHARS = 120;
|
|
82
|
+
/**
|
|
83
|
+
* Retryability describes whether a fresh caller-decided attempt could help. It
|
|
84
|
+
* never authorizes an automatic retry, and it is false for every code whose
|
|
85
|
+
* failure could already have produced a process or input side effect.
|
|
86
|
+
*/
|
|
87
|
+
const NON_RETRYABLE_CODES = new Set([
|
|
88
|
+
"INVALID_REQUEST",
|
|
89
|
+
"INVALID_CONFIGURATION",
|
|
90
|
+
"SESSION_NOT_FOUND",
|
|
91
|
+
"PTY_UNAVAILABLE",
|
|
92
|
+
"SESSION_NOT_RUNNING",
|
|
93
|
+
"SESSION_CLOSING",
|
|
94
|
+
"INPUT_CLOSED",
|
|
95
|
+
"INPUT_REJECTED",
|
|
96
|
+
"INPUT_DELIVERY_UNKNOWN",
|
|
97
|
+
"UNSUPPORTED_CONTROL",
|
|
98
|
+
"UNSUPPORTED_OPERATION",
|
|
99
|
+
"DEADLINE_EXCEEDED",
|
|
100
|
+
"CANCELLED",
|
|
101
|
+
"OUTPUT_GAP",
|
|
102
|
+
"CLEANUP_FAILED",
|
|
103
|
+
]);
|
|
104
|
+
const RETRYABLE_CODES = new Set([
|
|
105
|
+
"LIMIT_REACHED",
|
|
106
|
+
"BACKPRESSURE",
|
|
107
|
+
]);
|
|
108
|
+
function boundDetailValue(value) {
|
|
109
|
+
if (typeof value !== "string")
|
|
110
|
+
return value;
|
|
111
|
+
return value.length > MAX_ERROR_DETAIL_CHARS
|
|
112
|
+
? `${value.slice(0, MAX_ERROR_DETAIL_CHARS)}…`
|
|
113
|
+
: value;
|
|
114
|
+
}
|
|
115
|
+
function resolveRetryable(init) {
|
|
116
|
+
if (NON_RETRYABLE_CODES.has(init.code))
|
|
117
|
+
return false;
|
|
118
|
+
if (RETRYABLE_CODES.has(init.code))
|
|
119
|
+
return init.retryable ?? true;
|
|
120
|
+
// LAUNCH_FAILED / PERSIST_FAILED are retryable only when the caller proved no
|
|
121
|
+
// process side effect was possible.
|
|
122
|
+
return init.retryable ?? false;
|
|
123
|
+
}
|
|
124
|
+
/** Single construction point for every interactive-session failure. */
|
|
125
|
+
export function sessionError(init) {
|
|
126
|
+
const details = {};
|
|
127
|
+
for (const key of STABLE_ERROR_DETAIL_KEYS) {
|
|
128
|
+
const value = init.details?.[key];
|
|
129
|
+
if (value !== undefined)
|
|
130
|
+
details[key] = boundDetailValue(value);
|
|
131
|
+
}
|
|
132
|
+
const message = init.message.length > MAX_ERROR_MESSAGE_CHARS
|
|
133
|
+
? `${init.message.slice(0, MAX_ERROR_MESSAGE_CHARS)}…`
|
|
134
|
+
: init.message;
|
|
135
|
+
return {
|
|
136
|
+
code: init.code,
|
|
137
|
+
message,
|
|
138
|
+
retryable: resolveRetryable(init),
|
|
139
|
+
operation: init.operation,
|
|
140
|
+
...(init.sessionId !== undefined ? { sessionId: init.sessionId } : {}),
|
|
141
|
+
...(init.state !== undefined ? { state: init.state } : {}),
|
|
142
|
+
...(Object.keys(details).length > 0 ? { details } : {}),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/** Carrier so internal layers can reject with a StableError and be unwrapped. */
|
|
146
|
+
export class SessionErrorException extends Error {
|
|
147
|
+
stable;
|
|
148
|
+
constructor(stable) {
|
|
149
|
+
super(stable.message);
|
|
150
|
+
this.stable = stable;
|
|
151
|
+
this.name = "SessionErrorException";
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export function throwSessionError(init) {
|
|
155
|
+
throw new SessionErrorException(sessionError(init));
|
|
156
|
+
}
|
|
157
|
+
export function asStableError(value, fallback) {
|
|
158
|
+
return value instanceof SessionErrorException
|
|
159
|
+
? value.stable
|
|
160
|
+
: sessionError(fallback);
|
|
161
|
+
}
|
|
162
|
+
export function toSummary(record) {
|
|
163
|
+
return {
|
|
164
|
+
id: record.id,
|
|
165
|
+
state: record.state,
|
|
166
|
+
transport: record.transport,
|
|
167
|
+
startedAt: record.startedAt,
|
|
168
|
+
lastActivityAt: record.lastActivityAt,
|
|
169
|
+
...(record.endedAt !== undefined ? { endedAt: record.endedAt } : {}),
|
|
170
|
+
...(record.dimensions ? { dimensions: { ...record.dimensions } } : {}),
|
|
171
|
+
...(record.degradedReason ? { degradedReason: record.degradedReason } : {}),
|
|
172
|
+
...(record.processOutcome ? { processOutcome: { ...record.processOutcome } } : {}),
|
|
173
|
+
...(record.terminationReason ? { terminationReason: record.terminationReason } : {}),
|
|
174
|
+
earliestCursor: record.earliestCursor,
|
|
175
|
+
latestCursor: record.latestCursor,
|
|
176
|
+
inputClosed: record.inputClosed,
|
|
177
|
+
artifact: artifactReference(record.artifact),
|
|
178
|
+
...(record.cleanupVerified !== undefined
|
|
179
|
+
? { cleanupVerified: record.cleanupVerified }
|
|
180
|
+
: {}),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
export function artifactReference(receipt) {
|
|
184
|
+
return {
|
|
185
|
+
path: receipt.path,
|
|
186
|
+
bytes: receipt.bytes,
|
|
187
|
+
droppedBytes: receipt.droppedBytes,
|
|
188
|
+
redacted: receipt.redacted,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/interactive-session/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,10 @@ export declare function toAnthropicTools(defs: ToolDefinition[]): Array<{
|
|
|
9
9
|
type AnthropicContentBlock = {
|
|
10
10
|
type: "text";
|
|
11
11
|
text: string;
|
|
12
|
+
} | {
|
|
13
|
+
type: "thinking";
|
|
14
|
+
thinking: string;
|
|
15
|
+
signature: string;
|
|
12
16
|
} | {
|
|
13
17
|
type: "image";
|
|
14
18
|
source: {
|
|
@@ -29,7 +33,9 @@ type AnthropicContentBlock = {
|
|
|
29
33
|
};
|
|
30
34
|
/**
|
|
31
35
|
* Convert dialect-neutral history to Anthropic Messages API messages.
|
|
32
|
-
*
|
|
36
|
+
* The first system message is owned by the top-level `system` field; later
|
|
37
|
+
* System messages become marked user turns in place. Consecutive
|
|
38
|
+
* tool results collapse into one user turn.
|
|
33
39
|
*/
|
|
34
40
|
export declare function toAnthropicToolMessages(messages: ChatMessage[]): Array<{
|
|
35
41
|
role: "user" | "assistant";
|
|
@@ -43,6 +49,7 @@ export declare function parseAnthropicToolUseBlocks(content: Array<{
|
|
|
43
49
|
type: string;
|
|
44
50
|
text?: string;
|
|
45
51
|
thinking?: string;
|
|
52
|
+
signature?: string;
|
|
46
53
|
id?: string;
|
|
47
54
|
name?: string;
|
|
48
55
|
input?: unknown;
|
|
@@ -50,10 +57,13 @@ export declare function parseAnthropicToolUseBlocks(content: Array<{
|
|
|
50
57
|
text: string;
|
|
51
58
|
thinkingText: string;
|
|
52
59
|
toolCalls: NativeToolCall[];
|
|
60
|
+
thinkingSignature?: string;
|
|
53
61
|
};
|
|
54
62
|
export interface AnthropicToolStreamState {
|
|
55
63
|
text: string;
|
|
56
64
|
thinking: string;
|
|
65
|
+
/** Anthropic `signature_delta` for the thinking block. */
|
|
66
|
+
thinkingSignature: string;
|
|
57
67
|
/** block index → partial tool_use */
|
|
58
68
|
blocks: Map<number, {
|
|
59
69
|
kind: "text" | "thinking" | "tool_use";
|
|
@@ -73,12 +83,14 @@ export declare function handleAnthropicStreamEvent(state: AnthropicToolStreamSta
|
|
|
73
83
|
name?: string;
|
|
74
84
|
text?: string;
|
|
75
85
|
thinking?: string;
|
|
86
|
+
signature?: string;
|
|
76
87
|
};
|
|
77
88
|
delta?: {
|
|
78
89
|
type?: string;
|
|
79
90
|
text?: string;
|
|
80
91
|
thinking?: string;
|
|
81
92
|
partial_json?: string;
|
|
93
|
+
signature?: string;
|
|
82
94
|
};
|
|
83
95
|
}): {
|
|
84
96
|
textDelta?: string;
|
|
@@ -95,5 +107,6 @@ export declare function finalizeAnthropicToolStream(state: AnthropicToolStreamSt
|
|
|
95
107
|
text: string;
|
|
96
108
|
thinkingText: string;
|
|
97
109
|
toolCalls: NativeToolCall[];
|
|
110
|
+
thinkingSignature?: string;
|
|
98
111
|
};
|
|
99
112
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { fromWireName, mapToolChoiceToAnthropic, parseToolArguments, syntheticToolCallId, toWireName, MAX_TOOL_ARG_BYTES, } from "../tool-protocol.js";
|
|
2
2
|
// Side-effect: register wire name map before fromWireName use.
|
|
3
3
|
import "../../tools/definitions.js";
|
|
4
|
+
import { normalizeSystemMessages } from "../system-messages.js";
|
|
4
5
|
export function toAnthropicTools(defs) {
|
|
5
6
|
return defs.map((d) => ({
|
|
6
7
|
name: d.wireName,
|
|
@@ -10,12 +11,14 @@ export function toAnthropicTools(defs) {
|
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* Convert dialect-neutral history to Anthropic Messages API messages.
|
|
13
|
-
*
|
|
14
|
+
* The first system message is owned by the top-level `system` field; later
|
|
15
|
+
* System messages become marked user turns in place. Consecutive
|
|
16
|
+
* tool results collapse into one user turn.
|
|
14
17
|
*/
|
|
15
18
|
export function toAnthropicToolMessages(messages) {
|
|
16
19
|
const out = [];
|
|
17
20
|
let i = 0;
|
|
18
|
-
const nonSystem = messages
|
|
21
|
+
const nonSystem = normalizeSystemMessages(messages).rest;
|
|
19
22
|
while (i < nonSystem.length) {
|
|
20
23
|
const message = nonSystem[i];
|
|
21
24
|
if (message.role === "tool") {
|
|
@@ -37,6 +40,18 @@ export function toAnthropicToolMessages(messages) {
|
|
|
37
40
|
}
|
|
38
41
|
if (message.role === "assistant" && message.toolCalls?.length) {
|
|
39
42
|
const blocks = [];
|
|
43
|
+
// Anthropic requires the signed thinking block to be the FIRST
|
|
44
|
+
// block of an assistant turn that carries tool_use while thinking is
|
|
45
|
+
// enabled; without it the follow-up request is rejected and the model
|
|
46
|
+
// loses its own chain of thought between tool calls.
|
|
47
|
+
const reasoning = message.reasoningBlock;
|
|
48
|
+
if (reasoning?.signature && reasoning.text) {
|
|
49
|
+
blocks.push({
|
|
50
|
+
type: "thinking",
|
|
51
|
+
thinking: reasoning.text,
|
|
52
|
+
signature: reasoning.signature,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
40
55
|
if (message.content.trim()) {
|
|
41
56
|
blocks.push({ type: "text", text: message.content });
|
|
42
57
|
}
|
|
@@ -88,14 +103,18 @@ export function anthropicToolBodyFields(options) {
|
|
|
88
103
|
export function parseAnthropicToolUseBlocks(content) {
|
|
89
104
|
let text = "";
|
|
90
105
|
let thinkingText = "";
|
|
106
|
+
let thinkingSignature;
|
|
91
107
|
const toolCalls = [];
|
|
92
108
|
if (!content)
|
|
93
109
|
return { text, thinkingText, toolCalls };
|
|
94
110
|
for (const part of content) {
|
|
95
111
|
if (part.type === "text" && part.text)
|
|
96
112
|
text += part.text;
|
|
97
|
-
if (part.type === "thinking"
|
|
98
|
-
|
|
113
|
+
if (part.type === "thinking") {
|
|
114
|
+
if (part.thinking)
|
|
115
|
+
thinkingText += part.thinking;
|
|
116
|
+
if (part.signature)
|
|
117
|
+
thinkingSignature = part.signature;
|
|
99
118
|
}
|
|
100
119
|
if (part.type === "tool_use") {
|
|
101
120
|
const wire = part.name ?? "";
|
|
@@ -114,10 +133,11 @@ export function parseAnthropicToolUseBlocks(content) {
|
|
|
114
133
|
text: text.trim(),
|
|
115
134
|
thinkingText: thinkingText.trim(),
|
|
116
135
|
toolCalls,
|
|
136
|
+
...(thinkingSignature ? { thinkingSignature } : {}),
|
|
117
137
|
};
|
|
118
138
|
}
|
|
119
139
|
export function createAnthropicToolStreamState() {
|
|
120
|
-
return { text: "", thinking: "", blocks: new Map() };
|
|
140
|
+
return { text: "", thinking: "", thinkingSignature: "", blocks: new Map() };
|
|
121
141
|
}
|
|
122
142
|
export function handleAnthropicStreamEvent(state, event) {
|
|
123
143
|
const result = {};
|
|
@@ -158,6 +178,10 @@ export function handleAnthropicStreamEvent(state, event) {
|
|
|
158
178
|
json: "",
|
|
159
179
|
text: "",
|
|
160
180
|
});
|
|
181
|
+
if (cb.thinking)
|
|
182
|
+
state.thinking += cb.thinking;
|
|
183
|
+
if (cb.signature)
|
|
184
|
+
state.thinkingSignature = cb.signature;
|
|
161
185
|
}
|
|
162
186
|
}
|
|
163
187
|
if (event.type === "content_block_delta" && event.delta) {
|
|
@@ -177,6 +201,10 @@ export function handleAnthropicStreamEvent(state, event) {
|
|
|
177
201
|
state.thinking += event.delta.thinking;
|
|
178
202
|
result.thinkingDelta = event.delta.thinking;
|
|
179
203
|
}
|
|
204
|
+
// The signature arrives as its own delta and must be kept.
|
|
205
|
+
if (event.delta.type === "signature_delta" && event.delta.signature) {
|
|
206
|
+
state.thinkingSignature += event.delta.signature;
|
|
207
|
+
}
|
|
180
208
|
if (event.delta.type === "input_json_delta" &&
|
|
181
209
|
typeof event.delta.partial_json === "string") {
|
|
182
210
|
block.json += event.delta.partial_json;
|
|
@@ -220,6 +248,9 @@ export function finalizeAnthropicToolStream(state) {
|
|
|
220
248
|
text: state.text.trim(),
|
|
221
249
|
thinkingText: state.thinking.trim(),
|
|
222
250
|
toolCalls,
|
|
251
|
+
...(state.thinkingSignature
|
|
252
|
+
? { thinkingSignature: state.thinkingSignature }
|
|
253
|
+
: {}),
|
|
223
254
|
};
|
|
224
255
|
}
|
|
225
256
|
//# sourceMappingURL=anthropic-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-tools.js","sourceRoot":"","sources":["../../../src/llm/adapters/anthropic-tools.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EAEV,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,+DAA+D;AAC/D,OAAO,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic-tools.js","sourceRoot":"","sources":["../../../src/llm/adapters/anthropic-tools.ts"],"names":[],"mappings":"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"}
|