managed-deepagents 0.9.6-dev.19 → 0.9.6-dev.20

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 (333) hide show
  1. package/README.md +1075 -37
  2. package/dist/agent-auth.d.ts +1 -1
  3. package/dist/agent-auth.d.ts.map +1 -1
  4. package/dist/agent-auth.js +36 -12
  5. package/dist/agent-auth.js.map +1 -1
  6. package/dist/browser.d.ts +37 -0
  7. package/dist/browser.d.ts.map +1 -0
  8. package/dist/browser.js +31 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/channels/actor.d.ts +57 -0
  11. package/dist/channels/actor.d.ts.map +1 -0
  12. package/dist/channels/actor.js +24 -0
  13. package/dist/channels/actor.js.map +1 -0
  14. package/dist/channels/assistant-text.d.ts +29 -0
  15. package/dist/channels/assistant-text.d.ts.map +1 -1
  16. package/dist/channels/assistant-text.js +72 -1
  17. package/dist/channels/assistant-text.js.map +1 -1
  18. package/dist/channels/binding.d.ts +20 -1
  19. package/dist/channels/binding.d.ts.map +1 -1
  20. package/dist/channels/binding.js +44 -11
  21. package/dist/channels/binding.js.map +1 -1
  22. package/dist/channels/delivery.d.ts +51 -0
  23. package/dist/channels/delivery.d.ts.map +1 -0
  24. package/dist/channels/delivery.js +424 -0
  25. package/dist/channels/delivery.js.map +1 -0
  26. package/dist/channels/github/app-setup.d.ts +32 -0
  27. package/dist/channels/github/app-setup.d.ts.map +1 -0
  28. package/dist/channels/github/app-setup.js +146 -0
  29. package/dist/channels/github/app-setup.js.map +1 -0
  30. package/dist/channels/github/connections.d.ts +11 -0
  31. package/dist/channels/github/connections.d.ts.map +1 -0
  32. package/dist/channels/github/connections.js +14 -0
  33. package/dist/channels/github/connections.js.map +1 -0
  34. package/dist/channels/github/index.d.ts +12 -0
  35. package/dist/channels/github/index.d.ts.map +1 -0
  36. package/dist/channels/github/index.js +266 -0
  37. package/dist/channels/github/index.js.map +1 -0
  38. package/dist/channels/github/mentions.d.ts +12 -0
  39. package/dist/channels/github/mentions.d.ts.map +1 -0
  40. package/dist/channels/github/mentions.js +185 -0
  41. package/dist/channels/github/mentions.js.map +1 -0
  42. package/dist/channels/github/schema.d.ts +4165 -0
  43. package/dist/channels/github/schema.d.ts.map +1 -0
  44. package/dist/channels/github/schema.js +221 -0
  45. package/dist/channels/github/schema.js.map +1 -0
  46. package/dist/channels/github/types.d.ts +170 -0
  47. package/dist/channels/github/types.d.ts.map +1 -0
  48. package/dist/channels/github/types.js +2 -0
  49. package/dist/channels/github/types.js.map +1 -0
  50. package/dist/channels/http/endpoint.d.ts +137 -0
  51. package/dist/channels/http/endpoint.d.ts.map +1 -0
  52. package/dist/channels/http/endpoint.js +286 -0
  53. package/dist/channels/http/endpoint.js.map +1 -0
  54. package/dist/channels/http/http.d.ts.map +1 -1
  55. package/dist/channels/http/http.js +439 -65
  56. package/dist/channels/http/http.js.map +1 -1
  57. package/dist/channels/http/index.d.ts +8 -1
  58. package/dist/channels/http/index.d.ts.map +1 -1
  59. package/dist/channels/http/index.js +35 -16
  60. package/dist/channels/http/index.js.map +1 -1
  61. package/dist/channels/http/ingress.d.ts +67 -5
  62. package/dist/channels/http/ingress.d.ts.map +1 -1
  63. package/dist/channels/http/ingress.js +155 -43
  64. package/dist/channels/http/ingress.js.map +1 -1
  65. package/dist/channels/http/provider.d.ts +125 -0
  66. package/dist/channels/http/provider.d.ts.map +1 -0
  67. package/dist/channels/http/provider.js +227 -0
  68. package/dist/channels/http/provider.js.map +1 -0
  69. package/dist/channels/http/studio.d.ts +24 -0
  70. package/dist/channels/http/studio.d.ts.map +1 -0
  71. package/dist/channels/http/studio.js +95 -0
  72. package/dist/channels/http/studio.js.map +1 -0
  73. package/dist/channels/http/threads.d.ts +7 -0
  74. package/dist/channels/http/threads.d.ts.map +1 -0
  75. package/dist/channels/http/threads.js +10 -0
  76. package/dist/channels/http/threads.js.map +1 -0
  77. package/dist/channels/http/types.d.ts +166 -2
  78. package/dist/channels/http/types.d.ts.map +1 -1
  79. package/dist/channels/linear/app-setup.d.ts +29 -0
  80. package/dist/channels/linear/app-setup.d.ts.map +1 -0
  81. package/dist/channels/linear/app-setup.js +102 -0
  82. package/dist/channels/linear/app-setup.js.map +1 -0
  83. package/dist/channels/linear/connections.d.ts +11 -0
  84. package/dist/channels/linear/connections.d.ts.map +1 -0
  85. package/dist/channels/linear/connections.js +14 -0
  86. package/dist/channels/linear/connections.js.map +1 -0
  87. package/dist/channels/linear/graphql.d.ts +57 -0
  88. package/dist/channels/linear/graphql.d.ts.map +1 -0
  89. package/dist/channels/linear/graphql.js +167 -0
  90. package/dist/channels/linear/graphql.js.map +1 -0
  91. package/dist/channels/linear/index.d.ts +13 -0
  92. package/dist/channels/linear/index.d.ts.map +1 -0
  93. package/dist/channels/linear/index.js +457 -0
  94. package/dist/channels/linear/index.js.map +1 -0
  95. package/dist/channels/linear/schema.d.ts +1050 -0
  96. package/dist/channels/linear/schema.d.ts.map +1 -0
  97. package/dist/channels/linear/schema.js +255 -0
  98. package/dist/channels/linear/schema.js.map +1 -0
  99. package/dist/channels/linear/types.d.ts +169 -0
  100. package/dist/channels/linear/types.d.ts.map +1 -0
  101. package/dist/channels/linear/types.js +2 -0
  102. package/dist/channels/linear/types.js.map +1 -0
  103. package/dist/channels/message-schema.d.ts +2 -0
  104. package/dist/channels/message-schema.d.ts.map +1 -1
  105. package/dist/channels/message-schema.js +4 -0
  106. package/dist/channels/message-schema.js.map +1 -1
  107. package/dist/channels/messaging-registry.d.ts +16 -0
  108. package/dist/channels/messaging-registry.d.ts.map +1 -1
  109. package/dist/channels/messaging-registry.js +29 -0
  110. package/dist/channels/messaging-registry.js.map +1 -1
  111. package/dist/channels/reserved-connections.d.ts +12 -0
  112. package/dist/channels/reserved-connections.d.ts.map +1 -0
  113. package/dist/channels/reserved-connections.js +55 -0
  114. package/dist/channels/reserved-connections.js.map +1 -0
  115. package/dist/channels/resolve-user-endpoint.d.ts +34 -0
  116. package/dist/channels/resolve-user-endpoint.d.ts.map +1 -0
  117. package/dist/channels/resolve-user-endpoint.js +51 -0
  118. package/dist/channels/resolve-user-endpoint.js.map +1 -0
  119. package/dist/channels/resolve-user.d.ts +95 -0
  120. package/dist/channels/resolve-user.d.ts.map +1 -0
  121. package/dist/channels/resolve-user.js +143 -0
  122. package/dist/channels/resolve-user.js.map +1 -0
  123. package/dist/channels/run-input.d.ts +88 -0
  124. package/dist/channels/run-input.d.ts.map +1 -0
  125. package/dist/channels/run-input.js +177 -0
  126. package/dist/channels/run-input.js.map +1 -0
  127. package/dist/channels/runtime.d.ts +5 -2
  128. package/dist/channels/runtime.d.ts.map +1 -1
  129. package/dist/channels/runtime.js +19 -10
  130. package/dist/channels/runtime.js.map +1 -1
  131. package/dist/channels/schedule-delivery.d.ts +2 -13
  132. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  133. package/dist/channels/schedule-delivery.js +6 -73
  134. package/dist/channels/schedule-delivery.js.map +1 -1
  135. package/dist/channels/slack/api.d.ts +2 -0
  136. package/dist/channels/slack/api.d.ts.map +1 -1
  137. package/dist/channels/slack/api.js +6 -0
  138. package/dist/channels/slack/api.js.map +1 -1
  139. package/dist/channels/slack/connections.d.ts +6 -0
  140. package/dist/channels/slack/connections.d.ts.map +1 -0
  141. package/dist/channels/slack/connections.js +6 -0
  142. package/dist/channels/slack/connections.js.map +1 -0
  143. package/dist/channels/slack/events.d.ts +278 -0
  144. package/dist/channels/slack/events.d.ts.map +1 -0
  145. package/dist/channels/slack/events.js +235 -0
  146. package/dist/channels/slack/events.js.map +1 -0
  147. package/dist/channels/slack/files.d.ts.map +1 -1
  148. package/dist/channels/slack/files.js +2 -3
  149. package/dist/channels/slack/files.js.map +1 -1
  150. package/dist/channels/slack/index.d.ts +90 -2
  151. package/dist/channels/slack/index.d.ts.map +1 -1
  152. package/dist/channels/slack/index.js +188 -6
  153. package/dist/channels/slack/index.js.map +1 -1
  154. package/dist/channels/slack/message-content.d.ts.map +1 -1
  155. package/dist/channels/slack/message-content.js +23 -28
  156. package/dist/channels/slack/message-content.js.map +1 -1
  157. package/dist/channels/slack/status.d.ts +76 -0
  158. package/dist/channels/slack/status.d.ts.map +1 -0
  159. package/dist/channels/slack/status.js +427 -0
  160. package/dist/channels/slack/status.js.map +1 -0
  161. package/dist/channels/source-providers.js +1 -1
  162. package/dist/channels/source-providers.js.map +1 -1
  163. package/dist/channels/trigger/client.d.ts.map +1 -1
  164. package/dist/channels/trigger/client.js +6 -9
  165. package/dist/channels/trigger/client.js.map +1 -1
  166. package/dist/channels/trigger/conversation.d.ts +11 -0
  167. package/dist/channels/trigger/conversation.d.ts.map +1 -0
  168. package/dist/channels/trigger/conversation.js +72 -0
  169. package/dist/channels/trigger/conversation.js.map +1 -0
  170. package/dist/channels/trigger/http.d.ts +130 -4
  171. package/dist/channels/trigger/http.d.ts.map +1 -1
  172. package/dist/channels/trigger/http.js +408 -78
  173. package/dist/channels/trigger/http.js.map +1 -1
  174. package/dist/channels/trigger/ingress.d.ts +70 -1
  175. package/dist/channels/trigger/ingress.d.ts.map +1 -1
  176. package/dist/channels/trigger/ingress.js +130 -19
  177. package/dist/channels/trigger/ingress.js.map +1 -1
  178. package/dist/channels/trigger/transport.d.ts +10 -0
  179. package/dist/channels/trigger/transport.d.ts.map +1 -1
  180. package/dist/channels/trigger/transport.js +25 -9
  181. package/dist/channels/trigger/transport.js.map +1 -1
  182. package/dist/channels/trigger/types.d.ts +92 -3
  183. package/dist/channels/trigger/types.d.ts.map +1 -1
  184. package/dist/channels/trigger/types.js +37 -0
  185. package/dist/channels/trigger/types.js.map +1 -1
  186. package/dist/channels/types.d.ts +53 -4
  187. package/dist/channels/types.d.ts.map +1 -1
  188. package/dist/channels/types.js +2 -0
  189. package/dist/channels/types.js.map +1 -1
  190. package/dist/connections.d.ts +35 -1
  191. package/dist/connections.d.ts.map +1 -1
  192. package/dist/connections.js +121 -10
  193. package/dist/connections.js.map +1 -1
  194. package/dist/credential-gate.d.ts +2 -0
  195. package/dist/credential-gate.d.ts.map +1 -1
  196. package/dist/credential-gate.js +37 -3
  197. package/dist/credential-gate.js.map +1 -1
  198. package/dist/define-deep-agent.d.ts +2 -2
  199. package/dist/define-deep-agent.d.ts.map +1 -1
  200. package/dist/define-deep-agent.js +53 -2
  201. package/dist/define-deep-agent.js.map +1 -1
  202. package/dist/identity/index.d.ts.map +1 -1
  203. package/dist/identity/index.js +3 -1
  204. package/dist/identity/index.js.map +1 -1
  205. package/dist/identity/options.d.ts +9 -0
  206. package/dist/identity/options.d.ts.map +1 -1
  207. package/dist/identity/options.js +1 -1
  208. package/dist/identity/options.js.map +1 -1
  209. package/dist/identity/types.d.ts +3 -0
  210. package/dist/identity/types.d.ts.map +1 -1
  211. package/dist/index.d.ts +19 -5
  212. package/dist/index.d.ts.map +1 -1
  213. package/dist/index.js +3 -1
  214. package/dist/index.js.map +1 -1
  215. package/dist/ingress/loopback.d.ts +1 -0
  216. package/dist/ingress/loopback.d.ts.map +1 -1
  217. package/dist/ingress/loopback.js +4 -1
  218. package/dist/ingress/loopback.js.map +1 -1
  219. package/dist/ingress/runs.d.ts +74 -1
  220. package/dist/ingress/runs.d.ts.map +1 -1
  221. package/dist/ingress/runs.js +184 -9
  222. package/dist/ingress/runs.js.map +1 -1
  223. package/dist/managed-composition.d.ts +3 -0
  224. package/dist/managed-composition.d.ts.map +1 -1
  225. package/dist/managed-composition.js +29 -13
  226. package/dist/managed-composition.js.map +1 -1
  227. package/dist/namespaces.d.ts +25 -21
  228. package/dist/namespaces.d.ts.map +1 -1
  229. package/dist/namespaces.js +4 -29
  230. package/dist/namespaces.js.map +1 -1
  231. package/dist/runtime/async-subagents.d.ts +27 -0
  232. package/dist/runtime/async-subagents.d.ts.map +1 -0
  233. package/dist/runtime/async-subagents.js +139 -0
  234. package/dist/runtime/async-subagents.js.map +1 -0
  235. package/dist/runtime/auth.d.ts.map +1 -1
  236. package/dist/runtime/auth.js +177 -8
  237. package/dist/runtime/auth.js.map +1 -1
  238. package/dist/runtime/backend.d.ts +7 -0
  239. package/dist/runtime/backend.d.ts.map +1 -1
  240. package/dist/runtime/backend.js +32 -7
  241. package/dist/runtime/backend.js.map +1 -1
  242. package/dist/runtime/browser-facade.d.ts +10 -0
  243. package/dist/runtime/browser-facade.d.ts.map +1 -0
  244. package/dist/runtime/browser-facade.js +23 -0
  245. package/dist/runtime/browser-facade.js.map +1 -0
  246. package/dist/runtime/browser-langsmith.d.ts +143 -0
  247. package/dist/runtime/browser-langsmith.d.ts.map +1 -0
  248. package/dist/runtime/browser-langsmith.js +508 -0
  249. package/dist/runtime/browser-langsmith.js.map +1 -0
  250. package/dist/runtime/browser-recorder.py +831 -0
  251. package/dist/runtime/browser-selection.d.ts +10 -0
  252. package/dist/runtime/browser-selection.d.ts.map +1 -0
  253. package/dist/runtime/browser-selection.js +21 -0
  254. package/dist/runtime/browser-selection.js.map +1 -0
  255. package/dist/runtime/browser.d.ts +128 -0
  256. package/dist/runtime/browser.d.ts.map +1 -0
  257. package/dist/runtime/browser.js +795 -0
  258. package/dist/runtime/browser.js.map +1 -0
  259. package/dist/runtime/channel-icon.d.ts +22 -0
  260. package/dist/runtime/channel-icon.d.ts.map +1 -0
  261. package/dist/runtime/channel-icon.js +81 -0
  262. package/dist/runtime/channel-icon.js.map +1 -0
  263. package/dist/runtime/channel.d.ts +11 -0
  264. package/dist/runtime/channel.d.ts.map +1 -1
  265. package/dist/runtime/channel.js.map +1 -1
  266. package/dist/runtime/identity-http.d.ts +2 -0
  267. package/dist/runtime/identity-http.d.ts.map +1 -1
  268. package/dist/runtime/identity-http.js +38 -2
  269. package/dist/runtime/identity-http.js.map +1 -1
  270. package/dist/runtime/identity-runtime.d.ts +10 -0
  271. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  272. package/dist/runtime/identity-runtime.js +22 -0
  273. package/dist/runtime/identity-runtime.js.map +1 -1
  274. package/dist/runtime/index.d.ts +38 -1
  275. package/dist/runtime/index.d.ts.map +1 -1
  276. package/dist/runtime/index.js +76 -34
  277. package/dist/runtime/index.js.map +1 -1
  278. package/dist/runtime/managed-thread.d.ts +61 -0
  279. package/dist/runtime/managed-thread.d.ts.map +1 -0
  280. package/dist/runtime/managed-thread.js +76 -0
  281. package/dist/runtime/managed-thread.js.map +1 -0
  282. package/dist/runtime/managed-tools.d.ts +10 -2
  283. package/dist/runtime/managed-tools.d.ts.map +1 -1
  284. package/dist/runtime/managed-tools.js +10 -8
  285. package/dist/runtime/managed-tools.js.map +1 -1
  286. package/dist/runtime/memory/policy.d.ts.map +1 -1
  287. package/dist/runtime/memory/policy.js +1 -3
  288. package/dist/runtime/memory/policy.js.map +1 -1
  289. package/dist/runtime/parent-run.d.ts +33 -0
  290. package/dist/runtime/parent-run.d.ts.map +1 -0
  291. package/dist/runtime/parent-run.js +114 -0
  292. package/dist/runtime/parent-run.js.map +1 -0
  293. package/dist/runtime/run-input.d.ts +14 -1
  294. package/dist/runtime/run-input.d.ts.map +1 -1
  295. package/dist/runtime/run-input.js +100 -7
  296. package/dist/runtime/run-input.js.map +1 -1
  297. package/dist/runtime/sandbox-manager.d.ts +15 -2
  298. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  299. package/dist/runtime/sandbox-manager.js +37 -12
  300. package/dist/runtime/sandbox-manager.js.map +1 -1
  301. package/dist/runtime/schedule-auth.d.ts +79 -0
  302. package/dist/runtime/schedule-auth.d.ts.map +1 -1
  303. package/dist/runtime/schedule-auth.js +163 -6
  304. package/dist/runtime/schedule-auth.js.map +1 -1
  305. package/dist/runtime/static-entry.d.ts.map +1 -1
  306. package/dist/runtime/static-entry.js +1 -0
  307. package/dist/runtime/static-entry.js.map +1 -1
  308. package/dist/runtime/thread-record.d.ts +88 -0
  309. package/dist/runtime/thread-record.d.ts.map +1 -0
  310. package/dist/runtime/thread-record.js +213 -0
  311. package/dist/runtime/thread-record.js.map +1 -0
  312. package/dist/runtime/types.d.ts +12 -1
  313. package/dist/runtime/types.d.ts.map +1 -1
  314. package/dist/runtime-schedules.d.ts +15 -0
  315. package/dist/runtime-schedules.d.ts.map +1 -1
  316. package/dist/runtime-schedules.js +83 -20
  317. package/dist/runtime-schedules.js.map +1 -1
  318. package/dist/sandbox.d.ts +0 -6
  319. package/dist/sandbox.d.ts.map +1 -1
  320. package/dist/sandbox.js +3 -7
  321. package/dist/sandbox.js.map +1 -1
  322. package/dist/schedule-channel.d.ts +5 -2
  323. package/dist/schedule-channel.d.ts.map +1 -1
  324. package/dist/schedule-channel.js +13 -12
  325. package/dist/schedule-channel.js.map +1 -1
  326. package/dist/types.d.ts +19 -2
  327. package/dist/types.d.ts.map +1 -1
  328. package/dist/types.js.map +1 -1
  329. package/dist/values.d.ts +15 -0
  330. package/dist/values.d.ts.map +1 -0
  331. package/dist/values.js +31 -0
  332. package/dist/values.js.map +1 -0
  333. package/package.json +23 -9
