@deepseek-ai/dsh-client-test-runtime 0.1.6-alpha.1 → 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.
@@ -55,7 +55,7 @@ export declare class TestClient {
55
55
  /** Flush pending React work and microtasks inside `act` (plain microtask flush without a DOM). */
56
56
  flush(): Promise<void>;
57
57
  /**
58
- * Rebuild one Loader entry: client-hmr's registry-first fiber teardown, then
58
+ * Rebuild one Loader entry: Client Modules' registry-first fiber teardown, then
59
59
  * `entry.refresh()`. Each client's module table retains its own instance-bound
60
60
  * Connection plugin, so reloads do not coordinate through process globals.
61
61
  * Requires a live client: after `dispose()` the Loader holds no entries and
@@ -44,6 +44,8 @@ export interface SessionFixture {
44
44
  events?: readonly SessionEventLikeEntry[];
45
45
  /** Whether the initial event window has an older page. */
46
46
  hasMore?: boolean;
47
+ /** Optional shared initial-opening barrier for the fixture's Client generation. */
48
+ initialOpen?: (signal: AbortSignal) => void | Promise<void>;
47
49
  }
48
50
  /**
49
51
  * A complete quiescent Session Controller snapshot.
@@ -16,9 +16,11 @@ import type { RenderResult } from '@testing-library/react';
16
16
  import type { queries } from '@testing-library/dom';
17
17
  import type { BoundFunctions } from '@testing-library/dom';
18
18
  import { SlotRegistry } from '@deepseek-ai/dsh-client-ui-renderer/client';
19
+ import type { SessionReference } from '@deepseek-ai/dsh-api-session-controller/client';
19
20
  import type { SessionId } from '@deepseek-ai/dsh-session/types';
20
21
  import type { PanelInfo } from '@deepseek-ai/dsh-client-ui-layout/client';
21
- import type { ChildrenDecl, ComposedProps, HostObservable, OwnerOf, RenderOpts, SlotComponent, SlotMap, SlotRenderer, SnapshotSelectorHook, StoreInstanceLike } from '@deepseek-ai/dsh-client-ui-slots';
22
+ import type { ChildrenDecl, ComposedProps, HostObservable, OwnerOf, RenderOpts, SlotComponent, SlotMap, SlotRenderer, SlotFactoryMap, SnapshotSelectorHook, StoredFactory, StoreInstanceLike } from '@deepseek-ai/dsh-client-ui-slots';
23
+ import { TestRemote } from './remote.ts';
22
24
  import { TestSessions } from './sessions.ts';
23
25
  import { TestWorkspaces } from './workspaces.ts';
24
26
  import type { Stabilizer } from './fixtures.ts';
@@ -44,6 +46,10 @@ export declare function bindSnapshotSelector<T>(source: HostObservable<T>): Snap
44
46
  * @returns Slot renderer instance.
45
47
  */
46
48
  export declare function createSlotRenderer(): SlotRenderer;
49
+ /** Per-view render options; the caller owns the explicitly supplied Session reference. */
50
+ export interface SlotTestRenderOptions extends RenderOpts {
51
+ readonly session?: SessionReference | undefined;
52
+ }
47
53
  /**
48
54
  * One rendered slot's local view, from {@link SlotTestRuntime.renderSlot}:
49
55
  * the renderer's own `[data-slot]` outlet anchor is the snapshot root
@@ -60,8 +66,9 @@ export interface SlotView<K extends keyof SlotMap & string> {
60
66
  * Replace the owner props and flush the re-render (the render-site update:
61
67
  * in production the owner recomputes the share and React re-renders).
62
68
  * @param owner - the next owner props share.
69
+ * @param opts - replacement render options and borrowed reference; omission keeps this view's options.
63
70
  */
64
- update(owner: OwnerOf<K>): void;
71
+ update(owner: OwnerOf<K>, opts?: SlotTestRenderOptions): void;
65
72
  }
66
73
  /**
67
74
  * Mounted feature plugin handle: the live fiber plus an act-wrapped,
@@ -121,8 +128,10 @@ export declare class SlotTestRuntime {
121
128
  readonly slots: SlotRegistry;
122
129
  /** The test-owned 'root' occupant. */
123
130
  readonly root: TestRoot;
