@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,26 @@
|
|
|
1
|
+
import type { ComposerImageRef, PendingMessage } from './types.js';
|
|
2
|
+
/** Small mutable cells for Channel-local warning and pending-message state. */
|
|
3
|
+
export declare function createContextBookkeeping(state: () => {
|
|
4
|
+
contextWindow: number | undefined;
|
|
5
|
+
tokens: {
|
|
6
|
+
input: number;
|
|
7
|
+
};
|
|
8
|
+
pending: PendingMessage[];
|
|
9
|
+
emit(): void;
|
|
10
|
+
}, notify: (text: string, options: {
|
|
11
|
+
color: 'warning';
|
|
12
|
+
timeoutMs: number;
|
|
13
|
+
}) => unknown, lowContextText: (percent: number) => string, warningBufferTokens: number): {
|
|
14
|
+
warning: {
|
|
15
|
+
value: boolean;
|
|
16
|
+
};
|
|
17
|
+
resetContextWarning: () => void;
|
|
18
|
+
checkContextWarning: () => void;
|
|
19
|
+
trackPending: (message: {
|
|
20
|
+
id: string;
|
|
21
|
+
text: string;
|
|
22
|
+
images?: readonly ComposerImageRef[];
|
|
23
|
+
}, placement: PendingMessage["placement"]) => void;
|
|
24
|
+
untrackPending: (messageId: string) => void;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=context-bookkeeping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-bookkeeping.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/context-bookkeeping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAElE,+EAA+E;AAC/E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM;IACX,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACzB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,IAAI,IAAI,IAAI,CAAA;CACb,EACD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,EACnF,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAC3C,mBAAmB,EAAE,MAAM;;;;+BAwBK,IAAI;+BArBJ,IAAI;4BAUL;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;KAAE,aAAa,cAAc,CAAC,WAAW,CAAC,KAAG,IAAI;gCAK7G,MAAM,KAAG,IAAI;EAQjD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Small mutable cells for Channel-local warning and pending-message state. */
|
|
2
|
+
export function createContextBookkeeping(state, notify, lowContextText, warningBufferTokens) {
|
|
3
|
+
const warning = { value: false };
|
|
4
|
+
const checkContextWarning = () => {
|
|
5
|
+
const channel = state();
|
|
6
|
+
if (warning.value || channel.contextWindow === undefined)
|
|
7
|
+
return;
|
|
8
|
+
const remaining = channel.contextWindow - channel.tokens.input;
|
|
9
|
+
if (remaining >= warningBufferTokens)
|
|
10
|
+
return;
|
|
11
|
+
warning.value = true;
|
|
12
|
+
notify(lowContextText(Math.max(0, Math.round((remaining / channel.contextWindow) * 100))), {
|
|
13
|
+
color: 'warning', timeoutMs: 8000,
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
const trackPending = (message, placement) => {
|
|
17
|
+
const channel = state();
|
|
18
|
+
channel.pending = [...channel.pending, { id: message.id, text: message.text, images: message.images ?? [], placement }];
|
|
19
|
+
channel.emit();
|
|
20
|
+
};
|
|
21
|
+
const untrackPending = (messageId) => {
|
|
22
|
+
const channel = state();
|
|
23
|
+
const before = channel.pending.length;
|
|
24
|
+
channel.pending = channel.pending.filter(item => item.id !== messageId);
|
|
25
|
+
if (channel.pending.length !== before)
|
|
26
|
+
channel.emit();
|
|
27
|
+
};
|
|
28
|
+
const resetContextWarning = () => { warning.value = false; };
|
|
29
|
+
return { warning, resetContextWarning, checkContextWarning, trackPending, untrackPending };
|
|
30
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TuiInputDecision, TuiRewindPromptDecision } from '../extension-events.js';
|
|
2
|
+
/** `tui/input` return normalization: transform/handled/cancel or no opinion.
|
|
3
|
+
* A blank `{ text }` rewrite is NOT a decision — it is logged and the chain
|
|
4
|
+
* continues so a later veto listener still runs. */
|
|
5
|
+
export declare function normalizeInputDecision(result: unknown, warn: (what: string) => void): TuiInputDecision | undefined;
|
|
6
|
+
/** `tui/rewind-prompt` return normalization: cancel/modes or no opinion.
|
|
7
|
+
* Modes are COPIED with only validated, sanitized scalar fields — the raw
|
|
8
|
+
* plugin object must never reach the render path (a `description: {}` would
|
|
9
|
+
* crash ListItem's `.replace`, and control chars would corrupt the pane).
|
|
10
|
+
* Notices/reasons are toast-bound plugin text: sanitized too (see
|
|
11
|
+
* ./sanitize.js — the one implementation of the render-path contract). */
|
|
12
|
+
export declare function normalizeRewindPromptDecision(result: unknown, warn: (what: string) => void): TuiRewindPromptDecision | undefined;
|
|
13
|
+
/** Toast-bound plugin text (veto reasons, handled notices, rewind summaries)
|
|
14
|
+
* is render-path data too: same sanitization, toast-width cap. */
|
|
15
|
+
export declare const NOTICE_CELLS = 200;
|
|
16
|
+
/** `tui/rewind-done` return normalization: the first non-empty STRING is the
|
|
17
|
+
* summary; anything else is not a decision. */
|
|
18
|
+
export declare function normalizeRewindDoneSummary(result: unknown, warn: (what: string) => void): string | undefined;
|
|
19
|
+
//# sourceMappingURL=decisions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/decisions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEhB,uBAAuB,EACxB,MAAM,wBAAwB,CAAA;AAG/B;;qDAEqD;AACrD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,gBAAgB,GAAG,SAAS,CAwB9B;AAED;;;;;2EAK2E;AAC3E,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,uBAAuB,GAAG,SAAS,CAkCrC;AAED;mEACmE;AACnE,eAAO,MAAM,YAAY,MAAM,CAAA;AAE/B;gDACgD;AAChD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,CAQ5G"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { cleanRenderText, cleanScalarText } from '../sanitize.js';
|
|
2
|
+
/** `tui/input` return normalization: transform/handled/cancel or no opinion.
|
|
3
|
+
* A blank `{ text }` rewrite is NOT a decision — it is logged and the chain
|
|
4
|
+
* continues so a later veto listener still runs. */
|
|
5
|
+
export function normalizeInputDecision(result, warn) {
|
|
6
|
+
if (result === undefined || result === null || result === false)
|
|
7
|
+
return undefined;
|
|
8
|
+
if (typeof result !== 'object') {
|
|
9
|
+
warn(`a non-object (${typeof result})`);
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const record = result;
|
|
13
|
+
if (record.cancel === true) {
|
|
14
|
+
const reason = cleanScalarText(record.reason, NOTICE_CELLS);
|
|
15
|
+
return { cancel: true, ...(reason === '' ? {} : { reason }) };
|
|
16
|
+
}
|
|
17
|
+
if (record.handled === true) {
|
|
18
|
+
const notice = cleanScalarText(record.notice, NOTICE_CELLS);
|
|
19
|
+
return { handled: true, ...(notice === '' ? {} : { notice }) };
|
|
20
|
+
}
|
|
21
|
+
if (typeof record.text === 'string') {
|
|
22
|
+
if (record.text.trim() === '') {
|
|
23
|
+
warn('a blank {text} rewrite');
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
return { text: record.text };
|
|
27
|
+
}
|
|
28
|
+
warn('an unrecognized decision shape');
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
/** `tui/rewind-prompt` return normalization: cancel/modes or no opinion.
|
|
32
|
+
* Modes are COPIED with only validated, sanitized scalar fields — the raw
|
|
33
|
+
* plugin object must never reach the render path (a `description: {}` would
|
|
34
|
+
* crash ListItem's `.replace`, and control chars would corrupt the pane).
|
|
35
|
+
* Notices/reasons are toast-bound plugin text: sanitized too (see
|
|
36
|
+
* ./sanitize.js — the one implementation of the render-path contract). */
|
|
37
|
+
export function normalizeRewindPromptDecision(result, warn) {
|
|
38
|
+
if (result === undefined || result === null || result === false)
|
|
39
|
+
return undefined;
|
|
40
|
+
if (typeof result !== 'object') {
|
|
41
|
+
warn(`a non-object (${typeof result})`);
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
const record = result;
|
|
45
|
+
if (record.cancel === true) {
|
|
46
|
+
const reason = cleanScalarText(record.reason, NOTICE_CELLS);
|
|
47
|
+
return { cancel: true, ...(reason === '' ? {} : { reason }) };
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(record.modes)) {
|
|
50
|
+
const modes = [];
|
|
51
|
+
for (const raw of record.modes) {
|
|
52
|
+
if (modes.length >= 8)
|
|
53
|
+
break;
|
|
54
|
+
if (raw === null || typeof raw !== 'object')
|
|
55
|
+
continue;
|
|
56
|
+
const candidate = raw;
|
|
57
|
+
if (typeof candidate.id !== 'string' || candidate.id.trim() === '')
|
|
58
|
+
continue;
|
|
59
|
+
const label = typeof candidate.label === 'string' ? cleanRenderText(candidate.label, 120) : '';
|
|
60
|
+
if (label === '')
|
|
61
|
+
continue;
|
|
62
|
+
const description = typeof candidate.description === 'string' && candidate.description.trim() !== ''
|
|
63
|
+
? cleanRenderText(candidate.description, 400)
|
|
64
|
+
: undefined;
|
|
65
|
+
modes.push({ id: candidate.id, label, ...(description === undefined ? {} : { description }) });
|
|
66
|
+
}
|
|
67
|
+
if (modes.length === 0) {
|
|
68
|
+
warn('an empty or invalid {modes} list');
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
return { modes };
|
|
72
|
+
}
|
|
73
|
+
warn('an unrecognized decision shape');
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
/** Toast-bound plugin text (veto reasons, handled notices, rewind summaries)
|
|
77
|
+
* is render-path data too: same sanitization, toast-width cap. */
|
|
78
|
+
export const NOTICE_CELLS = 200;
|
|
79
|
+
/** `tui/rewind-done` return normalization: the first non-empty STRING is the
|
|
80
|
+
* summary; anything else is not a decision. */
|
|
81
|
+
export function normalizeRewindDoneSummary(result, warn) {
|
|
82
|
+
if (result === undefined || result === null || result === false)
|
|
83
|
+
return undefined;
|
|
84
|
+
if (typeof result === 'string') {
|
|
85
|
+
const summary = cleanRenderText(result, NOTICE_CELLS);
|
|
86
|
+
return summary === '' ? undefined : summary;
|
|
87
|
+
}
|
|
88
|
+
warn('a non-string summary');
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ChannelState } from './types.js';
|
|
2
|
+
export declare function createChannelEmitter(getState: () => Pick<ChannelState, 'rows' | 'version'>,
|
|
3
|
+
/** Returns true when the deferred projector changed renderer-visible data. */
|
|
4
|
+
beforeStream: () => boolean): {
|
|
5
|
+
subscribe(listener: () => void): () => void;
|
|
6
|
+
emit(): void;
|
|
7
|
+
emitStream(): void;
|
|
8
|
+
dispose(): void;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/emitter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;AACtD,8EAA8E;AAC9E,YAAY,EAAE,MAAM,OAAO;wBAmBL,MAAM,IAAI;;;;EAkCjC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** One owner for synchronous versions and frame-coalesced renderer wakeups. */
|
|
2
|
+
import { swallowNestedUpdateOverflow } from '../../ink/update-overflow-guard.js';
|
|
3
|
+
import { foldRows, MAX_ROWS } from './transcript.js';
|
|
4
|
+
export function createChannelEmitter(getState,
|
|
5
|
+
/** Returns true when the deferred projector changed renderer-visible data. */
|
|
6
|
+
beforeStream) {
|
|
7
|
+
const listeners = new Set();
|
|
8
|
+
const foldCursor = { rows: undefined, index: 0 };
|
|
9
|
+
let timer;
|
|
10
|
+
let disposed = false;
|
|
11
|
+
const wake = (source) => {
|
|
12
|
+
const state = getState();
|
|
13
|
+
// Folding mutates retained transcript rows after a reader may have
|
|
14
|
+
// cached the ingress revision. Publish that completed fold separately so
|
|
15
|
+
// listeners cannot observe a stale or mixed same-version snapshot.
|
|
16
|
+
if (foldRows(state.rows, MAX_ROWS, foldCursor) > 0)
|
|
17
|
+
state.version += 1;
|
|
18
|
+
for (const listener of listeners) {
|
|
19
|
+
try {
|
|
20
|
+
listener();
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (!swallowNestedUpdateOverflow(error, source))
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
subscribe(listener) {
|
|
30
|
+
if (disposed)
|
|
31
|
+
return () => undefined;
|
|
32
|
+
listeners.add(listener);
|
|
33
|
+
return () => { listeners.delete(listener); };
|
|
34
|
+
},
|
|
35
|
+
emit() {
|
|
36
|
+
if (disposed)
|
|
37
|
+
return;
|
|
38
|
+
getState().version += 1;
|
|
39
|
+
wake('channel.emit');
|
|
40
|
+
},
|
|
41
|
+
emitStream() {
|
|
42
|
+
if (disposed)
|
|
43
|
+
return;
|
|
44
|
+
getState().version += 1;
|
|
45
|
+
if (timer !== undefined)
|
|
46
|
+
return;
|
|
47
|
+
timer = setTimeout(() => {
|
|
48
|
+
timer = undefined;
|
|
49
|
+
if (disposed)
|
|
50
|
+
return;
|
|
51
|
+
// emitStream bumps on ingress so ordinary stream state is observable
|
|
52
|
+
// immediately. A deferred projector can then publish its completed
|
|
53
|
+
// snapshot as a distinct revision, preventing a pre-flush read from
|
|
54
|
+
// surviving the wakeup with stale rows.
|
|
55
|
+
if (beforeStream())
|
|
56
|
+
getState().version += 1;
|
|
57
|
+
wake('channel.emitStream');
|
|
58
|
+
}, 16);
|
|
59
|
+
timer.unref();
|
|
60
|
+
},
|
|
61
|
+
dispose() {
|
|
62
|
+
if (disposed)
|
|
63
|
+
return;
|
|
64
|
+
disposed = true;
|
|
65
|
+
if (timer !== undefined)
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
timer = undefined;
|
|
68
|
+
listeners.clear();
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import type { CommandRuntime } from '@deepseek-ai/dsh-commands';
|
|
4
|
+
import { type ComposerImages } from './composer-images.js';
|
|
5
|
+
import type { ComposerImageRef, ExternalCommandOutcome, MentionAttachments } from './types.js';
|
|
6
|
+
/** Plugin-command invocation has one owner: this module owns gates, image
|
|
7
|
+
* encoding and the settled draft-consumption outcome. */
|
|
8
|
+
export declare function createExternalCommandInvoker(ctx: Context, deps: {
|
|
9
|
+
commandService: CommandRuntime | undefined;
|
|
10
|
+
runtime: {
|
|
11
|
+
mode: string;
|
|
12
|
+
slices: readonly string[];
|
|
13
|
+
};
|
|
14
|
+
agent(): Agent;
|
|
15
|
+
capture(): unknown;
|
|
16
|
+
bindingCurrent(capture: unknown): boolean;
|
|
17
|
+
allows(subject: {
|
|
18
|
+
componentId: string;
|
|
19
|
+
activationId?: string;
|
|
20
|
+
}, permission: string, scope: string): boolean;
|
|
21
|
+
composer: ComposerImages;
|
|
22
|
+
attachments(): MentionAttachments | undefined;
|
|
23
|
+
notify(text: string, options?: {
|
|
24
|
+
color?: 'success' | 'error' | 'warning';
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
}): void;
|
|
27
|
+
}): {
|
|
28
|
+
invoke: (name: string, rawInput: string, imageRefs?: readonly ComposerImageRef[]) => Promise<ExternalCommandOutcome | undefined>;
|
|
29
|
+
invokeText: (name: string, rawInput: string, imageRefs?: readonly ComposerImageRef[]) => Promise<string | undefined>;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=external-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-commands.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/external-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAKjF,OAAO,EAAkD,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1G,OAAO,KAAK,EAAqB,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAcjH;0DAC0D;AAC1D,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IACJ,cAAc,EAAE,cAAc,GAAG,SAAS,CAAA;IAC1C,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;IACpD,KAAK,IAAI,KAAK,CAAA;IACd,OAAO,IAAI,OAAO,CAAA;IAClB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAA;IACzC,MAAM,CAAC,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3G,QAAQ,EAAE,cAAc,CAAA;IACxB,WAAW,IAAI,kBAAkB,GAAG,SAAS,CAAA;IAC7C,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,IAAI,CAAA;CACtG;mBA+HO,MAAM,YACF,MAAM,cACL,SAAS,gBAAgB,EAAE,KACrC,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;uBA2EtC,MAAM,YACF,MAAM,cACL,SAAS,gBAAgB,EAAE,KACrC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;EAG/B"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { installedMeetsVersion } from '../contract.js';
|
|
2
|
+
import { commandOwner } from '../command-attribution.js';
|
|
3
|
+
import { assertCapabilityShadowPolicy } from '../../adapter/kernel/runtime.js';
|
|
4
|
+
import { t } from '../../i18n.js';
|
|
5
|
+
import { firstStaleComposerToken, orderedComposerImages } from './composer-images.js';
|
|
6
|
+
/** Plugin-command invocation has one owner: this module owns gates, image
|
|
7
|
+
* encoding and the settled draft-consumption outcome. */
|
|
8
|
+
export function createExternalCommandInvoker(ctx, deps) {
|
|
9
|
+
/** Whether the installed command service takes composer images: version
|
|
10
|
+
* gate (composer images arrived on 0.1.0-rc.8 and every later family —
|
|
11
|
+
* 0.1.1 included — keeps the 4-param shape) with a structural fallback,
|
|
12
|
+
* so a failed manifest probe (bundlers, exotic loaders) still lands on
|
|
13
|
+
* the 4-param rc.8 shape at runtime. */
|
|
14
|
+
const supportsImages = (service) => installedMeetsVersion('@deepseek-ai/dsh-commands', '0.1.0-rc.8')
|
|
15
|
+
|| (typeof service.execute.length === 'number' && service.execute.length >= 4);
|
|
16
|
+
const authorize = (definition, name) => {
|
|
17
|
+
// Derive identity from the effective definition, never the display name:
|
|
18
|
+
// scoped same-name handlers can have different verified owners.
|
|
19
|
+
const owner = commandOwner(ctx, definition);
|
|
20
|
+
const rootScope = owner?.commandId ?? (/^[a-z][a-z0-9]*(?:[.-][a-z0-9][a-z0-9-]*)+$/u.test(name) ? name : `dsh-tui.${name.toLowerCase().replace(/[^a-z0-9-]+/gu, '-').replace(/^-+|-+$/gu, '') || 'command'}`);
|
|
21
|
+
if (!deps.allows({ componentId: 'root' }, 'commands.invoke', rootScope)) {
|
|
22
|
+
ctx.logger.warn('dsh-tui: registry command invocation denied (commands.invoke revoked for "root" in the grants file)');
|
|
23
|
+
ctx.get('tuiEffectLedger')?.record({ operation: 'bind', resource: { kind: 'permission', id: `root:commands.invoke:${rootScope}` }, result: 'failed', errorCode: 'PERMISSION_NOT_GRANTED' }, ctx);
|
|
24
|
+
return t('command-invoke-denied');
|
|
25
|
+
}
|
|
26
|
+
if (owner !== undefined && !deps.allows({ componentId: owner.componentId, activationId: owner.activationId }, 'commands.invoke', owner.commandId)) {
|
|
27
|
+
ctx.logger.warn(`dsh-tui: registry command "/${name}" invocation denied — owner Component "${owner.componentId}" lost commands.invoke for "${owner.commandId}"`);
|
|
28
|
+
ctx.get('tuiEffectLedger')?.record({ operation: 'bind', resource: { kind: 'permission', id: `${owner.componentId}:commands.invoke:${owner.commandId}` }, result: 'failed', errorCode: 'PERMISSION_NOT_GRANTED' }, ctx);
|
|
29
|
+
return t('command-invoke-denied-owner', { name, owner: owner.componentId });
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
};
|
|
33
|
+
/** Encode the staged `@`-mention images the user pasted for THIS command
|
|
34
|
+
* line into rc.8's `EncodedImageAttachment` payloads; `kind: 'legacy'`
|
|
35
|
+
* means the installed dsh-commands line predates composer images
|
|
36
|
+
* (rc.7/rc.6), so the caller uses the legacy 3-arg invoke. Matches the
|
|
37
|
+
* submit pipeline's token rule (expandComposerMentions): a staged image
|
|
38
|
+
* attaches only when the line references its token. The composer
|
|
39
|
+
* preflights `input.images`, but this adapter still forwards every
|
|
40
|
+
* supplied image: rc.8 owns admission, so non-UI callers cannot
|
|
41
|
+
* accidentally bypass the registry contract. Preparation is atomic:
|
|
42
|
+
* limits are checked from durable metadata before any read/base64 work,
|
|
43
|
+
* and one missing or unreadable image prevents the handler from running
|
|
44
|
+
* with a silently truncated batch. */
|
|
45
|
+
const registryCommandImages = async (service, line, imageRefs, staged, signal) => {
|
|
46
|
+
const ordered = orderedComposerImages(line, imageRefs, staged);
|
|
47
|
+
// A `[Image #N]` with no live staging is plain text here, exactly as on
|
|
48
|
+
// the submit path: warn once, keep the line unchanged. Only referenced,
|
|
49
|
+
// staged images take part in the batch below.
|
|
50
|
+
const stale = firstStaleComposerToken(line, ordered);
|
|
51
|
+
if (stale !== undefined) {
|
|
52
|
+
deps.notify(t('input-image-token-stale', { token: stale }), { color: 'warning', timeoutMs: 5000 });
|
|
53
|
+
}
|
|
54
|
+
if (!supportsImages(service)) {
|
|
55
|
+
return ordered.size > 0
|
|
56
|
+
? { kind: 'error', reason: 'runtime', tokens: [...ordered.keys()] }
|
|
57
|
+
: { kind: 'legacy' };
|
|
58
|
+
}
|
|
59
|
+
if (ordered.size === 0)
|
|
60
|
+
return { kind: 'ready', images: [] };
|
|
61
|
+
const store = deps.attachments();
|
|
62
|
+
if (typeof store?.readImage !== 'function') {
|
|
63
|
+
return { kind: 'error', reason: 'missing', tokens: [...ordered.keys()] };
|
|
64
|
+
}
|
|
65
|
+
const { imageLimits: limits } = store;
|
|
66
|
+
let declaredBytes = 0;
|
|
67
|
+
for (const attachment of ordered.values()) {
|
|
68
|
+
if (!Number.isSafeInteger(attachment.bytes)
|
|
69
|
+
|| attachment.bytes <= 0
|
|
70
|
+
|| attachment.bytes > limits.maxImageBytes
|
|
71
|
+
|| !limits.mediaTypes.includes(attachment.mediaType)) {
|
|
72
|
+
return { kind: 'error', reason: 'limits', tokens: [...ordered.keys()] };
|
|
73
|
+
}
|
|
74
|
+
declaredBytes += attachment.bytes;
|
|
75
|
+
}
|
|
76
|
+
if (ordered.size > limits.maxImagesPerMessage
|
|
77
|
+
|| declaredBytes > limits.maxMessageImageBytes) {
|
|
78
|
+
return { kind: 'error', reason: 'limits', tokens: [...ordered.keys()] };
|
|
79
|
+
}
|
|
80
|
+
const loaded = [];
|
|
81
|
+
let actualBytes = 0;
|
|
82
|
+
for (const [token, attachment] of ordered) {
|
|
83
|
+
try {
|
|
84
|
+
const stored = await store.readImage(attachment, signal);
|
|
85
|
+
if (!(stored?.data instanceof Uint8Array) || stored.data.byteLength <= 0) {
|
|
86
|
+
return { kind: 'error', reason: 'missing', tokens: [token] };
|
|
87
|
+
}
|
|
88
|
+
actualBytes += stored.data.byteLength;
|
|
89
|
+
if (stored.data.byteLength > limits.maxImageBytes
|
|
90
|
+
|| actualBytes > limits.maxMessageImageBytes) {
|
|
91
|
+
return { kind: 'error', reason: 'limits', tokens: [...ordered.keys()] };
|
|
92
|
+
}
|
|
93
|
+
loaded.push({ token, attachment, data: stored.data });
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return { kind: 'error', reason: 'missing', tokens: [token] };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
kind: 'ready',
|
|
101
|
+
images: loaded.map(({ attachment, data }) => ({
|
|
102
|
+
// Older image-only runtimes ignore the discriminator; 0.1.5 uses it
|
|
103
|
+
// to distinguish encoded images from stored file attachments.
|
|
104
|
+
type: 'image',
|
|
105
|
+
mediaType: attachment.mediaType,
|
|
106
|
+
data: Buffer.from(data).toString('base64'),
|
|
107
|
+
name: attachment.name,
|
|
108
|
+
})),
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
/** Run one DSH registry command (`/plan`, …) on the live agent while
|
|
112
|
+
* preserving its settled result kind for composer admission. */
|
|
113
|
+
const invoke = async (name, rawInput, imageRefs = []) => {
|
|
114
|
+
const capture = deps.capture();
|
|
115
|
+
assertCapabilityShadowPolicy('host.commands.invoke', deps.runtime.mode, deps.runtime.slices);
|
|
116
|
+
const service = deps.commandService;
|
|
117
|
+
if (service === undefined)
|
|
118
|
+
return undefined;
|
|
119
|
+
const commandAgent = deps.agent();
|
|
120
|
+
const stagedSnapshot = deps.composer.snapshot();
|
|
121
|
+
// Resolve the exact definition that execute() will select for this agent.
|
|
122
|
+
// Same names may exist in distinct agent scopes, so a name-only lookup can
|
|
123
|
+
// apply another scope's owner policy.
|
|
124
|
+
const definition = service.find(commandAgent, name);
|
|
125
|
+
try {
|
|
126
|
+
const signal = new AbortController().signal;
|
|
127
|
+
const line = `/${name}${rawInput}`;
|
|
128
|
+
const batch = await registryCommandImages(service, line, deps.composer.includeLegacyImageRefs(line, imageRefs), stagedSnapshot, signal);
|
|
129
|
+
if (batch.kind === 'error') {
|
|
130
|
+
const text = batch.reason === 'runtime'
|
|
131
|
+
? t('command-images-runtime-unsupported', { name })
|
|
132
|
+
: batch.reason === 'limits'
|
|
133
|
+
? t('command-images-limit', { name })
|
|
134
|
+
: t('command-images-missing', { name, paths: batch.tokens.join(' ') });
|
|
135
|
+
return { kind: 'error', text, consumeDraft: false };
|
|
136
|
+
}
|
|
137
|
+
// Image preparation can await storage. Do not authorize definition A
|
|
138
|
+
// and then execute a newly registered same-name definition B after A
|
|
139
|
+
// was unloaded while those reads were pending.
|
|
140
|
+
if (service.find(commandAgent, name) !== definition) {
|
|
141
|
+
return { kind: 'error', text: t('command-changed', { name }), consumeDraft: false };
|
|
142
|
+
}
|
|
143
|
+
if (!deps.bindingCurrent(capture)) {
|
|
144
|
+
deps.notify(t('ext-stale-dropped'), { color: 'warning', timeoutMs: 4000 });
|
|
145
|
+
return { kind: 'error', text: '', consumeDraft: false };
|
|
146
|
+
}
|
|
147
|
+
// Grants are a live per-operation decision. Image reads above may
|
|
148
|
+
// park, so take the single authoritative snapshot only now — after
|
|
149
|
+
// preparation/identity guards and immediately before execute.
|
|
150
|
+
const denied = authorize(definition, name);
|
|
151
|
+
if (denied !== undefined)
|
|
152
|
+
return { kind: 'error', text: denied, consumeDraft: false };
|
|
153
|
+
// rc.8 moved the signal to the 4th parameter and added composer
|
|
154
|
+
// images; older lines (rc.7/rc.6) take (agent, line, signal).
|
|
155
|
+
const execution = batch.kind === 'legacy'
|
|
156
|
+
? await service.execute(commandAgent, line, signal)
|
|
157
|
+
: await service.execute(commandAgent, line, batch.images, signal);
|
|
158
|
+
// The handler itself may park. Its durable lifecycle belongs to the
|
|
159
|
+
// old agent, but its toast/consume acknowledgment must never land on a
|
|
160
|
+
// replacement session after /new, resume, rewind, or model switch.
|
|
161
|
+
if (!deps.bindingCurrent(capture))
|
|
162
|
+
return { kind: 'error', text: '', consumeDraft: false };
|
|
163
|
+
if (execution === undefined)
|
|
164
|
+
return undefined;
|
|
165
|
+
return execution.result.kind === 'success'
|
|
166
|
+
? { kind: 'success', text: execution.result.text ?? '', consumeDraft: true }
|
|
167
|
+
: {
|
|
168
|
+
kind: 'error',
|
|
169
|
+
text: execution.result.text,
|
|
170
|
+
// Upstream composers retain image-bearing handler failures so
|
|
171
|
+
// the user can fix the grammar without rebuilding attachments;
|
|
172
|
+
// imageless handler errors remain consumed durable outcomes.
|
|
173
|
+
consumeDraft: batch.kind === 'ready' ? batch.images.length === 0 : true,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return {
|
|
178
|
+
kind: 'error',
|
|
179
|
+
text: error instanceof Error ? error.message : String(error),
|
|
180
|
+
consumeDraft: false,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
/** Text-only companion kept for the public scene-facing API. */
|
|
185
|
+
const invokeText = async (name, rawInput, imageRefs = []) => (await invoke(name, rawInput, imageRefs))?.text;
|
|
186
|
+
return { invoke, invokeText };
|
|
187
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FileCandidate } from '../../utils/fileSuggestions.js';
|
|
2
|
+
import type { MentionFs } from './types.js';
|
|
3
|
+
/** Workspace file queries and their per-cwd scan cache. */
|
|
4
|
+
export declare function createFileActions(deps: {
|
|
5
|
+
owner: {
|
|
6
|
+
current(): boolean;
|
|
7
|
+
readonly signal: AbortSignal;
|
|
8
|
+
};
|
|
9
|
+
capture(): unknown;
|
|
10
|
+
current(capture: unknown): boolean;
|
|
11
|
+
cwd(): string;
|
|
12
|
+
fs(): MentionFs | undefined;
|
|
13
|
+
}): {
|
|
14
|
+
listFileCandidates: (query: string, options?: {
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
topK?: number;
|
|
17
|
+
}) => Promise<readonly FileCandidate[]>;
|
|
18
|
+
listFiles: () => Promise<readonly string[]>;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=file-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/file-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAGnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE;QAAE,OAAO,IAAI,OAAO,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;KAAE,CAAA;IAC3D,OAAO,IAAI,OAAO,CAAA;IAClB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAA;IAClC,GAAG,IAAI,MAAM,CAAA;IACb,EAAE,IAAI,SAAS,GAAG,SAAS,CAAA;CAC5B;gCAQU,MAAM,YACH;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAChD,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;qBA2BR,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;EAQvD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { isPathLikeQuery, rankFileCandidates } from '../../utils/fileSuggestions.js';
|
|
2
|
+
import { listFilesDeepCandidates, listPathCandidates } from './paths.js';
|
|
3
|
+
/** Workspace file queries and their per-cwd scan cache. */
|
|
4
|
+
export function createFileActions(deps) {
|
|
5
|
+
let cache = { cwd: '' };
|
|
6
|
+
const isCurrent = (capture, cwd) => deps.owner.current() && deps.current(capture) && deps.cwd() === cwd;
|
|
7
|
+
const withOwnerSignal = (signal) => signal === undefined ? deps.owner.signal : AbortSignal.any([signal, deps.owner.signal]);
|
|
8
|
+
const listFileCandidates = async (query, options) => {
|
|
9
|
+
const capture = deps.capture();
|
|
10
|
+
const cwd = deps.cwd();
|
|
11
|
+
const fs = deps.fs();
|
|
12
|
+
const signal = withOwnerSignal(options?.signal);
|
|
13
|
+
if (!fs || signal.aborted || !isCurrent(capture, cwd))
|
|
14
|
+
return [];
|
|
15
|
+
if (isPathLikeQuery(query)) {
|
|
16
|
+
const result = await listPathCandidates(fs, cwd, query, signal, options?.topK ?? 50);
|
|
17
|
+
return isCurrent(capture, cwd) && !signal.aborted ? result : [];
|
|
18
|
+
}
|
|
19
|
+
if (cache.cwd !== cwd)
|
|
20
|
+
cache = { cwd };
|
|
21
|
+
const scan = cache;
|
|
22
|
+
// The scan belongs to this Channel/CWD cache entry, not to its first
|
|
23
|
+
// waiter. A caller cancellation only suppresses that caller's result;
|
|
24
|
+
// owner disposal remains the shared scan's cancellation fence.
|
|
25
|
+
scan.load ??= listFilesDeepCandidates(fs, cwd, deps.owner.signal).then(candidates => {
|
|
26
|
+
// Do not retain a cancelled/empty observation; a later request may have
|
|
27
|
+
// a live owner or find files that appeared after this scan. An older
|
|
28
|
+
// CWD scan must not clear a newer entry after it settles.
|
|
29
|
+
if (candidates.length === 0 && cache === scan)
|
|
30
|
+
scan.load = undefined;
|
|
31
|
+
return candidates;
|
|
32
|
+
});
|
|
33
|
+
const candidates = await scan.load;
|
|
34
|
+
if (!isCurrent(capture, cwd) || signal.aborted)
|
|
35
|
+
return [];
|
|
36
|
+
return rankFileCandidates(candidates, query, options?.topK ?? 50);
|
|
37
|
+
};
|
|
38
|
+
const listFiles = async () => {
|
|
39
|
+
const capture = deps.capture();
|
|
40
|
+
const cwd = deps.cwd();
|
|
41
|
+
const candidates = await listFilesDeepCandidates(deps.fs(), cwd, deps.owner.signal);
|
|
42
|
+
return isCurrent(capture, cwd) ? candidates.map(candidate => candidate.path) : [];
|
|
43
|
+
};
|
|
44
|
+
return { listFileCandidates, listFiles };
|
|
45
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Input actions own cancellation/requeue convergence, not session binding. */
|
|
2
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import type { ChannelState, ComposerImageRef } from './types.js';
|
|
4
|
+
export interface InputConvergence {
|
|
5
|
+
cancelInFlight: boolean;
|
|
6
|
+
interruptSeq: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function createInputActions(getState: () => Pick<ChannelState, 'agentId' | 'pending' | 'cancelPending' | 'emit' | 'notify'>, getAgent: () => Agent, owner: {
|
|
9
|
+
assertActive(): void;
|
|
10
|
+
}, input: InputConvergence, composer: {
|
|
11
|
+
includeLegacyImageRefs(text: string, images: readonly ComposerImageRef[]): readonly ComposerImageRef[];
|
|
12
|
+
}, dispatchUserText: (text: string, placement: 'steer' | 'followup', images?: readonly ComposerImageRef[]) => void, runLocalCommand: (command: string, includeInContext: boolean) => Promise<void>): Pick<ChannelState, 'submit' | 'steer' | 'removePending' | 'cancel' | 'interruptAndDeliver'>;
|
|
13
|
+
//# sourceMappingURL=input-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/input-actions.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAsB,MAAM,YAAY,CAAA;AAEpF,MAAM,WAAW,gBAAgB;IAAG,cAAc,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE;AACnF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC/F,QAAQ,EAAE,MAAM,KAAK,EACrB,KAAK,EAAE;IAAE,YAAY,IAAI,IAAI,CAAA;CAAE,EAC/B,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE;IAAE,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,gBAAgB,EAAE,CAAA;CAAE,EACpH,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,KAAK,IAAI,EAC/G,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAC7E,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,GAAG,eAAe,GAAG,QAAQ,GAAG,qBAAqB,CAAC,CAgI7F"}
|