@@ -0,0 +1,33 @@
1
+ import { RunTree } from "langsmith";
2
+ import type { ManagedRunConfig } from "./types.js";
3
+ /** The lead thread a run's caller owns, with the metadata its thread record lives in. */
4
+ export interface LeadThread {
5
+ id: string;
6
+ metadata: Record<string, unknown>;
7
+ }
8
+ /**
9
+ * The thread of the agent that launched this run, if deepagents sent it.
10
+ *
11
+ * Read from deepagents' parent reference, or else from the task thread's
12
+ * `parent_thread_id` metadata, which the Agent Server copies into every run on
13
+ * the thread, including runs deepagents didn't start (such as a resume).
14
+ */
15
+ export declare function leadThreadId(config: ManagedRunConfig | undefined): string | undefined;
16
+ /**
17
+ * The lead's thread when this run's caller owns it, else `undefined`.
18
+ *
19
+ * Reads the thread through the SDK's default client, which the Agent Server and
20
+ * `mda dev` point at their own API (as the run's caller), then requires its `owner` to be the
21
+ * caller's owner key, MDA's rule for changing a thread. Being able to read it isn't
22
+ * enough: Studio callers can read every thread. A thread without an owner (no
23
+ * managed identity) only needs to be readable.
24
+ */
25
+ export declare function verifiedLeadThread(config: ManagedRunConfig | undefined): Promise<LeadThread | undefined>;
26
+ /** The thread a run's record is read from: its lead's, when given. */
27
+ export declare function threadSource(config: ManagedRunConfig | undefined, leadThread: LeadThread | undefined): {
28
+ configurable: Record<string, unknown> | undefined;
29
+ metadata: unknown;
30
+ };
31
+ /** Rebuild the span that launched this run from the trace headers the Agent Server kept. */
32
+ export declare function launchingParent(config: ManagedRunConfig | undefined): RunTree | undefined;
33
+ //# sourceMappingURL=parent-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-run.d.ts","sourceRoot":"","sources":["../../src/runtime/parent-run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAanD,yFAAyF;AACzF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,MAAM,GAAG,SAAS,CAUpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAqBjC;AAYD,sEAAsE;AACtE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,UAAU,EAAE,UAAU,GAAG,SAAS,GACjC;IAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAO1E;AAgBD,4FAA4F;AAC5F,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,GAAG,SAAS,CAmBrB"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Runs that deepagents launched from another agent's run (async subagents):
3
+ * verify the lead's thread, so the run can share its sandbox and thread
4
+ * record, and nest the run under the lead's trace.
5
+ */
6
+ import { Client } from "@langchain/langgraph-sdk";
7
+ import { RunTree } from "langsmith";
8
+ import { threadOwnerKey } from "./auth.js";
9
+ import { resolveRuntimeConfigurable } from "./identity-runtime.js";
10
+ import { logger } from "./log.js";
11
+ import { isRecord } from "./managed-thread.js";
12
+ /** `configurable` key where deepagents puts an async subagent run's parent reference. */
13
+ const PARENT_REFERENCE_KEY = "deepagents_parent";
14
+ /** Run metadata key (copied from the task thread) naming an async subagent's lead thread. */
15
+ const PARENT_THREAD_METADATA_KEY = "parent_thread_id";
16
+ /** Baggage key deepagents sets to mark trace headers as a parent. */
17
+ const NEST_UNDER_PARENT = "ls_nest_under_parent";
18
+ const UUID = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
19
+ const SEGMENT = `\\d{8}T\\d{6,}Z${UUID}`;
20
+ /** A `langsmith-trace` dotted order: `<timestamp>Z<run id>` segments joined by dots. */
21
+ const DOTTED_ORDER = new RegExp(`^${SEGMENT}(\\.${SEGMENT})*$`, "i");
22
+ /**
23
+ * The thread of the agent that launched this run, if deepagents sent it.
24
+ *
25
+ * Read from deepagents' parent reference, or else from the task thread's
26
+ * `parent_thread_id` metadata, which the Agent Server copies into every run on
27
+ * the thread, including runs deepagents didn't start (such as a resume).
28
+ */
29
+ export function leadThreadId(config) {
30
+ const reference = config?.configurable?.[PARENT_REFERENCE_KEY];
31
+ const metadata = config?.metadata;
32
+ const id = (isRecord(reference) ? reference.thread_id : undefined) ??
33
+ (isRecord(metadata) ? metadata[PARENT_THREAD_METADATA_KEY] : undefined);
34
+ // A run on the lead's own thread is the lead's, not a subagent's.
35
+ return typeof id === "string" && id && id !== config?.configurable?.thread_id
36
+ ? id
37
+ : undefined;
38
+ }
39
+ /**
40
+ * The lead's thread when this run's caller owns it, else `undefined`.
41
+ *
42
+ * Reads the thread through the SDK's default client, which the Agent Server and
43
+ * `mda dev` point at their own API (as the run's caller), then requires its `owner` to be the
44
+ * caller's owner key, MDA's rule for changing a thread. Being able to read it isn't
45
+ * enough: Studio callers can read every thread. A thread without an owner (no
46
+ * managed identity) only needs to be readable.
47
+ */
48
+ export async function verifiedLeadThread(config) {
49
+ const id = leadThreadId(config);
50
+ if (!id)
51
+ return undefined;
52
+ let metadata;
53
+ try {
54
+ const thread = await new Client().threads.get(id);
55
+ metadata = isRecord(thread.metadata) ? thread.metadata : {};
56
+ }
57
+ catch {
58
+ logger.warn("lead thread not accessible to this run; using its own sandbox");
59
+ return undefined;
60
+ }
61
+ const owner = metadata.owner;
62
+ if (owner !== undefined && owner !== callerOwnerKey(config)) {
63
+ logger.warn("lead thread belongs to another caller; using this run's own sandbox");
64
+ return undefined;
65
+ }
66
+ return { id, metadata };
67
+ }
68
+ /** The thread owner key MDA stamps for this run's caller, if it's authenticated. */
69
+ function callerOwnerKey(config) {
70
+ const user = resolveRuntimeConfigurable(config)?.langgraph_auth_user;
71
+ return user ? threadOwnerKey(user) : undefined;
72
+ }
73
+ /** The thread a run's record is read from: its lead's, when given. */
74
+ export function threadSource(config, leadThread) {
75
+ return leadThread
76
+ ? {
77
+ configurable: { ...config?.configurable, thread_id: leadThread.id },
78
+ metadata: leadThread.metadata,
79
+ }
80
+ : { configurable: config?.configurable, metadata: config?.metadata };
81
+ }
82
+ /** The `langsmith-trace` header, when deepagents marked it as a parent to nest under. */
83
+ function nestingTrace(configurable) {
84
+ const trace = configurable["langsmith-trace"];
85
+ const metadata = configurable["langsmith-metadata"];
86
+ return typeof trace === "string" &&
87
+ trace &&
88
+ isRecord(metadata) &&
89
+ metadata[NEST_UNDER_PARENT] === true
90
+ ? trace
91
+ : undefined;
92
+ }
93
+ /** Rebuild the span that launched this run from the trace headers the Agent Server kept. */
94
+ export function launchingParent(config) {
95
+ const configurable = config?.configurable ?? {};
96
+ const trace = nestingTrace(configurable);
97
+ if (!trace)
98
+ return undefined;
99
+ const project = configurable["langsmith-project"];
100
+ const baggage = typeof project === "string"
101
+ ? `langsmith-project=${encodeURIComponent(project)}`
102
+ : "";
103
+ try {
104
+ // `fromHeaders` accepts any string and invents a run id.
105
+ if (!DOTTED_ORDER.test(trace))
106
+ throw new Error("malformed");
107
+ return RunTree.fromHeaders({ "langsmith-trace": trace, baggage });
108
+ }
109
+ catch {
110
+ logger.warn("ignoring a malformed langsmith-trace; the run keeps its own trace");
111
+ return undefined;
112
+ }
113
+ }
114
+ //# sourceMappingURL=parent-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-run.js","sourceRoot":"","sources":["../../src/runtime/parent-run.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type LeadThread } from "./parent-run.js";
1
2
  import type { ManagedRunConfig } from "./types.js";
