@langchain/langgraph-sdk 1.9.1 → 1.9.3-rc.0

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 (69) hide show
  1. package/dist/client/crons/index.cjs +8 -2
  2. package/dist/client/crons/index.cjs.map +1 -1
  3. package/dist/client/crons/index.d.cts +7 -1
  4. package/dist/client/crons/index.d.cts.map +1 -1
  5. package/dist/client/crons/index.d.ts +7 -1
  6. package/dist/client/crons/index.d.ts.map +1 -1
  7. package/dist/client/crons/index.js +8 -2
  8. package/dist/client/crons/index.js.map +1 -1
  9. package/dist/client/stream/index.cjs +103 -14
  10. package/dist/client/stream/index.cjs.map +1 -1
  11. package/dist/client/stream/index.d.cts +21 -1
  12. package/dist/client/stream/index.d.cts.map +1 -1
  13. package/dist/client/stream/index.d.ts +21 -1
  14. package/dist/client/stream/index.d.ts.map +1 -1
  15. package/dist/client/stream/index.js +103 -14
  16. package/dist/client/stream/index.js.map +1 -1
  17. package/dist/client/stream/messages.cjs +50 -10
  18. package/dist/client/stream/messages.cjs.map +1 -1
  19. package/dist/client/stream/messages.d.cts +4 -0
  20. package/dist/client/stream/messages.d.cts.map +1 -1
  21. package/dist/client/stream/messages.d.ts +4 -0
  22. package/dist/client/stream/messages.d.ts.map +1 -1
  23. package/dist/client/stream/messages.js +50 -10
  24. package/dist/client/stream/messages.js.map +1 -1
  25. package/dist/client/stream/transport.d.cts +12 -0
  26. package/dist/client/stream/transport.d.cts.map +1 -1
  27. package/dist/client/stream/transport.d.ts +12 -0
  28. package/dist/client/stream/transport.d.ts.map +1 -1
  29. package/dist/stream/assembled-to-message.cjs +10 -6
  30. package/dist/stream/assembled-to-message.cjs.map +1 -1
  31. package/dist/stream/assembled-to-message.d.cts.map +1 -1
  32. package/dist/stream/assembled-to-message.d.ts.map +1 -1
  33. package/dist/stream/assembled-to-message.js +10 -6
  34. package/dist/stream/assembled-to-message.js.map +1 -1
  35. package/dist/stream/controller.cjs +163 -13
  36. package/dist/stream/controller.cjs.map +1 -1
  37. package/dist/stream/controller.d.cts.map +1 -1
  38. package/dist/stream/controller.d.ts.map +1 -1
  39. package/dist/stream/controller.js +163 -13
  40. package/dist/stream/controller.js.map +1 -1
  41. package/dist/stream/discovery/subagents.cjs +31 -0
  42. package/dist/stream/discovery/subagents.cjs.map +1 -1
  43. package/dist/stream/discovery/subagents.d.cts.map +1 -1
  44. package/dist/stream/discovery/subagents.d.ts.map +1 -1
  45. package/dist/stream/discovery/subagents.js +31 -0
  46. package/dist/stream/discovery/subagents.js.map +1 -1
  47. package/dist/stream/message-reconciliation.cjs +11 -1
  48. package/dist/stream/message-reconciliation.cjs.map +1 -1
  49. package/dist/stream/message-reconciliation.js +11 -1
  50. package/dist/stream/message-reconciliation.js.map +1 -1
  51. package/dist/stream/projections/runtime.cjs +3 -2
  52. package/dist/stream/projections/runtime.cjs.map +1 -1
  53. package/dist/stream/projections/runtime.js +3 -2
  54. package/dist/stream/projections/runtime.js.map +1 -1
  55. package/dist/stream/root-message-projection.cjs +98 -53
  56. package/dist/stream/root-message-projection.cjs.map +1 -1
  57. package/dist/stream/root-message-projection.js +98 -53
  58. package/dist/stream/root-message-projection.js.map +1 -1
  59. package/dist/stream/submit-coordinator.cjs +30 -4
  60. package/dist/stream/submit-coordinator.cjs.map +1 -1
  61. package/dist/stream/submit-coordinator.js +30 -4
  62. package/dist/stream/submit-coordinator.js.map +1 -1
  63. package/dist/ui/manager.cjs +3 -2
  64. package/dist/ui/manager.cjs.map +1 -1
  65. package/dist/ui/manager.d.cts.map +1 -1
  66. package/dist/ui/manager.d.ts.map +1 -1
  67. package/dist/ui/manager.js +3 -2
  68. package/dist/ui/manager.js.map +1 -1
  69. package/package.json +3 -3
@@ -117,6 +117,8 @@ var CronsClient = class extends require_base.BaseClient {
117
117
  /**
118
118
  *
119
119
  * @param query Query options.
120
+ * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.
121
+ * Available in Agent Server version 0.9.0 and later.
120
122
  * @returns List of crons.
121
123
  */
122
124
  async search(query) {
@@ -130,7 +132,8 @@ var CronsClient = class extends require_base.BaseClient {
130
132
  offset: query?.offset ?? 0,
131
133
  sort_by: query?.sortBy ?? void 0,
132
134
  sort_order: query?.sortOrder ?? void 0,
133
- select: query?.select ?? void 0
135
+ select: query?.select ?? void 0,
136
+ metadata: query?.metadata ?? void 0
134
137
  },
135
138
  signal: query?.signal
136
139
  });
