@desplega.ai/agent-swarm 1.166.0 → 1.167.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 (194) hide show
  1. package/dist/acp-adapter-zpvy6321.js +34 -0
  2. package/dist/{actions-qz3m692w.js → actions-fq2zrwtf.js} +25 -25
  3. package/dist/{amp-adapter-j1xbmsqz.js → amp-adapter-5gbk7501.js} +4 -4
  4. package/dist/{anthropic-messages-hst62ws9.js → anthropic-messages-13yn502s.js} +4 -4
  5. package/dist/{app-43vrdmv8.js → app-nctetn1e.js} +10 -9
  6. package/dist/{assistant-ertffmka.js → assistant-0aq8gjvj.js} +26 -26
  7. package/dist/{azure-openai-responses-mh8tvf78.js → azure-openai-responses-9st34pfz.js} +5 -5
  8. package/dist/{boot-reembed-998jtpdg.js → boot-reembed-1ze5853n.js} +9 -8
  9. package/dist/{boot-reembed-s7k7c6v2.js → boot-reembed-fmp5ww69.js} +9 -8
  10. package/dist/{boot-scrub-sweep-nepsk4t1.js → boot-scrub-sweep-cbp8xd4e.js} +10 -9
  11. package/dist/{boot-seeds-vvzs1zhk.js → boot-seeds-22tx8a53.js} +12 -11
  12. package/dist/{claude-adapter-2zvmekrp.js → claude-adapter-0jhgeh1d.js} +24 -22
  13. package/dist/{claude-managed-adapter-s49wbk8t.js → claude-managed-adapter-tzwxy803.js} +4 -4
  14. package/dist/{claude-managed-setup-cvhqq8qn.js → claude-managed-setup-nrhfx5b0.js} +3 -3
  15. package/dist/{claude-sdk-session-kkbxtw5q.js → claude-sdk-session-wh77rh83.js} +22 -22
  16. package/dist/{cli-zsh093hk.js → cli-014vns2y.js} +63 -1
  17. package/dist/{cli-qvfk83fy.js → cli-13xwcqvj.js} +2 -2
  18. package/dist/{cli-dw2q9f7g.js → cli-1yrcfa5s.js} +4 -4
  19. package/dist/{cli-jvj6a0cv.js → cli-577bxkf6.js} +27 -17
  20. package/dist/{cli-zy7vwsne.js → cli-5qkcdv8c.js} +16 -9
  21. package/dist/{cli-cwxhbf43.js → cli-5t5my0h8.js} +85 -2
  22. package/dist/{cli-y59h2pk9.js → cli-69egj654.js} +1 -1
  23. package/dist/{cli-68r1j4sg.js → cli-6bpvv8h4.js} +3 -3
  24. package/dist/{cli-cpfmqz3n.js → cli-6qxmjpem.js} +5 -5
  25. package/dist/{cli-aqcey741.js → cli-6vfz44sr.js} +1 -1
  26. package/dist/{cli-32bca7nr.js → cli-7avy4v8w.js} +1 -1
  27. package/dist/{cli-f2n17zhp.js → cli-7mhy3ths.js} +21 -18
  28. package/dist/{cli-q38n4bq0.js → cli-95zs84qw.js} +3 -3
  29. package/dist/cli-a35hzdve.js +33 -0
  30. package/dist/{cli-x3x0qwky.js → cli-bxqez1p0.js} +51 -23
  31. package/dist/{cli-gt8azyet.js → cli-c2tpw9ck.js} +1 -1
  32. package/dist/{cli-ecknp7p1.js → cli-c8r99akr.js} +10 -10
  33. package/dist/{cli-3qn4r334.js → cli-cexctgn5.js} +20 -14
  34. package/dist/{cli-vzc73wet.js → cli-cf2vgn9d.js} +87 -69
  35. package/dist/{cli-ng97fjq7.js → cli-cmxkbzzs.js} +33 -7
  36. package/dist/{cli-nexwh8zg.js → cli-g7k7zbcz.js} +12 -5
  37. package/dist/{cli-nvvfd8bq.js → cli-jbzbr36n.js} +4091 -3793
  38. package/dist/{cli-3ddybbbx.js → cli-jvmtxqtc.js} +26 -14
  39. package/dist/{cli-pkke6geq.js → cli-km4x66j0.js} +83 -65
  40. package/dist/{cli-j2jbr8af.js → cli-kw0jcfje.js} +1 -1
  41. package/dist/{cli-8t229cmr.js → cli-m7vmeepg.js} +30 -17
  42. package/dist/{cli-yshaazs1.js → cli-mkdsy1nq.js} +62 -20
  43. package/dist/{cli-b0f70z24.js → cli-mn8qkd8v.js} +1 -1
  44. package/dist/{cli-0qjcsxgz.js → cli-mxry91sa.js} +30 -9
  45. package/dist/cli-nkqjj42q.js +104 -0
  46. package/dist/{cli-rggdq8wq.js → cli-p8rt8spp.js} +3 -3
  47. package/dist/{cli-v2a8x45d.js → cli-pkj1w46r.js} +10 -5
  48. package/dist/cli-q1vnz8wv.js +96 -0
  49. package/dist/{cli-fj86xr3c.js → cli-qd97v6z2.js} +2 -2
  50. package/dist/{cli-66zh26sp.js → cli-qzmzwegq.js} +57 -17
  51. package/dist/{cli-p4ztb80h.js → cli-r7eeddkq.js} +13 -8
  52. package/dist/{cli-8ssjez7e.js → cli-rhy7z1rp.js} +22 -11
  53. package/dist/{cli-4mevd1hf.js → cli-s9y81s7j.js} +5 -5
  54. package/dist/{cli-h3x613ze.js → cli-tc5zec7v.js} +6 -6
  55. package/dist/{cli-ttbsse3f.js → cli-tmhsxhb8.js} +1 -1
  56. package/dist/{cli-0nhdwxd5.js → cli-tx2zvn23.js} +3 -3
  57. package/dist/{cli-mwegs4af.js → cli-ty4bzkqr.js} +3 -3
  58. package/dist/{cli-ysnyhws9.js → cli-v1pwxreq.js} +54 -51
  59. package/dist/{cli-feh3dkah.js → cli-v1w7pbd8.js} +2 -1
  60. package/dist/{cli-10zmp1p7.js → cli-vr5avem2.js} +27 -32
  61. package/dist/{cli-bzr0ftht.js → cli-wnb9b2g3.js} +19 -0
  62. package/dist/{cli-df56tqdw.js → cli-wydz3feg.js} +108 -57
  63. package/dist/{cli-krqm5f11.js → cli-xezn9nkh.js} +16 -13
  64. package/dist/{cli-8kt0bmgx.js → cli-xf713zz0.js} +2 -2
  65. package/dist/{cli-x7kpr72a.js → cli-y0kjpfm9.js} +2 -2
  66. package/dist/{cli-6zcfw0x7.js → cli-y195hv1a.js} +1 -1
  67. package/dist/{cli-fn697bnt.js → cli-ykt8f7va.js} +21 -8
  68. package/dist/{cli-4r1sjfc4.js → cli-ymmc1zxg.js} +8 -8
  69. package/dist/{cli-8kgvmkak.js → cli-ypgba1a8.js} +1 -1
  70. package/dist/{cli-rsy933yz.js → cli-z1dqhc9y.js} +30 -19
  71. package/dist/{cli-qbksc292.js → cli-zy39d433.js} +2 -0
  72. package/dist/cli.js +26 -26
  73. package/dist/{cloudflare-workers-ai-system-one-tt484t61.js → cloudflare-workers-ai-system-one-sta45jf9.js} +7 -5
  74. package/dist/{codex-adapter-dw1wxqt8.js → codex-adapter-cgesnjkr.js} +18 -18
  75. package/dist/{codex-login-terbdsqq.js → codex-login-g1cyt5zm.js} +1 -1
  76. package/dist/{codex-session-runner-3cgb8y1g.js → codex-session-runner-8kd7ddhr.js} +18 -18
  77. package/dist/{commands-mhxam6z2.js → commands-h6zaaxym.js} +9 -8
  78. package/dist/{cursor-adapter-2qda3st7.js → cursor-adapter-v8mm6bp5.js} +5 -5
  79. package/dist/{db-sjks418k.js → db-qg3myn53.js} +9 -8
  80. package/dist/{dispatcher-1es759rn.js → dispatcher-7vnwj9qw.js} +24 -24
  81. package/dist/{dsh-adapter-bek4cyw9.js → dsh-adapter-tz6hfp5r.js} +5 -5
  82. package/dist/{easter-egg-3d-mtpnw06s.js → easter-egg-3d-66zxervv.js} +2 -2
  83. package/dist/{execute-s4ccjq3n.js → execute-h4jgevyw.js} +61 -11
  84. package/dist/{google-generative-ai-d6nphg3q.js → google-generative-ai-b8zxrpax.js} +5 -5
  85. package/dist/{google-vertex-cpshkref.js → google-vertex-nrdd697t.js} +5 -5
  86. package/dist/{grok-adapter-ar9cw9jg.js → grok-adapter-jdt2dz2s.js} +18 -8
  87. package/dist/{handlers-1gkbhktr.js → handlers-2qtkpncr.js} +27 -27
  88. package/dist/{hook-ds2zxq9v.js → hook-51yfcgsv.js} +42 -31
  89. package/dist/{hook-vxa3tcsy.js → hook-qnbdgwvd.js} +14 -14
  90. package/dist/{http-3h21z9md.js → http-jsmtag08.js} +320 -98
  91. package/dist/{index-9b65j1m5.js → index-2t9kesn1.js} +9 -8
  92. package/dist/{index-dkfxpkmm.js → index-bt8wkv1w.js} +25 -25
  93. package/dist/{index-f8xnqrye.js → index-cx1sb9bq.js} +33 -24
  94. package/dist/{index-bn6cy8ps.js → index-ekywyv2v.js} +24 -24
  95. package/dist/{index-n99fycq7.js → index-t4g06w93.js} +24 -24
  96. package/dist/{keepalive-3xspa9jw.js → keepalive-4aezx4bj.js} +11 -10
  97. package/dist/{lead-6qphc124.js → lead-r44bkpm5.js} +47 -47
  98. package/dist/{llama-cpp-classify-tgj35k8d.js → llama-cpp-classify-6erb7wwv.js} +3 -1
  99. package/dist/{maintenance-0teem1bb.js → maintenance-grz5jrzh.js} +9 -8
  100. package/dist/{mistral-conversations-8445ddjn.js → mistral-conversations-059y51zt.js} +4 -4
  101. package/dist/{node-9sg7ajby.js → node-qm9eb6z0.js} +1 -1
  102. package/dist/{oauth-refresh-sweep-sh9q25xp.js → oauth-refresh-sweep-wm4ctjfj.js} +10 -9
  103. package/dist/{onboard-54qmnqxe.js → onboard-v60zgqf0.js} +2 -2
  104. package/dist/{openai-codex-responses-9ynm88zy.js → openai-codex-responses-jzxkta9b.js} +8 -7
  105. package/dist/{openai-completions-nhqwjmaw.js → openai-completions-663yncfq.js} +4 -4
  106. package/dist/openai-decisions-vj9nkpf8.js +162 -0
  107. package/dist/{openai-responses-xx1c4kgm.js → openai-responses-m3g43rrt.js} +5 -5
  108. package/dist/{opencode-adapter-wjfa2wvd.js → opencode-adapter-yjyqynzf.js} +7 -7
  109. package/dist/{openrouter-images-8yx3487g.js → openrouter-images-kr60n6b9.js} +1 -1
  110. package/dist/{otel-impl-ycqzp2a1.js → otel-impl-ghh4dyf8.js} +1 -1
  111. package/dist/{pi-messages-vxdt8v7j.js → pi-messages-xszk613n.js} +1 -1
  112. package/dist/{pi-mono-adapter-e77e9zst.js → pi-mono-adapter-0eg8kw2c.js} +68 -51
  113. package/dist/{pricing-refresh-atnkngqs.js → pricing-refresh-mjrqvnvw.js} +11 -10
  114. package/dist/{rbac-roles-j78wdksm.js → rbac-roles-axv4d74x.js} +10 -9
  115. package/dist/{rbac-roles-9pjphh9q.js → rbac-roles-fd5tskj9.js} +9 -8
  116. package/dist/{render-v2-pxjs49fx.js → render-v2-k50j33qd.js} +10 -9
  117. package/dist/{runtime-v2t1r79e.js → runtime-h9ha1mq6.js} +4 -4
  118. package/dist/{setup-ymej0xtx.js → setup-4syh0pd2.js} +2 -2
  119. package/dist/{typesafe-system-one-datfr82p.js → typesafe-system-one-e988vty7.js} +7 -5
  120. package/dist/{virtual-modules-wm8mxdxx.js → virtual-modules-ftr9kwe8.js} +11 -11
  121. package/dist/{work-objects-3nh4ymzb.js → work-objects-jcdbg8rr.js} +27 -27
  122. package/dist/{worker-qa9fkz5s.js → worker-x8j8c9sx.js} +47 -47
  123. package/openapi.json +1 -1
  124. package/package.json +8 -8
  125. package/src/be/memory/providers/openai-embedding.ts +7 -2
  126. package/src/be/memory/raters/llm-summarizer.ts +7 -2
  127. package/src/be/modelsdev-cache.json +61 -0
  128. package/src/be/seed-pricing.ts +84 -53
  129. package/src/be/swarm-config-guard.ts +13 -0
  130. package/src/commands/provider-credentials.ts +28 -5
  131. package/src/commands/runner.ts +7 -12
  132. package/src/heartbeat/heartbeat.ts +91 -19
  133. package/src/hooks/hook.ts +72 -27
  134. package/src/http/mcp.ts +5 -0
  135. package/src/http/onboarding.ts +2 -0
  136. package/src/providers/acp-targets.ts +9 -4
  137. package/src/providers/amp-adapter.ts +1 -1
  138. package/src/providers/claude-adapter.ts +26 -0
  139. package/src/providers/codex-adapter.ts +30 -3
  140. package/src/providers/codex-oauth/auth-json.ts +21 -4
  141. package/src/providers/codex-oauth/types.ts +2 -0
  142. package/src/providers/dsh-adapter.ts +10 -1
  143. package/src/providers/grok-adapter.ts +18 -2
  144. package/src/providers/opencode-adapter.ts +21 -5
  145. package/src/providers/pi-mono-extension.ts +56 -25
  146. package/src/providers/pricing-sources.md +2 -0
  147. package/src/server.ts +63 -3
  148. package/src/tests/acp-adapter.test.ts +152 -12
  149. package/src/tests/ci-unit-test-report.test.ts +73 -0
  150. package/src/tests/claude-default-route.test.ts +75 -0
  151. package/src/tests/claude-hook-output.test.ts +233 -0
  152. package/src/tests/codex-adapter-pool-auth-revalidate.test.ts +4 -2
  153. package/src/tests/codex-adapter.test.ts +166 -26
  154. package/src/tests/codex-oauth-auth-timestamps.test.ts +76 -0
  155. package/src/tests/codex-oauth.test.ts +4 -1
  156. package/src/tests/context-window.test.ts +2 -2
  157. package/src/tests/credential-check.test.ts +51 -1
  158. package/src/tests/dsh-adapter.test.ts +23 -1
  159. package/src/tests/enabled-tools.test.ts +269 -0
  160. package/src/tests/entrypoint-codex-oauth-seed.test.ts +12 -0
  161. package/src/tests/grok-adapter.test.ts +13 -0
  162. package/src/tests/haiku-5-5-pricing.test.ts +38 -0
  163. package/src/tests/heartbeat-checklist.test.ts +158 -1
  164. package/src/tests/onboarding.test.ts +44 -0
  165. package/src/tests/opencode-adapter.test.ts +66 -3
  166. package/src/tests/opencode-plugin.test.ts +37 -0
  167. package/src/tests/openrouter-attribution-call-sites.test.ts +204 -0
  168. package/src/tests/openrouter-base-url.test.ts +30 -39
  169. package/src/tests/pi-mono-extension.test.ts +161 -2
  170. package/src/tests/pricing-refresh.test.ts +70 -1
  171. package/src/tests/reasoning-effort.test.ts +3 -1
  172. package/src/tests/telemetry-trigger.test.ts +12 -1
  173. package/src/tests/workflow-llm.test.ts +14 -0
  174. package/src/tests/workflow-system-one-decision-providers.test.ts +33 -0
  175. package/src/tools/request-human-input.ts +7 -2
  176. package/src/utils/enabled-tools.ts +27 -0
  177. package/src/utils/internal-ai/complete-structured.ts +11 -3
  178. package/src/utils/openrouter-base-url.ts +23 -0
  179. package/src/workflows/executors/raw-llm.ts +1 -0
  180. package/src/workflows/executors/system-one-decision.ts +2 -0
  181. package/src/workflows/executors/validate.ts +1 -0
  182. package/src/workflows/executors/workflow-llm.ts +9 -2
  183. package/templates/skills/agent-browser/SKILL.md +2 -0
  184. package/templates/skills/agent-browser/content.md +2 -0
  185. package/templates/skills/code-quality/content.md +1 -0
  186. package/templates/skills/heartbeat-runbook/content.md +1 -1
  187. package/templates/skills/work-on-task/SKILL.md +4 -0
  188. package/templates/skills/work-on-task/content.md +4 -0
  189. package/templates/skills/workflow-iterate/content.md +9 -0
  190. package/dist/acp-adapter-yzfxn8vj.js +0 -23
  191. package/dist/cli-3dpj7atn.js +0 -11
  192. package/dist/cli-gvcgmx69.js +0 -183
  193. package/dist/{cli-jhm6hzjn.js → cli-mxvnnv5q.js} +7 -7
  194. package/dist/{codex-hook-d2rkvf39.js → codex-hook-15dgc4cb.js} +1 -1
