super-dsh 0.3.2-e → 0.3.3-b

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.
@@ -6,34 +6,36 @@
6
6
  "better-dsh/src/remote/agent-registration.ts": "cb08eb9f5d592201054410da69b3bf383e2604899d9494a8cbd8ba2f86b3f7ad",
7
7
  "better-dsh/src/remote/archive.ts": "fd32f96dc63421be7d56eb545badf355c6ee2498599605ffa48958b9efca9a63",
8
8
  "better-dsh/src/remote/copy.ts": "ab2aec5ee8df814f4bc568370977d229c402489248c738eff147431a52650c52",
9
- "better-dsh/src/remote/driver.ts": "8bfa05e056b9099a1d9fcdf6cb67d15ec6e9a895ea061ea2e65cd3a513fe4fdf",
9
+ "better-dsh/src/remote/driver.ts": "abad7a3ac50d2d5caac4de4f258a29f5cd64b85176db4e99b2e76693349faa73",
10
10
  "better-dsh/src/remote/endpoints.ts": "e4ab0fa1afcee815ad78976eba4036e2ed2b21eaea11f7451874b56229f12eac",
11
11
  "better-dsh/src/remote/file-worker.ts": "31ac019a944cf7fdcd0ff044f8b330d923bf4d384c77056f9b7e3032bc8c9598",
12
- "better-dsh/src/remote/helper.ts": "789a802610fc480bb1c922dd284787ca22d7394fa906c729ee33d78ade79973c",
12
+ "better-dsh/src/remote/helper.ts": "41d4af3ccaa300ff3a1ad5352041e859028f6b69703ed96447a84693e6920d98",
13
13
  "better-dsh/src/remote/hub-contract.ts": "a7ae5501c4ffe63ced1526c2d64d7d83798fc2025f9b4aea998e033a124fe598",
14
14
  "better-dsh/src/remote/hub-pty-pump.mjs": "dfe0cb331cc585eb4d858fbb6d8f3ff22414f3ee55109c933df0fc14502aee5c",
15
- "better-dsh/src/remote/input.ts": "dfe087d34e9e9aefc0d8ec2e33371dc86981b05723d436419ad1afb6ac8426b4",
16
- "better-dsh/src/remote/jobs.ts": "4556bd9f30580a8bf90800c7a945282e276abb548df6db7fe95e7091bb1543c6",
15
+ "better-dsh/src/remote/input.ts": "7d05bc17faefa2d2e6c54d612901b2d698cdc924ffa475fbcfc704cf006ee070",
16
+ "better-dsh/src/remote/jobs.ts": "9fa1d2c48a9c2b3e1d2cdeab6c30cb4df0e858a462eaa871110c99769335dbb3",
17
17
  "better-dsh/src/remote/labels.ts": "d9dcfdc1c6bb292b37d3250e7897b239c416b55b3102943bcc4f1d0ce7d2e709",
18
18
  "better-dsh/src/remote/native-copy.ts": "3f8691abb14dfb7a94e956956fb4d182b7732ffbe70f1a8ff7dec5dd2b9afb7c",
19
19
  "better-dsh/src/remote/nonce-framing.ts": "2f2f80d6aa9934f96ba171d575dbe4cddbe2e127da3b0eec3032c5ea522cadc3",
20
20
  "better-dsh/src/remote/oneshot.ts": "99f2c809ba1159c7865ec3cff2e6d7b1f165a7f03185a6fc9505c1a534ba57bc",
21
21
  "better-dsh/src/remote/output-ring.ts": "a79104bd3dcddab06a3fe7e52d239a70becd4f2dcddd0c9b6513f5fe3c4ed0bc",
22
22
  "better-dsh/src/remote/plugin.ts": "da6b985cd013ffc253ee8cf5605dc2d729e26534139dd28269db5d246511fac9",
