managed-deepagents 0.9.6-dev.15 → 0.9.6-dev.17

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 (343) hide show
  1. package/README.md +57 -953
  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 +12 -36
  5. package/dist/agent-auth.js.map +1 -1
  6. package/dist/channels/assistant-text.d.ts +0 -24
  7. package/dist/channels/assistant-text.d.ts.map +1 -1
  8. package/dist/channels/assistant-text.js +1 -65
  9. package/dist/channels/assistant-text.js.map +1 -1
  10. package/dist/channels/binding.d.ts +1 -20
  11. package/dist/channels/binding.d.ts.map +1 -1
  12. package/dist/channels/binding.js +10 -39
  13. package/dist/channels/binding.js.map +1 -1
  14. package/dist/channels/http/http.d.ts.map +1 -1
  15. package/dist/channels/http/http.js +65 -386
  16. package/dist/channels/http/http.js.map +1 -1
  17. package/dist/channels/http/index.d.ts +1 -2
  18. package/dist/channels/http/index.d.ts.map +1 -1
  19. package/dist/channels/http/index.js +10 -14
  20. package/dist/channels/http/index.js.map +1 -1
  21. package/dist/channels/http/ingress.d.ts +5 -65
  22. package/dist/channels/http/ingress.d.ts.map +1 -1
  23. package/dist/channels/http/ingress.js +33 -149
  24. package/dist/channels/http/ingress.js.map +1 -1
  25. package/dist/channels/http/types.d.ts +2 -143
  26. package/dist/channels/http/types.d.ts.map +1 -1
  27. package/dist/channels/message-schema.d.ts +0 -2
  28. package/dist/channels/message-schema.d.ts.map +1 -1
  29. package/dist/channels/message-schema.js +0 -4
  30. package/dist/channels/message-schema.js.map +1 -1
  31. package/dist/channels/messaging-registry.d.ts +0 -16
  32. package/dist/channels/messaging-registry.d.ts.map +1 -1
  33. package/dist/channels/messaging-registry.js +0 -29
  34. package/dist/channels/messaging-registry.js.map +1 -1
  35. package/dist/channels/runtime.d.ts +1 -1
  36. package/dist/channels/runtime.d.ts.map +1 -1
  37. package/dist/channels/runtime.js +1 -1
  38. package/dist/channels/runtime.js.map +1 -1
  39. package/dist/channels/schedule-delivery.d.ts +1 -1
  40. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  41. package/dist/channels/schedule-delivery.js +23 -12
  42. package/dist/channels/schedule-delivery.js.map +1 -1
  43. package/dist/channels/slack/api.d.ts +0 -2
  44. package/dist/channels/slack/api.d.ts.map +1 -1
  45. package/dist/channels/slack/api.js +0 -6
  46. package/dist/channels/slack/api.js.map +1 -1
  47. package/dist/channels/slack/files.d.ts.map +1 -1
  48. package/dist/channels/slack/files.js +3 -2
  49. package/dist/channels/slack/files.js.map +1 -1
  50. package/dist/channels/slack/index.d.ts +2 -76
  51. package/dist/channels/slack/index.d.ts.map +1 -1
  52. package/dist/channels/slack/index.js +6 -177
  53. package/dist/channels/slack/index.js.map +1 -1
  54. package/dist/channels/slack/message-content.d.ts.map +1 -1
  55. package/dist/channels/slack/message-content.js +28 -23
  56. package/dist/channels/slack/message-content.js.map +1 -1
  57. package/dist/channels/source-providers.js +1 -1
  58. package/dist/channels/source-providers.js.map +1 -1
  59. package/dist/channels/trigger/client.d.ts.map +1 -1
  60. package/dist/channels/trigger/client.js +12 -6
  61. package/dist/channels/trigger/client.js.map +1 -1
  62. package/dist/channels/trigger/http.d.ts +3 -114
  63. package/dist/channels/trigger/http.d.ts.map +1 -1
  64. package/dist/channels/trigger/http.js +82 -314
  65. package/dist/channels/trigger/http.js.map +1 -1
  66. package/dist/channels/trigger/identity-context.d.ts +1 -1
  67. package/dist/channels/trigger/identity-context.d.ts.map +1 -1
  68. package/dist/channels/trigger/identity-context.js +3 -5
  69. package/dist/channels/trigger/identity-context.js.map +1 -1
  70. package/dist/channels/trigger/ingress.d.ts +1 -38
  71. package/dist/channels/trigger/ingress.d.ts.map +1 -1
  72. package/dist/channels/trigger/ingress.js +24 -49
  73. package/dist/channels/trigger/ingress.js.map +1 -1
  74. package/dist/channels/trigger/types.d.ts +3 -82
  75. package/dist/channels/trigger/types.d.ts.map +1 -1
  76. package/dist/channels/trigger/types.js +0 -36
  77. package/dist/channels/trigger/types.js.map +1 -1
  78. package/dist/channels/types.d.ts +3 -19
  79. package/dist/channels/types.d.ts.map +1 -1
  80. package/dist/channels/types.js +0 -2
  81. package/dist/channels/types.js.map +1 -1
  82. package/dist/concurrency/batch-processor.d.ts +51 -0
  83. package/dist/concurrency/batch-processor.d.ts.map +1 -0
  84. package/dist/concurrency/batch-processor.js +99 -0
  85. package/dist/concurrency/batch-processor.js.map +1 -0
  86. package/dist/connections.d.ts +1 -42
  87. package/dist/connections.d.ts.map +1 -1
  88. package/dist/connections.js +14 -127
  89. package/dist/connections.js.map +1 -1
  90. package/dist/credential-gate.d.ts +0 -2
  91. package/dist/credential-gate.d.ts.map +1 -1
  92. package/dist/credential-gate.js +3 -37
  93. package/dist/credential-gate.js.map +1 -1
  94. package/dist/define-deep-agent.d.ts.map +1 -1
  95. package/dist/define-deep-agent.js +0 -6
  96. package/dist/define-deep-agent.js.map +1 -1
  97. package/dist/identity/loopback.d.ts +7 -2
  98. package/dist/identity/loopback.d.ts.map +1 -1
  99. package/dist/identity/loopback.js +15 -4
  100. package/dist/identity/loopback.js.map +1 -1
  101. package/dist/identity/slack/links.js +3 -2
  102. package/dist/identity/slack/links.js.map +1 -1
  103. package/dist/index.d.ts +4 -15
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +1 -2
  106. package/dist/index.js.map +1 -1
  107. package/dist/ingress/index.d.ts +8 -0
  108. package/dist/ingress/index.d.ts.map +1 -1
  109. package/dist/ingress/index.js +32 -2
  110. package/dist/ingress/index.js.map +1 -1
  111. package/dist/ingress/loopback.js +4 -3
  112. package/dist/ingress/loopback.js.map +1 -1
  113. package/dist/ingress/runs.d.ts +1 -74
  114. package/dist/ingress/runs.d.ts.map +1 -1
  115. package/dist/ingress/runs.js +16 -176
  116. package/dist/ingress/runs.js.map +1 -1
  117. package/dist/managed-composition.d.ts.map +1 -1
  118. package/dist/managed-composition.js +13 -8
  119. package/dist/managed-composition.js.map +1 -1
  120. package/dist/memory/instructions-middleware.d.ts.map +1 -1
  121. package/dist/memory/instructions-middleware.js +6 -5
  122. package/dist/memory/instructions-middleware.js.map +1 -1
  123. package/dist/namespaces.d.ts +21 -21
  124. package/dist/namespaces.d.ts.map +1 -1
  125. package/dist/namespaces.js +29 -4
  126. package/dist/namespaces.js.map +1 -1
  127. package/dist/resilience/retry.d.ts +21 -0
  128. package/dist/resilience/retry.d.ts.map +1 -0
  129. package/dist/resilience/retry.js +40 -0
  130. package/dist/resilience/retry.js.map +1 -0
  131. package/dist/runtime/auth.d.ts.map +1 -1
  132. package/dist/runtime/auth.js +21 -151
  133. package/dist/runtime/auth.js.map +1 -1
  134. package/dist/runtime/channel.d.ts +0 -6
  135. package/dist/runtime/channel.d.ts.map +1 -1
  136. package/dist/runtime/channel.js.map +1 -1
  137. package/dist/runtime/graph-build-timing.d.ts +30 -0
  138. package/dist/runtime/graph-build-timing.d.ts.map +1 -0
  139. package/dist/runtime/graph-build-timing.js +50 -0
  140. package/dist/runtime/graph-build-timing.js.map +1 -0
  141. package/dist/runtime/http.d.ts +15 -0
  142. package/dist/runtime/http.d.ts.map +1 -1
  143. package/dist/runtime/http.js +37 -0
  144. package/dist/runtime/http.js.map +1 -1
  145. package/dist/runtime/identity-http.d.ts +0 -2
  146. package/dist/runtime/identity-http.d.ts.map +1 -1
  147. package/dist/runtime/identity-http.js +16 -40
  148. package/dist/runtime/identity-http.js.map +1 -1
  149. package/dist/runtime/identity-runtime.d.ts +0 -10
  150. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  151. package/dist/runtime/identity-runtime.js +0 -22
  152. package/dist/runtime/identity-runtime.js.map +1 -1
  153. package/dist/runtime/index.d.ts.map +1 -1
  154. package/dist/runtime/index.js +47 -46
  155. package/dist/runtime/index.js.map +1 -1
  156. package/dist/runtime/langsmith-env.d.ts +19 -0
  157. package/dist/runtime/langsmith-env.d.ts.map +1 -0
  158. package/dist/runtime/langsmith-env.js +38 -0
  159. package/dist/runtime/langsmith-env.js.map +1 -0
  160. package/dist/runtime/log.d.ts +8 -14
  161. package/dist/runtime/log.d.ts.map +1 -1
  162. package/dist/runtime/log.js +16 -7
  163. package/dist/runtime/log.js.map +1 -1
  164. package/dist/runtime/managed-middleware.d.ts.map +1 -1
  165. package/dist/runtime/managed-middleware.js +1 -14
  166. package/dist/runtime/managed-middleware.js.map +1 -1
  167. package/dist/runtime/managed-tools.d.ts +10 -10
  168. package/dist/runtime/managed-tools.d.ts.map +1 -1
  169. package/dist/runtime/managed-tools.js +24 -24
  170. package/dist/runtime/managed-tools.js.map +1 -1
  171. package/dist/runtime/memory/mounts.d.ts +82 -11
  172. package/dist/runtime/memory/mounts.d.ts.map +1 -1
  173. package/dist/runtime/memory/mounts.js +173 -34
  174. package/dist/runtime/memory/mounts.js.map +1 -1
  175. package/dist/runtime/memory/policy.d.ts.map +1 -1
  176. package/dist/runtime/memory/policy.js +3 -1
  177. package/dist/runtime/memory/policy.js.map +1 -1
  178. package/dist/runtime/run-input.d.ts +0 -10
  179. package/dist/runtime/run-input.d.ts.map +1 -1
  180. package/dist/runtime/run-input.js +19 -47
  181. package/dist/runtime/run-input.js.map +1 -1
  182. package/dist/runtime/sandbox-manager.d.ts +1 -1
  183. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  184. package/dist/runtime/sandbox-manager.js +10 -15
  185. package/dist/runtime/sandbox-manager.js.map +1 -1
  186. package/dist/runtime/schedule-auth.d.ts +0 -17
  187. package/dist/runtime/schedule-auth.d.ts.map +1 -1
  188. package/dist/runtime/schedule-auth.js +3 -40
  189. package/dist/runtime/schedule-auth.js.map +1 -1
  190. package/dist/runtime/selected-skills-backend.d.ts +3 -3
  191. package/dist/runtime/selected-skills-backend.d.ts.map +1 -1
  192. package/dist/runtime/selected-skills-backend.js +5 -5
  193. package/dist/runtime/selected-skills-backend.js.map +1 -1
  194. package/dist/runtime/types.d.ts +1 -5
  195. package/dist/runtime/types.d.ts.map +1 -1
  196. package/dist/runtime-schedules.d.ts +0 -13
  197. package/dist/runtime-schedules.d.ts.map +1 -1
  198. package/dist/runtime-schedules.js +22 -86
  199. package/dist/runtime-schedules.js.map +1 -1
  200. package/dist/sandbox.d.ts +6 -0
  201. package/dist/sandbox.d.ts.map +1 -1
  202. package/dist/sandbox.js +7 -3
  203. package/dist/sandbox.js.map +1 -1
  204. package/dist/schedule-channel.d.ts +2 -5
  205. package/dist/schedule-channel.d.ts.map +1 -1
  206. package/dist/schedule-channel.js +12 -13
  207. package/dist/schedule-channel.js.map +1 -1
  208. package/dist/telemetry/lifecycle.d.ts +26 -0
  209. package/dist/telemetry/lifecycle.d.ts.map +1 -0
  210. package/dist/telemetry/lifecycle.js +49 -0
  211. package/dist/telemetry/lifecycle.js.map +1 -0
  212. package/dist/telemetry/metadata.d.ts.map +1 -1
  213. package/dist/telemetry/metadata.js +4 -4
  214. package/dist/telemetry/metadata.js.map +1 -1
  215. package/dist/telemetry/otel/context.d.ts +57 -0
  216. package/dist/telemetry/otel/context.d.ts.map +1 -0
  217. package/dist/telemetry/otel/context.js +122 -0
  218. package/dist/telemetry/otel/context.js.map +1 -0
  219. package/dist/telemetry/otel/exporter.d.ts +53 -0
  220. package/dist/telemetry/otel/exporter.d.ts.map +1 -0
  221. package/dist/telemetry/otel/exporter.js +190 -0
  222. package/dist/telemetry/otel/exporter.js.map +1 -0
  223. package/dist/telemetry/otel/index.d.ts +6 -0
  224. package/dist/telemetry/otel/index.d.ts.map +1 -0
  225. package/dist/telemetry/otel/index.js +3 -0
  226. package/dist/telemetry/otel/index.js.map +1 -0
  227. package/dist/telemetry/otel/otlp.d.ts +44 -0
  228. package/dist/telemetry/otel/otlp.d.ts.map +1 -0
  229. package/dist/telemetry/otel/otlp.js +7 -0
  230. package/dist/telemetry/otel/otlp.js.map +1 -0
  231. package/dist/telemetry/otel/truncate.d.ts +10 -0
  232. package/dist/telemetry/otel/truncate.d.ts.map +1 -0
  233. package/dist/telemetry/otel/truncate.js +39 -0
  234. package/dist/telemetry/otel/truncate.js.map +1 -0
  235. package/dist/telemetry/run-listener.d.ts +1 -1
  236. package/dist/telemetry/run-listener.d.ts.map +1 -1
  237. package/dist/telemetry/run-listener.js +32 -2
  238. package/dist/telemetry/run-listener.js.map +1 -1
  239. package/dist/telemetry/transport/posthog.d.ts +13 -1
  240. package/dist/telemetry/transport/posthog.d.ts.map +1 -1
  241. package/dist/telemetry/transport/posthog.js +68 -30
  242. package/dist/telemetry/transport/posthog.js.map +1 -1
  243. package/package.json +11 -11
  244. package/dist/channels/actor.d.ts +0 -43
  245. package/dist/channels/actor.d.ts.map +0 -1
  246. package/dist/channels/actor.js +0 -2
  247. package/dist/channels/actor.js.map +0 -1
  248. package/dist/channels/delivery.d.ts +0 -21
  249. package/dist/channels/delivery.d.ts.map +0 -1
  250. package/dist/channels/delivery.js +0 -196
  251. package/dist/channels/delivery.js.map +0 -1
  252. package/dist/channels/github/connections.d.ts +0 -11
  253. package/dist/channels/github/connections.d.ts.map +0 -1
  254. package/dist/channels/github/connections.js +0 -14
  255. package/dist/channels/github/connections.js.map +0 -1
  256. package/dist/channels/github/index.d.ts +0 -8
  257. package/dist/channels/github/index.d.ts.map +0 -1
  258. package/dist/channels/github/index.js +0 -274
  259. package/dist/channels/github/index.js.map +0 -1
  260. package/dist/channels/github/mentions.d.ts +0 -12
  261. package/dist/channels/github/mentions.d.ts.map +0 -1
  262. package/dist/channels/github/mentions.js +0 -185
  263. package/dist/channels/github/mentions.js.map +0 -1
  264. package/dist/channels/github/schema.d.ts +0 -4165
  265. package/dist/channels/github/schema.d.ts.map +0 -1
  266. package/dist/channels/github/schema.js +0 -221
  267. package/dist/channels/github/schema.js.map +0 -1
  268. package/dist/channels/github/types.d.ts +0 -163
  269. package/dist/channels/github/types.d.ts.map +0 -1
  270. package/dist/channels/github/types.js +0 -2
  271. package/dist/channels/github/types.js.map +0 -1
  272. package/dist/channels/http/endpoint.d.ts +0 -95
  273. package/dist/channels/http/endpoint.d.ts.map +0 -1
  274. package/dist/channels/http/endpoint.js +0 -276
  275. package/dist/channels/http/endpoint.js.map +0 -1
  276. package/dist/channels/http/provider.d.ts +0 -119
  277. package/dist/channels/http/provider.d.ts.map +0 -1
  278. package/dist/channels/http/provider.js +0 -227
  279. package/dist/channels/http/provider.js.map +0 -1
  280. package/dist/channels/http/studio.d.ts +0 -24
  281. package/dist/channels/http/studio.d.ts.map +0 -1
  282. package/dist/channels/http/studio.js +0 -95
  283. package/dist/channels/http/studio.js.map +0 -1
  284. package/dist/channels/http/threads.d.ts +0 -7
  285. package/dist/channels/http/threads.d.ts.map +0 -1
  286. package/dist/channels/http/threads.js +0 -10
  287. package/dist/channels/http/threads.js.map +0 -1
  288. package/dist/channels/linear/connections.d.ts +0 -11
  289. package/dist/channels/linear/connections.d.ts.map +0 -1
  290. package/dist/channels/linear/connections.js +0 -14
  291. package/dist/channels/linear/connections.js.map +0 -1
  292. package/dist/channels/linear/graphql.d.ts +0 -57
  293. package/dist/channels/linear/graphql.d.ts.map +0 -1
  294. package/dist/channels/linear/graphql.js +0 -167
  295. package/dist/channels/linear/graphql.js.map +0 -1
  296. package/dist/channels/linear/index.d.ts +0 -9
  297. package/dist/channels/linear/index.d.ts.map +0 -1
  298. package/dist/channels/linear/index.js +0 -489
  299. package/dist/channels/linear/index.js.map +0 -1
  300. package/dist/channels/linear/schema.d.ts +0 -1050
  301. package/dist/channels/linear/schema.d.ts.map +0 -1
  302. package/dist/channels/linear/schema.js +0 -255
  303. package/dist/channels/linear/schema.js.map +0 -1
  304. package/dist/channels/linear/types.d.ts +0 -162
  305. package/dist/channels/linear/types.d.ts.map +0 -1
  306. package/dist/channels/linear/types.js +0 -2
  307. package/dist/channels/linear/types.js.map +0 -1
  308. package/dist/channels/reserved-connections.d.ts +0 -12
  309. package/dist/channels/reserved-connections.d.ts.map +0 -1
  310. package/dist/channels/reserved-connections.js +0 -55
  311. package/dist/channels/reserved-connections.js.map +0 -1
  312. package/dist/channels/run-input.d.ts +0 -71
  313. package/dist/channels/run-input.d.ts.map +0 -1
  314. package/dist/channels/run-input.js +0 -155
  315. package/dist/channels/run-input.js.map +0 -1
  316. package/dist/channels/slack/connections.d.ts +0 -6
  317. package/dist/channels/slack/connections.d.ts.map +0 -1
  318. package/dist/channels/slack/connections.js +0 -6
  319. package/dist/channels/slack/connections.js.map +0 -1
  320. package/dist/channels/slack/events.d.ts +0 -272
  321. package/dist/channels/slack/events.d.ts.map +0 -1
  322. package/dist/channels/slack/events.js +0 -235
  323. package/dist/channels/slack/events.js.map +0 -1
  324. package/dist/channels/slack/status.d.ts +0 -76
  325. package/dist/channels/slack/status.d.ts.map +0 -1
  326. package/dist/channels/slack/status.js +0 -427
  327. package/dist/channels/slack/status.js.map +0 -1
  328. package/dist/runtime/channel-icon.d.ts +0 -22
  329. package/dist/runtime/channel-icon.d.ts.map +0 -1
  330. package/dist/runtime/channel-icon.js +0 -70
  331. package/dist/runtime/channel-icon.js.map +0 -1
  332. package/dist/runtime/managed-thread.d.ts +0 -60
  333. package/dist/runtime/managed-thread.d.ts.map +0 -1
  334. package/dist/runtime/managed-thread.js +0 -76
  335. package/dist/runtime/managed-thread.js.map +0 -1
  336. package/dist/runtime/thread-record.d.ts +0 -81
  337. package/dist/runtime/thread-record.d.ts.map +0 -1
  338. package/dist/runtime/thread-record.js +0 -205
  339. package/dist/runtime/thread-record.js.map +0 -1
  340. package/dist/values.d.ts +0 -15
  341. package/dist/values.d.ts.map +0 -1
  342. package/dist/values.js +0 -31
  343. package/dist/values.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { GraphCallbackHandler } from "@langchain/langgraph";
