managed-deepagents 0.10.0-dev.16 → 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 (236) hide show
  1. package/README.md +809 -71
  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/connections.d.ts.map +1 -1
  19. package/dist/channels/github/connections.js +2 -2
  20. package/dist/channels/github/connections.js.map +1 -1
  21. package/dist/channels/github/index.d.ts +1 -8
  22. package/dist/channels/github/index.d.ts.map +1 -1
  23. package/dist/channels/github/index.js +46 -139
  24. package/dist/channels/github/index.js.map +1 -1
  25. package/dist/channels/github/mentions.d.ts +12 -0
  26. package/dist/channels/github/mentions.d.ts.map +1 -0
  27. package/dist/channels/github/mentions.js +185 -0
  28. package/dist/channels/github/mentions.js.map +1 -0
  29. package/dist/channels/github/schema.d.ts +271 -0
  30. package/dist/channels/github/schema.d.ts.map +1 -1
  31. package/dist/channels/github/schema.js +34 -3
  32. package/dist/channels/github/schema.js.map +1 -1
  33. package/dist/channels/github/types.d.ts +57 -4
  34. package/dist/channels/github/types.d.ts.map +1 -1
  35. package/dist/channels/http/endpoint.d.ts +95 -0
  36. package/dist/channels/http/endpoint.d.ts.map +1 -0
  37. package/dist/channels/http/endpoint.js +276 -0
  38. package/dist/channels/http/endpoint.js.map +1 -0
  39. package/dist/channels/http/http.d.ts.map +1 -1
  40. package/dist/channels/http/http.js +322 -86
  41. package/dist/channels/http/http.js.map +1 -1
  42. package/dist/channels/http/index.d.ts +1 -1
  43. package/dist/channels/http/index.d.ts.map +1 -1
  44. package/dist/channels/http/index.js +10 -16
  45. package/dist/channels/http/index.js.map +1 -1
  46. package/dist/channels/http/ingress.d.ts +40 -5
  47. package/dist/channels/http/ingress.d.ts.map +1 -1
  48. package/dist/channels/http/ingress.js +63 -40
  49. package/dist/channels/http/ingress.js.map +1 -1
  50. package/dist/channels/http/provider.d.ts +119 -0
  51. package/dist/channels/http/provider.d.ts.map +1 -0
  52. package/dist/channels/http/provider.js +227 -0
  53. package/dist/channels/http/provider.js.map +1 -0
  54. package/dist/channels/http/studio.d.ts +24 -0
  55. package/dist/channels/http/studio.d.ts.map +1 -0
  56. package/dist/channels/http/studio.js +95 -0
  57. package/dist/channels/http/studio.js.map +1 -0
  58. package/dist/channels/http/types.d.ts +107 -7
  59. package/dist/channels/http/types.d.ts.map +1 -1
  60. package/dist/channels/linear/connections.d.ts +11 -0
  61. package/dist/channels/linear/connections.d.ts.map +1 -0
  62. package/dist/channels/linear/connections.js +14 -0
  63. package/dist/channels/linear/connections.js.map +1 -0
  64. package/dist/channels/linear/graphql.d.ts +57 -0
  65. package/dist/channels/linear/graphql.d.ts.map +1 -0
  66. package/dist/channels/linear/graphql.js +167 -0
  67. package/dist/channels/linear/graphql.js.map +1 -0
  68. package/dist/channels/linear/index.d.ts +9 -0
  69. package/dist/channels/linear/index.d.ts.map +1 -0
  70. package/dist/channels/linear/index.js +489 -0
  71. package/dist/channels/linear/index.js.map +1 -0
  72. package/dist/channels/linear/schema.d.ts +1050 -0
  73. package/dist/channels/linear/schema.d.ts.map +1 -0
  74. package/dist/channels/linear/schema.js +255 -0
  75. package/dist/channels/linear/schema.js.map +1 -0
  76. package/dist/channels/linear/types.d.ts +162 -0
  77. package/dist/channels/linear/types.d.ts.map +1 -0
  78. package/dist/channels/linear/types.js +2 -0
  79. package/dist/channels/linear/types.js.map +1 -0
  80. package/dist/channels/message-schema.d.ts +2 -0
  81. package/dist/channels/message-schema.d.ts.map +1 -1
  82. package/dist/channels/message-schema.js +4 -0
  83. package/dist/channels/message-schema.js.map +1 -1
  84. package/dist/channels/messaging-registry.d.ts +16 -0
  85. package/dist/channels/messaging-registry.d.ts.map +1 -1
  86. package/dist/channels/messaging-registry.js +29 -0
  87. package/dist/channels/messaging-registry.js.map +1 -1
  88. package/dist/channels/reserved-connections.d.ts +2 -2
  89. package/dist/channels/reserved-connections.d.ts.map +1 -1
  90. package/dist/channels/reserved-connections.js +36 -9
  91. package/dist/channels/reserved-connections.js.map +1 -1
  92. package/dist/channels/run-input.d.ts +35 -2
  93. package/dist/channels/run-input.d.ts.map +1 -1
  94. package/dist/channels/run-input.js +74 -14
  95. package/dist/channels/run-input.js.map +1 -1
  96. package/dist/channels/runtime.d.ts +1 -1
  97. package/dist/channels/runtime.d.ts.map +1 -1
  98. package/dist/channels/runtime.js +1 -1
  99. package/dist/channels/runtime.js.map +1 -1
  100. package/dist/channels/schedule-delivery.d.ts +1 -1
  101. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  102. package/dist/channels/schedule-delivery.js +9 -20
  103. package/dist/channels/schedule-delivery.js.map +1 -1
  104. package/dist/channels/slack/api.d.ts +2 -0
  105. package/dist/channels/slack/api.d.ts.map +1 -1
  106. package/dist/channels/slack/api.js +6 -0
  107. package/dist/channels/slack/api.js.map +1 -1
  108. package/dist/channels/slack/connections.d.ts +6 -0
  109. package/dist/channels/slack/connections.d.ts.map +1 -0
  110. package/dist/channels/slack/connections.js +6 -0
  111. package/dist/channels/slack/connections.js.map +1 -0
  112. package/dist/channels/slack/events.d.ts +272 -0
  113. package/dist/channels/slack/events.d.ts.map +1 -0
  114. package/dist/channels/slack/events.js +235 -0
  115. package/dist/channels/slack/events.js.map +1 -0
  116. package/dist/channels/slack/files.d.ts.map +1 -1
  117. package/dist/channels/slack/files.js +2 -3
  118. package/dist/channels/slack/files.js.map +1 -1
  119. package/dist/channels/slack/index.d.ts +76 -2
  120. package/dist/channels/slack/index.d.ts.map +1 -1
  121. package/dist/channels/slack/index.js +177 -6
  122. package/dist/channels/slack/index.js.map +1 -1
  123. package/dist/channels/slack/message-content.d.ts.map +1 -1
  124. package/dist/channels/slack/message-content.js +23 -28
  125. package/dist/channels/slack/message-content.js.map +1 -1
  126. package/dist/channels/slack/status.d.ts +76 -0
  127. package/dist/channels/slack/status.d.ts.map +1 -0
  128. package/dist/channels/slack/status.js +427 -0
  129. package/dist/channels/slack/status.js.map +1 -0
  130. package/dist/channels/source-providers.js +1 -1
  131. package/dist/channels/source-providers.js.map +1 -1
  132. package/dist/channels/trigger/client.d.ts.map +1 -1
  133. package/dist/channels/trigger/client.js +4 -9
  134. package/dist/channels/trigger/client.js.map +1 -1
  135. package/dist/channels/trigger/http.d.ts +114 -3
  136. package/dist/channels/trigger/http.d.ts.map +1 -1
  137. package/dist/channels/trigger/http.js +310 -71
  138. package/dist/channels/trigger/http.js.map +1 -1
  139. package/dist/channels/trigger/ingress.d.ts +38 -1
  140. package/dist/channels/trigger/ingress.d.ts.map +1 -1
  141. package/dist/channels/trigger/ingress.js +47 -1
  142. package/dist/channels/trigger/ingress.js.map +1 -1
  143. package/dist/channels/trigger/types.d.ts +82 -3
  144. package/dist/channels/trigger/types.d.ts.map +1 -1
  145. package/dist/channels/trigger/types.js +36 -0
  146. package/dist/channels/trigger/types.js.map +1 -1
  147. package/dist/channels/types.d.ts +19 -3
  148. package/dist/channels/types.d.ts.map +1 -1
  149. package/dist/channels/types.js +2 -0
  150. package/dist/channels/types.js.map +1 -1
  151. package/dist/connections.d.ts +5 -0
  152. package/dist/connections.d.ts.map +1 -1
  153. package/dist/connections.js +14 -1
  154. package/dist/connections.js.map +1 -1
  155. package/dist/index.d.ts +13 -4
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +2 -1
  158. package/dist/index.js.map +1 -1
  159. package/dist/ingress/runs.d.ts +32 -1
  160. package/dist/ingress/runs.d.ts.map +1 -1
  161. package/dist/ingress/runs.js +85 -5
  162. package/dist/ingress/runs.js.map +1 -1
  163. package/dist/managed-composition.d.ts.map +1 -1
  164. package/dist/managed-composition.js +8 -13
  165. package/dist/managed-composition.js.map +1 -1
  166. package/dist/namespaces.d.ts +15 -21
  167. package/dist/namespaces.d.ts.map +1 -1
  168. package/dist/namespaces.js +2 -29
  169. package/dist/namespaces.js.map +1 -1
  170. package/dist/runtime/auth.d.ts +1 -2
  171. package/dist/runtime/auth.d.ts.map +1 -1
  172. package/dist/runtime/auth.js +94 -48
  173. package/dist/runtime/auth.js.map +1 -1
  174. package/dist/runtime/channel-icon.d.ts +22 -0
  175. package/dist/runtime/channel-icon.d.ts.map +1 -0
  176. package/dist/runtime/channel-icon.js +70 -0
  177. package/dist/runtime/channel-icon.js.map +1 -0
  178. package/dist/runtime/channel.d.ts +6 -0
  179. package/dist/runtime/channel.d.ts.map +1 -1
  180. package/dist/runtime/channel.js.map +1 -1
  181. package/dist/runtime/identity-http.d.ts +2 -0
  182. package/dist/runtime/identity-http.d.ts.map +1 -1
  183. package/dist/runtime/identity-http.js +35 -0
  184. package/dist/runtime/identity-http.js.map +1 -1
  185. package/dist/runtime/identity-runtime.d.ts +4 -9
  186. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  187. package/dist/runtime/identity-runtime.js +12 -25
  188. package/dist/runtime/identity-runtime.js.map +1 -1
  189. package/dist/runtime/index.d.ts.map +1 -1
  190. package/dist/runtime/index.js +32 -21
  191. package/dist/runtime/index.js.map +1 -1
  192. package/dist/runtime/managed-thread.d.ts +60 -0
  193. package/dist/runtime/managed-thread.d.ts.map +1 -0
  194. package/dist/runtime/managed-thread.js +76 -0
  195. package/dist/runtime/managed-thread.js.map +1 -0
  196. package/dist/runtime/managed-tools.d.ts +10 -2
  197. package/dist/runtime/managed-tools.d.ts.map +1 -1
  198. package/dist/runtime/managed-tools.js +10 -8
  199. package/dist/runtime/managed-tools.js.map +1 -1
  200. package/dist/runtime/memory/policy.d.ts.map +1 -1
  201. package/dist/runtime/memory/policy.js +1 -3
  202. package/dist/runtime/memory/policy.js.map +1 -1
  203. package/dist/runtime/run-input.d.ts +10 -0
  204. package/dist/runtime/run-input.d.ts.map +1 -1
  205. package/dist/runtime/run-input.js +48 -2
  206. package/dist/runtime/run-input.js.map +1 -1
  207. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  208. package/dist/runtime/sandbox-manager.js +1 -1
  209. package/dist/runtime/sandbox-manager.js.map +1 -1
  210. package/dist/runtime/schedule-auth.d.ts +17 -0
  211. package/dist/runtime/schedule-auth.d.ts.map +1 -1
  212. package/dist/runtime/schedule-auth.js +39 -1
  213. package/dist/runtime/schedule-auth.js.map +1 -1
  214. package/dist/runtime/thread-record.d.ts +81 -0
  215. package/dist/runtime/thread-record.d.ts.map +1 -0
  216. package/dist/runtime/thread-record.js +205 -0
  217. package/dist/runtime/thread-record.js.map +1 -0
  218. package/dist/runtime/types.d.ts +5 -1
  219. package/dist/runtime/types.d.ts.map +1 -1
  220. package/dist/runtime-schedules.d.ts +13 -0
  221. package/dist/runtime-schedules.d.ts.map +1 -1
  222. package/dist/runtime-schedules.js +83 -20
  223. package/dist/runtime-schedules.js.map +1 -1
  224. package/dist/sandbox.d.ts +0 -6
  225. package/dist/sandbox.d.ts.map +1 -1
  226. package/dist/sandbox.js +3 -7
  227. package/dist/sandbox.js.map +1 -1
  228. package/dist/schedule-channel.d.ts +5 -2
  229. package/dist/schedule-channel.d.ts.map +1 -1
  230. package/dist/schedule-channel.js +13 -12
  231. package/dist/schedule-channel.js.map +1 -1
  232. package/dist/values.d.ts +15 -0
  233. package/dist/values.d.ts.map +1 -0
  234. package/dist/values.js +31 -0
  235. package/dist/values.js.map +1 -0
  236. package/package.json +7 -7
