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

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 (332) hide show
  1. package/README.md +953 -57
  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/channels/actor.d.ts +43 -0
  7. package/dist/channels/actor.d.ts.map +1 -0
  8. package/dist/channels/actor.js +2 -0
  9. package/dist/channels/actor.js.map +1 -0
  10. package/dist/channels/assistant-text.d.ts +24 -0
  11. package/dist/channels/assistant-text.d.ts.map +1 -1
  12. package/dist/channels/assistant-text.js +65 -1
  13. package/dist/channels/assistant-text.js.map +1 -1
  14. package/dist/channels/binding.d.ts +20 -1
  15. package/dist/channels/binding.d.ts.map +1 -1
  16. package/dist/channels/binding.js +39 -10
  17. package/dist/channels/binding.js.map +1 -1
  18. package/dist/channels/delivery.d.ts +21 -0
  19. package/dist/channels/delivery.d.ts.map +1 -0
  20. package/dist/channels/delivery.js +196 -0
  21. package/dist/channels/delivery.js.map +1 -0
  22. package/dist/channels/github/connections.d.ts +11 -0
  23. package/dist/channels/github/connections.d.ts.map +1 -0
  24. package/dist/channels/github/connections.js +14 -0
  25. package/dist/channels/github/connections.js.map +1 -0
  26. package/dist/channels/github/index.d.ts +8 -0
  27. package/dist/channels/github/index.d.ts.map +1 -0
  28. package/dist/channels/github/index.js +274 -0
  29. package/dist/channels/github/index.js.map +1 -0
  30. package/dist/channels/github/mentions.d.ts +12 -0
  31. package/dist/channels/github/mentions.d.ts.map +1 -0
  32. package/dist/channels/github/mentions.js +185 -0
  33. package/dist/channels/github/mentions.js.map +1 -0
  34. package/dist/channels/github/schema.d.ts +4165 -0
  35. package/dist/channels/github/schema.d.ts.map +1 -0
  36. package/dist/channels/github/schema.js +221 -0
  37. package/dist/channels/github/schema.js.map +1 -0
  38. package/dist/channels/github/types.d.ts +163 -0
  39. package/dist/channels/github/types.d.ts.map +1 -0
  40. package/dist/channels/github/types.js +2 -0
  41. package/dist/channels/github/types.js.map +1 -0
  42. package/dist/channels/http/endpoint.d.ts +95 -0
  43. package/dist/channels/http/endpoint.d.ts.map +1 -0
  44. package/dist/channels/http/endpoint.js +276 -0
  45. package/dist/channels/http/endpoint.js.map +1 -0
  46. package/dist/channels/http/http.d.ts.map +1 -1
  47. package/dist/channels/http/http.js +386 -65
  48. package/dist/channels/http/http.js.map +1 -1
  49. package/dist/channels/http/index.d.ts +2 -1
  50. package/dist/channels/http/index.d.ts.map +1 -1
  51. package/dist/channels/http/index.js +14 -10
  52. package/dist/channels/http/index.js.map +1 -1
  53. package/dist/channels/http/ingress.d.ts +65 -5
  54. package/dist/channels/http/ingress.d.ts.map +1 -1
  55. package/dist/channels/http/ingress.js +149 -33
  56. package/dist/channels/http/ingress.js.map +1 -1
  57. package/dist/channels/http/provider.d.ts +119 -0
  58. package/dist/channels/http/provider.d.ts.map +1 -0
  59. package/dist/channels/http/provider.js +227 -0
  60. package/dist/channels/http/provider.js.map +1 -0
  61. package/dist/channels/http/studio.d.ts +24 -0
  62. package/dist/channels/http/studio.d.ts.map +1 -0
  63. package/dist/channels/http/studio.js +95 -0
  64. package/dist/channels/http/studio.js.map +1 -0
  65. package/dist/channels/http/threads.d.ts +7 -0
  66. package/dist/channels/http/threads.d.ts.map +1 -0
  67. package/dist/channels/http/threads.js +10 -0
  68. package/dist/channels/http/threads.js.map +1 -0
  69. package/dist/channels/http/types.d.ts +143 -2
  70. package/dist/channels/http/types.d.ts.map +1 -1
  71. package/dist/channels/linear/connections.d.ts +11 -0
  72. package/dist/channels/linear/connections.d.ts.map +1 -0
  73. package/dist/channels/linear/connections.js +14 -0
  74. package/dist/channels/linear/connections.js.map +1 -0
  75. package/dist/channels/linear/graphql.d.ts +57 -0
  76. package/dist/channels/linear/graphql.d.ts.map +1 -0
  77. package/dist/channels/linear/graphql.js +167 -0
  78. package/dist/channels/linear/graphql.js.map +1 -0
  79. package/dist/channels/linear/index.d.ts +9 -0
  80. package/dist/channels/linear/index.d.ts.map +1 -0
  81. package/dist/channels/linear/index.js +489 -0
  82. package/dist/channels/linear/index.js.map +1 -0
  83. package/dist/channels/linear/schema.d.ts +1050 -0
  84. package/dist/channels/linear/schema.d.ts.map +1 -0
  85. package/dist/channels/linear/schema.js +255 -0
  86. package/dist/channels/linear/schema.js.map +1 -0
  87. package/dist/channels/linear/types.d.ts +162 -0
  88. package/dist/channels/linear/types.d.ts.map +1 -0
  89. package/dist/channels/linear/types.js +2 -0
  90. package/dist/channels/linear/types.js.map +1 -0
  91. package/dist/channels/message-schema.d.ts +2 -0
  92. package/dist/channels/message-schema.d.ts.map +1 -1
  93. package/dist/channels/message-schema.js +4 -0
  94. package/dist/channels/message-schema.js.map +1 -1
  95. package/dist/channels/messaging-registry.d.ts +16 -0
  96. package/dist/channels/messaging-registry.d.ts.map +1 -1
  97. package/dist/channels/messaging-registry.js +29 -0
  98. package/dist/channels/messaging-registry.js.map +1 -1
  99. package/dist/channels/reserved-connections.d.ts +12 -0
  100. package/dist/channels/reserved-connections.d.ts.map +1 -0
  101. package/dist/channels/reserved-connections.js +55 -0
  102. package/dist/channels/reserved-connections.js.map +1 -0
  103. package/dist/channels/run-input.d.ts +71 -0
  104. package/dist/channels/run-input.d.ts.map +1 -0
  105. package/dist/channels/run-input.js +155 -0
  106. package/dist/channels/run-input.js.map +1 -0
  107. package/dist/channels/runtime.d.ts +1 -1
  108. package/dist/channels/runtime.d.ts.map +1 -1
  109. package/dist/channels/runtime.js +1 -1
  110. package/dist/channels/runtime.js.map +1 -1
  111. package/dist/channels/schedule-delivery.d.ts +1 -1
  112. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  113. package/dist/channels/schedule-delivery.js +12 -23
  114. package/dist/channels/schedule-delivery.js.map +1 -1
  115. package/dist/channels/slack/api.d.ts +2 -0
  116. package/dist/channels/slack/api.d.ts.map +1 -1
  117. package/dist/channels/slack/api.js +6 -0
  118. package/dist/channels/slack/api.js.map +1 -1
  119. package/dist/channels/slack/connections.d.ts +6 -0
  120. package/dist/channels/slack/connections.d.ts.map +1 -0
  121. package/dist/channels/slack/connections.js +6 -0
  122. package/dist/channels/slack/connections.js.map +1 -0
  123. package/dist/channels/slack/events.d.ts +272 -0
  124. package/dist/channels/slack/events.d.ts.map +1 -0
  125. package/dist/channels/slack/events.js +235 -0
  126. package/dist/channels/slack/events.js.map +1 -0
  127. package/dist/channels/slack/files.d.ts.map +1 -1
  128. package/dist/channels/slack/files.js +2 -3
  129. package/dist/channels/slack/files.js.map +1 -1
  130. package/dist/channels/slack/index.d.ts +76 -2
  131. package/dist/channels/slack/index.d.ts.map +1 -1
  132. package/dist/channels/slack/index.js +177 -6
  133. package/dist/channels/slack/index.js.map +1 -1
  134. package/dist/channels/slack/message-content.d.ts.map +1 -1
  135. package/dist/channels/slack/message-content.js +23 -28
  136. package/dist/channels/slack/message-content.js.map +1 -1
  137. package/dist/channels/slack/status.d.ts +76 -0
  138. package/dist/channels/slack/status.d.ts.map +1 -0
  139. package/dist/channels/slack/status.js +427 -0
  140. package/dist/channels/slack/status.js.map +1 -0
  141. package/dist/channels/source-providers.js +1 -1
  142. package/dist/channels/source-providers.js.map +1 -1
  143. package/dist/channels/trigger/client.d.ts.map +1 -1
  144. package/dist/channels/trigger/client.js +6 -15
  145. package/dist/channels/trigger/client.js.map +1 -1
  146. package/dist/channels/trigger/http.d.ts +114 -3
  147. package/dist/channels/trigger/http.d.ts.map +1 -1
  148. package/dist/channels/trigger/http.js +314 -82
  149. package/dist/channels/trigger/http.js.map +1 -1
  150. package/dist/channels/trigger/identity-context.d.ts +1 -1
  151. package/dist/channels/trigger/identity-context.d.ts.map +1 -1
  152. package/dist/channels/trigger/identity-context.js +2 -3
  153. package/dist/channels/trigger/identity-context.js.map +1 -1
  154. package/dist/channels/trigger/ingress.d.ts +38 -1
  155. package/dist/channels/trigger/ingress.d.ts.map +1 -1
  156. package/dist/channels/trigger/ingress.js +47 -19
  157. package/dist/channels/trigger/ingress.js.map +1 -1
  158. package/dist/channels/trigger/types.d.ts +82 -3
  159. package/dist/channels/trigger/types.d.ts.map +1 -1
  160. package/dist/channels/trigger/types.js +36 -0
  161. package/dist/channels/trigger/types.js.map +1 -1
  162. package/dist/channels/types.d.ts +19 -3
  163. package/dist/channels/types.d.ts.map +1 -1
  164. package/dist/channels/types.js +2 -0
  165. package/dist/channels/types.js.map +1 -1
  166. package/dist/connections.d.ts +31 -0
  167. package/dist/connections.d.ts.map +1 -1
  168. package/dist/connections.js +108 -11
  169. package/dist/connections.js.map +1 -1
  170. package/dist/credential-gate.d.ts +2 -0
  171. package/dist/credential-gate.d.ts.map +1 -1
  172. package/dist/credential-gate.js +37 -3
  173. package/dist/credential-gate.js.map +1 -1
  174. package/dist/define-deep-agent.d.ts.map +1 -1
  175. package/dist/define-deep-agent.js +6 -0
  176. package/dist/define-deep-agent.js.map +1 -1
  177. package/dist/identity/loopback.d.ts +1 -6
  178. package/dist/identity/loopback.d.ts.map +1 -1
  179. package/dist/identity/loopback.js +2 -12
  180. package/dist/identity/loopback.js.map +1 -1
  181. package/dist/index.d.ts +15 -4
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +2 -1
  184. package/dist/index.js.map +1 -1
  185. package/dist/ingress/index.d.ts +0 -8
  186. package/dist/ingress/index.d.ts.map +1 -1
  187. package/dist/ingress/index.js +2 -32
  188. package/dist/ingress/index.js.map +1 -1
  189. package/dist/ingress/runs.d.ts +74 -1
  190. package/dist/ingress/runs.d.ts.map +1 -1
  191. package/dist/ingress/runs.js +176 -16
  192. package/dist/ingress/runs.js.map +1 -1
  193. package/dist/managed-composition.d.ts.map +1 -1
  194. package/dist/managed-composition.js +8 -13
  195. package/dist/managed-composition.js.map +1 -1
  196. package/dist/memory/instructions-middleware.d.ts.map +1 -1
  197. package/dist/memory/instructions-middleware.js +5 -6
  198. package/dist/memory/instructions-middleware.js.map +1 -1
  199. package/dist/namespaces.d.ts +21 -21
  200. package/dist/namespaces.d.ts.map +1 -1
  201. package/dist/namespaces.js +4 -29
  202. package/dist/namespaces.js.map +1 -1
  203. package/dist/runtime/auth.d.ts.map +1 -1
  204. package/dist/runtime/auth.js +151 -21
  205. package/dist/runtime/auth.js.map +1 -1
  206. package/dist/runtime/channel-icon.d.ts +22 -0
  207. package/dist/runtime/channel-icon.d.ts.map +1 -0
  208. package/dist/runtime/channel-icon.js +70 -0
  209. package/dist/runtime/channel-icon.js.map +1 -0
  210. package/dist/runtime/channel.d.ts +6 -0
  211. package/dist/runtime/channel.d.ts.map +1 -1
  212. package/dist/runtime/channel.js.map +1 -1
  213. package/dist/runtime/http.d.ts +0 -15
  214. package/dist/runtime/http.d.ts.map +1 -1
  215. package/dist/runtime/http.js +0 -37
  216. package/dist/runtime/http.js.map +1 -1
  217. package/dist/runtime/identity-http.d.ts +2 -0
  218. package/dist/runtime/identity-http.d.ts.map +1 -1
  219. package/dist/runtime/identity-http.js +40 -16
  220. package/dist/runtime/identity-http.js.map +1 -1
  221. package/dist/runtime/identity-runtime.d.ts +10 -0
  222. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  223. package/dist/runtime/identity-runtime.js +22 -0
  224. package/dist/runtime/identity-runtime.js.map +1 -1
  225. package/dist/runtime/index.d.ts.map +1 -1
  226. package/dist/runtime/index.js +46 -47
  227. package/dist/runtime/index.js.map +1 -1
  228. package/dist/runtime/log.d.ts +14 -8
  229. package/dist/runtime/log.d.ts.map +1 -1
  230. package/dist/runtime/log.js +7 -16
  231. package/dist/runtime/log.js.map +1 -1
  232. package/dist/runtime/managed-middleware.d.ts.map +1 -1
  233. package/dist/runtime/managed-middleware.js +14 -1
  234. package/dist/runtime/managed-middleware.js.map +1 -1
  235. package/dist/runtime/managed-thread.d.ts +60 -0
  236. package/dist/runtime/managed-thread.d.ts.map +1 -0
  237. package/dist/runtime/managed-thread.js +76 -0
  238. package/dist/runtime/managed-thread.js.map +1 -0
  239. package/dist/runtime/managed-tools.d.ts +10 -10
  240. package/dist/runtime/managed-tools.d.ts.map +1 -1
  241. package/dist/runtime/managed-tools.js +24 -24
  242. package/dist/runtime/managed-tools.js.map +1 -1
  243. package/dist/runtime/memory/mounts.d.ts +11 -82
  244. package/dist/runtime/memory/mounts.d.ts.map +1 -1
  245. package/dist/runtime/memory/mounts.js +34 -173
  246. package/dist/runtime/memory/mounts.js.map +1 -1
  247. package/dist/runtime/memory/policy.d.ts.map +1 -1
  248. package/dist/runtime/memory/policy.js +1 -3
  249. package/dist/runtime/memory/policy.js.map +1 -1
  250. package/dist/runtime/run-input.d.ts +10 -0
  251. package/dist/runtime/run-input.d.ts.map +1 -1
  252. package/dist/runtime/run-input.js +47 -19
  253. package/dist/runtime/run-input.js.map +1 -1
  254. package/dist/runtime/sandbox-manager.d.ts +1 -1
  255. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  256. package/dist/runtime/sandbox-manager.js +9 -7
  257. package/dist/runtime/sandbox-manager.js.map +1 -1
  258. package/dist/runtime/schedule-auth.d.ts +17 -0
  259. package/dist/runtime/schedule-auth.d.ts.map +1 -1
  260. package/dist/runtime/schedule-auth.js +39 -1
  261. package/dist/runtime/schedule-auth.js.map +1 -1
  262. package/dist/runtime/selected-skills-backend.d.ts +3 -3
  263. package/dist/runtime/selected-skills-backend.d.ts.map +1 -1
  264. package/dist/runtime/selected-skills-backend.js +5 -5
  265. package/dist/runtime/selected-skills-backend.js.map +1 -1
  266. package/dist/runtime/thread-record.d.ts +81 -0
  267. package/dist/runtime/thread-record.d.ts.map +1 -0
  268. package/dist/runtime/thread-record.js +205 -0
  269. package/dist/runtime/thread-record.js.map +1 -0
  270. package/dist/runtime/types.d.ts +5 -1
  271. package/dist/runtime/types.d.ts.map +1 -1
  272. package/dist/runtime-schedules.d.ts +13 -0
  273. package/dist/runtime-schedules.d.ts.map +1 -1
  274. package/dist/runtime-schedules.js +86 -22
  275. package/dist/runtime-schedules.js.map +1 -1
  276. package/dist/sandbox.d.ts +0 -6
  277. package/dist/sandbox.d.ts.map +1 -1
  278. package/dist/sandbox.js +3 -7
  279. package/dist/sandbox.js.map +1 -1
  280. package/dist/schedule-channel.d.ts +5 -2
  281. package/dist/schedule-channel.d.ts.map +1 -1
  282. package/dist/schedule-channel.js +13 -12
  283. package/dist/schedule-channel.js.map +1 -1
  284. package/dist/telemetry/run-listener.d.ts +1 -1
  285. package/dist/telemetry/run-listener.d.ts.map +1 -1
  286. package/dist/telemetry/run-listener.js +2 -32
  287. package/dist/telemetry/run-listener.js.map +1 -1
  288. package/dist/telemetry/transport/posthog.d.ts +1 -13
  289. package/dist/telemetry/transport/posthog.d.ts.map +1 -1
  290. package/dist/telemetry/transport/posthog.js +30 -68
  291. package/dist/telemetry/transport/posthog.js.map +1 -1
  292. package/dist/values.d.ts +15 -0
  293. package/dist/values.d.ts.map +1 -0
  294. package/dist/values.js +31 -0
  295. package/dist/values.js.map +1 -0
  296. package/package.json +11 -11
  297. package/dist/concurrency/batch-processor.d.ts +0 -51
  298. package/dist/concurrency/batch-processor.d.ts.map +0 -1
  299. package/dist/concurrency/batch-processor.js +0 -99
  300. package/dist/concurrency/batch-processor.js.map +0 -1
  301. package/dist/resilience/retry.d.ts +0 -21
  302. package/dist/resilience/retry.d.ts.map +0 -1
  303. package/dist/resilience/retry.js +0 -40
  304. package/dist/resilience/retry.js.map +0 -1
  305. package/dist/runtime/graph-build-timing.d.ts +0 -30
  306. package/dist/runtime/graph-build-timing.d.ts.map +0 -1
  307. package/dist/runtime/graph-build-timing.js +0 -50
  308. package/dist/runtime/graph-build-timing.js.map +0 -1
  309. package/dist/telemetry/lifecycle.d.ts +0 -26
  310. package/dist/telemetry/lifecycle.d.ts.map +0 -1
  311. package/dist/telemetry/lifecycle.js +0 -49
  312. package/dist/telemetry/lifecycle.js.map +0 -1
  313. package/dist/telemetry/otel/context.d.ts +0 -57
  314. package/dist/telemetry/otel/context.d.ts.map +0 -1
  315. package/dist/telemetry/otel/context.js +0 -122
  316. package/dist/telemetry/otel/context.js.map +0 -1
  317. package/dist/telemetry/otel/exporter.d.ts +0 -53
  318. package/dist/telemetry/otel/exporter.d.ts.map +0 -1
  319. package/dist/telemetry/otel/exporter.js +0 -190
  320. package/dist/telemetry/otel/exporter.js.map +0 -1
  321. package/dist/telemetry/otel/index.d.ts +0 -6
  322. package/dist/telemetry/otel/index.d.ts.map +0 -1
  323. package/dist/telemetry/otel/index.js +0 -3
  324. package/dist/telemetry/otel/index.js.map +0 -1
  325. package/dist/telemetry/otel/otlp.d.ts +0 -44
  326. package/dist/telemetry/otel/otlp.d.ts.map +0 -1
  327. package/dist/telemetry/otel/otlp.js +0 -7
  328. package/dist/telemetry/otel/otlp.js.map +0 -1
  329. package/dist/telemetry/otel/truncate.d.ts +0 -10
  330. package/dist/telemetry/otel/truncate.d.ts.map +0 -1
  331. package/dist/telemetry/otel/truncate.js +0 -39
  332. package/dist/telemetry/otel/truncate.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "managed-deepagents",