23
- "better-dsh/src/remote/process.ts": "f4491c76457b662703e0b1e4a876299b9c8b7b3da5b304c6baee5576017de448",
24
- "better-dsh/src/remote/pty-session.ts": "3cb07345b90f0e54cbcea00204ae0b5346d9bb6edf3a784f009fc1b07357f799",
25
- "better-dsh/src/remote/roster.ts": "b84f75edc87550bb96803042487cfd7c39135b1710ff9715dd5ca402df0aa378",
23
+ "better-dsh/src/remote/process.ts": "7a93489ddbf55310d6e1f86f4aa6e199ba7081dcc52ee87a2e85003bab935baf",
24
+ "better-dsh/src/remote/pty-session.ts": "7a221ba23a754981a03757d776a3317ad6a5244e258c2c38c403d9cd78770dc9",
25
+ "better-dsh/src/remote/roster.ts": "169925b34f26db409e2e93543fcc405c15ecf2ad62b8088d6d2a190b4da7907e",
26
26
  "better-dsh/src/remote/rsync.ts": "f9c15279fdfa67b3265eeda216bcd0c46d8b4f05c6026cf2750a1c818ff333ba",
27
27
  "better-dsh/src/remote/ssh-argv.ts": "e7f46ef3e53eaba6cfe92033afad046435db18b0b2f4b86832353d609c535662",
28
28
  "better-dsh/src/remote/ssh-config.ts": "71ce833be5c934430e8a9ca982af055fccb71d6c3e64513ae83e7937b070e446",
29
+ "better-dsh/src/remote/ssh-mux.ts": "ae3f9ae94b6fb633eacfc5863ce3b41e79dd14b2ca80bd8d7a800037b3bed200",
29
30
  "better-dsh/src/remote/ssh-process.ts": "9b4d754af5af0fe6a903e683642e94842f8662358b72467d41f2288e1e67fd79",
30
31
  "better-dsh/src/remote/ssh-rsync-native-relay.ts": "5d9585ab30a11aeeba19ce7b43aa31f47e2ee0bde2e7c006ac3e811cf7940bdf",
31
32
  "better-dsh/src/remote/ssh-targets.ts": "2a7e754fc26cf34e05ffb5d7f7406f35c09fd0770684db904dbf4c56d2c00beb",
32
- "better-dsh/src/remote/status.ts": "e144c1cf98388dbaca8dab5622e6e37ceac85d898119e37d07f88e129113a82e",
33
- "better-dsh/src/remote/target.ts": "bce47c6c61975a52e5cb77a6b727f68cbe78ecdcb3866c237fb932444ecc954e",
34
- "better-dsh/src/remote/tool.ts": "ecb431c4b1dfa4981063ea78b90288ac9ac12070c08a113b51602f18887f194b",
33
+ "better-dsh/src/remote/status.ts": "3276051360b2fd08afea2de64b1bb35d383a3620324197a6d328337aed1ebeb5",
34
+ "better-dsh/src/remote/target.ts": "95f88a9c549f500e12bea70839126619a67627a3c7e56bd032eec38efd45725c",
35
+ "better-dsh/src/remote/tool.ts": "bf115fba318b693b71c05dc48d40d0d0729e6de21d2848bd4bf2c0ef1b083b3b",
36
+ "better-dsh/src/remote/trace.ts": "4d5529c406ed2a51a5b47760f88c7e34bd0d759695354394cef6a0b44fa9c05e",
35
37
  "better-dsh/src/remote/transfer-tool.ts": "d02b216a31314e98fdf6933230b57adce58b9c8aebe9798aae7be808105b41e2",
36
- "better-dsh/src/remote/transports.ts": "8a7190d6013f12901d9007e6b30708645baa4aa0770fcb1087ae6fcde656a8d0",
38
+ "better-dsh/src/remote/transports.ts": "f3bf2c4e0a2cb1c63d1e2d16c4421f949f1726e700f066dc0bdb999af8520f8c",
37
39
  "better-dsh/third_party/schemastery/lib/index.cjs": "aca1c1a47c7b6034feee01501aefca3e6dd97a0bac4fe334fd30647ae5a9e480",
