@desplega.ai/agent-swarm 1.159.0 → 1.161.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 (415) hide show
  1. package/README.md +2 -2
  2. package/dist/{acp-adapter-qhch0n2v.js → acp-adapter-xx489vvb.js} +286 -75
  3. package/dist/{actions-dtsh1mfb.js → actions-ykjkn0m9.js} +32 -30
  4. package/dist/{anthropic-messages-f2h06k64.js → anthropic-messages-5qx80j9k.js} +99 -14
  5. package/dist/{app-y1b9srva.js → app-0hdqa4k1.js} +13 -11
  6. package/dist/{assistant-31hwy5xj.js → assistant-am2g5g8a.js} +40 -32
  7. package/dist/{azure-openai-responses-0k1mfax5.js → azure-openai-responses-fszbkp0e.js} +3 -3
  8. package/dist/{boot-reembed-48d2qpkt.js → boot-reembed-gt5gjkt4.js} +14 -12
  9. package/dist/{boot-reembed-w0bryhkr.js → boot-reembed-xy9t7avg.js} +15 -13
  10. package/dist/{boot-scrub-logs-t65wbrn7.js → boot-scrub-logs-9x0985y5.js} +12 -10
  11. package/dist/boot-seeds-trv0d4vg.js +29 -0
  12. package/dist/{claude-adapter-1t6611ne.js → claude-adapter-jb6e1e54.js} +32 -26
  13. package/dist/{claude-managed-adapter-werp659j.js → claude-managed-adapter-yxkfxg8j.js} +7 -7
  14. package/dist/{claude-managed-setup-y6rdgbc1.js → claude-managed-setup-d1q9hv2b.js} +26 -27
  15. package/dist/{claude-sdk-session-zhkyk8yw.js → claude-sdk-session-zga700s2.js} +11737 -11256
  16. package/dist/{cli-79aq9cgb.js → cli-0383bp7f.js} +1222 -406
  17. package/dist/{cli-xgpf00sk.js → cli-0c7ata9h.js} +24 -23
  18. package/dist/{cli-qjxy52w7.js → cli-121ph74b.js} +2 -2
  19. package/dist/{cli-20035trh.js → cli-17xpf7cm.js} +14 -7
  20. package/dist/{cli-cqt19wg6.js → cli-1a2j50m0.js} +11 -2
  21. package/dist/{cli-g9df2m37.js → cli-1cz0c18q.js} +249 -200
  22. package/dist/{cli-fjtp3463.js → cli-1er0rhz8.js} +13 -12
  23. package/dist/{cli-ca2w7zv7.js → cli-2hhfhfq5.js} +11 -6
  24. package/dist/{cli-npssxgaz.js → cli-2pdaysab.js} +52 -2
  25. package/dist/{cli-rykfmgwg.js → cli-2x0e561b.js} +1 -1
  26. package/dist/{cli-503ya656.js → cli-35pj2yva.js} +20 -150
  27. package/dist/cli-3qhyh31j.js +166 -0
  28. package/dist/{cli-cygyqj3b.js → cli-3zc55ctx.js} +8 -6
  29. package/dist/{cli-96qd5psa.js → cli-58e8yr0d.js} +1 -1
  30. package/dist/{cli-4aj25szq.js → cli-5nbmpy8w.js} +2 -2
  31. package/dist/{cli-mg24hkt4.js → cli-5p3x4zna.js} +2 -2
  32. package/dist/{cli-vwbbaecp.js → cli-7119ja3w.js} +3 -3
  33. package/dist/{cli-mzkqpxee.js → cli-798vkbks.js} +2 -2
  34. package/dist/{cli-3gvrr8vj.js → cli-82c1pacn.js} +111 -54
  35. package/dist/{cli-hgqfttfc.js → cli-89s4ngw3.js} +1 -1
  36. package/dist/{cli-9b13ggd1.js → cli-89v6kyq7.js} +1 -0
  37. package/dist/{cli-b6thtzac.js → cli-8g6mc14k.js} +7 -7
  38. package/dist/{cli-eg7cdg68.js → cli-9m03pzga.js} +5 -5
  39. package/dist/cli-9s68w752.js +303 -0
  40. package/dist/{cli-48527fpw.js → cli-a8c82p2t.js} +16 -15
  41. package/dist/{cli-5f2hq128.js → cli-ad4qxm6j.js} +12 -11
  42. package/dist/{cli-e4xnc0qp.js → cli-akfj32vj.js} +33 -7
  43. package/dist/{cli-ejpygnqz.js → cli-bh7jed3k.js} +212 -22
  44. package/dist/{cli-0z2v4nhw.js → cli-cat6h73s.js} +1 -1
  45. package/dist/{cli-e0ndxhtk.js → cli-cfkrztza.js} +190 -13
  46. package/dist/{cli-kc3dp84d.js → cli-d56tgd45.js} +216 -59
  47. package/dist/cli-dbmwby6a.js +9 -0
  48. package/dist/{cli-0n2e4x49.js → cli-ecfxwnyb.js} +15 -2
  49. package/dist/{cli-gzyh0j0g.js → cli-ee8bc46j.js} +66 -166
  50. package/dist/{cli-kdnehe0t.js → cli-et8m9xsv.js} +1 -1
  51. package/dist/cli-f9w1semm.js +413 -0
  52. package/dist/cli-gt4hxb8p.js +99 -0
  53. package/dist/{cli-qv4jv8bx.js → cli-hgmnf38m.js} +2 -2
  54. package/dist/{cli-10ym38qc.js → cli-hn04t9db.js} +3 -3
  55. package/dist/{cli-qvnnx4ct.js → cli-jpf7e1zq.js} +105 -243
  56. package/dist/cli-jyy6pm2f.js +333872 -0
  57. package/dist/{cli-dvjpkkjd.js → cli-kgd3p0bm.js} +7 -7
  58. package/dist/cli-ma3zvh39.js +10404 -0
  59. package/dist/{cli-r2ap2czm.js → cli-nexqx4ve.js} +6 -0
  60. package/dist/{cli-j9z8mfx3.js → cli-nsdxtcbg.js} +37 -20
  61. package/dist/{cli-wgjx0q33.js → cli-phfg8vy8.js} +392 -53
  62. package/dist/{cli-rgjprct3.js → cli-ptr8h7kp.js} +19 -1
  63. package/dist/{cli-s8s499xy.js → cli-qbksc292.js} +3 -2
  64. package/dist/{cli-bv0a38v9.js → cli-qwsnmjdd.js} +515 -229
  65. package/dist/{cli-68bmme5p.js → cli-r6fsxc76.js} +40018 -52654
  66. package/dist/{cli-rrqmqr1s.js → cli-rtx9dygp.js} +1 -1
  67. package/dist/{cli-rfezr056.js → cli-sqm3r5ps.js} +83 -15
  68. package/dist/{cli-zw65mab6.js → cli-t6v2ah3r.js} +67 -13
  69. package/dist/{cli-vn0qv9cj.js → cli-t845n9xk.js} +28 -14
  70. package/dist/cli-trc24wk2.js +143 -0
  71. package/dist/{cli-wd9hz40d.js → cli-tre4bdgq.js} +5 -5
  72. package/dist/{cli-9yg65c1j.js → cli-tsk3nz8a.js} +29 -1
  73. package/dist/{cli-phsaj4xq.js → cli-v0pvvhfq.js} +1 -1
  74. package/dist/{cli-hj65wsts.js → cli-vnnz5ncg.js} +4695 -4915
  75. package/dist/{cli-cpvsaqsw.js → cli-w0bwte75.js} +8 -5
  76. package/dist/{cli-z9x0sh1t.js → cli-we0q7t0e.js} +3 -3
  77. package/dist/{cli-r94z9p1z.js → cli-wgbezhw2.js} +3 -0
  78. package/dist/{cli-19jenss3.js → cli-xk79303e.js} +51 -17
  79. package/dist/{cli-31nkw3g3.js → cli-ybgv4kw2.js} +15 -8
  80. package/dist/{cli-ardpzhjm.js → cli-yrg7c73k.js} +13 -6
  81. package/dist/{cli-de1396j2.js → cli-ywybs5as.js} +7 -1
  82. package/dist/{cli-vhjwh6cz.js → cli-yy6dew39.js} +2 -2
  83. package/dist/{cli-bgv70kym.js → cli-zb6xbk61.js} +3 -2
  84. package/dist/{cli-4tvgz99m.js → cli-ze1d3wzv.js} +79 -27
  85. package/dist/cli.js +33 -32
  86. package/dist/{cloudflare-workers-ai-system-one-1sg586qv.js → cloudflare-workers-ai-system-one-k6fbxw9d.js} +2 -2
  87. package/dist/{codex-adapter-jqfqqa21.js → codex-adapter-04v97vep.js} +23 -20
  88. package/dist/{codex-hook-5eys3dya.js → codex-hook-20me6byw.js} +2 -2
  89. package/dist/{codex-login-he9vrn90.js → codex-login-cf7mzsgg.js} +48 -3
  90. package/dist/{codex-session-runner-zd341dsm.js → codex-session-runner-ax69mqq3.js} +21 -20
  91. package/dist/{commands-vfsysz4s.js → commands-18gy08n1.js} +12 -10
  92. package/dist/{db-s3znhvbn.js → db-d2pvjpyt.js} +22 -10
  93. package/dist/{devin-adapter-8vgkwh29.js → devin-adapter-dpsv6hd9.js} +1 -1
  94. package/dist/{dispatcher-5xn0c7rf.js → dispatcher-8wbwyzjg.js} +31 -29
  95. package/dist/{dsh-adapter-894mgfvs.js → dsh-adapter-ysqk9snv.js} +9 -4
  96. package/dist/{e2b-ez07znam.js → e2b-esmt1r16.js} +3 -1
  97. package/dist/{execute-71ysgv35.js → execute-cmagrbrz.js} +235 -52
  98. package/dist/{google-generative-ai-1nfcdphp.js → google-generative-ai-k6n5nbpp.js} +3 -3
  99. package/dist/{google-vertex-1tqcd7b1.js → google-vertex-44xxtcvp.js} +3 -3
  100. package/dist/{handlers-5w4jwycr.js → handlers-6b69m5kp.js} +34 -32
  101. package/dist/{hook-z0hbxj85.js → hook-k3mydf2n.js} +16 -14
  102. package/dist/{hook-853bxrr6.js → hook-srnkt0hb.js} +16 -14
  103. package/dist/{http-akc3wy3m.js → http-hrf80ca1.js} +836 -189
  104. package/dist/{index-ttpbhnjg.js → index-1asbaj62.js} +32 -30
  105. package/dist/{index-cd151qkq.js → index-45evq4ee.js} +31 -29
  106. package/dist/{index-k661dzzr.js → index-9rxdvj6w.js} +32 -30
  107. package/dist/index-k4nj18qs.js +31 -0
  108. package/dist/{index-5sz16ksh.js → index-xmevk2b9.js} +89 -61
  109. package/dist/{keepalive-8p9rpvz5.js → keepalive-sfdz6ksp.js} +14 -12
  110. package/dist/{lead-jp69z5h3.js → lead-ej91e9hw.js} +52 -50
  111. package/dist/{llama-cpp-classify-t2tccams.js → llama-cpp-classify-tgj35k8d.js} +1 -1
  112. package/dist/{maintenance-fwx4ev0k.js → maintenance-80dnd7ke.js} +15 -13
  113. package/dist/{mistral-conversations-bhvwqcnk.js → mistral-conversations-pc3ntnxt.js} +1 -1
  114. package/dist/node-f0ykebbv.js +2107 -0
  115. package/dist/node-wyamey5r.js +19 -0
  116. package/dist/{oauth-refresh-sweep-cwcq1ctx.js → oauth-refresh-sweep-m1etk2mx.js} +13 -11
  117. package/dist/{onboard-2b4q0t84.js → onboard-0q8sdfqc.js} +2 -2
  118. package/dist/{openai-codex-responses-nekthgks.js → openai-codex-responses-n7n683p2.js} +2 -2
  119. package/dist/{openai-completions-hxtzwj0s.js → openai-completions-jpaj5g2b.js} +2 -2
  120. package/dist/{openai-responses-w4r118w7.js → openai-responses-9a3nme9j.js} +3 -3
  121. package/dist/{opencode-adapter-zz7xvjj6.js → opencode-adapter-4wcgmvgf.js} +13 -11
  122. package/dist/{openrouter-images-b6sqqjgn.js → openrouter-images-8yx3487g.js} +1 -1
  123. package/dist/{otel-impl-g8rs4vwr.js → otel-impl-hnqm9mxq.js} +2 -2
  124. package/dist/pi-logo-animation-e9a0t68z.js +1003 -0
  125. package/dist/{pi-mono-adapter-n0me28wt.js → pi-mono-adapter-d6sqm9wr.js} +301 -78
  126. package/dist/{pricing-refresh-0v77385v.js → pricing-refresh-y60z64pm.js} +14 -13
  127. package/dist/quickjs-r1pq2107.wasm +0 -0
  128. package/dist/{rbac-roles-krjyazbj.js → rbac-roles-8pa0754b.js} +13 -11
  129. package/dist/{render-v2-3wjsp9aw.js → render-v2-418s1vj7.js} +13 -11
  130. package/dist/{runtime-ktjysacx.js → runtime-3pknc168.js} +5 -4
  131. package/dist/{setup-yeqryke6.js → setup-yghdkj4x.js} +2 -2
  132. package/dist/{typesafe-system-one-96960jxp.js → typesafe-system-one-2ef30pec.js} +2 -2
  133. package/dist/{virtual-modules-dzdeq1sf.js → virtual-modules-jcceevt5.js} +8 -6
  134. package/dist/{work-objects-3pakpkw0.js → work-objects-j1sz20v9.js} +34 -32
  135. package/dist/{worker-85testgj.js → worker-d4gcvkjt.js} +52 -50
  136. package/dist/{x-n3e0v3xa.js → x-f1gt1pz3.js} +2 -2
  137. package/openapi.json +587 -19
  138. package/package.json +16 -15
  139. package/src/azure-devops/api.ts +121 -0
  140. package/src/azure-devops/auth.ts +78 -0
  141. package/src/azure-devops/handlers.ts +413 -0
  142. package/src/azure-devops/index.ts +27 -0
  143. package/src/azure-devops/templates.ts +108 -0
  144. package/src/azure-devops/types.ts +90 -0
  145. package/src/be/db/api-keys.ts +70 -0
  146. package/src/be/db/tasks/read.ts +1 -1
  147. package/src/be/db/tasks/write.ts +16 -0
  148. package/src/be/db-client.ts +11 -2
  149. package/src/be/db-retention.ts +95 -32
  150. package/src/be/db.ts +187 -24
  151. package/src/be/memory/constants.ts +16 -0
  152. package/src/be/memory/graph-expansion.ts +8 -1
  153. package/src/be/memory/index-content.ts +20 -1
  154. package/src/be/memory/key-guard.ts +93 -0
  155. package/src/be/memory/key-paths.ts +103 -0
  156. package/src/be/memory/providers/sqlite-store.ts +203 -60
  157. package/src/be/memory/raters/llm-summarizer.ts +10 -4
  158. package/src/be/memory/raters/llm.ts +15 -5
  159. package/src/be/memory/raters/store.ts +6 -3
  160. package/src/be/memory/raters/types.ts +11 -0
  161. package/src/be/memory/reranker.ts +38 -7
  162. package/src/be/memory/types.ts +12 -1
  163. package/src/be/migrations/185_api_key_auth_failures.sql +6 -0
  164. package/src/be/migrations/186_api_key_seat_mismatch.sql +8 -0
  165. package/src/be/migrations/190_memory_rating_model.sql +7 -0
  166. package/src/be/migrations/191_context_versions_previous_index.sql +8 -0
  167. package/src/be/model-tier-keys.ts +16 -1
  168. package/src/be/model-tier-resolution.ts +63 -18
  169. package/src/be/model-validation.ts +86 -10
  170. package/src/be/pricing-normalize.ts +4 -2
  171. package/src/be/scripts/typecheck.ts +4 -3
  172. package/src/be/seed/runner.ts +18 -12
  173. package/src/be/seed/types.ts +1 -0
  174. package/src/be/seed-pricing.ts +16 -0
  175. package/src/be/seed-scripts/catalog/task-failure-audit.ts +26 -26
  176. package/src/be/swarm-config-guard.ts +13 -1
  177. package/src/commands/claude-managed-setup.ts +33 -31
  178. package/src/commands/codex-login.ts +67 -0
  179. package/src/commands/credential-outcome-report.ts +191 -0
  180. package/src/commands/provider-credentials.ts +28 -15
  181. package/src/commands/rate-limit-outcome.ts +34 -4
  182. package/src/commands/runner.ts +479 -228
  183. package/src/commands/seat-mismatch-report.ts +46 -0
  184. package/src/e2b/env.ts +2 -0
  185. package/src/extensions/apply-task-create.ts +27 -1
  186. package/src/extensions/catalog.generated.json +17 -0
  187. package/src/extensions/contract-types.generated.ts +1 -1
  188. package/src/github/handlers.ts +10 -74
  189. package/src/github/reactions.ts +119 -138
  190. package/src/github/task-reactions.ts +34 -11
  191. package/src/heartbeat/heartbeat.ts +15 -2
  192. package/src/hooks/hook.ts +1 -1
  193. package/src/http/agents.ts +15 -2
  194. package/src/http/api-keys.ts +140 -2
  195. package/src/http/codex-oauth-keep-warm.ts +3 -5
  196. package/src/http/core.ts +12 -0
  197. package/src/http/extensions.ts +51 -27
  198. package/src/http/index.ts +4 -0
  199. package/src/http/mcp-user.ts +8 -13
  200. package/src/http/mcp.ts +19 -12
  201. package/src/http/memory.ts +91 -18
  202. package/src/http/poll.ts +9 -1
  203. package/src/http/schedules.ts +17 -2
  204. package/src/http/script-runs.ts +12 -0
  205. package/src/http/session-data.ts +6 -4
  206. package/src/http/stats.ts +1 -0
  207. package/src/http/status.ts +15 -1
  208. package/src/http/tasks.ts +80 -8
  209. package/src/http/users.ts +1 -1
  210. package/src/http/webhooks.ts +120 -2
  211. package/src/http/workflows.ts +11 -0
  212. package/src/mcp-client/http-client.ts +5 -0
  213. package/src/memory/recall-query.ts +74 -0
  214. package/src/prompts/base-prompt.ts +15 -4
  215. package/src/prompts/session-templates.ts +22 -1
  216. package/src/providers/acp-adapter.ts +1 -0
  217. package/src/providers/claude-adapter.ts +98 -21
  218. package/src/providers/claude-managed-adapter.ts +30 -2
  219. package/src/providers/claude-sdk-session.ts +3 -1
  220. package/src/providers/codex-adapter.ts +11 -11
  221. package/src/providers/codex-skill-resolver.ts +6 -0
  222. package/src/providers/devin-adapter.ts +1 -0
  223. package/src/providers/dsh-adapter.ts +205 -7
  224. package/src/providers/harness-version.ts +83 -7
  225. package/src/providers/opencode-adapter.ts +77 -4
  226. package/src/providers/pi-binary-root/src/extensions/codemode/worker.ts +11 -0
  227. package/src/providers/pi-codemode-runtime.ts +17 -0
  228. package/src/providers/pi-mono-adapter.ts +387 -83
  229. package/src/providers/pi-mono-extension.ts +17 -2
  230. package/src/providers/pricing-sources.md +5 -1
  231. package/src/providers/reasoning-effort.ts +10 -2
  232. package/src/providers/types.ts +9 -1
  233. package/src/rbac/legacy-policy.ts +20 -0
  234. package/src/rbac/permissions.ts +15 -0
  235. package/src/scripts-runtime/types/stdlib.d.ts +13 -5
  236. package/src/scripts-runtime/types/swarm-extension.d.ts +4 -2
  237. package/src/scripts-runtime/types/swarm-sdk.d.ts +13 -5
  238. package/src/slack/assistant.ts +13 -0
  239. package/src/slack/render-v2.ts +87 -37
  240. package/src/slack/session-status.ts +541 -0
  241. package/src/tasks/context-key.ts +38 -1
  242. package/src/tasks/sibling-awareness.ts +3 -2
  243. package/src/telemetry.ts +5 -4
  244. package/src/templates.d.ts +6 -0
  245. package/src/tests/api-key-auth-failure-route.test.ts +142 -0
  246. package/src/tests/api-key-tracking.test.ts +368 -1
  247. package/src/tests/azure-devops-auth.test.ts +100 -0
  248. package/src/tests/azure-devops-handlers.test.ts +324 -0
  249. package/src/tests/azure-devops-webhook-malformed.test.ts +96 -0
  250. package/src/tests/base-prompt.test.ts +40 -2
  251. package/src/tests/claude-adapter.test.ts +58 -0
  252. package/src/tests/claude-default-route.test.ts +260 -0
  253. package/src/tests/claude-managed-adapter.test.ts +47 -0
  254. package/src/tests/claude-managed-setup.test.ts +48 -0
  255. package/src/tests/claude-prompt-body-once.test.ts +117 -0
  256. package/src/tests/claude-routes-e2e.test.ts +316 -0
  257. package/src/tests/codex-auth-failure.test.ts +52 -0
  258. package/src/tests/codex-login.test.ts +116 -0
  259. package/src/tests/context-versions-retention.test.ts +314 -0
  260. package/src/tests/core-auth.test.ts +7 -0
  261. package/src/tests/credential-exhaustion-policy.test.ts +118 -3
  262. package/src/tests/credential-outcome-report.test.ts +171 -0
  263. package/src/tests/credential-status-api.test.ts +103 -2
  264. package/src/tests/db-retention.test.ts +14 -14
  265. package/src/tests/db-task-read-contract.test.ts +6 -0
  266. package/src/tests/db-task-write-contract.test.ts +533 -1
  267. package/src/tests/docs-index-footprint.test.js +3 -3
  268. package/src/tests/dokploy-deploy.test.ts +315 -0
  269. package/src/tests/dsh-adapter.test.ts +134 -2
  270. package/src/tests/dsh-usage.test.ts +153 -0
  271. package/src/tests/explicit-model-validation.test.ts +253 -2
  272. package/src/tests/extensions-catalog.test.ts +1 -0
  273. package/src/tests/extensions-example-deploy-awareness.test.ts +301 -0
  274. package/src/tests/extensions-http.test.ts +137 -10
  275. package/src/tests/extensions-mcp-tools.test.ts +28 -0
  276. package/src/tests/extensions-pre-task.test.ts +73 -0
  277. package/src/tests/fetch-resolved-env.test.ts +70 -0
  278. package/src/tests/fixtures/azure-devops/pull-request-commented.json +129 -0
  279. package/src/tests/fixtures/azure-devops/pull-request-created.json +88 -0
  280. package/src/tests/fixtures/fake-claude-routes.ts +229 -0
  281. package/src/tests/github-handlers-reactions.test.ts +486 -0
  282. package/src/tests/github-reactions.test.ts +280 -0
  283. package/src/tests/hang-watchdog-worker.ts +47 -0
  284. package/src/tests/hang-watchdog.test.ts +45 -0
  285. package/src/tests/hang-watchdog.ts +30 -0
  286. package/src/tests/harness-cli-version.test.ts +62 -0
  287. package/src/tests/harness-model-guard.test.ts +123 -0
  288. package/src/tests/harness-version.test.ts +70 -3
  289. package/src/tests/http-api-integration.test.ts +21 -0
  290. package/src/tests/http-task-write-ownership.test.ts +195 -0
  291. package/src/tests/internal-ai/complete-structured.test.ts +94 -0
  292. package/src/tests/internal-ai/credentials.test.ts +22 -0
  293. package/src/tests/internal-ai/models.test.ts +36 -2
  294. package/src/tests/internal-ai/schema-parity.test.ts +25 -1
  295. package/src/tests/internal-ai/summarize-session.test.ts +23 -7
  296. package/src/tests/mcp-user-route.test.ts +133 -0
  297. package/src/tests/memory-fts-populate.test.ts +139 -0
  298. package/src/tests/memory-http-recall-gating.test.ts +125 -1
  299. package/src/tests/memory-key-paths.test.ts +1055 -0
  300. package/src/tests/memory-rate-endpoint.test.ts +66 -0
  301. package/src/tests/memory-rater-llm-summarizer.test.ts +2 -1
  302. package/src/tests/memory-rater-llm.test.ts +73 -0
  303. package/src/tests/memory-rater-store.test.ts +31 -0
  304. package/src/tests/memory-reranker.test.ts +40 -0
  305. package/src/tests/model-rate-limit-windows.test.ts +19 -0
  306. package/src/tests/model-tier-resolution.test.ts +92 -0
  307. package/src/tests/opencode-adapter.test.ts +214 -2
  308. package/src/tests/opencode-plugin.test.ts +4 -0
  309. package/src/tests/pi-codemode.test.ts +324 -0
  310. package/src/tests/pi-mono-adapter.test.ts +3 -0
  311. package/src/tests/pi-native-mcp.test.ts +193 -0
  312. package/src/tests/pi-tool-exposure.test.ts +374 -0
  313. package/src/tests/preload.ts +9 -0
  314. package/src/tests/prompt-template-session.test.ts +5 -3
  315. package/src/tests/provider-registration.test.ts +0 -2
  316. package/src/tests/providers/pi-cost.test.ts +190 -4
  317. package/src/tests/rate-limit-event.test.ts +65 -0
  318. package/src/tests/rate-limit-outcome.test.ts +90 -0
  319. package/src/tests/rbac-engine.test.ts +41 -2
  320. package/src/tests/runner-key-completion-outcome.test.ts +112 -0
  321. package/src/tests/runner-key-outcome-late-reset.test.ts +224 -0
  322. package/src/tests/runner-registration-retry.test.ts +149 -0
  323. package/src/tests/runner-slot-reconcile.test.ts +199 -0
  324. package/src/tests/script-connections.test.ts +8 -0
  325. package/src/tests/seat-mismatch-report.test.ts +85 -0
  326. package/src/tests/seed-scripts.test.ts +49 -0
  327. package/src/tests/seed.test.ts +25 -0
  328. package/src/tests/session-costs-recompute-all-providers.test.ts +23 -0
  329. package/src/tests/slack-render-v2.test.ts +96 -0
  330. package/src/tests/slack-session-status.test.ts +626 -0
  331. package/src/tests/status.test.ts +29 -0
  332. package/src/tests/steering-promotion.test.ts +51 -0
  333. package/src/tests/store-progress-ownership.test.ts +136 -0
  334. package/src/tests/subscription-plans.test.ts +28 -0
  335. package/src/tests/task-citations.test.ts +3 -2
  336. package/src/tests/task-reactions.test.ts +29 -6
  337. package/src/tests/vcs-azure-devops.test.ts +73 -0
  338. package/src/tests/webhooks-task-blocked.test.ts +23 -0
  339. package/src/tests/workflow-agent-task.test.ts +30 -0
  340. package/src/tests/workflow-llm.test.ts +14 -0
  341. package/src/tests/workflow-triggers-v2.test.ts +320 -0
  342. package/src/tools/context-diff.ts +20 -0
  343. package/src/tools/extension-install.ts +27 -16
  344. package/src/tools/memory-edit.ts +47 -3
  345. package/src/tools/memory-search.ts +13 -1
  346. package/src/tools/memory-store.ts +55 -3
  347. package/src/tools/schedules/create-schedule.ts +1 -1
  348. package/src/tools/schedules/patch-schedule.ts +16 -3
  349. package/src/tools/schedules/update-schedule.ts +16 -3
  350. package/src/tools/send-task.ts +10 -7
  351. package/src/tools/store-progress.ts +49 -4
  352. package/src/tools/task-action.ts +2 -1
  353. package/src/tools/workflows/create-workflow.ts +8 -2
  354. package/src/tools/workflows/update-workflow.ts +8 -2
  355. package/src/types.ts +54 -7
  356. package/src/utils/codex-auth-failure.ts +34 -0
  357. package/src/utils/credentials.test.ts +31 -1
  358. package/src/utils/credentials.ts +92 -39
  359. package/src/utils/dsh-usage.ts +53 -0
  360. package/src/utils/error-tracker.ts +80 -0
  361. package/src/utils/harness-cli-version.ts +6 -4
  362. package/src/utils/internal-ai/complete-structured.ts +26 -3
  363. package/src/utils/internal-ai/credentials.ts +23 -9
  364. package/src/utils/internal-ai/index.ts +8 -1
  365. package/src/utils/internal-ai/models.ts +34 -8
  366. package/src/utils/internal-ai/summarize-session.ts +22 -8
  367. package/src/utils/model-rate-limit-windows.ts +12 -0
  368. package/src/utils/runtime-model-catalog.ts +15 -0
  369. package/src/utils/secret-scrubber.ts +8 -0
  370. package/src/utils/spawn-model-guard.ts +43 -0
  371. package/src/utils/subscription-plans.ts +22 -0
  372. package/src/vcs/azure-devops.ts +80 -0
  373. package/src/vcs/index.ts +5 -1
  374. package/src/vcs/types.ts +2 -2
  375. package/src/workflows/executors/agent-task.ts +7 -6
  376. package/src/workflows/model-validation.ts +45 -0
  377. package/src/workflows/patch-definition.ts +5 -0
  378. package/src/workflows/triggers.ts +85 -0
  379. package/templates/community/open-prompt-showreel/PLAYBOOK.md +336 -0
  380. package/templates/community/open-prompt-showreel/README.md +33 -0
  381. package/templates/community/open-prompt-showreel/example/tla-races/facts.ts +145 -0
  382. package/templates/community/open-prompt-showreel/example/tla-races/facts.v3.json +140 -0
  383. package/templates/community/open-prompt-showreel/example/tla-races/music.mist-city.json +8 -0
  384. package/templates/community/open-prompt-showreel/example/tla-races/reel.html +805 -0
  385. package/templates/community/open-prompt-showreel/example/tla-races/smoke.sh +48 -0
  386. package/templates/community/open-prompt-showreel/lead-prompt.md +89 -0
  387. package/templates/community/open-prompt-showreel/setup.sh +167 -0
  388. package/templates/community/open-prompt-showreel/skills/motion-design-replication/SKILL.md +85 -0
  389. package/templates/community/open-prompt-showreel/skills/motion-design-video-analysis/SKILL.md +115 -0
  390. package/templates/community/open-prompt-showreel/skills/open-prompt-showreel/SKILL.md +147 -0
  391. package/templates/community/open-prompt-showreel/skills/video-generation/SKILL.md +195 -0
  392. package/templates/community/open-prompt-showreel/tools/fetch-music.sh +65 -0
  393. package/templates/community/open-prompt-showreel/tools/music-analyze.py +69 -0
  394. package/templates/community/open-prompt-showreel/tools/music-current.sh +34 -0
  395. package/templates/community/open-prompt-showreel/tools/music-cut.sh +36 -0
  396. package/templates/community/open-prompt-showreel/tools/music-refine.py +39 -0
  397. package/templates/community/open-prompt-showreel/tools/render.mjs +157 -0
  398. package/templates/community/open-prompt-showreel/tools/sheet.sh +44 -0
  399. package/templates/community/open-prompt-showreel/tools/web-compress.sh +17 -0
  400. package/templates/community/open-prompt-showreel/tools/x-reencode.sh +21 -0
  401. package/templates/extensions/README.md +1 -0
  402. package/templates/extensions/deploy-awareness/README.md +28 -0
  403. package/templates/extensions/deploy-awareness/hooks.ts +152 -0
  404. package/templates/extensions/deploy-awareness/manifest.json +8 -0
  405. package/templates/skills/memory/config.json +2 -2
  406. package/templates/skills/memory/content.md +59 -5
  407. package/templates/skills/swarm-extensions/config.json +1 -1
  408. package/templates/skills/swarm-extensions/content.md +28 -5
  409. package/templates/skills/workflow-iterate/content.md +1 -0
  410. package/dist/boot-seeds-h7c32hvm.js +0 -27
  411. package/dist/cli-2djtr51b.js +0 -48
  412. package/dist/cli-7zttzetj.js +0 -324
  413. package/dist/cli-j490egb5.js +0 -5632
  414. package/dist/cli-m4excttz.js +0 -333481
  415. package/dist/index-bjmjh9h4.js +0 -29