@@ -3,25 +3,26 @@ import {
3
3
  getMemoryStore,
4
4
  init_memory,
5
5
  resetEmbeddingProvider
6
- } from "./cli-yshaazs1.js";
7
- import"./cli-xvdgasgy.js";
6
+ } from "./cli-mkdsy1nq.js";
8
7
  import"./cli-3qhyh31j.js";
9
- import"./cli-jhm6hzjn.js";
8
+ import"./cli-xvdgasgy.js";
9
+ import"./cli-mxvnnv5q.js";
10
10
  import"./cli-7mm2r1kp.js";
11
11
  import"./cli-g5erf0zt.js";
12
12
  import"./cli-dmtrxqhg.js";
13
- import"./cli-tadfgd0t.js";
14
- import"./cli-ywybs5as.js";
15
- import"./cli-gd4favx9.js";
16
13
  import"./cli-agamgm0p.js";
17
14
  import"./cli-5c2j5yvx.js";
18
15
  import"./cli-1a2j50m0.js";
16
+ import"./cli-tadfgd0t.js";
17
+ import"./cli-ywybs5as.js";
19
18
  import"./cli-f9w1semm.js";
19
+ import"./cli-a35hzdve.js";
20
+ import"./cli-gd4favx9.js";
20
21
  import"./cli-ej6gbxfb.js";
