@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,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fold, paging and live-merge helpers for a child's transcript, shared by
|
|
3
|
+
* the subagent Detail scene and the main-screen AgentTranscriptScene so a
|
|
4
|
+
* child row reads the same wherever it is shown.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { ARGS_PREVIEW_LIMIT, preview, RESULT_PREVIEW_LIMIT } from '../../channel/transcript.js';
|
|
8
|
+
/** Presentations that never earn a duplicate card here either (the main
|
|
9
|
+
* projector's rule): a nested delegation renders as the subagent card, a
|
|
10
|
+
* todo write lives in the todo panel, a question in its dialog. */
|
|
11
|
+
export const TRANSCRIPT_SUPPRESSED_CARDS = new Set(['subagent', 'todo', 'question']);
|
|
12
|
+
/** Settle a tool card with its recorded result. */
|
|
13
|
+
function applyToolResult(tool, event) {
|
|
14
|
+
tool.durationMs = Math.max(0, event.time - tool.startedAt);
|
|
15
|
+
if (event.isError) {
|
|
16
|
+
tool.status = 'error';
|
|
17
|
+
tool.errorText = event.errorText ?? '';
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
tool.status = 'ok';
|
|
21
|
+
tool.resultText = event.text !== '' ? preview(event.text, RESULT_PREVIEW_LIMIT) : undefined;
|
|
22
|
+
tool.resultFull = event.text !== '' ? event.text : undefined;
|
|
23
|
+
tool.resultView = event.presentation;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Fold one history page's lane events into leaf rows (oldest first;
|
|
27
|
+
* `into` may already hold the older pages' rows). A tool result whose
|
|
28
|
+
* call is not on this page goes to `page.orphans` (or is dropped without
|
|
29
|
+
* one) until the older page with the call is folded; consecutive blocks
|
|
30
|
+
* of one API message join (the store splits a message into per-block
|
|
31
|
+
* entries sharing the anchor).
|
|
32
|
+
*
|
|
33
|
+
* `messages` (the agent↔agent feed for THIS child, newest last) is
|
|
34
|
+
* interleaved by observedAt: each is flushed as an `agent-message` leaf
|
|
35
|
+
* before the first event observed at/after it. Only the messages that
|
|
36
|
+
* fall inside this page's span are placed (see TranscriptPagePlacement),
|
|
37
|
+
* so loading an older page never repeats one. Returns the lower bound of
|
|
38
|
+
* the span this page took — the `before` for the next older page. */
|
|
39
|
+
export function foldTranscriptLeaves(events, into, messages = [], page = {}) {
|
|
40
|
+
const start = events.find(event => eventTime(event) !== undefined);
|
|
41
|
+
const from = page.olderPagesRemain === true && start !== undefined ? eventTime(start) : Number.NEGATIVE_INFINITY;
|
|
42
|
+
const until = page.before ?? Number.POSITIVE_INFINITY;
|
|
43
|
+
const own = messages.filter(message => message.observedAt >= from && message.observedAt < until);
|
|
44
|
+
let next = 0;
|
|
45
|
+
const flushMessages = (before) => {
|
|
46
|
+
while (next < own.length && own[next].observedAt <= before) {
|
|
47
|
+
const message = own[next];
|
|
48
|
+
into.push({ kind: 'agent-message', key: `am-${message.messageId}`, message });
|
|
49
|
+
next += 1;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
for (const event of events) {
|
|
53
|
+
const at = eventTime(event);
|
|
54
|
+
if (at !== undefined)
|
|
55
|
+
flushMessages(at);
|
|
56
|
+
if (event.type === 'tool.call') {
|
|
57
|
+
if (event.presentation !== undefined && TRANSCRIPT_SUPPRESSED_CARDS.has(event.presentation.card))
|
|
58
|
+
continue;
|
|
59
|
+
into.push({ kind: 'tool', key: event.callId, tool: {
|
|
60
|
+
callId: event.callId,
|
|
61
|
+
name: event.name,
|
|
62
|
+
argsText: preview(event.argsJson, ARGS_PREVIEW_LIMIT),
|
|
63
|
+
argsFull: event.argsJson,
|
|
64
|
+
status: 'running',
|
|
65
|
+
callView: event.presentation,
|
|
66
|
+
startedAt: event.time,
|
|
67
|
+
} });
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (event.type === 'tool.result') {
|
|
71
|
+
let row;
|
|
72
|
+
for (let i = into.length - 1; i >= 0; i -= 1) {
|
|
73
|
+
const leaf = into[i];
|
|
74
|
+
if (leaf.kind === 'tool' && leaf.tool.callId === event.callId) {
|
|
75
|
+
row = leaf;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (row === undefined) {
|
|
80
|
+
page.orphans?.set(event.callId, event);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
applyToolResult(row.tool, event);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (event.type === 'assistant.message') {
|
|
87
|
+
for (const block of event.blocks) {
|
|
88
|
+
if (block.type === 'reasoning') {
|
|
89
|
+
const last = into.at(-1);
|
|
90
|
+
if (last !== undefined && last.kind === 'thinking' && last.key === event.anchor)
|
|
91
|
+
last.text = last.text === '' ? block.text ?? '' : `${last.text}\n${block.text ?? ''}`;
|
|
92
|
+
else
|
|
93
|
+
into.push({ kind: 'thinking', key: event.anchor, text: block.text ?? '' });
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (block.type === 'reasoning-tokens' || block.type === 'reasoning-signature') {
|
|
97
|
+
into.push({ kind: 'thinking-unavailable', key: `${event.anchor}:ua`, tokens: block.type === 'reasoning-tokens' && Number.isFinite(Number(block.text)) ? Number(block.text) : undefined });
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (block.type === 'text') {
|
|
101
|
+
const last = into.at(-1);
|
|
102
|
+
if (last !== undefined && last.kind === 'text' && last.key === event.anchor)
|
|
103
|
+
last.text = `${last.text}\n${block.text ?? ''}`;
|
|
104
|
+
else
|
|
105
|
+
into.push({ kind: 'text', key: event.anchor, text: block.text ?? '' });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
flushMessages(Number.POSITIVE_INFINITY);
|
|
111
|
+
return from;
|
|
112
|
+
}
|
|
113
|
+
const eventTime = (event) => event.type === 'tool.call' || event.type === 'tool.result' || event.type === 'assistant.message' ? event.time : undefined;
|
|
114
|
+
/** The newest page of a child's transcript, folded. */
|
|
115
|
+
export function foldNewestPage(agentId, page, messages) {
|
|
116
|
+
const leaves = [];
|
|
117
|
+
const orphans = new Map();
|
|
118
|
+
const messagesFrom = foldTranscriptLeaves(page.events, leaves, messages, { olderPagesRemain: page.hasOlder, orphans });
|
|
119
|
+
// The newest page can itself repeat one anchor (text, tool, text of one
|
|
120
|
+
// message): its rows carry unique render keys from the start.
|
|
121
|
+
return { status: 'ready', agentId, leaves: uniqueRenderKeys(leaves), parentAgentId: page.parentAgentId, hasOlder: page.hasOlder, skippedFromStart: page.skippedFromStart, ...(page.sourceCursor === undefined ? {} : { sourceCursor: page.sourceCursor }), loadingOlder: false, messagesFrom, orphanResults: orphans };
|
|
122
|
+
}
|
|
123
|
+
/** One older page folded in front of a loaded transcript: its agent
|
|
124
|
+
* messages are the ones before the loaded span, and the results the newer
|
|
125
|
+
* pages held for its calls settle those calls' cards. */
|
|
126
|
+
export function foldOlderPage(current, page, messages) {
|
|
127
|
+
const fresh = [];
|
|
128
|
+
const orphans = new Map();
|
|
129
|
+
const messagesFrom = foldTranscriptLeaves(page.events, fresh, messages, { olderPagesRemain: page.hasOlder, before: current.messagesFrom, orphans });
|
|
130
|
+
const carried = new Map(current.orphanResults);
|
|
131
|
+
for (const leaf of fresh) {
|
|
132
|
+
if (leaf.kind !== 'tool')
|
|
133
|
+
continue;
|
|
134
|
+
const result = carried.get(leaf.tool.callId);
|
|
135
|
+
if (result === undefined)
|
|
136
|
+
continue;
|
|
137
|
+
applyToolResult(leaf.tool, result);
|
|
138
|
+
carried.delete(leaf.tool.callId);
|
|
139
|
+
}
|
|
140
|
+
for (const [callId, result] of orphans)
|
|
141
|
+
carried.set(callId, result);
|
|
142
|
+
const { sourceCursor: previousCursor, ...previous } = current;
|
|
143
|
+
return { ...previous, leaves: prependOlderLeaves(fresh, current.leaves), hasOlder: page.hasOlder, skippedFromStart: page.skippedFromStart, ...(page.sourceCursor === undefined ? {} : { sourceCursor: page.sourceCursor }), loadingOlder: false, messagesFrom, orphanResults: carried };
|
|
144
|
+
}
|
|
145
|
+
/** One load-older window (messages; matches the backend's newest page). */
|
|
146
|
+
export const TRANSCRIPT_OLDER_CHUNK = 400;
|
|
147
|
+
/** The retained output window both stores keep (channel/activity.ts and
|
|
148
|
+
* dsh-adapter/subagents.ts): a tail at this size is a WINDOW, and the
|
|
149
|
+
* output page says so when no transcript source can show the rest. */
|
|
150
|
+
export const OUTPUT_WINDOW_CAP = 160;
|
|
151
|
+
/** Render keys must be unique per row: the store's block-per-entry split can
|
|
152
|
+
* repeat one anchor inside a page (a text, a tool and another text of one
|
|
153
|
+
* message), so a repeated key gets an ordinal suffix; a leaf is never
|
|
154
|
+
* dropped for its key. The first occurrence keeps its key, later ones are
|
|
155
|
+
* copied. */
|
|
156
|
+
export function uniqueRenderKeys(leaves) {
|
|
157
|
+
const seen = new Map();
|
|
158
|
+
return leaves.map(leaf => {
|
|
159
|
+
const n = seen.get(leaf.key) ?? 0;
|
|
160
|
+
seen.set(leaf.key, n + 1);
|
|
161
|
+
return n === 0 ? leaf : { ...leaf, key: `${leaf.key}#${n + 1}` };
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/** Prepend one older page's folded leaves. The store splits one API message
|
|
165
|
+
* into per-block entries sharing the anchor, so a block can only be cut
|
|
166
|
+
* across pages at the boundary: the older page's last leaf against the
|
|
167
|
+
* current list's first. Those two merge when they share the key and the
|
|
168
|
+
* text/thinking kind (the fold already joined everything consecutive
|
|
169
|
+
* within a page). Every other leaf keeps its own row in the older page's
|
|
170
|
+
* order: a different kind under the same key is kept, and a tool between
|
|
171
|
+
* two text parts of one message stays between them. No current leaf is
|
|
172
|
+
* mutated. */
|
|
173
|
+
export function prependOlderLeaves(fresh, current) {
|
|
174
|
+
let older = fresh;
|
|
175
|
+
let head = current;
|
|
176
|
+
const last = fresh.at(-1);
|
|
177
|
+
const first = current[0];
|
|
178
|
+
if (last !== undefined && first !== undefined &&
|
|
179
|
+
(first.kind === 'text' || first.kind === 'thinking') &&
|
|
180
|
+
first.kind === last.kind && first.key === last.key) {
|
|
181
|
+
// Same-kind boundary blocks of one message: one continuous block the
|
|
182
|
+
// page slice cut — the older text precedes, the order it was written in.
|
|
183
|
+
head = [{ ...first, text: `${last.text}\n${first.text}` }, ...current.slice(1)];
|
|
184
|
+
older = fresh.slice(0, -1);
|
|
185
|
+
}
|
|
186
|
+
return uniqueRenderKeys([...older, ...head]);
|
|
187
|
+
}
|
|
188
|
+
const capLike = (line) => (line.length > 400 ? `${line.slice(0, 400)}…` : line);
|
|
189
|
+
/** Merge the channel's live window into the folded history: tool records
|
|
190
|
+
* pair by call id (live status/previews win while the disk has not
|
|
191
|
+
* recorded the result; a call the history never saw appends as live),
|
|
192
|
+
* and text/thinking tail lines the loaded history already paints are
|
|
193
|
+
* suppressed — a settled block's lines are identical on both sides — so
|
|
194
|
+
* history and live neither double a row nor drop a tail. */
|
|
195
|
+
export function mergeLiveWindow(leaves, subagent, hasHistory) {
|
|
196
|
+
const rows = [...leaves];
|
|
197
|
+
subagent.toolCalls.forEach((call, callIndex) => {
|
|
198
|
+
let at = -1;
|
|
199
|
+
for (let i = rows.length - 1; i >= 0; i -= 1) {
|
|
200
|
+
const row = rows[i];
|
|
201
|
+
if (row.kind === 'tool' && row.tool.callId === call.id) {
|
|
202
|
+
at = i;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (at >= 0) {
|
|
207
|
+
const leaf = rows[at];
|
|
208
|
+
// A copy: the history leaves are the transcript state, read again on
|
|
209
|
+
// every render — the live status only overlays them here.
|
|
210
|
+
if (leaf.tool.status === 'running' && call.status !== 'running') {
|
|
211
|
+
rows[at] = { ...leaf, tool: {
|
|
212
|
+
...leaf.tool,
|
|
213
|
+
status: call.status === 'failed' ? 'error' : 'ok',
|
|
214
|
+
errorText: call.error,
|
|
215
|
+
resultText: call.resultPreview,
|
|
216
|
+
...(call.endedAt !== undefined ? { durationMs: Math.max(0, call.endedAt - leaf.tool.startedAt) } : {}),
|
|
217
|
+
} };
|
|
218
|
+
}
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
rows.push({ kind: 'tool', key: call.id ?? `live-call-${callIndex}`, tool: {
|
|
222
|
+
callId: call.id ?? call.name,
|
|
223
|
+
name: call.name,
|
|
224
|
+
argsText: call.argsPreview ?? '',
|
|
225
|
+
status: call.status === 'failed' ? 'error' : call.status === 'running' ? 'running' : 'ok',
|
|
226
|
+
startedAt: call.startedAt,
|
|
227
|
+
...(call.endedAt !== undefined ? { durationMs: Math.max(0, call.endedAt - call.startedAt) } : {}),
|
|
228
|
+
...(call.resultPreview !== undefined ? { resultText: call.resultPreview } : {}),
|
|
229
|
+
...(call.error !== undefined ? { errorText: call.error } : {}),
|
|
230
|
+
} });
|
|
231
|
+
});
|
|
232
|
+
if (!hasHistory) {
|
|
233
|
+
for (const line of subagent.outputEvents)
|
|
234
|
+
rows.push({ kind: 'live', line });
|
|
235
|
+
return rows;
|
|
236
|
+
}
|
|
237
|
+
const seen = new Set();
|
|
238
|
+
for (const leaf of leaves) {
|
|
239
|
+
if (leaf.kind !== 'text' && leaf.kind !== 'thinking')
|
|
240
|
+
continue;
|
|
241
|
+
for (const line of leaf.text.split('\n'))
|
|
242
|
+
if (line.trim() !== '')
|
|
243
|
+
seen.add(capLike(line));
|
|
244
|
+
}
|
|
245
|
+
for (const line of subagent.outputEvents) {
|
|
246
|
+
if (line.text.trim() !== '' && seen.has(capLike(line.text)))
|
|
247
|
+
continue;
|
|
248
|
+
rows.push({ kind: 'live', line });
|
|
249
|
+
}
|
|
250
|
+
return rows;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* The paged history of one child: loads the newest page while `active`,
|
|
254
|
+
* reloads once when `reloadKey` changes (settlement makes the disk copy
|
|
255
|
+
* final), and prepends older windows on demand.
|
|
256
|
+
*
|
|
257
|
+
* The loader and the message feed ride refs: the channel UI proxy mints a
|
|
258
|
+
* fresh loader per read, and a reload must key on what changed (the child,
|
|
259
|
+
* activation, settlement), not on a churning identity. An older window is
|
|
260
|
+
* dropped when the state it was requested for is gone (the view switched
|
|
261
|
+
* to another agent, or a reload moved the newest page under it).
|
|
262
|
+
*/
|
|
263
|
+
export function useSubagentTranscript(loadTranscript, agentId, active, reloadKey, messages) {
|
|
264
|
+
const [transcript, setTranscript] = React.useState({ status: 'idle' });
|
|
265
|
+
const loaderRef = React.useRef(loadTranscript);
|
|
266
|
+
loaderRef.current = loadTranscript;
|
|
267
|
+
const messagesRef = React.useRef(messages);
|
|
268
|
+
messagesRef.current = messages;
|
|
269
|
+
React.useEffect(() => {
|
|
270
|
+
const load = loaderRef.current;
|
|
271
|
+
if (!active || load === undefined)
|
|
272
|
+
return;
|
|
273
|
+
let alive = true;
|
|
274
|
+
setTranscript(prev => prev.status === 'ready' && prev.agentId === agentId ? prev : { status: 'loading' });
|
|
275
|
+
load(agentId).then(loaded => {
|
|
276
|
+
if (!alive)
|
|
277
|
+
return;
|
|
278
|
+
setTranscript(loaded === null ? { status: 'unavailable' } : foldNewestPage(agentId, loaded, messagesRef.current));
|
|
279
|
+
}, () => { if (alive)
|
|
280
|
+
setTranscript({ status: 'unavailable' }); });
|
|
281
|
+
return () => { alive = false; };
|
|
282
|
+
}, [active, agentId, reloadKey]);
|
|
283
|
+
const loadOlder = () => {
|
|
284
|
+
const load = loaderRef.current;
|
|
285
|
+
if (transcript.status !== 'ready' || !transcript.hasOlder || transcript.loadingOlder || load === undefined)
|
|
286
|
+
return;
|
|
287
|
+
const requestedFor = transcript;
|
|
288
|
+
const count = requestedFor.sourceCursor === undefined ? Math.min(TRANSCRIPT_OLDER_CHUNK, requestedFor.skippedFromStart) : TRANSCRIPT_OLDER_CHUNK;
|
|
289
|
+
setTranscript(prev => prev === requestedFor ? { ...prev, loadingOlder: true } : prev);
|
|
290
|
+
const current = (prev) => prev.status === 'ready' && prev.agentId === requestedFor.agentId && prev.skippedFromStart === requestedFor.skippedFromStart && prev.sourceCursor === requestedFor.sourceCursor;
|
|
291
|
+
load(requestedFor.agentId, { count, skipFromStart: requestedFor.skippedFromStart, ...(requestedFor.sourceCursor === undefined ? {} : { sourceCursor: requestedFor.sourceCursor }) }).then(older => {
|
|
292
|
+
setTranscript(prev => {
|
|
293
|
+
if (!current(prev))
|
|
294
|
+
return prev;
|
|
295
|
+
if (older === null)
|
|
296
|
+
return { ...prev, loadingOlder: false };
|
|
297
|
+
return foldOlderPage(prev, older, messagesRef.current);
|
|
298
|
+
});
|
|
299
|
+
}, () => {
|
|
300
|
+
setTranscript(prev => current(prev) ? { ...prev, loadingOlder: false } : prev);
|
|
301
|
+
});
|
|
302
|
+
};
|
|
303
|
+
return { transcript, loadOlder };
|
|
304
|
+
}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* appends into that input row (single-select also attaches the option's
|
|
11
11
|
* label, so the answer can carry both `selected` and `custom`); focusing
|
|
12
12
|
* the input row itself and typing gives a pure custom answer.
|
|
13
|
+
* Local /provider model lists additionally offer a Tab capability editor;
|
|
14
|
+
* ordinary questionnaires retain the inline-answer behavior.
|
|
13
15
|
*
|
|
14
16
|
* Paste works on the input row like the composer: Ctrl+V/Alt+V (the keymap
|
|
15
17
|
* `paste` binding, remappable in /settings) reads the system clipboard,
|
|
@@ -25,7 +27,8 @@
|
|
|
25
27
|
* never be split into a lone surrogate by ←/→/⌫/Del or a paste boundary.
|
|
26
28
|
*/
|
|
27
29
|
import React from 'react';
|
|
28
|
-
import type { QuestionDraft, QuestionSelection } from '../../
|
|
30
|
+
import type { QuestionDraft, QuestionSelection } from '../../channel/questions.js';
|
|
31
|
+
import type { ProviderModelEditor as ModelEditor } from '../../adapter/ports/channel-settings.js';
|
|
29
32
|
import { type ClipboardRead } from '../../utils/clipboard.js';
|
|
30
33
|
export type AskUserQuestionPanelProps = {
|
|
31
34
|
/** The question to render (from the QuestionStore snapshot). */
|
|
@@ -46,11 +49,23 @@ export type AskUserQuestionPanelProps = {
|
|
|
46
49
|
* (single-select) shown on first display, before any saved draft — e.g.
|
|
47
50
|
* the models already enabled on a provider being edited. */
|
|
48
51
|
readonly defaultSelected?: readonly string[];
|
|
52
|
+
/** A URL the question is about (an MCP server's sign-in page): one line
|
|
53
|
+
* under the detail, an OSC 8 hyperlink where the terminal supports it
|
|
54
|
+
* (plain otherwise; a scheme that is not http(s)/file/mailto shows
|
|
55
|
+
* nothing — the notice row still names it). */
|
|
56
|
+
readonly link?: string;
|
|
57
|
+
/** A secret answer (a token, a password): the input row shows one `•`
|
|
58
|
+
* per typed code point; the submitted answer is the real text. */
|
|
59
|
+
readonly secret?: boolean;
|
|
60
|
+
/** Local /provider draft editor. Ordinary model-facing asks carry none. */
|
|
61
|
+
readonly modelEditor?: ModelEditor;
|
|
49
62
|
/** Presentation intent tag (rc.6): 'plan-review' switches to the
|
|
50
63
|
* decision-card layout; an intent never changes the protocol. */
|
|
51
64
|
readonly intent?: {
|
|
52
65
|
readonly kind: 'plan-review';
|
|
53
66
|
readonly approve: string;
|
|
67
|
+
readonly approveAlso?: readonly string[];
|
|
68
|
+
readonly decline?: string;
|
|
54
69
|
};
|
|
55
70
|
};
|
|
56
71
|
/** 1-based position within the batch (progress header). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AskUserQuestionPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/questions/AskUserQuestionPanel.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"AskUserQuestionPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/questions/AskUserQuestionPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,KAAK,EAAE,mBAAmB,IAAI,WAAW,EAAE,MAAM,yCAAyC,CAAA;AAOjG,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAA;AA0B5E,MAAM,MAAM,yBAAyB,GAAG;IACtC,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;YAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAC3F,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;QAC9B;;oEAE4D;QAC5D,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;QAClC;;qEAE6D;QAC7D,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QAC5C;;;wDAGgD;QAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;QACtB;2EACmE;QACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;QACzB,2EAA2E;QAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;QAClC;0EACkE;QAClE,QAAQ,CAAC,MAAM,CAAC,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;YAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAClJ,CAAA;IACD,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACzD,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAClD,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAChD;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACnD;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;IAC7D;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IAClC;;gEAE4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,qBAAqB,EACrB,SAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,UAAkB,GACnB,EAAE,yBAAyB,GAAG,KAAK,CAAC,SAAS,CA+tB7C"}
|
|
@@ -11,6 +11,8 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
11
11
|
* appends into that input row (single-select also attaches the option's
|
|
12
12
|
* label, so the answer can carry both `selected` and `custom`); focusing
|
|
13
13
|
* the input row itself and typing gives a pure custom answer.
|
|
14
|
+
* Local /provider model lists additionally offer a Tab capability editor;
|
|
15
|
+
* ordinary questionnaires retain the inline-answer behavior.
|
|
14
16
|
*
|
|
15
17
|
* Paste works on the input row like the composer: Ctrl+V/Alt+V (the keymap
|
|
16
18
|
* `paste` binding, remappable in /settings) reads the system clipboard,
|
|
@@ -32,11 +34,13 @@ import { useDeclaredCursor } from '../../ink/hooks/use-declared-cursor.js';
|
|
|
32
34
|
import { Divider } from '../design-system/Divider.js';
|
|
33
35
|
import { POINTER } from '../../terminal-utils/figures.js';
|
|
34
36
|
import { PlanReviewPanel } from './PlanReviewPanel.js';
|
|
37
|
+
import { ProviderModelEditor } from './ProviderModelEditor.js';
|
|
35
38
|
import { QuestionMinimizedBar } from './QuestionMinimizedBar.js';
|
|
36
39
|
import { isPlainReturnInput } from '../../utils/modifiers.js';
|
|
37
40
|
import { actionMatches, comboDisplay, effectiveComboDisplay, primaryComboString } from '../../utils/keymap.js';
|
|
38
41
|
import { flattenPasteInline } from '../../dsh-adapter/sanitize.js';
|
|
39
42
|
import { readClipboard } from '../../utils/clipboard.js';
|
|
43
|
+
import { createHyperlink } from '../../terminal-utils/hyperlink.js';
|
|
40
44
|
import { listWindow } from '../listWindow.js';
|
|
41
45
|
/** Unmodified arrows switch questions; Ctrl/Alt/Super/Shift stay caret motion. */
|
|
42
46
|
function isPlainArrow(key) {
|
|
@@ -45,6 +49,8 @@ function isPlainArrow(key) {
|
|
|
45
49
|
const CHECKED = '◉';
|
|
46
50
|
const UNCHECKED = '○';
|
|
47
51
|
const PENCIL = '✎';
|
|
52
|
+
/** One masked code point of a secret answer (`question.secret`). */
|
|
53
|
+
const SECRET_MASK = '•';
|
|
48
54
|
/**
|
|
49
55
|
* Paste cap for one answer field, in code points. Typing is naturally
|
|
50
56
|
* bounded (humans cannot type unboundedly) and the protocol places no
|
|
@@ -65,6 +71,13 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
65
71
|
const options = question.options ?? [];
|
|
66
72
|
const multiSelect = question.multiSelect === true;
|
|
67
73
|
const hideCustomInput = question.hideCustomInput === true && options.length > 0;
|
|
74
|
+
const modelEditor = typeof question.modelEditor?.read === 'function'
|
|
75
|
+
&& typeof question.modelEditor.save === 'function' && typeof question.modelEditor.edited === 'function'
|
|
76
|
+
? question.modelEditor : undefined;
|
|
77
|
+
const [editingModel, setEditingModel] = React.useState(null);
|
|
78
|
+
// Opening Tab and later keys may share one stdin batch. Stop the list
|
|
79
|
+
// synchronously, before the nested editor has had a chance to mount.
|
|
80
|
+
const editingRef = React.useRef(false);
|
|
68
81
|
const { rows: terminalRows } = useTerminalSize();
|
|
69
82
|
/** Rows: the real options plus the inline input row at the tail. */
|
|
70
83
|
const rowCount = options.length + (hideCustomInput ? 0 : 1);
|
|
@@ -143,7 +156,9 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
143
156
|
// Optional header/detail/input/error rows are charged explicitly. Long
|
|
144
157
|
// lists then use fixed one/two-line rows so listWindow's budget is exact;
|
|
145
158
|
// short questionnaires retain their existing wrapped presentation.
|
|
146
|
-
const
|
|
159
|
+
const linkText = question.link === undefined || question.link === '' ? '' : createHyperlink(question.link);
|
|
160
|
+
const detailRows = (question.detail === undefined ? 0 : question.detail.split('\n').length + 1)
|
|
161
|
+
+ (linkText === '' ? 0 : question.detail === undefined ? 2 : 1);
|
|
147
162
|
const reservedRows = 12
|
|
148
163
|
+ (question.header === undefined ? 0 : 1)
|
|
149
164
|
+ detailRows
|
|
@@ -166,7 +181,7 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
166
181
|
// three visual variants): its nodeCache rect IS the caret cell, so (0, 0)
|
|
167
182
|
// stays exact under CJK widths and line wrapping without any
|
|
168
183
|
// layout-affecting wrapper Box.
|
|
169
|
-
const caretRef = useDeclaredCursor({ line: 0, column: 0, active: !hideCustomInput && !collapsed });
|
|
184
|
+
const caretRef = useDeclaredCursor({ line: 0, column: 0, active: !hideCustomInput && !collapsed && editingModel === null });
|
|
170
185
|
const moveFocus = (delta) => {
|
|
171
186
|
if (rowCount <= 1)
|
|
172
187
|
return;
|
|
@@ -309,7 +324,34 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
309
324
|
...(textRef.current !== '' ? { custom: textRef.current } : {}),
|
|
310
325
|
};
|
|
311
326
|
};
|
|
327
|
+
const openModelEditor = (model, event) => {
|
|
328
|
+
editingRef.current = true;
|
|
329
|
+
setEditingModel(model);
|
|
330
|
+
event.stopImmediatePropagation();
|
|
331
|
+
};
|
|
332
|
+
const manualModelAtCaret = () => {
|
|
333
|
+
const points = [...textRef.current];
|
|
334
|
+
const isSeparator = (char) => char === undefined || /[,,\s]/u.test(char);
|
|
335
|
+
let at = Math.min(cursorRef.current, points.length);
|
|
336
|
+
if (at === points.length || isSeparator(points[at]))
|
|
337
|
+
at -= 1;
|
|
338
|
+
while (at >= 0 && isSeparator(points[at]))
|
|
339
|
+
at -= 1;
|
|
340
|
+
if (at < 0)
|
|
341
|
+
return '';
|
|
342
|
+
let start = at;
|
|
343
|
+
let end = at + 1;
|
|
344
|
+
while (start > 0 && !isSeparator(points[start - 1]))
|
|
345
|
+
start -= 1;
|
|
346
|
+
while (end < points.length && !isSeparator(points[end]))
|
|
347
|
+
end += 1;
|
|
348
|
+
return points.slice(start, end).join('');
|
|
349
|
+
};
|
|
312
350
|
useInput((input, key, event) => {
|
|
351
|
+
if (editingRef.current) {
|
|
352
|
+
event.stopImmediatePropagation();
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
313
355
|
// The mounted panel owns folding, just like answering: hidden asks
|
|
314
356
|
// cannot steal approval/dialog keys, and an interrupting questionnaire
|
|
315
357
|
// still works when Chat yields to an underlying screen's open flag.
|
|
@@ -362,6 +404,16 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
362
404
|
return;
|
|
363
405
|
}
|
|
364
406
|
if (onInputRow()) {
|
|
407
|
+
if (key.tab && modelEditor !== undefined) {
|
|
408
|
+
const manualModel = manualModelAtCaret();
|
|
409
|
+
if (manualModel !== '') {
|
|
410
|
+
openModelEditor(manualModel, event);
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
placeFocus(0);
|
|
414
|
+
event.stopImmediatePropagation();
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
365
417
|
if (key.upArrow) {
|
|
366
418
|
moveFocus(-1);
|
|
367
419
|
return;
|
|
@@ -447,6 +499,13 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
447
499
|
onForward(currentDraft());
|
|
448
500
|
return;
|
|
449
501
|
}
|
|
502
|
+
if (key.tab && !key.shift && !key.ctrl && !key.meta && !key.super && modelEditor !== undefined) {
|
|
503
|
+
const model = options[focusRef.current]?.label;
|
|
504
|
+
if (model !== undefined) {
|
|
505
|
+
openModelEditor(model, event);
|
|
506
|
+
}
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
450
509
|
if (key.tab && !hideCustomInput) {
|
|
451
510
|
placeFocus(options.length);
|
|
452
511
|
setError(null);
|
|
@@ -483,8 +542,11 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
483
542
|
const questionText = question.question.split('\n')[0]?.replace(/\s+/gu, ' ').trim() ?? '';
|
|
484
543
|
// The caret counts code points (see the module header), so the caret
|
|
485
544
|
// char and the visual split index into the point array — never raw
|
|
486
|
-
// UTF-16 offsets, which could land inside a surrogate pair.
|
|
487
|
-
|
|
545
|
+
// UTF-16 offsets, which could land inside a surrogate pair. A secret
|
|
546
|
+
// question paints one mask per code point instead: the same caret math,
|
|
547
|
+
// nothing of the typed text on screen.
|
|
548
|
+
const typedPoints = [...customText];
|
|
549
|
+
const textPoints = question.secret === true ? typedPoints.map(() => SECRET_MASK) : typedPoints;
|
|
488
550
|
const cursorChar = customCursor < textPoints.length ? textPoints[customCursor] : ' ';
|
|
489
551
|
/** Mouse: click the input row to focus it (same as Tab). */
|
|
490
552
|
const focusInputRow = () => {
|
|
@@ -533,11 +595,12 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
533
595
|
const description = windowedOptions
|
|
534
596
|
? option.description?.replace(/\s+/gu, ' ').trim()
|
|
535
597
|
: option.description;
|
|
536
|
-
return (_jsxs(Box, { flexDirection: "row", marginTop: !windowedOptions && focused ? 1 : 0, onClick: () => clickOption(absoluteIndex), onMouseEnter: () => setHoverIndex(absoluteIndex), onMouseLeave: () => setHoverIndex(current => (current === absoluteIndex ? -1 : current)), backgroundColor: hoverIndex === absoluteIndex && !focused ? 'userMessageBackgroundHover' : undefined, children: [_jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { color: focused ? 'accent' : undefined, bold: focused, children: pointer }) }), _jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { color: focused ? 'accent' : undefined, bold: selected, children: selected ? (multiSelect ? CHECKED : '●') : UNCHECKED }) }), _jsxs(Box, { flexDirection: "column", marginLeft: 1, children: [
|
|
598
|
+
return (_jsxs(Box, { flexDirection: "row", marginTop: !windowedOptions && focused ? 1 : 0, onClick: () => clickOption(absoluteIndex), onMouseEnter: () => setHoverIndex(absoluteIndex), onMouseLeave: () => setHoverIndex(current => (current === absoluteIndex ? -1 : current)), backgroundColor: hoverIndex === absoluteIndex && !focused ? 'userMessageBackgroundHover' : undefined, children: [_jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { color: focused ? 'accent' : undefined, bold: focused, children: pointer }) }), _jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { color: focused ? 'accent' : undefined, bold: selected, children: selected ? (multiSelect ? CHECKED : '●') : UNCHECKED }) }), _jsxs(Box, { flexDirection: "column", marginLeft: 1, children: [_jsxs(Text, { bold: focused || selected, color: focused ? 'accent' : undefined, wrap: windowedOptions ? 'truncate' : 'wrap', children: [label, modelEditor?.edited(option.label) ? ` ${t('provider-model-edited')}` : ''] }), description !== undefined && (_jsx(Text, { dimColor: true, wrap: windowedOptions ? 'truncate' : 'wrap', children: description }))] })] }, `${absoluteIndex}:${option.label}`));
|
|
537
599
|
}), hideCustomInput ? null : renderInputRow(), multiSelect && fullscreen && (checked.size > 0 || textRef.current !== '') && (_jsxs(Box, { flexDirection: "row", height: 1, marginTop: 1, onClick: submitOptions, onMouseEnter: () => setSubmitHovered(true), onMouseLeave: () => setSubmitHovered(false), backgroundColor: submitHovered ? 'userMessageBackgroundHover' : undefined, children: [_jsx(Text, { color: "accent", children: "\u2713 " }), _jsx(Text, { dimColor: true, children: t('question-submit-selection') })] }))] }));
|
|
538
600
|
const hintParts = inputFocused
|
|
539
601
|
? [
|
|
540
602
|
t('question-hint-type'),
|
|
603
|
+
...(modelEditor === undefined ? [] : [t('provider-model-edit-hint')]),
|
|
541
604
|
t('question-hint-paste', { key: comboDisplay(primaryComboString('paste')) }),
|
|
542
605
|
t('question-hint-enter'),
|
|
543
606
|
...(options.length > 0 ? [t('question-hint-back')] : []),
|
|
@@ -550,6 +613,7 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
550
613
|
: [
|
|
551
614
|
t('question-hint-select'),
|
|
552
615
|
...(multiSelect ? [t('question-hint-multi')] : []),
|
|
616
|
+
...(modelEditor === undefined ? [] : [t('provider-model-edit-hint')]),
|
|
553
617
|
...(hideCustomInput ? [] : [t('question-hint-paste', { key: comboDisplay(primaryComboString('paste')) }), t('question-hint-attach')]),
|
|
554
618
|
t('question-hint-enter'),
|
|
555
619
|
onBack === undefined ? t('question-hint-esc') : t('question-hint-previous'),
|
|
@@ -564,5 +628,11 @@ export function AskUserQuestionPanel({ question, position, total, answered, init
|
|
|
564
628
|
if (collapsed) {
|
|
565
629
|
return _jsx(QuestionMinimizedBar, { progress: headerTitle, questionText: questionText, onExpand: onExpand ?? (() => { }) });
|
|
566
630
|
}
|
|
567
|
-
|
|
631
|
+
if (editingModel !== null && modelEditor !== undefined) {
|
|
632
|
+
return _jsx(ProviderModelEditor, { model: editingModel, editor: modelEditor, onClose: () => {
|
|
633
|
+
editingRef.current = false;
|
|
634
|
+
setEditingModel(null);
|
|
635
|
+
}, onAbort: onCancel, readClipboardOverride: readClipboardOverride });
|
|
636
|
+
}
|
|
637
|
+
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, paddingLeft: 2, paddingRight: 2, width: "100%", children: [_jsx(Box, { flexDirection: "column", onClick: onToggleFold, onMouseEnter: () => setHeaderHovered(true), onMouseLeave: () => setHeaderHovered(false), backgroundColor: headerHovered ? 'userMessageBackgroundHover' : undefined, children: _jsx(Divider, { color: "permission", title: `▾${headerTitle}` }) }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [question.header !== undefined && (_jsxs(Text, { color: "suggestion", bold: true, children: ["\u25C8 ", question.header] })), _jsx(Text, { bold: true, wrap: "wrap", children: question.question }), (question.detail !== undefined || linkText !== '') && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [question.detail?.split('\n').map((line, index) => (_jsx(Text, { dimColor: true, italic: true, wrap: "wrap", children: line }, index))), linkText !== '' && _jsx(Text, { wrap: "wrap", children: linkText })] }))] }), renderOptions(), error !== null && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "error", children: error }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: hintParts.join(' · ') }) })] }));
|
|
568
638
|
}
|
|
@@ -8,9 +8,12 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Protocol-exact answer mapping (dsh-plan-mode):
|
|
10
10
|
* - Approve: `{ selected: [intent.approve] }` — custom MUST be absent, or
|
|
11
|
-
* plan-mode treats it as keep-planning-with-feedback.
|
|
11
|
+
* plan-mode treats it as keep-planning-with-feedback. An asker may name
|
|
12
|
+
* further approving options (`intent.approveAlso`, e.g. Claude's "approve,
|
|
13
|
+
* but keep asking for edits"): they follow the same clean-answer rule.
|
|
12
14
|
* - Keep planning / feedback: `{ selected: [declineLabel], custom? }` where
|
|
13
|
-
* declineLabel is the
|
|
15
|
+
* declineLabel is `intent.decline` when the asker names it, else the first
|
|
16
|
+
* option that does not approve (dsh-plan-mode names none).
|
|
14
17
|
* - Esc / Ctrl+C: the store rejects with ASK_CANCELLED, which plan-mode
|
|
15
18
|
* reads as "the user dismissed the review to speak instead".
|
|
16
19
|
*
|
|
@@ -25,7 +28,7 @@
|
|
|
25
28
|
* never be split by ←/→/⌫/Del (same contract as the plugin InputDialog).
|
|
26
29
|
*/
|
|
27
30
|
import React from 'react';
|
|
28
|
-
import type { QuestionSelection } from '../../
|
|
31
|
+
import type { QuestionSelection } from '../../channel/questions.js';
|
|
29
32
|
import { type ClipboardRead } from '../../utils/clipboard.js';
|
|
30
33
|
export type PlanReviewPanelProps = {
|
|
31
34
|
/** The plan-review question (intent.kind === 'plan-review'). */
|
|
@@ -40,6 +43,8 @@ export type PlanReviewPanelProps = {
|
|
|
40
43
|
readonly intent?: {
|
|
41
44
|
readonly kind: 'plan-review';
|
|
42
45
|
readonly approve: string;
|
|
46
|
+
readonly approveAlso?: readonly string[];
|
|
47
|
+
readonly decline?: string;
|
|
43
48
|
};
|
|
44
49
|
};
|
|
45
50
|
readonly onAnswer: (selection: QuestionSelection) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanReviewPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/questions/PlanReviewPanel.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"PlanReviewPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/questions/PlanReviewPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAInE,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAa5E,MAAM,MAAM,oBAAoB,GAAG;IACjC,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;YAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;YAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAClJ,CAAA;IACD,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACzD,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;CAC9D,CAAA;AAED,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,qBAAqB,GACtB,EAAE,oBAAoB,GAAG,KAAK,CAAC,SAAS,CA8ZxC"}
|
|
@@ -9,9 +9,12 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
9
9
|
*
|
|
10
10
|
* Protocol-exact answer mapping (dsh-plan-mode):
|
|
11
11
|
* - Approve: `{ selected: [intent.approve] }` — custom MUST be absent, or
|
|
12
|
-
* plan-mode treats it as keep-planning-with-feedback.
|
|
12
|
+
* plan-mode treats it as keep-planning-with-feedback. An asker may name
|
|
13
|
+
* further approving options (`intent.approveAlso`, e.g. Claude's "approve,
|
|
14
|
+
* but keep asking for edits"): they follow the same clean-answer rule.
|
|
13
15
|
* - Keep planning / feedback: `{ selected: [declineLabel], custom? }` where
|
|
14
|
-
* declineLabel is the
|
|
16
|
+
* declineLabel is `intent.decline` when the asker names it, else the first
|
|
17
|
+
* option that does not approve (dsh-plan-mode names none).
|
|
15
18
|
* - Esc / Ctrl+C: the store rejects with ASK_CANCELLED, which plan-mode
|
|
16
19
|
* reads as "the user dismissed the review to speak instead".
|
|
17
20
|
*
|
|
@@ -48,7 +51,9 @@ const ANSWER_PASTE_MAX_POINTS = 8000;
|
|
|
48
51
|
export function PlanReviewPanel({ question, onAnswer, onCancel, readClipboardOverride, }) {
|
|
49
52
|
const options = question.options ?? [];
|
|
50
53
|
const approveLabel = question.intent?.approve ?? options[0]?.label;
|
|
51
|
-
const
|
|
54
|
+
const approveAlso = question.intent?.approveAlso ?? [];
|
|
55
|
+
const approves = (label) => label !== undefined && (label === approveLabel || approveAlso.includes(label));
|
|
56
|
+
const declineLabel = question.intent?.decline ?? options.find(option => !approves(option.label))?.label;
|
|
52
57
|
/** Rows: the asker's options plus the feedback input row at the tail. */
|
|
53
58
|
const rowCount = options.length + 1;
|
|
54
59
|
const [focusIndex, setFocusIndex] = React.useState(0);
|
|
@@ -193,11 +198,11 @@ export function PlanReviewPanel({ question, onAnswer, onCancel, readClipboardOve
|
|
|
193
198
|
if (label === undefined)
|
|
194
199
|
return;
|
|
195
200
|
const text = textRef.current.trim();
|
|
196
|
-
if (label
|
|
201
|
+
if (approves(label) && text !== '') {
|
|
197
202
|
setError(t('plan-review-approve-needs-empty'));
|
|
198
203
|
return;
|
|
199
204
|
}
|
|
200
|
-
if (label
|
|
205
|
+
if (approves(label)) {
|
|
201
206
|
onAnswer({ selected: [label] });
|
|
202
207
|
return;
|
|
203
208
|
}
|
|
@@ -343,7 +348,7 @@ export function PlanReviewPanel({ question, onAnswer, onCancel, readClipboardOve
|
|
|
343
348
|
};
|
|
344
349
|
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, paddingLeft: 2, paddingRight: 2, width: "100%", children: [_jsx(Divider, { color: "permission", title: ` ${question.header ?? t('plan-review-fallback-header')} ` }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, wrap: "wrap", children: question.question }), question.detail !== undefined && detailMax > 0 && (_jsx(Box, { flexDirection: "column", marginTop: 1, height: detailMax, flexShrink: 0, children: _jsx(ScrollBox, { ref: detailScrollRef, flexDirection: "column", flexGrow: 1, height: detailMax, children: _jsx(Markdown, { children: question.detail }) }) }))] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [options.map((option, index) => {
|
|
345
350
|
const focused = index === focusIndex;
|
|
346
|
-
const isApprove = option.label
|
|
351
|
+
const isApprove = approves(option.label);
|
|
347
352
|
return (_jsxs(Box, { flexDirection: "row", marginTop: focused ? 1 : 0, onClick: () => clickOption(index), onMouseEnter: () => setHoverIndex(index), onMouseLeave: () => setHoverIndex(current => (current === index ? -1 : current)), backgroundColor: hoverIndex === index && !focused ? 'userMessageBackgroundHover' : undefined, children: [_jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { color: focused ? 'accent' : undefined, bold: focused, children: focused ? POINTER : ' ' }) }), _jsxs(Box, { flexDirection: "column", marginLeft: 1, children: [_jsxs(Text, { bold: focused, color: focused || isApprove ? 'accent' : undefined, wrap: "wrap", children: [index + 1, ". ", option.label] }), option.description !== undefined && (_jsx(Text, { dimColor: true, wrap: "wrap", children: option.description }))] })] }, option.label));
|
|
348
353
|
}), _jsxs(Box, { flexDirection: "row", marginTop: inputFocused ? 1 : 0, onClick: focusFeedbackRow, onMouseEnter: () => setHoverIndex(options.length), onMouseLeave: () => setHoverIndex(current => (current === options.length ? -1 : current)), backgroundColor: hoverIndex === options.length && !inputFocused ? 'userMessageBackgroundHover' : undefined, children: [_jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { color: inputFocused ? 'accent' : undefined, bold: inputFocused, children: inputFocused ? POINTER : ' ' }) }), _jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { color: inputFocused ? 'accent' : 'suggestion', children: PENCIL }) }), _jsx(Box, { flexDirection: "row", marginLeft: 1, children: feedback === '' && !inputFocused ? (_jsxs(_Fragment, { children: [_jsx(Text, { ref: caretRef, children: ' ' }), _jsx(Text, { dimColor: true, children: t('plan-review-feedback-placeholder') })] })) : (_jsxs(_Fragment, { children: [_jsx(Text, { wrap: "wrap", children: feedbackPoints.slice(0, cursor).join('') }), inputFocused
|
|
349
354
|
? _jsx(Text, { ref: caretRef, inverse: true, children: cursorChar })
|