managed-deepagents 0.9.4-dev.9 → 0.10.0-dev.10

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 (157) hide show
  1. package/README.md +345 -19
  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/github/connections.d.ts +11 -0
  7. package/dist/channels/github/connections.d.ts.map +1 -0
  8. package/dist/channels/github/connections.js +14 -0
  9. package/dist/channels/github/connections.js.map +1 -0
  10. package/dist/channels/github/index.d.ts +8 -0
  11. package/dist/channels/github/index.d.ts.map +1 -0
  12. package/dist/channels/github/index.js +268 -0
  13. package/dist/channels/github/index.js.map +1 -0
  14. package/dist/channels/github/schema.d.ts +3894 -0
  15. package/dist/channels/github/schema.d.ts.map +1 -0
  16. package/dist/channels/github/schema.js +188 -0
  17. package/dist/channels/github/schema.js.map +1 -0
  18. package/dist/channels/github/types.d.ts +138 -0
  19. package/dist/channels/github/types.d.ts.map +1 -0
  20. package/dist/channels/github/types.js +2 -0
  21. package/dist/channels/github/types.js.map +1 -0
  22. package/dist/channels/http/endpoint.d.ts +41 -0
  23. package/dist/channels/http/endpoint.d.ts.map +1 -0
  24. package/dist/channels/http/endpoint.js +132 -0
  25. package/dist/channels/http/endpoint.js.map +1 -0
  26. package/dist/channels/http/http.d.ts.map +1 -1
  27. package/dist/channels/http/http.js +301 -49
  28. package/dist/channels/http/http.js.map +1 -1
  29. package/dist/channels/http/index.d.ts +2 -1
  30. package/dist/channels/http/index.d.ts.map +1 -1
  31. package/dist/channels/http/index.js +11 -1
  32. package/dist/channels/http/index.js.map +1 -1
  33. package/dist/channels/http/ingress.d.ts +61 -5
  34. package/dist/channels/http/ingress.d.ts.map +1 -1
  35. package/dist/channels/http/ingress.js +138 -29
  36. package/dist/channels/http/ingress.js.map +1 -1
  37. package/dist/channels/http/provider.d.ts +99 -0
  38. package/dist/channels/http/provider.d.ts.map +1 -0
  39. package/dist/channels/http/provider.js +188 -0
  40. package/dist/channels/http/provider.js.map +1 -0
  41. package/dist/channels/http/reply.d.ts +20 -0
  42. package/dist/channels/http/reply.d.ts.map +1 -0
  43. package/dist/channels/http/reply.js +116 -0
  44. package/dist/channels/http/reply.js.map +1 -0
  45. package/dist/channels/http/studio.d.ts +17 -0
  46. package/dist/channels/http/studio.d.ts.map +1 -0
  47. package/dist/channels/http/studio.js +82 -0
  48. package/dist/channels/http/studio.js.map +1 -0
  49. package/dist/channels/http/threads.d.ts +7 -0
  50. package/dist/channels/http/threads.d.ts.map +1 -0
  51. package/dist/channels/http/threads.js +10 -0
  52. package/dist/channels/http/threads.js.map +1 -0
  53. package/dist/channels/http/types.d.ts +113 -1
  54. package/dist/channels/http/types.d.ts.map +1 -1
  55. package/dist/channels/linear/connections.d.ts +11 -0
  56. package/dist/channels/linear/connections.d.ts.map +1 -0
  57. package/dist/channels/linear/connections.js +14 -0
  58. package/dist/channels/linear/connections.js.map +1 -0
  59. package/dist/channels/linear/graphql.d.ts +57 -0
  60. package/dist/channels/linear/graphql.d.ts.map +1 -0
  61. package/dist/channels/linear/graphql.js +167 -0
  62. package/dist/channels/linear/graphql.js.map +1 -0
  63. package/dist/channels/linear/index.d.ts +9 -0
  64. package/dist/channels/linear/index.d.ts.map +1 -0
  65. package/dist/channels/linear/index.js +477 -0
  66. package/dist/channels/linear/index.js.map +1 -0
  67. package/dist/channels/linear/schema.d.ts +1064 -0
  68. package/dist/channels/linear/schema.d.ts.map +1 -0
  69. package/dist/channels/linear/schema.js +249 -0
  70. package/dist/channels/linear/schema.js.map +1 -0
  71. package/dist/channels/linear/types.d.ts +150 -0
  72. package/dist/channels/linear/types.d.ts.map +1 -0
  73. package/dist/channels/linear/types.js +2 -0
  74. package/dist/channels/linear/types.js.map +1 -0
  75. package/dist/channels/message-schema.d.ts +2 -0
  76. package/dist/channels/message-schema.d.ts.map +1 -1
  77. package/dist/channels/message-schema.js +4 -0
  78. package/dist/channels/message-schema.js.map +1 -1
  79. package/dist/channels/reserved-connections.d.ts +12 -0
  80. package/dist/channels/reserved-connections.d.ts.map +1 -0
  81. package/dist/channels/reserved-connections.js +45 -0
  82. package/dist/channels/reserved-connections.js.map +1 -0
  83. package/dist/channels/run-input.d.ts +54 -0
  84. package/dist/channels/run-input.d.ts.map +1 -0
  85. package/dist/channels/run-input.js +129 -0
  86. package/dist/channels/run-input.js.map +1 -0
  87. package/dist/channels/source-providers.js +1 -1
  88. package/dist/channels/source-providers.js.map +1 -1
  89. package/dist/channels/trigger/client.js +2 -6
  90. package/dist/channels/trigger/client.js.map +1 -1
  91. package/dist/channels/trigger/http.js +1 -1
  92. package/dist/channels/trigger/http.js.map +1 -1
  93. package/dist/channels/trigger/identity-context.d.ts +1 -1
  94. package/dist/channels/trigger/identity-context.d.ts.map +1 -1
  95. package/dist/channels/trigger/identity-context.js +2 -3
  96. package/dist/channels/trigger/identity-context.js.map +1 -1
  97. package/dist/channels/trigger/ingress.d.ts.map +1 -1
  98. package/dist/channels/trigger/ingress.js +1 -19
  99. package/dist/channels/trigger/ingress.js.map +1 -1
  100. package/dist/connections.d.ts +31 -0
  101. package/dist/connections.d.ts.map +1 -1
  102. package/dist/connections.js +106 -9
  103. package/dist/connections.js.map +1 -1
  104. package/dist/credential-gate.d.ts +2 -0
  105. package/dist/credential-gate.d.ts.map +1 -1
  106. package/dist/credential-gate.js +37 -3
  107. package/dist/credential-gate.js.map +1 -1
  108. package/dist/identity/loopback.d.ts +1 -1
  109. package/dist/identity/loopback.d.ts.map +1 -1
  110. package/dist/identity/loopback.js +2 -3
  111. package/dist/identity/loopback.js.map +1 -1
  112. package/dist/index.d.ts +6 -1
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +1 -0
  115. package/dist/index.js.map +1 -1
  116. package/dist/ingress/runs.d.ts +50 -1
  117. package/dist/ingress/runs.d.ts.map +1 -1
  118. package/dist/ingress/runs.js +128 -2
  119. package/dist/ingress/runs.js.map +1 -1
  120. package/dist/memory/instructions-middleware.d.ts.map +1 -1
  121. package/dist/memory/instructions-middleware.js +5 -6
  122. package/dist/memory/instructions-middleware.js.map +1 -1
  123. package/dist/namespaces.d.ts +21 -0
  124. package/dist/namespaces.d.ts.map +1 -1
  125. package/dist/namespaces.js +4 -0
  126. package/dist/namespaces.js.map +1 -1
  127. package/dist/runtime/auth.d.ts +2 -1
  128. package/dist/runtime/auth.d.ts.map +1 -1
  129. package/dist/runtime/auth.js +115 -14
  130. package/dist/runtime/auth.js.map +1 -1
  131. package/dist/runtime/channel-icon.d.ts +22 -0
  132. package/dist/runtime/channel-icon.d.ts.map +1 -0
  133. package/dist/runtime/channel-icon.js +70 -0
  134. package/dist/runtime/channel-icon.js.map +1 -0
  135. package/dist/runtime/channel.d.ts +6 -0
  136. package/dist/runtime/channel.d.ts.map +1 -1
  137. package/dist/runtime/channel.js.map +1 -1
  138. package/dist/runtime/identity-http.d.ts +2 -0
  139. package/dist/runtime/identity-http.d.ts.map +1 -1
  140. package/dist/runtime/identity-http.js +36 -11
  141. package/dist/runtime/identity-http.js.map +1 -1
  142. package/dist/runtime/identity-runtime.d.ts +15 -0
  143. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  144. package/dist/runtime/identity-runtime.js +35 -0
  145. package/dist/runtime/identity-runtime.js.map +1 -1
  146. package/dist/runtime/index.d.ts.map +1 -1
  147. package/dist/runtime/index.js +2 -0
  148. package/dist/runtime/index.js.map +1 -1
  149. package/dist/runtime/memory/mounts.d.ts +0 -42
  150. package/dist/runtime/memory/mounts.d.ts.map +1 -1
  151. package/dist/runtime/memory/mounts.js +7 -63
  152. package/dist/runtime/memory/mounts.js.map +1 -1
  153. package/dist/runtime/sandbox-manager.d.ts +1 -1
  154. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  155. package/dist/runtime/sandbox-manager.js +3 -3
  156. package/dist/runtime/sandbox-manager.js.map +1 -1
  157. package/package.json +8 -8
