@deepseek-ai/dsh-api-session-controller 0.1.6-alpha.2 → 0.1.7-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.
Files changed (38) hide show
  1. package/README.i18n.yaml +2 -2
  2. package/README.md +34 -9
  3. package/README.zh.md +34 -9
  4. package/lib/client.js +774 -641
  5. package/lib/index.js +318 -143
  6. package/lib/typert.host.js +384 -186
  7. package/lib/typert.remote-client.d.ts +10 -5
  8. package/lib/typert.remote-client.js +225 -125
  9. package/lib/types/archived-session-gate.d.ts +30 -0
  10. package/lib/types/archived-session-gate.js +52 -0
  11. package/lib/types/client/contract/session.d.ts +11 -4
  12. package/lib/types/client/contract/sessions.d.ts +11 -16
  13. package/lib/types/client/contract/snapshot.d.ts +1 -1
  14. package/lib/types/client/index.d.ts +1 -1
  15. package/lib/types/client/sessions/lineage.d.ts +4 -1
  16. package/lib/types/client/sessions/lineage.js +2 -1
  17. package/lib/types/client/sessions/manager.d.ts +66 -59
  18. package/lib/types/client/sessions/manager.js +249 -277
  19. package/lib/types/client/sessions/projection-store.d.ts +38 -13
  20. package/lib/types/client/sessions/projection-store.js +54 -13
  21. package/lib/types/client/sessions/remotes.d.ts +1 -2
  22. package/lib/types/client/sessions/service.d.ts +23 -35
  23. package/lib/types/client/sessions/service.js +35 -47
  24. package/lib/types/client/sessions/session.d.ts +23 -19
  25. package/lib/types/client/sessions/session.js +158 -59
  26. package/lib/types/client/transport.js +5 -2
  27. package/lib/types/commands.d.ts +4 -2
  28. package/lib/types/commands.js +72 -36
  29. package/lib/types/control.d.ts +2 -4
  30. package/lib/types/control.js +2 -44
  31. package/lib/types/history.js +25 -10
  32. package/lib/types/index.d.ts +32 -5
  33. package/lib/types/index.js +117 -13
  34. package/lib/types/list.js +24 -15
  35. package/lib/types/skill-catalog.js +60 -50
  36. package/lib/types/types.d.ts +45 -25
  37. package/lib/types/types.js +0 -1
  38. package/package.json +71 -76