@@ -1,3 +1,7 @@
1
+ import {
2
+ ALL_TOOLS,
3
+ init_tool_config
4
+ } from "./cli-3qhyh31j.js";
1
5
  import {
2
6
  AgentAvatarSchema,
3
7
  CreateTaskOptionsSchema,
@@ -18,7 +22,7 @@ import {
18
22
  normalizeAssetKey,
19
23
  parseAssetKey,
20
24
  parseModelTier
21
- } from "./cli-e4xnc0qp.js";
25
+ } from "./cli-akfj32vj.js";
22
26
  import {
23
27
  IdentityFieldBudgetError,
24
28
  checkIdentityFieldBudget,
@@ -31,11 +35,7 @@ import {
31
35
  init_templates,
32
36
  matchesDefaultClaudeMd,
33
37
  matchesDefaultIdentityMd
34
- } from "./cli-ardpzhjm.js";
35
- import {
36
- init_config,
37
- isSlackConfigured
38
- } from "./cli-n7h1kqpf.js";
38
+ } from "./cli-yrg7c73k.js";
39
39
  import {
40
40
  configureDbResolver,
41
41
  getAllTemplateDefinitions,
@@ -45,29 +45,37 @@ import {
45
45
  init_steering_enabled,
46
46
  isSteeringEnabled,
47
47
  registerTemplate
48
- } from "./cli-rgjprct3.js";
49
- import {
50
- SUBSCRIPTION_KEY_TYPES,
51
- estimateClaudePlan,
52
- init_subscription_plans
53
- } from "./cli-cqt19wg6.js";
48
+ } from "./cli-ptr8h7kp.js";
54
49
  import {
55
50
  deriveProviderFromKeyType,
56
51
  init_credentials
57
- } from "./cli-19jenss3.js";
52
+ } from "./cli-xk79303e.js";
53
+ import {
54
+ init_config,
55
+ isSlackConfigured
56
+ } from "./cli-n7h1kqpf.js";
58
57
  import {
59
58
  activeModelBlock,
60
59
  init_model_rate_limit_windows
61
- } from "./cli-de1396j2.js";
60
+ } from "./cli-ywybs5as.js";
61
+ import {
62
+ SUBSCRIPTION_KEY_TYPES,
63
+ estimateClaudePlan,
64
+ init_subscription_plans,
65
+ planAllowsModelFamily
66
+ } from "./cli-1a2j50m0.js";
62
67
  import {
63
68
  init_env_flag,
64
69
  isEnvFlagEnabled
65
70
  } from "./cli-ej6gbxfb.js";