2
3
  import type { createDeepAgent } from "deepagents";
3
4
  export declare function isRunExecution(config?: ManagedRunConfig): config is ManagedRunConfig;
@@ -43,6 +44,18 @@ export declare function executionContext(config?: ManagedRunConfig): {
43
44
  channelRun: boolean;
44
45
  };
45
46
  type Agent = ReturnType<typeof createDeepAgent>;
46
- export declare function adaptChannelExecution(agent: Agent): Agent;
47
+ /** The run's own thread id. */
48
+ export declare function threadIdOf(config?: ManagedRunConfig): string | undefined;
49
+ /**
50
+ * The Agent Server run a config belongs to. The JS bridge passes it as the
51
+ * top-level `runId`; other hosts stamp `metadata.run_id` or
52
+ * `configurable.run_id`.
53
+ */
54
+ export declare function resolveRunId(config?: {
55
+ runId?: unknown;
56
+ metadata?: Record<string, unknown>;
57
+ configurable?: Record<string, unknown>;
58
+ }): string | undefined;
59
+ export declare function adaptChannelExecution(agent: Agent, leadThread?: LeadThread): Agent;
47
60
  export {};
48
61
  //# sourceMappingURL=run-input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-input.d.ts","sourceRoot":"","sources":["../../src/runtime/run-input.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,IAAI,gBAAgB,CAE5B;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAYrE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAOvE;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB;;aAMxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDpE;AAED,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AA0EhD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAQzD"}
