@deepseek-ai/dsh-subagent 0.1.5-rc.2 → 0.1.6-alpha.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.
@@ -53,7 +53,7 @@ export declare function createAgentMessage(sender: Agent, content: ContentBlock[
53
53
  */
54
54
  export declare function withContinuableReturnGuidance(parentId: SessionId, prompt: ContentBlock[]): ContentBlock[];
55
55
  /**
56
- * Build the runtime-owned settlement notice delivered to a child's parent.
56
+ * Build the runtime-owned settlement notice from the child's nonempty closing text.
57
57
  * @param childId - durable child session id named in the notice.
58
58
  * @param terminal - recorded terminal state for the settled Activation.
59
59
  * @returns the durable user-message representation delivered to the parent.
@@ -77,19 +77,23 @@ function settlementSummary(childId, stopReason) {
77
77
  }
78
78
  }
79
79
  /**
80
- * Build the runtime-owned settlement notice delivered to a child's parent.
80
+ * Build the runtime-owned settlement notice from the child's nonempty closing text.
81
81
  * @param childId - durable child session id named in the notice.
82
82
  * @param terminal - recorded terminal state for the settled Activation.
83
83
  * @returns the durable user-message representation delivered to the parent.
84
84
  */
85
85
  export function createSettlementMessage(childId, terminal) {
86
86
  const summary = settlementSummary(childId, terminal.stopReason);
87
+ // Parent providers receive this notice as a user message and may reject
88
+ // nontext assistant blocks. Keep this conversion local so SDK/UI consumers
89
+ // retain the complete child output.
90
+ const closingText = (terminal.output ?? []).flatMap(block => block.type === 'text' && block.text.length > 0 ? [block] : []);
87
91
  return createUserMessage({
88
92
  content: [
89
93
  { type: 'text', text: summary },
90
- ...terminal.output === undefined
94
+ ...closingText.length === 0
91
95
  ? [{ type: 'text', text: 'It left no closing message.' }]
92
- : [{ type: 'text', text: 'Its closing message:' }, ...terminal.output],
96
+ : [{ type: 'text', text: 'Its closing message:' }, ...closingText],
93
97
  ],
94
98
  source: {
95
99
  kind: 'subagent-settled',
@@ -35,7 +35,7 @@ export declare class SubagentContinuationManager {
35
35
  private readonly ctx;
36
36
  private readonly host;
37
37
  private readonly activations;
38
- constructor(ctx: Context, host: ContinuationHost);
38
+ constructor(ctx: Context, host: ContinuationHost, maxActiveSubagents: () => number);
39
39
  /**
40
40
  * Start one continuable background child and resolve at initial inbox acceptance.
41
41
  * Every earlier failure disposes any created handle and rolls back Activation
@@ -86,10 +86,10 @@ export class SubagentContinuationManager {
86
86
  ctx;
87
87
  host;
88
88
  activations;
89
- constructor(ctx, host) {
89
+ constructor(ctx, host, maxActiveSubagents) {
90
90
  this.ctx = ctx;
91
91
  this.host = host;
92
- this.activations = new ContinuableActivationRegistry(ctx, (provider, childId, parent) => host.observeActivation(provider, childId, parent));
92
+ this.activations = new ContinuableActivationRegistry(ctx, (provider, childId, parent) => host.observeActivation(provider, childId, parent), maxActiveSubagents);
93
93
  }
94
94
  /**
95
95
  * Start one continuable background child and resolve at initial inbox acceptance.
@@ -100,6 +100,7 @@ export function rejectPrompt(error, childSessionId, signal) {
100
100
  throw new RemoteError('subagent/unauthorized', 'subagent does not belong to this parent', { childSessionId }, { cause: error });
101
101
  case 'DRAINING':
102
102
  case 'ACTIVATION_CLOSING':
103
+ case 'ACTIVATION_LIMIT_REACHED':
103
104
  case 'CONTINUATION_UNAVAILABLE':
104
105
  case 'PERSISTENCE_UNAVAILABLE':
105
106
  throw new RemoteError('subagent/delivery-unavailable', 'subagent follow-up is temporarily unavailable', { childSessionId }, { cause: error });
@@ -29,6 +29,7 @@
29
29
  * @module @deepseek-ai/dsh-subagent
30
30
  */
31
31
  import { Context } from '@deepseek-ai/cordis';
32
+ import z from '@deepseek-ai/schemastery';
32
33
  import type { Scoped } from '@deepseek-ai/dsh-scope';
33
34
  import type { ContentBlock, MessageId } from '@deepseek-ai/dsh-llm';
34
35
  import type { Agent } from '@deepseek-ai/dsh-agent';
@@ -94,8 +95,17 @@ declare module '@deepseek-ai/cordis' {
94
95
  'subagent/end'(this: Scoped<SubagentRuntime>, info: SubagentRunEndInfo): void;
95
96
  }
96
97
  }
98
+ /** Host configuration for continuable subagent capacity. */
99
+ export interface Config {
100
+ /** Maximum live children sharing uninterrupted continuable parent links; defaults to 8. */
101
+ maxActiveSubagents?: number;
102
+ /** Default delegation depth for tools without an explicit limit; defaults to 1. */
103
+ maxDepth?: number;
104
+ }
97
105
  /** Named provider registry with one-shot runs, durable discovery, and continuable-child operations. */
98
106
  export declare class SubagentRuntime extends TypertRemoteService {
107
+ static Config: z<Config>;
108
+ private settingsSource;
99
109
  private providers;
100
110
  private continuations;
101
111
  /**
@@ -104,7 +114,13 @@ export declare class SubagentRuntime extends TypertRemoteService {
104
114
  * composes into the carrier.
105
115
  */
106
116
  private readonly emitLifecycle;
107
- constructor(ctx: Context);
117
+ constructor(ctx: Context, config: Config);
118
+ /**
119
+ * Resolve a delegation tool's depth policy against the current user setting.
120
+ * @param configured - Explicit tool limit, or provider-managed for external delegation.
121
+ * @returns The numeric limit, or undefined when the provider owns depth enforcement.
122
+ */
123
+ resolveMaxDepth(configured?: number | 'provider-managed'): number | undefined;
108
124
  /**
109
125
  * Establish one durable continuable child and deliver its initial prompt.
110
126
  * Resolves when the child's inbox accepts that prompt, without waiting for the
@@ -132,12 +148,12 @@ export declare class SubagentRuntime extends TypertRemoteService {
132
148
  sendMessage(sender: Agent, targetId: SessionId, content: ContentBlock[], options: SubagentSendMessageOptions): Promise<MessageId>;
133
149
  /**
134
150
  * Deliver one host-protocol message to a direct continuable child.
135
- * Symbol-keyed so host adapters can preserve their own provenance without
151
+ * Symbol-keyed so host adapters can preserve their own source descriptors without
136
152
  * widening the public Service Definition or impersonating an Agent sender.
137
153
  * @param parent - exact live direct parent authorizing delivery.
138
154
  * @param childId - durable direct-child session id.
139
155
  * @param content - host-authored content to deliver.
140
- * @param source - durable host-protocol provenance.
156
+ * @param source - durable host-protocol source descriptor.
141
157
  * @param signal - caller cancellation before inbox acceptance.
142
158
  * @param delivery - Queue as a distinct turn or Steer at the nearest step.
143
159
  * @returns the accepted message's inbox id.
@@ -238,6 +254,7 @@ export declare class SubagentRuntime extends TypertRemoteService {
238
254
  * nearest step and retains the Agent loop's best-effort fallback semantics.
239
255
  * Image parts are admitted and persisted through the attachment store
240
256
  * before delivery, and the child's model must accept image input.
257
+ * Cold resume at capacity rejects with `subagent/delivery-unavailable`.
241
258
  * @param request - durable address, delivery, minted identity, content, and optional browser zone.
242
259
  * @param signal - carrier cancellation, owning the call until inbox acceptance.
243
260
  * @returns the accepted message's inbox identity.
@@ -62,6 +62,7 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
62
62
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
63
63
  done = true;
64
64
  };
65
+ import z from '@deepseek-ai/schemastery';
65
66
  import { scopeTarget } from '@deepseek-ai/dsh-scope';
66
67
  import { assertObjectJsonSchema } from '@deepseek-ai/dsh-tools';
67
68
  import { canonicalClientTimeZone } from '@deepseek-ai/dsh-util-time';
@@ -102,7 +103,12 @@ let SubagentRuntime = (() => {
102
103
  __esDecorate(this, null, _interruptByParent_decorators, { kind: "method", name: "interruptByParent", static: false, private: false, access: { has: obj => "interruptByParent" in obj, get: obj => obj.interruptByParent }, metadata: _metadata }, null, _instanceExtraInitializers);
103
104
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
104
105
  }
105
- providers = (__runInitializers(this, _instanceExtraInitializers), new Map());
106
+ static Config = z.object({
107
+ maxDepth: z.number().step(1).min(0).max(Number.MAX_SAFE_INTEGER).default(1),
108
+ maxActiveSubagents: z.number().step(1).min(1).max(Number.MAX_SAFE_INTEGER).default(8),
109
+ });
110
+ settingsSource = __runInitializers(this, _instanceExtraInitializers);
111
+ providers = new Map();
106
112
  continuations;
107
113
  /**
108
114
  * The contained lifecycle-edge publisher. Built here because scoped dispatch
@@ -110,14 +116,23 @@ let SubagentRuntime = (() => {
110
116
  * composes into the carrier.
111
117
  */
112
118
  emitLifecycle;
113
- constructor(ctx) {
119
+ constructor(ctx, config) {
114
120
  super(ctx, 'subagents');
121
+ assertSubagentMaxDepth(config.maxDepth);
122
+ this.settingsSource = () => config;
123
+ ctx.inject(['settings'], (settingsCtx) => {
124
+ settingsCtx.settings.installSection(ctx, 'subagent', SubagentRuntime.Config, config, {
125
+ validate: (value) => { assertSubagentMaxDepth(value.maxDepth); },
126
+ setSource: (source) => { this.settingsSource = source; },
127
+ onChange: () => { },
128
+ });
129
+ });
115
130
  this.emitLifecycle = createLifecycleEmitter(this.ctx, parent => scopeTarget(this, parent));
116
131
  ctx.inject(['agents'], (childCtx) => {
117
132
  const manager = new SubagentContinuationManager(childCtx, {
118
133
  prepareContinuable: (name, request) => this.prepareContinuable(name, request),
119
134
  observeActivation: (provider, childId, parent) => this.observeActivation(provider, childId, parent),
120
- });
135
+ }, () => this.settingsSource().maxActiveSubagents);
121
136
  this.continuations = manager;
122
137
  childCtx.effect(() => () => {
123
138
  /* v8 ignore else -- one injected binding owns the slot until its fiber disposes. */
@@ -131,6 +146,16 @@ let SubagentRuntime = (() => {
131
146
  projectionCtx.sessionProjections.register(subagentIdentityProjectionDefinition);
132
147
  });
133
148
  }
149
+ /**
150
+ * Resolve a delegation tool's depth policy against the current user setting.
151
+ * @param configured - Explicit tool limit, or provider-managed for external delegation.
152
+ * @returns The numeric limit, or undefined when the provider owns depth enforcement.
153
+ */
154
+ resolveMaxDepth(configured) {
155
+ if (configured === 'provider-managed')
156
+ return undefined;
157
+ return configured ?? this.settingsSource().maxDepth;
158
+ }
134
159
  /**
135
160
  * Establish one durable continuable child and deliver its initial prompt.
136
161
  * Resolves when the child's inbox accepts that prompt, without waiting for the
@@ -162,12 +187,12 @@ let SubagentRuntime = (() => {
162
187
  }
163
188
  /**
164
189
  * Deliver one host-protocol message to a direct continuable child.
165
- * Symbol-keyed so host adapters can preserve their own provenance without
190
+ * Symbol-keyed so host adapters can preserve their own source descriptors without
166
191
  * widening the public Service Definition or impersonating an Agent sender.
167
192
  * @param parent - exact live direct parent authorizing delivery.
168
193
  * @param childId - durable direct-child session id.
169
194
  * @param content - host-authored content to deliver.
170
- * @param source - durable host-protocol provenance.
195
+ * @param source - durable host-protocol source descriptor.
171
196
  * @param signal - caller cancellation before inbox acceptance.
172
197
  * @param delivery - Queue as a distinct turn or Steer at the nearest step.
173
198
  * @returns the accepted message's inbox id.
@@ -297,6 +322,7 @@ let SubagentRuntime = (() => {
297
322
  * nearest step and retains the Agent loop's best-effort fallback semantics.
298
323
  * Image parts are admitted and persisted through the attachment store
299
324
  * before delivery, and the child's model must accept image input.
325
+ * Cold resume at capacity rejects with `subagent/delivery-unavailable`.
300
326
  * @param request - durable address, delivery, minted identity, content, and optional browser zone.
301
327
  * @param signal - carrier cancellation, owning the call until inbox acceptance.
302
328
  * @returns the accepted message's inbox identity.
@@ -39,7 +39,7 @@ export interface HostPromptDeliverer {
39
39
  * @param parent - exact live direct parent authorizing delivery.
40
40
  * @param childId - durable direct-child session id.
41
41
  * @param content - host-authored content to deliver.
42
- * @param source - durable host-protocol provenance.
42
+ * @param source - durable host-protocol source descriptor.
43
43
  * @param signal - caller cancellation before inbox acceptance.
44
44
  * @returns the accepted message's inbox id.
45
45
  */
@@ -50,7 +50,7 @@ export declare function queueHostSubagentPrompt(runtime: SubagentRuntime, parent
50
50
  * @param parent - exact live direct parent authorizing delivery.
51
51
  * @param childId - durable direct-child session id.
52
52
  * @param content - host-authored content to deliver.
53
- * @param source - durable host-protocol provenance.
53
+ * @param source - durable host-protocol source descriptor.
54
54
  * @param signal - caller cancellation before inbox acceptance.
55
55
  * @returns the accepted message's inbox id.
56
56
  */
@@ -35,7 +35,7 @@ export const deliverSubagentPrompt = Symbol.for('dsh.subagent.deliverPrompt');
35
35
  * @param parent - exact live direct parent authorizing delivery.
36
36
  * @param childId - durable direct-child session id.
37
37
  * @param content - host-authored content to deliver.
38
- * @param source - durable host-protocol provenance.
38
+ * @param source - durable host-protocol source descriptor.
39
39
  * @param signal - caller cancellation before inbox acceptance.
40
40
  * @returns the accepted message's inbox id.
41
41
  */
@@ -48,7 +48,7 @@ export function queueHostSubagentPrompt(runtime, parent, childId, content, sourc
48
48
  * @param parent - exact live direct parent authorizing delivery.
49
49
  * @param childId - durable direct-child session id.
50
50
  * @param content - host-authored content to deliver.
51
- * @param source - durable host-protocol provenance.
51
+ * @param source - durable host-protocol source descriptor.
52
52
  * @param signal - caller cancellation before inbox acceptance.
53
53
  * @returns the accepted message's inbox id.
54
54
  */
@@ -106,6 +106,7 @@ export function createActivationObserver(emit, provider, childId, parent) {
106
106
  emit('subagent/start', identity, parent);
107
107
  },
108
108
  capture: (child) => {
109
+ // oxlint-disable-next-line typescript/no-deprecated -- Existing Session history read; migration deferred.
109
110
  const own = child.session.snapshotEvents(boundary);
110
111
  const output = finalAssistantOutput(own);
111
112
  captured = {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-subagent",
3
3
  "description": "Abstract subagent seam (ctx.subagents): named-provider registry for delegating to child agents",
4
- "version": "0.1.5-rc.2",
4
+ "version": "0.1.6-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -54,36 +54,42 @@
54
54
  "license": "MIT",
55
55
  "dependencies": {
56
56
  "zod": "^4.4.3",
57
- "@deepseek-ai/dsh-chunked-list": "^0.1.5-rc.2",
58
- "@deepseek-ai/dsh-util-values": "^0.1.5-rc.2",
59
- "@deepseek-ai/dsh-brand": "^0.1.5-rc.2"
57
+ "@deepseek-ai/dsh-brand": "^0.1.6-alpha.2",
58
+ "@deepseek-ai/dsh-chunked-list": "^0.1.6-alpha.2",
59
+ "@deepseek-ai/dsh-util-values": "^0.1.6-alpha.2",
60
+ "@deepseek-ai/schemastery": "^3.18.2"
60
61
  },
61
62
  "peerDependencies": {
62
63
  "@deepseek-ai/cordis": "^4.0.2",
63
- "@deepseek-ai/dsh-agent": "^0.1.5-rc.2",
64
- "@deepseek-ai/dsh-agent-presets": "^0.1.5-rc.2",
65
- "@deepseek-ai/dsh-attachment": "^0.1.5-rc.2",
66
- "@deepseek-ai/dsh-invariants": "^0.1.5-rc.2",
67
- "@deepseek-ai/dsh-jobs": "^0.1.5-rc.2",
68
- "@deepseek-ai/dsh-llm": "^0.1.5-rc.2",
69
- "@deepseek-ai/dsh-sandbox": "^0.1.5-rc.2",
70
- "@deepseek-ai/dsh-sandbox-policy": "^0.1.5-rc.2",
71
- "@deepseek-ai/dsh-scope": "^0.1.5-rc.2",
72
- "@deepseek-ai/dsh-session": "^0.1.5-rc.2",
73
- "@deepseek-ai/dsh-session-persistence": "^0.1.5-rc.2",
74
- "@deepseek-ai/dsh-session-projection": "^0.1.5-rc.2",
75
- "@deepseek-ai/dsh-session-query": "^0.1.5-rc.2",
76
- "@deepseek-ai/dsh-system-prompt": "^0.1.5-rc.2",
77
- "@deepseek-ai/dsh-tools": "^0.1.5-rc.2",
78
- "@deepseek-ai/dsh-typert-protocol": "^0.1.5-rc.2",
79
- "@deepseek-ai/dsh-user-approval": "^0.1.5-rc.2",
80
- "@deepseek-ai/dsh-util-time": "^0.1.5-rc.2",
81
- "@deepseek-ai/dsh-session-projection-cache": "^0.1.5-rc.2"
64
+ "@deepseek-ai/dsh-agent": "^0.1.6-alpha.2",
65
+ "@deepseek-ai/dsh-agent-presets": "^0.1.6-alpha.2",
66
+ "@deepseek-ai/dsh-attachment": "^0.1.6-alpha.2",
67
+ "@deepseek-ai/dsh-invariants": "^0.1.6-alpha.2",
68
+ "@deepseek-ai/dsh-jobs": "^0.1.6-alpha.2",
69
+ "@deepseek-ai/dsh-llm": "^0.1.6-alpha.2",
70
+ "@deepseek-ai/dsh-sandbox": "^0.1.6-alpha.2",
71
+ "@deepseek-ai/dsh-sandbox-policy": "^0.1.6-alpha.2",
72
+ "@deepseek-ai/dsh-session": "^0.1.6-alpha.2",
73
+ "@deepseek-ai/dsh-session-persistence": "^0.1.6-alpha.2",
74
+ "@deepseek-ai/dsh-session-projection": "^0.1.6-alpha.2",
75
+ "@deepseek-ai/dsh-scope": "^0.1.6-alpha.2",
76
+ "@deepseek-ai/dsh-session-projection-cache": "^0.1.6-alpha.2",
77
+ "@deepseek-ai/dsh-system-prompt": "^0.1.6-alpha.2",
78
+ "@deepseek-ai/dsh-tools": "^0.1.6-alpha.2",
79
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.2",
80
+ "@deepseek-ai/dsh-user-approval": "^0.1.6-alpha.2",
81
+ "@deepseek-ai/dsh-util-time": "^0.1.6-alpha.2",
82
+ "@deepseek-ai/dsh-permission-presets": "^0.1.6-alpha.2",
83
+ "@deepseek-ai/dsh-settings": "^0.1.6-alpha.2",
84
+ "@deepseek-ai/dsh-session-query": "^0.1.6-alpha.2"
82
85
  },
83
86
  "peerDependenciesMeta": {
84
87
  "@deepseek-ai/dsh-agent-presets": {
85
88
  "optional": true
86
89
  },
90
+ "@deepseek-ai/dsh-permission-presets": {
91
+ "optional": true
92
+ },
87
93
  "@deepseek-ai/dsh-sandbox": {
88
94
  "optional": true
89
95
  },
@@ -107,32 +113,37 @@
107
113
  },
108
114
  "@deepseek-ai/dsh-user-approval": {
109
115
  "optional": true
116
+ },
117
+ "@deepseek-ai/dsh-settings": {
118
+ "optional": true
110
119
  }
111
120
  },
112
121
  "devDependencies": {
113
122
  "@deepseek-ai/cordis": "^4.0.2",
114
- "@deepseek-ai/dsh-agent": "^0.1.5-rc.2",
115
- "@deepseek-ai/dsh-agent-presets": "^0.1.5-rc.2",
116
- "@deepseek-ai/dsh-attachment": "^0.1.5-rc.2",
117
- "@deepseek-ai/dsh-invariants": "^0.1.5-rc.2",
118
- "@deepseek-ai/dsh-jobs": "^0.1.5-rc.2",
119
- "@deepseek-ai/dsh-sandbox": "^0.1.5-rc.2",
120
- "@deepseek-ai/dsh-sandbox-policy": "^0.1.5-rc.2",
121
- "@deepseek-ai/dsh-llm": "^0.1.5-rc.2",
122
- "@deepseek-ai/dsh-schedule": "^0.1.5-rc.2",
123
- "@deepseek-ai/dsh-scope": "^0.1.5-rc.2",
124
- "@deepseek-ai/dsh-session": "^0.1.5-rc.2",
125
- "@deepseek-ai/dsh-session-persistence": "^0.1.5-rc.2",
126
- "@deepseek-ai/dsh-session-projection": "^0.1.5-rc.2",
127
- "@deepseek-ai/dsh-session-projection-cache": "^0.1.5-rc.2",
128
- "@deepseek-ai/dsh-storage-domain": "^0.1.5-rc.2",
129
- "@deepseek-ai/dsh-storage-json": "^0.1.5-rc.2",
130
- "@deepseek-ai/dsh-system-prompt": "^0.1.5-rc.2",
131
- "@deepseek-ai/dsh-session-query": "^0.1.5-rc.2",
132
- "@deepseek-ai/dsh-tools": "^0.1.5-rc.2",
133
- "@deepseek-ai/dsh-storage": "^0.1.5-rc.2",
134
- "@deepseek-ai/dsh-typert-protocol": "^0.1.5-rc.2",
135
- "@deepseek-ai/dsh-util-time": "^0.1.5-rc.2",
136
- "@deepseek-ai/dsh-user-approval": "^0.1.5-rc.2"
123
+ "@deepseek-ai/dsh-agent": "^0.1.6-alpha.2",
124
+ "@deepseek-ai/dsh-attachment": "^0.1.6-alpha.2",
125
+ "@deepseek-ai/dsh-invariants": "^0.1.6-alpha.2",
126
+ "@deepseek-ai/dsh-jobs": "^0.1.6-alpha.2",
127
+ "@deepseek-ai/dsh-llm": "^0.1.6-alpha.2",
128
+ "@deepseek-ai/dsh-sandbox": "^0.1.6-alpha.2",
129
+ "@deepseek-ai/dsh-sandbox-policy": "^0.1.6-alpha.2",
130
+ "@deepseek-ai/dsh-agent-presets": "^0.1.6-alpha.2",
131
+ "@deepseek-ai/dsh-scope": "^0.1.6-alpha.2",
132
+ "@deepseek-ai/dsh-session-persistence": "^0.1.6-alpha.2",
133
+ "@deepseek-ai/dsh-session-projection": "^0.1.6-alpha.2",
134
+ "@deepseek-ai/dsh-session-projection-cache": "^0.1.6-alpha.2",
135
+ "@deepseek-ai/dsh-session-query": "^0.1.6-alpha.2",
136
+ "@deepseek-ai/dsh-storage": "^0.1.6-alpha.2",
137
+ "@deepseek-ai/dsh-storage-domain": "^0.1.6-alpha.2",
138
+ "@deepseek-ai/dsh-storage-json": "^0.1.6-alpha.2",
139
+ "@deepseek-ai/dsh-system-prompt": "^0.1.6-alpha.2",
140
+ "@deepseek-ai/dsh-tools": "^0.1.6-alpha.2",
141
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.2",
142
+ "@deepseek-ai/dsh-user-approval": "^0.1.6-alpha.2",
143
+ "@deepseek-ai/dsh-util-time": "^0.1.6-alpha.2",
144
+ "@deepseek-ai/dsh-permission-presets": "^0.1.6-alpha.2",
145
+ "@deepseek-ai/dsh-settings": "^0.1.6-alpha.2",
146
+ "@deepseek-ai/dsh-session": "^0.1.6-alpha.2",
147
+ "@deepseek-ai/dsh-schedule": "^0.1.6-alpha.2"
137
148
  }
138
149
  }