@deepseek-ai/dsh-api-session-controller 0.1.2-rc.1 → 0.1.3-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 (34) hide show
  1. package/README.i18n.yaml +2 -2
  2. package/README.md +6 -6
  3. package/README.zh.md +6 -6
  4. package/lib/client.js +592 -28
  5. package/lib/index.js +269 -214
  6. package/lib/typert.host.js +183 -141
  7. package/lib/typert.remote-client.js +79 -97
  8. package/lib/types/assistant-stream.d.ts +26 -0
  9. package/lib/types/assistant-stream.js +83 -0
  10. package/lib/types/client/contract/events.d.ts +38 -7
  11. package/lib/types/client/contract/events.js +21 -0
  12. package/lib/types/client/contract/session.d.ts +7 -7
  13. package/lib/types/client/contract/snapshot.d.ts +15 -2
  14. package/lib/types/client/index.d.ts +2 -2
  15. package/lib/types/client/index.js +2 -0
  16. package/lib/types/client/sessions/assistant-stream.d.ts +51 -0
  17. package/lib/types/client/sessions/assistant-stream.js +168 -0
  18. package/lib/types/client/sessions/history-records.d.ts +2 -2
  19. package/lib/types/client/sessions/history-records.js +3 -8
  20. package/lib/types/client/sessions/queue-mirror.js +3 -3
  21. package/lib/types/client/sessions/remotes.d.ts +2 -2
  22. package/lib/types/client/sessions/session.d.ts +3 -1
  23. package/lib/types/client/sessions/session.js +63 -15
  24. package/lib/types/client/transport.d.ts +7 -3
  25. package/lib/types/client/transport.js +18 -3
  26. package/lib/types/commands.js +98 -28
  27. package/lib/types/history.d.ts +2 -1
  28. package/lib/types/history.js +66 -37
  29. package/lib/types/index.d.ts +4 -4
  30. package/lib/types/index.js +13 -5
  31. package/lib/types/list.d.ts +2 -9
  32. package/lib/types/list.js +10 -124
  33. package/lib/types/types.d.ts +71 -29
  34. package/package.json +63 -57
package/lib/types/list.js CHANGED
@@ -1,65 +1,9 @@
1
1
  /** Cold-safe Session list and search projection. */
2
- var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
3
- if (value !== null && value !== void 0) {
4
- if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
5
- var dispose, inner;
6
- if (async) {
7
- if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
8
- dispose = value[Symbol.asyncDispose];
9
- }
10
- if (dispose === void 0) {
11
- if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
12
- dispose = value[Symbol.dispose];
13
- if (async) inner = dispose;
14
- }
15
- if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
16
- if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
17
- env.stack.push({ value: value, dispose: dispose, async: async });
18
- }
19
- else if (async) {
20
- env.stack.push({ async: true });
21
- }
22
- return value;
23
- };
24
- var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
25
- return function (env) {
26
- function fail(e) {
27
- env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
28
- env.hasError = true;
29
- }
30
- var r, s = 0;
31
- function next() {
32
- while (r = env.stack.pop()) {
33
- try {
34
- if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
35
- if (r.dispose) {
36
- var result = r.dispose.call(r.value);
37
- if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
38
- }
39
- else s |= 1;
40
- }
41
- catch (e) {
42
- fail(e);
43
- }
44
- }
45
- if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
46
- if (env.hasError) throw env.error;
47
- }
48
- return next();
49
- };
50
- })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
51
- var e = new Error(message);
52
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
53
- });
54
- import { stat } from 'node:fs/promises';
55
2
  import { SessionLogOffset } from '@deepseek-ai/dsh-session';
56
3
  import { SessionQueryError } from '@deepseek-ai/dsh-session-query';
57
4
  import { RemoteError } from '@deepseek-ai/dsh-typert-protocol';
58
5
  import { z } from 'zod';
59
6
  import { SESSION_SEARCH_RESULT_LIMIT, SESSION_SEARCH_SNIPPET_MAX_CODE_POINTS, } from "./types.js";
60
- /** Default maximum artifact size eligible for one cold projection observation. */
61
- export const DEFAULT_COLD_BLANK_PROBE_MAX_BYTES = 1024;
62
- const COLD_SUMMARY_BATCH_SIZE = 16;
63
7
  const SEARCH_PROVIDER_CALL_LIMIT = 100;
