@desplega.ai/agent-swarm 1.149.1 → 1.151.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 (538) hide show
  1. package/README.md +18 -3
  2. package/dist/{acp-adapter-vhkzfpjg.js → acp-adapter-ex8hzjfc.js} +5 -5
  3. package/dist/{actions-9d2694yk.js → actions-2bgpyhww.js} +39 -11
  4. package/dist/{app-fq2ggynt.js → app-1706zhr1.js} +7 -7
  5. package/dist/{artifact-gj9arwrr.js → artifact-td4q4dch.js} +1 -1
  6. package/dist/{assistant-edb6n9nn.js → assistant-bavke5p7.js} +44 -20
  7. package/dist/{azure-openai-responses-cqar64rc.js → azure-openai-responses-f38x2avq.js} +13 -13
  8. package/dist/{boot-reembed-msweabbp.js → boot-reembed-3cmrrmpa.js} +9 -9
  9. package/dist/{boot-reembed-q5wd3tha.js → boot-reembed-nafcmmmc.js} +14 -16
  10. package/dist/{boot-scrub-logs-3g1az933.js → boot-scrub-logs-cd6a2sq0.js} +5 -5
  11. package/dist/{claude-adapter-v3rnzsdc.js → claude-adapter-wfp2gzvz.js} +15 -16
  12. package/dist/{claude-managed-adapter-qvsmh6mv.js → claude-managed-adapter-dsmkcrjy.js} +3 -3
  13. package/dist/{claude-sdk-session-qxrpsna1.js → claude-sdk-session-bht9jjak.js} +15 -16
  14. package/dist/{cli-5m0qmvdp.js → cli-0qb1z6s2.js} +1 -1
  15. package/dist/{cli-9d8ntetj.js → cli-2658f6at.js} +1 -1
  16. package/dist/{cli-7evafqvy.js → cli-2tbvf1z1.js} +85 -69
  17. package/dist/{cli-k351hv5k.js → cli-3v9xhjcn.js} +24 -12
  18. package/dist/{cli-1ebpar1q.js → cli-4wppfkcm.js} +350 -20
  19. package/dist/{cli-4260r1tg.js → cli-5jd2z7av.js} +97 -84
  20. package/dist/{cli-cv7s5zdq.js → cli-5tpgq60f.js} +9865 -715
  21. package/dist/{cli-6skz3rk8.js → cli-7tgcstn2.js} +9 -4
  22. package/dist/{cli-01g3x1ca.js → cli-9004vfdf.js} +108 -56
  23. package/dist/{cli-1c94wvcw.js → cli-a1z3h107.js} +124 -99
  24. package/dist/{cli-9br8ypfv.js → cli-czjtgfys.js} +2 -2
  25. package/dist/{cli-5my3bjsd.js → cli-d3p82erb.js} +7 -7
  26. package/dist/{cli-e29gmdmw.js → cli-dv6cdjs2.js} +2 -1
  27. package/dist/{cli-wby1xnnb.js → cli-f1wky6zp.js} +1 -1
  28. package/dist/{cli-zvz62chv.js → cli-fm4ytsdk.js} +4 -4
  29. package/dist/{cli-tg8qj8ee.js → cli-frcta2w4.js} +6 -6
  30. package/dist/{cli-7xx10h0a.js → cli-g69fdc9g.js} +2 -2
  31. package/dist/{cli-cmp8g3sw.js → cli-gbfwcd3k.js} +44 -9
  32. package/dist/{handlers-nsg0bcye.js → cli-gjyvhmmh.js} +97 -45
  33. package/dist/{cli-08b07b4r.js → cli-ht5rs63n.js} +1 -1
  34. package/dist/{cli-jecc01cb.js → cli-j4nv2wqy.js} +2 -4
  35. package/dist/{cli-cd60fv6j.js → cli-j9xczhaq.js} +1 -1
  36. package/dist/cli-pf9q3696.js +172 -0
  37. package/dist/{cli-xm87hzbw.js → cli-pgj4a5fb.js} +1 -1
  38. package/dist/{cli-jezx9b9c.js → cli-ppm4975n.js} +9 -3
  39. package/dist/{cli-3z634pqe.js → cli-q88st9aj.js} +2 -2
  40. package/dist/{cli-3sysyjve.js → cli-r2q6pevn.js} +142 -49
  41. package/dist/{cli-07jd68a1.js → cli-re8z5p8p.js} +1 -1
  42. package/dist/{cli-qgd4sqz5.js → cli-s14agm5s.js} +121 -14
  43. package/dist/{cli-svbrpf5q.js → cli-sjaae6ff.js} +9872 -424
  44. package/dist/{cli-73gq0zxn.js → cli-vwm416m6.js} +13 -13
  45. package/dist/{cli-4wtq5jjv.js → cli-wbyk465z.js} +1 -1
  46. package/dist/{cli-3apbzgyk.js → cli-z61ykvam.js} +19 -14
  47. package/dist/{cli-e06a8a7y.js → cli-zkxymas5.js} +4 -3
  48. package/dist/cli.js +26 -25
  49. package/dist/{codex-adapter-jyw7a91z.js → codex-adapter-jjjk8w4m.js} +8 -9
  50. package/dist/{codex-hook-hfrt9shr.js → codex-hook-8jexc34x.js} +3 -3
  51. package/dist/{codex-session-runner-bmngj0s5.js → codex-session-runner-nd6ayxkx.js} +8 -9
  52. package/dist/{commands-n755g391.js → commands-9v4psyq1.js} +5 -5
  53. package/dist/{db-s1cgh5gv.js → db-wnt58tpe.js} +5 -5
  54. package/dist/dispatcher-05jh1aqk.js +74 -0
  55. package/dist/{e2b-p04vmtx0.js → e2b-413b8t4v.js} +1 -1
  56. package/dist/{google-generative-ai-tsskx7te.js → google-generative-ai-ndjmj5fa.js} +7 -7
  57. package/dist/{google-vertex-ppw8ydpa.js → google-vertex-fr665tqs.js} +10 -10
  58. package/dist/handlers-tw90pkh5.js +65 -0
  59. package/dist/{hook-jf0xe8zh.js → hook-123e2scb.js} +11 -12
  60. package/dist/{hook-h9cqrm8q.js → hook-sxe3r349.js} +11 -12
  61. package/dist/{http-nc6pydw5.js → http-ecsar8ez.js} +1442 -581
  62. package/dist/{index-ezxkds2n.js → index-16js521z.js} +335 -107
  63. package/dist/{index-769nc012.js → index-hw26vj40.js} +25 -19
  64. package/dist/{index-0wdy6gwc.js → index-nnrbpcjp.js} +25 -17
  65. package/dist/index-ymn7em0p.js +25 -0
  66. package/dist/{index-x1zcj09z.js → index-zj518gf9.js} +26 -20
  67. package/dist/{keepalive-nesm3xb6.js → keepalive-asqtcm4y.js} +7 -7
  68. package/dist/{lead-bwy6t2za.js → lead-xbfr7fvt.js} +40 -48
  69. package/dist/{maintenance-8w393zf0.js → maintenance-qma55qvw.js} +9 -9
  70. package/dist/{oauth-refresh-sweep-sh8xjy08.js → oauth-refresh-sweep-3s04c6qw.js} +6 -6
  71. package/dist/{onboard-25ps29h1.js → onboard-drskd386.js} +13 -4
  72. package/dist/{openai-codex-responses-g7w48y30.js → openai-codex-responses-wy6a43wd.js} +13 -13
  73. package/dist/{openai-responses-nmeyptke.js → openai-responses-6xwf7bzg.js} +19 -19
  74. package/dist/{opencode-adapter-dce4wskd.js → opencode-adapter-28axqa09.js} +4 -4
  75. package/dist/{otel-impl-b93gxnz5.js → otel-impl-943c96er.js} +1 -1
  76. package/dist/{pi-mono-adapter-zvshk5cj.js → pi-mono-adapter-jcqt71cg.js} +17 -19
  77. package/dist/{pricing-refresh-5v56x7gb.js → pricing-refresh-mx51az05.js} +7 -7
  78. package/dist/{rbac-roles-x55cnezn.js → rbac-roles-78baecqd.js} +13 -9
  79. package/dist/{rbac-roles-0p0s6pbj.js → rbac-roles-wcmrg6sv.js} +7 -7
  80. package/dist/{render-v2-hyd45w8b.js → render-v2-8zjntgf5.js} +7 -7
  81. package/dist/{seed-pricing-49gbgn96.js → seed-pricing-jqjs6cws.js} +6 -6
  82. package/dist/{setup-qvq64vzq.js → setup-4pks0vfk.js} +2 -2
  83. package/dist/work-objects-wangt792.js +165 -0
  84. package/dist/{worker-scj60cxg.js → worker-p2mr422x.js} +40 -48
  85. package/openapi.json +1365 -268
  86. package/package.json +4 -3
  87. package/src/agentmail/handlers.ts +95 -66
  88. package/src/be/budget-refusal-notify.ts +1 -0
  89. package/src/be/db/tasks/read.ts +3 -0
  90. package/src/be/db/tasks/write.ts +13 -1
  91. package/src/be/db-client.ts +5 -0
  92. package/src/be/db.ts +15 -5
  93. package/src/be/extensions/db.ts +461 -0
  94. package/src/be/extensions/validate.ts +107 -0
  95. package/src/be/memory/boot-reembed.ts +17 -12
  96. package/src/be/memory/index.ts +12 -0
  97. package/src/be/memory/providers/openai-embedding.ts +4 -0
  98. package/src/be/memory/types.ts +2 -0
  99. package/src/be/migrations/153_deferred_task_wait_members.sql +25 -0
  100. package/src/be/migrations/154_routing_source.sql +3 -0
  101. package/src/be/migrations/155_extensions.sql +66 -0
  102. package/src/be/migrations/156_inbox_item_state_read_at.sql +7 -0
  103. package/src/be/rbac-roles.ts +3 -2
  104. package/src/be/scripts/typecheck.ts +59 -41
  105. package/src/be/seed/schedules-seeder.ts +25 -2
  106. package/src/be/seed/workflows-seeder.ts +17 -0
  107. package/src/be/seed-scripts/catalog/delegate.ts +3 -1
  108. package/src/be/seed-skills/bundled-files.generated.json +1 -1
  109. package/src/be/seed-skills/index.ts +7 -0
  110. package/src/be/steering.ts +1 -0
  111. package/src/be/swarm-config-guard.ts +3 -1
  112. package/src/commands/credential-refresh.ts +70 -0
  113. package/src/commands/onboard/compose-generator.ts +14 -2
  114. package/src/commands/onboard/env-generator.ts +7 -0
  115. package/src/commands/provider-credentials.ts +2 -25
  116. package/src/commands/runner.ts +24 -57
  117. package/src/extensions/apply-task-create.ts +135 -0
  118. package/src/extensions/bundle-path.ts +10 -0
  119. package/src/extensions/contract-runtime.ts +7 -0
  120. package/src/extensions/contract-types.generated.ts +4 -0
  121. package/src/extensions/contract.ts +270 -0
  122. package/src/extensions/ctx.ts +186 -0
  123. package/src/extensions/dispatcher.ts +479 -0
  124. package/src/extensions/identity.ts +44 -0
  125. package/src/extensions/lifecycle.ts +281 -0
  126. package/src/extensions/loader.ts +207 -0
  127. package/src/extensions/post-bridge.ts +161 -0
  128. package/src/github/handlers.ts +185 -140
  129. package/src/gitlab/handlers.ts +97 -77
  130. package/src/heartbeat/heartbeat.ts +155 -83
  131. package/src/http/agents.ts +1 -1
  132. package/src/http/all-routes.ts +1 -0
  133. package/src/http/approval-requests.ts +1 -0
  134. package/src/http/apps.ts +14 -9
  135. package/src/http/config.ts +4 -1
  136. package/src/http/core.ts +38 -2
  137. package/src/http/extensions.ts +547 -0
  138. package/src/http/inbox-state.ts +2 -0
  139. package/src/http/index.ts +41 -3
  140. package/src/http/mcp-bridge.ts +96 -62
  141. package/src/http/mcp.ts +1 -1
  142. package/src/http/script-runs.ts +5 -0
  143. package/src/http/status.ts +6 -4
  144. package/src/http/tasks.ts +51 -30
  145. package/src/integrations/kapso/inbound.ts +15 -10
  146. package/src/jira/sync.ts +26 -16
  147. package/src/linear/sync.ts +26 -16
  148. package/src/prompts/session-templates.ts +18 -13
  149. package/src/providers/claude-adapter.ts +21 -8
  150. package/src/rbac/admission.ts +1 -1
  151. package/src/rbac/elevated-agents.ts +24 -0
  152. package/src/rbac/legacy-policy.ts +35 -6
  153. package/src/rbac/permissions.ts +8 -0
  154. package/src/scheduler/deferred-task-waits.ts +138 -27
  155. package/src/scheduler/schedule-task.ts +54 -24
  156. package/src/scheduler/scheduler.ts +108 -125
  157. package/src/scripts-runtime/executors/native.ts +5 -1
  158. package/src/scripts-runtime/executors/types.ts +5 -0
  159. package/src/scripts-runtime/import-allowlist.ts +79 -19
  160. package/src/scripts-runtime/sdk-allowlist.ts +4 -0
  161. package/src/scripts-runtime/swarm-config.ts +8 -0
  162. package/src/scripts-runtime/swarm-sdk.ts +3 -0
  163. package/src/scripts-runtime/types/stdlib.d.ts +16 -3
  164. package/src/scripts-runtime/types/swarm-extension.d.ts +562 -0
  165. package/src/scripts-runtime/types/swarm-sdk.d.ts +16 -3
  166. package/src/server.ts +6 -0
  167. package/src/slack/HEURISTICS.md +3 -1
  168. package/src/slack/actions.ts +21 -16
  169. package/src/slack/app.ts +2 -0
  170. package/src/slack/assistant.ts +4 -12
  171. package/src/slack/blocks.ts +1 -1
  172. package/src/slack/handlers.ts +107 -19
  173. package/src/slack/inbound-files.ts +9 -5
  174. package/src/slack/render-v2.ts +188 -38
  175. package/src/slack/router.ts +13 -3
  176. package/src/slack/steering.ts +3 -3
  177. package/src/slack/thread-buffer.ts +66 -23
  178. package/src/slack/work-objects.test.ts +252 -0
  179. package/src/slack/work-objects.ts +118 -0
  180. package/src/tasks/errors.ts +9 -0
  181. package/src/tasks/sibling-awareness.ts +35 -1
  182. package/src/tasks/worker-follow-up.ts +67 -11
  183. package/src/tests/acp-adapter.test.ts +10 -10
  184. package/src/tests/agent-fs-live-url.test.ts +40 -0
  185. package/src/tests/agent-fs-provision-seeder.test.ts +12 -12
  186. package/src/tests/api-key-tracking.test.ts +18 -18
  187. package/src/tests/api-key.test.ts +4 -2
  188. package/src/tests/apps-rbac.test.ts +1 -1
  189. package/src/tests/apps-spike5.test.ts +1 -1
  190. package/src/tests/apps-sync-engine.test.ts +8 -8
  191. package/src/tests/apps-user-config.test.ts +1 -1
  192. package/src/tests/artifact-sdk.test.ts +8 -8
  193. package/src/tests/asset-key-mcp.test.ts +2 -0
  194. package/src/tests/automation-preflight-alert.test.ts +1 -1
  195. package/src/tests/base-prompt.test.ts +7 -6
  196. package/src/tests/budget-user-scope.test.ts +1 -1
  197. package/src/tests/budgets-routes.test.ts +1 -1
  198. package/src/tests/claude-adapter-binary.test.ts +22 -40
  199. package/src/tests/claude-adapter-otel.test.ts +13 -7
  200. package/src/tests/claude-adapter.test.ts +8 -6
  201. package/src/tests/claude-hook-credentials.test.ts +3 -3
  202. package/src/tests/claude-managed-adapter.test.ts +4 -4
  203. package/src/tests/claude-managed-setup.test.ts +3 -3
  204. package/src/tests/claude-sdk-lifecycle.test.ts +1 -1
  205. package/src/tests/claude-sdk-transport.test.ts +6 -6
  206. package/src/tests/claude-stop-hook.test.ts +8 -8
  207. package/src/tests/claude-worker-parity.test.ts +3 -3
  208. package/src/tests/codex-adapter-pool-auth-revalidate.test.ts +5 -5
  209. package/src/tests/codex-adapter.test.ts +7 -5
  210. package/src/tests/codex-app-server.test.ts +2 -2
  211. package/src/tests/codex-login.test.ts +15 -15
  212. package/src/tests/codex-oauth-credential-info.test.ts +4 -4
  213. package/src/tests/codex-oauth-keep-warm.test.ts +4 -4
  214. package/src/tests/codex-oauth-refresh-lock.test.ts +1 -1
  215. package/src/tests/codex-oauth-storage.test.ts +7 -7
  216. package/src/tests/codex-pool.test.ts +1 -1
  217. package/src/tests/codex-steering-hook.test.ts +1 -1
  218. package/src/tests/codex-swarm-events.test.ts +1 -1
  219. package/src/tests/config-api-only-keys.test.ts +1 -1
  220. package/src/tests/config-session-auth.test.ts +2 -2
  221. package/src/tests/connection-embedded-auth.test.ts +20 -18
  222. package/src/tests/core-auth.test.ts +1 -1
  223. package/src/tests/create-page-tool.test.ts +3 -3
  224. package/src/tests/credential-refresh.test.ts +115 -0
  225. package/src/tests/credential-wait.test.ts +2 -2
  226. package/src/tests/credentials.test.ts +6 -4
  227. package/src/tests/db-queries-oauth.test.ts +40 -40
  228. package/src/tests/defer-task.test.ts +73 -8
  229. package/src/tests/deferred-task-wait-migration.test.ts +64 -0
  230. package/src/tests/deferred-task-wake.test.ts +349 -8
  231. package/src/tests/devin-adapter.test.ts +1 -1
  232. package/src/tests/devin-api.test.ts +1 -1
  233. package/src/tests/docs-index-footprint.test.js +3 -3
  234. package/src/tests/e2b-dispatch.test.ts +21 -19
  235. package/src/tests/e2e-claude-transport.test.ts +3 -3
  236. package/src/tests/e2e-redact.test.ts +6 -6
  237. package/src/tests/ensure-token.test.ts +68 -68
  238. package/src/tests/entrypoint-api-readiness.test.ts +1 -1
  239. package/src/tests/entrypoint-codex-oauth-seed.test.ts +13 -13
  240. package/src/tests/env-flag.test.ts +1 -0
  241. package/src/tests/events-http.test.ts +1 -1
  242. package/src/tests/extensions-db.test.ts +216 -0
  243. package/src/tests/extensions-dispatcher.test.ts +275 -0
  244. package/src/tests/extensions-example-heartbeat-remediate.test.ts +69 -0
  245. package/src/tests/extensions-example-mcp-install.test.ts +63 -0
  246. package/src/tests/extensions-example-no-exclamation-marks.test.ts +72 -0
  247. package/src/tests/extensions-example-rewrite-and-suppress.test.ts +70 -0
  248. package/src/tests/extensions-example-route-slack-channel.test.ts +217 -0
  249. package/src/tests/extensions-heartbeat.test.ts +291 -0
  250. package/src/tests/extensions-http.test.ts +431 -0
  251. package/src/tests/extensions-lead-equivalence.test.ts +49 -0
  252. package/src/tests/extensions-lifecycle.test.ts +209 -0
  253. package/src/tests/extensions-loader.test.ts +95 -0
  254. package/src/tests/extensions-mcp-tools.test.ts +245 -0
  255. package/src/tests/extensions-pre-task.test.ts +487 -0
  256. package/src/tests/extensions-run-context.test.ts +41 -0
  257. package/src/tests/extensions-tool-call.test.ts +288 -0
  258. package/src/tests/extensions-validate.test.ts +196 -0
  259. package/src/tests/fixtures/extensions/bad-import/hooks.ts +8 -0
  260. package/src/tests/fixtures/extensions/bad-import/manifest.json +9 -0
  261. package/src/tests/fixtures/extensions/bad-return-shape/hooks.ts +10 -0
  262. package/src/tests/fixtures/extensions/bad-return-shape/manifest.json +9 -0
  263. package/src/tests/fixtures/extensions/block-tasks-from-source/hooks.ts +22 -0
  264. package/src/tests/fixtures/extensions/block-tasks-from-source/manifest.json +9 -0
  265. package/src/tests/fixtures/extensions/ignore-channel/hooks.ts +22 -0
  266. package/src/tests/fixtures/extensions/ignore-channel/manifest.json +9 -0
  267. package/src/tests/fixtures/extensions/load.ts +10 -0
  268. package/src/tests/fixtures/extensions/minimal/hooks.ts +7 -0
  269. package/src/tests/fixtures/extensions/minimal/manifest.json +9 -0
  270. package/src/tests/fixtures/extensions/never-fail-long-tasks/hooks.ts +11 -0
  271. package/src/tests/fixtures/extensions/never-fail-long-tasks/manifest.json +9 -0
  272. package/src/tests/fixtures/extensions/no-exclamation-marks/hooks.ts +23 -0
  273. package/src/tests/fixtures/extensions/no-exclamation-marks/manifest.json +9 -0
  274. package/src/tests/fixtures/extensions/post-logger/hooks.ts +9 -0
  275. package/src/tests/fixtures/extensions/post-logger/manifest.json +9 -0
  276. package/src/tests/fixtures/extensions/priority-a/hooks.ts +7 -0
  277. package/src/tests/fixtures/extensions/priority-a/manifest.json +9 -0
  278. package/src/tests/fixtures/extensions/priority-b/hooks.ts +7 -0
  279. package/src/tests/fixtures/extensions/priority-b/manifest.json +9 -0
  280. package/src/tests/fixtures/extensions/record-only-on-tag/hooks.ts +16 -0
  281. package/src/tests/fixtures/extensions/record-only-on-tag/manifest.json +9 -0
  282. package/src/tests/fixtures/extensions/reserved-assets/hooks.ts +5 -0
  283. package/src/tests/fixtures/extensions/reserved-assets/manifest.json +10 -0
  284. package/src/tests/fixtures/extensions/rewrite-progress-prefix/hooks.ts +22 -0
  285. package/src/tests/fixtures/extensions/rewrite-progress-prefix/manifest.json +9 -0
  286. package/src/tests/fixtures/extensions/rewrite-task-priority/hooks.ts +7 -0
  287. package/src/tests/fixtures/extensions/rewrite-task-priority/manifest.json +9 -0
  288. package/src/tests/fixtures/extensions/route-channel-to-agent/hooks.ts +26 -0
  289. package/src/tests/fixtures/extensions/route-channel-to-agent/manifest.json +9 -0
  290. package/src/tests/fixtures/extensions/slow/hooks.ts +10 -0
  291. package/src/tests/fixtures/extensions/slow/manifest.json +9 -0
  292. package/src/tests/fixtures/extensions/suppress-lead-follow-up/hooks.ts +12 -0
  293. package/src/tests/fixtures/extensions/suppress-lead-follow-up/manifest.json +9 -0
  294. package/src/tests/fixtures/extensions/throws/hooks.ts +12 -0
  295. package/src/tests/fixtures/extensions/throws/manifest.json +9 -0
  296. package/src/tests/fixtures/extensions/worker-runtime/hooks.ts +5 -0
  297. package/src/tests/fixtures/extensions/worker-runtime/manifest.json +9 -0
  298. package/src/tests/fs-routes.test.ts +1 -1
  299. package/src/tests/gitlab-auth.test.ts +10 -10
  300. package/src/tests/harness-provider-resolution.test.ts +8 -5
  301. package/src/tests/heartbeat-reroute-decision.test.ts +1 -0
  302. package/src/tests/helper-credentials.test.ts +137 -0
  303. package/src/tests/http/context-routes.test.ts +2 -2
  304. package/src/tests/http-api-integration.test.ts +5 -2
  305. package/src/tests/http-users.test.ts +1 -1
  306. package/src/tests/identity-refresh.test.ts +2 -2
  307. package/src/tests/internal-ai/complete-structured.test.ts +2 -2
  308. package/src/tests/internal-ai/credentials.test.ts +19 -17
  309. package/src/tests/jira-metadata.test.ts +1 -1
  310. package/src/tests/jira-oauth.test.ts +5 -5
  311. package/src/tests/jira-sync.test.ts +1 -1
  312. package/src/tests/jira-webhook-lifecycle.test.ts +3 -3
  313. package/src/tests/jira-webhook.test.ts +2 -2
  314. package/src/tests/kapso-inbound.test.ts +2 -2
  315. package/src/tests/kv-http.test.ts +1 -1
  316. package/src/tests/kv-namespace-resolution.test.ts +1 -1
  317. package/src/tests/kv-page-proxy.test.ts +2 -2
  318. package/src/tests/launch-password-rejection.test.ts +2 -2
  319. package/src/tests/linear-webhook.test.ts +1 -1
  320. package/src/tests/mcp-oauth-dcr-reuse.test.ts +6 -6
  321. package/src/tests/mcp-oauth-ensure-token.test.ts +28 -22
  322. package/src/tests/mcp-oauth-manual-client.test.ts +16 -12
  323. package/src/tests/mcp-oauth-queries.test.ts +35 -32
  324. package/src/tests/mcp-oauth-resolve-secrets.test.ts +8 -8
  325. package/src/tests/mcp-oauth-wrapper.test.ts +20 -20
  326. package/src/tests/mcp-user-route.test.ts +1 -1
  327. package/src/tests/memory-edges.test.ts +1 -1
  328. package/src/tests/memory-edit-authorization.test.ts +32 -0
  329. package/src/tests/memory-rate-endpoint.test.ts +1 -1
  330. package/src/tests/memory-rate-tool.test.ts +2 -2
  331. package/src/tests/memory-rater-e2e.test.ts +1 -1
  332. package/src/tests/memory-rater-llm-summarizer.test.ts +3 -3
  333. package/src/tests/memory-rater-llm.test.ts +1 -1
  334. package/src/tests/model-control.test.ts +3 -0
  335. package/src/tests/multi-runtime-enabled-stats.test.ts +2 -2
  336. package/src/tests/multi-runtime-registration.test.ts +111 -17
  337. package/src/tests/oauth-access-token-tool.test.ts +18 -18
  338. package/src/tests/oauth-callback-flow.test.ts +8 -8
  339. package/src/tests/oauth-credential-bindings.test.ts +29 -27
  340. package/src/tests/oauth-keepalive.test.ts +10 -10
  341. package/src/tests/oauth-presets.test.ts +13 -5
  342. package/src/tests/oauth-refresh-failure.test.ts +9 -9
  343. package/src/tests/oauth-refresh-sweep.test.ts +20 -13
  344. package/src/tests/oauth-wrapper.test.ts +1 -1
  345. package/src/tests/onboard-compose.test.ts +47 -3
  346. package/src/tests/onboard-env.test.ts +26 -26
  347. package/src/tests/onboard-non-interactive.test.ts +4 -4
  348. package/src/tests/opencode-adapter.test.ts +1 -1
  349. package/src/tests/opencode-plugin.test.ts +2 -2
  350. package/src/tests/otel-session-cost-metrics.test.ts +1 -1
  351. package/src/tests/page-proxy-authed.test.ts +2 -2
  352. package/src/tests/page-proxy.test.ts +2 -2
  353. package/src/tests/page-session.test.ts +7 -7
  354. package/src/tests/page-viewer-auth.test.ts +2 -2
  355. package/src/tests/pages-authed-mode.test.ts +1 -1
  356. package/src/tests/pages-http.test.ts +1 -1
  357. package/src/tests/pages-password-mode.test.ts +1 -1
  358. package/src/tests/pages-public-authed-401.test.ts +1 -1
  359. package/src/tests/pages-public-html.test.ts +2 -2
  360. package/src/tests/pages-view-count.test.ts +1 -1
  361. package/src/tests/pi-mono-adapter.test.ts +10 -10
  362. package/src/tests/pi-mono-extension.test.ts +2 -2
  363. package/src/tests/preload.ts +5 -0
  364. package/src/tests/pricing-routes.test.ts +1 -1
  365. package/src/tests/profile-sync-warning.test.ts +8 -8
  366. package/src/tests/profile-sync.test.ts +8 -8
  367. package/src/tests/prompt-template-session.test.ts +36 -5
  368. package/src/tests/provider-process-group.test.ts +95 -4
  369. package/src/tests/providers/pi-cost.test.ts +1 -1
  370. package/src/tests/queue-stall-alarm.test.ts +1 -1
  371. package/src/tests/rbac-admission.test.ts +19 -4
  372. package/src/tests/rbac-charact-http.test.ts +1 -1
  373. package/src/tests/rbac-e2e-helpers.ts +1 -1
  374. package/src/tests/rbac-engine.test.ts +39 -0
  375. package/src/tests/realtime-room-auth.test.ts +1 -1
  376. package/src/tests/realtime-room-surfaces.test.ts +1 -1
  377. package/src/tests/reload-config.test.ts +45 -1
  378. package/src/tests/routing-affinity-inventory.test.ts +1 -1
  379. package/src/tests/routing-reason-contract.test.ts +76 -3
  380. package/src/tests/routing-reason-inventory.test.ts +11 -6
  381. package/src/tests/routing-source.test.ts +53 -0
  382. package/src/tests/runner-agent-fs-provision-retry.test.ts +1 -1
  383. package/src/tests/runner-context-preamble.test.ts +1 -1
  384. package/src/tests/runner-deployment-resume.test.ts +1 -1
  385. package/src/tests/runner-fallback-output.test.ts +1 -1
  386. package/src/tests/runner-identity-refresh.test.ts +1 -1
  387. package/src/tests/runner-skills-refresh.test.ts +1 -1
  388. package/src/tests/schedule-target-type.test.ts +3 -3
  389. package/src/tests/scheduled-tasks.test.ts +14 -5
  390. package/src/tests/scheduler-occurrence.test.ts +347 -0
  391. package/src/tests/script-apis-mcp.test.ts +1 -1
  392. package/src/tests/script-connections-http.test.ts +61 -58
  393. package/src/tests/script-connections-mcp.test.ts +1 -1
  394. package/src/tests/script-connections.test.ts +3 -1
  395. package/src/tests/script-runs-http.test.ts +15 -7
  396. package/src/tests/script-workflows-runtime-e2e.test.ts +1 -1
  397. package/src/tests/scripts-boot-reembed.test.ts +4 -0
  398. package/src/tests/scripts-embeddings.test.ts +4 -0
  399. package/src/tests/scripts-external-api.test.ts +1 -1
  400. package/src/tests/scripts-http.test.ts +1 -1
  401. package/src/tests/scripts-import-allowlist.test.ts +44 -1
  402. package/src/tests/scripts-mcp-e2e.test.ts +81 -1
  403. package/src/tests/scripts-only-gating.test.ts +4 -2
  404. package/src/tests/scripts-retention.test.ts +1 -1
  405. package/src/tests/scripts-runtime-identity.test.ts +2 -2
  406. package/src/tests/scripts-runtime-secret-egress.test.ts +1 -1
  407. package/src/tests/scripts-runtime.test.ts +6 -4
  408. package/src/tests/scripts-typecheck.test.ts +21 -0
  409. package/src/tests/sdk-allowlist.test.ts +1 -1
  410. package/src/tests/secret-scrubber.test.ts +38 -31
  411. package/src/tests/seed-registry.test.ts +46 -8
  412. package/src/tests/seed-schedules.test.ts +44 -9
  413. package/src/tests/seed-workflows.test.ts +21 -9
  414. package/src/tests/send-task-output-schema.test.ts +9 -1
  415. package/src/tests/send-task-requested-by.test.ts +1 -0
  416. package/src/tests/send-task-slack-routing-guard.test.ts +2 -0
  417. package/src/tests/session-costs-codex-recompute.test.ts +1 -1
  418. package/src/tests/session-costs-golden.test.ts +2 -2
  419. package/src/tests/session-costs-model-key-normalize.test.ts +2 -2
  420. package/src/tests/session-costs-recompute-all-providers.test.ts +1 -1
  421. package/src/tests/session-tokens.test.ts +1 -1
  422. package/src/tests/shutdown-error-scrubbing.test.ts +1 -1
  423. package/src/tests/slack-blocks.test.ts +12 -1
  424. package/src/tests/slack-file-tools-attachments.test.ts +1 -1
  425. package/src/tests/slack-inbound-files.test.ts +222 -86
  426. package/src/tests/slack-reaction-config.test.ts +5 -4
  427. package/src/tests/slack-read-boundaries.test.ts +1 -1
  428. package/src/tests/slack-render-v2.test.ts +196 -4
  429. package/src/tests/slack-router.test.ts +17 -2
  430. package/src/tests/slack-steering.test.ts +19 -0
  431. package/src/tests/status.test.ts +19 -7
  432. package/src/tests/steering-core.test.ts +1 -1
  433. package/src/tests/steering-enabled.test.ts +6 -8
  434. package/src/tests/steering-transport.test.ts +4 -4
  435. package/src/tests/store-progress-output-guidance.test.ts +34 -0
  436. package/src/tests/swarm-tool-result-gate.test.ts +11 -11
  437. package/src/tests/swarm-x-tool.test.ts +7 -5
  438. package/src/tests/sync-ai-toolbox-skills.test.ts +19 -0
  439. package/src/tests/task-supersede-resume.test.ts +1 -1
  440. package/src/tests/task-tool-preload-mcp.test.ts +4 -1
  441. package/src/tests/task-tools-ctx.test.ts +2 -0
  442. package/src/tests/tasks-requested-by-filter.test.ts +2 -2
  443. package/src/tests/telemetry-init.test.ts +11 -3
  444. package/src/tests/tool-annotations.test.ts +1 -1
  445. package/src/tests/tool-output-agent-id.test.ts +1 -0
  446. package/src/tests/tool-registrar-no-input.test.ts +42 -1
  447. package/src/tests/tracker-fold.test.ts +7 -7
  448. package/src/tests/tracker-tools.test.ts +3 -3
  449. package/src/tests/ui-followup-lead-delegation.test.ts +1 -0
  450. package/src/tests/unified-oauth-migration.test.ts +5 -5
  451. package/src/tests/user-token-rest-auth.test.ts +1 -1
  452. package/src/tests/user-token-routes.test.ts +1 -1
  453. package/src/tests/whoami-route.test.ts +1 -1
  454. package/src/tests/workflow-agent-task.test.ts +15 -13
  455. package/src/tests/workflow-ctx.test.ts +1 -1
  456. package/src/tests/workflow-e2e.test.ts +1 -1
  457. package/src/tests/workflow-engine-v2.test.ts +3 -1
  458. package/src/tests/workflow-executors.test.ts +2 -2
  459. package/src/tests/workflow-http-v2.test.ts +8 -6
  460. package/src/tests/workflow-input-redaction.test.ts +7 -5
  461. package/src/tests/workflow-integration-io.test.ts +2 -2
  462. package/src/tests/workflow-llm.test.ts +5 -5
  463. package/src/tests/workflow-registry.test.ts +1 -1
  464. package/src/tests/workflow-swarm-script.test.ts +1 -1
  465. package/src/tests/workflow-triggers-v2.test.ts +23 -21
  466. package/src/tests/x-composio.test.ts +9 -7
  467. package/src/tests/x402-client.test.ts +1 -1
  468. package/src/tests/x402-config.test.ts +28 -41
  469. package/src/tools/defer-task.ts +156 -24
  470. package/src/tools/extension-common.ts +84 -0
  471. package/src/tools/extension-install.ts +65 -0
  472. package/src/tools/extension-list.ts +66 -0
  473. package/src/tools/script-common.ts +43 -18
  474. package/src/tools/send-task.ts +87 -105
  475. package/src/tools/skills/skill-publish.ts +1 -0
  476. package/src/tools/store-progress.ts +1 -1
  477. package/src/tools/task-action.ts +43 -22
  478. package/src/tools/task-tool-ctx.ts +2 -0
  479. package/src/tools/templates.ts +2 -1
  480. package/src/tools/tool-config.ts +3 -1
  481. package/src/tools/utils.ts +140 -16
  482. package/src/types.ts +144 -0
  483. package/src/utils/constants.ts +7 -1
  484. package/src/utils/credentials.test.ts +16 -16
  485. package/src/utils/multi-runtime.ts +2 -2
  486. package/src/utils/steering-enabled.ts +4 -4
  487. package/src/workflows/executors/agent-task.ts +18 -3
  488. package/templates/ai-toolbox.manifest.json +7 -1
  489. package/templates/extensions/README.md +17 -0
  490. package/templates/extensions/notify-on-complete/README.md +11 -0
  491. package/templates/extensions/notify-on-complete/hooks.ts +61 -0
  492. package/templates/extensions/notify-on-complete/manifest.json +7 -0
  493. package/templates/extensions/require-ticket-ref/README.md +11 -0
  494. package/templates/extensions/require-ticket-ref/hooks.ts +30 -0
  495. package/templates/extensions/require-ticket-ref/manifest.json +7 -0
  496. package/templates/extensions/require-verification-note/README.md +11 -0
  497. package/templates/extensions/require-verification-note/hooks.ts +32 -0
  498. package/templates/extensions/require-verification-note/manifest.json +7 -0
  499. package/templates/schedules/daily-hn-briefing/config.json +1 -1
  500. package/templates/schedules/gtm-weekly-review/config.json +1 -1
  501. package/templates/schedules/weekly-code-health-reports/config.json +1 -1
  502. package/templates/schedules/weekly-dependabot-triage/config.json +1 -1
  503. package/templates/schedules/weekly-dora-metrics/config.json +1 -1
  504. package/templates/schedules/weekly-harness-upgrade-check/config.json +1 -1
  505. package/templates/skills/delegate-work/files/scripts/codex-exec.sh +1 -1
  506. package/templates/skills/scheduling/content.md +2 -0
  507. package/templates/skills/serply-search/SKILL.md +95 -0
  508. package/templates/skills/serply-search/config.json +13 -0
  509. package/templates/skills/serply-search/content.md +90 -0
  510. package/templates/skills/swarm-extensions/config.json +14 -0
  511. package/templates/skills/swarm-extensions/content.md +120 -0
  512. package/templates/skills/swarm-scripts/SKILL.md +2 -2
  513. package/templates/skills/swarm-scripts/content.md +2 -2
  514. package/templates/workflows/claude-code-changelog-watch/config.json +1 -1
  515. package/templates/workflows/gsc-topic-miner/config.json +1 -1
  516. package/templates/workflows/linear-drain-loop/config.json +1 -1
  517. package/templates/workflows/llm-safe-release-context/config.json +1 -1
  518. package/templates/workflows/ralph-loop/config.json +1 -1
  519. package/dist/cli-7fehefdf.js +0 -562
  520. package/dist/cli-ayvy5kde.js +0 -164
  521. package/dist/cli-ddfw1mc4.js +0 -4322
  522. package/dist/cli-hzqmgcm2.js +0 -3066
  523. package/dist/cli-j4d4f6hv.js +0 -338
  524. package/dist/cli-qgm2pfpq.js +0 -6377
  525. package/dist/cli-sdzq01t9.js +0 -823
  526. package/dist/cli-xvkmedgn.js +0 -332
  527. package/dist/cli-y3pq4v9g.js +0 -664
  528. package/dist/{anthropic-messages-vs2rabzp.js → anthropic-messages-2y8nktar.js} +19 -19
  529. package/dist/{claude-managed-setup-f5pmsyrp.js → claude-managed-setup-48dwg9bv.js} +3 -3
  530. package/dist/{cli-81r683bv.js → cli-ch38q5z4.js} +0 -0
  531. package/dist/{cli-6664w7y4.js → cli-kj76p1ez.js} +8 -8
  532. package/dist/{cli-c71mg51n.js → cli-r2fpe7cx.js} +5 -5
  533. package/dist/{cli-4xz3pmrq.js → cli-y6x0gqtg.js} +16 -16
  534. package/dist/{index-aa3sa6s8.js → index-2wsdsnmm.js} +1 -1
  535. package/dist/{mistral-conversations-4ryk7h83.js → mistral-conversations-qhr84ph3.js} +9 -9
  536. package/dist/{openai-completions-0bqmsajw.js → openai-completions-32rdwmze.js} +19 -19
  537. package/dist/{openrouter-images-qx18fyp8.js → openrouter-images-9f9ek4rw.js} +3 -3
  538. package/dist/{pi-messages-79jvzz1d.js → pi-messages-b1mbr6gp.js} +4 -4