1
+ {"version":3,"file":"run-input.d.ts","sourceRoot":"","sources":["../../src/runtime/run-input.ts"],"names":[],"mappings":"AAaA,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAazB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,IAAI,gBAAgB,CAE5B;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAYrE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAOvE;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB;;aAMxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDpE;AAED,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAiHhD,+BAA+B;AAC/B,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAGxE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC,GAAG,MAAM,GAAG,SAAS,CASrB;AA8CD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,EACZ,UAAU,CAAC,EAAE,UAAU,GACtB,KAAK,CASP"}
@@ -1,7 +1,11 @@
1
1
  import { isDeepStrictEqual } from "node:util";
2
- import { CompiledStateGraph, getConfig } from "@langchain/langgraph";
2
+ import { CompiledStateGraph, getConfig, isGraphBubbleUp, } from "@langchain/langgraph";
3
+ import { withRunTree } from "langsmith/traceable";
3
4
  import { currentChannelBinding, resolveChannelBinding, } from "../channels/binding.js";
4
5
  import { isManagedKey } from "../run-context.js";
6
+ import { resolveRunThread } from "./managed-thread.js";
7
+ import { launchingParent, leadThreadId, threadSource, } from "./parent-run.js";
8
+ import { deliverRunFailure, deliverRunResult, } from "../channels/delivery.js";
5
9
  import { createLogContext, currentLogContext, runInLogContext, traceIdFromMetadata, } from "../telemetry/otel/index.js";
