@deepseek-harness-tui/dsh-tui 0.13.0 → 0.14.0
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/README.md +85 -5
- package/assets/claude-girl/claude-girl-happy.png +0 -0
- package/assets/claude-girl/claude-girl.png +0 -0
- package/assets/codex-girl/codex-girl-happy.png +0 -0
- package/assets/codex-girl/codex-girl.png +0 -0
- package/bin/dsh-tui.js +104 -18
- package/cordis.patch.yml +2 -0
- package/cordis.yml +2 -0
- package/guide/dsh-tui-guide/SKILL.md +4 -2
- package/guide/dsh-tui-guide/claude-backend.en.md +203 -0
- package/guide/dsh-tui-guide/claude-backend.md +161 -0
- package/guide/dsh-tui-guide/codex-backend.en.md +297 -0
- package/guide/dsh-tui-guide/codex-backend.md +257 -0
- package/guide/dsh-tui-guide/configuration.en.md +9 -2
- package/guide/dsh-tui-guide/configuration.md +9 -2
- package/guide/dsh-tui-guide/interaction.en.md +169 -27
- package/guide/dsh-tui-guide/interaction.md +115 -17
- package/guide/dsh-tui-guide/themes.en.md +24 -2
- package/guide/dsh-tui-guide/themes.md +21 -2
- package/guide/dsh-tui-guide/user-guide.en.md +38 -23
- package/guide/dsh-tui-guide/user-guide.md +22 -11
- package/guide/dsh-tui-guide/vscode.en.md +1 -0
- package/guide/dsh-tui-guide/vscode.md +1 -0
- package/lib/settings.json +139 -6
- package/lib/types/adapter/channel/state.d.ts.map +1 -1
- package/lib/types/adapter/channel/state.js +1 -0
- package/lib/types/adapter/channel/ui-policy.d.ts +17 -2
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +29 -0
- package/lib/types/adapter/channel/ui.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui.js +45 -5
- package/lib/types/adapter/ports/channel-catalog.d.ts +7 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-display.d.ts +7 -1
- package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-session.d.ts +5 -0
- package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +20 -0
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +183 -6
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +477 -13
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/agent/backend.d.ts +168 -0
- package/lib/types/agent/backend.d.ts.map +1 -0
- package/lib/types/agent/backend.js +1 -0
- package/lib/types/agent/capabilities.d.ts +461 -0
- package/lib/types/agent/capabilities.d.ts.map +1 -0
- package/lib/types/agent/capabilities.js +1 -0
- package/lib/types/agent/events.d.ts +733 -0
- package/lib/types/agent/events.d.ts.map +1 -0
- package/lib/types/agent/events.js +2 -0
- package/lib/types/agent/index.d.ts +8 -0
- package/lib/types/agent/index.d.ts.map +1 -0
- package/lib/types/agent/index.js +7 -0
- package/lib/types/agent/messages.d.ts +52 -0
- package/lib/types/agent/messages.d.ts.map +1 -0
- package/lib/types/agent/messages.js +91 -0
- package/lib/types/agent/presentation.d.ts +29 -0
- package/lib/types/agent/presentation.d.ts.map +1 -0
- package/lib/types/agent/presentation.js +4 -0
- package/lib/types/agent/refs.d.ts +30 -0
- package/lib/types/agent/refs.d.ts.map +1 -0
- package/lib/types/agent/refs.js +39 -0
- package/lib/types/agent/session.d.ts +78 -0
- package/lib/types/agent/session.d.ts.map +1 -0
- package/lib/types/agent/session.js +1 -0
- package/lib/types/backends/claude/activity.d.ts +53 -0
- package/lib/types/backends/claude/activity.d.ts.map +1 -0
- package/lib/types/backends/claude/activity.js +103 -0
- package/lib/types/backends/claude/auth.d.ts +245 -0
- package/lib/types/backends/claude/auth.d.ts.map +1 -0
- package/lib/types/backends/claude/auth.js +503 -0
- package/lib/types/backends/claude/backend.d.ts +32 -0
- package/lib/types/backends/claude/backend.d.ts.map +1 -0
- package/lib/types/backends/claude/backend.js +296 -0
- package/lib/types/backends/claude/catalog.d.ts +17 -0
- package/lib/types/backends/claude/catalog.d.ts.map +1 -0
- package/lib/types/backends/claude/catalog.js +94 -0
- package/lib/types/backends/claude/channels.d.ts +63 -0
- package/lib/types/backends/claude/channels.d.ts.map +1 -0
- package/lib/types/backends/claude/channels.js +275 -0
- package/lib/types/backends/claude/contract.d.ts +37 -0
- package/lib/types/backends/claude/contract.d.ts.map +1 -0
- package/lib/types/backends/claude/contract.js +46 -0
- package/lib/types/backends/claude/controls.d.ts +134 -0
- package/lib/types/backends/claude/controls.d.ts.map +1 -0
- package/lib/types/backends/claude/controls.js +425 -0
- package/lib/types/backends/claude/dialogs.d.ts +62 -0
- package/lib/types/backends/claude/dialogs.d.ts.map +1 -0
- package/lib/types/backends/claude/dialogs.js +253 -0
- package/lib/types/backends/claude/flag-settings.d.ts +12 -0
- package/lib/types/backends/claude/flag-settings.d.ts.map +1 -0
- package/lib/types/backends/claude/flag-settings.js +49 -0
- package/lib/types/backends/claude/images.d.ts +49 -0
- package/lib/types/backends/claude/images.d.ts.map +1 -0
- package/lib/types/backends/claude/images.js +94 -0
- package/lib/types/backends/claude/index.d.ts +5 -0
- package/lib/types/backends/claude/index.d.ts.map +1 -0
- package/lib/types/backends/claude/index.js +4 -0
- package/lib/types/backends/claude/install.d.ts +15 -0
- package/lib/types/backends/claude/install.d.ts.map +1 -0
- package/lib/types/backends/claude/install.js +91 -0
- package/lib/types/backends/claude/modelEnv.d.ts +64 -0
- package/lib/types/backends/claude/modelEnv.d.ts.map +1 -0
- package/lib/types/backends/claude/modelEnv.js +199 -0
- package/lib/types/backends/claude/narrow.d.ts +10 -0
- package/lib/types/backends/claude/narrow.d.ts.map +1 -0
- package/lib/types/backends/claude/narrow.js +8 -0
- package/lib/types/backends/claude/older-history.d.ts +16 -0
- package/lib/types/backends/claude/older-history.d.ts.map +1 -0
- package/lib/types/backends/claude/older-history.js +101 -0
- package/lib/types/backends/claude/options.d.ts +181 -0
- package/lib/types/backends/claude/options.d.ts.map +1 -0
- package/lib/types/backends/claude/options.js +208 -0
- package/lib/types/backends/claude/permissions.d.ts +83 -0
- package/lib/types/backends/claude/permissions.d.ts.map +1 -0
- package/lib/types/backends/claude/permissions.js +331 -0
- package/lib/types/backends/claude/prefs.d.ts +55 -0
- package/lib/types/backends/claude/prefs.d.ts.map +1 -0
- package/lib/types/backends/claude/prefs.js +150 -0
- package/lib/types/backends/claude/process.d.ts +19 -0
- package/lib/types/backends/claude/process.d.ts.map +1 -0
- package/lib/types/backends/claude/process.js +156 -0
- package/lib/types/backends/claude/replay.d.ts +129 -0
- package/lib/types/backends/claude/replay.d.ts.map +1 -0
- package/lib/types/backends/claude/replay.js +505 -0
- package/lib/types/backends/claude/sdk-warnings.d.ts +23 -0
- package/lib/types/backends/claude/sdk-warnings.d.ts.map +1 -0
- package/lib/types/backends/claude/sdk-warnings.js +55 -0
- package/lib/types/backends/claude/sdk.d.ts +12 -0
- package/lib/types/backends/claude/sdk.d.ts.map +1 -0
- package/lib/types/backends/claude/sdk.js +34 -0
- package/lib/types/backends/claude/send-message.d.ts +54 -0
- package/lib/types/backends/claude/send-message.d.ts.map +1 -0
- package/lib/types/backends/claude/send-message.js +65 -0
- package/lib/types/backends/claude/session/auth.d.ts +47 -0
- package/lib/types/backends/claude/session/auth.d.ts.map +1 -0
- package/lib/types/backends/claude/session/auth.js +226 -0
- package/lib/types/backends/claude/session/channels.d.ts +82 -0
- package/lib/types/backends/claude/session/channels.d.ts.map +1 -0
- package/lib/types/backends/claude/session/channels.js +45 -0
- package/lib/types/backends/claude/session/input.d.ts +16 -0
- package/lib/types/backends/claude/session/input.d.ts.map +1 -0
- package/lib/types/backends/claude/session/input.js +64 -0
- package/lib/types/backends/claude/session/lifecycle.d.ts +6 -0
- package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -0
- package/lib/types/backends/claude/session/lifecycle.js +852 -0
- package/lib/types/backends/claude/session/store.d.ts +17 -0
- package/lib/types/backends/claude/session/store.d.ts.map +1 -0
- package/lib/types/backends/claude/session/store.js +122 -0
- package/lib/types/backends/claude/session/subagents.d.ts +13 -0
- package/lib/types/backends/claude/session/subagents.d.ts.map +1 -0
- package/lib/types/backends/claude/session/subagents.js +77 -0
- package/lib/types/backends/claude/session/types.d.ts +89 -0
- package/lib/types/backends/claude/session/types.d.ts.map +1 -0
- package/lib/types/backends/claude/session/types.js +1 -0
- package/lib/types/backends/claude/session.d.ts +4 -0
- package/lib/types/backends/claude/session.d.ts.map +1 -0
- package/lib/types/backends/claude/session.js +2 -0
- package/lib/types/backends/claude/side-query.d.ts +34 -0
- package/lib/types/backends/claude/side-query.d.ts.map +1 -0
- package/lib/types/backends/claude/side-query.js +116 -0
- package/lib/types/backends/claude/task-output.d.ts +13 -0
- package/lib/types/backends/claude/task-output.d.ts.map +1 -0
- package/lib/types/backends/claude/task-output.js +101 -0
- package/lib/types/backends/claude/tools.d.ts +45 -0
- package/lib/types/backends/claude/tools.d.ts.map +1 -0
- package/lib/types/backends/claude/tools.js +231 -0
- package/lib/types/backends/claude/transcript-file.d.ts +41 -0
- package/lib/types/backends/claude/transcript-file.d.ts.map +1 -0
- package/lib/types/backends/claude/transcript-file.js +195 -0
- package/lib/types/backends/claude/translate/attempts.d.ts +33 -0
- package/lib/types/backends/claude/translate/attempts.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/attempts.js +243 -0
- package/lib/types/backends/claude/translate/content.d.ts +33 -0
- package/lib/types/backends/claude/translate/content.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/content.js +91 -0
- package/lib/types/backends/claude/translate/core.d.ts +76 -0
- package/lib/types/backends/claude/translate/core.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/core.js +447 -0
- package/lib/types/backends/claude/translate/events.d.ts +9 -0
- package/lib/types/backends/claude/translate/events.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/events.js +77 -0
- package/lib/types/backends/claude/translate/lanes.d.ts +31 -0
- package/lib/types/backends/claude/translate/lanes.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/lanes.js +177 -0
- package/lib/types/backends/claude/translate/messages.d.ts +36 -0
- package/lib/types/backends/claude/translate/messages.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/messages.js +202 -0
- package/lib/types/backends/claude/translate/system.d.ts +40 -0
- package/lib/types/backends/claude/translate/system.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/system.js +399 -0
- package/lib/types/backends/claude/translate/tasks.d.ts +19 -0
- package/lib/types/backends/claude/translate/tasks.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/tasks.js +159 -0
- package/lib/types/backends/claude/translate/types.d.ts +114 -0
- package/lib/types/backends/claude/translate/types.d.ts.map +1 -0
- package/lib/types/backends/claude/translate/types.js +1 -0
- package/lib/types/backends/claude/translate.d.ts +9 -0
- package/lib/types/backends/claude/translate.d.ts.map +1 -0
- package/lib/types/backends/claude/translate.js +6 -0
- package/lib/types/backends/codex/auth/external-tokens.d.ts +66 -0
- package/lib/types/backends/codex/auth/external-tokens.d.ts.map +1 -0
- package/lib/types/backends/codex/auth/external-tokens.js +325 -0
- package/lib/types/backends/codex/auth/route.d.ts +14 -0
- package/lib/types/backends/codex/auth/route.d.ts.map +1 -0
- package/lib/types/backends/codex/auth/route.js +52 -0
- package/lib/types/backends/codex/auth/status.d.ts +16 -0
- package/lib/types/backends/codex/auth/status.d.ts.map +1 -0
- package/lib/types/backends/codex/auth/status.js +115 -0
- package/lib/types/backends/codex/backend.d.ts +58 -0
- package/lib/types/backends/codex/backend.d.ts.map +1 -0
- package/lib/types/backends/codex/backend.js +201 -0
- package/lib/types/backends/codex/catalog.d.ts +17 -0
- package/lib/types/backends/codex/catalog.d.ts.map +1 -0
- package/lib/types/backends/codex/catalog.js +128 -0
- package/lib/types/backends/codex/channels.d.ts +59 -0
- package/lib/types/backends/codex/channels.d.ts.map +1 -0
- package/lib/types/backends/codex/channels.js +274 -0
- package/lib/types/backends/codex/contract.d.ts +46 -0
- package/lib/types/backends/codex/contract.d.ts.map +1 -0
- package/lib/types/backends/codex/contract.js +80 -0
- package/lib/types/backends/codex/detect.d.ts +14 -0
- package/lib/types/backends/codex/detect.d.ts.map +1 -0
- package/lib/types/backends/codex/detect.js +90 -0
- package/lib/types/backends/codex/index.d.ts +6 -0
- package/lib/types/backends/codex/index.d.ts.map +1 -0
- package/lib/types/backends/codex/index.js +5 -0
- package/lib/types/backends/codex/modes.d.ts +16 -0
- package/lib/types/backends/codex/modes.d.ts.map +1 -0
- package/lib/types/backends/codex/modes.js +49 -0
- package/lib/types/backends/codex/narrow.d.ts +20 -0
- package/lib/types/backends/codex/narrow.d.ts.map +1 -0
- package/lib/types/backends/codex/narrow.js +18 -0
- package/lib/types/backends/codex/prefs.d.ts +42 -0
- package/lib/types/backends/codex/prefs.d.ts.map +1 -0
- package/lib/types/backends/codex/prefs.js +124 -0
- package/lib/types/backends/codex/protocol/index.d.ts +149 -0
- package/lib/types/backends/codex/protocol/index.d.ts.map +1 -0
- package/lib/types/backends/codex/protocol/index.js +130 -0
- package/lib/types/backends/codex/rpc/binary.d.ts +35 -0
- package/lib/types/backends/codex/rpc/binary.d.ts.map +1 -0
- package/lib/types/backends/codex/rpc/binary.js +174 -0
- package/lib/types/backends/codex/rpc/client.d.ts +72 -0
- package/lib/types/backends/codex/rpc/client.d.ts.map +1 -0
- package/lib/types/backends/codex/rpc/client.js +214 -0
- package/lib/types/backends/codex/rpc/hub.d.ts +105 -0
- package/lib/types/backends/codex/rpc/hub.d.ts.map +1 -0
- package/lib/types/backends/codex/rpc/hub.js +532 -0
- package/lib/types/backends/codex/rpc/transport.d.ts +39 -0
- package/lib/types/backends/codex/rpc/transport.d.ts.map +1 -0
- package/lib/types/backends/codex/rpc/transport.js +212 -0
- package/lib/types/backends/codex/session/activity.d.ts +18 -0
- package/lib/types/backends/codex/session/activity.d.ts.map +1 -0
- package/lib/types/backends/codex/session/activity.js +108 -0
- package/lib/types/backends/codex/session/approvals.d.ts +39 -0
- package/lib/types/backends/codex/session/approvals.d.ts.map +1 -0
- package/lib/types/backends/codex/session/approvals.js +477 -0
- package/lib/types/backends/codex/session/commands.d.ts +37 -0
- package/lib/types/backends/codex/session/commands.d.ts.map +1 -0
- package/lib/types/backends/codex/session/commands.js +141 -0
- package/lib/types/backends/codex/session/controls.d.ts +37 -0
- package/lib/types/backends/codex/session/controls.d.ts.map +1 -0
- package/lib/types/backends/codex/session/controls.js +303 -0
- package/lib/types/backends/codex/session/goals.d.ts +25 -0
- package/lib/types/backends/codex/session/goals.d.ts.map +1 -0
- package/lib/types/backends/codex/session/goals.js +97 -0
- package/lib/types/backends/codex/session/history.d.ts +52 -0
- package/lib/types/backends/codex/session/history.d.ts.map +1 -0
- package/lib/types/backends/codex/session/history.js +196 -0
- package/lib/types/backends/codex/session/images.d.ts +17 -0
- package/lib/types/backends/codex/session/images.d.ts.map +1 -0
- package/lib/types/backends/codex/session/images.js +138 -0
- package/lib/types/backends/codex/session/input.d.ts +75 -0
- package/lib/types/backends/codex/session/input.d.ts.map +1 -0
- package/lib/types/backends/codex/session/input.js +294 -0
- package/lib/types/backends/codex/session/plan-review.d.ts +19 -0
- package/lib/types/backends/codex/session/plan-review.d.ts.map +1 -0
- package/lib/types/backends/codex/session/plan-review.js +48 -0
- package/lib/types/backends/codex/session/prompts.d.ts +7 -0
- package/lib/types/backends/codex/session/prompts.d.ts.map +1 -0
- package/lib/types/backends/codex/session/prompts.js +47 -0
- package/lib/types/backends/codex/session/session.d.ts +12 -0
- package/lib/types/backends/codex/session/session.d.ts.map +1 -0
- package/lib/types/backends/codex/session/session.js +871 -0
- package/lib/types/backends/codex/session/side-query.d.ts +25 -0
- package/lib/types/backends/codex/session/side-query.d.ts.map +1 -0
- package/lib/types/backends/codex/session/side-query.js +121 -0
- package/lib/types/backends/codex/session/state.d.ts +57 -0
- package/lib/types/backends/codex/session/state.d.ts.map +1 -0
- package/lib/types/backends/codex/session/state.js +1 -0
- package/lib/types/backends/codex/session/subagents.d.ts +28 -0
- package/lib/types/backends/codex/session/subagents.d.ts.map +1 -0
- package/lib/types/backends/codex/session/subagents.js +286 -0
- package/lib/types/backends/codex/session/tasks.d.ts +25 -0
- package/lib/types/backends/codex/session/tasks.d.ts.map +1 -0
- package/lib/types/backends/codex/session/tasks.js +207 -0
- package/lib/types/backends/codex/session/tool-output.d.ts +9 -0
- package/lib/types/backends/codex/session/tool-output.d.ts.map +1 -0
- package/lib/types/backends/codex/session/tool-output.js +29 -0
- package/lib/types/backends/codex/translate/commands.d.ts +30 -0
- package/lib/types/backends/codex/translate/commands.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/commands.js +103 -0
- package/lib/types/backends/codex/translate/events.d.ts +9 -0
- package/lib/types/backends/codex/translate/events.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/events.js +71 -0
- package/lib/types/backends/codex/translate/items.d.ts +112 -0
- package/lib/types/backends/codex/translate/items.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/items.js +375 -0
- package/lib/types/backends/codex/translate/live.d.ts +39 -0
- package/lib/types/backends/codex/translate/live.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/live.js +315 -0
- package/lib/types/backends/codex/translate/notices.d.ts +27 -0
- package/lib/types/backends/codex/translate/notices.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/notices.js +99 -0
- package/lib/types/backends/codex/translate/presentation.d.ts +49 -0
- package/lib/types/backends/codex/translate/presentation.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/presentation.js +237 -0
- package/lib/types/backends/codex/translate/replay.d.ts +18 -0
- package/lib/types/backends/codex/translate/replay.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/replay.js +33 -0
- package/lib/types/backends/codex/translate/usage.d.ts +29 -0
- package/lib/types/backends/codex/translate/usage.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/usage.js +65 -0
- package/lib/types/backends/shared/atomic-file.d.ts +4 -0
- package/lib/types/backends/shared/atomic-file.d.ts.map +1 -0
- package/lib/types/backends/shared/atomic-file.js +52 -0
- package/lib/types/backends/shared/channel-tokens.d.ts +29 -0
- package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -0
- package/lib/types/backends/shared/channel-tokens.js +161 -0
- package/lib/types/backends/shared/display-path.d.ts +3 -0
- package/lib/types/backends/shared/display-path.d.ts.map +1 -0
- package/lib/types/backends/shared/display-path.js +12 -0
- package/lib/types/branding.d.ts +92 -0
- package/lib/types/branding.d.ts.map +1 -0
- package/lib/types/branding.js +117 -0
- package/lib/types/channel/activity.d.ts +53 -0
- package/lib/types/channel/activity.d.ts.map +1 -0
- package/lib/types/channel/activity.js +955 -0
- package/lib/types/channel/capabilities.d.ts +24 -0
- package/lib/types/channel/capabilities.d.ts.map +1 -0
- package/lib/types/channel/capabilities.js +57 -0
- package/lib/types/channel/channel-slug.d.ts +9 -0
- package/lib/types/channel/channel-slug.d.ts.map +1 -0
- package/lib/types/channel/channel-slug.js +15 -0
- package/lib/types/channel/channel-wizard.d.ts +30 -0
- package/lib/types/channel/channel-wizard.d.ts.map +1 -0
- package/lib/types/channel/channel-wizard.js +226 -0
- package/lib/types/channel/elicitation.d.ts +135 -0
- package/lib/types/channel/elicitation.d.ts.map +1 -0
- package/lib/types/channel/elicitation.js +360 -0
- package/lib/types/channel/goal-command.d.ts +49 -0
- package/lib/types/channel/goal-command.d.ts.map +1 -0
- package/lib/types/channel/goal-command.js +72 -0
- package/lib/types/channel/history-restore.d.ts +16 -0
- package/lib/types/channel/history-restore.d.ts.map +1 -0
- package/lib/types/channel/history-restore.js +214 -0
- package/lib/types/channel/interaction.d.ts +38 -0
- package/lib/types/channel/interaction.d.ts.map +1 -0
- package/lib/types/channel/interaction.js +110 -0
- package/lib/types/channel/job-format.d.ts +6 -0
- package/lib/types/channel/job-format.d.ts.map +1 -0
- package/lib/types/channel/job-format.js +12 -0
- package/lib/types/channel/live-output.d.ts +35 -0
- package/lib/types/channel/live-output.d.ts.map +1 -0
- package/lib/types/channel/live-output.js +74 -0
- package/lib/types/channel/model-capabilities.d.ts +10 -0
- package/lib/types/channel/model-capabilities.d.ts.map +1 -0
- package/lib/types/channel/model-capabilities.js +51 -0
- package/lib/types/channel/permissions.d.ts +155 -0
- package/lib/types/channel/permissions.d.ts.map +1 -0
- package/lib/types/channel/permissions.js +188 -0
- package/lib/types/channel/projection.d.ts +110 -0
- package/lib/types/channel/projection.d.ts.map +1 -0
- package/lib/types/channel/projection.js +1521 -0
- package/lib/types/channel/question-record.d.ts +76 -0
- package/lib/types/channel/question-record.d.ts.map +1 -0
- package/lib/types/channel/question-record.js +109 -0
- package/lib/types/channel/questions.d.ts +204 -0
- package/lib/types/channel/questions.d.ts.map +1 -0
- package/lib/types/channel/questions.js +286 -0
- package/lib/types/channel/sanitize.d.ts +49 -0
- package/lib/types/channel/sanitize.d.ts.map +1 -0
- package/lib/types/channel/sanitize.js +88 -0
- package/lib/types/channel/selection-record.d.ts +18 -0
- package/lib/types/channel/selection-record.d.ts.map +1 -0
- package/lib/types/channel/selection-record.js +45 -0
- package/lib/types/channel/side-prompts.d.ts +59 -0
- package/lib/types/channel/side-prompts.d.ts.map +1 -0
- package/lib/types/channel/side-prompts.js +127 -0
- package/lib/types/channel/transcript.d.ts +17 -0
- package/lib/types/channel/transcript.d.ts.map +1 -0
- package/lib/types/channel/transcript.js +19 -0
- package/lib/types/channel/usage.d.ts +48 -0
- package/lib/types/channel/usage.d.ts.map +1 -0
- package/lib/types/channel/usage.js +143 -0
- package/lib/types/commands.d.ts +147 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +196 -2
- package/lib/types/components/AgentMessageComposer.d.ts +50 -0
- package/lib/types/components/AgentMessageComposer.d.ts.map +1 -0
- package/lib/types/components/AgentMessageComposer.js +159 -0
- package/lib/types/components/BtwPanel.d.ts +13 -12
- package/lib/types/components/BtwPanel.d.ts.map +1 -1
- package/lib/types/components/BtwPanel.js +35 -24
- package/lib/types/components/ChannelPicker.d.ts +40 -0
- package/lib/types/components/ChannelPicker.d.ts.map +1 -0
- package/lib/types/components/ChannelPicker.js +26 -0
- package/lib/types/components/Chat/JobCard.d.ts +29 -31
- package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
- package/lib/types/components/Chat/JobCard.js +31 -112
- package/lib/types/components/Chat/SubagentMessage.d.ts +4 -1
- package/lib/types/components/Chat/SubagentMessage.d.ts.map +1 -1
- package/lib/types/components/Chat/SubagentMessage.js +10 -3
- package/lib/types/components/ClaudeGirl.d.ts +27 -0
- package/lib/types/components/ClaudeGirl.d.ts.map +1 -0
- package/lib/types/components/ClaudeGirl.js +30 -0
- package/lib/types/components/CodeBlockFrame.d.ts +19 -0
- package/lib/types/components/CodeBlockFrame.d.ts.map +1 -0
- package/lib/types/components/CodeBlockFrame.js +138 -0
- package/lib/types/components/CommandSuggestions.d.ts +10 -1
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
- package/lib/types/components/CommandSuggestions.js +20 -3
- package/lib/types/components/ContextBarView.d.ts +2 -2
- package/lib/types/components/ContextBarView.d.ts.map +1 -1
- package/lib/types/components/ContextBarView.js +18 -8
- package/lib/types/components/EffortChargeGlyph.d.ts +1 -1
- package/lib/types/components/EffortChargeGlyph.d.ts.map +1 -1
- package/lib/types/components/EffortChargeGlyph.js +3 -4
- package/lib/types/components/EffortInputBorder.d.ts +1 -2
- package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
- package/lib/types/components/EffortInputBorder.js +7 -4
- package/lib/types/components/EffortSlider.d.ts +5 -1
- package/lib/types/components/EffortSlider.d.ts.map +1 -1
- package/lib/types/components/EffortSlider.js +2 -2
- package/lib/types/components/EffortTierBadge.d.ts +1 -2
- package/lib/types/components/EffortTierBadge.d.ts.map +1 -1
- package/lib/types/components/EffortTierBadge.js +8 -5
- package/lib/types/components/GoalTodoPanel.d.ts +2 -1
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/GoalTodoPanel.js +11 -5
- package/lib/types/components/InlineMathParagraph.js +1 -1
- package/lib/types/components/JobsPanel.d.ts +8 -9
- package/lib/types/components/JobsPanel.d.ts.map +1 -1
- package/lib/types/components/JobsPanel.js +72 -13
- package/lib/types/components/KernelPicker.d.ts +28 -0
- package/lib/types/components/KernelPicker.d.ts.map +1 -0
- package/lib/types/components/KernelPicker.js +37 -0
- package/lib/types/components/LogoV2.d.ts +7 -1
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +120 -24
- package/lib/types/components/Markdown.d.ts +2 -1
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +37 -8
- package/lib/types/components/MathBlock.d.ts.map +1 -1
- package/lib/types/components/MathBlock.js +3 -1
- package/lib/types/components/MermaidDiagram.d.ts.map +1 -1
- package/lib/types/components/MermaidDiagram.js +7 -5
- package/lib/types/components/MessageList.d.ts +21 -3
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +62 -42
- package/lib/types/components/ModePicker.d.ts +20 -0
- package/lib/types/components/ModePicker.d.ts.map +1 -0
- package/lib/types/components/ModePicker.js +17 -0
- package/lib/types/components/PromptInput.d.ts +2 -2
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +308 -55
- package/lib/types/components/SdkInstallWizard.d.ts +44 -0
- package/lib/types/components/SdkInstallWizard.d.ts.map +1 -0
- package/lib/types/components/SdkInstallWizard.js +18 -0
- package/lib/types/components/SearchBox.d.ts +7 -8
- package/lib/types/components/SearchBox.d.ts.map +1 -1
- package/lib/types/components/SearchBox.js +18 -9
- package/lib/types/components/SplitDiffView.d.ts.map +1 -1
- package/lib/types/components/SplitDiffView.js +113 -6
- package/lib/types/components/StarPrompt.d.ts.map +1 -1
- package/lib/types/components/StarPrompt.js +5 -3
- package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
- package/lib/types/components/StreamingMarkdown.js +6 -4
- package/lib/types/components/SubagentCard.d.ts +2 -1
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +25 -18
- package/lib/types/components/SubagentDashboard.d.ts +10 -6
- package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
- package/lib/types/components/SubagentDashboard.js +32 -21
- package/lib/types/components/SubagentDetailScene.d.ts +16 -1
- package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
- package/lib/types/components/SubagentDetailScene.js +196 -45
- package/lib/types/components/SyntaxText.d.ts.map +1 -1
- package/lib/types/components/SyntaxText.js +4 -1
- package/lib/types/components/TurnInterruptedRow.d.ts +3 -1
- package/lib/types/components/TurnInterruptedRow.d.ts.map +1 -1
- package/lib/types/components/TurnInterruptedRow.js +6 -3
- package/lib/types/components/TurnUsageRow.d.ts +24 -0
- package/lib/types/components/TurnUsageRow.d.ts.map +1 -0
- package/lib/types/components/TurnUsageRow.js +46 -0
- package/lib/types/components/WorkingSpinner.d.ts +2 -1
- package/lib/types/components/WorkingSpinner.d.ts.map +1 -1
- package/lib/types/components/WorkingSpinner.js +21 -4
- package/lib/types/components/approvals/ApprovalPanel.d.ts +36 -13
- package/lib/types/components/approvals/ApprovalPanel.d.ts.map +1 -1
- package/lib/types/components/approvals/ApprovalPanel.js +173 -25
- package/lib/types/components/claudeGirlSprite.d.ts +18 -0
- package/lib/types/components/claudeGirlSprite.d.ts.map +1 -0
- package/lib/types/components/claudeGirlSprite.js +48 -0
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +46 -13
- package/lib/types/components/design-system/ThemedText.d.ts +3 -1
- package/lib/types/components/design-system/ThemedText.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemedText.js +2 -2
- package/lib/types/components/diffPatch.d.ts +55 -0
- package/lib/types/components/diffPatch.d.ts.map +1 -0
- package/lib/types/components/diffPatch.js +142 -0
- package/lib/types/components/kernelCatalog.d.ts +48 -0
- package/lib/types/components/kernelCatalog.d.ts.map +1 -0
- package/lib/types/components/kernelCatalog.js +53 -0
- package/lib/types/components/launchpadActions.d.ts +13 -6
- package/lib/types/components/launchpadActions.d.ts.map +1 -1
- package/lib/types/components/launchpadActions.js +26 -4
- package/lib/types/components/launchpadParams.d.ts +101 -0
- package/lib/types/components/launchpadParams.d.ts.map +1 -0
- package/lib/types/components/launchpadParams.js +171 -0
- package/lib/types/components/maidPortrait.d.ts +37 -5
- package/lib/types/components/maidPortrait.d.ts.map +1 -1
- package/lib/types/components/maidPortrait.js +73 -54
- package/lib/types/components/messages/AgentMessageFlow.d.ts +20 -0
- package/lib/types/components/messages/AgentMessageFlow.d.ts.map +1 -0
- package/lib/types/components/messages/AgentMessageFlow.js +37 -0
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts +6 -1
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +29 -5
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +11 -2
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +289 -36
- package/lib/types/components/messages/TranscriptLeaves.d.ts +85 -0
- package/lib/types/components/messages/TranscriptLeaves.d.ts.map +1 -0
- package/lib/types/components/messages/TranscriptLeaves.js +74 -0
- package/lib/types/components/messages/agentTeam.d.ts +69 -0
- package/lib/types/components/messages/agentTeam.d.ts.map +1 -0
- package/lib/types/components/messages/agentTeam.js +53 -0
- package/lib/types/components/messages/liveOutputLines.d.ts +33 -0
- package/lib/types/components/messages/liveOutputLines.d.ts.map +1 -0
- package/lib/types/components/messages/liveOutputLines.js +100 -0
- package/lib/types/components/messages/subagentTranscript.d.ts +146 -0
- package/lib/types/components/messages/subagentTranscript.d.ts.map +1 -0
- package/lib/types/components/messages/subagentTranscript.js +304 -0
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +16 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +76 -6
- package/lib/types/components/questions/PlanReviewPanel.d.ts +8 -3
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +11 -6
- package/lib/types/components/questions/ProviderModelEditor.d.ts +12 -0
- package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -0
- package/lib/types/components/questions/ProviderModelEditor.js +266 -0
- package/lib/types/components/shimmer.d.ts +26 -0
- package/lib/types/components/shimmer.d.ts.map +1 -1
- package/lib/types/components/shimmer.js +26 -0
- package/lib/types/components/sidePanel/InfoPanel.d.ts.map +1 -1
- package/lib/types/components/sidePanel/InfoPanel.js +13 -8
- package/lib/types/components/sidePanel/PanelBar.d.ts +0 -24
- package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelBar.js +55 -77
- package/lib/types/components/sidePanel/PanelStore.d.ts +3 -1
- package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelStore.js +8 -4
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts +3 -10
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.js +9 -12
- package/lib/types/components/sidePanel/TrajectoryPanel.d.ts.map +1 -1
- package/lib/types/components/sidePanel/TrajectoryPanel.js +78 -14
- package/lib/types/components/sidePanel/agentViewStore.d.ts +20 -0
- package/lib/types/components/sidePanel/agentViewStore.d.ts.map +1 -0
- package/lib/types/components/sidePanel/agentViewStore.js +26 -0
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +50 -0
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -0
- package/lib/types/components/sidePanel/btw/BtwComposer.js +45 -0
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts +13 -0
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -0
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +147 -0
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts +14 -0
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -0
- package/lib/types/components/sidePanel/btw/BtwThreadScene.js +131 -0
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +30 -0
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -0
- package/lib/types/components/sidePanel/btw/BtwThreadView.js +87 -0
- package/lib/types/components/sidePanel/btw/threads.d.ts +111 -0
- package/lib/types/components/sidePanel/btw/threads.d.ts.map +1 -0
- package/lib/types/components/sidePanel/btw/threads.js +302 -0
- package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -1
- package/lib/types/components/sidePanel/builtinPanels.js +70 -30
- package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts +4 -46
- package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/CompanionPanel.js +19 -55
- package/lib/types/components/sidePanel/companion/mood.d.ts +32 -0
- package/lib/types/components/sidePanel/companion/mood.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/mood.js +44 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts +34 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/skins.js +203 -29
- package/lib/types/components/splashFonts.d.ts +17 -9
- package/lib/types/components/splashFonts.d.ts.map +1 -1
- package/lib/types/components/splashFonts.js +119 -15
- package/lib/types/components/splashLayout.d.ts.map +1 -1
- package/lib/types/components/splashLayout.js +3 -1
- package/lib/types/components/subagentDetailMemory.d.ts +17 -0
- package/lib/types/components/subagentDetailMemory.d.ts.map +1 -0
- package/lib/types/components/subagentDetailMemory.js +28 -0
- package/lib/types/components/trajectory/Inspector.d.ts.map +1 -1
- package/lib/types/components/trajectory/Inspector.js +9 -0
- package/lib/types/components/trajectory/Ledger.d.ts.map +1 -1
- package/lib/types/components/trajectory/Ledger.js +7 -1
- package/lib/types/components/trajectory/scope.d.ts +64 -0
- package/lib/types/components/trajectory/scope.d.ts.map +1 -0
- package/lib/types/components/trajectory/scope.js +88 -0
- package/lib/types/components/trajectory/useTrajectoryScope.d.ts +42 -0
- package/lib/types/components/trajectory/useTrajectoryScope.d.ts.map +1 -0
- package/lib/types/components/trajectory/useTrajectoryScope.js +86 -0
- package/lib/types/customTheme.d.ts +4 -6
- package/lib/types/customTheme.d.ts.map +1 -1
- package/lib/types/customTheme.js +6 -8
- package/lib/types/dsh-adapter/approvals.d.ts +18 -5
- package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
- package/lib/types/dsh-adapter/approvals.js +17 -4
- package/lib/types/dsh-adapter/backend/session.d.ts +64 -0
- package/lib/types/dsh-adapter/backend/session.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend/session.js +291 -0
- package/lib/types/dsh-adapter/backend/translate.d.ts +58 -0
- package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend/translate.js +467 -0
- package/lib/types/dsh-adapter/backends.d.ts +49 -0
- package/lib/types/dsh-adapter/backends.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backends.js +124 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts +16 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.js +109 -0
- package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +7 -5
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +19 -9
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +58 -135
- package/lib/types/dsh-adapter/channel/binding.d.ts +61 -14
- package/lib/types/dsh-adapter/channel/binding.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding.js +102 -35
- package/lib/types/dsh-adapter/channel/command-completions.d.ts +3 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/command-completions.js +33 -4
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +3 -2
- package/lib/types/dsh-adapter/channel/composer-images.d.ts +5 -0
- package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/composer-images.js +4 -3
- package/lib/types/dsh-adapter/channel/core/actions.d.ts +39 -0
- package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/actions.js +152 -0
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +145 -0
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/binding-feed.js +289 -0
- package/lib/types/dsh-adapter/channel/core/compose.d.ts +217 -0
- package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/compose.js +938 -0
- package/lib/types/dsh-adapter/channel/core/files.d.ts +57 -0
- package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/files.js +45 -0
- package/lib/types/dsh-adapter/channel/core/host.d.ts +55 -0
- package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/host.js +116 -0
- package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +46 -0
- package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/local-actions.js +117 -0
- package/lib/types/dsh-adapter/channel/core/local-images.d.ts +20 -0
- package/lib/types/dsh-adapter/channel/core/local-images.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/local-images.js +147 -0
- package/lib/types/dsh-adapter/channel/core/reports.d.ts +12 -0
- package/lib/types/dsh-adapter/channel/core/reports.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/reports.js +77 -0
- package/lib/types/dsh-adapter/channel/core/session-controls.d.ts +39 -0
- package/lib/types/dsh-adapter/channel/core/session-controls.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/session-controls.js +219 -0
- package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +174 -0
- package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/session-switch.js +390 -0
- package/lib/types/dsh-adapter/channel/core/sessions.d.ts +40 -0
- package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/core/sessions.js +268 -0
- package/lib/types/dsh-adapter/channel/decisions.d.ts +4 -3
- package/lib/types/dsh-adapter/channel/decisions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/decisions.js +4 -4
- package/lib/types/dsh-adapter/channel/emitter.d.ts +15 -2
- package/lib/types/dsh-adapter/channel/emitter.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/emitter.js +5 -3
- package/lib/types/dsh-adapter/channel/extensions.d.ts +36 -0
- package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/extensions.js +714 -0
- package/lib/types/dsh-adapter/channel/ide-selection.d.ts +1 -10
- package/lib/types/dsh-adapter/channel/ide-selection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/ide-selection.js +4 -46
- package/lib/types/dsh-adapter/channel/input-actions.d.ts +27 -4
- package/lib/types/dsh-adapter/channel/input-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-actions.js +240 -21
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +21 -5
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +65 -27
- package/lib/types/dsh-adapter/channel/local-actions.d.ts +10 -32
- package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/local-actions.js +10 -78
- package/lib/types/dsh-adapter/channel/local-fs.d.ts +3 -0
- package/lib/types/dsh-adapter/channel/local-fs.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/local-fs.js +46 -0
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts +3 -3
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-actions.d.ts +3 -3
- package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-actions.js +38 -5
- package/lib/types/dsh-adapter/channel/model-switch.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-switch.js +9 -6
- package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/preferences.js +16 -0
- package/lib/types/dsh-adapter/channel/projection.d.ts +16 -13
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +38 -1143
- package/lib/types/dsh-adapter/channel/question-record.d.ts +3 -75
- package/lib/types/dsh-adapter/channel/question-record.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/question-record.js +3 -107
- package/lib/types/dsh-adapter/channel/session-activity.d.ts +9 -0
- package/lib/types/dsh-adapter/channel/session-activity.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-activity.js +42 -0
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts +4 -4
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-adoption.js +3 -1
- package/lib/types/dsh-adapter/channel/session-fork.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-fork.js +2 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +7 -3
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.js +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +2 -9
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.js +4 -0
- package/lib/types/dsh-adapter/channel/session-resume.d.ts +5 -10
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +74 -113
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts +4 -4
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-rewind.js +7 -6
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts +4 -4
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-tree-actions.js +8 -7
- package/lib/types/dsh-adapter/channel/settings-host.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +8 -0
- package/lib/types/dsh-adapter/channel/skill-catalog.d.ts +5 -1
- package/lib/types/dsh-adapter/channel/skill-catalog.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/skill-catalog.js +2 -2
- package/lib/types/dsh-adapter/channel/state.d.ts +72 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +7 -3
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +58 -3
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +153 -9
- package/lib/types/dsh-adapter/channel/subagent-transcript.d.ts +114 -0
- package/lib/types/dsh-adapter/channel/subagent-transcript.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/subagent-transcript.js +279 -0
- package/lib/types/dsh-adapter/channel/transcript.d.ts +7 -15
- package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/transcript.js +17 -21
- package/lib/types/dsh-adapter/channel/types.d.ts +16 -7
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/usage.d.ts +3 -23
- package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/usage.js +5 -111
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.js +2 -1
- package/lib/types/dsh-adapter/channel.d.ts +17 -8
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +24 -1059
- package/lib/types/dsh-adapter/context-occupancy.d.ts +6 -1
- package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
- package/lib/types/dsh-adapter/context-occupancy.js +6 -1
- package/lib/types/dsh-adapter/decision-guard.d.ts +24 -0
- package/lib/types/dsh-adapter/decision-guard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/decision-guard.js +44 -0
- package/lib/types/dsh-adapter/extension-events.d.ts +4 -1
- package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/extension-events.js +22 -10
- package/lib/types/dsh-adapter/index.d.ts +41 -3
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +28 -1
- package/lib/types/dsh-adapter/jobs.d.ts +5 -3
- package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
- package/lib/types/dsh-adapter/jobs.js +53 -14
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -16
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
- package/lib/types/dsh-adapter/migrate/parse/jsonl.js +3 -29
- package/lib/types/dsh-adapter/oauth-credential-source.d.ts +34 -0
- package/lib/types/dsh-adapter/oauth-credential-source.d.ts.map +1 -0
- package/lib/types/dsh-adapter/oauth-credential-source.js +66 -0
- package/lib/types/dsh-adapter/plugin.d.ts +38 -2
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +546 -110
- package/lib/types/dsh-adapter/provider-model-capabilities.d.ts +10 -0
- package/lib/types/dsh-adapter/provider-model-capabilities.d.ts.map +1 -0
- package/lib/types/dsh-adapter/provider-model-capabilities.js +80 -0
- package/lib/types/dsh-adapter/providerWizard.d.ts +8 -2
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/providerWizard.js +118 -52
- package/lib/types/dsh-adapter/questions.d.ts +29 -124
- package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/questions.js +33 -267
- package/lib/types/dsh-adapter/recap.d.ts +3 -15
- package/lib/types/dsh-adapter/recap.d.ts.map +1 -1
- package/lib/types/dsh-adapter/recap.js +3 -46
- package/lib/types/dsh-adapter/sanitize.d.ts +4 -44
- package/lib/types/dsh-adapter/sanitize.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sanitize.js +4 -84
- package/lib/types/dsh-adapter/session-mount-heartbeat.d.ts +3 -1
- package/lib/types/dsh-adapter/session-mount-heartbeat.d.ts.map +1 -1
- package/lib/types/dsh-adapter/session-mount-heartbeat.js +4 -2
- package/lib/types/dsh-adapter/sessions/digest.d.ts +18 -3
- package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/digest.js +60 -27
- package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/list.js +6 -4
- package/lib/types/dsh-adapter/sessions/recovery.d.ts +2 -2
- package/lib/types/dsh-adapter/sessions/recovery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/recovery.js +23 -14
- package/lib/types/dsh-adapter/sessions/store.d.ts +2 -0
- package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/store.js +1 -0
- package/lib/types/dsh-adapter/sessions/types.d.ts +2 -0
- package/lib/types/dsh-adapter/sessions/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sideQuestion.js +3 -13
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +7 -0
- package/lib/types/dsh-adapter/themes.d.ts +1 -1
- package/lib/types/dsh-adapter/themes.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/agent-source.d.ts +84 -0
- package/lib/types/dsh-adapter/trajectory/agent-source.d.ts.map +1 -0
- package/lib/types/dsh-adapter/trajectory/agent-source.js +601 -0
- package/lib/types/dsh-adapter/trajectory/guards.d.ts +31 -1
- package/lib/types/dsh-adapter/trajectory/guards.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/guards.js +28 -0
- package/lib/types/dsh-adapter/trajectory/index.d.ts +3 -1
- package/lib/types/dsh-adapter/trajectory/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/index.js +1 -0
- package/lib/types/dsh-adapter/trajectory/inspect.d.ts +7 -0
- package/lib/types/dsh-adapter/trajectory/inspect.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/inspect.js +70 -2
- package/lib/types/dsh-adapter/trajectory/projection.d.ts +4 -0
- package/lib/types/dsh-adapter/trajectory/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/projection.js +36 -0
- package/lib/types/dsh-adapter/trajectory/types.d.ts +13 -0
- package/lib/types/dsh-adapter/trajectory/types.d.ts.map +1 -1
- package/lib/types/effortPrefs.d.ts +7 -0
- package/lib/types/effortPrefs.d.ts.map +1 -1
- package/lib/types/effortPrefs.js +11 -2
- package/lib/types/handoffAck.d.ts +57 -0
- package/lib/types/handoffAck.d.ts.map +1 -0
- package/lib/types/handoffAck.js +154 -0
- package/lib/types/handoffEvents.d.ts +52 -0
- package/lib/types/handoffEvents.d.ts.map +1 -0
- package/lib/types/handoffEvents.js +128 -0
- package/lib/types/i18n.d.ts +3189 -68
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +855 -9
- package/lib/types/ink/colorize.d.ts.map +1 -1
- package/lib/types/ink/colorize.js +8 -2
- package/lib/types/ink/components/AlternateScreen.d.ts +12 -1
- package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -1
- package/lib/types/ink/components/AlternateScreen.js +25 -4
- package/lib/types/ink/components/App.d.ts +5 -1
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +52 -5
- package/lib/types/ink/components/Image.d.ts +8 -1
- package/lib/types/ink/components/Image.d.ts.map +1 -1
- package/lib/types/ink/components/Image.js +2 -2
- package/lib/types/ink/components/Text.d.ts +8 -1
- package/lib/types/ink/components/Text.d.ts.map +1 -1
- package/lib/types/ink/components/Text.js +11 -1
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/ink/dom.js +75 -3
- package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-input.js +9 -4
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +8 -2
- package/lib/types/ink/kitty-graphics.d.ts +7 -2
- package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
- package/lib/types/ink/kitty-graphics.js +15 -7
- package/lib/types/ink/node-cache.d.ts +15 -1
- package/lib/types/ink/node-cache.d.ts.map +1 -1
- package/lib/types/ink/node-cache.js +4 -1
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +2 -0
- package/lib/types/ink/parse-keypress.d.ts +13 -0
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +438 -19
- package/lib/types/ink/reconciler.d.ts.map +1 -1
- package/lib/types/ink/reconciler.js +9 -0
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +200 -4
- package/lib/types/ink/render-stats.d.ts +35 -0
- package/lib/types/ink/render-stats.d.ts.map +1 -0
- package/lib/types/ink/render-stats.js +53 -0
- package/lib/types/ink/sixel-codec.d.ts +11 -1
- package/lib/types/ink/sixel-codec.d.ts.map +1 -1
- package/lib/types/ink/sixel-codec.js +10 -3
- package/lib/types/ink/sixel-graphics.js +2 -2
- package/lib/types/ink/styles.d.ts +46 -0
- package/lib/types/ink/styles.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.d.ts +7 -0
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.d.ts +1 -1
- package/lib/types/ink/terminal-querier.js +4 -4
- package/lib/types/ink/text-decoration.d.ts +49 -0
- package/lib/types/ink/text-decoration.d.ts.map +1 -0
- package/lib/types/ink/text-decoration.js +235 -0
- package/lib/types/ink/update-overflow-guard.d.ts +9 -0
- package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
- package/lib/types/ink/update-overflow-guard.js +41 -0
- package/lib/types/ink/wrap-text.d.ts.map +1 -1
- package/lib/types/ink/wrap-text.js +5 -1
- package/lib/types/kernelPrefs.d.ts +51 -0
- package/lib/types/kernelPrefs.d.ts.map +1 -0
- package/lib/types/kernelPrefs.js +126 -0
- package/lib/types/modelRecents.d.ts +10 -2
- package/lib/types/modelRecents.d.ts.map +1 -1
- package/lib/types/modelRecents.js +20 -7
- package/lib/types/screens/AgentTranscriptScene.d.ts +42 -0
- package/lib/types/screens/AgentTranscriptScene.d.ts.map +1 -0
- package/lib/types/screens/AgentTranscriptScene.js +269 -0
- package/lib/types/screens/Chat.d.ts +45 -7
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +625 -113
- package/lib/types/screens/Launchpad.d.ts +24 -7
- package/lib/types/screens/Launchpad.d.ts.map +1 -1
- package/lib/types/screens/Launchpad.js +147 -28
- package/lib/types/screens/SessionSupervisor.d.ts +3 -3
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +69 -5
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +211 -7
- package/lib/types/screens/StatusLine.d.ts +40 -1
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +131 -19
- package/lib/types/screens/StatusMetrics.d.ts +53 -17
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +141 -30
- package/lib/types/screens/TrajectoryScene.d.ts.map +1 -1
- package/lib/types/screens/TrajectoryScene.js +74 -12
- package/lib/types/screens/chat/backendCommands.d.ts +37 -0
- package/lib/types/screens/chat/backendCommands.d.ts.map +1 -0
- package/lib/types/screens/chat/backendCommands.js +51 -0
- package/lib/types/screens/chat/useBackendChannels.d.ts +20 -0
- package/lib/types/screens/chat/useBackendChannels.d.ts.map +1 -0
- package/lib/types/screens/chat/useBackendChannels.js +117 -0
- package/lib/types/screens/chat/useKernelPicker.d.ts +23 -0
- package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -0
- package/lib/types/screens/chat/useKernelPicker.js +72 -0
- package/lib/types/screens/chatOverlay.d.ts +32 -2
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +9 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useForeignSessions.js +5 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +14 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +97 -22
- package/lib/types/sessionHistory.d.ts +18 -1
- package/lib/types/sessionHistory.d.ts.map +1 -1
- package/lib/types/sessionHistory.js +46 -4
- package/lib/types/sessionPins.d.ts +7 -0
- package/lib/types/sessionPins.d.ts.map +1 -1
- package/lib/types/sessionPins.js +9 -0
- package/lib/types/sessions/resumeFailure.d.ts.map +1 -1
- package/lib/types/sessions/resumeFailure.js +2 -1
- package/lib/types/settings/definitions.d.ts +74 -0
- package/lib/types/settings/definitions.d.ts.map +1 -1
- package/lib/types/settings/definitions.js +50 -4
- package/lib/types/terminal-utils/hyperlink.d.ts +2 -2
- package/lib/types/terminal-utils/hyperlink.d.ts.map +1 -1
- package/lib/types/terminal-utils/hyperlink.js +21 -4
- package/lib/types/terminal-utils/markdown.d.ts +34 -6
- package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
- package/lib/types/terminal-utils/markdown.js +257 -66
- package/lib/types/theme.d.ts +49 -8
- package/lib/types/theme.d.ts.map +1 -1
- package/lib/types/theme.js +514 -18
- package/lib/types/tips.js +2 -2
- package/lib/types/trajectory/effortIgnition.d.ts +25 -7
- package/lib/types/trajectory/effortIgnition.d.ts.map +1 -1
- package/lib/types/trajectory/effortIgnition.js +106 -34
- package/lib/types/trajectory/window.d.ts +26 -0
- package/lib/types/trajectory/window.d.ts.map +1 -0
- package/lib/types/trajectory/window.js +27 -0
- package/lib/types/tuiDisplayPrefs.d.ts +38 -1
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +45 -1
- package/lib/types/update.d.ts +88 -3
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +285 -18
- package/lib/types/utils/crashDetail.d.ts +56 -0
- package/lib/types/utils/crashDetail.d.ts.map +1 -0
- package/lib/types/utils/crashDetail.js +175 -0
- package/lib/types/utils/imageResize.d.ts +9 -23
- package/lib/types/utils/imageResize.d.ts.map +1 -1
- package/lib/types/utils/imageResize.js +24 -20
- package/lib/types/utils/inputPaste.d.ts +9 -8
- package/lib/types/utils/inputPaste.d.ts.map +1 -1
- package/lib/types/utils/inputPaste.js +53 -16
- package/lib/types/utils/jsonl.d.ts +24 -0
- package/lib/types/utils/jsonl.d.ts.map +1 -0
- package/lib/types/utils/jsonl.js +36 -0
- package/package.json +18 -2
|
@@ -0,0 +1,852 @@
|
|
|
1
|
+
import { t } from '../../../i18n.js';
|
|
2
|
+
import { CLAUDE_BACKEND_ID, CLI_CAPABILITY, cliVersionDrift, VALIDATED_CLI_VERSIONS, VALIDATED_SDK_VERSION } from '../contract.js';
|
|
3
|
+
import { isAuthFailure, CLAUDE_OAUTH_PROVIDER } from '../auth.js';
|
|
4
|
+
import { accountView } from '../controls.js';
|
|
5
|
+
import { buildQueryOptions } from '../options.js';
|
|
6
|
+
import { createClaudeDialogBridge, SUPPORTED_DIALOG_KINDS } from '../dialogs.js';
|
|
7
|
+
import { createClaudeActivityPublisher } from '../activity.js';
|
|
8
|
+
import { createClaudePermissionBridge, WITHDRAWN_MESSAGE } from '../permissions.js';
|
|
9
|
+
import { createStderrSink } from '../process.js';
|
|
10
|
+
import { memoryClaudePrefs } from '../prefs.js';
|
|
11
|
+
import { fileClaudeChannels } from '../channels.js';
|
|
12
|
+
import { fileClaudeChannelTokens } from '../../shared/channel-tokens.js';
|
|
13
|
+
import { createClaudeTranscriptHistory } from '../older-history.js';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import { DATA_DIR } from '../../../utils/paths.js';
|
|
16
|
+
import { envSlotsServeModel, mergedModelEnv } from '../modelEnv.js';
|
|
17
|
+
import { claudeConfigDir } from '../transcript-file.js';
|
|
18
|
+
import { CLAUDE_IMAGE_LIMITS, claudeImageBlocks } from '../images.js';
|
|
19
|
+
import { createClaudeSideQuery } from '../side-query.js';
|
|
20
|
+
import { writeFlagSettingsFile } from '../flag-settings.js';
|
|
21
|
+
import { createClaudeTranslator } from '../translate.js';
|
|
22
|
+
import { errorText, rec } from '../narrow.js';
|
|
23
|
+
import { accountLines, authSourceLabel, createSessionAuth } from './auth.js';
|
|
24
|
+
import { createSessionControls } from './channels.js';
|
|
25
|
+
import { createInbox, priorityOf, wakeOf } from './input.js';
|
|
26
|
+
import { createSessionStore } from './store.js';
|
|
27
|
+
import { sessionTaskCapabilities } from './subagents.js';
|
|
28
|
+
const REAL_CLOCK = {
|
|
29
|
+
setTimeout: (callback, ms) => {
|
|
30
|
+
const handle = setTimeout(callback, ms);
|
|
31
|
+
handle.unref();
|
|
32
|
+
return handle;
|
|
33
|
+
},
|
|
34
|
+
clearTimeout: handle => { clearTimeout(handle); },
|
|
35
|
+
};
|
|
36
|
+
/** The CLI's answer to `resume` of a session it has no transcript for. */
|
|
37
|
+
const NO_CONVERSATION = /No conversation found with session ID/iu;
|
|
38
|
+
/** Open one session: start the query, wait for its handshake, start the
|
|
39
|
+
* consumer loop. Throws (after cleaning up) when the CLI cannot start. */
|
|
40
|
+
export async function openClaudeSession(input) {
|
|
41
|
+
// The replayed history goes to the channel once (`history()`) and is then
|
|
42
|
+
// let go: a long transcript's events must not live as long as the session.
|
|
43
|
+
const { resume, ...deps } = input;
|
|
44
|
+
const resumed = resume !== undefined;
|
|
45
|
+
const compactedFrom = resume?.compactedFrom;
|
|
46
|
+
let replayHistory = resume?.events;
|
|
47
|
+
/** The CLI's current session id: the opened one until a
|
|
48
|
+
* `conversation_reset` moves the CLI to a new one. */
|
|
49
|
+
let currentSessionId = deps.sessionId;
|
|
50
|
+
/** A reset was seen; the next frame naming another id adopts it. */
|
|
51
|
+
let resetPending = false;
|
|
52
|
+
const clock = deps.clock ?? REAL_CLOCK;
|
|
53
|
+
const forceSettleMs = deps.forceSettleMs ?? 30_000;
|
|
54
|
+
const prefs = deps.prefs ?? memoryClaudePrefs();
|
|
55
|
+
// The relay channel profiles: the file store under ~/.dsh-tui by default,
|
|
56
|
+
// injectable like prefs (tests run an in-memory store).
|
|
57
|
+
const channels = deps.channels ?? fileClaudeChannels(join(DATA_DIR, 'backends', 'claude'), message => deps.host.debug(message));
|
|
58
|
+
// The channel-token seam: ~/.dsh/.credentials.yaml by default (the
|
|
59
|
+
// /provider precedent), injectable for tests.
|
|
60
|
+
const channelTokens = deps.channelTokens ?? fileClaudeChannelTokens(undefined, message => deps.host.debug(message));
|
|
61
|
+
const listeners = new Set();
|
|
62
|
+
/** Batches produced before the channel subscribed (handshake, start notices). */
|
|
63
|
+
const backlog = [];
|
|
64
|
+
let status = 'starting';
|
|
65
|
+
let disposing = false;
|
|
66
|
+
let settlingPrompts = false;
|
|
67
|
+
let disposePromise;
|
|
68
|
+
let cliVersion;
|
|
69
|
+
let cliCapabilities = [];
|
|
70
|
+
/** `system/init.apiKeySource`: the CLI's own account of its credential. */
|
|
71
|
+
let apiKeySource;
|
|
72
|
+
/** `accountInfo()` once fetched (never surfaces the email). */
|
|
73
|
+
let account;
|
|
74
|
+
let forceTimer;
|
|
75
|
+
/** The credential plan the live query runs on. */
|
|
76
|
+
let authPlan = deps.auth?.plan ?? { source: 'claude-login', env: deps.env };
|
|
77
|
+
/** The CLI's config directory under the live plan's environment. */
|
|
78
|
+
const configDir = () => claudeConfigDir(authPlan.env.CLAUDE_CONFIG_DIR === undefined ? process.env : authPlan.env);
|
|
79
|
+
/** The model-routing env the CLI child applies (modelEnv.ts), read per
|
|
80
|
+
* run so a reconnect's renewed plan counts. */
|
|
81
|
+
const childModelEnv = () => mergedModelEnv(configDir(), authPlan.env, new Set(Object.keys(authPlan.settings?.env ?? {})));
|
|
82
|
+
let authFailed = false;
|
|
83
|
+
/**
|
|
84
|
+
* The CLI wrote this session's transcript (an input started, or a turn
|
|
85
|
+
* reported its result). Until then a restart must create the session with
|
|
86
|
+
* the same id: `resume` of an id the CLI has no transcript for fails its
|
|
87
|
+
* handshake ("No conversation found").
|
|
88
|
+
*/
|
|
89
|
+
let persisted = resumed;
|
|
90
|
+
/** What this session pushed, by input uuid, until the CLI starts it: a
|
|
91
|
+
* reconnect re-delivers what the old CLI never started. */
|
|
92
|
+
const pushed = new Map();
|
|
93
|
+
/** Callers waiting for the open turn to close (a deferred `/login`). */
|
|
94
|
+
const idleWaiters = [];
|
|
95
|
+
/** No turn open and nothing queued the CLI would start next. */
|
|
96
|
+
const idle = () => !translator.turnOpen && translator.unstartedInputs().length === 0;
|
|
97
|
+
const settleIdleWaiters = (error) => {
|
|
98
|
+
if (error === undefined && !idle())
|
|
99
|
+
return;
|
|
100
|
+
for (const waiter of idleWaiters.splice(0)) {
|
|
101
|
+
if (error === undefined)
|
|
102
|
+
waiter.resolve();
|
|
103
|
+
else
|
|
104
|
+
waiter.reject(error);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const translator = createClaudeTranslator({
|
|
108
|
+
cwd: deps.cwd,
|
|
109
|
+
userRows: 'lifecycle',
|
|
110
|
+
debug: deps.host.debug,
|
|
111
|
+
// A resumed session continues the replay's numbering and task table.
|
|
112
|
+
...(resume === undefined ? {} : { start: { ...resume.start, ...(resume.tasks === undefined || resume.tasks.length === 0 ? {} : { tasks: resume.tasks }) } }),
|
|
113
|
+
});
|
|
114
|
+
translator.noteMode(deps.start.mode);
|
|
115
|
+
// The working line's publisher (activity.ts): folded from the translator's
|
|
116
|
+
// own state after every batch, never from a second parse of the stream. A
|
|
117
|
+
// parked permission/dialog prompt is the waiting phase; the fold dedupes,
|
|
118
|
+
// so folding after every emit publishes only real changes.
|
|
119
|
+
const activityPublisher = createClaudeActivityPublisher();
|
|
120
|
+
const publishActivity = () => {
|
|
121
|
+
activityPublisher.fold(translator.activityState(), asking || dialogsOpen);
|
|
122
|
+
};
|
|
123
|
+
const emit = (events, wake = 'sync', duringDispose = false) => {
|
|
124
|
+
if (disposing && !duringDispose)
|
|
125
|
+
return;
|
|
126
|
+
if (events.length === 0)
|
|
127
|
+
return;
|
|
128
|
+
const meta = { replay: false, wake };
|
|
129
|
+
if (listeners.size === 0) {
|
|
130
|
+
backlog.push([events, meta]);
|
|
131
|
+
publishActivity();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
for (const listener of [...listeners]) {
|
|
135
|
+
try {
|
|
136
|
+
listener(events, meta);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
deps.host.debug(`claude: listener failed (${errorText(error)})`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
publishActivity();
|
|
143
|
+
};
|
|
144
|
+
const clearForceTimer = () => {
|
|
145
|
+
if (forceTimer === undefined)
|
|
146
|
+
return;
|
|
147
|
+
clock.clearTimeout(forceTimer);
|
|
148
|
+
forceTimer = undefined;
|
|
149
|
+
};
|
|
150
|
+
/** Prompts are parked: the session needs the user. Only
|
|
151
|
+
* transitions are announced; the CLI's own `session_state_changed`
|
|
152
|
+
* frames say the same and are idempotent with these. */
|
|
153
|
+
let asking = false;
|
|
154
|
+
const bridge = createClaudePermissionBridge({
|
|
155
|
+
cwd: deps.cwd,
|
|
156
|
+
emit: events => emit(events, 'sync', settlingPrompts),
|
|
157
|
+
debug: deps.host.debug,
|
|
158
|
+
closing: () => disposing,
|
|
159
|
+
onPendingChange: count => {
|
|
160
|
+
const next = count > 0;
|
|
161
|
+
if (next === asking)
|
|
162
|
+
return;
|
|
163
|
+
asking = next;
|
|
164
|
+
if (disposing)
|
|
165
|
+
return;
|
|
166
|
+
if (next && !dialogsOpen)
|
|
167
|
+
emit([{ type: 'session.status', status: 'requires-action' }], 'none');
|
|
168
|
+
else if (!next && !dialogsOpen && translator.turnOpen)
|
|
169
|
+
emit([{ type: 'session.status', status: 'running' }], 'none');
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
/** MCP elicitation and user dialogs (dialogs.ts): parked like prompts. */
|
|
173
|
+
let dialogsOpen = false;
|
|
174
|
+
const dialogs = createClaudeDialogBridge({
|
|
175
|
+
emit: events => emit(events, 'sync', settlingPrompts),
|
|
176
|
+
debug: deps.host.debug,
|
|
177
|
+
closing: () => disposing,
|
|
178
|
+
onPendingChange: count => {
|
|
179
|
+
const next = count > 0;
|
|
180
|
+
if (next === dialogsOpen)
|
|
181
|
+
return;
|
|
182
|
+
dialogsOpen = next;
|
|
183
|
+
if (disposing)
|
|
184
|
+
return;
|
|
185
|
+
if (next && !asking)
|
|
186
|
+
emit([{ type: 'session.status', status: 'requires-action' }], 'none');
|
|
187
|
+
else if (!next && !asking && translator.turnOpen)
|
|
188
|
+
emit([{ type: 'session.status', status: 'running' }], 'none');
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
const stderrSink = createStderrSink(line => {
|
|
192
|
+
deps.host.debug(`[claude-stderr] ${line}`);
|
|
193
|
+
deps.host.stderr?.(line);
|
|
194
|
+
});
|
|
195
|
+
const startRun = (resume) => {
|
|
196
|
+
const inbox = createInbox();
|
|
197
|
+
const abortController = new AbortController();
|
|
198
|
+
const startModel = prefs.read().model ?? deps.model;
|
|
199
|
+
// The CLI checks an explicit `model` against its official catalog and
|
|
200
|
+
// refuses a relay model name (`[claude-code:unrecognized_model]`), while
|
|
201
|
+
// the same name in an env slot (ANTHROPIC_MODEL /
|
|
202
|
+
// ANTHROPIC_DEFAULT_<TIER>_MODEL) routes fine. When the child's env
|
|
203
|
+
// already routes to the model, the parameter is left out; anything
|
|
204
|
+
// else is still pinned explicitly.
|
|
205
|
+
const explicitModel = startModel !== undefined && envSlotsServeModel(childModelEnv(), startModel)
|
|
206
|
+
? undefined
|
|
207
|
+
: startModel;
|
|
208
|
+
const startEffort = prefs.read().effort ?? deps.effort;
|
|
209
|
+
// The plan's flag layer (a channel token may ride it) goes by file, out
|
|
210
|
+
// of the CLI's argv; it lives as long as this run.
|
|
211
|
+
const flagSettings = authPlan.settings === undefined ? undefined : writeFlagSettingsFile(authPlan.settings);
|
|
212
|
+
let query;
|
|
213
|
+
try {
|
|
214
|
+
query = deps.sdk.query({
|
|
215
|
+
prompt: inbox,
|
|
216
|
+
options: buildQueryOptions({
|
|
217
|
+
cwd: deps.cwd,
|
|
218
|
+
// A reconnect resumes the same session (same id, same transcript);
|
|
219
|
+
// the SDK refuses `sessionId` together with `resume`.
|
|
220
|
+
...(resume ? { resume: currentSessionId } : { sessionId: currentSessionId }),
|
|
221
|
+
permissionMode: (translator.mode ?? deps.start.mode),
|
|
222
|
+
executable: deps.executable.path,
|
|
223
|
+
env: authPlan.env,
|
|
224
|
+
...(flagSettings === undefined ? {} : { settingsFile: flagSettings.path }),
|
|
225
|
+
canUseTool: bridge.canUseTool,
|
|
226
|
+
onElicitation: dialogs.onElicitation,
|
|
227
|
+
onUserDialog: dialogs.onUserDialog,
|
|
228
|
+
supportedDialogKinds: SUPPORTED_DIALOG_KINDS,
|
|
229
|
+
stderr: stderrSink,
|
|
230
|
+
abortController,
|
|
231
|
+
...(explicitModel === undefined ? {} : { model: explicitModel }),
|
|
232
|
+
...(startEffort === undefined ? {} : { effort: startEffort }),
|
|
233
|
+
// Echoes are the user-row fallback for a CLI without lifecycle
|
|
234
|
+
// frames; requesting them is harmless when lifecycle frames win (the
|
|
235
|
+
// translator ignores an echo of an input it already confirmed).
|
|
236
|
+
replayUserMessages: true,
|
|
237
|
+
}),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
flagSettings?.dispose();
|
|
242
|
+
throw error;
|
|
243
|
+
}
|
|
244
|
+
return { inbox, abortController, query, ...(flagSettings === undefined ? {} : { flagSettings }), consumer: Promise.resolve() };
|
|
245
|
+
};
|
|
246
|
+
let run = startRun(resumed);
|
|
247
|
+
/** Shut one run's CLI down; safe to call from any state. */
|
|
248
|
+
const stopRun = (target) => {
|
|
249
|
+
target.inbox.close();
|
|
250
|
+
try {
|
|
251
|
+
target.query.close();
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
deps.host.debug(`claude: close failed (${errorText(error)})`);
|
|
255
|
+
}
|
|
256
|
+
target.abortController.abort();
|
|
257
|
+
target.flagSettings?.dispose();
|
|
258
|
+
};
|
|
259
|
+
/** This session in the backend's reference vocabulary (its id follows a
|
|
260
|
+
* conversation reset). */
|
|
261
|
+
const ownRef = { backendId: CLAUDE_BACKEND_ID, get sessionId() { return currentSessionId; } };
|
|
262
|
+
const store = createSessionStore({
|
|
263
|
+
deps,
|
|
264
|
+
ownRef,
|
|
265
|
+
emit,
|
|
266
|
+
get run() { return run; },
|
|
267
|
+
get persisted() { return persisted; },
|
|
268
|
+
get currentSessionId() { return currentSessionId; },
|
|
269
|
+
});
|
|
270
|
+
/** Shut the session down; safe to call from any state. */
|
|
271
|
+
const teardown = () => {
|
|
272
|
+
clearForceTimer();
|
|
273
|
+
// Pending prompt settlements must reach the channel before the query closes.
|
|
274
|
+
settlingPrompts = true;
|
|
275
|
+
bridge.settleAll();
|
|
276
|
+
dialogs.settleAll();
|
|
277
|
+
settlingPrompts = false;
|
|
278
|
+
stopRun(run);
|
|
279
|
+
};
|
|
280
|
+
/** The CLI went away (or the loop failed) without our dispose. */
|
|
281
|
+
const onExit = (error) => {
|
|
282
|
+
if (disposing)
|
|
283
|
+
return;
|
|
284
|
+
disposing = true;
|
|
285
|
+
status = 'disposed';
|
|
286
|
+
const reason = error === undefined ? t('claude-process-ended') : errorText(error);
|
|
287
|
+
teardown();
|
|
288
|
+
emit([
|
|
289
|
+
...translator.forceCloseTurn({ kind: 'error', message: reason }),
|
|
290
|
+
// The process's background work went with it (the level is per process).
|
|
291
|
+
{ type: 'tasks.snapshot', taskIds: [] },
|
|
292
|
+
{ type: 'notice', level: 'error', text: t('claude-process-exited', { reason }) },
|
|
293
|
+
{ type: 'session.status', status: 'disposed' },
|
|
294
|
+
], 'sync', true);
|
|
295
|
+
settleIdleWaiters(new Error(t('claude-session-closed')));
|
|
296
|
+
};
|
|
297
|
+
const fetchAccount = (target) => {
|
|
298
|
+
const query = target.query;
|
|
299
|
+
if (typeof query.accountInfo !== 'function')
|
|
300
|
+
return;
|
|
301
|
+
void query.accountInfo().then(info => { if (target === run)
|
|
302
|
+
account = info; }, (error) => {
|
|
303
|
+
deps.host.debug(`claude: accountInfo failed (${errorText(error)})`);
|
|
304
|
+
});
|
|
305
|
+
};
|
|
306
|
+
/** Seed the model before any UI asks for it, with `startRun`'s priority:
|
|
307
|
+
* the persisted choice, the start model, else what the handshake says
|
|
308
|
+
* (its `model`, else the `default` catalog row's resolved model). Only
|
|
309
|
+
* an empty model is seeded: a resumed session keeps the replay's, and a
|
|
310
|
+
* reconnect keeps a model the user switched to. */
|
|
311
|
+
const seedModel = (init) => {
|
|
312
|
+
if (translator.model !== '')
|
|
313
|
+
return;
|
|
314
|
+
const catalog = (Array.isArray(init?.models) ? init.models : []).flatMap((row) => {
|
|
315
|
+
if (typeof row !== 'object' || row === null)
|
|
316
|
+
return [];
|
|
317
|
+
const value = row.value;
|
|
318
|
+
return typeof value === 'string' ? [{ value, resolvedModel: row.resolvedModel }] : [];
|
|
319
|
+
});
|
|
320
|
+
const defaultRow = catalog.find(row => row.value === 'default');
|
|
321
|
+
const fromRow = defaultRow === undefined ? undefined
|
|
322
|
+
: typeof defaultRow.resolvedModel === 'string' && defaultRow.resolvedModel !== '' ? defaultRow.resolvedModel : defaultRow.value;
|
|
323
|
+
const handshakeModel = typeof init?.model === 'string' && init.model !== '' ? init.model : fromRow;
|
|
324
|
+
const model = prefs.read().model ?? deps.model ?? handshakeModel;
|
|
325
|
+
if (model === undefined)
|
|
326
|
+
return;
|
|
327
|
+
emit(translator.noteModel(model), 'none');
|
|
328
|
+
};
|
|
329
|
+
/** The handshake of one run: capabilities, model catalog, commands. */
|
|
330
|
+
const handshake = async (target) => {
|
|
331
|
+
let timer;
|
|
332
|
+
const init = await Promise.race([
|
|
333
|
+
target.query.initializationResult(),
|
|
334
|
+
new Promise((_, reject) => {
|
|
335
|
+
timer = clock.setTimeout(() => reject(new Error(t('claude-start-timeout'))), deps.initTimeoutMs ?? 60_000);
|
|
336
|
+
}),
|
|
337
|
+
]).finally(() => clock.clearTimeout(timer));
|
|
338
|
+
const result = rec(init);
|
|
339
|
+
// Capabilities come from this handshake alone (a run that reports none
|
|
340
|
+
// must not inherit the previous CLI's): without `msg_lifecycle_v1` user
|
|
341
|
+
// rows come from the replay echo.
|
|
342
|
+
const capabilities = result?.capabilities;
|
|
343
|
+
cliCapabilities = Array.isArray(capabilities) ? capabilities.filter((item) => typeof item === 'string') : [];
|
|
344
|
+
translator.setUserRows(cliCapabilities.includes(CLI_CAPABILITY.lifecycle) ? 'lifecycle' : 'replay');
|
|
345
|
+
seedModel(result);
|
|
346
|
+
fetchAccount(target);
|
|
347
|
+
return result;
|
|
348
|
+
};
|
|
349
|
+
/** The CLI continues under another session id (after a reset). */
|
|
350
|
+
const adoptSessionId = (next) => {
|
|
351
|
+
const previous = currentSessionId;
|
|
352
|
+
currentSessionId = next;
|
|
353
|
+
deps.host.debug(`claude: the session continues as ${next} (was ${previous})`);
|
|
354
|
+
try {
|
|
355
|
+
prefs.touch(next);
|
|
356
|
+
if (prefs.read().lastSession === previous)
|
|
357
|
+
prefs.write({ lastSession: next });
|
|
358
|
+
// The accent belongs to the TUI's session, which continues.
|
|
359
|
+
const color = prefs.color(previous);
|
|
360
|
+
if (color !== '')
|
|
361
|
+
prefs.setColor(next, color);
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
deps.host.debug(`claude: prefs update after reset failed (${errorText(error)})`);
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
const afterMessage = (message, events) => {
|
|
368
|
+
const value = rec(message);
|
|
369
|
+
if (value?.type === 'system' && value.subtype === 'elicitation_complete' && typeof value.mcp_server_name === 'string' && typeof value.elicitation_id === 'string') {
|
|
370
|
+
dialogs.complete(value.mcp_server_name, value.elicitation_id);
|
|
371
|
+
}
|
|
372
|
+
// After a reset the CLI runs under a new session id, named by the frames
|
|
373
|
+
// that follow (not by the reset frame's `new_conversation_id`).
|
|
374
|
+
if (value?.type === 'conversation_reset') {
|
|
375
|
+
resetPending = true;
|
|
376
|
+
}
|
|
377
|
+
else if (resetPending && typeof value?.session_id === 'string' && value.session_id !== '' && value.session_id !== currentSessionId) {
|
|
378
|
+
resetPending = false;
|
|
379
|
+
adoptSessionId(value.session_id);
|
|
380
|
+
}
|
|
381
|
+
if (value?.type === 'result' || (value?.type === 'system' && value.subtype === 'session_state_changed' && value.state === 'idle')) {
|
|
382
|
+
clearForceTimer();
|
|
383
|
+
}
|
|
384
|
+
if (value?.type === 'system' && value.subtype === 'init') {
|
|
385
|
+
if (Array.isArray(value.capabilities))
|
|
386
|
+
cliCapabilities = value.capabilities.filter((item) => typeof item === 'string');
|
|
387
|
+
if (typeof value.apiKeySource === 'string')
|
|
388
|
+
apiKeySource = value.apiKeySource;
|
|
389
|
+
if (Array.isArray(value.terminal_slash_commands))
|
|
390
|
+
controls.setTerminalOnly(value.terminal_slash_commands.filter((item) => typeof item === 'string'));
|
|
391
|
+
}
|
|
392
|
+
if (value?.type === 'result' || (value?.type === 'command_lifecycle' && value.state === 'started')) {
|
|
393
|
+
persisted = true;
|
|
394
|
+
store.flushRename();
|
|
395
|
+
}
|
|
396
|
+
// While a reconnect is renewing the credential, the old CLI's late
|
|
397
|
+
// failing turn is the failure being handled, not a new one.
|
|
398
|
+
if (auth.reconnecting === undefined && isAuthFailure(message))
|
|
399
|
+
authFailed = true;
|
|
400
|
+
if (value?.type === 'result') {
|
|
401
|
+
if (auth.reconnecting !== undefined) {
|
|
402
|
+
authFailed = false;
|
|
403
|
+
}
|
|
404
|
+
else if (authFailed) {
|
|
405
|
+
authFailed = false;
|
|
406
|
+
auth.onAuthFailure();
|
|
407
|
+
}
|
|
408
|
+
else if (value.is_error !== true) {
|
|
409
|
+
auth.attempts = 0;
|
|
410
|
+
}
|
|
411
|
+
// Forget pushes the CLI has started (only unstarted ones are kept).
|
|
412
|
+
const unstarted = new Set(translator.unstartedInputs());
|
|
413
|
+
for (const uuid of pushed.keys())
|
|
414
|
+
if (!unstarted.has(uuid))
|
|
415
|
+
pushed.delete(uuid);
|
|
416
|
+
}
|
|
417
|
+
for (const event of events) {
|
|
418
|
+
// Every confirmation of the model (a re-init's `model.changed`, the
|
|
419
|
+
// first init's `session.ready`, a `message_start` drift) re-checks
|
|
420
|
+
// the effort against what that model declares (controls.ts).
|
|
421
|
+
if ((event.type === 'model.changed' || event.type === 'session.ready') && event.model !== '') {
|
|
422
|
+
controls.noteConfirmedModel(event.model);
|
|
423
|
+
}
|
|
424
|
+
if (event.type !== 'session.ready' || event.backendVersion === undefined || cliVersion !== undefined)
|
|
425
|
+
continue;
|
|
426
|
+
cliVersion = event.backendVersion;
|
|
427
|
+
// Drift is reported, never a stop.
|
|
428
|
+
if (cliVersionDrift(cliVersion) !== undefined) {
|
|
429
|
+
emit([{ type: 'notice', level: 'warning', text: t('claude-version-drift', { version: cliVersion, validated: VALIDATED_CLI_VERSIONS.join(', ') }) }]);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
/**
|
|
434
|
+
* Runs stopped on purpose ahead of their replacement (an auth-failure
|
|
435
|
+
* reconnect stops the old CLI before it renews the credential): their late
|
|
436
|
+
* messages are not the session's any more, and their end is not a loss.
|
|
437
|
+
*/
|
|
438
|
+
const retired = new WeakSet();
|
|
439
|
+
/** Consume one run until it ends; an ended run that is no longer the
|
|
440
|
+
* current one was replaced on purpose (reconnect), not lost. */
|
|
441
|
+
const consume = (target) => (async () => {
|
|
442
|
+
try {
|
|
443
|
+
for await (const message of target.query) {
|
|
444
|
+
if (target !== run || retired.has(target))
|
|
445
|
+
return;
|
|
446
|
+
let events;
|
|
447
|
+
try {
|
|
448
|
+
events = translator.translate(message);
|
|
449
|
+
}
|
|
450
|
+
catch (error) {
|
|
451
|
+
// A translator bug must not take the session down with it.
|
|
452
|
+
deps.host.debug(`claude: translate failed (${errorText(error)})`);
|
|
453
|
+
continue;
|
|
454
|
+
}
|
|
455
|
+
for (const event of events) {
|
|
456
|
+
if (event.type === 'session.status' && event.status !== 'disposed' && !disposing)
|
|
457
|
+
status = event.status;
|
|
458
|
+
}
|
|
459
|
+
emit(events, wakeOf(message, events));
|
|
460
|
+
afterMessage(message, events);
|
|
461
|
+
if (idleWaiters.length > 0)
|
|
462
|
+
settleIdleWaiters();
|
|
463
|
+
}
|
|
464
|
+
if (target === run && !retired.has(target))
|
|
465
|
+
onExit(undefined);
|
|
466
|
+
}
|
|
467
|
+
catch (error) {
|
|
468
|
+
if (target === run && !retired.has(target))
|
|
469
|
+
onExit(error);
|
|
470
|
+
}
|
|
471
|
+
})();
|
|
472
|
+
/**
|
|
473
|
+
* Start a replacement run and complete its handshake. A session the CLI
|
|
474
|
+
* has persisted is resumed; one it has not is created again under the
|
|
475
|
+
* same id — and a resume the CLI answers with "No conversation found"
|
|
476
|
+
* falls back to that create.
|
|
477
|
+
*/
|
|
478
|
+
const openRun = async () => {
|
|
479
|
+
const resume = persisted;
|
|
480
|
+
// The replacement becomes the current run at once, so the old run's
|
|
481
|
+
// consumer — ending as its CLI closes — knows it was replaced, not lost.
|
|
482
|
+
run = startRun(resume);
|
|
483
|
+
try {
|
|
484
|
+
await handshake(run);
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
// A dispose during the handshake must not spawn the fallback: nothing
|
|
488
|
+
// would ever stop it.
|
|
489
|
+
if (disposing || !resume || !NO_CONVERSATION.test(errorText(error)))
|
|
490
|
+
throw error;
|
|
491
|
+
deps.host.debug(`claude: resume refused (${errorText(error)}); creating the session again`);
|
|
492
|
+
stopRun(run);
|
|
493
|
+
run = startRun(false);
|
|
494
|
+
await handshake(run);
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
/** Withdraw the old CLI's prompts, close its turn, stop it; what it never
|
|
498
|
+
* started is re-pushed to the replacement. */
|
|
499
|
+
const stopForReconnect = () => {
|
|
500
|
+
const previous = run;
|
|
501
|
+
bridge.settleAll(WITHDRAWN_MESSAGE);
|
|
502
|
+
dialogs.settleAll();
|
|
503
|
+
clearForceTimer();
|
|
504
|
+
emit(translator.forceCloseTurn({ kind: 'aborted' }));
|
|
505
|
+
const unstarted = translator.unstartedInputs();
|
|
506
|
+
retired.add(previous);
|
|
507
|
+
stopRun(previous);
|
|
508
|
+
return { unstarted };
|
|
509
|
+
};
|
|
510
|
+
const auth = createSessionAuth({
|
|
511
|
+
deps,
|
|
512
|
+
clock,
|
|
513
|
+
translator,
|
|
514
|
+
pushed,
|
|
515
|
+
idleWaiters,
|
|
516
|
+
idle,
|
|
517
|
+
stopForReconnect,
|
|
518
|
+
openRun,
|
|
519
|
+
emit,
|
|
520
|
+
consume,
|
|
521
|
+
onExit,
|
|
522
|
+
stopRun,
|
|
523
|
+
get run() { return run; },
|
|
524
|
+
get disposing() { return disposing; },
|
|
525
|
+
get authPlan() { return authPlan; },
|
|
526
|
+
set authPlan(value) { authPlan = value; },
|
|
527
|
+
get account() { return account; },
|
|
528
|
+
get apiKeySource() { return apiKeySource; },
|
|
529
|
+
});
|
|
530
|
+
const controls = createSessionControls({
|
|
531
|
+
deps,
|
|
532
|
+
prefs,
|
|
533
|
+
channels,
|
|
534
|
+
channelTokens,
|
|
535
|
+
translator,
|
|
536
|
+
configDir,
|
|
537
|
+
emit,
|
|
538
|
+
get run() { return run; },
|
|
539
|
+
get authPlan() { return authPlan; },
|
|
540
|
+
get session() { return session; },
|
|
541
|
+
});
|
|
542
|
+
try {
|
|
543
|
+
const init = await handshake(run);
|
|
544
|
+
controls.seed(init);
|
|
545
|
+
// The model the session opened with is confirmed too (a resumed
|
|
546
|
+
// session's replay model is never re-announced by a frame): with the
|
|
547
|
+
// catalog seeded, the effort readout is checked before any UI asks.
|
|
548
|
+
controls.noteConfirmedModel(translator.model);
|
|
549
|
+
}
|
|
550
|
+
catch (error) {
|
|
551
|
+
disposing = true;
|
|
552
|
+
teardown();
|
|
553
|
+
throw error;
|
|
554
|
+
}
|
|
555
|
+
status = 'idle';
|
|
556
|
+
for (const text of deps.startNotices ?? [])
|
|
557
|
+
emit([{ type: 'notice', level: 'warning', text }]);
|
|
558
|
+
// The start mode is the session's first mode (the CLI confirms it with its
|
|
559
|
+
// first `init`); the status line shows it from the start.
|
|
560
|
+
emit([{ type: 'mode.changed', modeId: translator.mode ?? deps.start.mode }], 'none');
|
|
561
|
+
// The remembered effort level, same way: the CLI reports none back, so the
|
|
562
|
+
// status line's effort readout would stay empty until the first /effort
|
|
563
|
+
// switch without this seed.
|
|
564
|
+
const seedEffort = prefs.read().effort ?? deps.effort;
|
|
565
|
+
if (seedEffort !== undefined)
|
|
566
|
+
emit([{ type: 'effort.changed', effort: seedEffort }], 'none');
|
|
567
|
+
// The session's `/color` accent (kept TUI-side per session id).
|
|
568
|
+
const startColor = prefs.color(currentSessionId);
|
|
569
|
+
if (startColor !== '')
|
|
570
|
+
emit([{ type: 'session.color', color: startColor }]);
|
|
571
|
+
run.consumer = consume(run);
|
|
572
|
+
// A resumed transcript does not record the context window: ask the CLI
|
|
573
|
+
// once, so the status line has it before the first `result`.
|
|
574
|
+
if (resumed) {
|
|
575
|
+
const query = run.query;
|
|
576
|
+
if (typeof query.getContextUsage === 'function') {
|
|
577
|
+
void query.getContextUsage({ detail: 'summary' }).then(usage => {
|
|
578
|
+
if (disposing || !Number.isFinite(usage.maxTokens) || usage.maxTokens <= 0)
|
|
579
|
+
return;
|
|
580
|
+
emit([{ type: 'context.capacity', contextWindow: usage.maxTokens }]);
|
|
581
|
+
}, (error) => {
|
|
582
|
+
deps.host.debug(`claude: context usage after resume failed (${errorText(error)})`);
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
const session = {
|
|
587
|
+
ref: ownRef,
|
|
588
|
+
cwd: deps.cwd,
|
|
589
|
+
get status() {
|
|
590
|
+
if (status === 'disposed')
|
|
591
|
+
return 'disposed';
|
|
592
|
+
if (bridge.size > 0 || dialogs.size > 0)
|
|
593
|
+
return 'requires-action';
|
|
594
|
+
return translator.turnOpen ? 'running' : status;
|
|
595
|
+
},
|
|
596
|
+
capabilities: {
|
|
597
|
+
native: {},
|
|
598
|
+
permissions: {
|
|
599
|
+
respond: (requestId, decision) => bridge.respond(requestId, decision),
|
|
600
|
+
pending: () => bridge.pendingViews(),
|
|
601
|
+
},
|
|
602
|
+
questions: {
|
|
603
|
+
respond: (requestId, answers) => {
|
|
604
|
+
if (dialogs.owns(requestId))
|
|
605
|
+
dialogs.respond(requestId, answers);
|
|
606
|
+
else
|
|
607
|
+
bridge.respondQuestion(requestId, answers);
|
|
608
|
+
},
|
|
609
|
+
cancel: requestId => {
|
|
610
|
+
if (dialogs.owns(requestId))
|
|
611
|
+
dialogs.cancel(requestId);
|
|
612
|
+
else
|
|
613
|
+
bridge.cancelQuestion(requestId);
|
|
614
|
+
},
|
|
615
|
+
},
|
|
616
|
+
...controls.capabilities,
|
|
617
|
+
...store.sessionStoreCapabilities(),
|
|
618
|
+
sideQuery: createClaudeSideQuery({
|
|
619
|
+
sdk: deps.sdk,
|
|
620
|
+
cwd: deps.cwd,
|
|
621
|
+
sessionId: () => currentSessionId,
|
|
622
|
+
persisted: () => persisted,
|
|
623
|
+
model: () => translator.model,
|
|
624
|
+
spawn: () => ({ env: authPlan.env, ...(authPlan.settings === undefined ? {} : { settings: authPlan.settings }), executable: deps.executable.path }),
|
|
625
|
+
debug: deps.host.debug,
|
|
626
|
+
}),
|
|
627
|
+
...store.renameCapability(),
|
|
628
|
+
// Images go in the message itself (base64 blocks), staged by the
|
|
629
|
+
// channel under these limits (images.ts).
|
|
630
|
+
images: { limits: CLAUDE_IMAGE_LIMITS },
|
|
631
|
+
color: {
|
|
632
|
+
current: () => prefs.color(currentSessionId),
|
|
633
|
+
set(color) {
|
|
634
|
+
prefs.setColor(currentSessionId, color);
|
|
635
|
+
emit([{ type: 'session.color', color }]);
|
|
636
|
+
},
|
|
637
|
+
},
|
|
638
|
+
...sessionTaskCapabilities({
|
|
639
|
+
deps,
|
|
640
|
+
translator,
|
|
641
|
+
get run() { return run; },
|
|
642
|
+
get disposing() { return disposing; },
|
|
643
|
+
get currentSessionId() { return currentSessionId; },
|
|
644
|
+
get authPlan() { return authPlan; },
|
|
645
|
+
}),
|
|
646
|
+
transcript: createClaudeTranscriptHistory({
|
|
647
|
+
sessionId: () => currentSessionId,
|
|
648
|
+
cwd: deps.cwd,
|
|
649
|
+
configDir,
|
|
650
|
+
...(compactedFrom === undefined ? {} : { compactedFrom }),
|
|
651
|
+
debug: deps.host.debug,
|
|
652
|
+
}),
|
|
653
|
+
account: {
|
|
654
|
+
async info() {
|
|
655
|
+
const query = run.query;
|
|
656
|
+
if (typeof query.accountInfo === 'function')
|
|
657
|
+
account = await query.accountInfo();
|
|
658
|
+
return accountView(account ?? {}, apiKeySource);
|
|
659
|
+
},
|
|
660
|
+
},
|
|
661
|
+
auth: {
|
|
662
|
+
oauthProvider: CLAUDE_OAUTH_PROVIDER,
|
|
663
|
+
status: auth.authStatus,
|
|
664
|
+
async reconnect() {
|
|
665
|
+
auth.attempts = 0;
|
|
666
|
+
// Never under a running turn: the restart would abort it and drop
|
|
667
|
+
// what the user queued behind it. Reconnect once it ends.
|
|
668
|
+
if (!idle())
|
|
669
|
+
emit([{ type: 'notice', level: 'info', text: t('claude-auth-reconnect-deferred') }]);
|
|
670
|
+
await auth.reconnect({}, { waitIdle: true });
|
|
671
|
+
},
|
|
672
|
+
},
|
|
673
|
+
// The working-activity line this backend folds itself (activity.ts):
|
|
674
|
+
// the channel subscribes per binding and forwards into the store the
|
|
675
|
+
// DSH projection feed fills, so the UI's working line stays
|
|
676
|
+
// backend-neutral. A late subscriber receives the latest value once —
|
|
677
|
+
// a rebind shows the running line without waiting for a change.
|
|
678
|
+
workingActivity: {
|
|
679
|
+
subscribe(listener) {
|
|
680
|
+
return activityPublisher.subscribe(view => {
|
|
681
|
+
try {
|
|
682
|
+
listener(view);
|
|
683
|
+
}
|
|
684
|
+
catch (error) {
|
|
685
|
+
deps.host.debug(`claude: activity listener failed (${errorText(error)})`);
|
|
686
|
+
}
|
|
687
|
+
});
|
|
688
|
+
},
|
|
689
|
+
},
|
|
690
|
+
diagnostics: {
|
|
691
|
+
lines: () => [
|
|
692
|
+
t('claude-doctor-cli', { path: deps.executable.path ?? t('claude-doctor-bundled'), source: deps.executable.source, version: cliVersion ?? t('doctor-unknown') }),
|
|
693
|
+
...(cliVersionDrift(cliVersion) === undefined ? [] : [t('claude-version-drift', { version: cliVersion ?? '', validated: VALIDATED_CLI_VERSIONS.join(', ') })]),
|
|
694
|
+
t('claude-doctor-sdk', { version: deps.sdkVersion ?? t('doctor-unknown'), validated: VALIDATED_SDK_VERSION }),
|
|
695
|
+
t('claude-doctor-mode', { mode: translator.mode ?? deps.start.mode, source: deps.start.source }),
|
|
696
|
+
t('claude-auth-source', { source: authSourceLabel(authPlan) }),
|
|
697
|
+
...(account === undefined ? [] : accountLines(accountView(account, apiKeySource))),
|
|
698
|
+
],
|
|
699
|
+
},
|
|
700
|
+
},
|
|
701
|
+
// A created session has no durable history yet; a resumed one replays
|
|
702
|
+
// the transcript read before the CLI started (backend.ts).
|
|
703
|
+
// Handed over once: the channel paints it at adoption and never asks
|
|
704
|
+
// again (a later call has nothing to repaint from memory).
|
|
705
|
+
history: () => {
|
|
706
|
+
const events = replayHistory ?? [];
|
|
707
|
+
replayHistory = undefined;
|
|
708
|
+
return Promise.resolve(events);
|
|
709
|
+
},
|
|
710
|
+
subscribe(listener) {
|
|
711
|
+
listeners.add(listener);
|
|
712
|
+
if (backlog.length > 0) {
|
|
713
|
+
// Delivered after the subscriber's own setup returns (it may be
|
|
714
|
+
// inside a binding transaction).
|
|
715
|
+
queueMicrotask(() => {
|
|
716
|
+
if (!listeners.has(listener))
|
|
717
|
+
return;
|
|
718
|
+
for (const [events, meta] of backlog.splice(0))
|
|
719
|
+
listener(events, meta);
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
return () => { listeners.delete(listener); };
|
|
723
|
+
},
|
|
724
|
+
async submit(input, placement) {
|
|
725
|
+
// A credential reconnect is swapping the CLI: the input goes to the
|
|
726
|
+
// new one (the old one's stdin is closed). A `/login` reconnect still
|
|
727
|
+
// waiting for the session to go idle leaves the old CLI serving.
|
|
728
|
+
if (auth.reconnecting !== undefined && !auth.reconnectDeferred)
|
|
729
|
+
await auth.reconnecting.catch(() => undefined);
|
|
730
|
+
if (disposing || run.inbox.closed)
|
|
731
|
+
throw new Error(t('claude-session-closed'));
|
|
732
|
+
// Pasted images and `@image` mentions arrive as image blocks with their
|
|
733
|
+
// staged facades (`input.images`, block order): each is read back and
|
|
734
|
+
// sent as a base64 block after the text. An image block without its
|
|
735
|
+
// facade (dropped from memory meanwhile) refuses the message — never
|
|
736
|
+
// the text without part of it.
|
|
737
|
+
const imageBlocks = (input.blocks ?? []).filter(block => block.type === 'image').length;
|
|
738
|
+
const staged = input.images ?? [];
|
|
739
|
+
if (imageBlocks > staged.length)
|
|
740
|
+
throw new Error(t('claude-image-unreadable', { name: `#${staged.length + 1}`, err: t('claude-image-gone') }));
|
|
741
|
+
const images = staged.length === 0 ? [] : await claudeImageBlocks(staged);
|
|
742
|
+
// An auth-failure reconnect may have started during the read (this
|
|
743
|
+
// run's inbox is then closed until the replacement is up): wait for
|
|
744
|
+
// it again before judging. A deferred `/login` reconnect is not waited
|
|
745
|
+
// for; the old CLI keeps serving until it swaps.
|
|
746
|
+
if (auth.reconnecting !== undefined && !auth.reconnectDeferred)
|
|
747
|
+
await auth.reconnecting.catch(() => undefined);
|
|
748
|
+
if (disposing || run.inbox.closed)
|
|
749
|
+
throw new Error(t('claude-session-closed'));
|
|
750
|
+
const texts = (input.blocks ?? [{ type: 'text', text: input.text }])
|
|
751
|
+
.flatMap(block => block.type === 'text' && typeof block.text === 'string' && block.text !== '' ? [block.text] : []);
|
|
752
|
+
const content = images.length === 0 && texts.length <= 1
|
|
753
|
+
? texts[0] ?? input.text
|
|
754
|
+
: [...texts.map(text => ({ type: 'text', text })), ...images];
|
|
755
|
+
const priority = priorityOf(placement, translator.turnOpen);
|
|
756
|
+
translator.registerInput(input.clientMessageId, input.text, placement, staged);
|
|
757
|
+
const message = {
|
|
758
|
+
type: 'user',
|
|
759
|
+
message: { role: 'user', content },
|
|
760
|
+
parent_tool_use_id: null,
|
|
761
|
+
uuid: input.clientMessageId,
|
|
762
|
+
...(priority === undefined ? {} : { priority }),
|
|
763
|
+
};
|
|
764
|
+
try {
|
|
765
|
+
run.inbox.push(message);
|
|
766
|
+
}
|
|
767
|
+
catch (error) {
|
|
768
|
+
translator.unregisterInput(input.clientMessageId);
|
|
769
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
770
|
+
}
|
|
771
|
+
pushed.set(input.clientMessageId, message);
|
|
772
|
+
return { accepted: true };
|
|
773
|
+
},
|
|
774
|
+
async cancel(cause) {
|
|
775
|
+
// The session is going away; nothing queues behind a disposed CLI.
|
|
776
|
+
if (disposing)
|
|
777
|
+
return { stillQueued: [], outcome: 'unknown' };
|
|
778
|
+
if (translator.turnOpen && forceTimer === undefined) {
|
|
779
|
+
forceTimer = clock.setTimeout(() => {
|
|
780
|
+
forceTimer = undefined;
|
|
781
|
+
if (disposing || !translator.turnOpen)
|
|
782
|
+
return;
|
|
783
|
+
// The CLI never withdrew its prompts either: close the panels too.
|
|
784
|
+
bridge.settleAll(WITHDRAWN_MESSAGE);
|
|
785
|
+
dialogs.settleAll();
|
|
786
|
+
emit([
|
|
787
|
+
...translator.forceCloseTurn({ kind: 'aborted' }),
|
|
788
|
+
{ type: 'notice', level: 'warning', text: t('claude-cancel-forced') },
|
|
789
|
+
{ type: 'session.status', status: 'requires-action' },
|
|
790
|
+
]);
|
|
791
|
+
settleIdleWaiters();
|
|
792
|
+
}, forceSettleMs);
|
|
793
|
+
}
|
|
794
|
+
// An `interrupt` parks the queue in the channel (the dock) instead of
|
|
795
|
+
// re-delivering it, so the queued inputs go with the turn when the CLI
|
|
796
|
+
// can drop them; a user cancel keeps them (they run as the next turn).
|
|
797
|
+
// A CLI without the capability keeps its queue and runs it — the
|
|
798
|
+
// cancel receipt's `still_queued` tells the channel, which un-docks.
|
|
799
|
+
translator.clearInterruptedCalls();
|
|
800
|
+
const cancelQueued = cause !== 'user' && cliCapabilities.includes(CLI_CAPABILITY.interruptCancelQueued);
|
|
801
|
+
// The queued inputs this cancel covers, taken before the request (an
|
|
802
|
+
// input pushed meanwhile belongs to a newer batch). Without a
|
|
803
|
+
// `still_queued` answer they are reported as still queued: a failed
|
|
804
|
+
// or answerless interrupt must not read as an empty queue, or the
|
|
805
|
+
// dock would offer to re-send inputs the CLI still holds.
|
|
806
|
+
const covered = translator.pendingInputs();
|
|
807
|
+
// The documented `cancel_queued` interrupt field is reachable through
|
|
808
|
+
// the runtime method's option bag (absent from the TS signature).
|
|
809
|
+
const query = run.query;
|
|
810
|
+
const interrupt = query.interrupt;
|
|
811
|
+
try {
|
|
812
|
+
const receipt = rec(await interrupt.call(query, cancelQueued ? { cancelQueued: true } : undefined));
|
|
813
|
+
if (Array.isArray(receipt?.still_queued)) {
|
|
814
|
+
// The receipt's `still_queued` is the CLI's live queue snapshot:
|
|
815
|
+
// exactly the uuids that will still run (sdk.d.ts).
|
|
816
|
+
const stillQueued = receipt.still_queued.filter((id) => typeof id === 'string');
|
|
817
|
+
return { stillQueued, outcome: 'confirmed' };
|
|
818
|
+
}
|
|
819
|
+
// An older CLI resolves interrupt() to undefined (sdk.d.ts): no
|
|
820
|
+
// snapshot came back, nothing is confirmed deleted.
|
|
821
|
+
return { stillQueued: covered, outcome: 'unknown' };
|
|
822
|
+
}
|
|
823
|
+
catch (error) {
|
|
824
|
+
deps.host.debug(`claude: interrupt failed (${errorText(error)})`);
|
|
825
|
+
return { stillQueued: covered, outcome: 'failed' };
|
|
826
|
+
}
|
|
827
|
+
},
|
|
828
|
+
dispose() {
|
|
829
|
+
if (disposePromise !== undefined)
|
|
830
|
+
return disposePromise;
|
|
831
|
+
disposePromise = (async () => {
|
|
832
|
+
const wasDisposed = status === 'disposed';
|
|
833
|
+
disposing = true;
|
|
834
|
+
status = 'disposed';
|
|
835
|
+
teardown();
|
|
836
|
+
let timer;
|
|
837
|
+
await Promise.race([
|
|
838
|
+
run.consumer,
|
|
839
|
+
new Promise(resolve => { timer = clock.setTimeout(resolve, deps.closeTimeoutMs ?? 5000); }),
|
|
840
|
+
]);
|
|
841
|
+
clock.clearTimeout(timer);
|
|
842
|
+
if (!wasDisposed)
|
|
843
|
+
emit([{ type: 'session.status', status: 'disposed' }], 'none', true);
|
|
844
|
+
settleIdleWaiters(new Error(t('claude-session-closed')));
|
|
845
|
+
listeners.clear();
|
|
846
|
+
backlog.length = 0;
|
|
847
|
+
})();
|
|
848
|
+
return disposePromise;
|
|
849
|
+
},
|
|
850
|
+
};
|
|
851
|
+
return session;
|
|
852
|
+
}
|