2
2
  import { TelemetryClient } from "./client.js";
3
+ import { recordLog } from "./otel/index.js";
3
4
  import { isTelemetryDisabled } from "./gates.js";
4
5
  import { finishRun } from "./run.js";
5
6
  import { posthogTransport } from "./transport/posthog.js";
@@ -36,8 +37,9 @@ export class RunTelemetryListener extends GraphCallbackHandler {
36
37
  this.report(this.interrupted ? "interrupted" : "success");
37
38
  }
38
39
  }
39
- handleChainError(_error, runId) {
40
+ handleChainError(error, runId) {
40
41
  if (runId === this.rootRunId) {
42
+ recordLog("ERROR", "run failed", { error });
41
43
  this.report("failure");
42
44
  }
43
45
  }
@@ -45,10 +47,38 @@ export class RunTelemetryListener extends GraphCallbackHandler {
45
47
  if (this.pending.emitted)
46
48
  return;
47
49
  this.pending.emitted = true;
50
+ const event = finishRun(this.pending, outcome);
51
+ recordLog("INFO", "run completed", {
52
+ attributes: completionAttributes(event),
53
+ });
48
54
  // Delivery must not delay the run result.
49
55
  runClient()
50
- .record(finishRun(this.pending, outcome))
56
+ .record(event)
51
57
  .catch(() => { });
52
58
  }
53
59
  }
