managed-deepagents 0.10.0-dev.17 → 0.10.0-dev.18

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 (195) hide show
  1. package/README.md +508 -80
  2. package/dist/channels/actor.d.ts +43 -0
  3. package/dist/channels/actor.d.ts.map +1 -0
  4. package/dist/channels/actor.js +2 -0
  5. package/dist/channels/actor.js.map +1 -0
  6. package/dist/channels/assistant-text.d.ts +29 -0
  7. package/dist/channels/assistant-text.d.ts.map +1 -1
  8. package/dist/channels/assistant-text.js +72 -1
  9. package/dist/channels/assistant-text.js.map +1 -1
  10. package/dist/channels/binding.d.ts +20 -1
  11. package/dist/channels/binding.d.ts.map +1 -1
  12. package/dist/channels/binding.js +39 -10
  13. package/dist/channels/binding.js.map +1 -1
  14. package/dist/channels/delivery.d.ts +21 -0
  15. package/dist/channels/delivery.d.ts.map +1 -0
  16. package/dist/channels/delivery.js +196 -0
  17. package/dist/channels/delivery.js.map +1 -0
  18. package/dist/channels/github/index.d.ts.map +1 -1
  19. package/dist/channels/github/index.js +13 -11
  20. package/dist/channels/github/index.js.map +1 -1
  21. package/dist/channels/github/schema.d.ts +50 -1
  22. package/dist/channels/github/schema.d.ts.map +1 -1
  23. package/dist/channels/github/schema.js +12 -0
  24. package/dist/channels/github/schema.js.map +1 -1
  25. package/dist/channels/http/endpoint.d.ts +6 -4
  26. package/dist/channels/http/endpoint.d.ts.map +1 -1
  27. package/dist/channels/http/endpoint.js.map +1 -1
  28. package/dist/channels/http/http.d.ts.map +1 -1
  29. package/dist/channels/http/http.js +4 -10
  30. package/dist/channels/http/http.js.map +1 -1
  31. package/dist/channels/http/index.d.ts.map +1 -1
  32. package/dist/channels/http/index.js +10 -16
  33. package/dist/channels/http/index.js.map +1 -1
  34. package/dist/channels/http/ingress.d.ts +2 -2
  35. package/dist/channels/http/ingress.d.ts.map +1 -1
  36. package/dist/channels/http/ingress.js +9 -21
  37. package/dist/channels/http/ingress.js.map +1 -1
  38. package/dist/channels/http/provider.d.ts +10 -5
  39. package/dist/channels/http/provider.d.ts.map +1 -1
  40. package/dist/channels/http/provider.js +17 -10
  41. package/dist/channels/http/provider.js.map +1 -1
  42. package/dist/channels/http/studio.d.ts +5 -5
  43. package/dist/channels/http/studio.d.ts.map +1 -1
  44. package/dist/channels/http/studio.js +4 -6
  45. package/dist/channels/http/studio.js.map +1 -1
  46. package/dist/channels/http/types.d.ts +7 -1
  47. package/dist/channels/http/types.d.ts.map +1 -1
  48. package/dist/channels/linear/index.d.ts.map +1 -1
  49. package/dist/channels/linear/index.js +16 -11
  50. package/dist/channels/linear/index.js.map +1 -1
  51. package/dist/channels/linear/schema.d.ts +11 -25
  52. package/dist/channels/linear/schema.d.ts.map +1 -1
  53. package/dist/channels/linear/schema.js +6 -0
  54. package/dist/channels/linear/schema.js.map +1 -1
  55. package/dist/channels/linear/types.d.ts +9 -2
  56. package/dist/channels/linear/types.d.ts.map +1 -1
  57. package/dist/channels/messaging-registry.d.ts +16 -0
  58. package/dist/channels/messaging-registry.d.ts.map +1 -1
  59. package/dist/channels/messaging-registry.js +29 -0
  60. package/dist/channels/messaging-registry.js.map +1 -1
  61. package/dist/channels/reserved-connections.d.ts.map +1 -1
  62. package/dist/channels/reserved-connections.js +10 -0
  63. package/dist/channels/reserved-connections.js.map +1 -1
  64. package/dist/channels/run-input.d.ts +11 -0
  65. package/dist/channels/run-input.d.ts.map +1 -1
  66. package/dist/channels/run-input.js +18 -8
  67. package/dist/channels/run-input.js.map +1 -1
  68. package/dist/channels/runtime.d.ts +1 -1
  69. package/dist/channels/runtime.d.ts.map +1 -1
  70. package/dist/channels/runtime.js +1 -1
  71. package/dist/channels/runtime.js.map +1 -1
  72. package/dist/channels/schedule-delivery.d.ts +1 -1
  73. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  74. package/dist/channels/schedule-delivery.js +9 -20
  75. package/dist/channels/schedule-delivery.js.map +1 -1
  76. package/dist/channels/slack/api.d.ts +2 -0
  77. package/dist/channels/slack/api.d.ts.map +1 -1
  78. package/dist/channels/slack/api.js +6 -0
  79. package/dist/channels/slack/api.js.map +1 -1
  80. package/dist/channels/slack/connections.d.ts +6 -0
  81. package/dist/channels/slack/connections.d.ts.map +1 -0
  82. package/dist/channels/slack/connections.js +6 -0
  83. package/dist/channels/slack/connections.js.map +1 -0
  84. package/dist/channels/slack/events.d.ts +272 -0
  85. package/dist/channels/slack/events.d.ts.map +1 -0
  86. package/dist/channels/slack/events.js +235 -0
  87. package/dist/channels/slack/events.js.map +1 -0
  88. package/dist/channels/slack/files.d.ts.map +1 -1
  89. package/dist/channels/slack/files.js +2 -3
  90. package/dist/channels/slack/files.js.map +1 -1
  91. package/dist/channels/slack/index.d.ts +44 -2
  92. package/dist/channels/slack/index.d.ts.map +1 -1
  93. package/dist/channels/slack/index.js +124 -3
  94. package/dist/channels/slack/index.js.map +1 -1
  95. package/dist/channels/slack/message-content.d.ts.map +1 -1
  96. package/dist/channels/slack/message-content.js +23 -28
  97. package/dist/channels/slack/message-content.js.map +1 -1
  98. package/dist/channels/slack/status.d.ts +76 -0
  99. package/dist/channels/slack/status.d.ts.map +1 -0
  100. package/dist/channels/slack/status.js +427 -0
  101. package/dist/channels/slack/status.js.map +1 -0
  102. package/dist/channels/trigger/client.d.ts.map +1 -1
  103. package/dist/channels/trigger/client.js +4 -9
  104. package/dist/channels/trigger/client.js.map +1 -1
  105. package/dist/channels/trigger/http.d.ts +114 -3
  106. package/dist/channels/trigger/http.d.ts.map +1 -1
  107. package/dist/channels/trigger/http.js +310 -71
  108. package/dist/channels/trigger/http.js.map +1 -1
  109. package/dist/channels/trigger/ingress.d.ts +38 -1
  110. package/dist/channels/trigger/ingress.d.ts.map +1 -1
  111. package/dist/channels/trigger/ingress.js +47 -1
  112. package/dist/channels/trigger/ingress.js.map +1 -1
  113. package/dist/channels/trigger/types.d.ts +82 -3
  114. package/dist/channels/trigger/types.d.ts.map +1 -1
  115. package/dist/channels/trigger/types.js +36 -0
  116. package/dist/channels/trigger/types.js.map +1 -1
  117. package/dist/channels/types.d.ts +19 -3
  118. package/dist/channels/types.d.ts.map +1 -1
  119. package/dist/channels/types.js +2 -0
  120. package/dist/channels/types.js.map +1 -1
  121. package/dist/index.d.ts +6 -3
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +1 -1
  124. package/dist/index.js.map +1 -1
  125. package/dist/ingress/runs.d.ts +22 -0
  126. package/dist/ingress/runs.d.ts.map +1 -1
  127. package/dist/ingress/runs.js +45 -1
  128. package/dist/ingress/runs.js.map +1 -1
  129. package/dist/managed-composition.d.ts.map +1 -1
  130. package/dist/managed-composition.js +8 -13
  131. package/dist/managed-composition.js.map +1 -1
  132. package/dist/namespaces.d.ts +0 -21
  133. package/dist/namespaces.d.ts.map +1 -1
  134. package/dist/namespaces.js +0 -29
  135. package/dist/namespaces.js.map +1 -1
  136. package/dist/runtime/auth.d.ts +1 -2
  137. package/dist/runtime/auth.d.ts.map +1 -1
  138. package/dist/runtime/auth.js +90 -63
  139. package/dist/runtime/auth.js.map +1 -1
  140. package/dist/runtime/identity-runtime.d.ts +4 -9
  141. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  142. package/dist/runtime/identity-runtime.js +12 -25
  143. package/dist/runtime/identity-runtime.js.map +1 -1
  144. package/dist/runtime/index.d.ts.map +1 -1
  145. package/dist/runtime/index.js +32 -23
  146. package/dist/runtime/index.js.map +1 -1
  147. package/dist/runtime/managed-thread.d.ts +60 -0
  148. package/dist/runtime/managed-thread.d.ts.map +1 -0
  149. package/dist/runtime/managed-thread.js +76 -0
  150. package/dist/runtime/managed-thread.js.map +1 -0
  151. package/dist/runtime/managed-tools.d.ts +10 -2
  152. package/dist/runtime/managed-tools.d.ts.map +1 -1
  153. package/dist/runtime/managed-tools.js +10 -8
  154. package/dist/runtime/managed-tools.js.map +1 -1
  155. package/dist/runtime/memory/policy.d.ts.map +1 -1
  156. package/dist/runtime/memory/policy.js +1 -3
  157. package/dist/runtime/memory/policy.js.map +1 -1
  158. package/dist/runtime/run-input.d.ts +10 -0
  159. package/dist/runtime/run-input.d.ts.map +1 -1
  160. package/dist/runtime/run-input.js +48 -2
  161. package/dist/runtime/run-input.js.map +1 -1
  162. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  163. package/dist/runtime/sandbox-manager.js +1 -1
  164. package/dist/runtime/sandbox-manager.js.map +1 -1
  165. package/dist/runtime/schedule-auth.d.ts +17 -0
  166. package/dist/runtime/schedule-auth.d.ts.map +1 -1
  167. package/dist/runtime/schedule-auth.js +39 -1
  168. package/dist/runtime/schedule-auth.js.map +1 -1
  169. package/dist/runtime/thread-record.d.ts +81 -0
  170. package/dist/runtime/thread-record.d.ts.map +1 -0
  171. package/dist/runtime/thread-record.js +205 -0
  172. package/dist/runtime/thread-record.js.map +1 -0
  173. package/dist/runtime/types.d.ts +5 -1
  174. package/dist/runtime/types.d.ts.map +1 -1
  175. package/dist/runtime-schedules.d.ts +13 -0
  176. package/dist/runtime-schedules.d.ts.map +1 -1
  177. package/dist/runtime-schedules.js +83 -20
  178. package/dist/runtime-schedules.js.map +1 -1
  179. package/dist/sandbox.d.ts +0 -6
  180. package/dist/sandbox.d.ts.map +1 -1
  181. package/dist/sandbox.js +3 -7
  182. package/dist/sandbox.js.map +1 -1
  183. package/dist/schedule-channel.d.ts +5 -2
  184. package/dist/schedule-channel.d.ts.map +1 -1
  185. package/dist/schedule-channel.js +13 -12
  186. package/dist/schedule-channel.js.map +1 -1
  187. package/dist/values.d.ts +15 -0
  188. package/dist/values.d.ts.map +1 -0
  189. package/dist/values.js +31 -0
  190. package/dist/values.js.map +1 -0
  191. package/package.json +7 -7
  192. package/dist/channels/http/reply.d.ts +0 -20
  193. package/dist/channels/http/reply.d.ts.map +0 -1
  194. package/dist/channels/http/reply.js +0 -116
  195. package/dist/channels/http/reply.js.map +0 -1