@@ -140,6 +143,8 @@ var CronsClient = class extends require_base.BaseClient {
140
143
  *
141
144
  * @param query.assistantId Assistant ID to filter by.
142
145
  * @param query.threadId Thread ID to filter by.
146
+ * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.
147
+ * Available in Agent Server version 0.9.0 and later.
143
148
  * @returns Number of cron jobs matching the criteria.
144
149
  */
145
150
  async count(query) {
@@ -147,7 +152,8 @@ var CronsClient = class extends require_base.BaseClient {
147
152
  method: "POST",
148
153
  json: {
149
154
  assistant_id: query?.assistantId ?? void 0,
150
- thread_id: query?.threadId ?? void 0
155
+ thread_id: query?.threadId ?? void 0,
156
+ metadata: query?.metadata ?? void 0
151
157
  },
152
158
  signal: query?.signal
153
159
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["BaseClient"],"sources":["../../../src/client/crons/index.ts"],"sourcesContent":["import {\n Cron,\n CronSelectField,\n CronCreateForThreadResponse,\n CronCreateResponse,\n CronSortBy,\n SortOrder,\n} from \"../../schema.js\";\nimport type { CronsCreatePayload, CronsUpdatePayload } from \"../../types.js\";\nimport { BaseClient } from \"../base.js\";\n\nexport class CronsClient extends BaseClient {\n /**\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns The created background run.\n */\n async createForThread(\n threadId: string,\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateForThreadResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n on_run_completed: payload?.onRunCompleted,\n };\n return this.fetch<CronCreateForThreadResponse>(\n `/threads/${threadId}/runs/crons`,\n {\n method: \"POST\",\n json,\n signal: payload?.signal,\n }\n );\n }\n\n /**\n *\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns\n */\n async create(\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n on_run_completed: payload?.onRunCompleted,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n };\n return this.fetch<CronCreateResponse>(`/runs/crons`, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Update a cron job by ID.\n *\n * @param cronId The cron ID to update.\n * @param payload Payload for updating a cron job.\n * @returns The updated cron job.\n * ```\n */\n async update(cronId: string, payload?: CronsUpdatePayload): Promise<Cron> {\n const json: Record<string, unknown> = {};\n\n if (payload?.schedule !== undefined) {\n json.schedule = payload.schedule;\n }\n if (payload?.timezone !== undefined) {\n json.timezone = payload.timezone;\n }\n if (payload?.endTime !== undefined) {\n json.end_time = payload.endTime;\n }\n if (payload?.input !== undefined) {\n json.input = payload.input;\n }\n if (payload?.metadata !== undefined) {\n json.metadata = payload.metadata;\n }\n if (payload?.config !== undefined) {\n json.config = payload.config;\n }\n if (payload?.context !== undefined) {\n json.context = payload.context;\n }\n if (payload?.webhook !== undefined) {\n json.webhook = payload.webhook;\n }\n if (payload?.interruptBefore !== undefined) {\n json.interrupt_before = payload.interruptBefore;\n }\n if (payload?.interruptAfter !== undefined) {\n json.interrupt_after = payload.interruptAfter;\n }\n if (payload?.onRunCompleted !== undefined) {\n json.on_run_completed = payload.onRunCompleted;\n }\n if (payload?.enabled !== undefined) {\n json.enabled = payload.enabled;\n }\n if (payload?.streamMode !== undefined) {\n json.stream_mode = payload.streamMode;\n }\n if (payload?.streamSubgraphs !== undefined) {\n json.stream_subgraphs = payload.streamSubgraphs;\n }\n if (payload?.streamResumable !== undefined) {\n json.stream_resumable = payload.streamResumable;\n }\n if (payload?.durability !== undefined) {\n json.durability = payload.durability;\n }\n\n return this.fetch<Cron>(`/runs/crons/${cronId}`, {\n method: \"PATCH\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Delete a cron job by ID.\n *\n * @param cronId Cron ID of Cron job to delete.\n * @param options Optional parameters for the request.\n */\n async delete(\n cronId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n await this.fetch<void>(`/runs/crons/${cronId}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n\n /**\n *\n * @param query Query options.\n * @returns List of crons.\n */\n async search(query?: {\n assistantId?: string;\n threadId?: string;\n enabled?: boolean;\n limit?: number;\n offset?: number;\n sortBy?: CronSortBy;\n sortOrder?: SortOrder;\n select?: CronSelectField[];\n signal?: AbortSignal;\n }): Promise<Cron[]> {\n return this.fetch<Cron[]>(\"/runs/crons/search\", {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n enabled: query?.enabled ?? undefined,\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n sort_by: query?.sortBy ?? undefined,\n sort_order: query?.sortOrder ?? undefined,\n select: query?.select ?? undefined,\n },\n signal: query?.signal,\n });\n }\n\n /**\n * Count cron jobs matching filters.\n *\n * @param query.assistantId Assistant ID to filter by.\n * @param query.threadId Thread ID to filter by.\n * @returns Number of cron jobs matching the criteria.\n */\n async count(query?: {\n assistantId?: string;\n threadId?: string;\n signal?: AbortSignal;\n }): Promise<number> {\n return this.fetch<number>(`/runs/crons/count`, {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n },\n signal: query?.signal,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["BaseClient"],"sources":["../../../src/client/crons/index.ts"],"sourcesContent":["import {\n Cron,\n CronSelectField,\n CronCreateForThreadResponse,\n CronCreateResponse,\n CronSortBy,\n Metadata,\n SortOrder,\n} from \"../../schema.js\";\nimport type { CronsCreatePayload, CronsUpdatePayload } from \"../../types.js\";\nimport { BaseClient } from \"../base.js\";\n\nexport class CronsClient extends BaseClient {\n /**\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns The created background run.\n */\n async createForThread(\n threadId: string,\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateForThreadResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n on_run_completed: payload?.onRunCompleted,\n };\n return this.fetch<CronCreateForThreadResponse>(\n `/threads/${threadId}/runs/crons`,\n {\n method: \"POST\",\n json,\n signal: payload?.signal,\n }\n );\n }\n\n /**\n *\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns\n */\n async create(\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n on_run_completed: payload?.onRunCompleted,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n };\n return this.fetch<CronCreateResponse>(`/runs/crons`, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Update a cron job by ID.\n *\n * @param cronId The cron ID to update.\n * @param payload Payload for updating a cron job.\n * @returns The updated cron job.\n * ```\n */\n async update(cronId: string, payload?: CronsUpdatePayload): Promise<Cron> {\n const json: Record<string, unknown> = {};\n\n if (payload?.schedule !== undefined) {\n json.schedule = payload.schedule;\n }\n if (payload?.timezone !== undefined) {\n json.timezone = payload.timezone;\n }\n if (payload?.endTime !== undefined) {\n json.end_time = payload.endTime;\n }\n if (payload?.input !== undefined) {\n json.input = payload.input;\n }\n if (payload?.metadata !== undefined) {\n json.metadata = payload.metadata;\n }\n if (payload?.config !== undefined) {\n json.config = payload.config;\n }\n if (payload?.context !== undefined) {\n json.context = payload.context;\n }\n if (payload?.webhook !== undefined) {\n json.webhook = payload.webhook;\n }\n if (payload?.interruptBefore !== undefined) {\n json.interrupt_before = payload.interruptBefore;\n }\n if (payload?.interruptAfter !== undefined) {\n json.interrupt_after = payload.interruptAfter;\n }\n if (payload?.onRunCompleted !== undefined) {\n json.on_run_completed = payload.onRunCompleted;\n }\n if (payload?.enabled !== undefined) {\n json.enabled = payload.enabled;\n }\n if (payload?.streamMode !== undefined) {\n json.stream_mode = payload.streamMode;\n }\n if (payload?.streamSubgraphs !== undefined) {\n json.stream_subgraphs = payload.streamSubgraphs;\n }\n if (payload?.streamResumable !== undefined) {\n json.stream_resumable = payload.streamResumable;\n }\n if (payload?.durability !== undefined) {\n json.durability = payload.durability;\n }\n\n return this.fetch<Cron>(`/runs/crons/${cronId}`, {\n method: \"PATCH\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Delete a cron job by ID.\n *\n * @param cronId Cron ID of Cron job to delete.\n * @param options Optional parameters for the request.\n */\n async delete(\n cronId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n await this.fetch<void>(`/runs/crons/${cronId}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n\n /**\n *\n * @param query Query options.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns List of crons.\n */\n async search(query?: {\n assistantId?: string;\n threadId?: string;\n enabled?: boolean;\n limit?: number;\n offset?: number;\n sortBy?: CronSortBy;\n sortOrder?: SortOrder;\n select?: CronSelectField[];\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<Cron[]> {\n return this.fetch<Cron[]>(\"/runs/crons/search\", {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n enabled: query?.enabled ?? undefined,\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n sort_by: query?.sortBy ?? undefined,\n sort_order: query?.sortOrder ?? undefined,\n select: query?.select ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n\n /**\n * Count cron jobs matching filters.\n *\n * @param query.assistantId Assistant ID to filter by.\n * @param query.threadId Thread ID to filter by.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns Number of cron jobs matching the criteria.\n */\n async count(query?: {\n assistantId?: string;\n threadId?: string;\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<number> {\n return this.fetch<number>(`/runs/crons/count`, {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Cron, CronCreateForThreadResponse, CronCreateResponse, CronSelectField, CronSortBy, SortOrder } from "../../schema.cjs";
1
+ import { Cron, CronCreateForThreadResponse, CronCreateResponse, CronSelectField, CronSortBy, Metadata, SortOrder } from "../../schema.cjs";
2
2
  import { CronsCreatePayload, CronsUpdatePayload } from "../../types.cjs";
3
3
  import { BaseClient } from "../base.cjs";
4
4
 
@@ -40,6 +40,8 @@ declare class CronsClient extends BaseClient {
40
40
  /**
41
41
  *
42
42
  * @param query Query options.
43
+ * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.
44
+ * Available in Agent Server version 0.9.0 and later.
43
45
  * @returns List of crons.
44
46
  */
45
47
  search(query?: {
@@ -51,6 +53,7 @@ declare class CronsClient extends BaseClient {
51
53
  sortBy?: CronSortBy;
52
54
  sortOrder?: SortOrder;
53
55
  select?: CronSelectField[];
56
+ metadata?: Metadata;
54
57
  signal?: AbortSignal;
55
58
  }): Promise<Cron[]>;
56
59
  /**
@@ -58,11 +61,14 @@ declare class CronsClient extends BaseClient {
58
61
  *
59
62
  * @param query.assistantId Assistant ID to filter by.
60
63
  * @param query.threadId Thread ID to filter by.
64
+ * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.
65
+ * Available in Agent Server version 0.9.0 and later.
61
66
  * @returns Number of cron jobs matching the criteria.
62
67
  */
63
68
  count(query?: {
64
69
  assistantId?: string;
65
70
  threadId?: string;
71
+ metadata?: Metadata;
66
72
  signal?: AbortSignal;
67
73
  }): Promise<number>;
68
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/client/crons/index.ts"],"mappings":";;;;;cAWa,WAAA,SAAoB,UAAA;;AAAjC;;;;;;EAQQ,eAAA,CACJ,QAAA,UACA,WAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,2BAAA;EAyCA;;;;;;EAHL,MAAA,CACJ,WAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,kBAAA;EA2HA;;;;;;;;EAtFL,MAAA,CAAO,MAAA,UAAgB,OAAA,GAAU,kBAAA,GAAqB,OAAA,CAAQ,IAAA;EA1F3B;;;;;;EA2JnC,MAAA,CACJ,MAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA;EAlJQ;;;;;EA8JL,MAAA,CAAO,KAAA;IACX,WAAA;IACA,QAAA;IACA,OAAA;IACA,KAAA;IACA,MAAA;IACA,MAAA,GAAS,UAAA;IACT,SAAA,GAAY,SAAA;IACZ,MAAA,GAAS,eAAA;IACT,MAAA,GAAS,WAAA;EAAA,IACP,OAAA,CAAQ,IAAA;EAvBW;;;;;;;EA+CjB,KAAA,CAAM,KAAA;IACV,WAAA;IACA,QAAA;IACA,MAAA,GAAS,WAAA;EAAA,IACP,OAAA;AAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/client/crons/index.ts"],"mappings":";;;;;cAYa,WAAA,SAAoB,UAAA;;AAAjC;;;;;;EAQQ,eAAA,CACJ,QAAA,UACA,WAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,2BAAA;EAyCA;;;;;;EAHL,MAAA,CACJ,WAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,kBAAA;EA6HA;;;;;;;;EAxFL,MAAA,CAAO,MAAA,UAAgB,OAAA,GAAU,kBAAA,GAAqB,OAAA,CAAQ,IAAA;EA6HhE;;;;;;EA5DE,MAAA,CACJ,MAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA;EAnJD;;;;;;;EAiKI,MAAA,CAAO,KAAA;IACX,WAAA;IACA,QAAA;IACA,OAAA;IACA,KAAA;IACA,MAAA;IACA,MAAA,GAAS,UAAA;IACT,SAAA,GAAY,SAAA;IACZ,MAAA,GAAS,eAAA;IACT,QAAA,GAAW,QAAA;IACX,MAAA,GAAS,WAAA;EAAA,IACP,OAAA,CAAQ,IAAA;EA1BV;;;;;;;;;EAqDI,KAAA,CAAM,KAAA;IACV,WAAA;IACA,QAAA;IACA,QAAA,GAAW,QAAA;IACX,MAAA,GAAS,WAAA;EAAA,IACP,OAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- import { Cron, CronCreateForThreadResponse, CronCreateResponse, CronSelectField, CronSortBy, SortOrder } from "../../schema.js";
1
+ import { Cron, CronCreateForThreadResponse, CronCreateResponse, CronSelectField, CronSortBy, Metadata, SortOrder } from "../../schema.js";
2
2
  import { CronsCreatePayload, CronsUpdatePayload } from "../../types.js";
3
3
  import { BaseClient } from "../base.js";
4
4
 
@@ -40,6 +40,8 @@ declare class CronsClient extends BaseClient {
40
40
  /**
41
41
  *
42
42
  * @param query Query options.
43
+ * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.
44
+ * Available in Agent Server version 0.9.0 and later.
43
45
  * @returns List of crons.
44
46
  */
45
47
  search(query?: {
@@ -51,6 +53,7 @@ declare class CronsClient extends BaseClient {
51
53
  sortBy?: CronSortBy;
52
54
  sortOrder?: SortOrder;
53
55
  select?: CronSelectField[];
56
+ metadata?: Metadata;
54
57
  signal?: AbortSignal;
55
58
  }): Promise<Cron[]>;
56
59
  /**
@@ -58,11 +61,14 @@ declare class CronsClient extends BaseClient {
58
61
  *
59
62
  * @param query.assistantId Assistant ID to filter by.
60
63
  * @param query.threadId Thread ID to filter by.
64
+ * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.
65
+ * Available in Agent Server version 0.9.0 and later.
61
66
  * @returns Number of cron jobs matching the criteria.
62
67
  */
63
68
  count(query?: {
64
69
  assistantId?: string;
65
70
  threadId?: string;
71
+ metadata?: Metadata;
66
72
  signal?: AbortSignal;
67
73
  }): Promise<number>;
68
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/client/crons/index.ts"],"mappings":";;;;;cAWa,WAAA,SAAoB,UAAA;;AAAjC;;;;;;EAQQ,eAAA,CACJ,QAAA,UACA,WAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,2BAAA;EAyCA;;;;;;EAHL,MAAA,CACJ,WAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,kBAAA;EA2HA;;;;;;;;EAtFL,MAAA,CAAO,MAAA,UAAgB,OAAA,GAAU,kBAAA,GAAqB,OAAA,CAAQ,IAAA;EA1F3B;;;;;;EA2JnC,MAAA,CACJ,MAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA;EAlJQ;;;;;EA8JL,MAAA,CAAO,KAAA;IACX,WAAA;IACA,QAAA;IACA,OAAA;IACA,KAAA;IACA,MAAA;IACA,MAAA,GAAS,UAAA;IACT,SAAA,GAAY,SAAA;IACZ,MAAA,GAAS,eAAA;IACT,MAAA,GAAS,WAAA;EAAA,IACP,OAAA,CAAQ,IAAA;EAvBW;;;;;;;EA+CjB,KAAA,CAAM,KAAA;IACV,WAAA;IACA,QAAA;IACA,MAAA,GAAS,WAAA;EAAA,IACP,OAAA;AAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/client/crons/index.ts"],"mappings":";;;;;cAYa,WAAA,SAAoB,UAAA;;AAAjC;;;;;;EAQQ,eAAA,CACJ,QAAA,UACA,WAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,2BAAA;EAyCA;;;;;;EAHL,MAAA,CACJ,WAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,kBAAA;EA6HA;;;;;;;;EAxFL,MAAA,CAAO,MAAA,UAAgB,OAAA,GAAU,kBAAA,GAAqB,OAAA,CAAQ,IAAA;EA6HhE;;;;;;EA5DE,MAAA,CACJ,MAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA;EAnJD;;;;;;;EAiKI,MAAA,CAAO,KAAA;IACX,WAAA;IACA,QAAA;IACA,OAAA;IACA,KAAA;IACA,MAAA;IACA,MAAA,GAAS,UAAA;IACT,SAAA,GAAY,SAAA;IACZ,MAAA,GAAS,eAAA;IACT,QAAA,GAAW,QAAA;IACX,MAAA,GAAS,WAAA;EAAA,IACP,OAAA,CAAQ,IAAA;EA1BV;;;;;;;;;EAqDI,KAAA,CAAM,KAAA;IACV,WAAA;IACA,QAAA;IACA,QAAA,GAAW,QAAA;IACX,MAAA,GAAS,WAAA;EAAA,IACP,OAAA;AAAA"}
@@ -117,6 +117,8 @@ var CronsClient = class extends BaseClient {
117
117
  /**
118
118
  *
119
119
  * @param query Query options.
120
+ * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.
121
+ * Available in Agent Server version 0.9.0 and later.
120
122
  * @returns List of crons.
121
123
  */
122
124
  async search(query) {
@@ -130,7 +132,8 @@ var CronsClient = class extends BaseClient {
130
132
  offset: query?.offset ?? 0,
131
133
  sort_by: query?.sortBy ?? void 0,
132
134
  sort_order: query?.sortOrder ?? void 0,
133
- select: query?.select ?? void 0
135
+ select: query?.select ?? void 0,
136
+ metadata: query?.metadata ?? void 0
134
137
  },
135
138
  signal: query?.signal
136
139
  });
@@ -140,6 +143,8 @@ var CronsClient = class extends BaseClient {
140
143
  *
141
144
  * @param query.assistantId Assistant ID to filter by.
142
145
  * @param query.threadId Thread ID to filter by.
146
+ * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.
147
+ * Available in Agent Server version 0.9.0 and later.
143
148
  * @returns Number of cron jobs matching the criteria.
144
149
  */
145
150
  async count(query) {
@@ -147,7 +152,8 @@ var CronsClient = class extends BaseClient {
147
152
  method: "POST",
148
153
  json: {
149
154
  assistant_id: query?.assistantId ?? void 0,
150
- thread_id: query?.threadId ?? void 0
155
+ thread_id: query?.threadId ?? void 0,
156
+ metadata: query?.metadata ?? void 0
151
157
  },
152
158
  signal: query?.signal
153
159
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/client/crons/index.ts"],"sourcesContent":["import {\n Cron,\n CronSelectField,\n CronCreateForThreadResponse,\n CronCreateResponse,\n CronSortBy,\n SortOrder,\n} from \"../../schema.js\";\nimport type { CronsCreatePayload, CronsUpdatePayload } from \"../../types.js\";\nimport { BaseClient } from \"../base.js\";\n\nexport class CronsClient extends BaseClient {\n /**\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns The created background run.\n */\n async createForThread(\n threadId: string,\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateForThreadResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n on_run_completed: payload?.onRunCompleted,\n };\n return this.fetch<CronCreateForThreadResponse>(\n `/threads/${threadId}/runs/crons`,\n {\n method: \"POST\",\n json,\n signal: payload?.signal,\n }\n );\n }\n\n /**\n *\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns\n */\n async create(\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n on_run_completed: payload?.onRunCompleted,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n };\n return this.fetch<CronCreateResponse>(`/runs/crons`, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Update a cron job by ID.\n *\n * @param cronId The cron ID to update.\n * @param payload Payload for updating a cron job.\n * @returns The updated cron job.\n * ```\n */\n async update(cronId: string, payload?: CronsUpdatePayload): Promise<Cron> {\n const json: Record<string, unknown> = {};\n\n if (payload?.schedule !== undefined) {\n json.schedule = payload.schedule;\n }\n if (payload?.timezone !== undefined) {\n json.timezone = payload.timezone;\n }\n if (payload?.endTime !== undefined) {\n json.end_time = payload.endTime;\n }\n if (payload?.input !== undefined) {\n json.input = payload.input;\n }\n if (payload?.metadata !== undefined) {\n json.metadata = payload.metadata;\n }\n if (payload?.config !== undefined) {\n json.config = payload.config;\n }\n if (payload?.context !== undefined) {\n json.context = payload.context;\n }\n if (payload?.webhook !== undefined) {\n json.webhook = payload.webhook;\n }\n if (payload?.interruptBefore !== undefined) {\n json.interrupt_before = payload.interruptBefore;\n }\n if (payload?.interruptAfter !== undefined) {\n json.interrupt_after = payload.interruptAfter;\n }\n if (payload?.onRunCompleted !== undefined) {\n json.on_run_completed = payload.onRunCompleted;\n }\n if (payload?.enabled !== undefined) {\n json.enabled = payload.enabled;\n }\n if (payload?.streamMode !== undefined) {\n json.stream_mode = payload.streamMode;\n }\n if (payload?.streamSubgraphs !== undefined) {\n json.stream_subgraphs = payload.streamSubgraphs;\n }\n if (payload?.streamResumable !== undefined) {\n json.stream_resumable = payload.streamResumable;\n }\n if (payload?.durability !== undefined) {\n json.durability = payload.durability;\n }\n\n return this.fetch<Cron>(`/runs/crons/${cronId}`, {\n method: \"PATCH\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Delete a cron job by ID.\n *\n * @param cronId Cron ID of Cron job to delete.\n * @param options Optional parameters for the request.\n */\n async delete(\n cronId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n await this.fetch<void>(`/runs/crons/${cronId}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n\n /**\n *\n * @param query Query options.\n * @returns List of crons.\n */\n async search(query?: {\n assistantId?: string;\n threadId?: string;\n enabled?: boolean;\n limit?: number;\n offset?: number;\n sortBy?: CronSortBy;\n sortOrder?: SortOrder;\n select?: CronSelectField[];\n signal?: AbortSignal;\n }): Promise<Cron[]> {\n return this.fetch<Cron[]>(\"/runs/crons/search\", {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n enabled: query?.enabled ?? undefined,\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n sort_by: query?.sortBy ?? undefined,\n sort_order: query?.sortOrder ?? undefined,\n select: query?.select ?? undefined,\n },\n signal: query?.signal,\n });\n }\n\n /**\n * Count cron jobs matching filters.\n *\n * @param query.assistantId Assistant ID to filter by.\n * @param query.threadId Thread ID to filter by.\n * @returns Number of cron jobs matching the criteria.\n */\n async count(query?: {\n assistantId?: string;\n threadId?: string;\n signal?: AbortSignal;\n }): Promise<number> {\n return this.fetch<number>(`/runs/crons/count`, {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n },\n signal: query?.signal,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/client/crons/index.ts"],"sourcesContent":["import {\n Cron,\n CronSelectField,\n CronCreateForThreadResponse,\n CronCreateResponse,\n CronSortBy,\n Metadata,\n SortOrder,\n} from \"../../schema.js\";\nimport type { CronsCreatePayload, CronsUpdatePayload } from \"../../types.js\";\nimport { BaseClient } from \"../base.js\";\n\nexport class CronsClient extends BaseClient {\n /**\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns The created background run.\n */\n async createForThread(\n threadId: string,\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateForThreadResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n on_run_completed: payload?.onRunCompleted,\n };\n return this.fetch<CronCreateForThreadResponse>(\n `/threads/${threadId}/runs/crons`,\n {\n method: \"POST\",\n json,\n signal: payload?.signal,\n }\n );\n }\n\n /**\n *\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns\n */\n async create(\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n on_run_completed: payload?.onRunCompleted,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n };\n return this.fetch<CronCreateResponse>(`/runs/crons`, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Update a cron job by ID.\n *\n * @param cronId The cron ID to update.\n * @param payload Payload for updating a cron job.\n * @returns The updated cron job.\n * ```\n */\n async update(cronId: string, payload?: CronsUpdatePayload): Promise<Cron> {\n const json: Record<string, unknown> = {};\n\n if (payload?.schedule !== undefined) {\n json.schedule = payload.schedule;\n }\n if (payload?.timezone !== undefined) {\n json.timezone = payload.timezone;\n }\n if (payload?.endTime !== undefined) {\n json.end_time = payload.endTime;\n }\n if (payload?.input !== undefined) {\n json.input = payload.input;\n }\n if (payload?.metadata !== undefined) {\n json.metadata = payload.metadata;\n }\n if (payload?.config !== undefined) {\n json.config = payload.config;\n }\n if (payload?.context !== undefined) {\n json.context = payload.context;\n }\n if (payload?.webhook !== undefined) {\n json.webhook = payload.webhook;\n }\n if (payload?.interruptBefore !== undefined) {\n json.interrupt_before = payload.interruptBefore;\n }\n if (payload?.interruptAfter !== undefined) {\n json.interrupt_after = payload.interruptAfter;\n }\n if (payload?.onRunCompleted !== undefined) {\n json.on_run_completed = payload.onRunCompleted;\n }\n if (payload?.enabled !== undefined) {\n json.enabled = payload.enabled;\n }\n if (payload?.streamMode !== undefined) {\n json.stream_mode = payload.streamMode;\n }\n if (payload?.streamSubgraphs !== undefined) {\n json.stream_subgraphs = payload.streamSubgraphs;\n }\n if (payload?.streamResumable !== undefined) {\n json.stream_resumable = payload.streamResumable;\n }\n if (payload?.durability !== undefined) {\n json.durability = payload.durability;\n }\n\n return this.fetch<Cron>(`/runs/crons/${cronId}`, {\n method: \"PATCH\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Delete a cron job by ID.\n *\n * @param cronId Cron ID of Cron job to delete.\n * @param options Optional parameters for the request.\n */\n async delete(\n cronId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n await this.fetch<void>(`/runs/crons/${cronId}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n\n /**\n *\n * @param query Query options.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns List of crons.\n */\n async search(query?: {\n assistantId?: string;\n threadId?: string;\n enabled?: boolean;\n limit?: number;\n offset?: number;\n sortBy?: CronSortBy;\n sortOrder?: SortOrder;\n select?: CronSelectField[];\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<Cron[]> {\n return this.fetch<Cron[]>(\"/runs/crons/search\", {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n enabled: query?.enabled ?? undefined,\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n sort_by: query?.sortBy ?? undefined,\n sort_order: query?.sortOrder ?? undefined,\n select: query?.select ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n\n /**\n * Count cron jobs matching filters.\n *\n * @param query.assistantId Assistant ID to filter by.\n * @param query.threadId Thread ID to filter by.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns Number of cron jobs matching the criteria.\n */\n async count(query?: {\n assistantId?: string;\n threadId?: string;\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<number> {\n return this.fetch<number>(`/runs/crons/count`, {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n}\n"],"mappings":"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"}
@@ -322,6 +322,7 @@ var ThreadStream = class {
322
322
  #terminalPauseSeq;
323
323
  #lifecycleSubId = null;
324
324
  #lifecycleStartPromise;
325
+ #runStartReady = null;
325
326
  #lifecycleWatcherHandle = null;
326
327
  #lifecycleWatcherStartPromise;
327
328
  #onEventListeners = /* @__PURE__ */ new Set();
@@ -378,11 +379,13 @@ var ThreadStream = class {
378
379
  this.#fetchOption = options.fetch;
379
380
  this.run = { start: async (params) => {
380
381
  this.#prepareForNextRun();
381
- this.#ensureLifecycleTracking();
382
- this.values;
383
- return await this.#send("run.start", {
384
- ...params,
385
- assistant_id: this.assistantId
382
+ return await this.#withRunStartGate(() => {
383
+ this.#ensureLifecycleTracking();
384
+ this.values;
385
+ return this.#send("run.start", {
386
+ ...params,
387
+ assistant_id: this.assistantId
388
+ });
386
389
  });
387
390
  } };
388
391
  this.agent = { getTree: async (params = {}) => await this.#send("agent.getTree", params) };
@@ -440,6 +443,36 @@ var ThreadStream = class {
440
443
  })().catch(() => void 0);
441
444
  }
442
445
  /**
446
+ * Run `operation` (a `run.start` send) while holding the run-start
447
+ * gate. Sets `#runStartReady` before invoking `operation` so any
448
+ * subscription kicked off synchronously inside it (e.g. the lifecycle
449
+ * watcher and the values projection) sees the gate when it eventually
450
+ * reaches `#startLifecycleWatcherSse` / `#reconcileStream` /
451
+ * `#subscribeViaCommand` and awaits it. The gate resolves the moment
452
+ * `operation` settles, so server-side subscribes land immediately
453
+ * after the thread is committed.
454
+ */
455
+ async #withRunStartGate(operation) {
456
+ let resolveGate;
457
+ let rejectGate;
458
+ const gate = new Promise((resolve, reject) => {
459
+ resolveGate = resolve;
460
+ rejectGate = reject;
461
+ });
462
+ this.#runStartReady = gate;
463
+ gate.catch(() => void 0);
464
+ try {
465
+ const result = await operation();
466
+ resolveGate();
467
+ return result;
468
+ } catch (err) {
469
+ rejectGate(err);
470
+ throw err;
471
+ } finally {
472
+ if (this.#runStartReady === gate) this.#runStartReady = null;
473
+ }
474
+ }
475
+ /**
443
476
  * Reset interrupt state and resume all paused user subscriptions.
444
477
  * Called before `run.start()` and `input.respond()` so that
445
478
  * iterators on the same handle pick up the next run's events.
@@ -782,10 +815,12 @@ var ThreadStream = class {
782
815
  */
783
816
  async submitRun(params) {
784
817
  this.#prepareForNextRun();
785
- this.#startLifecycleWatcher();
786
- return await this.#send("run.start", {
787
- ...params,
788
- assistant_id: this.assistantId
818
+ return await this.#withRunStartGate(() => {
819
+ this.#startLifecycleWatcher();
820
+ return this.#send("run.start", {
821
+ ...params,
822
+ assistant_id: this.assistantId
823
+ });
789
824
  });
790
825
  }
791
826
  /**
@@ -851,7 +886,32 @@ var ThreadStream = class {
851
886
  }
852
887
  this.#lifecycleWatcherStartPromise = this.#startLifecycleWatcherWebSocket();
853
888
  }
889
+ /**
890
+ * Public, idempotent entry point to start the wildcard lifecycle
891
+ * watcher.
892
+ *
893
+ * The watcher is normally started lazily by `submitRun` /
894
+ * `respondInput` because for fresh (self-created) threads the SSE
895
+ * stream would 404 if opened before the server has the thread row.
896
+ * Callers that already know the thread exists server-side
897
+ * (`StreamController.hydrate` of an existing thread) can use this
898
+ * to start the watcher up front. The watcher subscribes to wildcard
899
+ * lifecycle events across every namespace, so it sees arbitrarily-
900
+ * nested subagent lifecycle messages that the narrow root content
901
+ * pump (running at `depth: 1`) wouldn't reach — that's what makes
902
+ * subagent discovery work for historical thread loads.
903
+ *
904
+ * Idempotent — repeat calls reuse the in-flight start promise.
905
+ */
906
+ startLifecycleWatcher() {
907
+ this.#startLifecycleWatcher();
908
+ }
854
909
  async #startLifecycleWatcherSse() {
910
+ if (this.#runStartReady != null) try {
911
+ await this.#runStartReady;
912
+ } catch {
913
+ return;
914
+ }
855
915
  const filter = { channels: ["lifecycle", "input"] };
856
916
  let handle;
857
917
  try {
@@ -1125,6 +1185,17 @@ var ThreadStream = class {
1125
1185
  if (this.#rotationState === "rotating") return;
1126
1186
  const desired = this.#computeUnionFilter();
1127
1187
  if (desired == null) return;
1188
+ if (this.#runStartReady != null) {
1189
+ try {
1190
+ await this.#runStartReady;
1191
+ } catch (err) {
1192
+ const normalized = err instanceof Error ? err : /* @__PURE__ */ new Error("run.start failed");
1193
+ this.#rejectUncoveredPending(normalized);
1194
+ return;
1195
+ }
1196
+ if (this.#closed) return;
1197
+ if (this.#rotationState === "rotating") return;
1198
+ }
1128
1199
  if (this.#sharedStreamFilter != null && filterEqual(desired, this.#sharedStreamFilter) && this.#pendingSubResolves.length === 0) {
1129
1200
  this.#resolvePending();
1130
1201
  return;
@@ -1230,10 +1301,11 @@ var ThreadStream = class {
1230
1301
  * matching buffered events on subscribe via the same WebSocket stream.
1231
1302
  */
1232
1303
  async #subscribeViaCommand(params, transform) {
1233
- const result = await this.#send("subscription.subscribe", params);
1234
- const handle = new SubscriptionHandle(result.subscription_id, params, async (id) => {
1235
- this.#subscriptions.delete(id);
1236
- if (!this.#closed) await this.#send("subscription.unsubscribe", { subscription_id: id }).catch((err) => {
1304
+ const placeholderId = `pending:${this.#nextCommandId}:${Math.random().toString(36).slice(2, 10)}`;
1305
+ let resolvedId = placeholderId;
1306
+ const handle = new SubscriptionHandle(placeholderId, params, async () => {
1307
+ this.#subscriptions.delete(resolvedId);
1308
+ if (!this.#closed && resolvedId !== placeholderId) await this.#send("subscription.unsubscribe", { subscription_id: resolvedId }).catch((err) => {
1237
1309
  if (err instanceof require_error.ProtocolError && err.code === "no_such_subscription") return;
1238
1310
  throw err;
1239
1311
  });
@@ -1243,7 +1315,24 @@ var ThreadStream = class {
1243
1315
  registeredAfterSeq: this.ordering.lastSeenSeq,
1244
1316
  seenEventIds: /* @__PURE__ */ new Set()
1245
1317
  });
1246
- this.#subscriptions.set(result.subscription_id, subscription);
1318
+ this.#subscriptions.set(placeholderId, subscription);
1319
+ if (this.#runStartReady != null) try {
1320
+ await this.#runStartReady;
1321
+ } catch (err) {
1322
+ this.#subscriptions.delete(placeholderId);
1323
+ throw err;
1324
+ }
1325
+ let result;
1326
+ try {
1327
+ result = await this.#send("subscription.subscribe", params);
1328
+ } catch (err) {
1329
+ this.#subscriptions.delete(placeholderId);
1330
+ throw err;
1331
+ }
1332
+ this.#subscriptions.delete(placeholderId);
1333
+ resolvedId = result.subscription_id;
1334
+ handle.subscriptionId = resolvedId;
1335
+ this.#subscriptions.set(resolvedId, subscription);
1247
1336
  return handle;
1248
1337
  }
1249
1338
  async #consumeEvents() {