60
+ /**
61
+ * Event bookkeeping that says nothing about the run. `event_id` stays, so the
62
+ * record joins to its PostHog event.
63
+ */
64
+ const EVENT_ONLY_FIELDS = new Set([
65
+ "event_type",
66
+ "schema_version",
67
+ "created_at",
68
+ "distinct_id",
69
+ ]);
70
+ /** The `run_completed` fields as attributes of the completion log record. */
71
+ function completionAttributes(event) {
72
+ const attributes = {};
73
+ for (const [key, value] of Object.entries(event)) {
74
+ if (EVENT_ONLY_FIELDS.has(key))
75
+ continue;
76
+ if (typeof value === "string" ||
77
+ typeof value === "number" ||
78
+ typeof value === "boolean") {
79
+ attributes[key] = value;
80
+ }
81
+ }
82
+ return attributes;
83
+ }
54
84
  //# sourceMappingURL=run-listener.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-listener.js","sourceRoot":"","sources":["../../src/telemetry/run-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,IAAI,MAAsD,CAAC;AAE3D,SAAS,SAAS;IAChB,MAAM,KAAK,IAAI,eAAe,CAC5B,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAClE,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,6BAA6B,CAC3C,QAAwD;IAExD,MAAM,GAAG,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,OAAO,oBAAqB,SAAQ,oBAAoB;IAM/B,OAAO;IALpC,IAAI,GAAG,sBAAsB,CAAC;IAC9B,aAAa,GAAG,IAAI,CAAC;IACb,SAAS,CAAU;IACnB,WAAW,GAAG,KAAK,CAAC;IAE5B,YAA6B,OAAmB;QAC9C,KAAK,EAAE,CAAC;uBADmB,OAAO;IAEpC,CAAC;IAED,gBAAgB,CAAC,MAAe,EAAE,OAAgB,EAAE,KAAa;QAC/D,mEAAmE;QACnE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;IAC3B,CAAC;IAED,eAAe,CAAC,KAA0B;QACxC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,cAAc,CAAC,QAAiB,EAAE,KAAa;QAC7C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,MAAe,EAAE,KAAa;QAC7C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAmB;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO;QACjC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,0CAA0C;QAC1C,SAAS,EAAE;aACR,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;aACxC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"run-listener.js","sourceRoot":"","sources":["../../src/telemetry/run-listener.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { RetryPolicy } from "../../resilience/retry.js";
