@deepseek-ai/dsh-api-session-controller 0.1.2-alpha.3 → 0.1.2-alpha.5

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.
@@ -52,7 +52,7 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
52
52
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
53
53
  });
54
54
  import { Deque } from '@deepseek-ai/dsh-deque';
55
- import { isAppendSurfaceEvent } from '@deepseek-ai/dsh-session';
55
+ import { isAppendSurfaceEvent, SessionLogOffset, SessionSeq, } from '@deepseek-ai/dsh-session';
56
56
  import { isChunkRow, packChunkRuns } from '@deepseek-ai/dsh-session/chunk-rows';
57
57
  import { SessionQueryError } from '@deepseek-ai/dsh-session-query';
58
58
  import { RemoteError } from '@deepseek-ai/dsh-typert-protocol';
@@ -86,18 +86,24 @@ export class SessionHistoryController {
86
86
  const env_1 = { stack: [], error: void 0, hasError: false };
87
87
  try {
88
88
  validatePageRequest(request);
89
+ const throughSeq = request.throughSeq === -1
90
+ ? -1
91
+ : SessionSeq(request.throughSeq);
92
+ const beforeSeq = request.beforeSeq === undefined
93
+ ? undefined
94
+ : SessionLogOffset(request.beforeSeq);
89
95
  const source = __addDisposableResource(env_1, await this.sourceFor(request.address, signal, false), false);
90
96
  signal.throwIfAborted();
91
97
  const sourceLog = source.events;
92
98
  const sourceCursor = sourceLog.at(-1)?.seq ?? -1;
93
- if (request.throughSeq > sourceCursor) {
94
- throw new RemoteError('gateway/bad-request', `session page through seq ${String(request.throughSeq)} is past cursor ${String(sourceCursor)}`, {});
99
+ if (throughSeq > sourceCursor) {
100
+ throw new RemoteError('gateway/bad-request', `session page through seq ${String(throughSeq)} is past cursor ${String(sourceCursor)}`, {});
95
101
  }
96
102
  /* v8 ignore next -- Session and persistence validation guarantee a dense zero-based event prefix. */
97
- if (request.throughSeq >= 0 && sourceLog[request.throughSeq]?.seq !== request.throughSeq) {
98
- throw new RemoteError('gateway/internal', `session log does not contain through seq ${String(request.throughSeq)}`, {});
103
+ if (throughSeq >= 0 && sourceLog[throughSeq]?.seq !== throughSeq) {
104
+ throw new RemoteError('gateway/internal', `session log does not contain through seq ${String(throughSeq)}`, {});
99
105
  }
100
- const page = paginate(sourceLog, request.beforeSeq, request.maxMessages ?? DEFAULT_MAX_MESSAGES, request.throughSeq);
106
+ const page = paginate(sourceLog, beforeSeq, request.maxMessages ?? DEFAULT_MAX_MESSAGES, throughSeq);
101
107
  const records = pageRecords(page.events);
102
108
  return {
103
109
  records,
@@ -148,9 +154,9 @@ export class SessionHistoryController {
148
154
  // Constructor seed events have no session/event notification. Normally
149
155
  // only the end-seed suffix is new; if persistence advanced after the
150
156
  // opening observation, replay everything beyond that snapshot cursor.
151
- const suffix = session.events.slice(snapshotCursor === undefined
157
+ const suffix = session.snapshotEvents(snapshotCursor === undefined
152
158
  ? session.firstLiveSeq
153
- : snapshotCursor + 1);
159
+ : SessionLogOffset(snapshotCursor + 1));
154
160
  for (let index = suffix.length - 1; index >= 0; index -= 1) {
155
161
  buffered.pushFront(suffix[index]);
156
162
  }
@@ -169,7 +175,7 @@ export class SessionHistoryController {
169
175
  const page = paginate(events, undefined, request.maxMessages ?? DEFAULT_MAX_MESSAGES);
170
176
  yield {
171
177
  type: 'snapshot',
172
- header: source.header,
178
+ header: wireHeader(source.header, source.inheritedEventCount),
173
179
  cursor,
174
180
  records: pageRecords(page.events),
175
181
  hasMore: page.hasMore,
@@ -187,19 +193,20 @@ export class SessionHistoryController {
187
193
  throw error;
188
194
  }
189
195
  }
190
- let nextSeq = cursor + 1;
196
+ let nextOffset = SessionLogOffset(cursor + 1);
191
197
  while (!follower.closed && !signal.aborted) {
192
198
  const item = buffered.popFront();
193
199
  if (item === undefined) {
194
200
  await new Promise((resolve) => { wake = resolve; });
195
201
  continue;
196
202
  }
197
- if (item.seq < nextSeq)
203
+ const expectedSeq = SessionSeq(nextOffset);
204
+ if (item.seq < expectedSeq)
198
205
  continue;
199
- if (item.seq !== nextSeq) {
200
- throw new RemoteError('gateway/internal', `session event stream skipped seq ${String(nextSeq)}`, {});
206
+ if (item.seq !== expectedSeq) {
207
+ throw new RemoteError('gateway/internal', `session event stream skipped seq ${String(expectedSeq)}`, {});
201
208
  }
202
- nextSeq++;
209
+ nextOffset = SessionLogOffset(nextOffset + 1);
203
210
  yield entryFor(item);
204
211
  }
205
212
  }
@@ -230,7 +237,7 @@ export class SessionHistoryController {
230
237
  rejectNotFound(address);
231
238
  }
232
239
  try {
233
- validateAddress(address, observation.header, observation.projections);
240
+ validateAddress(address, observation.header, observation.inheritedEventCount, observation.projections);
234
241
  }
235
242
  catch (error) {
236
243
  observation[Symbol.dispose]();
@@ -254,11 +261,15 @@ function projectionBlock(snapshot) {
254
261
  };
255
262
  }
256
263
  function validatePageRequest(request) {
257
- if (!Number.isSafeInteger(request.throughSeq) || request.throughSeq < -1) {
264
+ if (!Number.isSafeInteger(request.throughSeq)
265
+ || request.throughSeq < -1
266
+ || Object.is(request.throughSeq, -0)) {
258
267
  throw new RemoteError('gateway/bad-request', 'throughSeq must be an integer greater than or equal to -1', {});
259
268
  }
260
269
  if (request.beforeSeq !== undefined
261
- && (!Number.isSafeInteger(request.beforeSeq) || request.beforeSeq < 0)) {
270
+ && (!Number.isSafeInteger(request.beforeSeq)
271
+ || request.beforeSeq < 0
272
+ || Object.is(request.beforeSeq, -0))) {
262
273
  throw new RemoteError('gateway/bad-request', 'beforeSeq must be a non-negative safe integer', {});
263
274
  }
264
275
  if (request.maxMessages !== undefined
@@ -275,7 +286,7 @@ function validateFollowRequest(request) {
275
286
  function addressId(address) {
276
287
  return address.kind === 'session' ? address.sessionId : address.childSessionId;
277
288
  }
278
- function validateAddress(address, header, projections) {
289
+ function validateAddress(address, header, inheritedEventCount, projections) {
279
290
  if (address.kind === 'session') {
280
291
  if (header.origin === 'subagent') {
281
292
  throw new RemoteError('session/agent-busy', 'subagent Sessions require their durable parent address', {
@@ -297,7 +308,7 @@ function validateAddress(address, header, projections) {
297
308
  reason: 'corrupt',
298
309
  });
299
310
  }
300
- if (identity === undefined || identity.seq < (header.seedLength ?? 0)) {
311
+ if (identity === undefined || identity.seq < inheritedEventCount) {
301
312
  throw new RemoteError('subagent/catalog-diagnostic', 'subagent descriptor is unavailable', {
302
313
  parentSessionId: address.parentSessionId,
303
314
  childSessionId: address.childSessionId,
@@ -320,9 +331,9 @@ function rejectNotFound(address) {
320
331
  });
321
332
  }
322
333
  function paginate(events, beforeSeq, maxMessages, throughSeq = events.at(-1)?.seq ?? -1) {
323
- const end = Math.min(throughSeq + 1, beforeSeq ?? throughSeq + 1);
334
+ const end = SessionLogOffset(Math.min(throughSeq + 1, beforeSeq ?? throughSeq + 1));
324
335
  let count = 0;
325
- let cut = 0;
336
+ let cut = SessionLogOffset(0);
326
337
  for (let index = end - 1; index >= 0; index--) {
327
338
  const event = events[index];
328
339
  if (!MESSAGE_TYPES.has(event.type) || !isAppendSurfaceEvent(event))
@@ -331,16 +342,26 @@ function paginate(events, beforeSeq, maxMessages, throughSeq = events.at(-1)?.se
331
342
  const sources = event.sourceEventSeqs;
332
343
  let groupStart = event.seq;
333
344
  if (sources !== undefined) {
334
- for (const source of sources)
335
- groupStart = Math.min(groupStart, source);
345
+ for (const source of sources) {
346
+ if (source < groupStart)
347
+ groupStart = source;
348
+ }
336
349
  }
337
350
  if (count >= maxMessages) {
338
- cut = groupStart;
351
+ cut = SessionLogOffset(groupStart);
339
352
  break;
340
353
  }
341
354
  }
342
355
  return { events: events.slice(cut, end), hasMore: cut > 0 };
343
356
  }
357
+ /** Translate logical Session metadata to the unchanged v0 browser wire. */
358
+ function wireHeader(header, inheritedEventCount) {
359
+ const { isSeeded, ...wire } = header;
360
+ return {
361
+ ...wire,
362
+ ...isSeeded ? { seedLength: inheritedEventCount } : {},
363
+ };
364
+ }
344
365
  function entryFor(event) {
345
366
  return {
346
367
  type: 'event',
@@ -1,7 +1,8 @@
1
1
  /** Session Remote owner: cold reads, explicit Agent commands, and live control state. */
2
2
  import { Context } from '@deepseek-ai/cordis';
3
3
  import z from '@deepseek-ai/schemastery';
4
- import type { SessionEvent, SessionHeader, SessionId } from '@deepseek-ai/dsh-session';
4
+ import type { SessionId } from '@deepseek-ai/dsh-session';
5
+ import type { SessionInspection } from '@deepseek-ai/dsh-session-persistence';
5
6
  import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
6
7
  import { type ApiSessionAgentResult } from './agent.ts';
7
8
  import { buildModelCatalog } from './catalog.ts';
@@ -60,10 +61,7 @@ export declare class SessionController extends TypertRemoteService {
60
61
  * @param signal - optional caller cancellation for persistence reads.
61
62
  * @returns the current attached state or persisted header and event prefix.
62
63
  */
63
- inspect(sessionId: SessionId, signal?: AbortSignal): Promise<{
64
- meta: SessionHeader;
65
- events: SessionEvent[];
66
- }>;
64
+ inspect(sessionId: SessionId, signal?: AbortSignal): Promise<SessionInspection>;
67
65
  /**
68
66
  * Read all visible Session rows without resuming an Agent.
69
67
  * @param _request - reserved empty list request.
@@ -266,7 +266,11 @@ let SessionController = (() => {
266
266
  inspect(sessionId, signal) {
267
267
  const attached = this.ctx.sessions.get(sessionId);
268
268
  if (attached !== undefined) {
269
- return Promise.resolve({ meta: attached.header, events: [...attached.events] });
269
+ return Promise.resolve({
270
+ meta: attached.header,
271
+ inheritedEventCount: attached.inheritedEventCount,
272
+ events: attached.snapshotEvents(),
273
+ });
270
274
  }
271
275
  return inspectApiSession(this.ctx, sessionId, signal);
272
276
  }
package/lib/types/list.js CHANGED
@@ -52,6 +52,7 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
52
52
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
53
53
  });
54
54
  import { stat } from 'node:fs/promises';
55
+ import { SessionLogOffset } from '@deepseek-ai/dsh-session';
55
56
  import { SessionQueryError } from '@deepseek-ai/dsh-session-query';
56
57
  import { RemoteError } from '@deepseek-ai/dsh-typert-protocol';
57
58
  import { z } from 'zod';
@@ -362,7 +363,9 @@ export class ApiSessionList {
362
363
  projectionsFor(header, session) {
363
364
  try {
364
365
  const block = session === undefined
365
- ? this.ctx.get('sessionProjectionCache')?.cachedSnapshot(header)
366
+ ? header.isSeeded
367
+ ? undefined
368
+ : this.ctx.get('sessionProjectionCache')?.cachedSnapshot(header, SessionLogOffset(0))
366
369
  : this.ctx.sessionProjections.cachedSnapshot(session);
367
370
  return block !== undefined && Object.keys(block.values).length > 0
368
371
  ? {
@@ -4,7 +4,7 @@ import type { Branded } from '@deepseek-ai/dsh-brand';
4
4
  import type { MessageId } from '@deepseek-ai/dsh-llm/brand';
5
5
  import type { ContentBlock } from '@deepseek-ai/dsh-llm/types';
6
6
  import type { ChunkRow } from '@deepseek-ai/dsh-session/chunk-rows';
7
- import type { SessionHeader, SessionId, SurfaceOp } from '@deepseek-ai/dsh-session/types';
7
+ import type { SessionId } from '@deepseek-ai/dsh-session/types';
8
8
  import type { SessionProjectionMap } from '@deepseek-ai/dsh-session-projection/types';
9
9
  import type { JobId } from '@deepseek-ai/dsh-jobs/brand';
10
10
  import type { JsonValue } from '@deepseek-ai/dsh-util-values';
@@ -358,6 +358,25 @@ export interface SessionEventEntry {
358
358
  readonly type: 'event';
359
359
  readonly event: SessionWireEvent;
360
360
  }
361
+ /** v0-compatible Session metadata carried on the browser wire. */
362
+ export interface SessionWireHeader {
363
+ readonly version: number;
364
+ readonly id: SessionId;
365
+ readonly createdAt: number;
366
+ readonly cwd?: string;
367
+ readonly parentSession?: SessionId;
368
+ /** Exact inherited prefix length; absent for an unseeded Session. */
369
+ readonly seedLength?: number;
370
+ readonly origin?: 'subagent';
371
+ readonly delegationDepth?: number;
372
+ readonly agentPreset?: string;
373
+ }
374
+ /** Browser wire form of one Session surface operation. */
375
+ export type SessionWireSurfaceOp = 'append' | {
376
+ readonly op: 'replace';
377
+ readonly start: number;
378
+ readonly end: number;
379
+ };
361
380
  /** Event-shaped wire representation of one packed chunk row. */
362
381
  export type ChunkRowEvent = {
363
382
  [Kind in ChunkRow['type']]: {
@@ -384,7 +403,7 @@ export interface SessionWireEvent {
384
403
  readonly data: JsonValue;
385
404
  readonly ignorable?: true;
386
405
  readonly sourceEventSeqs?: number[];
387
- readonly surfaceOp?: SurfaceOp;
406
+ readonly surfaceOp?: SessionWireSurfaceOp;
388
407
  }
389
408
  /** One message-aligned backwards-history request. */
390
409
  export interface SessionPageRequest {
@@ -407,7 +426,7 @@ export interface SessionPage {
407
426
  /** Complete opening window followed by ordered events appended after its cursor. */
408
427
  export type SessionFollowFrame = {
409
428
  readonly type: 'snapshot';
410
- readonly header: SessionHeader;
429
+ readonly header: SessionWireHeader;
411
430
  readonly cursor: number;
412
431
  readonly records: readonly SessionHistoryRecord[];
413
432
  readonly hasMore: boolean;
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-alpha.3",
4
+ "version": "0.1.2-alpha.5",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -18,10 +18,6 @@
18
18
  "types": "./lib/types/index.d.ts",
19
19
  "default": "./lib/index.js"
20
20
  },
21
- "./invariant": {
22
- "types": "./lib/types/invariant.d.ts",
23
- "default": "./lib/invariant.js"
24
- },
25
21
  "./types": {
26
22
  "types": "./lib/types/types.d.ts",
27
23
  "default": "./lib/types/types.js"
@@ -58,7 +54,6 @@
58
54
  },
59
55
  "files": [
60
56
  "lib/index.js",
61
- "lib/invariant.js",
62
57
  "lib/client.js",
63
58
  "lib/types/**/*.js",
64
59
  "lib/types/**/*.d.ts",
@@ -70,37 +65,36 @@
70
65
  "license": "MIT",
71
66
  "dependencies": {
72
67
  "zod": "^4.4.3",
73
- "@deepseek-ai/dsh-brand": "^0.1.2-alpha.3",
74
- "@deepseek-ai/dsh-deque": "^0.1.2-alpha.3",
68
+ "@deepseek-ai/dsh-brand": "^0.1.2-alpha.5",
69
+ "@deepseek-ai/dsh-deque": "^0.1.2-alpha.5",
75
70
  "@deepseek-ai/schemastery": "^3.18.2"
76
71
  },
77
72
  "peerDependencies": {
78
73
  "@deepseek-ai/cordis": "^4.0.2",
79
- "@deepseek-ai/dsh-agent": "^0.1.2-alpha.3",
80
- "@deepseek-ai/dsh-agent-default-model": "^0.1.2-alpha.3",
81
- "@deepseek-ai/dsh-agent-presets": "^0.1.2-alpha.3",
82
- "@deepseek-ai/dsh-api-gateway": "^0.1.2-alpha.3",
83
- "@deepseek-ai/dsh-attachment": "^0.1.2-alpha.3",
84
- "@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.3",
85
- "@deepseek-ai/dsh-file-reference": "^0.1.2-alpha.3",
86
- "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.3",
87
- "@deepseek-ai/dsh-jobs": "^0.1.2-alpha.3",
88
- "@deepseek-ai/dsh-llm": "^0.1.2-alpha.3",
89
- "@deepseek-ai/dsh-native-command": "^0.1.2-alpha.3",
90
- "@deepseek-ai/dsh-scope": "^0.1.2-alpha.3",
91
- "@deepseek-ai/dsh-session-persistence": "^0.1.2-alpha.3",
92
- "@deepseek-ai/dsh-session-projection-cache": "^0.1.2-alpha.3",
93
- "@deepseek-ai/dsh-session-query": "^0.1.2-alpha.3",
94
- "@deepseek-ai/dsh-skill": "^0.1.2-alpha.3",
95
- "@deepseek-ai/dsh-subagent": "^0.1.2-alpha.3",
96
- "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.3",
97
- "@deepseek-ai/dsh-typert-registry": "^0.1.2-alpha.3",
98
- "@deepseek-ai/dsh-util-time": "^0.1.2-alpha.3",
99
- "@deepseek-ai/dsh-session-title": "^0.1.2-alpha.3",
100
- "@deepseek-ai/dsh-util-workspace-path": "^0.1.2-alpha.3",
101
- "@deepseek-ai/dsh-workspace": "^0.1.2-alpha.3",
102
- "@deepseek-ai/dsh-session": "^0.1.2-alpha.3",
103
- "@deepseek-ai/dsh-session-projection": "^0.1.2-alpha.3"
74
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.5",
75
+ "@deepseek-ai/dsh-agent-default-model": "^0.1.2-alpha.5",
76
+ "@deepseek-ai/dsh-agent-presets": "^0.1.2-alpha.5",
77
+ "@deepseek-ai/dsh-api-gateway": "^0.1.2-alpha.5",
78
+ "@deepseek-ai/dsh-attachment": "^0.1.2-alpha.5",
79
+ "@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.5",
80
+ "@deepseek-ai/dsh-file-reference": "^0.1.2-alpha.5",
81
+ "@deepseek-ai/dsh-jobs": "^0.1.2-alpha.5",
82
+ "@deepseek-ai/dsh-native-command": "^0.1.2-alpha.5",
83
+ "@deepseek-ai/dsh-scope": "^0.1.2-alpha.5",
84
+ "@deepseek-ai/dsh-session-projection": "^0.1.2-alpha.5",
85
+ "@deepseek-ai/dsh-session-projection-cache": "^0.1.2-alpha.5",
86
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.5",
87
+ "@deepseek-ai/dsh-session-query": "^0.1.2-alpha.5",
88
+ "@deepseek-ai/dsh-session-title": "^0.1.2-alpha.5",
89
+ "@deepseek-ai/dsh-skill": "^0.1.2-alpha.5",
90
+ "@deepseek-ai/dsh-session-persistence": "^0.1.2-alpha.5",
91
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.5",
92
+ "@deepseek-ai/dsh-llm": "^0.1.2-alpha.5",
93
+ "@deepseek-ai/dsh-subagent": "^0.1.2-alpha.5",
94
+ "@deepseek-ai/dsh-util-time": "^0.1.2-alpha.5",
95
+ "@deepseek-ai/dsh-typert-registry": "^0.1.2-alpha.5",
96
+ "@deepseek-ai/dsh-workspace": "^0.1.2-alpha.5",
97
+ "@deepseek-ai/dsh-util-workspace-path": "^0.1.2-alpha.5"
104
98
  },
105
99
  "peerDependenciesMeta": {
106
100
  "@deepseek-ai/dsh-jobs": {
@@ -115,37 +109,36 @@
115
109
  },
116
110
  "devDependencies": {
117
111
  "@deepseek-ai/cordis": "^4.0.2",
118
- "@deepseek-ai/dsh-agent": "^0.1.2-alpha.3",
119
- "@deepseek-ai/dsh-agent-default-model": "^0.1.2-alpha.3",
120
- "@deepseek-ai/dsh-agent-presets": "^0.1.2-alpha.3",
121
- "@deepseek-ai/dsh-api-gateway": "^0.1.2-alpha.3",
122
- "@deepseek-ai/dsh-attachment": "^0.1.2-alpha.3",
123
- "@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.3",
124
- "@deepseek-ai/dsh-client-store": "^0.1.2-alpha.3",
125
- "@deepseek-ai/dsh-file-reference": "^0.1.2-alpha.3",
126
- "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.3",
127
- "@deepseek-ai/dsh-jobs": "^0.1.2-alpha.3",
128
- "@deepseek-ai/dsh-llm": "^0.1.2-alpha.3",
129
- "@deepseek-ai/dsh-scope": "^0.1.2-alpha.3",
130
- "@deepseek-ai/dsh-session": "^0.1.2-alpha.3",
131
- "@deepseek-ai/dsh-session-projection": "^0.1.2-alpha.3",
132
- "@deepseek-ai/dsh-session-projection-cache": "^0.1.2-alpha.3",
133
- "@deepseek-ai/dsh-session-persistence": "^0.1.2-alpha.3",
134
- "@deepseek-ai/dsh-session-query": "^0.1.2-alpha.3",
135
- "@deepseek-ai/dsh-session-title": "^0.1.2-alpha.3",
136
- "@deepseek-ai/dsh-skill": "^0.1.2-alpha.3",
137
- "@deepseek-ai/dsh-storage": "^0.1.2-alpha.3",
138
- "@deepseek-ai/dsh-storage-domain": "^0.1.2-alpha.3",
139
- "@deepseek-ai/dsh-storage-json": "^0.1.2-alpha.3",
140
- "@deepseek-ai/dsh-subagent": "^0.1.2-alpha.3",
141
- "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.3",
142
- "@deepseek-ai/dsh-typert-registry": "^0.1.2-alpha.3",
143
- "@deepseek-ai/dsh-util-time": "^0.1.2-alpha.3",
144
- "@deepseek-ai/dsh-permission-presets": "^0.1.2-alpha.3",
145
- "@deepseek-ai/dsh-native-command": "^0.1.2-alpha.3",
146
- "@deepseek-ai/dsh-util-workspace-path": "^0.1.2-alpha.3",
147
- "@deepseek-ai/dsh-workspace": "^0.1.2-alpha.3",
148
- "@deepseek-ai/dsh-util-crypto": "^0.1.2-alpha.3"
112
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.5",
113
+ "@deepseek-ai/dsh-agent-default-model": "^0.1.2-alpha.5",
114
+ "@deepseek-ai/dsh-agent-presets": "^0.1.2-alpha.5",
115
+ "@deepseek-ai/dsh-api-gateway": "^0.1.2-alpha.5",
116
+ "@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.5",
117
+ "@deepseek-ai/dsh-client-store": "^0.1.2-alpha.5",
118
+ "@deepseek-ai/dsh-file-reference": "^0.1.2-alpha.5",
119
+ "@deepseek-ai/dsh-jobs": "^0.1.2-alpha.5",
120
+ "@deepseek-ai/dsh-llm": "^0.1.2-alpha.5",
121
+ "@deepseek-ai/dsh-native-command": "^0.1.2-alpha.5",
122
+ "@deepseek-ai/dsh-permission-presets": "^0.1.2-alpha.5",
123
+ "@deepseek-ai/dsh-scope": "^0.1.2-alpha.5",
124
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.5",
125
+ "@deepseek-ai/dsh-session-persistence": "^0.1.2-alpha.5",
126
+ "@deepseek-ai/dsh-session-projection": "^0.1.2-alpha.5",
127
+ "@deepseek-ai/dsh-session-query": "^0.1.2-alpha.5",
128
+ "@deepseek-ai/dsh-skill": "^0.1.2-alpha.5",
129
+ "@deepseek-ai/dsh-storage": "^0.1.2-alpha.5",
130
+ "@deepseek-ai/dsh-attachment": "^0.1.2-alpha.5",
131
+ "@deepseek-ai/dsh-storage-json": "^0.1.2-alpha.5",
132
+ "@deepseek-ai/dsh-subagent": "^0.1.2-alpha.5",
133
+ "@deepseek-ai/dsh-typert-registry": "^0.1.2-alpha.5",
134
+ "@deepseek-ai/dsh-session-projection-cache": "^0.1.2-alpha.5",
135
+ "@deepseek-ai/dsh-util-crypto": "^0.1.2-alpha.5",
136
+ "@deepseek-ai/dsh-storage-domain": "^0.1.2-alpha.5",
137
+ "@deepseek-ai/dsh-util-time": "^0.1.2-alpha.5",
138
+ "@deepseek-ai/dsh-util-workspace-path": "^0.1.2-alpha.5",
139
+ "@deepseek-ai/dsh-workspace": "^0.1.2-alpha.5",
140
+ "@deepseek-ai/dsh-session-title": "^0.1.2-alpha.5",
141
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.5"
149
142
  },
150
143
  "scripts": {
151
144
  "bundle": "tsdown",
package/lib/invariant.js DELETED
@@ -1,13 +0,0 @@
1
- //#region lib/types/invariant.js
2
- /** Package-owned invariant companion. @module @deepseek-ai/dsh-api-session-controller/invariant */
3
- const PACKAGE_NAME = "@deepseek-ai/dsh-api-session-controller";
4
- /** Cordis companion plugin name. */
5
- const name = "api-session-controller-invariant";
6
- /** Service required before the companion can reserve package ownership. */
7
- const inject = ["invariants"];
8
- /** No runtime invariant: every page and frame is checked against the addressed durable Session. */
9
- const install = () => {};
10
- /** Register this package's invariant companion. */
11
- const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
12
- //#endregion
13
- export { apply, inject, name };
@@ -1,9 +0,0 @@
1
- /** Package-owned invariant companion. @module @deepseek-ai/dsh-api-session-controller/invariant */
2
- import type { Context } from '@deepseek-ai/cordis';
3
- /** Cordis companion plugin name. */
4
- export declare const name = "api-session-controller-invariant";
5
- /** Service required before the companion can reserve package ownership. */
6
- export declare const inject: string[];
7
- /** Register this package's invariant companion. */
8
- export declare const apply: (ctx: Context) => Promise<() => void>;
9
- //# sourceMappingURL=invariant.d.ts.map
@@ -1,12 +0,0 @@
1
- /** Package-owned invariant companion. @module @deepseek-ai/dsh-api-session-controller/invariant */
2
- const PACKAGE_NAME = '@deepseek-ai/dsh-api-session-controller';
3
- /** Cordis companion plugin name. */
4
- export const name = 'api-session-controller-invariant';
5
- /** Service required before the companion can reserve package ownership. */
6
- export const inject = ['invariants'];
7
- /** No runtime invariant: every page and frame is checked against the addressed durable Session. */
8
- const install = () => { };
9
- /** Register this package's invariant companion. */
10
- export const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
11
- /* jscpd:ignore-end */
12
- //# sourceMappingURL=invariant.js.map