managed-deepagents 0.9.6-dev.3 → 0.9.6-dev.30

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 (359) hide show
  1. package/README.md +1075 -37
  2. package/dist/agent-auth.d.ts +1 -1
  3. package/dist/agent-auth.d.ts.map +1 -1
  4. package/dist/agent-auth.js +36 -12
  5. package/dist/agent-auth.js.map +1 -1
  6. package/dist/browser.d.ts +37 -0
  7. package/dist/browser.d.ts.map +1 -0
  8. package/dist/browser.js +31 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/channels/actor.d.ts +57 -0
  11. package/dist/channels/actor.d.ts.map +1 -0
  12. package/dist/channels/actor.js +24 -0
  13. package/dist/channels/actor.js.map +1 -0
  14. package/dist/channels/assistant-text.d.ts +29 -0
  15. package/dist/channels/assistant-text.d.ts.map +1 -1
  16. package/dist/channels/assistant-text.js +81 -4
  17. package/dist/channels/assistant-text.js.map +1 -1
  18. package/dist/channels/binding.d.ts +20 -1
  19. package/dist/channels/binding.d.ts.map +1 -1
  20. package/dist/channels/binding.js +44 -11
  21. package/dist/channels/binding.js.map +1 -1
  22. package/dist/channels/delivery.d.ts +51 -0
  23. package/dist/channels/delivery.d.ts.map +1 -0
  24. package/dist/channels/delivery.js +424 -0
  25. package/dist/channels/delivery.js.map +1 -0
  26. package/dist/channels/github/app-setup.d.ts +32 -0
  27. package/dist/channels/github/app-setup.d.ts.map +1 -0
  28. package/dist/channels/github/app-setup.js +146 -0
  29. package/dist/channels/github/app-setup.js.map +1 -0
  30. package/dist/channels/github/connections.d.ts +11 -0
  31. package/dist/channels/github/connections.d.ts.map +1 -0
  32. package/dist/channels/github/connections.js +14 -0
  33. package/dist/channels/github/connections.js.map +1 -0
  34. package/dist/channels/github/index.d.ts +12 -0
  35. package/dist/channels/github/index.d.ts.map +1 -0
  36. package/dist/channels/github/index.js +266 -0
  37. package/dist/channels/github/index.js.map +1 -0
  38. package/dist/channels/github/mentions.d.ts +12 -0
  39. package/dist/channels/github/mentions.d.ts.map +1 -0
  40. package/dist/channels/github/mentions.js +185 -0
  41. package/dist/channels/github/mentions.js.map +1 -0
  42. package/dist/channels/github/schema.d.ts +4165 -0
  43. package/dist/channels/github/schema.d.ts.map +1 -0
  44. package/dist/channels/github/schema.js +221 -0
  45. package/dist/channels/github/schema.js.map +1 -0
  46. package/dist/channels/github/types.d.ts +170 -0
  47. package/dist/channels/github/types.d.ts.map +1 -0
  48. package/dist/channels/github/types.js +2 -0
  49. package/dist/channels/github/types.js.map +1 -0
  50. package/dist/channels/http/endpoint.d.ts +137 -0
  51. package/dist/channels/http/endpoint.d.ts.map +1 -0
  52. package/dist/channels/http/endpoint.js +286 -0
  53. package/dist/channels/http/endpoint.js.map +1 -0
  54. package/dist/channels/http/http.d.ts.map +1 -1
  55. package/dist/channels/http/http.js +439 -65
  56. package/dist/channels/http/http.js.map +1 -1
  57. package/dist/channels/http/index.d.ts +8 -1
  58. package/dist/channels/http/index.d.ts.map +1 -1
  59. package/dist/channels/http/index.js +35 -16
  60. package/dist/channels/http/index.js.map +1 -1
  61. package/dist/channels/http/ingress.d.ts +67 -5
  62. package/dist/channels/http/ingress.d.ts.map +1 -1
  63. package/dist/channels/http/ingress.js +155 -43
  64. package/dist/channels/http/ingress.js.map +1 -1
  65. package/dist/channels/http/provider.d.ts +125 -0
  66. package/dist/channels/http/provider.d.ts.map +1 -0
  67. package/dist/channels/http/provider.js +227 -0
  68. package/dist/channels/http/provider.js.map +1 -0
  69. package/dist/channels/http/studio.d.ts +24 -0
  70. package/dist/channels/http/studio.d.ts.map +1 -0
  71. package/dist/channels/http/studio.js +95 -0
  72. package/dist/channels/http/studio.js.map +1 -0
  73. package/dist/channels/http/threads.d.ts +7 -0
  74. package/dist/channels/http/threads.d.ts.map +1 -0
  75. package/dist/channels/http/threads.js +10 -0
  76. package/dist/channels/http/threads.js.map +1 -0
  77. package/dist/channels/http/types.d.ts +166 -2
  78. package/dist/channels/http/types.d.ts.map +1 -1
  79. package/dist/channels/linear/app-setup.d.ts +29 -0
  80. package/dist/channels/linear/app-setup.d.ts.map +1 -0
  81. package/dist/channels/linear/app-setup.js +102 -0
  82. package/dist/channels/linear/app-setup.js.map +1 -0
  83. package/dist/channels/linear/connections.d.ts +11 -0
  84. package/dist/channels/linear/connections.d.ts.map +1 -0
  85. package/dist/channels/linear/connections.js +14 -0
  86. package/dist/channels/linear/connections.js.map +1 -0
  87. package/dist/channels/linear/graphql.d.ts +57 -0
  88. package/dist/channels/linear/graphql.d.ts.map +1 -0
  89. package/dist/channels/linear/graphql.js +167 -0
  90. package/dist/channels/linear/graphql.js.map +1 -0
  91. package/dist/channels/linear/index.d.ts +13 -0
  92. package/dist/channels/linear/index.d.ts.map +1 -0
  93. package/dist/channels/linear/index.js +457 -0
  94. package/dist/channels/linear/index.js.map +1 -0
  95. package/dist/channels/linear/schema.d.ts +1050 -0
  96. package/dist/channels/linear/schema.d.ts.map +1 -0
  97. package/dist/channels/linear/schema.js +255 -0
  98. package/dist/channels/linear/schema.js.map +1 -0
  99. package/dist/channels/linear/types.d.ts +169 -0
  100. package/dist/channels/linear/types.d.ts.map +1 -0
  101. package/dist/channels/linear/types.js +2 -0
  102. package/dist/channels/linear/types.js.map +1 -0
  103. package/dist/channels/message-schema.d.ts +2 -0
  104. package/dist/channels/message-schema.d.ts.map +1 -1
  105. package/dist/channels/message-schema.js +4 -0
  106. package/dist/channels/message-schema.js.map +1 -1
  107. package/dist/channels/messaging-registry.d.ts +16 -0
  108. package/dist/channels/messaging-registry.d.ts.map +1 -1
  109. package/dist/channels/messaging-registry.js +29 -0
  110. package/dist/channels/messaging-registry.js.map +1 -1
  111. package/dist/channels/reserved-connections.d.ts +12 -0
  112. package/dist/channels/reserved-connections.d.ts.map +1 -0
  113. package/dist/channels/reserved-connections.js +55 -0
  114. package/dist/channels/reserved-connections.js.map +1 -0
  115. package/dist/channels/resolve-user-endpoint.d.ts +34 -0
  116. package/dist/channels/resolve-user-endpoint.d.ts.map +1 -0
  117. package/dist/channels/resolve-user-endpoint.js +51 -0
  118. package/dist/channels/resolve-user-endpoint.js.map +1 -0
  119. package/dist/channels/resolve-user.d.ts +95 -0
  120. package/dist/channels/resolve-user.d.ts.map +1 -0
  121. package/dist/channels/resolve-user.js +143 -0
  122. package/dist/channels/resolve-user.js.map +1 -0
  123. package/dist/channels/run-input.d.ts +88 -0
  124. package/dist/channels/run-input.d.ts.map +1 -0
  125. package/dist/channels/run-input.js +177 -0
  126. package/dist/channels/run-input.js.map +1 -0
  127. package/dist/channels/runtime.d.ts +5 -2
  128. package/dist/channels/runtime.d.ts.map +1 -1
  129. package/dist/channels/runtime.js +19 -10
  130. package/dist/channels/runtime.js.map +1 -1
  131. package/dist/channels/schedule-delivery.d.ts +2 -13
  132. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  133. package/dist/channels/schedule-delivery.js +6 -73
  134. package/dist/channels/schedule-delivery.js.map +1 -1
  135. package/dist/channels/slack/api.d.ts +2 -0
  136. package/dist/channels/slack/api.d.ts.map +1 -1
  137. package/dist/channels/slack/api.js +6 -0
  138. package/dist/channels/slack/api.js.map +1 -1
  139. package/dist/channels/slack/connections.d.ts +6 -0
  140. package/dist/channels/slack/connections.d.ts.map +1 -0
  141. package/dist/channels/slack/connections.js +6 -0
  142. package/dist/channels/slack/connections.js.map +1 -0
  143. package/dist/channels/slack/events.d.ts +278 -0
  144. package/dist/channels/slack/events.d.ts.map +1 -0
  145. package/dist/channels/slack/events.js +235 -0
  146. package/dist/channels/slack/events.js.map +1 -0
  147. package/dist/channels/slack/files.d.ts.map +1 -1
  148. package/dist/channels/slack/files.js +2 -3
  149. package/dist/channels/slack/files.js.map +1 -1
  150. package/dist/channels/slack/index.d.ts +90 -2
  151. package/dist/channels/slack/index.d.ts.map +1 -1
  152. package/dist/channels/slack/index.js +188 -6
  153. package/dist/channels/slack/index.js.map +1 -1
  154. package/dist/channels/slack/message-content.d.ts.map +1 -1
  155. package/dist/channels/slack/message-content.js +23 -28
  156. package/dist/channels/slack/message-content.js.map +1 -1
  157. package/dist/channels/slack/status.d.ts +76 -0
  158. package/dist/channels/slack/status.d.ts.map +1 -0
  159. package/dist/channels/slack/status.js +427 -0
  160. package/dist/channels/slack/status.js.map +1 -0
  161. package/dist/channels/source-providers.js +1 -1
  162. package/dist/channels/source-providers.js.map +1 -1
  163. package/dist/channels/trigger/client.d.ts.map +1 -1
  164. package/dist/channels/trigger/client.js +9 -15
  165. package/dist/channels/trigger/client.js.map +1 -1
  166. package/dist/channels/trigger/conversation.d.ts +11 -0
  167. package/dist/channels/trigger/conversation.d.ts.map +1 -0
  168. package/dist/channels/trigger/conversation.js +72 -0
  169. package/dist/channels/trigger/conversation.js.map +1 -0
  170. package/dist/channels/trigger/http.d.ts +130 -4
  171. package/dist/channels/trigger/http.d.ts.map +1 -1
  172. package/dist/channels/trigger/http.js +408 -78
  173. package/dist/channels/trigger/http.js.map +1 -1
  174. package/dist/channels/trigger/identity-context.d.ts.map +1 -1
  175. package/dist/channels/trigger/identity-context.js +2 -5
  176. package/dist/channels/trigger/identity-context.js.map +1 -1
  177. package/dist/channels/trigger/ingress.d.ts +70 -1
  178. package/dist/channels/trigger/ingress.d.ts.map +1 -1
  179. package/dist/channels/trigger/ingress.js +135 -21
  180. package/dist/channels/trigger/ingress.js.map +1 -1
  181. package/dist/channels/trigger/transport.d.ts +10 -0
  182. package/dist/channels/trigger/transport.d.ts.map +1 -1
  183. package/dist/channels/trigger/transport.js +25 -9
  184. package/dist/channels/trigger/transport.js.map +1 -1
  185. package/dist/channels/trigger/types.d.ts +92 -3
  186. package/dist/channels/trigger/types.d.ts.map +1 -1
  187. package/dist/channels/trigger/types.js +37 -0
  188. package/dist/channels/trigger/types.js.map +1 -1
  189. package/dist/channels/types.d.ts +53 -4
  190. package/dist/channels/types.d.ts.map +1 -1
  191. package/dist/channels/types.js +2 -0
  192. package/dist/channels/types.js.map +1 -1
  193. package/dist/connections.d.ts +36 -12
  194. package/dist/connections.d.ts.map +1 -1
  195. package/dist/connections.js +125 -30
  196. package/dist/connections.js.map +1 -1
  197. package/dist/connectors/mcp/langsmith-url.d.ts.map +1 -1
  198. package/dist/connectors/mcp/langsmith-url.js +0 -1
  199. package/dist/connectors/mcp/langsmith-url.js.map +1 -1
  200. package/dist/credential-gate.d.ts +2 -0
  201. package/dist/credential-gate.d.ts.map +1 -1
  202. package/dist/credential-gate.js +37 -3
  203. package/dist/credential-gate.js.map +1 -1
  204. package/dist/define-deep-agent.d.ts +2 -2
  205. package/dist/define-deep-agent.d.ts.map +1 -1
  206. package/dist/define-deep-agent.js +53 -2
  207. package/dist/define-deep-agent.js.map +1 -1
  208. package/dist/identity/index.d.ts.map +1 -1
  209. package/dist/identity/index.js +3 -1
  210. package/dist/identity/index.js.map +1 -1
  211. package/dist/identity/loopback.d.ts +1 -1
  212. package/dist/identity/loopback.d.ts.map +1 -1
  213. package/dist/identity/loopback.js +3 -2
  214. package/dist/identity/loopback.js.map +1 -1
  215. package/dist/identity/options.d.ts +9 -0
  216. package/dist/identity/options.d.ts.map +1 -1
  217. package/dist/identity/options.js +1 -1
  218. package/dist/identity/options.js.map +1 -1
  219. package/dist/identity/slack/links.js +3 -2
  220. package/dist/identity/slack/links.js.map +1 -1
  221. package/dist/identity/types.d.ts +3 -0
  222. package/dist/identity/types.d.ts.map +1 -1
  223. package/dist/index.d.ts +19 -5
  224. package/dist/index.d.ts.map +1 -1
  225. package/dist/index.js +3 -1
  226. package/dist/index.js.map +1 -1
  227. package/dist/ingress/loopback.d.ts +1 -0
  228. package/dist/ingress/loopback.d.ts.map +1 -1
  229. package/dist/ingress/loopback.js +7 -3
  230. package/dist/ingress/loopback.js.map +1 -1
  231. package/dist/ingress/runs.d.ts +74 -1
  232. package/dist/ingress/runs.d.ts.map +1 -1
  233. package/dist/ingress/runs.js +184 -9
  234. package/dist/ingress/runs.js.map +1 -1
  235. package/dist/managed-composition.d.ts +3 -0
  236. package/dist/managed-composition.d.ts.map +1 -1
  237. package/dist/managed-composition.js +29 -13
  238. package/dist/managed-composition.js.map +1 -1
  239. package/dist/namespaces.d.ts +25 -21
  240. package/dist/namespaces.d.ts.map +1 -1
  241. package/dist/namespaces.js +4 -29
  242. package/dist/namespaces.js.map +1 -1
  243. package/dist/runtime/async-subagents.d.ts +27 -0
  244. package/dist/runtime/async-subagents.d.ts.map +1 -0
  245. package/dist/runtime/async-subagents.js +139 -0
  246. package/dist/runtime/async-subagents.js.map +1 -0
  247. package/dist/runtime/auth.d.ts.map +1 -1
  248. package/dist/runtime/auth.js +177 -8
  249. package/dist/runtime/auth.js.map +1 -1
  250. package/dist/runtime/backend.d.ts +7 -0
  251. package/dist/runtime/backend.d.ts.map +1 -1
  252. package/dist/runtime/backend.js +32 -7
  253. package/dist/runtime/backend.js.map +1 -1
  254. package/dist/runtime/browser-facade.d.ts +10 -0
  255. package/dist/runtime/browser-facade.d.ts.map +1 -0
  256. package/dist/runtime/browser-facade.js +23 -0
  257. package/dist/runtime/browser-facade.js.map +1 -0
  258. package/dist/runtime/browser-langsmith.d.ts +143 -0
  259. package/dist/runtime/browser-langsmith.d.ts.map +1 -0
  260. package/dist/runtime/browser-langsmith.js +508 -0
  261. package/dist/runtime/browser-langsmith.js.map +1 -0
  262. package/dist/runtime/browser-recorder.py +831 -0
  263. package/dist/runtime/browser-selection.d.ts +10 -0
  264. package/dist/runtime/browser-selection.d.ts.map +1 -0
  265. package/dist/runtime/browser-selection.js +21 -0
  266. package/dist/runtime/browser-selection.js.map +1 -0
  267. package/dist/runtime/browser.d.ts +138 -0
  268. package/dist/runtime/browser.d.ts.map +1 -0
  269. package/dist/runtime/browser.js +802 -0
  270. package/dist/runtime/browser.js.map +1 -0
  271. package/dist/runtime/channel-icon.d.ts +22 -0
  272. package/dist/runtime/channel-icon.d.ts.map +1 -0
  273. package/dist/runtime/channel-icon.js +81 -0
  274. package/dist/runtime/channel-icon.js.map +1 -0
  275. package/dist/runtime/channel.d.ts +11 -0
  276. package/dist/runtime/channel.d.ts.map +1 -1
  277. package/dist/runtime/channel.js.map +1 -1
  278. package/dist/runtime/graph-build-timing.d.ts +30 -0
  279. package/dist/runtime/graph-build-timing.d.ts.map +1 -0
  280. package/dist/runtime/graph-build-timing.js +50 -0
  281. package/dist/runtime/graph-build-timing.js.map +1 -0
  282. package/dist/runtime/identity-http.d.ts +2 -0
  283. package/dist/runtime/identity-http.d.ts.map +1 -1
  284. package/dist/runtime/identity-http.js +38 -2
  285. package/dist/runtime/identity-http.js.map +1 -1
  286. package/dist/runtime/identity-runtime.d.ts +10 -0
  287. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  288. package/dist/runtime/identity-runtime.js +22 -0
  289. package/dist/runtime/identity-runtime.js.map +1 -1
  290. package/dist/runtime/index.d.ts +38 -1
  291. package/dist/runtime/index.d.ts.map +1 -1
  292. package/dist/runtime/index.js +97 -43
  293. package/dist/runtime/index.js.map +1 -1
  294. package/dist/runtime/langsmith-env.d.ts +19 -0
  295. package/dist/runtime/langsmith-env.d.ts.map +1 -0
  296. package/dist/runtime/langsmith-env.js +38 -0
  297. package/dist/runtime/langsmith-env.js.map +1 -0
  298. package/dist/runtime/managed-thread.d.ts +61 -0
  299. package/dist/runtime/managed-thread.d.ts.map +1 -0
  300. package/dist/runtime/managed-thread.js +76 -0
  301. package/dist/runtime/managed-thread.js.map +1 -0
  302. package/dist/runtime/managed-tools.d.ts +10 -2
  303. package/dist/runtime/managed-tools.d.ts.map +1 -1
  304. package/dist/runtime/managed-tools.js +10 -8
  305. package/dist/runtime/managed-tools.js.map +1 -1
  306. package/dist/runtime/memory/policy.d.ts.map +1 -1
  307. package/dist/runtime/memory/policy.js +1 -3
  308. package/dist/runtime/memory/policy.js.map +1 -1
  309. package/dist/runtime/parent-run.d.ts +33 -0
  310. package/dist/runtime/parent-run.d.ts.map +1 -0
  311. package/dist/runtime/parent-run.js +114 -0
  312. package/dist/runtime/parent-run.js.map +1 -0
  313. package/dist/runtime/run-input.d.ts +14 -1
  314. package/dist/runtime/run-input.d.ts.map +1 -1
  315. package/dist/runtime/run-input.js +100 -7
  316. package/dist/runtime/run-input.js.map +1 -1
  317. package/dist/runtime/sandbox-manager.d.ts +18 -4
  318. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  319. package/dist/runtime/sandbox-manager.js +57 -20
  320. package/dist/runtime/sandbox-manager.js.map +1 -1
  321. package/dist/runtime/schedule-auth.d.ts +79 -0
  322. package/dist/runtime/schedule-auth.d.ts.map +1 -1
  323. package/dist/runtime/schedule-auth.js +165 -7
  324. package/dist/runtime/schedule-auth.js.map +1 -1
  325. package/dist/runtime/static-entry.d.ts.map +1 -1
  326. package/dist/runtime/static-entry.js +1 -0
  327. package/dist/runtime/static-entry.js.map +1 -1
  328. package/dist/runtime/thread-record.d.ts +88 -0
  329. package/dist/runtime/thread-record.d.ts.map +1 -0
  330. package/dist/runtime/thread-record.js +213 -0
  331. package/dist/runtime/thread-record.js.map +1 -0
  332. package/dist/runtime/types.d.ts +12 -1
  333. package/dist/runtime/types.d.ts.map +1 -1
  334. package/dist/runtime-schedules.d.ts +15 -0
  335. package/dist/runtime-schedules.d.ts.map +1 -1
  336. package/dist/runtime-schedules.js +83 -20
  337. package/dist/runtime-schedules.js.map +1 -1
  338. package/dist/sandbox.d.ts +0 -6
  339. package/dist/sandbox.d.ts.map +1 -1
  340. package/dist/sandbox.js +3 -7
  341. package/dist/sandbox.js.map +1 -1
  342. package/dist/schedule-channel.d.ts +5 -2
  343. package/dist/schedule-channel.d.ts.map +1 -1
  344. package/dist/schedule-channel.js +13 -12
  345. package/dist/schedule-channel.js.map +1 -1
  346. package/dist/telemetry/metadata.d.ts.map +1 -1
  347. package/dist/telemetry/metadata.js +4 -4
  348. package/dist/telemetry/metadata.js.map +1 -1
  349. package/dist/telemetry/otel/exporter.d.ts.map +1 -1
  350. package/dist/telemetry/otel/exporter.js +3 -3
  351. package/dist/telemetry/otel/exporter.js.map +1 -1
  352. package/dist/types.d.ts +19 -2
  353. package/dist/types.d.ts.map +1 -1
  354. package/dist/types.js.map +1 -1
  355. package/dist/values.d.ts +15 -0
  356. package/dist/values.d.ts.map +1 -0
  357. package/dist/values.js +31 -0
  358. package/dist/values.js.map +1 -0
  359. package/package.json +26 -12