64
8
  const SESSION_SEARCH_QUERY_MAX_CHARS = 500;
65
9
  const MESSAGE_TYPES = new Set(['user/message', 'assistant/message']);
@@ -110,14 +54,9 @@ export function truncateUnicodeCodePoints(value, maximum) {
110
54
  /** Owns list projection registration, bounded cold summaries, and authorized search. */
111
55
  export class ApiSessionList {
112
56
  ctx;
113
- coldBlankProbeMaxBytes;
114
- /**
115
- * @param ctx - Host context carrying Session, query, persistence, and projection services.
116
- * @param coldBlankProbeMaxBytes - maximum physical artifact size eligible for a full observation.
117
- */
118
- constructor(ctx, coldBlankProbeMaxBytes) {
57
+ /** @param ctx - Host context carrying Session, query, persistence, and projection services. */
58
+ constructor(ctx) {
119
59
  this.ctx = ctx;
120
- this.coldBlankProbeMaxBytes = coldBlankProbeMaxBytes;
121
60
  ctx.sessionProjections.register({
122
61
  key: 'sessionListMetadata',
123
62
  stateSchema: sessionListMetadataSchema,
@@ -178,79 +117,24 @@ export class ApiSessionList {
178
117
  continue;
179
118
  cold.push(record.header);
180
119
  }
181
- for (let offset = 0; offset < cold.length; offset += COLD_SUMMARY_BATCH_SIZE) {
182
- const settled = await Promise.allSettled(cold.slice(offset, offset + COLD_SUMMARY_BATCH_SIZE)
183
- .map(header => this.summarizeCold(header, signal)));
184
- for (const result of settled) {
185
- if (result.status === 'rejected')
186
- throw result.reason;
187
- items.push(result.value);
188
- }
189
- }
120
+ for (const header of cold)
121
+ items.push(this.summarizeCold(header));
190
122
  items.sort((left, right) => right.updatedAt - left.updatedAt);
191
123
  return items;
192
124
  }
193
- async summarizeCold(header, signal) {
194
- const cached = this.projectionsFor(header, undefined);
195
- const projections = cached?.values.sessionListMetadata?.blank === false
196
- ? cached
197
- : await this.probeSmallCold(header, signal) ?? cached;
198
- const raced = this.ctx.sessions.get(header.id);
199
- if (raced !== undefined)
200
- return this.summaryFor(raced);
125
+ summarizeCold(header) {
126
+ const projections = this.projectionsFor(header, undefined);
201
127
  const metadata = projections?.values.sessionListMetadata;
202
128
  return {
203
129
  sessionId: header.id,
204
130
  updatedAt: updatedAt(header, metadata),
205
131
  running: false,
206
- // A large or inaccessible cache miss remains unknown and visible.
132
+ // A large, metadata-less, or inaccessible cache miss remains unknown and visible.
207
133
  blank: metadata?.blank ?? false,
208
134
  ...listFields(header),
209
135
  ...(projections === undefined ? {} : { projections }),
210
136
  };
211
137
  }
212
- async probeSmallCold(header, signal) {
213
- if (this.coldBlankProbeMaxBytes === 0)
214
- return undefined;
215
- const persistence = this.ctx.get('sessionPersistence');
216
- const location = persistence?.locate(header);
217
- if (location === undefined)
218
- return undefined;
219
- signal?.throwIfAborted();
220
- try {
221
- if ((await stat(location.path)).size > this.coldBlankProbeMaxBytes)
222
- return undefined;
223
- }
224
- catch {
225
- signal?.throwIfAborted();
226
- return undefined;
227
- }
228
- try {
229
- const env_1 = { stack: [], error: void 0, hasError: false };
230
- try {
231
- const observation = __addDisposableResource(env_1, await this.ctx.sessionQuery.observeSession(header.id, {
232
- ...(signal === undefined ? {} : { signal }),
233
- projectionMode: 'all',
234
- }), false);
235
- const block = observation.projections;
236
- return block === undefined
237
- ? undefined
238
- : { asOfSeq: block.asOfSeq, values: block.values };
239
- }
240
- catch (e_1) {
241
- env_1.error = e_1;
242
- env_1.hasError = true;
243
- }
244
- finally {
245
- __disposeResources(env_1);
246
- }
247
- }
248
- catch (error) {
249
- signal?.throwIfAborted();
250
- this.ctx.logger.warn(`api-session.list: small cold observation for "${header.id}" failed; serving it as visible: ${String(error)}`);
251
- return undefined;
252
- }
253
- }
254
138
  /**
255
139
  * Search current visible message content without activating any matching Session.
256
140
  * @param query - literal message-content query.
@@ -362,10 +246,12 @@ export class ApiSessionList {
362
246
  }
363
247
  projectionsFor(header, session) {
364
248
  try {
249
+ const cache = this.ctx.get('sessionProjectionCache');
365
250
  const block = session === undefined
366
251
  ? header.isSeeded
367
252
  ? undefined
368
- : this.ctx.get('sessionProjectionCache')?.cachedSnapshot(header, SessionLogOffset(0))
253
+ : cache?.cachedSnapshot(header, SessionLogOffset(0))
254
+ ?? cache?.cachedPredecessorTitle(header, SessionLogOffset(0))
369
255
  : this.ctx.sessionProjections.cachedSnapshot(session);
370
256
  return block !== undefined && Object.keys(block.values).length > 0
371
257
  ? {
@@ -1,10 +1,9 @@
1
1
  /** Browser-safe request, result, and lifecycle vocabulary for the Session Remote service. */
2
2
  import type { AttachmentIdType, ImageAttachmentLimits, ImageAttachmentRef, ImageMediaType } from '@deepseek-ai/dsh-attachment';
3
3
  import type { Branded } from '@deepseek-ai/dsh-brand';
4
- import type { MessageId } from '@deepseek-ai/dsh-llm/brand';
5
- import type { ContentBlock } from '@deepseek-ai/dsh-llm/types';
6
- import type { ChunkRow } from '@deepseek-ai/dsh-session/chunk-rows';
7
- import type { SessionId } from '@deepseek-ai/dsh-session/types';
4
+ import type { LlmAttemptId, MessageId } from '@deepseek-ai/dsh-llm/brand';
5
+ import type { ContentBlock } from '@deepseek-ai/dsh-llm';
6
+ import type { SessionId, SessionSeqCursor } from '@deepseek-ai/dsh-session/types';
8
7
  import type { SessionProjectionMap } from '@deepseek-ai/dsh-session-projection/types';
9
8
  import type { JobId } from '@deepseek-ai/dsh-jobs/brand';
10
9
  import type { JsonValue } from '@deepseek-ai/dsh-util-values';
@@ -57,7 +56,11 @@ export interface SessionProjectionBaseline {
57
56
  }
58
57
  /** Typed known projections plus JSON-safe values contributed outside this compilation face. */
59
58
  export type SessionProjectionValues = Partial<SessionProjectionMap> & Readonly<Record<string, SessionProjectionValue>>;
60
- /** Browser-submitted prompt content; the Host promotes image bytes to durable references. */
59
+ /**
60
+ * Browser-submitted prompt content; the Host promotes image bytes to durable
61
+ * references. File parts carry the opaque receipt returned by a preceding
62
+ * `uploadFile` call on the same Session.
63
+ */
61
64
  export type PromptContentPart = {
62
65
  readonly type: 'text';
63
66
  readonly text: string;
@@ -66,6 +69,9 @@ export type PromptContentPart = {
66
69
  readonly mediaType: ImageMediaType;
67
70
  readonly data: string;
68
71
  readonly name?: string;
72
+ } | {
73
+ readonly type: 'file';
74
+ readonly receiptId: Branded<'file-upload-receipt-id'>;
69
75
  };
70
76
  /** Complete model selection for one Session. */
71
77
  export interface ModelSelection {
@@ -358,15 +364,15 @@ export interface SessionEventEntry {
358
364
  readonly type: 'event';
359
365
  readonly event: SessionWireEvent;
360
366
  }
361
- /** v0-compatible Session metadata carried on the browser wire. */
367
+ /** Current logical Session metadata carried on the browser wire. */
362
368
  export interface SessionWireHeader {
363
369
  readonly version: number;
364
370
  readonly id: SessionId;
365
371
  readonly createdAt: number;
366
372
  readonly cwd?: string;
367
373
  readonly parentSession?: SessionId;
368
- /** Exact inherited prefix length; absent for an unseeded Session. */
369
- readonly seedLength?: number;
374
+ /** Whether the Session contains a fork-inherited prefix. */
375
+ readonly isSeeded: boolean;
370
376
  readonly origin?: 'subagent';
371
377
  readonly delegationDepth?: number;
372
378
  readonly agentPreset?: string;
@@ -377,24 +383,8 @@ export type SessionWireSurfaceOp = 'append' | {
377
383
  readonly start: number;
378
384
  readonly end: number;
379
385
  };
380
- /** Event-shaped wire representation of one packed chunk row. */
381
- export type ChunkRowEvent = {
382
- [Kind in ChunkRow['type']]: {
383
- readonly type: `chunkrow/${Kind}`;
384
- readonly seq: number;
385
- readonly time: number;
386
- readonly data: Extract<ChunkRow, {
387
- readonly type: Kind;
388
- }>['data'];
389
- };
390
- }[ChunkRow['type']];
391
- /** One lossless run of consecutive Assistant delta events in a history page. */
392
- export interface SessionChunkRun {
393
- readonly type: 'chunks';
394
- readonly event: ChunkRowEvent;
395
- }
396
- /** One history-page record: a raw event or a packed Assistant delta run. */
397
- export type SessionHistoryRecord = SessionEventEntry | SessionChunkRun;
386
+ /** One history-page record. V2 embeds compact Assistant streams inside events. */
387
+ export type SessionHistoryRecord = SessionEventEntry;
398
388
  /** Session event wire form; durable readers own recognition of merge-extensible event names. */
399
389
  export interface SessionWireEvent {
400
390
  readonly type: string;
@@ -417,13 +407,61 @@ export interface SessionPageRequest {
417
407
  export interface SessionFollowRequest {
418
408
  readonly address: SessionAddress;
419
409
  readonly maxMessages?: number;
420
- }
410
+ /** Include process-local assistant presentation frames for the Web client. */
411
+ readonly assistantStream?: true;
412
+ }
413
+ /** One active assistant attempt in a reconnect opening snapshot. */
414
+ export interface SessionAssistantStreamAttempt {
415
+ readonly attemptId: LlmAttemptId;
416
+ /** Last durable Session seq observed when this attempt started. */
417
+ readonly startedAfterSeq: SessionSeqCursor;
418
+ readonly turn: number;
419
+ readonly step: number;
420
+ /** Dense position expected for the next live chunk frame. */
421
+ readonly nextIndex: number;
422
+ /** Compact detached stream accumulated at this opening revision. */
423
+ readonly stream: readonly JsonValue[];
424
+ }
425
+ /** Complete process-local assistant state at one follow opening. */
426
+ export interface SessionAssistantStreamBaseline {
427
+ readonly revision: number;
428
+ readonly activeAttempt?: SessionAssistantStreamAttempt;
429
+ }
430
+ /** Browser wire form of one process-local assistant frame. */
431
+ export type SessionAssistantStreamFrame = {
432
+ readonly type: 'start';
433
+ readonly attemptId: LlmAttemptId;
434
+ readonly revision: number;
435
+ readonly startedAfterSeq: SessionSeqCursor;
436
+ readonly turn: number;
437
+ readonly step: number;
438
+ } | {
439
+ readonly type: 'chunk';
440
+ readonly attemptId: LlmAttemptId;
441
+ readonly revision: number;
442
+ readonly index: number;
443
+ readonly time: number;
444
+ readonly chunk: JsonValue;
445
+ } | {
446
+ readonly type: 'end';
447
+ readonly attemptId: LlmAttemptId;
448
+ readonly revision: number;
449
+ /** Number of chunk frames represented by this terminal marker. */
450
+ readonly index: number;
451
+ readonly outcome: {
452
+ readonly kind: 'committed';
453
+ readonly eventType: 'assistant/message' | 'assistant/attempt';
454
+ readonly seq: number;
455
+ } | {
456
+ readonly kind: 'abandoned';
457
+ };
458
+ };
421
459
  /** One contiguous backwards page of a Session log. */
422
460
  export interface SessionPage {
423
461
  readonly records: readonly SessionHistoryRecord[];
424
462
  readonly hasMore: boolean;
425
463
  }
426
- /** Complete opening window followed by ordered events appended after its cursor. */
464
+ /** Complete opening window followed by ordered durable events and opted-in assistant frames. */
427
465
  export type SessionFollowFrame = {
428
466
  readonly type: 'snapshot';
429
467
  readonly header: SessionWireHeader;
@@ -431,7 +469,11 @@ export type SessionFollowFrame = {
431
469
  readonly records: readonly SessionHistoryRecord[];
432
470
  readonly hasMore: boolean;
433
471
  readonly projections: SessionProjectionBaseline;
434
- } | SessionEventEntry;
472
+ readonly assistantStream?: SessionAssistantStreamBaseline;
473
+ } | SessionEventEntry | {
474
+ readonly type: 'assistant-stream';
475
+ readonly frame: SessionAssistantStreamFrame;
476
+ };
435
477
  /** One pending inbox occurrence in the authoritative queue snapshot. */
436
478
  export interface SessionQueuedItem {
437
479
  readonly id: MessageId;
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.2-rc.1",
4
+ "version": "0.1.3-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -65,36 +65,39 @@
65
65
  "license": "MIT",
66
66
  "dependencies": {
67
67
  "zod": "^4.4.3",
68
- "@deepseek-ai/dsh-brand": "^0.1.2-rc.1",
69
- "@deepseek-ai/dsh-deque": "^0.1.2-rc.1",
68
+ "@deepseek-ai/dsh-brand": "^0.1.3-alpha.2",
69
+ "@deepseek-ai/dsh-deque": "^0.1.3-alpha.2",
70
70
  "@deepseek-ai/schemastery": "^3.18.2"
71
71
  },
72
72
  "peerDependencies": {
73
+ "@deepseek-ai/dsh-agent": "^0.1.3-alpha.2",
73
74
  "@deepseek-ai/cordis": "^4.0.2",
74
- "@deepseek-ai/dsh-agent-default-model": "^0.1.2-rc.1",
75
- "@deepseek-ai/dsh-agent-presets": "^0.1.2-rc.1",
76
- "@deepseek-ai/dsh-api-gateway": "^0.1.2-rc.1",
77
- "@deepseek-ai/dsh-client-connection": "^0.1.2-rc.1",
78
- "@deepseek-ai/dsh-attachment": "^0.1.2-rc.1",
79
- "@deepseek-ai/dsh-llm": "^0.1.2-rc.1",
80
- "@deepseek-ai/dsh-native-command": "^0.1.2-rc.1",
81
- "@deepseek-ai/dsh-scope": "^0.1.2-rc.1",
82
- "@deepseek-ai/dsh-session": "^0.1.2-rc.1",
83
- "@deepseek-ai/dsh-session-persistence": "^0.1.2-rc.1",
84
- "@deepseek-ai/dsh-session-projection": "^0.1.2-rc.1",
85
- "@deepseek-ai/dsh-agent": "^0.1.2-rc.1",
86
- "@deepseek-ai/dsh-session-projection-cache": "^0.1.2-rc.1",
87
- "@deepseek-ai/dsh-jobs": "^0.1.2-rc.1",
88
- "@deepseek-ai/dsh-file-reference": "^0.1.2-rc.1",
89
- "@deepseek-ai/dsh-session-query": "^0.1.2-rc.1",
90
- "@deepseek-ai/dsh-session-title": "^0.1.2-rc.1",
91
- "@deepseek-ai/dsh-skill": "^0.1.2-rc.1",
92
- "@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1",
93
- "@deepseek-ai/dsh-util-time": "^0.1.2-rc.1",
94
- "@deepseek-ai/dsh-typert-registry": "^0.1.2-rc.1",
95
- "@deepseek-ai/dsh-util-workspace-path": "^0.1.2-rc.1",
96
- "@deepseek-ai/dsh-workspace": "^0.1.2-rc.1",
97
- "@deepseek-ai/dsh-subagent": "^0.1.2-rc.1"
75
+ "@deepseek-ai/dsh-agent-default-model": "^0.1.3-alpha.2",
76
+ "@deepseek-ai/dsh-agent-presets": "^0.1.3-alpha.2",
77
+ "@deepseek-ai/dsh-attachment": "^0.1.3-alpha.2",
78
+ "@deepseek-ai/dsh-api-gateway": "^0.1.3-alpha.2",
79
+ "@deepseek-ai/dsh-client-connection": "^0.1.3-alpha.2",
80
+ "@deepseek-ai/dsh-client-file-upload": "^0.1.3-alpha.2",
81
+ "@deepseek-ai/dsh-commands": "^0.1.3-alpha.2",
82
+ "@deepseek-ai/dsh-file-reference": "^0.1.3-alpha.2",
83
+ "@deepseek-ai/dsh-jobs": "^0.1.3-alpha.2",
84
+ "@deepseek-ai/dsh-llm": "^0.1.3-alpha.2",
85
+ "@deepseek-ai/dsh-native-command": "^0.1.3-alpha.2",
86
+ "@deepseek-ai/dsh-scope": "^0.1.3-alpha.2",
87
+ "@deepseek-ai/dsh-session": "^0.1.3-alpha.2",
88
+ "@deepseek-ai/dsh-session-persistence": "^0.1.3-alpha.2",
89
+ "@deepseek-ai/dsh-session-projection": "^0.1.3-alpha.2",
90
+ "@deepseek-ai/dsh-session-projection-cache": "^0.1.3-alpha.2",
91
+ "@deepseek-ai/dsh-session-query": "^0.1.3-alpha.2",
92
+ "@deepseek-ai/dsh-skill": "^0.1.3-alpha.2",
93
+ "@deepseek-ai/dsh-subagent": "^0.1.3-alpha.2",
94
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.3-alpha.2",
95
+ "@deepseek-ai/dsh-typert-registry": "^0.1.3-alpha.2",
96
+ "@deepseek-ai/dsh-util-time": "^0.1.3-alpha.2",
97
+ "@deepseek-ai/dsh-util-values": "^0.1.3-alpha.2",
98
+ "@deepseek-ai/dsh-util-workspace-path": "^0.1.3-alpha.2",
99
+ "@deepseek-ai/dsh-workspace": "^0.1.3-alpha.2",
100
+ "@deepseek-ai/dsh-session-title": "^0.1.3-alpha.2"
98
101
  },
99
102
  "peerDependenciesMeta": {
100
103
  "@deepseek-ai/dsh-jobs": {
@@ -109,36 +112,39 @@
109
112
  },
110
113
  "devDependencies": {
111
114
  "@deepseek-ai/cordis": "^4.0.2",
112
- "@deepseek-ai/dsh-agent": "^0.1.2-rc.1",
113
- "@deepseek-ai/dsh-agent-default-model": "^0.1.2-rc.1",
114
- "@deepseek-ai/dsh-agent-presets": "^0.1.2-rc.1",
115
- "@deepseek-ai/dsh-api-gateway": "^0.1.2-rc.1",
116
- "@deepseek-ai/dsh-attachment": "^0.1.2-rc.1",
117
- "@deepseek-ai/dsh-client-connection": "^0.1.2-rc.1",
118
- "@deepseek-ai/dsh-client-store": "^0.1.2-rc.1",
119
- "@deepseek-ai/dsh-file-reference": "^0.1.2-rc.1",
120
- "@deepseek-ai/dsh-llm": "^0.1.2-rc.1",
121
- "@deepseek-ai/dsh-jobs": "^0.1.2-rc.1",
122
- "@deepseek-ai/dsh-native-command": "^0.1.2-rc.1",
123
- "@deepseek-ai/dsh-permission-presets": "^0.1.2-rc.1",
124
- "@deepseek-ai/dsh-scope": "^0.1.2-rc.1",
125
- "@deepseek-ai/dsh-session-persistence": "^0.1.2-rc.1",
126
- "@deepseek-ai/dsh-session-projection": "^0.1.2-rc.1",
127
- "@deepseek-ai/dsh-session-projection-cache": "^0.1.2-rc.1",
128
- "@deepseek-ai/dsh-session-query": "^0.1.2-rc.1",
129
- "@deepseek-ai/dsh-session": "^0.1.2-rc.1",
130
- "@deepseek-ai/dsh-session-title": "^0.1.2-rc.1",
131
- "@deepseek-ai/dsh-skill": "^0.1.2-rc.1",
132
- "@deepseek-ai/dsh-storage": "^0.1.2-rc.1",
133
- "@deepseek-ai/dsh-storage-domain": "^0.1.2-rc.1",
134
- "@deepseek-ai/dsh-storage-json": "^0.1.2-rc.1",
135
- "@deepseek-ai/dsh-subagent": "^0.1.2-rc.1",
136
- "@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1",
137
- "@deepseek-ai/dsh-typert-registry": "^0.1.2-rc.1",
138
- "@deepseek-ai/dsh-util-crypto": "^0.1.2-rc.1",
139
- "@deepseek-ai/dsh-util-time": "^0.1.2-rc.1",
140
- "@deepseek-ai/dsh-util-workspace-path": "^0.1.2-rc.1",
141
- "@deepseek-ai/dsh-workspace": "^0.1.2-rc.1"
115
+ "@deepseek-ai/dsh-agent": "^0.1.3-alpha.2",
116
+ "@deepseek-ai/dsh-agent-default-model": "^0.1.3-alpha.2",
117
+ "@deepseek-ai/dsh-api-gateway": "^0.1.3-alpha.2",
118
+ "@deepseek-ai/dsh-attachment": "^0.1.3-alpha.2",
119
+ "@deepseek-ai/dsh-client-connection": "^0.1.3-alpha.2",
120
+ "@deepseek-ai/dsh-client-file-upload": "^0.1.3-alpha.2",
121
+ "@deepseek-ai/dsh-commands": "^0.1.3-alpha.2",
122
+ "@deepseek-ai/dsh-client-store": "^0.1.3-alpha.2",
123
+ "@deepseek-ai/dsh-file-reference": "^0.1.3-alpha.2",
124
+ "@deepseek-ai/dsh-agent-presets": "^0.1.3-alpha.2",
125
+ "@deepseek-ai/dsh-jobs": "^0.1.3-alpha.2",
126
+ "@deepseek-ai/dsh-llm": "^0.1.3-alpha.2",
127
+ "@deepseek-ai/dsh-native-command": "^0.1.3-alpha.2",
128
+ "@deepseek-ai/dsh-permission-presets": "^0.1.3-alpha.2",
129
+ "@deepseek-ai/dsh-session": "^0.1.3-alpha.2",
130
+ "@deepseek-ai/dsh-session-persistence": "^0.1.3-alpha.2",
131
+ "@deepseek-ai/dsh-session-projection": "^0.1.3-alpha.2",
132
+ "@deepseek-ai/dsh-session-projection-cache": "^0.1.3-alpha.2",
133
+ "@deepseek-ai/dsh-session-query": "^0.1.3-alpha.2",
134
+ "@deepseek-ai/dsh-scope": "^0.1.3-alpha.2",
135
+ "@deepseek-ai/dsh-session-title": "^0.1.3-alpha.2",
136
+ "@deepseek-ai/dsh-skill": "^0.1.3-alpha.2",
137
+ "@deepseek-ai/dsh-storage": "^0.1.3-alpha.2",
138
+ "@deepseek-ai/dsh-storage-domain": "^0.1.3-alpha.2",
139
+ "@deepseek-ai/dsh-storage-json": "^0.1.3-alpha.2",
140
+ "@deepseek-ai/dsh-subagent": "^0.1.3-alpha.2",
141
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.3-alpha.2",
142
+ "@deepseek-ai/dsh-typert-registry": "^0.1.3-alpha.2",
143
+ "@deepseek-ai/dsh-util-crypto": "^0.1.3-alpha.2",
144
+ "@deepseek-ai/dsh-util-time": "^0.1.3-alpha.2",
145
+ "@deepseek-ai/dsh-util-workspace-path": "^0.1.3-alpha.2",
146
+ "@deepseek-ai/dsh-workspace": "^0.1.3-alpha.2",
147
+ "@deepseek-ai/dsh-util-values": "^0.1.3-alpha.2"
142
148
  },
143
149
  "scripts": {
144
150
  "bundle": "tsdown",