124
- /** Sessions double (list/current observable, cells, scopes, behavior faces). */
131
+ /** Fixture catalog, explicit references, scoped contexts, and behavior faces. */
125
132
  readonly sessions: TestSessions;
133
+ /** One Remote double shared by every feature mounted in this runtime. */
134
+ readonly remote: TestRemote;
126
135
  /** Workspaces double (list observable, recorded intent actions). */
127
136
  readonly workspaces: TestWorkspaces;
128
137
  /** Test-owned panel selection used by the framework's usePanelInfo hook. */
@@ -184,20 +193,26 @@ export declare class SlotTestRuntime {
184
193
  * slot of the same tree.
185
194
  * @param key - a key declared through {@link SlotTestRuntime.declare}.
186
195
  * @param owner - owner props share for the render site.
187
- * @param opts - explicit keyed or list selection; retained by view updates.
196
+ * @param opts - explicit entry selection and borrowed Session reference; retained by view updates.
188
197
  * @returns the slot-local view (snapshot container, scoped queries, owner updates).
189
198
  */
190
- renderSlot<K extends keyof SlotMap & string>(key: K, owner: OwnerOf<K>, opts?: RenderOpts): SlotView<K>;
199
+ renderSlot<K extends keyof SlotMap & string>(key: K, owner: OwnerOf<K>, opts?: SlotTestRenderOptions): SlotView<K>;
191
200
  /**
192
201
  * Resolve the store instance the renderer would hand a slot's component
193
202
  * (identity assertions, action-driven writes). Requires a prior
194
203
  * {@link SlotTestRuntime.renderRoot} — the host face exists only inside the
195
204
  * installed renderer, exactly as in production.
196
205
  * @param key - slot key whose first entry declares the store.
197
- * @param scopeKey - session id for session-scope slots; omit for root scope.
206
+ * @param session - retained Session reference for session-scope slots; omit for root scope.
198
207
  * @returns the live store instance.
199
208
  */
200
- storeOf(key: keyof SlotMap & string, scopeKey?: string): StoreInstanceLike;
209
+ storeOf(key: keyof SlotMap & string, session?: SessionReference): StoreInstanceLike;
210
+ /**
211
+ * Read one registered Factory definition for direct contract assertions.
212
+ * @param name - registered Factory name.
213
+ * @returns the live Factory definition.
214
+ */
215
+ factoryOf(name: keyof SlotFactoryMap & string): StoredFactory;
201
216
  /**
202
217
  * Flush pending ledger/store notifications inside act — for mutations made
203
218
  * outside the runtime's own methods (e.g. a direct `slots.register`).
@@ -19,6 +19,7 @@ export { RemoteError } from '@deepseek-ai/dsh-typert-protocol';
19
19
  * against the real service.
20
20
  */
21
21
  export declare class TestRemote {
22
+ private readonly ctx;
22
23
  private readonly subscriptions;
23
24
  /**
24
25
  * Fixed Host facts mirrored from the production `ctx.remote.$host`. Plain
@@ -35,6 +36,13 @@ export declare class TestRemote {
35
36
  * @param namespaces - scripted namespace faces reached as `ctx.remote.<name>`.
36
37
  */
37
38
  constructor(ctx: Context, namespaces?: Readonly<Record<string, object>>);
39
+ /**
40
+ * Add scripted namespace faces to this Remote service.
41
+ * @param namespaces - scripted namespace faces reached as `ctx.remote.<name>`.
42
+ */
43
+ provideNamespaces(namespaces: Readonly<Record<string, object>>): void;
44
+ private validateNamespaces;
45
+ private installNamespaces;
38
46
  /**
39
47
  * Deliver one forwarded host event to its subscribers, standing in for the
40
48
  * carrier that owns the frame sink.
@@ -2,11 +2,18 @@
2
2
  import type { Context } from '@deepseek-ai/cordis';
3
3
  import type { AttachmentIdType } from '@deepseek-ai/dsh-attachment';
4
4
  import { MutableSessionEventSource } from '@deepseek-ai/dsh-api-session-controller/client';
5
- import type { AgentContext, ISessions, ProjectionsFace, SessionBinding, SessionFace, SessionListState, SessionEventLikeEntry, SessionLiveEventEntry, SessionSearchResultItem, SessionSnapshot, SessionSummary, SubmissionHandle } from '@deepseek-ai/dsh-api-session-controller/client';
5
+ import type { AgentContext, ISessions, ProjectionsFace, SessionBinding, SessionFace, SessionListState, SessionEventLikeEntry, SessionLiveEventEntry, SessionSearchResultItem, SessionReference, SessionRetainInfo, SessionRetainOptions, SessionSnapshot, SessionSummary, SessionTarget, SubmissionHandle } from '@deepseek-ai/dsh-api-session-controller/client';
6
6
  import type { SubagentAddress } from '@deepseek-ai/dsh-subagent/client';
7
- import type { SnapshotStore } from '@deepseek-ai/dsh-client-store';
7
+ import type { ObservableSnapshot, SnapshotStore } from '@deepseek-ai/dsh-client-store';
8
8
  import type { SessionId } from '@deepseek-ai/dsh-session/types';
9
9
  import type { SessionFixture, SessionFixtureSnapshot, Stabilizer } from './fixtures.ts';
10
+ declare module '@deepseek-ai/dsh-api-session-controller/client' {
11
+ interface SessionReferenceSourceMap {
12
+ testFixture: unknown;
13
+ testView: unknown;
14
+ testOperation: unknown;
15
+ }
16
+ }
10
17
  /**
11
18
  * The fixture-backed session face: lifecycle reads delegate to the fixture's
12
19
  * snapshot store; Session verbs are fail-loud stubs unless the
@@ -91,24 +98,29 @@ export declare class FixtureSession implements SessionFace {
91
98
  }
92
99
  /**
93
100
  * Sessions test double behind the renderer host and feature injects: owns the
94
- * list/current observable, scope minting through the production `createScope`,
101
+ * catalog observable, scope minting through the production `createScope`,
95
102
  * stable Controller bindings, and the session behavior face supplied per
96
103
  * fixture. `ui-session` owns standard-source materialization.
97
104
  *
98
105
  * Implements the same ISessions face features receive as `ctx.sessions`, so
99
106
  * a production face change breaks this double at compile time; the extra
100
- * members (add/updateSessionSnapshot/event-window drivers/setCurrent/remove/
107
+ * members (add/updateSessionSnapshot/event-window drivers/remove/
101
108
  * behavior/calls/stubs) are bench-only surface.
102
109
  */
103
110
  export declare class TestSessions implements ISessions {
104
111
  private readonly stabilize;
105
112
  private readonly rootCtx;
106
- /** The useSessions standard feed (list rows + current selection). */
113
+ /** The useSessions catalog feed, independent of view ownership. */
107
114
  readonly list: SnapshotStore<SessionListState>;
108
115
  private readonly records;
116
+ private readonly generations;
117
+ private readonly addresses;
118
+ private readonly retentionStores;
119
+ private readonly pendingDrops;
120
+ private closed;
109
121
  /** Calls observed on the service-level face, newest last. */
110
122
  readonly calls: {
111
- method: 'create' | 'open' | 'openSubagent' | 'setSubagentCatalogOpen' | 'refreshSubagents' | 'clear' | 'refresh' | 'search' | 'fork';
123
+ method: 'create' | 'setSubagentCatalogOpen' | 'refreshSubagents' | 'refresh' | 'search' | 'fork';
112
124
  args: unknown[];
113
125
  }[];
114
126
  /** The wire schema's `session.search` result bound (production parity). */
@@ -122,20 +134,24 @@ export declare class TestSessions implements ISessions {
122
134
  */
123
135
  constructor(stabilize: Stabilizer, rootCtx: Context);
124
136
  /**
125
- * Add a session from a fixture and (by default) make it current.
137
+ * Add a Session fixture to the catalog without retaining a generation.
126
138
  * @param fixture - identity + snapshot/summary overrides + behavior face.
127
- * @param opts - pass `current: false` to add without selecting.
128
139
  * @returns the stable session id (branded view of `fixture.id`).
129
140
  */
130
- add(fixture: SessionFixture, opts?: {
131
- current?: boolean;
132
- }): Promise<SessionId>;
141
+ add(fixture: SessionFixture): Promise<SessionId>;
133
142
  /**
134
143
  * Update Session Controller lifecycle state through an immer draft.
135
144
  * @param id - session id.
136
145
  * @param mutate - draft mutator.
137
146
  */
138
147
  updateSessionSnapshot(id: string, mutate: (draft: SessionFixtureSnapshot) => void): Promise<void>;
148
+ /**
149
+ * Publish one complete projection value through the fixture Session face.
150
+ * @param id - session id.
151
+ * @param key - registered projection key.
152
+ * @param value - complete value for that key.
153
+ */
154
+ setProjection(id: string, key: string, value: unknown): Promise<void>;
139
155
  /**
140
156
  * Replace a Session's complete contiguous event window.
141
157
  * @param id - Session identity.
@@ -164,31 +180,33 @@ export declare class TestSessions implements ISessions {
164
180
  */
165
181
  updateSummary(id: string, patch: Partial<Omit<SessionSummary, 'id'>>): Promise<void>;
166
182
  /**
167
- * Switch the current selection (undefined = the no-session empty state).
168
- * @param id - session id to select, or undefined to clear.
169
- */
170
- setCurrent(id: string | undefined): Promise<void>;
171
- /**
172
- * Remove a session: list row, scope fiber, and per-session store instances
173
- * (with persisted state) die together — the same single lifecycle axis the
174
- * production Client Sessions service drives on session death, minus staging.
183
+ * Remove a catalog row and mark its retained Session removed without releasing owners.
175
184
  * @param id - session id.
176
185
  */
177
186
  remove(id: string): Promise<void>;
178
187
  /**
179
- * Resolve (mint on first touch) the session-scoped Cordis context through
180
- * the production `createScope`, so real `scopeOf`/scope-addressed services
181
- * resolve it.
188
+ * Borrow the already-retained session-scoped Cordis context.
182
189
  * @param id - session id.
183
- * @returns the scoped context, or undefined for unknown sessions.
190
+ * @returns the scoped context, or undefined without a live reference.
184
191
  */
185
192
  scope(id: string): AgentContext | undefined;
186
193
  /**
187
194
  * Session assembly binding (inject factories and provide resolvers receive it).
188
195
  * @param id - session id.
189
- * @returns sessionId + behavior face + scoped ctx, or undefined when unknown.
196
+ * @returns the live generation's binding, or undefined without a reference.
190
197
  */
191
198
  binding(id: string): SessionBinding | undefined;
199
+ retain(target: SessionTarget, options?: SessionRetainOptions): SessionReference;
200
+ using<T>(target: SessionTarget, options: SessionRetainOptions, operation: (reference: SessionReference) => T | Promise<T>): Promise<T>;
201
+ retainInfo(id: SessionId): ObservableSnapshot<SessionRetainInfo>;
202
+ /**
203
+ * Retain one fixture Session until the supplied Cordis owner stops.
204
+ * @param ownerCtx - context whose disposal releases the reference.
205
+ * @param target - fixture Session identity or subagent address.
206
+ * @param options - reference source and optional readiness cancellation.
207
+ * @returns the owned reference immediately.
208
+ */
209
+ retainFor(ownerCtx: Context, target: SessionTarget, options?: SessionRetainOptions): SessionReference;
192
210
  /**
193
211
  * Read the session scope tag off a context (service-method boundary mirror).
194
212
  * @param ctx - any client context.
@@ -207,25 +225,14 @@ export declare class TestSessions implements ISessions {
207
225
  * @param impl - implementation that must return an already-added fixture id.
208
226
  */
209
227
  stubCreate(impl: (opts: Parameters<ISessions['create']>[0]) => Promise<SessionId>): void;
210
- /** Create through the installed test behavior and require an addressable binding. */
228
+ /** Create through the installed test behavior and require a catalogued fixture. */
211
229
  create(opts?: Parameters<ISessions['create']>[0]): Promise<SessionId>;
212
- /**
213
- * Service-level selection call (recorded, then applied to the list store
214
- * synchronously — inject callbacks call this outside any act window; the
215
- * store notify is microtask-batched so the next stabilized step observes it).
216
- * @param id - session id.
217
- */
218
- open(id: SessionId): void;
219
- /** Open an existing fixture through its catalog address. */
220
- openSubagent(address: SubagentAddress): void;
221
- /** Resolve the current fixture's retained catalog address. */
230
+ /** Resolve a retained or catalog-derived address independently of a view. */
222
231
  subagentAddress(id: SessionId): SubagentAddress | undefined;
223
232
  /** Record catalog consumption; fixture callers drive snapshots explicitly. */
224
233
  setSubagentCatalogOpen(parentSessionId: SessionId, open: boolean): void;
225
234
  /** Record a catalog refresh; fixture callers drive snapshots explicitly. */
226
235
  refreshSubagents(parentSessionId: SessionId): Promise<void>;
227
- /** Clear the current selection (recorded; the production no-session flow). */
228
- clear(): void;
229
236
  /** Record a list refresh; fixture callers publish list state explicitly. */
230
237
  refresh(): Promise<void>;
231
238
  /**
@@ -265,7 +272,14 @@ export declare class TestSessions implements ISessions {
265
272
  behavior(id: string): FixtureSession;
266
273
  /** Dispose minted scope fibers (runtime dispose path). */
267
274
  disposeScopes(): Promise<void>;
268
- private bindingOf;
275
+ private resolveTarget;
276
+ private retainGeneration;
277
+ private retentionSnapshot;
278
+ private publishRetention;
279
+ private materialize;
280
+ private startOpening;
281
+ private drop;
282
+ private drainDrops;
269
283
  private require;
270
284
  }
271
285
  //# sourceMappingURL=sessions.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-test-runtime",
3
3
  "description": "Browser test runtimes: a jsdom slot bench with test-owned Session and Workspace doubles, and a whole-client tier that boots the web roster through the production bootClient over an endpoint-named Remote mock",
4
- "version": "0.1.6-alpha.1",
4
+ "version": "0.1.6-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -34,25 +34,25 @@
34
34
  "@deepseek-ai/cordis": "^4.0.2",
35
35
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
36
36
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
37
- "@deepseek-ai/dsh-api-gateway": "^0.1.6-alpha.1",
38
- "@deepseek-ai/dsh-api-session-controller": "^0.1.6-alpha.1",
39
- "@deepseek-ai/dsh-client-connection": "^0.1.6-alpha.1",
40
- "@deepseek-ai/dsh-client-hmr": "^0.1.6-alpha.1",
41
- "@deepseek-ai/dsh-client-modules": "^0.1.6-alpha.1",
42
- "@deepseek-ai/dsh-client-store": "^0.1.6-alpha.1",
43
- "@deepseek-ai/dsh-client-ui-chat": "^0.1.6-alpha.1",
44
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.6-alpha.1",
45
- "@deepseek-ai/dsh-attachment": "^0.1.6-alpha.1",
46
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.6-alpha.1",
47
- "@deepseek-ai/dsh-api-workspace-controller": "^0.1.6-alpha.1",
48
- "@deepseek-ai/dsh-client-ui-session": "^0.1.6-alpha.1",
49
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.6-alpha.1",
50
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.6-alpha.1",
51
- "@deepseek-ai/dsh-client-web": "^0.1.6-alpha.1",
52
- "@deepseek-ai/dsh-remote-mock": "^0.1.6-alpha.1",
53
- "@deepseek-ai/dsh-subagent": "^0.1.6-alpha.1",
54
- "@deepseek-ai/dsh-session": "^0.1.6-alpha.1",
55
- "@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.1"
37
+ "@deepseek-ai/dsh-api-gateway": "^0.1.6-alpha.2",
38
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.6-alpha.2",
39
+ "@deepseek-ai/dsh-api-workspace-controller": "^0.1.6-alpha.2",
40
+ "@deepseek-ai/dsh-attachment": "^0.1.6-alpha.2",
41
+ "@deepseek-ai/dsh-client-hmr": "^0.1.6-alpha.2",
42
+ "@deepseek-ai/dsh-client-store": "^0.1.6-alpha.2",
43
+ "@deepseek-ai/dsh-client-ui-chat": "^0.1.6-alpha.2",
44
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.6-alpha.2",
45
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.6-alpha.2",
46
+ "@deepseek-ai/dsh-client-ui-session": "^0.1.6-alpha.2",
47
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.6-alpha.2",
48
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.6-alpha.2",
49
+ "@deepseek-ai/dsh-client-web": "^0.1.6-alpha.2",
50
+ "@deepseek-ai/dsh-remote-mock": "^0.1.6-alpha.2",
51
+ "@deepseek-ai/dsh-session": "^0.1.6-alpha.2",
52
+ "@deepseek-ai/dsh-subagent": "^0.1.6-alpha.2",
53
+ "@deepseek-ai/dsh-client-modules": "^0.1.6-alpha.2",
54
+ "@deepseek-ai/dsh-client-connection": "^0.1.6-alpha.2",
55
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.2"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@types/js-yaml": "^4.0.9",
@@ -63,31 +63,31 @@
63
63
  "@deepseek-ai/cordis": "^4.0.2",
64
64
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
65
65
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
66
- "@deepseek-ai/dsh-api-gateway": "^0.1.6-alpha.1",
67
- "@deepseek-ai/dsh-api-remotes": "^0.1.6-alpha.1",
68
- "@deepseek-ai/dsh-api-session-controller": "^0.1.6-alpha.1",
69
- "@deepseek-ai/dsh-api-workspace-controller": "^0.1.6-alpha.1",
70
- "@deepseek-ai/dsh-attachment": "^0.1.6-alpha.1",
71
- "@deepseek-ai/dsh-base": "^0.1.6-alpha.1",
72
- "@deepseek-ai/dsh-client-connection": "^0.1.6-alpha.1",
73
- "@deepseek-ai/dsh-client-hmr": "^0.1.6-alpha.1",
74
- "@deepseek-ai/dsh-client-locale": "^0.1.6-alpha.1",
75
- "@deepseek-ai/dsh-client-modules": "^0.1.6-alpha.1",
76
- "@deepseek-ai/dsh-client-store": "^0.1.6-alpha.1",
77
- "@deepseek-ai/dsh-client-ui-chat": "^0.1.6-alpha.1",
78
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.6-alpha.1",
79
- "@deepseek-ai/dsh-client-ui-layout": "^0.1.6-alpha.1",
80
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.6-alpha.1",
81
- "@deepseek-ai/dsh-client-ui-session": "^0.1.6-alpha.1",
82
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.6-alpha.1",
83
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.6-alpha.1",
84
- "@deepseek-ai/dsh-client-web": "^0.1.6-alpha.1",
85
- "@deepseek-ai/dsh-remote-mock": "^0.1.6-alpha.1",
86
- "@deepseek-ai/dsh-session": "^0.1.6-alpha.1",
87
- "@deepseek-ai/dsh-subagent": "^0.1.6-alpha.1",
88
- "@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.1",
89
- "@deepseek-ai/dsh-web-app": "^0.1.6-alpha.1",
90
- "@deepseek-ai/dsh-settings": "^0.1.6-alpha.1"
66
+ "@deepseek-ai/dsh-api-remotes": "^0.1.6-alpha.2",
67
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.6-alpha.2",
68
+ "@deepseek-ai/dsh-api-gateway": "^0.1.6-alpha.2",
69
+ "@deepseek-ai/dsh-api-workspace-controller": "^0.1.6-alpha.2",
70
+ "@deepseek-ai/dsh-attachment": "^0.1.6-alpha.2",
71
+ "@deepseek-ai/dsh-base": "^0.1.6-alpha.2",
72
+ "@deepseek-ai/dsh-client-connection": "^0.1.6-alpha.2",
73
+ "@deepseek-ai/dsh-client-hmr": "^0.1.6-alpha.2",
74
+ "@deepseek-ai/dsh-client-locale": "^0.1.6-alpha.2",
75
+ "@deepseek-ai/dsh-client-modules": "^0.1.6-alpha.2",
76
+ "@deepseek-ai/dsh-client-store": "^0.1.6-alpha.2",
77
+ "@deepseek-ai/dsh-client-ui-chat": "^0.1.6-alpha.2",
78
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.6-alpha.2",
79
+ "@deepseek-ai/dsh-client-ui-layout": "^0.1.6-alpha.2",
80
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.6-alpha.2",
81
+ "@deepseek-ai/dsh-client-ui-session": "^0.1.6-alpha.2",
82
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.6-alpha.2",
83
+ "@deepseek-ai/dsh-client-web": "^0.1.6-alpha.2",
84
+ "@deepseek-ai/dsh-remote-mock": "^0.1.6-alpha.2",
85
+ "@deepseek-ai/dsh-session": "^0.1.6-alpha.2",
86
+ "@deepseek-ai/dsh-settings": "^0.1.6-alpha.2",
87
+ "@deepseek-ai/dsh-subagent": "^0.1.6-alpha.2",
88
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.2",
89
+ "@deepseek-ai/dsh-web-app": "^0.1.6-alpha.2",
90
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.6-alpha.2"
91
91
  },
92
92
  "files": [
93
93
  "lib/index.js",