@desplega.ai/agent-swarm 1.173.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-ccm9xrep.js → acp-adapter-kr4abrsk.js} +17 -16
  3. package/dist/{actions-sgeyv08k.js → actions-eh4g6w2r.js} +39 -34
  4. package/dist/{amp-adapter-gpxp3kc9.js → amp-adapter-7h7wdt8q.js} +8 -7
  5. package/dist/{app-km9qnv2f.js → app-7k8s9w5p.js} +18 -14
  6. package/dist/{assistant-5r8tcvvd.js → assistant-wswt2y7p.js} +40 -35
  7. package/dist/{boot-reembed-16rv9843.js → boot-reembed-9apm9qw6.js} +10 -9
  8. package/dist/{boot-reembed-swwzdgd7.js → boot-reembed-whzbdthj.js} +10 -9
  9. package/dist/{boot-scrub-sweep-zkr6vkqb.js → boot-scrub-sweep-ndzmvmgt.js} +11 -10
  10. package/dist/{boot-seeds-d8sp49t2.js → boot-seeds-e9sta0yt.js} +16 -13
  11. package/dist/{claude-adapter-yzzzh8jp.js → claude-adapter-4mqd3r6r.js} +19 -18
  12. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-9wswb52m.js} +7 -5
  13. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-tpe1effx.js} +6 -4
  14. package/dist/{claude-sdk-session-4whxere4.js → claude-sdk-session-q49ghmh9.js} +12402 -11850
  15. package/dist/{cli-ne7smj1b.js → cli-01xvj1rq.js} +10 -10
  16. package/dist/{cli-nwrdx840.js → cli-035vekcw.js} +3 -3
  17. package/dist/{cli-9xf7fdtp.js → cli-0pd8hzhc.js} +29 -6
  18. package/dist/{cli-tmhsxhb8.js → cli-0veb92a3.js} +28 -6
  19. package/dist/{cli-c3rk1v0x.js → cli-10jesr25.js} +3 -3
  20. package/dist/{cli-6thk4jz3.js → cli-1y7yywmj.js} +6 -6
  21. package/dist/{cli-6r2f7edk.js → cli-20krdhz5.js} +47 -19
  22. package/dist/{cli-rfs4vddv.js → cli-29rja109.js} +39 -20
  23. package/dist/cli-2m1ktfzz.js +17795 -0
  24. package/dist/{cli-na2pxe4f.js → cli-2pwa0q4d.js} +15 -4
  25. package/dist/{cli-7a93cv8c.js → cli-4mengw46.js} +441 -43
  26. package/dist/{cli-94b48jhk.js → cli-5twdke5x.js} +16 -14
  27. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  28. package/dist/cli-6cvfxs8r.js +47 -0
  29. package/dist/{cli-w1apjecb.js → cli-711vwbxn.js} +2 -2
  30. package/dist/{cli-r4fqfpwf.js → cli-78vv7446.js} +50 -27
  31. package/dist/{cli-srqq3gc5.js → cli-7n6s5man.js} +5 -5
  32. package/dist/{cli-m89t9jdf.js → cli-7x0g4sn1.js} +15416 -16024
  33. package/dist/{cli-2bw3w47j.js → cli-8wwxw8a3.js} +1 -1
  34. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  35. package/dist/{cli-ywm1azg9.js → cli-9jzdj90z.js} +8 -4
  36. package/dist/cli-9traj3dn.js +638 -0
  37. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  38. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  39. package/dist/cli-cvv9k0hh.js +10143 -0
  40. package/dist/{cli-anzdk0z4.js → cli-d9286m9h.js} +2 -2
  41. package/dist/cli-e3g5mbkz.js +776 -0
  42. package/dist/cli-f527ce74.js +781 -0
  43. package/dist/{cli-gmdajfw5.js → cli-gxzkg1de.js} +5020 -1729
  44. package/dist/{cli-451ks6aw.js → cli-h1arqn31.js} +1 -1
  45. package/dist/cli-hjwmhcg1.js +10622 -0
  46. package/dist/{cli-jpc4r224.js → cli-hqr88ew6.js} +19 -3
  47. package/dist/{cli-h7k0xtry.js → cli-hvqbtna4.js} +4 -1256
  48. package/dist/{cli-cd0hv9nh.js → cli-j67mh2vg.js} +2 -2
  49. package/dist/cli-jta2eyzc.js +619 -0
  50. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  51. package/dist/cli-kceah1eh.js +92 -0
  52. package/dist/{cli-d603qf86.js → cli-ksphgh48.js} +10 -8
  53. package/dist/{cli-3nxdmjrc.js → cli-mgz4nbgg.js} +4 -4
  54. package/dist/{cli-saqyage0.js → cli-mz5as5ha.js} +179 -27
  55. package/dist/cli-n2wq4j7m.js +6985 -0
  56. package/dist/{cli-ppy4nnnh.js → cli-n8ndw8j7.js} +2 -2
  57. package/dist/{cli-1w0vj3gw.js → cli-naqzr17j.js} +7 -7
  58. package/dist/{cli-0a7mm3zp.js → cli-nm1p8jfr.js} +25 -21
  59. package/dist/{cli-wrh08zjd.js → cli-p3zbc1rw.js} +5 -18
  60. package/dist/{cli-hsem16hb.js → cli-pe05f8yk.js} +29 -6
  61. package/dist/{cli-5wpw4rab.js → cli-qmzsbkvy.js} +5 -5
  62. package/dist/{cli-bv2etw2y.js → cli-qnm4e9e4.js} +99 -590
  63. package/dist/{cli-1x7da0de.js → cli-qqy4q48b.js} +8 -8
  64. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  65. package/dist/{cli-5er5gjbm.js → cli-r35rw5de.js} +15 -15
  66. package/dist/{cli-v3zhnxsb.js → cli-r610p9bs.js} +2 -2
  67. package/dist/{cli-7jykv7ef.js → cli-rc6pf5kv.js} +1 -1
  68. package/dist/{cli-x119kdba.js → cli-rdxm77k3.js} +1 -1
  69. package/dist/cli-rhs9pz33.js +294 -0
  70. package/dist/{cli-0p3enk35.js → cli-s69nfyeh.js} +9 -1
  71. package/dist/{cli-0kxf81jj.js → cli-sawv63e8.js} +2 -2
  72. package/dist/{cli-e3pmyt39.js → cli-sg19gbf0.js} +1 -1
  73. package/dist/{cli-d161g69q.js → cli-shk7r5cs.js} +57 -6
  74. package/dist/{cli-7pz3b7x5.js → cli-sksetb2q.js} +36 -1
  75. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  76. package/dist/{cli-db3m6zdt.js → cli-t02z59f2.js} +1 -1
  77. package/dist/{cli-b07hr3bt.js → cli-txqb9s38.js} +2 -2
  78. package/dist/{cli-s8z6x4b4.js → cli-v7g551te.js} +225 -113
  79. package/dist/{cli-rfz2ve55.js → cli-vgqzp4em.js} +3341 -955
  80. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  81. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  82. package/dist/cli-wfnemr1t.js +86 -0
  83. package/dist/cli-wmgrkscj.js +23254 -0
  84. package/dist/{cli-qm1448f9.js → cli-wms6x9db.js} +8 -8
  85. package/dist/{cli-tadfgd0t.js → cli-x1r545x8.js} +33 -4
  86. package/dist/{cli-xc7p7s3g.js → cli-xczsgshn.js} +6 -6
  87. package/dist/{cli-fmhj1ehj.js → cli-y3167wt1.js} +882 -271
  88. package/dist/{cli-r0byd61h.js → cli-yjmqpxt3.js} +17 -16
  89. package/dist/{cli-81r1wjyv.js → cli-z780ec7c.js} +1 -1
  90. package/dist/{cli-phcqp1b9.js → cli-zm9t2vde.js} +2 -2
  91. package/dist/cli.js +34 -49
  92. package/dist/{codex-adapter-r3dn4fp5.js → codex-adapter-4z16v9n0.js} +15 -14
  93. package/dist/{codex-login-841kv5fk.js → codex-login-pkepy2j1.js} +3 -2
  94. package/dist/{codex-session-runner-fwt793h4.js → codex-session-runner-rvms9y2x.js} +15 -14
  95. package/dist/{commands-z8fq9qna.js → commands-2a9rtyat.js} +11 -10
  96. package/dist/{controller-hq5ggpcp.js → controller-3k3madbn.js} +5 -4
  97. package/dist/{controllers-connect-3mf2btyj.js → controllers-connect-v9yn8zb9.js} +42 -37
  98. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-98gbhyzn.js} +7 -6
  99. package/dist/{db-qfpq4bt7.js → db-eywwsnjw.js} +30 -9
  100. package/dist/{db-yyhqqrbf.js → db-ncypk9np.js} +12 -11
  101. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-zeq8b9gz.js} +3 -2
  102. package/dist/{dispatcher-x0x7qfcq.js → dispatcher-w94kc575.js} +38 -33
  103. package/dist/{docker-f503k9p0.js → docker-b1e4cqab.js} +3 -2
  104. package/dist/{dsh-adapter-34etvb5m.js → dsh-adapter-47ztej36.js} +7 -6
  105. package/dist/{e2b-66xra4az.js → e2b-bbt8ey45.js} +4 -3
  106. package/dist/{e2b-xwhyj8cw.js → e2b-dp804sen.js} +4 -3
  107. package/dist/{event-bus-vjtv82gm.js → event-bus-j2jdg3qb.js} +3 -2
  108. package/dist/{external-channel-h1fjecwe.js → external-channel-zrkg8ar9.js} +11 -10
  109. package/dist/{google-generative-ai-szdxbpqg.js → google-generative-ai-g8db7x0f.js} +4 -2
  110. package/dist/{google-vertex-qzw3p36d.js → google-vertex-r2692q0r.js} +4 -2
  111. package/dist/{grok-adapter-e7mr287e.js → grok-adapter-s9ncp9vy.js} +18 -17
  112. package/dist/{handlers-znb9n7d4.js → handlers-kqftvjgw.js} +41 -36
  113. package/dist/{heartbeat-bm4qkn8d.js → heartbeat-9q96p8v9.js} +43 -38
  114. package/dist/{hook-254r4mza.js → hook-56qe10dp.js} +11 -23
  115. package/dist/{hook-xaa3q80s.js → hook-yy6rw42k.js} +12 -11
  116. package/dist/{http-3dgrgp8y.js → http-r2dnb8f8.js} +2411 -275
  117. package/dist/{index-fx3jqq1e.js → index-3gtmkhc6.js} +38 -33
  118. package/dist/{index-bdsqa799.js → index-3k5hkz7r.js} +43 -38
  119. package/dist/index-52j1aja4.js +3465 -0
  120. package/dist/{index-g2byveez.js → index-5e101240.js} +38 -33
  121. package/dist/{index-2ybk7khy.js → index-5wyfjc2c.js} +845 -683
  122. package/dist/index-9gw58n4k.js +193 -0
  123. package/dist/index-9j87mcm8.js +56305 -0
  124. package/dist/index-bsmcresk.js +79424 -0
  125. package/dist/index-mh85qhec.js +475 -0
  126. package/dist/{index-jd7sejm2.js → index-vxvhxxbn.js} +10 -9
  127. package/dist/index-we27kd31.js +12810 -0
  128. package/dist/{keepalive-6ywhpja1.js → keepalive-psj6j54c.js} +12 -11
  129. package/dist/{lead-cw45n21s.js → lead-hajz4688.js} +61 -56
  130. package/dist/{maintenance-ss1a1ge9.js → maintenance-ps02sb5m.js} +10 -9
  131. package/dist/{node-fkajaq96.js → node-mwb5r697.js} +2 -1
  132. package/dist/{oauth-refresh-sweep-3c6f8vyy.js → oauth-refresh-sweep-0284h93b.js} +11 -10
  133. package/dist/{onboard-8hzdhc1k.js → onboard-rbf6bg01.js} +11 -3
  134. package/dist/{opencode-adapter-qbchbcfz.js → opencode-adapter-13dcatgq.js} +18 -13
  135. package/dist/{otel-impl-e6mnvc4v.js → otel-impl-zvqcbhp7.js} +242 -868
  136. package/dist/{pi-mono-adapter-3c9g9snh.js → pi-mono-adapter-xxy47q4v.js} +244 -106
  137. package/dist/{pricing-refresh-gedkjdw0.js → pricing-refresh-kefx9v3t.js} +12 -11
  138. package/dist/{rbac-roles-dt4vh1yy.js → rbac-roles-3m36rxm2.js} +11 -10
  139. package/dist/{rbac-roles-eszdg6pm.js → rbac-roles-z76xv0hq.js} +12 -11
  140. package/dist/{render-v2-907cy6sa.js → render-v2-wz73bs25.js} +18 -14
  141. package/dist/{resume-42stcaz0.js → resume-k4wzge8w.js} +25 -21
  142. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  143. package/dist/{setup-adbc1c10.js → setup-2fp2pypp.js} +2 -2
  144. package/dist/{virtual-modules-rtmt494q.js → virtual-modules-9gkxqrap.js} +6 -5
  145. package/dist/{work-objects-wpj8ck95.js → work-objects-6k0ywz3m.js} +41 -36
  146. package/dist/{worker-bzdra9rf.js → worker-5v3rxsdh.js} +61 -56
  147. package/dist/{x-qfmygqqv.js → x-4mtdeym1.js} +3 -2
  148. package/openapi.json +1279 -329
  149. package/package.json +15 -15
  150. package/src/agentmail/handlers.ts +21 -11
  151. package/src/apps/definition.ts +16 -0
  152. package/src/azure-devops/api.ts +52 -2
  153. package/src/azure-devops/boards-sync.ts +50 -20
  154. package/src/azure-devops/index.ts +1 -0
  155. package/src/azure-devops/outbound.ts +95 -0
  156. package/src/be/boot-seeds.ts +11 -0
  157. package/src/be/config-refs.ts +60 -0
  158. package/src/be/db/model-profiles.ts +315 -0
  159. package/src/be/db/page-versions.ts +15 -0
  160. package/src/be/db/runtime.ts +35 -8
  161. package/src/be/db/skill-name-resolution.ts +36 -0
  162. package/src/be/db/tasks/read.ts +237 -0
  163. package/src/be/db/tasks/write.ts +7 -0
  164. package/src/be/db.ts +87 -36
  165. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  166. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  167. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  168. package/src/be/migrations/219_relabel_pi_context_compactions.sql +22 -0
  169. package/src/be/migrations/220_model_profiles.sql +137 -0
  170. package/src/be/model-catalog-store.ts +5 -1
  171. package/src/be/model-tier-resolution.ts +155 -10
  172. package/src/be/model-validation.ts +12 -2
  173. package/src/be/models-catalog.ts +26 -1
  174. package/src/be/modelsdev-cache.json +198 -63
  175. package/src/be/modelsdev-cache.ts +9 -1
  176. package/src/be/script-credential-broker.ts +39 -2
  177. package/src/be/scripts/run-saved.ts +1 -0
  178. package/src/be/scripts/typecheck.ts +22 -8
  179. package/src/be/secret-registry.ts +6 -2
  180. package/src/be/seed/runner.ts +13 -1
  181. package/src/be/seed/state-db.ts +5 -0
  182. package/src/be/seed/types.ts +6 -0
  183. package/src/be/seed-model-profiles.ts +41 -0
  184. package/src/be/seed-pricing.ts +19 -2
  185. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +368 -0
  186. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  187. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  188. package/src/be/seed-scripts/index.ts +9 -0
  189. package/src/be/seed-skills/bundled-files.generated.json +0 -18
  190. package/src/be/seed-skills/index.ts +104 -3
  191. package/src/be/swarm-config-guard.ts +53 -0
  192. package/src/cli.tsx +0 -16
  193. package/src/commands/onboard/non-interactive.ts +4 -2
  194. package/src/commands/provider-credentials.ts +52 -6
  195. package/src/commands/runner.ts +193 -71
  196. package/src/e2b/env.ts +5 -0
  197. package/src/extensions/catalog.generated.json +17 -0
  198. package/src/extensions/contract-types.generated.ts +1 -1
  199. package/src/extensions/contract.ts +45 -0
  200. package/src/extensions/dispatcher.ts +7 -0
  201. package/src/extensions/loader.ts +10 -5
  202. package/src/extensions/post-bridge.ts +40 -0
  203. package/src/github/handlers.ts +11 -4
  204. package/src/heartbeat/heartbeat.ts +2 -1
  205. package/src/heartbeat/templates.ts +8 -5
  206. package/src/hooks/hook.ts +0 -26
  207. package/src/http/agents.ts +49 -2
  208. package/src/http/all-routes.ts +1 -1
  209. package/src/http/apps.ts +30 -3
  210. package/src/http/config.ts +62 -19
  211. package/src/http/core.ts +8 -0
  212. package/src/http/index.ts +25 -3
  213. package/src/http/integrations.ts +88 -1
  214. package/src/http/mcp.ts +15 -5
  215. package/src/http/model-profiles.ts +303 -0
  216. package/src/http/page-proxy.ts +2 -4
  217. package/src/http/pages-public.ts +13 -7
  218. package/src/http/pages.ts +3 -13
  219. package/src/http/poll.ts +42 -71
  220. package/src/http/requested-by.ts +54 -0
  221. package/src/http/script-runs.ts +1 -1
  222. package/src/http/scripts.ts +26 -2
  223. package/src/http/stats.ts +1 -30
  224. package/src/http/tasks.ts +79 -5
  225. package/src/http/utils.ts +14 -0
  226. package/src/http/webhooks.ts +160 -3
  227. package/src/http/x.ts +1 -0
  228. package/src/integrations/chat-sdk/adapters.ts +129 -0
  229. package/src/integrations/chat-sdk/attachments.ts +232 -0
  230. package/src/integrations/chat-sdk/background.ts +36 -0
  231. package/src/integrations/chat-sdk/commands.ts +194 -0
  232. package/src/integrations/chat-sdk/config.ts +198 -0
  233. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  234. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  235. package/src/integrations/chat-sdk/handlers.ts +28 -0
  236. package/src/integrations/chat-sdk/inbound.ts +426 -0
  237. package/src/integrations/chat-sdk/limits.ts +48 -0
  238. package/src/integrations/chat-sdk/logger.ts +81 -0
  239. package/src/integrations/chat-sdk/outbound.ts +123 -0
  240. package/src/integrations/chat-sdk/relay.ts +172 -0
  241. package/src/integrations/chat-sdk/router.ts +169 -0
  242. package/src/integrations/chat-sdk/runtime.ts +351 -0
  243. package/src/integrations/chat-sdk/schema.ts +245 -0
  244. package/src/integrations/chat-sdk/state.ts +243 -0
  245. package/src/integrations/chat-sdk/status.ts +244 -0
  246. package/src/integrations/chat-sdk/steering.ts +58 -0
  247. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  248. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  249. package/src/integrations/chat-sdk/templates.ts +16 -0
  250. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  251. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  252. package/src/integrations/chat-sdk/typing.ts +65 -0
  253. package/src/{artifact-sdk → pages}/feedback-overlay.ts +65 -6
  254. package/src/pages/version.ts +4 -5
  255. package/src/prompts/base-prompt.ts +111 -45
  256. package/src/providers/acp-target-catalog.ts +6 -0
  257. package/src/providers/acp-targets.ts +56 -3
  258. package/src/providers/amp-adapter.ts +1 -1
  259. package/src/providers/claude-adapter.ts +1 -1
  260. package/src/providers/claude-flag-settings.ts +17 -5
  261. package/src/providers/claude-managed-adapter.ts +1 -1
  262. package/src/providers/claude-session-events.ts +6 -1
  263. package/src/providers/dsh-adapter.ts +1 -1
  264. package/src/providers/opencode-adapter.ts +243 -26
  265. package/src/providers/opencode-swarm-plugin.ts +31 -0
  266. package/src/providers/pi-mono-adapter.ts +398 -153
  267. package/src/providers/pi-mono-extension.ts +17 -3
  268. package/src/providers/pricing-sources.md +33 -2
  269. package/src/providers/reasoning-effort.ts +37 -0
  270. package/src/providers/types.ts +6 -2
  271. package/src/rbac/legacy-policy.ts +16 -2
  272. package/src/rbac/permissions.ts +26 -0
  273. package/src/scheduler/deferred-task-waits.ts +18 -5
  274. package/src/scheduler/scheduler.ts +11 -3
  275. package/src/scripts-runtime/executors/quickjs-prelude.ts +75 -6
  276. package/src/scripts-runtime/executors/quickjs-runner.ts +85 -8
  277. package/src/scripts-runtime/executors/quickjs-web-shims.ts +1041 -0
  278. package/src/scripts-runtime/extract-args-schema.ts +9 -8
  279. package/src/scripts-runtime/loader.ts +19 -7
  280. package/src/scripts-runtime/quickjs-compat.ts +464 -0
  281. package/src/scripts-runtime/sdk-allowlist.ts +12 -6
  282. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  283. package/src/scripts-runtime/types/stdlib.d.ts +39 -15
  284. package/src/scripts-runtime/types/swarm-extension.d.ts +66 -1
  285. package/src/scripts-runtime/types/swarm-sdk.d.ts +39 -15
  286. package/src/server.ts +62 -19
  287. package/src/slack/blocks.ts +4 -2
  288. package/src/slack/event-dedup.ts +1 -1
  289. package/src/slack/reaction-shortcode.ts +14 -0
  290. package/src/slack/render-v2.ts +12 -7
  291. package/src/slack/responses.ts +5 -4
  292. package/src/slack/thread-buffer.ts +41 -22
  293. package/src/tasks/additive-buffer.ts +4 -2
  294. package/src/tasks/context-key.ts +60 -1
  295. package/src/tasks/model-pin.ts +67 -0
  296. package/src/tasks/worker-follow-up.ts +15 -33
  297. package/src/tests/acp-adapter.test.ts +42 -0
  298. package/src/tests/agentmail-filters.test.ts +47 -0
  299. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  300. package/src/tests/apps-spike2.test.ts +35 -0
  301. package/src/tests/azure-devops-outbound.test.ts +420 -0
  302. package/src/tests/base-prompt.test.ts +58 -54
  303. package/src/tests/chat-sdk-commands.test.ts +191 -0
  304. package/src/tests/chat-sdk-config.test.ts +334 -0
  305. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  306. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  307. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  308. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  309. package/src/tests/chat-sdk-harness.ts +146 -0
  310. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  311. package/src/tests/chat-sdk-relay.test.ts +470 -0
  312. package/src/tests/chat-sdk-reload.test.ts +128 -0
  313. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  314. package/src/tests/chat-sdk-slack.test.ts +268 -0
  315. package/src/tests/chat-sdk-state.test.ts +163 -0
  316. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  317. package/src/tests/chat-sdk-teams.test.ts +277 -0
  318. package/src/tests/chat-sdk-tools.test.ts +520 -0
  319. package/src/tests/chat-sdk-typing.test.ts +120 -0
  320. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  321. package/src/tests/claude-adapter-binary.test.ts +9 -4
  322. package/src/tests/claude-flag-settings.test.ts +11 -3
  323. package/src/tests/claude-managed-adapter.test.ts +1 -1
  324. package/src/tests/claude-sdk-lifecycle.test.ts +9 -3
  325. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  326. package/src/tests/claude-worker-parity.test.ts +2 -7
  327. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  328. package/src/tests/config-refs.test.ts +66 -0
  329. package/src/tests/context-key.test.ts +19 -0
  330. package/src/tests/cors-allowlist.test.ts +25 -0
  331. package/src/tests/create-page-tool.test.ts +18 -0
  332. package/src/tests/credential-check.test.ts +139 -0
  333. package/src/tests/credentials.test.ts +21 -0
  334. package/src/tests/db-runtime.test.ts +61 -0
  335. package/src/tests/db-task-read-contract.test.ts +22 -0
  336. package/src/tests/db-task-write-contract.test.ts +11 -0
  337. package/src/tests/deferred-task-wake.test.ts +78 -1
  338. package/src/tests/docs-index-footprint.test.js +3 -3
  339. package/src/tests/dsh-adapter.test.ts +1 -1
  340. package/src/tests/enabled-capabilities.test.ts +20 -0
  341. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  342. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  343. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  344. package/src/tests/env-flag.test.ts +1 -0
  345. package/src/tests/explicit-model-validation.test.ts +105 -1
  346. package/src/tests/extensions-catalog.test.ts +1 -0
  347. package/src/tests/extensions-example-comms-adherence-gate.test.ts +413 -0
  348. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  349. package/src/tests/extensions-loader.test.ts +15 -0
  350. package/src/tests/extensions-post-bridge.test.ts +51 -0
  351. package/src/tests/fetch-resolved-env.test.ts +128 -0
  352. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  353. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  354. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  355. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  356. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  357. package/src/tests/github-handlers.test.ts +35 -0
  358. package/src/tests/harness-provider-resolution.test.ts +12 -0
  359. package/src/tests/heartbeat-checklist.test.ts +3 -2
  360. package/src/tests/heartbeat-jev-gate-credentials.test.ts +168 -0
  361. package/src/tests/heartbeat-jev-gate.test.ts +385 -0
  362. package/src/tests/hook-runtime-close.test.ts +0 -2
  363. package/src/tests/http-api-integration.test.ts +0 -25
  364. package/src/tests/migration-046-budgets.test.ts +17 -16
  365. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  366. package/src/tests/model-profile-backcompat.test.ts +327 -0
  367. package/src/tests/model-profile-providers.test.ts +302 -0
  368. package/src/tests/model-profile-runtime-secrets.test.ts +223 -0
  369. package/src/tests/model-profiles-api.test.ts +614 -0
  370. package/src/tests/model-tier-resolution.test.ts +93 -0
  371. package/src/tests/models-catalog.test.ts +42 -1
  372. package/src/tests/openai-compatible-providers.test.ts +134 -0
  373. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  374. package/src/tests/opencode-adapter.test.ts +216 -2
  375. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  376. package/src/tests/opencode-shell-env.test.ts +145 -0
  377. package/src/tests/openrouter-base-url.test.ts +101 -151
  378. package/src/tests/page-proxy.test.ts +1 -1
  379. package/src/tests/pages-browser-sdk.test.ts +76 -0
  380. package/src/tests/pages-feedback-keys.test.ts +121 -0
  381. package/src/tests/pages-feedback.test.ts +4 -1
  382. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  383. package/src/tests/pi-context-compaction.test.ts +193 -0
  384. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  385. package/src/tests/pi-mono-adapter.test.ts +385 -5
  386. package/src/tests/pi-shell-env.test.ts +170 -0
  387. package/src/tests/profile-claim.test.ts +269 -0
  388. package/src/tests/prompt-template-remaining.test.ts +35 -0
  389. package/src/tests/quickjs-compat.test.ts +213 -0
  390. package/src/tests/rbac-engine.test.ts +32 -3
  391. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  392. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  393. package/src/tests/script-connections.test.ts +6 -0
  394. package/src/tests/script-executor-conformance.test.ts +252 -1
  395. package/src/tests/script-executor-quickjs.test.ts +96 -0
  396. package/src/tests/script-runs-http.test.ts +89 -0
  397. package/src/tests/scripts-http.test.ts +217 -1
  398. package/src/tests/scripts-only-gating.test.ts +2 -3
  399. package/src/tests/scripts-runtime.test.ts +58 -40
  400. package/src/tests/secret-scrubber.test.ts +96 -0
  401. package/src/tests/seed-model-profiles.test.ts +174 -0
  402. package/src/tests/seed-scripts.test.ts +2 -2
  403. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  404. package/src/tests/seed-skills-retire.test.ts +182 -0
  405. package/src/tests/send-task-requester-gate.test.ts +58 -0
  406. package/src/tests/session-cost-recompute-unit.test.ts +46 -0
  407. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  408. package/src/tests/skill-invocations.test.ts +4 -2
  409. package/src/tests/slack-blocks.test.ts +36 -0
  410. package/src/tests/slack-inline-output.test.ts +14 -0
  411. package/src/tests/slack-reaction-config.test.ts +20 -0
  412. package/src/tests/slack-render-v2.test.ts +37 -0
  413. package/src/tests/slack-thread-buffer.test.ts +98 -1
  414. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  415. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  416. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  417. package/src/tests/swarm-diff.test.ts +1 -1
  418. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  419. package/src/tests/task-session-prompts.test.ts +132 -0
  420. package/src/tests/task-tool-manifest.test.ts +14 -0
  421. package/src/tests/task-tools-ctx.test.ts +2 -0
  422. package/src/tests/tool-annotations.test.ts +6 -6
  423. package/src/tests/ui-logs-parser.test.ts +43 -0
  424. package/src/tests/used-by-route.test.ts +6 -0
  425. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  426. package/src/tests/workflow-llm.test.ts +61 -0
  427. package/src/tests/workflow-swarm-script.test.ts +38 -0
  428. package/src/tests/workflow-wait-filter.test.ts +5 -3
  429. package/src/tools/chat-access.ts +41 -0
  430. package/src/tools/chat-open-dm.ts +59 -0
  431. package/src/tools/chat-post.ts +74 -0
  432. package/src/tools/chat-read-thread.ts +100 -0
  433. package/src/tools/chat-reply.ts +75 -0
  434. package/src/tools/create-page.ts +3 -13
  435. package/src/tools/model-catalog/index.ts +2 -1
  436. package/src/tools/model-profiles/list-model-profiles.ts +54 -0
  437. package/src/tools/register-chat-channel.ts +139 -0
  438. package/src/tools/request-human-input.ts +11 -3
  439. package/src/tools/script-apis.ts +5 -1
  440. package/src/tools/script-upsert.ts +4 -1
  441. package/src/tools/send-task.ts +48 -1
  442. package/src/tools/skills/skill-get.ts +17 -9
  443. package/src/tools/swarm-config/get-config.ts +2 -1
  444. package/src/tools/swarm-config/list-config.ts +2 -1
  445. package/src/tools/swarm-config/set-config.ts +16 -3
  446. package/src/tools/system-one-decide.ts +104 -0
  447. package/src/tools/task-action.ts +22 -1
  448. package/src/tools/tool-config.ts +14 -6
  449. package/src/types.ts +48 -3
  450. package/src/utils/config-env-export.ts +74 -0
  451. package/src/utils/credentials.test.ts +92 -0
  452. package/src/utils/credentials.ts +52 -4
  453. package/src/utils/harness-provider.ts +15 -6
  454. package/src/utils/runtime-model-catalog.ts +11 -1
  455. package/src/utils/secret-scrubber.ts +86 -10
  456. package/src/utils/task-tool-manifest.ts +19 -2
  457. package/src/utils/vcs-repo-match.ts +29 -0
  458. package/src/workflows/executors/raw-llm.ts +8 -3
  459. package/src/workflows/executors/swarm-script.ts +1 -0
  460. package/src/workflows/executors/system-one-decision.ts +21 -11
  461. package/src/workflows/executors/workflow-llm.ts +22 -0
  462. package/src/workflows/index.ts +21 -12
  463. package/templates/extensions/README.md +1 -0
  464. package/templates/extensions/comms-adherence-gate/README.md +88 -0
  465. package/templates/extensions/comms-adherence-gate/hooks.ts +489 -0
  466. package/templates/extensions/comms-adherence-gate/manifest.json +8 -0
  467. package/templates/skills/agent-browser/SKILL.md +1 -1
  468. package/templates/skills/agent-browser/content.md +1 -1
  469. package/templates/skills/apps/SKILL.md +8 -1
  470. package/templates/skills/apps/content.md +8 -1
  471. package/templates/skills/chat-sdk/config.json +14 -0
  472. package/templates/skills/chat-sdk/content.md +84 -0
  473. package/templates/skills/composio-gmail/content.md +7 -0
  474. package/templates/skills/composio-google-docs/content.md +1 -1
  475. package/templates/skills/email-domain-health/config.json +14 -0
  476. package/templates/skills/email-domain-health/content.md +131 -0
  477. package/templates/skills/kv-storage/content.md +2 -2
  478. package/templates/skills/pages/content.md +8 -10
  479. package/templates/skills/swarm-extensions/content.md +2 -0
  480. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  481. package/templates/skills/swarm-scripts/config.json +1 -1
  482. package/templates/skills/swarm-scripts/content.md +4 -2
  483. package/templates/skills/workflow-iterate/content.md +38 -0
  484. package/dist/artifact-eczsknc3.js +0 -3843
  485. package/dist/cli-42qhyvwx.js +0 -33
  486. package/dist/cli-bd957dgb.js +0 -153
  487. package/dist/cli-q51yprfq.js +0 -1104
  488. package/dist/cli-t1ze64h3.js +0 -811
  489. package/dist/cli-tcc4wd5d.js +0 -56471
  490. package/dist/index-9ch1n761.js +0 -1102
  491. package/src/artifact-sdk/index.ts +0 -2
  492. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  493. package/src/artifact-sdk/port.ts +0 -12
  494. package/src/artifact-sdk/server.ts +0 -183
  495. package/src/artifact-sdk/tunnel.ts +0 -19
  496. package/src/commands/artifact.ts +0 -249
  497. package/src/http/ecosystem.ts +0 -77
  498. package/src/tests/artifact-commands.test.ts +0 -92
  499. package/src/tests/artifact-sdk.test.ts +0 -793
  500. package/src/tests/register-service-security.test.ts +0 -194
  501. package/src/tools/list-services.ts +0 -107
  502. package/src/tools/register-service.ts +0 -177
  503. package/src/tools/unregister-service.ts +0 -73
  504. package/src/tools/update-service-status.ts +0 -96
  505. package/templates/skills/artifacts/config.json +0 -14
  506. package/templates/skills/artifacts/content.md +0 -344
  507. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  508. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  509. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  510. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  511. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
