@deepseek-ai/dsh-subagent 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.
@@ -7,24 +7,31 @@ import { z } from 'zod';
7
7
  import type { ChunkedList } from '@deepseek-ai/dsh-chunked-list';
8
8
  import type { Session, SessionEvent, SessionHeader, SessionId, SessionLogOffset } from '@deepseek-ai/dsh-session';
9
9
  import type { SubagentCatalogEntry } from './projection-types.ts';
10
- /** Current payload version for `subagent/catalog` events. */
10
+ /** Catalog payload version emitted by live child creation. */
11
11
  export declare const SUBAGENT_CATALOG_VERSION = 0;
12
- /** One complete parent-owned catalog fact. */
13
- export type SubagentCatalogEvent = {
14
- readonly version: 0;
15
- readonly childId: SessionId;
16
- readonly childCreatedAt: number;
17
- } & ({
12
+ type KnownCatalogMode = {
18
13
  readonly mode: 'one-shot';
19
14
  readonly label?: string;
20
15
  } | {
21
16
  readonly mode: 'continuable';
22
17
  readonly label: string;
23
- });
18
+ };
19
+ /** Parent catalog v0 records known modes; v1 also retains children with unknown mode. */
20
+ export type SubagentCatalogEvent = {
21
+ readonly childId: SessionId;
22
+ readonly childCreatedAt: number;
23
+ } & (({
24
+ readonly version: 0;
25
+ } & KnownCatalogMode) | ({
26
+ readonly version: 1;
27
+ } & (KnownCatalogMode | {
28
+ readonly mode: 'unknown';
29
+ readonly label?: string;
30
+ })));
24
31
  declare module '@deepseek-ai/dsh-session/types' {
25
32
  interface SessionEventMap {
26
33
  /**
27
- * A direct child's complete discovery fact.
34
+ * A direct child's identity and available discovery fields.
28
35
  * @param data - versioned parent-owned catalog entry.
29
36
  */
30
37
  'subagent/catalog': SubagentCatalogEvent;
@@ -41,7 +48,7 @@ declare module '@deepseek-ai/dsh-session-projection/types' {
41
48
  }
42
49
  }
43
50
  /**
44
- * Materialize direct children from their parent's successful creation facts.
51
+ * Materialize complete and unknown-mode child identities from parent catalog events.
45
52
  * @param state - parent catalog fold state.
46
53
  * @returns current direct-child rows in parent catalog event order.
47
54
  */
@@ -5,26 +5,28 @@
5
5
  */
6
6
  import { z } from 'zod';
7
7
  import { appendChunkedList, chunkedListSchema, iterateChunkedList } from '@deepseek-ai/dsh-chunked-list';
8
- /** Current payload version for `subagent/catalog` events. */
8
+ /** Catalog payload version emitted by live child creation. */
9
9
  export const SUBAGENT_CATALOG_VERSION = 0;
10
10
  const sessionIdSchema = z.string();
11
11
  const oneShotCatalogSchema = z.object({
12
- version: z.literal(SUBAGENT_CATALOG_VERSION),
12
+ version: z.union([z.literal(0), z.literal(1)]),
13
13
  childId: sessionIdSchema,
14
14
  childCreatedAt: z.number().int().nonnegative(),
15
15
  mode: z.literal('one-shot'),
16
16
  label: z.string().optional(),
17
17
  }).strict();
18
18
  const continuableCatalogSchema = z.object({
19
- version: z.literal(SUBAGENT_CATALOG_VERSION),
19
+ version: z.union([z.literal(0), z.literal(1)]),
20
20
  childId: sessionIdSchema,
21
21
  childCreatedAt: z.number().int().nonnegative(),
22
22
  mode: z.literal('continuable'),
23
23
  label: z.string(),
24
24
  }).strict();
25
+ const unknownCatalogSchema = oneShotCatalogSchema.extend({ version: z.literal(1), mode: z.literal('unknown') });
25
26
  const eventDataSchema = z.union([
26
27
  oneShotCatalogSchema,
27
28
  continuableCatalogSchema,
29
+ unknownCatalogSchema,
28
30
  ]);
29
31
  const viewSchema = z.array(z.union([
30
32
  oneShotCatalogSchema.omit({ version: true, childId: true, childCreatedAt: true }).extend({
@@ -35,20 +37,24 @@ const viewSchema = z.array(z.union([
35
37
  id: sessionIdSchema,
36
38
  createdAt: continuableCatalogSchema.shape.childCreatedAt,
37
39
  }),
40
+ unknownCatalogSchema.omit({ version: true, childId: true, childCreatedAt: true }).extend({
41
+ id: sessionIdSchema,
42
+ createdAt: unknownCatalogSchema.shape.childCreatedAt,
43
+ }),
38
44
  ]));
39
45
  const stateSchema = z.object({
40
46
  inheritedEventCount: z.number().int().nonnegative(),
41
47
  head: chunkedListSchema(eventDataSchema).optional(),
42
48
  }).strict();
43
49
  /**
44
- * Materialize direct children from their parent's successful creation facts.
50
+ * Materialize complete and unknown-mode child identities from parent catalog events.
45
51
  * @param state - parent catalog fold state.
46
52
  * @returns current direct-child rows in parent catalog event order.
47
53
  */
48
54
  function subagentCatalogEntries(state) {
49
55
  const entries = [];
50
56
  for (const data of iterateChunkedList(state.head)) {
51
- entries.push(data.mode === 'one-shot'
57
+ entries.push(data.mode !== 'continuable'
52
58
  ? {
53
59
  id: data.childId,
54
60
  createdAt: data.childCreatedAt,
@@ -74,7 +80,7 @@ export const subagentCatalogProjectionDefinition = {
74
80
  return state;
75
81
  return { ...state, head: appendChunkedList(state.head, eventDataSchema.parse(event.data)) };
76
82
  },
77
- stateVersion: 2,
83
+ stateVersion: 3,
78
84
  wire: { viewSchema, view: subagentCatalogEntries },
79
85
  };
80
86
  /**
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Client-safe subagent catalog and control vocabulary: the durable direct-child
3
- * row both the listing and the browser catalog answer with, plus the
4
- * browser-facing control surface's prompt, receipts, and failures.
2
+ * Client-safe complete-descendant rows and browser continuation requests,
3
+ * receipts, and failures.
5
4
  *
6
5
  * @module @deepseek-ai/dsh-subagent/control-types
7
6
  */
@@ -17,42 +16,35 @@ import type { SessionId } from '@deepseek-ai/dsh-session/types';
17
16
  * rather than imported.
18
17
  */
19
18
  export type SubagentPromptRequestId = Branded<'session-request-id'>;
20
- /**
21
- * One durable direct-child row, ordered by header `createdAt` with ties broken
22
- * on id. Only a candidate whose durable header has `origin: 'subagent'` is
23
- * interpreted. A served `subagent` projection value produces a `child`; a
24
- * settled candidate whose fold served no identity produces a `diagnostic`; a
25
- * running candidate without one is omitted — its descriptor may not be
26
- * appended yet (the creation window). Diagnostics relay the projection fold's
27
- * outcome or a failed read, never a per-child event scan, and never expose
28
- * model-hidden descriptor content.
29
- */
30
- export type SubagentListEntry = {
31
- readonly kind: 'child';
19
+ /** Shared child fields for complete-descendant listing. */
20
+ export type SubagentCatalogRow = {
32
21
  /** The durable child session id, stable across Activations. */
33
22
  readonly id: SessionId;
34
23
  /**
35
- * Whether the child is live at the moment its reader sampled it: the
36
- * durable listing reads the Session store (`running` means the logical
37
- * record is resident, `inactive` that it exists only in persistence),
38
- * while the browser catalog re-samples the child's Agent driver. Neither
39
- * encodes a durable outcome, and a continuable child may still reject
40
- * delivery as an ownership conflict.
24
+ * Whether complete-descendant listing observed a resident Session. This
25
+ * does not encode a durable outcome or guarantee continuation delivery.
41
26
  */
42
27
  readonly activity: 'running' | 'inactive';
43
- /** Whether a direct descendant has durable `origin: 'subagent'`. */
44
- readonly hasChildren: boolean;
45
28
  } & ({
46
29
  /** A terminal one-shot child. */
47
30
  readonly mode: 'one-shot';
48
- /** Optional durable creation label from the child's descriptor. */
31
+ /** Optional durable creation label from the owning catalog or child descriptor. */
49
32
  readonly label?: string;
50
33
  } | {
51
34
  /** A resumable conversation. */
52
35
  readonly mode: 'continuable';
53
- /** Durable creation label from the child's descriptor. */
36
+ /** Durable creation label from the owning catalog or child descriptor. */
54
37
  readonly label: string;
55
- }) | {
38
+ });
39
+ /**
40
+ * One complete-descendant row. Enumeration may also return diagnostics for
41
+ * child identity observations from the complete Session corpus.
42
+ */
43
+ export type SubagentListEntry = SubagentCatalogRow & {
44
+ readonly kind: 'child';
45
+ /** Whether complete-corpus enumeration observed a direct child. */
46
+ readonly hasChildren: boolean;
47
+ } | {
56
48
  readonly kind: 'diagnostic';
57
49
  /** The candidate's session id. */
58
50
  readonly id: SessionId;
@@ -68,12 +60,7 @@ export type SubagentListEntry = {
68
60
  */
69
61
  readonly reason: 'corrupt' | 'unsupported' | 'unavailable';
70
62
  };
71
- /** Complete direct-child catalog plus the delivery-time parent availability hint. */
72
- export interface SubagentCatalog {
73
- readonly entries: readonly SubagentListEntry[];
74
- readonly parentAvailable: boolean;
75
- }
76
- /** Durable parent/child address that selects subagent transport in the client. */
63
+ /** Durable parent/child browsing address; unknown mode is resolved when child history is read. */
77
64
  export type SubagentAddress = {
78
65
  readonly parentSessionId: SessionId;
79
66
  readonly childSessionId: SessionId;
@@ -81,6 +68,8 @@ export type SubagentAddress = {
81
68
  readonly mode: 'one-shot';
82
69
  } | {
83
70
  readonly mode: 'continuable';
71
+ } | {
72
+ readonly mode: 'unknown';
84
73
  });
85
74
  /** One human message addressed to a continuable direct child. */
86
75
  export interface SubagentPromptRequest {
@@ -110,9 +99,15 @@ export interface SubagentInterruptReceipt {
110
99
  readonly accepted: true;
111
100
  }
112
101
  /**
113
- * Failure details the control surface answers with. Catalog reads, prompts,
114
- * and interrupts share this vocabulary with the Client Remote result.
102
+ * Failure details the control surface answers with. Prompts and interrupts
103
+ * share these failures with the Client Remote result.
115
104
  */
105
+ declare module '@deepseek-ai/dsh-workspace/types' {
106
+ interface SessionActivityKindMap {
107
+ /** A subagent session delegated from this session (at any depth) is inside a turn. */
108
+ subagent: true;
109
+ }
110
+ }
116
111
  declare module '@deepseek-ai/dsh-typert-protocol' {
117
112
  interface RemoteErrorDetailsMap {
118
113
  /** A browser-supplied zone is neither UTC nor a canonical IANA name. */
@@ -139,8 +134,6 @@ declare module '@deepseek-ai/dsh-typert-protocol' {
139
134
  'subagent/delivery-unavailable': {
140
135
  readonly childSessionId: SessionId;
141
136
  };
142
- /** The deployment mounts no session-projection registry. */
143
- 'subagent/projections-unavailable': {};
144
137
  }
145
138
  }
146
139
  //# sourceMappingURL=control-types.d.ts.map
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Client-safe subagent catalog and control vocabulary: the durable direct-child
3
- * row both the listing and the browser catalog answer with, plus the
4
- * browser-facing control surface's prompt, receipts, and failures.
2
+ * Client-safe complete-descendant rows and browser continuation requests,
3
+ * receipts, and failures.
5
4
  *
6
5
  * @module @deepseek-ai/dsh-subagent/control-types
7
6
  */
@@ -1,18 +1,12 @@
1
1
  /**
2
- * Browser-facing subagent control assembly: the catalog view sampled against
3
- * the live Agent registry, one browser zone's validation, and the stable
4
- * failure codes the Remote surface answers with.
2
+ * Browser-facing subagent prompt and interrupt request validation plus the
3
+ * stable prompt failure codes returned by the Remote surface.
5
4
  *
6
5
  * @module @deepseek-ai/dsh-subagent
7
6
  */
8
- import type { Context } from '@deepseek-ai/cordis';
9
7
  import type { SessionId } from '@deepseek-ai/dsh-session';
10
8
  import { z } from 'zod';
11
- import type { SubagentCatalog, SubagentListEntry } from './control-types.ts';
12
9
  declare const CONTROL_ID_SCHEMAS: {
13
- readonly 'subagent.list': z.ZodObject<{
14
- parentSessionId: z.ZodString;
15
- }, z.core.$strip>;
16
10
  readonly 'subagent.prompt': z.ZodObject<{
17
11
  parentSessionId: z.ZodString;
18
12
  childSessionId: z.ZodString;
@@ -36,26 +30,6 @@ declare const CONTROL_ID_SCHEMAS: {
36
30
  * @throws {RemoteError} `gateway/bad-request` with the original Zod issues.
37
31
  */
38
32
  export declare function validateControlRequest(method: keyof typeof CONTROL_ID_SCHEMAS, payload: unknown): void;
39
- /**
40
- * Project one durable listing onto the catalog view, replacing each row's
41
- * store-derived activity with the live Agent driver's status and reporting
42
- * whether the exact parent Agent is live. Without an Agent registry no driver
43
- * runs at all, so every row is inactive and the parent is unavailable.
44
- * @param ctx - Host context that may carry the Agent registry.
45
- * @param parentSessionId - the listed parent.
46
- * @param entries - the durable direct-child listing.
47
- * @returns the catalog view answered to one browser.
48
- */
49
- export declare function catalogView(ctx: Context, parentSessionId: SessionId, entries: readonly SubagentListEntry[]): SubagentCatalog;
50
- /**
51
- * Refuse one catalog read while preserving cancellation and a missing
52
- * projections registry as distinct failures.
53
- * @param error - the thrown value.
54
- * @param signal - the caller's cancellation.
55
- * @returns Never — the refusal is thrown.
56
- * @throws {RemoteError} always.
57
- */
58
- export declare function rejectCatalogRead(error: unknown, signal: AbortSignal): never;
59
33
  /**
60
34
  * Refuse one continuation prompt without exposing provider detail: admission
61
35
  * failures the caller can act on keep their own code, everything else is
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Browser-facing subagent control assembly: the catalog view sampled against
3
- * the live Agent registry, one browser zone's validation, and the stable
4
- * failure codes the Remote surface answers with.
2
+ * Browser-facing subagent prompt and interrupt request validation plus the
3
+ * stable prompt failure codes returned by the Remote surface.
5
4
  *
6
5
  * @module @deepseek-ai/dsh-subagent
7
6
  */
@@ -11,7 +10,6 @@ import { z } from 'zod';
11
10
  import { SubagentError } from "./error.js";
12
11
  const SESSION_ID_SCHEMA = z.string().min(1);
13
12
  const CONTROL_ID_SCHEMAS = {
14
- 'subagent.list': z.object({ parentSessionId: SESSION_ID_SCHEMA }),
15
13
  'subagent.prompt': z.object({
16
14
  parentSessionId: SESSION_ID_SCHEMA,
17
15
  childSessionId: SESSION_ID_SCHEMA,
@@ -37,42 +35,6 @@ export function validateControlRequest(method, payload) {
37
35
  throw new RemoteError('gateway/bad-request', `invalid payload for ${method}`, { issues: parsed.error.issues });
38
36
  }
39
37
  }
40
- /**
41
- * Project one durable listing onto the catalog view, replacing each row's
42
- * store-derived activity with the live Agent driver's status and reporting
43
- * whether the exact parent Agent is live. Without an Agent registry no driver
44
- * runs at all, so every row is inactive and the parent is unavailable.
45
- * @param ctx - Host context that may carry the Agent registry.
46
- * @param parentSessionId - the listed parent.
47
- * @param entries - the durable direct-child listing.
48
- * @returns the catalog view answered to one browser.
49
- */
50
- export function catalogView(ctx, parentSessionId, entries) {
51
- const agents = ctx.get('agents');
52
- return {
53
- entries: entries.map((entry) => entry.kind === 'child'
54
- ? { ...entry, activity: agents?.get(entry.id)?.status === 'running' ? 'running' : 'inactive' }
55
- : entry),
56
- parentAvailable: agents?.get(parentSessionId) !== undefined,
57
- };
58
- }
59
- /**
60
- * Refuse one catalog read while preserving cancellation and a missing
61
- * projections registry as distinct failures.
62
- * @param error - the thrown value.
63
- * @param signal - the caller's cancellation.
64
- * @returns Never — the refusal is thrown.
65
- * @throws {RemoteError} always.
66
- */
67
- export function rejectCatalogRead(error, signal) {
68
- if (isCancellation(error, signal)) {
69
- throw new RemoteError('gateway/cancelled', 'subagent catalog read was cancelled', {}, { cause: error });
70
- }
71
- if (error instanceof SubagentError && error.code === 'SUBAGENT_CONTROL_PROJECTIONS_UNAVAILABLE') {
72
- throw new RemoteError('subagent/projections-unavailable', 'subagent catalog is unavailable: this deployment does not mount the sessionProjections registry (load @deepseek-ai/dsh-session-projection)', {}, { cause: error });
73
- }
74
- throw new RemoteError('gateway/internal', 'subagent catalog read failed', {}, { cause: error });
75
- }
76
38
  /**
77
39
  * Refuse one continuation prompt without exposing provider detail: admission
78
40
  * failures the caller can act on keep their own code, everything else is
@@ -17,9 +17,9 @@
17
17
  * is resident. Continuable children never become a {@link SubagentRun}: the
18
18
  * continuation manager holds their `AgentHandle` directly and orders every turn
19
19
  * through the child's own inbox, so providers contribute only the detached
20
- * creation spec and see no handle, turn, or teardown. Child and descendant
21
- * discovery read the live session store and optional session persistence
22
- * directly and do not require that continuation runtime.
20
+ * creation spec and see no handle, turn, or teardown. Direct-child
21
+ * discovery uses the parent catalog; descendant discovery uses the Session
22
+ * corpus. Neither read requires the continuation runtime.
23
23
  *
24
24
  * Same-process providers are trusted typed collaborators. Requests, provider
25
25
  * descriptors, results, and lifecycle payloads are borrowed immutable values;
@@ -28,6 +28,7 @@
28
28
  *
29
29
  * @module @deepseek-ai/dsh-subagent
30
30
  */
31
+ import type { Volatile } from '@deepseek-ai/cordis';
31
32
  import { Context } from '@deepseek-ai/cordis';
32
33
  import z from '@deepseek-ai/schemastery';
33
34
  import type { Scoped } from '@deepseek-ai/dsh-scope';
@@ -35,9 +36,10 @@ import type { ContentBlock, MessageId } from '@deepseek-ai/dsh-llm';
35
36
  import type { Agent } from '@deepseek-ai/dsh-agent';
36
37
  import type { SessionId } from '@deepseek-ai/dsh-session';
37
38
  import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
38
- import type { SubagentCatalog, SubagentInterruptReceipt, SubagentPromptReceipt, SubagentPromptRequest } from './control-types.ts';
39
+ import type { SubagentInterruptReceipt, SubagentPromptReceipt, SubagentPromptRequest } from './control-types.ts';
39
40
  import type { ContinuableStart, ContinuableStartSpec, SubagentInterruptAuthority, SubagentProvider, SubagentRun, SubagentRunEndInfo, SubagentRunInfo, SubagentSendMessageOptions, SubagentStartRequest } from './types.ts';
40
- import type { SubagentDescendantListEntry, SubagentListEntry } from './list-children.ts';
41
+ import type { SubagentDescendantListEntry } from './list-children.ts';
42
+ import type { SubagentCatalogEntry } from './projection-types.ts';
41
43
  import { deliverSubagentPrompt } from './internal.ts';
42
44
  export type {} from './catalog.ts';
43
45
  export * from './out-of-process.ts';
@@ -46,6 +48,7 @@ export { SubagentRunId } from './types.ts';
46
48
  export type { ContinuableCreateRequest, ContinuableCreateSpec, ContinuableStart, ContinuableStartSpec, ResolvedSubagentStartRequest, SubagentCapabilities, SubagentInterruptAuthority, SubagentProvider, SubagentResult, SubagentRun, SubagentSendMessageOptions, SubagentStartRequest, SubagentStopReason, SubagentStopReasonMap, } from './types.ts';
47
49
  export { foldSubagentDescriptor, snapshotSubagentDescriptor, SUBAGENT_DESCRIPTOR_VERSION, } from './descriptor.ts';
48
50
  export type { ContinuableSubagentDescriptorData, ContinuableSubagentDescriptorInput, OneShotSubagentDescriptorData, OneShotSubagentDescriptorInput, SubagentDescriptorData, SubagentDescriptorInput, } from './descriptor.ts';
51
+ export type { SubagentCatalogEntry } from './projection-types.ts';
49
52
  export { SubagentError } from './error.ts';
50
53
  export { settleRun } from './run-settlement.ts';
51
54
  export { assertSubagentMaxDepth, delegationDepthOf } from './depth.ts';
@@ -98,14 +101,20 @@ declare module '@deepseek-ai/cordis' {
98
101
  /** Host configuration for continuable subagent capacity. */
99
102
  export interface Config {
100
103
  /** Maximum live children sharing uninterrupted continuable parent links; defaults to 8. */
101
- maxActiveSubagents?: number;
104
+ maxActiveSubagents: Volatile<number>;
102
105
  /** Default delegation depth for tools without an explicit limit; defaults to 1. */
103
- maxDepth?: number;
106
+ maxDepth: Volatile<number>;
104
107
  }
105
108
  /** Named provider registry with one-shot runs, durable discovery, and continuable-child operations. */
106
109
  export declare class SubagentRuntime extends TypertRemoteService {
107
- static Config: z<Config>;
108
- private settingsSource;
110
+ private config;
111
+ static Config: z<Schemastery.ObjectS<NoInfer<{
112
+ maxDepth: z<number, number, "volatile-defined">;
113
+ maxActiveSubagents: z<number, number, "volatile-defined">;
114
+ }>>, Schemastery.ObjectT<NoInfer<{
115
+ maxDepth: z<number, number, "volatile-defined">;
116
+ maxActiveSubagents: z<number, number, "volatile-defined">;
117
+ }>>, "plain">;
109
118
  private providers;
110
119
  private continuations;
111
120
  /**
@@ -198,53 +207,31 @@ export declare class SubagentRuntime extends TypertRemoteService {
198
207
  */
199
208
  drainContinuableChildren(parent: Agent, childIds: readonly SessionId[]): Promise<void>;
200
209
  /**
201
- * Enumerate the parent's direct session-backed subagents without loading or
202
- * resuming an Agent. The Session query service supplies one live-preferred
203
- * corpus and shared point observations; the projection cache supplies
204
- * immutable descriptor hits without opening cold logs. The registered
205
- * `subagent` projection remains the sole mode/label classifier.
206
- *
207
- * Every query receives `signal`, and the listing rechecks cancellation
208
- * around each await. Read rejections that settle
209
- * after an abort become a stable `SubagentError` with code `CANCELLED`.
210
- * @param parentSessionId - parent session whose direct children are listed.
211
- * @param signal - caller-owned cancellation forwarded to Session queries
212
- * and observed around every read await.
213
- * @returns children and per-child diagnostics ordered by `createdAt`, then id.
214
- * @throws {@link SubagentError} when the projection registry or the session
215
- * store is not mounted, or the caller cancels the listing.
210
+ * Read the parent's durable direct-child catalog without loading or resuming an Agent.
211
+ * The service owns and releases the live-preferred Session observation.
212
+ * @param parentSessionId - parent whose direct children are requested.
213
+ * @param signal - cancellation forwarded to the Session query.
214
+ * @returns catalog children in parent event order.
215
+ * @throws {@link SubagentError} when query or catalog projection is unavailable.
216
+ * @throws SessionQueryError when the parent cannot be read or the query is cancelled.
216
217
  */
217
- listChildren(parentSessionId: SessionId, signal?: AbortSignal): Promise<SubagentListEntry[]>;
218
+ listChildren(parentSessionId: SessionId, signal?: AbortSignal): Promise<SubagentCatalogEntry[]>;
218
219
  /**
219
220
  * Enumerate the root's complete session-backed subagent tree in stable
220
221
  * pre-order from one live-preferred corpus, without loading or resuming an
221
222
  * Agent. Ordinary sessions and one-shot children remain traversal nodes so
222
223
  * continuable descendants below them are discovered; each returned entry
223
224
  * adds its durable `parentId` and root-relative `depth`. Identity resolution,
224
- * diagnostics, optional persistence, and cancellation follow the same
225
- * projection-backed contract as {@link listChildren}.
225
+ * diagnostics, optional persistence, and cancellation use the registered
226
+ * child identity projection and complete Session corpus.
226
227
  * @param rootSessionId - session whose complete descendant tree is listed.
227
228
  * @param signal - caller-owned cancellation forwarded to persistence reads
228
229
  * and observed around every read await.
229
230
  * @returns children and per-candidate diagnostics with tree position, in
230
231
  * stable pre-order.
231
- * @throws {@link SubagentError} under the same conditions as {@link listChildren}.
232
+ * @throws {@link SubagentError} when listing dependencies are unavailable or the caller cancels.
232
233
  */
233
234
  listDescendants(rootSessionId: SessionId, signal?: AbortSignal): Promise<SubagentDescendantListEntry[]>;
234
- /**
235
- * Remote face of {@link listChildren} for one browser: the durable listing
236
- * plus live Agent activity and the delivery-time parent availability hint.
237
- * Parent availability is a hint; {@link prompt} performs the authoritative
238
- * check. Named apart from the provider-name {@link list}, which owns the
239
- * member.
240
- * @param parentSessionId - parent session whose direct children are listed.
241
- * @param signal - carrier cancellation forwarded to Session queries.
242
- * @returns the catalog view for that parent.
243
- * @throws {RemoteError} `gateway/bad-request` for an empty parent id,
244
- * `gateway/cancelled` for an aborted read, `subagent/projections-unavailable` when
245
- * the deployment has no projection registry, otherwise `gateway/internal`.
246
- */
247
- remoteExportList(parentSessionId: SessionId, signal: AbortSignal): Promise<SubagentCatalog>;
248
235
  /**
249
236
  * Deliver one browser-authored message to a continuable child through the
250
237
  * exact live direct parent, retaining the caller-minted request identity and