@@ -5,9 +5,24 @@ import { channelInfo, createRuntimeChannel } from "./runtime.js";
5
5
  import { isJsonValue } from "./message-schema.js";
6
6
  import { channelProviderForName, messagingTransportForName, } from "./messaging-registry.js";
7
7
  import { createTriggerClient } from "./trigger/client.js";
8
+ import { startTriggerConversation } from "./trigger/conversation.js";
8
9
  import { createTriggerTransport } from "./trigger/transport.js";
9
10
  import { channelContextSchema } from "../run-context.js";
11
+ import { bindingFromOrigin, } from "../runtime/thread-record.js";
10
12
  export const SLACK_BOT_TOKEN_ENV = "SLACK_BOT_TOKEN";
13
+ /**
14
+ * The binding whose message event holds a run's own input, in place of the
15
+ * delivery's messages, such as a handler's.
16
+ */
17
+ export function bindingWithMessages(binding, messages) {
18
+ return {
19
+ ...binding,
20
+ event: {
21
+ type: "message",
22
+ messages: messages,
23
+ },
24
+ };
25
+ }
11
26
  export const currentChannelBinding = new AsyncLocalStorage();
12
27
  function record(value) {
13
28
  return value !== null && typeof value === "object" && !Array.isArray(value);
@@ -30,16 +45,27 @@ export function resolveChannelBinding(context, configurable) {
30
45
  const user = configurable?.langgraph_auth_user;
31
46
  if (!record(user) ||
32
47
  user.mda_source_provider !== binding.provider ||
33
- user.mda_source_thread_id !== binding.sourceThreadKey ||
34
- channelProviderForName(binding.name) !== binding.provider)
48
+ user.mda_source_thread_id !== binding.sourceThreadKey)
35
49
  return undefined;
36
- if (binding.transport === "trigger_server") {
37
- const target = triggerTargetSchema.safeParse(binding.target);
38
- if (!target.success ||
39
- target.data.source_thread_key !== binding.sourceThreadKey)
40
- return undefined;
41
- }
42
- return binding;
50
+ return isDeclaredBinding(binding) ? binding : undefined;
51
+ }
52
+ /**
53
+ * The binding a thread record's origin names, when this deployment declares
54
+ * its channel. The record is trusted as it is: the auth handler lets only
55
+ * managed ingress write one.
56
+ */
57
+ export function resolveOriginBinding(origin) {
58
+ const binding = bindingFromOrigin(origin);
59
+ return binding && isDeclaredBinding(binding) ? binding : undefined;
60
+ }
61
+ /** Whether a declared channel of the binding's provider can reach its target. */
62
+ function isDeclaredBinding(binding) {
63
+ if (channelProviderForName(binding.name) !== binding.provider)
64
+ return false;
65
+ if (binding.transport !== "trigger_server")
66
+ return true;
67
+ const target = triggerTargetSchema.safeParse(binding.target);
68
+ return (target.success && target.data.source_thread_key === binding.sourceThreadKey);
43
69
  }