@@ -1,12 +1,28 @@
1
+ import {
2
+ checkGrokCredentials
3
+ } from "./cli-xczsgshn.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-ksphgh48.js";
7
10
  import {
8
- checkGrokCredentials
9
- } from "./cli-xc7p7s3g.js";
11
+ checkDevinCredentials
12
+ } from "./cli-sg19gbf0.js";
13
+ import {
14
+ checkOpencodeCredentials
15
+ } from "./cli-mz5as5ha.js";
16
+ import {
17
+ checkDshCredentials
18
+ } from "./cli-7n6s5man.js";
19
+ import {
20
+ checkAmpCredentials,
21
+ liveTestAmpCredentials
22
+ } from "./cli-qmzsbkvy.js";
23
+ import {
24
+ checkCursorCredentials
25
+ } from "./cli-qqy4q48b.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-94b48jhk.js";
34
+ } from "./cli-5twdke5x.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-saqyage0.js";
28
- import {
29
- checkDshCredentials
30
- } from "./cli-srqq3gc5.js";
36
+ checkClaudeCredentials
37
+ } from "./cli-nm1p8jfr.js";
31
38
  import {
32
- checkAmpCredentials,
33
- liveTestAmpCredentials
34
- } from "./cli-5wpw4rab.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-0a7mm3zp.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-0veb92a3.js";
65
68
  import {
66
69
  canonicalAzureDevOpsRepoUrl,
67
70
  isAzureDevOpsUrl,
68
71
  parseAzureDevOpsRepoUrl,
69
- resolveScriptsOnlyMode
70
- } from "./cli-rfz2ve55.js";
72
+ resolveScriptsOnlyMode,
73
+ resumedTaskModelSelection
74
+ } from "./cli-vgqzp4em.js";
71
75
  import {
72
76
  terminateRegisteredProcessGroups
73
77
  } from "./cli-zt3w1cn1.js";