@@ -1,10 +1,42 @@
1
1
  import { channelContextSchema } from "../../run-context.js";
2
2
  import { immutableCopy, validateMessage } from "../runtime.js";
3
3
  import { isJsonValue } from "../message-schema.js";
4
- import { startHttpIngressAgent, observeHttpIngressAgent } from "./ingress.js";
4
+ import { normalizeRunInput } from "../run-input.js";
5
+ import { cancelHttpIngressRuns, startHttpIngressAgent, observeHttpIngressAgent, waitForHttpIngressThread, } from "./ingress.js";
6
+ import { ChannelError } from "../errors.js";
5
7
  import { scheduleIngressWork } from "../../ingress/index.js";
6
8
  import { logger } from "../../runtime/log.js";
7
9
  const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
10
+ /**
11
+ * Messages in this process that may still wait for their thread, by thread.
12
+ * A message waiting for its busy thread (the default `enqueue` strategy) is
13
+ * no server-side run yet, so the server's cancel can't reach it: a cancel
14
+ * marks the thread's waiters, and they drop themselves. A message joins
15
+ * before its first start and leaves once its fate is settled, so only
16
+ * threads with messages in flight are kept. Messages waiting in another
17
+ * replica aren't reached.
18
+ *
19
+ * This is not durable: a waiting message lives only in this process, so a
20
+ * restart loses it after the provider was already told it arrived. It waits
21
+ * here rather than queueing on the server because a queued run starts as soon
22
+ * as the run before it stops on `interrupt()`, and its new input discards the
23
+ * decision the thread waits on. A server-side queue that holds messages while
24
+ * a thread waits on an interrupt would replace this; see
25
+ * https://github.com/langchain-ai/langgraph/issues/8838.
26
+ */
27
+ const threadWaiters = new Map();
28
+ function joinThreadWaiters(threadId) {
29
+ const waiter = { cancelled: false };
30
+ const waiters = threadWaiters.get(threadId) ?? new Set();
31
+ threadWaiters.set(threadId, waiters.add(waiter));
32
+ return waiter;
33
+ }
34
+ function leaveThreadWaiters(threadId, waiter) {
35
+ const waiters = threadWaiters.get(threadId);
36
+ waiters?.delete(waiter);
37
+ if (waiters?.size === 0)
38
+ threadWaiters.delete(threadId);
39
+ }
8
40
  export async function handleHttpRequest(ctx, adapter) {
9
41
  const rawBody = requestBytes(ctx);
10
42
  function adapterRequest() {
@@ -38,18 +70,43 @@ export async function handleHttpRequest(ctx, adapter) {
38
70
  if (result.type === "ignore") {
39
71
  return (result.response ?? Response.json({ status: "ignored" }, { status: 202 }));
40
72
  }
73
+ const assistantId = process.env[ASSISTANT_ID_ENV]?.trim();
74
+ if (!assistantId) {
75
+ return jsonError(500, "channel runtime is not configured");
76
+ }
77
+ if (result.type === "cancel") {
78
+ let stop;
79
+ try {
80
+ validateCancelMessage(result.message);
81
+ stop = immutableCopy(result.message);
82
+ }
83
+ catch {
84
+ return jsonError(400, "invalid channel message");
85
+ }
86
+ const threadId = stop.threadId.toLowerCase();
87
+ return cancelThreadRuns(ctx, adapter, {
88
+ userId: stop.userId,
89
+ sourceThreadKey: `http:v1:${JSON.stringify([ctx.name, threadId])}`,
90
+ threadId,
91
+ target: stop.target,
92
+ delivery: {
93
+ threadId,
94
+ assistantId,
95
+ ...(result.rawEvent !== undefined && {
96
+ rawEvent: structuredClone(result.rawEvent),
97
+ }),
98
+ },
99
+ ...(result.response !== undefined && { response: result.response }),
100
+ });
101
+ }
41
102
  let message = result.message;
42
103
  try {
43
- validateInboundMessage(message);
104
+ validateInboundMessage(message, adapter.input !== undefined);
44
105
  message = immutableCopy(message);
45
106
  }
46
107
  catch {
47
108
  return jsonError(400, "invalid channel message");
48
109
  }
49
- const assistantId = process.env[ASSISTANT_ID_ENV]?.trim();
50
- if (!assistantId) {
51
- return jsonError(500, "channel runtime is not configured");
52
- }
53
110
  const deliveryId = crypto.randomUUID();
54
111
  const threadId = message.threadId.toLowerCase();
55
112
  const sourceThreadKey = `http:v1:${JSON.stringify([ctx.name, threadId])}`;
@@ -59,12 +116,14 @@ export async function handleHttpRequest(ctx, adapter) {
59
116
  sourceThreadKey,
60
117
  event: {
61
118
  type: "message",
62
- messages: [
63
- {
64
- role: "human",
65
- content: message.content,
66
- },
67
- ],
119
+ messages: message.content === undefined
120
+ ? []
121
+ : [
122
+ {
123
+ role: "human",
124
+ content: message.content,
125
+ },
126
+ ],
68
127
  },
69
128
  ...(result.rawEvent === undefined ? {} : { rawEvent: result.rawEvent }),
70
129
  target: message.target,
@@ -77,57 +136,189 @@ export async function handleHttpRequest(ctx, adapter) {
77
136
  sourceThreadKey,
78
137
  sourceProvider: ctx.channel.kind,
79
138
  binding,
80
- input: message.content,
81
139
  assistantId,
82
140
  };
83
- let started;
141
+ const rawEvent = result.rawEvent;
142
+ const delivery = (assistantId) => ({
143
+ threadId,
144
+ ...(assistantId !== undefined && { assistantId }),
145
+ ...(result.rawEvent !== undefined && {
146
+ rawEvent: structuredClone(result.rawEvent),
147
+ }),
148
+ });
149
+ const inputHook = adapter.input?.bind(adapter);
150
+ async function prepare() {
151
+ try {
152
+ return normalizeRunInput(await inputHook?.(immutableCopy(message), rawEvent === undefined ? undefined : structuredClone(rawEvent)));
153
+ }
154
+ catch (error) {
155
+ logger.error(`channel input failed (${logger.safeErrorLabel(error)})`);
156
+ return undefined;
157
+ }
158
+ }
159
+ const startInput = {
160
+ ...input,
161
+ ...(message.deliveryKey !== undefined && {
162
+ deliveryKey: message.deliveryKey,
163
+ }),
164
+ ...(message.content !== undefined
165
+ ? { input: message.content }
166
+ : { prepare }),
167
+ ...(adapter.multitaskStrategy && {
168
+ multitaskStrategy: adapter.multitaskStrategy,
169
+ }),
170
+ };
171
+ // Every message gets one `onReceived` and, after it, one `onSettled`.
172
+ const onReceived = adapter.onReceived?.bind(adapter);
173
+ const received = new Promise((resolve) => {
174
+ if (!onReceived)
175
+ return resolve();
176
+ scheduleIngressWork(async () => {
177
+ try {
178
+ await onReceived(immutableCopy(message.target), delivery(assistantId));
179
+ }
180
+ catch (error) {
181
+ logger.error(`channel received notice failed (${logger.safeErrorLabel(error)})`);
182
+ }
183
+ finally {
184
+ resolve();
185
+ }
186
+ }, { label: `channel "${ctx.name}" received notice` });
187
+ });
188
+ const onSettled = adapter.onSettled?.bind(adapter);
189
+ async function settle(outcome,
190
+ // The thread's assistant lets a notice link to it in Studio.
191
+ threadAssistantId) {
192
+ if (!onSettled)
193
+ return;
194
+ await received;
195
+ try {
196
+ await onSettled(immutableCopy(message.target), {
197
+ ...delivery(threadAssistantId ?? assistantId),
198
+ outcome,
199
+ });
200
+ }
201
+ catch (error) {
202
+ logger.error(`channel settled notice failed (${logger.safeErrorLabel(error)})`);
203
+ }
204
+ }
205
+ const label = `channel "${ctx.name}" delivery`;
206
+ // Joined before the first start, so a cancel during it reaches the message.
207
+ const waiter = joinThreadWaiters(threadId);
208
+ let outcome;
84
209
  try {
85
- started = await startHttpIngressAgent(input);
210
+ outcome = await startHttpIngressAgent(startInput);
86
211
  }
87
212
  catch (error) {
213
+ leaveThreadWaiters(threadId, waiter);
88
214
  logger.error(`channel run could not be started (${logger.safeErrorLabel(error)})`);
215
+ // The provider may redeliver; this delivery ends here.
216
+ if (onSettled)
217
+ scheduleIngressWork(() => settle({ type: "failed" }), { label });
89
218
  return jsonError(500, "channel run could not be started");
90
219
  }
220
+ // Only a message that waits for its busy thread stays.
221
+ if (!("skipped" in outcome && outcome.skipped === "busy"))
222
+ leaveThreadWaiters(threadId, waiter);
91
223
  const post = adapter.post?.bind(adapter);
92
224
  const onError = adapter.onError?.bind(adapter);
93
- scheduleIngressWork(async () => {
94
- let replyAttempted = false;
225
+ async function notifyFailed(error) {
95
226
  try {
96
- const invocation = await observeHttpIngressAgent({
97
- ...input,
98
- ...started,
99
- });
100
- if (!post || invocation.replyContent === null) {
101
- return;
227
+ if (onError) {
228
+ await onError(error, immutableCopy(message.target));
102
229
  }
103
- const reply = {
104
- type: "content",
105
- content: invocation.replyContent,
106
- };
107
- validateMessage(reply);
108
- replyAttempted = true;
109
- await post(immutableCopy({ ...reply, target: message.target }));
230
+ else if (post) {
231
+ await post(immutableCopy({
232
+ type: "content",
233
+ content: "Something went wrong while processing your request.",
234
+ target: message.target,
235
+ }));
236
+ }
237
+ }
238
+ catch (replyError) {
239
+ const action = onError ? "callback" : "reply";
240
+ logger.error(`channel error ${action} failed (${logger.safeErrorLabel(replyError)})`);
241
+ }
242
+ }
243
+ // The run posts its own answer (see `./reply.ts`): this reports how it
244
+ // ended, which the run can't say itself.
245
+ async function deliver(started) {
246
+ const { runId } = started;
247
+ logger.info(`channel run started ${JSON.stringify({ threadId, runId: logger.logIdentifier(runId) })}`);
248
+ let outcome;
249
+ try {
250
+ outcome = await observeHttpIngressAgent({ ...input, ...started });
110
251
  }
111
252
  catch (error) {
112
- logger.error(`channel delivery failed (${logger.safeErrorLabel(error)})`);
113
- try {
114
- if (onError) {
115
- await onError(error, immutableCopy(message.target));
116
- }
117
- else if (post && !replyAttempted) {
118
- await post(immutableCopy({
119
- type: "content",
120
- content: "Something went wrong while processing your request.",
121
- target: message.target,
122
- }));
253
+ // The run may have answered already; only its own failure is reported.
254
+ logger.error(`channel run could not be observed (${logger.safeErrorLabel(error)})`);
255
+ return settle({ type: "unknown", runId });
256
+ }
257
+ switch (outcome.type) {
258
+ case "answered":
259
+ return settle({ type: "completed", runId });
260
+ case "paused":
261
+ return settle({ type: "interrupted", runId }, outcome.assistantId);
262
+ case "failed":
263
+ logger.error(`channel run failed ${JSON.stringify({ threadId })}`);
264
+ await notifyFailed(new ChannelError("channel_run_failed", "channel run failed"));
265
+ return settle({ type: "failed", runId });
266
+ default:
267
+ return settle({ type: outcome.type, runId });
268
+ }
269
+ }
270
+ // The thread's current run may still stop for a decision, so the message
271
+ // waits for that run instead of queueing behind it, then checks again.
272
+ // A cancel while the message waits drops it.
273
+ async function startWhenIdle() {
274
+ let next = { skipped: "busy" };
275
+ try {
276
+ while ("skipped" in next && next.skipped === "busy") {
277
+ await waitForHttpIngressThread(input);
278
+ if (waiter.cancelled) {
279
+ logger.info(`channel run dropped: its thread was cancelled while it waited ${JSON.stringify({ threadId })}`);
280
+ return await settle({ type: "dropped" });
123
281
  }
282
+ next = await startHttpIngressAgent(startInput);
124
283
  }
125
- catch (replyError) {
126
- const action = onError ? "callback" : "reply";
127
- logger.error(`channel error ${action} failed (${logger.safeErrorLabel(replyError)})`);
128
- }
129
284
  }
130
- }, { label: `channel "${ctx.name}" delivery` });
285
+ catch (error) {
286
+ logger.error(`channel run could not be started (${logger.safeErrorLabel(error)})`);
287
+ return await settle({ type: "failed" });
288
+ }
289
+ finally {
290
+ leaveThreadWaiters(threadId, waiter);
291
+ }
292
+ if (!("skipped" in next))
293
+ return deliver(next);
294
+ logger.info(`channel run skipped ${JSON.stringify({ threadId, reason: next.skipped })}`);
295
+ await settleSkipped(next);
296
+ }
297
+ /** How a message the thread took no run for ended. */
298
+ function settleSkipped(skipped) {
299
+ switch (skipped.skipped) {
300
+ case "paused":
301
+ return settle({ type: "waiting" }, skipped.assistantId);
302
+ case "ignored":
303
+ return settle({ type: "declined" });
304
+ case "busy":
305
+ throw new Error("a busy thread's message is still waiting");
306
+ default:
307
+ return settle({ type: skipped.skipped });
308
+ }
309
+ }
310
+ if ("skipped" in outcome) {
311
+ logger.info(`channel run skipped ${JSON.stringify({ threadId, reason: outcome.skipped })}`);
312
+ const skipped = outcome;
313
+ if (skipped.skipped === "busy")
314
+ scheduleIngressWork(startWhenIdle, { label });
315
+ else if (onSettled)
316
+ scheduleIngressWork(() => settleSkipped(skipped), { label });
317
+ return (result.response ??
318
+ Response.json({ status: skipped.skipped }, { status: 202 }));
319
+ }
320
+ const started = outcome;
321
+ scheduleIngressWork(() => deliver(started), { label });
131
322
  return (result.response ??
132
323
  Response.json({ status: "accepted", deliveryId }, { status: 202 }));
133
324
  }
@@ -150,9 +341,71 @@ function validParseResult(value) {
150
341
  if (result.rawEvent !== undefined && !isJsonValue(result.rawEvent)) {
151
342
  return false;
152
343
  }
153
- return result.type === "ignore" || result.type === "message";
344
+ return (result.type === "ignore" ||
345
+ result.type === "message" ||
346
+ result.type === "cancel");
347
+ }
348
+ /**
349
+ * Cancel the thread's runs for a `cancel` result, then settle it in the
350
+ * background. Messages waiting here for the thread are dropped too.
351
+ */
352
+ async function cancelThreadRuns(ctx, adapter, input) {
353
+ // Before the server's cancel, so waiters it wakes see it.
354
+ for (const waiter of threadWaiters.get(input.threadId) ?? [])
355
+ waiter.cancelled = true;
356
+ let cancelled;
357
+ try {
358
+ cancelled = (await cancelHttpIngressRuns({
359
+ userId: input.userId,
360
+ sourceThreadKey: input.sourceThreadKey,
361
+ sourceProvider: ctx.channel.kind,
362
+ threadId: input.threadId,
363
+ })).length;
364
+ }
365
+ catch (error) {
366
+ logger.error(`channel run could not be cancelled (${logger.safeErrorLabel(error)})`);
367
+ return jsonError(500, "channel run could not be cancelled");
368
+ }
369
+ logger.info(`channel runs cancelled ${JSON.stringify({ threadId: input.threadId, cancelled })}`);
370
+ const onSettled = adapter.onSettled?.bind(adapter);
371
+ if (onSettled)
372
+ scheduleIngressWork(async () => {
373
+ try {
374
+ await onSettled(immutableCopy(input.target), {
375
+ ...input.delivery,
376
+ outcome: { type: "stopped", cancelled },
377
+ });
378
+ }
379
+ catch (error) {
380
+ logger.error(`channel settled notice failed (${logger.safeErrorLabel(error)})`);
381
+ }
382
+ }, { label: `channel "${ctx.name}" settled notice` });
383
+ return (input.response ??
384
+ Response.json({ status: "cancelled", cancelled }, { status: 202 }));
385
+ }
386
+ const CANCEL_MESSAGE_KEYS = new Set([
387
+ "userId",
388
+ "threadId",
389
+ "target",
390
+ ]);
391
+ /** A cancel names a thread and who to tell; it starts nothing. */
392
+ function validateCancelMessage(message) {
393
+ if (!message || typeof message !== "object")
394
+ throw new Error("channel cancel must be an object");
395
+ for (const key of Object.keys(message))
396
+ if (!CANCEL_MESSAGE_KEYS.has(key))
397
+ throw new Error("channel cancel takes only userId, threadId and target");
398
+ validateAddress(message);
399
+ }
400
+ function validateInboundMessage(message, adapterInput) {
401
+ if (message.deliveryKey !== undefined)
402
+ nonblank(message.deliveryKey, "channel deliveryKey");
403
+ validateAddress(message);
404
+ // The adapter's `input` supplies what a message without content starts.
405
+ if (message.content !== undefined || !adapterInput)
406
+ validateMessageContent(message.content);
154
407
  }
155
- function validateInboundMessage(message) {
408
+ function validateAddress(message) {
156
409
  nonblank(message.userId, "channel userId");
157
410
  if (typeof message.threadId !== "string" ||
158
411
  !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(message.threadId)) {
@@ -160,7 +413,6 @@ function validateInboundMessage(message) {
160
413
  }
161
414
  if (!isJsonValue(message.target))
162
415
  throw new Error("channel target must be JSON");
163
- validateMessageContent(message.content);
164
416
  }
165
417
  function validateMessageContent(content) {
166
418
  validateMessage({ type: "content", content });
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/channels/http/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/channels/http/http.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { HttpChannelAdapter } from "./types.js";
2
2
  import { type Channel } from "../../runtime/channel.js";
3
- export type { HttpChannelAdapter, HttpChannelInboundMessage, HttpChannelParseResult, HttpChannelRequest, HttpChannelPostInput, HttpPostedMessage, } from "./types.js";
3
+ export type { HttpChannelAdapter, HttpChannelCancelMessage, HttpChannelInboundMessage, HttpChannelParseResult, HttpChannelRequest, HttpChannelPostInput, HttpDelivery, HttpDeliveryOutcome, HttpPostedMessage, HttpSettledDelivery, } from "./types.js";
4
+ export { channelThreadId } from "./threads.js";
4
5
  export type HttpChannel = Channel & {
5
6
  readonly kind: string;
6
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA+BpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAS9D,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAsCpE"}
@@ -1,8 +1,18 @@
1
1
  import { immutableCopy } from "../runtime.js";
2
2
  import { handleHttpRequest } from "./http.js";
3
3
  import { CHANNEL_BRAND, } from "../../runtime/channel.js";
4
+ export { channelThreadId } from "./threads.js";
5
+ const MULTITASK_STRATEGIES = new Set([
6
+ "enqueue",
7
+ "interrupt",
8
+ "rollback",
9
+ "reject",
10
+ ]);
4
11
  export function httpChannel(adapter) {
5
12
  const provider = nonblank(adapter.provider, "channels.http provider");
13
+ if (adapter.multitaskStrategy !== undefined &&
14
+ !MULTITASK_STRATEGIES.has(adapter.multitaskStrategy))
15
+ throw new TypeError("channel multitaskStrategy must be enqueue, interrupt, rollback or reject");
6
16
  const channel = { kind: provider };
7
17
  hide(channel, CHANNEL_BRAND, true);
8
18
  hide(channel, "events", (ctx) => handleHttpRequest(ctx, adapter));
@@ -23,7 +33,7 @@ export function httpChannel(adapter) {
23
33
  autoReply: post !== undefined,
24
34
  requiredPermissions: [],
25
35
  requiredEnv: [],
26
- providerConfig: {},
36
+ providerConfig: immutableCopy(adapter.providerConfig ?? {}),
27
37
  }));
28
38
  return channel;
29
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EACL,aAAa,GAGd,MAAM,0BAA0B,CAAC;AAalC,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAiB,CAAC;IAElD,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAyB,EAAE,EAAE,CACpD,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAChC,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,GAA4B,EAAE,CAAC,CAAC;YACzD,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CACvC,IAAI,CACF,aAAa,CAAC;gBACZ,GAAG,OAAO;gBACV,MAAM;gBACN,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;aAClD,CAAC,CACH;SACJ,CAAC,CAAC,CAAC;IACN,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,IAAY,EAAmB,EAAE,CAAC,CAAC;QAChE,IAAI;QACJ,QAAQ;QACR,UAAU,EAAE,aAAa,IAAI,SAAS;QACtC,SAAS,EAAE,IAAI,KAAK,SAAS;QAC7B,mBAAmB,EAAE,EAAE;QACvB,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,EAAE;KACnB,CAAC,CAAC,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAa;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,IAAI,CAAC,MAAc,EAAE,GAAoB,EAAE,KAAc;IAChE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EACL,aAAa,GAGd,MAAM,0BAA0B,CAAC;AAelC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI/C,MAAM,oBAAoB,GAAyB,IAAI,GAAG,CAAC;IACzD,SAAS;IACT,WAAW;IACX,UAAU;IACV,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IACtE,IACE,OAAO,CAAC,iBAAiB,KAAK,SAAS;QACvC,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAEpD,MAAM,IAAI,SAAS,CACjB,0EAA0E,CAC3E,CAAC;IACJ,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAiB,CAAC;IAElD,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAyB,EAAE,EAAE,CACpD,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAChC,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,GAA4B,EAAE,CAAC,CAAC;YACzD,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CACvC,IAAI,CACF,aAAa,CAAC;gBACZ,GAAG,OAAO;gBACV,MAAM;gBACN,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;aAClD,CAAC,CACH;SACJ,CAAC,CAAC,CAAC;IACN,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,IAAY,EAAmB,EAAE,CAAC,CAAC;QAChE,IAAI;QACJ,QAAQ;QACR,UAAU,EAAE,aAAa,IAAI,SAAS;QACtC,SAAS,EAAE,IAAI,KAAK,SAAS;QAC7B,mBAAmB,EAAE,EAAE;QACvB,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;KAC5D,CAAC,CAAC,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAa;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,IAAI,CAAC,MAAc,EAAE,GAAoB,EAAE,KAAc;IAChE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC"}
@@ -1,6 +1,8 @@
1
+ import type { MultitaskStrategy } from "../../ingress/runs.js";
1
2
  import { type MessageContent } from "@langchain/core/messages";
2
3
  import type { ChannelBinding } from "../binding.js";
3
4
  import { type StartedIngressRun } from "../../ingress/runs.js";
5
+ import type { NormalizedRunInput } from "../run-input.js";
4
6
  interface HttpIngressSource {
5
7
  userId: string;
6
8
  sourceThreadKey: string;
@@ -10,12 +12,66 @@ interface HttpIngressSource {
10
12
  interface StartHttpIngressInput extends HttpIngressSource {
11
13
  threadId: string;
12
14
  assistantId: string;
13
- input: MessageContent;
15
+ /** What a new run starts with. */
16
+ input?: MessageContent;
17
+ /** What a new run starts with when there is no `input`, asked only then. */
18
+ prepare?: () => Promise<NormalizedRunInput | undefined>;
14
19
  context?: Record<string, unknown>;
20
+ /** The provider's delivery ID; a thread runs each delivery once. */
21
+ deliveryKey?: string;
22
+ /**
23
+ * What a new turn does while the thread runs: wait for the run
24
+ * (`enqueue`, the default), cancel it (`interrupt` keeps its progress,
25
+ * `rollback` discards it), or start nothing (`reject`).
26
+ */
27
+ multitaskStrategy?: MultitaskStrategy;
15
28
  }
16
- export declare function startHttpIngressAgent(input: StartHttpIngressInput): Promise<StartedIngressRun>;
17
- export declare function observeHttpIngressAgent(input: HttpIngressSource & StartedIngressRun): Promise<StartedIngressRun & {
18
- replyContent: MessageContent | null;
19
- }>;
29
+ /** A started run, or why the thread took none: `ignored` when there is nothing to start. */
30
+ export type HttpIngressStart = StartedIngressRun | {
31
+ skipped: "paused";
32
+ /** The paused thread's assistant, for links into LangSmith Studio. */
33
+ assistantId?: string;
34
+ } | {
35
+ skipped: "duplicate" | "busy" | "rejected" | "ignored";
36
+ };
37
+ /** Wait until the thread's queued and running runs have finished. */
38
+ export declare function waitForHttpIngressThread(input: HttpIngressSource & {
39
+ threadId: string;
40
+ }): Promise<void>;
41
+ /**
42
+ * Cancel the thread's queued and running runs, keeping their progress.
43
+ * Returns the IDs of the runs it cancelled.
44
+ */
45
+ export declare function cancelHttpIngressRuns(input: {
46
+ userId: string;
47
+ sourceThreadKey: string;
48
+ sourceProvider: string;
49
+ threadId: string;
50
+ }): Promise<string[]>;
51
+ export declare function startHttpIngressAgent(input: StartHttpIngressInput): Promise<HttpIngressStart>;
52
+ /** How a channel run ended; the run posts its own answer. */
53
+ export type HttpIngressOutcome =
54
+ /** It finished. */
55
+ {
56
+ type: "answered";
57
+ }
58
+ /** It stopped on interrupts, so the thread waits on a decision. */
59
+ | {
60
+ type: "paused";
61
+ assistantId?: string;
62
+ }
63
+ /** It was cancelled, with nothing left to answer. */
64
+ | {
65
+ type: "cancelled";
66
+ }
67
+ /** A newer message's `rollback` deleted it. */
68
+ | {
69
+ type: "replaced";
70
+ }
71
+ /** It failed. */
72
+ | {
73
+ type: "failed";
74
+ };
75
+ export declare function observeHttpIngressAgent(input: HttpIngressSource & StartedIngressRun): Promise<HttpIngressOutcome>;
20
76
  export {};
21
77
  //# sourceMappingURL=ingress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ingress.d.ts","sourceRoot":"","sources":["../../../src/channels/http/ingress.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;CAC7C;AAED,UAAU,qBAAsB,SAAQ,iBAAiB;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAiC5B;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,GAC3C,OAAO,CAAC,iBAAiB,GAAG;IAAE,YAAY,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE,CAAC,CAmCtE"}
1
+ {"version":3,"file":"ingress.d.ts","sourceRoot":"","sources":["../../../src/channels/http/ingress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,OAAO,EASL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAS1D,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;CAC7C;AAED,UAAU,qBAAsB,SAAQ,iBAAiB;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB;IACE,OAAO,EAAE,QAAQ,CAAC;IAClB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IAAE,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D,qEAAqE;AACrE,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,iBAAiB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASpB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CA2E3B;AA8CD,6DAA6D;AAC7D,MAAM,MAAM,kBAAkB;AAC5B,mBAAmB;AACjB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE;AACtB,mEAAmE;GACjE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AAC1C,qDAAqD;GACnD;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE;AACvB,+CAA+C;GAC7C;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE;AACtB,iBAAiB;GACf;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvB,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,GAC3C,OAAO,CAAC,kBAAkB,CAAC,CA6C7B"}