38
40
  "better-dsh/third_party/schemastery/lib/index.d.mts": "66847f605af58c42575333c825eefdec4ad38278ad6cb260e37aa0cc63803bbd",
39
41
  "better-dsh/third_party/schemastery/lib/index.mjs": "cfcbe46c7416bdb35ce891c252152bbf519e08199bede5930dd7cb880c65f1ef",
@@ -71,7 +73,7 @@
71
73
  "helper-bin/x86_64-unknown-linux-musl/BUILT-VER": "8601d3c2ff79795c9657b02080afffe91c42775534dd6687c6dbdc0f4924db70",
72
74
  "helper-bin/x86_64-unknown-linux-musl/superd-run": "05b428657942abf22a0ad609433d5cab6b6182fe389851345459a0274b5a6533",
73
75
  "hub-pty-pump.mjs": "dfe0cb331cc585eb4d858fbb6d8f3ff22414f3ee55109c933df0fc14502aee5c",
74
- "plugin.d.ts": "da9bfcbb1a0f37bd2994452ac4cfed284615e5cea45c05ff97569474a442e91f",
75
- "plugin.js": "8dd1843f2c57097a1bbcfeddaf50193985bf25b942cc784ca501311d16aae7f3"
76
+ "plugin.d.ts": "c0a9a99c41536bb5e0672d2128109563c741c15e96d8161dc955be3cb1612d62",
77
+ "plugin.js": "acbb3a64a8d8cccca876f45b68a20885378a86f6780c345444a0048f1faee268"
76
78
  }
77
79
  }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * agent-model-face.ts — the 0.2.2+ `Agent.model` face for foreign-runtime