@@ -2,10 +2,42 @@ import { channelContextSchema } from "../../run-context.js";
2
2
  import { immutableCopy, validateMessage } from "../runtime.js";
3
3
  import { isJsonValue } from "../message-schema.js";
4
4
  import { normalizeRunInput } from "../run-input.js";
5
- import { startHttpIngressAgent, observeHttpIngressAgent, waitForHttpIngressThread, } from "./ingress.js";
5
+ import { cancelHttpIngressRuns, httpIngressThreadWaitsOn, startHttpIngressAgent, observeHttpIngressAgent, waitForHttpIngressThread, } from "./ingress.js";
6
+ import { ChannelError } from "../errors.js";
6
7
  import { scheduleIngressWork } from "../../ingress/index.js";
7
8
  import { logger } from "../../runtime/log.js";
9
+ import { requireNonblank } from "../../values.js";
8
10
  const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
11
+ /**
12
+ * Messages in this process that may still wait for their thread, by thread.
13
+ * A message waiting for its busy thread (the default `enqueue` strategy) is
14
+ * no server-side run yet, so the server's cancel can't reach it: a cancel
15
+ * marks the thread's waiters, and they drop themselves. A message joins
16
+ * before its first start and leaves once its fate is settled, so only
17
+ * threads with messages in flight are kept. Messages waiting in another
18
+ * replica aren't reached.
19
+ *
20
+ * This is not durable: a waiting message lives only in this process, so a
21
+ * restart loses it after the provider was already told it arrived. It waits
22
+ * here rather than queueing on the server because a queued run starts as soon
23
+ * as the run before it stops on `interrupt()`, and its new input discards the
24
+ * decision the thread waits on. A server-side queue that holds messages while
25
+ * a thread waits on an interrupt would replace this; see
26
+ * https://github.com/langchain-ai/langgraph/issues/8838.
27
+ */
28
+ const threadWaiters = new Map();
29
+ function joinThreadWaiters(threadId) {
30
+ const waiter = { cancelled: false };
31
+ const waiters = threadWaiters.get(threadId) ?? new Set();
32
+ threadWaiters.set(threadId, waiters.add(waiter));
33
+ return waiter;
34
+ }
35
+ function leaveThreadWaiters(threadId, waiter) {
36
+ const waiters = threadWaiters.get(threadId);
37
+ waiters?.delete(waiter);
38
+ if (waiters?.size === 0)
39
+ threadWaiters.delete(threadId);
40
+ }
9
41
  export async function handleHttpRequest(ctx, adapter) {
10
42
  const rawBody = requestBytes(ctx);
11
43
  function adapterRequest() {
@@ -39,6 +71,35 @@ export async function handleHttpRequest(ctx, adapter) {
39
71
  if (result.type === "ignore") {
40
72
  return (result.response ?? Response.json({ status: "ignored" }, { status: 202 }));
41
73
  }
74
+ const assistantId = process.env[ASSISTANT_ID_ENV]?.trim();
75
+ if (!assistantId) {
76
+ return jsonError(500, "channel runtime is not configured");
77
+ }
78
+ if (result.type === "cancel") {
79
+ let stop;
80
+ try {
81
+ validateCancelMessage(result.message);
82
+ stop = immutableCopy(result.message);
83
+ }
84
+ catch {
85
+ return jsonError(400, "invalid channel message");
86
+ }
87
+ const threadId = stop.threadId.toLowerCase();
88
+ return cancelThreadRuns(ctx, adapter, {
89
+ userId: stop.userId,
90
+ sourceThreadKey: `http:v1:${JSON.stringify([ctx.name, threadId])}`,
91
+ threadId,
92
+ target: stop.target,
93
+ delivery: {
94
+ threadId,
95
+ assistantId,
96
+ ...(result.rawEvent !== undefined && {
97
+ rawEvent: structuredClone(result.rawEvent),
98
+ }),
99
+ },
100
+ ...(result.response !== undefined && { response: result.response }),
101
+ });
102
+ }
42
103
  let message = result.message;
43
104
  try {
44
105
  validateInboundMessage(message, adapter.input !== undefined);
@@ -47,10 +108,6 @@ export async function handleHttpRequest(ctx, adapter) {
47
108
  catch {
48
109
  return jsonError(400, "invalid channel message");
49
110
  }
50
- const assistantId = process.env[ASSISTANT_ID_ENV]?.trim();
51
- if (!assistantId) {
52
- return jsonError(500, "channel runtime is not configured");
53
- }
54
111
  const deliveryId = crypto.randomUUID();
55
112
  const threadId = message.threadId.toLowerCase();
56
113
  const sourceThreadKey = `http:v1:${JSON.stringify([ctx.name, threadId])}`;
@@ -83,22 +140,34 @@ export async function handleHttpRequest(ctx, adapter) {
83
140
  assistantId,
84
141
  };
85
142
  const rawEvent = result.rawEvent;
86
- const runInfo = (assistantId) => ({
143
+ const delivery = (assistantId) => ({
87
144
  threadId,
88
145
  ...(assistantId !== undefined && { assistantId }),
89
146
  ...(result.rawEvent !== undefined && {
90
147
  rawEvent: structuredClone(result.rawEvent),
91
148
  }),
92
149
  });
150
+ // Joined before the first start, so a cancel during it reaches the message.
151
+ const waiter = joinThreadWaiters(threadId);
152
+ /** Set when a cancel dropped the message while its input was decided. */
153
+ let dropped = false;
93
154
  const inputHook = adapter.input?.bind(adapter);
94
155
  async function prepare() {
156
+ let prepared;
95
157
  try {
96
- return normalizeRunInput(await inputHook?.(immutableCopy(message), rawEvent === undefined ? undefined : structuredClone(rawEvent)));
158
+ prepared = normalizeRunInput(await inputHook?.(immutableCopy(message), rawEvent === undefined ? undefined : structuredClone(rawEvent)));
97
159
  }
98
160
  catch (error) {
99
161
  logger.error(`channel input failed (${logger.safeErrorLabel(error)})`);
100
162
  return undefined;
101
163
  }
164
+ // A slow input, such as an endpoint's, may outlast a cancel.
165
+ if (prepared && waiter.cancelled) {
166
+ logger.info(`channel run dropped: its thread was cancelled while its input was decided ${JSON.stringify({ threadId })}`);
167
+ dropped = true;
168
+ return undefined;
169
+ }
170
+ return prepared;
102
171
  }
103
172
  const startInput = {
104
173
  ...input,
@@ -112,105 +181,199 @@ export async function handleHttpRequest(ctx, adapter) {
112
181
  multitaskStrategy: adapter.multitaskStrategy,
113
182
  }),
114
183
  };
115
- let outcome;
116
- try {
117
- outcome = await startHttpIngressAgent(startInput);
118
- }
119
- catch (error) {
120
- logger.error(`channel run could not be started (${logger.safeErrorLabel(error)})`);
121
- return jsonError(500, "channel run could not be started");
122
- }
123
- const label = `channel "${ctx.name}" delivery`;
124
- const onPaused = adapter.onPaused?.bind(adapter);
125
- async function notifyPaused(assistantId) {
126
- if (!onPaused)
184
+ // Every message gets one `onReceived` and, once it is done, `onFinish`.
185
+ const onReceived = adapter.onReceived?.bind(adapter);
186
+ const received = new Promise((resolve) => {
187
+ if (!onReceived)
188
+ return resolve();
189
+ scheduleIngressWork(async () => {
190
+ try {
191
+ await onReceived(immutableCopy(message.target), delivery(assistantId));
192
+ }
193
+ catch (error) {
194
+ logger.error(`channel received notice failed (${logger.safeErrorLabel(error)})`);
195
+ }
196
+ finally {
197
+ resolve();
198
+ }
199
+ }, { label: `channel "${ctx.name}" received notice` });
200
+ });
201
+ const onFinish = adapter.onFinish?.bind(adapter);
202
+ /** Tell the adapter the message is done; the thread's assistant lets a notice link to it. */
203
+ async function finish(done, threadAssistantId) {
204
+ if (!onFinish)
127
205
  return;
206
+ await received;
128
207
  try {
129
- // The thread's assistant lets the notice link to it in Studio.
130
- await onPaused(immutableCopy(message.target), runInfo(assistantId));
208
+ await onFinish(immutableCopy(message.target), immutableCopy({
209
+ ...delivery(threadAssistantId ?? assistantId),
210
+ ...done,
211
+ }));
131
212
  }
132
213
  catch (error) {
133
- logger.error(`channel paused notice failed (${logger.safeErrorLabel(error)})`);
214
+ logger.error(`channel finish notice failed (${logger.safeErrorLabel(error)})`);
134
215
  }
135
216
  }
217
+ const label = `channel "${ctx.name}" delivery`;
136
218
  const post = adapter.post?.bind(adapter);
137
219
  const onError = adapter.onError?.bind(adapter);
138
- async function deliver(started) {
139
- logger.info(`channel run started ${JSON.stringify({ threadId, runId: logger.logIdentifier(started.runId) })}`);
140
- let replyAttempted = false;
220
+ async function notifyFailed(error) {
141
221
  try {
142
- const invocation = await observeHttpIngressAgent({
143
- ...input,
144
- ...started,
145
- });
146
- if (!post || invocation.replyContent === null) {
147
- return;
222
+ if (onError) {
223
+ await onError(error, immutableCopy(message.target));
224
+ }
225
+ else if (post) {
226
+ await post(immutableCopy({
227
+ type: "content",
228
+ content: "Something went wrong while processing your request.",
229
+ target: message.target,
230
+ }));
148
231
  }
149
- const reply = {
150
- type: "content",
151
- content: invocation.replyContent,
152
- };
153
- validateMessage(reply);
154
- replyAttempted = true;
155
- await post(immutableCopy({ ...reply, target: message.target }));
232
+ }
233
+ catch (replyError) {
234
+ const action = onError ? "callback" : "reply";
235
+ logger.error(`channel error ${action} failed (${logger.safeErrorLabel(replyError)})`);
236
+ }
237
+ }
238
+ // The run posts its own answer (see `./reply.ts`): this reports how it
239
+ // ended, which the run can't say itself.
240
+ async function deliver(started) {
241
+ const { runId } = started;
242
+ logger.info(`channel run started ${JSON.stringify({ threadId, runId: logger.logIdentifier(runId) })}`);
243
+ let outcome;
244
+ try {
245
+ outcome = await observeHttpIngressAgent({ ...input, ...started });
156
246
  }
157
247
  catch (error) {
158
- logger.error(`channel delivery failed (${logger.safeErrorLabel(error)})`);
159
- try {
160
- if (onError) {
161
- await onError(error, immutableCopy(message.target));
162
- }
163
- else if (post && !replyAttempted) {
164
- await post(immutableCopy({
165
- type: "content",
166
- content: "Something went wrong while processing your request.",
167
- target: message.target,
168
- }));
169
- }
170
- }
171
- catch (replyError) {
172
- const action = onError ? "callback" : "reply";
173
- logger.error(`channel error ${action} failed (${logger.safeErrorLabel(replyError)})`);
174
- }
248
+ logger.error(`channel run could not be observed (${logger.safeErrorLabel(error)})`);
249
+ }
250
+ // The run may have answered already, or may still, so no error is
251
+ // reported; how it ended is unknown.
252
+ if (!outcome)
253
+ return finish({ type: "failed", reason: "observe", interrupts: [] });
254
+ if (outcome.status === "error" || outcome.status === "timeout") {
255
+ logger.error(`channel run failed ${JSON.stringify({ threadId })}`);
256
+ await notifyFailed(new ChannelError("channel_run_failed", "channel run failed"));
175
257
  }
258
+ return finish({
259
+ type: "run",
260
+ run: { id: runId, status: outcome.status },
261
+ interrupts: outcome.interrupts,
262
+ }, outcome.assistantId);
176
263
  }
177
264
  // The thread's current run may still stop for a decision, so the message
178
265
  // waits for that run instead of queueing behind it, then checks again.
266
+ // A cancel while the message waits drops it.
179
267
  async function startWhenIdle() {
180
268
  let next = { skipped: "busy" };
181
269
  try {
182
270
  while ("skipped" in next && next.skipped === "busy") {
183
271
  await waitForHttpIngressThread(input);
272
+ if (waiter.cancelled) {
273
+ logger.info(`channel run dropped: its thread was cancelled while it waited ${JSON.stringify({ threadId })}`);
274
+ return await finish({
275
+ type: "skipped",
276
+ reason: "dropped",
277
+ interrupts: [],
278
+ });
279
+ }
184
280
  next = await startHttpIngressAgent(startInput);
185
281
  }
186
282
  }
187
283
  catch (error) {
188
284
  logger.error(`channel run could not be started (${logger.safeErrorLabel(error)})`);
189
- return;
285
+ return await finish({ type: "failed", reason: "start", interrupts: [] });
286
+ }
287
+ finally {
288
+ leaveThreadWaiters(threadId, waiter);
190
289
  }
191
290
  if (!("skipped" in next))
192
291
  return deliver(next);
193
292
  logger.info(`channel run skipped ${JSON.stringify({ threadId, reason: next.skipped })}`);
194
- if (next.skipped === "paused")
195
- await notifyPaused(next.assistantId);
293
+ await finishSkipped(next);
294
+ }
295
+ /** A message the thread took no run for is done, with why; one that waits says on what. */
296
+ function finishSkipped(skipped) {
297
+ switch (skipped.skipped) {
298
+ case "paused":
299
+ return finish({
300
+ type: "skipped",
301
+ reason: "waiting",
302
+ interrupts: skipped.interrupts,
303
+ }, skipped.assistantId);
304
+ case "ignored":
305
+ return finish({
306
+ type: "skipped",
307
+ reason: dropped ? "dropped" : "ignored",
308
+ interrupts: [],
309
+ });
310
+ case "busy":
311
+ throw new Error("a busy thread's message is not done");
312
+ default:
313
+ return finish({
314
+ type: "skipped",
315
+ reason: skipped.skipped,
316
+ interrupts: [],
317
+ });
318
+ }
319
+ }
320
+ /** Start the message's run; `undefined` when that failed. */
321
+ async function startFirst() {
322
+ let outcome;
323
+ try {
324
+ outcome = await startHttpIngressAgent(startInput);
325
+ }
326
+ catch (error) {
327
+ leaveThreadWaiters(threadId, waiter);
328
+ logger.error(`channel run could not be started (${logger.safeErrorLabel(error)})`);
329
+ // Answered with an error, the provider may redeliver it, as a new
330
+ // delivery: only one it already accepted is done for good.
331
+ if (onFinish)
332
+ scheduleIngressWork(() => finish({
333
+ type: "failed",
334
+ reason: message.background ? "start" : "retry",
335
+ interrupts: [],
336
+ }), { label });
337
+ return undefined;
338
+ }
339
+ // Only a message that waits for its busy thread stays.
340
+ if (!("skipped" in outcome && outcome.skipped === "busy"))
341
+ leaveThreadWaiters(threadId, waiter);
342
+ return outcome;
196
343
  }
197
- if ("skipped" in outcome) {
344
+ /** What follows the first start, in the background. */
345
+ function followUp(outcome) {
346
+ if (!("skipped" in outcome)) {
347
+ scheduleIngressWork(() => deliver(outcome), { label });
348
+ return;
349
+ }
198
350
  logger.info(`channel run skipped ${JSON.stringify({ threadId, reason: outcome.skipped })}`);
199
- if (outcome.skipped === "busy")
351
+ const skipped = outcome;
352
+ if (skipped.skipped === "busy")
200
353
  scheduleIngressWork(startWhenIdle, { label });
201
- else if (outcome.skipped === "paused" && onPaused) {
202
- const { assistantId } = outcome;
203
- scheduleIngressWork(() => notifyPaused(assistantId), {
204
- label: `channel "${ctx.name}" paused notice`,
205
- });
206
- }
207
- return (result.response ??
208
- Response.json({ status: outcome.skipped }, { status: 202 }));
354
+ else if (onFinish)
355
+ scheduleIngressWork(() => finishSkipped(skipped), { label });
356
+ }
357
+ const accepted = () => result.response ??
358
+ Response.json({ status: "accepted", deliveryId }, { status: 202 });
359
+ // Input that may take longer than the provider waits, such as an
360
+ // endpoint's, is decided after it has its answer.
361
+ if (message.background) {
362
+ scheduleIngressWork(async () => {
363
+ const outcome = await startFirst();
364
+ if (outcome)
365
+ followUp(outcome);
366
+ }, { label });
367
+ return accepted();
209
368
  }
210
- const started = outcome;
211
- scheduleIngressWork(() => deliver(started), { label });
212
- return (result.response ??
213
- Response.json({ status: "accepted", deliveryId }, { status: 202 }));
369
+ const outcome = await startFirst();
370
+ if (!outcome)
371
+ return jsonError(500, "channel run could not be started");
372
+ followUp(outcome);
373
+ return "skipped" in outcome
374
+ ? (result.response ??
375
+ Response.json({ status: outcome.skipped }, { status: 202 }))
376
+ : accepted();
214
377
  }
215
378
  function requestBytes(ctx) {
216
379
  if (typeof ctx.rawBody === "string") {
@@ -231,26 +394,106 @@ function validParseResult(value) {
231
394
  if (result.rawEvent !== undefined && !isJsonValue(result.rawEvent)) {
232
395
  return false;
233
396
  }
234
- return result.type === "ignore" || result.type === "message";
397
+ return (result.type === "ignore" ||
398
+ result.type === "message" ||
399
+ result.type === "cancel");
400
+ }
401
+ /**
402
+ * Cancel the thread's runs for a `cancel` result, then finish it in the
403
+ * background. Messages waiting here for the thread are dropped too.
404
+ */
405
+ async function cancelThreadRuns(ctx, adapter, input) {
406
+ // Before the server's cancel, so waiters it wakes see it.
407
+ for (const waiter of threadWaiters.get(input.threadId) ?? [])
408
+ waiter.cancelled = true;
409
+ let cancelled;
410
+ try {
411
+ cancelled = (await cancelHttpIngressRuns({
412
+ userId: input.userId,
413
+ sourceThreadKey: input.sourceThreadKey,
414
+ sourceProvider: ctx.channel.kind,
415
+ threadId: input.threadId,
416
+ })).length;
417
+ }
418
+ catch (error) {
419
+ logger.error(`channel run could not be cancelled (${logger.safeErrorLabel(error)})`);
420
+ return jsonError(500, "channel run could not be cancelled");
421
+ }
422
+ logger.info(`channel runs cancelled ${JSON.stringify({ threadId: input.threadId, cancelled })}`);
423
+ const onFinish = adapter.onFinish?.bind(adapter);
424
+ if (onFinish)
425
+ scheduleIngressWork(async () => {
426
+ try {
427
+ // A thread that waits on a decision still does after the cancel.
428
+ let waitsOn = {
429
+ interrupts: [],
430
+ };
431
+ try {
432
+ waitsOn = await httpIngressThreadWaitsOn({
433
+ userId: input.userId,
434
+ sourceThreadKey: input.sourceThreadKey,
435
+ sourceProvider: ctx.channel.kind,
436
+ threadId: input.threadId,
437
+ });
438
+ }
439
+ catch (error) {
440
+ logger.error(`channel thread could not be read (${logger.safeErrorLabel(error)})`);
441
+ }
442
+ await onFinish(immutableCopy(input.target), immutableCopy({
443
+ ...input.delivery,
444
+ ...(waitsOn.assistantId !== undefined && {
445
+ assistantId: waitsOn.assistantId,
446
+ }),
447
+ type: "skipped",
448
+ reason: "cancel",
449
+ interrupts: waitsOn.interrupts,
450
+ }));
451
+ }
452
+ catch (error) {
453
+ logger.error(`channel finish notice failed (${logger.safeErrorLabel(error)})`);
454
+ }
455
+ }, { label: `channel "${ctx.name}" finish notice` });
456
+ return (input.response ??
457
+ Response.json({ status: "cancelled", cancelled }, { status: 202 }));
458
+ }
459
+ const CANCEL_MESSAGE_KEYS = new Set([
460
+ "userId",
461
+ "threadId",
462
+ "target",
463
+ ]);
464
+ /** A cancel names a thread and who to tell; it starts nothing. */
465
+ function validateCancelMessage(message) {
466
+ if (!message || typeof message !== "object")
467
+ throw new Error("channel cancel must be an object");
468
+ for (const key of Object.keys(message))
469
+ if (!CANCEL_MESSAGE_KEYS.has(key))
470
+ throw new Error("channel cancel takes only userId, threadId and target");
471
+ validateAddress(message);
235
472
  }
236
473
  function validateInboundMessage(message, adapterInput) {
237
- nonblank(message.userId, "channel userId");
238
474
  if (message.deliveryKey !== undefined)
239
- nonblank(message.deliveryKey, "channel deliveryKey");
475
+ requireNonblank(message.deliveryKey, "channel deliveryKey");
476
+ if (message.background !== undefined &&
477
+ typeof message.background !== "boolean")
478
+ throw new Error("channel background must be a boolean");
479
+ validateAddress(message);
480
+ // The adapter's `input` supplies what a message without content starts.
481
+ if (message.content !== undefined || !adapterInput)
482
+ validateMessageContent(message.content);
483
+ }
484
+ function validateAddress(message) {
485
+ requireNonblank(message.userId, "channel userId");
240
486
  if (typeof message.threadId !== "string" ||
241
487
  !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(message.threadId)) {
242
488
  throw new Error("channel threadId must be a UUID");
243
489
  }
244
490
  if (!isJsonValue(message.target))
245
491
  throw new Error("channel target must be JSON");
246
- // The adapter's `input` supplies what a message without content starts.
247
- if (message.content !== undefined || !adapterInput)
248
- validateMessageContent(message.content);
249
492
  }
250
493
  function validateMessageContent(content) {
251
494
  validateMessage({ type: "content", content });
252
495
  if (typeof content === "string") {
253
- nonblank(content, "channel message content");
496
+ requireNonblank(content, "channel message content");
254
497
  return;
255
498
  }
256
499
  if (!Array.isArray(content) ||
@@ -262,13 +505,6 @@ function validateMessageContent(content) {
262
505
  throw new Error("channel message must contain content blocks");
263
506
  }
264
507
  }
265
- function nonblank(value, label) {
266
- const normalized = value.trim();
267
- if (!normalized) {
268
- throw new Error(`${label} must be a non-empty string`);
269
- }
270
- return normalized;
271
- }
272
508
  function jsonError(status, message) {
273
509
  return Response.json({ error: message }, { status });
274
510
  }
@@ -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,6 @@
1
1
  import type { HttpChannelAdapter } from "./types.js";
2
2
  import { type Channel } from "../../runtime/channel.js";
3
- export type { HttpChannelAdapter, HttpChannelInboundMessage, HttpChannelParseResult, HttpChannelRequest, HttpChannelRunInfo, HttpChannelPostInput, HttpPostedMessage, } from "./types.js";
3
+ export type { HttpChannelAdapter, HttpChannelCancelMessage, HttpChannelInboundMessage, HttpChannelParseResult, HttpChannelRequest, HttpChannelPostInput, HttpDelivery, HttpFinish, HttpFinishedDelivery, HttpFinishedRun, HttpPostedMessage, HttpRunStatus, HttpSkipReason, } from "./types.js";
4
4
  export { channelThreadId } from "./threads.js";
5
5
  export type HttpChannel = Channel & {
6
6
  readonly kind: string;
@@ -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,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GAClB,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
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,0BAA0B,CAAC;AAIlC,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,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;AAM9D,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAyCpE"}
@@ -1,20 +1,21 @@
1
1
  import { immutableCopy } from "../runtime.js";
2
2
  import { handleHttpRequest } from "./http.js";
3
+ import { MULTITASK_STRATEGIES } from "../../ingress/runs.js";
3
4
  import { CHANNEL_BRAND, } from "../../runtime/channel.js";
5
+ import { requireNonblank } from "../../values.js";
6
+ import { CHANNEL_REPLIES } from "../types.js";
4
7
  export { channelThreadId } from "./threads.js";
5
- const MULTITASK_STRATEGIES = new Set([
6
- "enqueue",
7
- "interrupt",
8
- "rollback",
9
- "reject",
10
- ]);
8
+ const STRATEGIES = new Set(Object.values(MULTITASK_STRATEGIES));
11
9
  export function httpChannel(adapter) {
12
- const provider = nonblank(adapter.provider, "channels.http provider");
10
+ const provider = requireNonblank(adapter.provider, "channels.http provider");
13
11
  if (adapter.multitaskStrategy !== undefined &&
14
- !MULTITASK_STRATEGIES.has(adapter.multitaskStrategy))
12
+ !STRATEGIES.has(adapter.multitaskStrategy))
15
13
  throw new TypeError("channel multitaskStrategy must be enqueue, interrupt, rollback or reject");
14
+ if (adapter.reply !== undefined && !CHANNEL_REPLIES.includes(adapter.reply))
15
+ throw new TypeError("channel reply must be auto or none");
16
16
  const channel = { kind: provider };
17
17
  hide(channel, CHANNEL_BRAND, true);
18
+ hide(channel, "reply", adapter.reply ?? "auto");
18
19
  hide(channel, "events", (ctx) => handleHttpRequest(ctx, adapter));
19
20
  const post = adapter.post?.bind(adapter);
20
21
  if (post) {
@@ -30,20 +31,13 @@ export function httpChannel(adapter) {
30
31
  name,
31
32
  provider,
32
33
  eventsPath: `/channels/${name}/events`,
33
- autoReply: post !== undefined,
34
+ autoReply: post !== undefined && adapter.reply !== "none",
34
35
  requiredPermissions: [],
35
36
  requiredEnv: [],
36
37
  providerConfig: immutableCopy(adapter.providerConfig ?? {}),
37
38
  }));
38
39
  return channel;
39
40
  }
40
- function nonblank(value, label) {
41
- const normalized = value.trim();
42
- if (!normalized) {
43
- throw new Error(`${label} must be a non-empty string`);
44
- }
45
- return normalized;
46
- }
47
41
  function hide(target, key, value) {
48
42
  Object.defineProperty(target, key, { value, enumerable: false });
49
43
  }