1
2
  import type { TelemetryEvent } from "../event.js";
2
3
  import type { TelemetryTransport } from "./types.js";
3
4
  interface PosthogConfig {
@@ -10,13 +11,24 @@ export interface PosthogTransportOptions {
10
11
  host?: string;
11
12
  /** Fetch override for tests. */
12
13
  fetch?: typeof fetch;
14
+ /** Batch timing and retry overrides for tests. */
15
+ maxWaitMs?: number;
16
+ retry?: RetryPolicy;
13
17
  }
18
+ /**
19
+ * Sends events to PostHog in the background, in batches. `send` only queues
20
+ * the event, so delivery never delays a run.
21
+ */
14
22
  export declare class PosthogTransport implements TelemetryTransport {
15
23
  private readonly apiKey;
16
- private readonly captureUrl;
24
+ private readonly batchUrl;
17
25
  private readonly fetchImpl;
26
+ private readonly processor;
18
27
  constructor(options: PosthogTransportOptions);
19
28
  send(event: TelemetryEvent): Promise<void>;
29
+ /** Refuse new events and drain what is queued until `deadlineMs`. */
30
+ shutdown(deadlineMs: number): Promise<void>;
31
+ private post;
20
32
  }
21
33
  export declare function posthogTransport(env?: Record<string, string | undefined>): PosthogTransport | undefined;
22
34
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"posthog.d.ts","sourceRoot":"","sources":["../../../src/telemetry/transport/posthog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2BrD,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,WAAW,GAAE,MAAgC,GAC5C,aAAa,GAAG,SAAS,CAS3B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,YAAY,OAAO,EAAE,uBAAuB,EAO3C;IAEK,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/C;CACF;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,gBAAgB,GAAG,SAAS,CAW9B"}
1
+ {"version":3,"file":"posthog.d.ts","sourceRoot":"","sources":["../../../src/telemetry/transport/posthog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAwCrD,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,WAAW,GAAE,MAAgC,GAC5C,aAAa,GAAG,SAAS,CAS3B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAE3D,YAAY,OAAO,EAAE,uBAAuB,EAgB3C;IAEK,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;IAED,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1C;YAEa,IAAI;CAmCnB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,gBAAgB,GAAG,SAAS,CAgB9B"}
@@ -1,19 +1,34 @@
1
- import { fetchWithTimeout } from "../../runtime/http.js";
1
+ import { BatchProcessor } from "../../concurrency/batch-processor.js";
2
+ import { withRetry } from "../../resilience/retry.js";
3
+ import { fetchWithTimeout, HttpStatusError, isRetryable, requestedDelayMs, } from "../../runtime/http.js";
4
+ import { onShutdown } from "../lifecycle.js";
2
5
  const POSTHOG_API_KEY_ENV = "MDA_POSTHOG_API_KEY";
3
6
  const POSTHOG_HOST_ENV = "MDA_POSTHOG_HOST";
4
7
  const DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com";
5
- const POSTHOG_CAPTURE_PATH = "/i/v0/e/";
6
- /** A send is awaited at the end of a run, so it must not extend the wall clock. */
7
- const REQUEST_TIMEOUT_MS = 1_000;
8
+ const POSTHOG_BATCH_PATH = "/batch/";
9
+ /** Bounds one batch request; the OTel exporters' default. */
10
+ const REQUEST_TIMEOUT_MS = 10_000;
11
+ const MAX_BATCH_EVENTS = 100;
12
+ const BATCH_WAIT_MS = 1_000;
13
+ /** Events waiting to send; later ones are dropped. */
14
+ const MAX_QUEUED_EVENTS = 1_000;
15
+ /** 429 and 5xx (including timeouts and network failures) are tried again. */
16
+ const SEND_RETRY = {
17
+ maxAttempts: 5,
18
+ baseDelayMs: 1_000,
19
+ maxDelayMs: 30_000,
20
+ retryOn: isRetryable,
21
+ delayFor: requestedDelayMs,
22
+ };
8
23
  /** Public write-only key: submission only, and already in every released binary. */
9
24
  const DEFAULT_POSTHOG_API_KEY = "phc_C6RmkdQQ3kWHgj6o7kby3aP6dbewjpLzfanw9WcmU65V";
10
25
  function nonempty(value) {
11
26
  const trimmed = value?.trim();
12
27
  return trimmed ? trimmed : undefined;
13
28
  }
14
- /** `new URL` alone accepts `ftp:`/`file:`. Python's `capture_url` rejects them. */
15
- function captureUrl(host) {
16
- const url = new URL(`${host.replace(/\/+$/, "")}${POSTHOG_CAPTURE_PATH}`);
29
+ /** `new URL` alone accepts `ftp:`/`file:`. Python's `batch_url` rejects them. */
30
+ function batchUrl(host) {
31
+ const url = new URL(`${host.replace(/\/+$/, "")}${POSTHOG_BATCH_PATH}`);
17
32
  if (url.protocol !== "http:" && url.protocol !== "https:") {
18
33
  throw new Error("PostHog host must be a valid URL");
19
34
  }
@@ -29,45 +44,63 @@ export function resolvePosthogConfig(env, bakedApiKey = DEFAULT_POSTHOG_API_KEY)
29
44
  host: nonempty(env[POSTHOG_HOST_ENV]) ?? DEFAULT_POSTHOG_HOST,
30
45
  };
31
46
  }
47
+ /**
48
+ * Sends events to PostHog in the background, in batches. `send` only queues
49
+ * the event, so delivery never delays a run.
50
+ */
32
51
  export class PosthogTransport {
33
52
  apiKey;
34
- captureUrl;
53
+ batchUrl;
35
54
  fetchImpl;
55
+ processor;
36
56
  constructor(options) {
37
57
  if (!options.apiKey) {
38
58
  throw new Error("PostHog project ingestion key is required");
39
59
  }
40
60
  this.apiKey = options.apiKey;
41
- this.captureUrl = captureUrl(options.host ?? DEFAULT_POSTHOG_HOST);
61
+ this.batchUrl = batchUrl(options.host ?? DEFAULT_POSTHOG_HOST);
42
62
  this.fetchImpl = options.fetch ?? fetch;
63
+ this.processor = new BatchProcessor({
64
+ handle: withRetry((batch, signal) => this.post(batch, signal), options.retry ?? SEND_RETRY),
65
+ maxBatchSize: MAX_BATCH_EVENTS,
66
+ maxWaitMs: options.maxWaitMs ?? BATCH_WAIT_MS,
67
+ maxQueued: MAX_QUEUED_EVENTS,
68
+ });
43
69
  }
44
70
  async send(event) {
45
- const response = await fetchWithTimeout(this.captureUrl.toString(), {
71
+ this.processor.push(event);
72
+ }
73
+ /** Refuse new events and drain what is queued until `deadlineMs`. */
74
+ shutdown(deadlineMs) {
75
+ return this.processor.shutdown(deadlineMs);
76
+ }
77
+ async post(batch, signal) {
78
+ const response = await fetchWithTimeout(this.batchUrl.toString(), {
46
79
  method: "POST",
47
80
  headers: { "content-type": "application/json" },
48
81
  body: JSON.stringify({
49
82
  api_key: this.apiKey,
50
- event: event.event_type,
51
- distinct_id: event.distinct_id,
52
- timestamp: event.created_at,
53
- properties: {
54
- // The subject is an organization, and the request leaves our
55
- // infrastructure rather than the customer's, so a person profile
56
- // and a geoip lookup would both describe the wrong thing.
57
- $process_person_profile: false,
58
- $geoip_disable: true,
59
- ...event,
60
- },
83
+ batch: batch.map((event) => ({
84
+ // PostHog drops a retried event it already ingested by `uuid`.
85
+ uuid: event.event_id,
86
+ event: event.event_type,
87
+ distinct_id: event.distinct_id,
88
+ timestamp: event.created_at,
89
+ properties: {
90
+ // The subject is an organization, and the request leaves our
91
+ // infrastructure rather than the customer's, so a person profile
92
+ // and a geoip lookup would both describe the wrong thing.
93
+ $process_person_profile: false,
94
+ $geoip_disable: true,
95
+ ...event,
96
+ },
97
+ })),
61
98
  }),
99
+ signal,
62
100
  }, REQUEST_TIMEOUT_MS, this.fetchImpl);
63
- try {
64
- if (!response.ok) {
65
- throw new Error(`PostHog rejected analytics event: ${response.status}`);
66
- }
67
- }
68
- finally {
69
- await response.body?.cancel();
70
- }
101
+ await response.body?.cancel();
102
+ if (!response.ok)
103
+ throw HttpStatusError.from(response);
71
104
  }
72
105
  }
73
106
  export function posthogTransport(env = process.env) {
@@ -76,7 +109,12 @@ export function posthogTransport(env = process.env) {
76
109
  return undefined;
77
110
  }
78
111
  try {
79
- return new PosthogTransport({ apiKey: config.apiKey, host: config.host });
112
+ const transport = new PosthogTransport({
113
+ apiKey: config.apiKey,
114
+ host: config.host,
115
+ });
116
+ onShutdown((ms) => transport.shutdown(ms));
117
+ return transport;
80
118
  }
81
119
  catch {
82
120
  // A malformed host must not take the runtime down with it.
@@ -1 +1 @@
1
- {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/transport/posthog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/transport/posthog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "managed-deepagents",
3
- "version": "0.9.6-dev.15",
3
+ "version": "0.9.6-dev.17",
4
4
  "description": "Managed Deep Agents — the `defineDeepAgent` authoring interface plus the CLI that compiles and deploys a code-first Deep Agent repository to a managed LangGraph runtime.",
5
5
  "keywords": [
6
6
  "langchain",
@@ -52,30 +52,30 @@
52
52
  "node": ">=22"
53
53
  },
54
54
  "dependencies": {
55
- "@langchain/core": "^1.2.17",
55
+ "@langchain/core": "1.2.17",
56
56
  "@langchain/langgraph": "^1.4.18",
57
57
  "@langchain/langgraph-sdk": "^1.12.2",
58
58
  "@langchain/mcp-adapters": "^2.0.1",
59
59
  "@standard-schema/spec": "^1.1.0",
60
- "deepagents": "^1.13.4",
60
+ "deepagents": "^1.15.1",
61
61
  "hono": "^4.13.7",
62
62
  "jose": "^6.2.12",
63
- "langchain": "^1.5.12",
63
+ "langchain": "1.5.16",
64
64
  "langsmith": "^0.10.2",
65
65
  "uuid": "^14.0.2",
66
66
  "zod": "^4.6.2"
67
67
  },
68
68
  "optionalDependencies": {
69
- "@langchain/managed-deepagents-darwin-arm64": "0.9.6-dev.15",
70
- "@langchain/managed-deepagents-darwin-x64": "0.9.6-dev.15",
71
- "@langchain/managed-deepagents-linux-arm64": "0.9.6-dev.15",
72
- "@langchain/managed-deepagents-linux-x64": "0.9.6-dev.15",
73
- "@langchain/managed-deepagents-win32-arm64": "0.9.6-dev.15",
74
- "@langchain/managed-deepagents-win32-x64": "0.9.6-dev.15"
69
+ "@langchain/managed-deepagents-darwin-arm64": "0.9.6-dev.17",
70
+ "@langchain/managed-deepagents-darwin-x64": "0.9.6-dev.17",
71
+ "@langchain/managed-deepagents-linux-arm64": "0.9.6-dev.17",
72
+ "@langchain/managed-deepagents-linux-x64": "0.9.6-dev.17",
73
+ "@langchain/managed-deepagents-win32-arm64": "0.9.6-dev.17",
74
+ "@langchain/managed-deepagents-win32-x64": "0.9.6-dev.17"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@types/node": "^26.5.1",
78
- "oxfmt": "^0.71.0",
78
+ "oxfmt": "^0.74.0",
79
79
  "oxlint": "^1.82.0",
80
80
  "typescript": "^7.0.2",
81
81
  "vitest": "^5.0.0"
@@ -1,43 +0,0 @@
1
- /**
2
- * Who caused a channel event: the signed sender of a GitHub or Linear webhook,
3
- * or the Slack user Trigger Server names on a delivery, which MDA can't verify
4
- * yet. It is personal data: MDA neither logs it nor adds it to a run's
5
- * metadata.
6
- */
7
- interface ActorBase<P extends string> {
8
- provider: P;
9
- /** The provider's ID for them. */
10
- id: string;
11
- }
12
- /** An actor whose provider may name them. */
13
- interface NamedActorBase<P extends string> extends ActorBase<P> {
14
- /** Their name or handle, when the provider sends one. */
15
- name?: string;
16
- /** Their email, when the provider sends one. */
17
- email?: string;
18
- }
19
- /**
20
- * A Slack user, as Trigger Server read them from Slack's signed request.
21
- * Trigger Server's delivery names no name or email. MDA doesn't yet verify
22
- * the delivery's service key, so this is no identity check.
23
- */
24
- export interface SlackActor extends ActorBase<"slack"> {
25
- /**
26
- * Their own Slack workspace (team). In a Slack Connect channel, someone
27
- * from another organization keeps theirs rather than your app's.
28
- */
29
- teamId: string;
30
- }
31
- /** A GitHub account, as the signed webhook's `sender` names it; `name` is its login. */
32
- export interface GitHubActor extends NamedActorBase<"github"> {
33
- type: "User" | "Bot" | "Organization";
34
- }
35
- /** A Linear user or app, as the signed webhook names it. */
36
- export interface LinearActor extends NamedActorBase<"linear"> {
37
- /** Linear's kind of actor, such as `user`, when it sends one. */
38
- type?: string;
39
- }
40
- /** Who caused an event, on any channel; switch on `provider`. */
41
- export type ChannelActor = SlackActor | GitHubActor | LinearActor;
42
- export {};
43
- //# sourceMappingURL=actor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/channels/actor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,UAAU,SAAS,CAAC,CAAC,SAAS,MAAM;IAClC,QAAQ,EAAE,CAAC,CAAC;IACZ,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,6CAA6C;AAC7C,UAAU,cAAc,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAC7D,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAW,SAAQ,SAAS,CAAC,OAAO,CAAC;IACpD;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wFAAwF;AACxF,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAC3D,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,cAAc,CAAC;CACvC;AAED,4DAA4D;AAC5D,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAC3D,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=actor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/channels/actor.ts"],"names":[],"mappings":""}
@@ -1,21 +0,0 @@
1
- import type { CompiledStateGraph } from "@langchain/langgraph";
2
- import type { RunThread } from "../runtime/managed-thread.js";
3
- type Graph = Pick<CompiledStateGraph<unknown, unknown>, "getState" | "getStateHistory">;
4
- /**
5
- * Deliver a finished top-level run's result to its thread's origin. A thread
6
- * without an origin gets nothing.
7
- *
8
- * Failures follow what each channel did before: a Trigger post and any
9
- * scheduled delivery fail the run; a direct channel's post is logged and the
10
- * run still succeeds.
11
- */
12
- export declare function deliverRunResult(graph: Graph, run: RunThread,
13
- /** The Agent Server run and its assistant, for notices and their links. */
14
- { runId, assistantId }?: {
15
- runId?: string;
16
- assistantId?: string;
17
- }): Promise<void>;
18
- /** The Trigger post id for a run's answer, stable across retries. */
19
- export declare function replyActionId(runId: string): string;
20
- export {};
21
- //# sourceMappingURL=delivery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/channels/delivery.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,sBAAsB,CAAC;AAI9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAmB9D,KAAK,KAAK,GAAG,IAAI,CACf,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,EACpC,UAAU,GAAG,iBAAiB,CAC/B,CAAC;AAGF;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,SAAS;AACd,2EAA2E;AAC3E,EAAE,KAAK,EAAE,WAAW,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACpE,OAAO,CAAC,IAAI,CAAC,CAgCf;AA+BD,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -1,196 +0,0 @@
1
- /**
2
- * The run's one delivery step: when the run ends, its answer goes to the
3
- * thread's origin, and a paused Trigger run reports what it waits on.
4
- *
5
- * The run does it, not the process that received the event, so a restart of
6
- * that process loses nothing, and a run LangSmith Studio resumes answers the
7
- * conversation the paused run came from.
8
- */
9
- import { randomUUID } from "node:crypto";
10
- import { v5 as uuidv5 } from "uuid";
11
- import { z } from "zod";
12
- import { triggerTargetSchema } from "../runtime/thread-record.js";
13
- import { logger } from "../runtime/log.js";
14
- import { QUIET_REPLY, extractReplyContent, extractReplyText, } from "./assistant-text.js";
15
- import { channelAutoRepliesForName, messagingTransportForName, pausedNoticeForName, } from "./messaging-registry.js";
16
- import { createTriggerClient } from "./trigger/client.js";
17
- import { resolveTracerSessionId } from "./trigger/tracing-project.js";
18
- import { createTriggerTransport } from "./trigger/transport.js";
19
- /**
20
- * Deliver a finished top-level run's result to its thread's origin. A thread
21
- * without an origin gets nothing.
22
- *
23
- * Failures follow what each channel did before: a Trigger post and any
24
- * scheduled delivery fail the run; a direct channel's post is logged and the
25
- * run still succeeds.
26
- */
27
- export async function deliverRunResult(graph, run,
28
- /** The Agent Server run and its assistant, for notices and their links. */
29
- { runId, assistantId } = {}) {
30
- const { thread, origin } = run;
31
- if (!thread || !origin)
32
- return;
33
- const config = { configurable: { thread_id: thread.id } };
34
- const state = await graph.getState(config);
35
- const interrupts = pendingInterrupts(state);
36
- if (interrupts.length) {
37
- if (origin.transport === "trigger_server")
38
- await reportInterrupted(origin, thread.id, runId, interrupts);
39
- else
40
- await noticePaused(origin, thread.id, assistantId);
41
- return;
42
- }
43
- // A static breakpoint stopped the run before it finished: no answer yet.
44
- if (state.next.length > 0)
45
- return;
46
- // A channel declared with `reply: "none"` leaves replying to the agent.
47
- if (!channelAutoRepliesForName(origin.name))
48
- return;
49
- const values = { messages: messagesOf(state.values) };
50
- const boundary = await replyBoundary(graph, config, values.messages);
51
- if (extractReplyText(values, boundary).trim() === QUIET_REPLY)
52
- return;
53
- const content = origin.transport === "trigger_server"
54
- ? extractReplyText(values, boundary) || null
55
- : extractReplyContent(values, boundary);
56
- if (content === null)
57
- return;
58
- const scheduled = origin.event?.type === "schedule";
59
- try {
60
- await post(origin, content, runId);
61
- }
62
- catch (error) {
63
- if (scheduled || origin.transport === "trigger_server")
64
- throw error;
65
- // The answer stays in the thread; the run itself succeeded.
66
- logger.error(`channel reply failed (${logger.safeErrorLabel(error)})`);
67
- }
68
- }
69
- async function post(origin, content, runId) {
70
- const newThread = origin.event?.type === "schedule" ? origin.event.new_thread : undefined;
71
- const message = { type: "content", content };
72
- if (origin.transport === "trigger_server") {
73
- const client = createTriggerClient();
74
- if (!client)
75
- throw new Error("channel delivery is not configured");
76
- // A retried run posts its answer once.
77
- await createTriggerTransport(client, {
78
- actionId: runId ? replyActionId(runId) : randomUUID(),
79
- }).post({ message, target: origin.target, newThread });
80
- return;
81
- }
82
- const transport = messagingTransportForName(origin.name);
83
- if (!transport)
84
- throw new Error(`channel delivery is unavailable: no channel ${JSON.stringify(logger.logIdentifier(origin.name))}`);
85
- await transport.post({
86
- message,
87
- target: origin.target,
88
- ...(newThread !== undefined && { newThread }),
89
- });
90
- }
91
- /** The Trigger post id for a run's answer, stable across retries. */
92
- export function replyActionId(runId) {
93
- return uuidv5(`mda-reply:${runId}`, uuidv5.URL);
94
- }
95
- /**
96
- * Where the run's messages start: after the last message of the latest
97
- * checkpoint the run's input made. A resume makes none, so it counts from the
98
- * paused run's input. Without one, the reply falls back to the answers since
99
- * the last user message.
100
- */
101
- async function replyBoundary(graph, config, messages) {
102
- let input;
103
- for await (const snapshot of graph.getStateHistory(config, {
104
- filter: { source: "input" },
105
- limit: 1,
106
- })) {
107
- input = snapshot;
108
- break;
109
- }
110
- // A checkpointer may ignore the filter.
111
- if (input?.metadata?.source !== "input")
112
- return {};
113
- const before = messagesOf(input.values);
114
- const afterId = Array.isArray(before) ? messageId(before.at(-1)) : undefined;
115
- const final = Array.isArray(messages) ? messages : [];
116
- return afterId !== undefined &&
117
- final.some((message) => messageId(message) === afterId)
118
- ? { afterId }
119
- : {};
120
- }
121
- /** The `messages` of graph state values, when they are an object. */
122
- function messagesOf(values) {
123
- return isObject(values) ? values.messages : undefined;
124
- }
125
- function messageId(message) {
126
- const id = isObject(message) ? message.id : undefined;
127
- return typeof id === "string" && id ? id : undefined;
128
- }
129
- function isObject(value) {
130
- return typeof value === "object" && value !== null;
131
- }
132
- /** An interrupt Trigger can resume: a non-blank id, with its value. */
133
- const interruptSchema = z.object({
134
- id: z.string().refine((id) => id.trim().length > 0),
135
- value: z.unknown(),
136
- response_schema: z.unknown().optional(),
137
- });
138
- /** The interrupts the run stopped on, as Trigger forwards them. */
139
- function pendingInterrupts(state) {
140
- return state.tasks.flatMap((task) => (task.interrupts ?? []).flatMap((entry) => {
141
- const parsed = interruptSchema.safeParse(entry);
142
- if (!parsed.success)
143
- return [];
144
- const { id, value, response_schema: schema } = parsed.data;
145
- return [
146
- { id, value, ...(isObject(schema) && { response_schema: schema }) },
147
- ];
148
- }));
149
- }
150
- /**
151
- * Tell a direct channel's conversation the run waits on a decision, with a
152
- * Studio link to this thread, when the channel has such a notice. Best
153
- * effort: it never fails the run.
154
- */
155
- async function noticePaused(origin, threadId, assistantId) {
156
- const notice = pausedNoticeForName(origin.name);
157
- if (!notice)
158
- return;
159
- try {
160
- await notice(origin.target, { threadId, ...(assistantId && { assistantId }) }, "interrupted");
161
- }
162
- catch (error) {
163
- logger.error(`channel paused notice failed (${logger.safeErrorLabel(error)})`);
164
- }
165
- }
166
- /** Tell Trigger the run waits on a decision. Best effort: it never fails the run. */
167
- async function reportInterrupted(origin, threadId, runId, interrupts) {
168
- const target = triggerTargetSchema.safeParse(origin.target);
169
- try {
170
- if (!target.success) {
171
- logger.warn("channel interrupt was not reported: invalid Trigger target");
172
- return;
173
- }
174
- const client = createTriggerClient();
175
- if (!client || !runId) {
176
- logger.warn("channel interrupt was not reported: no run or transport");
177
- return;
178
- }
179
- const tracerSessionId = await resolveTracerSessionId();
180
- await client.postRuntimeEvent(target.data.channel_id, {
181
- id: randomUUID(),
182
- type: "run.interrupted",
183
- delivery_id: origin.deliveryId,
184
- source_thread_key: origin.sourceThreadKey,
185
- address: target.data.address,
186
- run_thread_id: threadId,
187
- run_id: runId,
188
- interrupts,
189
- ...(tracerSessionId ? { tracer_session_id: tracerSessionId } : {}),
190
- });
191
- }
192
- catch (error) {
193
- logger.warn(`channel interrupt was not reported (${logger.safeErrorLabel(error)})`);
194
- }
195
- }
196
- //# sourceMappingURL=delivery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/channels/delivery.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Reserved agent connection for the deployment's GitHub App: reading it
3
- * returns an installation token for the App `mda deploy` set up.
4
- */
5
- export declare const GITHUB_TOKEN_SLUG = "mda/github-token";
6
- /**
7
- * The deployment's GitHub App connection, or one of the App values stored
8
- * beside it (`webhook-secret`, `bot-id`) when `suffix` is given.
9
- */
10
- export declare function githubAppConnectionSlug(deploymentId: string, suffix?: string): string;
11
- //# sourceMappingURL=connections.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../../src/channels/github/connections.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,qBAAqB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER"}
@@ -1,14 +0,0 @@
1
- import { appConnectionSlug } from "../http/provider.js";
2
- /**
3
- * Reserved agent connection for the deployment's GitHub App: reading it
4
- * returns an installation token for the App `mda deploy` set up.
5
- */
6
- export const GITHUB_TOKEN_SLUG = "mda/github-token";
7
- /**
8
- * The deployment's GitHub App connection, or one of the App values stored
9
- * beside it (`webhook-secret`, `bot-id`) when `suffix` is given.
10
- */
11
- export function githubAppConnectionSlug(deploymentId, suffix) {
12
- return appConnectionSlug("github", deploymentId, suffix);
13
- }
14
- //# sourceMappingURL=connections.js.map