3
+ * bridges.
4
+ *
5
+ * dsh 0.2.2 made `model` a required `Agent` member: the Web UI's model switcher
6
+ * reaches every agent — native and foreign alike — through
7
+ * `session/selectModel` → `agent.model.select()` (session-controller
8
+ * commands.ts). The native `AgentModel` (dsh-agent model-selection.ts) records
9
+ * a `model/selection` session event durably and resolves `current()` as
10
+ * pending ?? lastUsed ?? live options.
11
+ *
12
+ * This module hands the foreign bridges (claude/codex/hermes/pi/agy/omp) the
13
+ * same semantics without mounting the projection registry:
14
+ *
15
+ * - {@link recordedModelSelection} — the native `modelSelection` projection
16
+ * fold, replayed as one pass over the session's events. A recorded
17
+ * `model/selection` is the pending choice and survives non-matching
18
+ * `request/header`s; a matching header retires it; `lastUsed` is the last
19
+ * header's config. (The adapters that DO mount `sessionProjections` —
20
+ * claude, codex — may keep reading the projection directly; both produce
21
+ * the same answer.)
22
+ * - {@link createAgentModelFace} — the face itself: `current()` resolves
23
+ * pending → logged header → deployment default → agent options (each level
24
+ * must name both halves), `select()` appends the same durable
25
+ * `model/selection` event as the native face, deduped against the recorded
26
+ * choice.
27
+ *
28
+ * Structural session face on the system-head pattern: the real (generic-typed)
29
+ * `Session` satisfies it without this package taking a dsh-agent dependency.
30
+ *
31
+ * @module superd-hub/agent-model-face
32
+ */
33
+ /** A model selection: both route halves, with an optional explicit effort. */
34
+ export interface ModelSelectionLike {
35
+ provider: string;
36
+ model: string;
37
+ reasoningEffort?: unknown;
38
+ }
39
+ /** The `Agent.model` shape (dsh-agent runtime-types `Model`), over the bridge's own selection type. */
40
+ export interface BridgeModelFace<Sel extends ModelSelectionLike> {
41
+ current(): Readonly<Sel> | undefined;
42
+ select(selection: Readonly<Sel>): void;
43
+ }
44
+ /**
45
+ * The session slice the fold reads. Deliberately loose so the real
46
+ * (generic-typed) `Session` satisfies it; the events the fold inspects arrive
47
+ * as `unknown` data and are narrowed inside this module only.
48
+ */
49
+ export interface ModelSessionFace {
50
+ snapshotEvents(): ReadonlyArray<{
51
+ type: string;
52
+ data: unknown;
53
+ }>;
54
+ requestHeader(): {
55
+ readonly config: {
56
+ readonly provider: string;
57
+ readonly model: string;
58
+ };
59
+ } | undefined;
60
+ }
61
+ /**
62
+ * The native `modelSelection` projection fold over one session's events.
63
+ * @param events - the session's full event snapshot (order is the log order).
64
+ * @returns the recorded choice — a pending selection, else the last request
65
+ * header's config — or `null` when the log names neither.
66
+ */
67
+ export declare function recordedModelSelection(events: ReadonlyArray<{
68
+ type: string;
69
+ data: unknown;
70
+ }>): ModelSelectionLike | null;
71
+ /** Readers the face resolves through; each adapter wires its own sources. */
72
+ export interface AgentModelFaceParts<Sel extends ModelSelectionLike> {
73
+ /** The session whose events and request header back the fold. */
74
+ session: ModelSessionFace;
75
+ /** The agent's live route options (the options fallback names both halves or neither). */
76
+ options: {
77
+ readonly provider?: string;
78
+ readonly model?: string;
79
+ };
80
+ /** Appends the durable `model/selection` event (the adapter's own typed append). */
81
+ appendSelection: (selection: Sel) => void;
82
+ /** Reads the deployment default (`ctx.agentDefaultModel`); absent when the service is not mounted. */
83
+ readDefault?: () => {
84
+ provider: string;
85
+ model: string;
86
+ } | undefined;
87
+ }
88
+ /**
89
+ * Build the `Agent.model` face for one foreign-runtime agent.
90
+ * @param parts - the session, options, typed append, and optional default reader.
91
+ * @returns the face; assign it to the agent's `model` member.
92
+ */
93
+ export declare function createAgentModelFace<Sel extends ModelSelectionLike>(parts: AgentModelFaceParts<Sel>): BridgeModelFace<Sel>;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * agent-model-face.ts — the 0.2.2+ `Agent.model` face for foreign-runtime
3
+ * bridges.
4
+ *
5
+ * dsh 0.2.2 made `model` a required `Agent` member: the Web UI's model switcher
6
+ * reaches every agent — native and foreign alike — through
7
+ * `session/selectModel` → `agent.model.select()` (session-controller
8
+ * commands.ts). The native `AgentModel` (dsh-agent model-selection.ts) records
9
+ * a `model/selection` session event durably and resolves `current()` as
10
+ * pending ?? lastUsed ?? live options.
11
+ *
12
+ * This module hands the foreign bridges (claude/codex/hermes/pi/agy/omp) the
13
+ * same semantics without mounting the projection registry:
14
+ *
15
+ * - {@link recordedModelSelection} — the native `modelSelection` projection
16
+ * fold, replayed as one pass over the session's events. A recorded
17
+ * `model/selection` is the pending choice and survives non-matching
18
+ * `request/header`s; a matching header retires it; `lastUsed` is the last
19
+ * header's config. (The adapters that DO mount `sessionProjections` —
20
+ * claude, codex — may keep reading the projection directly; both produce
21
+ * the same answer.)
22
+ * - {@link createAgentModelFace} — the face itself: `current()` resolves
23
+ * pending → logged header → deployment default → agent options (each level
24
+ * must name both halves), `select()` appends the same durable
25
+ * `model/selection` event as the native face, deduped against the recorded
26
+ * choice.
27
+ *
28
+ * Structural session face on the system-head pattern: the real (generic-typed)
29
+ * `Session` satisfies it without this package taking a dsh-agent dependency.
30
+ *
31
+ * @module superd-hub/agent-model-face
32
+ */
33
+ /** One recorded selection read structurally; incomplete routes answer `null`. */
34
+ function selectionOf(value) {
35
+ if (typeof value !== 'object' || value === null)
36
+ return null;
37
+ const { provider, model } = value;
38
+ if (typeof provider !== 'string' || provider === '' || typeof model !== 'string' || model === '')
39
+ return null;
40
+ const reasoningEffort = value.reasoningEffort;
41
+ return {
42
+ provider,
43
+ model,
44
+ ...(typeof reasoningEffort === 'string' && reasoningEffort !== ''
45
+ ? { reasoningEffort }
46
+ : {}),
47
+ };
48
+ }
49
+ /** Route equality without the effort, and full equality with it (the fold's own rules). */
50
+ function sameRoute(left, right) {
51
+ return left.provider === right.provider && left.model === right.model;
52
+ }
53
+ function sameSelection(left, right) {
54
+ return sameRoute(left, right) && left.reasoningEffort === right.reasoningEffort;
55
+ }
56
+ /**
57
+ * The native `modelSelection` projection fold over one session's events.
58
+ * @param events - the session's full event snapshot (order is the log order).
59
+ * @returns the recorded choice — a pending selection, else the last request
60
+ * header's config — or `null` when the log names neither.
61
+ */
62
+ export function recordedModelSelection(events) {
63
+ let pending = null;
64
+ let lastUsed = null;
65
+ for (const event of events) {
66
+ if (event.type === 'model/selection') {
67
+ const selection = selectionOf(event.data);
68
+ if (selection !== null && !(pending !== null && sameSelection(pending, selection)))
69
+ pending = selection;
70
+ }
71
+ else if (event.type === 'request/header') {
72
+ const header = event.data;
73
+ const config = header === null || typeof header !== 'object' ? undefined : header.header?.config;
74
+ const selection = selectionOf(config);
75
+ if (selection !== null) {
76
+ lastUsed = selection;
77
+ if (pending !== null && sameRoute(pending, selection))
78
+ pending = null;
79
+ }
80
+ }
81
+ }
82
+ return pending ?? lastUsed;
83
+ }
84
+ /**
85
+ * Build the `Agent.model` face for one foreign-runtime agent.
86
+ * @param parts - the session, options, typed append, and optional default reader.
87
+ * @returns the face; assign it to the agent's `model` member.
88
+ */
89
+ export function createAgentModelFace(parts) {
90
+ const recorded = () => recordedModelSelection(parts.session.snapshotEvents());
91
+ const current = () => {
92
+ const fold = recorded();
93
+ if (fold !== null)
94
+ return { ...fold };
95
+ const preferred = parts.readDefault?.();
96
+ if (preferred !== undefined && preferred.provider !== '' && preferred.model !== '') {
97
+ return { provider: preferred.provider, model: preferred.model };
98
+ }
99
+ const { provider, model } = parts.options;
100
+ return provider !== undefined && provider !== '' && model !== undefined && model !== ''
101
+ ? { provider, model }
102
+ : undefined;
103
+ };
104
+ return {
105
+ current,
106
+ select(selection) {
107
+ const fold = recorded();
108
+ if (fold !== null && sameSelection(fold, selection))
109
+ return;
110
+ parts.appendSelection({ ...selection });
111
+ },
112
+ };
113
+ }
@@ -36,6 +36,7 @@ export { createOwnershipIndex, type OwnershipIndex, type OwnershipRow } from './
36
36
  export { registerHostMount, takeHostMount, listHostMounts, noteWorldServer, worldServerOf, type HostMount } from './world-host.js';