21
- import"./cli-zsh093hk.js";
22
+ import"./cli-014vns2y.js";
22
23
  import"./cli-sd0mxa3c.js";
23
24
  import"./cli-w5e1d1vv.js";
24
- import"./cli-4r1sjfc4.js";
25
+ import"./cli-ymmc1zxg.js";
25
26
  import"./cli-zf8jjwex.js";
26
27
  import"./cli-wt7ccy4r.js";
27
28
  import"./cli-bc05qbss.js";
@@ -4,64 +4,64 @@ import {
4
4
  runRebootSweep,
5
5
  startHeartbeat,
6
6
  stopHeartbeat
7
- } from "./cli-66zh26sp.js";
8
- import"./cli-df56tqdw.js";
7
+ } from "./cli-qzmzwegq.js";
8
+ import"./cli-wydz3feg.js";
9
9
  import"./cli-xvc3q9br.js";
10
10
  import"./cli-mv2520nm.js";
11
11
  import"./cli-w0bwte75.js";
12
12
  import"./cli-re8z5p8p.js";
13
- import"./cli-0nhdwxd5.js";
14
- import"./cli-rggdq8wq.js";
15
- import"./cli-ysnyhws9.js";
16
- import"./cli-jvj6a0cv.js";
13
+ import"./cli-tx2zvn23.js";
14
+ import"./cli-p8rt8spp.js";
15
+ import"./cli-v1pwxreq.js";
16
+ import"./cli-577bxkf6.js";
17
17
  import"./cli-epan13p1.js";
18
18
  import"./cli-f14fvzag.js";
19
+ import"./cli-7mhy3ths.js";
20
+ import"./cli-v1w7pbd8.js";
19
21
  import"./cli-zt3w1cn1.js";
20
- import"./cli-f2n17zhp.js";
21
- import"./cli-feh3dkah.js";
22
- import"./cli-3dpj7atn.js";
23
- import"./cli-2x0e561b.js";
24
- import"./cli-pkke6geq.js";
22
+ import"./cli-km4x66j0.js";
25
23
  import"./cli-rb9m6rpe.js";
24
+ import"./cli-2x0e561b.js";
25
+ import"./cli-kw0jcfje.js";
26
26
  import"./cli-mzfth0bp.js";
27
- import"./cli-j2jbr8af.js";
28
27
  import"./cli-fad8m16k.js";
29
28
  import"./cli-bsakbbkm.js";
30
29
  import"./cli-zxg80zs9.js";
31
30
  import"./cli-51tf7ac3.js";
32
31
  import"./cli-ydt3zkwv.js";
33
- import"./cli-ecknp7p1.js";
32
+ import"./cli-c8r99akr.js";
34
33
  import"./cli-q51yprfq.js";
35
34
  import"./cli-3er6gcsn.js";
36
35
  import"./cli-yatxqynm.js";
37
- import"./cli-b0f70z24.js";
38
- import"./cli-nexwh8zg.js";
36
+ import"./cli-mn8qkd8v.js";
37
+ import"./cli-g7k7zbcz.js";
39
38
  import"./cli-btbzvq95.js";
40
39
  import"./cli-1m2e086m.js";
41
- import"./cli-bzr0ftht.js";
40
+ import"./cli-wnb9b2g3.js";
42
41
  import"./cli-bd957dgb.js";
43
42
  import"./cli-pzxba7gw.js";
44
- import"./cli-8kgvmkak.js";
43
+ import"./cli-ypgba1a8.js";
45
44
  import"./cli-rfphkzh5.js";
46
- import"./cli-yshaazs1.js";
47
- import"./cli-xvdgasgy.js";
45
+ import"./cli-mkdsy1nq.js";
48
46
  import"./cli-3qhyh31j.js";
49
- import"./cli-jhm6hzjn.js";
47
+ import"./cli-xvdgasgy.js";
48
+ import"./cli-mxvnnv5q.js";
50
49
  import"./cli-7mm2r1kp.js";
51
50
  import"./cli-g5erf0zt.js";
52
51
  import"./cli-dmtrxqhg.js";
53
- import"./cli-tadfgd0t.js";
54
- import"./cli-ywybs5as.js";
55
- import"./cli-gd4favx9.js";
56
52
  import"./cli-agamgm0p.js";
57
53
  import"./cli-5c2j5yvx.js";
58
54
  import"./cli-1a2j50m0.js";
55
+ import"./cli-tadfgd0t.js";
56
+ import"./cli-ywybs5as.js";
59
57
  import"./cli-f9w1semm.js";
58
+ import"./cli-a35hzdve.js";
59
+ import"./cli-gd4favx9.js";
60
60
  import"./cli-ej6gbxfb.js";
61
- import"./cli-zsh093hk.js";
61
+ import"./cli-014vns2y.js";
62
62
  import"./cli-sd0mxa3c.js";
63
63
  import"./cli-w5e1d1vv.js";
64
- import"./cli-4r1sjfc4.js";
64
+ import"./cli-ymmc1zxg.js";
65
65
  import"./cli-mb75wpxf.js";
66
66
  import"./cli-zf8jjwex.js";
67
67
  import"./cli-wt7ccy4r.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./cli-ep19k3mb.js";
4
4
  import {
5
5
  agentFsProvisionSeeder
6
- } from "./cli-gt8azyet.js";
6
+ } from "./cli-c2tpw9ck.js";
7
7
  import {
8
8
  extractArgsJsonSchema,
9
9
  extractScriptSignature,
@@ -11,29 +11,28 @@ import {
11
11
  typecheckScript,
12
12
  validateDefinition,
13
13
  validateScriptImports
14
- } from "./cli-jvj6a0cv.js";
14
+ } from "./cli-577bxkf6.js";
15
15
  import"./cli-epan13p1.js";
16
16
  import"./cli-f14fvzag.js";
17
+ import"./cli-7mhy3ths.js";
18
+ import"./cli-v1w7pbd8.js";
17
19
  import"./cli-zt3w1cn1.js";
18
- import"./cli-f2n17zhp.js";
19
- import"./cli-feh3dkah.js";
20
- import"./cli-3dpj7atn.js";
21
- import"./cli-2x0e561b.js";
22
- import"./cli-pkke6geq.js";
20
+ import"./cli-km4x66j0.js";
23
21
  import"./cli-rb9m6rpe.js";
24
- import"./cli-j2jbr8af.js";
22
+ import"./cli-2x0e561b.js";
23
+ import"./cli-kw0jcfje.js";
25
24
  import"./cli-bsakbbkm.js";
26
25
  import"./cli-zxg80zs9.js";
27
26
  import"./cli-ydt3zkwv.js";
28
- import"./cli-ecknp7p1.js";
27
+ import"./cli-c8r99akr.js";
29
28
  import"./cli-q51yprfq.js";
30
29
  import"./cli-3er6gcsn.js";
31
30
  import"./cli-yatxqynm.js";
32
- import"./cli-b0f70z24.js";
33
- import"./cli-nexwh8zg.js";
31
+ import"./cli-mn8qkd8v.js";
32
+ import"./cli-g7k7zbcz.js";
34
33
  import"./cli-btbzvq95.js";
35
34
  import"./cli-1m2e086m.js";
36
- import"./cli-bzr0ftht.js";
35
+ import"./cli-wnb9b2g3.js";
37
36
  import"./cli-bd957dgb.js";