74
78
  import {
75
79
  validateJsonSchema
76
- } from "./cli-1w0vj3gw.js";
80
+ } from "./cli-naqzr17j.js";
77
81
  import {
78
82
  authJsonToCredentialSelection,
79
83
  credentialsToAuthJson,
80
84
  loadAllCodexOAuthSlots
81
- } from "./cli-7jykv7ef.js";
85
+ } from "./cli-rc6pf5kv.js";
82
86
  import {
83
87
  ensure,
84
88
  initOtel,
@@ -88,20 +92,25 @@ import {
88
92
  startSpan,
89
93
  withSpan,
90
94
  withSpanContext
91
- } from "./cli-tcc4wd5d.js";
95
+ } from "./cli-cvv9k0hh.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,
105
+ init_vcs_repo_match,
100
106
  isApiDrainingResponse,
101
107
  isCodexAuthFailureReason,
108
+ isEnvExportRestrictedKey,
102
109
  mapTriggerSurface,
103
- telemetry
104
- } from "./cli-fmhj1ehj.js";
110
+ telemetry,
111
+ vcsRepoName,
112
+ vcsRepoUrlMatches
113
+ } from "./cli-y3167wt1.js";
105
114
  import {
106
115
  ProviderNameSchema,
107
116
  WorkerNudgeSchema,
@@ -109,7 +118,7 @@ import {
109
118
  isTerminalTaskStatus,
110
119
  parseWorkerModelTierOverrides,
111
120
  resolveTaskModelSelection
112
- } from "./cli-hsem16hb.js";
121
+ } from "./cli-pe05f8yk.js";
113
122
  import {
114
123
  WORKSPACE_CLAUDE_MD_PATH,
115
124
  buildContextPreamble,
@@ -120,6 +129,7 @@ import {
120
129
  generateDefaultSoulMd,
121
130
  generateDefaultToolsMd,
122
131
  getBasePrompt,
132
+ getTaskContextPrompt,
123
133
  init_base_prompt,
124
134
  init_context_preamble,
125
135
  init_defaults,
@@ -132,20 +142,21 @@ import {
132
142
  taskAttachmentFetchCommand,
133
143
  writeIdentityBaselines,
134
144
  writeProfileFileFromDb
135
- } from "./cli-r4fqfpwf.js";
145
+ } from "./cli-78vv7446.js";
136
146
  import {
137
147
  init_steering_enabled,
138
148
  isSteeringEnabled
139
149
  } from "./cli-7mm2r1kp.js";
140
- import {
141
- init_templates
142
- } from "./cli-mvzyxwg3.js";
143
150
  import {
144
151
  CLAUDE_CREDENTIALS_HINT,
145
152
  ModelWindowExhaustedError,
146
153
  init_credentials,
154
+ normalizeProviderKeyAliases,
147
155
  resolveCredentialPools
148
- } from "./cli-tadfgd0t.js";
156
+ } from "./cli-x1r545x8.js";
157
+ import {
158
+ init_templates
159
+ } from "./cli-mvzyxwg3.js";
149
160
  import {
150
161
  configureHttpResolver,
151
162
  init_resolver,
@@ -162,7 +173,7 @@ import {
162
173
  } from "./cli-ywybs5as.js";
163
174
  import {
164
175
  deriveDefaultRoute,
165
- init_src,
176
+ init_src as init_src2,
166
177
  validateRoute
167
178
  } from "./cli-f9w1semm.js";
168
179
  import {
@@ -171,12 +182,10 @@ import {
171
182
  init_openrouter_base_url
172
183
  } from "./cli-a35hzdve.js";
173
184
  import {
174
- harnessModelMismatch,
175
185
  init_runtime_model_catalog,
176
- init_src as init_src2,
177
186
  refreshRuntimeModelCatalog,
178
187
  runtimeHarnessSections
179
- } from "./cli-014vns2y.js";
188
+ } from "./cli-stfs0k5s.js";
180
189
  import {
181
190
  getMcpBaseUrl,
182
191
  init_constants
@@ -187,9 +196,18 @@ import {
187
196
  } from "./cli-a1b9b32n.js";
188
197
  import {
189
198
  init_secret_scrubber,
199
+ registerEnvSecrets,
190
200
  registerSensitiveKeyName,
191
201
  scrubSecrets
192
- } from "./cli-d161g69q.js";
202
+ } from "./cli-shk7r5cs.js";
203
+ import {
204
+ harnessModelMismatch,
205
+ init_src,
206
+ openAICompatibleKeyVars,
207
+ openAICompatibleProviders,
208
+ providerBaseUrl,
209
+ providerKeyFromEnv
210
+ } from "./cli-e3g5mbkz.js";
193
211
  import {
194
212
  __require
195
213
  } from "./cli-bc05qbss.js";
@@ -226,47 +244,47 @@ async function materializeCodexAuthJson(_slot, creds, deps = {}) {
226
244
  async function createProviderAdapter(provider) {
227
245
  switch (provider) {
228
246
  case "claude": {
229
- const { ClaudeAdapter } = await import("./claude-adapter-yzzzh8jp.js");
247
+ const { ClaudeAdapter } = await import("./claude-adapter-4mqd3r6r.js");
230
248
  return new ClaudeAdapter;
231
249
  }
232
250
  case "pi": {
233
- const { PiMonoAdapter } = await import("./pi-mono-adapter-3c9g9snh.js");
251
+ const { PiMonoAdapter } = await import("./pi-mono-adapter-xxy47q4v.js");
234
252
  return new PiMonoAdapter;
235
253
  }
236
254
  case "codex": {
237
- const { CodexAdapter } = await import("./codex-adapter-r3dn4fp5.js");
255
+ const { CodexAdapter } = await import("./codex-adapter-4z16v9n0.js");
238
256
  return new CodexAdapter;
239
257
  }
240
258
  case "claude-managed": {
241
- const { ClaudeManagedAdapter } = await import("./claude-managed-adapter-xgxhqrt2.js");
259
+ const { ClaudeManagedAdapter } = await import("./claude-managed-adapter-9wswb52m.js");
242
260
  return new ClaudeManagedAdapter;
243
261
  }
244
262
  case "devin": {
245
- const { DevinAdapter } = await import("./devin-adapter-xgtj680j.js");
263
+ const { DevinAdapter } = await import("./devin-adapter-zeq8b9gz.js");
246
264
  return new DevinAdapter;
247
265
  }
248
266
  case "opencode": {
249
- const { OpencodeAdapter } = await import("./opencode-adapter-qbchbcfz.js");
267
+ const { OpencodeAdapter } = await import("./opencode-adapter-13dcatgq.js");
250
268
  return new OpencodeAdapter;
251
269
  }
252
270
  case "dsh": {
253
- const { DshAdapter } = await import("./dsh-adapter-34etvb5m.js");
271
+ const { DshAdapter } = await import("./dsh-adapter-47ztej36.js");
254
272
  return new DshAdapter;
255
273
  }
256
274
  case "amp": {
257
- const { AmpAdapter } = await import("./amp-adapter-gpxp3kc9.js");
275
+ const { AmpAdapter } = await import("./amp-adapter-7h7wdt8q.js");
258
276
  return new AmpAdapter;
259
277
  }
260
278
  case "cursor": {
261
- const { CursorAdapter } = await import("./cursor-adapter-q8pgv5qa.js");
279
+ const { CursorAdapter } = await import("./cursor-adapter-98gbhyzn.js");
262
280
  return new CursorAdapter;
263
281
  }
264
282
  case "grok": {
265
- const { GrokAdapter } = await import("./grok-adapter-e7mr287e.js");
283
+ const { GrokAdapter } = await import("./grok-adapter-s9ncp9vy.js");
266
284
  return new GrokAdapter;
267
285
  }
268
286
  case "acp": {
269
- const { ACPAdapter } = await import("./acp-adapter-ccm9xrep.js");
287
+ const { ACPAdapter } = await import("./acp-adapter-kr4abrsk.js");
270
288
  return new ACPAdapter;
271
289
  }
272
290
  default:
@@ -454,6 +472,7 @@ function computeBudgetBackoffMs(consecutiveRefusals, basePollMs) {
454
472
 
455
473
  // src/commands/runner.ts
456
474
  init_codex_auth_failure();
475
+ init_config_env_export();
457
476
  init_config_secrets();
458
477
  init_constants();
459
478
  init_credentials();
@@ -535,15 +554,17 @@ async function reportHarnessModelOutcome(opts) {
535
554
  }
536
555
 
537
556
  // src/utils/harness-provider.ts
557
+ init_src();
538
558
  init_types();
539
559
  var SUPPORTED_PROVIDERS = ProviderNameSchema.options;
540
560
  function hasEnvValue(key, resolvedEnv, fallbackEnv) {
541
561
  return !!(resolvedEnv[key]?.trim() || fallbackEnv[key]?.trim());
542
562
  }
563
+ var PI_DEFAULT_KEY_VARS = ["OPENROUTER_API_KEY", ...openAICompatibleKeyVars()];
543
564
  function credentialAwareDefault(resolvedEnv, fallbackEnv) {
544
- const hasOpenRouterKey = hasEnvValue("OPENROUTER_API_KEY", resolvedEnv, fallbackEnv);
565
+ const hasPiKey = PI_DEFAULT_KEY_VARS.some((key) => hasEnvValue(key, resolvedEnv, fallbackEnv));
545
566
  const hasClaudeCredential = hasEnvValue("ANTHROPIC_API_KEY", resolvedEnv, fallbackEnv) || hasEnvValue("CLAUDE_CODE_OAUTH_TOKEN", resolvedEnv, fallbackEnv);
546
- return hasOpenRouterKey && !hasClaudeCredential ? "pi" : "claude";
567
+ return hasPiKey && !hasClaudeCredential ? "pi" : "claude";
547
568
  }
548
569
  function resolveHarnessProvider(resolvedEnv, fallbackEnv = process.env) {
549
570
  const candidate = resolvedEnv.HARNESS_PROVIDER?.trim() || fallbackEnv.HARNESS_PROVIDER?.trim();
@@ -866,7 +887,7 @@ async function refreshSkillsIfChanged(ctx, lastHashRef, homeOverride) {
866
887
  }
867
888
 
868
889
  // src/utils/spawn-model-guard.ts
869
- init_src2();
890
+ init_src();
870
891
  init_runtime_model_catalog();
871
892
  function spawnHarnessMismatchReason(model, harness) {
872
893
  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.`;
@@ -890,6 +911,7 @@ function guardSpawnModel(input) {
890
911
  // src/commands/runner.ts
891
912
  init_steering_enabled();
892
913
  init_template();
914
+ init_vcs_repo_match();
893
915
 
894
916
  // src/vcs/index.ts
895
917
  function detectVcsProvider(url) {
@@ -1110,6 +1132,7 @@ async function reportCredentialOutcomeThenFinish(input, finish) {
1110
1132
 
1111
1133
  // src/commands/provider-credentials.ts
1112
1134
  init_src();
1135
+ init_src2();
1113
1136
  init_credentials();
1114
1137
  init_openrouter_base_url();
1115
1138
  init_secret_scrubber();
@@ -1120,6 +1143,29 @@ function isBedrockMode(env) {
1120
1143
  function shouldRefreshBedrockStatus(opts) {
1121
1144
  return opts.harnessProvider === "pi" && isBedrockMode(opts.env) && opts.now - opts.lastRefreshAt > opts.intervalMs;
1122
1145
  }
1146
+ var REQUIRED_CRED_VARS_BY_PROVIDER = {
1147
+ claude: ["CLAUDE_CODE_OAUTH_TOKEN", "ANTHROPIC_API_KEY"],
1148
+ "claude-managed": [
1149
+ "ANTHROPIC_API_KEY",
1150
+ "MANAGED_AGENT_ID",
1151
+ "MANAGED_ENVIRONMENT_ID",
1152
+ "MCP_BASE_URL"
1153
+ ],
1154
+ codex: ["OPENAI_API_KEY", "CODEX_OAUTH"],
1155
+ devin: ["DEVIN_API_KEY", "DEVIN_ORG_ID"],
1156
+ opencode: [
1157
+ "OPENROUTER_API_KEY",
1158
+ "ANTHROPIC_API_KEY",
1159
+ "OPENAI_API_KEY",
1160
+ ...openAICompatibleKeyVars()
1161
+ ],
1162
+ pi: ["ANTHROPIC_API_KEY", "OPENROUTER_API_KEY", "OPENAI_API_KEY", ...openAICompatibleKeyVars()],
1163
+ acp: [],
1164
+ dsh: ["DEEPSEEK_API_KEY", "OPENROUTER_API_KEY"],
1165
+ amp: ["AMP_API_KEY"],
1166
+ cursor: ["CURSOR_API_KEY"],
1167
+ grok: ["XAI_API_KEY", "OPENROUTER_API_KEY"]
1168
+ };
1123
1169
  var CREDENTIAL_PROVIDER_CHECKERS = {
1124
1170
  dsh: (env) => checkDshCredentials(env),
1125
1171
  amp: (env) => checkAmpCredentials(env),
@@ -1131,7 +1177,7 @@ var CREDENTIAL_PROVIDER_CHECKERS = {
1131
1177
  devin: (env) => checkDevinCredentials(env),
1132
1178
  opencode: (env, opts) => checkOpencodeCredentials(env, opts),
1133
1179
  pi: async (env, opts) => {
1134
- const { checkPiMonoCredentials } = await import("./pi-mono-adapter-3c9g9snh.js");
1180
+ const { checkPiMonoCredentials } = await import("./pi-mono-adapter-xxy47q4v.js");
1135
1181
  return checkPiMonoCredentials(env, opts);
1136
1182
  },
1137
1183
  acp: (env) => {
@@ -1246,6 +1292,19 @@ async function checkOpenRouter(apiKey) {
1246
1292
  latency_ms: r.latency_ms
1247
1293
  };
1248
1294
  }
1295
+ async function checkOpenAICompatibleProvider(provider, apiKey, baseUrl = provider.baseUrl) {
1296
+ const r = await timedFetch(`${baseUrl.replace(/\/+$/, "")}/models`, {
1297
+ method: "GET",
1298
+ headers: { Authorization: `Bearer ${apiKey}` }
1299
+ });
1300
+ if (r.ok)
1301
+ return { ok: true, latency_ms: r.latency_ms };
1302
+ return {
1303
+ ok: false,
1304
+ error: scrubSecrets(`HTTP ${r.status}: ${r.bodyText.slice(0, 200)}`),
1305
+ latency_ms: r.latency_ms
1306
+ };
1307
+ }
1249
1308
  function codexAuthFileExists(env) {
1250
1309
  return checkCodexCredentials(env).satisfiedBy === "file";
1251
1310
  }
@@ -1318,11 +1377,17 @@ async function validateProviderCredentials(provider, env = process.env, presence
1318
1377
  return checkAnthropicApiKey(env.ANTHROPIC_API_KEY);
1319
1378
  if (env.OPENAI_API_KEY)
1320
1379
  return checkOpenAiApiKey(env.OPENAI_API_KEY);
1380
+ for (const direct of openAICompatibleProviders()) {
1381
+ const key = providerKeyFromEnv(direct, env);
1382
+ if (key) {
1383
+ return checkOpenAICompatibleProvider(direct, key, providerBaseUrl(direct, env));
1384
+ }
1385
+ }
1321
1386
  if (status.ready)
1322
1387
  return presenceCheckOk();
1323
1388
  return {
1324
1389
  ok: false,
1325
- error: "No usable credential found (OPENROUTER_API_KEY, ANTHROPIC_API_KEY, or OPENAI_API_KEY).",
1390
+ error: `No usable credential found (OPENROUTER_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY, ${openAICompatibleProviders().map((p) => p.envVar).join(", ").replace(/, (?=[^,]*$)/, ", or ")}).`,
1326
1391
  latency_ms: Date.now() - startedAt
1327
1392
  };
1328
1393
  }
@@ -1381,7 +1446,7 @@ async function validateProviderCredentials(provider, env = process.env, presence
1381
1446
  latency_ms: Date.now() - startedAt
1382
1447
  };
1383
1448
  }
1384
- const { liveTestCursorKey } = await import("./cursor-adapter-q8pgv5qa.js");
1449
+ const { liveTestCursorKey } = await import("./cursor-adapter-98gbhyzn.js");
1385
1450
  const result = await liveTestCursorKey(apiKey);
1386
1451
  return result.ok ? { ok: true, latency_ms: Date.now() - startedAt } : { ok: false, error: result.error, latency_ms: Date.now() - startedAt };
1387
1452
  }
@@ -1914,17 +1979,9 @@ function scheduleRunnerGc(reason) {
1914
1979
  timer.unref?.();
1915
1980
  return true;
1916
1981
  }
1917
- async function savePm2State(role) {
1918
- try {
1919
- console.log(`[${role}] Saving PM2 process list...`);
1920
- await Bun.$`pm2 save`.quiet();
1921
- console.log(`[${role}] PM2 state saved`);
1922
- } catch {}
1923
- }
1924
1982
  async function fetchRepoConfig(apiUrl, apiKey, vcsRepo, requireExactMatch = false) {
1925
1983
  try {
1926
- const requested = vcsRepo.trim().replace(/\/+$/, "").replace(/\.git$/, "");
1927
- const repoName = requested.split("/").pop() || requested;
1984
+ const repoName = vcsRepoName(vcsRepo);
1928
1985
  const resp = await fetch(`${apiUrl}/api/repos?name=${encodeURIComponent(repoName)}`, {
1929
1986
  headers: { Authorization: `Bearer ${apiKey}` }
1930
1987
  });
@@ -1932,14 +1989,7 @@ async function fetchRepoConfig(apiUrl, apiKey, vcsRepo, requireExactMatch = fals
1932
1989
  return null;
1933
1990
  const data = await resp.json();
1934
1991
  if (requireExactMatch) {
1935
- return data.repos.find((r) => {
1936
- const normalized = r.url.trim().replace(/\/+$/, "").replace(/\.git$/, "");
1937
- if (normalized === requested)
1938
- return true;
1939
- if (requested.includes(":"))
1940
- return false;
1941
- return normalized.endsWith(`/${requested}`) || normalized.endsWith(`:${requested}`);
1942
- }) ?? null;
1992
+ return data.repos.find((r) => vcsRepoUrlMatches(r.url, vcsRepo)) ?? null;
1943
1993
  }
1944
1994
  return data.repos.find((r) => r.url.includes(vcsRepo)) ?? data.repos[0] ?? null;
1945
1995
  } catch {
@@ -2255,6 +2305,16 @@ async function exitAfterTasksIfFinished(state, limit, shutdown) {
2255
2305
  }
2256
2306
  var deploymentMemoryRaters = process.env.MEMORY_RATERS;
2257
2307
  var rowOverriddenBootEnv = new Map;
2308
+ var lastWithheldEnvKeys = "";
2309
+ function logWithheldEnvKeys(keys) {
2310
+ const summary = [...keys].sort().join(", ");
2311
+ if (summary === lastWithheldEnvKeys)
2312
+ return;
2313
+ lastWithheldEnvKeys = summary;
2314
+ if (!summary)
2315
+ return;
2316
+ console.log(`[env-reload] Kept ${keys.length} config entries with exportToEnv=false out of the harness env: ${summary}`);
2317
+ }
2258
2318
  async function fetchResolvedEnv(apiUrl, apiKey, agentId, baseEnv = process.env, taskModel, sessionContext) {
2259
2319
  const env = { ...baseEnv };
2260
2320
  for (const key of Object.keys(env)) {
@@ -2284,7 +2344,17 @@ async function fetchResolvedEnv(apiUrl, apiKey, agentId, baseEnv = process.env,
2284
2344
  if (data.configs?.length) {
2285
2345
  const skippedSecretKeys = [];
2286
2346
  scriptsOnlyConfigValue = data.configs.find((config) => config.key === "SCRIPTS_ONLY_MCP")?.value;
2347
+ const withheldEnvKeys = [];
2287
2348
  for (const config of data.configs) {
2349
+ if (config.exportToEnv === false || isEnvExportRestrictedKey(config.key)) {
2350
+ if (config.isSecret)
2351
+ registerSensitiveKeyName(config.key);
2352
+ delete env[config.key];
2353
+ if (baseEnv === process.env)
2354
+ delete process.env[config.key];
2355
+ withheldEnvKeys.push(config.key);
2356
+ continue;
2357
+ }
2288
2358
  if (config.isSecret && config.value === MASKED_SECRET_VALUE) {
2289
2359
  skippedSecretKeys.push(config.key);
2290
2360
  continue;
@@ -2302,6 +2372,7 @@ async function fetchResolvedEnv(apiUrl, apiKey, agentId, baseEnv = process.env,
2302
2372
  if (skippedSecretKeys.length) {
2303
2373
  console.warn(scrubSecrets(`[env-reload] Skipped masked secrets: ${skippedSecretKeys.join(", ")}`));
2304
2374
  }
2375
+ logWithheldEnvKeys(withheldEnvKeys);
2305
2376
  console.log(`[env-reload] Loaded ${data.configs.length} config entries from API`);
2306
2377
  }
2307
2378
  const codexPoolSlots = countCodexOAuthPoolSlots(data.configs ?? []);
@@ -2311,6 +2382,8 @@ async function fetchResolvedEnv(apiUrl, apiKey, agentId, baseEnv = process.env,
2311
2382
  console.warn(`[env-reload] Could not fetch config, using current env: ${error}`);
2312
2383
  }
2313
2384
  }
2385
+ normalizeProviderKeyAliases(env);
2386
+ registerEnvSecrets(env);
2314
2387
  const resolvedProvider = sessionContext?.provider ?? resolveHarnessProvider(env, baseEnv);
2315
2388
  if (sessionContext?.provider)
2316
2389
  env.HARNESS_PROVIDER = sessionContext.provider;
@@ -2511,10 +2584,6 @@ var SWARM_TOOL_LABELS = {
2511
2584
  "create-channel": "\uD83D\uDCE2 Creating channel",
2512
2585
  "list-channels": "\uD83D\uDCE2 Listing channels",
2513
2586
  "delete-channel": "\uD83D\uDCE2 Deleting channel",
2514
- "register-service": "\uD83D\uDD0C Registering service",
2515
- "list-services": "\uD83D\uDD0C Listing services",
2516
- "unregister-service": "\uD83D\uDD0C Unregistering service",
2517
- "update-service-status": "\uD83D\uDD0C Updating service status",
2518
2587
  "script-search": "\uD83D\uDCDC Searching scripts",
2519
2588
  "script-run": "\uD83D\uDCDC Running script",
2520
2589
  "script-upsert": "\uD83D\uDCDC Saving script",
@@ -3174,7 +3243,6 @@ function setupShutdownHandlers(role, apiConfig, getRunnerState, onShutdown) {
3174
3243
  });
3175
3244
  await closeAgent(apiConfig, role);
3176
3245
  }
3177
- await savePm2State(role);
3178
3246
  process.exit(exitCode);
3179
3247
  };
3180
3248
  const beginShutdown = (signal, exitCode = 0) => shutdown(signal, exitCode).catch(async (error) => {
@@ -3254,11 +3322,13 @@ async function saveCostData(cost, apiUrl, apiKey, deadline) {
3254
3322
  console.warn(scrubSecrets(`[runner] Error saving cost data: ${error}`));
3255
3323
  }
3256
3324
  }
3257
- async function saveProviderSessionId(apiUrl, apiKey, taskId, claudeSessionId, provider, providerMeta, model, harnessVariant, harnessVariantMeta) {
3325
+ async function saveProviderSessionId(apiUrl, apiKey, taskId, claudeSessionId, provider, providerMeta, model, harnessVariant, harnessVariantMeta, effort) {
3258
3326
  const headers = { "Content-Type": "application/json" };
3259
3327
  if (apiKey)
3260
3328
  headers.Authorization = `Bearer ${apiKey}`;
3261
3329
  const body = { claudeSessionId };
3330
+ if (effort !== undefined && provider !== "devin")
3331
+ body.effort = effort;
3262
3332
  if (provider !== undefined)
3263
3333
  body.provider = provider;
3264
3334
  if (providerMeta !== undefined)
@@ -3545,6 +3615,33 @@ ${notes}` : "";
3545
3615
  });
3546
3616
  return result.skipped ? "" : result.text.trim();
3547
3617
  }
3618
+ function missingTaskDirWarning(taskDir, effectiveCwd) {
3619
+ return taskDir && !effectiveCwd ? `Note: The task requested working directory "${taskDir}" but it does not exist. Falling back to default directory.` : undefined;
3620
+ }
3621
+ async function buildTaskSessionPrompts(input) {
3622
+ const { basePromptArgs, additionalSystemPrompt, context } = input;
3623
+ const basePrompt = await getBasePrompt(basePromptArgs);
3624
+ const systemPrompt = additionalSystemPrompt ? `${basePrompt}
3625
+
3626
+ ${additionalSystemPrompt}` : basePrompt;
3627
+ const taskContext = [
3628
+ await getTaskContextPrompt({
3629
+ ...basePromptArgs,
3630
+ repoContext: context.repoContext,
3631
+ slackContext: context.slackContext
3632
+ }),
3633
+ await buildRequesterProfilePrompt(context.requestedBy),
3634
+ context.cwdWarning?.trim()
3635
+ ].filter((part) => Boolean(part)).join(`
3636
+
3637
+ `);
3638
+ return {
3639
+ systemPrompt,
3640
+ prompt: taskContext ? `${input.taskPrompt}
3641
+
3642
+ ${taskContext}` : input.taskPrompt
3643
+ };
3644
+ }
3548
3645
 
3549
3646
  class AgentRegistrationHttpError extends Error {
3550
3647
  status;
@@ -4077,6 +4174,7 @@ async function spawnProviderProcess(adapter, opts, logDir, isYolo) {
4077
4174
  if (spawnModel.warning)
4078
4175
  console.warn(spawnModel.warning);
4079
4176
  const model = spawnModel.model;
4177
+ const sessionEffort = effectiveReasoningEffort(adapter.name, model, reasoningEffortOverride);
4080
4178
  let oauthSelection;
4081
4179
  let oauthIsPoolBacked = false;
4082
4180
  if (adapter.name === "codex") {
@@ -4249,7 +4347,7 @@ async function spawnProviderProcess(adapter, opts, logDir, isYolo) {
4249
4347
  }).catch((err) => console.warn(`[runner] Failed to report ACP options: ${err}`));
4250
4348
  }
4251
4349
  if (realTaskId) {
4252
- 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}`));
4350
+ 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}`));
4253
4351
  } else {
4254
4352
  saveProviderSessionIdOnActiveSession(opts.apiUrl, opts.apiKey, effectiveTaskId, event.sessionId).catch((err) => console.warn(`[runner] Failed to save provider session on active session: ${err}`));
4255
4353
  }
@@ -5077,11 +5175,9 @@ async function runAgent(config, opts) {
5077
5175
  let agentDescription;
5078
5176
  let agentSkillsSummary;
5079
5177
  let agentMcpServers;
5080
- let currentRepoContext;
5081
- let currentTaskSlackContext;
5082
- const buildSystemPrompt = async () => {
5178
+ const basePromptArgs = () => {
5083
5179
  const { traits } = adapter;
5084
- return getBasePrompt({
5180
+ return {
5085
5181
  role,
5086
5182
  agentId,
5087
5183
  capabilities,
@@ -5094,14 +5190,13 @@ async function runAgent(config, opts) {
5094
5190
  soulMd: agentSoulMd,
5095
5191
  identityMd: agentIdentityMd,
5096
5192
  claudeMd: agentClaudeMd,
5097
- repoContext: currentRepoContext,
5098
- slackContext: currentTaskSlackContext,
5099
5193
  ...traits.hasMcp && {
5100
5194
  skillsSummary: agentSkillsSummary,
5101
5195
  mcpServers: agentMcpServers
5102
5196
  }
5103
- });
5197
+ };
5104
5198
  };
5199
+ const buildSystemPrompt = async () => getBasePrompt(basePromptArgs());
5105
5200
  let basePrompt = await buildSystemPrompt();
5106
5201
  let additionalSystemPrompt;
5107
5202
  const systemPromptText = opts.systemPrompt || process.env.SYSTEM_PROMPT;
@@ -5715,7 +5810,8 @@ ${additionalSystemPrompt}` : basePrompt;
5715
5810
  console.warn(`[${role}] Failed to check resume task dir "${task.dir}", falling back to default cwd`);
5716
5811
  }
5717
5812
  }
5718
- if (!resumeCwd && task.vcsRepo && apiUrl) {
5813
+ let resumeRepoContext;
5814
+ if (task.vcsRepo && apiUrl) {
5719
5815
  const repoConfig = await fetchRepoConfig(apiUrl, apiKey, task.vcsRepo);
5720
5816
  const effectiveConfig = repoConfig ?? {
5721
5817
  url: task.vcsRepo,
@@ -5724,10 +5820,27 @@ ${additionalSystemPrompt}` : basePrompt;
5724
5820
  defaultBranch: "main"
5725
5821
  };
5726
5822
  const repoContext = await ensureRepoForTask(effectiveConfig, role, false);
5727
- if (repoContext?.clonePath) {
5823
+ resumeRepoContext = { ...repoContext, guidelines: repoConfig?.guidelines ?? null };
5824
+ if (!resumeCwd && repoContext?.clonePath) {
5728
5825
  resumeCwd = repoContext.clonePath;
5729
5826
  }
5730
5827
  }
5828
+ const resumeSlackChannelId = task.slackChannelId;
5829
+ const resumeSession = await buildTaskSessionPrompts({
5830
+ basePromptArgs: basePromptArgs(),
5831
+ additionalSystemPrompt,
5832
+ taskPrompt: resumePrompt,
5833
+ context: {
5834
+ repoContext: resumeRepoContext,
5835
+ slackContext: resumeSlackChannelId ? {
5836
+ channelId: resumeSlackChannelId,
5837
+ threadTs: task.slackThreadTs
5838
+ } : undefined,
5839
+ requestedBy: task.requestedBy,
5840
+ cwdWarning: missingTaskDirWarning(task.dir, resumeCwd)
5841
+ }
5842
+ });
5843
+ resumePrompt = resumeSession.prompt;
5731
5844
  const resumeRunnerSessionId = crypto.randomUUID();
5732
5845
  await registerActiveSession(apiConfig, {
5733
5846
  taskId: task.id,
@@ -5740,7 +5853,7 @@ ${additionalSystemPrompt}` : basePrompt;
5740
5853
  runningTask = await spawnProviderProcess(adapter, {
5741
5854
  prompt: resumePrompt,
5742
5855
  logFile,
5743
- systemPrompt: resolvedSystemPrompt,
5856
+ systemPrompt: resumeSession.systemPrompt,
5744
5857
  additionalArgs: opts.additionalArgs,
5745
5858
  resumeSessionId: undefined,
5746
5859
  role,
@@ -5750,10 +5863,8 @@ ${additionalSystemPrompt}` : basePrompt;
5750
5863
  runnerSessionId: resumeRunnerSessionId,
5751
5864
  iteration,
5752
5865
  taskId: task.id,
5753
- model: task.model,
5866
+ ...resumedTaskModelSelection(task),
5754
5867
  modelTier: task.modelTier,
5755
- resolvedModel: task.resolvedModel,
5756
- modelSource: task.modelSource,
5757
5868
  effort: task.effort,
5758
5869
  harnessProvider: state.harnessProvider,
5759
5870
  cwd: resumeCwd,
@@ -5980,7 +6091,8 @@ ${additionalSystemPrompt}` : basePrompt;
5980
6091
  const taskContextKey = trigger.task?.contextKey;
5981
6092
  const taskSlackChannelId = trigger.task?.slackChannelId;
5982
6093
  const taskSlackThreadTs = trigger.task?.slackThreadTs;
5983
- currentTaskSlackContext = taskSlackChannelId ? { channelId: taskSlackChannelId, threadTs: taskSlackThreadTs } : undefined;
6094
+ const taskSlackContext = taskSlackChannelId ? { channelId: taskSlackChannelId, threadTs: taskSlackThreadTs } : undefined;
6095
+ let currentRepoContext;
5984
6096
  const taskVcsRepo = trigger.task?.vcsRepo;
5985
6097
  if (taskVcsRepo && apiUrl) {
5986
6098
  const repoConfig = await fetchRepoConfig(apiUrl, apiKey, taskVcsRepo);
@@ -5996,8 +6108,6 @@ ${additionalSystemPrompt}` : basePrompt;
5996
6108
  ...repoResult,
5997
6109
  guidelines: repoConfig?.guidelines ?? null
5998
6110
  };
5999
- } else {
6000
- currentRepoContext = undefined;
6001
6111
  }
6002
6112
  const taskDir = trigger.task?.dir;
6003
6113
  let effectiveCwd;
@@ -6027,12 +6137,7 @@ ${additionalSystemPrompt}` : basePrompt;
6027
6137
  }
6028
6138
  triggerPrompt += " You can still access any path on the filesystem — this is just your starting directory.";
6029
6139
  }
6030
- let cwdWarning = "";
6031
- if (taskDir && !effectiveCwd) {
6032
- cwdWarning = `
6033
-
6034
- Note: The task requested working directory "${taskDir}" but it does not exist. Falling back to default directory.`;
6035
- }
6140
+ const cwdWarning = missingTaskDirWarning(taskDir, effectiveCwd);
6036
6141
  if (state.harnessProvider !== "claude-managed") {
6037
6142
  const skillResult = await refreshSkillsIfChanged({ apiUrl, swarmUrl, apiKey, agentId, role }, lastSkillHash);
6038
6143
  if (skillResult.changed && skillResult.summary) {
@@ -6059,12 +6164,19 @@ Note: The task requested working directory "${taskDir}" but it does not exist. F
6059
6164
  agentDescription = identityResult.fields.description;
6060
6165
  console.log(`[${role}] Identity changed — refreshing system prompt (${identityResult.changedFields.join(", ")})`);
6061
6166
  }
6062
- const taskBasePrompt = await buildSystemPrompt();
6063
- const requesterProfilePrompt = await buildRequesterProfilePrompt(trigger.requestedBy);
6064
- const taskPromptParts = [taskBasePrompt, requesterProfilePrompt, additionalSystemPrompt].filter((part) => Boolean(part)).join(`
6065
-
6066
- `);
6067
- const taskSystemPrompt = taskPromptParts + cwdWarning;
6167
+ const taskSession = await buildTaskSessionPrompts({
6168
+ basePromptArgs: basePromptArgs(),
6169
+ additionalSystemPrompt,
6170
+ taskPrompt: triggerPrompt,
6171
+ context: {
6172
+ repoContext: currentRepoContext,
6173
+ slackContext: taskSlackContext,
6174
+ requestedBy: trigger.requestedBy,
6175
+ cwdWarning
6176
+ }
6177
+ });
6178
+ const taskSystemPrompt = taskSession.systemPrompt;
6179
+ triggerPrompt = taskSession.prompt;
6068
6180
  const modelUnsupported = trigger.task?.modelUnsupported;
6069
6181
  if (trigger.taskId && modelUnsupported) {
6070
6182
  console.log(`[${role}] ${modelUnsupported}`);