37
37
  export { worldMountPatches, superdTrustedHosts, WORLD_WAVE1_DISABLED_ROWS, WORLD_WAVE2_DISABLED_ROWS, WORLD_MOUNT_PLUGIN, WORLD_MOUNT_ROW_ID, WORLD_HUB_PLUGIN, WORLD_HUB_ROW_ID, type WorldPatchLayer, } from './world-mount.js';
38
38
  export { withSystemHead, type HeadAwareSessionFace, type HeadPlaceholder, type WithSystemHead } from './system-head.js';
39
+ export { createAgentModelFace, recordedModelSelection, type AgentModelFaceParts, type BridgeModelFace, type ModelSelectionLike, type ModelSessionFace, } from './agent-model-face.js';
39
40
  export { default as worldApply, name as worldPluginName, type Config as WorldEntryConfig } from './world-entry.js';
40
41
  export { default as joinApply, name as worldJoinPluginName, type Config as WorldJoinConfig } from './world-join.js';
41
42
  export { createA2aService, A2A_MESSAGE_TEMPLATE, A2A_UNTITLED, A2A_BUFFER_MAX, A2A_NO_SESSION_CLOSE_REASON, A2A_NO_TURN_ACTIVE_NOTE, renderA2aEnvelope, loadConversations, saveConversations, shortIdFor, isDegenerateShortId, migrateConversations, type A2aService, subscribeSessionCompletion, sessionRpc, turnLivenessOf, addressErrorBody, type A2aSessionSource, type A2aGateway, type A2aAddress, type A2aInitiator, type A2aDelivery, type A2aSendRequest, type A2aReceipt, type A2aReceiptOutcome, type A2aReceiptError, type A2aConversationRef, type A2aCompletion, type A2aCompletionCb, type A2aErrorCb, type A2aSubscribeOptions, type A2aStopScope, type A2aStopResult, type A2aBufferedMessage, type A2aBufferInput, type ConversationRow, type ConversationsFile, } from './a2a-service.js';