38
37
  import"./cli-pzxba7gw.js";
39
38
  import {
@@ -55,25 +54,26 @@ import {
55
54
  updateWorkflow,
56
55
  upsertScriptByName,
57
56
  upsertSkillFiles
58
- } from "./cli-yshaazs1.js";
59
- import"./cli-xvdgasgy.js";
57
+ } from "./cli-mkdsy1nq.js";
60
58
  import"./cli-3qhyh31j.js";
61
- import"./cli-jhm6hzjn.js";
59
+ import"./cli-xvdgasgy.js";
60
+ import"./cli-mxvnnv5q.js";
62
61
  import"./cli-7mm2r1kp.js";
63
62
  import"./cli-g5erf0zt.js";
64
63
  import"./cli-dmtrxqhg.js";
65
- import"./cli-tadfgd0t.js";
66
- import"./cli-ywybs5as.js";
67
- import"./cli-gd4favx9.js";
68
64
  import"./cli-agamgm0p.js";
69
65
  import"./cli-5c2j5yvx.js";
70
66
  import"./cli-1a2j50m0.js";
67
+ import"./cli-tadfgd0t.js";
68
+ import"./cli-ywybs5as.js";
71
69
  import"./cli-f9w1semm.js";
70
+ import"./cli-a35hzdve.js";
71
+ import"./cli-gd4favx9.js";
72
72
  import"./cli-ej6gbxfb.js";
73
- import"./cli-zsh093hk.js";
73
+ import"./cli-014vns2y.js";
74
74
  import"./cli-sd0mxa3c.js";
75
75
  import"./cli-w5e1d1vv.js";
76
- import"./cli-4r1sjfc4.js";
76
+ import"./cli-ymmc1zxg.js";
77
77
  import"./cli-zf8jjwex.js";
78
78
  import"./cli-wt7ccy4r.js";