3
- "version": "0.9.6-dev.13",
3
+ "version": "0.9.6-dev.15",
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.15.1",
60
+ "deepagents": "^1.13.4",
61
61
  "hono": "^4.13.7",
62
62
  "jose": "^6.2.12",
63
- "langchain": "1.5.16",
63
+ "langchain": "^1.5.12",
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.13",
70
- "@langchain/managed-deepagents-darwin-x64": "0.9.6-dev.13",
71
- "@langchain/managed-deepagents-linux-arm64": "0.9.6-dev.13",
72
- "@langchain/managed-deepagents-linux-x64": "0.9.6-dev.13",
73
- "@langchain/managed-deepagents-win32-arm64": "0.9.6-dev.13",
74
- "@langchain/managed-deepagents-win32-x64": "0.9.6-dev.13"
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"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@types/node": "^26.5.1",
78
- "oxfmt": "^0.74.0",
78
+ "oxfmt": "^0.71.0",
79
79
  "oxlint": "^1.82.0",
80
80
  "typescript": "^7.0.2",
81
81
  "vitest": "^5.0.0"
@@ -1,51 +0,0 @@
1
- /**
2
- * Collects items pushed from anywhere in the process and hands them to
3
- * `handle` in batches: when `maxBatchSize` items are waiting, or `maxWaitMs`
4
- * after the first one arrived, or without the wait once `shutdown` starts. One batch is handled
5
- * at a time; a rejected `handle` drops that batch. Compose `handle` (see
6
- * `resilience/`) for retries, passing on its signal.
7
- *
8
- * The worker starts on the first push and stops when the queue is empty, and
9
- * its timers never keep the process alive; only `shutdown` holds it open,
10
- * until its deadline.
11
- */
12
- export interface BatchProcessorOptions<T> {
13
- /** `signal` aborts at the `shutdown` deadline. */
14
- handle: (batch: T[], signal: AbortSignal) => Promise<void>;
15
- maxBatchSize: number;
16
- maxWaitMs: number;
17
- /** Items pushed while this many are waiting are dropped. */
18
- maxQueued: number;
19
- /**
20
- * With `sizeOf`, a batch also stops before it would pass this many bytes.
21
- * A single larger item still goes, alone.
22
- */
23
- maxBatchBytes?: number;
24
- sizeOf?: (item: T) => number;
25
- }
26
- export declare class BatchProcessor<T> {
27
- private readonly options;
28
- private readonly queue;
29
- /** The running worker; unset while the queue is empty. */
30
- private worker;
31
- private wake;
32
- private closed;
33
- private readonly deadline;
34
- constructor(options: BatchProcessorOptions<T>);
35
- /** Queue items without blocking or throwing. Returns how many were accepted. */
36
- push(...items: T[]): number;
37
- /** Resolves once everything pushed so far has been handled. */
38
- idle(): Promise<void>;
39
- /**
40
- * Drain: refuse new items and send what is queued, a batch at a time as
41
- * usual but without the batch wait, retrying as `handle` does. At
42
- * `deadlineMs` the request in flight is aborted and the rest is dropped.
43
- */
44
- shutdown(deadlineMs: number): Promise<void>;
45
- private run;
46
- /** How many queued items fit the next batch. */
47
- private nextBatchSize;
48
- /** Resolves after `ms`, or as soon as a full batch is waiting. */
49
- private waitUpTo;
50
- }
51
- //# sourceMappingURL=batch-processor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch-processor.d.ts","sourceRoot":"","sources":["../../src/concurrency/batch-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,kDAAkD;IAClD,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;CAC9B;AAED,qBAAa,cAAc,CAAC,CAAC;IAQf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,0DAA0D;IAC1D,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAElD,YAA6B,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAI;IAElE,gFAAgF;IAChF,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,CAQ1B;IAED,+DAA+D;IAC/D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpB;IAED;;;;OAIG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAchD;YAEa,GAAG;IAiBjB,gDAAgD;IAChD,OAAO,CAAC,aAAa;IAcrB,kEAAkE;IAClE,OAAO,CAAC,QAAQ;CAcjB"}
@@ -1,99 +0,0 @@
1
- export class BatchProcessor {
2
- options;
3
- queue = [];
4
- /** The running worker; unset while the queue is empty. */
5
- worker;
6
- wake;
7
- closed = false;
8
- deadline = new AbortController();
9
- constructor(options) {
10
- this.options = options;
11
- }
12
- /** Queue items without blocking or throwing. Returns how many were accepted. */
13
- push(...items) {
14
- if (this.closed)
15
- return 0;
16
- const room = Math.max(this.options.maxQueued - this.queue.length, 0);
17
- const accepted = items.slice(0, room);
18
- this.queue.push(...accepted);
19
- if (this.queue.length >= this.options.maxBatchSize)
20
- this.wake?.();
21
- if (!this.worker && this.queue.length > 0)
22
- this.worker = this.run();
23
- return accepted.length;
24
- }
25
- /** Resolves once everything pushed so far has been handled. */
26
- idle() {
27
- return this.worker ?? Promise.resolve();
28
- }
29
- /**
30
- * Drain: refuse new items and send what is queued, a batch at a time as
31
- * usual but without the batch wait, retrying as `handle` does. At
32
- * `deadlineMs` the request in flight is aborted and the rest is dropped.
33
- */
34
- async shutdown(deadlineMs) {
35
- this.closed = true;
36
- this.wake?.();
37
- let timer;
38
- const deadline = new Promise((resolve) => {
39
- timer = setTimeout(resolve, deadlineMs);
40
- });
41
- try {
42
- await Promise.race([this.idle(), deadline]);
43
- }
44
- finally {
45
- clearTimeout(timer);
46
- this.deadline.abort();
47
- this.queue.length = 0;
48
- }
49
- }
50
- async run() {
51
- try {
52
- while (this.queue.length > 0) {
53
- if (this.queue.length < this.options.maxBatchSize && !this.closed) {
54
- await this.waitUpTo(this.options.maxWaitMs);
55
- }
56
- const batch = this.queue.splice(0, this.nextBatchSize());
57
- await this.options
58
- .handle(batch, this.deadline.signal)
59
- .catch(() => undefined);
60
- }
61
- }
62
- finally {
63
- // Same tick as the empty-queue check, so a later push starts a new worker.
64
- this.worker = undefined;
65
- }
66
- }
67
- /** How many queued items fit the next batch. */
68
- nextBatchSize() {
69
- const { maxBatchSize, maxBatchBytes, sizeOf } = this.options;
70
- const limit = Math.min(maxBatchSize, this.queue.length);
71
- if (maxBatchBytes === undefined || !sizeOf)
72
- return limit;
73
- let count = 0;
74
- let bytes = 0;
75
- while (count < limit) {
76
- bytes += sizeOf(this.queue[count]);
77
- if (count > 0 && bytes > maxBatchBytes)
78
- break;
79
- count++;
80
- }
81
- return count;
82
- }
83
- /** Resolves after `ms`, or as soon as a full batch is waiting. */
84
- waitUpTo(ms) {
85
- return new Promise((resolve) => {
86
- const timer = setTimeout(() => {
87
- this.wake = undefined;
88
- resolve();
89
- }, ms);
90
- timer.unref?.();
91
- this.wake = () => {
92
- clearTimeout(timer);
93
- this.wake = undefined;
94
- resolve();
95
- };
96
- });
97
- }
98
- }
99
- //# sourceMappingURL=batch-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch-processor.js","sourceRoot":"","sources":["../../src/concurrency/batch-processor.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /** Retry a failing async call with jittered exponential backoff. */
2
- export interface RetryPolicy {
3
- maxAttempts: number;
4
- baseDelayMs: number;
5
- maxDelayMs: number;
6
- /** Whether `error` is worth another attempt. */
7
- retryOn: (error: unknown) => boolean;
8
- /**
9
- * A delay the error asks for, such as an HTTP `Retry-After`. Capped at
10
- * `maxDelayMs`.
11
- */
12
- delayFor?: (error: unknown) => number | undefined;
13
- }
14
- /**
15
- * `fn`, retried under `policy`. The last error is rethrown. Once `signal`
16
- * aborts, a backoff in progress ends and no further attempt is made.
17
- */
18
- export declare function withRetry<T, R>(fn: (arg: T, signal: AbortSignal) => Promise<R>, policy: RetryPolicy): (arg: T, signal: AbortSignal) => Promise<R>;
19
- /** Full-range jitter over the upper half of the exponential step. */
20
- export declare function backoffMs(attempt: number, { baseDelayMs, maxDelayMs }: Pick<RetryPolicy, "baseDelayMs" | "maxDelayMs">): number;
21
- //# sourceMappingURL=retry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/resilience/retry.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CACnD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAC5B,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/C,MAAM,EAAE,WAAW,GAClB,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAwB7C;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,YAAY,CAAC,GAC3E,MAAM,CAGR"}
@@ -1,40 +0,0 @@
1
- /**
2
- * `fn`, retried under `policy`. The last error is rethrown. Once `signal`
3
- * aborts, a backoff in progress ends and no further attempt is made.
4
- */
5
- export function withRetry(fn, policy) {
6
- return async (arg, signal) => {
7
- for (let attempt = 1;; attempt++) {
8
- try {
9
- return await fn(arg, signal);
10
- }
11
- catch (error) {
12
- if (attempt >= policy.maxAttempts ||
13
- !policy.retryOn(error) ||
14
- signal.aborted) {
15
- throw error;
16
- }
17
- await sleep(Math.min(policy.delayFor?.(error) ?? backoffMs(attempt, policy), policy.maxDelayMs), signal);
18
- if (signal.aborted)
19
- throw error;
20
- }
21
- }
22
- };
23
- }
24
- /** Full-range jitter over the upper half of the exponential step. */
25
- export function backoffMs(attempt, { baseDelayMs, maxDelayMs }) {
26
- const ceiling = Math.min(maxDelayMs, baseDelayMs * 2 ** (attempt - 1));
27
- return ceiling / 2 + Math.random() * (ceiling / 2);
28
- }
29
- /** Resolves after `ms`, or as soon as `signal` aborts. */
30
- function sleep(ms, signal) {
31
- return new Promise((resolve) => {
32
- const onAbort = () => resolve();
33
- signal.addEventListener("abort", onAbort, { once: true });
34
- setTimeout(() => {
35
- signal.removeEventListener("abort", onAbort);
36
- resolve();
37
- }, ms).unref?.();
38
- });
39
- }
40
- //# sourceMappingURL=retry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/resilience/retry.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,EAA+C,EAC/C,MAAmB;IAEnB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC3B,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IACE,OAAO,IAAI,MAAM,CAAC,WAAW;oBAC7B,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;oBACtB,MAAM,CAAC,OAAO,EACd,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,KAAK,CACT,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EACtD,MAAM,CAAC,UAAU,CAClB,EACD,MAAM,CACP,CAAC;gBACF,IAAI,MAAM,CAAC,OAAO;oBAAE,MAAM,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,SAAS,CACvB,OAAe,EACf,EAAE,WAAW,EAAE,UAAU,EAAmD;IAE5E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,0DAA0D;AAC1D,SAAS,KAAK,CAAC,EAAU,EAAE,MAAmB;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,30 +0,0 @@
1
- export type GraphBuildPhase = "factory" | "context" | "skills" | "instructions" | "connectors" | "create_deep_agent";
2
- export type GraphBuildKind = "run" | "read";
3
- /** What the agent graph is built from. */
4
- export type GraphBuildSizes = {
5
- tools: number;
6
- middleware: number;
7
- subagents: number;
8
- };
9
- /** Wall time of each managed phase, from construction to {@link log}. */
10
- export declare class GraphBuildTiming {
11
- private readonly clock;
12
- private readonly started;
13
- private readonly phases;
14
- private sizes;
15
- constructor(clock?: () => number);
16
- /**
17
- * Return what `run` settles to and add the time it took to `name`.
18
- *
19
- * Phases may overlap: connector tools load while the context opens.
20
- */
21
- phase<T>(name: GraphBuildPhase, run: () => T | Promise<T>): Promise<T>;
22
- /** Record what the agent graph is built from. */
23
- setSizes(sizes: GraphBuildSizes): void;
24
- /** Write the total, each phase in the order it first finished, and the sizes. */
25
- log({ kind, runId, }: {
26
- kind: GraphBuildKind;
27
- runId: string | undefined;
28
- }): void;
29
- }
30
- //# sourceMappingURL=graph-build-timing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph-build-timing.d.ts","sourceRoot":"","sources":["../../src/runtime/graph-build-timing.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,mBAAmB,CAAC;AACxB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAC5C,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,yEAAyE;AACzE,qBAAa,gBAAgB;IAKf,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,KAAK,CAA8B;IAE3C,YAA6B,KAAK,GAAE,MAAM,MAAgC,EAEzE;IAED;;;;OAIG;IACG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAU3E;IAED,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAErC;IAED,iFAAiF;IACjF,GAAG,CAAC,EACF,IAAI,EACJ,KAAK,GACN,EAAE;QACD,IAAI,EAAE,cAAc,CAAC;QACrB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,GAAG,IAAI,CAuBP;CACF"}
@@ -1,50 +0,0 @@
1
- import { logger } from "./log.js";
2
- /** Wall time of each managed phase, from construction to {@link log}. */
3
- export class GraphBuildTiming {
4
- clock;
5
- started;
6
- phases = new Map();
7
- sizes;
8
- constructor(clock = () => performance.now()) {
9
- this.clock = clock;
10
- this.started = clock();
11
- }
12
- /**
13
- * Return what `run` settles to and add the time it took to `name`.
14
- *
15
- * Phases may overlap: connector tools load while the context opens.
16
- */
17
- async phase(name, run) {
18
- const started = this.clock();
19
- try {
20
- return await run();
21
- }
22
- finally {
23
- this.phases.set(name, (this.phases.get(name) ?? 0) + this.clock() - started);
24
- }
25
- }
26
- /** Record what the agent graph is built from. */
27
- setSizes(sizes) {
28
- this.sizes = sizes;
29
- }
30
- /** Write the total, each phase in the order it first finished, and the sizes. */
31
- log({ kind, runId, }) {
32
- const totalMs = Math.round(this.clock() - this.started);
33
- const scope = runId === undefined
34
- ? `kind=${kind}`
35
- : `kind=${kind}, run_id=${logger.logIdentifier(runId)}`;
36
- const parts = [
37
- ...[...this.phases].map(([name, ms]) => `${name}=${Math.round(ms)}ms`),
38
- ...Object.entries(this.sizes ?? {}).map(([name, count]) => `${name}=${count}`),
39
- ].join(" ");
40
- const attributes = {
41
- "mda.graph_build.kind": kind,
42
- "mda.graph_build.total_ms": totalMs,
43
- };
44
- for (const [name, ms] of this.phases) {
45
- attributes[`mda.graph_build.${name}_ms`] = Math.round(ms);
46
- }
47
- logger.info(`graph build took ${totalMs}ms (${scope})${parts ? `: ${parts}` : ""}`, attributes);
48
- }
49
- }
50
- //# sourceMappingURL=graph-build-timing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph-build-timing.js","sourceRoot":"","sources":["../../src/runtime/graph-build-timing.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAiBlC,yEAAyE;AACzE,MAAM,OAAO,gBAAgB;IAKE,KAAK;IAJjB,OAAO,CAAS;IAChB,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,KAAK,CAA8B;IAE3C,YAA6B,KAAK,GAAiB,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;qBAA7C,KAAK;QAChC,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAI,IAAqB,EAAE,GAAyB;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,EAAE,CAAC;QACrB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,IAAI,EACJ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CACtD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,QAAQ,CAAC,KAAsB;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,iFAAiF;IACjF,GAAG,CAAC,EACF,IAAI,EACJ,KAAK,GAIN;QACC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,KAAK,GACT,KAAK,KAAK,SAAS;YACjB,CAAC,CAAC,QAAQ,IAAI,EAAE;YAChB,CAAC,CAAC,QAAQ,IAAI,YAAY,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG;YACZ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;YACtE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CACrC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CACtC;SACF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,MAAM,UAAU,GAAkB;YAChC,sBAAsB,EAAE,IAAI;YAC5B,0BAA0B,EAAE,OAAO;SACpC,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACrC,UAAU,CAAC,mBAAmB,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,CAAC,IAAI,CACT,oBAAoB,OAAO,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EACtE,UAAU,CACX,CAAC;IACJ,CAAC;CACF"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Process shutdown for the telemetry sinks. Each sink registers a drain; on
3
- * exit or SIGTERM/SIGINT they run in parallel under one shared deadline.
4
- */
5
- /**
6
- * How long the drains get. Kubernetes allows 30s between SIGTERM and SIGKILL
7
- * by default (`terminationGracePeriodSeconds`), and the server's own drain uses
8
- * part of it; 5s fits alongside and matches Fluent Bit's default `Grace`.
9
- */
10
- export declare const SHUTDOWN_DEADLINE_MS = 5000;
11
- /** Sends what a sink holds, giving up after `deadlineMs`. */
12
- export type Drain = (deadlineMs: number) => Promise<void>;
13
- /** The parts of `process` the hooks use, so tests can pass their own. */
14
- export interface ShutdownProcess {
15
- readonly pid: number;
16
- once(event: "beforeExit" | NodeJS.Signals, listener: () => void): unknown;
17
- listenerCount(event: NodeJS.Signals): number;
18
- kill(pid: number, signal: NodeJS.Signals): unknown;
19
- }
20
- /** Run `drain` at shutdown. The first registration installs the hooks. */
21
- export declare function onShutdown(drain: Drain, target?: ShutdownProcess): void;
22
- /** Drain every registered sink in parallel. Runs once; later calls share it. */
23
- export declare function shutdownTelemetry(deadlineMs?: number): Promise<void>;
24
- /** @internal Forget registrations and hooks between tests. */
25
- export declare function resetShutdownForTests(): void;
26
- //# sourceMappingURL=lifecycle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/telemetry/lifecycle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,6DAA6D;AAC7D,MAAM,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1D,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IAC1E,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;CACpD;AAQD,0EAA0E;AAC1E,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,MAAM,GAAE,eAAyB,GAChC,IAAI,CAoBN;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAC/B,UAAU,GAAE,MAA6B,GACxC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
@@ -1,49 +0,0 @@
1
- /**
2
- * Process shutdown for the telemetry sinks. Each sink registers a drain; on
3
- * exit or SIGTERM/SIGINT they run in parallel under one shared deadline.
4
- */
5
- /**
6
- * How long the drains get. Kubernetes allows 30s between SIGTERM and SIGKILL
7
- * by default (`terminationGracePeriodSeconds`), and the server's own drain uses
8
- * part of it; 5s fits alongside and matches Fluent Bit's default `Grace`.
9
- */
10
- export const SHUTDOWN_DEADLINE_MS = 5_000;
11
- const SIGNALS = ["SIGTERM", "SIGINT"];
12
- const drains = [];
13
- let hooked = false;
14
- let shuttingDown;
15
- /** Run `drain` at shutdown. The first registration installs the hooks. */
16
- export function onShutdown(drain, target = process) {
17
- drains.push(drain);
18
- if (hooked)
19
- return;
20
- hooked = true;
21
- target.once("beforeExit", () => {
22
- shutdownTelemetry().catch(() => undefined);
23
- });
24
- for (const signal of SIGNALS) {
25
- target.once(signal, () => {
26
- shutdownTelemetry()
27
- .then(() => {
28
- // Listening suppressed the default exit; restore it unless someone
29
- // else now owns the signal.
30
- if (target.listenerCount(signal) === 0) {
31
- target.kill(target.pid, signal);
32
- }
33
- })
34
- .catch(() => undefined);
35
- });
36
- }
37
- }
38
- /** Drain every registered sink in parallel. Runs once; later calls share it. */
39
- export function shutdownTelemetry(deadlineMs = SHUTDOWN_DEADLINE_MS) {
40
- shuttingDown ??= Promise.allSettled(drains.map(async (drain) => drain(deadlineMs))).then(() => undefined);
41
- return shuttingDown;
42
- }
43
- /** @internal Forget registrations and hooks between tests. */
44
- export function resetShutdownForTests() {
45
- drains.length = 0;
46
- hooked = false;
47
- shuttingDown = undefined;
48
- }
49
- //# sourceMappingURL=lifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/telemetry/lifecycle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAa1C,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAC;AAE/C,MAAM,MAAM,GAAY,EAAE,CAAC;AAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAI,YAAuC,CAAC;AAE5C,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CACxB,KAAY,EACZ,MAAM,GAAoB,OAAO;IAEjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,IAAI,MAAM;QAAE,OAAO;IACnB,MAAM,GAAG,IAAI,CAAC;IACd,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;QAC7B,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YACvB,iBAAiB,EAAE;iBAChB,IAAI,CAAC,GAAG,EAAE;gBACT,mEAAmE;gBACnE,4BAA4B;gBAC5B,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAC/B,UAAU,GAAW,oBAAoB;IAEzC,YAAY,KAAK,OAAO,CAAC,UAAU,CACjC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAC/C,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACxB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,qBAAqB;IACnC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,MAAM,GAAG,KAAK,CAAC;IACf,YAAY,GAAG,SAAS,CAAC;AAC3B,CAAC"}
@@ -1,57 +0,0 @@
1
- /** Run metadata key that carries the trace id from ingress into the run. */
2
- export declare const TRACE_ID_METADATA_KEY = "mda_trace_id";
3
- export type LogSeverity = "INFO" | "WARN" | "ERROR";
4
- export type LogAttributeValue = string | number | boolean;
5
- export type LogAttributes = Record<string, LogAttributeValue>;
6
- export interface LogRecord {
7
- /**
8
- * Unique to this record and kept across retries, so copies of a batch sent
9
- * twice can be told apart from distinct records.
10
- */
11
- uid: string;
12
- timeUnixNano: string;
13
- severity: LogSeverity;
14
- body: string;
15
- attributes: LogAttributes;
16
- traceId: string;
17
- spanId: string;
18
- }
19
- export interface LogContext {
20
- traceId: string;
21
- spanId: string;
22
- /** Attached to every later record, so a fact learned mid-request sticks. */
23
- attributes: LogAttributes;
24
- /** Work that outlives the request; ingress completes after it settles. */
25
- pending: Promise<unknown>[];
26
- }
27
- /** A fresh 16-byte trace id as 32 lowercase hex characters. */
28
- export declare function newTraceId(): string;
29
- /** A fresh 8-byte span id as 16 lowercase hex characters. */
30
- export declare function newSpanId(): string;
31
- /** The trace id of a W3C `traceparent` header, or a new one. */
32
- export declare function traceIdFromTraceparent(header: string | null | undefined): string;
33
- /** A trace id handed over through run metadata, or a new one. */
34
- export declare function traceIdFromMetadata(metadata: Record<string, unknown> | undefined): string;
35
- /** A new, empty log context for `traceId` with its own span id. */
36
- export declare function createLogContext(traceId: string): LogContext;
37
- /** Run `fn` inside `context`. */
38
- export declare function runInLogContext<T>(context: LogContext, fn: () => T): T;
39
- /** Run `fn` with a new log context for `traceId`. */
40
- export declare function withLogContext<T>(traceId: string, fn: (context: LogContext) => T): T;
41
- export declare function currentLogContext(): LogContext | undefined;
42
- /** Keep the current context open until `work` settles. */
43
- export declare function holdLogContext(work: Promise<unknown>): void;
44
- /** Add attributes to the current context's later records. */
45
- export declare function setLogAttributes(attributes: Record<string, LogAttributeValue | null | undefined>): void;
46
- /** OTel `exception.*` attributes for an error. */
47
- export declare function exceptionAttributes(error: unknown): LogAttributes;
48
- /**
49
- * Queue a record under the current context's ids on the process-wide log
50
- * sink, with the middle cut out of any string over the per-value limit. Does
51
- * nothing outside a context or when the sink is disabled.
52
- */
53
- export declare function recordLog(severity: LogSeverity, body: string, options?: {
54
- error?: unknown;
55
- attributes?: LogAttributes;
56
- }): void;
57
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/telemetry/otel/context.ts"],"names":[],"mappings":"AAgBA,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,UAAU,EAAE,aAAa,CAAC;IAC1B,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7B;AAWD,+DAA+D;AAC/D,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,gEAAgE;AAChE,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,MAAM,CAGR;AAED,iEAAiE;AACjE,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,MAAM,CAKR;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAO5D;AAED,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEtE;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,CAAC,GAC7B,CAAC,CAGH;AAED,wBAAgB,iBAAiB,IAAI,UAAU,GAAG,SAAS,CAE1D;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAE3D;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/D,IAAI,CAQN;AAED,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAYjE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,aAAa,CAAA;CAAO,GAC5D,IAAI,CAqBN"}
@@ -1,122 +0,0 @@
1
- /**
2
- * Per-request log context for the OTel log forwarder.
3
- *
4
- * Ingress and the run execute in different processes, so each holds its own
5
- * context, and records go straight to the process-wide log sink stamped with
6
- * that context's ids. Both share one trace id: ingress takes
7
- * it from the incoming `traceparent` (or mints one) and hands it to the run as
8
- * `config.metadata.mda_trace_id`. Each side gets its own span id so Datadog can
9
- * tell which process wrote a record.
10
- */
11
- import { AsyncLocalStorage } from "node:async_hooks";
12
- import { randomBytes, randomUUID } from "node:crypto";
13
- import { logSink } from "./exporter.js";
14
- import { truncateMiddle } from "./truncate.js";
15
- /** Run metadata key that carries the trace id from ingress into the run. */
16
- export const TRACE_ID_METADATA_KEY = "mda_trace_id";
17
- const storage = new AsyncLocalStorage();
18
- const TRACE_ID = /^[0-9a-f]{32}$/;
19
- const TRACEPARENT = /^[0-9a-f]{2}-([0-9a-f]{32})-[0-9a-f]{16}-[0-9a-f]{2}$/;
20
- function isValidTraceId(value) {
21
- return TRACE_ID.test(value) && !/^0+$/.test(value);
22
- }
23
- /** A fresh 16-byte trace id as 32 lowercase hex characters. */
24
- export function newTraceId() {
25
- return randomBytes(16).toString("hex");
26
- }
27
- /** A fresh 8-byte span id as 16 lowercase hex characters. */
28
- export function newSpanId() {
29
- return randomBytes(8).toString("hex");
30
- }
31
- /** The trace id of a W3C `traceparent` header, or a new one. */
32
- export function traceIdFromTraceparent(header) {
33
- const traceId = TRACEPARENT.exec(header?.trim().toLowerCase() ?? "")?.[1];
34
- return traceId && isValidTraceId(traceId) ? traceId : newTraceId();
35
- }
36
- /** A trace id handed over through run metadata, or a new one. */
37
- export function traceIdFromMetadata(metadata) {
38
- const value = metadata?.[TRACE_ID_METADATA_KEY];
39
- return typeof value === "string" && isValidTraceId(value)
40
- ? value
41
- : newTraceId();
42
- }
43
- /** A new, empty log context for `traceId` with its own span id. */
44
- export function createLogContext(traceId) {
45
- return {
46
- traceId,
47
- spanId: newSpanId(),
48
- attributes: {},
49
- pending: [],
50
- };
51
- }
52
- /** Run `fn` inside `context`. */
53
- export function runInLogContext(context, fn) {
54
- return storage.run(context, fn);
55
- }
56
- /** Run `fn` with a new log context for `traceId`. */
57
- export function withLogContext(traceId, fn) {
58
- const context = createLogContext(traceId);
59
- return storage.run(context, () => fn(context));
60
- }
61
- export function currentLogContext() {
62
- return storage.getStore();
63
- }
64
- /** Keep the current context open until `work` settles. */
65
- export function holdLogContext(work) {
66
- currentLogContext()?.pending.push(work);
67
- }
68
- /** Add attributes to the current context's later records. */
69
- export function setLogAttributes(attributes) {
70
- const context = currentLogContext();
71
- if (!context)
72
- return;
73
- for (const [key, value] of Object.entries(attributes)) {
74
- if (value !== null && value !== undefined) {
75
- context.attributes[key] = value;
76
- }
77
- }
78
- }
79
- /** OTel `exception.*` attributes for an error. */
80
- export function exceptionAttributes(error) {
81
- if (!(error instanceof Error)) {
82
- return { "exception.type": typeof error };
83
- }
84
- const attributes = {
85
- "exception.type": error.name,
86
- "exception.message": error.message,
87
- };
88
- if (error.stack) {
89
- attributes["exception.stacktrace"] = error.stack;
90
- }
91
- return attributes;
92
- }
93
- /**
94
- * Queue a record under the current context's ids on the process-wide log
95
- * sink, with the middle cut out of any string over the per-value limit. Does
96
- * nothing outside a context or when the sink is disabled.
97
- */
98
- export function recordLog(severity, body, options = {}) {
99
- const context = currentLogContext();
100
- const sink = logSink();
101
- if (!context || !sink.enabled)
102
- return;
103
- const attributes = {
104
- ...context.attributes,
105
- ...options.attributes,
106
- ...(options.error === undefined ? {} : exceptionAttributes(options.error)),
107
- };
108
- for (const [key, value] of Object.entries(attributes)) {
109
- if (typeof value === "string")
110
- attributes[key] = truncateMiddle(value);
111
- }
112
- sink.push({
113
- uid: randomUUID(),
114
- timeUnixNano: `${BigInt(Date.now()) * 1000000n}`,
115
- severity,
116
- body: truncateMiddle(body),
117
- attributes,
118
- traceId: context.traceId,
119
- spanId: context.spanId,
120
- });
121
- }
122
- //# sourceMappingURL=context.js.map