@@ -36,6 +36,7 @@ export { createOwnershipIndex } from './ownership.js';
36
36
  export { registerHostMount, takeHostMount, listHostMounts, noteWorldServer, worldServerOf } from './world-host.js';
37
37
  export { worldMountPatches, superdTrustedHosts, WORLD_WAVE1_DISABLED_ROWS, WORLD_WAVE2_DISABLED_ROWS, WORLD_MOUNT_PLUGIN, WORLD_MOUNT_ROW_ID, WORLD_HUB_PLUGIN, WORLD_HUB_ROW_ID, } from './world-mount.js';
38
38
  export { withSystemHead } from './system-head.js';
39
+ export { createAgentModelFace, recordedModelSelection, } from './agent-model-face.js';
39
40
  export { default as worldApply, name as worldPluginName } from './world-entry.js';
40
41
  export { default as joinApply, name as worldJoinPluginName } from './world-join.js';
41
42
  export { createA2aService, A2A_MESSAGE_TEMPLATE, A2A_UNTITLED, A2A_BUFFER_MAX, A2A_NO_SESSION_CLOSE_REASON, A2A_NO_TURN_ACTIVE_NOTE, renderA2aEnvelope, loadConversations, saveConversations, shortIdFor, isDegenerateShortId, migrateConversations,
@@ -1,3 +1,4 @@
1
+ import { modelSelectionProjectionDefinition } from '@deepseek-ai/dsh-agent';
1
2
  import { noteWorldServer, publishWorldFetch, takeHostMount } from './world-host.js';
2
3
  import { WorldWebServer } from './world-web-server.js';
3
4
  import { superdTrustedHosts } from './world-mount.js';
@@ -43,6 +44,35 @@ export function apply(ctx, config) {
43
44
  dropWorldFetch = publishWorldFetch(key, connection.createSharedFetchHandler('/api'), mount);
44
45
  }
45
46
  });