66
71
  import {
72
+ harnessModelMismatch,
73
+ init_runtime_model_catalog,
67
74
  init_src,
68
75
  isAlias,
69
- parseAlias
70
- } from "./cli-7zttzetj.js";
76
+ parseAlias,
77
+ runtimeHarnessSections
78
+ } from "./cli-jyy6pm2f.js";
71
79
  import {
72
80
  init_zod
73
81
  } from "./cli-sd0mxa3c.js";
@@ -83,12 +91,12 @@ import {
83
91
  import {
84
92
  init_package,
85
93
  package_default
86
- } from "./cli-48527fpw.js";
94
+ } from "./cli-a8c82p2t.js";
87
95
  import {
88
96
  init_secret_scrubber,
89
97
  registerVolatileSecret,
90
98
  scrubSecrets
91
- } from "./cli-r2ap2czm.js";
99
+ } from "./cli-nexqx4ve.js";
92
100
  import {
93
101
  init_bus,
94
102
  realtimeBus
@@ -149,6 +157,14 @@ function gitlabContextKey(input) {
149
157
  }
150
158
  return ["task", "trackers", "gitlab", projectId, kind, iid].join(SEPARATOR);
151
159
  }
160
+ function azureDevOpsContextKey(input) {
161
+ const repositoryId = assertSafePart(input.repositoryId, "repositoryId");
162
+ const pullRequestId = assertSafePart(input.pullRequestId, "pullRequestId");
163
+ if (!/^\d+$/.test(pullRequestId)) {
164
+ throw new Error(`context-key: azure-devops "pullRequestId" must be a positive integer (got ${JSON.stringify(pullRequestId)})`);
165
+ }
166
+ return ["task", "trackers", "azure-devops", repositoryId, "pr", pullRequestId].join(SEPARATOR);
167
+ }
152
168
  function linearContextKey(input) {
153
169
  const issueIdentifier = assertSafePart(input.issueIdentifier, "issueIdentifier");
154
170
  return ["task", "trackers", "linear", issueIdentifier].join(SEPARATOR);
@@ -253,6 +269,21 @@ function parseContextKey(key) {
253
269
  parts: { projectId, kind, iid }
254
270
  };
255
271
  }
