@code-yeongyu/senpi 2026.8.26 → 2026.8.28
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 +76 -0
- package/README.md +3 -3
- package/dist/cli/args.d.ts +3 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +14 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +10 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +67 -29
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/credential-accounts.d.ts +31 -0
- package/dist/core/credential-accounts.d.ts.map +1 -0
- package/dist/core/credential-accounts.js +125 -0
- package/dist/core/credential-accounts.js.map +1 -0
- package/dist/core/credential-pool/classify.d.ts +42 -0
- package/dist/core/credential-pool/classify.d.ts.map +1 -0
- package/dist/core/credential-pool/classify.js +75 -0
- package/dist/core/credential-pool/classify.js.map +1 -0
- package/dist/core/credential-pool/env-slots.d.ts +22 -0
- package/dist/core/credential-pool/env-slots.d.ts.map +1 -0
- package/dist/core/credential-pool/env-slots.js +37 -0
- package/dist/core/credential-pool/env-slots.js.map +1 -0
- package/dist/core/credential-pool/failover.d.ts +54 -0
- package/dist/core/credential-pool/failover.d.ts.map +1 -0
- package/dist/core/credential-pool/failover.js +106 -0
- package/dist/core/credential-pool/failover.js.map +1 -0
- package/dist/core/credential-pool/rotation-stream.d.ts +43 -0
- package/dist/core/credential-pool/rotation-stream.d.ts.map +1 -0
- package/dist/core/credential-pool/rotation-stream.js +96 -0
- package/dist/core/credential-pool/rotation-stream.js.map +1 -0
- package/dist/core/credential-pool/state-store.d.ts +89 -0
- package/dist/core/credential-pool/state-store.d.ts.map +1 -0
- package/dist/core/credential-pool/state-store.js +166 -0
- package/dist/core/credential-pool/state-store.js.map +1 -0
- package/dist/core/extensions/builtin/account/index.d.ts +9 -0
- package/dist/core/extensions/builtin/account/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/account/index.js +69 -0
- package/dist/core/extensions/builtin/account/index.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +67 -0
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.js +1 -0
- package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.js +14 -22
- package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts +1 -0
- package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation-recovery.js +2 -0
- package/dist/core/extensions/builtin/goal/continuation-recovery.js.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.d.ts +8 -1
- package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.js +15 -0
- package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js +2 -2
- package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js.map +1 -1
- package/dist/core/extensions/builtin/goal/format.d.ts +6 -1
- package/dist/core/extensions/builtin/goal/format.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/format.js +6 -0
- package/dist/core/extensions/builtin/goal/format.js.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +5 -2
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +31 -7
- package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/persistence.js +2 -0
- package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
- package/dist/core/extensions/builtin/goal/renderers.d.ts +14 -0
- package/dist/core/extensions/builtin/goal/renderers.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/renderers.js +153 -0
- package/dist/core/extensions/builtin/goal/renderers.js.map +1 -0
- package/dist/core/extensions/builtin/goal/store.d.ts +6 -2
- package/dist/core/extensions/builtin/goal/store.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/store.js +8 -2
- package/dist/core/extensions/builtin/goal/store.js.map +1 -1
- package/dist/core/extensions/builtin/goal/tool-registration.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/tool-registration.js +16 -6
- package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
- package/dist/core/extensions/builtin/goal/types.d.ts +1 -0
- package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/types.js.map +1 -1
- package/dist/core/extensions/builtin/imagegen/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/imagegen/index.js +10 -3
- package/dist/core/extensions/builtin/imagegen/index.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +4 -0
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.js +1 -1
- package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/native-todo-mirror.d.ts +1 -1
- package/dist/core/extensions/builtin/todotools/native-todo-mirror.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/native-todo-mirror.js +1 -1
- package/dist/core/extensions/builtin/todotools/native-todo-mirror.js.map +1 -1
- package/dist/core/hidden-stdout-log.d.ts +10 -0
- package/dist/core/hidden-stdout-log.d.ts.map +1 -1
- package/dist/core/hidden-stdout-log.js +36 -5
- package/dist/core/hidden-stdout-log.js.map +1 -1
- package/dist/core/model-config-schema.d.ts +85 -12
- package/dist/core/model-config-schema.d.ts.map +1 -1
- package/dist/core/model-config-schema.js +25 -0
- package/dist/core/model-config-schema.js.map +1 -1
- package/dist/core/model-runtime.d.ts +34 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +98 -5
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +2 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +32 -7
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +38 -3
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/server/account.d.ts.map +1 -1
- package/dist/modes/app-server/server/account.js +5 -5
- package/dist/modes/app-server/server/account.js.map +1 -1
- package/dist/modes/index.d.ts +1 -0
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js +1 -0
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +11 -3
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +31 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution-fallback.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution-fallback.js +82 -1
- package/dist/modes/interactive/components/tool-execution-fallback.js.map +1 -1
- package/dist/modes/interactive/grok/chrome.d.ts +4 -4
- package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
- package/dist/modes/interactive/grok/chrome.js.map +1 -1
- package/dist/modes/interactive/grok/footer.d.ts +3 -3
- package/dist/modes/interactive/grok/footer.d.ts.map +1 -1
- package/dist/modes/interactive/grok/footer.js.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts +44 -0
- package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-host-runtime.js +271 -0
- package/dist/modes/interactive/interactive-host-runtime.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +65 -21
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +19 -6
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/host-ensure.d.ts +41 -0
- package/dist/modes/rpc/host-ensure.d.ts.map +1 -0
- package/dist/modes/rpc/host-ensure.js +245 -0
- package/dist/modes/rpc/host-ensure.js.map +1 -0
- package/dist/modes/rpc/host-lifecycle.d.ts +57 -0
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -0
- package/dist/modes/rpc/host-lifecycle.js +491 -0
- package/dist/modes/rpc/host-lifecycle.js.map +1 -0
- package/dist/modes/rpc/host-watchdog.d.ts +33 -0
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -0
- package/dist/modes/rpc/host-watchdog.js +142 -0
- package/dist/modes/rpc/host-watchdog.js.map +1 -0
- package/dist/modes/rpc/multi-session-host.d.ts +7 -1
- package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +206 -32
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +41 -3
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +125 -14
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +1 -1
- package/dist/modes/rpc/rpc-mode.js +1 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +6 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +24 -6
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +13 -2
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +65 -25
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/modes/rpc/session-registry.d.ts +9 -0
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +31 -3
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/docs/providers.md +48 -0
- package/docs/rpc.md +59 -5
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +44 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +13 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/inline-worker.ts +15 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-indirect-eval.js +711 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +14 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +10 -10
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-eval-result.ts +9 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +6 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +20 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/post-mutate.d.ts +21 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/post-mutate.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/post-mutate.js +27 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/post-mutate.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts +24 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +7 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-pairs.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-pairs.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-pairs.js +46 -14
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-pairs.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +11 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +30 -16
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.d.ts +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/classify.d.ts +16 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/classify.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/classify.js +75 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/classify.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.d.ts +45 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.js +81 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.d.ts +31 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.js +65 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts +12 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js +37 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +32 -6
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/types.d.ts +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/auth/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +6 -1
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +75 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +75 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/alibaba-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +5 -5
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +5 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +90 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -17,7 +17,7 @@ import { envValue } from "../../core/brand.js";
|
|
|
17
17
|
import { CACHE_TTL_MS, collectCacheMisses, computeCacheWaste, detectCacheMiss, } from "../../core/cache-stats.js";
|
|
18
18
|
import { buildNoticeBox } from "../../core/extensions/notice/index.js";
|
|
19
19
|
import { FooterDataProvider } from "../../core/footer-data-provider.js";
|
|
20
|
-
import { appendHiddenTuiStdout } from "../../core/hidden-stdout-log.js";
|
|
20
|
+
import { appendHiddenTuiStdout, appendUncaughtCrashLog } from "../../core/hidden-stdout-log.js";
|
|
21
21
|
import { buildHighReasoningWarning } from "../../core/high-reasoning-warning.js";
|
|
22
22
|
import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
|
|
23
23
|
import { KeybindingsManager } from "../../core/keybindings.js";
|
|
@@ -143,6 +143,8 @@ function isCompactionCostNotice(item) {
|
|
|
143
143
|
return "type" in item && item.type === "compaction_cost";
|
|
144
144
|
}
|
|
145
145
|
const DEAD_TERMINAL_ERROR_CODES = new Set(["EIO", "EPIPE", "ENOTCONN"]);
|
|
146
|
+
// Bun's macOS tty shim can report a dead terminal as raw positive errno 5 without a string code.
|
|
147
|
+
const EIO_ERRNO = 5;
|
|
146
148
|
const DEFAULT_RETRY_STATUS_REFRESH_INTERVAL_MS = 80;
|
|
147
149
|
const LARGE_SESSION_RETRY_STATUS_REFRESH_INTERVAL_MS = 60_000;
|
|
148
150
|
const DEFAULT_WORKING_STATUS_REFRESH_INTERVAL_MS = 600;
|
|
@@ -207,11 +209,20 @@ function formatWorkingStatusShimmerText(text, intensity) {
|
|
|
207
209
|
return `\x1b[1m\x1b[38;2;${color.r};${color.g};${color.b}m${text}\x1b[39m\x1b[22m`;
|
|
208
210
|
}
|
|
209
211
|
function isDeadTerminalError(error) {
|
|
210
|
-
if (!error || typeof error !== "object"
|
|
212
|
+
if (!error || typeof error !== "object") {
|
|
211
213
|
return false;
|
|
212
214
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
+
if ("code" in error) {
|
|
216
|
+
const code = error.code;
|
|
217
|
+
if (code !== undefined && DEAD_TERMINAL_ERROR_CODES.has(code)) {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if ("errno" in error) {
|
|
222
|
+
const errno = error.errno;
|
|
223
|
+
return errno === EIO_ERRNO || errno === -EIO_ERRNO;
|
|
224
|
+
}
|
|
225
|
+
return false;
|
|
215
226
|
}
|
|
216
227
|
const ANTHROPIC_SUBSCRIPTION_AUTH_WARNING = "Anthropic subscription auth is active. Third-party harness usage draws from extra usage and is billed per token, not your Claude plan limits. Manage extra usage at https://claude.ai/settings/usage. Disable this warning in /settings.";
|
|
217
228
|
function isAnthropicSubscriptionAuthKey(apiKey) {
|
|
@@ -479,6 +490,8 @@ export class InteractiveMode {
|
|
|
479
490
|
this.ui.setMaxRenderFps(fps);
|
|
480
491
|
}
|
|
481
492
|
// Convenience accessors
|
|
493
|
+
// The session may be the local AgentSession or the shared-host RPC proxy; the
|
|
494
|
+
// four reads widened on InteractiveSession must be awaited at every call site.
|
|
482
495
|
get session() {
|
|
483
496
|
return this.runtimeHost.session;
|
|
484
497
|
}
|
|
@@ -3474,6 +3487,7 @@ export class InteractiveMode {
|
|
|
3474
3487
|
case "thinking_level_changed":
|
|
3475
3488
|
this.footer.invalidate();
|
|
3476
3489
|
this.updateEditorBorderColor();
|
|
3490
|
+
this.showStatus(`Thinking level: ${event.level}`);
|
|
3477
3491
|
break;
|
|
3478
3492
|
case "high_reasoning_warning":
|
|
3479
3493
|
this.showHighReasoningWarning(event);
|
|
@@ -4032,8 +4046,12 @@ export class InteractiveMode {
|
|
|
4032
4046
|
this.ui.requestRender();
|
|
4033
4047
|
const removePending = () => {
|
|
4034
4048
|
const componentIndex = this.chatContainer.children.indexOf(component);
|
|
4035
|
-
|
|
4036
|
-
|
|
4049
|
+
if (componentIndex === -1) {
|
|
4050
|
+
return this.chatContainer.children.length;
|
|
4051
|
+
}
|
|
4052
|
+
const spacerIndex = spacer ? this.chatContainer.children.indexOf(spacer) : -1;
|
|
4053
|
+
const insertionIndex = spacerIndex >= 0 ? spacerIndex : componentIndex;
|
|
4054
|
+
if (spacerIndex >= 0 && spacer)
|
|
4037
4055
|
this.chatContainer.removeChild(spacer);
|
|
4038
4056
|
this.chatContainer.removeChild(component);
|
|
4039
4057
|
return insertionIndex;
|
|
@@ -4479,8 +4497,17 @@ export class InteractiveMode {
|
|
|
4479
4497
|
}
|
|
4480
4498
|
process.exit(0);
|
|
4481
4499
|
}
|
|
4482
|
-
emergencyTerminalExit() {
|
|
4500
|
+
emergencyTerminalExit(crash) {
|
|
4483
4501
|
this.isShuttingDown = true;
|
|
4502
|
+
// This exit is silent by design (the terminal is gone, so a banner would go
|
|
4503
|
+
// nowhere), which makes the debug log the ONLY surface that can record this
|
|
4504
|
+
// crash class — exactly the EIO case that left the 2026-08-26 diagnosis with no
|
|
4505
|
+
// evidence. Write before the cleanup below, which is unguarded and could throw.
|
|
4506
|
+
// A logging failure must never alter the exit path.
|
|
4507
|
+
try {
|
|
4508
|
+
appendUncaughtCrashLog(crash.origin, crash.error);
|
|
4509
|
+
}
|
|
4510
|
+
catch { }
|
|
4484
4511
|
this.unregisterSignalHandlers();
|
|
4485
4512
|
killTrackedDetachedChildren();
|
|
4486
4513
|
// The terminal is gone. Do not run normal shutdown because TUI and
|
|
@@ -4502,6 +4529,13 @@ export class InteractiveMode {
|
|
|
4502
4529
|
if (this.isShuttingDown) {
|
|
4503
4530
|
process.exit(1);
|
|
4504
4531
|
}
|
|
4532
|
+
if (isDeadTerminalError(error)) {
|
|
4533
|
+
// The terminal died under the session (e.g. an stdin read EIO after
|
|
4534
|
+
// the controlling terminal vanished or this pgrp lost the tty
|
|
4535
|
+
// foreground). Same handling as terminal write errors: exit silently
|
|
4536
|
+
// instead of printing a crash banner to a terminal that is gone.
|
|
4537
|
+
this.emergencyTerminalExit({ origin: `dead-terminal ${origin}`, error });
|
|
4538
|
+
}
|
|
4505
4539
|
if (isRecoverableInspectorVmImportError(error, origin)) {
|
|
4506
4540
|
this.showWarning(INSPECTOR_VM_IMPORT_WARNING);
|
|
4507
4541
|
return;
|
|
@@ -4519,6 +4553,13 @@ export class InteractiveMode {
|
|
|
4519
4553
|
this.ui.stop();
|
|
4520
4554
|
}
|
|
4521
4555
|
catch { }
|
|
4556
|
+
// Record the crash before the terminal handoff: the banner below only reaches
|
|
4557
|
+
// terminal scrollback, which is gone when the terminal is closed or is itself
|
|
4558
|
+
// the thing that failed. A logging failure must never alter the crash path.
|
|
4559
|
+
try {
|
|
4560
|
+
appendUncaughtCrashLog(origin, error);
|
|
4561
|
+
}
|
|
4562
|
+
catch { }
|
|
4522
4563
|
restoreInteractiveStderr();
|
|
4523
4564
|
console.error(`${APP_NAME} exiting due to uncaughtException:`);
|
|
4524
4565
|
console.error(error);
|
|
@@ -4552,7 +4593,7 @@ export class InteractiveMode {
|
|
|
4552
4593
|
}
|
|
4553
4594
|
const terminalErrorHandler = (error) => {
|
|
4554
4595
|
if (isDeadTerminalError(error)) {
|
|
4555
|
-
this.emergencyTerminalExit();
|
|
4596
|
+
this.emergencyTerminalExit({ origin: "dead-terminal stdio error", error });
|
|
4556
4597
|
}
|
|
4557
4598
|
throw error;
|
|
4558
4599
|
};
|
|
@@ -4700,16 +4741,15 @@ export class InteractiveMode {
|
|
|
4700
4741
|
}
|
|
4701
4742
|
this.ui.requestRender();
|
|
4702
4743
|
}
|
|
4703
|
-
cycleThinkingLevel() {
|
|
4704
|
-
|
|
4744
|
+
async cycleThinkingLevel() {
|
|
4745
|
+
// The shared-host proxy answers this over RPC. The level itself is rendered
|
|
4746
|
+
// from the thinking_level_changed event (single path for local and remote,
|
|
4747
|
+
// and for changes made by OTHER attached clients); the awaited value only
|
|
4748
|
+
// distinguishes "model does not support thinking".
|
|
4749
|
+
const newLevel = await this.session.cycleThinkingLevel();
|
|
4705
4750
|
if (newLevel === undefined) {
|
|
4706
4751
|
this.showStatus("Current model does not support thinking");
|
|
4707
4752
|
}
|
|
4708
|
-
else {
|
|
4709
|
-
this.footer.invalidate();
|
|
4710
|
-
this.updateEditorBorderColor();
|
|
4711
|
-
this.showStatus(`Thinking level: ${newLevel}`);
|
|
4712
|
-
}
|
|
4713
4753
|
}
|
|
4714
4754
|
async cycleModel(direction) {
|
|
4715
4755
|
try {
|
|
@@ -5191,7 +5231,9 @@ export class InteractiveMode {
|
|
|
5191
5231
|
this.ui.setFocus(created.focus);
|
|
5192
5232
|
this.ui.requestRender();
|
|
5193
5233
|
}
|
|
5194
|
-
showSettingsSelector() {
|
|
5234
|
+
async showSettingsSelector() {
|
|
5235
|
+
// Awaited at the boundary: the shared-host proxy answers this over RPC.
|
|
5236
|
+
const availableThinkingLevels = await this.session.getAvailableThinkingLevels();
|
|
5195
5237
|
this.showSelector((done) => {
|
|
5196
5238
|
let selector;
|
|
5197
5239
|
selector = new SettingsSelectorComponent({
|
|
@@ -5206,7 +5248,7 @@ export class InteractiveMode {
|
|
|
5206
5248
|
transport: this.settingsManager.getTransport(),
|
|
5207
5249
|
httpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),
|
|
5208
5250
|
thinkingLevel: this.session.thinkingLevel,
|
|
5209
|
-
availableThinkingLevels
|
|
5251
|
+
availableThinkingLevels,
|
|
5210
5252
|
currentTheme: this.themeController.getThemeSelection() || "dark",
|
|
5211
5253
|
terminalTheme: this.themeController.getTerminalTheme(),
|
|
5212
5254
|
availableThemes: getAvailableThemes(),
|
|
@@ -5794,8 +5836,9 @@ export class InteractiveMode {
|
|
|
5794
5836
|
};
|
|
5795
5837
|
});
|
|
5796
5838
|
}
|
|
5797
|
-
showUserMessageSelector() {
|
|
5798
|
-
|
|
5839
|
+
async showUserMessageSelector() {
|
|
5840
|
+
// Awaited at the boundary: the shared-host proxy answers this over RPC.
|
|
5841
|
+
const userMessages = await this.session.getUserMessagesForForking();
|
|
5799
5842
|
if (userMessages.length === 0) {
|
|
5800
5843
|
this.showStatus("No messages to fork from");
|
|
5801
5844
|
return;
|
|
@@ -6786,8 +6829,9 @@ export class InteractiveMode {
|
|
|
6786
6829
|
this.chatContainer.addChild(new Text(theme.fg("dim", `Session name set: ${sessionName ?? name}`), 1, 0));
|
|
6787
6830
|
this.ui.requestRender();
|
|
6788
6831
|
}
|
|
6789
|
-
handleSessionCommand() {
|
|
6790
|
-
|
|
6832
|
+
async handleSessionCommand() {
|
|
6833
|
+
// Awaited at the boundary: the shared-host proxy answers this over RPC.
|
|
6834
|
+
const stats = await this.session.getSessionStats();
|
|
6791
6835
|
const sessionName = this.sessionManager.getSessionName();
|
|
6792
6836
|
const entries = this.sessionManager.getEntries();
|
|
6793
6837
|
const cacheWaste = computeCacheWaste(entries, this.session.modelRuntime);
|