@assemblyline-agents/runtime 0.1.0

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 (331) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/agent-harness.d.ts +108 -0
  4. package/dist/agent-harness.d.ts.map +1 -0
  5. package/dist/agent-harness.js +2 -0
  6. package/dist/agent-harness.js.map +1 -0
  7. package/dist/attachments-legacy.d.ts +17 -0
  8. package/dist/attachments-legacy.d.ts.map +1 -0
  9. package/dist/attachments-legacy.js +273 -0
  10. package/dist/attachments-legacy.js.map +1 -0
  11. package/dist/attachments.d.ts +49 -0
  12. package/dist/attachments.d.ts.map +1 -0
  13. package/dist/attachments.js +832 -0
  14. package/dist/attachments.js.map +1 -0
  15. package/dist/builtin-tool-executors.d.ts +96 -0
  16. package/dist/builtin-tool-executors.d.ts.map +1 -0
  17. package/dist/builtin-tool-executors.js +501 -0
  18. package/dist/builtin-tool-executors.js.map +1 -0
  19. package/dist/builtin-tools.d.ts +30 -0
  20. package/dist/builtin-tools.d.ts.map +1 -0
  21. package/dist/builtin-tools.js +690 -0
  22. package/dist/builtin-tools.js.map +1 -0
  23. package/dist/capability-catalog.d.ts +27 -0
  24. package/dist/capability-catalog.d.ts.map +1 -0
  25. package/dist/capability-catalog.js +193 -0
  26. package/dist/capability-catalog.js.map +1 -0
  27. package/dist/channel-http-util.d.ts +34 -0
  28. package/dist/channel-http-util.d.ts.map +1 -0
  29. package/dist/channel-http-util.js +93 -0
  30. package/dist/channel-http-util.js.map +1 -0
  31. package/dist/channel-ingress.d.ts +56 -0
  32. package/dist/channel-ingress.d.ts.map +1 -0
  33. package/dist/channel-ingress.js +273 -0
  34. package/dist/channel-ingress.js.map +1 -0
  35. package/dist/channel.d.ts +146 -0
  36. package/dist/channel.d.ts.map +1 -0
  37. package/dist/channel.js +2 -0
  38. package/dist/channel.js.map +1 -0
  39. package/dist/checkpoints.d.ts +34 -0
  40. package/dist/checkpoints.d.ts.map +1 -0
  41. package/dist/checkpoints.js +86 -0
  42. package/dist/checkpoints.js.map +1 -0
  43. package/dist/code-mode.d.ts +20 -0
  44. package/dist/code-mode.d.ts.map +1 -0
  45. package/dist/code-mode.js +658 -0
  46. package/dist/code-mode.js.map +1 -0
  47. package/dist/computer-relay-protocol.d.ts +36 -0
  48. package/dist/computer-relay-protocol.d.ts.map +1 -0
  49. package/dist/computer-relay-protocol.js +127 -0
  50. package/dist/computer-relay-protocol.js.map +1 -0
  51. package/dist/concurrency.d.ts +68 -0
  52. package/dist/concurrency.d.ts.map +1 -0
  53. package/dist/concurrency.js +193 -0
  54. package/dist/concurrency.js.map +1 -0
  55. package/dist/connection-auth-util.d.ts +56 -0
  56. package/dist/connection-auth-util.d.ts.map +1 -0
  57. package/dist/connection-auth-util.js +154 -0
  58. package/dist/connection-auth-util.js.map +1 -0
  59. package/dist/connection-clients.d.ts +50 -0
  60. package/dist/connection-clients.d.ts.map +1 -0
  61. package/dist/connection-clients.js +402 -0
  62. package/dist/connection-clients.js.map +1 -0
  63. package/dist/connection-stores.d.ts +108 -0
  64. package/dist/connection-stores.d.ts.map +1 -0
  65. package/dist/connection-stores.js +127 -0
  66. package/dist/connection-stores.js.map +1 -0
  67. package/dist/connection-util.d.ts +27 -0
  68. package/dist/connection-util.d.ts.map +1 -0
  69. package/dist/connection-util.js +118 -0
  70. package/dist/connection-util.js.map +1 -0
  71. package/dist/connections.d.ts +152 -0
  72. package/dist/connections.d.ts.map +1 -0
  73. package/dist/connections.js +838 -0
  74. package/dist/connections.js.map +1 -0
  75. package/dist/content-capture.d.ts +32 -0
  76. package/dist/content-capture.d.ts.map +1 -0
  77. package/dist/content-capture.js +77 -0
  78. package/dist/content-capture.js.map +1 -0
  79. package/dist/context-policy-util.d.ts +45 -0
  80. package/dist/context-policy-util.d.ts.map +1 -0
  81. package/dist/context-policy-util.js +120 -0
  82. package/dist/context-policy-util.js.map +1 -0
  83. package/dist/conversation-context.d.ts +55 -0
  84. package/dist/conversation-context.d.ts.map +1 -0
  85. package/dist/conversation-context.js +179 -0
  86. package/dist/conversation-context.js.map +1 -0
  87. package/dist/conversation-transcript.d.ts +49 -0
  88. package/dist/conversation-transcript.d.ts.map +1 -0
  89. package/dist/conversation-transcript.js +77 -0
  90. package/dist/conversation-transcript.js.map +1 -0
  91. package/dist/conversation-turn-dispatch.d.ts +46 -0
  92. package/dist/conversation-turn-dispatch.d.ts.map +1 -0
  93. package/dist/conversation-turn-dispatch.js +201 -0
  94. package/dist/conversation-turn-dispatch.js.map +1 -0
  95. package/dist/delivery-queue.d.ts +89 -0
  96. package/dist/delivery-queue.d.ts.map +1 -0
  97. package/dist/delivery-queue.js +244 -0
  98. package/dist/delivery-queue.js.map +1 -0
  99. package/dist/delivery-send.d.ts +44 -0
  100. package/dist/delivery-send.d.ts.map +1 -0
  101. package/dist/delivery-send.js +494 -0
  102. package/dist/delivery-send.js.map +1 -0
  103. package/dist/env-config.d.ts +6 -0
  104. package/dist/env-config.d.ts.map +1 -0
  105. package/dist/env-config.js +27 -0
  106. package/dist/env-config.js.map +1 -0
  107. package/dist/eval-run-options.d.ts +37 -0
  108. package/dist/eval-run-options.d.ts.map +1 -0
  109. package/dist/eval-run-options.js +106 -0
  110. package/dist/eval-run-options.js.map +1 -0
  111. package/dist/harness-continuation.d.ts +54 -0
  112. package/dist/harness-continuation.d.ts.map +1 -0
  113. package/dist/harness-continuation.js +58 -0
  114. package/dist/harness-continuation.js.map +1 -0
  115. package/dist/harness-loop.d.ts +110 -0
  116. package/dist/harness-loop.d.ts.map +1 -0
  117. package/dist/harness-loop.js +575 -0
  118. package/dist/harness-loop.js.map +1 -0
  119. package/dist/hook-dispatch.d.ts +19 -0
  120. package/dist/hook-dispatch.d.ts.map +1 -0
  121. package/dist/hook-dispatch.js +37 -0
  122. package/dist/hook-dispatch.js.map +1 -0
  123. package/dist/http.d.ts +26 -0
  124. package/dist/http.d.ts.map +1 -0
  125. package/dist/http.js +114 -0
  126. package/dist/http.js.map +1 -0
  127. package/dist/in-memory-conversation-turn-store.d.ts +29 -0
  128. package/dist/in-memory-conversation-turn-store.d.ts.map +1 -0
  129. package/dist/in-memory-conversation-turn-store.js +166 -0
  130. package/dist/in-memory-conversation-turn-store.js.map +1 -0
  131. package/dist/in-memory-run-store.d.ts +39 -0
  132. package/dist/in-memory-run-store.d.ts.map +1 -0
  133. package/dist/in-memory-run-store.js +332 -0
  134. package/dist/in-memory-run-store.js.map +1 -0
  135. package/dist/in-memory-sandbox-session-store.d.ts +33 -0
  136. package/dist/in-memory-sandbox-session-store.d.ts.map +1 -0
  137. package/dist/in-memory-sandbox-session-store.js +186 -0
  138. package/dist/in-memory-sandbox-session-store.js.map +1 -0
  139. package/dist/in-memory-small-stores.d.ts +117 -0
  140. package/dist/in-memory-small-stores.d.ts.map +1 -0
  141. package/dist/in-memory-small-stores.js +340 -0
  142. package/dist/in-memory-small-stores.js.map +1 -0
  143. package/dist/in-memory-usage-store.d.ts +15 -0
  144. package/dist/in-memory-usage-store.d.ts.map +1 -0
  145. package/dist/in-memory-usage-store.js +49 -0
  146. package/dist/in-memory-usage-store.js.map +1 -0
  147. package/dist/index.d.ts +467 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +2046 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/json-util.d.ts +19 -0
  152. package/dist/json-util.d.ts.map +1 -0
  153. package/dist/json-util.js +59 -0
  154. package/dist/json-util.js.map +1 -0
  155. package/dist/local-sandbox.d.ts +16 -0
  156. package/dist/local-sandbox.d.ts.map +1 -0
  157. package/dist/local-sandbox.js +327 -0
  158. package/dist/local-sandbox.js.map +1 -0
  159. package/dist/logging.d.ts +16 -0
  160. package/dist/logging.d.ts.map +1 -0
  161. package/dist/logging.js +41 -0
  162. package/dist/logging.js.map +1 -0
  163. package/dist/mcp-client.d.ts +27 -0
  164. package/dist/mcp-client.d.ts.map +1 -0
  165. package/dist/mcp-client.js +169 -0
  166. package/dist/mcp-client.js.map +1 -0
  167. package/dist/model-harnesses.d.ts +4 -0
  168. package/dist/model-harnesses.d.ts.map +1 -0
  169. package/dist/model-harnesses.js +6 -0
  170. package/dist/model-harnesses.js.map +1 -0
  171. package/dist/model-media.d.ts +36 -0
  172. package/dist/model-media.d.ts.map +1 -0
  173. package/dist/model-media.js +234 -0
  174. package/dist/model-media.js.map +1 -0
  175. package/dist/operator-controls.d.ts +31 -0
  176. package/dist/operator-controls.d.ts.map +1 -0
  177. package/dist/operator-controls.js +71 -0
  178. package/dist/operator-controls.js.map +1 -0
  179. package/dist/pi-agent-harness.d.ts +40 -0
  180. package/dist/pi-agent-harness.d.ts.map +1 -0
  181. package/dist/pi-agent-harness.js +222 -0
  182. package/dist/pi-agent-harness.js.map +1 -0
  183. package/dist/pi-harness.d.ts +42 -0
  184. package/dist/pi-harness.d.ts.map +1 -0
  185. package/dist/pi-harness.js +142 -0
  186. package/dist/pi-harness.js.map +1 -0
  187. package/dist/relay-mcp-client.d.ts +17 -0
  188. package/dist/relay-mcp-client.d.ts.map +1 -0
  189. package/dist/relay-mcp-client.js +119 -0
  190. package/dist/relay-mcp-client.js.map +1 -0
  191. package/dist/replay-resume.d.ts +107 -0
  192. package/dist/replay-resume.d.ts.map +1 -0
  193. package/dist/replay-resume.js +495 -0
  194. package/dist/replay-resume.js.map +1 -0
  195. package/dist/resource-projection-util.d.ts +58 -0
  196. package/dist/resource-projection-util.d.ts.map +1 -0
  197. package/dist/resource-projection-util.js +298 -0
  198. package/dist/resource-projection-util.js.map +1 -0
  199. package/dist/resource-projection.d.ts +45 -0
  200. package/dist/resource-projection.d.ts.map +1 -0
  201. package/dist/resource-projection.js +481 -0
  202. package/dist/resource-projection.js.map +1 -0
  203. package/dist/run-heartbeat.d.ts +34 -0
  204. package/dist/run-heartbeat.d.ts.map +1 -0
  205. package/dist/run-heartbeat.js +62 -0
  206. package/dist/run-heartbeat.js.map +1 -0
  207. package/dist/run-outcome.d.ts +47 -0
  208. package/dist/run-outcome.d.ts.map +1 -0
  209. package/dist/run-outcome.js +92 -0
  210. package/dist/run-outcome.js.map +1 -0
  211. package/dist/run-recovery.d.ts +117 -0
  212. package/dist/run-recovery.d.ts.map +1 -0
  213. package/dist/run-recovery.js +466 -0
  214. package/dist/run-recovery.js.map +1 -0
  215. package/dist/run-resolver.d.ts +35 -0
  216. package/dist/run-resolver.d.ts.map +1 -0
  217. package/dist/run-resolver.js +84 -0
  218. package/dist/run-resolver.js.map +1 -0
  219. package/dist/run-stream.d.ts +37 -0
  220. package/dist/run-stream.d.ts.map +1 -0
  221. package/dist/run-stream.js +78 -0
  222. package/dist/run-stream.js.map +1 -0
  223. package/dist/runs-query.d.ts +29 -0
  224. package/dist/runs-query.d.ts.map +1 -0
  225. package/dist/runs-query.js +142 -0
  226. package/dist/runs-query.js.map +1 -0
  227. package/dist/runtime-bundle.d.ts +3 -0
  228. package/dist/runtime-bundle.d.ts.map +1 -0
  229. package/dist/runtime-bundle.js +18 -0
  230. package/dist/runtime-bundle.js.map +1 -0
  231. package/dist/runtime-types.d.ts +397 -0
  232. package/dist/runtime-types.d.ts.map +1 -0
  233. package/dist/runtime-types.js +2 -0
  234. package/dist/runtime-types.js.map +1 -0
  235. package/dist/runtime-util.d.ts +45 -0
  236. package/dist/runtime-util.d.ts.map +1 -0
  237. package/dist/runtime-util.js +116 -0
  238. package/dist/runtime-util.js.map +1 -0
  239. package/dist/sandbox-cli-client.d.ts +20 -0
  240. package/dist/sandbox-cli-client.d.ts.map +1 -0
  241. package/dist/sandbox-cli-client.js +97 -0
  242. package/dist/sandbox-cli-client.js.map +1 -0
  243. package/dist/sandbox-fs.d.ts +56 -0
  244. package/dist/sandbox-fs.d.ts.map +1 -0
  245. package/dist/sandbox-fs.js +276 -0
  246. package/dist/sandbox-fs.js.map +1 -0
  247. package/dist/sandbox-session-key.d.ts +8 -0
  248. package/dist/sandbox-session-key.d.ts.map +1 -0
  249. package/dist/sandbox-session-key.js +32 -0
  250. package/dist/sandbox-session-key.js.map +1 -0
  251. package/dist/sandbox-snapshot-policy.d.ts +27 -0
  252. package/dist/sandbox-snapshot-policy.d.ts.map +1 -0
  253. package/dist/sandbox-snapshot-policy.js +94 -0
  254. package/dist/sandbox-snapshot-policy.js.map +1 -0
  255. package/dist/sandbox-sync-worker.d.ts +63 -0
  256. package/dist/sandbox-sync-worker.d.ts.map +1 -0
  257. package/dist/sandbox-sync-worker.js +448 -0
  258. package/dist/sandbox-sync-worker.js.map +1 -0
  259. package/dist/schedule-execution.d.ts +59 -0
  260. package/dist/schedule-execution.d.ts.map +1 -0
  261. package/dist/schedule-execution.js +951 -0
  262. package/dist/schedule-execution.js.map +1 -0
  263. package/dist/scheduler.d.ts +19 -0
  264. package/dist/scheduler.d.ts.map +1 -0
  265. package/dist/scheduler.js +38 -0
  266. package/dist/scheduler.js.map +1 -0
  267. package/dist/security.d.ts +20 -0
  268. package/dist/security.d.ts.map +1 -0
  269. package/dist/security.js +145 -0
  270. package/dist/security.js.map +1 -0
  271. package/dist/self-improvement.d.ts +245 -0
  272. package/dist/self-improvement.d.ts.map +1 -0
  273. package/dist/self-improvement.js +554 -0
  274. package/dist/self-improvement.js.map +1 -0
  275. package/dist/source-loader.d.ts +19 -0
  276. package/dist/source-loader.d.ts.map +1 -0
  277. package/dist/source-loader.js +160 -0
  278. package/dist/source-loader.js.map +1 -0
  279. package/dist/state-store-helpers.d.ts +28 -0
  280. package/dist/state-store-helpers.d.ts.map +1 -0
  281. package/dist/state-store-helpers.js +164 -0
  282. package/dist/state-store-helpers.js.map +1 -0
  283. package/dist/state-stores.d.ts +25 -0
  284. package/dist/state-stores.d.ts.map +1 -0
  285. package/dist/state-stores.js +157 -0
  286. package/dist/state-stores.js.map +1 -0
  287. package/dist/state.d.ts +736 -0
  288. package/dist/state.d.ts.map +1 -0
  289. package/dist/state.js +46 -0
  290. package/dist/state.js.map +1 -0
  291. package/dist/storage.d.ts +188 -0
  292. package/dist/storage.d.ts.map +1 -0
  293. package/dist/storage.js +752 -0
  294. package/dist/storage.js.map +1 -0
  295. package/dist/subagent-execution.d.ts +80 -0
  296. package/dist/subagent-execution.d.ts.map +1 -0
  297. package/dist/subagent-execution.js +135 -0
  298. package/dist/subagent-execution.js.map +1 -0
  299. package/dist/telemetry.d.ts +49 -0
  300. package/dist/telemetry.d.ts.map +1 -0
  301. package/dist/telemetry.js +60 -0
  302. package/dist/telemetry.js.map +1 -0
  303. package/dist/tool-apis.d.ts +22 -0
  304. package/dist/tool-apis.d.ts.map +1 -0
  305. package/dist/tool-apis.js +344 -0
  306. package/dist/tool-apis.js.map +1 -0
  307. package/dist/tool-execution.d.ts +143 -0
  308. package/dist/tool-execution.d.ts.map +1 -0
  309. package/dist/tool-execution.js +573 -0
  310. package/dist/tool-execution.js.map +1 -0
  311. package/dist/trusted-attachments.d.ts +20 -0
  312. package/dist/trusted-attachments.d.ts.map +1 -0
  313. package/dist/trusted-attachments.js +276 -0
  314. package/dist/trusted-attachments.js.map +1 -0
  315. package/dist/usage-accounting.d.ts +37 -0
  316. package/dist/usage-accounting.d.ts.map +1 -0
  317. package/dist/usage-accounting.js +181 -0
  318. package/dist/usage-accounting.js.map +1 -0
  319. package/dist/usage-budget.d.ts +29 -0
  320. package/dist/usage-budget.d.ts.map +1 -0
  321. package/dist/usage-budget.js +145 -0
  322. package/dist/usage-budget.js.map +1 -0
  323. package/dist/usage-reconciliation.d.ts +76 -0
  324. package/dist/usage-reconciliation.d.ts.map +1 -0
  325. package/dist/usage-reconciliation.js +463 -0
  326. package/dist/usage-reconciliation.js.map +1 -0
  327. package/dist/usage-records.d.ts +24 -0
  328. package/dist/usage-records.d.ts.map +1 -0
  329. package/dist/usage-records.js +445 -0
  330. package/dist/usage-records.js.map +1 -0
  331. package/package.json +51 -0