@@ -7,18 +7,16 @@ import {
7
7
  registerSessionResourceCleanup,
8
8
  uuidv7
9
9
  } from "./cli-bsakbbkm.js";
10
+ import {
11
+ init_zod
12
+ } from "./cli-sd0mxa3c.js";
13
+ import {
14
+ exports_external
15
+ } from "./cli-w5e1d1vv.js";
10
16
  import {
11
17
  bedrockConverseStreamApi,
12
18
  setBedrockProviderModule
13
19
  } from "./cli-c4eeb5q2.js";
14
- import {
15
- getProviderEnvValue
16
- } from "./cli-btbzvq95.js";
17
- import {
18
- parseJsonWithRepair,
19
- parseStreamingJson,
20
- repairJson
21
- } from "./cli-1m2e086m.js";
22
20
  import {
23
21
  InMemoryCredentialStore,
24
22
  InMemoryModelsStore,
@@ -35,6 +33,14 @@ import {
35
33
  modelsAreEqual,
36
34
  resolveProviderAuth
37
35
  } from "./cli-rgvp6r2x.js";
36
+ import {
37
+ getProviderEnvValue
38
+ } from "./cli-btbzvq95.js";
39
+ import {
40
+ parseJsonWithRepair,
41
+ parseStreamingJson,
42
+ repairJson
43
+ } from "./cli-1m2e086m.js";
38
44
  import {
39
45
  AssistantMessageEventStream,
40
46
  EventStream,
@@ -49,6 +55,330 @@ import {
49
55
  __require
50
56
  } from "./cli-bc05qbss.js";
51
57
 
58
+ // src/be/memory/raters/llm.ts
59
+ init_zod();
60
+
61
+ // src/be/memory/raters/llm-client.ts
62
+ var DEFAULT_TIMEOUT_MS = 30000;
63
+ var PROMPT_TEMPLATE = `You are scoring the usefulness of one retrieved memory.
64
+
65
+ Return ONLY a JSON object with these fields (no prose, no markdown):
66
+ {
67
+ "score": number, // 0 = misleading/unhelpful, 1 = highly useful
68
+ "reasoning": string // 1..500 chars, why
69
+ }
70
+
71
+ QUERY:
72
+ \${query}
73
+
74
+ MEMORY:
75
+ id: \${memoryId}
76
+ name: \${memoryName}
77
+ content: \${memoryContent}
78
+
79
+ AGENT RESPONSE / SUMMARY:
80
+ \${response}
81
+
82
+ Score 0..1.`;
83
+ var PLACEHOLDER_PREFIX = "$";
84
+ var QUERY_PLACEHOLDER = `${PLACEHOLDER_PREFIX}{query}`;
85
+ var MEMORY_ID_PLACEHOLDER = `${PLACEHOLDER_PREFIX}{memoryId}`;
86
+ var MEMORY_NAME_PLACEHOLDER = `${PLACEHOLDER_PREFIX}{memoryName}`;
87
+ var MEMORY_CONTENT_PLACEHOLDER = `${PLACEHOLDER_PREFIX}{memoryContent}`;
88
+ var RESPONSE_PLACEHOLDER = `${PLACEHOLDER_PREFIX}{response}`;
89
+ function buildPrompt(input) {
90
+ return PROMPT_TEMPLATE.replace(QUERY_PLACEHOLDER, input.query).replace(MEMORY_ID_PLACEHOLDER, input.memory.id).replace(MEMORY_NAME_PLACEHOLDER, input.memory.name).replace(MEMORY_CONTENT_PLACEHOLDER, input.memory.content).replace(RESPONSE_PLACEHOLDER, input.response);
91
+ }
92
+ function parseScoreAndReasoning(raw) {
93
+ if (typeof raw !== "string")
94
+ return null;
95
+ let parsed;
96
+ try {
97
+ parsed = JSON.parse(raw.trim());
98
+ } catch {
99
+ return null;
100
+ }
101
+ if (!parsed || typeof parsed !== "object")
102
+ return null;
103
+ const obj = parsed;
104
+ const score = typeof obj.score === "number" ? obj.score : null;
105
+ const reasoning = typeof obj.reasoning === "string" ? obj.reasoning : null;
106
+ if (score == null || reasoning == null)
107
+ return null;
108
+ if (!Number.isFinite(score) || score < 0 || score > 1)
109
+ return null;
110
+ if (reasoning.length === 0 || reasoning.length > 500)
111
+ return null;
112
+ return { score, reasoning };
113
+ }
114
+
115
+ class ClaudeCliLlmRaterClient {
116
+ model;
117
+ timeoutMs;
118
+ constructor(opts = {}) {
119
+ this.model = opts.model ?? process.env.MEMORY_LLM_RATER_MODEL ?? "haiku";
120
+ this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
121
+ }
122
+ async rate(input) {
123
+ const prompt = buildPrompt(input);
124
+ const tmpFile = `/tmp/llm-rater-${Date.now()}-${Math.random().toString(36).slice(2)}.txt`;
125
+ let stdout = "";
126
+ try {
127
+ await Bun.write(tmpFile, prompt);
128
+ const proc = Bun.spawn(["bash", "-c", `cat "${tmpFile}" | claude -p --model ${this.model} --output-format json`], {
129
+ stdout: "pipe",
130
+ stderr: "pipe",
131
+ env: { ...process.env, SKIP_SESSION_SUMMARY: "1" }
132
+ });
133
+ const timeoutId = setTimeout(() => proc.kill(), this.timeoutMs);
134
+ stdout = await new Response(proc.stdout).text();
135
+ clearTimeout(timeoutId);
136
+ } catch (err) {
137
+ console.error("[memory-rater:llm] claude -p shell-out failed:", err.message);
138
+ return null;
139
+ } finally {
140
+ try {
141
+ await Bun.$`rm -f ${tmpFile}`.quiet();
142
+ } catch {}
143
+ }
144
+ let envelope;
145
+ try {
146
+ envelope = JSON.parse(stdout);
147
+ } catch {
148
+ return null;
149
+ }
150
+ return parseScoreAndReasoning(envelope.result);
151
+ }
152
+ }
153
+
154
+ // src/be/memory/raters/types.ts
155
+ var REFERENCES_SOURCE_MAX_LENGTH = 512;
156
+ var NUL_CHAR_CODE = 0;
157
+ var DEL_CHAR_CODE = 127;
158
+ var FIRST_PRINTABLE_ASCII = 32;
159
+ function sanitizeReferencesSource(input) {
160
+ let stripped = "";
161
+ for (let i = 0;i < input.length; i++) {
162
+ const code = input.charCodeAt(i);
163
+ if (code === NUL_CHAR_CODE)
164
+ return null;
165
+ if (code < FIRST_PRINTABLE_ASCII || code === DEL_CHAR_CODE) {
166
+ continue;
167
+ }
168
+ stripped += input[i];
169
+ }
170
+ if (stripped.length === 0)
171
+ return null;
172
+ return stripped;
173
+ }
174
+
175
+ // src/be/memory/raters/llm.ts
176
+ var LLM_RATER_WEIGHT = 0.8;
177
+ var RatingSchema = exports_external.object({
178
+ id: exports_external.string().min(1),
179
+ score: exports_external.number().min(0).max(1),
180
+ reasoning: exports_external.string().min(1).max(500),
181
+ referencesSource: exports_external.string().min(1).max(REFERENCES_SOURCE_MAX_LENGTH).optional()
182
+ });
183
+ var SummaryWithRatingsSchema = exports_external.object({
184
+ summary: exports_external.string(),
185
+ ratings: exports_external.array(RatingSchema).default([])
186
+ });
187
+ var BASE_SUMMARIZE_PROMPT = `You are summarizing an AI agent's work session. Extract ONLY high-value learnings.
188
+
189
+ DO NOT include:
190
+ - Generic descriptions of what was done ("worked on task X")
191
+ - Tool calls or file reads
192
+ - Routine progress updates
193
+
194
+ DO include (if present):
195
+ - **Mistakes made and corrections** — what went wrong and what fixed it
196
+ - **Discovered patterns** — reusable approaches, APIs, or codebase conventions
197
+ - **Codebase knowledge** — important file paths, architecture decisions, gotchas
198
+ - **Environment knowledge** — service URLs, config details, tool quirks
199
+ - **Failed approaches** — what was tried and didn't work (and why)
200
+
201
+ Format as a bulleted list of concrete, reusable facts. If the session was routine with no significant learnings, respond with exactly: "No significant learnings."`;
202
+
203
+ class LlmRater {
204
+ client;
205
+ name = "llm";
206
+ constructor(client = new ClaudeCliLlmRaterClient) {
207
+ this.client = client;
208
+ }
209
+ async rate(ctx) {
210
+ const enriched = ctx;
211
+ if (enriched.retrievedMemoryIds.length === 0)
212
+ return [];
213
+ const memories = enriched.retrievedMemories;
214
+ if (!memories || memories.length === 0)
215
+ return [];
216
+ const events = [];
217
+ for (const memoryId of enriched.retrievedMemoryIds) {
218
+ const memory = memories.find((m) => m.id === memoryId);
219
+ if (!memory)
220
+ continue;
221
+ let result;
222
+ try {
223
+ result = await this.client.rate({
224
+ query: enriched.query ?? "",
225
+ memory,
226
+ response: enriched.response ?? enriched.evidence ?? ""
227
+ });
228
+ } catch (err) {
229
+ console.error(`[memory-rater:llm] client.rate threw for memoryId=${memoryId}:`, err.message);
230
+ continue;
231
+ }
232
+ if (!result)
233
+ continue;
234
+ events.push({
235
+ memoryId,
236
+ signal: 2 * result.score - 1,
237
+ weight: LLM_RATER_WEIGHT,
238
+ source: "",
239
+ reasoning: result.reasoning
240
+ });
241
+ }
242
+ return events;
243
+ }
244
+ }
245
+ function buildRatingsFromLlm(ratings, retrievals) {
246
+ const allowed = new Set(retrievals.map((r) => r.id));
247
+ const events = [];
248
+ for (const r of ratings) {
249
+ if (!allowed.has(r.id))
250
+ continue;
251
+ let cleanedReferencesSource;
252
+ if (r.referencesSource !== undefined) {
253
+ const cleaned = sanitizeReferencesSource(r.referencesSource);
254
+ if (cleaned !== null) {
255
+ cleanedReferencesSource = cleaned;
256
+ }
257
+ }
258
+ events.push({
259
+ memoryId: r.id,
260
+ signal: 2 * r.score - 1,
261
+ weight: LLM_RATER_WEIGHT,
262
+ source: "llm",
263
+ reasoning: r.reasoning,
264
+ ...cleanedReferencesSource !== undefined ? { referencesSource: cleanedReferencesSource } : {}
265
+ });
266
+ }
267
+ return events;
268
+ }
269
+ var RETRIEVAL_PROMPT_CONTENT_CAP = 600;
270
+ function buildSummaryWithRatingsPrompt(basePrompt, retrievals) {
271
+ if (retrievals.length === 0)
272
+ return basePrompt;
273
+ const memoryBlock = retrievals.map((m, i) => {
274
+ const content = m.content.length > RETRIEVAL_PROMPT_CONTENT_CAP ? `${m.content.slice(0, RETRIEVAL_PROMPT_CONTENT_CAP)}…` : m.content;
275
+ return `Memory #${i + 1}
276
+ id: ${m.id}
277
+ name: ${m.name}
278
+ content: ${content}`;
279
+ }).join(`
280
+
281
+ `);
282
+ return `${basePrompt}
283
+
284
+ CRITICAL: Your entire response MUST be a single JSON object that conforms to the schema below. Do NOT wrap it in triple-backtick fences (no \`\`\`json or \`\`\`), do NOT add a prose preamble, do NOT add trailing commentary. Just the JSON object, nothing else.
285
+
286
+ Schema:
287
+ {
288
+ "summary": string, // your existing summary text
289
+ "ratings": [ // one entry per memory you can score
290
+ {
291
+ "id": string, // memory id, copied from the list below
292
+ "score": number, // 0 = misleading/unhelpful, 1 = highly useful
293
+ "reasoning": string, // 1..500 chars, why
294
+ "referencesSource": string // OPTIONAL — see note below
295
+ }
296
+ ]
297
+ }
298
+
299
+ Score ONLY memories present in the list below. Use the exact ids. Omit any you cannot evaluate.
300
+
301
+ Optionally for each rating, if the memory clearly references a specific external source (a GitHub PR/issue, a Linear issue, a customer, a Slack thread, an AgentMail thread, etc.), include a \`referencesSource\` string using the convention "<source>:<identifier>" (e.g. "github:owner/repo#N", "linear:KEY-N", "customer:<slug>"). Any prefix is fine — pick what matches the source. Omit the field if no clear external source.
302
+
303
+ Memories retrieved during this session:
304
+
305
+ ${memoryBlock}`;
306
+ }
307
+ function isLlmRaterEnabled() {
308
+ const raw = process.env.MEMORY_RATERS;
309
+ if (!raw || raw.trim() === "")
310
+ return false;
311
+ return raw.split(",").map((s) => s.trim()).includes("llm");
312
+ }
313
+ function dedupeRetrievalsForRater(rows) {
314
+ const seenSchedules = new Set;
315
+ const out = [];
316
+ for (const row of rows) {
317
+ const scheduleId = row.scheduleId;
318
+ if (typeof scheduleId === "string" && scheduleId.length > 0) {
319
+ if (seenSchedules.has(scheduleId))
320
+ continue;
321
+ seenSchedules.add(scheduleId);
322
+ }
323
+ out.push(row);
324
+ }
325
+ return out;
326
+ }
327
+ async function fetchRetrievalsForTask(opts) {
328
+ const fetchFn = opts.fetchImpl ?? fetch;
329
+ try {
330
+ const url = `${opts.apiUrl}/api/memory/retrievals?taskId=${encodeURIComponent(opts.taskId)}`;
331
+ const res = await fetchFn(url, {
332
+ headers: {
333
+ "X-Agent-ID": opts.agentId,
334
+ ...opts.apiKey ? { Authorization: `Bearer ${opts.apiKey}` } : {}
335
+ }
336
+ });
337
+ if (!res.ok) {
338
+ console.error(`[memory-rater:llm] GET /api/memory/retrievals failed: ${res.status} ${res.statusText}`);
339
+ return [];
340
+ }
341
+ const body = await res.json();
342
+ return body.results ?? [];
343
+ } catch (err) {
344
+ console.error("[memory-rater:llm] fetchRetrievalsForTask threw:", err.message);
345
+ return [];
346
+ }
347
+ }
348
+ async function postRatings(opts) {
349
+ if (opts.events.length === 0)
350
+ return { ok: true, status: 0 };
351
+ const fetchFn = opts.fetchImpl ?? fetch;
352
+ const events = opts.events.map((e) => ({
353
+ memoryId: e.memoryId,
354
+ signal: e.signal,
355
+ weight: e.weight,
356
+ source: e.source,
357
+ ...e.reasoning !== undefined ? { reasoning: e.reasoning } : {},
358
+ ...e.referencesSource !== undefined ? { referencesSource: e.referencesSource } : {},
359
+ ...opts.taskId ? { taskId: opts.taskId } : {}
360
+ }));
361
+ try {
362
+ const res = await fetchFn(`${opts.apiUrl}/api/memory/rate`, {
363
+ method: "POST",
364
+ headers: {
365
+ "Content-Type": "application/json",
366
+ "X-Agent-ID": opts.agentId,
367
+ ...opts.apiKey ? { Authorization: `Bearer ${opts.apiKey}` } : {}
368
+ },
369
+ body: JSON.stringify({ events })
370
+ });
371
+ if (!res.ok) {
372
+ const text = await res.text().catch(() => "");
373
+ console.error(`[memory-rater:llm] POST /api/memory/rate failed: ${res.status} ${res.statusText} ${text.slice(0, 200)}`);
374
+ }
375
+ return { ok: res.ok, status: res.status };
376
+ } catch (err) {
377
+ console.error("[memory-rater:llm] postRatings threw:", err.message);
378
+ return { ok: false, status: 0 };
379
+ }
380
+ }
381
+
52
382
  // node_modules/typebox/build/typebox.mjs
53
383
  var exports_typebox = {};
54
384
  __export(exports_typebox, {
@@ -5592,7 +5922,7 @@ function amazonBedrockProvider() {
5592
5922
  }
5593
5923
 
5594
5924
  // node_modules/@earendil-works/pi-ai/dist/api/openai-completions.lazy.js
5595
- var openAICompletionsApi = () => lazyApi(() => import("./openai-completions-0bqmsajw.js"));
5925
+ var openAICompletionsApi = () => lazyApi(() => import("./openai-completions-32rdwmze.js"));
5596
5926
 
5597
5927
  // node_modules/@earendil-works/pi-ai/dist/auth/helpers.js
5598
5928
  function envApiKeyAuth(name, envVars) {
@@ -5648,7 +5978,7 @@ function antLingProvider() {
5648
5978
  }
5649
5979
 
5650
5980
  // node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.lazy.js
5651
- var anthropicMessagesApi = () => lazyApi(() => import("./anthropic-messages-vs2rabzp.js"));
5981
+ var anthropicMessagesApi = () => lazyApi(() => import("./anthropic-messages-2y8nktar.js"));
5652
5982
 
5653
5983
  // node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js
5654
5984
  var __rewriteRelativeImportExtension = function(path, preserveJsx) {
@@ -5886,7 +6216,7 @@ function anthropicProvider() {
5886
6216
  }
5887
6217
 
5888
6218
  // node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.lazy.js
5889
- var azureOpenAIResponsesApi = () => lazyApi(() => import("./azure-openai-responses-cqar64rc.js"));
6219
+ var azureOpenAIResponsesApi = () => lazyApi(() => import("./azure-openai-responses-f38x2avq.js"));
5890
6220
 
5891
6221
  // node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js
5892
6222
  function azureOpenAIResponsesProvider() {
@@ -5924,7 +6254,7 @@ function cerebrasProvider() {
5924
6254
  }
5925
6255
 
5926
6256
  // node_modules/@earendil-works/pi-ai/dist/api/openai-responses.lazy.js
5927
- var openAIResponsesApi = () => lazyApi(() => import("./openai-responses-nmeyptke.js"));
6257
+ var openAIResponsesApi = () => lazyApi(() => import("./openai-responses-6xwf7bzg.js"));
5928
6258
 
5929
6259
  // node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-auth.js
5930
6260
  var CLOUDFLARE_API_KEY = "CLOUDFLARE_API_KEY";
@@ -6112,7 +6442,7 @@ function githubCopilotProvider() {
6112
6442
  }
6113
6443
 
6114
6444
  // node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.lazy.js
6115
- var googleGenerativeAIApi = () => lazyApi(() => import("./google-generative-ai-tsskx7te.js"));
6445
+ var googleGenerativeAIApi = () => lazyApi(() => import("./google-generative-ai-ndjmj5fa.js"));
6116
6446
 
6117
6447
  // node_modules/@earendil-works/pi-ai/dist/providers/google.js
6118
6448
  function googleProvider() {
@@ -6127,7 +6457,7 @@ function googleProvider() {
6127
6457
  }
6128
6458
 
6129
6459
  // node_modules/@earendil-works/pi-ai/dist/api/google-vertex.lazy.js
6130
- var googleVertexApi = () => lazyApi(() => import("./google-vertex-ppw8ydpa.js"));
6460
+ var googleVertexApi = () => lazyApi(() => import("./google-vertex-fr665tqs.js"));
6131
6461
 
6132
6462
  // node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js
6133
6463
  var VERTEX_ADC_PATH = "~/.config/gcloud/application_default_credentials.json";
@@ -6281,7 +6611,7 @@ function minimaxCnProvider() {
6281
6611
  }
6282
6612
 
6283
6613
  // node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.lazy.js
6284
- var mistralConversationsApi = () => lazyApi(() => import("./mistral-conversations-4ryk7h83.js"));
6614
+ var mistralConversationsApi = () => lazyApi(() => import("./mistral-conversations-qhr84ph3.js"));
6285
6615
 
6286
6616
  // node_modules/@earendil-works/pi-ai/dist/providers/mistral.js
6287
6617
  function mistralProvider() {
@@ -6344,7 +6674,7 @@ function openaiProvider() {
6344
6674
  }
6345
6675
 
6346
6676
  // node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.lazy.js
6347
- var openAICodexResponsesApi = () => lazyApi(() => import("./openai-codex-responses-g7w48y30.js"));
6677
+ var openAICodexResponsesApi = () => lazyApi(() => import("./openai-codex-responses-wy6a43wd.js"));
6348
6678
 
6349
6679
  // node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.js
6350
6680
  function openaiCodexProvider() {
@@ -6419,7 +6749,7 @@ function openrouterProvider() {
6419
6749
 
6420
6750
  // node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.lazy.js
6421
6751
  var openrouterImagesApi = () => ({
6422
- generateImages: async (model, context, options) => (await import("./openrouter-images-qx18fyp8.js")).generateImages(model, context, options)
6752
+ generateImages: async (model, context, options) => (await import("./openrouter-images-9f9ek4rw.js")).generateImages(model, context, options)
6423
6753
  });
6424
6754
 
6425
6755
  // node_modules/@earendil-works/pi-ai/dist/image-models.generated.js
@@ -7263,7 +7593,7 @@ function qwenTokenPlanIndividualProvider() {
7263
7593
  }
7264
7594
 
7265
7595
  // node_modules/@earendil-works/pi-ai/dist/api/pi-messages.lazy.js
7266
- var piMessagesApi = () => lazyApi(() => import("./pi-messages-79jvzz1d.js"));
7596
+ var piMessagesApi = () => lazyApi(() => import("./pi-messages-b1mbr6gp.js"));
7267
7597
 
7268
7598
  // node_modules/@earendil-works/pi-ai/dist/providers/radius-config.js
7269
7599
  var DEFAULT_RADIUS_GATEWAY = "https://radius.pi.dev";
@@ -13538,7 +13868,7 @@ function createLazyLoadErrorImages(model, error2) {
13538
13868
  };
13539
13869
  }
13540
13870
  function loadOpenRouterImagesProviderModule() {
13541
- openRouterImagesProviderModulePromise ||= import("./openrouter-images-qx18fyp8.js").then((module3) => module3);
13871
+ openRouterImagesProviderModulePromise ||= import("./openrouter-images-9f9ek4rw.js").then((module3) => module3);
13542
13872
  return openRouterImagesProviderModulePromise;
13543
13873
  }
13544
13874
  var generateImagesOpenRouter = async (model, context2, options) => {
@@ -16051,4 +16381,4 @@ async function resolveCredential(opts = {}) {
16051
16381
  return null;
16052
16382
  }
16053
16383
 
16054
- export { exports_typebox, exports_build, AssistantMessageFrameEncoder, reduceAssistantMessageFrames, isContextOverflow, isRecoverableLength, retryAssistantCall, isRetryableAssistantError, contentText, exports_value2 as exports_value, Compile, exports_compile, validateToolArguments, DEFAULT_RADIUS_GATEWAY, radiusProvider, getBuiltinModel, getBuiltinModelDataGeneratedAt, getBuiltinModels, builtinProviders, exports_all, getApiProvider, resetApiProviders, stream, complete, streamSimple, completeSimple, exports_compat, DEFAULT_MODEL, parseModelStr, resolveCredential };
16384
+ export { REFERENCES_SOURCE_MAX_LENGTH, sanitizeReferencesSource, SummaryWithRatingsSchema, BASE_SUMMARIZE_PROMPT, LlmRater, buildRatingsFromLlm, buildSummaryWithRatingsPrompt, isLlmRaterEnabled, dedupeRetrievalsForRater, fetchRetrievalsForTask, postRatings, exports_typebox, exports_build, AssistantMessageFrameEncoder, reduceAssistantMessageFrames, isContextOverflow, isRecoverableLength, retryAssistantCall, isRetryableAssistantError, contentText, exports_value2 as exports_value, Compile, exports_compile, validateToolArguments, DEFAULT_RADIUS_GATEWAY, radiusProvider, getBuiltinModel, getBuiltinModelDataGeneratedAt, getBuiltinModels, builtinProviders, exports_all, getApiProvider, resetApiProviders, stream, complete, streamSimple, completeSimple, exports_compat, DEFAULT_MODEL, parseModelStr, resolveCredential };