@desplega.ai/agent-swarm 1.172.0 → 2.0.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 (525) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-fpecx1g1.js → acp-adapter-sj2g0m84.js} +18 -17
  3. package/dist/{actions-pw87a1a8.js → actions-fegk44gr.js} +65 -35
  4. package/dist/{amp-adapter-8jem2bc0.js → amp-adapter-ad8ft89x.js} +8 -7
  5. package/dist/{anthropic-messages-8ee2f22q.js → anthropic-messages-r6czkjv1.js} +7 -7
  6. package/dist/{app-wmf0m843.js → app-kfvgbvzy.js} +19 -13
  7. package/dist/{assistant-emp1e108.js → assistant-z7zdy9ja.js} +65 -38
  8. package/dist/{boot-reembed-1de4f4aj.js → boot-reembed-5c2z0mbe.js} +11 -9
  9. package/dist/{boot-reembed-4ymn9atn.js → boot-reembed-j8xa181e.js} +11 -9
  10. package/dist/{boot-scrub-sweep-adhk1s8c.js → boot-scrub-sweep-hnkn3rgt.js} +12 -10
  11. package/dist/{boot-seeds-8q637aew.js → boot-seeds-kwjq4d2z.js} +15 -13
  12. package/dist/{claude-adapter-t26cv8a4.js → claude-adapter-9vmvpvgd.js} +20 -19
  13. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-k9qae05j.js} +7 -5
  14. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-q54zx5q2.js} +6 -4
  15. package/dist/{claude-sdk-session-gsfsh662.js → claude-sdk-session-9jye6cxr.js} +12698 -11995
  16. package/dist/{cli-k46r9hmk.js → cli-03gedhng.js} +16 -14
  17. package/dist/{cli-kb4ehzx5.js → cli-1e4b6bzh.js} +7 -7
  18. package/dist/{cli-d603qf86.js → cli-29jc5q7w.js} +10 -8
  19. package/dist/cli-2m1ktfzz.js +17795 -0
  20. package/dist/{cli-8vs9trd4.js → cli-3dj8k4vy.js} +1 -1
  21. package/dist/{cli-zxm9p3x4.js → cli-3fbmmawm.js} +5 -5
  22. package/dist/{cli-gmdajfw5.js → cli-4jxm2qtz.js} +4987 -1708
  23. package/dist/{cli-tadfgd0t.js → cli-5hkm7whv.js} +33 -4
  24. package/dist/{cli-6jb2rf77.js → cli-5t4f29ez.js} +3 -3
  25. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  26. package/dist/cli-6cvfxs8r.js +47 -0
  27. package/dist/{cli-pj6x9qce.js → cli-6jyj59nb.js} +2 -2
  28. package/dist/{cli-388egyf6.js → cli-6razj6t4.js} +2 -2
  29. package/dist/{cli-qsztpfry.js → cli-74ahz61x.js} +2 -2
  30. package/dist/{cli-4nz8p1p5.js → cli-7x0g4sn1.js} +15474 -16082
  31. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  32. package/dist/{cli-81r1wjyv.js → cli-9nfx44eh.js} +1 -1
  33. package/dist/cli-9traj3dn.js +638 -0
  34. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  35. package/dist/{cli-bf7485pm.js → cli-apx87jne.js} +2 -2
  36. package/dist/{cli-ztrv9y21.js → cli-bzszjf2p.js} +3689 -1081
  37. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  38. package/dist/{cli-hsem16hb.js → cli-cgtksawx.js} +7 -4
  39. package/dist/{cli-db3m6zdt.js → cli-d2qr7aj4.js} +1 -1
  40. package/dist/{cli-1hgat6pa.js → cli-d5f9ed5c.js} +5 -5
  41. package/dist/cli-e3g5mbkz.js +776 -0
  42. package/dist/{cli-7jykv7ef.js → cli-e6mpjhed.js} +1 -1
  43. package/dist/{cli-j6kpj9az.js → cli-ee9gtz70.js} +1553 -68
  44. package/dist/{cli-e0a9sk00.js → cli-eejsgvm4.js} +4 -4
  45. package/dist/{cli-tgpfnm6r.js → cli-ef1hg1wv.js} +518 -59
  46. package/dist/cli-f527ce74.js +781 -0
  47. package/dist/{cli-ppy4nnnh.js → cli-f7kr7svz.js} +2 -2
  48. package/dist/cli-hjwmhcg1.js +10622 -0
  49. package/dist/{cli-2bw3w47j.js → cli-hnhtk6cj.js} +1 -1
  50. package/dist/{cli-ywm1azg9.js → cli-hnmhtzvh.js} +6 -4
  51. package/dist/{cli-4fnb6884.js → cli-hvqbtna4.js} +7 -1259
  52. package/dist/{cli-pstq9888.js → cli-j0pfptdp.js} +220 -103
  53. package/dist/cli-jta2eyzc.js +619 -0
  54. package/dist/{cli-esnpehf5.js → cli-k382tshb.js} +12 -13
  55. package/dist/cli-k3dp5tpf.js +263 -0
  56. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  57. package/dist/cli-kceah1eh.js +92 -0
  58. package/dist/{cli-prrt9fa0.js → cli-ke896fcf.js} +10 -10
  59. package/dist/{cli-nv4zd0b9.js → cli-kt6zqg0e.js} +6 -6
  60. package/dist/{cli-g6t9texm.js → cli-m50t4309.js} +5 -18
  61. package/dist/cli-n2wq4j7m.js +6985 -0
  62. package/dist/{cli-c2pq2rjb.js → cli-n3hzg89b.js} +46 -15
  63. package/dist/{cli-tmhsxhb8.js → cli-n5vwg842.js} +23 -6
  64. package/dist/{cli-5rv1j9ga.js → cli-ne236afy.js} +53 -7
  65. package/dist/cli-p0sg24zp.js +16 -0
  66. package/dist/{cli-d161g69q.js → cli-p1x85d2t.js} +50 -2
  67. package/dist/{cli-7pz3b7x5.js → cli-przpmdgr.js} +25 -0
  68. package/dist/{cli-g4f5pj26.js → cli-q0ke1yww.js} +111 -25
  69. package/dist/{cli-e3pmyt39.js → cli-q50942rs.js} +1 -1
  70. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  71. package/dist/{cli-gj81e47t.js → cli-r2pnvj8g.js} +2 -2
  72. package/dist/{cli-r8smj8b8.js → cli-r62a35ea.js} +19 -3
  73. package/dist/{cli-cd0hv9nh.js → cli-ra0xzggj.js} +2 -2
  74. package/dist/cli-rhs9pz33.js +294 -0
  75. package/dist/{cli-nyhb1r6x.js → cli-s2sp957d.js} +52 -29
  76. package/dist/{cli-1x7da0de.js → cli-s4setq91.js} +8 -8
  77. package/dist/{cli-xczpdp9e.js → cli-se8w6wny.js} +6 -6
  78. package/dist/cli-skxvvpap.js +10140 -0
  79. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  80. package/dist/{cli-0p3enk35.js → cli-tqaazemc.js} +9 -1
  81. package/dist/{cli-cf69s3ew.js → cli-tr4sxp68.js} +3 -3
  82. package/dist/{cli-8hzfb6xz.js → cli-tsde1hdr.js} +15 -15
  83. package/dist/{cli-cceskcvt.js → cli-txqb9s38.js} +8 -8
  84. package/dist/{cli-aspcaef3.js → cli-v1yb0rqb.js} +6 -6
  85. package/dist/{cli-j1pmc07z.js → cli-vatyhshy.js} +268 -40
  86. package/dist/{cli-04emfe2q.js → cli-vdach5a9.js} +5 -5
  87. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  88. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  89. package/dist/{cli-hwwvy36w.js → cli-wayw93nt.js} +3 -3
  90. package/dist/cli-wmgrkscj.js +23254 -0
  91. package/dist/{cli-gp1rtyvk.js → cli-z5jjpaxw.js} +29 -6
  92. package/dist/{cli-451ks6aw.js → cli-zkpks3r3.js} +1 -1
  93. package/dist/cli.js +32 -48
  94. package/dist/{codex-adapter-m4tgdysy.js → codex-adapter-y81sssk0.js} +16 -15
  95. package/dist/{codex-login-841kv5fk.js → codex-login-f2rcfpp9.js} +3 -2
  96. package/dist/{codex-session-runner-ymwzm6ea.js → codex-session-runner-8vx4j6a9.js} +16 -15
  97. package/dist/{commands-n0hshcvs.js → commands-kcpvpcrr.js} +21 -10
  98. package/dist/{controller-hq5ggpcp.js → controller-ywrmt6yd.js} +5 -4
  99. package/dist/{controllers-connect-y07cqcvy.js → controllers-connect-kwpvj3rf.js} +45 -38
  100. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-cehv1qns.js} +7 -6
  101. package/dist/{db-hkqvrdcb.js → db-k8ankj20.js} +13 -11
  102. package/dist/{db-4w7tmt1g.js → db-ww5d7jq3.js} +29 -9
  103. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-x1022qb1.js} +3 -2
  104. package/dist/{dispatcher-5sd69y14.js → dispatcher-e8gq5m68.js} +41 -34
  105. package/dist/{docker-f503k9p0.js → docker-ff6y1190.js} +3 -2
  106. package/dist/{dsh-adapter-2h8m4cab.js → dsh-adapter-3epjm3af.js} +7 -6
  107. package/dist/{e2b-66xra4az.js → e2b-8ygwhg0f.js} +4 -3
  108. package/dist/{e2b-xwhyj8cw.js → e2b-swhnpw3n.js} +4 -3
  109. package/dist/{event-bus-vjtv82gm.js → event-bus-6axnngdj.js} +3 -2
  110. package/dist/external-channel-h3359cwn.js +52 -0
  111. package/dist/{google-generative-ai-7pavrbv7.js → google-generative-ai-g8db7x0f.js} +5 -3
  112. package/dist/{google-vertex-3f1jk41f.js → google-vertex-r2692q0r.js} +5 -3
  113. package/dist/{grok-adapter-8m9yqzbq.js → grok-adapter-0d4x7gkx.js} +19 -18
  114. package/dist/{handlers-s20xr10r.js → handlers-an1gzv21.js} +44 -37
  115. package/dist/{heartbeat-3k31q4g2.js → heartbeat-6dakeb61.js} +46 -39
  116. package/dist/{hook-gdn6a2fn.js → hook-6v6cv6d5.js} +12 -24
  117. package/dist/{hook-ygwerrdh.js → hook-sa5xye4y.js} +13 -12
  118. package/dist/{http-jdteeg81.js → http-r7f3eky0.js} +1598 -279
  119. package/dist/index-52j1aja4.js +3465 -0
  120. package/dist/{index-e0snym4t.js → index-7ep4gzdk.js} +41 -34
  121. package/dist/index-9gw58n4k.js +193 -0
  122. package/dist/index-9j87mcm8.js +56305 -0
  123. package/dist/index-bsmcresk.js +79424 -0
  124. package/dist/index-mh85qhec.js +475 -0
  125. package/dist/{index-vm3bm9t7.js → index-rmpw9a8q.js} +41 -34
  126. package/dist/{index-6ksewd5y.js → index-s2wxgzr0.js} +1015 -732
  127. package/dist/{index-tsszt7g9.js → index-v1v6n7hg.js} +46 -39
  128. package/dist/index-we27kd31.js +12810 -0
  129. package/dist/{index-ffqzqgwb.js → index-zk96aq1k.js} +11 -9
  130. package/dist/{keepalive-jekc896t.js → keepalive-be9vwy5h.js} +13 -11
  131. package/dist/{lead-4k9s9szx.js → lead-0861cwrf.js} +64 -57
  132. package/dist/{maintenance-shazch4n.js → maintenance-mzzgc8bn.js} +11 -9
  133. package/dist/node-c9we95xf.js +1 -1
  134. package/dist/{node-fkajaq96.js → node-mn1zs7an.js} +2 -1
  135. package/dist/{oauth-refresh-sweep-5gb36kn8.js → oauth-refresh-sweep-cpdnfwdj.js} +12 -10
  136. package/dist/{onboard-ydrbnvww.js → onboard-fh8qs4r3.js} +11 -3
  137. package/dist/{opencode-adapter-5zh0he20.js → opencode-adapter-nm42wwj8.js} +19 -14
  138. package/dist/{otel-impl-6pf5cv86.js → otel-impl-x6c1c9g4.js} +248 -869
  139. package/dist/{pi-mono-adapter-ef9wwx9m.js → pi-mono-adapter-9n2ya240.js} +245 -107
  140. package/dist/{pricing-refresh-s52nsa5q.js → pricing-refresh-qb0rv0ap.js} +13 -11
  141. package/dist/{rbac-roles-aq3msh4e.js → rbac-roles-1gzdwbh1.js} +12 -10
  142. package/dist/{rbac-roles-q5gb5e8v.js → rbac-roles-3mraey52.js} +13 -11
  143. package/dist/{render-v2-pd1rg54q.js → render-v2-agpa45zz.js} +19 -13
  144. package/dist/{resume-gw4a2c6v.js → resume-x0ydy9s9.js} +27 -21
  145. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  146. package/dist/{setup-jda1ksdh.js → setup-as9ga0d6.js} +2 -2
  147. package/dist/{virtual-modules-b3ga2m65.js → virtual-modules-9gkxqrap.js} +7 -6
  148. package/dist/{work-objects-tb7ycye8.js → work-objects-y5g1y7ev.js} +49 -37
  149. package/dist/{worker-njjccz5d.js → worker-860c3e38.js} +64 -57
  150. package/dist/{x-qfmygqqv.js → x-m477fr0h.js} +3 -2
  151. package/openapi.json +951 -356
  152. package/package.json +12 -13
  153. package/src/apps/catalog.generated.json +1309 -53
  154. package/src/apps/page-validator.ts +93 -31
  155. package/src/azure-devops/api.ts +94 -18
  156. package/src/azure-devops/auth.ts +32 -0
  157. package/src/azure-devops/boards-sync.ts +708 -0
  158. package/src/azure-devops/handlers.ts +52 -8
  159. package/src/azure-devops/html.ts +26 -0
  160. package/src/azure-devops/index.ts +15 -0
  161. package/src/azure-devops/templates.ts +86 -0
  162. package/src/azure-devops/types.ts +65 -1
  163. package/src/be/config-refs.ts +60 -0
  164. package/src/be/db/page-versions.ts +15 -0
  165. package/src/be/db/runtime.ts +35 -8
  166. package/src/be/db/skill-name-resolution.ts +36 -0
  167. package/src/be/db/tasks/read.ts +230 -0
  168. package/src/be/db/tasks/write.ts +7 -0
  169. package/src/be/db.ts +74 -13
  170. package/src/be/migrations/213_script_connections_sql.sql +79 -0
  171. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  172. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  173. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  174. package/src/be/model-catalog-store.ts +5 -1
  175. package/src/be/model-tier-resolution.ts +12 -1
  176. package/src/be/model-validation.ts +5 -2
  177. package/src/be/models-catalog.ts +26 -1
  178. package/src/be/modelsdev-cache.json +198 -63
  179. package/src/be/modelsdev-cache.ts +9 -1
  180. package/src/be/script-connections.ts +47 -8
  181. package/src/be/script-credential-broker.ts +39 -2
  182. package/src/be/scripts/run-saved.ts +1 -0
  183. package/src/be/scripts/typecheck.ts +10 -8
  184. package/src/be/seed/runner.ts +13 -1
  185. package/src/be/seed/state-db.ts +5 -0
  186. package/src/be/seed/types.ts +6 -0
  187. package/src/be/seed-pricing.ts +19 -2
  188. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  189. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  190. package/src/be/seed-skills/bundled-files.generated.json +10 -18
  191. package/src/be/seed-skills/index.ts +107 -3
  192. package/src/be/sql-connections.ts +118 -0
  193. package/src/be/swarm-config-guard.ts +53 -0
  194. package/src/cli.tsx +0 -16
  195. package/src/commands/onboard/non-interactive.ts +4 -2
  196. package/src/commands/profile-sync.ts +5 -3
  197. package/src/commands/provider-credentials.ts +52 -6
  198. package/src/commands/runner.ts +196 -56
  199. package/src/e2b/env.ts +5 -0
  200. package/src/extensions/contract-types.generated.ts +1 -1
  201. package/src/extensions/contract.ts +45 -0
  202. package/src/extensions/dispatcher.ts +7 -0
  203. package/src/extensions/post-bridge.ts +40 -0
  204. package/src/github/handlers.ts +11 -4
  205. package/src/heartbeat/templates.ts +8 -5
  206. package/src/hooks/hook.ts +0 -26
  207. package/src/http/all-routes.ts +0 -1
  208. package/src/http/config.ts +36 -17
  209. package/src/http/core.ts +4 -0
  210. package/src/http/index.ts +14 -2
  211. package/src/http/integrations.ts +88 -1
  212. package/src/http/mcp-oauth.ts +6 -13
  213. package/src/http/mcp.ts +15 -5
  214. package/src/http/page-proxy.ts +2 -4
  215. package/src/http/pages-public.ts +6 -5
  216. package/src/http/pages.ts +5 -14
  217. package/src/http/poll.ts +28 -68
  218. package/src/http/requested-by.ts +54 -0
  219. package/src/http/route-def.ts +7 -6
  220. package/src/http/script-connection-proxy.ts +51 -4
  221. package/src/http/script-connections.ts +5 -2
  222. package/src/http/scripts.ts +1 -0
  223. package/src/http/session-cost-recompute.ts +12 -2
  224. package/src/http/session-data.ts +4 -0
  225. package/src/http/stats.ts +1 -30
  226. package/src/http/tasks.ts +61 -5
  227. package/src/http/utils.ts +14 -0
  228. package/src/http/webhooks.ts +183 -2
  229. package/src/http/x.ts +1 -0
  230. package/src/integrations/chat-sdk/adapters.ts +129 -0
  231. package/src/integrations/chat-sdk/attachments.ts +232 -0
  232. package/src/integrations/chat-sdk/background.ts +36 -0
  233. package/src/integrations/chat-sdk/commands.ts +194 -0
  234. package/src/integrations/chat-sdk/config.ts +198 -0
  235. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  236. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  237. package/src/integrations/chat-sdk/handlers.ts +28 -0
  238. package/src/integrations/chat-sdk/inbound.ts +426 -0
  239. package/src/integrations/chat-sdk/limits.ts +48 -0
  240. package/src/integrations/chat-sdk/logger.ts +81 -0
  241. package/src/integrations/chat-sdk/outbound.ts +123 -0
  242. package/src/integrations/chat-sdk/relay.ts +172 -0
  243. package/src/integrations/chat-sdk/router.ts +169 -0
  244. package/src/integrations/chat-sdk/runtime.ts +351 -0
  245. package/src/integrations/chat-sdk/schema.ts +245 -0
  246. package/src/integrations/chat-sdk/state.ts +243 -0
  247. package/src/integrations/chat-sdk/status.ts +244 -0
  248. package/src/integrations/chat-sdk/steering.ts +58 -0
  249. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  250. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  251. package/src/integrations/chat-sdk/templates.ts +16 -0
  252. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  253. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  254. package/src/integrations/chat-sdk/typing.ts +65 -0
  255. package/src/jira/adf.ts +3 -1
  256. package/src/kv-reserved-namespaces.ts +2 -0
  257. package/src/oauth/mcp-wrapper.ts +10 -6
  258. package/src/otel-impl.ts +2 -1
  259. package/src/pages/version.ts +4 -5
  260. package/src/prompts/base-prompt.ts +111 -45
  261. package/src/providers/acp-target-catalog.ts +6 -0
  262. package/src/providers/acp-targets.ts +56 -3
  263. package/src/providers/amp-adapter.ts +1 -1
  264. package/src/providers/claude-adapter.ts +27 -2
  265. package/src/providers/claude-flag-settings.ts +133 -0
  266. package/src/providers/claude-managed-adapter.ts +1 -1
  267. package/src/providers/claude-sdk-session.ts +7 -0
  268. package/src/providers/claude-session-events.ts +6 -1
  269. package/src/providers/dsh-adapter.ts +1 -1
  270. package/src/providers/opencode-adapter.ts +268 -37
  271. package/src/providers/opencode-billing.ts +86 -0
  272. package/src/providers/opencode-swarm-plugin.ts +51 -0
  273. package/src/providers/pi-mono-adapter.ts +398 -153
  274. package/src/providers/pricing-sources.md +37 -3
  275. package/src/providers/reasoning-effort.ts +27 -0
  276. package/src/providers/types.ts +11 -2
  277. package/src/rbac/legacy-policy.ts +8 -2
  278. package/src/rbac/permissions.ts +21 -0
  279. package/src/scheduler/scheduler.ts +4 -2
  280. package/src/scripts-runtime/api-client.ts +15 -1
  281. package/src/scripts-runtime/api-types.ts +9 -1
  282. package/src/scripts-runtime/ctx.ts +1 -1
  283. package/src/scripts-runtime/loader.ts +19 -7
  284. package/src/scripts-runtime/mcp-client.ts +30 -19
  285. package/src/scripts-runtime/sdk-allowlist.ts +8 -6
  286. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  287. package/src/scripts-runtime/types/stdlib.d.ts +27 -15
  288. package/src/scripts-runtime/types/swarm-extension.d.ts +63 -1
  289. package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -15
  290. package/src/server.ts +52 -18
  291. package/src/slack/actions.ts +29 -1
  292. package/src/slack/app.ts +14 -2
  293. package/src/slack/assistant.ts +36 -2
  294. package/src/slack/channel-join.ts +3 -16
  295. package/src/slack/commands.ts +9 -1
  296. package/src/slack/event-dedup.ts +1 -1
  297. package/src/slack/external-channel-egress.ts +113 -0
  298. package/src/slack/external-channel.ts +309 -0
  299. package/src/slack/handlers.ts +61 -0
  300. package/src/slack/render-v2.ts +40 -47
  301. package/src/slack/work-objects.ts +5 -0
  302. package/src/tasks/additive-buffer.ts +4 -2
  303. package/src/tasks/context-key.ts +94 -2
  304. package/src/tasks/model-pin.ts +67 -0
  305. package/src/tasks/worker-follow-up.ts +4 -31
  306. package/src/telemetry.ts +2 -1
  307. package/src/tests/acp-adapter.test.ts +42 -0
  308. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  309. package/src/tests/apps-catalog-feedback.test.ts +310 -0
  310. package/src/tests/apps-catalog-inputs.test.ts +70 -0
  311. package/src/tests/apps-catalog-table.test.ts +113 -0
  312. package/src/tests/azure-devops-boards-sync.test.ts +584 -0
  313. package/src/tests/azure-devops-html.test.ts +13 -0
  314. package/src/tests/azure-devops-webhook-malformed.test.ts +4 -0
  315. package/src/tests/base-prompt.test.ts +58 -54
  316. package/src/tests/chat-sdk-commands.test.ts +191 -0
  317. package/src/tests/chat-sdk-config.test.ts +334 -0
  318. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  319. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  320. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  321. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  322. package/src/tests/chat-sdk-harness.ts +146 -0
  323. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  324. package/src/tests/chat-sdk-relay.test.ts +470 -0
  325. package/src/tests/chat-sdk-reload.test.ts +128 -0
  326. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  327. package/src/tests/chat-sdk-slack.test.ts +268 -0
  328. package/src/tests/chat-sdk-state.test.ts +163 -0
  329. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  330. package/src/tests/chat-sdk-teams.test.ts +277 -0
  331. package/src/tests/chat-sdk-tools.test.ts +520 -0
  332. package/src/tests/chat-sdk-typing.test.ts +120 -0
  333. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  334. package/src/tests/claude-adapter-binary.test.ts +144 -0
  335. package/src/tests/claude-flag-settings.test.ts +114 -0
  336. package/src/tests/claude-managed-adapter.test.ts +1 -1
  337. package/src/tests/claude-sdk-lifecycle.test.ts +148 -1
  338. package/src/tests/claude-sdk-process.fixture.ts +7 -0
  339. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  340. package/src/tests/claude-worker-parity.test.ts +2 -7
  341. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  342. package/src/tests/config-refs.test.ts +66 -0
  343. package/src/tests/context-key.test.ts +51 -0
  344. package/src/tests/cors-allowlist.test.ts +25 -0
  345. package/src/tests/create-page-tool.test.ts +18 -0
  346. package/src/tests/credential-check.test.ts +139 -0
  347. package/src/tests/credentials.test.ts +21 -0
  348. package/src/tests/db-runtime.test.ts +61 -0
  349. package/src/tests/db-task-read-contract.test.ts +20 -0
  350. package/src/tests/db-task-write-contract.test.ts +10 -0
  351. package/src/tests/deferred-task-wake.test.ts +52 -4
  352. package/src/tests/docs-index-footprint.test.js +3 -3
  353. package/src/tests/dsh-adapter.test.ts +1 -1
  354. package/src/tests/enabled-capabilities.test.ts +20 -0
  355. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  356. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  357. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  358. package/src/tests/explicit-model-validation.test.ts +105 -1
  359. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  360. package/src/tests/extensions-post-bridge.test.ts +51 -0
  361. package/src/tests/fetch-resolved-env.test.ts +128 -0
  362. package/src/tests/fixtures/azure-boards/workitem.commented.json +89 -0
  363. package/src/tests/fixtures/azure-boards/workitem.created.json +81 -0
  364. package/src/tests/fixtures/azure-boards/workitem.deleted.json +70 -0
  365. package/src/tests/fixtures/azure-boards/workitem.restored.json +82 -0
  366. package/src/tests/fixtures/azure-boards/workitem.updated.json +130 -0
  367. package/src/tests/fixtures/catalog-feedback-definition.json.txt +860 -0
  368. package/src/tests/fixtures/catalog-inputs-definition.json.txt +910 -0
  369. package/src/tests/fixtures/catalog-table-definition.json.txt +468 -0
  370. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  371. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  372. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  373. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  374. package/src/tests/fixtures/runner-identity-refresh.ts +3 -0
  375. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  376. package/src/tests/github-handlers.test.ts +35 -0
  377. package/src/tests/harness-provider-resolution.test.ts +12 -0
  378. package/src/tests/heartbeat-checklist.test.ts +3 -2
  379. package/src/tests/hook-runtime-close.test.ts +0 -2
  380. package/src/tests/http-api-integration.test.ts +0 -25
  381. package/src/tests/migration-046-budgets.test.ts +17 -16
  382. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  383. package/src/tests/model-tier-resolution.test.ts +93 -0
  384. package/src/tests/models-catalog.test.ts +42 -1
  385. package/src/tests/node-env-runtime.test.ts +98 -0
  386. package/src/tests/openai-compatible-providers.test.ts +134 -0
  387. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  388. package/src/tests/opencode-adapter.test.ts +348 -3
  389. package/src/tests/opencode-billing.test.ts +28 -0
  390. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  391. package/src/tests/opencode-shell-env.test.ts +145 -0
  392. package/src/tests/openrouter-base-url.test.ts +101 -151
  393. package/src/tests/page-proxy.test.ts +1 -1
  394. package/src/tests/pages-browser-sdk.test.ts +76 -0
  395. package/src/tests/pages-feedback.test.ts +1 -1
  396. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  397. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  398. package/src/tests/pi-mono-adapter.test.ts +385 -5
  399. package/src/tests/pi-shell-env.test.ts +170 -0
  400. package/src/tests/prompt-template-remaining.test.ts +35 -0
  401. package/src/tests/rbac-engine.test.ts +11 -3
  402. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  403. package/src/tests/runner-identity-refresh.test.ts +3 -0
  404. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  405. package/src/tests/script-connections-sql.test.ts +675 -0
  406. package/src/tests/script-connections.test.ts +7 -1
  407. package/src/tests/scripts-http.test.ts +201 -1
  408. package/src/tests/scripts-only-gating.test.ts +2 -3
  409. package/src/tests/scripts-runtime.test.ts +58 -40
  410. package/src/tests/secret-scrubber.test.ts +86 -0
  411. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  412. package/src/tests/seed-skills-retire.test.ts +182 -0
  413. package/src/tests/send-task-requester-gate.test.ts +58 -0
  414. package/src/tests/session-cost-recompute-unit.test.ts +94 -0
  415. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  416. package/src/tests/slack-channel-join.test.ts +4 -1
  417. package/src/tests/slack-external-channel-config.test.ts +65 -0
  418. package/src/tests/slack-external-channel-egress.test.ts +237 -0
  419. package/src/tests/slack-external-channel-guard.test.ts +280 -0
  420. package/src/tests/slack-external-channel-tools.test.ts +173 -0
  421. package/src/tests/slack-external-channel.test.ts +370 -0
  422. package/src/tests/slack-render-v2.test.ts +86 -10
  423. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  424. package/src/tests/spec-base-url.test.ts +16 -1
  425. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  426. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  427. package/src/tests/swarm-diff.test.ts +1 -1
  428. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  429. package/src/tests/task-session-prompts.test.ts +132 -0
  430. package/src/tests/task-tool-manifest.test.ts +14 -0
  431. package/src/tests/task-tools-ctx.test.ts +2 -0
  432. package/src/tests/tool-annotations.test.ts +6 -6
  433. package/src/tests/ui-logs-parser.test.ts +43 -0
  434. package/src/tests/used-by-route.test.ts +6 -0
  435. package/src/tests/vendored-openapi.test.ts +16 -1
  436. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  437. package/src/tests/workflow-swarm-script.test.ts +38 -0
  438. package/src/tests/workflow-wait-filter.test.ts +5 -3
  439. package/src/tools/chat-access.ts +41 -0
  440. package/src/tools/chat-open-dm.ts +59 -0
  441. package/src/tools/chat-post.ts +74 -0
  442. package/src/tools/chat-read-thread.ts +100 -0
  443. package/src/tools/chat-reply.ts +75 -0
  444. package/src/tools/create-page.ts +3 -13
  445. package/src/tools/defer-task.ts +17 -0
  446. package/src/tools/model-catalog/index.ts +2 -1
  447. package/src/tools/register-chat-channel.ts +139 -0
  448. package/src/tools/send-task.ts +24 -0
  449. package/src/tools/skills/skill-get.ts +17 -9
  450. package/src/tools/slack-post.ts +6 -0
  451. package/src/tools/slack-read.ts +8 -0
  452. package/src/tools/slack-reply.ts +6 -0
  453. package/src/tools/slack-start-thread.ts +6 -0
  454. package/src/tools/slack-update.ts +6 -0
  455. package/src/tools/slack-upload-file.ts +6 -0
  456. package/src/tools/swarm-config/get-config.ts +2 -1
  457. package/src/tools/swarm-config/list-config.ts +2 -1
  458. package/src/tools/swarm-config/set-config.ts +16 -3
  459. package/src/tools/tool-config.ts +8 -6
  460. package/src/types.ts +12 -2
  461. package/src/utils/config-env-export.ts +74 -0
  462. package/src/utils/credentials.test.ts +92 -0
  463. package/src/utils/credentials.ts +52 -4
  464. package/src/utils/harness-provider.ts +15 -6
  465. package/src/utils/node-env.ts +24 -0
  466. package/src/utils/runtime-model-catalog.ts +11 -1
  467. package/src/utils/secret-scrubber.ts +71 -2
  468. package/src/utils/task-tool-manifest.ts +19 -2
  469. package/src/workflows/executors/swarm-script.ts +1 -0
  470. package/templates/skills/agent-browser/SKILL.md +1 -1
  471. package/templates/skills/agent-browser/content.md +1 -1
  472. package/templates/skills/apps/SKILL.md +749 -0
  473. package/templates/skills/apps/content.md +60 -22
  474. package/templates/skills/chat-sdk/config.json +14 -0
  475. package/templates/skills/chat-sdk/content.md +84 -0
  476. package/templates/skills/composio-gmail/content.md +7 -0
  477. package/templates/skills/composio-google-docs/content.md +1 -1
  478. package/templates/skills/email-domain-health/config.json +14 -0
  479. package/templates/skills/email-domain-health/content.md +131 -0
  480. package/templates/skills/kv-storage/content.md +2 -2
  481. package/templates/skills/pages/content.md +8 -10
  482. package/templates/skills/qa-loom/config.json +14 -0
  483. package/templates/skills/qa-loom/content.md +187 -0
  484. package/templates/skills/qa-loom/files/build-loom.mjs +221 -0
  485. package/templates/skills/qa-loom/files/run-qa.sh +57 -0
  486. package/templates/skills/slack-interaction/content.md +4 -0
  487. package/templates/skills/swarm-extensions/content.md +2 -0
  488. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  489. package/templates/skills/swarm-scripts/config.json +1 -1
  490. package/templates/skills/swarm-scripts/content.md +4 -2
  491. package/templates/skills/workflow-iterate/content.md +38 -0
  492. package/dist/artifact-eczsknc3.js +0 -3843
  493. package/dist/cli-9xsmdpdt.js +0 -56377
  494. package/dist/cli-bd957dgb.js +0 -153
  495. package/dist/cli-q51yprfq.js +0 -1104
  496. package/dist/cli-t1ze64h3.js +0 -811
  497. package/dist/index-9ch1n761.js +0 -1102
  498. package/src/artifact-sdk/index.ts +0 -2
  499. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  500. package/src/artifact-sdk/port.ts +0 -12
  501. package/src/artifact-sdk/server.ts +0 -183
  502. package/src/artifact-sdk/tunnel.ts +0 -19
  503. package/src/commands/artifact.ts +0 -249
  504. package/src/http/ecosystem.ts +0 -77
  505. package/src/tests/artifact-commands.test.ts +0 -92
  506. package/src/tests/artifact-sdk.test.ts +0 -793
  507. package/src/tests/register-service-security.test.ts +0 -194
  508. package/src/tools/list-services.ts +0 -107
  509. package/src/tools/register-service.ts +0 -177
  510. package/src/tools/unregister-service.ts +0 -73
  511. package/src/tools/update-service-status.ts +0 -96
  512. package/templates/skills/artifacts/config.json +0 -14
  513. package/templates/skills/artifacts/content.md +0 -344
  514. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  515. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  516. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  517. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  518. package/dist/{azure-openai-responses-ap1gwxgr.js → azure-openai-responses-ygfreq4t.js} +5 -5
  519. package/dist/{cli-5rqrj7q0.js → cli-pw7ebjdt.js} +0 -0
  520. package/dist/{openai-codex-responses-33qhkkdy.js → openai-codex-responses-3bk0grnr.js} +4 -4
  521. package/dist/{openai-completions-s88xm3ns.js → openai-completions-5d4jpakc.js} +9 -9
  522. package/dist/{openai-responses-7xd2f2e2.js → openai-responses-krb51f59.js} +5 -5
  523. package/dist/{pi-messages-xszk613n.js → pi-messages-x9gzynm1.js} +3 -3
  524. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
  525. /package/src/{artifact-sdk → pages}/feedback-overlay.ts +0 -0