@@ -0,0 +1,273 @@
1
+ import { acceptedChannelBody, defaultChannelHttpResult, runCapacityHttpResponse } from "./channel-http-util.js";
2
+ import { RunCapacityError } from "./concurrency.js";
3
+ import { safeJson } from "./json-util.js";
4
+ export async function dispatchHttpChannelImpl(host, channelName, request) {
5
+ host.boot();
6
+ const channel = host.manifest.channels.find((candidate) => candidate.name === channelName);
7
+ if (!channel)
8
+ return { status: 404, body: { error: `Channel not found: ${channelName}` } };
9
+ const module = await host.loadChannelModule(channel);
10
+ if (!module.normalizeHttp && !host.devMode && request.trusted !== true) {
11
+ return {
12
+ status: 403,
13
+ body: { error: `Channel ${channel.name} requires normalizeHttp() or trusted host authorization in production.` }
14
+ };
15
+ }
16
+ const normalized = module.normalizeHttp
17
+ ? await module.normalizeHttp(request, host.channelContext(channel))
18
+ : defaultChannelHttpResult(channel, request);
19
+ if (normalized.kind === "response") {
20
+ const response = { status: normalized.status, body: normalized.body };
21
+ if (normalized.headers)
22
+ response.headers = normalized.headers;
23
+ return response;
24
+ }
25
+ if (normalized.kind === "ignored") {
26
+ const response = { status: normalized.status ?? 202, body: normalized.body ?? { ignored: true } };
27
+ if (normalized.headers)
28
+ response.headers = normalized.headers;
29
+ return response;
30
+ }
31
+ if (normalized.kind === "event") {
32
+ if (!(await host.agentEnabled())) {
33
+ return { status: 503, body: { error: "Agent ingress is disabled.", disabled: true } };
34
+ }
35
+ const results = await host.dispatchAutomationEvent(normalized.event);
36
+ return {
37
+ status: normalized.status ?? 200,
38
+ body: normalized.body ?? safeJson({ ok: true, matched: results.length, results })
39
+ };
40
+ }
41
+ if (!(await host.agentEnabled())) {
42
+ return { status: 503, body: { error: "Agent ingress is disabled.", disabled: true } };
43
+ }
44
+ const runOptions = runOptionsFromChannelTurn(normalized.turn);
45
+ if (normalized.kind === "accepted") {
46
+ const acceptedInput = {
47
+ turn: normalized.turn,
48
+ idempotencyScope: normalized.idempotencyScope ?? `channel:${channel.name}:http`
49
+ };
50
+ if (normalized.idempotencyKey)
51
+ acceptedInput.idempotencyKey = normalized.idempotencyKey;
52
+ const accepted = await acceptChannelTurnImpl(host, channel.name, acceptedInput);
53
+ if (accepted.rejected === "capacity") {
54
+ return runCapacityHttpResponse(normalized.turn.eventId, accepted.retryAfterMs ?? host.runSemaphore.retryAfterHintMs);
55
+ }
56
+ if (accepted.rejected === "disabled") {
57
+ return { status: 503, body: { error: "Agent ingress is disabled.", disabled: true } };
58
+ }
59
+ if (accepted.idempotentReplay) {
60
+ return {
61
+ status: normalized.status ?? 200,
62
+ body: acceptedChannelBody(normalized.body, normalized.turn.eventId, true)
63
+ };
64
+ }
65
+ return {
66
+ status: normalized.status ?? 200,
67
+ body: acceptedChannelBody(normalized.body, normalized.turn.eventId, false)
68
+ };
69
+ }
70
+ // Claim capacity before the run idempotency key so a 429'd request can be
71
+ // retried by the provider without replaying as a duplicate.
72
+ const admission = host.admitRunOrReject();
73
+ if (admission instanceof RunCapacityError) {
74
+ return runCapacityHttpResponse(normalized.turn.eventId, admission.retryAfterMs);
75
+ }
76
+ const runIdempotencyKey = normalized.turn.eventId;
77
+ const runIdempotencyScope = `channel:${channel.name}:run`;
78
+ // Release the admission if the reservation throws, or the semaphore slot leaks.
79
+ let runReserved;
80
+ try {
81
+ runReserved = await host.state.reserveIdempotencyKey(runIdempotencyScope, runIdempotencyKey, normalized.turn.eventId);
82
+ }
83
+ catch (error) {
84
+ admission.release();
85
+ throw error;
86
+ }
87
+ if (!runReserved) {
88
+ admission.release();
89
+ return {
90
+ status: 200,
91
+ body: {
92
+ ok: true,
93
+ idempotentReplay: true,
94
+ eventId: normalized.turn.eventId
95
+ }
96
+ };
97
+ }
98
+ const result = await host.run({ ...runOptions, admission });
99
+ return {
100
+ status: result.run.status === "failed" ? 500 : 200,
101
+ body: {
102
+ runId: result.run.id,
103
+ status: result.run.status,
104
+ response: result.response ?? "",
105
+ waitingForApproval: result.waitingForApproval ?? false,
106
+ waitingForInput: result.waitingForInput ?? false,
107
+ waitingForConnection: result.waitingForConnection ?? false,
108
+ eventCount: result.events.length,
109
+ toolCallCount: result.toolCalls.length
110
+ }
111
+ };
112
+ }
113
+ export async function acceptChannelTurnImpl(host, channelName, input) {
114
+ host.boot();
115
+ const channel = host.manifest.channels.find((candidate) => candidate.name === channelName);
116
+ if (!channel)
117
+ throw new Error(`Channel not found: ${channelName}`);
118
+ if (!(await host.agentEnabled())) {
119
+ return {
120
+ accepted: false,
121
+ idempotentReplay: false,
122
+ eventId: input.turn.eventId,
123
+ rejected: "disabled"
124
+ };
125
+ }
126
+ const idempotencyKey = input.idempotencyKey ?? input.turn.eventId;
127
+ const idempotencyScope = input.idempotencyScope ?? `channel:${channel.name}:ingress`;
128
+ const queued = await host.enqueueConversationTurn({
129
+ turn: input.turn,
130
+ idempotencyScope,
131
+ idempotencyKey
132
+ });
133
+ if (!queued.inserted) {
134
+ return { accepted: false, idempotentReplay: true, eventId: input.turn.eventId };
135
+ }
136
+ return { accepted: true, idempotentReplay: false, eventId: input.turn.eventId };
137
+ }
138
+ export async function startChannelIngressImpl(host) {
139
+ host.boot();
140
+ const lifecycles = [];
141
+ for (const channel of host.manifest.channels) {
142
+ const module = await host.loadChannelModule(channel).catch((error) => {
143
+ host.logger.warn("channel ingress module load failed", {
144
+ channel: channel.name,
145
+ error: error instanceof Error ? error.message : String(error)
146
+ });
147
+ return undefined;
148
+ });
149
+ if (!module?.startIngress)
150
+ continue;
151
+ const emit = {
152
+ accepted: (input) => acceptChannelTurnImpl(host, channel.name, input),
153
+ automation: (event) => host.dispatchAutomationEvent(event),
154
+ event: (type, payload = {}) => {
155
+ host.logger.info("channel ingress event", {
156
+ type: "openeve.channel.ingress",
157
+ channel: channel.name,
158
+ event: type,
159
+ ...(payload ?? {})
160
+ });
161
+ }
162
+ };
163
+ try {
164
+ const lifecycle = await module.startIngress(host.channelContext(channel), emit);
165
+ if (!lifecycle)
166
+ continue;
167
+ lifecycles.push({ channel: channel.name, lifecycle });
168
+ host.logger.info("channel ingress event", {
169
+ type: "openeve.channel.ingress",
170
+ channel: channel.name,
171
+ event: "started"
172
+ });
173
+ }
174
+ catch (error) {
175
+ host.logger.warn("channel ingress start failed", {
176
+ channel: channel.name,
177
+ error: error instanceof Error ? error.message : String(error)
178
+ });
179
+ }
180
+ }
181
+ if (lifecycles.length === 0)
182
+ return undefined;
183
+ const logger = host.logger;
184
+ return {
185
+ channels: lifecycles.map((entry) => entry.channel),
186
+ async stop() {
187
+ for (const entry of [...lifecycles].reverse()) {
188
+ try {
189
+ const metadata = await entry.lifecycle.stop?.();
190
+ logger.info("channel ingress event", {
191
+ type: "openeve.channel.ingress",
192
+ channel: entry.channel,
193
+ event: "stopped",
194
+ metadata: safeJson(metadata ?? {})
195
+ });
196
+ }
197
+ catch (error) {
198
+ logger.warn("channel ingress stop failed", {
199
+ channel: entry.channel,
200
+ error: error instanceof Error ? error.message : String(error)
201
+ });
202
+ }
203
+ }
204
+ }
205
+ };
206
+ }
207
+ function runOptionsFromChannelTurn(turn) {
208
+ const runOptions = {
209
+ message: turn.message,
210
+ channel: turn.channel,
211
+ turn
212
+ };
213
+ if (turn.model)
214
+ runOptions.model = turn.model;
215
+ if (turn.recentHistory)
216
+ runOptions.recentHistory = turn.recentHistory;
217
+ if (turn.attachments)
218
+ runOptions.attachments = turn.attachments;
219
+ if (turn.metadata)
220
+ runOptions.metadata = turn.metadata;
221
+ return runOptions;
222
+ }
223
+ /**
224
+ * Load a channel module, preferring named exports and falling back to the
225
+ * default export so a one-line `export default definePhotonChannel()` wires
226
+ * the full lifecycle.
227
+ */
228
+ export async function loadChannelModuleImpl(loadModule, channel) {
229
+ const loaded = await loadModule(channel.source);
230
+ const fallback = loaded.default ?? {};
231
+ const resolved = {};
232
+ const normalizeHttp = loaded.normalizeHttp ?? fallback.normalizeHttp;
233
+ const startIngress = loaded.startIngress ?? fallback.startIngress;
234
+ const startTurn = loaded.startTurn ?? fallback.startTurn;
235
+ const augmentContext = loaded.augmentContext ?? fallback.augmentContext;
236
+ const send = loaded.send ?? fallback.send;
237
+ const resolveAttachment = loaded.resolveAttachment ?? fallback.resolveAttachment;
238
+ const ingressAuth = loaded.ingressAuth ?? fallback.ingressAuth;
239
+ if (normalizeHttp)
240
+ resolved.normalizeHttp = normalizeHttp;
241
+ if (startIngress)
242
+ resolved.startIngress = startIngress;
243
+ if (startTurn)
244
+ resolved.startTurn = startTurn;
245
+ if (augmentContext)
246
+ resolved.augmentContext = augmentContext;
247
+ if (send)
248
+ resolved.send = send;
249
+ if (resolveAttachment)
250
+ resolved.resolveAttachment = resolveAttachment;
251
+ if (ingressAuth)
252
+ resolved.ingressAuth = ingressAuth;
253
+ return resolved;
254
+ }
255
+ /**
256
+ * Bind the turn channel's `resolveAttachment` for attachment intake.
257
+ * Trust boundary: only the module of the channel that produced the turn is
258
+ * consulted, and only when the turn's trusted provider matches that channel's
259
+ * provider — a hostile attachment claiming another provider can never route
260
+ * to that provider's credentials.
261
+ */
262
+ export async function channelAttachmentResolverImpl(host, channel, trustedProvider) {
263
+ if (!channel || !trustedProvider || host.channelProvider(channel) !== trustedProvider)
264
+ return undefined;
265
+ const module = await host.loadChannelModule(channel)
266
+ .catch(host.warnSwallow("channel module load failed for attachment resolution", { channel: channel.name }));
267
+ const resolveAttachment = module?.resolveAttachment;
268
+ if (!resolveAttachment)
269
+ return undefined;
270
+ const ctx = host.channelContext(channel);
271
+ return async (attachment) => resolveAttachment(attachment, ctx);
272
+ }
273
+ //# sourceMappingURL=channel-ingress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-ingress.js","sourceRoot":"","sources":["../src/channel-ingress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import type { AutomationEvent, CompiledChannel, JsonObject } from "@assemblyline-agents/core";
2
+ import type { AutomationEventDispatchResult } from "./runtime-types.js";
3
+ import type { BlobAdapter, StateAdapter } from "./index.js";
4
+ export interface ChannelTurn {
5
+ eventId: string;
6
+ channel: string;
7
+ conversationId: string;
8
+ userId?: string;
9
+ model?: string;
10
+ message: string;
11
+ attachments?: JsonObject[];
12
+ delivery?: JsonObject;
13
+ metadata?: JsonObject;
14
+ recentHistory?: string[];
15
+ }
16
+ export interface ChannelHttpRequest {
17
+ method: string;
18
+ url: string;
19
+ path: string;
20
+ params: Record<string, string>;
21
+ headers: Record<string, string>;
22
+ rawBody: string;
23
+ rawBodyBytes?: Uint8Array;
24
+ body: JsonObject;
25
+ trusted?: boolean;
26
+ }
27
+ export type ChannelHttpResponseBody = JsonObject | string | Uint8Array;
28
+ export interface ChannelHttpResponse {
29
+ status: number;
30
+ body: ChannelHttpResponseBody;
31
+ headers?: Record<string, string>;
32
+ }
33
+ export type ChannelHttpResult = {
34
+ kind: "run";
35
+ turn: ChannelTurn;
36
+ } | {
37
+ kind: "accepted";
38
+ turn: ChannelTurn;
39
+ status?: number;
40
+ body?: JsonObject;
41
+ idempotencyKey?: string;
42
+ idempotencyScope?: string;
43
+ } | {
44
+ kind: "event";
45
+ event: AutomationEvent;
46
+ status?: number;
47
+ body?: JsonObject;
48
+ } | {
49
+ kind: "response";
50
+ status: number;
51
+ body: ChannelHttpResponseBody;
52
+ headers?: Record<string, string>;
53
+ } | {
54
+ kind: "ignored";
55
+ status?: number;
56
+ body?: ChannelHttpResponseBody;
57
+ headers?: Record<string, string>;
58
+ };
59
+ export interface ChannelDelivery {
60
+ id: string;
61
+ runId: string;
62
+ channel: string;
63
+ response: string;
64
+ payload: JsonObject;
65
+ idempotencyKey: string;
66
+ turn?: ChannelTurn;
67
+ }
68
+ export interface ChannelContext {
69
+ channel: CompiledChannel;
70
+ agentScope: string;
71
+ connections: Record<string, unknown>;
72
+ env: Record<string, string | undefined>;
73
+ fetch: typeof fetch;
74
+ state: StateAdapter;
75
+ blob: BlobAdapter;
76
+ }
77
+ export interface ChannelTurnLifecycle {
78
+ stop?: () => Promise<JsonObject | void> | JsonObject | void;
79
+ }
80
+ export interface ChannelAcceptedTurn {
81
+ turn: ChannelTurn;
82
+ idempotencyKey?: string;
83
+ idempotencyScope?: string;
84
+ }
85
+ export interface ChannelAcceptedTurnResult {
86
+ accepted: boolean;
87
+ idempotentReplay: boolean;
88
+ eventId: string;
89
+ /**
90
+ * Set when the turn was rejected without consuming its idempotency key —
91
+ * the provider can redeliver the same event once capacity frees up.
92
+ */
93
+ rejected?: "capacity" | "disabled";
94
+ /** Suggested client backoff before retrying (pairs with `rejected`). */
95
+ retryAfterMs?: number;
96
+ }
97
+ export interface ChannelIngressEmitter {
98
+ accepted(input: ChannelAcceptedTurn): Promise<ChannelAcceptedTurnResult>;
99
+ automation(event: AutomationEvent): Promise<AutomationEventDispatchResult[]>;
100
+ event(type: string, payload?: JsonObject): Promise<void> | void;
101
+ }
102
+ export interface ChannelIngressLifecycle {
103
+ stop?: () => Promise<JsonObject | void> | JsonObject | void;
104
+ }
105
+ export interface RuntimeChannelIngressController {
106
+ channels: string[];
107
+ stop(): Promise<void>;
108
+ }
109
+ export interface ChannelIngressAuthDescriptor {
110
+ /**
111
+ * Any-of groups of env var names: production ingress auth is satisfied when
112
+ * every var in at least one group is set (e.g. `[["TELEGRAM_WEBHOOK_SECRET"]]`
113
+ * or `[["PHOTON_WEBHOOK_SIGNING_SECRET"], ["PHOTON_INGRESS_TOKEN"]]`).
114
+ */
115
+ requiredSecretEnv?: string[][];
116
+ }
117
+ /** A resolved attachment download the runtime performs on the channel's behalf. */
118
+ export interface ChannelAttachmentRequest {
119
+ url: string;
120
+ headers: Record<string, string>;
121
+ filename?: string;
122
+ }
123
+ export interface ChannelModule {
124
+ normalizeHttp?: (request: ChannelHttpRequest, ctx: ChannelContext) => Promise<ChannelHttpResult> | ChannelHttpResult;
125
+ startIngress?: (ctx: ChannelContext, emit: ChannelIngressEmitter) => Promise<ChannelIngressLifecycle | void> | ChannelIngressLifecycle | void;
126
+ startTurn?: (turn: ChannelTurn, ctx: ChannelContext) => Promise<ChannelTurnLifecycle | void> | ChannelTurnLifecycle | void;
127
+ augmentContext?: (turn: ChannelTurn, ctx: ChannelContext) => Promise<{
128
+ recentHistory?: string[];
129
+ channelContext?: JsonObject;
130
+ } | void> | {
131
+ recentHistory?: string[];
132
+ channelContext?: JsonObject;
133
+ } | void;
134
+ send?: (delivery: ChannelDelivery, ctx: ChannelContext) => Promise<JsonObject | void> | JsonObject | void;
135
+ /** Ingress-auth secrets this channel requires in production (mirrors `ChannelDefinition.ingress`). */
136
+ ingressAuth?: ChannelIngressAuthDescriptor;
137
+ /**
138
+ * Resolve a turn attachment this channel produced into a download request
139
+ * (URL + auth headers). The runtime only consults the module of the channel
140
+ * that produced the turn, so credentials never cross channels. Return
141
+ * `undefined` to fall back to the runtime's generic, unauthenticated URL
142
+ * download.
143
+ */
144
+ resolveAttachment?: (attachment: JsonObject, ctx: ChannelContext) => Promise<ChannelAttachmentRequest | undefined> | ChannelAttachmentRequest | undefined;
145
+ }
146
+ //# sourceMappingURL=channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import type { JsonObject } from "@assemblyline-agents/core";
2
+ import type { CheckpointRetentionResult } from "./state.js";
3
+ export interface CheckpointRetentionPolicy {
4
+ maxActivePerRunName?: number;
5
+ terminalTtlMs?: number;
6
+ failedRunTtlMs?: number;
7
+ scheduledRunTtlMs?: number;
8
+ blobThresholdBytes?: number;
9
+ }
10
+ export type ResolvedCheckpointRetentionPolicy = Required<CheckpointRetentionPolicy>;
11
+ export interface CheckpointBlobAdapter {
12
+ put(key: string, value: string | Uint8Array, contentTypeOrOptions?: string | {
13
+ contentType?: string;
14
+ visibility?: "private" | "public";
15
+ }): Promise<{
16
+ key: string;
17
+ size: number;
18
+ }>;
19
+ get(key: string): Promise<Uint8Array | undefined>;
20
+ }
21
+ export declare const COMPACTABLE_ACTIVE_CHECKPOINT_NAMES: string[];
22
+ export declare const CHECKPOINT_BLOB_POINTER_KEY = "__openeveCheckpointBlob";
23
+ export declare function resolveCheckpointRetentionPolicy(policy: CheckpointRetentionPolicy | undefined, env: Record<string, string | undefined>): ResolvedCheckpointRetentionPolicy;
24
+ export declare function checkpointDataForStorage(input: {
25
+ blob: CheckpointBlobAdapter;
26
+ enabled: boolean;
27
+ thresholdBytes: number;
28
+ runId: string;
29
+ name: string;
30
+ data: JsonObject;
31
+ }): Promise<JsonObject>;
32
+ export declare function hydrateCheckpointData(data: JsonObject, blob: CheckpointBlobAdapter): Promise<JsonObject>;
33
+ export declare function emptyCheckpointRetentionResult(dryRun: boolean): CheckpointRetentionResult;
34
+ //# sourceMappingURL=checkpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../src/checkpoints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,iCAAiC,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AAEpF,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;QACjJ,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CACnD;AAQD,eAAO,MAAM,mCAAmC,UAA2B,CAAC;AAC5E,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AAErE,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,yBAAyB,GAAG,SAAS,EAC7C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,iCAAiC,CAyBnC;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBtB;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAS9G;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,GAAG,yBAAyB,CAYzF"}
@@ -0,0 +1,86 @@
1
+ import { createHash } from "node:crypto";
2
+ import { gzipSync, gunzipSync } from "node:zlib";
3
+ import { boundedPositiveIntEnv, resolvePositiveIntegerEnv } from "./env-config.js";
4
+ const DEFAULT_CHECKPOINT_MAX_ACTIVE_PER_RUN_NAME = 2;
5
+ const DEFAULT_CHECKPOINT_TERMINAL_TTL_MS = 7 * 24 * 60 * 60_000;
6
+ const DEFAULT_CHECKPOINT_FAILED_TTL_MS = 14 * 24 * 60 * 60_000;
7
+ const DEFAULT_CHECKPOINT_SCHEDULED_TTL_MS = 24 * 60 * 60_000;
8
+ const DEFAULT_CHECKPOINT_BLOB_THRESHOLD_BYTES = 64 * 1024;
9
+ export const COMPACTABLE_ACTIVE_CHECKPOINT_NAMES = ["harness.continuation"];
10
+ export const CHECKPOINT_BLOB_POINTER_KEY = "__openeveCheckpointBlob";
11
+ export function resolveCheckpointRetentionPolicy(policy, env) {
12
+ return {
13
+ maxActivePerRunName: positiveNumber(policy?.maxActivePerRunName, boundedPositiveIntEnv(env.OPENEVE_CHECKPOINT_MAX_ACTIVE_PER_RUN_NAME, DEFAULT_CHECKPOINT_MAX_ACTIVE_PER_RUN_NAME, 1, 50)),
14
+ terminalTtlMs: positiveNumber(policy?.terminalTtlMs, resolvePositiveIntegerEnv(env.OPENEVE_CHECKPOINT_TERMINAL_TTL_MS, DEFAULT_CHECKPOINT_TERMINAL_TTL_MS)),
15
+ failedRunTtlMs: positiveNumber(policy?.failedRunTtlMs, resolvePositiveIntegerEnv(env.OPENEVE_CHECKPOINT_FAILED_TTL_MS, DEFAULT_CHECKPOINT_FAILED_TTL_MS)),
16
+ scheduledRunTtlMs: positiveNumber(policy?.scheduledRunTtlMs, resolvePositiveIntegerEnv(env.OPENEVE_CHECKPOINT_SCHEDULED_TTL_MS, DEFAULT_CHECKPOINT_SCHEDULED_TTL_MS)),
17
+ blobThresholdBytes: positiveNumber(policy?.blobThresholdBytes, resolvePositiveIntegerEnv(env.OPENEVE_CHECKPOINT_BLOB_THRESHOLD_BYTES, DEFAULT_CHECKPOINT_BLOB_THRESHOLD_BYTES))
18
+ };
19
+ }
20
+ export async function checkpointDataForStorage(input) {
21
+ if (!input.enabled)
22
+ return input.data;
23
+ const json = JSON.stringify(input.data);
24
+ const sizeBytes = Buffer.byteLength(json);
25
+ if (sizeBytes < input.thresholdBytes)
26
+ return input.data;
27
+ const compressed = gzipSync(Buffer.from(json));
28
+ const sha256 = createHash("sha256").update(json).digest("hex");
29
+ const blob = await input.blob.put(`checkpoints/sha256/${sha256}.json.gz`, compressed, "application/gzip");
30
+ return {
31
+ [CHECKPOINT_BLOB_POINTER_KEY]: {
32
+ version: 1,
33
+ runId: input.runId,
34
+ name: input.name,
35
+ blobKey: blob.key,
36
+ sha256,
37
+ sizeBytes,
38
+ compressedSizeBytes: blob.size,
39
+ compression: "gzip",
40
+ contentType: "application/json"
41
+ }
42
+ };
43
+ }
44
+ export async function hydrateCheckpointData(data, blob) {
45
+ const pointer = checkpointBlobPointer(data);
46
+ if (!pointer)
47
+ return data;
48
+ const bytes = await blob.get(pointer.blobKey);
49
+ if (!bytes)
50
+ throw new Error(`Checkpoint blob not found: ${pointer.blobKey}`);
51
+ const json = Buffer.from(gunzipSync(Buffer.from(bytes))).toString("utf8");
52
+ const sha256 = createHash("sha256").update(json).digest("hex");
53
+ if (sha256 !== pointer.sha256)
54
+ throw new Error(`Checkpoint blob hash mismatch for ${pointer.blobKey}.`);
55
+ return JSON.parse(JSON.stringify(JSON.parse(json) ?? null));
56
+ }
57
+ export function emptyCheckpointRetentionResult(dryRun) {
58
+ return {
59
+ dryRun,
60
+ candidateRows: 0,
61
+ candidateBytes: 0,
62
+ prunedRows: 0,
63
+ prunedBytes: 0,
64
+ byReason: {
65
+ active_compaction: { rows: 0, bytes: 0 },
66
+ terminal_ttl: { rows: 0, bytes: 0 }
67
+ }
68
+ };
69
+ }
70
+ function positiveNumber(value, fallback) {
71
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
72
+ }
73
+ function checkpointBlobPointer(data) {
74
+ const pointer = data[CHECKPOINT_BLOB_POINTER_KEY];
75
+ if (!isJsonObject(pointer))
76
+ return undefined;
77
+ if (pointer.version !== 1)
78
+ return undefined;
79
+ if (typeof pointer.blobKey !== "string" || typeof pointer.sha256 !== "string")
80
+ return undefined;
81
+ return { blobKey: pointer.blobKey, sha256: pointer.sha256 };
82
+ }
83
+ function isJsonObject(value) {
84
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
85
+ }
86
+ //# sourceMappingURL=checkpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../src/checkpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type AgentManifest, type CompiledTool, type JsonObject, type ToolDefinition } from "@openeve/core";
2
+ export declare const READ_TOOL_NAME = "read";
3
+ export declare const WRITE_TOOL_NAME = "write";
4
+ export declare const EDIT_TOOL_NAME = "edit";
5
+ export declare const DELETE_TOOL_NAME = "delete";
6
+ export declare const LIST_TOOL_NAME = "list";
7
+ export declare const GREP_TOOL_NAME = "grep";
8
+ export declare const BASH_TOOL_NAME = "bash";
9
+ export declare const ASK_QUESTION_TOOL_NAME = "ask_question";
10
+ export declare const SPAWN_SUBAGENT_TOOL_NAME = "spawn_subagent";
11
+ export declare const LOAD_SKILL_TOOL_NAME = "load_skill";
12
+ export declare const TOOL_SEARCH_TOOL_NAME = "tool_search";
13
+ export declare const TOOL_DESCRIBE_TOOL_NAME = "tool_describe";
14
+ export declare const TOOL_CALL_TOOL_NAME = "tool_call";
15
+ export declare const CORE_HARNESS_TOOL_NAMES: readonly ["read", "write", "edit", "delete", "list", "grep", "bash", "ask_question", "spawn_subagent", "load_skill", "tool_search", "tool_describe", "tool_call"];
16
+ export declare function runtimeToolsForManifest(manifest: AgentManifest): CompiledTool[];
17
+ export declare function builtInToolDefinition(name: string): ToolDefinition | undefined;
18
+ export declare function isBuiltInToolName(name: string): boolean;
19
+ export declare function builtInToolContext(tool: CompiledTool): JsonObject | undefined;
20
+ //# sourceMappingURL=code-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-mode.d.ts","sourceRoot":"","sources":["../src/code-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,UAAU,EAKf,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,sBAAsB,iBAAiB,CAAC;AACrD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AACvD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,eAAO,MAAM,uBAAuB,mKAc1B,CAAC;AAyUX,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,YAAY,EAAE,CAK/E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAe9E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAkRD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,CAM7E"}