@deepseek-harness-tui/dsh-tui 0.10.0 → 0.10.1
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 +146 -2
- package/bin/dsh-tui.js +99 -33
- package/cordis.patch.yml +25 -5
- package/lib/types/adapter/channel/actions.d.ts +17 -0
- package/lib/types/adapter/channel/actions.d.ts.map +1 -0
- package/lib/types/adapter/channel/actions.js +28 -0
- package/lib/types/adapter/channel/consumer.d.ts +34 -0
- package/lib/types/adapter/channel/consumer.d.ts.map +1 -0
- package/lib/types/adapter/channel/consumer.js +87 -0
- package/lib/types/adapter/channel/features.d.ts +12 -0
- package/lib/types/adapter/channel/features.d.ts.map +1 -0
- package/lib/types/adapter/channel/features.js +41 -0
- package/lib/types/adapter/channel/host-registry.d.ts +40 -0
- package/lib/types/adapter/channel/host-registry.d.ts.map +1 -0
- package/lib/types/adapter/channel/host-registry.js +120 -0
- package/lib/types/adapter/channel/index.d.ts +22 -0
- package/lib/types/adapter/channel/index.d.ts.map +1 -0
- package/lib/types/adapter/channel/index.js +21 -0
- package/lib/types/adapter/channel/internal-token.d.ts +12 -0
- package/lib/types/adapter/channel/internal-token.d.ts.map +1 -0
- package/lib/types/adapter/channel/internal-token.js +11 -0
- package/lib/types/adapter/channel/plugins.d.ts +17 -0
- package/lib/types/adapter/channel/plugins.d.ts.map +1 -0
- package/lib/types/adapter/channel/plugins.js +47 -0
- package/lib/types/adapter/channel/projection.d.ts +15 -0
- package/lib/types/adapter/channel/projection.d.ts.map +1 -0
- package/lib/types/adapter/channel/projection.js +59 -0
- package/lib/types/adapter/channel/provider.d.ts +52 -0
- package/lib/types/adapter/channel/provider.d.ts.map +1 -0
- package/lib/types/adapter/channel/provider.js +231 -0
- package/lib/types/adapter/channel/read-view.d.ts +4 -0
- package/lib/types/adapter/channel/read-view.d.ts.map +1 -0
- package/lib/types/adapter/channel/read-view.js +132 -0
- package/lib/types/adapter/channel/session-projection.d.ts +56 -0
- package/lib/types/adapter/channel/session-projection.d.ts.map +1 -0
- package/lib/types/adapter/channel/session-projection.js +247 -0
- package/lib/types/adapter/channel/state.d.ts +11 -0
- package/lib/types/adapter/channel/state.d.ts.map +1 -0
- package/lib/types/adapter/channel/state.js +55 -0
- package/lib/types/adapter/channel/transcript.d.ts +15 -0
- package/lib/types/adapter/channel/transcript.d.ts.map +1 -0
- package/lib/types/adapter/channel/transcript.js +22 -0
- package/lib/types/adapter/channel/ui-policy.d.ts +106 -0
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -0
- package/lib/types/adapter/channel/ui-policy.js +166 -0
- package/lib/types/adapter/channel/ui.d.ts +16 -0
- package/lib/types/adapter/channel/ui.d.ts.map +1 -0
- package/lib/types/adapter/channel/ui.js +168 -0
- package/lib/types/adapter/index.d.ts +20 -0
- package/lib/types/adapter/index.d.ts.map +1 -0
- package/lib/types/adapter/index.js +19 -0
- package/lib/types/adapter/kernel/contract-catalog.d.ts +12 -0
- package/lib/types/adapter/kernel/contract-catalog.d.ts.map +1 -0
- package/lib/types/adapter/kernel/contract-catalog.js +11 -0
- package/lib/types/adapter/kernel/diagnostics.d.ts +18 -0
- package/lib/types/adapter/kernel/diagnostics.d.ts.map +1 -0
- package/lib/types/adapter/kernel/diagnostics.js +16 -0
- package/lib/types/adapter/kernel/driver-types.d.ts +16 -0
- package/lib/types/adapter/kernel/driver-types.d.ts.map +1 -0
- package/lib/types/adapter/kernel/driver-types.js +8 -0
- package/lib/types/adapter/kernel/host-facade.d.ts +65 -0
- package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -0
- package/lib/types/adapter/kernel/host-facade.js +215 -0
- package/lib/types/adapter/kernel/host-probe-access.d.ts +71 -0
- package/lib/types/adapter/kernel/host-probe-access.d.ts.map +1 -0
- package/lib/types/adapter/kernel/host-probe-access.js +121 -0
- package/lib/types/adapter/kernel/index.d.ts +20 -0
- package/lib/types/adapter/kernel/index.d.ts.map +1 -0
- package/lib/types/adapter/kernel/index.js +19 -0
- package/lib/types/adapter/kernel/kernel-runtime.d.ts +138 -0
- package/lib/types/adapter/kernel/kernel-runtime.d.ts.map +1 -0
- package/lib/types/adapter/kernel/kernel-runtime.js +572 -0
- package/lib/types/adapter/kernel/ledger.d.ts +55 -0
- package/lib/types/adapter/kernel/ledger.d.ts.map +1 -0
- package/lib/types/adapter/kernel/ledger.js +33 -0
- package/lib/types/adapter/kernel/legacy-facade.d.ts +22 -0
- package/lib/types/adapter/kernel/legacy-facade.d.ts.map +1 -0
- package/lib/types/adapter/kernel/legacy-facade.js +34 -0
- package/lib/types/adapter/kernel/lifecycle.d.ts +38 -0
- package/lib/types/adapter/kernel/lifecycle.d.ts.map +1 -0
- package/lib/types/adapter/kernel/lifecycle.js +53 -0
- package/lib/types/adapter/kernel/replay-isolation.d.ts +27 -0
- package/lib/types/adapter/kernel/replay-isolation.d.ts.map +1 -0
- package/lib/types/adapter/kernel/replay-isolation.js +45 -0
- package/lib/types/adapter/kernel/replay.d.ts +132 -0
- package/lib/types/adapter/kernel/replay.d.ts.map +1 -0
- package/lib/types/adapter/kernel/replay.js +425 -0
- package/lib/types/adapter/kernel/runtime-context.d.ts +15 -0
- package/lib/types/adapter/kernel/runtime-context.d.ts.map +1 -0
- package/lib/types/adapter/kernel/runtime-context.js +24 -0
- package/lib/types/adapter/kernel/runtime.d.ts +70 -0
- package/lib/types/adapter/kernel/runtime.d.ts.map +1 -0
- package/lib/types/adapter/kernel/runtime.js +325 -0
- package/lib/types/adapter/kernel/slices/channel.d.ts +3 -0
- package/lib/types/adapter/kernel/slices/channel.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/channel.js +8 -0
- package/lib/types/adapter/kernel/slices/decisions.d.ts +3 -0
- package/lib/types/adapter/kernel/slices/decisions.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/decisions.js +10 -0
- package/lib/types/adapter/kernel/slices/extensions.d.ts +8 -0
- package/lib/types/adapter/kernel/slices/extensions.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/extensions.js +43 -0
- package/lib/types/adapter/kernel/slices/index.d.ts +19 -0
- package/lib/types/adapter/kernel/slices/index.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/index.js +36 -0
- package/lib/types/adapter/kernel/slices/presentation.d.ts +3 -0
- package/lib/types/adapter/kernel/slices/presentation.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/presentation.js +14 -0
- package/lib/types/adapter/kernel/slices/scenes.d.ts +3 -0
- package/lib/types/adapter/kernel/slices/scenes.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/scenes.js +14 -0
- package/lib/types/adapter/kernel/slices/settings.d.ts +3 -0
- package/lib/types/adapter/kernel/slices/settings.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/settings.js +12 -0
- package/lib/types/adapter/kernel/slices/types.d.ts +20 -0
- package/lib/types/adapter/kernel/slices/types.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/types.js +12 -0
- package/lib/types/adapter/kernel/slices/workspace.d.ts +3 -0
- package/lib/types/adapter/kernel/slices/workspace.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/workspace.js +15 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts +90 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-catalog.js +2 -0
- package/lib/types/adapter/ports/channel-display.d.ts +90 -0
- package/lib/types/adapter/ports/channel-display.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-display.js +2 -0
- package/lib/types/adapter/ports/channel-session.d.ts +227 -0
- package/lib/types/adapter/ports/channel-session.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-session.js +2 -0
- package/lib/types/adapter/ports/channel-settings.d.ts +273 -0
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-settings.js +1 -0
- package/lib/types/adapter/ports/channel-ui.d.ts +569 -0
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-ui.js +1 -0
- package/lib/types/adapter/ports/channel-view.d.ts +609 -0
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-view.js +2 -0
- package/lib/types/adapter/ports/channel-workspace.d.ts +45 -0
- package/lib/types/adapter/ports/channel-workspace.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-workspace.js +2 -0
- package/lib/types/adapter/ports/channel.d.ts +145 -0
- package/lib/types/adapter/ports/channel.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel.js +22 -0
- package/lib/types/adapter/ports/decisions.d.ts +18 -0
- package/lib/types/adapter/ports/decisions.d.ts.map +1 -0
- package/lib/types/adapter/ports/decisions.js +9 -0
- package/lib/types/adapter/ports/descriptor.d.ts +25 -0
- package/lib/types/adapter/ports/descriptor.d.ts.map +1 -0
- package/lib/types/adapter/ports/descriptor.js +11 -0
- package/lib/types/adapter/ports/extensions.d.ts +86 -0
- package/lib/types/adapter/ports/extensions.d.ts.map +1 -0
- package/lib/types/adapter/ports/extensions.js +9 -0
- package/lib/types/adapter/ports/index.d.ts +23 -0
- package/lib/types/adapter/ports/index.d.ts.map +1 -0
- package/lib/types/adapter/ports/index.js +14 -0
- package/lib/types/adapter/ports/owner.d.ts +19 -0
- package/lib/types/adapter/ports/owner.d.ts.map +1 -0
- package/lib/types/adapter/ports/owner.js +9 -0
- package/lib/types/adapter/ports/presentation.d.ts +81 -0
- package/lib/types/adapter/ports/presentation.d.ts.map +1 -0
- package/lib/types/adapter/ports/presentation.js +10 -0
- package/lib/types/adapter/ports/scenes.d.ts +24 -0
- package/lib/types/adapter/ports/scenes.d.ts.map +1 -0
- package/lib/types/adapter/ports/scenes.js +8 -0
- package/lib/types/adapter/ports/settings.d.ts +44 -0
- package/lib/types/adapter/ports/settings.d.ts.map +1 -0
- package/lib/types/adapter/ports/settings.js +9 -0
- package/lib/types/adapter/ports/workspace.d.ts +60 -0
- package/lib/types/adapter/ports/workspace.d.ts.map +1 -0
- package/lib/types/adapter/ports/workspace.js +8 -0
- package/lib/types/adapter/spec/index.d.ts +11 -0
- package/lib/types/adapter/spec/index.d.ts.map +1 -0
- package/lib/types/adapter/spec/index.js +10 -0
- package/lib/types/adapter/spec/profile.d.ts +10 -0
- package/lib/types/adapter/spec/profile.d.ts.map +1 -0
- package/lib/types/adapter/spec/profile.js +9 -0
- package/lib/types/adapter/spec/protocol-constants.d.ts +60 -0
- package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -0
- package/lib/types/adapter/spec/protocol-constants.js +129 -0
- package/lib/types/adapter/spec/tui-contributions.d.ts +18 -0
- package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -0
- package/lib/types/adapter/spec/tui-contributions.js +19 -0
- package/lib/types/adapter/standard/admission.d.ts +11 -0
- package/lib/types/adapter/standard/admission.d.ts.map +1 -0
- package/lib/types/adapter/standard/admission.js +10 -0
- package/lib/types/adapter/standard/descriptor.d.ts +74 -0
- package/lib/types/adapter/standard/descriptor.d.ts.map +1 -0
- package/lib/types/adapter/standard/descriptor.js +356 -0
- package/lib/types/{dsh-adapter → adapter/standard}/grants.d.ts +8 -3
- package/lib/types/adapter/standard/grants.d.ts.map +1 -0
- package/lib/types/{dsh-adapter → adapter/standard}/grants.js +14 -8
- package/lib/types/adapter/standard/index.d.ts +25 -0
- package/lib/types/adapter/standard/index.d.ts.map +1 -0
- package/lib/types/adapter/standard/index.js +24 -0
- package/lib/types/adapter/standard/negotiate.d.ts.map +1 -0
- package/lib/types/{plugin-spec → adapter/standard}/permission-scope.d.ts +3 -8
- package/lib/types/adapter/standard/permission-scope.d.ts.map +1 -0
- package/lib/types/{plugin-spec → adapter/standard}/permission-scope.js +4 -26
- package/lib/types/adapter/standard/protocols.d.ts +12 -0
- package/lib/types/adapter/standard/protocols.d.ts.map +1 -0
- package/lib/types/adapter/standard/protocols.js +11 -0
- package/lib/types/adapter/standard/registry.d.ts.map +1 -0
- package/lib/types/{plugin-spec → adapter/standard}/registry.js +3 -15
- package/lib/types/adapter/standard/schema-check.d.ts.map +1 -0
- package/lib/types/{plugin-spec → adapter/standard}/schema-check.js +4 -2
- package/lib/types/adapter/standard/tui-extension.d.ts +25 -0
- package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -0
- package/lib/types/adapter/standard/tui-extension.js +45 -0
- package/lib/types/{plugin-spec → adapter/standard}/types.d.ts +3 -9
- package/lib/types/adapter/standard/types.d.ts.map +1 -0
- package/lib/types/{plugin-spec → adapter/standard}/validate.d.ts +3 -3
- package/lib/types/adapter/standard/validate.d.ts.map +1 -0
- package/lib/types/{plugin-spec → adapter/standard}/validate.js +14 -13
- package/lib/types/adapter/upstream/channel-driver.d.ts +22 -0
- package/lib/types/adapter/upstream/channel-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/channel-driver.js +424 -0
- package/lib/types/adapter/upstream/decisions-driver.d.ts +15 -0
- package/lib/types/adapter/upstream/decisions-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/decisions-driver.js +141 -0
- package/lib/types/adapter/upstream/detection.d.ts +26 -0
- package/lib/types/adapter/upstream/detection.d.ts.map +1 -0
- package/lib/types/adapter/upstream/detection.js +9 -0
- package/lib/types/adapter/upstream/driver.d.ts +50 -0
- package/lib/types/adapter/upstream/driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/driver.js +8 -0
- package/lib/types/adapter/upstream/extensions-driver.d.ts +24 -0
- package/lib/types/adapter/upstream/extensions-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/extensions-driver.js +697 -0
- package/lib/types/adapter/upstream/host-descriptor-driver.d.ts +45 -0
- package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/host-descriptor-driver.js +606 -0
- package/lib/types/adapter/upstream/index.d.ts +18 -0
- package/lib/types/adapter/upstream/index.d.ts.map +1 -0
- package/lib/types/adapter/upstream/index.js +15 -0
- package/lib/types/adapter/upstream/presentation-driver.d.ts +17 -0
- package/lib/types/adapter/upstream/presentation-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/presentation-driver.js +129 -0
- package/lib/types/adapter/upstream/scenes-driver.d.ts +18 -0
- package/lib/types/adapter/upstream/scenes-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/scenes-driver.js +170 -0
- package/lib/types/adapter/upstream/settings-driver.d.ts +20 -0
- package/lib/types/adapter/upstream/settings-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/settings-driver.js +173 -0
- package/lib/types/adapter/upstream/workspace-driver.d.ts +19 -0
- package/lib/types/adapter/upstream/workspace-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/workspace-driver.js +190 -0
- package/lib/types/api.d.ts +1 -1
- package/lib/types/api.d.ts.map +1 -1
- package/lib/types/commands.d.ts +2 -41
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +1 -1
- package/lib/types/components/GoalTodoPanel.d.ts +2 -1
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/HistorySearchDialog.d.ts.map +1 -1
- package/lib/types/components/HistorySearchDialog.js +7 -5
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +36 -8
- package/lib/types/components/ModelPicker.d.ts +1 -1
- package/lib/types/components/ModelPicker.d.ts.map +1 -1
- package/lib/types/components/ModelPicker.js +8 -4
- package/lib/types/components/OverlayAbove.d.ts +22 -1
- package/lib/types/components/OverlayAbove.d.ts.map +1 -1
- package/lib/types/components/OverlayAbove.js +74 -5
- package/lib/types/components/PromptInput.d.ts +2 -1
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/RewindPicker.d.ts.map +1 -1
- package/lib/types/components/RewindPicker.js +14 -6
- package/lib/types/components/SkillsPicker.d.ts.map +1 -1
- package/lib/types/components/SkillsPicker.js +6 -4
- package/lib/types/components/Spinner/spinnerMode.d.ts +1 -5
- package/lib/types/components/Spinner/spinnerMode.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemedBox.d.ts +4 -2
- package/lib/types/components/design-system/ThemedBox.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemedBox.js +2 -2
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +69 -25
- package/lib/types/components/overlayBudget.d.ts +39 -0
- package/lib/types/components/overlayBudget.d.ts.map +1 -0
- package/lib/types/components/overlayBudget.js +43 -0
- package/lib/types/deepseekBalance.d.ts +2 -36
- package/lib/types/deepseekBalance.d.ts.map +1 -1
- package/lib/types/deepseekBalance.js +0 -14
- package/lib/types/deepseekPricing.d.ts +2 -1
- package/lib/types/deepseekPricing.d.ts.map +1 -1
- package/lib/types/deepseekPricing.js +8 -1
- package/lib/types/dsh-adapter/approvals.d.ts +11 -1
- package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
- package/lib/types/dsh-adapter/approvals.js +32 -12
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts +20 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/action-readiness.js +83 -0
- package/lib/types/dsh-adapter/channel/activity.d.ts +20 -0
- package/lib/types/dsh-adapter/channel/activity.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/activity.js +113 -0
- package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts +64 -0
- package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/agent-view-projection.js +295 -0
- package/lib/types/dsh-adapter/channel/background-action.d.ts +41 -0
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/background-action.js +86 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +60 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/binding-events.js +159 -0
- package/lib/types/dsh-adapter/channel/binding.d.ts +41 -0
- package/lib/types/dsh-adapter/channel/binding.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/binding.js +227 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts +29 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/command-completions.js +94 -0
- package/lib/types/dsh-adapter/channel/commands.d.ts +8 -0
- package/lib/types/dsh-adapter/channel/commands.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/commands.js +9 -0
- package/lib/types/dsh-adapter/channel/compaction.d.ts +19 -0
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/compaction.js +116 -0
- package/lib/types/dsh-adapter/channel/composer-images.d.ts +57 -0
- package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/composer-images.js +217 -0
- package/lib/types/dsh-adapter/channel/composer-mentions.d.ts +15 -0
- package/lib/types/dsh-adapter/channel/composer-mentions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/composer-mentions.js +200 -0
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +26 -0
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/context-bookkeeping.js +30 -0
- package/lib/types/dsh-adapter/channel/decisions.d.ts +19 -0
- package/lib/types/dsh-adapter/channel/decisions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/decisions.js +90 -0
- package/lib/types/dsh-adapter/channel/emitter.d.ts +10 -0
- package/lib/types/dsh-adapter/channel/emitter.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/emitter.js +71 -0
- package/lib/types/dsh-adapter/channel/external-commands.d.ts +31 -0
- package/lib/types/dsh-adapter/channel/external-commands.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/external-commands.js +187 -0
- package/lib/types/dsh-adapter/channel/file-actions.d.ts +20 -0
- package/lib/types/dsh-adapter/channel/file-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/file-actions.js +45 -0
- package/lib/types/dsh-adapter/channel/input-actions.d.ts +13 -0
- package/lib/types/dsh-adapter/channel/input-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/input-actions.js +135 -0
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +34 -0
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/input-delivery.js +241 -0
- package/lib/types/dsh-adapter/channel/job-projection.d.ts +28 -0
- package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/job-projection.js +150 -0
- package/lib/types/dsh-adapter/channel/lifetime-resources.d.ts +9 -0
- package/lib/types/dsh-adapter/channel/lifetime-resources.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/lifetime-resources.js +33 -0
- package/lib/types/dsh-adapter/channel/loaded-context.d.ts +40 -0
- package/lib/types/dsh-adapter/channel/loaded-context.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/loaded-context.js +62 -0
- package/lib/types/dsh-adapter/channel/local-actions.d.ts +70 -0
- package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/local-actions.js +108 -0
- package/lib/types/dsh-adapter/channel/mentions.d.ts +29 -0
- package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/mentions.js +235 -0
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts +30 -0
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/mode-actions.js +247 -0
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +35 -0
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/mode-permission-actions.js +199 -0
- package/lib/types/dsh-adapter/channel/mode-permission.d.ts +58 -0
- package/lib/types/dsh-adapter/channel/mode-permission.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/mode-permission.js +240 -0
- package/lib/types/dsh-adapter/channel/mode-roster.d.ts +51 -0
- package/lib/types/dsh-adapter/channel/mode-roster.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/mode-roster.js +119 -0
- package/lib/types/dsh-adapter/channel/model-actions.d.ts +46 -0
- package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/model-actions.js +275 -0
- package/lib/types/dsh-adapter/channel/model-switch.d.ts +32 -0
- package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/model-switch.js +98 -0
- package/lib/types/dsh-adapter/channel/notifications.d.ts +9 -0
- package/lib/types/dsh-adapter/channel/notifications.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/notifications.js +24 -0
- package/lib/types/dsh-adapter/channel/owner.d.ts +18 -0
- package/lib/types/dsh-adapter/channel/owner.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/owner.js +73 -0
- package/lib/types/dsh-adapter/channel/paths.d.ts +31 -0
- package/lib/types/dsh-adapter/channel/paths.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/paths.js +147 -0
- package/lib/types/dsh-adapter/channel/permissions.d.ts +40 -0
- package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/permissions.js +184 -0
- package/lib/types/dsh-adapter/channel/preferences.d.ts +3 -0
- package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/preferences.js +103 -0
- package/lib/types/dsh-adapter/channel/projection-helpers.d.ts +13 -0
- package/lib/types/dsh-adapter/channel/projection-helpers.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/projection-helpers.js +63 -0
- package/lib/types/dsh-adapter/channel/projection.d.ts +40 -0
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/projection.js +1021 -0
- package/lib/types/dsh-adapter/channel/reports.d.ts +32 -0
- package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/reports.js +171 -0
- package/lib/types/dsh-adapter/channel/session-actions.d.ts +13 -0
- package/lib/types/dsh-adapter/channel/session-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-actions.js +29 -0
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts +32 -0
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-adoption.js +35 -0
- package/lib/types/dsh-adapter/channel/session-fork.d.ts +19 -0
- package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-fork.js +85 -0
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +32 -0
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-live-adoption.js +62 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +81 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-metadata.js +209 -0
- package/lib/types/dsh-adapter/channel/session-reset.d.ts +11 -0
- package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-reset.js +44 -0
- package/lib/types/dsh-adapter/channel/session-resume.d.ts +56 -0
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-resume.js +240 -0
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts +19 -0
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-rewind.js +121 -0
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts +19 -0
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-tree-actions.js +132 -0
- package/lib/types/dsh-adapter/channel/session-tree.d.ts +10 -0
- package/lib/types/dsh-adapter/channel/session-tree.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-tree.js +503 -0
- package/lib/types/dsh-adapter/channel/settings-host.d.ts +4 -0
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/settings-host.js +256 -0
- package/lib/types/dsh-adapter/channel/skill-catalog.d.ts +27 -0
- package/lib/types/dsh-adapter/channel/skill-catalog.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/skill-catalog.js +183 -0
- package/lib/types/dsh-adapter/channel/state.d.ts +46 -0
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/state.js +31 -0
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +47 -0
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/subagent-projection.js +140 -0
- package/lib/types/dsh-adapter/channel/transcript.d.ts +73 -0
- package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/transcript.js +312 -0
- package/lib/types/dsh-adapter/channel/types.d.ts +162 -0
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/types.js +1 -0
- package/lib/types/dsh-adapter/channel/usage.d.ts +13 -0
- package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/usage.js +48 -0
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts +20 -0
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/workspace-actions.js +56 -0
- package/lib/types/dsh-adapter/channel-facade-actions.d.ts +25 -0
- package/lib/types/dsh-adapter/channel-facade-actions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel-facade-actions.js +55 -0
- package/lib/types/dsh-adapter/channel-scene-outlet.d.ts +6 -0
- package/lib/types/dsh-adapter/channel-scene-outlet.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel-scene-outlet.js +13 -0
- package/lib/types/dsh-adapter/channel-ui.d.ts +9 -0
- package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel-ui.js +128 -0
- package/lib/types/dsh-adapter/channel.d.ts +9 -1525
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +750 -8145
- package/lib/types/dsh-adapter/command-trees.d.ts +1 -0
- package/lib/types/dsh-adapter/command-trees.d.ts.map +1 -1
- package/lib/types/dsh-adapter/command-trees.js +20 -1
- package/lib/types/dsh-adapter/compat/liveSession.d.ts +3 -1
- package/lib/types/dsh-adapter/compat/liveSession.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/liveSession.js +23 -0
- package/lib/types/dsh-adapter/compat/persistence.d.ts +21 -0
- package/lib/types/dsh-adapter/compat/persistence.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/persistence.js +17 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts +50 -11
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/sessionLog.js +325 -36
- package/lib/types/dsh-adapter/component-identity.d.ts +1 -1
- package/lib/types/dsh-adapter/component-identity.d.ts.map +1 -1
- package/lib/types/dsh-adapter/component-identity.js +1 -1
- package/lib/types/dsh-adapter/contract.d.ts +11 -9
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +19 -12
- package/lib/types/dsh-adapter/decision-guard.d.ts +56 -12
- package/lib/types/dsh-adapter/decision-guard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/decision-guard.js +134 -22
- package/lib/types/dsh-adapter/dialogs.d.ts.map +1 -1
- package/lib/types/dsh-adapter/dialogs.js +13 -0
- package/lib/types/dsh-adapter/effect-ledger.d.ts +5 -0
- package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
- package/lib/types/dsh-adapter/effect-ledger.js +53 -15
- package/lib/types/dsh-adapter/extension-events.d.ts +2 -9
- package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/extension-events.js +0 -20
- package/lib/types/dsh-adapter/extensions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/extensions.js +3 -2
- package/lib/types/dsh-adapter/host-grants.d.ts +23 -0
- package/lib/types/dsh-adapter/host-grants.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-grants.js +45 -0
- package/lib/types/dsh-adapter/jobs.d.ts +2 -46
- package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
- package/lib/types/dsh-adapter/jobs.js +0 -25
- package/lib/types/dsh-adapter/message-observer.d.ts +15 -2
- package/lib/types/dsh-adapter/message-observer.d.ts.map +1 -1
- package/lib/types/dsh-adapter/message-observer.js +157 -28
- package/lib/types/dsh-adapter/plugin-host.d.ts +80 -11
- package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin-host.js +438 -41
- package/lib/types/dsh-adapter/plugin-storage.d.ts +11 -1
- package/lib/types/dsh-adapter/plugin-storage.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin-storage.js +150 -11
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +75 -34
- package/lib/types/dsh-adapter/plugins-info.d.ts +2 -2
- package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugins-info.js +11 -6
- package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/presets.js +3 -2
- package/lib/types/dsh-adapter/providerWizard.d.ts +2 -159
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/questions.d.ts +8 -0
- package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/questions.js +18 -0
- package/lib/types/dsh-adapter/recap.d.ts +1 -9
- package/lib/types/dsh-adapter/recap.d.ts.map +1 -1
- package/lib/types/dsh-adapter/recap.js +0 -14
- package/lib/types/dsh-adapter/renderers.d.ts +1 -0
- package/lib/types/dsh-adapter/renderers.d.ts.map +1 -1
- package/lib/types/dsh-adapter/renderers.js +26 -1
- package/lib/types/dsh-adapter/scenes.d.ts +3 -1
- package/lib/types/dsh-adapter/scenes.d.ts.map +1 -1
- package/lib/types/dsh-adapter/scenes.js +31 -0
- package/lib/types/dsh-adapter/sessionTree.d.ts +14 -95
- package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessionTree.js +51 -36
- package/lib/types/dsh-adapter/sessions/index.d.ts +1 -1
- package/lib/types/dsh-adapter/sessions/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/index.js +1 -1
- package/lib/types/dsh-adapter/sessions/list.d.ts +23 -0
- package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/list.js +25 -14
- package/lib/types/dsh-adapter/sessions/types.d.ts +2 -128
- package/lib/types/dsh-adapter/sessions/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/types.js +0 -13
- package/lib/types/dsh-adapter/settings-sections.d.ts +4 -95
- package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
- package/lib/types/dsh-adapter/settings-sections.js +50 -13
- package/lib/types/dsh-adapter/settingsEditor.d.ts +2 -36
- package/lib/types/dsh-adapter/settingsEditor.d.ts.map +1 -1
- package/lib/types/dsh-adapter/settingsEditor.js +0 -18
- package/lib/types/dsh-adapter/shortcuts.d.ts +5 -0
- package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
- package/lib/types/dsh-adapter/shortcuts.js +49 -0
- package/lib/types/dsh-adapter/status.d.ts +5 -0
- package/lib/types/dsh-adapter/status.d.ts.map +1 -1
- package/lib/types/dsh-adapter/status.js +29 -0
- package/lib/types/dsh-adapter/subagents.d.ts +9 -49
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +92 -1
- package/lib/types/dsh-adapter/themes.d.ts +1 -0
- package/lib/types/dsh-adapter/themes.d.ts.map +1 -1
- package/lib/types/dsh-adapter/themes.js +29 -0
- package/lib/types/dsh-adapter/toast.d.ts +13 -0
- package/lib/types/dsh-adapter/toast.d.ts.map +1 -1
- package/lib/types/dsh-adapter/toast.js +31 -1
- package/lib/types/dsh-adapter/trajectory/aggregate.d.ts +2 -1
- package/lib/types/dsh-adapter/trajectory/aggregate.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/aggregate.js +2 -1
- package/lib/types/dsh-adapter/trajectory/guards.d.ts +37 -18
- package/lib/types/dsh-adapter/trajectory/guards.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/guards.js +43 -5
- package/lib/types/dsh-adapter/trajectory/inspect.d.ts +2 -2
- package/lib/types/dsh-adapter/trajectory/inspect.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/projection.d.ts +31 -13
- package/lib/types/dsh-adapter/trajectory/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/trajectory/projection.js +71 -14
- package/lib/types/dsh-adapter/trajectory/types.d.ts +1 -1
- package/lib/types/dsh-adapter/trajectory/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/transcript-images.d.ts +2 -19
- package/lib/types/dsh-adapter/transcript-images.d.ts.map +1 -1
- package/lib/types/dsh-adapter/workspaces.d.ts +2 -49
- package/lib/types/dsh-adapter/workspaces.d.ts.map +1 -1
- package/lib/types/dsh-adapter/workspaces.js +23 -3
- package/lib/types/i18n.d.ts +19 -7
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +8 -3
- package/lib/types/ink/render-node-to-output.d.ts +24 -1
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +103 -4
- package/lib/types/ink/renderer.d.ts.map +1 -1
- package/lib/types/ink/renderer.js +14 -2
- package/lib/types/ink/styles.d.ts +12 -0
- package/lib/types/ink/styles.d.ts.map +1 -1
- package/lib/types/modelGroups.d.ts +1 -1
- package/lib/types/modelGroups.d.ts.map +1 -1
- package/lib/types/modelRoute.js +1 -1
- package/lib/types/plugin-host.d.ts +3 -4
- package/lib/types/plugin-host.d.ts.map +1 -1
- package/lib/types/plugin-host.js +8 -6
- package/lib/types/screens/AgentView.d.ts +1 -1
- package/lib/types/screens/AgentView.d.ts.map +1 -1
- package/lib/types/screens/Chat.d.ts +3 -2
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +71 -9
- package/lib/types/screens/SessionBrowser.d.ts +1 -1
- package/lib/types/screens/SessionBrowser.d.ts.map +1 -1
- package/lib/types/screens/SessionTree.d.ts +1 -1
- package/lib/types/screens/SessionTree.d.ts.map +1 -1
- package/lib/types/screens/Settings.d.ts +1 -1
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.d.ts +1 -1
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +40 -1
- package/lib/types/screens/TrajectoryScene.d.ts +1 -1
- package/lib/types/screens/TrajectoryScene.d.ts.map +1 -1
- package/lib/types/sessionModes.d.ts +11 -15
- package/lib/types/sessionModes.d.ts.map +1 -1
- package/lib/types/sessionModes.js +11 -0
- package/lib/types/tuiDisplayPrefs.d.ts +2 -68
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +5 -1
- package/lib/types/utils/credentials.d.ts +13 -0
- package/lib/types/utils/credentials.d.ts.map +1 -0
- package/lib/types/utils/credentials.js +41 -0
- package/lib/types/utils/fileSuggestions.d.ts +2 -9
- package/lib/types/utils/fileSuggestions.d.ts.map +1 -1
- package/lib/types/utils/fold-long-lines.d.ts +38 -0
- package/lib/types/utils/fold-long-lines.d.ts.map +1 -0
- package/lib/types/utils/fold-long-lines.js +91 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/pi-ai.d.ts +1 -1
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.js +4 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.js +15 -2
- package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +10 -10
- package/package.json +124 -81
- package/presets/liangshen/.dsh-tui-managed.json +1 -1
- package/presets/liangshen/agent.cordis.yml +20 -4
- package/presets/liangshen/compaction-epoch.mjs +3 -1
- package/presets/liangshen/instruction-hint.mjs +2 -1
- package/presets/liangshen/session-events.mjs +8 -0
- package/lib/types/dsh-adapter/grants.d.ts.map +0 -1
- package/lib/types/dsh-adapter/host-descriptor.d.ts +0 -24
- package/lib/types/dsh-adapter/host-descriptor.d.ts.map +0 -1
- package/lib/types/dsh-adapter/host-descriptor.js +0 -169
- package/lib/types/dsh-adapter/plugin-test-utils.d.ts +0 -62
- package/lib/types/dsh-adapter/plugin-test-utils.d.ts.map +0 -1
- package/lib/types/dsh-adapter/plugin-test-utils.js +0 -61
- package/lib/types/plugin-spec/negotiate.d.ts.map +0 -1
- package/lib/types/plugin-spec/permission-scope.d.ts.map +0 -1
- package/lib/types/plugin-spec/registry.d.ts.map +0 -1
- package/lib/types/plugin-spec/schema-check.d.ts.map +0 -1
- package/lib/types/plugin-spec/tui-extension.d.ts +0 -16
- package/lib/types/plugin-spec/tui-extension.d.ts.map +0 -1
- package/lib/types/plugin-spec/tui-extension.js +0 -79
- package/lib/types/plugin-spec/types.d.ts.map +0 -1
- package/lib/types/plugin-spec/validate.d.ts.map +0 -1
- package/lib/types/test-utils.d.ts +0 -2
- package/lib/types/test-utils.d.ts.map +0 -1
- package/lib/types/test-utils.js +0 -8
- /package/lib/types/{plugin-spec → adapter/standard}/negotiate.d.ts +0 -0
- /package/lib/types/{plugin-spec → adapter/standard}/negotiate.js +0 -0
- /package/lib/types/{plugin-spec → adapter/standard}/registry.d.ts +0 -0
- /package/lib/types/{plugin-spec → adapter/standard}/schema-check.d.ts +0 -0
- /package/lib/types/{plugin-spec → adapter/standard}/types.js +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import { type SessionModeSpec } from '../../sessionModes.js';
|
|
3
|
+
import type { createChannelBinding } from './binding.js';
|
|
4
|
+
import { createModeActions } from './mode-actions.js';
|
|
5
|
+
import { type PermissionIdentity } from './mode-permission.js';
|
|
6
|
+
import type { PermissionModeRoster } from './mode-roster.js';
|
|
7
|
+
import type { ChannelState } from './types.js';
|
|
8
|
+
type Binding = ReturnType<typeof createChannelBinding>;
|
|
9
|
+
type ModeState = Pick<ChannelState, 'mode' | 'modeIndex' | 'emit'>;
|
|
10
|
+
type ModeCapture = ReturnType<Binding['capture']>;
|
|
11
|
+
/** The composition seam `createModeActions` owns; this factory forwards every
|
|
12
|
+
* member verbatim so both stay in lockstep. */
|
|
13
|
+
type BaseModeActionDeps = Parameters<typeof createModeActions>[2];
|
|
14
|
+
/**
|
|
15
|
+
* Permission-aware session-mode actions: main's mode transition (plan
|
|
16
|
+
* exclusivity, atom application, plan-exit restore) composed with the durable
|
|
17
|
+
* permission identity, on top of the refactored `createModeActions`.
|
|
18
|
+
*
|
|
19
|
+
* Construction is inert. The returned shape is a superset of
|
|
20
|
+
* `ReturnType<typeof createModeActions>`, so the composition root and
|
|
21
|
+
* `createBindingEvents` can consume it unchanged, plus
|
|
22
|
+
* `runPermissionPreset` for the public `ChannelUi` surface.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createPermissionModeActions(ctx: Context, state: ModeState, deps: Pick<BaseModeActionDeps, 'owner' | 'runtime' | 'binding' | 'sessionModes' | 'commandService' | 'executeRegistryCommand' | 'notify'> & {
|
|
25
|
+
roster: PermissionModeRoster;
|
|
26
|
+
}): {
|
|
27
|
+
refreshMode(): void;
|
|
28
|
+
cycleMode(): Promise<void>;
|
|
29
|
+
applyMode(spec: SessionModeSpec, capture?: ModeCapture): Promise<void>;
|
|
30
|
+
onSessionEvent(session: unknown, event: unknown): void;
|
|
31
|
+
runPermissionPreset(name: string): Promise<boolean>;
|
|
32
|
+
permission: PermissionIdentity;
|
|
33
|
+
};
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=mode-permission-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-permission-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/mode-permission-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAkD,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACtD,KAAK,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,CAAA;AAClE,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;AACjD;gDACgD;AAChD,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;AAmEjE;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,IAAI,CACR,kBAAkB,EAClB,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,gBAAgB,GAAG,wBAAwB,GAAG,QAAQ,CAC1G,GAAG;IAAE,MAAM,EAAE,oBAAoB,CAAA;CAAE,GACnC;IACD,WAAW,IAAI,IAAI,CAAA;IACnB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACtD,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACnD,UAAU,EAAE,kBAAkB,CAAA;CAC/B,CAuHA"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { assertShadowPolicy } from '../../adapter/kernel/runtime.js';
|
|
2
|
+
import { t } from '../../i18n.js';
|
|
3
|
+
import { modeDisplayName } from '../../sessionModes.js';
|
|
4
|
+
import { snapshotLiveSessionEvents } from '../compat/liveSession.js';
|
|
5
|
+
import { createModeActions } from './mode-actions.js';
|
|
6
|
+
import { createPermissionIdentity, foldPermissionPreset } from './mode-permission.js';
|
|
7
|
+
// Atom folds mirrored from mode-actions.ts: `createModeActions` does not
|
|
8
|
+
// export them, and the permission-aware derive below must reproduce its
|
|
9
|
+
// atom fallback exactly to stay the single source of the indicator.
|
|
10
|
+
const foldPlanActive = (events) => {
|
|
11
|
+
let active = false;
|
|
12
|
+
for (const event of events) {
|
|
13
|
+
if (event.type === 'plan/mode') {
|
|
14
|
+
active = event.data.active === true;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return active;
|
|
18
|
+
};
|
|
19
|
+
const foldSandboxMode = (events) => {
|
|
20
|
+
let mode;
|
|
21
|
+
for (const event of events) {
|
|
22
|
+
if (event.type === 'sandbox/mode') {
|
|
23
|
+
const value = event.data.mode;
|
|
24
|
+
if (typeof value === 'string')
|
|
25
|
+
mode = value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return mode;
|
|
29
|
+
};
|
|
30
|
+
const foldApprovalPolicy = (events) => {
|
|
31
|
+
let policy;
|
|
32
|
+
for (const event of events) {
|
|
33
|
+
if (event.type === 'approval/policy') {
|
|
34
|
+
const value = event.data.policy;
|
|
35
|
+
if (typeof value === 'string')
|
|
36
|
+
policy = value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return policy;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Durable-identity-first mode index. A durable permission identity is
|
|
43
|
+
* STRONGER than the derived sandbox/approval atoms: it keeps a runtime preset
|
|
44
|
+
* (including one that maps to the same atoms as a static mode) selected after
|
|
45
|
+
* resume or manual commands instead of snapping to a look-alike static mode.
|
|
46
|
+
* Permission-only dynamic specs declare no atoms and would wildcard-match ANY
|
|
47
|
+
* session state, so they can only be selected through the identity branch —
|
|
48
|
+
* never through the atom fallback.
|
|
49
|
+
*/
|
|
50
|
+
function derivePermissionModeIndex(modes, events) {
|
|
51
|
+
const identity = foldPermissionPreset(events);
|
|
52
|
+
if (identity !== undefined) {
|
|
53
|
+
const permissionIndex = modes.findIndex(spec => spec.permission === identity
|
|
54
|
+
&& (spec.plan === undefined || foldPlanActive(events) === spec.plan));
|
|
55
|
+
if (permissionIndex >= 0)
|
|
56
|
+
return permissionIndex;
|
|
57
|
+
}
|
|
58
|
+
const index = modes.findIndex(spec => spec.permission === undefined
|
|
59
|
+
&& (spec.plan === undefined || foldPlanActive(events) === spec.plan)
|
|
60
|
+
&& (spec.sandbox === undefined || foldSandboxMode(events) === spec.sandbox)
|
|
61
|
+
&& (spec.approval === undefined || foldApprovalPolicy(events) === spec.approval));
|
|
62
|
+
return index >= 0 ? index : 0;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Permission-aware session-mode actions: main's mode transition (plan
|
|
66
|
+
* exclusivity, atom application, plan-exit restore) composed with the durable
|
|
67
|
+
* permission identity, on top of the refactored `createModeActions`.
|
|
68
|
+
*
|
|
69
|
+
* Construction is inert. The returned shape is a superset of
|
|
70
|
+
* `ReturnType<typeof createModeActions>`, so the composition root and
|
|
71
|
+
* `createBindingEvents` can consume it unchanged, plus
|
|
72
|
+
* `runPermissionPreset` for the public `ChannelUi` surface.
|
|
73
|
+
*/
|
|
74
|
+
export function createPermissionModeActions(ctx, state, deps) {
|
|
75
|
+
const { owner, binding, sessionModes, roster, commandService, executeRegistryCommand, notify } = deps;
|
|
76
|
+
const base = createModeActions(ctx, state, {
|
|
77
|
+
owner,
|
|
78
|
+
runtime: deps.runtime,
|
|
79
|
+
binding,
|
|
80
|
+
sessionModes,
|
|
81
|
+
commandService,
|
|
82
|
+
executeRegistryCommand,
|
|
83
|
+
notify,
|
|
84
|
+
});
|
|
85
|
+
const permission = createPermissionIdentity(ctx, {
|
|
86
|
+
agent: () => binding.agent,
|
|
87
|
+
roster,
|
|
88
|
+
commandService,
|
|
89
|
+
executeRegistryCommand,
|
|
90
|
+
notify,
|
|
91
|
+
});
|
|
92
|
+
// An in-turn /plan off commits at pre-step, after the command has returned.
|
|
93
|
+
const explicitPlanExits = new WeakSet();
|
|
94
|
+
/** Re-derive the roster and the current mode. The roster rebuild rides on
|
|
95
|
+
* every refresh: a registry mount/unmount and a re-bind both land here. */
|
|
96
|
+
const refreshMode = () => {
|
|
97
|
+
roster.rebuild(binding.agent);
|
|
98
|
+
const index = derivePermissionModeIndex(sessionModes, snapshotLiveSessionEvents(binding.agent.session));
|
|
99
|
+
state.modeIndex = index;
|
|
100
|
+
state.mode = sessionModes[index];
|
|
101
|
+
};
|
|
102
|
+
/** Apply the configured atoms; an explicit exit owns its target mode.
|
|
103
|
+
* Permission identity is applied BEFORE plan and atom changes: dynamic
|
|
104
|
+
* presets use the official command path (or the service write fallback)
|
|
105
|
+
* and are confirmed by event/registry readback; the TUI never manufactures
|
|
106
|
+
* permission events. */
|
|
107
|
+
const applyMode = async (spec, capture = binding.capture()) => {
|
|
108
|
+
if (!owner.current() || !binding.isCurrent(capture))
|
|
109
|
+
return;
|
|
110
|
+
// This action writes durable session policy; the permission switch writes
|
|
111
|
+
// the same kind of durable identity, so it is under the same guard.
|
|
112
|
+
assertShadowPolicy('mutate', deps.runtime.mode);
|
|
113
|
+
const agent = capture.agent;
|
|
114
|
+
const session = agent.session;
|
|
115
|
+
const planMode = ctx.get('planMode');
|
|
116
|
+
const planActive = foldPlanActive(snapshotLiveSessionEvents(session));
|
|
117
|
+
const planChange = spec.plan !== undefined && (planMode?.get?.(agent).pending ?? planActive) !== spec.plan;
|
|
118
|
+
if (planActive && planMode?.get?.(agent).pending === undefined) {
|
|
119
|
+
explicitPlanExits.delete(session);
|
|
120
|
+
}
|
|
121
|
+
// Capture the pre-plan preset identity BEFORE any permission
|
|
122
|
+
// canonicalization can append replacement events.
|
|
123
|
+
if (planChange && spec.plan === true && !planActive) {
|
|
124
|
+
permission.rememberPrePlanIdentity(session);
|
|
125
|
+
}
|
|
126
|
+
if (planChange && spec.plan === false) {
|
|
127
|
+
// An explicit switch away from plan owns its target mode; the
|
|
128
|
+
// remembered pre-plan identity no longer applies.
|
|
129
|
+
explicitPlanExits.add(session);
|
|
130
|
+
permission.forgetPrePlanIdentity(session);
|
|
131
|
+
}
|
|
132
|
+
if (spec.permission !== undefined) {
|
|
133
|
+
if (!(await permission.applyPermissionIdentity(spec.permission)))
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
else if (!(await permission.canonicalizeForMode(spec, session))) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (!owner.current() || !binding.isCurrent(capture) || session !== agent.session)
|
|
140
|
+
return;
|
|
141
|
+
await base.applyMode(spec, capture);
|
|
142
|
+
if (!owner.current() || !binding.isCurrent(capture))
|
|
143
|
+
return;
|
|
144
|
+
const before = state.modeIndex;
|
|
145
|
+
refreshMode();
|
|
146
|
+
if (state.modeIndex !== before)
|
|
147
|
+
state.emit();
|
|
148
|
+
};
|
|
149
|
+
/** Shift+Tab: advance from the mode DERIVED from the session log (never a
|
|
150
|
+
* stored index), so manual `/plan` use can never desync the cycle. */
|
|
151
|
+
const cycleMode = async () => {
|
|
152
|
+
const capture = binding.capture();
|
|
153
|
+
if (!owner.current() || !binding.isCurrent(capture))
|
|
154
|
+
return;
|
|
155
|
+
const index = derivePermissionModeIndex(sessionModes, snapshotLiveSessionEvents(capture.agent.session));
|
|
156
|
+
await applyMode(sessionModes[(index + 1) % sessionModes.length], capture);
|
|
157
|
+
};
|
|
158
|
+
const onSessionEvent = (session, event) => {
|
|
159
|
+
const subject = session;
|
|
160
|
+
const sessionEvent = event;
|
|
161
|
+
base.onSessionEvent(subject, sessionEvent);
|
|
162
|
+
const type = sessionEvent.type;
|
|
163
|
+
if (type === 'permission/preset')
|
|
164
|
+
refreshMode();
|
|
165
|
+
if (type !== 'plan/mode' || sessionEvent.data.active !== false)
|
|
166
|
+
return;
|
|
167
|
+
const remembered = permission.prePlanPermissionIdentity(subject);
|
|
168
|
+
const explicit = explicitPlanExits.delete(subject);
|
|
169
|
+
permission.forgetPrePlanIdentity(subject);
|
|
170
|
+
if (explicit || remembered === undefined)
|
|
171
|
+
return;
|
|
172
|
+
if (subject !== binding.agent.session)
|
|
173
|
+
return;
|
|
174
|
+
// The atom restore is queued by the base actions in this same turn; the
|
|
175
|
+
// identity restore runs after it and re-seats the user on their own
|
|
176
|
+
// preset. Both write the same atom values, so the order cannot diverge.
|
|
177
|
+
queueMicrotask(() => {
|
|
178
|
+
if (subject !== binding.agent.session || foldPlanActive(snapshotLiveSessionEvents(subject)))
|
|
179
|
+
return;
|
|
180
|
+
void permission.applyPermissionIdentity(remembered).then((ok) => {
|
|
181
|
+
if (!ok || subject !== binding.agent.session)
|
|
182
|
+
return;
|
|
183
|
+
refreshMode();
|
|
184
|
+
notify(t('mode-switched', { name: modeDisplayName(state.mode) }));
|
|
185
|
+
state.emit();
|
|
186
|
+
}).catch(() => {
|
|
187
|
+
// Best-effort; failures already surfaced through applyPermissionIdentity.
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
return {
|
|
192
|
+
refreshMode,
|
|
193
|
+
cycleMode,
|
|
194
|
+
applyMode,
|
|
195
|
+
onSessionEvent,
|
|
196
|
+
runPermissionPreset: name => permission.runPermissionPreset(name),
|
|
197
|
+
permission,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
4
|
+
import { type SessionModeSpec } from '../../sessionModes.js';
|
|
5
|
+
import type { PermissionModeRoster } from './mode-roster.js';
|
|
6
|
+
import type { ChannelState } from './types.js';
|
|
7
|
+
/** Last durable permission preset identity (`permission/preset`), if any.
|
|
8
|
+
* Registered by the harness permission preset service, never manufactured
|
|
9
|
+
* by the TUI. */
|
|
10
|
+
export declare function foldPermissionPreset(events: readonly SessionEvent[]): string | undefined;
|
|
11
|
+
/** Effective sandbox of a mode target: its explicit atom, else the folded
|
|
12
|
+
* session value, else the sandbox-policy service default. Unknown means the
|
|
13
|
+
* bundle is not safely mappable. */
|
|
14
|
+
export declare function effectiveSandboxForMode(ctx: Context, spec: SessionModeSpec, events: readonly SessionEvent[]): SessionModeSpec['sandbox'] | undefined;
|
|
15
|
+
/** Effective approval policy of a mode target: its explicit atom, else the
|
|
16
|
+
* folded session value, else the approval service configuration. */
|
|
17
|
+
export declare function effectiveApprovalForMode(ctx: Context, spec: SessionModeSpec, session: Agent['session']): SessionModeSpec['approval'] | undefined;
|
|
18
|
+
/** Durable permission identity operations for one channel. */
|
|
19
|
+
export interface PermissionIdentity {
|
|
20
|
+
/** Folded durable identity of one session log. */
|
|
21
|
+
foldPermissionPreset(session: Agent['session']): string | undefined;
|
|
22
|
+
/** Canonical preset for a mode's effective sandbox/approval bundle, when
|
|
23
|
+
* the deployment's runtime table (or the stock built-ins) has one. */
|
|
24
|
+
canonicalPermissionForMode(spec: SessionModeSpec, session: Agent['session']): string | undefined;
|
|
25
|
+
/** True when the durable identity OR a runtime registry readback reports
|
|
26
|
+
* the target. */
|
|
27
|
+
permissionTargetConfirmed(target: string, session: Agent['session']): boolean;
|
|
28
|
+
/** Poll fold/registry readback for the target within a grace window. */
|
|
29
|
+
confirmPermissionTarget(target: string, session: Agent['session'], timeoutMs: number): Promise<boolean>;
|
|
30
|
+
/** Official `/permission <preset>` switch (or the service write fallback),
|
|
31
|
+
* then confirmation. The TUI never fabricates permission events. */
|
|
32
|
+
applyPermissionIdentity(target: string): Promise<boolean>;
|
|
33
|
+
/** Static-mode guard: canonicalize a durable identity BEFORE atoms, and
|
|
34
|
+
* fail closed when no canonical preset exists for the target bundle. */
|
|
35
|
+
canonicalizeForMode(spec: SessionModeSpec, session: Agent['session']): Promise<boolean>;
|
|
36
|
+
/** Capture the preset the user is on before plan mode runs. */
|
|
37
|
+
rememberPrePlanIdentity(session: Agent['session']): void;
|
|
38
|
+
/** The captured pre-plan identity, if one is still pending. */
|
|
39
|
+
prePlanPermissionIdentity(session: Agent['session']): string | undefined;
|
|
40
|
+
forgetPrePlanIdentity(session: Agent['session']): void;
|
|
41
|
+
/** `ChannelUi.runPermissionPreset` (see the public Channel type). */
|
|
42
|
+
runPermissionPreset(name: string): Promise<boolean>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Durable `permission/preset` identity: readback, canonical mapping, the
|
|
46
|
+
* official switch path, and the pre-plan identity memory. Construction is
|
|
47
|
+
* inert — it acquires nothing and subscribes to nothing.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createPermissionIdentity(ctx: Context, deps: {
|
|
50
|
+
agent: () => Agent;
|
|
51
|
+
roster: PermissionModeRoster;
|
|
52
|
+
commandService?: {
|
|
53
|
+
find(agent: Agent, name: string): unknown;
|
|
54
|
+
};
|
|
55
|
+
executeRegistryCommand(name: string, input: string): Promise<string | undefined>;
|
|
56
|
+
notify: ChannelState['notify'];
|
|
57
|
+
}): PermissionIdentity;
|
|
58
|
+
//# sourceMappingURL=mode-permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-permission.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/mode-permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAI5D,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C;;kBAEkB;AAClB,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,GAAG,SAAS,CASxF;AAED;;qCAEqC;AACrC,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,SAAS,YAAY,EAAE,GAC9B,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,CAkBxC;AAED;qEACqE;AACrE,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GACxB,eAAe,CAAC,UAAU,CAAC,GAAG,SAAS,CAoBzC;AAED,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;IACnE;2EACuE;IACvE,0BAA0B,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;IAChG;sBACkB;IAClB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAA;IAC7E,wEAAwE;IACxE,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvG;yEACqE;IACrE,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACzD;6EACyE;IACzE,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvF,+DAA+D;IAC/D,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IACxD,+DAA+D;IAC/D,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;IACxE,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IACtD,qEAAqE;IACrE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACpD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,KAAK,CAAA;IAClB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,cAAc,CAAC,EAAE;QAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IAC9D,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChF,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;CAC/B,GACA,kBAAkB,CAgLpB"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { isCommandCompletionToken } from '../../commands.js';
|
|
2
|
+
import { snapshotLiveSessionEvents } from '../compat/liveSession.js';
|
|
3
|
+
import { t } from '../../i18n.js';
|
|
4
|
+
import { modeDisplayName } from '../../sessionModes.js';
|
|
5
|
+
import { PERMISSION_PRESET_CUSTOM, permissionPresetRuntime } from './permissions.js';
|
|
6
|
+
/** Last durable permission preset identity (`permission/preset`), if any.
|
|
7
|
+
* Registered by the harness permission preset service, never manufactured
|
|
8
|
+
* by the TUI. */
|
|
9
|
+
export function foldPermissionPreset(events) {
|
|
10
|
+
let preset;
|
|
11
|
+
for (const event of events) {
|
|
12
|
+
if (event.type === 'permission/preset') {
|
|
13
|
+
const value = event.data.preset;
|
|
14
|
+
if (typeof value === 'string')
|
|
15
|
+
preset = value;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return preset;
|
|
19
|
+
}
|
|
20
|
+
/** Effective sandbox of a mode target: its explicit atom, else the folded
|
|
21
|
+
* session value, else the sandbox-policy service default. Unknown means the
|
|
22
|
+
* bundle is not safely mappable. */
|
|
23
|
+
export function effectiveSandboxForMode(ctx, spec, events) {
|
|
24
|
+
if (spec.sandbox !== undefined)
|
|
25
|
+
return spec.sandbox;
|
|
26
|
+
let folded;
|
|
27
|
+
for (const event of events) {
|
|
28
|
+
if (event.type === 'sandbox/mode') {
|
|
29
|
+
folded = event.data.mode;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (folded === 'read-only' || folded === 'workspace-write' || folded === 'danger-full-access')
|
|
33
|
+
return folded;
|
|
34
|
+
try {
|
|
35
|
+
const sandbox = ctx.get('sandboxPolicy');
|
|
36
|
+
const value = sandbox?.defaultMode;
|
|
37
|
+
if (value === 'read-only' || value === 'workspace-write' || value === 'danger-full-access')
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Optional service; an unknown default means the target is not safely
|
|
42
|
+
// mappable.
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
/** Effective approval policy of a mode target: its explicit atom, else the
|
|
47
|
+
* folded session value, else the approval service configuration. */
|
|
48
|
+
export function effectiveApprovalForMode(ctx, spec, session) {
|
|
49
|
+
if (spec.approval !== undefined)
|
|
50
|
+
return spec.approval;
|
|
51
|
+
let folded;
|
|
52
|
+
for (const event of snapshotLiveSessionEvents(session)) {
|
|
53
|
+
if (event.type === 'approval/policy') {
|
|
54
|
+
folded = event.data.policy;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (folded === 'ask' || folded === 'never')
|
|
58
|
+
return folded;
|
|
59
|
+
try {
|
|
60
|
+
const approval = ctx.get('approval');
|
|
61
|
+
const value = approval?.effectivePolicy?.(session) ?? approval?.config?.policy;
|
|
62
|
+
if (value === 'ask' || value === 'never')
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Optional service; an unknown default means the target is not safely
|
|
67
|
+
// mappable.
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Durable `permission/preset` identity: readback, canonical mapping, the
|
|
73
|
+
* official switch path, and the pre-plan identity memory. Construction is
|
|
74
|
+
* inert — it acquires nothing and subscribes to nothing.
|
|
75
|
+
*/
|
|
76
|
+
export function createPermissionIdentity(ctx, deps) {
|
|
77
|
+
/** Durable preset identity captured when plan mode starts; an implicit plan
|
|
78
|
+
* exit prefers returning to it over the canonical bundle of the restored
|
|
79
|
+
* atoms, so the user lands back on their own preset (e.g. a third-party
|
|
80
|
+
* `auto`), not on a look-alike static mode. */
|
|
81
|
+
const prePlanIdentity = new WeakMap();
|
|
82
|
+
const fold = (session) => foldPermissionPreset(snapshotLiveSessionEvents(session));
|
|
83
|
+
const canonicalForMode = (spec, session) => {
|
|
84
|
+
const sandbox = effectiveSandboxForMode(ctx, spec, snapshotLiveSessionEvents(session));
|
|
85
|
+
const approval = effectiveApprovalForMode(ctx, spec, session);
|
|
86
|
+
if (sandbox === undefined || approval === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
return deps.roster.canonicalFor(sandbox, approval);
|
|
89
|
+
};
|
|
90
|
+
const targetConfirmed = (target, session) => {
|
|
91
|
+
if (fold(session) === target)
|
|
92
|
+
return true;
|
|
93
|
+
try {
|
|
94
|
+
const snapshot = deps.roster.readSnapshot(deps.agent());
|
|
95
|
+
if (snapshot !== undefined
|
|
96
|
+
&& snapshot.current?.kind === 'preset'
|
|
97
|
+
&& snapshot.current.value === target) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// The registry may be unmounted mid-switch; the fold check above
|
|
103
|
+
// remains authoritative for the durable identity.
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
};
|
|
107
|
+
const confirmTarget = async (target, session, timeoutMs) => {
|
|
108
|
+
const deadline = Date.now() + timeoutMs;
|
|
109
|
+
while (Date.now() < deadline) {
|
|
110
|
+
if (session !== deps.agent().session)
|
|
111
|
+
return false;
|
|
112
|
+
if (targetConfirmed(target, session))
|
|
113
|
+
return true;
|
|
114
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
115
|
+
}
|
|
116
|
+
ctx.logger.warn(`dsh-tui: permission mode "${target}" was not confirmed by permissionPresets.current()/permission/preset`);
|
|
117
|
+
deps.notify(t('mode-permission-unconfirmed'), { color: 'warning' });
|
|
118
|
+
return false;
|
|
119
|
+
};
|
|
120
|
+
const apply = async (target) => {
|
|
121
|
+
if (!isCommandCompletionToken(target)) {
|
|
122
|
+
ctx.logger.warn(`dsh-tui: permission mode "${target}" skipped because its identity is not a safe command token`);
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
const agent = deps.agent();
|
|
126
|
+
const session = agent.session;
|
|
127
|
+
if (targetConfirmed(target, session))
|
|
128
|
+
return true;
|
|
129
|
+
let registered = false;
|
|
130
|
+
try {
|
|
131
|
+
registered = deps.commandService?.find(agent, 'permission') !== undefined;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
registered = false;
|
|
135
|
+
}
|
|
136
|
+
if (!registered) {
|
|
137
|
+
// The same handler the official command drives; the TUI never appends
|
|
138
|
+
// a permission event itself.
|
|
139
|
+
let service;
|
|
140
|
+
try {
|
|
141
|
+
service = ctx.get('permissionPresets');
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
service = undefined;
|
|
145
|
+
}
|
|
146
|
+
const runtime = permissionPresetRuntime(service);
|
|
147
|
+
if (runtime !== undefined && typeof runtime.set === 'function') {
|
|
148
|
+
try {
|
|
149
|
+
runtime.set(session, target);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
ctx.logger.warn(`dsh-tui: permission mode "${target}" could not be applied by the permissionPresets service: ${error instanceof Error ? error.message : String(error)}`);
|
|
153
|
+
deps.notify(t('mode-permission-invoke-failed'), { color: 'warning' });
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
return await confirmTarget(target, session, 2000);
|
|
157
|
+
}
|
|
158
|
+
ctx.logger.warn(`dsh-tui: permission mode "${target}" skipped because /permission is not registered`);
|
|
159
|
+
deps.notify(t('mode-permission-unregistered'), { color: 'warning' });
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const result = await deps.executeRegistryCommand('permission', ` ${target}`);
|
|
163
|
+
if (session !== deps.agent().session)
|
|
164
|
+
return false;
|
|
165
|
+
if (result === undefined) {
|
|
166
|
+
ctx.logger.warn(`dsh-tui: permission mode "${target}" could not invoke /permission`);
|
|
167
|
+
deps.notify(t('mode-permission-invoke-failed'), { color: 'warning' });
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
let availability = 'unavailable';
|
|
171
|
+
try {
|
|
172
|
+
availability = deps.roster.readSnapshot(deps.agent()) === undefined ? 'unavailable' : 'runtime';
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// keep the default (fail-closed short grace)
|
|
176
|
+
}
|
|
177
|
+
return await confirmTarget(target, session, availability === 'runtime' ? 2000 : 300);
|
|
178
|
+
};
|
|
179
|
+
const canonicalizeForMode = async (spec, session) => {
|
|
180
|
+
// Static modes own a canonical permission identity. Leaving any OTHER
|
|
181
|
+
// durable identity behind (third-party preset OR a stale canonical, e.g.
|
|
182
|
+
// plan left `read-only` while atoms were restored to workspace-write)
|
|
183
|
+
// would make a static mode appear selected only because its
|
|
184
|
+
// sandbox/approval bundle happens to match, and would let the durable
|
|
185
|
+
// identity lie about the real policy.
|
|
186
|
+
const current = fold(session);
|
|
187
|
+
if (current === undefined || current === PERMISSION_PRESET_CUSTOM)
|
|
188
|
+
return true;
|
|
189
|
+
const canonical = canonicalForMode(spec, session);
|
|
190
|
+
if (canonical === undefined) {
|
|
191
|
+
ctx.logger.warn(`dsh-tui: static mode "${spec.id}" cannot safely clear permission identity "${current}"`);
|
|
192
|
+
deps.notify(t('mode-permission-no-canonical', { name: modeDisplayName(spec) }), { color: 'warning' });
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
if (canonical === current)
|
|
196
|
+
return true;
|
|
197
|
+
return apply(canonical);
|
|
198
|
+
};
|
|
199
|
+
const rememberPrePlanIdentity = (session) => {
|
|
200
|
+
// The runtime registry must still recognize the identity as current: a
|
|
201
|
+
// drifted knob combination reads back as custom and must fall back to the
|
|
202
|
+
// canonical bundle of the restored atoms.
|
|
203
|
+
const identity = fold(session);
|
|
204
|
+
if (identity === undefined || identity === PERMISSION_PRESET_CUSTOM) {
|
|
205
|
+
prePlanIdentity.delete(session);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
const snapshot = deps.roster.readSnapshot(deps.agent());
|
|
210
|
+
if (snapshot === undefined) {
|
|
211
|
+
prePlanIdentity.delete(session);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (snapshot.current?.kind !== 'preset' || snapshot.current.value !== identity) {
|
|
215
|
+
prePlanIdentity.delete(session);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (!snapshot.options.some(option => option.value === identity)) {
|
|
219
|
+
prePlanIdentity.delete(session);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
prePlanIdentity.set(session, identity);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
prePlanIdentity.delete(session);
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
return {
|
|
229
|
+
foldPermissionPreset: fold,
|
|
230
|
+
canonicalPermissionForMode: canonicalForMode,
|
|
231
|
+
permissionTargetConfirmed: (target, session) => targetConfirmed(target, session),
|
|
232
|
+
confirmPermissionTarget: (target, session, timeoutMs) => confirmTarget(target, session, timeoutMs),
|
|
233
|
+
applyPermissionIdentity: apply,
|
|
234
|
+
canonicalizeForMode,
|
|
235
|
+
rememberPrePlanIdentity,
|
|
236
|
+
prePlanPermissionIdentity: session => prePlanIdentity.get(session),
|
|
237
|
+
forgetPrePlanIdentity: session => { prePlanIdentity.delete(session); },
|
|
238
|
+
runPermissionPreset: name => apply(name.trim()),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import { type SessionModeSpec } from '../../sessionModes.js';
|
|
4
|
+
import { type PermissionPresetBundle } from './permissions.js';
|
|
5
|
+
import type { PermissionPresetSnapshot } from './types.js';
|
|
6
|
+
/** Durable identities the configured modes already own; a runtime preset with
|
|
7
|
+
* one of them is the same switch by another route and never duplicated. */
|
|
8
|
+
export declare function configuredPermissionIds(modes: readonly SessionModeSpec[]): ReadonlySet<string>;
|
|
9
|
+
/** Canonical targets of the STATIC modes. On a stock table that is the three
|
|
10
|
+
* built-in names; on renamed tables the deployment's own names for the same
|
|
11
|
+
* bundles. They are never dynamic entries: the indicator would otherwise
|
|
12
|
+
* snap to a dynamic look-alike instead of the static mode. */
|
|
13
|
+
export declare function staticCanonicalTargets(modes: readonly SessionModeSpec[], bundles: readonly PermissionPresetBundle[]): ReadonlySet<string>;
|
|
14
|
+
/** The mounted `permissionPresets` registry as a runtime snapshot, or
|
|
15
|
+
* undefined when no runtime table is mounted (legacy/unavailable tables are
|
|
16
|
+
* not a roster). Reads are fail-closed: a throwing registry is no roster. */
|
|
17
|
+
export declare function readRuntimePermissionSnapshot(ctx: Context, target: Agent): PermissionPresetSnapshot | undefined;
|
|
18
|
+
/** Warn at most once per (agent, identity, reason) — a registry that keeps
|
|
19
|
+
* re-listing an unusable preset must not flood the log on every rebuild. */
|
|
20
|
+
export declare function warnOnceForPermissionEntry(warned: Set<string>, warn: (message: string) => void, target: Agent, value: string, reason: string): void;
|
|
21
|
+
/** The Shift+Tab roster: configured modes first, runtime presets appended. */
|
|
22
|
+
export interface PermissionModeRoster {
|
|
23
|
+
/** LIVE roster. The array identity is stable and mutated in place, so a
|
|
24
|
+
* consumer that captured it at construction always sees the latest
|
|
25
|
+
* roster after {@link PermissionModeRoster.rebuild}. */
|
|
26
|
+
readonly modes: readonly SessionModeSpec[];
|
|
27
|
+
/** Re-read the runtime preset registry for `target` and re-derive. */
|
|
28
|
+
rebuild(target: Agent): void;
|
|
29
|
+
/** Runtime snapshot for `target`, undefined when no runtime table is mounted. */
|
|
30
|
+
readSnapshot(target: Agent): PermissionPresetSnapshot | undefined;
|
|
31
|
+
/** Canonical preset name for one effective sandbox/approval bundle. */
|
|
32
|
+
canonicalFor(sandbox: NonNullable<SessionModeSpec['sandbox']>, approval: NonNullable<SessionModeSpec['approval']>): string | undefined;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Dynamic session-mode roster (main's `sessionModes` / `rebuildSessionModes`).
|
|
36
|
+
*
|
|
37
|
+
* Runtime permission presets are appended AFTER the configured/default modes
|
|
38
|
+
* whenever the SERVICE snapshot is usable — no dependency on the external
|
|
39
|
+
* `/permission` command reaching this agent's registry, because switching
|
|
40
|
+
* falls back to the service's own write path when the command row is absent.
|
|
41
|
+
* Registry order is authoritative on first observation; later rebuilds
|
|
42
|
+
* preserve the relative order of identities already seen so unrelated
|
|
43
|
+
* command-registry churn cannot reshuffle Shift+Tab. Removed identities drop
|
|
44
|
+
* out and a later re-add is treated as new.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createPermissionModeRoster(ctx: Context, deps: {
|
|
47
|
+
configuredModes: readonly SessionModeSpec[];
|
|
48
|
+
agent: () => Agent;
|
|
49
|
+
warn?: (message: string) => void;
|
|
50
|
+
}): PermissionModeRoster;
|
|
51
|
+
//# sourceMappingURL=mode-roster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-roster.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/mode-roster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAA0B,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAElF;4EAC4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAE9F;AAED;;;+DAG+D;AAC/D,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,OAAO,EAAE,SAAS,sBAAsB,EAAE,GACzC,WAAW,CAAC,MAAM,CAAC,CAQrB;AAED;;8EAE8E;AAC9E,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,KAAK,GACZ,wBAAwB,GAAG,SAAS,CAUtC;AAED;6EAC6E;AAC7E,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAC/B,MAAM,EAAE,KAAK,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAMN;AAED,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACnC;;6DAEyD;IACzD,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAA;IAC1C,sEAAsE;IACtE,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAA;IAC5B,iFAAiF;IACjF,YAAY,CAAC,MAAM,EAAE,KAAK,GAAG,wBAAwB,GAAG,SAAS,CAAA;IACjE,uEAAuE;IACvE,YAAY,CACV,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,EAChD,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,GACjD,MAAM,GAAG,SAAS,CAAA;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IACJ,eAAe,EAAE,SAAS,eAAe,EAAE,CAAA;IAC3C,KAAK,EAAE,MAAM,KAAK,CAAA;IAClB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC,GACA,oBAAoB,CAgEtB"}
|