@deepseek-harness-tui/dsh-tui 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -5
- package/guide/dsh-tui-guide/codex-backend.en.md +13 -3
- package/guide/dsh-tui-guide/codex-backend.md +9 -2
- package/guide/dsh-tui-guide/configuration.en.md +39 -2
- package/guide/dsh-tui-guide/configuration.md +34 -2
- package/guide/dsh-tui-guide/getting-started.en.md +15 -0
- package/guide/dsh-tui-guide/getting-started.md +15 -0
- package/guide/dsh-tui-guide/interaction.en.md +8 -1
- package/guide/dsh-tui-guide/interaction.md +8 -1
- package/guide/dsh-tui-guide/plugins.en.md +66 -5
- package/guide/dsh-tui-guide/plugins.md +37 -3
- package/guide/dsh-tui-guide/user-guide.en.md +3 -2
- package/guide/dsh-tui-guide/user-guide.md +3 -2
- package/lib/settings.json +1 -1
- package/lib/types/adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/adapter/channel/projection.js +1 -0
- package/lib/types/adapter/channel/ui-policy.d.ts +1 -1
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +1 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts +5 -1
- package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +5 -3
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +7 -1
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +47 -0
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel.d.ts +2 -0
- package/lib/types/adapter/ports/channel.d.ts.map +1 -1
- package/lib/types/agent/events.d.ts +3 -2
- package/lib/types/agent/events.d.ts.map +1 -1
- package/lib/types/backends/codex/contract.d.ts +3 -0
- package/lib/types/backends/codex/contract.d.ts.map +1 -1
- package/lib/types/backends/codex/contract.js +3 -0
- package/lib/types/backends/codex/session/async-questions.d.ts +17 -0
- package/lib/types/backends/codex/session/async-questions.d.ts.map +1 -0
- package/lib/types/backends/codex/session/async-questions.js +89 -0
- package/lib/types/backends/codex/session/session.d.ts.map +1 -1
- package/lib/types/backends/codex/session/session.js +35 -9
- package/lib/types/backends/codex/text.d.ts +3 -3
- package/lib/types/backends/codex/text.js +1 -1
- package/lib/types/backends/codex/translate/items.d.ts.map +1 -1
- package/lib/types/backends/codex/translate/items.js +3 -1
- package/lib/types/backends/codex/translate/question-reply.d.ts +11 -0
- package/lib/types/backends/codex/translate/question-reply.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/question-reply.js +53 -0
- package/lib/types/channel/projection.d.ts.map +1 -1
- package/lib/types/channel/projection.js +10 -0
- package/lib/types/commands.d.ts +10 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +11 -2
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
- package/lib/types/components/CommandSuggestions.js +4 -1
- package/lib/types/components/LogoV2.d.ts +4 -1
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +5 -3
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +95 -14
- package/lib/types/components/PermissionsPicker.d.ts +10 -1
- package/lib/types/components/PermissionsPicker.d.ts.map +1 -1
- package/lib/types/components/PermissionsPicker.js +24 -16
- package/lib/types/components/PluginInstallPane.d.ts +21 -0
- package/lib/types/components/PluginInstallPane.d.ts.map +1 -0
- package/lib/types/components/PluginInstallPane.js +84 -0
- package/lib/types/components/PluginManagePane.d.ts +21 -0
- package/lib/types/components/PluginManagePane.d.ts.map +1 -0
- package/lib/types/components/PluginManagePane.js +69 -0
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +7 -3
- package/lib/types/components/SubagentCard.d.ts +13 -1
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +27 -12
- package/lib/types/components/SubagentDashboard.d.ts +8 -1
- package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
- package/lib/types/components/SubagentDashboard.js +58 -16
- package/lib/types/components/launchpadLayout.d.ts +14 -1
- package/lib/types/components/launchpadLayout.d.ts.map +1 -1
- package/lib/types/components/launchpadLayout.js +36 -17
- package/lib/types/components/messages/TeamMessageBubble.d.ts +20 -0
- package/lib/types/components/messages/TeamMessageBubble.d.ts.map +1 -0
- package/lib/types/components/messages/TeamMessageBubble.js +15 -0
- package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelHost.js +5 -1
- package/lib/types/components/sidePanel/PanelStore.d.ts +8 -0
- package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelStore.js +11 -0
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.js +13 -1
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +7 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +4 -0
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +3 -0
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwComposer.js +20 -8
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts +2 -1
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +104 -13
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts +6 -2
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadScene.js +61 -15
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +14 -4
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadView.js +90 -5
- package/lib/types/components/sidePanel/btw/threads.d.ts +18 -0
- package/lib/types/components/sidePanel/btw/threads.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/threads.js +51 -0
- package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -1
- package/lib/types/components/sidePanel/builtinPanels.js +5 -1
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +5 -1
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/SplashMascot.js +19 -4
- package/lib/types/components/sidePanel/companion/skins.d.ts +8 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/skins.js +57 -12
- package/lib/types/components/sidePanel/types.d.ts +6 -0
- package/lib/types/components/sidePanel/types.d.ts.map +1 -1
- package/lib/types/components/splashArtRows.d.ts +29 -0
- package/lib/types/components/splashArtRows.d.ts.map +1 -0
- package/lib/types/components/splashArtRows.js +31 -0
- package/lib/types/components/teamRoster.d.ts +70 -0
- package/lib/types/components/teamRoster.d.ts.map +1 -0
- package/lib/types/components/teamRoster.js +78 -0
- package/lib/types/dsh-adapter/admission-loader.d.ts +82 -0
- package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -1
- package/lib/types/dsh-adapter/admission-loader.js +73 -28
- package/lib/types/dsh-adapter/agent-view.d.ts.map +1 -1
- package/lib/types/dsh-adapter/agent-view.js +3 -1
- package/lib/types/dsh-adapter/approvals.d.ts +7 -0
- package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
- package/lib/types/dsh-adapter/approvals.js +45 -1
- package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backend/translate.js +68 -8
- package/lib/types/dsh-adapter/backend-assembly.d.ts +31 -0
- package/lib/types/dsh-adapter/backend-assembly.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-assembly.js +225 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts +36 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backend-contribution.js +41 -0
- package/lib/types/dsh-adapter/backend-registry.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backend-registry.js +22 -3
- package/lib/types/dsh-adapter/backends.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backends.js +4 -5
- package/lib/types/dsh-adapter/bundled-presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/bundled-presets.js +60 -3
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +1 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +1 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/command-completions.js +64 -7
- package/lib/types/dsh-adapter/channel/compaction.d.ts +7 -2
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +100 -26
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +3 -0
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/binding-feed.js +2 -1
- package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/compose.js +12 -0
- package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/extensions.js +68 -8
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +6 -0
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.js +104 -12
- package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-actions.js +8 -1
- package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/permissions.js +4 -1
- package/lib/types/dsh-adapter/channel/projection-helpers.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection-helpers.js +2 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +4 -3
- package/lib/types/dsh-adapter/channel/session-reset.js +2 -2
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +7 -0
- package/lib/types/dsh-adapter/channel/settings-host.d.ts +3 -0
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +135 -5
- package/lib/types/dsh-adapter/channel/state.d.ts +6 -0
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +18 -6
- package/lib/types/dsh-adapter/channel/transcript.d.ts +7 -0
- package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/transcript.js +19 -2
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts +55 -0
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.js +96 -0
- package/lib/types/dsh-adapter/contract.d.ts +4 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +5 -5
- package/lib/types/dsh-adapter/effect-ledger.d.ts +7 -0
- package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
- package/lib/types/dsh-adapter/effect-ledger.js +8 -1
- package/lib/types/dsh-adapter/entry-slot.d.ts +3 -1
- package/lib/types/dsh-adapter/entry-slot.d.ts.map +1 -1
- package/lib/types/dsh-adapter/entry-slot.js +2 -2
- package/lib/types/dsh-adapter/fresh-agent.d.ts.map +1 -1
- package/lib/types/dsh-adapter/fresh-agent.js +6 -1
- package/lib/types/dsh-adapter/host-access.d.ts.map +1 -1
- package/lib/types/dsh-adapter/host-access.js +95 -0
- package/lib/types/dsh-adapter/host-contract.d.ts +1 -1
- package/lib/types/dsh-adapter/host-contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/host-contract.js +3 -2
- package/lib/types/dsh-adapter/host-dsh.d.ts +8 -2
- package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -1
- package/lib/types/dsh-adapter/host-dsh.js +45 -30
- package/lib/types/dsh-adapter/host-entry.js +35 -10
- package/lib/types/dsh-adapter/index.d.ts +9 -10
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +8 -6
- package/lib/types/dsh-adapter/invariant.d.ts +7 -2
- package/lib/types/dsh-adapter/invariant.d.ts.map +1 -1
- package/lib/types/dsh-adapter/invariant.js +6 -3
- package/lib/types/dsh-adapter/migrate/index.js +2 -2
- package/lib/types/dsh-adapter/panels.d.ts.map +1 -1
- package/lib/types/dsh-adapter/panels.js +6 -0
- package/lib/types/dsh-adapter/plugin-declaration.d.ts +99 -1
- package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin-declaration.js +132 -2
- package/lib/types/dsh-adapter/plugin-feed.d.ts +94 -0
- package/lib/types/dsh-adapter/plugin-feed.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-feed.js +135 -0
- package/lib/types/dsh-adapter/plugin-guard.d.ts +115 -0
- package/lib/types/dsh-adapter/plugin-guard.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-guard.js +108 -0
- package/lib/types/dsh-adapter/plugin-install.d.ts +160 -0
- package/lib/types/dsh-adapter/plugin-install.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-install.js +545 -0
- package/lib/types/dsh-adapter/plugin-manage.d.ts +178 -0
- package/lib/types/dsh-adapter/plugin-manage.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-manage.js +468 -0
- package/lib/types/dsh-adapter/plugin-manager.d.ts +78 -2
- package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin-manager.js +32 -0
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +49 -2
- package/lib/types/dsh-adapter/plugins-info.d.ts +87 -1
- package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugins-info.js +131 -26
- package/lib/types/dsh-adapter/process-exit.d.ts +1 -1
- package/lib/types/dsh-adapter/process-exit.d.ts.map +1 -1
- package/lib/types/dsh-adapter/process-exit.js +1 -1
- package/lib/types/dsh-adapter/session-projection-store.d.ts +66 -0
- package/lib/types/dsh-adapter/session-projection-store.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-projection-store.js +149 -0
- package/lib/types/dsh-adapter/settingsEditor.js +2 -2
- package/lib/types/dsh-adapter/sideQuestion.d.ts +21 -0
- package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sideQuestion.js +53 -0
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +2 -1
- package/lib/types/dsh-adapter/team-mode.d.ts +74 -0
- package/lib/types/dsh-adapter/team-mode.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-mode.js +188 -0
- package/lib/types/dsh-adapter/team-roster.d.ts +67 -0
- package/lib/types/dsh-adapter/team-roster.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-roster.js +136 -0
- package/lib/types/dsh-adapter/team-tools.d.ts +58 -0
- package/lib/types/dsh-adapter/team-tools.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-tools.js +208 -0
- package/lib/types/dsh-adapter/types.d.ts +1 -1
- package/lib/types/dsh-adapter/types.d.ts.map +1 -1
- package/lib/types/i18n.d.ts +607 -16
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +295 -9
- package/lib/types/ink/components/ScrollBox.d.ts +9 -0
- package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
- package/lib/types/ink/components/ScrollBox.js +23 -0
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/kernelPrefs.d.ts +1 -1
- package/lib/types/kernelPrefs.d.ts.map +1 -1
- package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
- package/lib/types/native-ts/yoga-layout/index.js +8 -1
- package/lib/types/permissionPresetLabels.d.ts +25 -0
- package/lib/types/permissionPresetLabels.d.ts.map +1 -0
- package/lib/types/permissionPresetLabels.js +33 -0
- package/lib/types/preset-patch.d.ts +22 -0
- package/lib/types/preset-patch.d.ts.map +1 -0
- package/lib/types/preset-patch.js +14 -0
- package/lib/types/screens/Chat.d.ts +33 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +301 -9
- package/lib/types/screens/Launchpad.d.ts +7 -1
- package/lib/types/screens/Launchpad.d.ts.map +1 -1
- package/lib/types/screens/Launchpad.js +19 -4
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +1 -0
- package/lib/types/screens/chat/usePluginWriteFlow.d.ts +68 -0
- package/lib/types/screens/chat/usePluginWriteFlow.d.ts.map +1 -0
- package/lib/types/screens/chat/usePluginWriteFlow.js +92 -0
- package/lib/types/screens/chatOverlay.d.ts +19 -1
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/sessionModes.d.ts +5 -3
- package/lib/types/sessionModes.d.ts.map +1 -1
- package/lib/types/sessionModes.js +9 -3
- package/lib/types/tips.js +2 -2
- package/lib/types/utils/paths.d.ts +11 -0
- package/lib/types/utils/paths.d.ts.map +1 -1
- package/lib/types/utils/paths.js +13 -0
- package/package.json +126 -120
- package/tui-profile/feed/README.md +63 -0
- package/tui-profile/feed/first-party.json +10 -0
|
@@ -3,6 +3,14 @@ import { markChannelReadDirty } from '../../adapter/channel/read-view.js';
|
|
|
3
3
|
import { agentMessageFailureOf, agentMessageTextOf, agentRelaySourceOf, foldAgentMessage } from '../../agent/messages.js';
|
|
4
4
|
import { SubagentActivityStore } from '../subagents.js';
|
|
5
5
|
import { isSubagentToolName } from './projection-helpers.js';
|
|
6
|
+
import { teamMailboxAsRelay } from '../compat/agent-team-0.2.0.js';
|
|
7
|
+
import { teamMessageOf } from '../team-tools.js';
|
|
8
|
+
/** A relay's body as the agent-message feed shows it: a team message without
|
|
9
|
+
* its `Team message from <name>:` framing block (the sender is `from`). */
|
|
10
|
+
function relayTextOf(source, content) {
|
|
11
|
+
const team = Array.isArray(content) ? teamMessageOf(source, content) : undefined;
|
|
12
|
+
return team?.text ?? agentMessageTextOf(content);
|
|
13
|
+
}
|
|
6
14
|
/**
|
|
7
15
|
* Bound the retained description text. Evicting an older term does not cancel
|
|
8
16
|
* its pending spawn: a separate count keeps those unmatched starts from
|
|
@@ -253,18 +261,20 @@ function createSessionSubagentProjection(getState, deps) {
|
|
|
253
261
|
* provable from the log alone; a plain user/message (no relay source)
|
|
254
262
|
* never becomes one. */
|
|
255
263
|
const noteChildRelay = (childId, event) => {
|
|
256
|
-
const
|
|
257
|
-
if (
|
|
264
|
+
const raw = event.data;
|
|
265
|
+
if (raw === undefined || typeof raw.id !== 'string' || raw.id === '')
|
|
258
266
|
return;
|
|
267
|
+
// compat(dsh 0.2.0, log): a 0.2.0 mailbox delivery reads as the relay it became.
|
|
268
|
+
const data = teamMailboxAsRelay(raw);
|
|
259
269
|
const relay = agentRelaySourceOf(data.source);
|
|
260
270
|
if (relay === undefined)
|
|
261
271
|
return;
|
|
262
272
|
foldAgentMessage(agentMessages, {
|
|
263
|
-
messageId:
|
|
273
|
+
messageId: raw.id,
|
|
264
274
|
from: relay.senderSessionId,
|
|
265
275
|
to: childId,
|
|
266
276
|
via: 'agent-relay',
|
|
267
|
-
text:
|
|
277
|
+
text: relayTextOf(data.source, data.content),
|
|
268
278
|
state: 'queued',
|
|
269
279
|
...(typeof event.seq === 'number' ? { sourceRef: `seq:${event.seq}` } : {}),
|
|
270
280
|
observedAt: eventTime(event) ?? Date.now(),
|
|
@@ -401,14 +411,16 @@ function createSessionSubagentProjection(getState, deps) {
|
|
|
401
411
|
// names the sending session. Plain user text, injected context and
|
|
402
412
|
// settlement notices are not relays; they stay invisible here, just as
|
|
403
413
|
// the translator keeps them out of bubbles.
|
|
404
|
-
|
|
414
|
+
// compat(dsh 0.2.0, log): a 0.2.0 mailbox delivery reads as the relay it became.
|
|
415
|
+
const delivered = teamMailboxAsRelay(data);
|
|
416
|
+
const relay = agentRelaySourceOf(delivered.source);
|
|
405
417
|
if (relay !== undefined && typeof data.id === 'string' && data.id !== '') {
|
|
406
418
|
foldAgentMessage(agentMessages, {
|
|
407
419
|
messageId: data.id,
|
|
408
420
|
from: relay.senderSessionId,
|
|
409
421
|
...(parentSessionId === undefined ? {} : { to: parentSessionId, parentSessionId }),
|
|
410
422
|
via: 'agent-relay',
|
|
411
|
-
text:
|
|
423
|
+
text: relayTextOf(delivered.source, delivered.content),
|
|
412
424
|
state: 'queued',
|
|
413
425
|
...(typeof ev.seq === 'number' ? { sourceRef: `seq:${ev.seq}` } : {}),
|
|
414
426
|
observedAt: eventTime(event) ?? Date.now(),
|
|
@@ -44,6 +44,13 @@ export declare const GOAL_RESULT_BADGE: Record<string, string>;
|
|
|
44
44
|
*/
|
|
45
45
|
export declare function harnessToolResultView(name: string, data: SessionEvent<'tool/result'>['data']): ToolResultView | undefined;
|
|
46
46
|
export declare function toolErrorText(event: SessionEvent<'tool/result'>): string;
|
|
47
|
+
/** One structured tool failure (`tool/result.error`) as display text: its
|
|
48
|
+
* `name: code` identity plus the result detail. An auto-review denial reads
|
|
49
|
+
* as a localized "denied, not executed" plus the reviewer's `reason`, never
|
|
50
|
+
* its English detail (that only restates the denial); other failures' `reason`
|
|
51
|
+
* repeats their detail and stays out. Shared by the transcript and the
|
|
52
|
+
* subagent cards. */
|
|
53
|
+
export declare function toolFailureText(failure: unknown, detail: string): string;
|
|
47
54
|
/** Restore a folded tool row's result text from its tool/result event. */
|
|
48
55
|
export declare function restoreToolResult(row: ChatRow, event: SessionEvent<'tool/result'>): void;
|
|
49
56
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAI7H,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAA;AAE1F;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,OAAO,EAAE,EACf,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE;AACzD;qCACqC;AACrC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GACrC,MAAM,CA4CR;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,KAAK,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA8C5G;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CA+B3E;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,GAAG,MAAM,CAEzE;AAED,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKpD,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GACxC,cAAc,GAAG,SAAS,CA4C5B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,GAAG,MAAM,CAIxE;AAED;;;;;sBAKsB;AACtB,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWxE;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,GAAG,IAAI,CAUxF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,EAAE,CA2BnF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { toolResultPayload } from '../compat/messages.js';
|
|
2
|
+
import { t } from '../../i18n.js';
|
|
2
3
|
import { markChannelReadDirty } from '../../adapter/channel/read-view.js';
|
|
3
4
|
import { ARGS_PREVIEW_LIMIT, LOCAL_OUTPUT_LIMIT, MAX_ROWS, preview, RESULT_PREVIEW_LIMIT } from '../../channel/transcript.js';
|
|
4
5
|
// Limits and the preview helper are backend-neutral (src/channel/transcript.ts);
|
|
@@ -240,8 +241,24 @@ export function toolErrorText(event) {
|
|
|
240
241
|
const failure = event.data.error;
|
|
241
242
|
if (failure === undefined)
|
|
242
243
|
return toolResultPayload(event.data.message).isError ? toolResultText(event) : '';
|
|
243
|
-
|
|
244
|
-
|
|
244
|
+
return toolFailureText(failure, toolResultText(event));
|
|
245
|
+
}
|
|
246
|
+
/** One structured tool failure (`tool/result.error`) as display text: its
|
|
247
|
+
* `name: code` identity plus the result detail. An auto-review denial reads
|
|
248
|
+
* as a localized "denied, not executed" plus the reviewer's `reason`, never
|
|
249
|
+
* its English detail (that only restates the denial); other failures' `reason`
|
|
250
|
+
* repeats their detail and stays out. Shared by the transcript and the
|
|
251
|
+
* subagent cards. */
|
|
252
|
+
export function toolFailureText(failure, detail) {
|
|
253
|
+
const record = failure !== null && typeof failure === 'object' ? failure : {};
|
|
254
|
+
if (record.code === 'AUTO_REVIEW_DENIED') {
|
|
255
|
+
const identity = t('tool-error-auto-review-denied');
|
|
256
|
+
const reason = typeof record.reason === 'string' ? record.reason.trim() : '';
|
|
257
|
+
return reason !== '' ? `${identity} — ${reason}` : identity;
|
|
258
|
+
}
|
|
259
|
+
const identity = typeof record.name === 'string' && typeof record.code === 'string'
|
|
260
|
+
? `${record.name}: ${record.code}`
|
|
261
|
+
: String(failure);
|
|
245
262
|
return detail === '' || detail === identity ? identity : `${identity} — ${detail}`;
|
|
246
263
|
}
|
|
247
264
|
/** Restore a folded tool row's result text from its tool/result event. */
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Teams 0.2.0 durable shapes, read as their 0.2.1 equivalents.
|
|
3
|
+
*
|
|
4
|
+
* The readers that meet these shapes call in here first, so the rest of the
|
|
5
|
+
* adapter knows only the 0.2.1 forms (docs/agent-teams-design.md「兼容(0.2.0)」):
|
|
6
|
+
* the translator and the subagent projection for mailbox deliveries, the
|
|
7
|
+
* translator and agent-view for a teammate's first prompt. Session previews
|
|
8
|
+
* (sessions/digest.ts) and the recap read no teammate session today: the
|
|
9
|
+
* listings previews serve skip `origin: subagent`, and the recap reads only
|
|
10
|
+
* the bound session. Route them here when a teammate session opens there.
|
|
11
|
+
* The shapes are log compatibility, not host compatibility: a 0.2.1 host
|
|
12
|
+
* still resumes sessions recorded under 0.2.0, so dropping the 0.2.0 host
|
|
13
|
+
* line alone does not retire this module. It retires when reading
|
|
14
|
+
* 0.2.0-era team logs is given up; then delete this file and its callers
|
|
15
|
+
* (`grep -rn "compat(dsh 0.2.0"`).
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* A team message delivered by the 0.2.0 mailbox, as the relay it became:
|
|
21
|
+
* source `{ kind: 'agent-message', form: 'relay', senderSessionId }`, first
|
|
22
|
+
* block `Team message from <name>:`. The 0.2.0 framing block
|
|
23
|
+
* (`Team message <id> from <name>:`) is replaced only when it matches this
|
|
24
|
+
* message's identity exactly; otherwise it stays as content, as it did.
|
|
25
|
+
* @param data - the message's source and content (other fields are kept).
|
|
26
|
+
* @returns `data`, or a copy in the 0.2.1 form.
|
|
27
|
+
*/
|
|
28
|
+
export declare function teamMailboxAsRelay<T extends {
|
|
29
|
+
readonly source?: unknown;
|
|
30
|
+
readonly content?: unknown;
|
|
31
|
+
}>(data: T): T;
|
|
32
|
+
/**
|
|
33
|
+
* A teammate's first prompt without the leading `<system-reminder>` identity
|
|
34
|
+
* block (0.2.1 carries it as a system-prompt context). Matched against the
|
|
35
|
+
* whole 0.2.0 template, on a human-sourced message with more blocks after it;
|
|
36
|
+
* callers apply it to the first prompt they read (a translator: the first
|
|
37
|
+
* since its replay or reset). A reader that starts mid-log — a subagent
|
|
38
|
+
* transcript page, the live translator after `history()` replayed on its own
|
|
39
|
+
* instance — counts its first prompt as one, so only that prompt, pasted as
|
|
40
|
+
* the exact template plus more blocks, could lose the block.
|
|
41
|
+
* @param data - the message's source and content (other fields are kept).
|
|
42
|
+
* @returns `data`, or a copy without the block.
|
|
43
|
+
*/
|
|
44
|
+
export declare function withoutTeammateReminder<T extends {
|
|
45
|
+
readonly source?: unknown;
|
|
46
|
+
readonly content?: unknown;
|
|
47
|
+
}>(data: T): T;
|
|
48
|
+
/**
|
|
49
|
+
* The 0.2.0 `send_message` result: the mailbox status of the queued message
|
|
50
|
+
* (0.2.1 answers `{ sent: true }`).
|
|
51
|
+
* @param value - the parsed tool result.
|
|
52
|
+
* @returns `accepted` / `queued`, or `undefined` for anything else.
|
|
53
|
+
*/
|
|
54
|
+
export declare function legacySendMessageStatus(value: Readonly<Record<string, unknown>>): string | undefined;
|
|
55
|
+
//# sourceMappingURL=agent-team-0.2.0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-team-0.2.0.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/compat/agent-team-0.2.0.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAiBH;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAYlH;AAqBD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAKvH;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAEpG"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Teams 0.2.0 durable shapes, read as their 0.2.1 equivalents.
|
|
3
|
+
*
|
|
4
|
+
* The readers that meet these shapes call in here first, so the rest of the
|
|
5
|
+
* adapter knows only the 0.2.1 forms (docs/agent-teams-design.md「兼容(0.2.0)」):
|
|
6
|
+
* the translator and the subagent projection for mailbox deliveries, the
|
|
7
|
+
* translator and agent-view for a teammate's first prompt. Session previews
|
|
8
|
+
* (sessions/digest.ts) and the recap read no teammate session today: the
|
|
9
|
+
* listings previews serve skip `origin: subagent`, and the recap reads only
|
|
10
|
+
* the bound session. Route them here when a teammate session opens there.
|
|
11
|
+
* The shapes are log compatibility, not host compatibility: a 0.2.1 host
|
|
12
|
+
* still resumes sessions recorded under 0.2.0, so dropping the 0.2.0 host
|
|
13
|
+
* line alone does not retire this module. It retires when reading
|
|
14
|
+
* 0.2.0-era team logs is given up; then delete this file and its callers
|
|
15
|
+
* (`grep -rn "compat(dsh 0.2.0"`).
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
function mailboxSourceOf(source) {
|
|
20
|
+
const shape = source;
|
|
21
|
+
return shape?.kind === 'team-message' && typeof shape.senderId === 'string' && typeof shape.senderName === 'string'
|
|
22
|
+
? shape
|
|
23
|
+
: undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A team message delivered by the 0.2.0 mailbox, as the relay it became:
|
|
27
|
+
* source `{ kind: 'agent-message', form: 'relay', senderSessionId }`, first
|
|
28
|
+
* block `Team message from <name>:`. The 0.2.0 framing block
|
|
29
|
+
* (`Team message <id> from <name>:`) is replaced only when it matches this
|
|
30
|
+
* message's identity exactly; otherwise it stays as content, as it did.
|
|
31
|
+
* @param data - the message's source and content (other fields are kept).
|
|
32
|
+
* @returns `data`, or a copy in the 0.2.1 form.
|
|
33
|
+
*/
|
|
34
|
+
export function teamMailboxAsRelay(data) {
|
|
35
|
+
const { source, content } = data;
|
|
36
|
+
const mailbox = mailboxSourceOf(source);
|
|
37
|
+
if (mailbox === undefined || !Array.isArray(content))
|
|
38
|
+
return data;
|
|
39
|
+
const first = content[0];
|
|
40
|
+
const legacyFraming = `Team message ${String(mailbox.messageId)} from ${mailbox.senderName}:`;
|
|
41
|
+
const body = first?.type === 'text' && first.text === legacyFraming ? content.slice(1) : content;
|
|
42
|
+
return {
|
|
43
|
+
...data,
|
|
44
|
+
source: { kind: 'agent-message', form: 'relay', senderSessionId: mailbox.senderId },
|
|
45
|
+
content: [{ type: 'text', text: `Team message from ${mailbox.senderName}:` }, ...body],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** The identity block 0.2.0 `spawn_teammate` put before a teammate's first prompt, around the name. */
|
|
49
|
+
const REMINDER_HEAD = '<system-reminder>\nYou are teammate "';
|
|
50
|
+
const REMINDER_TAIL = `".
|
|
51
|
+
Your Team Lead is named "lead".
|
|
52
|
+
Use list_agents({}) to find your teammates and their names.
|
|
53
|
+
To message your Team Lead, use send_message({ target: "lead", message: "..." }).
|
|
54
|
+
To message another teammate, use send_message({ target: "<teammate name>", message: "..." }).
|
|
55
|
+
</system-reminder>
|
|
56
|
+
|
|
57
|
+
`;
|
|
58
|
+
function isTeammateReminder(block) {
|
|
59
|
+
const { type, text } = (block ?? {});
|
|
60
|
+
if (type !== 'text' || typeof text !== 'string')
|
|
61
|
+
return false;
|
|
62
|
+
if (text.length < REMINDER_HEAD.length + REMINDER_TAIL.length)
|
|
63
|
+
return false;
|
|
64
|
+
if (!text.startsWith(REMINDER_HEAD) || !text.endsWith(REMINDER_TAIL))
|
|
65
|
+
return false;
|
|
66
|
+
return !text.slice(REMINDER_HEAD.length, text.length - REMINDER_TAIL.length).includes('\n');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A teammate's first prompt without the leading `<system-reminder>` identity
|
|
70
|
+
* block (0.2.1 carries it as a system-prompt context). Matched against the
|
|
71
|
+
* whole 0.2.0 template, on a human-sourced message with more blocks after it;
|
|
72
|
+
* callers apply it to the first prompt they read (a translator: the first
|
|
73
|
+
* since its replay or reset). A reader that starts mid-log — a subagent
|
|
74
|
+
* transcript page, the live translator after `history()` replayed on its own
|
|
75
|
+
* instance — counts its first prompt as one, so only that prompt, pasted as
|
|
76
|
+
* the exact template plus more blocks, could lose the block.
|
|
77
|
+
* @param data - the message's source and content (other fields are kept).
|
|
78
|
+
* @returns `data`, or a copy without the block.
|
|
79
|
+
*/
|
|
80
|
+
export function withoutTeammateReminder(data) {
|
|
81
|
+
const { source, content } = data;
|
|
82
|
+
if (source?.kind !== 'user')
|
|
83
|
+
return data;
|
|
84
|
+
if (!Array.isArray(content) || content.length < 2 || !isTeammateReminder(content[0]))
|
|
85
|
+
return data;
|
|
86
|
+
return { ...data, content: content.slice(1) };
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The 0.2.0 `send_message` result: the mailbox status of the queued message
|
|
90
|
+
* (0.2.1 answers `{ sent: true }`).
|
|
91
|
+
* @param value - the parsed tool result.
|
|
92
|
+
* @returns `accepted` / `queued`, or `undefined` for anything else.
|
|
93
|
+
*/
|
|
94
|
+
export function legacySendMessageStatus(value) {
|
|
95
|
+
return value.status === 'accepted' || value.status === 'queued' ? value.status : undefined;
|
|
96
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/** Primary validated upstream line (newest). */
|
|
2
|
-
export declare const UPSTREAM_VALIDATED_VERSION = "0.2.
|
|
2
|
+
export declare const UPSTREAM_VALIDATED_VERSION = "0.2.1-rc.2";
|
|
3
3
|
/**
|
|
4
4
|
* Explicitly supported upstream prerelease lines, oldest first.
|
|
5
5
|
*
|
|
6
|
-
* 0.2.
|
|
6
|
+
* 0.2.1-rc.2 = primary continuous-CI line; 0.2.0-rc.2/rc.1 and
|
|
7
7
|
* 0.1.7-rc.2/rc.1 = previous
|
|
8
8
|
* family (mapped compatibility); 0.1.5-rc.1/alpha.2/alpha.1 = mapped
|
|
9
9
|
* compatibility lines (source-checked when the primary line moves);
|
|
@@ -17,14 +17,14 @@ export declare const UPSTREAM_VALIDATED_VERSION = "0.2.0-rc.2";
|
|
|
17
17
|
* The peer range in package.json is deliberately wider than this list: an
|
|
18
18
|
* install on an older or newer line is allowed but reports drift at boot.
|
|
19
19
|
*/
|
|
20
|
-
export declare const UPSTREAM_VALIDATED_VERSIONS: readonly ["0.1.0-rc.6", "0.1.0-rc.7", "0.1.0-rc.8", "0.1.1-rc.1", "0.1.1-rc.2", "0.1.2-alpha.3", "0.1.2-alpha.4", "0.1.2-alpha.5", "0.1.2-rc.1", "0.1.3-alpha.2", "0.1.5-alpha.1", "0.1.5-alpha.2", "0.1.5-rc.1", "0.1.7-rc.1", "0.1.7-rc.2", "0.2.0-rc.1", "0.2.0-rc.2"];
|
|
20
|
+
export declare const UPSTREAM_VALIDATED_VERSIONS: readonly ["0.1.0-rc.6", "0.1.0-rc.7", "0.1.0-rc.8", "0.1.1-rc.1", "0.1.1-rc.2", "0.1.2-alpha.3", "0.1.2-alpha.4", "0.1.2-alpha.5", "0.1.2-rc.1", "0.1.3-alpha.2", "0.1.5-alpha.1", "0.1.5-alpha.2", "0.1.5-rc.1", "0.1.7-rc.1", "0.1.7-rc.2", "0.2.0-rc.1", "0.2.0-rc.2", "0.2.1-rc.2"];
|
|
21
21
|
/**
|
|
22
22
|
* Framework packages version on their own lines; the contract validates
|
|
23
23
|
* their MAJOR (breaking surface), not the harness prerelease number.
|
|
24
24
|
*/
|
|
25
25
|
export declare const UPSTREAM_FRAMEWORK_MAJORS: Record<string, number>;
|
|
26
26
|
/** Official packages the adapter consumes at runtime or as types. */
|
|
27
|
-
export declare const UPSTREAM_BLESSED_PACKAGES: readonly ["@deepseek-ai/cordis", "@deepseek-ai/schemastery", "@deepseek-ai/dsh-
|
|
27
|
+
export declare const UPSTREAM_BLESSED_PACKAGES: readonly ["@deepseek-ai/cordis", "@deepseek-ai/schemastery", "@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-preset-registry", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-ptc-runtime-node", "@deepseek-ai/dsh-commands", "@deepseek-ai/dsh-cordis-host-runner", "@deepseek-ai/dsh-deepseek-account", "@deepseek-ai/dsh-host-webserver", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-pi-ai", "@deepseek-ai/dsh-persona", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-storage", "@deepseek-ai/dsh-storage-domain", "@deepseek-ai/dsh-storage-json", "@deepseek-ai/dsh-workspace", "@deepseek-ai/dsh-web-app", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-terminal", "@deepseek-ai/dsh-terminal-bash", "@deepseek-ai/dsh-tool-ask-user", "@deepseek-ai/dsh-tool-bash-persistent", "@deepseek-ai/dsh-tool-cordis", "@deepseek-ai/dsh-tool-subagent", "@deepseek-ai/dsh-user-approval", "@deepseek-ai/dsh-user-questions", "@deepseek-ai/dsh-app-boot", "@deepseek-ai/dsh-cmdline", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-http-proxy", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-plugin-manager"];
|
|
28
28
|
export interface UpstreamDriftEntry {
|
|
29
29
|
package: string;
|
|
30
30
|
installed: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/contract.ts"],"names":[],"mappings":"AAmBA,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,eAAe,CAAA;AAEtD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/contract.ts"],"names":[],"mappings":"AAmBA,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,eAAe,CAAA;AAEtD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,yRAmB9B,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG5D,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,wsCAuC5B,CAAA;AAEV,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAoBD,4EAA4E;AAC5E,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAA;AAE/D,4FAA4F;AAC5F,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,CAAC,CAAA;AAEvG,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,GAAG,SAAS,CAKlG;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAQxF;AAkBD,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,QAA6D,CAAA;AAYlG,wBAAgB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAqB9E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAE9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAQ3D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKnF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,iBAAiB,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAA+B,GAC5F,MAAM,EAAE,CAQV;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,iBAAiB,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAA+B,GAC5F,kBAAkB,EAAE,CAuBtB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEtE,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,iBAAiB,CAAA;IACvB,sFAAsF;IACtF,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAA+B,GAC5F,oBAAoB,GAAG,SAAS,CA0BlC"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Upstream compatibility contract.
|
|
3
3
|
*
|
|
4
4
|
* The TUI is validated against a set of upstream prerelease lines — the
|
|
5
|
-
* current primary (0.2.
|
|
6
|
-
* compatibility across the 0.1.7, 0.1.5, 0.1.3, 0.1.2, 0.1.1 and 0.1.0
|
|
5
|
+
* current primary (0.2.1-rc.2) plus older lines kept in backward
|
|
6
|
+
* compatibility across the 0.2.0, 0.1.7, 0.1.5, 0.1.3, 0.1.2, 0.1.1 and 0.1.0
|
|
7
7
|
* release families.
|
|
8
8
|
* Every official package this adapter touches is blessed here; anything
|
|
9
9
|
* else must go through upstream channels or the adapter, never the UI.
|
|
@@ -17,11 +17,11 @@ import { readFileSync } from 'node:fs';
|
|
|
17
17
|
import { fileURLToPath } from 'node:url';
|
|
18
18
|
import { ADAPTER_TYPE_PACKAGES, HOST_TYPE_PACKAGES } from './host-contract.js';
|
|
19
19
|
/** Primary validated upstream line (newest). */
|
|
20
|
-
export const UPSTREAM_VALIDATED_VERSION = '0.2.
|
|
20
|
+
export const UPSTREAM_VALIDATED_VERSION = '0.2.1-rc.2';
|
|
21
21
|
/**
|
|
22
22
|
* Explicitly supported upstream prerelease lines, oldest first.
|
|
23
23
|
*
|
|
24
|
-
* 0.2.
|
|
24
|
+
* 0.2.1-rc.2 = primary continuous-CI line; 0.2.0-rc.2/rc.1 and
|
|
25
25
|
* 0.1.7-rc.2/rc.1 = previous
|
|
26
26
|
* family (mapped compatibility); 0.1.5-rc.1/alpha.2/alpha.1 = mapped
|
|
27
27
|
* compatibility lines (source-checked when the primary line moves);
|
|
@@ -53,6 +53,7 @@ export const UPSTREAM_VALIDATED_VERSIONS = [
|
|
|
53
53
|
'0.1.7-rc.2',
|
|
54
54
|
'0.2.0-rc.1',
|
|
55
55
|
'0.2.0-rc.2',
|
|
56
|
+
'0.2.1-rc.2',
|
|
56
57
|
];
|
|
57
58
|
/**
|
|
58
59
|
* Framework packages version on their own lines; the contract validates
|
|
@@ -66,7 +67,6 @@ export const UPSTREAM_FRAMEWORK_MAJORS = {
|
|
|
66
67
|
export const UPSTREAM_BLESSED_PACKAGES = [
|
|
67
68
|
'@deepseek-ai/cordis',
|
|
68
69
|
'@deepseek-ai/schemastery',
|
|
69
|
-
'@deepseek-ai/dsh-invariants',
|
|
70
70
|
'@deepseek-ai/dsh-agent',
|
|
71
71
|
'@deepseek-ai/dsh-agent-instructions',
|
|
72
72
|
'@deepseek-ai/dsh-agent-preset-registry',
|
|
@@ -35,6 +35,13 @@
|
|
|
35
35
|
* never message content, storage values, or grant-file contents.
|
|
36
36
|
*/
|
|
37
37
|
import { Context, Service } from '@deepseek-ai/cordis';
|
|
38
|
+
/**
|
|
39
|
+
* The ledger's file name under a data directory. The name and the default
|
|
40
|
+
* location are separate so that a check reading "what is left under this data
|
|
41
|
+
* root" can point at another root and still find the ledger — the grants file and
|
|
42
|
+
* the storage directory already follow one (C-5).
|
|
43
|
+
*/
|
|
44
|
+
export declare const EFFECT_LEDGER_NAME = "effect-ledger.jsonl";
|
|
38
45
|
/** Default ledger file (JSONL, one record per line). */
|
|
39
46
|
export declare const EFFECT_LEDGER_FILE: string;
|
|
40
47
|
/** Resource kinds recorded by the host's wired emitters. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-ledger.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/effect-ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAIH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AActD,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"effect-ledger.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/effect-ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAIH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AActD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,wBAAwB,CAAA;AAEvD,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,QAAqC,CAAA;AAEpE,4DAA4D;AAC5D,eAAO,MAAM,qBAAqB,6HAUxB,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAA;AAC1F,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE3D,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,eAAe,CAAA;IAC1B,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,MAAM,EAAE,YAAY,CAAA;IACpB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yDAAyD;IACzD,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,eAAe,EAAE,sBAAsB,CAAA;KACxC;CACF;AAWD,kEAAkE;AAClE,qBAAa,sBAAuB,SAAQ,OAAO;gBAE/C,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAO;IAsChG;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI;IAWpD,2DAA2D;IAC3D,OAAO,CAAC,kBAAkB;IAwD1B;gFAC4E;IAC5E,OAAO,CAAC,kBAAkB;IAqB1B;;yCAEqC;IACrC,OAAO,CAAC,UAAU;IAOlB,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,YAAY;CAarB;AA+CD,eAAe,sBAAsB,CAAA"}
|
|
@@ -44,8 +44,15 @@ import { adapterRuntimeFor } from '../adapter/kernel/runtime-context.js';
|
|
|
44
44
|
import { componentIdentityOf } from './component-identity.js';
|
|
45
45
|
import { compositionRoot, concreteService } from './host-access.js';
|
|
46
46
|
import { createKernelLedger } from '../adapter/kernel/ledger.js';
|
|
47
|
+
/**
|
|
48
|
+
* The ledger's file name under a data directory. The name and the default
|
|
49
|
+
* location are separate so that a check reading "what is left under this data
|
|
50
|
+
* root" can point at another root and still find the ledger — the grants file and
|
|
51
|
+
* the storage directory already follow one (C-5).
|
|
52
|
+
*/
|
|
53
|
+
export const EFFECT_LEDGER_NAME = 'effect-ledger.jsonl';
|
|
47
54
|
/** Default ledger file (JSONL, one record per line). */
|
|
48
|
-
export const EFFECT_LEDGER_FILE = join(DATA_DIR,
|
|
55
|
+
export const EFFECT_LEDGER_FILE = join(DATA_DIR, EFFECT_LEDGER_NAME);
|
|
49
56
|
/** Resource kinds recorded by the host's wired emitters. */
|
|
50
57
|
export const LEDGER_RESOURCE_KINDS = [
|
|
51
58
|
'command',
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
export interface EntrySlot {
|
|
11
11
|
/** The DSH kernel: the screen waits for the row's `attachDsh`. */
|
|
12
12
|
readonly dsh: boolean;
|
|
13
|
+
/** The host's DSH runtime version: this package's own resolution may name another copy. */
|
|
14
|
+
readonly kernelVersion?: string;
|
|
13
15
|
/** Set by the row as soon as it applies, so the entry can tell whether a
|
|
14
16
|
* `dsh-tui` row exists once the composition settled. */
|
|
15
17
|
rowSeen: boolean;
|
|
@@ -28,7 +30,7 @@ export interface EntrySlot {
|
|
|
28
30
|
firstFrameFlushed?: () => Promise<void>;
|
|
29
31
|
}
|
|
30
32
|
/** The entry's slot, published for the `dsh-tui` row on the DSH kernel. */
|
|
31
|
-
export declare function createEntrySlot(dsh: boolean): EntrySlot;
|
|
33
|
+
export declare function createEntrySlot(dsh: boolean, kernelVersion?: string): EntrySlot;
|
|
32
34
|
/** The published slot, if this process's entry mounted the screen. */
|
|
33
35
|
export declare function peekEntrySlot(): EntrySlot | undefined;
|
|
34
36
|
/** Take the DSH-side hook once: a second row (or a recompose) finds none. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-slot.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/entry-slot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB;6DACyD;IACzD,OAAO,EAAE,OAAO,CAAA;IAChB;0DACsD;IACtD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzF;0EACsE;IACtE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D;;4DAEwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC7B;wDACoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC;AAMD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"entry-slot.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/entry-slot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB,2FAA2F;IAC3F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B;6DACyD;IACzD,OAAO,EAAE,OAAO,CAAA;IAChB;0DACsD;IACtD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzF;0EACsE;IACtE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D;;4DAEwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC7B;wDACoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC;AAMD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAI/E;AAED,sEAAsE;AACtE,wBAAgB,aAAa,IAAI,SAAS,GAAG,SAAS,CAErD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,IAAI,SAAS,CAAC,WAAW,CAAC,CAKxD"}
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
const ENTRY_SLOT_KEY = Symbol.for('@deepseek-harness-tui/dsh-tui:host-entry');
|
|
10
10
|
/** The entry's slot, published for the `dsh-tui` row on the DSH kernel. */
|
|
11
|
-
export function createEntrySlot(dsh) {
|
|
12
|
-
const slot = { dsh, rowSeen: false };
|
|
11
|
+
export function createEntrySlot(dsh, kernelVersion) {
|
|
12
|
+
const slot = { dsh, rowSeen: false, kernelVersion };
|
|
13
13
|
if (dsh)
|
|
14
14
|
globalThis[ENTRY_SLOT_KEY] = slot;
|
|
15
15
|
return slot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fresh-agent.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/fresh-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAc,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAiB,MAAM,0BAA0B,CAAA;AAkBpF,KAAK,YAAY,GAAG;IAAE,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CAAE,CAAA;AAyCjF,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAkF,CAAA;AAKxI,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAItD;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAWlE;AAID,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAE5E;
|
|
1
|
+
{"version":3,"file":"fresh-agent.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/fresh-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAc,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAiB,MAAM,0BAA0B,CAAA;AAkBpF,KAAK,YAAY,GAAG;IAAE,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CAAE,CAAA;AAyCjF,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAkF,CAAA;AAKxI,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAItD;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAWlE;AAID,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAE5E;AA4FD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsB5H"}
|
|
@@ -78,6 +78,11 @@ function deferInitialPolicy(ctx, session, writer, source) {
|
|
|
78
78
|
if (session.seq !== 0)
|
|
79
79
|
return;
|
|
80
80
|
const providerFiber = concreteService(source.ctx.fiber);
|
|
81
|
+
// 0.2.1 publishes the service from a child; its named parent owns live
|
|
82
|
+
// routing so it can outlive consumer unloads. Older providers route on the
|
|
83
|
+
// service fiber itself. Never suppress the root's unrelated observers.
|
|
84
|
+
const parentFiber = concreteService(providerFiber.parent.fiber);
|
|
85
|
+
const routingFiber = parentFiber.name === source.name ? parentFiber : providerFiber;
|
|
81
86
|
const descriptor = Object.getOwnPropertyDescriptor(session, Context.filter);
|
|
82
87
|
const originalFilter = session[Context.filter];
|
|
83
88
|
const flush = writer.flush;
|
|
@@ -92,7 +97,7 @@ function deferInitialPolicy(ctx, session, writer, source) {
|
|
|
92
97
|
unstoredSessions.delete(session);
|
|
93
98
|
};
|
|
94
99
|
const filter = (listener) => (originalFilter?.call(session, listener) ?? true) &&
|
|
95
|
-
(!deferred || concreteService(listener.fiber) !==
|
|
100
|
+
(!deferred || concreteService(listener.fiber) !== routingFiber);
|
|
96
101
|
let stopEvents;
|
|
97
102
|
let stopFlush;
|
|
98
103
|
const release = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-access.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/host-access.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,qBAAqB,CAAA;AAkLpD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,IAAI,CAGlE;AAWD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE1D;AAkID;;uEAEuE;AACvE,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAE9D;
|
|
1
|
+
{"version":3,"file":"host-access.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/host-access.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,qBAAqB,CAAA;AAkLpD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,IAAI,CAGlE;AAWD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE1D;AAkID;;uEAEuE;AACvE,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAE9D;AAwLD,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAe/D;AAED;0EAC0E;AAC1E,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,OAAO,EACvB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,OAAO,KAAK,IAAI,GAC9C,OAAO,CA2BT;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMhE;AAED;+EAC+E;AAC/E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAInE;AAED;;;6EAG6E;AAC7E,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIrD;AAiHD;;;4EAG4E;AAC5E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAO3E;AAED;;;iEAGiE;AACjE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAehH;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAmBlG"}
|
|
@@ -408,6 +408,101 @@ function guardRootCapabilities(root) {
|
|
|
408
408
|
catch {
|
|
409
409
|
// Fall through when a minimal embedder omits reflection internals.
|
|
410
410
|
}
|
|
411
|
+
admitRootProjectionRegistrations(root);
|
|
412
|
+
}
|
|
413
|
+
const projectionRegistryRoots = new WeakSet();
|
|
414
|
+
const guardedProjectionRegistries = new WeakSet();
|
|
415
|
+
/**
|
|
416
|
+
* `sessionProjections.register` hangs its disposer on the receiver's context
|
|
417
|
+
* (the registry's documented ownership: the calling fiber). DSH's agent-team
|
|
418
|
+
* service reaches it through `ctx.root`, which lands that effect on the root
|
|
419
|
+
* fiber and the guard above refuses it. Admit that one call with host
|
|
420
|
+
* capability, so the registration sits where it would without the guard and
|
|
421
|
+
* the caller's disposer releases it in the caller's own order; the plugin's
|
|
422
|
+
* unload releases one it leaves behind ({@link releaseAfterUnload}). The
|
|
423
|
+
* root stays closed to everything else.
|
|
424
|
+
*/
|
|
425
|
+
function admitRootProjectionRegistrations(root) {
|
|
426
|
+
if (projectionRegistryRoots.has(root))
|
|
427
|
+
return;
|
|
428
|
+
projectionRegistryRoots.add(root);
|
|
429
|
+
const wrap = () => withHostRootCapability(() => {
|
|
430
|
+
let registry;
|
|
431
|
+
try {
|
|
432
|
+
const service = root.sessionProjections;
|
|
433
|
+
if (typeof service !== 'object' || service === null)
|
|
434
|
+
return;
|
|
435
|
+
registry = concreteService(service);
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
if (guardedProjectionRegistries.has(registry))
|
|
441
|
+
return;
|
|
442
|
+
const original = Reflect.get(registry, 'register');
|
|
443
|
+
if (typeof original !== 'function')
|
|
444
|
+
return;
|
|
445
|
+
guardedProjectionRegistries.add(registry);
|
|
446
|
+
// Configurable: Cordis's traceable proxy rebinds methods, which a frozen
|
|
447
|
+
// property would forbid. Replacing it only restores the refused path.
|
|
448
|
+
Object.defineProperty(registry, 'register', {
|
|
449
|
+
configurable: true,
|
|
450
|
+
writable: false,
|
|
451
|
+
value: function (...args) {
|
|
452
|
+
// Through `ctx.root` the receiver is a root-derived context on the
|
|
453
|
+
// root fiber: that is the effect the guard would refuse.
|
|
454
|
+
if (callContextOf(this)?.fiber !== rootFibers.get(root) || !currentActivationIsPlugin(root)) {
|
|
455
|
+
return Reflect.apply(original, this, args);
|
|
456
|
+
}
|
|
457
|
+
const token = activationStorage.getStore();
|
|
458
|
+
assertLiveContext(token.context, 'sessionProjections.register');
|
|
459
|
+
// On the root fiber, as without the guard: the caller orders the
|
|
460
|
+
// disposer itself (DSH's TeamService unregisters after its async
|
|
461
|
+
// runtime teardown, which still reads the key). On the caller's fiber
|
|
462
|
+
// it would be a sibling effect, and Cordis unloads siblings at once.
|
|
463
|
+
const dispose = withHostRootCapability(() => Reflect.apply(original, this, args));
|
|
464
|
+
return releaseAfterUnload(root, token.fiber, dispose);
|
|
465
|
+
},
|
|
466
|
+
});
|
|
467
|
+
});
|
|
468
|
+
wrap();
|
|
469
|
+
try {
|
|
470
|
+
// The registry may mount after the guard (the profile composes later).
|
|
471
|
+
withHostRootCapability(() => root.on('internal/service', ((name) => {
|
|
472
|
+
if (name === 'sessionProjections')
|
|
473
|
+
wrap();
|
|
474
|
+
}), { global: true }));
|
|
475
|
+
}
|
|
476
|
+
catch {
|
|
477
|
+
// A minimal embedder without the event helper keeps the plain guard.
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* A root registration a plugin made through {@link admitRootProjectionRegistrations}
|
|
482
|
+
* still dies with that plugin: if the plugin never disposes it, it goes once
|
|
483
|
+
* the plugin's fiber has finished unloading (every effect settled, async
|
|
484
|
+
* teardown included), whether the fiber reloads or not.
|
|
485
|
+
* @returns the disposer handed to the plugin; calling it also drops the watch.
|
|
486
|
+
*/
|
|
487
|
+
function releaseAfterUnload(root, fiber, dispose) {
|
|
488
|
+
let unwatch;
|
|
489
|
+
const release = () => {
|
|
490
|
+
unwatch?.();
|
|
491
|
+
unwatch = undefined;
|
|
492
|
+
dispose();
|
|
493
|
+
};
|
|
494
|
+
try {
|
|
495
|
+
unwatch = withHostRootCapability(() => root.on('internal/status', (changed, oldState) => {
|
|
496
|
+
// Cordis uses 5 for UNLOADING (see rememberFiber). The event carries
|
|
497
|
+
// either the activation's fiber or the wrapper normalized to it.
|
|
498
|
+
if (oldState === 5 && (changed === fiber || rememberFiber(changed, root) === fiber))
|
|
499
|
+
release();
|
|
500
|
+
}, { global: true }));
|
|
501
|
+
}
|
|
502
|
+
catch {
|
|
503
|
+
// Without the event helper only the plugin's own disposer releases it.
|
|
504
|
+
}
|
|
505
|
+
return release;
|
|
411
506
|
}
|
|
412
507
|
function guardFiberMethod(target, method, root, capability) {
|
|
413
508
|
const descriptor = Reflect.getOwnPropertyDescriptor(target, method);
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
/** The host CLI package whose installation the entry loads. */
|
|
8
8
|
export declare const HOST_PACKAGE = "@deepseek-ai/dsh";
|
|
9
9
|
/** The host line the reproduced pieces were checked against (host-replica.snapshot.json). */
|
|
10
|
-
export declare const HOST_REPLICA_VERSION = "0.2.
|
|
10
|
+
export declare const HOST_REPLICA_VERSION = "0.2.1-rc.2";
|
|
11
11
|
/** Where the entry resolves a host module from. */
|
|
12
12
|
export type HostModuleVia =
|
|
13
13
|
/** The host package's own `createRequire` (its nested node_modules). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-contract.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/host-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,YAAY,qBAAqB,CAAA;AAE9C,6FAA6F;AAC7F,eAAO,MAAM,oBAAoB,eAAe,CAAA;AAEhD,mDAAmD;AACnD,MAAM,MAAM,aAAa;AACvB,wEAAwE;AACtE,MAAM;AACR,wFAAwF;GACtF,UAAU,CAAA;AAEd,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAA;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED,kFAAkF;AAClF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeqB,CAAA;AAE9C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,yKAMrB,CAAA;AAEV;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,8CAExB,CAAA;AAEV,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAA;IACnC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAS/C,CAAA;AAED,6GAA6G;AAC7G,eAAO,MAAM,eAAe,EAAE,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"host-contract.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/host-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,YAAY,qBAAqB,CAAA;AAE9C,6FAA6F;AAC7F,eAAO,MAAM,oBAAoB,eAAe,CAAA;AAEhD,mDAAmD;AACnD,MAAM,MAAM,aAAa;AACvB,wEAAwE;AACtE,MAAM;AACR,wFAAwF;GACtF,UAAU,CAAA;AAEd,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAA;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED,kFAAkF;AAClF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeqB,CAAA;AAE9C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,yKAMrB,CAAA;AAEV;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,8CAExB,CAAA;AAEV,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAA;IACnC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAS/C,CAAA;AAED,6GAA6G;AAC7G,eAAO,MAAM,eAAe,EAAE,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAWpF,CAAA"}
|