47
+ // 0.2.2: register the `modelSelection` projection in THIS world's registry.
48
+ // Upstream's only registrant is the agent-loop row (agent-loop/src:334),
49
+ // which wave-1 minimization keeps out of world trees — without it the
50
+ // native model seat's projection frame never resolves and the trigger
51
+ // label stays "loading models…" forever (the catalog and selectModel RPC
52
+ // take different paths, which is why they keep working). The definition is
53
+ // a pure event fold (`model/selection` + `request/header`), no loop
54
+ // machinery; register() is ref-counted and duplicate-tolerant, so a future
55
+ // tree that also mounts agent-loop shares the registration cleanly.
56
+ ctx.inject(['sessionProjections'], (projCtx) => {
57
+ const projections = projCtx.get('sessionProjections');
58
+ if (projections === undefined)
59
+ return;
60
+ let disposed = false;
61
+ let handle;
62
+ void projections.register(modelSelectionProjectionDefinition).then((registered) => {
63
+ if (disposed) {
64
+ void registered.dispose();
65
+ return;
66
+ }
67
+ handle = registered;
68
+ }, (error) => {
69
+ ctx.logger?.warn?.(`superd-world-mount: modelSelection projection registration failed: ${String(error)}`);
70
+ });
71
+ return () => {
72
+ disposed = true;
73
+ void handle?.dispose();
74
+ };
75
+ });
46
76
  ctx.effect(() => () => {
47
77
  dropWorldFetch?.();
48
78
  }, 'superd-world-mount: virtual webServer');
@@ -45,16 +45,17 @@
45
45
  "peerDependencies": {
46
46
  "@earendil-works/pi-coding-agent": "0.84.2",
47
47
  "@deepseek-ai/cordis": "*",
48
- "@deepseek-ai/dsh-api-gateway": ">=0.1.5-0 <0.3.0-0",
49
- "@deepseek-ai/dsh-home-paths": ">=0.1.5-0 <0.3.0-0",
50
- "@deepseek-ai/dsh-host-webserver": ">=0.1.5-0 <0.3.0-0",
51
- "@deepseek-ai/dsh-tools": ">=0.1.5-0 <0.3.0-0",
52
- "@deepseek-ai/dsh-typert-protocol": ">=0.1.5-0 <0.3.0-0",
53
- "@deepseek-ai/dsh-client-connection": ">=0.1.5-0 <0.3.0-0",
54
- "@deepseek-ai/dsh-app-boot": ">=0.1.5-0 <0.3.0-0",
55
- "@deepseek-ai/dsh-atomic-write": ">=0.1.5-0 <0.3.0-0",
56
- "@deepseek-ai/dsh-cmdline": ">=0.1.5-0 <0.3.0-0",
57
- "@deepseek-ai/dsh-plugin-manager": ">=0.1.5-0 <0.3.0-0"
48
+ "@deepseek-ai/dsh-agent": ">=0.2.2-0 <1.0.0-0",
49
+ "@deepseek-ai/dsh-api-gateway": ">=0.2.2-0 <1.0.0-0",
50
+ "@deepseek-ai/dsh-home-paths": ">=0.2.2-0 <1.0.0-0",
51
+ "@deepseek-ai/dsh-host-webserver": ">=0.2.2-0 <1.0.0-0",
52
+ "@deepseek-ai/dsh-tools": ">=0.2.2-0 <1.0.0-0",
53
+ "@deepseek-ai/dsh-typert-protocol": ">=0.2.2-0 <1.0.0-0",
54
+ "@deepseek-ai/dsh-client-connection": ">=0.2.2-0 <1.0.0-0",
55
+ "@deepseek-ai/dsh-app-boot": ">=0.2.2-0 <1.0.0-0",
56
+ "@deepseek-ai/dsh-atomic-write": ">=0.2.2-0 <1.0.0-0",
57
+ "@deepseek-ai/dsh-cmdline": ">=0.2.2-0 <1.0.0-0",
58
+ "@deepseek-ai/dsh-plugin-manager": ">=0.2.2-0 <1.0.0-0"
58
59
  },
59
60
  "peerDependenciesMeta": {
60
61
  "@earendil-works/pi-coding-agent": {
@@ -66,6 +67,9 @@
66
67
  "@deepseek-ai/dsh-api-gateway": {
67
68
  "optional": true
68
69
  },
70
+ "@deepseek-ai/dsh-agent": {
71
+ "optional": true
72
+ },
69
73
  "@deepseek-ai/dsh-home-paths": {
70
74
  "optional": true
71
75
  },