@@ -1,12 +1,28 @@
1
+ import {
2
+ checkGrokCredentials
3
+ } from "./cli-kt6zqg0e.js";
1
4
  import {
2
5
  renderSteeringDelivery
3
6
  } from "./cli-19njxg5g.js";
4
7
  import {
5
- checkCursorCredentials
6
- } from "./cli-1x7da0de.js";
8
+ checkClaudeManagedCredentials
9
+ } from "./cli-29jc5q7w.js";
7
10
  import {
8
- checkGrokCredentials
9
- } from "./cli-nv4zd0b9.js";
11
+ checkDevinCredentials
12
+ } from "./cli-q50942rs.js";
13
+ import {
14
+ checkOpencodeCredentials
15
+ } from "./cli-vatyhshy.js";
16
+ import {
17
+ checkDshCredentials
18
+ } from "./cli-3fbmmawm.js";
19
+ import {
20
+ checkAmpCredentials,
21
+ liveTestAmpCredentials
22
+ } from "./cli-vdach5a9.js";
23
+ import {
24
+ checkCursorCredentials
25
+ } from "./cli-s4setq91.js";
10
26
  import {
11
27
  createSkillInvokeTracker,
12
28
  isSkillLoaderCall,
@@ -15,23 +31,13 @@ import {
15
31
  import {
16
32
  checkCodexCredentials,
17
33
  codexUserHome
18
- } from "./cli-k46r9hmk.js";
34
+ } from "./cli-03gedhng.js";
19
35
  import {
20
- checkClaudeManagedCredentials
21
- } from "./cli-d603qf86.js";
22
- import {
23
- checkDevinCredentials
24
- } from "./cli-e3pmyt39.js";
25
- import {
26
- checkOpencodeCredentials
27
- } from "./cli-j1pmc07z.js";
28
- import {
29
- checkDshCredentials
30
- } from "./cli-zxm9p3x4.js";
36
+ checkClaudeCredentials
37
+ } from "./cli-q0ke1yww.js";
31
38
  import {
32
- checkAmpCredentials,
33
- liveTestAmpCredentials
34
- } from "./cli-04emfe2q.js";
39
+ getContextWindowSize
40
+ } from "./cli-w1q7h2r2.js";
35
41
  import {
36
42
  isLeadChannelMonitoringEnabled,
37
43
  isUnknownModelError,
@@ -41,19 +47,13 @@ import {
41
47
  import {
42
48
  ACP_TARGET_IDS,
43
49
  isAcpTarget
44
- } from "./cli-7a0sde2x.js";
50
+ } from "./cli-6cagzc96.js";
45
51
  import {
46
52
  CODEX_OAUTH_POOL_SLOTS_ENV,
47
53
  countCodexOAuthPoolSlots,
48
54
  hasCodexOAuthPoolSlots,
49
55
  isCodexOAuthConfigKey
50
56
  } from "./cli-bqjfjex4.js";
51
- import {
52
- checkClaudeCredentials
53
- } from "./cli-g4f5pj26.js";
54
- import {
55
- getContextWindowSize
56
- } from "./cli-7avy4v8w.js";
57
57
  import {
58
58
  CODEX_CREDITS_EXHAUSTED_COOLDOWN_MS,
59
59
  MAX_RATE_LIMIT_RESET_MS,
@@ -62,23 +62,27 @@ import {
62
62
  parseRateLimitResetTime,
63
63
  resolveCodexCreditsExhaustedCooldownMs
64
64
  } from "./cli-2pdaysab.js";
65
+ import {
66
+ effectiveReasoningEffort
67
+ } from "./cli-n5vwg842.js";
65
68
  import {
66
69
  canonicalAzureDevOpsRepoUrl,
67
70
  isAzureDevOpsUrl,
68
71
  parseAzureDevOpsRepoUrl,
69
- resolveScriptsOnlyMode
70
- } from "./cli-ztrv9y21.js";
72
+ resolveScriptsOnlyMode,
73
+ resumedTaskModelSelection
74
+ } from "./cli-bzszjf2p.js";
71
75
  import {
72
76
  terminateRegisteredProcessGroups
73
77
  } from "./cli-zt3w1cn1.js";
74
78
  import {
75
79
  validateJsonSchema
76
- } from "./cli-kb4ehzx5.js";
80
+ } from "./cli-1e4b6bzh.js";
77
81
  import {
78
82
  authJsonToCredentialSelection,
79
83
  credentialsToAuthJson,
80
84
  loadAllCodexOAuthSlots
81
- } from "./cli-7jykv7ef.js";
85
+ } from "./cli-e6mpjhed.js";
82
86
  import {
83
87
  ensure,
84
88
  initOtel,
@@ -88,20 +92,22 @@ import {
88
92
  startSpan,
89
93
  withSpan,
90
94
  withSpanContext
91
- } from "./cli-9xsmdpdt.js";
95
+ } from "./cli-skxvvpap.js";
92
96
  import {
93
97
  MASKED_SECRET_VALUE,
94
98
  initTelemetry,
95
99
  init_api_drain,
96
100
  init_codex_auth_failure,
101
+ init_config_env_export,
97
102
  init_config_secrets,
98
103
  init_telemetry,
99
104
  init_telemetry_context,
100
105
  isApiDrainingResponse,
101
106
  isCodexAuthFailureReason,
107
+ isEnvExportRestrictedKey,
102
108
  mapTriggerSurface,
103
109
  telemetry
104
- } from "./cli-tgpfnm6r.js";
110
+ } from "./cli-ef1hg1wv.js";
105
111
  import {
106
112
  ProviderNameSchema,
107
113
  WorkerNudgeSchema,
@@ -109,8 +115,9 @@ import {
109
115
  isTerminalTaskStatus,
110
116
  parseWorkerModelTierOverrides,
111
117
  resolveTaskModelSelection
112
- } from "./cli-hsem16hb.js";
118
+ } from "./cli-cgtksawx.js";
113
119
  import {
120
+ WORKSPACE_CLAUDE_MD_PATH,
114
121
  buildContextPreamble,
115
122
  buildResumeContextPreamble,
116
123
  contentSha256,
@@ -119,6 +126,7 @@ import {
119
126
  generateDefaultSoulMd,
120
127
  generateDefaultToolsMd,
121
128
  getBasePrompt,
129
+ getTaskContextPrompt,
122
130
  init_base_prompt,
123
131
  init_context_preamble,
124
132
  init_defaults,
@@ -131,20 +139,21 @@ import {
131
139
  taskAttachmentFetchCommand,
132
140
  writeIdentityBaselines,
133
141
  writeProfileFileFromDb
134
- } from "./cli-nyhb1r6x.js";
142
+ } from "./cli-s2sp957d.js";
135
143
  import {
136
144
  init_steering_enabled,
137
145
  isSteeringEnabled
138
146
  } from "./cli-7mm2r1kp.js";
139
- import {
140
- init_templates
141
- } from "./cli-mvzyxwg3.js";
142
147
  import {
143
148
  CLAUDE_CREDENTIALS_HINT,
144
149
  ModelWindowExhaustedError,
145
150
  init_credentials,
151
+ normalizeProviderKeyAliases,
146
152
  resolveCredentialPools
147
- } from "./cli-tadfgd0t.js";
153
+ } from "./cli-5hkm7whv.js";
154
+ import {
155
+ init_templates
156
+ } from "./cli-mvzyxwg3.js";
148
157
  import {
149
158
  configureHttpResolver,
150
159
  init_resolver,
@@ -161,7 +170,7 @@ import {
161
170
  } from "./cli-ywybs5as.js";
162
171
  import {
163
172
  deriveDefaultRoute,
164
- init_src,
173
+ init_src as init_src2,
165
174
  validateRoute
166
175
  } from "./cli-f9w1semm.js";
167
176
  import {
@@ -170,12 +179,10 @@ import {
170
179
  init_openrouter_base_url
171
180
  } from "./cli-a35hzdve.js";
172
181
  import {
173
- harnessModelMismatch,
174
182
  init_runtime_model_catalog,
175
- init_src as init_src2,
176
183
  refreshRuntimeModelCatalog,
177
184
  runtimeHarnessSections
178
- } from "./cli-014vns2y.js";
185
+ } from "./cli-stfs0k5s.js";
179
186
  import {
180
187
  getMcpBaseUrl,
181
188
  init_constants
@@ -186,9 +193,18 @@ import {
186
193
  } from "./cli-a1b9b32n.js";
187
194
  import {
188
195
  init_secret_scrubber,
196
+ registerEnvSecrets,
189
197
  registerSensitiveKeyName,
190
198
  scrubSecrets
191
- } from "./cli-d161g69q.js";
199
+ } from "./cli-p1x85d2t.js";
200
+ import {
201
+ harnessModelMismatch,
202
+ init_src,
203
+ openAICompatibleKeyVars,
204
+ openAICompatibleProviders,
205
+ providerBaseUrl,
206
+ providerKeyFromEnv
207
+ } from "./cli-e3g5mbkz.js";
192
208
  import {
193
209
  __require
194
210
  } from "./cli-bc05qbss.js";
@@ -225,47 +241,47 @@ async function materializeCodexAuthJson(_slot, creds, deps = {}) {
225
241
  async function createProviderAdapter(provider) {
226
242
  switch (provider) {
227
243
  case "claude": {
228
- const { ClaudeAdapter } = await import("./claude-adapter-t26cv8a4.js");
244
+ const { ClaudeAdapter } = await import("./claude-adapter-9vmvpvgd.js");
229
245
  return new ClaudeAdapter;
230
246
  }
231
247
  case "pi": {
232
- const { PiMonoAdapter } = await import("./pi-mono-adapter-ef9wwx9m.js");
248
+ const { PiMonoAdapter } = await import("./pi-mono-adapter-9n2ya240.js");
233
249
  return new PiMonoAdapter;
234
250
  }
235
251
  case "codex": {
236
- const { CodexAdapter } = await import("./codex-adapter-m4tgdysy.js");
252
+ const { CodexAdapter } = await import("./codex-adapter-y81sssk0.js");
237
253
  return new CodexAdapter;
238
254
  }
239
255
  case "claude-managed": {
240
- const { ClaudeManagedAdapter } = await import("./claude-managed-adapter-xgxhqrt2.js");
256
+ const { ClaudeManagedAdapter } = await import("./claude-managed-adapter-k9qae05j.js");
241
257
  return new ClaudeManagedAdapter;
242
258
  }
243
259
  case "devin": {
244
- const { DevinAdapter } = await import("./devin-adapter-xgtj680j.js");
260
+ const { DevinAdapter } = await import("./devin-adapter-x1022qb1.js");
245
261
  return new DevinAdapter;
246
262
  }
247
263
  case "opencode": {
248
- const { OpencodeAdapter } = await import("./opencode-adapter-5zh0he20.js");
264
+ const { OpencodeAdapter } = await import("./opencode-adapter-nm42wwj8.js");
249
265
  return new OpencodeAdapter;
250
266
  }
251
267
  case "dsh": {
252
- const { DshAdapter } = await import("./dsh-adapter-2h8m4cab.js");
268
+ const { DshAdapter } = await import("./dsh-adapter-3epjm3af.js");
253
269
  return new DshAdapter;
254
270
  }
255
271
  case "amp": {
256
- const { AmpAdapter } = await import("./amp-adapter-8jem2bc0.js");
272
+ const { AmpAdapter } = await import("./amp-adapter-ad8ft89x.js");
257
273
  return new AmpAdapter;
258
274
  }
259
275
  case "cursor": {
260
- const { CursorAdapter } = await import("./cursor-adapter-q8pgv5qa.js");
276
+ const { CursorAdapter } = await import("./cursor-adapter-cehv1qns.js");
261
277
  return new CursorAdapter;
262
278
  }
263
279
  case "grok": {
264
- const { GrokAdapter } = await import("./grok-adapter-8m9yqzbq.js");
280
+ const { GrokAdapter } = await import("./grok-adapter-0d4x7gkx.js");
265
281
  return new GrokAdapter;
266
282
  }
267
283
  case "acp": {
268
- const { ACPAdapter } = await import("./acp-adapter-fpecx1g1.js");
284
+ const { ACPAdapter } = await import("./acp-adapter-sj2g0m84.js");
269
285
  return new ACPAdapter;
270
286
  }
271
287
  default:
@@ -453,6 +469,7 @@ function computeBudgetBackoffMs(consecutiveRefusals, basePollMs) {
453
469
 
454
470
  // src/commands/runner.ts
455
471
  init_codex_auth_failure();
472
+ init_config_env_export();
456
473
  init_config_secrets();
457
474
  init_constants();
458
475
  init_credentials();
@@ -534,15 +551,17 @@ async function reportHarnessModelOutcome(opts) {
534
551
  }
535
552
 
536
553
  // src/utils/harness-provider.ts
554
+ init_src();
537
555
  init_types();
538
556
  var SUPPORTED_PROVIDERS = ProviderNameSchema.options;
539
557
  function hasEnvValue(key, resolvedEnv, fallbackEnv) {
540
558
  return !!(resolvedEnv[key]?.trim() || fallbackEnv[key]?.trim());
541
559
  }
560
+ var PI_DEFAULT_KEY_VARS = ["OPENROUTER_API_KEY", ...openAICompatibleKeyVars()];
542
561
  function credentialAwareDefault(resolvedEnv, fallbackEnv) {
543
- const hasOpenRouterKey = hasEnvValue("OPENROUTER_API_KEY", resolvedEnv, fallbackEnv);
562
+ const hasPiKey = PI_DEFAULT_KEY_VARS.some((key) => hasEnvValue(key, resolvedEnv, fallbackEnv));
544
563
  const hasClaudeCredential = hasEnvValue("ANTHROPIC_API_KEY", resolvedEnv, fallbackEnv) || hasEnvValue("CLAUDE_CODE_OAUTH_TOKEN", resolvedEnv, fallbackEnv);
545
- return hasOpenRouterKey && !hasClaudeCredential ? "pi" : "claude";
564
+ return hasPiKey && !hasClaudeCredential ? "pi" : "claude";
546
565
  }
547
566
  function resolveHarnessProvider(resolvedEnv, fallbackEnv = process.env) {
548
567
  const candidate = resolvedEnv.HARNESS_PROVIDER?.trim() || fallbackEnv.HARNESS_PROVIDER?.trim();
@@ -865,7 +884,7 @@ async function refreshSkillsIfChanged(ctx, lastHashRef, homeOverride) {
865
884
  }
866
885
 
867
886
  // src/utils/spawn-model-guard.ts
868
- init_src2();
887
+ init_src();
869
888
  init_runtime_model_catalog();
870
889
  function spawnHarnessMismatchReason(model, harness) {
871
890
  return `[model-harness-mismatch] Model "${model}" does not run on the ${harness} harness of this worker. The task pinned a model from another harness family. Re-create the task with modelTier or with a ${harness} model.`;
@@ -1109,6 +1128,7 @@ async function reportCredentialOutcomeThenFinish(input, finish) {
1109
1128
 
1110
1129
  // src/commands/provider-credentials.ts
1111
1130
  init_src();
1131
+ init_src2();
1112
1132
  init_credentials();
1113
1133
  init_openrouter_base_url();
1114
1134
  init_secret_scrubber();
@@ -1119,6 +1139,29 @@ function isBedrockMode(env) {
1119
1139
  function shouldRefreshBedrockStatus(opts) {
1120
1140
  return opts.harnessProvider === "pi" && isBedrockMode(opts.env) && opts.now - opts.lastRefreshAt > opts.intervalMs;
1121
1141
  }
1142
+ var REQUIRED_CRED_VARS_BY_PROVIDER = {
1143
+ claude: ["CLAUDE_CODE_OAUTH_TOKEN", "ANTHROPIC_API_KEY"],
1144
+ "claude-managed": [
1145
+ "ANTHROPIC_API_KEY",
1146
+ "MANAGED_AGENT_ID",
1147
+ "MANAGED_ENVIRONMENT_ID",
1148
+ "MCP_BASE_URL"
1149
+ ],
1150
+ codex: ["OPENAI_API_KEY", "CODEX_OAUTH"],
1151
+ devin: ["DEVIN_API_KEY", "DEVIN_ORG_ID"],
1152
+ opencode: [
1153
+ "OPENROUTER_API_KEY",
1154
+ "ANTHROPIC_API_KEY",
1155
+ "OPENAI_API_KEY",
1156
+ ...openAICompatibleKeyVars()
1157
+ ],
1158
+ pi: ["ANTHROPIC_API_KEY", "OPENROUTER_API_KEY", "OPENAI_API_KEY", ...openAICompatibleKeyVars()],
1159
+ acp: [],
1160
+ dsh: ["DEEPSEEK_API_KEY", "OPENROUTER_API_KEY"],
1161
+ amp: ["AMP_API_KEY"],
1162
+ cursor: ["CURSOR_API_KEY"],
1163
+ grok: ["XAI_API_KEY", "OPENROUTER_API_KEY"]
1164
+ };
1122
1165
  var CREDENTIAL_PROVIDER_CHECKERS = {
1123
1166
  dsh: (env) => checkDshCredentials(env),
1124
1167
  amp: (env) => checkAmpCredentials(env),
@@ -1130,7 +1173,7 @@ var CREDENTIAL_PROVIDER_CHECKERS = {
1130
1173
  devin: (env) => checkDevinCredentials(env),
1131
1174
  opencode: (env, opts) => checkOpencodeCredentials(env, opts),
1132
1175
  pi: async (env, opts) => {
1133
- const { checkPiMonoCredentials } = await import("./pi-mono-adapter-ef9wwx9m.js");
1176
+ const { checkPiMonoCredentials } = await import("./pi-mono-adapter-9n2ya240.js");
1134
1177
  return checkPiMonoCredentials(env, opts);
1135
1178
  },
1136
1179
  acp: (env) => {
@@ -1245,6 +1288,19 @@ async function checkOpenRouter(apiKey) {
1245
1288
  latency_ms: r.latency_ms
1246
1289
  };
1247
1290
  }
1291
+ async function checkOpenAICompatibleProvider(provider, apiKey, baseUrl = provider.baseUrl) {
1292
+ const r = await timedFetch(`${baseUrl.replace(/\/+$/, "")}/models`, {
1293
+ method: "GET",
1294
+ headers: { Authorization: `Bearer ${apiKey}` }
1295
+ });
1296
+ if (r.ok)
1297
+ return { ok: true, latency_ms: r.latency_ms };
1298
+ return {
1299
+ ok: false,
1300
+ error: scrubSecrets(`HTTP ${r.status}: ${r.bodyText.slice(0, 200)}`),
1301
+ latency_ms: r.latency_ms
1302
+ };
1303
+ }
1248
1304
  function codexAuthFileExists(env) {
1249
1305
  return checkCodexCredentials(env).satisfiedBy === "file";
1250
1306
  }
@@ -1317,11 +1373,17 @@ async function validateProviderCredentials(provider, env = process.env, presence
1317
1373
  return checkAnthropicApiKey(env.ANTHROPIC_API_KEY);
1318
1374
  if (env.OPENAI_API_KEY)
1319
1375
  return checkOpenAiApiKey(env.OPENAI_API_KEY);
1376
+ for (const direct of openAICompatibleProviders()) {
1377
+ const key = providerKeyFromEnv(direct, env);
1378
+ if (key) {
1379
+ return checkOpenAICompatibleProvider(direct, key, providerBaseUrl(direct, env));
1380
+ }
1381
+ }
1320
1382
  if (status.ready)
1321
1383
  return presenceCheckOk();
1322
1384
  return {
1323
1385
  ok: false,
1324
- error: "No usable credential found (OPENROUTER_API_KEY, ANTHROPIC_API_KEY, or OPENAI_API_KEY).",
1386
+ error: `No usable credential found (OPENROUTER_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY, ${openAICompatibleProviders().map((p) => p.envVar).join(", ").replace(/, (?=[^,]*$)/, ", or ")}).`,
1325
1387
  latency_ms: Date.now() - startedAt
1326
1388
  };
1327
1389
  }
@@ -1380,7 +1442,7 @@ async function validateProviderCredentials(provider, env = process.env, presence
1380
1442
  latency_ms: Date.now() - startedAt
1381
1443
  };
1382
1444
  }
1383
- const { liveTestCursorKey } = await import("./cursor-adapter-q8pgv5qa.js");
1445
+ const { liveTestCursorKey } = await import("./cursor-adapter-cehv1qns.js");
1384
1446
  const result = await liveTestCursorKey(apiKey);
1385
1447
  return result.ok ? { ok: true, latency_ms: Date.now() - startedAt } : { ok: false, error: result.error, latency_ms: Date.now() - startedAt };
1386
1448
  }
@@ -1913,13 +1975,6 @@ function scheduleRunnerGc(reason) {
1913
1975
  timer.unref?.();
1914
1976
  return true;
1915
1977
  }
1916
- async function savePm2State(role) {
1917
- try {
1918
- console.log(`[${role}] Saving PM2 process list...`);
1919
- await Bun.$`pm2 save`.quiet();
1920
- console.log(`[${role}] PM2 state saved`);
1921
- } catch {}
1922
- }
1923
1978
  async function fetchRepoConfig(apiUrl, apiKey, vcsRepo, requireExactMatch = false) {
1924
1979
  try {
1925
1980
  const requested = vcsRepo.trim().replace(/\/+$/, "").replace(/\.git$/, "");
@@ -2254,6 +2309,16 @@ async function exitAfterTasksIfFinished(state, limit, shutdown) {
2254
2309
  }
2255
2310
  var deploymentMemoryRaters = process.env.MEMORY_RATERS;
2256
2311
  var rowOverriddenBootEnv = new Map;
2312
+ var lastWithheldEnvKeys = "";
2313
+ function logWithheldEnvKeys(keys) {
2314
+ const summary = [...keys].sort().join(", ");
2315
+ if (summary === lastWithheldEnvKeys)
2316
+ return;
2317
+ lastWithheldEnvKeys = summary;
2318
+ if (!summary)
2319
+ return;
2320
+ console.log(`[env-reload] Kept ${keys.length} config entries with exportToEnv=false out of the harness env: ${summary}`);
2321
+ }
2257
2322
  async function fetchResolvedEnv(apiUrl, apiKey, agentId, baseEnv = process.env, taskModel, sessionContext) {
2258
2323
  const env = { ...baseEnv };
2259
2324
  for (const key of Object.keys(env)) {
@@ -2283,7 +2348,17 @@ async function fetchResolvedEnv(apiUrl, apiKey, agentId, baseEnv = process.env,
2283
2348
  if (data.configs?.length) {
2284
2349
  const skippedSecretKeys = [];
2285
2350
  scriptsOnlyConfigValue = data.configs.find((config) => config.key === "SCRIPTS_ONLY_MCP")?.value;
2351
+ const withheldEnvKeys = [];
2286
2352
  for (const config of data.configs) {
2353
+ if (config.exportToEnv === false || isEnvExportRestrictedKey(config.key)) {
2354
+ if (config.isSecret)
2355
+ registerSensitiveKeyName(config.key);
2356
+ delete env[config.key];
2357
+ if (baseEnv === process.env)
2358
+ delete process.env[config.key];
2359
+ withheldEnvKeys.push(config.key);
2360
+ continue;
2361
+ }
2287
2362
  if (config.isSecret && config.value === MASKED_SECRET_VALUE) {
2288
2363
  skippedSecretKeys.push(config.key);
2289
2364
  continue;
@@ -2301,6 +2376,7 @@ async function fetchResolvedEnv(apiUrl, apiKey, agentId, baseEnv = process.env,
2301
2376
  if (skippedSecretKeys.length) {
2302
2377
  console.warn(scrubSecrets(`[env-reload] Skipped masked secrets: ${skippedSecretKeys.join(", ")}`));
2303
2378
  }
2379
+ logWithheldEnvKeys(withheldEnvKeys);
2304
2380
  console.log(`[env-reload] Loaded ${data.configs.length} config entries from API`);
2305
2381
  }
2306
2382
  const codexPoolSlots = countCodexOAuthPoolSlots(data.configs ?? []);
@@ -2310,6 +2386,8 @@ async function fetchResolvedEnv(apiUrl, apiKey, agentId, baseEnv = process.env,
2310
2386
  console.warn(`[env-reload] Could not fetch config, using current env: ${error}`);
2311
2387
  }
2312
2388
  }
2389
+ normalizeProviderKeyAliases(env);
2390
+ registerEnvSecrets(env);
2313
2391
  const resolvedProvider = sessionContext?.provider ?? resolveHarnessProvider(env, baseEnv);
2314
2392
  if (sessionContext?.provider)
2315
2393
  env.HARNESS_PROVIDER = sessionContext.provider;
@@ -2510,10 +2588,6 @@ var SWARM_TOOL_LABELS = {
2510
2588
  "create-channel": "\uD83D\uDCE2 Creating channel",
2511
2589
  "list-channels": "\uD83D\uDCE2 Listing channels",
2512
2590
  "delete-channel": "\uD83D\uDCE2 Deleting channel",
2513
- "register-service": "\uD83D\uDD0C Registering service",
2514
- "list-services": "\uD83D\uDD0C Listing services",
2515
- "unregister-service": "\uD83D\uDD0C Unregistering service",
2516
- "update-service-status": "\uD83D\uDD0C Updating service status",
2517
2591
  "script-search": "\uD83D\uDCDC Searching scripts",
2518
2592
  "script-run": "\uD83D\uDCDC Running script",
2519
2593
  "script-upsert": "\uD83D\uDCDC Saving script",
@@ -3173,7 +3247,6 @@ function setupShutdownHandlers(role, apiConfig, getRunnerState, onShutdown) {
3173
3247
  });
3174
3248
  await closeAgent(apiConfig, role);
3175
3249
  }
3176
- await savePm2State(role);
3177
3250
  process.exit(exitCode);
3178
3251
  };
3179
3252
  const beginShutdown = (signal, exitCode = 0) => shutdown(signal, exitCode).catch(async (error) => {
@@ -3253,11 +3326,13 @@ async function saveCostData(cost, apiUrl, apiKey, deadline) {
3253
3326
  console.warn(scrubSecrets(`[runner] Error saving cost data: ${error}`));
3254
3327
  }
3255
3328
  }
3256
- async function saveProviderSessionId(apiUrl, apiKey, taskId, claudeSessionId, provider, providerMeta, model, harnessVariant, harnessVariantMeta) {
3329
+ async function saveProviderSessionId(apiUrl, apiKey, taskId, claudeSessionId, provider, providerMeta, model, harnessVariant, harnessVariantMeta, effort) {
3257
3330
  const headers = { "Content-Type": "application/json" };
3258
3331
  if (apiKey)
3259
3332
  headers.Authorization = `Bearer ${apiKey}`;
3260
3333
  const body = { claudeSessionId };
3334
+ if (effort !== undefined && provider !== "devin")
3335
+ body.effort = effort;
3261
3336
  if (provider !== undefined)
3262
3337
  body.provider = provider;
3263
3338
  if (providerMeta !== undefined)
@@ -3544,6 +3619,33 @@ ${notes}` : "";
3544
3619
  });
3545
3620
  return result.skipped ? "" : result.text.trim();
3546
3621
  }
3622
+ function missingTaskDirWarning(taskDir, effectiveCwd) {
3623
+ return taskDir && !effectiveCwd ? `Note: The task requested working directory "${taskDir}" but it does not exist. Falling back to default directory.` : undefined;
3624
+ }
3625
+ async function buildTaskSessionPrompts(input) {
3626
+ const { basePromptArgs, additionalSystemPrompt, context } = input;
3627
+ const basePrompt = await getBasePrompt(basePromptArgs);
3628
+ const systemPrompt = additionalSystemPrompt ? `${basePrompt}
3629
+
3630
+ ${additionalSystemPrompt}` : basePrompt;
3631
+ const taskContext = [
3632
+ await getTaskContextPrompt({
3633
+ ...basePromptArgs,
3634
+ repoContext: context.repoContext,
3635
+ slackContext: context.slackContext
3636
+ }),
3637
+ await buildRequesterProfilePrompt(context.requestedBy),
3638
+ context.cwdWarning?.trim()
3639
+ ].filter((part) => Boolean(part)).join(`
3640
+
3641
+ `);
3642
+ return {
3643
+ systemPrompt,
3644
+ prompt: taskContext ? `${input.taskPrompt}
3645
+
3646
+ ${taskContext}` : input.taskPrompt
3647
+ };
3648
+ }
3547
3649
 
3548
3650
  class AgentRegistrationHttpError extends Error {
3549
3651
  status;
@@ -4076,6 +4178,7 @@ async function spawnProviderProcess(adapter, opts, logDir, isYolo) {
4076
4178
  if (spawnModel.warning)
4077
4179
  console.warn(spawnModel.warning);
4078
4180
  const model = spawnModel.model;
4181
+ const sessionEffort = effectiveReasoningEffort(adapter.name, model, reasoningEffortOverride);
4079
4182
  let oauthSelection;
4080
4183
  let oauthIsPoolBacked = false;
4081
4184
  if (adapter.name === "codex") {
@@ -4248,7 +4351,7 @@ async function spawnProviderProcess(adapter, opts, logDir, isYolo) {
4248
4351
  }).catch((err) => console.warn(`[runner] Failed to report ACP options: ${err}`));
4249
4352
  }
4250
4353
  if (realTaskId) {
4251
- saveProviderSessionId(opts.apiUrl, opts.apiKey, realTaskId, event.sessionId, event.provider, event.providerMeta, model, event.harnessVariant, event.harnessVariantMeta).catch((err) => console.warn(`[runner] Failed to save session ID: ${err}`));
4354
+ saveProviderSessionId(opts.apiUrl, opts.apiKey, realTaskId, event.sessionId, event.provider, event.providerMeta, model, event.harnessVariant, event.harnessVariantMeta, sessionEffort).catch((err) => console.warn(`[runner] Failed to save session ID: ${err}`));
4252
4355
  } else {
4253
4356
  saveProviderSessionIdOnActiveSession(opts.apiUrl, opts.apiKey, effectiveTaskId, event.sessionId).catch((err) => console.warn(`[runner] Failed to save provider session on active session: ${err}`));
4254
4357
  }
@@ -5076,11 +5179,9 @@ async function runAgent(config, opts) {
5076
5179
  let agentDescription;
5077
5180
  let agentSkillsSummary;
5078
5181
  let agentMcpServers;
5079
- let currentRepoContext;
5080
- let currentTaskSlackContext;
5081
- const buildSystemPrompt = async () => {
5182
+ const basePromptArgs = () => {
5082
5183
  const { traits } = adapter;
5083
- return getBasePrompt({
5184
+ return {
5084
5185
  role,
5085
5186
  agentId,
5086
5187
  capabilities,
@@ -5093,14 +5194,13 @@ async function runAgent(config, opts) {
5093
5194
  soulMd: agentSoulMd,
5094
5195
  identityMd: agentIdentityMd,
5095
5196
  claudeMd: agentClaudeMd,
5096
- repoContext: currentRepoContext,
5097
- slackContext: currentTaskSlackContext,
5098
5197
  ...traits.hasMcp && {
5099
5198
  skillsSummary: agentSkillsSummary,
5100
5199
  mcpServers: agentMcpServers
5101
5200
  }
5102
- });
5201
+ };
5103
5202
  };
5203
+ const buildSystemPrompt = async () => getBasePrompt(basePromptArgs());
5104
5204
  let basePrompt = await buildSystemPrompt();
5105
5205
  let additionalSystemPrompt;
5106
5206
  const systemPromptText = opts.systemPrompt || process.env.SYSTEM_PROMPT;
@@ -5577,7 +5677,7 @@ ${agentSetupScript}
5577
5677
  }
5578
5678
  if (agentClaudeMd) {
5579
5679
  try {
5580
- const backupPath = await writeProfileFileFromDb("/workspace/CLAUDE.md", agentClaudeMd);
5680
+ const backupPath = await writeProfileFileFromDb(WORKSPACE_CLAUDE_MD_PATH, agentClaudeMd);
5581
5681
  if (backupPath)
5582
5682
  console.warn(`[${role}] Archived differing CLAUDE.md at ${backupPath}`);
5583
5683
  console.log(`[${role}] Wrote CLAUDE.md to workspace`);
@@ -5714,7 +5814,8 @@ ${additionalSystemPrompt}` : basePrompt;
5714
5814
  console.warn(`[${role}] Failed to check resume task dir "${task.dir}", falling back to default cwd`);
5715
5815
  }
5716
5816
  }
5717
- if (!resumeCwd && task.vcsRepo && apiUrl) {
5817
+ let resumeRepoContext;
5818
+ if (task.vcsRepo && apiUrl) {
5718
5819
  const repoConfig = await fetchRepoConfig(apiUrl, apiKey, task.vcsRepo);
5719
5820
  const effectiveConfig = repoConfig ?? {
5720
5821
  url: task.vcsRepo,
@@ -5723,10 +5824,27 @@ ${additionalSystemPrompt}` : basePrompt;
5723
5824
  defaultBranch: "main"
5724
5825
  };
5725
5826
  const repoContext = await ensureRepoForTask(effectiveConfig, role, false);
5726
- if (repoContext?.clonePath) {
5827
+ resumeRepoContext = { ...repoContext, guidelines: repoConfig?.guidelines ?? null };
5828
+ if (!resumeCwd && repoContext?.clonePath) {
5727
5829
  resumeCwd = repoContext.clonePath;
5728
5830
  }
5729
5831
  }
5832
+ const resumeSlackChannelId = task.slackChannelId;
5833
+ const resumeSession = await buildTaskSessionPrompts({
5834
+ basePromptArgs: basePromptArgs(),
5835
+ additionalSystemPrompt,
5836
+ taskPrompt: resumePrompt,
5837
+ context: {
5838
+ repoContext: resumeRepoContext,
5839
+ slackContext: resumeSlackChannelId ? {
5840
+ channelId: resumeSlackChannelId,
5841
+ threadTs: task.slackThreadTs
5842
+ } : undefined,
5843
+ requestedBy: task.requestedBy,
5844
+ cwdWarning: missingTaskDirWarning(task.dir, resumeCwd)
5845
+ }
5846
+ });
5847
+ resumePrompt = resumeSession.prompt;
5730
5848
  const resumeRunnerSessionId = crypto.randomUUID();
5731
5849
  await registerActiveSession(apiConfig, {
5732
5850
  taskId: task.id,
@@ -5739,7 +5857,7 @@ ${additionalSystemPrompt}` : basePrompt;
5739
5857
  runningTask = await spawnProviderProcess(adapter, {
5740
5858
  prompt: resumePrompt,
5741
5859
  logFile,
5742
- systemPrompt: resolvedSystemPrompt,
5860
+ systemPrompt: resumeSession.systemPrompt,
5743
5861
  additionalArgs: opts.additionalArgs,
5744
5862
  resumeSessionId: undefined,
5745
5863
  role,
@@ -5749,10 +5867,8 @@ ${additionalSystemPrompt}` : basePrompt;
5749
5867
  runnerSessionId: resumeRunnerSessionId,
5750
5868
  iteration,
5751
5869
  taskId: task.id,
5752
- model: task.model,
5870
+ ...resumedTaskModelSelection(task),
5753
5871
  modelTier: task.modelTier,
5754
- resolvedModel: task.resolvedModel,
5755
- modelSource: task.modelSource,
5756
5872
  effort: task.effort,
5757
5873
  harnessProvider: state.harnessProvider,
5758
5874
  cwd: resumeCwd,
@@ -5979,7 +6095,8 @@ ${additionalSystemPrompt}` : basePrompt;
5979
6095
  const taskContextKey = trigger.task?.contextKey;
5980
6096
  const taskSlackChannelId = trigger.task?.slackChannelId;
5981
6097
  const taskSlackThreadTs = trigger.task?.slackThreadTs;
5982
- currentTaskSlackContext = taskSlackChannelId ? { channelId: taskSlackChannelId, threadTs: taskSlackThreadTs } : undefined;
6098
+ const taskSlackContext = taskSlackChannelId ? { channelId: taskSlackChannelId, threadTs: taskSlackThreadTs } : undefined;
6099
+ let currentRepoContext;
5983
6100
  const taskVcsRepo = trigger.task?.vcsRepo;
5984
6101
  if (taskVcsRepo && apiUrl) {
5985
6102
  const repoConfig = await fetchRepoConfig(apiUrl, apiKey, taskVcsRepo);
@@ -5995,8 +6112,6 @@ ${additionalSystemPrompt}` : basePrompt;
5995
6112
  ...repoResult,
5996
6113
  guidelines: repoConfig?.guidelines ?? null
5997
6114
  };
5998
- } else {
5999
- currentRepoContext = undefined;
6000
6115
  }
6001
6116
  const taskDir = trigger.task?.dir;
6002
6117
  let effectiveCwd;
@@ -6026,12 +6141,7 @@ ${additionalSystemPrompt}` : basePrompt;
6026
6141
  }
6027
6142
  triggerPrompt += " You can still access any path on the filesystem — this is just your starting directory.";
6028
6143
  }
6029
- let cwdWarning = "";
6030
- if (taskDir && !effectiveCwd) {
6031
- cwdWarning = `
6032
-
6033
- Note: The task requested working directory "${taskDir}" but it does not exist. Falling back to default directory.`;
6034
- }
6144
+ const cwdWarning = missingTaskDirWarning(taskDir, effectiveCwd);
6035
6145
  if (state.harnessProvider !== "claude-managed") {
6036
6146
  const skillResult = await refreshSkillsIfChanged({ apiUrl, swarmUrl, apiKey, agentId, role }, lastSkillHash);
6037
6147
  if (skillResult.changed && skillResult.summary) {
@@ -6058,12 +6168,19 @@ Note: The task requested working directory "${taskDir}" but it does not exist. F
6058
6168
  agentDescription = identityResult.fields.description;
6059
6169
  console.log(`[${role}] Identity changed — refreshing system prompt (${identityResult.changedFields.join(", ")})`);
6060
6170
  }
6061
- const taskBasePrompt = await buildSystemPrompt();
6062
- const requesterProfilePrompt = await buildRequesterProfilePrompt(trigger.requestedBy);
6063
- const taskPromptParts = [taskBasePrompt, requesterProfilePrompt, additionalSystemPrompt].filter((part) => Boolean(part)).join(`
6064
-
6065
- `);
6066
- const taskSystemPrompt = taskPromptParts + cwdWarning;
6171
+ const taskSession = await buildTaskSessionPrompts({
6172
+ basePromptArgs: basePromptArgs(),
6173
+ additionalSystemPrompt,
6174
+ taskPrompt: triggerPrompt,
6175
+ context: {
6176
+ repoContext: currentRepoContext,
6177
+ slackContext: taskSlackContext,
6178
+ requestedBy: trigger.requestedBy,
6179
+ cwdWarning
6180
+ }
6181
+ });
6182
+ const taskSystemPrompt = taskSession.systemPrompt;
6183
+ triggerPrompt = taskSession.prompt;
6067
6184
  const modelUnsupported = trigger.task?.modelUnsupported;
6068
6185
  if (trigger.taskId && modelUnsupported) {
6069
6186
  console.log(`[${role}] ${modelUnsupported}`);