@deepseek-harness-tui/dsh-tui 0.10.0 → 0.10.2
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 +5 -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 +229 -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/Chat/JobCard.d.ts.map +1 -1
- package/lib/types/components/Chat/JobCard.js +8 -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/Markdown.d.ts +2 -2
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +28 -3
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +46 -17
- 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/StreamingMarkdown.d.ts.map +1 -1
- package/lib/types/components/StreamingMarkdown.js +61 -9
- 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 +65 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/binding-events.js +169 -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 +37 -0
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/input-delivery.js +305 -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 +187 -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 +128 -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 +138 -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 +33 -0
- package/lib/types/dsh-adapter/channel/skill-catalog.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/skill-catalog.js +215 -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 +753 -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 +8 -4
- package/lib/types/dsh-adapter/compat/liveSession.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/liveSession.js +28 -3
- 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/digest.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/digest.js +40 -19
- package/lib/types/dsh-adapter/sessions/frames.js +2 -0
- 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 +28 -17
- package/lib/types/dsh-adapter/sessions/store.d.ts +2 -2
- package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/store.js +12 -11
- package/lib/types/dsh-adapter/sessions/types.d.ts +4 -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/components/ScrollBox.d.ts.map +1 -1
- package/lib/types/ink/components/ScrollBox.js +30 -33
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/ink/dom.js +32 -64
- package/lib/types/ink/get-max-width.d.ts +7 -15
- package/lib/types/ink/get-max-width.d.ts.map +1 -1
- package/lib/types/ink/get-max-width.js +7 -20
- package/lib/types/ink/ink.d.ts +1 -0
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +22 -3
- package/lib/types/ink/layout/node.d.ts +2 -0
- package/lib/types/ink/layout/node.d.ts.map +1 -1
- package/lib/types/ink/layout/yoga.d.ts +1 -0
- package/lib/types/ink/layout/yoga.d.ts.map +1 -1
- package/lib/types/ink/layout/yoga.js +3 -0
- package/lib/types/ink/node-cache.d.ts +11 -0
- package/lib/types/ink/node-cache.d.ts.map +1 -1
- package/lib/types/ink/node-cache.js +3 -0
- package/lib/types/ink/output.d.ts +6 -1
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +55 -65
- 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 +195 -71
- 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/ink/tabstops.d.ts +3 -2
- package/lib/types/ink/tabstops.d.ts.map +1 -1
- package/lib/types/ink/tabstops.js +5 -4
- package/lib/types/ink/wrap-text.js +2 -2
- 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/native-ts/yoga-layout/index.d.ts +8 -3
- package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
- package/lib/types/native-ts/yoga-layout/index.js +23 -8
- 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 +91 -17
- 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 +125 -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,135 @@
|
|
|
1
|
+
import { MessageId } from '@deepseek-ai/dsh-llm';
|
|
2
|
+
import { t } from '../../i18n.js';
|
|
3
|
+
import { touchSession } from '../../sessionHistory.js';
|
|
4
|
+
export function createInputActions(getState, getAgent, owner, input, composer, dispatchUserText, runLocalCommand) {
|
|
5
|
+
return {
|
|
6
|
+
submit(text, images = []) {
|
|
7
|
+
owner.assertActive();
|
|
8
|
+
const state = getState();
|
|
9
|
+
const trimmed = text.trim();
|
|
10
|
+
if (!trimmed)
|
|
11
|
+
return;
|
|
12
|
+
const submittedImages = composer.includeLegacyImageRefs(trimmed, images);
|
|
13
|
+
// Non-UI callers do not pass through PromptInput's admission guard.
|
|
14
|
+
// Shell routes have no image grammar: reject loudly before spawning
|
|
15
|
+
// anything rather than silently ignoring the supplied capabilities.
|
|
16
|
+
if (submittedImages.length > 0 && trimmed.startsWith('!')) {
|
|
17
|
+
state.notify(t('shell-images-unsupported'), { color: 'warning', timeoutMs: 4000 });
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// Local shell mode: `!cmd` runs locally and only shows the output;
|
|
21
|
+
// `!!cmd` additionally sends the output to the model as a user
|
|
22
|
+
// message wrapped in `<bash-stdout>`.
|
|
23
|
+
if (trimmed.startsWith('!!')) {
|
|
24
|
+
void runLocalCommand(trimmed.slice(2).trim(), true);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (trimmed.startsWith('!')) {
|
|
28
|
+
void runLocalCommand(trimmed.slice(1).trim(), false);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// The current session is being used — move it to the MRU front
|
|
32
|
+
// (/resume sorts by last-used).
|
|
33
|
+
touchSession(state.agentId);
|
|
34
|
+
dispatchUserText(trimmed, 'followup', submittedImages);
|
|
35
|
+
},
|
|
36
|
+
/** Steer a message into the RUNNING turn (Codex/pi semantics): it is
|
|
37
|
+
* injected at the next step boundary of the current turn and the agent
|
|
38
|
+
* continues without stopping — faster than followup, never an abort. */
|
|
39
|
+
steer(text, images = []) {
|
|
40
|
+
owner.assertActive();
|
|
41
|
+
const state = getState();
|
|
42
|
+
const trimmed = text.trim();
|
|
43
|
+
if (!trimmed)
|
|
44
|
+
return;
|
|
45
|
+
touchSession(state.agentId);
|
|
46
|
+
// Same tui/input decision pass as submit; the delivery re-validates
|
|
47
|
+
// the live agent after the await. Official dsh-agent rc.6: steer() is
|
|
48
|
+
// synchronous void — the message enters the next-step inbox; a
|
|
49
|
+
// rejected step leaves it parked for the next wake, and the inbox
|
|
50
|
+
// events retire the preview (claimed → turn boundary, discarded →
|
|
51
|
+
// cancel).
|
|
52
|
+
dispatchUserText(trimmed, 'steer', images);
|
|
53
|
+
},
|
|
54
|
+
/** Pull a pending message back out of the inbox (Alt+Up): it returns to
|
|
55
|
+
* the input for editing instead of being delivered. */
|
|
56
|
+
removePending(id) {
|
|
57
|
+
owner.assertActive();
|
|
58
|
+
const state = getState();
|
|
59
|
+
const agent = getAgent();
|
|
60
|
+
const index = state.pending.findIndex(item => item.id === id);
|
|
61
|
+
if (index === -1)
|
|
62
|
+
return false;
|
|
63
|
+
// Official dsh-agent rc.6: withdrawal goes through the agent's inbox
|
|
64
|
+
// projection — `Inbox.remove(messageId)` durably records the
|
|
65
|
+
// cancellation (an `agent/inbox/spliced` session event) and publishes
|
|
66
|
+
// `agent/inbox/discarded`, which retires the preview. Refuse when the
|
|
67
|
+
// message was already claimed (remove returns false) so the UI never
|
|
68
|
+
// pretends a ghost send was pulled back.
|
|
69
|
+
if (!agent.inbox.remove(MessageId(id)))
|
|
70
|
+
return false;
|
|
71
|
+
state.pending = state.pending.filter(item => item.id !== id);
|
|
72
|
+
state.emit();
|
|
73
|
+
return true;
|
|
74
|
+
},
|
|
75
|
+
cancel() {
|
|
76
|
+
owner.assertActive();
|
|
77
|
+
const state = getState();
|
|
78
|
+
const agent = getAgent();
|
|
79
|
+
// Keep the staged queue: an interrupt aborts the running turn but the
|
|
80
|
+
// queued/steered messages are delivered as the next turn (web parity).
|
|
81
|
+
// Cancellation converges asynchronously; ignore a repeated Esc/Ctrl+C
|
|
82
|
+
// until the aborted turn has produced its terminal event. `cancelPending`
|
|
83
|
+
// mirrors that window for the UI, where a repeated press force-exits.
|
|
84
|
+
if (input.cancelInFlight)
|
|
85
|
+
return;
|
|
86
|
+
input.cancelInFlight = true;
|
|
87
|
+
state.cancelPending = true;
|
|
88
|
+
agent.cancel({ kind: 'user' }, { keepInbox: true });
|
|
89
|
+
},
|
|
90
|
+
interruptAndDeliver(inputs) {
|
|
91
|
+
owner.assertActive();
|
|
92
|
+
const state = getState();
|
|
93
|
+
const agent = getAgent();
|
|
94
|
+
const queued = inputs
|
|
95
|
+
.map(input => typeof input === 'string'
|
|
96
|
+
? { text: input.trim(), images: [] }
|
|
97
|
+
: { text: input.text.trim(), images: [...(input.images ?? [])] })
|
|
98
|
+
.filter(input => input.text !== '');
|
|
99
|
+
if (queued.length === 0)
|
|
100
|
+
return 0;
|
|
101
|
+
// No keepInbox: the parked copies are dropped (their discard events
|
|
102
|
+
// retire the preview), then each message is re-queued as a fresh
|
|
103
|
+
// followup. dsh-agent's cancel-convergence wake latch accepts this
|
|
104
|
+
// wake immediately after cancel and starts it once the aborted turn
|
|
105
|
+
// retires; waiting for whenIdle is unsafe because it also follows
|
|
106
|
+
// replacement work and may never settle. If cancellation is already
|
|
107
|
+
// in flight, keep the existing abort and still replace the pending
|
|
108
|
+
// interrupt delivery; fake/embedded agents may not emit turn/end.
|
|
109
|
+
if (!input.cancelInFlight) {
|
|
110
|
+
input.cancelInFlight = true;
|
|
111
|
+
agent.cancel({ kind: 'user' });
|
|
112
|
+
}
|
|
113
|
+
state.cancelPending = true;
|
|
114
|
+
const token = ++input.interruptSeq;
|
|
115
|
+
const deliver = () => {
|
|
116
|
+
// A second interrupt while the abort is still settling must not
|
|
117
|
+
// double-deliver: only the latest request's re-queue runs.
|
|
118
|
+
if (input.interruptSeq !== token)
|
|
119
|
+
return;
|
|
120
|
+
for (const entry of queued) {
|
|
121
|
+
touchSession(state.agentId);
|
|
122
|
+
// Same tui/input decision pass as a typed submit: Ctrl+Enter must
|
|
123
|
+
// not bypass a plugin's cancel/transform policy, and re-queued
|
|
124
|
+
// texts keep submission order through the one FIFO chain.
|
|
125
|
+
dispatchUserText(entry.text, 'followup', entry.images);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
// Let cancel finish its synchronous inbox bookkeeping before waking.
|
|
129
|
+
// A microtask also coalesces two same-tick interrupts: only the latest
|
|
130
|
+
// token survives, so the user's text is never sent twice.
|
|
131
|
+
queueMicrotask(deliver);
|
|
132
|
+
return queued.length;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import { type UserMessage } from '@deepseek-ai/dsh-llm';
|
|
4
|
+
import { type ComposerImages } from './composer-images.js';
|
|
5
|
+
import type { ChannelOwner } from './owner.js';
|
|
6
|
+
import type { ChannelImageBlock, ChannelState, ComposerImageRef, MentionAttachments, MentionFs, PendingMessage, StagedImageInput } from './types.js';
|
|
7
|
+
/** One submission's enqueue-time world: the session it was typed in, the
|
|
8
|
+
* services that resolve its references, and the capabilities live then. */
|
|
9
|
+
interface UserTextOrigin {
|
|
10
|
+
readonly agent: Agent;
|
|
11
|
+
readonly agentId: string;
|
|
12
|
+
readonly generation: number;
|
|
13
|
+
readonly cwd: string;
|
|
14
|
+
readonly fs: MentionFs | undefined;
|
|
15
|
+
readonly attachments: MentionAttachments | undefined;
|
|
16
|
+
readonly stagedImages: ReadonlyMap<string, ChannelImageBlock['attachment']>;
|
|
17
|
+
}
|
|
18
|
+
/** Input FIFO, staged attachments and decision notice timers share one lifetime. */
|
|
19
|
+
export declare function createInputDelivery(ctx: Context, owner: ChannelOwner, binding: {
|
|
20
|
+
readonly agent: Agent;
|
|
21
|
+
}, state: () => Pick<ChannelState, 'cwd' | 'agentId' | 'agentBindingGeneration'>, notify: ChannelState['notify'], trackPending: (message: {
|
|
22
|
+
id: string;
|
|
23
|
+
text: string;
|
|
24
|
+
images?: readonly ComposerImageRef[];
|
|
25
|
+
}, placement: PendingMessage['placement']) => void, untrackPending: (id: string) => void, composer: ComposerImages): {
|
|
26
|
+
dispatchUserText: (text: string, placement: PendingMessage["placement"], images?: readonly ComposerImageRef[], attach?: UserMessage) => void;
|
|
27
|
+
deliverUserText: (text: string, placement: PendingMessage["placement"], images?: readonly ComposerImageRef[], attach?: UserMessage) => void;
|
|
28
|
+
claimAttachments: (messages: readonly UserMessage[]) => UserMessage[];
|
|
29
|
+
retireAttachment: (messageId: string) => void;
|
|
30
|
+
withDecisionPending: <T>(name: string, pending: Promise<T>, origin?: UserTextOrigin) => Promise<T>;
|
|
31
|
+
clearStagedImages: () => void;
|
|
32
|
+
stageImage: (input: StagedImageInput) => Promise<string>;
|
|
33
|
+
stagedImages: () => ReadonlyMap<string, ChannelImageBlock["attachment"]>;
|
|
34
|
+
composer: ComposerImages;
|
|
35
|
+
};
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=input-delivery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-delivery.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/input-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAI1E,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB;4EAC4E;AAC5E,UAAU,cAAc;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACpD,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;CAC5E;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,EACrE,KAAK,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,wBAAwB,CAAC,EAC7E,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,YAAY,EAAE,CAAC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,EAAE,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,IAAI,EAC3I,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,EACpC,QAAQ,EAAE,cAAc;6BA4Qf,MAAM,aACD,cAAc,CAAC,WAAW,CAAC,WAC9B,SAAS,gBAAgB,EAAE,WAC1B,WAAW,KACnB,IAAI;4BAcC,MAAM,aACD,cAAc,CAAC,WAAW,CAAC,WAC9B,SAAS,gBAAgB,EAAE,WAC1B,WAAW,KACnB,IAAI;iCA5Q6B,SAAS,WAAW,EAAE,KAAG,WAAW,EAAE;kCAarC,MAAM,KAAG,IAAI;0BAiIrB,CAAC,QAAQ,MAAM,WAAW,OAAO,CAAC,CAAC,CAAC,WAAW,cAAc,KAAG,OAAO,CAAC,CAAC,CAAC;6BAkIzE,IAAI;wBAaZ,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAAC;wBACpC,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;;EAGzE"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
2
|
+
import { t } from '../../i18n.js';
|
|
3
|
+
import { logForDebugging } from '../../utils/debug.js';
|
|
4
|
+
import { dispatchTuiDecision } from '../extension-events.js';
|
|
5
|
+
import { firstStaleComposerToken, formatMissingReference, orderedComposerImages, } from './composer-images.js';
|
|
6
|
+
import { expandComposerMentions } from './composer-mentions.js';
|
|
7
|
+
import { normalizeInputDecision } from './decisions.js';
|
|
8
|
+
import { mentionAttachments, mentionFs } from './mentions.js';
|
|
9
|
+
/** Input FIFO, staged attachments and decision notice timers share one lifetime. */
|
|
10
|
+
export function createInputDelivery(ctx, owner, binding, state, notify, trackPending, untrackPending, composer) {
|
|
11
|
+
/**
|
|
12
|
+
* `@` file mentions (issue #15): expansion reads files asynchronously, so
|
|
13
|
+
* every user-text delivery (submit / steer / interrupt-requeue) funnels
|
|
14
|
+
* through this chain to keep the send order FIFO.
|
|
15
|
+
*/
|
|
16
|
+
let inputChain = Promise.resolve();
|
|
17
|
+
/**
|
|
18
|
+
* Attached-context registry (issue #842): `deliverUserText(..., attach)`
|
|
19
|
+
* records the model-facing companion message under the DELIVERED user
|
|
20
|
+
* message's id. The resident `agent/pre-step` listener below claims an entry
|
|
21
|
+
* exactly once — on the step that admits its user message — and appends it
|
|
22
|
+
* AFTER `next()`'s batch, the same shape and order as dsh-tool-skill's
|
|
23
|
+
* gesture boundary. The map is emptied on claim, on inbox discard and on
|
|
24
|
+
* channel release (owner.own below).
|
|
25
|
+
*/
|
|
26
|
+
const attachedByMessageId = new Map();
|
|
27
|
+
/** Claim the batch's registered attachments, deleting each entry so a later
|
|
28
|
+
* step can never append it a second time. */
|
|
29
|
+
const claimAttachments = (messages) => {
|
|
30
|
+
if (attachedByMessageId.size === 0)
|
|
31
|
+
return [];
|
|
32
|
+
const attached = [];
|
|
33
|
+
for (const message of messages) {
|
|
34
|
+
const context = attachedByMessageId.get(message.id);
|
|
35
|
+
if (context === undefined)
|
|
36
|
+
continue;
|
|
37
|
+
attachedByMessageId.delete(message.id);
|
|
38
|
+
attached.push(context);
|
|
39
|
+
}
|
|
40
|
+
return attached;
|
|
41
|
+
};
|
|
42
|
+
/** Drop an attachment whose user message will never be claimed (inbox discard). */
|
|
43
|
+
const retireAttachment = (messageId) => {
|
|
44
|
+
attachedByMessageId.delete(messageId);
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Resident `agent/pre-step` listener (D3/D4): `await next()` lets every
|
|
48
|
+
* later transform run first; the waterfall applies AFTER-next transforms in
|
|
49
|
+
* registration order, so registering at channel construction keeps this
|
|
50
|
+
* append LAST (范例: presets/liangshen/instruction-hint.mjs). A rejected
|
|
51
|
+
* step never claims — no context message without its admitted user line —
|
|
52
|
+
* and a released owner returns the decision untouched. One `owner.own`
|
|
53
|
+
* lifetime covers both the subscription and the whole registry (D5).
|
|
54
|
+
*/
|
|
55
|
+
const disposePreStep = ctx.on('agent/pre-step', async (_payload, next) => {
|
|
56
|
+
const decision = await next();
|
|
57
|
+
if (decision.kind === 'reject')
|
|
58
|
+
return decision;
|
|
59
|
+
if (!owner.current())
|
|
60
|
+
return decision;
|
|
61
|
+
const attached = claimAttachments(decision.messages);
|
|
62
|
+
if (attached.length === 0)
|
|
63
|
+
return decision;
|
|
64
|
+
return { ...decision, messages: [...decision.messages, ...attached] };
|
|
65
|
+
});
|
|
66
|
+
owner.own(() => {
|
|
67
|
+
disposePreStep();
|
|
68
|
+
attachedByMessageId.clear();
|
|
69
|
+
});
|
|
70
|
+
/** D-6 fence: the submission belongs to the session it was typed in. */
|
|
71
|
+
const current = (origin) => owner.current() && binding.agent === origin.agent && state().agentBindingGeneration === origin.generation;
|
|
72
|
+
/** D-6: bind the submission to the session it was typed in AT ENQUEUE
|
|
73
|
+
* TIME. The FIFO chain may park this task behind a slow predecessor
|
|
74
|
+
* while the user /new's away — capturing the agent at run time would
|
|
75
|
+
* adopt the NEW session as this text's origin and deliver the old
|
|
76
|
+
* conversation's words into it. */
|
|
77
|
+
const captureOrigin = () => ({
|
|
78
|
+
agent: binding.agent,
|
|
79
|
+
agentId: state().agentId,
|
|
80
|
+
generation: state().agentBindingGeneration,
|
|
81
|
+
cwd: state().cwd,
|
|
82
|
+
fs: mentionFs(ctx),
|
|
83
|
+
attachments: mentionAttachments(ctx),
|
|
84
|
+
stagedImages: composer.snapshot(),
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* Expand the text's `@` mentions and deliver ONE user message: the typed
|
|
88
|
+
* text stays the first content block (the transcript bubble renders it —
|
|
89
|
+
* never the file dump) and each resolved reference appends a model-facing
|
|
90
|
+
* attachment block. The pending preview tracks the typed text.
|
|
91
|
+
*/
|
|
92
|
+
const deliverUserText = async (text, placement, images, origin, attach) => {
|
|
93
|
+
const orderedImages = orderedComposerImages(text, images, origin.stagedImages);
|
|
94
|
+
// A `[Image #N]` placeholder whose staging was evicted (FIFO cap) or
|
|
95
|
+
// whose draft capability was lost (history/rewind/session switch) would
|
|
96
|
+
// otherwise ship as plain text with no image attached — warn loudly,
|
|
97
|
+
// deliver unchanged (the text is the user's; rewriting is worse).
|
|
98
|
+
const stale = firstStaleComposerToken(text, orderedImages);
|
|
99
|
+
if (stale !== undefined) {
|
|
100
|
+
notify(t('input-image-token-stale', { token: stale }), { color: 'warning', timeoutMs: 5000 });
|
|
101
|
+
}
|
|
102
|
+
const expansion = await expandComposerMentions(origin.fs, origin.cwd, text, origin.attachments, orderedImages);
|
|
103
|
+
// Mention reads can park for arbitrary I/O. A session switch during that
|
|
104
|
+
// await invalidates the whole submission; neither the old nor the new
|
|
105
|
+
// agent may receive a message assembled for a different conversation.
|
|
106
|
+
if (!current(origin)) {
|
|
107
|
+
notify(t('ext-stale-dropped'), { color: 'warning', timeoutMs: 4000 });
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const message = createUserMessage({
|
|
111
|
+
content: expansion.blocks,
|
|
112
|
+
source: { kind: 'user' },
|
|
113
|
+
});
|
|
114
|
+
// The message is real from here on: remember its attached context BEFORE
|
|
115
|
+
// the agent call so the pre-step listener can find it (D6). A throwing
|
|
116
|
+
// followup/steer rolls both the pending preview and this entry back.
|
|
117
|
+
if (attach !== undefined)
|
|
118
|
+
attachedByMessageId.set(message.id, attach);
|
|
119
|
+
// Track BEFORE the agent call: a synchronous throw inside
|
|
120
|
+
// followup/steer rolls the preview back; otherwise the inbox events
|
|
121
|
+
// retire it once the message is claimed or discarded.
|
|
122
|
+
trackPending({ id: message.id, text, images }, placement);
|
|
123
|
+
try {
|
|
124
|
+
if (placement === 'steer')
|
|
125
|
+
origin.agent.steer(message);
|
|
126
|
+
else
|
|
127
|
+
origin.agent.followup(message);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (attach !== undefined)
|
|
131
|
+
attachedByMessageId.delete(message.id);
|
|
132
|
+
untrackPending(message.id);
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
if (expansion.attached.length > 0) {
|
|
136
|
+
notify(t('mentions-attached', { count: expansion.attached.length }), { timeoutMs: 2500 });
|
|
137
|
+
}
|
|
138
|
+
if (expansion.missing.length > 0) {
|
|
139
|
+
notify(t('mentions-missing', { paths: expansion.missing.map(formatMissingReference).join(' ') }), {
|
|
140
|
+
color: 'warning',
|
|
141
|
+
timeoutMs: 4000,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* RFC 0005 D-8: a flow parked on a plugin decision must be user-observable.
|
|
147
|
+
* Decisions normally resolve in milliseconds, so the notice only fires
|
|
148
|
+
* once the wait crosses a threshold — a slow plugin (e.g. one showing a
|
|
149
|
+
* managed dialog) then explains the pause instead of looking like the TUI
|
|
150
|
+
* ate the input.
|
|
151
|
+
*/
|
|
152
|
+
const DECISION_PENDING_MS = 400;
|
|
153
|
+
/**
|
|
154
|
+
* Session-scoped ledger of live pending-decision indicators. A session
|
|
155
|
+
* replacement must cancel the notice timer and dismiss an already-visible
|
|
156
|
+
* sticky notice even when the plugin's decision promise never settles; the
|
|
157
|
+
* owner-scoped release alone would keep it up until channel teardown, and a
|
|
158
|
+
* timer firing after the switch would raise the notice into the session that
|
|
159
|
+
* replaced the one which parked the input (review finding: stale decision
|
|
160
|
+
* notices were no longer dismissed or suppressed on session change).
|
|
161
|
+
*/
|
|
162
|
+
const pendingDecisionCleanups = new Set();
|
|
163
|
+
const withDecisionPending = (name, pending, origin) => {
|
|
164
|
+
let dismiss;
|
|
165
|
+
let timer;
|
|
166
|
+
const cleanup = () => {
|
|
167
|
+
if (timer !== undefined) {
|
|
168
|
+
clearTimeout(timer);
|
|
169
|
+
timer = undefined;
|
|
170
|
+
}
|
|
171
|
+
const raised = dismiss;
|
|
172
|
+
dismiss = undefined;
|
|
173
|
+
raised?.();
|
|
174
|
+
pendingDecisionCleanups.delete(cleanup);
|
|
175
|
+
};
|
|
176
|
+
timer = setTimeout(() => {
|
|
177
|
+
// Sticky (timeoutMs 0), D-8: the indicator must cover the WHOLE wait —
|
|
178
|
+
// an auto-expiring notice would vanish after ~4s while the decision,
|
|
179
|
+
// the delivery and every queued FIFO task behind them stay parked,
|
|
180
|
+
// leaving the user with no sign the flow is still waiting. It comes
|
|
181
|
+
// down only when the decision settles (finally below); a decision
|
|
182
|
+
// that never settles keeps its indicator up, which is the truthful
|
|
183
|
+
// state.
|
|
184
|
+
// A notice must never be raised for a session that has already been
|
|
185
|
+
// replaced: the switch drains this ledger, and the origin fence covers
|
|
186
|
+
// a timer that fires before that drain lands.
|
|
187
|
+
if (origin !== undefined && !current(origin)) {
|
|
188
|
+
cleanup();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (!owner.current())
|
|
192
|
+
return;
|
|
193
|
+
dismiss = notify(t('ext-decision-pending', { event: name }), { timeoutMs: 0 });
|
|
194
|
+
}, DECISION_PENDING_MS);
|
|
195
|
+
pendingDecisionCleanups.add(cleanup);
|
|
196
|
+
// Both exits are covered: a fast decision clears the timer before it
|
|
197
|
+
// fires; a slow one dismisses the indicator it raised. The owner release
|
|
198
|
+
// keeps the channel-teardown path working on top of the session drain.
|
|
199
|
+
const release = owner.own(cleanup);
|
|
200
|
+
return pending.finally(release);
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* The `tui/input` decision event (pi's `input` seam): the FIRST plugin
|
|
204
|
+
* returning a valid decision wins — transform the text, mark it handled,
|
|
205
|
+
* or cancel it. No listeners (or only crashing/malformed ones) means
|
|
206
|
+
* delivery proceeds unchanged, so a broken plugin can never wedge the
|
|
207
|
+
* input path — and can never skip a later veto listener either
|
|
208
|
+
* (dispatchTuiDecision isolates crashes and normalizes returns per
|
|
209
|
+
* listener instead of bailing on the first object).
|
|
210
|
+
*
|
|
211
|
+
* Decision AND delivery enter one FIFO chain in submission order: a slow
|
|
212
|
+
* listener on A parks A's delivery AND any later submissions behind it —
|
|
213
|
+
* without the chain, B's decision could resolve first and the model would
|
|
214
|
+
* receive B before A. Each submission binds its origin agent AT ENQUEUE,
|
|
215
|
+
* so a session switch landing before OR during its decision drops the
|
|
216
|
+
* stale text with a notice instead of sending the old conversation's
|
|
217
|
+
* words to the new session.
|
|
218
|
+
*/
|
|
219
|
+
const runUserTextDecision = async (text, placement, images, origin, attach) => {
|
|
220
|
+
// Stale detection compares the AGENT REFERENCE, not the id: session ids
|
|
221
|
+
// are reusable (A → /new → /resume A lands back on the same id with a
|
|
222
|
+
// fresh agent), so an id check has an ABA hole. Both origin values are
|
|
223
|
+
// ENQUEUE-time captures (see dispatchUserText): a decision parked behind
|
|
224
|
+
// a slow predecessor must still be judged against the session its text
|
|
225
|
+
// was typed in, not whichever session is live when it finally runs.
|
|
226
|
+
const dropIfStale = () => {
|
|
227
|
+
if (current(origin))
|
|
228
|
+
return false;
|
|
229
|
+
notify(t('ext-stale-dropped'), { color: 'warning', timeoutMs: 4000 });
|
|
230
|
+
return true;
|
|
231
|
+
};
|
|
232
|
+
// A follower can wait behind an older slow decision while /new replaces
|
|
233
|
+
// the session. Do not even expose that stale text to plugins.
|
|
234
|
+
if (dropIfStale())
|
|
235
|
+
return;
|
|
236
|
+
const decision = await withDecisionPending('tui/input', dispatchTuiDecision(ctx, 'tui/input', {
|
|
237
|
+
text,
|
|
238
|
+
delivery: placement === 'steer' ? 'steer' : 'followup',
|
|
239
|
+
sessionId: origin.agentId,
|
|
240
|
+
cwd: origin.cwd,
|
|
241
|
+
}, normalizeInputDecision), origin);
|
|
242
|
+
// Staleness wins over cancel/handled: an old plugin result must neither
|
|
243
|
+
// toast into nor claim input from the replacement session.
|
|
244
|
+
if (dropIfStale())
|
|
245
|
+
return;
|
|
246
|
+
if (decision !== undefined) {
|
|
247
|
+
// Both intercepts toast — a bare {cancel}/{handled} must not make the
|
|
248
|
+
// typed line vanish silently (the host-localized fallback mirrors the
|
|
249
|
+
// other decision events' ext-action-cancelled handling).
|
|
250
|
+
if ('cancel' in decision) {
|
|
251
|
+
notify(decision.reason ?? t('ext-action-cancelled'), { color: 'warning', timeoutMs: 4000 });
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if ('handled' in decision) {
|
|
255
|
+
notify(decision.notice ?? t('ext-action-handled'), { timeoutMs: 4000 });
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
text = decision.text.trim();
|
|
259
|
+
}
|
|
260
|
+
try {
|
|
261
|
+
await deliverUserText(text, placement, images, origin, attach);
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
// The FIFO must survive a failed expansion/send: surface it, then let
|
|
265
|
+
// the next input proceed through the settled inputChain.
|
|
266
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
267
|
+
logForDebugging(`submit: delivery failed (${message})`);
|
|
268
|
+
notify(t('send-failed', { err: message }), { color: 'error' });
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
const dispatchUserText = (text, placement, images = [], attach) => {
|
|
272
|
+
const origin = captureOrigin();
|
|
273
|
+
const capturedImages = composer.captureDraftImages(text, images);
|
|
274
|
+
inputChain = inputChain.then(() => runUserTextDecision(text, placement, capturedImages, origin, attach)).catch((error) => {
|
|
275
|
+
// The chain must survive a failed decision: log, then continue with
|
|
276
|
+
// the next queued submission.
|
|
277
|
+
ctx.logger.warn('dsh-tui: tui/input dispatch failed: %o', error);
|
|
278
|
+
});
|
|
279
|
+
};
|
|
280
|
+
/** Public companion for callers that own a line but not a draft (skill
|
|
281
|
+
* registrations): same decision pass and FIFO as a typed submit. The
|
|
282
|
+
* optional `attach` is registered by `deliverUserText` only once its user
|
|
283
|
+
* message is real, then appended at the end of that message's step batch. */
|
|
284
|
+
const deliverUserTextNow = (text, placement, images = [], attach) => dispatchUserText(text, placement, images, attach);
|
|
285
|
+
/** Main's `clearStagedImages`: revoke capabilities AND release the FIFO so
|
|
286
|
+
* a task parked on the replaced session cannot wedge the new one, and drop
|
|
287
|
+
* every pending-decision indicator owned by the session being replaced. */
|
|
288
|
+
const clearStagedImages = () => {
|
|
289
|
+
composer.clearStagedImages();
|
|
290
|
+
inputChain = Promise.resolve();
|
|
291
|
+
for (const cleanup of [...pendingDecisionCleanups])
|
|
292
|
+
cleanup();
|
|
293
|
+
};
|
|
294
|
+
return {
|
|
295
|
+
dispatchUserText,
|
|
296
|
+
deliverUserText: deliverUserTextNow,
|
|
297
|
+
claimAttachments,
|
|
298
|
+
retireAttachment,
|
|
299
|
+
withDecisionPending,
|
|
300
|
+
clearStagedImages,
|
|
301
|
+
stageImage: (input) => composer.stageImage(input),
|
|
302
|
+
stagedImages: () => composer.snapshot(),
|
|
303
|
+
composer,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
2
|
+
import { BackgroundJobStore, type JobsRuntime } from '../jobs.js';
|
|
3
|
+
import type { ChannelOwner } from './owner.js';
|
|
4
|
+
import type { ChannelState, JobControl } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Current-binding background-job projection. The registry can publish every
|
|
7
|
+
* owner's changes, so callbacks must prove their attachment and Channel owner
|
|
8
|
+
* are still current before they read a service or mutate projected rows.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createJobProjection(getState: () => Pick<ChannelState, 'backgroundJobs' | 'rows' | 'emit'>, deps: {
|
|
11
|
+
owner: Pick<ChannelOwner, 'current' | 'own'>;
|
|
12
|
+
notify(text: string, options?: {
|
|
13
|
+
color?: 'success' | 'error' | 'warning';
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
}): unknown;
|
|
16
|
+
rowIds: {
|
|
17
|
+
value: number;
|
|
18
|
+
};
|
|
19
|
+
agent(): Agent;
|
|
20
|
+
steer(text: string): void;
|
|
21
|
+
}): {
|
|
22
|
+
store: BackgroundJobStore;
|
|
23
|
+
control: JobControl;
|
|
24
|
+
attach: (jobs: JobsRuntime | undefined, ownService?: (dispose: () => void) => void) => void;
|
|
25
|
+
dropRows: () => void;
|
|
26
|
+
reset: () => void;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=job-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-projection.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/job-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAGnD,OAAO,EAAE,kBAAkB,EAAqB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAW,UAAU,EAAE,MAAM,YAAY,CAAA;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC,EACtE,IAAI,EAAE;IACJ,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,KAAK,CAAC,CAAA;IAC5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAA;IACxG,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACzB,KAAK,IAAI,KAAK,CAAA;IACd,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;;;mBA4EqB,WAAW,GAAG,SAAS,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,KAAG,IAAI;oBAwD3E,IAAI;iBACP,IAAI;EAGvB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { markChannelReadDirty } from '../../adapter/channel/read-view.js';
|
|
2
|
+
import { t } from '../../i18n.js';
|
|
3
|
+
import { BackgroundJobStore, formatJobDuration } from '../jobs.js';
|
|
4
|
+
/**
|
|
5
|
+
* Current-binding background-job projection. The registry can publish every
|
|
6
|
+
* owner's changes, so callbacks must prove their attachment and Channel owner
|
|
7
|
+
* are still current before they read a service or mutate projected rows.
|
|
8
|
+
*/
|
|
9
|
+
export function createJobProjection(getState, deps) {
|
|
10
|
+
const jobRowsByJobId = new Map();
|
|
11
|
+
let jobsRuntime;
|
|
12
|
+
let detachActive;
|
|
13
|
+
let attachmentToken;
|
|
14
|
+
let attachmentCurrent = () => false;
|
|
15
|
+
const syncRows = () => {
|
|
16
|
+
if (!attachmentCurrent())
|
|
17
|
+
return;
|
|
18
|
+
const state = getState();
|
|
19
|
+
state.backgroundJobs = store.snapshot();
|
|
20
|
+
for (const job of state.backgroundJobs) {
|
|
21
|
+
let row = jobRowsByJobId.get(job.id);
|
|
22
|
+
if (!row) {
|
|
23
|
+
row = { id: deps.rowIds.value++, kind: 'job', text: job.label, job: undefined };
|
|
24
|
+
jobRowsByJobId.set(job.id, row);
|
|
25
|
+
state.rows.push(row);
|
|
26
|
+
}
|
|
27
|
+
row.job = {
|
|
28
|
+
id: job.id,
|
|
29
|
+
kind: job.kind,
|
|
30
|
+
label: job.label,
|
|
31
|
+
status: job.status,
|
|
32
|
+
...(job.detail === undefined ? {} : { detail: job.detail }),
|
|
33
|
+
startedAt: job.startedAt,
|
|
34
|
+
...(job.finishedAt === undefined ? {} : { finishedAt: job.finishedAt }),
|
|
35
|
+
outputLines: job.outputLines,
|
|
36
|
+
};
|
|
37
|
+
row.text = job.label;
|
|
38
|
+
markChannelReadDirty(row);
|
|
39
|
+
markChannelReadDirty(state.rows);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const store = new BackgroundJobStore({
|
|
43
|
+
onSettled(job) {
|
|
44
|
+
deps.notify(t(job.status === 'completed' ? 'jobs-toast-completed' : job.status === 'failed' ? 'jobs-toast-failed' : 'jobs-toast-killed', {
|
|
45
|
+
id: job.id,
|
|
46
|
+
label: job.label,
|
|
47
|
+
duration: formatJobDuration(job),
|
|
48
|
+
detail: job.detail ?? '',
|
|
49
|
+
}), { color: job.status === 'completed' ? 'success' : job.status === 'failed' ? 'error' : 'warning', timeoutMs: 6000 });
|
|
50
|
+
},
|
|
51
|
+
onChanged() {
|
|
52
|
+
if (!attachmentCurrent())
|
|
53
|
+
return;
|
|
54
|
+
syncRows();
|
|
55
|
+
if (attachmentCurrent())
|
|
56
|
+
getState().emit();
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
const control = {
|
|
60
|
+
kill(id) {
|
|
61
|
+
const jobs = jobsRuntime;
|
|
62
|
+
if (!jobs?.kill)
|
|
63
|
+
return false;
|
|
64
|
+
const job = store.get(id);
|
|
65
|
+
try {
|
|
66
|
+
jobs.kill(id, deps.agent(), 'dsh-tui /jobs panel');
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (job !== undefined && (job.status === 'running' || job.status === 'stopping')) {
|
|
72
|
+
deps.steer(t('jobs-steer-killed', { id, label: job.label }));
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Each service attachment has one idempotent disposer, dual-owned by the
|
|
79
|
+
* Channel and (when injected) the service context. Reattachment revokes the
|
|
80
|
+
* prior token before the replacement may synchronously publish.
|
|
81
|
+
*/
|
|
82
|
+
const attach = (jobs, ownService) => {
|
|
83
|
+
if (jobs === undefined)
|
|
84
|
+
return;
|
|
85
|
+
detachActive?.();
|
|
86
|
+
jobsRuntime = jobs;
|
|
87
|
+
const token = Symbol('jobs-attachment');
|
|
88
|
+
let detached = false;
|
|
89
|
+
let detach;
|
|
90
|
+
const current = () => !detached && attachmentToken === token && detachActive === detach && jobsRuntime === jobs && deps.owner.current();
|
|
91
|
+
const refresh = () => {
|
|
92
|
+
// Check before list(): retained callbacks must not touch a revoked or
|
|
93
|
+
// replaced service, nor invoke any store/row work after owner disposal.
|
|
94
|
+
if (!current())
|
|
95
|
+
return;
|
|
96
|
+
try {
|
|
97
|
+
const snapshot = jobs.list(deps.agent());
|
|
98
|
+
if (!current())
|
|
99
|
+
return;
|
|
100
|
+
store.replace(snapshot);
|
|
101
|
+
}
|
|
102
|
+
catch { /* optional service is disposing */ }
|
|
103
|
+
};
|
|
104
|
+
// Publish the attachment identity before subscription: registries are
|
|
105
|
+
// allowed to synchronously deliver their current snapshot from on*().
|
|
106
|
+
// Every registration below is transactional because a second on*() can
|
|
107
|
+
// throw after the first one successfully subscribed.
|
|
108
|
+
const disposers = [];
|
|
109
|
+
let releaseOwner;
|
|
110
|
+
detach = () => {
|
|
111
|
+
if (detached)
|
|
112
|
+
return;
|
|
113
|
+
detached = true;
|
|
114
|
+
if (detachActive === detach) {
|
|
115
|
+
detachActive = undefined;
|
|
116
|
+
attachmentToken = undefined;
|
|
117
|
+
attachmentCurrent = () => false;
|
|
118
|
+
}
|
|
119
|
+
if (jobsRuntime === jobs)
|
|
120
|
+
jobsRuntime = undefined;
|
|
121
|
+
for (const dispose of disposers.splice(0))
|
|
122
|
+
dispose?.();
|
|
123
|
+
// A service-context detach happens before channel teardown on remount;
|
|
124
|
+
// release its Channel owner entry now rather than retaining one cleanup
|
|
125
|
+
// per remount until the entire channel exits.
|
|
126
|
+
const release = releaseOwner;
|
|
127
|
+
releaseOwner = undefined;
|
|
128
|
+
release?.();
|
|
129
|
+
};
|
|
130
|
+
detachActive = detach;
|
|
131
|
+
attachmentToken = token;
|
|
132
|
+
attachmentCurrent = current;
|
|
133
|
+
try {
|
|
134
|
+
if (typeof jobs.onJobsChanged === 'function')
|
|
135
|
+
disposers.push(jobs.onJobsChanged(refresh));
|
|
136
|
+
if (typeof jobs.onJobDone === 'function')
|
|
137
|
+
disposers.push(jobs.onJobDone(refresh));
|
|
138
|
+
releaseOwner = deps.owner.own(detach);
|
|
139
|
+
ownService?.(detach);
|
|
140
|
+
refresh();
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
detach();
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const dropRows = () => { jobRowsByJobId.clear(); };
|
|
148
|
+
const reset = () => { dropRows(); store.reset(); };
|
|
149
|
+
return { store, control, attach, dropRows, reset };
|
|
150
|
+
}
|