@@ -0,0 +1,427 @@
1
+ /**
2
+ * The status a Slack channel shows while a run works: a line, or a list of
3
+ * steps, in place of Trigger Server's own working phrases.
4
+ *
5
+ * It is a courtesy, like `reactions`: a chooser that throws, hangs, or
6
+ * answers with something that is not a status leaves what Slack shows, and
7
+ * posting it never fails or slows the run.
8
+ */
9
+ import { randomUUID } from "node:crypto";
10
+ import { getConfig } from "@langchain/langgraph";
11
+ import { createMiddleware } from "langchain";
12
+ import { z } from "zod";
13
+ import { logger } from "../../runtime/log.js";
14
+ import { isRecord, nonblankString } from "../../values.js";
15
+ import { resolveChannelBinding } from "../binding.js";
16
+ import { createTriggerClient, } from "../trigger/client.js";
17
+ const STEP_STATUSES = new Set([
18
+ "pending",
19
+ "in_progress",
20
+ "complete",
21
+ "error",
22
+ ]);
23
+ /** Slack's limit on a task's or plan's title. */
24
+ const MAX_TITLE_LENGTH = 256;
25
+ /** Slack's limit on a plan's tasks. */
26
+ const MAX_STEPS = 50;
27
+ /** How long a chooser may take before what's shown stays. */
28
+ const CHOOSER_TIMEOUT_MS = 1_000;
29
+ /** How often a chooser is asked again while a model or tool call runs. */
30
+ const HEARTBEAT_MS = 4_000;
31
+ /** The least time between two status updates of a run. */
32
+ const MIN_UPDATE_GAP_MS = 1_000;
33
+ /** How long the end of a run waits for its last status update. */
34
+ const DRAIN_TIMEOUT_MS = 2_000;
35
+ /** Runs whose status is tracked at once; an interrupted run never says it ended. */
36
+ const MAX_TRACKED_RUNS = 256;
37
+ /** `text` on one line, at most Slack's title length; `undefined` when blank. */
38
+ function oneLine(text) {
39
+ const line = text.split(/\s+/u).filter(Boolean).join(" ");
40
+ return line ? [...line].slice(0, MAX_TITLE_LENGTH).join("") : undefined;
41
+ }
42
+ function statusStep(value) {
43
+ if (typeof value === "string") {
44
+ const title = oneLine(value);
45
+ return title === undefined ? undefined : { title, status: "pending" };
46
+ }
47
+ if (!isRecord(value) || typeof value.title !== "string")
48
+ return undefined;
49
+ const title = oneLine(value.title);
50
+ const status = value.status ?? "pending";
51
+ if (title === undefined || typeof status !== "string")
52
+ return undefined;
53
+ if (!STEP_STATUSES.has(status))
54
+ return undefined;
55
+ return { title, status: status };
56
+ }
57
+ /**
58
+ * A status value as Trigger Server takes it, or `undefined` when `value` is
59
+ * not one. A plan keeps its first steps, as many as Slack shows.
60
+ */
61
+ export function slackStatusFields(value) {
62
+ if (typeof value === "string") {
63
+ const text = oneLine(value);
64
+ return text === undefined ? undefined : { message: { text } };
65
+ }
66
+ if (!Array.isArray(value))
67
+ return undefined;
68
+ const steps = [];
69
+ for (const entry of value.slice(0, MAX_STEPS)) {
70
+ const step = statusStep(entry);
71
+ if (!step)
72
+ return undefined;
73
+ steps.push(step);
74
+ }
75
+ return { steps };
76
+ }
77
+ /** Whether `value` is a status value a channel can show. */
78
+ export function isSlackStatusValue(value) {
79
+ return slackStatusFields(value) !== undefined;
80
+ }
81
+ /**
82
+ * What a run's `run.started` tells Trigger Server about its status: a custom
83
+ * status shows as a plan, whose title is the line, and a fixed one from the
84
+ * start. `undefined` keeps Trigger Server's working phrases.
85
+ */
86
+ export function startedStatus(choice) {
87
+ if (choice === undefined)
88
+ return undefined;
89
+ if (typeof choice === "function")
90
+ return { display: "plan" };
91
+ return { display: "plan", ...slackStatusFields(choice) };
92
+ }
93
+ /** What a chooser says, as Trigger Server takes it; `null` to leave what's shown. */
94
+ async function chooseStatus(chooser, context, warn) {
95
+ let timer;
96
+ try {
97
+ const chosen = await Promise.race([
98
+ Promise.resolve(chooser(context)),
99
+ new Promise((_, reject) => {
100
+ timer = setTimeout(() => reject(new Error(`timed out after ${CHOOSER_TIMEOUT_MS}ms`)), CHOOSER_TIMEOUT_MS);
101
+ }),
102
+ ]);
103
+ // An empty list, as a to-do list is before the agent writes one, leaves
104
+ // what's shown too.
105
+ if (chosen === null || (Array.isArray(chosen) && chosen.length === 0))
106
+ return null;
107
+ const fields = slackStatusFields(chosen);
108
+ if (fields)
109
+ return fields;
110
+ warn("Slack status chooser did not answer with a status line or steps; leaving the status.");
111
+ }
112
+ catch (error) {
113
+ warn(`Slack status chooser failed (${logger.safeErrorLabel(error)}); leaving the status.`);
114
+ }
115
+ finally {
116
+ if (timer !== undefined)
117
+ clearTimeout(timer);
118
+ }
119
+ return null;
120
+ }
121
+ /**
122
+ * One run's status updates: one chooser call at a time, at most one update a
123
+ * second, and only when the status changed. Updates are posted in order, in
124
+ * the background; a failed post is logged.
125
+ */
126
+ class RunStatus {
127
+ #chooser;
128
+ #target;
129
+ /** The newest state not yet shown to the chooser. */
130
+ #pending;
131
+ #draining;
132
+ #shown;
133
+ #updatedAt = 0;
134
+ #closed = false;
135
+ /** Bumped when what the chooser was asked about is out of date. */
136
+ #generation = 0;
137
+ #warned = false;
138
+ #wake;
139
+ /** The model and tool calls under way, and the state the heartbeat asks with. */
140
+ #calls = 0;
141
+ #callState;
142
+ #heartbeat;
143
+ constructor(chooser, target) {
144
+ this.#chooser = chooser;
145
+ this.#target = target;
146
+ }
147
+ /** Ask the chooser about `state`, once the previous call is done. */
148
+ update(state) {
149
+ if (this.#closed)
150
+ return;
151
+ this.#pending = state;
152
+ this.#draining ??= this.#drain().finally(() => {
153
+ this.#draining = undefined;
154
+ });
155
+ }
156
+ /** Run a model or tool call, asking the chooser again while it runs. */
157
+ async during(state, call) {
158
+ this.#calls += 1;
159
+ this.#callState = state;
160
+ if (this.#calls === 1 && !this.#closed) {
161
+ this.#heartbeat = setInterval(() => {
162
+ if (this.#callState)
163
+ this.update(this.#callState);
164
+ }, HEARTBEAT_MS);
165
+ this.#heartbeat.unref?.();
166
+ }
167
+ try {
168
+ return await call();
169
+ }
170
+ catch (error) {
171
+ // The run is failing, interrupted, or cancelled, and may never reach
172
+ // `afterAgent`: show nothing more, as Trigger Server hears it ended.
173
+ this.close();
174
+ throw error;
175
+ }
176
+ finally {
177
+ this.#calls -= 1;
178
+ if (this.#calls === 0) {
179
+ this.#stopHeartbeat();
180
+ this.#dropStale();
181
+ }
182
+ }
183
+ }
184
+ /** Whether the run's status updates are over. */
185
+ get closed() {
186
+ return this.#closed;
187
+ }
188
+ /**
189
+ * A finished call leaves what was asked during it out of date. The next
190
+ * hook asks again, unless the run stops first, as an interrupt in a later
191
+ * hook stops it.
192
+ */
193
+ #dropStale() {
194
+ this.#pending = undefined;
195
+ this.#generation += 1;
196
+ this.#wake?.();
197
+ }
198
+ /** Stop asking, and wait a little for an update already on its way. */
199
+ async close() {
200
+ this.#closed = true;
201
+ this.#pending = undefined;
202
+ this.#stopHeartbeat();
203
+ this.#wake?.();
204
+ const draining = this.#draining;
205
+ if (!draining)
206
+ return;
207
+ let timer;
208
+ await Promise.race([
209
+ draining,
210
+ new Promise((resolve) => {
211
+ timer = setTimeout(resolve, DRAIN_TIMEOUT_MS);
212
+ }),
213
+ ]);
214
+ clearTimeout(timer);
215
+ }
216
+ #stopHeartbeat() {
217
+ if (this.#heartbeat !== undefined)
218
+ clearInterval(this.#heartbeat);
219
+ this.#heartbeat = undefined;
220
+ this.#callState = undefined;
221
+ }
222
+ async #drain() {
223
+ while (this.#pending !== undefined && !this.#closed) {
224
+ await this.#gap();
225
+ const state = this.#pending;
226
+ this.#pending = undefined;
227
+ if (state === undefined || this.#closed)
228
+ return;
229
+ const generation = this.#generation;
230
+ const fields = await chooseStatus(this.#chooser, { state }, (message) => this.#warnOnce(message));
231
+ if (fields === null || this.#closed)
232
+ continue;
233
+ if (generation !== this.#generation)
234
+ continue;
235
+ const shown = JSON.stringify(fields);
236
+ if (shown === this.#shown)
237
+ continue;
238
+ this.#updatedAt = Date.now();
239
+ // Only a status Trigger Server took counts as shown; a failed one is
240
+ // posted again when the chooser answers it again.
241
+ if (await this.#post(fields))
242
+ this.#shown = shown;
243
+ }
244
+ }
245
+ /** Wait out the least time between updates; closing ends the wait. */
246
+ async #gap() {
247
+ const wait = this.#updatedAt + MIN_UPDATE_GAP_MS - Date.now();
248
+ if (wait <= 0)
249
+ return;
250
+ await new Promise((resolve) => {
251
+ const timer = setTimeout(resolve, wait);
252
+ this.#wake = () => {
253
+ clearTimeout(timer);
254
+ resolve();
255
+ };
256
+ });
257
+ this.#wake = undefined;
258
+ }
259
+ async #post(fields) {
260
+ const target = this.#target;
261
+ try {
262
+ await target.client.postRuntimeEvent(target.channelId, {
263
+ id: randomUUID(),
264
+ type: "run.thinking",
265
+ delivery_id: target.deliveryId,
266
+ source_thread_key: target.sourceThreadKey,
267
+ address: target.address,
268
+ run_thread_id: target.threadId,
269
+ run_id: target.runId,
270
+ display: "plan",
271
+ ...fields,
272
+ });
273
+ return true;
274
+ }
275
+ catch (error) {
276
+ logger.warn(`Slack status update failed (${logger.safeErrorLabel(error)}).`);
277
+ return false;
278
+ }
279
+ }
280
+ /** A broken chooser fails on every call; say so once per run. */
281
+ #warnOnce(message) {
282
+ if (this.#warned)
283
+ return;
284
+ this.#warned = true;
285
+ logger.warn(message);
286
+ }
287
+ }
288
+ function currentConfig() {
289
+ try {
290
+ return getConfig();
291
+ }
292
+ catch {
293
+ // Outside a runnable context.
294
+ return undefined;
295
+ }
296
+ }
297
+ /** The run's Trigger Slack delivery, verified against the run's own source. */
298
+ function statusTarget(binding, config) {
299
+ const target = binding.target;
300
+ const runId = nonblankString(config.metadata?.run_id);
301
+ const threadId = nonblankString(config.configurable?.thread_id);
302
+ if (!runId || !threadId || !isRecord(target.address))
303
+ return undefined;
304
+ return {
305
+ channelId: target.channel_id,
306
+ address: target.address,
307
+ deliveryId: binding.deliveryId,
308
+ sourceThreadKey: binding.sourceThreadKey,
309
+ runId,
310
+ threadId,
311
+ };
312
+ }
313
+ /** LangGraph's checkpoint namespaces nest with `|`. */
314
+ function nestedGraph(config) {
315
+ const namespace = config.configurable?.checkpoint_ns;
316
+ return typeof namespace === "string" && namespace.includes("|");
317
+ }
318
+ function statusState(state) {
319
+ return state;
320
+ }
321
+ /**
322
+ * The state fields a chooser reads beyond `messages`. LangChain hands a
323
+ * middleware only the fields it declares, so without this a chooser never
324
+ * saw the to-do list. It is the to-do list middleware's own schema, so
325
+ * declaring it again changes nothing for agents that keep one.
326
+ */
327
+ const statusStateSchema = z.object({
328
+ todos: z
329
+ .array(z.object({
330
+ content: z.string(),
331
+ status: z.enum(["pending", "in_progress", "completed"]),
332
+ }))
333
+ .default([]),
334
+ });
335
+ /**
336
+ * Show what each Slack channel's status chooser says while a run of the
337
+ * channel works. Runs from other channels, and channels with a fixed status
338
+ * or none, pass through: `run.started` carries a fixed status.
339
+ */
340
+ export function createSlackStatusMiddleware(channels) {
341
+ const choosers = new Map();
342
+ for (const channel of channels) {
343
+ const status = channel.status;
344
+ if (channel.kind === "slack" &&
345
+ channel.name &&
346
+ typeof status === "function")
347
+ choosers.set(channel.name, status);
348
+ }
349
+ const runs = new Map();
350
+ /**
351
+ * The current run's status updates, when its channel has a chooser; new
352
+ * ones only with `start`.
353
+ */
354
+ const currentRun = (start = true) => {
355
+ const config = currentConfig();
356
+ // A subagent forked inside a tool call shares the run's config; only the
357
+ // run's own agent, at the root of its graph, shows the status.
358
+ if (!config || nestedGraph(config))
359
+ return undefined;
360
+ const binding = resolveChannelBinding(config.context, config.configurable);
361
+ if (!binding || binding.transport !== "trigger_server")
362
+ return undefined;
363
+ const chooser = choosers.get(binding.name);
364
+ const target = chooser && statusTarget(binding, config);
365
+ if (!chooser || !target)
366
+ return undefined;
367
+ const key = target.runId;
368
+ let run = runs.get(key);
369
+ if (run?.closed) {
370
+ runs.delete(key);
371
+ run = undefined;
372
+ }
373
+ if (!run) {
374
+ if (!start)
375
+ return undefined;
376
+ const client = createTriggerClient();
377
+ if (!client)
378
+ return undefined;
379
+ if (runs.size >= MAX_TRACKED_RUNS) {
380
+ const [oldest, stale] = runs.entries().next().value;
381
+ runs.delete(oldest);
382
+ // Not awaited: it only stops the stale run's heartbeat.
383
+ stale.close();
384
+ }
385
+ run = new RunStatus(chooser, { client, ...target });
386
+ runs.set(key, run);
387
+ }
388
+ return { key, run };
389
+ };
390
+ const update = (state) => {
391
+ currentRun()?.run.update(statusState(state));
392
+ return undefined;
393
+ };
394
+ return createMiddleware({
395
+ name: "mda-slack-status",
396
+ stateSchema: statusStateSchema,
397
+ beforeAgent: update,
398
+ beforeModel: update,
399
+ afterModel: update,
400
+ async afterAgent() {
401
+ const current = currentRun(false);
402
+ if (!current)
403
+ return undefined;
404
+ runs.delete(current.key);
405
+ await current.run.close();
406
+ return undefined;
407
+ },
408
+ async wrapModelCall(request, handler) {
409
+ const current = currentRun();
410
+ return current
411
+ ? current.run.during(statusState(request.state), async () => handler(request))
412
+ : handler(request);
413
+ },
414
+ async wrapToolCall(request, handler) {
415
+ const current = currentRun();
416
+ return current
417
+ ? current.run.during(statusState(request.state), async () => handler(request))
418
+ : handler(request);
419
+ },
420
+ });
421
+ }
422
+ /** Whether a channel's status needs the status middleware in its runs. */
423
+ export function hasSlackStatusChooser(channels) {
424
+ return channels.some((channel) => channel.kind === "slack" &&
425
+ typeof channel.status === "function");
426
+ }
427
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/channels/slack/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,oCAAoC,qCACb,CAAC;AACrC,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAEhE,KAAK,sBAAsB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACzC,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,SAAS,EAAE,sBAAsB;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAF1B,YACW,SAAS,EAAE,sBAAsB,EACjC,MAAM,CAAC,EAAE,MAAM,YAAA,EAQzB;CACF;AAED,4EAA4E;AAC5E,qBAAa,aAAc,YAAW,iBAAiB;;IAOrD,YAAY,OAAO,GAAE,oBAAyB,EAW7C;IAEK,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAOvC;IAEK,oBAAoB,CACxB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAWvC;IAEK,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAU7C;CAoCF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,aAAa,GAAG,SAAS,CAM3B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,oCAAoC,qCACb,CAAC;AACrC,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAEhE,KAAK,sBAAsB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACzC,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,SAAS,EAAE,sBAAsB;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAF1B,YACW,SAAS,EAAE,sBAAsB,EACjC,MAAM,CAAC,EAAE,MAAM,YAAA,EAQzB;CACF;AAED,4EAA4E;AAC5E,qBAAa,aAAc,YAAW,iBAAiB;;IAOrD,YAAY,OAAO,GAAE,oBAAyB,EAW7C;IAEK,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAOvC;IAEK,oBAAoB,CACxB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAWvC;IAEK,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAU7C;CAoCF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,aAAa,GAAG,SAAS,CAM3B"}
@@ -1,5 +1,6 @@
1
1
  import { fetchWithTimeout, PROVIDER_HTTP_TIMEOUT_MS, } from "../../runtime/http.js";
2
2
  import { normalizeUuid } from "./uuid.js";
3
+ import { isRecord, nonblankString } from "../../values.js";
3
4
  export const LANGSMITH_MDA_TRIGGER_SERVER_URL_ENV = "LANGSMITH_MDA_TRIGGER_SERVER_URL";
4
5
  export const TRIGGER_HTTP_TIMEOUT_MS = PROVIDER_HTTP_TIMEOUT_MS;
5
6
  /** Fixed-message callback error safe for logs and diagnostics. */
@@ -118,16 +119,10 @@ function triggerServerApiBase(raw) {
118
119
  }
119
120
  return `${url.origin}${path || "/v1"}`;
120
121
  }
121
- function isRecord(value) {
122
- return typeof value === "object" && value !== null && !Array.isArray(value);
123
- }
124
- function nonblank(value) {
125
- return typeof value === "string" && value.trim().length > 0;
126
- }
127
122
  function parseActionResponse(response) {
128
- if (!isRecord(response) || !nonblank(response.id)) {
123
+ const id = isRecord(response) ? nonblankString(response.id) : undefined;
124
+ if (id === undefined)
129
125
  throw new TriggerClientError("actions");
130
- }
131
- return { id: response.id };
126
+ return { id };
132
127
  }
133
128
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,14 @@
1
- import type { ChannelBinding } from "../binding.js";
1
+ import type { JsonValue } from "../types.js";
2
+ import { type ChannelBinding } from "../binding.js";
2
3
  import { type ReactionChoice } from "../reactions.js";
3
4
  import { type ObservedIngressRun, type PendingInterrupt } from "./ingress.js";
4
- import type { StartedIngressRun } from "../../ingress/runs.js";
5
+ import { type MultitaskStrategy, type StartedIngressRun } from "../../ingress/runs.js";
6
+ import { type NormalizedRunInput } from "../run-input.js";
7
+ import type { HttpChannelAdapter } from "../http/types.js";
5
8
  import { type TriggerClientLike } from "./client.js";
6
9
  import { type IdentityContextVerifyOptions } from "./identity-context.js";
7
- import { type TriggerChannelMessageEvent, type TriggerChannelResume } from "./types.js";
10
+ import { type TriggerChannelMessageEvent, type TriggerChannelUserPromptResponseEvent, type TriggerChannelResume, type TriggerChannelRuntimeStatus } from "./types.js";
11
+ import type { ChannelActor } from "../actor.js";
8
12
  export { TRIGGER_SERVICE_KEY_HEADER } from "./types.js";
9
13
  export declare const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
10
14
  type StartAgent = (input: {
@@ -16,6 +20,11 @@ type StartAgent = (input: {
16
20
  sourceProvider: string;
17
21
  sourceThreadKey: string;
18
22
  userId: string;
23
+ /** Other state keys to start with. */
24
+ state?: Record<string, unknown>;
25
+ metadata?: Record<string, unknown>;
26
+ webhook?: string;
27
+ multitaskStrategy?: MultitaskStrategy;
19
28
  }) => Promise<StartedIngressRun>;
20
29
  type ObserveAgent = (input: {
21
30
  threadId: string;
@@ -40,6 +49,53 @@ type ThreadInterrupts = (input: {
40
49
  sourceThreadKey: string;
41
50
  userId: string;
42
51
  }) => Promise<PendingInterrupt[]>;
52
+ type NewerRun = (input: {
53
+ threadId: string;
54
+ runId: string;
55
+ sourceProvider: string;
56
+ sourceThreadKey: string;
57
+ userId: string;
58
+ }) => Promise<boolean>;
59
+ type ThreadExists = (input: {
60
+ threadId: string;
61
+ sourceProvider: string;
62
+ sourceThreadKey: string;
63
+ userId: string;
64
+ }) => Promise<boolean>;
65
+ /** The thread a message event belongs to, before any run exists. */
66
+ export interface TriggerChannelThread {
67
+ id: string;
68
+ sourceThreadKey: string;
69
+ }
70
+ /**
71
+ * What a message event starts: the run input a provider's handler returned
72
+ * (`input`), no run (`skipped`), or nothing because the handler failed
73
+ * (`failed`).
74
+ */
75
+ export type TriggerMessageDecision = {
76
+ type: "input";
77
+ input: NormalizedRunInput;
78
+ } | {
79
+ type: "skipped";
80
+ } | {
81
+ type: "failed";
82
+ };
83
+ /**
84
+ * What a provider decides a message starts: at once, or `background` for a
85
+ * decision that may take longer than Trigger Server waits, such as an event
86
+ * endpoint's. Trigger Server then gets its answer first, and a failure is
87
+ * only logged.
88
+ */
89
+ export type TriggerMessageRoute = TriggerMessageDecision | {
90
+ type: "background";
91
+ decide: () => Promise<TriggerMessageDecision>;
92
+ };
93
+ type CancelThreadRuns = (input: {
94
+ threadId: string;
95
+ sourceProvider: string;
96
+ sourceThreadKey: string;
97
+ userId: string;
98
+ }) => Promise<number>;
43
99
  export interface TriggerChannelHttpOptions {
44
100
  sourceProvider: string;
45
101
  channelName: string;
@@ -49,15 +105,70 @@ export interface TriggerChannelHttpOptions {
49
105
  startAgent?: StartAgent;
50
106
  resumeAgent?: ResumeAgent;
51
107
  threadInterrupts?: ThreadInterrupts;
108
+ threadExists?: ThreadExists;
109
+ /** Whether a newer run replaced a run on its thread; for tests. */
110
+ newerRun?: NewerRun;
52
111
  observeAgent?: ObserveAgent;
112
+ cancelRuns?: CancelThreadRuns;
53
113
  triggerClient?: TriggerClientLike;
54
114
  /** How to react to the message that starts a run. Defaults to `eyes`. */
55
115
  reactions?: ReactionChoice;
116
+ /**
117
+ * The status a run's `run.started` shows in place of Trigger Server's
118
+ * working phrases, and how.
119
+ */
120
+ startedStatus?: TriggerChannelRuntimeStatus;
56
121
  /** Provider hook for a message event's run input; defaults to `input.messages`. */
57
122
  messageInput?: (event: TriggerChannelMessageEvent) => Record<string, unknown>[];
123
+ /**
124
+ * Decide what a message event starts, before its run; `undefined` starts
125
+ * it with `messageInput`'s messages. Interrupt resumes never ask.
126
+ */
127
+ decideMessage?: (event: TriggerChannelMessageEvent, thread: TriggerChannelThread,
128
+ /** Who sent it, when Trigger Server names them. */
129
+ actor?: ChannelActor) => Promise<TriggerMessageRoute | undefined>;
130
+ /**
131
+ * Decide what a prompt response that answers no interrupt starts, as
132
+ * `decideMessage` does a message; `undefined` starts a run with no new
133
+ * messages, which reads the response from `runtime.channel.event`.
134
+ */
135
+ decideInteraction?: (event: TriggerChannelUserPromptResponseEvent, thread: TriggerChannelThread,
136
+ /** Who responded, when Trigger Server names them. */
137
+ actor?: ChannelActor) => Promise<TriggerMessageRoute | undefined>;
138
+ /**
139
+ * Whether a message may only continue a thread the agent already ran on:
140
+ * then, on a thread no run ever started on, it starts nothing, and
141
+ * `decideMessage` isn't asked.
142
+ */
143
+ onlyContinuesThread?: (event: TriggerChannelMessageEvent) => Promise<boolean>;
144
+ /**
145
+ * What a run a message or prompt response starts does to a run already
146
+ * active on its thread; `enqueue` when unset.
147
+ */
148
+ multitaskStrategy?: MultitaskStrategy;
149
+ /**
150
+ * A message, or a prompt response that answers no interrupt, is done, as
151
+ * `channels.http`'s `onFinish` hears it: the run it started ended (`run`), it started none (`skipped`: `ignored` or
152
+ * `rejected`), its run couldn't start after Trigger Server had its answer
153
+ * (`failed: start`), or MDA lost track of the run (`failed: observe`). The
154
+ * delivery's `rawEvent` is the {@link TriggerFinishedEvent}. Called once,
155
+ * after the reply and lifecycle callbacks, in the background; failures are
156
+ * logged. A message whose run couldn't start before Trigger Server's answer
157
+ * gets an error instead, and Trigger Server may deliver it again.
158
+ */
159
+ onFinish?: HttpChannelAdapter["onFinish"];
58
160
  /** Override identity-context JWKS verify (unit tests). */
59
161
  identityContext?: IdentityContextVerifyOptions;
60
162
  }
61
163
  /** Validate one Trigger message, start its run, and enqueue observation. */
62
164
  export declare function handleTriggerChannelEventRequest(request: Request, options: TriggerChannelHttpOptions): Promise<Response>;
165
+ /**
166
+ * What a finished message's `rawEvent` holds: the Trigger delivery, without
167
+ * its identity token.
168
+ */
169
+ export type TriggerFinishedEvent = {
170
+ delivery: JsonValue;
171
+ /** Who sent it, as Trigger Server named them. */
172
+ actor?: ChannelActor;
173
+ };
63
174
  //# sourceMappingURL=http.d.ts.map