44
70
  export function resolveChannelInfo(context, configurable) {
45
71
  const binding = resolveChannelBinding(context, configurable);
@@ -49,18 +75,25 @@ export function resolveRuntimeChannel(context, configurable, transportFactory) {
49
75
  const binding = resolveChannelBinding(context, configurable);
50
76
  if (!binding)
51
77
  return undefined;
78
+ return runtimeChannelFor(binding, binding.event, transportFactory);
79
+ }
80
+ /** A runtime channel that posts to a binding's target. */
81
+ export function runtimeChannelFor(binding, event, transportFactory) {
52
82
  let transport;
83
+ let startThread;
53
84
  if (binding.transport === "trigger_server") {
54
85
  const client = createTriggerClient();
55
- if (client)
86
+ if (client) {
56
87
  transport = createTriggerTransport(client);
88
+ startThread = (message, run) => startTriggerConversation(client, binding, message, run);
89
+ }
57
90
  }
58
91
  else {
59
92
  transport =
60
93
  messagingTransportForName(binding.name) ??
61
94
  transportFactory?.(binding.provider);
62
95
  }
63
- return createRuntimeChannel({ ...binding, transport });
96
+ return createRuntimeChannel({ ...binding, event, transport, startThread });
64
97
  }
65
98
  /** Trusted ingress source for telemetry; direct HTTP callers have no channel stamp. */
66
99
  export function resolveChannelProvider(configurable) {
@@ -1 +1 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/channels/binding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/channels/binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
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
+ /** What a new Trigger thread posted when a scheduled run pauses says. */
5
+ export declare const PAUSED_NOTICE = "This scheduled run is waiting for a decision.";
6
+ /** What a scheduled run that fails posts where Trigger cannot show the failure. */
7
+ export declare const FAILED_NOTICE = "This scheduled run failed.";
8
+ /** What a new Trigger thread posted when a scheduled run fails says; Trigger replies in it. */
9
+ export declare const FAILED_THREAD_NOTICE = "This scheduled run failed. Details in this thread \u2B07\uFE0F";
10
+ /** The run a delivery step belongs to. */
11
+ export interface DeliveredRun {
12
+ /** The Agent Server run, for idempotent posts, notices and their links. */
13
+ runId?: string;
14
+ assistantId?: string;
15
+ /** The run's configurable, with the principal the server stamped. */
16
+ configurable?: Record<string, unknown>;
17
+ /** The run's metadata, which marks a managed cron fire. */
18
+ metadata?: unknown;
19
+ /** Cron routing split out of the run's context. */
20
+ routing?: Record<string, unknown>;
21
+ /** The run's own thread; an async subagent's differs from `run.thread`'s. */
22
+ runThreadId?: string;
23
+ /** An async subagent's run: report its pause, never post its answer. */
24
+ subagent?: boolean;
25
+ }
26
+ /**
27
+ * Deliver a finished top-level run's result to its thread's origin, or to a
28
+ * scheduled run's `deliverTo`. A thread with neither gets nothing. The Agent
29
+ * Server runs every TypeScript graph run on a thread with a checkpointer, a
30
+ * cron fire without a `thread_id` included, so its state can always be read.
31
+ *
32
+ * Failures follow what each channel did before: a Trigger post and any
33
+ * scheduled delivery fail the run; a direct channel's post is logged and the
34
+ * run still succeeds.
35
+ */
36
+ export declare function deliverRunResult(graph: Graph, run: RunThread, delivered?: DeliveredRun): Promise<void>;
37
+ /**
38
+ * Report a scheduled run that threw where its result would have gone. A
39
+ * Trigger thread gets `run.failed`, so Trigger shows the failure there; a
40
+ * new-thread schedule opens its thread with a notice, as does `deliverTo`.
41
+ * Only trusted cron fires report here: Trigger ingress reports the runs it
42
+ * started. Only a known-safe message leaves the run, and reporting never
43
+ * replaces its error.
44
+ */
45
+ export declare function deliverRunFailure(run: RunThread, delivered: DeliveredRun, error: unknown): Promise<void>;
46
+ /** The Trigger post id of a failed run's notice, stable across retries. */
47
+ export declare function failedActionId(runId: string): string;
48
+ /** The Trigger post id for a run's answer, stable across retries. */
49
+ export declare function replyActionId(runId: string): string;
50
+ export {};
51
+ //# sourceMappingURL=delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/channels/delivery.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,sBAAsB,CAAC;AAI9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AA6C9D,KAAK,KAAK,GAAG,IAAI,CACf,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,EACpC,UAAU,GAAG,iBAAiB,CAC/B,CAAC;AAGF,yEAAyE;AACzE,eAAO,MAAM,aAAa,kDAAkD,CAAC;AAC7E,mFAAmF;AACnF,eAAO,MAAM,aAAa,+BAA+B,CAAC;AAC1D,+FAA+F;AAC/F,eAAO,MAAM,oBAAoB,mEACuB,CAAC;AAEzD,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAOD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,SAAS,EACd,SAAS,GAAE,YAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA0Df;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAsCf;AAuLD,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,424 @@
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
+ * A scheduled run that starts a new Trigger thread, with its answer or with a
10
+ * notice that it waits on a decision, hands its own thread to that thread's
11
+ * conversation, so replies and decisions there continue the run. A scheduled
12
+ * run that throws reports the failure to the same place.
13
+ */
14
+ import { randomUUID } from "node:crypto";
15
+ import { v5 as uuidv5 } from "uuid";
16
+ import { z } from "zod";
17
+ import { THREAD_CONVERSATION_METADATA, originFromBinding, threadRecordMetadata, triggerTargetSchema, } from "../runtime/thread-record.js";
18
+ import { handOffScheduledThread, scheduleExecution, } from "../runtime/schedule-auth.js";
19
+ import { logger } from "../runtime/log.js";
20
+ import { QUIET_REPLY, extractReplyContent, extractReplyText, } from "./assistant-text.js";
21
+ import { channelAutoRepliesForName, channelProviderForName, messagingTransportForName, pausedNoticeForName, } from "./messaging-registry.js";
22
+ import { deliverScheduleResult, getDeploymentId, isTrustedScheduleDeliveryRun, readScheduleDeliverTo, } from "./schedule-delivery.js";
23
+ import { createTriggerClient } from "./trigger/client.js";
24
+ import { missingConnectionFailureMessage } from "./trigger/http.js";
25
+ import { resolveTracerSessionId } from "./trigger/tracing-project.js";
26
+ import { createTriggerTransport, startTriggerThread, } from "./trigger/transport.js";
27
+ /** What a new Trigger thread posted when a scheduled run pauses says. */
28
+ export const PAUSED_NOTICE = "This scheduled run is waiting for a decision.";
29
+ /** What a scheduled run that fails posts where Trigger cannot show the failure. */
30
+ export const FAILED_NOTICE = "This scheduled run failed.";
31
+ /** What a new Trigger thread posted when a scheduled run fails says; Trigger replies in it. */
32
+ export const FAILED_THREAD_NOTICE = "This scheduled run failed. Details in this thread ⬇️";
33
+ /**
34
+ * Deliver a finished top-level run's result to its thread's origin, or to a
35
+ * scheduled run's `deliverTo`. A thread with neither gets nothing. The Agent
36
+ * Server runs every TypeScript graph run on a thread with a checkpointer, a
37
+ * cron fire without a `thread_id` included, so its state can always be read.
38
+ *
39
+ * Failures follow what each channel did before: a Trigger post and any
40
+ * scheduled delivery fail the run; a direct channel's post is logged and the
41
+ * run still succeeds.
42
+ */
43
+ export async function deliverRunResult(graph, run, delivered = {}) {
44
+ const { thread, origin } = run;
45
+ if (!thread)
46
+ return;
47
+ const delivery = origin ? undefined : scheduledDelivery(delivered);
48
+ if (!origin && !delivery)
49
+ return;
50
+ const deliverTo = delivery?.deliverTo;
51
+ const opening = openingOf(origin, delivery, delivered);
52
+ const { runId, subagent } = delivered;
53
+ const threadId = delivered.runThreadId ?? thread.id;
54
+ const config = { configurable: { thread_id: threadId } };
55
+ const state = await graph.getState(config);
56
+ const interrupts = pendingInterrupts(state);
57
+ if (interrupts.length) {
58
+ if (opening) {
59
+ const opened = await openThread(opening, run, delivered, {
60
+ text: PAUSED_NOTICE,
61
+ actionId: runId ? pausedActionId(runId) : randomUUID(),
62
+ });
63
+ if (opened)
64
+ await reportInterrupted(opened, threadId, runId, interrupts);
65
+ }
66
+ else if (origin?.transport === "trigger_server")
67
+ await reportInterrupted(origin, threadId, runId, interrupts);
68
+ else if (origin)
69
+ await noticePaused(origin, threadId, delivered.assistantId);
70
+ return;
71
+ }
72
+ // A static breakpoint stopped the run before it finished: no answer yet.
73
+ if (state.next.length > 0 || subagent)
74
+ return;
75
+ // A channel declared with `reply: "none"` leaves replying to the agent.
76
+ if (origin && !channelAutoRepliesForName(origin.name))
77
+ return;
78
+ const values = { messages: messagesOf(state.values) };
79
+ const boundary = await replyBoundary(graph, config, values.messages);
80
+ const text = extractReplyText(values, boundary);
81
+ if (text.trim() === QUIET_REPLY)
82
+ return;
83
+ if (opening) {
84
+ if (text)
85
+ await openThread(opening, run, delivered, {
86
+ text,
87
+ actionId: runId ? replyActionId(runId) : randomUUID(),
88
+ });
89
+ return;
90
+ }
91
+ if (!origin) {
92
+ if (deliverTo && text)
93
+ await deliverToTarget(deliverTo, text);
94
+ return;
95
+ }
96
+ const content = origin.transport === "trigger_server"
97
+ ? text || null
98
+ : extractReplyContent(values, boundary);
99
+ if (content === null)
100
+ return;
101
+ const scheduled = origin.event?.type === "schedule";
102
+ try {
103
+ await post(origin, content, runId);
104
+ }
105
+ catch (error) {
106
+ if (scheduled || origin.transport === "trigger_server")
107
+ throw error;
108
+ // The answer stays in the thread; the run itself succeeded.
109
+ logger.error(`channel reply failed (${logger.safeErrorLabel(error)})`);
110
+ }
111
+ }
112
+ /**
113
+ * Report a scheduled run that threw where its result would have gone. A
114
+ * Trigger thread gets `run.failed`, so Trigger shows the failure there; a
115
+ * new-thread schedule opens its thread with a notice, as does `deliverTo`.
116
+ * Only trusted cron fires report here: Trigger ingress reports the runs it
117
+ * started. Only a known-safe message leaves the run, and reporting never
118
+ * replaces its error.
119
+ */
120
+ export async function deliverRunFailure(run, delivered, error) {
121
+ const { thread, origin } = run;
122
+ if (!thread ||
123
+ delivered.subagent ||
124
+ !isTrustedScheduleDeliveryRun(delivered.configurable, delivered.metadata))
125
+ return;
126
+ const delivery = origin ? undefined : scheduledDelivery(delivered);
127
+ if (!origin && !delivery)
128
+ return;
129
+ const message = missingConnectionFailureMessage(error);
130
+ const { runId } = delivered;
131
+ const threadId = delivered.runThreadId ?? thread.id;
132
+ try {
133
+ const opening = openingOf(origin, delivery, delivered);
134
+ if (opening) {
135
+ const opened = await openThread(opening, run, delivered, {
136
+ text: FAILED_THREAD_NOTICE,
137
+ actionId: runId ? failedActionId(runId) : randomUUID(),
138
+ });
139
+ if (opened)
140
+ await reportRunEvent(opened, threadId, runId, {
141
+ type: "run.failed",
142
+ message,
143
+ });
144
+ }
145
+ else if (!origin) {
146
+ if (delivery)
147
+ await deliverToTarget(delivery.deliverTo, message ?? FAILED_NOTICE);
148
+ }
149
+ else if (origin.transport === "trigger_server")
150
+ await reportRunEvent(origin, threadId, runId, {
151
+ type: "run.failed",
152
+ message,
153
+ });
154
+ }
155
+ catch (failure) {
156
+ logger.error(`channel failure report failed (${logger.safeErrorLabel(failure)})`);
157
+ }
158
+ }
159
+ /** A compiled schedule's routing: where it delivers, and whether each fire has its own thread. */
160
+ const scheduleRoutingSchema = z.object({
161
+ deliver_to: z.unknown().optional(),
162
+ new_thread: z.boolean().optional(),
163
+ });
164
+ /** A trusted cron fire's schedule routing, when it posts its result to `deliverTo`. */
165
+ function scheduledDelivery(delivered) {
166
+ if (!isTrustedScheduleDeliveryRun(delivered.configurable, delivered.metadata))
167
+ return undefined;
168
+ const schedule = scheduleRoutingSchema.safeParse(delivered.routing?.mda_schedule);
169
+ if (!schedule.success)
170
+ return undefined;
171
+ const deliverTo = readScheduleDeliverTo(schedule.data.deliver_to);
172
+ return deliverTo?.autoPost
173
+ ? { deliverTo, newThread: schedule.data.new_thread === true }
174
+ : undefined;
175
+ }
176
+ /**
177
+ * Where a scheduled run starts a new Trigger thread: a new-thread schedule on
178
+ * a Trigger channel, or a new-thread `deliverTo` conversation Trigger delivers
179
+ * to. A schedule with a fixed thread keeps it.
180
+ */
181
+ function openingOf(origin, delivery, delivered) {
182
+ if (scheduleExecution(delivered.configurable) === undefined)
183
+ return undefined;
184
+ if (origin)
185
+ return origin.transport === "trigger_server" &&
186
+ origin.event?.type === "schedule" &&
187
+ origin.event.new_thread
188
+ ? { via: "channel", origin }
189
+ : undefined;
190
+ return delivery?.newThread === true &&
191
+ delivery.deliverTo.to.type === "provider_conversation" &&
192
+ getDeploymentId() !== undefined &&
193
+ hasTriggerClient()
194
+ ? { via: "deployment", deliverTo: delivery.deliverTo }
195
+ : undefined;
196
+ }
197
+ /** Whether Trigger is configured; a malformed setting leaves `deliverTo` its own fallback. */
198
+ function hasTriggerClient() {
199
+ try {
200
+ return createTriggerClient() !== undefined;
201
+ }
202
+ catch {
203
+ return false;
204
+ }
205
+ }
206
+ /**
207
+ * Post the first message of a new Trigger thread, then hand the run's thread
208
+ * to that thread's conversation. Returns the conversation, unless Trigger
209
+ * could not name the thread it started.
210
+ */
211
+ async function openThread(opening, run, delivered, { text, actionId }) {
212
+ const client = createTriggerClient();
213
+ if (!client)
214
+ throw new Error("channel delivery is not configured");
215
+ let started;
216
+ let name;
217
+ if (opening.via === "channel") {
218
+ name = opening.origin.name;
219
+ started = await startTriggerThread(client, {
220
+ target: opening.origin.target,
221
+ text,
222
+ actionId,
223
+ });
224
+ }
225
+ else {
226
+ name = opening.deliverTo.channel;
227
+ const deploymentId = getDeploymentId();
228
+ if (!deploymentId)
229
+ throw new Error("channel delivery is not configured");
230
+ const result = await client.postDeploymentAction(deploymentId, name, {
231
+ type: "post",
232
+ action_id: actionId,
233
+ address: { conversation_id: opening.deliverTo.to.conversationId },
234
+ follow_thread: true,
235
+ message: { text },
236
+ });
237
+ started = result.thread;
238
+ }
239
+ if (!started) {
240
+ logger.warn("scheduled post started a thread Trigger did not name");
241
+ return undefined;
242
+ }
243
+ const provider = opening.via === "channel"
244
+ ? opening.origin.provider
245
+ : (channelProviderForName(name) ?? name);
246
+ const conversation = {
247
+ name,
248
+ provider,
249
+ transport: "trigger_server",
250
+ sourceThreadKey: started.source_thread_key,
251
+ deliveryId: actionId,
252
+ target: started,
253
+ };
254
+ await handOff(run, delivered, conversation);
255
+ return { ...conversation, event: null };
256
+ }
257
+ /** Make the run's thread the conversation's, keeping its participants. */
258
+ async function handOff(run, delivered, conversation) {
259
+ const execution = scheduleExecution(delivered.configurable);
260
+ if (!execution || !run.thread)
261
+ throw new Error("scheduled thread handoff is unavailable");
262
+ const record = threadRecordMetadata({
263
+ origin: originFromBinding(conversation, null),
264
+ participants: run.thread.participants.map(({ id, role }) => ({ id, role })),
265
+ });
266
+ await handOffScheduledThread({
267
+ thread: run.thread.id,
268
+ execution,
269
+ conversation: {
270
+ provider: conversation.provider,
271
+ source_thread_key: conversation.sourceThreadKey,
272
+ },
273
+ }, { ...record, [THREAD_CONVERSATION_METADATA]: conversation.sourceThreadKey });
274
+ }
275
+ /** Post a `deliverTo` result into an existing conversation; a failure fails the run. */
276
+ async function deliverToTarget(deliverTo, text) {
277
+ const outcome = await deliverScheduleResult({ deliverTo, replyText: text });
278
+ if (outcome === "failed")
279
+ throw new Error("Scheduled channel delivery failed");
280
+ }
281
+ async function post(origin, content, runId) {
282
+ const newThread = origin.event?.type === "schedule" ? origin.event.new_thread : undefined;
283
+ const message = { type: "content", content };
284
+ if (origin.transport === "trigger_server") {
285
+ const client = createTriggerClient();
286
+ if (!client)
287
+ throw new Error("channel delivery is not configured");
288
+ // A retried run posts its answer once.
289
+ await createTriggerTransport(client, {
290
+ actionId: runId ? replyActionId(runId) : randomUUID(),
291
+ }).post({ message, target: origin.target, newThread });
292
+ return;
293
+ }
294
+ const transport = messagingTransportForName(origin.name);
295
+ if (!transport)
296
+ throw new Error(`channel delivery is unavailable: no channel ${JSON.stringify(logger.logIdentifier(origin.name))}`);
297
+ await transport.post({
298
+ message,
299
+ target: origin.target,
300
+ ...(newThread !== undefined && { newThread }),
301
+ });
302
+ }
303
+ /** The Trigger post id of a paused run's notice, stable across retries. */
304
+ function pausedActionId(runId) {
305
+ return uuidv5(`mda-paused:${runId}`, uuidv5.URL);
306
+ }
307
+ /** The Trigger post id of a failed run's notice, stable across retries. */
308
+ export function failedActionId(runId) {
309
+ return uuidv5(`mda-failed:${runId}`, uuidv5.URL);
310
+ }
311
+ /** The Trigger post id for a run's answer, stable across retries. */
312
+ export function replyActionId(runId) {
313
+ return uuidv5(`mda-reply:${runId}`, uuidv5.URL);
314
+ }
315
+ /**
316
+ * Where the run's messages start: after the last message of the latest
317
+ * checkpoint the run's input made. A resume makes none, so it counts from the
318
+ * paused run's input. Without one, the reply falls back to the answers since
319
+ * the last user message.
320
+ */
321
+ async function replyBoundary(graph, config, messages) {
322
+ let input;
323
+ for await (const snapshot of graph.getStateHistory(config, {
324
+ filter: { source: "input" },
325
+ limit: 1,
326
+ })) {
327
+ input = snapshot;
328
+ break;
329
+ }
330
+ // A checkpointer may ignore the filter.
331
+ if (input?.metadata?.source !== "input")
332
+ return {};
333
+ const before = messagesOf(input.values);
334
+ const afterId = Array.isArray(before) ? messageId(before.at(-1)) : undefined;
335
+ const final = Array.isArray(messages) ? messages : [];
336
+ return afterId !== undefined &&
337
+ final.some((message) => messageId(message) === afterId)
338
+ ? { afterId }
339
+ : {};
340
+ }
341
+ /** The `messages` of graph state values, when they are an object. */
342
+ function messagesOf(values) {
343
+ return isObject(values) ? values.messages : undefined;
344
+ }
345
+ function messageId(message) {
346
+ const id = isObject(message) ? message.id : undefined;
347
+ return typeof id === "string" && id ? id : undefined;
348
+ }
349
+ function isObject(value) {
350
+ return typeof value === "object" && value !== null;
351
+ }
352
+ /** An interrupt Trigger can resume: a non-blank id, with its value. */
353
+ const interruptSchema = z.object({
354
+ id: z.string().refine((id) => id.trim().length > 0),
355
+ value: z.unknown(),
356
+ response_schema: z.unknown().optional(),
357
+ });
358
+ /** The interrupts the run stopped on, as Trigger forwards them. */
359
+ function pendingInterrupts(state) {
360
+ return state.tasks.flatMap((task) => (task.interrupts ?? []).flatMap((entry) => {
361
+ const parsed = interruptSchema.safeParse(entry);
362
+ if (!parsed.success)
363
+ return [];
364
+ const { id, value, response_schema: schema } = parsed.data;
365
+ return [
366
+ { id, value, ...(isObject(schema) && { response_schema: schema }) },
367
+ ];
368
+ }));
369
+ }
370
+ /**
371
+ * Tell a direct channel's conversation the run waits on a decision, with a
372
+ * Studio link to this thread, when the channel has such a notice. Best
373
+ * effort: it never fails the run.
374
+ */
375
+ async function noticePaused(origin, threadId, assistantId) {
376
+ const notice = pausedNoticeForName(origin.name);
377
+ if (!notice)
378
+ return;
379
+ try {
380
+ await notice(origin.target, { threadId, ...(assistantId && { assistantId }) }, "interrupted");
381
+ }
382
+ catch (error) {
383
+ logger.error(`channel paused notice failed (${logger.safeErrorLabel(error)})`);
384
+ }
385
+ }
386
+ /** Tell Trigger the run waits on a decision. Best effort: it never fails the run. */
387
+ function reportInterrupted(origin, threadId, runId, interrupts) {
388
+ return reportRunEvent(origin, threadId, runId, {
389
+ type: "run.interrupted",
390
+ interrupts,
391
+ });
392
+ }
393
+ /** Send Trigger a runtime event about the run. Best effort: it never fails the run. */
394
+ async function reportRunEvent(origin, threadId, runId, event) {
395
+ const target = triggerTargetSchema.safeParse(origin.target);
396
+ try {
397
+ if (!target.success) {
398
+ logger.warn(`channel ${event.type} was not reported: invalid Trigger target`);
399
+ return;
400
+ }
401
+ const client = createTriggerClient();
402
+ if (!client || !runId) {
403
+ logger.warn(`channel ${event.type} was not reported: no run or transport`);
404
+ return;
405
+ }
406
+ const tracerSessionId = await resolveTracerSessionId();
407
+ await client.postRuntimeEvent(target.data.channel_id, {
408
+ id: randomUUID(),
409
+ type: event.type,
410
+ delivery_id: origin.deliveryId,
411
+ source_thread_key: origin.sourceThreadKey,
412
+ address: target.data.address,
413
+ run_thread_id: threadId,
414
+ run_id: runId,
415
+ ...(event.interrupts ? { interrupts: event.interrupts } : {}),
416
+ ...(event.message ? { message: { text: event.message } } : {}),
417
+ ...(tracerSessionId ? { tracer_session_id: tracerSessionId } : {}),
418
+ });
419
+ }
420
+ catch (error) {
421
+ logger.warn(`channel ${event.type} was not reported (${logger.safeErrorLabel(error)})`);
422
+ }
423
+ }
424
+ //# sourceMappingURL=delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/channels/delivery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { GitHubAppOptions } from "./types.js";
2
+ type PermissionLevel = "read" | "write";
3
+ /** A permission the App asks for, with the handled events that need it. */
4
+ export type AppPermission = {
5
+ name: string;
6
+ level: PermissionLevel;
7
+ /** Empty when the level comes from `app.permissions` or is `metadata`. */
8
+ events: string[];
9
+ };
10
+ /** What `mda deploy` needs to set up the GitHub App. */
11
+ export type GitHubAppSetup = {
12
+ /** The handled event keys, such as `issues.opened`. */
13
+ events: string[];
14
+ /** The webhook events the App subscribes to, such as `issues`. */
15
+ webhookEvents: string[];
16
+ permissions: AppPermission[];
17
+ /** `owner/name`, lowercased and sorted; absent for every repository. */
18
+ repositories?: string[];
19
+ };
20
+ /**
21
+ * The App the channel's handlers and `app` options need. The CLI reads it
22
+ * from the channel's manifest instead of working it out; the Python runtime
23
+ * mirrors these rules in `github_app_setup.py`.
24
+ */
25
+ export declare function githubAppSetup(handlers: object, app: GitHubAppOptions | undefined): GitHubAppSetup;
26
+ /**
27
+ * The repositories the channel is limited to, lowercased since GitHub names
28
+ * are case-insensitive. One installation covers them, so they share an owner.
29
+ */
30
+ export declare function repositoryAllowlist(repositories: readonly string[] | undefined): string[] | undefined;
31
+ export {};
32
+ //# sourceMappingURL=app-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-setup.d.ts","sourceRoot":"","sources":["../../../src/channels/github/app-setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAC;AAEtE,KAAK,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AAgExC,2EAA2E;AAC3E,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG;IAC3B,uDAAuD;IACvD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kEAAkE;IAClE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,gBAAgB,GAAG,SAAS,GAChC,cAAc,CAiBhB;AAoDD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAC1C,MAAM,EAAE,GAAG,SAAS,CAiCtB"}