79
79
  import {
@@ -5734,7 +5734,7 @@ var config_default = `{
5734
5734
  `;
5735
5735
 
5736
5736
  // templates/skills/agent-browser/content.md
5737
- var content_default = '# agent-browser\n\n`agent-browser` (vercel-labs) is the swarm\'s browser-automation CLI. It drives a headless Chromium over CDP and returns accessibility-tree snapshots with compact `@eN` refs. Use it for any browser task: verify a UI change, take a screenshot, walk a page, fill a form, extract page text, reproduce a frontend bug, or attach UI evidence to a PR, issue, Linear comment, or Slack thread.\n\nDo not use `qa-use`. It is not installed in the worker image any more.\n\n## Step 0: check that the CLI is present\n\nThe full worker image (`agent-swarm-worker:latest`) ships `agent-browser` and a headless Chromium. The slim image (`:slim`) has neither. The first command of any browser work is:\n\n```bash\ncommand -v agent-browser\n```\n\nIf it prints nothing, you are on the slim image. Say so in your progress report ("agent-browser is not available on this worker image") and fall back to manual QA: write the exact steps a human should run and mark the browser test cases as **Blocked**, not failed. Do not install a browser or the CLI yourself.\n\n## Step 1: load the version-matched guide\n\nThe CLI bundles its own usage guide. Load it once per task before the first browser command. Do not guess flags from memory.\n\n```bash\nagent-browser skills get core # overview + common patterns\nagent-browser skills get core --full # adds the full command reference\nagent-browser skills list # specialized guides (dogfood, electron, slack, ...)\n```\n\n## Step 2: the core loop\n\n```bash\nagent-browser open <url>\nagent-browser snapshot -i # accessibility tree, interactive elements only, @eN refs\nagent-browser click @e12 # act on refs from the snapshot\nagent-browser fill @e7 "text"\nagent-browser screenshot /tmp/<name>.png\nagent-browser close\n```\n\n- Re-run `snapshot` after every navigation or state change. Refs are only valid for the snapshot that produced them.\n- Run one browser session at a time. Call `store-progress` between page batches so the heartbeat watchdog sees you.\n- The browser is headless. Local servers inside the worker container are reachable at `http://localhost:<port>`.\n- The image launches Chromium with `--no-sandbox,--disable-dev-shm-usage` through `AGENT_BROWSER_ARGS`. If you pass your own `--args`, include `--no-sandbox` again or Chrome will not start.\n\n## Recording\n\nDefault: record with `--cursor`, drive every supported pointer action (`click`, `mouse move`, `drag`) with `--human`, and ship the **1.5x video**. Keep the 1x original only if a reviewer asks for it. Human pointer movement follows an eased curve; use `--seed <n>` on `mouse move` to make the take reproducible instead of using a bare move.\n\nOpen the page first, then record the interaction:\n\n```bash\nagent-browser record start ./in.mp4 --cursor\nagent-browser snapshot -i\nagent-browser mouse move 600 400 --human --seed 42 --duration 1400\nagent-browser click @e3 --human # use a ref from the current snapshot\n# Perform the remaining QA steps; use --human for drag actions too.\nagent-browser record stop\nffmpeg -y -i in.mp4 -filter:v "setpts=PTS/1.5,fps=30" -an \\\n -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p out-1.5x.mp4\n```\n\nSpeed-up is a post-process step: `record start` has no speed or human flag. Keep `fps=30` to preserve a steady 30 fps output rather than uneven frame drops at an inferred rate. `-an` disables audio because agent-browser recordings carry no audio track. The worker ships only `ffmpeg`, not `ffprobe`; inspect duration with `ffmpeg -i out-1.5x.mp4 2>&1 | grep Duration`.\n\nAdd `--contact-sheet` to the start command for a timestamped PNG summary of visual changes. Recording needs `ffmpeg` on PATH; check `agent-browser doctor` before starting. Stop the recording before closing the browser so the video is saved. Keep the 1.5x file on the same agent-fs QA path as screenshots below. In a PR, upload it as a GitHub user attachment and put the URL on its own line, so GitHub plays it inline.\n\n## Step 3: share the screenshot through agent-fs\n\nScreenshots on the worker disk disappear with the task. Upload them to agent-fs under the qa path convention: that copy is the durable original. Use `share-create` when a person needs to open the file. `--file` is binary-safe. `--content` is text-only and mangles PNGs.\n\n```bash\nagent-fs write thoughts/<agent-id>/qa/<topic>-screenshots/<name>.png \\\n --file /tmp/<name>.png -m "<what it shows>"\nagent-fs stat thoughts/<agent-id>/qa/<topic>-screenshots/<name>.png --json # confirm size > 0\nagent-fs share-create thoughts/<agent-id>/qa/<topic>-screenshots/<name>.png --json\n```\n\n- **GitHub PR body or comment**: upload the PNG, GIF or mp4 as a GitHub user attachment with the `github-attach` skill and embed `![caption](https://github.com/user-attachments/assets/<uuid>)`. Attachments never expire and mp4s play inline. A UI PR puts a before (main) and after pair in the `## Before / after` table. Fallback for images only, when the GitHub token is an App token (`ghu_`/`ghs_`): `agent-fs signed-url <path> --inline --json` (expires in 7 days). Never a presigned URL for an mp4 or a doc: it downloads.\n- **Linear comment or Slack message**: paste the `share-create` link.\n- In `store-progress`, list the upload in the `attachments` field with `kind: "agent-fs"` and the path, and paste the `share-create` link for people who need to open the file.\n- If `agent-fs auth whoami` fails, report the local path, say the upload was skipped, and continue.\n\nThe `artifacts` skill holds the full agent-fs recipe and the naming conventions.\n\n## Gotchas\n\n- `wait <selector>` waits for a VISIBLE match. When the first match is hidden it times out (about 25 s) even though the element exists. Wait on rendered text instead: `wait --text "<rendered text>"`.\n- Never run `pkill -f <pattern>` inside a Bash call: the pattern also matches the calling shell\'s command line and kills it. Record the PID when you start a background server (`echo $!`) and `kill <pid>`.\n';
5737
+ var content_default = '# agent-browser\n\n`agent-browser` (vercel-labs) is the swarm\'s browser-automation CLI. It drives a headless Chromium over CDP and returns accessibility-tree snapshots with compact `@eN` refs. Use it for any browser task: verify a UI change, take a screenshot, walk a page, fill a form, extract page text, reproduce a frontend bug, or attach UI evidence to a PR, issue, Linear comment, or Slack thread.\n\nDo not use `qa-use`. It is not installed in the worker image any more.\n\n## Step 0: check that the CLI is present\n\nThe full worker image (`agent-swarm-worker:latest`) ships `agent-browser` and a headless Chromium. The slim image (`:slim`) has neither. The first command of any browser work is:\n\n```bash\ncommand -v agent-browser\n```\n\nIf it prints nothing, you are on the slim image. Say so in your progress report ("agent-browser is not available on this worker image") and fall back to manual QA: write the exact steps a human should run and mark the browser test cases as **Blocked**, not failed. Do not install a browser or the CLI yourself.\n\n## Step 1: load the version-matched guide\n\nThe CLI bundles its own usage guide. Load it once per task before the first browser command. Do not guess flags from memory.\n\n```bash\nagent-browser skills get core # overview + common patterns\nagent-browser skills get core --full # adds the full command reference\nagent-browser skills list # specialized guides (dogfood, electron, slack, ...)\n```\n\n## Step 2: the core loop\n\n```bash\nagent-browser open <url>\nagent-browser snapshot -i # accessibility tree, interactive elements only, @eN refs\nagent-browser click @e12 # act on refs from the snapshot\nagent-browser fill @e7 "text"\nagent-browser screenshot /tmp/<name>.png\nagent-browser close\n```\n\n- Re-run `snapshot` after every navigation or state change. Refs are only valid for the snapshot that produced them.\n- Run one browser session at a time. Call `store-progress` between page batches so the heartbeat watchdog sees you.\n- The browser is headless. Local servers inside the worker container are reachable at `http://localhost:<port>`.\n- The image launches Chromium with `--no-sandbox,--disable-dev-shm-usage` through `AGENT_BROWSER_ARGS`. If you pass your own `--args`, include `--no-sandbox` again or Chrome will not start.\n\n## Recording\n\nPass `record start` an absolute path (`/tmp/<topic>/raw.webm`). A relative path resolves against the agent-browser daemon\'s cwd, not yours, and fails with `ffmpeg write failed: Broken pipe` while `doctor` stays green.\n\nDefault: record with `--cursor`, drive every supported pointer action (`click`, `mouse move`, `drag`) with `--human`, and ship the **1.5x video**. Keep the 1x original only if a reviewer asks for it. Human pointer movement follows an eased curve; use `--seed <n>` on `mouse move` to make the take reproducible instead of using a bare move.\n\nOpen the page first, then record the interaction:\n\n```bash\nagent-browser record start ./in.mp4 --cursor\nagent-browser snapshot -i\nagent-browser mouse move 600 400 --human --seed 42 --duration 1400\nagent-browser click @e3 --human # use a ref from the current snapshot\n# Perform the remaining QA steps; use --human for drag actions too.\nagent-browser record stop\nffmpeg -y -i in.mp4 -filter:v "setpts=PTS/1.5,fps=30" -an \\\n -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p out-1.5x.mp4\n```\n\nSpeed-up is a post-process step: `record start` has no speed or human flag. Keep `fps=30` to preserve a steady 30 fps output rather than uneven frame drops at an inferred rate. `-an` disables audio because agent-browser recordings carry no audio track. The worker ships only `ffmpeg`, not `ffprobe`; inspect duration with `ffmpeg -i out-1.5x.mp4 2>&1 | grep Duration`.\n\nAdd `--contact-sheet` to the start command for a timestamped PNG summary of visual changes. Recording needs `ffmpeg` on PATH; check `agent-browser doctor` before starting. Stop the recording before closing the browser so the video is saved. Keep the 1.5x file on the same agent-fs QA path as screenshots below. In a PR, upload it as a GitHub user attachment and put the URL on its own line, so GitHub plays it inline.\n\n## Step 3: share the screenshot through agent-fs\n\nScreenshots on the worker disk disappear with the task. Upload them to agent-fs under the qa path convention: that copy is the durable original. Use `share-create` when a person needs to open the file. `--file` is binary-safe. `--content` is text-only and mangles PNGs.\n\n```bash\nagent-fs write thoughts/<agent-id>/qa/<topic>-screenshots/<name>.png \\\n --file /tmp/<name>.png -m "<what it shows>"\nagent-fs stat thoughts/<agent-id>/qa/<topic>-screenshots/<name>.png --json # confirm size > 0\nagent-fs share-create thoughts/<agent-id>/qa/<topic>-screenshots/<name>.png --json\n```\n\n- **GitHub PR body or comment**: upload the PNG, GIF or mp4 as a GitHub user attachment with the `github-attach` skill and embed `![caption](https://github.com/user-attachments/assets/<uuid>)`. Attachments never expire and mp4s play inline. A UI PR puts a before (main) and after pair in the `## Before / after` table. Fallback for images only, when the GitHub token is an App token (`ghu_`/`ghs_`): `agent-fs signed-url <path> --inline --json` (expires in 7 days). Never a presigned URL for an mp4 or a doc: it downloads.\n- **Linear comment or Slack message**: paste the `share-create` link.\n- In `store-progress`, list the upload in the `attachments` field with `kind: "agent-fs"` and the path, and paste the `share-create` link for people who need to open the file.\n- If `agent-fs auth whoami` fails, report the local path, say the upload was skipped, and continue.\n\nThe `artifacts` skill holds the full agent-fs recipe and the naming conventions.\n\n## Gotchas\n\n- `wait <selector>` waits for a VISIBLE match. When the first match is hidden it times out (about 25 s) even though the element exists. Wait on rendered text instead: `wait --text "<rendered text>"`.\n- Never run `pkill -f <pattern>` inside a Bash call: the pattern also matches the calling shell\'s command line and kills it. Record the PID when you start a background server (`echo $!`) and `kill <pid>`.\n';
5738
5738
 
5739
5739
  // templates/skills/apps/config.json
5740
5740
  var config_default2 = `{
@@ -6440,7 +6440,7 @@ var config_default8 = `{
6440
6440
  `;
6441
6441
 
6442
6442
  // templates/skills/code-quality/content.md
6443
- var content_default8 = "# Code quality\n\nThis skill covers the moment code leaves your machine: a push, a pull request, a merge, a review.\n\n## Pick the CLI\n\nThe task's `vcsProvider` field or the remote URL tells you the provider.\n\n| Operation | GitHub (`gh`) | GitLab (`glab`) |\n|---|---|---|\n| Clone | `gh repo clone` | `glab repo clone` |\n| Create PR or MR | `gh pr create` | `glab mr create` |\n| View | `gh pr view` | `glab mr view` |\n| CI status | `gh pr checks` | `glab mr view --json pipelines` |\n| Review | `gh pr review` | `glab mr approve`, `glab mr note` |\n| Comment on an issue | `gh issue comment` | `glab issue note` |\n\n## Before you push\n\n1. Run every command in the Repository Guidelines section \"PR Checks\" of your system prompt, one after the other. When no guidelines exist, run the checklist in the repo's CLAUDE.md. When neither exists, ask the lead before you push.\n2. A failing check: fix the cause and run the check again. Push only when every check passes.\n3. Git hooks stay on. `--no-verify` and any other bypass flag are out.\n4. `main` and `master` are never force-pushed.\n5. One logical change per PR. Conventional commit titles when the repo uses them.\n\n## After you open a PR\n\n1. Wait about 30 seconds, then read CI: `gh pr checks <number>` or `glab mr view --json pipelines`.\n2. Red CI: read the failing job, fix, push, read CI again. Repeat until green.\n3. Put the PR URL and the CI status in your task output.\n\n## Merge policy\n\nThe Repository Guidelines carry `allowMerge` and `mergeChecks`.\n\n- `allowMerge` false (the default): review and approve. Do not merge.\n- `allowMerge` true: run every `mergeChecks` entry first, then merge.\n\n## Review a PR\n\n1. CI status first, including the fork checks below before treating CI as evidence. Failing CI is a REQUEST_CHANGES. Name the failing checks in the review.\n2. Detect a GitHub fork PR with `gh pr view <number> --json isCrossRepository --jq .isCrossRepository`.\n3. For a GitHub fork PR, inspect held runs with `SHA=$(gh pr view <number> --json headRefOid --jq .headRefOid); gh api --paginate \"repos/<owner>/<repo>/actions/runs?head_sha=$SHA\" --jq '.workflow_runs[] | \"\\(.conclusion // .status)|\\(.name)\"'`; `gh pr checks` and `statusCheckRollup` can omit them.\n4. Treat any `action_required` run or no substantive run executed on that SHA as a CI blocker. Keep run handling read-only: REQUEST_CHANGES naming the held or unexecuted run, and report the blocker so an explicitly authorized maintainer or the application-controlled GitHub integration can approve the run after validating the workflow and its trust boundary. Do not APPROVE on omitted runs.\n5. Tests second. This authoring gate applies to production changes and tests under root `src/` only; `apps/ui/` and `apps/evals/` are out of scope for now. For a behavior change in root `src/`, no new or updated test that names the regression it catches is a REQUEST_CHANGES. A test that fails the gate below is also a REQUEST_CHANGES. Documentation-only, configuration-only, and dependency-bump PRs are exempt.\n\n Before adding or changing a root `src/` test, answer all four questions:\n - What observable behavior, invariant, or independent contract does it protect?\n - What credible regression would make it fail?\n - Why would existing coverage miss that regression? Give each contract one primary test owner at its strongest boundary. Another layer needs a distinct risk the owner cannot reach. Prefer extending a table-driven case or shared fixture over a near-duplicate.\n - Does it need a production seam (export, flag, wrapper, or injection hook) that no production caller needs? If so, move the test to the real boundary.\n\n Reject tests that match these junk patterns:\n - Assertion-free coverage probes.\n - Self-comparisons and identity copiers.\n - Copied fixtures, inventories, manifests, or export lists.\n - Exact source, import, or string greps.\n - Private predicate or call-shape tests duplicated at real boundaries.\n - Duplicate invocations of the same contract.\n - Provider-local replays of shared helpers.\n - Tests whose only purpose is preserving test-only exports, globals, or wrappers.\n - Dead production code whose only callers are tests.\n - Expected values produced by the helper or renderer under test.\n - Mocks that implement the asserted behavior, or one identical mock standing in for different APIs.\n - Fixtures that supply the receipt, admission, or callback ordering the owner should produce, or persistence asserted against a store the path never writes.\n - Capability tests that restate declared flags instead of exercising the delivery or acknowledgement the flag promises.\n - Negative controls that pass for an unrelated reason, such as denial from a different guard or a rejection the production path never reaches.\n - Test names or fixtures that promise more than the input exercises.\n\n A regression test must fail on the pre-fix code for the intended reason and pass after the repair. A regression test that never demonstrably failed does not prove the fix.\n6. Apply the \"Review Guidance\" entries from the Repository Guidelines.\n7. Read the diff for security (injection, secrets in code), logic (null handling, off-by-one, edge cases), performance (N+1, leaks), and code shape (naming, duplication, error handling). Run the test suite and the type check locally when you can.\n8. Post the review with the verdict first. One finding per comment, with file and line, and what to change.\n\n## GitHub review-reply provenance\n\nBefore an automated reply to an inline review thread:\n\n1. `gh api user --jq .login` must equal `${GITHUB_BOT_NAME:-agent-swarm-bot}`.\n2. Post through the `GITHUB_TOKEN`-backed `gh api` path.\n3. Append `<!-- agent-swarm:review-ack -->` to the reply body.\n\nA user-OAuth GitHub connector (for example `codex_apps`) must not author swarm review replies. When the login does not match, do not post. Report the mismatch in your task output.\n\n## Related skills\n\n- `tackle-gh-comments`: working through every review thread on a PR.\n- `engineering-standards`: the code-shape bar a reviewer holds the diff to.\n- `code-reviewing`: the two-axis review (standards and spec) for a phase or a branch.\n";
6443
+ var content_default8 = "# Code quality\n\nThis skill covers the moment code leaves your machine: a push, a pull request, a merge, a review.\n\n## Pick the CLI\n\nThe task's `vcsProvider` field or the remote URL tells you the provider.\n\n| Operation | GitHub (`gh`) | GitLab (`glab`) |\n|---|---|---|\n| Clone | `gh repo clone` | `glab repo clone` |\n| Create PR or MR | `gh pr create` | `glab mr create` |\n| View | `gh pr view` | `glab mr view` |\n| CI status | `gh pr checks` | `glab mr view --json pipelines` |\n| Review | `gh pr review` | `glab mr approve`, `glab mr note` |\n| Comment on an issue | `gh issue comment` | `glab issue note` |\n\n## Before you push\n\n1. Run every command in the Repository Guidelines section \"PR Checks\" of your system prompt, one after the other. When no guidelines exist, run the checklist in the repo's CLAUDE.md. When neither exists, ask the lead before you push.\n2. A failing check: fix the cause and run the check again. Push only when every check passes.\n3. Git hooks stay on. `--no-verify` and any other bypass flag are out.\n4. `main` and `master` are never force-pushed.\n5. One logical change per PR. Conventional commit titles when the repo uses them.\n\n## After you open a PR\n\n1. Wait about 30 seconds, then read CI: `gh pr checks <number>` or `glab mr view --json pipelines`.\n2. Red CI: read the failing job, fix, push, read CI again. Repeat until green.\n3. Put the PR URL and the CI status in your task output.\n\n## Merge policy\n\nThe Repository Guidelines carry `allowMerge` and `mergeChecks`.\n\n- `allowMerge` false (the default): review and approve. Do not merge.\n- `allowMerge` true: run every `mergeChecks` entry first, then merge.\n\n## Review a PR\n\n0. Re-review check. If you reviewed this PR before, compare `gh pr view <number> --json headRefOid --jq .headRefOid` with the `commit_id` of your last review (`gh api repos/<owner>/<repo>/pulls/<number>/reviews`). Same SHA: reuse that verdict, link it and stop. New SHA: review the diff since that commit, then run the full list below. If the new head merged or rebased main, also read every conflict resolution (files both sides touched), check migration numbering and order against main, grep for stale migration numbers, and confirm CI is green at the exact head you review.\n1. CI status first, including the fork checks below before treating CI as evidence. Failing CI is a REQUEST_CHANGES. Name the failing checks in the review.\n2. Detect a GitHub fork PR with `gh pr view <number> --json isCrossRepository --jq .isCrossRepository`.\n3. For a GitHub fork PR, inspect held runs with `SHA=$(gh pr view <number> --json headRefOid --jq .headRefOid); gh api --paginate \"repos/<owner>/<repo>/actions/runs?head_sha=$SHA\" --jq '.workflow_runs[] | \"\\(.conclusion // .status)|\\(.name)\"'`; `gh pr checks` and `statusCheckRollup` can omit them.\n4. Treat any `action_required` run or no substantive run executed on that SHA as a CI blocker. Keep run handling read-only: REQUEST_CHANGES naming the held or unexecuted run, and report the blocker so an explicitly authorized maintainer or the application-controlled GitHub integration can approve the run after validating the workflow and its trust boundary. Do not APPROVE on omitted runs.\n5. Tests second. This authoring gate applies to production changes and tests under root `src/` only; `apps/ui/` and `apps/evals/` are out of scope for now. For a behavior change in root `src/`, no new or updated test that names the regression it catches is a REQUEST_CHANGES. A test that fails the gate below is also a REQUEST_CHANGES. Documentation-only, configuration-only, and dependency-bump PRs are exempt.\n\n Before adding or changing a root `src/` test, answer all four questions:\n - What observable behavior, invariant, or independent contract does it protect?\n - What credible regression would make it fail?\n - Why would existing coverage miss that regression? Give each contract one primary test owner at its strongest boundary. Another layer needs a distinct risk the owner cannot reach. Prefer extending a table-driven case or shared fixture over a near-duplicate.\n - Does it need a production seam (export, flag, wrapper, or injection hook) that no production caller needs? If so, move the test to the real boundary.\n\n Reject tests that match these junk patterns:\n - Assertion-free coverage probes.\n - Self-comparisons and identity copiers.\n - Copied fixtures, inventories, manifests, or export lists.\n - Exact source, import, or string greps.\n - Private predicate or call-shape tests duplicated at real boundaries.\n - Duplicate invocations of the same contract.\n - Provider-local replays of shared helpers.\n - Tests whose only purpose is preserving test-only exports, globals, or wrappers.\n - Dead production code whose only callers are tests.\n - Expected values produced by the helper or renderer under test.\n - Mocks that implement the asserted behavior, or one identical mock standing in for different APIs.\n - Fixtures that supply the receipt, admission, or callback ordering the owner should produce, or persistence asserted against a store the path never writes.\n - Capability tests that restate declared flags instead of exercising the delivery or acknowledgement the flag promises.\n - Negative controls that pass for an unrelated reason, such as denial from a different guard or a rejection the production path never reaches.\n - Test names or fixtures that promise more than the input exercises.\n\n A regression test must fail on the pre-fix code for the intended reason and pass after the repair. A regression test that never demonstrably failed does not prove the fix.\n6. Apply the \"Review Guidance\" entries from the Repository Guidelines.\n7. Read the diff for security (injection, secrets in code), logic (null handling, off-by-one, edge cases), performance (N+1, leaks), and code shape (naming, duplication, error handling). Run the test suite and the type check locally when you can.\n8. Post the review with the verdict first. One finding per comment, with file and line, and what to change.\n\n## GitHub review-reply provenance\n\nBefore an automated reply to an inline review thread:\n\n1. `gh api user --jq .login` must equal `${GITHUB_BOT_NAME:-agent-swarm-bot}`.\n2. Post through the `GITHUB_TOKEN`-backed `gh api` path.\n3. Append `<!-- agent-swarm:review-ack -->` to the reply body.\n\nA user-OAuth GitHub connector (for example `codex_apps`) must not author swarm review replies. When the login does not match, do not post. Report the mismatch in your task output.\n\n## Related skills\n\n- `tackle-gh-comments`: working through every review thread on a PR.\n- `engineering-standards`: the code-shape bar a reviewer holds the diff to.\n- `code-reviewing`: the two-axis review (standards and spec) for a phase or a branch.\n";
6444
6444
 
6445
6445
  // templates/skills/code-reviewing/config.json
6446
6446
  var config_default9 = `{
@@ -7270,7 +7270,7 @@ Two kinds of sections:
7270
7270
 
7271
7271
  ## Handle a heartbeat-checklist task
7272
7272
 
7273
- 0. Quiet check. Take the fast path when three things hold: the system status shows no failed, stalled or reboot-interrupted task; no mention has gone unanswered since the last heartbeat; and no tracked item in the task's runbook snapshot is at or past its date. On the fast path, run the two step 3 scripts. If both are clean, complete with one line that names the zero counts and skip steps 1, 2 and 4-7. Anything non-zero means continue at step 1.
7273
+ 0. Quiet check. Take the fast path when three things hold: every failed, stalled or reboot-interrupted task in the system status was already named in the previous heartbeat-checklist task's output (newest completed one via \`get-tasks\`); no mention has gone unanswered since the last heartbeat; and no tracked item in the task's runbook snapshot is at or past its date. On the fast path, run the two step 3 scripts. If they report nothing the previous heartbeat had not already triaged, complete with one line citing the previous heartbeat task id and the counts, and skip steps 1, 2 and 4-7. Anything new means continue at step 1.
7274
7274
  1. Read the latest runbook. The snapshot in the task may be stale.
7275
7275
  2. Prune first. Check every tracked item against its lift trigger. Remove resolved, stale, and past-date items.
7276
7276
  3. Run the seeded scripts: \`script-run\` with name \`schedule-health\`, then \`task-failure-audit\`, both with \`args: { days: 1, publishPage: false }\`. They report failing schedules and failure clusters. Check any other standing order in the runbook yourself.
@@ -11852,7 +11852,7 @@ var config_default49 = `{
11852
11852
  `;
11853
11853
 
11854
11854
  // templates/skills/work-on-task/content.md
11855
- var content_default49 = "# Working on a task\n\nThe taskId follows the command. Without one, call `get-tasks` with `mineOnly: true` and take your `pending` or `in_progress` task. If there is none, say so and stop.\n\nThis message carries the task text, its attachments, its output format, and memories from past sessions. If it does not (you invoked this command yourself, or the context was compacted), run the `task-context-gathering` script with the taskId.\n\nWhen the task names a skill (`researching`, `planning`, `implementing`), use it. Otherwise work directly.\n\nFinish the task with one of the four endings in your operating contract: `completed`, `defer-task`, `request-human-input`, or `failed`. Then stop.\n\nIf the user interrupts, follow their instructions. To resume, call `/work-on-task <taskId>` again.\n";
11855
+ var content_default49 = "# Working on a task\n\nThe taskId follows the command. Without one, call `get-tasks` with `mineOnly: true` and take your `pending` or `in_progress` task. If there is none, say so and stop.\n\nThis message carries the task text, its attachments, its output format, and memories from past sessions. If it does not (you invoked this command yourself, or the context was compacted), run the `task-context-gathering` script with the taskId.\n\nWhen the task names a skill (`researching`, `planning`, `implementing`), use it. Otherwise work directly.\n\nFinish the task with one of the four endings in your operating contract: `completed`, `defer-task`, `request-human-input`, or `failed`. Then stop.\n\nResuming (a resume task, or work cut by a graceful shutdown): read the parent's last progress line, then re-read live state once (PR state and head SHA, branch, `git status`) before new work. Re-run controls only if the head moved. Never redo a pushed commit or open a second PR for the same branch. Store a progress line with branch, PR number and head SHA each time you push.\n\nWrite times in replies, outputs and defer notes in the requester's timezone when the Requester Profile names one, never raw UTC.\n\nIf the user interrupts, follow their instructions. To resume, call `/work-on-task <taskId>` again.\n";
11856
11856
 
11857
11857
  // templates/skills/workflow-iterate/config.json
11858
11858
  var config_default50 = `{
@@ -12052,6 +12052,15 @@ Afterwards, a \`warnings\` entry on \`create-workflow\` or a patch tool means th
12052
12052
  - Do not set \`retry\` or \`validation.retry\` on a \`system-one-decision\` node. It retries connection errors, 408, 429, and 5xx itself (\`config.maxRetries\`, 0 to 3, default 2) inside \`config.timeoutMs\` (default 30000). A 401, a 422, or an answer that fails validation ends after one attempt.
12053
12053
  - The node reads its provider's key (\`TYPESAFE_API_KEY\`, \`OPENROUTER_API_KEY\`, \`LAYA_API_KEY\`, \`OPENAI_DECISIONS_API_KEY\`, or \`CLOUDFLARE_API_TOKEN\`, plus \`LAYA_URL\` for \`laya\` and \`CLOUDFLARE_ACCOUNT_ID\` for \`cloudflare\`) server-side. The key never appears in the definition, the step output, or an error. A run whose key or \`LAYA_URL\` is missing fails before any node executes, and a 401 or 403 fails the step as \`<KEY> was rejected\`. An unresolved \`{{token}}\` fails the step before any request.
12054
12054
 
12055
+ ### \`human-in-the-loop\` (how approvals render)
12056
+
12057
+ The same rules apply to a standalone \`request-human-input\` call.
12058
+
12059
+ - **Dashboard card.** \`title\` is plain text. Each question's \`label\` is its heading and renders as markdown. \`description\` renders as full markdown and is the only field that shows images, so put drafts, diffs, and logs there.
12060
+ - **Code.** Fence code, logs, and JSON with a language (\`\`\`\` \`\`\`json \`\`\`\`): the block keeps its lines and scrolls. Fence a prose draft with no language: it wraps. A single newline outside a fence becomes a paragraph break.
12061
+ - **Images.** Put an \`http(s)\` URL ending in \`.png\`, \`.jpg\`, \`.jpeg\`, \`.gif\`, or \`.webp\` alone on its own line in \`description\`, or use \`![alt](url)\`. The link must outlive the request: an expired presigned URL shows an "image unavailable" note.
12062
+ - **Slack.** A node's \`notifications\` post the title, the question labels (each collapsed to one line, capped at 3000 characters in total), a Review button, and the timeout. Descriptions, options, code, and images are not shown, so the title and labels must make sense alone. \`request-human-input\` posts nothing to Slack: share the returned URL yourself.
12063
+
12055
12064
  ### \`swarm-script\`
12056
12065
 
12057
12066
  \`\`\`json
@@ -4,63 +4,63 @@ import {
4
4
  runScheduleNow,
5
5
  startScheduler,
6
6
  stopScheduler
7
- } from "./cli-df56tqdw.js";
7
+ } from "./cli-wydz3feg.js";
8
8
  import"./cli-xvc3q9br.js";
9
9
  import"./cli-mv2520nm.js";
10
10
  import"./cli-w0bwte75.js";
11
11
  import"./cli-re8z5p8p.js";
12
- import"./cli-0nhdwxd5.js";
13
- import"./cli-rggdq8wq.js";
14
- import"./cli-ysnyhws9.js";
15
- import"./cli-jvj6a0cv.js";
12
+ import"./cli-tx2zvn23.js";
13
+ import"./cli-p8rt8spp.js";
14
+ import"./cli-v1pwxreq.js";
15
+ import"./cli-577bxkf6.js";
16
16
  import"./cli-epan13p1.js";
17
17
  import"./cli-f14fvzag.js";
18
+ import"./cli-7mhy3ths.js";
19
+ import"./cli-v1w7pbd8.js";
18
20
  import"./cli-zt3w1cn1.js";
19
- import"./cli-f2n17zhp.js";
20
- import"./cli-feh3dkah.js";
21
- import"./cli-3dpj7atn.js";
22
- import"./cli-2x0e561b.js";
23
- import"./cli-pkke6geq.js";
21
+ import"./cli-km4x66j0.js";
24
22
  import"./cli-rb9m6rpe.js";
23
+ import"./cli-2x0e561b.js";
24
+ import"./cli-kw0jcfje.js";
25
25
  import"./cli-mzfth0bp.js";
26
- import"./cli-j2jbr8af.js";
27
26
  import"./cli-fad8m16k.js";
28
27
  import"./cli-bsakbbkm.js";
29
28
  import"./cli-zxg80zs9.js";
30
29
  import"./cli-51tf7ac3.js";
31
30
  import"./cli-ydt3zkwv.js";
32
- import"./cli-ecknp7p1.js";
31
+ import"./cli-c8r99akr.js";
33
32
  import"./cli-q51yprfq.js";
34
33
  import"./cli-3er6gcsn.js";
35
34
  import"./cli-yatxqynm.js";
36
- import"./cli-b0f70z24.js";
37
- import"./cli-nexwh8zg.js";
35
+ import"./cli-mn8qkd8v.js";
36
+ import"./cli-g7k7zbcz.js";
38
37
  import"./cli-btbzvq95.js";
39
38
  import"./cli-1m2e086m.js";
40
- import"./cli-bzr0ftht.js";
39
+ import"./cli-wnb9b2g3.js";
41
40
  import"./cli-bd957dgb.js";
42
41
  import"./cli-pzxba7gw.js";
43
- import"./cli-8kgvmkak.js";
42
+ import"./cli-ypgba1a8.js";
44
43
  import"./cli-rfphkzh5.js";
45
- import"./cli-yshaazs1.js";
46
- import"./cli-xvdgasgy.js";
44
+ import"./cli-mkdsy1nq.js";
47
45
  import"./cli-3qhyh31j.js";
48
- import"./cli-jhm6hzjn.js";
46
+ import"./cli-xvdgasgy.js";
47
+ import"./cli-mxvnnv5q.js";
49
48
  import"./cli-7mm2r1kp.js";
50
49
  import"./cli-g5erf0zt.js";
51
50
  import"./cli-dmtrxqhg.js";
52
- import"./cli-tadfgd0t.js";
53
- import"./cli-ywybs5as.js";
54
- import"./cli-gd4favx9.js";
55
51
  import"./cli-agamgm0p.js";
56
52
  import"./cli-5c2j5yvx.js";
57
53
  import"./cli-1a2j50m0.js";
54
+ import"./cli-tadfgd0t.js";
55
+ import"./cli-ywybs5as.js";
58
56
  import"./cli-f9w1semm.js";
57
+ import"./cli-a35hzdve.js";
58
+ import"./cli-gd4favx9.js";
59
59
  import"./cli-ej6gbxfb.js";
60
- import"./cli-zsh093hk.js";
60
+ import"./cli-014vns2y.js";
61
61
  import"./cli-sd0mxa3c.js";
62
62
  import"./cli-w5e1d1vv.js";
63
- import"./cli-4r1sjfc4.js";
63
+ import"./cli-ymmc1zxg.js";
64
64
  import"./cli-mb75wpxf.js";
65
65
  import"./cli-zf8jjwex.js";
66
66
  import"./cli-wt7ccy4r.js";
@@ -20,68 +20,68 @@ import {
20
20
  stopWaitPoller,
21
21
  subscribeWaitToBus,
22
22
  validateTemplateVariables
23
- } from "./cli-df56tqdw.js";
23
+ } from "./cli-wydz3feg.js";
24
24
  import"./cli-xvc3q9br.js";
25
25
  import"./cli-mv2520nm.js";
26
26
  import"./cli-w0bwte75.js";
27
27
  import"./cli-re8z5p8p.js";
28
- import"./cli-0nhdwxd5.js";
29
- import"./cli-rggdq8wq.js";
30
- import"./cli-ysnyhws9.js";
28
+ import"./cli-tx2zvn23.js";
29
+ import"./cli-p8rt8spp.js";
30
+ import"./cli-v1pwxreq.js";
31
31
  import {
32
32
  findEntryNodes,
33
33
  getSuccessors
34
- } from "./cli-jvj6a0cv.js";
34
+ } from "./cli-577bxkf6.js";
35
35
  import"./cli-epan13p1.js";
36
36
  import"./cli-f14fvzag.js";
37
+ import"./cli-7mhy3ths.js";
38
+ import"./cli-v1w7pbd8.js";
37
39
  import"./cli-zt3w1cn1.js";
38
- import"./cli-f2n17zhp.js";
39
- import"./cli-feh3dkah.js";
40
- import"./cli-3dpj7atn.js";
41
- import"./cli-2x0e561b.js";
42
- import"./cli-pkke6geq.js";
40
+ import"./cli-km4x66j0.js";
43
41
  import"./cli-rb9m6rpe.js";
42
+ import"./cli-2x0e561b.js";
43
+ import"./cli-kw0jcfje.js";
44
44
  import"./cli-mzfth0bp.js";
45
- import"./cli-j2jbr8af.js";
46
45
  import"./cli-fad8m16k.js";
47
46
  import"./cli-bsakbbkm.js";
48
47
  import"./cli-zxg80zs9.js";
49
48
  import"./cli-51tf7ac3.js";
50
49
  import"./cli-ydt3zkwv.js";
51
- import"./cli-ecknp7p1.js";
50
+ import"./cli-c8r99akr.js";
52
51
  import"./cli-q51yprfq.js";
53
52
  import"./cli-3er6gcsn.js";
54
53
  import"./cli-yatxqynm.js";
55
- import"./cli-b0f70z24.js";
56
- import"./cli-nexwh8zg.js";
54
+ import"./cli-mn8qkd8v.js";
55
+ import"./cli-g7k7zbcz.js";
57
56
  import"./cli-btbzvq95.js";
58
57
  import"./cli-1m2e086m.js";
59
- import"./cli-bzr0ftht.js";
58
+ import"./cli-wnb9b2g3.js";
60
59
  import"./cli-bd957dgb.js";
61
60
  import"./cli-pzxba7gw.js";
62
- import"./cli-8kgvmkak.js";
61
+ import"./cli-ypgba1a8.js";
63
62
  import"./cli-rfphkzh5.js";
64
- import"./cli-yshaazs1.js";
65
- import"./cli-xvdgasgy.js";
63
+ import"./cli-mkdsy1nq.js";
66
64
  import"./cli-3qhyh31j.js";
67
- import"./cli-jhm6hzjn.js";
65
+ import"./cli-xvdgasgy.js";
66
+ import"./cli-mxvnnv5q.js";
68
67
  import"./cli-7mm2r1kp.js";
69
68
  import"./cli-g5erf0zt.js";
70
69
  import"./cli-dmtrxqhg.js";
71
- import"./cli-tadfgd0t.js";
72
- import"./cli-ywybs5as.js";
73
- import"./cli-gd4favx9.js";
74
70
  import"./cli-agamgm0p.js";
75
71
  import {
76
72
  interpolate
77
73
  } from "./cli-5c2j5yvx.js";
78
74
  import"./cli-1a2j50m0.js";
75
+ import"./cli-tadfgd0t.js";
76
+ import"./cli-ywybs5as.js";
79
77
  import"./cli-f9w1semm.js";
78
+ import"./cli-a35hzdve.js";
79
+ import"./cli-gd4favx9.js";
80
80
  import"./cli-ej6gbxfb.js";
81
- import"./cli-zsh093hk.js";
81
+ import"./cli-014vns2y.js";
82
82
  import"./cli-sd0mxa3c.js";
83
83
  import"./cli-w5e1d1vv.js";
84
- import"./cli-4r1sjfc4.js";
84
+ import"./cli-ymmc1zxg.js";
85
85
  import {
86
86
  workflowEventBus
87
87
  } from "./cli-mb75wpxf.js";
@@ -1,28 +1,29 @@
1
1
  import {
2
2
  ensureAuthorizationTokenOrThrow
3
- } from "./cli-j2jbr8af.js";
3
+ } from "./cli-kw0jcfje.js";
4
4
  import {
5
5
  init_oauth,
6
6
  listKeepAliveAuthorizations
7
- } from "./cli-yshaazs1.js";
8
- import"./cli-xvdgasgy.js";
7
+ } from "./cli-mkdsy1nq.js";
9
8
  import"./cli-3qhyh31j.js";
10
- import"./cli-jhm6hzjn.js";
9
+ import"./cli-xvdgasgy.js";
10
+ import"./cli-mxvnnv5q.js";
11
11
  import"./cli-7mm2r1kp.js";
12
12
  import"./cli-g5erf0zt.js";
13
13
  import"./cli-dmtrxqhg.js";
14
- import"./cli-tadfgd0t.js";
15
- import"./cli-ywybs5as.js";
16
- import"./cli-gd4favx9.js";
17
14
  import"./cli-agamgm0p.js";
18
15
  import"./cli-5c2j5yvx.js";
19
16
  import"./cli-1a2j50m0.js";
17
+ import"./cli-tadfgd0t.js";
18
+ import"./cli-ywybs5as.js";
20
19
  import"./cli-f9w1semm.js";
20
+ import"./cli-a35hzdve.js";
21
+ import"./cli-gd4favx9.js";
21
22
  import"./cli-ej6gbxfb.js";
22
- import"./cli-zsh093hk.js";
23
+ import"./cli-014vns2y.js";
23
24
  import"./cli-sd0mxa3c.js";
24
25
  import"./cli-w5e1d1vv.js";
25
- import"./cli-4r1sjfc4.js";
26
+ import"./cli-ymmc1zxg.js";
26
27
  import"./cli-zf8jjwex.js";
27
28
  import {
28
29
  init_secret_scrubber,
@@ -79,7 +80,7 @@ async function notifySlack(text) {
79
80
  return;
80
81
  }
81
82
  try {
82
- const { getSlackApp } = await import("./app-43vrdmv8.js");
83
+ const { getSlackApp } = await import("./app-nctetn1e.js");
83
84
  const app = getSlackApp();
84
85
  if (!app) {
85
86
  console.warn("[OAuth Keepalive] Slack not available, cannot send notification");