@@ -114,72 +114,82 @@ let SessionSkillCatalog = (() => {
114
114
  * @throws RemoteError when the Session cannot be inspected or no registry can serve it.
115
115
  */
116
116
  async list(request, signal) {
117
- void signal;
118
- const { sessionId } = request;
119
- let cwd;
120
- let agentPreset;
117
+ const env_1 = { stack: [], error: void 0, hasError: false };
121
118
  try {
122
- const env_1 = { stack: [], error: void 0, hasError: false };
119
+ void signal;
120
+ const { sessionId } = request;
121
+ let cwd;
122
+ let agentPreset;
123
123
  try {
124
- const observation = __addDisposableResource(env_1, await this.ctx.sessionQuery.observeSession(sessionId), false);
125
- if (observation.projections === undefined) {
126
- throw new Error('skill catalog requires a projected Session observation');
124
+ const env_2 = { stack: [], error: void 0, hasError: false };
125
+ try {
126
+ const observation = __addDisposableResource(env_2, await this.ctx.sessionQuery.observeSession(sessionId), false);
127
+ if (observation.projections === undefined) {
128
+ throw new Error('skill catalog requires a projected Session observation');
129
+ }
130
+ cwd = observation.header.cwd;
131
+ agentPreset = observation.projections.values.agentPreset ?? undefined;
132
+ }
133
+ catch (e_1) {
134
+ env_2.error = e_1;
135
+ env_2.hasError = true;
136
+ }
137
+ finally {
138
+ __disposeResources(env_2);
127
139
  }
128
- cwd = observation.header.cwd;
129
- agentPreset = observation.projections.values.agentPreset ?? undefined;
130
140
  }
131
- catch (e_1) {
132
- env_1.error = e_1;
133
- env_1.hasError = true;
141
+ catch (error) {
142
+ if (error instanceof SessionQueryError
143
+ && error.code === 'SESSION_QUERY_SESSION_NOT_FOUND') {
144
+ throw new RemoteError('session/not-found', `session "${sessionId}" not found`, { sessionId });
145
+ }
146
+ throw new RemoteError('gateway/internal', `session "${sessionId}" could not be inspected: ${String(error)}`, {});
134
147
  }
135
- finally {
136
- __disposeResources(env_1);
148
+ if (cwd === undefined) {
149
+ throw new RemoteError('gateway/internal', `session "${sessionId}" has no project cwd`, {});
137
150
  }
138
- }
139
- catch (error) {
140
- if (error instanceof SessionQueryError
141
- && error.code === 'SESSION_QUERY_SESSION_NOT_FOUND') {
142
- throw new RemoteError('session/not-found', `session "${sessionId}" not found`, { sessionId });
151
+ const live = this.ctx.agents.get(sessionId);
152
+ const presets = this.ctx.get('agentPresets');
153
+ const scoped = live === undefined ? undefined : presets?.serviceFor(live, 'skills');
154
+ const skillRegistry = scoped ?? this.ctx.get('skills');
155
+ if (skillRegistry === undefined) {
156
+ throw new RemoteError('gateway/internal', 'skill registry is absent: neither this session\'s agent preset nor the host composition mounts @deepseek-ai/dsh-skill', {});
157
+ }
158
+ const lease = __addDisposableResource(env_1, live === undefined ? await this.scopeFor(agentPreset) : undefined, true);
159
+ const scope = live ?? lease?.key;
160
+ try {
161
+ const skills = (await skillRegistry.list({ cwd, scope })).filter(isUserInvocable);
162
+ return {
163
+ skills: skills.map(skill => ({
164
+ name: skill.name,
165
+ ...skill.path === undefined ? {} : { path: skill.path },
166
+ description: skill.description,
167
+ ...skill.whenToUse === undefined ? {} : { whenToUse: skill.whenToUse },
168
+ modelInvocable: skill.invocation.modelInvocable,
169
+ })),
170
+ };
171
+ }
172
+ catch (error) {
173
+ throw new RemoteError('gateway/internal', `skill listing failed: ${String(error)}`, {});
143
174
  }
144
- throw new RemoteError('gateway/internal', `session "${sessionId}" could not be inspected: ${String(error)}`, {});
145
- }
146
- if (cwd === undefined) {
147
- throw new RemoteError('gateway/internal', `session "${sessionId}" has no project cwd`, {});
148
- }
149
- const live = this.ctx.agents.get(sessionId);
150
- const presets = this.ctx.get('agentPresets');
151
- const scoped = live === undefined ? undefined : presets?.serviceFor(live, 'skills');
152
- const skillRegistry = scoped ?? this.ctx.get('skills');
153
- if (skillRegistry === undefined) {
154
- throw new RemoteError('gateway/internal', 'skill registry is absent: neither this session\'s agent preset nor the host composition mounts @deepseek-ai/dsh-skill', {});
155
175
  }
156
- const scope = await this.scopeFor(sessionId, agentPreset);
157
- try {
158
- const skills = (await skillRegistry.list({ cwd, scope })).filter(isUserInvocable);
159
- return {
160
- skills: skills.map(skill => ({
161
- name: skill.name,
162
- ...skill.path === undefined ? {} : { path: skill.path },
163
- description: skill.description,
164
- ...skill.whenToUse === undefined ? {} : { whenToUse: skill.whenToUse },
165
- modelInvocable: skill.invocation.modelInvocable,
166
- })),
167
- };
176
+ catch (e_2) {
177
+ env_1.error = e_2;
178
+ env_1.hasError = true;
168
179
  }
169
- catch (error) {
170
- throw new RemoteError('gateway/internal', `skill listing failed: ${String(error)}`, {});
180
+ finally {
181
+ const result_1 = __disposeResources(env_1);
182
+ if (result_1)
183
+ await result_1;
171
184
  }
172
185
  }
173
186
  /** Resolve a live or standing preset scope without creating an Agent. */
174
- async scopeFor(sessionId, agentPreset) {
175
- const live = this.ctx.agents.get(sessionId);
176
- if (live !== undefined)
177
- return live;
187
+ async scopeFor(agentPreset) {
178
188
  const presets = this.ctx.get('agentPresets');
179
189
  if (presets === undefined)
180
190
  return undefined;
181
191
  try {
182
- return await presets.standingKeyFor(agentPreset);
192
+ return await presets.acquireScope(agentPreset);
183
193
  }
184
194
  catch {
185
195
  // An unknown or unusable recorded preset falls back to the global registry.
@@ -1,11 +1,11 @@
1
1
  /** Browser-safe request, result, and lifecycle vocabulary for the Session Remote service. */
2
+ import type { NativeFileApplication } from '@deepseek-ai/dsh-native-command/types';
2
3
  import type { AttachmentIdType, ImageAttachmentLimits, ImageAttachmentRef, ImageMediaType } from '@deepseek-ai/dsh-attachment';
3
4
  import type { Branded } from '@deepseek-ai/dsh-brand';
4
5
  import type { LlmAttemptId, MessageId } from '@deepseek-ai/dsh-llm/brand';
5
- import type { ContentBlock } from '@deepseek-ai/dsh-llm';
6
+ import type { TextBlock } from '@deepseek-ai/dsh-llm';
6
7
  import type { SessionId, SessionSeqCursor } from '@deepseek-ai/dsh-session/types';
7
8
  import type { SessionProjectionMap } from '@deepseek-ai/dsh-session-projection/types';
8
- import type { JobId } from '@deepseek-ai/dsh-jobs/brand';
9
9
  import type { JsonValue } from '@deepseek-ai/dsh-util-values';
10
10
  import type { WorkspaceId } from '@deepseek-ai/dsh-workspace/types';
11
11
  declare module '@deepseek-ai/dsh-session-projection/types' {
@@ -42,10 +42,24 @@ export interface SessionListMetadata {
42
42
  /** Latest human-authored prompt time in the folded prefix. */
43
43
  readonly lastPromptAt: number | null;
44
44
  }
45
- /** Every available cached wire value used as partial, possibly stale Session-list hints. */
45
+ /**
46
+ * Every available wire value a Session-list row carries as partial, possibly
47
+ * stale hints. `kind` and `asOfSeq` are independent facts: `kind` says which
48
+ * sequence space `asOfSeq` belongs to, and therefore how a client may merge
49
+ * the block; `asOfSeq` is the producer's watermark in that space.
50
+ */
46
51
  export interface SessionProjectionHints {
52
+ /**
53
+ * `sequenced`: the Host's live registry produced the block for an attached
54
+ * Session, so `asOfSeq` is comparable with baselines and frames of the same
55
+ * connection. `cached`: a header-only listing viewed the block from the
56
+ * persisted projection cache, so `asOfSeq` is the stored record's own
57
+ * watermark and must not be compared with the connected Session's values.
58
+ */
59
+ readonly kind: 'cached' | 'sequenced';
60
+ /** Watermark of the block in the sequence space named by `kind`. */
47
61
  readonly asOfSeq: number;
48
- /** Provider-validated values present in the cache; omitted keys remain unknown. */
62
+ /** Provider-validated values present in the block; omitted keys remain unknown. */
49
63
  readonly values: SessionProjectionValues;
50
64
  }
51
65
  /** Complete projection values at an exact Session event cursor. */
@@ -135,7 +149,7 @@ export interface ModelCatalog {
135
149
  export type QueueAction = {
136
150
  readonly kind: 'edit';
137
151
  /** Non-empty text-only replacement content. */
138
- readonly content: readonly ContentBlock[];
152
+ readonly content: readonly TextBlock[];
139
153
  } | {
140
154
  readonly kind: 'remove';
141
155
  } | {
@@ -143,6 +157,8 @@ export type QueueAction = {
143
157
  };
144
158
  /** One Session list entry. */
145
159
  export interface SessionSummary {
160
+ /** Whether this Session currently owns a live Agent. */
161
+ readonly agentAvailable: boolean;
146
162
  readonly sessionId: SessionId;
147
163
  readonly updatedAt: number;
148
164
  readonly running: boolean;
@@ -172,6 +188,7 @@ declare module '@deepseek-ai/dsh-typert-protocol' {
172
188
  readonly requestedCwd: string;
173
189
  readonly existingCwd?: string;
174
190
  };
191
+ 'session/projections-unavailable': Record<string, never>;
175
192
  'session/writer-held': {
176
193
  readonly sessionId: SessionId;
177
194
  };
@@ -287,6 +304,7 @@ export interface SessionRenameValue {
287
304
  /** Session fork request. */
288
305
  export interface SessionForkRequest {
289
306
  readonly sessionId: SessionId;
307
+ /** Exact inclusive source event seq; omission selects the latest completed-turn prefix. */
290
308
  readonly atSeq?: number;
291
309
  }
292
310
  /** Identity of a newly forked Session. */
@@ -339,6 +357,8 @@ export interface SessionCancelValue {
339
357
  export interface SessionOpenWorkspacePathRequest {
340
358
  /** File-manager navigation when requested; omission uses the default application. */
341
359
  readonly action?: 'reveal';
360
+ /** Registered application identifier; ignored for reveal. Omission preserves the operating system default. */
361
+ readonly application?: string;
342
362
  /** Path after best-effort Session workspace resolution, in Host filesystem syntax. */
343
363
  readonly path: string;
344
364
  }
@@ -366,8 +386,14 @@ export type SessionAddress = {
366
386
  readonly kind: 'subagent';
367
387
  readonly parentSessionId: SessionId;
368
388
  readonly childSessionId: SessionId;
369
- readonly mode: 'one-shot' | 'continuable';
389
+ readonly mode: 'one-shot' | 'continuable' | 'unknown';
370
390
  };
391
+ /** One non-activating Session projection read. */
392
+ export interface SessionProjectionsRequest {
393
+ readonly sessionId: SessionId;
394
+ }
395
+ /** Complete Session projection baseline; null when the Session does not exist. */
396
+ export type SessionProjectionsValue = SessionProjectionBaseline | null;
371
397
  /** One raw Session event in the Remote journal. */
372
398
  export interface SessionEventEntry {
373
399
  readonly type: 'event';
@@ -417,11 +443,17 @@ export interface SessionPageRequest {
417
443
  readonly throughSeq: number;
418
444
  readonly beforeSeq?: number;
419
445
  readonly maxMessages?: number;
446
+ /** Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins. */
447
+ readonly turnWindow?: {
448
+ /** Minimum append-origin user/assistant messages; must not exceed maxMessages. */
449
+ readonly minMessages: number;
450
+ /** Minimum Turn starts crossed, including the partial Turn at beforeSeq. */
451
+ readonly minTurns: number;
452
+ };
420
453
  }
421
454
  /** One live event request for a durable Session address. */
422
- export interface SessionFollowRequest {
455
+ export interface SessionFollowRequest extends Pick<SessionPageRequest, 'maxMessages' | 'turnWindow'> {
423
456
  readonly address: SessionAddress;
424
- readonly maxMessages?: number;
425
457
  /** Include process-local assistant presentation frames for the Web client. */
426
458
  readonly assistantStream?: true;
427
459
  }
@@ -489,19 +521,8 @@ export type SessionFollowFrame = {
489
521
  readonly type: 'assistant-stream';
490
522
  readonly frame: SessionAssistantStreamFrame;
491
523
  };
492
- /** Browser-safe background-job row. */
493
- export interface SessionJob {
494
- readonly id: JobId;
495
- readonly kind: string;
496
- readonly label: string;
497
- readonly status: 'running' | 'stopping' | 'completed' | 'killed' | 'failed';
498
- readonly detail?: string;
499
- readonly startedAt: number;
500
- readonly finishedAt?: number;
501
- }
502
524
  /** Complete live control baseline emitted once per control stream generation. */
503
525
  export interface SessionControlBaseline {
504
- readonly jobs: Readonly<Record<SessionId, readonly SessionJob[]>>;
505
526
  readonly projections: Readonly<Record<SessionId, SessionProjectionBaseline>>;
506
527
  }
507
528
  /** One finished projection value and its durable watermark. */
@@ -515,19 +536,16 @@ export interface SessionProjectionUpdate {
515
536
  export type SessionControlFrame = {
516
537
  readonly type: 'baseline';
517
538
  readonly value: SessionControlBaseline;
518
- } | {
519
- readonly type: 'jobs';
520
- readonly sessionId: SessionId;
521
- readonly jobs: readonly SessionJob[];
522
539
  } | ({
523
540
  readonly type: 'projection';
524
541
  } & SessionProjectionUpdate);
525
542
  declare module '@deepseek-ai/cordis' {
526
543
  interface Events {
527
544
  /**
528
- * A Session became visible to Session list consumers.
545
+ * A Session became visible or its Agent was created or disposed.
546
+ * Consumers upsert the summary and replace its current running and availability state.
529
547
  * @mode emit
530
- * @param summary - initial list row for the Session.
548
+ * @param summary - current list row for the Session.
531
549
  */
532
550
  'api-session/added'(summary: SessionSummary): void;
533
551
  /**
@@ -561,4 +579,6 @@ declare module '@deepseek-ai/cordis' {
561
579
  }
562
580
  /** JSON-compatible projection value accepted by list consumers. */
563
581
  export type SessionProjectionValue = JsonValue;
582
+ /** Application metadata returned by the serving desktop for one file. */
583
+ export type SessionWorkspacePathApplication = NativeFileApplication;
564
584
  //# sourceMappingURL=types.d.ts.map
@@ -1,4 +1,3 @@
1
- /** Browser-safe request, result, and lifecycle vocabulary for the Session Remote service. */
2
1
  /** Maximum number of Sessions returned by one search. */
3
2
  export const SESSION_SEARCH_RESULT_LIMIT = 20;
4
3
  /** Maximum search snippet length in Unicode code points. */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-api-session-controller",
3
3
  "description": "Session Remote commands, cold reads, and live control transport",
4
- "version": "0.1.6-alpha.2",
4
+ "version": "0.1.7-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -67,45 +67,41 @@
67
67
  "dependencies": {
68
68
  "mime-types": "^3.0.2",
69
69
  "zod": "^4.4.3",
70
- "@deepseek-ai/dsh-brand": "^0.1.6-alpha.2",
71
- "@deepseek-ai/dsh-deque": "^0.1.6-alpha.2",
72
- "@deepseek-ai/schemastery": "^3.18.2"
70
+ "@deepseek-ai/schemastery": "~3.18.4",
71
+ "@deepseek-ai/dsh-brand": "0.1.7-alpha.2",
72
+ "@deepseek-ai/dsh-deque": "0.1.7-alpha.2"
73
73
  },
74
74
  "peerDependencies": {
75
- "@deepseek-ai/cordis": "^4.0.2",
76
- "@deepseek-ai/dsh-agent": "^0.1.6-alpha.2",
77
- "@deepseek-ai/dsh-agent-default-model": "^0.1.6-alpha.2",
78
- "@deepseek-ai/dsh-agent-presets": "^0.1.6-alpha.2",
79
- "@deepseek-ai/dsh-api-gateway": "^0.1.6-alpha.2",
80
- "@deepseek-ai/dsh-attachment": "^0.1.6-alpha.2",
81
- "@deepseek-ai/dsh-client-connection": "^0.1.6-alpha.2",
82
- "@deepseek-ai/dsh-commands": "^0.1.6-alpha.2",
83
- "@deepseek-ai/dsh-client-file-upload": "^0.1.6-alpha.2",
84
- "@deepseek-ai/dsh-file-reference": "^0.1.6-alpha.2",
85
- "@deepseek-ai/dsh-fs": "^0.1.6-alpha.2",
86
- "@deepseek-ai/dsh-jobs": "^0.1.6-alpha.2",
87
- "@deepseek-ai/dsh-llm": "^0.1.6-alpha.2",
88
- "@deepseek-ai/dsh-scope": "^0.1.6-alpha.2",
89
- "@deepseek-ai/dsh-session-projection-cache": "^0.1.6-alpha.2",
90
- "@deepseek-ai/dsh-session-title": "^0.1.6-alpha.2",
91
- "@deepseek-ai/dsh-session-query": "^0.1.6-alpha.2",
92
- "@deepseek-ai/dsh-skill": "^0.1.6-alpha.2",
93
- "@deepseek-ai/dsh-session": "^0.1.6-alpha.2",
94
- "@deepseek-ai/dsh-subagent": "^0.1.6-alpha.2",
95
- "@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.2",
96
- "@deepseek-ai/dsh-typert-registry": "^0.1.6-alpha.2",
97
- "@deepseek-ai/dsh-util-time": "^0.1.6-alpha.2",
98
- "@deepseek-ai/dsh-util-values": "^0.1.6-alpha.2",
99
- "@deepseek-ai/dsh-util-workspace-path": "^0.1.6-alpha.2",
100
- "@deepseek-ai/dsh-native-command": "^0.1.6-alpha.2",
101
- "@deepseek-ai/dsh-workspace": "^0.1.6-alpha.2",
102
- "@deepseek-ai/dsh-session-projection": "^0.1.6-alpha.2",
103
- "@deepseek-ai/dsh-session-persistence": "^0.1.6-alpha.2"
75
+ "@deepseek-ai/dsh-agent": "0.1.7-alpha.2",
76
+ "@deepseek-ai/cordis": "~4.0.4",
77
+ "@deepseek-ai/dsh-agent-default-model": "0.1.7-alpha.2",
78
+ "@deepseek-ai/dsh-agent-preset-registry": "0.1.7-alpha.2",
79
+ "@deepseek-ai/dsh-api-gateway": "0.1.7-alpha.2",
80
+ "@deepseek-ai/dsh-attachment": "0.1.7-alpha.2",
81
+ "@deepseek-ai/dsh-client-connection": "0.1.7-alpha.2",
82
+ "@deepseek-ai/dsh-client-file-upload": "0.1.7-alpha.2",
83
+ "@deepseek-ai/dsh-llm": "0.1.7-alpha.2",
84
+ "@deepseek-ai/dsh-native-command": "0.1.7-alpha.2",
85
+ "@deepseek-ai/dsh-scope": "0.1.7-alpha.2",
86
+ "@deepseek-ai/dsh-session": "0.1.7-alpha.2",
87
+ "@deepseek-ai/dsh-file-reference": "0.1.7-alpha.2",
88
+ "@deepseek-ai/dsh-session-persistence": "0.1.7-alpha.2",
89
+ "@deepseek-ai/dsh-session-projection": "0.1.7-alpha.2",
90
+ "@deepseek-ai/dsh-session-projection-cache": "0.1.7-alpha.2",
91
+ "@deepseek-ai/dsh-session-query": "0.1.7-alpha.2",
92
+ "@deepseek-ai/dsh-session-title": "0.1.7-alpha.2",
93
+ "@deepseek-ai/dsh-fs": "0.1.7-alpha.2",
94
+ "@deepseek-ai/dsh-commands": "0.1.7-alpha.2",
95
+ "@deepseek-ai/dsh-skill": "0.1.7-alpha.2",
96
+ "@deepseek-ai/dsh-subagent": "0.1.7-alpha.2",
97
+ "@deepseek-ai/dsh-typert-protocol": "0.1.7-alpha.2",
98
+ "@deepseek-ai/dsh-typert-registry": "0.1.7-alpha.2",
99
+ "@deepseek-ai/dsh-util-time": "0.1.7-alpha.2",
100
+ "@deepseek-ai/dsh-util-workspace-path": "0.1.7-alpha.2",
101
+ "@deepseek-ai/dsh-workspace": "0.1.7-alpha.2",
102
+ "@deepseek-ai/dsh-util-values": "0.1.7-alpha.2"
104
103
  },
105
104
  "peerDependenciesMeta": {
106
- "@deepseek-ai/dsh-jobs": {
107
- "optional": true
108
- },
109
105
  "@deepseek-ai/dsh-session-persistence": {
110
106
  "optional": true
111
107
  },
@@ -115,46 +111,45 @@
115
111
  },
116
112
  "devDependencies": {
117
113
  "@types/mime-types": "^3.0.1",
118
- "@deepseek-ai/cordis": "^4.0.2",
119
- "@deepseek-ai/dsh-agent": "^0.1.6-alpha.2",
120
- "@deepseek-ai/dsh-agent-default-model": "^0.1.6-alpha.2",
121
- "@deepseek-ai/dsh-agent-presets": "^0.1.6-alpha.2",
122
- "@deepseek-ai/dsh-agent-loop-testkit": "^0.1.6-alpha.2",
123
- "@deepseek-ai/dsh-api-gateway": "^0.1.6-alpha.2",
124
- "@deepseek-ai/dsh-attachment": "^0.1.6-alpha.2",
125
- "@deepseek-ai/dsh-client-connection": "^0.1.6-alpha.2",
126
- "@deepseek-ai/dsh-client-store": "^0.1.6-alpha.2",
127
- "@deepseek-ai/dsh-client-file-upload": "^0.1.6-alpha.2",
128
- "@deepseek-ai/dsh-client-test-runtime": "^0.1.6-alpha.2",
129
- "@deepseek-ai/dsh-commands": "^0.1.6-alpha.2",
130
- "@deepseek-ai/dsh-file-reference": "^0.1.6-alpha.2",
131
- "@deepseek-ai/dsh-fs-local": "^0.1.6-alpha.2",
132
- "@deepseek-ai/dsh-jobs": "^0.1.6-alpha.2",
133
- "@deepseek-ai/dsh-native-command": "^0.1.6-alpha.2",
134
- "@deepseek-ai/dsh-llm": "^0.1.6-alpha.2",
135
- "@deepseek-ai/dsh-permission-presets": "^0.1.6-alpha.2",
136
- "@deepseek-ai/dsh-remote-mock": "^0.1.6-alpha.2",
137
- "@deepseek-ai/dsh-scope": "^0.1.6-alpha.2",
138
- "@deepseek-ai/dsh-agent-loop": "^0.1.6-alpha.2",
139
- "@deepseek-ai/dsh-fs": "^0.1.6-alpha.2",
140
- "@deepseek-ai/dsh-session-projection-cache": "^0.1.6-alpha.2",
141
- "@deepseek-ai/dsh-session-projection": "^0.1.6-alpha.2",
142
- "@deepseek-ai/dsh-session-query": "^0.1.6-alpha.2",
143
- "@deepseek-ai/dsh-session-title": "^0.1.6-alpha.2",
144
- "@deepseek-ai/dsh-skill": "^0.1.6-alpha.2",
145
- "@deepseek-ai/dsh-storage": "^0.1.6-alpha.2",
146
- "@deepseek-ai/dsh-storage-domain": "^0.1.6-alpha.2",
147
- "@deepseek-ai/dsh-storage-json": "^0.1.6-alpha.2",
148
- "@deepseek-ai/dsh-subagent": "^0.1.6-alpha.2",
149
- "@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.2",
150
- "@deepseek-ai/dsh-util-values": "^0.1.6-alpha.2",
151
- "@deepseek-ai/dsh-util-time": "^0.1.6-alpha.2",
152
- "@deepseek-ai/dsh-util-workspace-path": "^0.1.6-alpha.2",
153
- "@deepseek-ai/dsh-workspace": "^0.1.6-alpha.2",
154
- "@deepseek-ai/dsh-util-crypto": "^0.1.6-alpha.2",
155
- "@deepseek-ai/dsh-typert-registry": "^0.1.6-alpha.2",
156
- "@deepseek-ai/dsh-session": "^0.1.6-alpha.2",
157
- "@deepseek-ai/dsh-session-persistence": "^0.1.6-alpha.2"
114
+ "@deepseek-ai/cordis": "~4.0.4",
115
+ "@deepseek-ai/dsh-agent": "0.1.7-alpha.2",
116
+ "@deepseek-ai/dsh-agent-default-model": "0.1.7-alpha.2",
117
+ "@deepseek-ai/dsh-agent-loop": "0.1.7-alpha.2",
118
+ "@deepseek-ai/dsh-agent-loop-testkit": "0.1.7-alpha.2",
119
+ "@deepseek-ai/dsh-agent-preset-registry": "0.1.7-alpha.2",
120
+ "@deepseek-ai/dsh-api-gateway": "0.1.7-alpha.2",
121
+ "@deepseek-ai/dsh-client-connection": "0.1.7-alpha.2",
122
+ "@deepseek-ai/dsh-attachment": "0.1.7-alpha.2",
123
+ "@deepseek-ai/dsh-client-test-runtime": "0.1.7-alpha.2",
124
+ "@deepseek-ai/dsh-file-reference": "0.1.7-alpha.2",
125
+ "@deepseek-ai/dsh-commands": "0.1.7-alpha.2",
126
+ "@deepseek-ai/dsh-fs": "0.1.7-alpha.2",
127
+ "@deepseek-ai/dsh-fs-local": "0.1.7-alpha.2",
128
+ "@deepseek-ai/dsh-permission-presets": "0.1.7-alpha.2",
129
+ "@deepseek-ai/dsh-llm": "0.1.7-alpha.2",
130
+ "@deepseek-ai/dsh-remote-mock": "0.1.7-alpha.2",
131
+ "@deepseek-ai/dsh-native-command": "0.1.7-alpha.2",
132
+ "@deepseek-ai/dsh-session": "0.1.7-alpha.2",
133
+ "@deepseek-ai/dsh-session-persistence": "0.1.7-alpha.2",
134
+ "@deepseek-ai/dsh-session-projection": "0.1.7-alpha.2",
135
+ "@deepseek-ai/dsh-scope": "0.1.7-alpha.2",
136
+ "@deepseek-ai/dsh-session-projection-cache": "0.1.7-alpha.2",
137
+ "@deepseek-ai/dsh-session-query": "0.1.7-alpha.2",
138
+ "@deepseek-ai/dsh-session-title": "0.1.7-alpha.2",
139
+ "@deepseek-ai/dsh-client-store": "0.1.7-alpha.2",
140
+ "@deepseek-ai/dsh-client-file-upload": "0.1.7-alpha.2",
141
+ "@deepseek-ai/dsh-skill": "0.1.7-alpha.2",
142
+ "@deepseek-ai/dsh-storage-domain": "0.1.7-alpha.2",
143
+ "@deepseek-ai/dsh-storage-json": "0.1.7-alpha.2",
144
+ "@deepseek-ai/dsh-storage": "0.1.7-alpha.2",
145
+ "@deepseek-ai/dsh-subagent": "0.1.7-alpha.2",
146
+ "@deepseek-ai/dsh-typert-protocol": "0.1.7-alpha.2",
147
+ "@deepseek-ai/dsh-typert-registry": "0.1.7-alpha.2",
148
+ "@deepseek-ai/dsh-util-crypto": "0.1.7-alpha.2",
149
+ "@deepseek-ai/dsh-util-time": "0.1.7-alpha.2",
150
+ "@deepseek-ai/dsh-util-values": "0.1.7-alpha.2",
151
+ "@deepseek-ai/dsh-workspace": "0.1.7-alpha.2",
152
+ "@deepseek-ai/dsh-util-workspace-path": "0.1.7-alpha.2"
158
153
  },
159
154
  "scripts": {
160
155
  "bundle": "tsdown",