272
+ if (subFamily === "azure-devops") {
273
+ if (parts.length !== 6 || parts[4] !== "pr") {
274
+ throw new Error(`context-key: malformed azure-devops key: ${JSON.stringify(key)}`);
275
+ }
276
+ const idStr = parts[5];
277
+ const pullRequestId = Number.parseInt(idStr, 10);
278
+ if (!Number.isFinite(pullRequestId)) {
279
+ throw new Error(`context-key: malformed azure-devops pullRequestId "${idStr}": ${JSON.stringify(key)}`);
280
+ }
281
+ return {
282
+ family: "trackers",
283
+ subFamily: "azure-devops",
284
+ parts: { repositoryId: parts[3], kind: "pr", pullRequestId }
285
+ };
286
+ }
256
287
  if (subFamily === "linear") {
257
288
  if (parts.length !== 4) {
258
289
  throw new Error(`context-key: malformed linear key: ${JSON.stringify(key)}`);
@@ -361,7 +392,7 @@ var init_slack_routing = __esm(() => {
361
392
 
362
393
  // src/telemetry.ts
363
394
  import { randomUUID } from "node:crypto";
364
- function isEnabled() {
395
+ function isTelemetryEnabled() {
365
396
  return isEnvFlagEnabled("ANONYMIZED_TELEMETRY", true);
366
397
  }
367
398
  function isCloudHostname(hostname) {
@@ -432,7 +463,7 @@ function _hasEmailChannel(env = process.env) {
432
463
  return !!env.AGENTMAIL_WEBHOOK_SECRET && !isEnvFlagEnabled("AGENTMAIL_DISABLE", false, env);
433
464
  }
434
465
  async function initTelemetry(sourceId, getConfig, setConfig, options = {}) {
435
- if (!isEnabled())
466
+ if (!isTelemetryEnabled())
436
467
  return;
437
468
  source = sourceId;
438
469
  const generateIfMissing = options.generateIfMissing === true;
@@ -495,7 +526,7 @@ function getTelemetryEnvironment() {
495
526
  return "production";
496
527
  }
497
528
  function track(options) {
498
- if (!isEnabled() || !installationId)
529
+ if (!isTelemetryEnabled() || !installationId)
499
530
  return;
500
531
  try {
501
532
  const payload = {
@@ -536,7 +567,7 @@ function track(options) {
536
567
  } catch {}
537
568
  }
538
569
  function emitIntegrationConnected(type, providerSlug, firstOfType) {
539
- if (!isEnabled() || !installationId)
570
+ if (!isTelemetryEnabled() || !installationId)
540
571
  return false;
541
572
  const provider = _resolveIntegrationProvider(providerSlug);
542
573
  telemetry.integration("connected", {
@@ -658,6 +689,27 @@ var init_telemetry = __esm(() => {
658
689
  };
659
690
  });
660
691
 
692
+ // src/utils/codex-auth-failure.ts
693
+ function isCodexAuthFailureReason(failureReason) {
694
+ if (!failureReason || !failureReason.includes("[auth-error]"))
695
+ return false;
696
+ const lower = failureReason.toLowerCase();
697
+ return !TRANSIENT_AUTH_ERROR_MARKERS.some((m) => lower.includes(m));
698
+ }
699
+ var CODEX_AUTH_FAILURE_BENCH_THRESHOLD = 2, CODEX_AUTH_FAILURE_BENCH_MS, CODEX_AUTH_WATCH_NAMESPACE = "codex-auth-watch", codexAuthBenchMarkerKey = (keySuffix) => `bench:${keySuffix}`, TRANSIENT_AUTH_ERROR_MARKERS;
700
+ var init_codex_auth_failure = __esm(() => {
701
+ CODEX_AUTH_FAILURE_BENCH_MS = 365 * 24 * 60 * 60 * 1000;
702
+ TRANSIENT_AUTH_ERROR_MARKERS = [
703
+ "waiting for the refresh lock",
704
+ "refresh rejected (429",
705
+ "refresh rejected (5",
706
+ "refresh rejected (unknown status",
707
+ "out of credits",
708
+ "no credentials found in config store",
709
+ "not a confirmed auth rejection"
710
+ ];
711
+ });
712
+
661
713
  // src/utils/github-pull-request.ts
662
714
  function parseGitHubPullRequestToken(token) {
663
715
  const candidate = token.replace(TRAILING_PROSE_PUNCTUATION_RE, "");
@@ -1423,8 +1475,9 @@ class BunSqliteClient {
1423
1475
  async runTimed(sql, params = []) {
1424
1476
  let executionMs = 0;
1425
1477
  const result = await this.execute(sql, (db) => {
1426
- const run = db.query(sql).run(...params);
1427
- return { changes: run.changes };
1478
+ db.query(sql).run(...params);
1479
+ const own = db.query("SELECT changes() AS n").get();
1480
+ return { changes: own?.n ?? 0 };
1428
1481
  }, (ms) => {
1429
1482
  executionMs += ms;
1430
1483
  });
@@ -3940,6 +3993,12 @@ async function updateTaskClaudeSessionId(taskId, claudeSessionId, provider, prov
3940
3993
  const row = await getDbClient().get(`UPDATE agent_tasks SET ${setClauses.join(", ")} WHERE id = ? RETURNING *`, params);
3941
3994
  return row ? rowToAgentTask(row) : null;
3942
3995
  }
3996
+ async function recordTaskProviderIfUnset(taskId, provider) {
3997
+ await getDbClient().run("UPDATE agent_tasks SET provider = ? WHERE id = ? AND provider IS NULL", [
3998
+ provider,
3999
+ taskId
4000
+ ]);
4001
+ }
3943
4002
  async function updateTaskTitle(taskId, title2) {
3944
4003
  const normalized = title2 === null ? null : title2.trim() || null;
3945
4004
  const row = await getDbClient().get("UPDATE agent_tasks SET title = ? WHERE id = ? RETURNING *", [normalized, taskId]);
@@ -4628,167 +4687,6 @@ var init_reaction_shortcode = __esm(() => {
4628
4687
  SLACK_REACTION_SHORTCODE_PATTERN = /^[a-z0-9_+'-]+(::skin-tone-[2-6])?$/;
4629
4688
  });
4630
4689
 
4631
- // src/tools/tool-config.ts
4632
- var CORE_TOOLS, DEFERRED_TOOLS, ALL_TOOLS;
4633
- var init_tool_config = __esm(() => {
4634
- CORE_TOOLS = new Set([
4635
- "join-swarm",
4636
- "my-agent-info",
4637
- "poll-task",
4638
- "get-task-details",
4639
- "store-progress",
4640
- "task-action",
4641
- "send-task",
4642
- "get-tasks",
4643
- "defer-task",
4644
- "memory-search",
4645
- "memory-get",
4646
- "memory-store",
4647
- "memory-delete",
4648
- "memory_rate",
4649
- "get-swarm",
4650
- "script-run",
4651
- "db-query",
4652
- "kv-get",
4653
- "script-query-types",
4654
- "get-repos",
4655
- "accept-steer",
4656
- "memory-edit",
4657
- "script-search",
4658
- "steer-task",
4659
- "kv-list",
4660
- "get-config"
4661
- ]);
4662
- DEFERRED_TOOLS = new Set([
4663
- "list-schedules",
4664
- "create-schedule",
4665
- "update-schedule",
4666
- "patch-schedule",
4667
- "delete-schedule",
4668
- "run-schedule-now",
4669
- "create-workflow",
4670
- "list-workflows",
4671
- "get-workflow",
4672
- "update-workflow",
4673
- "patch-workflow",
4674
- "patch-workflow-node",
4675
- "delete-workflow",
4676
- "trigger-workflow",
4677
- "list-workflow-runs",
4678
- "get-workflow-run",
4679
- "retry-workflow-run",
4680
- "cancel-workflow-run",
4681
- "register-service",
4682
- "unregister-service",
4683
- "list-services",
4684
- "update-service-status",
4685
- "set-config",
4686
- "list-config",
4687
- "delete-config",
4688
- "credential-bindings",
4689
- "script-connections",
4690
- "model-catalog-refresh",
4691
- "model-catalog-overlay-upsert",
4692
- "update-repo",
4693
- "update-profile",
4694
- "context-history",
4695
- "context-diff",
4696
- "read-messages",
4697
- "post-message",
4698
- "slack-reply",
4699
- "slack-read",
4700
- "slack-upload-file",
4701
- "slack-download-file",
4702
- "slack-list-channels",
4703
- "slack-post",
4704
- "slack-start-thread",
4705
- "slack-create-channel",
4706
- "slack-invite-to-channel",
4707
- "slack-archive-channel",
4708
- "slack-delete",
4709
- "slack-update",
4710
- "create-channel",
4711
- "delete-channel",
4712
- "list-channels",
4713
- "register-agentmail-inbox",
4714
- "register-kapso-number",
4715
- "unregister-kapso-number",
4716
- "send-whatsapp-message",
4717
- "reply-whatsapp-message",
4718
- "tracker-status",
4719
- "get-oauth-access-token",
4720
- "tracker-link-task",
4721
- "tracker-unlink",
4722
- "tracker-sync-status",
4723
- "tracker-map-agent",
4724
- "list-prompt-templates",
4725
- "get-prompt-template",
4726
- "set-prompt-template",
4727
- "delete-prompt-template",
4728
- "preview-prompt-template",
4729
- "create_metric",
4730
- "request-human-input",
4731
- "cancel-approval-request",
4732
- "skill-create",
4733
- "skill-update",
4734
- "skill-delete",
4735
- "skill-get",
4736
- "skill-get-file",
4737
- "skill-list",
4738
- "skill-search",
4739
- "skill-install",
4740
- "skill-uninstall",
4741
- "skill-install-remote",
4742
- "skill-sync-remote",
4743
- "skill-publish",
4744
- "mcp-server-create",
4745
- "mcp-server-delete",
4746
- "mcp-server-get",
4747
- "mcp-server-install",
4748
- "mcp-server-list",
4749
- "mcp-server-uninstall",
4750
- "mcp-server-update",
4751
- "resolve-user",
4752
- "manage-user",
4753
- "app-get",
4754
- "app-list",
4755
- "app-patch",
4756
- "app-query",
4757
- "app-sync",
4758
- "app-upsert",
4759
- "app-history",
4760
- "app-diff",
4761
- "app-rollback",
4762
- "create_page",
4763
- "delete-page",
4764
- "kv-set",
4765
- "kv-delete",
4766
- "kv-incr",
4767
- "room-get",
4768
- "room-change",
4769
- "room-reset",
4770
- "room-decode",
4771
- "script-upsert",
4772
- "script-delete",
4773
- "script-apis",
4774
- "launch-script-run",
4775
- "get-script-run",
4776
- "list-script-runs",
4777
- "extension-delete",
4778
- "extension-enable",
4779
- "extension-disable",
4780
- "extension-activate-version",
4781
- "extension-catalog",
4782
- "extension-install",
4783
- "extension-list",
4784
- "swarm_x",
4785
- "cancel-task",
4786
- "inject-learning",
4787
- "get-metrics"
4788
- ]);
4789
- ALL_TOOLS = new Set([...CORE_TOOLS, ...DEFERRED_TOOLS]);
4790
- });
4791
-
4792
4690
  // src/utils/task-tool-manifest.ts
4793
4691
  function parseTaskToolManifest(value) {
4794
4692
  return taskToolManifestSchema.parse(JSON.parse(value));
@@ -4816,6 +4714,12 @@ function tierConfigKey(provider, tier) {
4816
4714
  function isTierConfigKey(key) {
4817
4715
  return TIER_CONFIG_KEY_RE.test(key.toUpperCase());
4818
4716
  }
4717
+ function tierConfigKeyProvider(key) {
4718
+ const match = TIER_CONFIG_KEY_RE.exec(key.toUpperCase());
4719
+ if (!match)
4720
+ return null;
4721
+ return ProviderNameSchema.options.find((p) => p.toUpperCase().replace(/-/g, "_") === match[1]) ?? null;
4722
+ }
4819
4723
  function validateTierConfigValue(key, value) {
4820
4724
  const message = `Invalid ${key} (expected a model id, a CLI alias such as "opus", or latest:<anthropic|openai|openrouter>/<target>[@stable|@any])`;
4821
4725
  if (typeof value !== "string")
@@ -4825,12 +4729,17 @@ function validateTierConfigValue(key, value) {
4825
4729
  return message;
4826
4730
  if (isAlias(trimmed) && !parseAlias(trimmed))
4827
4731
  return message;
4732
+ const provider = tierConfigKeyProvider(key);
4733
+ if (provider && harnessModelMismatch(trimmed, provider, runtimeHarnessSections())) {
4734
+ return `Invalid ${key}: model "${trimmed}" does not run on the ${provider} harness.`;
4735
+ }
4828
4736
  return null;
4829
4737
  }
4830
4738
  var TIER_CONFIG_KEY_RE;
4831
4739
  var init_model_tier_keys = __esm(() => {
4832
4740
  init_src();
4833
4741
  init_types();
4742
+ init_runtime_model_catalog();
4834
4743
  TIER_CONFIG_KEY_RE = new RegExp(`^MODEL_TIER_(${ProviderNameSchema.options.map((p) => p.toUpperCase().replace(/-/g, "_")).join("|")})_(${MODEL_TIERS.map((t) => t.toUpperCase()).join("|")})$`);
4835
4744
  });
4836
4745
 
@@ -5029,11 +4938,15 @@ var init_swarm_config_guard = __esm(() => {
5029
4938
  "POOL_AFFINITY_ENFORCEMENT",
5030
4939
  "SCRIPTS_ONLY_MCP",
5031
4940
  "TASK_TOOL_PRELOAD_ENABLED",
4941
+ "PI_TOOL_DEFERRAL",
4942
+ "PI_CODEMODE",
4943
+ "PI_CODEMODE_MODELS",
5032
4944
  "SLACK_DISABLE",
5033
4945
  "SLACK_RENDER_V2",
5034
4946
  "SLACK_RENDER_V2_DELEGATION",
5035
4947
  "GITHUB_DISABLE",
5036
4948
  "GITLAB_DISABLE",
4949
+ "AZURE_DEVOPS_DISABLE",
5037
4950
  "LINEAR_DISABLE",
5038
4951
  "JIRA_DISABLE",
5039
4952
  "AGENTMAIL_DISABLE",
@@ -5042,6 +4955,7 @@ var init_swarm_config_guard = __esm(() => {
5042
4955
  "RBAC_ENABLED",
5043
4956
  "SEED_AUTOMATIONS_ENABLED",
5044
4957
  "RBAC_AUDIT_DISABLED",
4958
+ "EXTENSION_ALLOW_INLINE_INSTALL",
5045
4959
  "BUDGET_ADMISSION_DISABLED",
5046
4960
  "MCP_OAUTH_ALLOW_PRIVATE_HOSTS",
5047
4961
  "OTEL_TRACE_POLL",
@@ -5089,7 +5003,12 @@ var init_swarm_config_guard = __esm(() => {
5089
5003
  "SLACK_TREE_STALL_MIN"
5090
5004
  ], 1),
5091
5005
  ...boundedIntegerValidatorsFor(DB_RETENTION_TUNING_BOUNDS),
5092
- ...boundedIntegerValidators(["SESSION_LOG_RETENTION_DAYS", "AGENT_LOG_RETENTION_DAYS", "EVENTS_RETENTION_DAYS"], 1, MAX_DB_RETENTION_DAYS),
5006
+ ...boundedIntegerValidators([
5007
+ "SESSION_LOG_RETENTION_DAYS",
5008
+ "AGENT_LOG_RETENTION_DAYS",
5009
+ "EVENTS_RETENTION_DAYS",
5010
+ "CONTEXT_VERSIONS_KEEP_LATEST"
5011
+ ], 1, MAX_DB_RETENTION_DAYS),
5093
5012
  ...integerValidators(["HEARTBEAT_MAX_AUTO_ASSIGN"], 0),
5094
5013
  ...integerValidators(["MODEL_LATEST_SOAK_DAYS"], 0),
5095
5014
  ...integerValidators(["APPROVAL_REQUEST_AUTO_CANCELLATION_DAYS"], 0),
@@ -5099,6 +5018,43 @@ var init_swarm_config_guard = __esm(() => {
5099
5018
  };
5100
5019
  });
5101
5020
 
5021
+ // src/be/db/api-keys.ts
5022
+ async function recordKeySeatMismatch(keyType, keySuffix, keyIndex, model, scope = "global", scopeId = null) {
5023
+ const now = new Date().toISOString();
5024
+ const effectiveScopeId = scopeId ?? "";
5025
+ const provider = deriveProviderFromKeyType(keyType);
5026
+ return getDbClient().transaction(async (tx) => {
5027
+ await tx.run(`INSERT INTO api_key_status (keyType, keySuffix, keyIndex, scope, scopeId, provider, updatedAt)
5028
+ VALUES (?, ?, ?, ?, ?, ?, ?)
5029
+ ON CONFLICT(keyType, keySuffix, scope, scopeId)
5030
+ DO UPDATE SET
5031
+ keyIndex = excluded.keyIndex,
5032
+ provider = excluded.provider,
5033
+ updatedAt = excluded.updatedAt`, [keyType, keySuffix, keyIndex, scope, effectiveScopeId, provider, now]);
5034
+ await tx.run(`UPDATE api_key_status SET lastSeatMismatchAt = ?, lastSeatMismatchModel = ?
5035
+ WHERE keyType = ? AND keySuffix = ?`, [now, model, keyType, keySuffix]);
5036
+ let planChanged = false;
5037
+ if (keyType === "CLAUDE_CODE_OAUTH_TOKEN" && !planAllowsModelFamily("claude_team_standard", model)) {
5038
+ const result = await tx.run(`UPDATE api_key_status SET plan = 'claude_team_standard', planSource = 'detected'
5039
+ WHERE keyType = ? AND keySuffix = ? AND COALESCE(planSource, '') != 'manual'`, [keyType, keySuffix]);
5040
+ planChanged = result.changes > 0;
5041
+ }
5042
+ if (!planChanged) {
5043
+ const stored = await tx.get(`SELECT plan FROM api_key_status
5044
+ WHERE keyType = ? AND keySuffix = ? AND scope = ? AND scopeId = ?`, [keyType, keySuffix, scope, effectiveScopeId]);
5045
+ if (planAllowsModelFamily(stored?.plan, model)) {
5046
+ console.warn(`[api-keys] seat mismatch: key ...${keySuffix} (${keyType}) has plan ${stored?.plan ?? "none"} but cannot run ${model}`);
5047
+ }
5048
+ }
5049
+ return { planChanged };
5050
+ });
5051
+ }
5052
+ var init_api_keys = __esm(() => {
5053
+ init_credentials();
5054
+ init_subscription_plans();
5055
+ init_runtime();
5056
+ });
5057
+
5102
5058
  // src/be/db.ts
5103
5059
  var exports_db = {};
5104
5060
  __export(exports_db, {
@@ -5446,6 +5402,7 @@ __export(exports_db, {
5446
5402
  isPendingSlackMessage: () => isPendingSlackMessage,
5447
5403
  isPoolAffinityEnforcementEnabled: () => isPoolAffinityEnforcementEnabled,
5448
5404
  isSettledSlackMessage: () => isSettledSlackMessage,
5405
+ isSlackThreadAwaitingHuman: () => isSlackThreadAwaitingHuman,
5449
5406
  isSqliteVecAvailable: () => isSqliteVecAvailable,
5450
5407
  kvPrefixUpperBound: () => kvPrefixUpperBound,
5451
5408
  listAgentsWithCredStatusByProvider: () => listAgentsWithCredStatusByProvider,
@@ -5467,6 +5424,7 @@ __export(exports_db, {
5467
5424
  listScriptRuns: () => listScriptRuns,
5468
5425
  listSkillFileManifest: () => listSkillFileManifest,
5469
5426
  listSkills: () => listSkills,
5427
+ listSlackThreadsAwaitingHuman: () => listSlackThreadsAwaitingHuman,
5470
5428
  listTaskTemplates: () => listTaskTemplates,
5471
5429
  listUserFavorites: () => listUserFavorites,
5472
5430
  listWorkflowRuns: () => listWorkflowRuns,
@@ -5500,9 +5458,12 @@ __export(exports_db, {
5500
5458
  reassociateSessionLogs: () => reassociateSessionLogs,
5501
5459
  recordBudgetRefusalNotification: () => recordBudgetRefusalNotification,
5502
5460
  recordInlineScriptRun: () => recordInlineScriptRun,
5461
+ recordKeyAuthFailure: () => recordKeyAuthFailure,
5503
5462
  recordKeyRateLimitWindows: () => recordKeyRateLimitWindows,
5463
+ recordKeySeatMismatch: () => recordKeySeatMismatch,
5504
5464
  recordKeyUsage: () => recordKeyUsage,
5505
5465
  recordSlackMessage: () => recordSlackMessage,
5466
+ recordTaskProviderIfUnset: () => recordTaskProviderIfUnset,
5506
5467
  recordTaskPullRequestAttachments: () => recordTaskPullRequestAttachments,
5507
5468
  refreshDraftTaskLease: () => refreshDraftTaskLease,
5508
5469
  rejectTask: () => rejectTask,
@@ -5910,6 +5871,26 @@ async function getSlackTasksInThread(channelId, threadTs) {
5910
5871
  ORDER BY createdAt ASC, rowid ASC`, [channelId, threadTs]);
5911
5872
  return rows.map(rowToAgentTask);
5912
5873
  }
5874
+ async function listSlackThreadsAwaitingHuman() {
5875
+ return getDbClient().query(`SELECT DISTINCT task.slackChannelId AS channelId, task.slackThreadTs AS threadTs
5876
+ FROM approval_requests request
5877
+ JOIN agent_tasks task ON task.id = request.sourceTaskId
5878
+ WHERE request.status = 'pending'
5879
+ AND (request.expiresAt IS NULL OR request.expiresAt > strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
5880
+ AND task.slackChannelId IS NOT NULL
5881
+ AND task.slackThreadTs IS NOT NULL`);
5882
+ }
5883
+ async function isSlackThreadAwaitingHuman(channelId, threadTs) {
5884
+ const row = await getDbClient().get(`SELECT 1 AS waiting
5885
+ FROM approval_requests request
5886
+ JOIN agent_tasks task ON task.id = request.sourceTaskId
5887
+ WHERE request.status = 'pending'
5888
+ AND (request.expiresAt IS NULL OR request.expiresAt > strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
5889
+ AND task.slackChannelId = ?
5890
+ AND task.slackThreadTs = ?
5891
+ LIMIT 1`, [channelId, threadTs]);
5892
+ return !!row;
5893
+ }
5913
5894
  async function markTaskSlackReplySent(taskId) {
5914
5895
  await getDbClient().run(`UPDATE agent_tasks SET slackReplySent = 1 WHERE id = ?`, [taskId]);
5915
5896
  }
@@ -7356,7 +7337,7 @@ async function getUnassignedTaskIds(limit = 10) {
7356
7337
  const rows = await getDbClient().query("SELECT id FROM agent_tasks WHERE status = 'unassigned' ORDER BY priority DESC, createdAt ASC, rowid ASC LIMIT ?", [limit]);
7357
7338
  return rows.map((r) => r.id);
7358
7339
  }
7359
- async function getUnassignedTaskIdsForAgent(agentId, limit = 10) {
7340
+ async function getUnassignedTaskIdsForAgent(agentId, limit = 10, accept) {
7360
7341
  const agent = await getAgentById(agentId);
7361
7342
  if (!agent)
7362
7343
  return [];
@@ -7369,7 +7350,7 @@ async function getUnassignedTaskIdsForAgent(agentId, limit = 10) {
7369
7350
  break;
7370
7351
  for (const row of rows) {
7371
7352
  const task = rowToAgentTask(row);
7372
- if (isAgentEligibleForTask(agent, task)) {
7353
+ if (isAgentEligibleForTask(agent, task) && (!accept || await accept(task))) {
7373
7354
  eligible.push(task.id);
7374
7355
  if (eligible.length >= limit)
7375
7356
  break;
@@ -11650,8 +11631,8 @@ async function getAvailableKeyIndices(keyType, totalKeys, scope = "global", scop
11650
11631
  await client.run(`UPDATE api_key_status
11651
11632
  SET status = 'available', rateLimitedUntil = NULL, updatedAt = ?
11652
11633
  WHERE keyType = ? AND scope = ? AND scopeId = ?
11653
- AND status = 'rate_limited' AND rateLimitedUntil IS NOT NULL AND rateLimitedUntil <= ?`, [now, keyType, scope, effectiveScopeId, now]);
11654
- const rows = await client.query(`SELECT keyIndex, status, rateLimitWindows FROM api_key_status
11634
+ AND status = 'rate_limited' AND rateLimitedUntil <= ? AND consecutiveAuthFailures < ?`, [now, keyType, scope, effectiveScopeId, now, CODEX_AUTH_FAILURE_BENCH_THRESHOLD]);
11635
+ const rows = await client.query(`SELECT keyIndex, status, rateLimitWindows, plan, authFailureSeq FROM api_key_status
11655
11636
  WHERE keyType = ? AND scope = ? AND scopeId = ?`, [keyType, scope, effectiveScopeId]);
11656
11637
  const blockedIndices = new Set(rows.filter((r) => r.status === "rate_limited").map((r) => r.keyIndex));
11657
11638
  const modelBlockedIndices = [];
@@ -11670,16 +11651,26 @@ async function getAvailableKeyIndices(keyType, totalKeys, scope = "global", scop
11670
11651
  }
11671
11652
  }
11672
11653
  const modelBlockedSet = new Set(modelBlockedIndices);
11654
+ const seatBlockedIndices = [];
11655
+ if (modelFamily) {
11656
+ for (const row of rows) {
11657
+ if (!planAllowsModelFamily(row.plan, modelFamily))
11658
+ seatBlockedIndices.push(row.keyIndex);
11659
+ }
11660
+ }
11661
+ const seatBlockedSet = new Set(seatBlockedIndices);
11673
11662
  const availableIndices = [];
11674
11663
  for (let i = 0;i < totalKeys; i++) {
11675
- if (blockedIndices.has(i) || modelBlockedSet.has(i))
11664
+ if (blockedIndices.has(i) || modelBlockedSet.has(i) || seatBlockedSet.has(i))
11676
11665
  continue;
11677
11666
  availableIndices.push(i);
11678
11667
  }
11679
11668
  return {
11680
11669
  availableIndices,
11681
11670
  modelBlockedIndices,
11682
- earliestModelResetAt: earliestModelResetsAtSec !== undefined ? new Date(earliestModelResetsAtSec * 1000).toISOString() : null
11671
+ seatBlockedIndices,
11672
+ earliestModelResetAt: earliestModelResetsAtSec !== undefined ? new Date(earliestModelResetsAtSec * 1000).toISOString() : null,
11673
+ authFailureFence: Math.max(0, ...rows.map((r) => r.authFailureSeq))
11683
11674
  };
11684
11675
  }
11685
11676
  async function recordKeyUsage(keyType, keySuffix, keyIndex, taskId, scope = "global", scopeId = null, plan = null) {
@@ -11726,12 +11717,50 @@ async function markKeyRateLimited(keyType, keySuffix, keyIndex, rateLimitedUntil
11726
11717
  ON CONFLICT(keyType, keySuffix, scope, scopeId)
11727
11718
  DO UPDATE SET
11728
11719
  status = 'rate_limited',
11729
- rateLimitedUntil = excluded.rateLimitedUntil,
11720
+ rateLimitedUntil = CASE WHEN status = 'rate_limited' AND consecutiveAuthFailures >= ${CODEX_AUTH_FAILURE_BENCH_THRESHOLD} THEN MAX(COALESCE(rateLimitedUntil, ''), excluded.rateLimitedUntil) ELSE excluded.rateLimitedUntil END,
11730
11721
  lastRateLimitAt = excluded.lastRateLimitAt,
11731
11722
  rateLimitCount = rateLimitCount + 1,
11732
11723
  keyIndex = excluded.keyIndex,
11733
11724
  updatedAt = excluded.updatedAt`, [keyType, keySuffix, keyIndex, scope, effectiveScopeId, rateLimitedUntil, now, provider, now]);
11734
11725
  }
11726
+ async function recordKeyAuthFailure(keyType, keySuffix, keyIndex, scope = "global", scopeId = null) {
11727
+ const effectiveScopeId = scopeId ?? "";
11728
+ const provider = deriveProviderFromKeyType(keyType);
11729
+ return await getDbClient().transaction(async (tx) => {
11730
+ const now = new Date().toISOString();
11731
+ const source2 = "report-auth-failure";
11732
+ const row = await tx.get(`INSERT INTO api_key_status (keyType, keySuffix, keyIndex, scope, scopeId, status, consecutiveAuthFailures, lastAuthFailureAt, authFailureSeq, provider, updatedAt)
11733
+ VALUES (?, ?, ?, ?, ?, 'available', 1, ?, (SELECT COALESCE(MAX(authFailureSeq), 0) + 1 FROM api_key_status), ?, ?)
11734
+ ON CONFLICT(keyType, keySuffix, scope, scopeId)
11735
+ DO UPDATE SET
11736
+ consecutiveAuthFailures = consecutiveAuthFailures + 1,
11737
+ lastAuthFailureAt = excluded.lastAuthFailureAt, authFailureSeq = excluded.authFailureSeq,
11738
+ keyIndex = excluded.keyIndex, updatedAt = excluded.updatedAt
11739
+ RETURNING consecutiveAuthFailures, rateLimitedUntil`, [keyType, keySuffix, keyIndex, scope, effectiveScopeId, now, provider, now]);
11740
+ if (!row)
11741
+ throw new Error("Failed to record auth failure");
11742
+ const { consecutiveAuthFailures } = row;
11743
+ if (consecutiveAuthFailures < CODEX_AUTH_FAILURE_BENCH_THRESHOLD) {
11744
+ return { consecutiveAuthFailures, benched: false, rateLimitedUntil: row.rateLimitedUntil };
11745
+ }
11746
+ let benchedUntil = new Date(Date.parse(now) + CODEX_AUTH_FAILURE_BENCH_MS).toISOString();
11747
+ if (row.rateLimitedUntil && Date.parse(row.rateLimitedUntil) > Date.parse(benchedUntil)) {
11748
+ benchedUntil = row.rateLimitedUntil;
11749
+ }
11750
+ await tx.run(`UPDATE api_key_status
11751
+ SET status = 'rate_limited', rateLimitedUntil = ?, lastRateLimitAt = ?,
11752
+ rateLimitCount = rateLimitCount + 1, updatedAt = ?
11753
+ WHERE keyType = ? AND keySuffix = ? AND scope = ? AND scopeId = ?`, [benchedUntil, now, now, keyType, keySuffix, scope, effectiveScopeId]);
11754
+ await upsertKv({
11755
+ namespace: CODEX_AUTH_WATCH_NAMESPACE,
11756
+ key: codexAuthBenchMarkerKey(keySuffix),
11757
+ valueType: "json",
11758
+ value: { keyIndex, keyType, benchedAt: now, benchedUntil, lastFailAt: now, source: source2 },
11759
+ expiresAt: Date.parse(benchedUntil) + 86400000
11760
+ });
11761
+ return { consecutiveAuthFailures, benched: true, rateLimitedUntil: benchedUntil };
11762
+ });
11763
+ }
11735
11764
  function mergeRateLimitWindowTelemetry(stored, reported) {
11736
11765
  const merged = { ...stored };
11737
11766
  for (const [type, entry] of Object.entries(reported)) {
@@ -11798,14 +11827,32 @@ async function setApiKeyName(keyType, keySuffix, name, scope = "global", scopeId
11798
11827
  WHERE keyType = ? AND keySuffix = ? AND scope = ? AND scopeId = ?`, [name, new Date().toISOString(), keyType, keySuffix, scope, scopeId ?? ""]);
11799
11828
  return result.changes > 0;
11800
11829
  }
11801
- async function clearKeyRateLimit(keyType, keySuffix, scope = "global", scopeId = null) {
11830
+ async function clearKeyRateLimit(keyType, keySuffix, scope = "global", scopeId = null, opts = {}) {
11802
11831
  const now = new Date().toISOString();
11803
11832
  const effectiveScopeId = scopeId ?? "";
11804
- const result = await getDbClient().run(`UPDATE api_key_status
11805
- SET status = 'available', rateLimitedUntil = NULL, updatedAt = ?
11806
- WHERE keyType = ? AND keySuffix = ? AND scope = ? AND scopeId = ?
11807
- AND status = 'rate_limited'`, [now, keyType, keySuffix, scope, effectiveScopeId]);
11808
- return result.changes > 0;
11833
+ const { keyIndex = -1, authFence = null } = opts;
11834
+ const clearAuthBench = opts.clearAuthBench === true && authFence !== null;
11835
+ const key = [keyType, keySuffix, scope, effectiveScopeId];
11836
+ return await getDbClient().transaction(async (tx) => {
11837
+ const result = await tx.run(`UPDATE api_key_status
11838
+ SET status = 'available', rateLimitedUntil = NULL, updatedAt = ?
11839
+ WHERE keyType = ? AND keySuffix = ? AND scope = ? AND scopeId = ?
11840
+ AND status = 'rate_limited' AND ((? AND authFailureSeq <= ?) OR consecutiveAuthFailures < ?)`, [now, ...key, clearAuthBench ? 1 : 0, authFence, CODEX_AUTH_FAILURE_BENCH_THRESHOLD]);
11841
+ const cleared = result.changes > 0;
11842
+ if (!clearAuthBench)
11843
+ return cleared;
11844
+ const lifted = await tx.query(`UPDATE api_key_status SET consecutiveAuthFailures = 0, updatedAt = ?1,
11845
+ status = CASE WHEN keySuffix = ?2 THEN status ELSE 'available' END, rateLimitedUntil = CASE WHEN keySuffix = ?2 THEN rateLimitedUntil END
11846
+ WHERE keyType = ?3 AND scope = ?4 AND scopeId = ?5 AND (consecutiveAuthFailures > 0 OR status = 'rate_limited')
11847
+ AND ((keySuffix = ?2 AND authFailureSeq <= ?7) OR (keySuffix != ?2 AND keyIndex = ?6)) RETURNING keySuffix`, [now, keySuffix, keyType, scope, effectiveScopeId, keyIndex, authFence]);
11848
+ const retired = lifted.filter((row) => row.keySuffix !== keySuffix);
11849
+ if (keyType === "CODEX_OAUTH") {
11850
+ for (const suffix of [...cleared ? [keySuffix] : [], ...retired.map((r) => r.keySuffix)]) {
11851
+ await deleteKv(CODEX_AUTH_WATCH_NAMESPACE, codexAuthBenchMarkerKey(suffix));
11852
+ }
11853
+ }
11854
+ return cleared || retired.length > 0;
11855
+ });
11809
11856
  }
11810
11857
  async function getKeyStatuses(keyType, scope, scopeId) {
11811
11858
  const conditions = [];
@@ -12998,6 +13045,7 @@ var init_db = __esm(() => {
12998
13045
  init_slack_routing();
12999
13046
  init_telemetry();
13000
13047
  init_types();
13048
+ init_codex_auth_failure();
13001
13049
  init_credentials();
13002
13050
  init_github_pull_request();
13003
13051
  init_heartbeat_expiry();
@@ -13020,6 +13068,7 @@ var init_db = __esm(() => {
13020
13068
  init_swarm_config_guard();
13021
13069
  init_task_lifecycle_events();
13022
13070
  init_agents();
13071
+ init_api_keys();
13023
13072
  init_approvals();
13024
13073
  init_context_versions();
13025
13074
  init_runtime();
@@ -13076,4 +13125,4 @@ var init_db = __esm(() => {
13076
13125
  };
13077
13126
  });
13078
13127
 
13079
- export { slackContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, _resolveIntegrationType, _resolveIntegrationProvider, initTelemetry, telemetry, emitIntegrationConnected, init_telemetry, HeartbeatExpiryError, init_heartbeat_expiry, beginRequestAuthScope, setRequestAuth, getRequestAuth, getCurrentRequestAuth, runWithoutRequestAuth, init_request_auth_context, auditAssetKeys, init_asset_key_audit, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, normalizeDate, normalizeDateRequired, init_date_utils, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, init_credential_broker, isInTransaction, init_db_client, getPromptTemplateDefaultDrift, init_default_drift, init_templates2 as init_templates, isSqliteVecAvailable, resolveSqliteVecExtensionPath, __resetSqliteVecExtensionPathCacheForTests, initDb, getDb, closeDb, getDbClient, updateAgentCredentialState, updateAgentCredentialMissing, createAgent, getAgentById, EXTENSION_AGENT_ROLE, NOT_EXTENSION_AGENT_SQL, isExtensionAgent, extensionAgentAssignmentError, ReservedAgentRoleError, reservedRoleViolation, ExtensionAgentAssignmentError, getAllAgents, getAgentStatusCounts, getLeadAgent, updateAgentStatus, updateAgentMaxTasks, updateAgentProvider, setAgentHarnessProvider, updateAgentCredStatus, listAgentsWithCredStatusByProvider, getAgentHarnessProviders, updateAgentActivity, MAX_EMPTY_POLLS, incrementEmptyPollCount, resetEmptyPollCount, shouldBlockPolling, deleteAgent, getActiveTaskCount, hasCapacity, getRemainingCapacity, updateAgentStatusFromCapacity, isPoolAffinityEnforcementEnabled, buildRoutingAffinityFromAgent, isAgentEligibleForTask, getAgentDailyTaskCounts, listApprovalRequestSummaries, computeContentHash, createContextVersion, getLatestContextVersion, getContextVersion, getContextVersionHistory, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, getTaskById, getChildTasks, hasNonTerminalResumeChild, getSupersededTasksWithoutResume, getSupersededTasksWithUnsettledDependents, hasNonTerminalRerouteDecisionChild, getTasksByAgentId, getAgentCurrentTask, getTasksByStatus, findTaskByVcs, findTaskByGitHub, getAllTasks, getTasksCount, getTaskStats, getCompletedSlackTasks, getPendingSlackRelayTasks, markSlackRelayAttempted, markSlackRelayDelivered, markFinalizedSlackRelaysDelivered, getRecentlyFinishedWorkerTasks, markTasksNotified, resetTasksNotified, getInProgressSlackTasks, getSlackTasksMissingTree, getInProgressTasksByContextKey, findExistingLinearTrackerContextWork, getLatestTaskByContextKey, getLatestScriptRunStepTaskByContextKey, getAgentWorkingOnThread, getLatestActiveTaskInThread, getLatestLeadTaskInThread, getMostRecentTaskInThread, findCompletedTaskInThread, findRecentCancelledTaskInThread, onTaskStarted, init_task_lifecycle_events, createTask, getPendingTaskForAgent, assignUnassignedTaskPending, startTask, updateTaskClaudeSessionId, updateTaskTitle, completeTask, failTask, overwriteTerminalTaskResultText, cancelTask, supersedeTask, settleSupersededTaskDependents, backfillSupersedeTaskResumeTaskId, pauseTask, resumeTask, getPausedTasksForAgent, getOrphanedInProgressTasksForAgent, resetOrphanedInProgressTasksForAgent, getRecentlyCancelledTasksForAgent, deleteTask, updateTaskProgress, SteeringRequestError, isSteeringEnabled2 as isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, requestSteering, init_steering, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, init_reaction_shortcode, parseTaskToolManifest, selectTaskTools, init_task_tool_manifest, tierConfigKey, init_model_tier_keys, isInternalConfigKey, internalConfigKeyError, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, validateConfigValue, init_swarm_config_guard, getSlackRenderV2ActivatedAt, ensureSlackRenderV2Activation, getSlackDelegationActivatedAt, ensureSlackDelegationActivation, isPendingSlackMessage, isSettledSlackMessage, recordSlackMessage, reserveSlackMessage, bindSlackMessageTimestamp, updateSlackMessageRecord, markSlackTreeRendered, deleteSlackMessageRecord, getSlackTreeMessage, getSlackTreeMessageByThread, getSlackOutcomeMessage, getResolvableDeferralOutcomes, markSlackDeferralResolved, noteSlackOutcomeDeliveryFailure, abandonSlackOutcomeDelivery, getSlackTreeMessages, getSlackMessageByChannelTs, getSlackTasksInThread, markTaskSlackReplySent, setSlackMessageTracking, updateTaskVcs, insertTaskAttachment, recordTaskPullRequestAttachments, getAssetKeyMappingByProvider, upsertAssetKeyMapping, getAssetKeyMapping, listAssetSummaries, moveAssetKey, deleteTaskAttachment, replaceTaskAttachment, getTaskAttachments, createSteeringMessage, getSteeringMessagesForTask, getSteeringMessageById, getPendingSteeringForTask, getPendingSteeringForAgent, markSteeringDelivered, markSteeringHandled, markSteeringPromoted, cancelPendingSteeringForTask, hasPendingSteering, getAgentWithTasks, getAllAgentsWithTasks, createLogEntry, getLogsByAgentId, getLogsByTaskId, getLogsByTaskIdAndEventType, getLogsByTaskIdChronological, getLogsByEventType, getAllLogs, findRecentSimilarTasks, createTaskExtended, claimTask, releaseTask, acceptTask, rejectTask, moveTaskToBacklog, moveTaskFromBacklog, promoteDraftTask, refreshDraftTaskLease, promoteAbandonedDraftTasks, releaseStaleReviewingTasks, releaseStaleOfferedTasksForOfflineAgents, getOfferedTasksForAgent, claimOfferedTask, getUnassignedTasksCount, getUnassignedTaskIds, getUnassignedTaskIdsForAgent, checkDependencies, getDependentTasks, cascadeFailDependents, updateAgentProfile, updateAgentName, createChannel, getMessageById, getChannelById, getChannelByName, getAllChannels, deleteChannel, postMessage, getChannelMessages, updateReadState, getLastReadAt, getUnreadMessages, getMentionsForAgent, getInboxSummary, claimMentions, releaseMentionProcessing, releaseStaleMentionProcessing, createService, getServiceById, getServiceByAgentAndName, getServicesByAgentId, getAllServices, updateServiceStatus, deleteService, upsertService, deleteServicesByAgentId, createSessionLogs, getSessionLogsByTaskId, getSessionLogsBySession, createSessionCost, getSessionCostsByTaskId, getSessionCostsByAgentId, getAllSessionCosts, getSessionCostsFiltered, UNATTRIBUTED_USER_ID, getSessionCostSummary, getAttributionByPerson, getDashboardCostSummary, createInboxMessage, getInboxMessageById, getUnreadInboxMessages, claimInboxMessages, markInboxMessageRead, markInboxMessageResponded, markInboxMessageDelegated, releaseStaleProcessingInbox, getConcurrentContext, getScheduledTasks, getScheduledTaskById, getScheduledTaskByName, createScheduledTask, updateScheduledTask, deleteScheduledTask, getDueScheduledTasks, autoEncryptLegacyPlaintextSecrets, maskSecrets, getSwarmConfigs, getInjectableGlobalConfigs, getSwarmConfigById, getSwarmConfigLookupById, upsertSwarmConfig, emitBuiltInIntegrationConnectedOnce, deleteSwarmConfig, deleteSwarmConfigByKey, getResolvedConfig, getSwarmRepos, getSwarmRepoById, getSwarmRepoByName, getSwarmRepoByUrl, createSwarmRepo, updateSwarmRepo, deleteSwarmRepo, getAgentMailInboxMapping, getAgentMailInboxMappingsByAgent, getAllAgentMailInboxMappings, createAgentMailInboxMapping, deleteAgentMailInboxMapping, findTaskByAgentMailThread, insertActiveSession, deleteActiveSession, deleteActiveSessionById, getActiveSessions, heartbeatActiveSession, cleanupStaleSessions, cleanupAgentSessions, updateActiveSessionProviderSessionId, getActiveSessionForTask, reassociateSessionLogs, getStalledInProgressTasks, getStalePinnedResumes, failPendingResumeIfUnclaimed, getIdleWorkersWithCapacity, getUnassignedPoolTasks, getStaleUnassignedAffinityTasks, getRecentFailedTasks, getRecentCompletedCount, getRecentFailedCount, createWorkflow, getWorkflow, listWorkflows, updateWorkflow, deleteWorkflow, getWorkflowsByScheduleId, createWorkflowRun, getWorkflowRun, updateWorkflowRun, listWorkflowRuns, countWorkflowRuns, listWorkflowRunsPage, createWorkflowRunStep, getWorkflowRunStep, updateWorkflowRunStep, getWorkflowRunStepsByRunId, getStuckWorkflowRuns, getLastSuccessfulRun, getLastRunStart, getRetryableSteps, getCompletedStepNodeIds, getTaskByWorkflowRunStepId, detachTaskFromWorkflowRunStep, getStepByIdempotencyKey, getStepCountForNode, getLatestStepForNode, getCurrentStepForNode, createWorkflowVersion, getWorkflowVersions, getWorkflowVersion, createAppVersion, getAppVersions, getAppVersion, createPage, getPage, getPageBySlug, getLatestPageBySlug, listPagesByAgent, listAllPages, countAllPages, countPagesByAgent, updatePage, deletePage, incrementPageViewCount, createPageVersion, getPageVersions, getPageVersion, createMetric, getMetric, getMetricBySlug, listMetricsByAgent, listAllMetrics, countAllMetrics, countMetricsByAgent, updateMetric, deleteMetric, createMetricVersion, getMetricVersions, getMetricVersion, getPromptTemplates, getPromptTemplateById, upsertPromptTemplate, deletePromptTemplate, resetPromptTemplateToDefault, getPromptTemplateHistory, resolvePromptTemplate, checkoutPromptTemplate, getAllChannelActivityCursors, getChannelActivityCursor, upsertChannelActivityCursor, createApprovalRequest, getApprovalRequestById, resolveApprovalRequest, cancelApprovalRequestById, cancelPendingApprovalRequestsForRun, listCancelledApprovalRequestsForRun, listCancelledApprovalRequestsForStep, claimApprovalCancellationNotification, completeApprovalCancellationNotificationClaim, releaseApprovalCancellationNotificationClaim, updateApprovalRequestNotifications, listApprovalRequests, getStuckApprovalRuns, getApprovalRequestByStepId, getExpiredPendingApprovals, getStaleApprovalRequests, createWaitState, getWaitStateById, getWaitStateByStepId, getDueWaitStates, getPendingEventWaitNames, getPendingWaitsByEvent, resolveWaitState, getStuckWaitRuns, SKILL_FILE_LIMITS, normalizeSkillFilePath, createSkill, updateSkill, listSkillFileManifest, getSkillFiles, getSkillFile, upsertSkillFile, upsertSkillFiles, deleteSkillFile, deleteSkill, getSkillById, getSkillByName, listSkills, searchSkills, installSkill, getSystemDefaultSkills, installSystemDefaultSkillsForAgent, uninstallSkill, getAgentSkills, toggleAgentSkill, createMcpServer, emitMcpServerConnectedTelemetry, updateMcpServer, deleteMcpServer, getMcpServerById, getMcpServerByName, listMcpServers, installMcpServer, uninstallMcpServer, getAgentMcpServers, createContextSnapshot, getContextSnapshotsByTaskId, getContextSnapshotsBySessionId, getContextSummaryByTaskId, getAvailableKeyIndices, recordKeyUsage, setApiKeyPlan, markKeyRateLimited, recordKeyRateLimitWindows, setApiKeyName, clearKeyRateLimit, getKeyStatuses, getKeyCostSummary, getUserById, getAllUsers, createUser, updateUser, deleteUser, listInboxState, upsertInboxState, listFavorites, listUserFavorites, getFavoriteItemIdSet, setFavorite, setUserFavorite, withFavoriteFlags, listTaskTemplates, getRootTaskChain, listRecentSessions, countSessions, getBudget, getBudgets, upsertBudget, deleteBudget, getAllPricingRows, getPricingRows, getActivePricingRow, insertPricingRow, deletePricingRow, getDailySpendForAgent, getDailySpendGlobal, getDailySpendForUser, recordBudgetRefusalNotification, getBudgetRefusalNotification, getRecentBudgetRefusalNotifications, hasBudgetRefusalNotificationToday, setBudgetRefusalFollowUpTaskId, getLiveAgentCounts, getReadyAgentCounts, getInstanceActivity, getSwarmMetrics, hasFirstCompletedTask, getKv, sweepExpiredKv, sweepExpiredKvPrefix, upsertKv, claimKv, deleteKv, KvTypeCollisionError, incrKv, kvPrefixUpperBound, listKv, countKv, createScriptRun, recordInlineScriptRun, getScriptRun, getScriptRunByIdempotencyKey, listScriptRuns, countScriptRuns, countActiveScriptRuns, updateScriptRun, updateScriptRunIfNotTerminal, updateScriptRunIfRunning, getRunningScriptRuns, getScriptRunJournalStep, upsertScriptRunJournalStep, listScriptRunJournalSteps, countScriptRunJournalSteps, countScriptRunJournalAgentTaskSteps, exports_db, init_db };
13128
+ export { slackContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, azureDevOpsContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, isTelemetryEnabled, _resolveIntegrationType, _resolveIntegrationProvider, initTelemetry, telemetry, emitIntegrationConnected, init_telemetry, CODEX_AUTH_WATCH_NAMESPACE, codexAuthBenchMarkerKey, isCodexAuthFailureReason, init_codex_auth_failure, HeartbeatExpiryError, init_heartbeat_expiry, beginRequestAuthScope, setRequestAuth, getRequestAuth, getCurrentRequestAuth, runWithoutRequestAuth, init_request_auth_context, auditAssetKeys, init_asset_key_audit, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, normalizeDate, normalizeDateRequired, init_date_utils, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, init_credential_broker, isInTransaction, init_db_client, getPromptTemplateDefaultDrift, init_default_drift, init_templates2 as init_templates, isSqliteVecAvailable, resolveSqliteVecExtensionPath, __resetSqliteVecExtensionPathCacheForTests, initDb, getDb, closeDb, getDbClient, updateAgentCredentialState, updateAgentCredentialMissing, createAgent, getAgentById, EXTENSION_AGENT_ROLE, NOT_EXTENSION_AGENT_SQL, isExtensionAgent, extensionAgentAssignmentError, ReservedAgentRoleError, reservedRoleViolation, ExtensionAgentAssignmentError, getAllAgents, getAgentStatusCounts, getLeadAgent, updateAgentStatus, updateAgentMaxTasks, updateAgentProvider, setAgentHarnessProvider, updateAgentCredStatus, listAgentsWithCredStatusByProvider, getAgentHarnessProviders, updateAgentActivity, MAX_EMPTY_POLLS, incrementEmptyPollCount, resetEmptyPollCount, shouldBlockPolling, deleteAgent, getActiveTaskCount, hasCapacity, getRemainingCapacity, updateAgentStatusFromCapacity, isPoolAffinityEnforcementEnabled, buildRoutingAffinityFromAgent, isAgentEligibleForTask, getAgentDailyTaskCounts, listApprovalRequestSummaries, computeContentHash, createContextVersion, getLatestContextVersion, getContextVersion, getContextVersionHistory, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, getTaskById, getChildTasks, hasNonTerminalResumeChild, getSupersededTasksWithoutResume, getSupersededTasksWithUnsettledDependents, hasNonTerminalRerouteDecisionChild, getTasksByAgentId, getAgentCurrentTask, getTasksByStatus, findTaskByVcs, findTaskByGitHub, getAllTasks, getTasksCount, getTaskStats, getCompletedSlackTasks, getPendingSlackRelayTasks, markSlackRelayAttempted, markSlackRelayDelivered, markFinalizedSlackRelaysDelivered, getRecentlyFinishedWorkerTasks, markTasksNotified, resetTasksNotified, getInProgressSlackTasks, getSlackTasksMissingTree, getInProgressTasksByContextKey, findExistingLinearTrackerContextWork, getLatestTaskByContextKey, getLatestScriptRunStepTaskByContextKey, getAgentWorkingOnThread, getLatestActiveTaskInThread, getLatestLeadTaskInThread, getMostRecentTaskInThread, findCompletedTaskInThread, findRecentCancelledTaskInThread, onTaskStarted, init_task_lifecycle_events, createTask, getPendingTaskForAgent, assignUnassignedTaskPending, startTask, updateTaskClaudeSessionId, recordTaskProviderIfUnset, updateTaskTitle, completeTask, failTask, overwriteTerminalTaskResultText, cancelTask, supersedeTask, settleSupersededTaskDependents, backfillSupersedeTaskResumeTaskId, pauseTask, resumeTask, getPausedTasksForAgent, getOrphanedInProgressTasksForAgent, resetOrphanedInProgressTasksForAgent, getRecentlyCancelledTasksForAgent, deleteTask, updateTaskProgress, SteeringRequestError, isSteeringEnabled2 as isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, requestSteering, init_steering, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, init_reaction_shortcode, parseTaskToolManifest, selectTaskTools, init_task_tool_manifest, tierConfigKey, init_model_tier_keys, isInternalConfigKey, internalConfigKeyError, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, validateConfigValue, init_swarm_config_guard, recordKeySeatMismatch, getSlackRenderV2ActivatedAt, ensureSlackRenderV2Activation, getSlackDelegationActivatedAt, ensureSlackDelegationActivation, isPendingSlackMessage, isSettledSlackMessage, recordSlackMessage, reserveSlackMessage, bindSlackMessageTimestamp, updateSlackMessageRecord, markSlackTreeRendered, deleteSlackMessageRecord, getSlackTreeMessage, getSlackTreeMessageByThread, getSlackOutcomeMessage, getResolvableDeferralOutcomes, markSlackDeferralResolved, noteSlackOutcomeDeliveryFailure, abandonSlackOutcomeDelivery, getSlackTreeMessages, getSlackMessageByChannelTs, getSlackTasksInThread, listSlackThreadsAwaitingHuman, isSlackThreadAwaitingHuman, markTaskSlackReplySent, setSlackMessageTracking, updateTaskVcs, insertTaskAttachment, recordTaskPullRequestAttachments, getAssetKeyMappingByProvider, upsertAssetKeyMapping, getAssetKeyMapping, listAssetSummaries, moveAssetKey, deleteTaskAttachment, replaceTaskAttachment, getTaskAttachments, createSteeringMessage, getSteeringMessagesForTask, getSteeringMessageById, getPendingSteeringForTask, getPendingSteeringForAgent, markSteeringDelivered, markSteeringHandled, markSteeringPromoted, cancelPendingSteeringForTask, hasPendingSteering, getAgentWithTasks, getAllAgentsWithTasks, createLogEntry, getLogsByAgentId, getLogsByTaskId, getLogsByTaskIdAndEventType, getLogsByTaskIdChronological, getLogsByEventType, getAllLogs, findRecentSimilarTasks, createTaskExtended, claimTask, releaseTask, acceptTask, rejectTask, moveTaskToBacklog, moveTaskFromBacklog, promoteDraftTask, refreshDraftTaskLease, promoteAbandonedDraftTasks, releaseStaleReviewingTasks, releaseStaleOfferedTasksForOfflineAgents, getOfferedTasksForAgent, claimOfferedTask, getUnassignedTasksCount, getUnassignedTaskIds, getUnassignedTaskIdsForAgent, checkDependencies, getDependentTasks, cascadeFailDependents, updateAgentProfile, updateAgentName, createChannel, getMessageById, getChannelById, getChannelByName, getAllChannels, deleteChannel, postMessage, getChannelMessages, updateReadState, getLastReadAt, getUnreadMessages, getMentionsForAgent, getInboxSummary, claimMentions, releaseMentionProcessing, releaseStaleMentionProcessing, createService, getServiceById, getServiceByAgentAndName, getServicesByAgentId, getAllServices, updateServiceStatus, deleteService, upsertService, deleteServicesByAgentId, createSessionLogs, getSessionLogsByTaskId, getSessionLogsBySession, createSessionCost, getSessionCostsByTaskId, getSessionCostsByAgentId, getAllSessionCosts, getSessionCostsFiltered, UNATTRIBUTED_USER_ID, getSessionCostSummary, getAttributionByPerson, getDashboardCostSummary, createInboxMessage, getInboxMessageById, getUnreadInboxMessages, claimInboxMessages, markInboxMessageRead, markInboxMessageResponded, markInboxMessageDelegated, releaseStaleProcessingInbox, getConcurrentContext, getScheduledTasks, getScheduledTaskById, getScheduledTaskByName, createScheduledTask, updateScheduledTask, deleteScheduledTask, getDueScheduledTasks, autoEncryptLegacyPlaintextSecrets, maskSecrets, getSwarmConfigs, getInjectableGlobalConfigs, getSwarmConfigById, getSwarmConfigLookupById, upsertSwarmConfig, emitBuiltInIntegrationConnectedOnce, deleteSwarmConfig, deleteSwarmConfigByKey, getResolvedConfig, getSwarmRepos, getSwarmRepoById, getSwarmRepoByName, getSwarmRepoByUrl, createSwarmRepo, updateSwarmRepo, deleteSwarmRepo, getAgentMailInboxMapping, getAgentMailInboxMappingsByAgent, getAllAgentMailInboxMappings, createAgentMailInboxMapping, deleteAgentMailInboxMapping, findTaskByAgentMailThread, insertActiveSession, deleteActiveSession, deleteActiveSessionById, getActiveSessions, heartbeatActiveSession, cleanupStaleSessions, cleanupAgentSessions, updateActiveSessionProviderSessionId, getActiveSessionForTask, reassociateSessionLogs, getStalledInProgressTasks, getStalePinnedResumes, failPendingResumeIfUnclaimed, getIdleWorkersWithCapacity, getUnassignedPoolTasks, getStaleUnassignedAffinityTasks, getRecentFailedTasks, getRecentCompletedCount, getRecentFailedCount, createWorkflow, getWorkflow, listWorkflows, updateWorkflow, deleteWorkflow, getWorkflowsByScheduleId, createWorkflowRun, getWorkflowRun, updateWorkflowRun, listWorkflowRuns, countWorkflowRuns, listWorkflowRunsPage, createWorkflowRunStep, getWorkflowRunStep, updateWorkflowRunStep, getWorkflowRunStepsByRunId, getStuckWorkflowRuns, getLastSuccessfulRun, getLastRunStart, getRetryableSteps, getCompletedStepNodeIds, getTaskByWorkflowRunStepId, detachTaskFromWorkflowRunStep, getStepByIdempotencyKey, getStepCountForNode, getLatestStepForNode, getCurrentStepForNode, createWorkflowVersion, getWorkflowVersions, getWorkflowVersion, createAppVersion, getAppVersions, getAppVersion, createPage, getPage, getPageBySlug, getLatestPageBySlug, listPagesByAgent, listAllPages, countAllPages, countPagesByAgent, updatePage, deletePage, incrementPageViewCount, createPageVersion, getPageVersions, getPageVersion, createMetric, getMetric, getMetricBySlug, listMetricsByAgent, listAllMetrics, countAllMetrics, countMetricsByAgent, updateMetric, deleteMetric, createMetricVersion, getMetricVersions, getMetricVersion, getPromptTemplates, getPromptTemplateById, upsertPromptTemplate, deletePromptTemplate, resetPromptTemplateToDefault, getPromptTemplateHistory, resolvePromptTemplate, checkoutPromptTemplate, getAllChannelActivityCursors, getChannelActivityCursor, upsertChannelActivityCursor, createApprovalRequest, getApprovalRequestById, resolveApprovalRequest, cancelApprovalRequestById, cancelPendingApprovalRequestsForRun, listCancelledApprovalRequestsForRun, listCancelledApprovalRequestsForStep, claimApprovalCancellationNotification, completeApprovalCancellationNotificationClaim, releaseApprovalCancellationNotificationClaim, updateApprovalRequestNotifications, listApprovalRequests, getStuckApprovalRuns, getApprovalRequestByStepId, getExpiredPendingApprovals, getStaleApprovalRequests, createWaitState, getWaitStateById, getWaitStateByStepId, getDueWaitStates, getPendingEventWaitNames, getPendingWaitsByEvent, resolveWaitState, getStuckWaitRuns, SKILL_FILE_LIMITS, normalizeSkillFilePath, createSkill, updateSkill, listSkillFileManifest, getSkillFiles, getSkillFile, upsertSkillFile, upsertSkillFiles, deleteSkillFile, deleteSkill, getSkillById, getSkillByName, listSkills, searchSkills, installSkill, getSystemDefaultSkills, installSystemDefaultSkillsForAgent, uninstallSkill, getAgentSkills, toggleAgentSkill, createMcpServer, emitMcpServerConnectedTelemetry, updateMcpServer, deleteMcpServer, getMcpServerById, getMcpServerByName, listMcpServers, installMcpServer, uninstallMcpServer, getAgentMcpServers, createContextSnapshot, getContextSnapshotsByTaskId, getContextSnapshotsBySessionId, getContextSummaryByTaskId, getAvailableKeyIndices, recordKeyUsage, setApiKeyPlan, markKeyRateLimited, recordKeyAuthFailure, recordKeyRateLimitWindows, setApiKeyName, clearKeyRateLimit, getKeyStatuses, getKeyCostSummary, getUserById, getAllUsers, createUser, updateUser, deleteUser, listInboxState, upsertInboxState, listFavorites, listUserFavorites, getFavoriteItemIdSet, setFavorite, setUserFavorite, withFavoriteFlags, listTaskTemplates, getRootTaskChain, listRecentSessions, countSessions, getBudget, getBudgets, upsertBudget, deleteBudget, getAllPricingRows, getPricingRows, getActivePricingRow, insertPricingRow, deletePricingRow, getDailySpendForAgent, getDailySpendGlobal, getDailySpendForUser, recordBudgetRefusalNotification, getBudgetRefusalNotification, getRecentBudgetRefusalNotifications, hasBudgetRefusalNotificationToday, setBudgetRefusalFollowUpTaskId, getLiveAgentCounts, getReadyAgentCounts, getInstanceActivity, getSwarmMetrics, hasFirstCompletedTask, getKv, sweepExpiredKv, sweepExpiredKvPrefix, upsertKv, claimKv, deleteKv, KvTypeCollisionError, incrKv, kvPrefixUpperBound, listKv, countKv, createScriptRun, recordInlineScriptRun, getScriptRun, getScriptRunByIdempotencyKey, listScriptRuns, countScriptRuns, countActiveScriptRuns, updateScriptRun, updateScriptRunIfNotTerminal, updateScriptRunIfRunning, getRunningScriptRuns, getScriptRunJournalStep, upsertScriptRunJournalStep, listScriptRunJournalSteps, countScriptRunJournalSteps, countScriptRunJournalAgentTaskSteps, exports_db, init_db };