6
10
  export function isRunExecution(config) {
7
11
  return !!config && Object.hasOwn(config, "context");
@@ -71,8 +75,11 @@ export function executionContext(config) {
71
75
  channelRun,
72
76
  };
73
77
  }
78
+ /** Graph property holding the lead thread a verified async subagent run shares. */
79
+ const LEAD_THREAD = Symbol("mda.leadThread");
74
80
  /** Keep the adapter on native graph copies without binding an old instance. */
75
81
  class ManagedCompiledGraph extends CompiledStateGraph {
82
+ [LEAD_THREAD];
76
83
  async *_streamIterator(input, options) {
77
84
  const ambient = getConfig();
78
85
  const config = {
@@ -85,7 +92,19 @@ class ManagedCompiledGraph extends CompiledStateGraph {
85
92
  ...options?.configurable,
86
93
  },
87
94
  };
88
- const scope = executionContext(config);
95
+ const routed = executionContext(config);
96
+ // A channel caller's async subagent run never answers, and reads its lead's
97
+ // thread record once its caller is verified to own it.
98
+ const subagent = routed.channelRun && !!leadThreadId(config);
99
+ const scope = {
100
+ ...routed,
101
+ thread: resolveRunThread({
102
+ ...threadSource(config, routed.channelRun ? this[LEAD_THREAD] : undefined),
103
+ binding: routed.binding,
104
+ }),
105
+ };
106
+ // Nest this run under the async subagent call that launched it.
107
+ const parent = launchingParent(config);
89
108
  const managed = scope.routing !== undefined;
90
109
  const execution = managed && this.config?.context !== undefined
91
110
  ? this.withConfig({})
@@ -100,12 +119,38 @@ class ManagedCompiledGraph extends CompiledStateGraph {
100
119
  if (!parentLog) {
101
120
  setRunLogAttributes(log, config);
102
121
  }
103
- const within = (fn) => currentChannelBinding.run(scope, () => runInLogContext(log, fn));
122
+ // Each step runs bound to its channel, in the run's log context, and nested
123
+ // under the async subagent call that launched it, if any.
124
+ const within = (fn) => {
125
+ const step = () => currentChannelBinding.run(scope, () => runInLogContext(log, fn));
126
+ return parent ? withRunTree(parent, step) : step();
127
+ };
128
+ const topLevel = isTopLevelRun(config, this);
129
+ const delivered = {
130
+ runId: resolveRunId(config),
131
+ assistantId: assistantIdOf(config),
132
+ configurable: config.configurable,
133
+ metadata: config.metadata,
134
+ routing: scope.routing,
135
+ runThreadId: threadIdOf(config),
136
+ subagent,
137
+ };
104
138
  try {
105
139
  while (true) {
106
- const item = await within(() => iterator.next());
107
- if (item.done)
140
+ let item;
141
+ try {
142
+ item = await within(() => iterator.next());
143
+ }
144
+ catch (error) {
145
+ if (topLevel && !isGraphBubbleUp(error) && !isCancellation(error))
146
+ await within(() => deliverRunFailure(scope.thread, delivered, error));
147
+ throw error;
148
+ }
149
+ if (item.done) {
150
+ if (topLevel)
151
+ await within(() => deliverRunResult(this, scope.thread, delivered));
108
152
  return;
153
+ }
109
154
  yield item.value;
110
155
  }
111
156
  }
@@ -122,6 +167,53 @@ class ManagedCompiledGraph extends CompiledStateGraph {
122
167
  : super._validateContext(context);
123
168
  }
124
169
  }
170
+ /** The run's own thread id. */
171
+ export function threadIdOf(config) {
172
+ const value = config?.configurable?.thread_id;
173
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
174
+ }
175
+ /**
176
+ * The Agent Server run a config belongs to. The JS bridge passes it as the
177
+ * top-level `runId`; other hosts stamp `metadata.run_id` or
178
+ * `configurable.run_id`.
179
+ */
180
+ export function resolveRunId(config) {
181
+ for (const value of [
182
+ config?.runId,
183
+ config?.metadata?.run_id,
184
+ config?.configurable?.run_id,
185
+ ]) {
186
+ if (typeof value === "string" && value.trim())
187
+ return value.trim();
188
+ }
189
+ return undefined;
190
+ }
191
+ function assistantIdOf(config) {
192
+ for (const id of [
193
+ config.configurable?.assistant_id,
194
+ config.metadata?.assistant_id,
195
+ ]) {
196
+ if (typeof id === "string" && id.trim())
197
+ return id.trim();
198
+ }
199
+ return undefined;
200
+ }
201
+ /**
202
+ * Whether a run ended because it was cancelled, which is no failure to report.
203
+ * Python never sees one: its cancellation is not an `Exception`. The check
204
+ * mirrors LangGraph's own in `pregel/retry.js`.
205
+ */
206
+ function isCancellation(error) {
207
+ if (!(error instanceof Error))
208
+ return false;
209
+ return (error.name === "AbortError" ||
210
+ error.message.startsWith("Cancel") ||
211
+ error.message.startsWith("AbortError"));
212
+ }
213
+ /** The run's own graph with state to read, not a graph a node calls. */
214
+ function isTopLevelRun(config, graph) {
215
+ return !config.configurable?.checkpoint_ns && !!graph.checkpointer;
216
+ }
125
217
  function setRunLogAttributes(log, config) {
126
218
  for (const [key, value] of [
127
219
  ["run_id", config.metadata?.run_id],
@@ -131,13 +223,14 @@ function setRunLogAttributes(log, config) {
131
223
  log.attributes[key] = value;
132
224
  }
133
225
  }
134
- export function adaptChannelExecution(agent) {
226
+ export function adaptChannelExecution(agent, leadThread) {
135
227
  if (!(agent.graph instanceof CompiledStateGraph))
136
228
  return agent;
137
229
  Object.setPrototypeOf(agent.graph, ManagedCompiledGraph.prototype);
230
+ agent.graph[LEAD_THREAD] = leadThread;
138
231
  const configure = agent.withConfig;
139
232
  agent.withConfig = function (config) {
140
- return adaptChannelExecution(configure.call(this, config));
233
+ return adaptChannelExecution(configure.call(this, config), leadThread);
141
234
  };
142
235
  return agent;
143
236
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-input.js","sourceRoot":"","sources":["../../src/runtime/run-input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-input.js","sourceRoot":"","sources":["../../src/runtime/run-input.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,8 @@ export declare const SANDBOX_API_ENDPOINT_ENV = "MDA_SANDBOX_API_ENDPOINT";
17
17
  * resolves `snapshotName` in the wrong workspace and 404s on the recipe.
18
18
  */
19
19
  export declare const WORKSPACE_ID_ENV = "LANGSMITH_WORKSPACE_ID";
20
+ /** Run `fn` with sandbox scope keys resolving to `leadThread`'s sandbox, if set. */
21
+ export declare function withLeadSandbox<T>(leadThread: string | undefined, fn: () => T): T;
20
22
  /** Optional runtime inputs that drive connector sandbox provisioning. */
21
23
  export interface ResolveManagedSandboxOptions {
22
24
  connectors?: Connector[];
@@ -34,9 +36,20 @@ export interface ResolveManagedSandboxOptions {
34
36
  * messages in an already-synced thread (mode `"credentials"`).
35
37
  */
36
38
  export declare function resolveManagedSandbox(sandbox: SandboxDefinition, config: ManagedRunConfig | undefined, options?: ResolveManagedSandboxOptions): Promise<SandboxBackendProtocolV2>;
39
+ /**
40
+ * The thread's sandbox if this process has opened it, by any caller; never
41
+ * opens one. A sandbox being recreated reads as unopened until its
42
+ * replacement is ready. Like resolving, it needs `configurable.thread_id`.
43
+ */
44
+ export declare function openedManagedSandbox(config: ManagedRunConfig | undefined, selectionFingerprint?: string): SandboxBackendProtocolV2 | undefined;
37
45
  export declare function isSandboxNotFoundError(error: unknown): boolean;
38
46
  export declare function recoverManagedSandbox(sandbox: SandboxDefinition, config: ManagedRunConfig | undefined, failedBackend: SandboxBackendProtocolV2, options?: ResolveManagedSandboxOptions): Promise<SandboxBackendProtocolV2>;
39
- /** Derive the process-level reuse key for a thread and optional selection. */
47
+ /**
48
+ * Derive the process-level reuse key for a thread and optional selection.
49
+ *
50
+ * An async subagent sharing its lead's sandbox uses the lead's thread, so both
51
+ * resolve, sync, and name the same sandbox.
52
+ */
40
53
  export declare function sandboxScopeKey(config: ManagedRunConfig | undefined, selectionFingerprint?: string): string;
41
54
  /**
42
55
  * Stable, non-plaintext identity for an explicit dynamic sandbox selection.
@@ -91,7 +104,7 @@ export declare function isTransientSandboxError(error: unknown): boolean;
91
104
  * is the platform's own value and is preferred when present. Undefined under
92
105
  * local `mda dev`, where sandboxes stay unnamed and LangSmith generates a name.
93
106
  */
94
- export declare function managedDeploymentName(): string | undefined;
107
+ export declare function managedDeploymentName(env?: NodeJS.ProcessEnv): string | undefined;
95
108
  /**
96
109
  * Deterministic sandbox name for a deployment and thread.
97
110
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-manager.d.ts","sourceRoot":"","sources":["../../src/runtime/sandbox-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox-manager.d.ts","sourceRoot":"","sources":["../../src/runtime/sandbox-manager.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
1
2
  import { createHash, randomBytes } from "node:crypto";
2
3
  import { LangSmithSandbox } from "deepagents";
3
4
  import { Sandbox, SandboxClient, LangSmithResourceNotFoundError, LangSmithResourceAlreadyExistsError, LangSmithResourceNameConflictError, LangSmithSandboxConnectionError, } from "langsmith/sandbox";
@@ -61,6 +62,12 @@ const SANDBOX_DEPLOYMENT_DIGEST_LENGTH = 8;
61
62
  const ADOPTABLE_STATUS = new Set(["ready", "running"]);
62
63
  /** Sandbox status for one that is stopped but restartable. */
63
64
  const STOPPED_STATUS = "stopped";
65
+ /** Lead thread whose sandbox this run shares; set only by the verified backend, never from config. */
66
+ const sharedLeadThread = new AsyncLocalStorage();
67
+ /** Run `fn` with sandbox scope keys resolving to `leadThread`'s sandbox, if set. */
68
+ export function withLeadSandbox(leadThread, fn) {
69
+ return leadThread ? sharedLeadThread.run(leadThread, fn) : fn();
70
+ }
64
71
  /**
65
72
  * Resolve (and cache) the per-thread LangSmith sandbox backend for this run.
66
73
  * When deploy baked a recipe, new sandboxes clone it; otherwise Host supplies
@@ -73,6 +80,8 @@ const STOPPED_STATUS = "stopped";
73
80
  export function resolveManagedSandbox(sandbox, config, options) {
74
81
  const key = sandboxScopeKey(config, options?.selectionFingerprint);
75
82
  const hasSandbox = hasSandboxConnectors(options?.connectors);
83
+ // A subagent on its lead's sandbox only refreshes credentials.
84
+ const sharesLeadSandbox = sharedLeadThread.getStore() !== undefined;
76
85
  let entry = managedSandboxes.get(key);
77
86
  if (!entry) {
78
87
  const created = {
@@ -80,12 +89,13 @@ export function resolveManagedSandbox(sandbox, config, options) {
80
89
  syncChain: Promise.resolve(),
81
90
  freshlyCreated: true,
82
91
  ready: Promise.resolve().then(async () => {
83
- const { backend, hostName, sandboxId } = await createLangSmithSandbox(sandbox, config, options, "create", key);
92
+ const { backend, hostName, sandboxId } = await createLangSmithSandbox(sandbox, config, options, "create", key, { adoptedMode: sharesLeadSandbox ? "credentials" : "reuse" });
84
93
  created.hostName = hostName;
85
94
  created.sandboxId = sandboxId;
86
95
  const id = backend.id;
87
96
  created.backendId =
88
97
  typeof id === "string" && id.trim() ? id.trim() : undefined;
98
+ created.backend = backend;
89
99
  if (hostName) {
90
100
  backendHostNames.set(backend, hostName);
91
101
  }
@@ -113,8 +123,8 @@ export function resolveManagedSandbox(sandbox, config, options) {
113
123
  cached.freshlyCreated = false;
114
124
  return;
115
125
  }
116
- if (cached.syncedThreads.has(key)) {
117
- // Same thread: refresh credentials / CLI wiring without re-cloning.
126
+ if (cached.syncedThreads.has(key) || sharesLeadSandbox) {
127
+ // Same thread, or a lead's subagent: refresh credentials / CLI wiring without re-cloning.
118
128
  // Otherwise redeploys that fix auth (e.g. gh wrapper) never apply mid-thread.
119
129
  await runConnectorSandboxHooks(options?.connectors, {
120
130
  backend,
@@ -137,6 +147,15 @@ export function resolveManagedSandbox(sandbox, config, options) {
137
147
  return backend;
138
148
  });
139
149
  }
150
+ /**
151
+ * The thread's sandbox if this process has opened it, by any caller; never
152
+ * opens one. A sandbox being recreated reads as unopened until its
153
+ * replacement is ready. Like resolving, it needs `configurable.thread_id`.
154
+ */
155
+ export function openedManagedSandbox(config, selectionFingerprint) {
156
+ return managedSandboxes.get(sandboxScopeKey(config, selectionFingerprint))
157
+ ?.backend;
158
+ }
140
159
  export function isSandboxNotFoundError(error) {
141
160
  return (error instanceof LangSmithResourceNotFoundError ||
142
161
  (error instanceof LangSmithSandboxConnectionError &&
@@ -170,9 +189,10 @@ export async function recoverManagedSandbox(sandbox, config, failedBackend, opti
170
189
  freshlyCreated: false,
171
190
  hostName: entry.hostName,
172
191
  ready: Promise.resolve().then(async () => {
173
- const { backend, hostName, sandboxId } = await createLangSmithSandbox(sandbox, config, options, "create", key, entry.hostName, existing);
192
+ const { backend, hostName, sandboxId } = await createLangSmithSandbox(sandbox, config, options, "create", key, { recoveryName: entry.hostName, existingSandbox: existing });
174
193
  replacement.sandboxId = sandboxId;
175
194
  replacement.backendId = backend.id;
195
+ replacement.backend = backend;
176
196
  if (hostName)
177
197
  backendHostNames.set(backend, hostName);
178
198
  return backend;
@@ -186,9 +206,14 @@ export async function recoverManagedSandbox(sandbox, config, failedBackend, opti
186
206
  managedSandboxes.set(key, replacement);
187
207
  return await replacement.ready;
188
208
  }
189
- /** Derive the process-level reuse key for a thread and optional selection. */
209
+ /**
210
+ * Derive the process-level reuse key for a thread and optional selection.
211
+ *
212
+ * An async subagent sharing its lead's sandbox uses the lead's thread, so both
213
+ * resolve, sync, and name the same sandbox.
214
+ */
190
215
  export function sandboxScopeKey(config, selectionFingerprint) {
191
- const threadKey = `thread:${threadIdFromConfig(config)}`;
216
+ const threadKey = `thread:${sharedLeadThread.getStore() ?? threadIdFromConfig(config)}`;
192
217
  return selectionFingerprint
193
218
  ? `${threadKey}:sandbox:${selectionFingerprint}`
194
219
  : threadKey;
@@ -410,9 +435,9 @@ export function isTransientSandboxError(error) {
410
435
  * is the platform's own value and is preferred when present. Undefined under
411
436
  * local `mda dev`, where sandboxes stay unnamed and LangSmith generates a name.
412
437
  */
413
- export function managedDeploymentName() {
414
- return (stringOption(process.env.LANGSMITH_DEPLOYMENT_NAME) ??
415
- stringOption(process.env.MDA_DEPLOYMENT_NAME));
438
+ export function managedDeploymentName(env = process.env) {
439
+ return (stringOption(env.LANGSMITH_DEPLOYMENT_NAME) ??
440
+ stringOption(env.MDA_DEPLOYMENT_NAME));
416
441
  }
417
442
  /**
418
443
  * Deterministic sandbox name for a deployment and thread.
@@ -479,7 +504,7 @@ function legacyProvisioningFingerprint(createOptions) {
479
504
  * `snapshotName`, and managed keys are dropped.
480
505
  */
481
506
  function legacySandboxCreateOptions(sandbox) {
482
- const { scope: _scope, apiKey: _apiKey, defaultTimeout: _defaultTimeout, templateName, snapshotId, ...resolvedCreateOptions } = (sandbox.options ?? {});
507
+ const { apiKey: _apiKey, defaultTimeout: _defaultTimeout, templateName, snapshotId, ...resolvedCreateOptions } = (sandbox.options ?? {});
483
508
  const createSandboxOptions = {
484
509
  ...resolvedCreateOptions,
485
510
  };
@@ -512,13 +537,13 @@ function managedSandboxLookupNames(deployment, sandbox, config, selectionFingerp
512
537
  names.push(legacyManagedSandboxName(deployment, scopeKey, legacySandboxCreateOptions(sandbox)));
513
538
  return [...new Set(names)];
514
539
  }
515
- async function createLangSmithSandbox(sandbox, config, options, mode, scopeKey, recoveryName, existingSandbox) {
540
+ async function createLangSmithSandbox(sandbox, config, options, mode, scopeKey, { recoveryName, existingSandbox, adoptedMode = "reuse", } = {}) {
516
541
  const { backend, adopted, hostName, sandboxId } = await createLangSmithSandboxBackend(sandbox, config, scopeKey, options?.selectionFingerprint, recoveryName, existingSandbox);
517
542
  await runConnectorSandboxHooks(options?.connectors, {
518
543
  backend,
519
544
  // An adopted sandbox already ran create-time provisioning in an earlier
520
545
  // process, so treat it as a reuse for connector purposes.
521
- mode: adopted ? "reuse" : mode,
546
+ mode: adopted ? adoptedMode : mode,
522
547
  config,
523
548
  identity: options?.identity,
524
549
  });