@librechat/agents 3.4.0 → 3.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  2. package/dist/cjs/graphs/Graph.cjs +165 -57
  3. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  4. package/dist/cjs/graphs/MultiAgentGraph.cjs +81 -33
  5. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  6. package/dist/cjs/graphs/applyGraphRuntimeConfig.cjs +14 -0
  7. package/dist/cjs/graphs/applyGraphRuntimeConfig.cjs.map +1 -0
  8. package/dist/cjs/graphs/createGraph.cjs +15 -0
  9. package/dist/cjs/graphs/createGraph.cjs.map +1 -0
  10. package/dist/cjs/graphs/index.cjs +1 -0
  11. package/dist/cjs/hooks/HookRegistry.cjs +83 -0
  12. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  13. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +1 -1
  14. package/dist/cjs/hooks/executeHooks.cjs +60 -14
  15. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  16. package/dist/cjs/hooks/index.cjs.map +1 -1
  17. package/dist/cjs/hooks/types.cjs +2 -0
  18. package/dist/cjs/hooks/types.cjs.map +1 -1
  19. package/dist/cjs/llm/init.cjs +3 -3
  20. package/dist/cjs/llm/invoke.cjs +2 -2
  21. package/dist/cjs/main.cjs +34 -24
  22. package/dist/cjs/messages/format.cjs +40 -23
  23. package/dist/cjs/messages/format.cjs.map +1 -1
  24. package/dist/cjs/run.cjs +130 -53
  25. package/dist/cjs/run.cjs.map +1 -1
  26. package/dist/cjs/session/AgentSession.cjs +37 -2
  27. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  28. package/dist/cjs/session/JsonlSessionStore.cjs +2 -2
  29. package/dist/cjs/stream.cjs +1 -1
  30. package/dist/cjs/summarization/node.cjs +6 -3
  31. package/dist/cjs/summarization/node.cjs.map +1 -1
  32. package/dist/cjs/tools/BashExecutor.cjs +1 -1
  33. package/dist/cjs/tools/CodeExecutor.cjs +1 -1
  34. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +1 -1
  35. package/dist/cjs/tools/SubagentTool.cjs +4 -4
  36. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  37. package/dist/cjs/tools/ToolNode.cjs +321 -95
  38. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  39. package/dist/cjs/tools/ToolSearch.cjs +1 -1
  40. package/dist/cjs/tools/eagerEventExecution.cjs +1 -0
  41. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +3 -3
  42. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +2 -2
  43. package/dist/cjs/tools/search/rerankers.cjs +154 -1
  44. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  45. package/dist/cjs/tools/search/tool.cjs +4 -1
  46. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  47. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +601 -0
  48. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -0
  49. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1114 -233
  50. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  51. package/dist/cjs/tools/subagent/SubagentReplay.cjs +177 -0
  52. package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -0
  53. package/dist/cjs/tools/subagent/childGraphConfig.cjs +278 -0
  54. package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -0
  55. package/dist/cjs/tools/subagent/index.cjs +1 -0
  56. package/dist/cjs/tools/subagent/runtimeLimits.cjs +5 -0
  57. package/dist/cjs/tools/subagent/runtimeLimits.cjs.map +1 -0
  58. package/dist/cjs/tools/toolOutputReferences.cjs +20 -0
  59. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  60. package/dist/cjs/utils/index.cjs +2 -2
  61. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  62. package/dist/esm/graphs/Graph.mjs +165 -57
  63. package/dist/esm/graphs/Graph.mjs.map +1 -1
  64. package/dist/esm/graphs/MultiAgentGraph.mjs +81 -33
  65. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  66. package/dist/esm/graphs/applyGraphRuntimeConfig.mjs +14 -0
  67. package/dist/esm/graphs/applyGraphRuntimeConfig.mjs.map +1 -0
  68. package/dist/esm/graphs/createGraph.mjs +15 -0
  69. package/dist/esm/graphs/createGraph.mjs.map +1 -0
  70. package/dist/esm/graphs/index.mjs +1 -0
  71. package/dist/esm/hooks/HookRegistry.mjs +83 -0
  72. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  73. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +1 -1
  74. package/dist/esm/hooks/executeHooks.mjs +60 -14
  75. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  76. package/dist/esm/hooks/index.mjs.map +1 -1
  77. package/dist/esm/hooks/types.mjs +2 -1
  78. package/dist/esm/hooks/types.mjs.map +1 -1
  79. package/dist/esm/llm/init.mjs +1 -1
  80. package/dist/esm/llm/invoke.mjs +2 -2
  81. package/dist/esm/main.mjs +21 -19
  82. package/dist/esm/messages/format.mjs +40 -23
  83. package/dist/esm/messages/format.mjs.map +1 -1
  84. package/dist/esm/run.mjs +131 -54
  85. package/dist/esm/run.mjs.map +1 -1
  86. package/dist/esm/session/AgentSession.mjs +37 -2
  87. package/dist/esm/session/AgentSession.mjs.map +1 -1
  88. package/dist/esm/session/JsonlSessionStore.mjs +2 -2
  89. package/dist/esm/stream.mjs +1 -1
  90. package/dist/esm/summarization/node.mjs +6 -3
  91. package/dist/esm/summarization/node.mjs.map +1 -1
  92. package/dist/esm/tools/BashExecutor.mjs +1 -1
  93. package/dist/esm/tools/CodeExecutor.mjs +1 -1
  94. package/dist/esm/tools/ProgrammaticToolCalling.mjs +1 -1
  95. package/dist/esm/tools/SubagentTool.mjs +4 -4
  96. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  97. package/dist/esm/tools/ToolNode.mjs +322 -96
  98. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  99. package/dist/esm/tools/ToolSearch.mjs +1 -1
  100. package/dist/esm/tools/eagerEventExecution.mjs +1 -1
  101. package/dist/esm/tools/local/LocalExecutionEngine.mjs +3 -3
  102. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +2 -2
  103. package/dist/esm/tools/search/rerankers.mjs +154 -1
  104. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  105. package/dist/esm/tools/search/tool.mjs +4 -1
  106. package/dist/esm/tools/search/tool.mjs.map +1 -1
  107. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +597 -0
  108. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -0
  109. package/dist/esm/tools/subagent/SubagentExecutor.mjs +1114 -233
  110. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  111. package/dist/esm/tools/subagent/SubagentReplay.mjs +170 -0
  112. package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -0
  113. package/dist/esm/tools/subagent/childGraphConfig.mjs +272 -0
  114. package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -0
  115. package/dist/esm/tools/subagent/index.mjs +1 -0
  116. package/dist/esm/tools/subagent/runtimeLimits.mjs +5 -0
  117. package/dist/esm/tools/subagent/runtimeLimits.mjs.map +1 -0
  118. package/dist/esm/tools/toolOutputReferences.mjs +20 -0
  119. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  120. package/dist/esm/utils/index.mjs +2 -2
  121. package/dist/types/agents/AgentContext.d.ts +1 -1
  122. package/dist/types/graphs/Graph.d.ts +22 -2
  123. package/dist/types/graphs/MultiAgentGraph.d.ts +7 -1
  124. package/dist/types/graphs/applyGraphRuntimeConfig.d.ts +3 -0
  125. package/dist/types/graphs/createGraph.d.ts +13 -0
  126. package/dist/types/graphs/graphFactory.d.ts +13 -0
  127. package/dist/types/graphs/index.d.ts +2 -0
  128. package/dist/types/hooks/HookRegistry.d.ts +10 -1
  129. package/dist/types/hooks/executeHooks.d.ts +5 -1
  130. package/dist/types/hooks/index.d.ts +2 -2
  131. package/dist/types/hooks/types.d.ts +12 -0
  132. package/dist/types/run.d.ts +6 -3
  133. package/dist/types/session/AgentSession.d.ts +1 -0
  134. package/dist/types/tools/SubagentTool.d.ts +1 -1
  135. package/dist/types/tools/ToolNode.d.ts +23 -15
  136. package/dist/types/tools/search/rerankers.d.ts +28 -0
  137. package/dist/types/tools/search/types.d.ts +38 -1
  138. package/dist/types/tools/subagent/SubagentExecutionRegistry.d.ts +171 -0
  139. package/dist/types/tools/subagent/SubagentExecutor.d.ts +70 -36
  140. package/dist/types/tools/subagent/SubagentReplay.d.ts +85 -0
  141. package/dist/types/tools/subagent/childGraphConfig.d.ts +37 -0
  142. package/dist/types/tools/subagent/index.d.ts +1 -1
  143. package/dist/types/tools/subagent/runtimeLimits.d.ts +4 -0
  144. package/dist/types/tools/toolOutputReferences.d.ts +12 -0
  145. package/dist/types/types/graph.d.ts +189 -24
  146. package/dist/types/types/hitl.d.ts +15 -0
  147. package/package.json +8 -2
  148. package/src/agents/AgentContext.ts +1 -1
  149. package/src/graphs/Graph.ts +349 -104
  150. package/src/graphs/MultiAgentGraph.ts +149 -47
  151. package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +48 -9
  152. package/src/graphs/__tests__/Graph.contextOverflow.test.ts +1 -1
  153. package/src/graphs/__tests__/Graph.subagentResumeState.test.ts +80 -0
  154. package/src/graphs/__tests__/MultiAgentGraph.test.ts +86 -0
  155. package/src/graphs/__tests__/composition.smoke.test.ts +152 -0
  156. package/src/graphs/__tests__/createGraph.test.ts +206 -0
  157. package/src/graphs/applyGraphRuntimeConfig.ts +25 -0
  158. package/src/graphs/createGraph.ts +32 -0
  159. package/src/graphs/graphFactory.ts +12 -0
  160. package/src/graphs/index.ts +2 -0
  161. package/src/hooks/HookRegistry.ts +151 -1
  162. package/src/hooks/__tests__/HookRegistry.test.ts +96 -0
  163. package/src/hooks/__tests__/executeHooks.test.ts +160 -0
  164. package/src/hooks/executeHooks.ts +133 -15
  165. package/src/hooks/index.ts +3 -1
  166. package/src/hooks/types.ts +16 -0
  167. package/src/messages/format.ts +54 -26
  168. package/src/messages/formatAgentMessages.reducer.test.ts +162 -0
  169. package/src/messages/formatAgentMessages.steer.test.ts +16 -11
  170. package/src/messages/formatAgentMessages.test.ts +7 -2
  171. package/src/run.ts +214 -56
  172. package/src/session/AgentSession.ts +52 -2
  173. package/src/session/__tests__/JsonlSessionStore.test.ts +53 -0
  174. package/src/specs/graph-subagent.live.test.ts +242 -0
  175. package/src/specs/graph-subagent.test.ts +322 -0
  176. package/src/specs/langfuse-routing.integration.test.ts +120 -1
  177. package/src/specs/subagent.test.ts +130 -4
  178. package/src/summarization/__tests__/node.test.ts +32 -14
  179. package/src/summarization/node.ts +15 -11
  180. package/src/tools/SubagentTool.ts +4 -4
  181. package/src/tools/ToolNode.ts +643 -157
  182. package/src/tools/__tests__/SubagentExecutor.test.ts +740 -15
  183. package/src/tools/__tests__/SubagentReplay.test.ts +329 -0
  184. package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +208 -2
  185. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +512 -2
  186. package/src/tools/__tests__/hitl.test.ts +234 -5
  187. package/src/tools/__tests__/subagentHooks.test.ts +1126 -61
  188. package/src/tools/__tests__/toolOutputReferences.test.ts +19 -2
  189. package/src/tools/search/rag-api-reranker.test.ts +891 -0
  190. package/src/tools/search/rerankers.ts +260 -0
  191. package/src/tools/search/tool.ts +6 -0
  192. package/src/tools/search/types.ts +45 -1
  193. package/src/tools/subagent/SubagentExecutionRegistry.ts +1159 -0
  194. package/src/tools/subagent/SubagentExecutor.ts +2232 -312
  195. package/src/tools/subagent/SubagentReplay.ts +584 -0
  196. package/src/tools/subagent/__tests__/SubagentExecutionRegistry.test.ts +637 -0
  197. package/src/tools/subagent/__tests__/SubagentExecutor.lazy.test.ts +3054 -0
  198. package/src/tools/subagent/__tests__/childGraphConfig.test.ts +521 -0
  199. package/src/tools/subagent/childGraphConfig.ts +694 -0
  200. package/src/tools/subagent/index.ts +6 -0
  201. package/src/tools/subagent/runtimeLimits.ts +7 -0
  202. package/src/tools/toolOutputReferences.ts +40 -1
  203. package/src/types/graph.ts +222 -24
  204. package/src/types/hitl.ts +16 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubagentExecutionRegistry.cjs","names":["getSubagentResumeManifest","SUBAGENT_RESUME_ATTEMPT_CONFIG_KEY"],"sources":["../../../../src/tools/subagent/SubagentExecutionRegistry.ts"],"sourcesContent":["import type { RunnableConfig } from '@langchain/core/runnables';\nimport type { SubagentResumeExecution } from './SubagentReplay';\nimport {\n getSubagentResumeManifest,\n SUBAGENT_PARENT_BATCH_CONFIG_KEY,\n SUBAGENT_RESUME_ATTEMPT_CONFIG_KEY,\n} from './SubagentReplay';\n\nconst SUBAGENT_THREAD_ID_PREFIX = 'subagent:';\nconst SUBAGENT_EXECUTION_INVALIDATED_MESSAGE =\n 'Subagent execution was invalidated.';\n\nexport type SubagentExecutionAddressInput = {\n threadId?: string;\n parentToolCallId: string;\n parentConfigurable?: Record<string, unknown>;\n};\n\nexport type SubagentExecutionAddress = Readonly<{\n key: string;\n baseChildThreadId: string;\n branchChildThreadId: string;\n currentChildRunId: string;\n explicitResumeAttempt: boolean;\n parentToolCallId: string;\n resumeAttemptId: string;\n}>;\n\nexport type SubagentExecutionIdentity = Readonly<{\n childRunId: string;\n childThreadId: string;\n approvalExecutionScope: string;\n}>;\n\nexport interface SubagentExecutionPreparationLease {\n readonly ownsCheckpoint: boolean;\n readonly ownsCreatedCheckpoint: boolean;\n readonly ownsApprovalScope: boolean;\n readonly ownsCreatedApprovalScope: boolean;\n assertOwned(): void;\n markCheckpointCreated(cleanup: () => Promise<void>): void;\n markApprovalScopeCreated(cleanup: () => Promise<void>): void;\n release(): void;\n rollback(\n cause: unknown,\n cleanup?: (lease: SubagentExecutionPreparationLease) => Promise<void>\n ): Promise<never>;\n}\n\nexport type PreparedSubagentExecutionIdentity = Readonly<{\n identity: SubagentExecutionIdentity;\n lease: SubagentExecutionPreparationLease;\n commit?: (lease: SubagentExecutionPreparationLease) => void;\n rollback?: (lease: SubagentExecutionPreparationLease) => Promise<void>;\n}>;\n\nexport type SubagentDefinitionBinding = Readonly<{\n subagentType?: string;\n configId?: string;\n}>;\n\nexport type SubagentInvocationBinding = Readonly<{\n description: string;\n subagentType: string;\n configId?: string;\n}>;\n\nexport type SubagentSettlementBinding = Readonly<{\n definitionAuthority: 'provisional' | 'effective';\n fingerprint: string;\n invocation: SubagentInvocationBinding;\n subagentType?: string;\n configId?: string;\n}>;\n\nexport type SubagentExecutionPhase =\n | 'registered'\n | 'active'\n | 'interrupted'\n | 'failed'\n | 'completed'\n | 'invalidated';\n\nexport interface ExecutionSnapshot<TResult, TResolvedConfig, TActiveRun> {\n readonly address: SubagentExecutionAddress;\n readonly phase: SubagentExecutionPhase;\n readonly identity?: SubagentExecutionIdentity;\n readonly binding?: SubagentDefinitionBinding;\n readonly invocation?: SubagentInvocationBinding;\n readonly settlement?: SubagentSettlementBinding;\n readonly resumeExecution?: SubagentResumeExecution;\n readonly activeRun?: TActiveRun;\n readonly completedResult?: TResult;\n readonly resolvedConfig?: TResolvedConfig;\n readonly started: boolean;\n readonly completed: boolean;\n readonly resolvingIdentity: boolean;\n readonly resolving: boolean;\n readonly executing: boolean;\n readonly settling: boolean;\n readonly settled: boolean;\n}\n\nexport type SubagentExecutionRegistryOptions = {\n parentRunId: string;\n parentAgentId?: string;\n durable: boolean;\n};\n\ntype ResumeSelection = {\n parentToolCallIds?: ReadonlySet<string>;\n config?: RunnableConfig;\n};\n\ntype OwnedPreparationResource = {\n status: 'owned';\n token: number;\n created: boolean;\n cleanup?: () => Promise<void>;\n};\n\ntype CleaningPreparationResource = {\n status: 'cleaning';\n token: number;\n};\n\ntype PreparationResourceState =\n | OwnedPreparationResource\n | CleaningPreparationResource;\n\nfunction getPreparationResourceKey(\n kind: 'checkpoint' | 'approval',\n identity: string\n): string {\n return JSON.stringify([kind, identity]);\n}\n\nfunction attachRollbackError(cause: unknown, rollbackError: unknown): void {\n if (!(cause instanceof Error)) {\n return;\n }\n try {\n Object.defineProperty(cause, 'rollbackError', {\n configurable: true,\n value: rollbackError,\n });\n } catch {\n return;\n }\n}\n\nclass PreparationLease implements SubagentExecutionPreparationLease {\n constructor(\n private readonly owners: Map<string, PreparationResourceState>,\n private readonly token: number,\n private readonly checkpointKey: string,\n private readonly approvalKey: string\n ) {}\n\n get ownsCheckpoint(): boolean {\n return this.owns(this.checkpointKey);\n }\n\n get ownsCreatedCheckpoint(): boolean {\n return this.isCreated(this.checkpointKey);\n }\n\n get ownsApprovalScope(): boolean {\n return this.owns(this.approvalKey);\n }\n\n get ownsCreatedApprovalScope(): boolean {\n return this.isCreated(this.approvalKey);\n }\n\n assertOwned(): void {\n if (!this.owns(this.checkpointKey) || !this.owns(this.approvalKey)) {\n throw new SubagentExecutionInvalidatedError();\n }\n }\n\n markCheckpointCreated(cleanup: () => Promise<void>): void {\n this.markCreated(this.checkpointKey, cleanup);\n }\n\n markApprovalScopeCreated(cleanup: () => Promise<void>): void {\n this.markCreated(this.approvalKey, cleanup);\n }\n\n release(): void {\n this.releaseResource(this.checkpointKey);\n this.releaseResource(this.approvalKey);\n }\n\n async rollback(\n cause: unknown,\n cleanup?: (lease: SubagentExecutionPreparationLease) => Promise<void>\n ): Promise<never> {\n let rollbackError: unknown;\n let rollbackFailed = false;\n try {\n await cleanup?.(this);\n } catch (error) {\n rollbackError = error;\n rollbackFailed = true;\n }\n const resourceRollback = await this.rollbackOwnedResources();\n if (!rollbackFailed && resourceRollback.failed) {\n rollbackError = resourceRollback.error;\n rollbackFailed = true;\n }\n try {\n if (rollbackFailed) {\n attachRollbackError(cause, rollbackError);\n }\n } finally {\n this.release();\n }\n throw cause;\n }\n\n private owns(key: string): boolean {\n const owner = this.owners.get(key);\n return owner?.status === 'owned' && owner.token === this.token;\n }\n\n private isCreated(key: string): boolean {\n const owner = this.owners.get(key);\n return (\n owner?.status === 'owned' && owner.token === this.token && owner.created\n );\n }\n\n private markCreated(key: string, cleanup: () => Promise<void>): void {\n const owner = this.owners.get(key);\n if (owner?.status !== 'owned' || owner.token !== this.token) {\n throw new SubagentExecutionInvalidatedError();\n }\n owner.created = true;\n owner.cleanup = cleanup;\n }\n\n private async rollbackOwnedResources(): Promise<{\n failed: boolean;\n error?: unknown;\n }> {\n const cleanups: Array<{\n key: string;\n state: CleaningPreparationResource;\n cleanup: () => Promise<void>;\n }> = [];\n for (const key of [this.checkpointKey, this.approvalKey]) {\n const owner = this.owners.get(key);\n if (owner?.status !== 'owned' || owner.token !== this.token) {\n continue;\n }\n if (!owner.created || owner.cleanup == null) {\n this.owners.delete(key);\n continue;\n }\n const state: CleaningPreparationResource = {\n status: 'cleaning',\n token: this.token,\n };\n this.owners.set(key, state);\n cleanups.push({ key, state, cleanup: owner.cleanup });\n }\n const results = await Promise.all(\n cleanups.map(({ key, state, cleanup }) =>\n this.cleanResource(key, state, cleanup)\n )\n );\n return results.find((result) => result.failed) ?? { failed: false };\n }\n\n private async cleanResource(\n key: string,\n state: CleaningPreparationResource,\n cleanup: () => Promise<void>\n ): Promise<{ failed: boolean; error?: unknown }> {\n try {\n await cleanup();\n return { failed: false };\n } catch (error) {\n return { failed: true, error };\n } finally {\n if (this.owners.get(key) === state) {\n this.owners.delete(key);\n }\n }\n }\n\n private releaseResource(key: string): void {\n const owner = this.owners.get(key);\n if (owner?.status === 'owned' && owner.token === this.token) {\n this.owners.delete(key);\n }\n }\n}\n\nfunction getConfigurable(\n config?: RunnableConfig\n): Record<string, unknown> | undefined {\n return config?.configurable as Record<string, unknown> | undefined;\n}\n\nfunction getConfigurableString(\n configurable: Record<string, unknown> | undefined,\n key: string\n): string | undefined {\n const value = configurable?.[key];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction encodeThreadIdentity(identity: string[]): string {\n return `${SUBAGENT_THREAD_ID_PREFIX}${Buffer.from(\n JSON.stringify(identity)\n ).toString('base64url')}`;\n}\n\nfunction assertSameIdentity(\n current: SubagentExecutionIdentity,\n next: SubagentExecutionIdentity\n): void {\n if (\n current.childRunId === next.childRunId &&\n current.childThreadId === next.childThreadId &&\n current.approvalExecutionScope === next.approvalExecutionScope\n ) {\n return;\n }\n throw new Error('Subagent execution identity cannot change after binding.');\n}\n\nfunction assertCompatibleResumeExecution(\n current: SubagentResumeExecution,\n next: SubagentResumeExecution\n): void {\n if (\n current.parentToolCallId === next.parentToolCallId &&\n current.childRunId === next.childRunId &&\n current.subagentType === next.subagentType &&\n current.configId === next.configId\n ) {\n return;\n }\n throw new Error('Subagent resume source cannot change after binding.');\n}\n\nfunction assertSameInvocation(\n current: SubagentInvocationBinding,\n next: SubagentInvocationBinding\n): void {\n if (\n current.description === next.description &&\n current.subagentType === next.subagentType &&\n current.configId === next.configId\n ) {\n return;\n }\n throw new SubagentInvocationBindingError();\n}\n\nfunction assertSameSettlement(\n current: SubagentSettlementBinding,\n next: SubagentSettlementBinding\n): void {\n if (\n current.definitionAuthority === next.definitionAuthority &&\n current.fingerprint === next.fingerprint &&\n current.subagentType === next.subagentType &&\n current.configId === next.configId\n ) {\n return;\n }\n throw new SubagentSettlementBindingError();\n}\n\nfunction getAbortReason(signal: AbortSignal): unknown {\n return signal.reason ?? new Error('Subagent execution aborted.');\n}\n\nexport function getSubagentApprovalExecutionScope(\n childRunId: string,\n resumeAttemptId: string\n): string {\n return `subagent-approval:${Buffer.from(\n JSON.stringify([childRunId, resumeAttemptId])\n ).toString('base64url')}`;\n}\n\nexport class SubagentExecutionInvalidatedError extends Error {\n constructor() {\n super(SUBAGENT_EXECUTION_INVALIDATED_MESSAGE);\n this.name = 'SubagentExecutionInvalidatedError';\n }\n}\n\nexport class SubagentDefinitionBindingError extends Error {\n constructor() {\n super('Subagent effective definition binding cannot change.');\n this.name = 'SubagentDefinitionBindingError';\n }\n}\n\nexport class SubagentInvocationBindingError extends Error {\n constructor() {\n super('Subagent invocation binding cannot change.');\n this.name = 'SubagentInvocationBindingError';\n }\n}\n\nexport class SubagentSettlementBindingError extends Error {\n constructor() {\n super('Subagent settlement binding cannot change.');\n this.name = 'SubagentSettlementBindingError';\n }\n}\n\n/** In-process source of truth for one Durable Subagent Execution. */\nexport class SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput = never,\n> {\n private identityValue?: SubagentExecutionIdentity;\n private bindingValue?: SubagentDefinitionBinding;\n private bindingAuthority?: 'provisional' | 'effective';\n private invocationValue?: SubagentInvocationBinding;\n private settlementValue?: SubagentSettlementBinding;\n private settledOutputValue?: TSettledOutput;\n private resumeExecutionValue?: SubagentResumeExecution;\n private activeRunValue?: TActiveRun;\n private completedResultValue?: TResult;\n private resolvedConfigValue?: TResolvedConfig;\n private pendingIdentityResolution?: Promise<SubagentExecutionIdentity>;\n private pendingConfigResolution?: Promise<TResolvedConfig>;\n private pendingExecution?: Promise<TResult>;\n private pendingSettlement?: Promise<void>;\n private phaseValue: SubagentExecutionPhase = 'registered';\n private startedValue = false;\n private completedValue = false;\n private settledValue = false;\n\n constructor(\n readonly address: SubagentExecutionAddress,\n resumeExecution?: SubagentResumeExecution\n ) {\n this.resumeExecutionValue = resumeExecution;\n }\n\n get snapshot(): ExecutionSnapshot<TResult, TResolvedConfig, TActiveRun> {\n return {\n address: this.address,\n phase: this.phaseValue,\n ...(this.identityValue == null ? {} : { identity: this.identityValue }),\n ...(this.bindingValue == null ? {} : { binding: this.bindingValue }),\n ...(this.invocationValue == null\n ? {}\n : { invocation: this.invocationValue }),\n ...(this.settlementValue == null\n ? {}\n : { settlement: this.settlementValue }),\n ...(this.resumeExecutionValue == null\n ? {}\n : { resumeExecution: this.resumeExecutionValue }),\n ...(this.activeRunValue == null\n ? {}\n : { activeRun: this.activeRunValue }),\n ...(this.completedResultValue == null\n ? {}\n : { completedResult: this.completedResultValue }),\n ...(this.resolvedConfigValue == null\n ? {}\n : { resolvedConfig: this.resolvedConfigValue }),\n started: this.startedValue,\n completed: this.completedValue,\n resolvingIdentity: this.pendingIdentityResolution != null,\n resolving: this.pendingConfigResolution != null,\n executing: this.pendingExecution != null,\n settling: this.pendingSettlement != null,\n settled: this.settledValue,\n };\n }\n\n get identity(): SubagentExecutionIdentity | undefined {\n return this.identityValue;\n }\n\n get binding(): SubagentDefinitionBinding | undefined {\n return this.bindingValue;\n }\n\n get resumeExecution(): SubagentResumeExecution | undefined {\n return this.resumeExecutionValue;\n }\n\n get invocation(): SubagentInvocationBinding | undefined {\n return this.invocationValue;\n }\n\n get activeRun(): TActiveRun | undefined {\n return this.activeRunValue;\n }\n\n get settlement(): SubagentSettlementBinding | undefined {\n return this.settlementValue;\n }\n\n get settledOutput(): TSettledOutput | undefined {\n return this.settledOutputValue;\n }\n\n get completedResult(): TResult | undefined {\n return this.completedResultValue;\n }\n\n get resolvedConfig(): TResolvedConfig | undefined {\n return this.resolvedConfigValue;\n }\n\n get started(): boolean {\n return this.startedValue;\n }\n\n get completed(): boolean {\n return this.completedValue;\n }\n\n assertUsable(signal?: AbortSignal): void {\n if (signal?.aborted === true) {\n throw getAbortReason(signal);\n }\n if (this.phaseValue === 'invalidated') {\n throw new SubagentExecutionInvalidatedError();\n }\n }\n\n attachResumeExecution(resumeExecution?: SubagentResumeExecution): void {\n if (resumeExecution == null) {\n return;\n }\n if (this.resumeExecutionValue != null) {\n assertCompatibleResumeExecution(\n this.resumeExecutionValue,\n resumeExecution\n );\n return;\n }\n this.resumeExecutionValue = resumeExecution;\n }\n\n bindIdentity(identity: SubagentExecutionIdentity): void {\n this.assertUsable();\n if (this.identityValue != null) {\n assertSameIdentity(this.identityValue, identity);\n return;\n }\n this.identityValue = Object.freeze({ ...identity });\n }\n\n resolveIdentity(\n resolve: () => Promise<PreparedSubagentExecutionIdentity>\n ): Promise<SubagentExecutionIdentity> {\n this.assertUsable();\n if (this.identityValue != null) {\n return Promise.resolve(this.identityValue);\n }\n if (this.pendingIdentityResolution != null) {\n return this.pendingIdentityResolution;\n }\n const pending = Promise.resolve()\n .then(() => {\n this.assertCurrentIdentityResolution(pending);\n return resolve();\n })\n .then(async (resolution): Promise<SubagentExecutionIdentity> => {\n try {\n this.assertCurrentIdentityResolution(pending);\n resolution.lease.assertOwned();\n resolution.commit?.(resolution.lease);\n this.assertCurrentIdentityResolution(pending);\n resolution.lease.assertOwned();\n this.bindIdentity(resolution.identity);\n const boundIdentity = this.identityValue;\n if (boundIdentity == null) {\n throw new SubagentExecutionInvalidatedError();\n }\n resolution.lease.release();\n return boundIdentity;\n } catch (error) {\n return resolution.lease.rollback(\n error,\n async (lease): Promise<void> => {\n await resolution.rollback?.(lease);\n }\n );\n }\n })\n .finally(() => {\n if (this.pendingIdentityResolution === pending) {\n this.pendingIdentityResolution = undefined;\n }\n });\n this.pendingIdentityResolution = pending;\n return pending;\n }\n\n bindDefinition(\n binding: SubagentDefinitionBinding,\n authority: 'provisional' | 'effective'\n ): void {\n this.assertUsable();\n if (this.bindingAuthority === 'effective') {\n if (authority === 'provisional') {\n return;\n }\n if (\n this.bindingValue?.subagentType !== binding.subagentType ||\n this.bindingValue?.configId !== binding.configId\n ) {\n throw new SubagentDefinitionBindingError();\n }\n return;\n }\n if (authority === 'provisional' && this.bindingValue != null) {\n return;\n }\n this.bindingValue = Object.freeze({ ...binding });\n this.bindingAuthority = authority;\n }\n\n resolveConfig(\n resolve: () => Promise<TResolvedConfig>,\n signal: AbortSignal\n ): Promise<TResolvedConfig> {\n this.assertUsable(signal);\n if (this.resolvedConfigValue != null) {\n return Promise.resolve(this.resolvedConfigValue);\n }\n if (this.pendingConfigResolution != null) {\n return this.pendingConfigResolution;\n }\n const pending = Promise.resolve()\n .then(resolve)\n .then((resolvedConfig): TResolvedConfig => {\n this.assertUsable(signal);\n if (this.pendingConfigResolution !== pending) {\n throw new SubagentExecutionInvalidatedError();\n }\n this.resolvedConfigValue = resolvedConfig;\n return resolvedConfig;\n })\n .finally(() => {\n if (this.pendingConfigResolution === pending) {\n this.pendingConfigResolution = undefined;\n }\n });\n this.pendingConfigResolution = pending;\n return pending;\n }\n\n execute(\n invocation: SubagentInvocationBinding,\n execute: () => Promise<TResult>\n ): Promise<TResult> {\n this.bindDefinition(\n {\n subagentType: invocation.subagentType,\n ...(invocation.configId == null\n ? {}\n : { configId: invocation.configId }),\n },\n 'effective'\n );\n this.bindInvocation(invocation);\n if (this.pendingExecution != null) {\n return this.pendingExecution;\n }\n const pending = Promise.resolve()\n .then(execute)\n .finally(() => {\n if (this.pendingExecution === pending) {\n this.pendingExecution = undefined;\n }\n });\n this.pendingExecution = pending;\n return pending;\n }\n\n settle(\n settlement: SubagentSettlementBinding,\n settledOutput: TSettledOutput,\n persist: () => Promise<void>\n ): Promise<void> {\n this.bindDefinition(\n {\n ...(settlement.subagentType == null\n ? {}\n : { subagentType: settlement.subagentType }),\n ...(settlement.configId == null\n ? {}\n : { configId: settlement.configId }),\n },\n settlement.definitionAuthority\n );\n this.bindInvocation(settlement.invocation);\n if (this.settlementValue != null) {\n assertSameSettlement(this.settlementValue, settlement);\n } else {\n this.settlementValue = Object.freeze({\n ...settlement,\n invocation: Object.freeze({ ...settlement.invocation }),\n });\n }\n if (this.settledValue) {\n return Promise.resolve();\n }\n if (this.pendingSettlement != null) {\n return this.pendingSettlement;\n }\n const pending = Promise.resolve()\n .then(persist)\n .then((): void => {\n this.assertUsable();\n if (this.pendingSettlement !== pending) {\n throw new SubagentExecutionInvalidatedError();\n }\n this.settledValue = true;\n this.settledOutputValue = settledOutput;\n this.activeRunValue = undefined;\n this.completedResultValue = undefined;\n this.resolvedConfigValue = undefined;\n })\n .finally(() => {\n if (this.pendingSettlement === pending) {\n this.pendingSettlement = undefined;\n }\n });\n this.pendingSettlement = pending;\n return pending;\n }\n\n activate(activeRun: TActiveRun): TActiveRun {\n this.transitionTo('active', [\n 'registered',\n 'active',\n 'interrupted',\n 'failed',\n ]);\n if (this.activeRunValue != null) {\n return this.activeRunValue;\n }\n this.activeRunValue = activeRun;\n return activeRun;\n }\n\n markStarted(): void {\n this.assertUsable();\n if (this.phaseValue === 'completed') {\n throw new Error('Completed subagent execution cannot start again.');\n }\n this.startedValue = true;\n }\n\n markInterrupted(): void {\n this.transitionTo('interrupted', ['active', 'interrupted']);\n }\n\n markFailed(): void {\n this.transitionTo('failed', [\n 'registered',\n 'active',\n 'interrupted',\n 'failed',\n ]);\n this.activeRunValue = undefined;\n this.resolvedConfigValue = undefined;\n }\n\n markCompleted(result: TResult): void {\n this.transitionTo('completed', ['active']);\n this.completedValue = true;\n this.completedResultValue = result;\n this.resolvedConfigValue = undefined;\n }\n\n releaseActiveRun(): TActiveRun | undefined {\n const activeRun = this.activeRunValue;\n this.activeRunValue = undefined;\n return activeRun;\n }\n\n releaseResolvedConfig(): void {\n this.resolvedConfigValue = undefined;\n }\n\n invalidate(): void {\n this.phaseValue = 'invalidated';\n this.identityValue = undefined;\n this.bindingValue = undefined;\n this.bindingAuthority = undefined;\n this.invocationValue = undefined;\n this.settlementValue = undefined;\n this.settledOutputValue = undefined;\n this.resumeExecutionValue = undefined;\n this.activeRunValue = undefined;\n this.completedResultValue = undefined;\n this.resolvedConfigValue = undefined;\n this.pendingIdentityResolution = undefined;\n this.pendingConfigResolution = undefined;\n this.pendingExecution = undefined;\n this.pendingSettlement = undefined;\n this.startedValue = false;\n this.completedValue = false;\n this.settledValue = false;\n }\n\n private bindInvocation(invocation: SubagentInvocationBinding): void {\n if (this.invocationValue != null) {\n assertSameInvocation(this.invocationValue, invocation);\n return;\n }\n this.invocationValue = Object.freeze({ ...invocation });\n }\n\n private assertCurrentIdentityResolution(\n pending: Promise<SubagentExecutionIdentity>\n ): void {\n this.assertUsable();\n if (this.pendingIdentityResolution !== pending) {\n throw new SubagentExecutionInvalidatedError();\n }\n }\n\n private transitionTo(\n next: SubagentExecutionPhase,\n allowed: ReadonlyArray<SubagentExecutionPhase>\n ): void {\n this.assertUsable();\n if (!allowed.includes(this.phaseValue)) {\n throw new Error(\n `Cannot transition subagent execution from ${this.phaseValue} to ${next}.`\n );\n }\n this.phaseValue = next;\n }\n}\n\n/** Owns canonical addressing, record selection, and invalidation. */\nexport class SubagentExecutionRegistry<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput = never,\n> {\n private readonly recordsByAddress = new Map<\n string,\n SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >\n >();\n private readonly checkpointThreadIds = new Set<string>();\n private readonly preparationResourceOwners = new Map<\n string,\n PreparationResourceState\n >();\n private nextPreparationToken = 0;\n\n constructor(private readonly options: SubagentExecutionRegistryOptions) {}\n\n open(\n input: SubagentExecutionAddressInput\n ): SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n > {\n const address = this.createAddress(input);\n const resumeExecution = getSubagentResumeManifest(\n input.parentConfigurable\n )?.executions.find(\n (execution) => execution.parentToolCallId === input.parentToolCallId\n );\n const current = this.recordsByAddress.get(address.key);\n if (current != null) {\n current.attachResumeExecution(resumeExecution);\n return current;\n }\n const record = new SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >(address, resumeExecution);\n this.recordsByAddress.set(address.key, record);\n return record;\n }\n\n remove(\n record: SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >\n ): void {\n if (this.recordsByAddress.get(record.address.key) !== record) {\n return;\n }\n this.recordsByAddress.delete(record.address.key);\n record.invalidate();\n }\n\n beginIdentityPreparation(\n record: SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >,\n identity: SubagentExecutionIdentity\n ): SubagentExecutionPreparationLease {\n record.assertUsable();\n if (this.recordsByAddress.get(record.address.key) !== record) {\n throw new SubagentExecutionInvalidatedError();\n }\n const checkpointKey = getPreparationResourceKey(\n 'checkpoint',\n identity.childThreadId\n );\n const approvalKey = getPreparationResourceKey(\n 'approval',\n identity.approvalExecutionScope\n );\n const resourceKeys = [checkpointKey, approvalKey];\n const currentResources = resourceKeys.map((key) =>\n this.preparationResourceOwners.get(key)\n );\n if (currentResources.some((resource) => resource != null)) {\n throw new SubagentExecutionInvalidatedError();\n }\n this.nextPreparationToken += 1;\n const token = this.nextPreparationToken;\n for (let i = 0; i < resourceKeys.length; i++) {\n const key = resourceKeys[i];\n this.preparationResourceOwners.set(key, {\n status: 'owned',\n token,\n created: false,\n });\n }\n return new PreparationLease(\n this.preparationResourceOwners,\n token,\n checkpointKey,\n approvalKey\n );\n }\n\n selectForResume(\n selection: ResumeSelection = {}\n ): SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >[] {\n if (selection.config != null) {\n return this.selectScopedRecords(selection);\n }\n const counts = new Map<string, number>();\n const candidates: SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >[] = [];\n for (const record of this.recordsByAddress.values()) {\n if (record.identity == null) {\n continue;\n }\n const parentToolCallId = record.address.parentToolCallId;\n if (\n selection.parentToolCallIds != null &&\n !selection.parentToolCallIds.has(parentToolCallId)\n ) {\n continue;\n }\n candidates.push(record);\n counts.set(parentToolCallId, (counts.get(parentToolCallId) ?? 0) + 1);\n }\n return candidates.filter(\n (record) => counts.get(record.address.parentToolCallId) === 1\n );\n }\n\n rememberCheckpointThread(...threadIds: string[]): void {\n for (const threadId of threadIds) {\n this.checkpointThreadIds.add(threadId);\n }\n }\n\n getCheckpointThreadIds(\n getNestedThreadIds?: (activeRun: TActiveRun) => ReadonlyArray<string>\n ): string[] {\n const threadIds = new Set(this.checkpointThreadIds);\n if (getNestedThreadIds == null) {\n return [...threadIds];\n }\n for (const record of this.recordsByAddress.values()) {\n if (record.activeRun == null) {\n continue;\n }\n for (const threadId of getNestedThreadIds(record.activeRun)) {\n threadIds.add(threadId);\n }\n }\n return [...threadIds];\n }\n\n resetCheckpointThreadIds(): void {\n this.checkpointThreadIds.clear();\n }\n\n retireResumeSources(\n current: SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >,\n sourceThreadIds: ReadonlySet<string>,\n retire: (\n source: SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >\n ) => void\n ): void {\n for (const record of this.recordsByAddress.values()) {\n if (\n record === current ||\n record.identity == null ||\n !sourceThreadIds.has(record.identity.childThreadId)\n ) {\n continue;\n }\n try {\n retire(record);\n } finally {\n this.remove(record);\n }\n }\n }\n\n clear(\n dispose?: (\n record: SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >\n ) => void\n ): void {\n for (const record of this.recordsByAddress.values()) {\n dispose?.(record);\n record.invalidate();\n }\n this.recordsByAddress.clear();\n }\n\n private selectScopedRecords(\n selection: ResumeSelection\n ): SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >[] {\n const parentConfigurable = getConfigurable(selection.config);\n const threadId = getConfigurableString(parentConfigurable, 'thread_id');\n const parentToolCallIds =\n selection.parentToolCallIds ??\n new Set(\n [...this.recordsByAddress.values()].map(\n (record) => record.address.parentToolCallId\n )\n );\n const records: SubagentExecutionRecord<\n TResult,\n TResolvedConfig,\n TActiveRun,\n TSettledOutput\n >[] = [];\n for (const parentToolCallId of parentToolCallIds) {\n const address = this.createAddress({\n threadId,\n parentToolCallId,\n parentConfigurable,\n });\n const record = this.recordsByAddress.get(address.key);\n if (record?.identity != null) {\n records.push(record);\n }\n }\n return records;\n }\n\n private createAddress(\n input: SubagentExecutionAddressInput\n ): SubagentExecutionAddress {\n const durableParentId = input.threadId ?? this.options.parentRunId;\n const parentFork =\n getConfigurableString(input.parentConfigurable, 'checkpoint_id') ??\n 'root';\n const parentBatch =\n getConfigurableString(\n input.parentConfigurable,\n SUBAGENT_PARENT_BATCH_CONFIG_KEY\n ) ?? 'batch';\n const configuredResumeAttemptId = getConfigurableString(\n input.parentConfigurable,\n SUBAGENT_RESUME_ATTEMPT_CONFIG_KEY\n );\n const resumeAttemptId =\n configuredResumeAttemptId ?? this.options.parentRunId;\n const identity = [\n durableParentId,\n parentFork,\n this.options.parentAgentId ?? 'agent',\n input.parentToolCallId,\n parentBatch,\n ];\n const baseChildThreadId = encodeThreadIdentity(identity);\n const branchChildThreadId = this.options.durable\n ? encodeThreadIdentity([...identity, resumeAttemptId])\n : baseChildThreadId;\n return Object.freeze({\n key: branchChildThreadId,\n baseChildThreadId,\n branchChildThreadId,\n currentChildRunId: `${this.options.parentRunId}_sub_${baseChildThreadId.slice(\n SUBAGENT_THREAD_ID_PREFIX.length\n )}`,\n explicitResumeAttempt: configuredResumeAttemptId != null,\n parentToolCallId: input.parentToolCallId,\n resumeAttemptId,\n });\n }\n}\n"],"mappings":"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"}