@visorcraft/idlehands 4.2.4 → 4.2.5

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 (306) hide show
  1. package/dist/{accounts-B4A5mL3Y.js → accounts-3HS_UAhJ.js} +1 -1
  2. package/dist/{accounts-CbaEMSlt.js → accounts-DLTODa_Z.js} +2 -2
  3. package/dist/{accounts-VbtNKne6.js → accounts-DgbTKQoW.js} +1 -1
  4. package/dist/{acp-cli-BF3FD1qw.js → acp-cli-BEpWQbqb.js} +12 -12
  5. package/dist/{agent-scope-DbNnv10G.js → agent-scope-RA0zXRpu.js} +3 -3
  6. package/dist/{agent-via-gateway-CugFJzVP.js → agent-via-gateway-Bhon8XVm.js} +7 -7
  7. package/dist/{agent-via-gateway-VdG-s4L4.js → agent-via-gateway-CS-8ChjV.js} +1 -1
  8. package/dist/{agent-via-gateway-DG8Axzn2.js → agent-via-gateway-DVTkXwmI.js} +2 -2
  9. package/dist/{agent-via-gateway-DwRsFLFS.js → agent-via-gateway-Drygi4ty.js} +6 -6
  10. package/dist/{agents-DDuWSZ0g.js → agents-dNuQ9qUa.js} +4 -4
  11. package/dist/{agents.config-8tuPdcTQ.js → agents.config-B_6rOTVW.js} +1 -1
  12. package/dist/{agents.config-A-WLFOiz.js → agents.config-DCNsF8yj.js} +2 -2
  13. package/dist/{anton-DqWaq0gv.js → anton-BmSsFmSP.js} +200 -35
  14. package/dist/{anton-sGTx_HDs.js → anton-Cw4-BgtA.js} +200 -35
  15. package/dist/{anton-CaPVBTOS.js → anton-D375-ufL.js} +200 -35
  16. package/dist/{anton-DCN6G6Up.js → anton-Di5VPZiI.js} +203 -38
  17. package/dist/{api-key-rotation-Bj8Q_8ST.js → api-key-rotation-B-FTJm5p.js} +2 -2
  18. package/dist/{audio-preflight-BEe3Go6e.js → audio-preflight-Dl1TO10w.js} +41 -41
  19. package/dist/{audio-preflight-CSSlgO89.js → audio-preflight-vD3mDc6w.js} +4 -4
  20. package/dist/{audit-DjUOBxVB.js → audit-CKeZnjft.js} +21 -21
  21. package/dist/{auth-choice-CnB-Ffeh.js → auth-choice-C8Tj46gd.js} +10 -10
  22. package/dist/{auth-choice-C0ADVtim.js → auth-choice-CYV4KLt7.js} +1 -1
  23. package/dist/{auth-choice-fHV4ZjtT.js → auth-choice-D12Wsf7w.js} +15 -15
  24. package/dist/{auth-choice.apply-helpers-fIm7h2DA.js → auth-choice.apply-helpers-CGcniL1T.js} +1 -1
  25. package/dist/{auth-DoNXQLDj.js → auth-heRVBxh2.js} +1 -1
  26. package/dist/{auth-store-Dqjgb5R1.js → auth-store-DDzIMy8_.js} +1 -1
  27. package/dist/{auth-token-ChjRQYCt.js → auth-token-BJq87X3o.js} +2 -2
  28. package/dist/{banner-C1dFMwdL.js → banner-B7_rwm3P.js} +1 -1
  29. package/dist/{bindings-DorAphZu.js → bindings-B59Q7nsk.js} +2 -2
  30. package/dist/{bonjour-discovery-Yzgl5gfZ.js → bonjour-discovery-DMslm8Hx.js} +2 -2
  31. package/dist/{browser-cli-B8GEKR0p.js → browser-cli-Ci6DpTnS.js} +19 -19
  32. package/dist/build-info.json +3 -3
  33. package/dist/bundled/boot-md/handler.js +2 -2
  34. package/dist/bundled/session-memory/handler.js +2 -2
  35. package/dist/{call-SK4sGwpN.js → call-BpWhjuOg.js} +4 -4
  36. package/dist/{channel-account-context-CBQ0TdW0.js → channel-account-context-CDbY5AIr.js} +1 -1
  37. package/dist/{channel-activity-D3e45uuU.js → channel-activity-DaCsrdWK.js} +3 -3
  38. package/dist/{channel-options-dvj7gQ75.js → channel-options-DTqGMcYU.js} +5 -5
  39. package/dist/{channel-options-DPIZ2OfB.js → channel-options-Dxc1A5iC.js} +1 -1
  40. package/dist/{channel-selection-DLfBD-c0.js → channel-selection-ZxRkxpuF.js} +2 -2
  41. package/dist/{channel-web-C022IdsV.js → channel-web-BPlapQS3.js} +2 -2
  42. package/dist/{channel-web-DAeB1zPN.js → channel-web-CgvDCMru.js} +26 -26
  43. package/dist/{channels-cli-DzA8ku51.js → channels-cli-BfUIc52d.js} +7 -7
  44. package/dist/{channels-cli-BdUt4Lf-.js → channels-cli-k45uGu5k.js} +104 -104
  45. package/dist/{channels-status-issues-DMvYh1lV.js → channels-status-issues-CDpWjdI3.js} +1 -1
  46. package/dist/{chrome-Do5potHV.js → chrome-DEnkfZ9p.js} +9 -9
  47. package/dist/{chrome-DeAzXWRb.js → chrome-VBsQfIrt.js} +4 -4
  48. package/dist/{chunk-DJjn34fF.js → chunk-ClMFHJu-.js} +1 -1
  49. package/dist/{clack-prompter-EMS8sO4h.js → clack-prompter-CvbZsmjW.js} +5 -5
  50. package/dist/{clawbot-cli-B8qqplom.js → clawbot-cli-uFgYrysW.js} +9 -9
  51. package/dist/cli/daemon-cli.js +1 -1
  52. package/dist/cli-BapK2rdH.js +162 -0
  53. package/dist/{cli-BC9fLKsk.js → cli-C6GCCnET.js} +2 -2
  54. package/dist/{client-Cagiy1nE.js → client-DtnD-ee9.js} +2 -2
  55. package/dist/{clipboard-BqjWohVl.js → clipboard-LsW7H0Y8.js} +1 -1
  56. package/dist/{command-registry-Bo2L5BJz.js → command-registry-DJb9jSNL.js} +10 -10
  57. package/dist/{commands-5UqnjBKV.js → commands-Dj5LalLo.js} +2 -2
  58. package/dist/{commands-registry-C1lIoXkL.js → commands-registry-CURlRZQJ.js} +5 -5
  59. package/dist/{completion-cli-CevdZ8t2.js → completion-cli-BXA0UZAn.js} +2 -2
  60. package/dist/{completion-cli-w7SY12wl.js → completion-cli-DqJEZMJt.js} +4 -4
  61. package/dist/{config-cli-D2221rb8.js → config-cli-97SkUuuT.js} +13 -13
  62. package/dist/{config-cli-C8s4mZF3.js → config-cli-BfaVUsj-.js} +1 -1
  63. package/dist/{config-guard-DwTygT00.js → config-guard-BdsOumqh.js} +23 -23
  64. package/dist/{config-validation-wUpXePGY.js → config-validation-BvKX6fPw.js} +2 -2
  65. package/dist/{configure-6COQEc8d.js → configure-CmTKkn3M.js} +21 -21
  66. package/dist/{configure-BpeVYPCY.js → configure-DpswIHZC.js} +3 -3
  67. package/dist/{control-ui-assets-CSrZ1shI.js → control-ui-assets-C7ZpN9hN.js} +1 -1
  68. package/dist/{cron-cli-Den58QGF.js → cron-cli-DQsnGQKs.js} +17 -17
  69. package/dist/{daemon-cli-CpCtUgS2.js → daemon-cli-DUg-s4LG.js} +14 -14
  70. package/dist/{daemon-install-BPEEr5XM.js → daemon-install-CYPo4M1M.js} +8 -8
  71. package/dist/{deliver-BqJFyWu7.js → deliver--kttnrER.js} +10 -10
  72. package/dist/{deliver-whAbSPLk.js → deliver-5FLCa6tB.js} +1 -1
  73. package/dist/{deps-DOxHxBHl.js → deps-BV_-fxNb.js} +1 -1
  74. package/dist/{deps-BTDAxEQ6.js → deps-Bc5yBM-U.js} +1 -1
  75. package/dist/{deps-B3svY-p3.js → deps-CDLYb9a7.js} +1 -1
  76. package/dist/{deps-Coo8Thxy.js → deps-IpeS3x5O.js} +6 -6
  77. package/dist/{devices-cli-HTdRxjTf.js → devices-cli-DKK65S9Z.js} +12 -12
  78. package/dist/{diagnostic-ztHDqZ1m.js → diagnostic-BECJfEvH.js} +3 -3
  79. package/dist/{diagnostic-BUKW2Q0G.js → diagnostic-ByHpt6q8.js} +1 -1
  80. package/dist/{diagnostics-C2vxSb6v.js → diagnostics-DmZbQ8Nc.js} +1 -1
  81. package/dist/{directory-cli-BQDn6Qin.js → directory-cli-Dz9iXeut.js} +16 -16
  82. package/dist/{dns-cli-lwfJKGdv.js → dns-cli-DD6hWsdc.js} +10 -10
  83. package/dist/{dock-DpA6CUDJ.js → dock-Y96MzKuM.js} +6 -6
  84. package/dist/{docs-cli-Jnv5gp25.js → docs-cli-cHkrTB2e.js} +9 -9
  85. package/dist/{doctor-completion-CCuJkHb8.js → doctor-completion-BkS6Phs6.js} +2 -2
  86. package/dist/{doctor-completion-CkCkSkfC.js → doctor-completion-WFEPRjgs.js} +1 -1
  87. package/dist/{doctor-config-flow-DcxVJJvh.js → doctor-config-flow-Ck4oCjfl.js} +13 -13
  88. package/dist/{emergency-stop-DZFe7oYv.js → emergency-stop-DKLc7AmD.js} +7 -7
  89. package/dist/{emergency-stop-DO0wn668.js → emergency-stop-DMTHxdvC.js} +2 -2
  90. package/dist/{emergency-stop-JMddgwUX.js → emergency-stop-Dxp2e3a9.js} +2 -2
  91. package/dist/emergency-stop-zy54uJoE.js +162 -0
  92. package/dist/{enable-ztZSnOGv.js → enable-o_s6PBsC.js} +2 -2
  93. package/dist/entry.js +1 -1
  94. package/dist/{env-dMo-pLSc.js → env-Bx-F45X5.js} +1 -1
  95. package/dist/{errors-BNr2qnai.js → errors-DZDuPc3M.js} +1 -1
  96. package/dist/{exec-B9xbr2pN.js → exec-CKHMT0tZ.js} +2 -2
  97. package/dist/{exec-approvals-allowlist-BzsyDGgt.js → exec-approvals-allowlist-Co2tJSEo.js} +1 -1
  98. package/dist/{exec-approvals-cli-2SjGVbIm.js → exec-approvals-cli-D6XUzs4j.js} +21 -21
  99. package/dist/{exec-safe-bin-runtime-policy-bEV0LvVh.js → exec-safe-bin-runtime-policy-DaoU9-ni.js} +2 -2
  100. package/dist/extensionAPI.js +7 -7
  101. package/dist/{fetch-guard-C-IWepjW.js → fetch-guard-yUZu1Vzc.js} +1 -1
  102. package/dist/{frontmatter-x0EBRtDF.js → frontmatter-D-sQ_Hqk.js} +2 -2
  103. package/dist/{gateway-cli-D6Sh2d9w.js → gateway-cli-E6DUzxEX.js} +9 -9
  104. package/dist/{gateway-cli-Cf7kqenc.js → gateway-cli-FNbwxOiN.js} +123 -123
  105. package/dist/{gateway-rpc-C_He5poS.js → gateway-rpc-BBFG1T-M.js} +3 -3
  106. package/dist/{gmail-setup-utils-D1VrLZhD.js → gmail-setup-utils-DRJTQOMM.js} +3 -3
  107. package/dist/{health-BavRGpi2.js → health-CGW71CVV.js} +15 -15
  108. package/dist/{health-j2mDzeUl.js → health-D60h_a2w.js} +1 -1
  109. package/dist/{health-format-CWIquyOr.js → health-format-Ba_hOaT2.js} +1 -1
  110. package/dist/{help-format-D7QsjOW4.js → help-format-CMAqOikG.js} +1 -1
  111. package/dist/{hooks-cli-DDAeDBcO.js → hooks-cli-BnVSeWIo.js} +3 -3
  112. package/dist/{hooks-cli-AnCnOcQY.js → hooks-cli-DaWPRdgZ.js} +93 -93
  113. package/dist/{hooks-status-BBvzI_rQ.js → hooks-status-DNGo2G8Q.js} +3 -3
  114. package/dist/{image-BAsQlUqT.js → image-C_aN5P6-.js} +1 -1
  115. package/dist/{image-BkrcRFPe.js → image-DSDEbSiO.js} +7 -7
  116. package/dist/{image-ops-CGnAhRRV.js → image-ops-BU-VdLZu.js} +1 -1
  117. package/dist/index.js +99 -99
  118. package/dist/{inspect-BOW-hTlT.js → inspect-ISQZuNM5.js} +1 -1
  119. package/dist/{installs-DGfrRYWX.js → installs-CNubze2L.js} +4 -4
  120. package/dist/{ir-DBqjL1SG.js → ir-VncGpwA1.js} +4 -4
  121. package/dist/{lifecycle-core-DOL5vqsF.js → lifecycle-core-B6UoqYTJ.js} +5 -5
  122. package/dist/{links-DIG3qrf5.js → links-15764jZB.js} +1 -1
  123. package/dist/llm-slug-generator.js +2 -2
  124. package/dist/{local-roots-B-lmQdZs.js → local-roots-q0xbefkf.js} +4 -4
  125. package/dist/{logging-BK2fjjMe.js → logging-B0-9lotb.js} +1 -1
  126. package/dist/{login-BVf_DBja.js → login-CfUhrgWT.js} +6 -6
  127. package/dist/{login-qr-V1EwcFLt.js → login-qr-DBMsUxgL.js} +10 -10
  128. package/dist/{logs-cli-BgrYblUE.js → logs-cli-4VQ9Iwiw.js} +13 -13
  129. package/dist/{manager-DayGME0K.js → manager-BMAFgXyU.js} +10 -10
  130. package/dist/{manifest-registry-cOeAg4W6.js → manifest-registry-Bak1x76G.js} +2 -2
  131. package/dist/{markdown-tables-BQ8czvs_.js → markdown-tables-DZClqsNo.js} +1 -1
  132. package/dist/{memory-cli-D_bFq_Q1.js → memory-cli-CUGwnVIY.js} +12 -12
  133. package/dist/{message-channel-CRSTffWx.js → message-channel-DVauVtrg.js} +1 -1
  134. package/dist/{model-Di6JkHyx.js → model-C-icShH2.js} +2 -2
  135. package/dist/{model-catalog-D_KsCB5j.js → model-catalog-D9no0CH2.js} +4 -4
  136. package/dist/{model-picker-CM_QFlL4.js → model-picker-BkXoTOiA.js} +4 -4
  137. package/dist/{model-selection-Df4-bBn3.js → model-selection-0dGxYGp8.js} +12 -12
  138. package/dist/{models-RiKkYhfQ.js → models-C1ouQF8k.js} +2 -2
  139. package/dist/{models-cli-CSSZi7-P.js → models-cli-BhFUh61j.js} +4 -4
  140. package/dist/{models-cli-B4HXQG2Q.js → models-cli-CxEFLoMt.js} +98 -98
  141. package/dist/{models-config-zq6L0fug.js → models-config-C5A1wDWh.js} +2 -2
  142. package/dist/{node-cli-PVcj1bnA.js → node-cli-BYzjxmUY.js} +33 -33
  143. package/dist/{node-service-IG3YtMJq.js → node-service-C3vyxHLA.js} +1 -1
  144. package/dist/{nodes-cli-DKj4NkKf.js → nodes-cli-kNOtp0U0.js} +21 -21
  145. package/dist/{nodes-screen-CK0vmyQx.js → nodes-screen-CcpPaFxa.js} +1 -1
  146. package/dist/{note--5AAjfvH.js → note-69EfBEU-.js} +2 -2
  147. package/dist/{npm-registry-spec-B81IsQOs.js → npm-registry-spec-BCbbfIhX.js} +2 -2
  148. package/dist/{npm-resolution-D1b0Eoa4.js → npm-resolution-D30nzRfu.js} +4 -4
  149. package/dist/{npm-resolution-vCuR0Tv5.js → npm-resolution-Ds0qg1EX.js} +1 -1
  150. package/dist/{onboard-enaQTAES.js → onboard-Cv6q6Usf.js} +9 -9
  151. package/dist/{onboard-Dcj7w5Sb.js → onboard-NcA_odSQ.js} +2 -2
  152. package/dist/{onboard-channels-BT-vQKYZ.js → onboard-channels-C1E5DpTR.js} +17 -17
  153. package/dist/{onboard-channels-jrbhR8dl.js → onboard-channels-bfoS7x6P.js} +1 -1
  154. package/dist/{onboard-custom-C_4nk_e8.js → onboard-custom-DUbzMMu7.js} +4 -4
  155. package/dist/{onboard-helpers-CXjQtadC.js → onboard-helpers-mzy38DiC.js} +7 -7
  156. package/dist/{onboard-hooks-CuOJrgfu.js → onboard-hooks-D9teGxfH.js} +7 -7
  157. package/dist/{onboard-remote-B-bN7EmV.js → onboard-remote-LCBHijVE.js} +3 -3
  158. package/dist/{onboard-skills-BVmcgCzz.js → onboard-skills-jFY9gaOu.js} +4 -4
  159. package/dist/{onboarding-fRvJJ_jS.js → onboarding-CX8a934a.js} +16 -16
  160. package/dist/{onboarding-BpiNSUID.js → onboarding-CpGBbVTj.js} +3 -3
  161. package/dist/{onboarding.finalize-B557eJgx.js → onboarding.finalize-BnKQeFN8.js} +7 -7
  162. package/dist/{onboarding.finalize-6q8jh9r4.js → onboarding.finalize-CRgpFQIz.js} +99 -99
  163. package/dist/{onboarding.gateway-config-BinQe57V.js → onboarding.gateway-config-Btu2gzgr.js} +21 -21
  164. package/dist/{openai-model-default-CK1wUY3u.js → openai-model-default-7J6cw1rA.js} +2 -2
  165. package/dist/{outbound-DClHNQfl.js → outbound-DPTxwchq.js} +6 -6
  166. package/dist/{outbound-attachment-Cz80loTd.js → outbound-attachment-Bot3bRnK.js} +2 -2
  167. package/dist/{pairing-cli-By_hykOY.js → pairing-cli-jwx6hMsM.js} +15 -15
  168. package/dist/{pairing-labels-Dm-DUGGI.js → pairing-labels-ChQJzbS9.js} +1 -1
  169. package/dist/{pairing-store-CPUUuW7M.js → pairing-store-CPpEEQJO.js} +3 -3
  170. package/dist/{path-env-CWIJihhd.js → path-env-CKSLQUS1.js} +1 -1
  171. package/dist/{paths-CBF9EBzh.js → paths-B-CLQ5RT.js} +1 -1
  172. package/dist/{pi-embedded-D35RiR0f.js → pi-embedded-0YMQWOc5.js} +32 -28
  173. package/dist/{pi-embedded-CMll1riT.js → pi-embedded-BO8wzB4O.js} +17 -13
  174. package/dist/{pi-embedded-helpers-D675DgwP.js → pi-embedded-helpers-BCsfqpDt.js} +4 -4
  175. package/dist/{pi-embedded-helpers-Ct2rwp-P.js → pi-embedded-helpers-C2j0LfJC.js} +4 -4
  176. package/dist/{pi-model-discovery-BEKzIGSg.js → pi-model-discovery-BIP3RjXl.js} +1 -1
  177. package/dist/{pi-tools.policy-GzRj_NVc.js → pi-tools.policy-DfITIKZj.js} +6 -6
  178. package/dist/{plugin-auto-enable-CU8IfpBV.js → plugin-auto-enable-7DUxMy6A.js} +5 -5
  179. package/dist/{plugin-registry-DMdIUK_2.js → plugin-registry-Cp2q0pVP.js} +1 -1
  180. package/dist/{plugin-registry-DdywtXL5.js → plugin-registry-DceNUcJc.js} +4 -4
  181. package/dist/plugin-sdk/{agent-via-gateway-W4SFqR3m.js → agent-via-gateway-MuDsrNW6.js} +2 -2
  182. package/dist/plugin-sdk/{anton-DgXekgcy.js → anton-CkJKOeKT.js} +200 -35
  183. package/dist/plugin-sdk/{channel-web-DbwkbMKY.js → channel-web-B6pGyJpM.js} +2 -2
  184. package/dist/plugin-sdk/{deps-HLNhWkFy.js → deps-FuyQakmK.js} +1 -1
  185. package/dist/plugin-sdk/{emergency-stop-BXP-MZHW.js → emergency-stop-Ci4JC4dU.js} +2 -2
  186. package/dist/plugin-sdk/index.js +3 -3
  187. package/dist/plugin-sdk/{reply-BEnj9--x.js → reply-BTVimsoK.js} +17 -13
  188. package/dist/plugin-sdk/{web-TsEAe4Bs.js → web-HiiN5NkP.js} +3 -3
  189. package/dist/{plugins-Bj6rzE-9.js → plugins-D46VZh7u.js} +5 -5
  190. package/dist/{plugins-cli-CkqS4cmo.js → plugins-cli-2wK7R85Y.js} +3 -3
  191. package/dist/{plugins-cli-DHVkVGke.js → plugins-cli-BaQt7jqk.js} +95 -95
  192. package/dist/{ports-D3FuSfMU.js → ports-B2o0FSFD.js} +2 -2
  193. package/dist/{ports-BJ6Xu_G6.js → ports-SQy1d-RL.js} +3 -3
  194. package/dist/{program-BeB3v4zk.js → program-CbwFv75G.js} +8 -8
  195. package/dist/{program-context-w-tdgurY.js → program-context-Ck-chzM_.js} +43 -43
  196. package/dist/{progress-BN8aygvh.js → progress-BQLz1r3L.js} +1 -1
  197. package/dist/{prompt-select-styled-CE6lL16-.js → prompt-select-styled-DJ5ONfKl.js} +4 -4
  198. package/dist/{prompt-select-styled-CGdWABH5.js → prompt-select-styled-DigZiJWM.js} +35 -35
  199. package/dist/{prompt-style-BRwf6dfp.js → prompt-style-kmKiCZnm.js} +1 -1
  200. package/dist/{provider-auth-helpers-C72Fb__o.js → provider-auth-helpers-Ci_EGvif.js} +7 -7
  201. package/dist/{provider-auth-helpers-D0RhcC2q.js → provider-auth-helpers-DGTDTeE5.js} +1 -1
  202. package/dist/{push-apns-Nj66xHk1.js → push-apns-BSYjGCn9.js} +5 -5
  203. package/dist/{push-apns-CeEArjp5.js → push-apns-Dz4hOY07.js} +1 -1
  204. package/dist/{pw-ai-DRVoaq_u.js → pw-ai-7i9eGnLh.js} +13 -13
  205. package/dist/{pw-ai-yrIWfcWX.js → pw-ai-DjmrIQle.js} +1 -1
  206. package/dist/{qmd-manager-SkIM31ge.js → qmd-manager-B-qeywfQ.js} +6 -6
  207. package/dist/{qr-cli-BsFvbHQy.js → qr-cli-CSt5ihwG.js} +4 -4
  208. package/dist/{query-expansion-BIsWftgR.js → query-expansion-Clts_AGz.js} +2 -2
  209. package/dist/{redact-CIBM9Zli.js → redact-B_4KNlXs.js} +1 -1
  210. package/dist/{redact-snapshot-DQ_VN7gO.js → redact-snapshot-BbEVKv0k.js} +2 -2
  211. package/dist/{register.agent-BaiV-Kp5.js → register.agent-BZh3UWw3.js} +9 -9
  212. package/dist/{register.agent-CoADvHMz.js → register.agent-CTPc2Q9m.js} +110 -110
  213. package/dist/{register.configure-COg3mvRi.js → register.configure-BzTxX7SG.js} +8 -8
  214. package/dist/register.configure-vVDARCph.js +168 -0
  215. package/dist/{register.maintenance-MELPxVyx.js → register.maintenance-BNHEV-po.js} +9 -9
  216. package/dist/{register.maintenance-CjxM0oKc.js → register.maintenance-DTXn32on.js} +108 -108
  217. package/dist/{register.message-kzRNe_7l.js → register.message-BYWAEsKP.js} +3 -3
  218. package/dist/{register.message-CbssH6ek.js → register.message-CHf51taw.js} +90 -90
  219. package/dist/{register.onboard-CAbo-VF1.js → register.onboard-CxwDhXRS.js} +29 -29
  220. package/dist/{register.onboard-CJeQ64iC.js → register.onboard-vruDRZdG.js} +2 -2
  221. package/dist/{register.orchestrator-anton-CdVQ30at.js → register.orchestrator-anton-GSAFxzGa.js} +2 -2
  222. package/dist/{register.orchestrator-anton-CBnyqoHX.js → register.orchestrator-anton-qBr2ZYrk.js} +7 -7
  223. package/dist/{register.setup-XGT1lV6o.js → register.setup-B0zmlTXV.js} +2 -2
  224. package/dist/{register.setup-DEH8S3Y5.js → register.setup-DlFQIXoR.js} +31 -31
  225. package/dist/{register.status-health-sessions-0ppExIVs.js → register.status-health-sessions-16paRP9f.js} +101 -101
  226. package/dist/{register.status-health-sessions-jEhyhioj.js → register.status-health-sessions-CtXhn9Dq.js} +4 -4
  227. package/dist/{register.subclis-DQx75Ni7.js → register.subclis-lskGgus9.js} +9 -9
  228. package/dist/{replies-CWMglpIw.js → replies-hSFVxL4h.js} +3 -3
  229. package/dist/{reply-Du7Q5RJl.js → reply-DfRr_KdS.js} +120 -116
  230. package/dist/{reply-prefix-CXLm7TNq.js → reply-prefix-C3y4zpTl.js} +1 -1
  231. package/dist/{resolve-route-BrHTn_2g.js → resolve-route-D_AbcmD6.js} +4 -4
  232. package/dist/{retry-B7zUL1Mv.js → retry-Db05aSB8.js} +1 -1
  233. package/dist/{rpc-Dp_JZNAZ.js → rpc-Cf9OK5Yk.js} +3 -3
  234. package/dist/{run-main-D56C-iq4.js → run-main-Bj-8MZGb.js} +15 -15
  235. package/dist/{runner-Bv_BA3vd.js → runner-CZW_eyf2.js} +1 -1
  236. package/dist/{runner-p3KLBBEt.js → runner-DzszLzI4.js} +11 -11
  237. package/dist/{runtime-DELkrqga.js → runtime-XmXLaHNk.js} +3 -3
  238. package/dist/{sandbox-cEpEHVD-.js → sandbox-DcUw5h3p.js} +8 -8
  239. package/dist/{sandbox-cli-B7kOJiLh.js → sandbox-cli-DGvJ7Eeq.js} +32 -32
  240. package/dist/{secrets-cli-COGPFjdu.js → secrets-cli-CR3h2TBy.js} +14 -14
  241. package/dist/{security-cli-Db4ZYVER.js → security-cli-B9_LV2po.js} +42 -42
  242. package/dist/{send-DA-ryUJS.js → send--lzpNy4f.js} +14 -14
  243. package/dist/{send-D_ARyjSf.js → send-C4v0Leny.js} +6 -6
  244. package/dist/{send-D-UmmCCj.js → send-DQiw_nGD.js} +7 -7
  245. package/dist/{send-DnscWRVE.js → send-DuwdEkLw.js} +7 -7
  246. package/dist/{send-BhbOA8rP.js → send-DwdHiC7_.js} +10 -10
  247. package/dist/{server-DLOBjQtf.js → server-D6MltJIF.js} +21 -21
  248. package/dist/{server-context-CvZnSu9L.js → server-context-DI0W_H7R.js} +11 -11
  249. package/dist/{server-lifecycle-CfZbDiFe.js → server-lifecycle-B5PlrlbG.js} +2 -2
  250. package/dist/{server-node-events-C1uC6pPJ.js → server-node-events-B_LUFrA_.js} +89 -89
  251. package/dist/{server-node-events-h-U5Mfvv.js → server-node-events-Benu2lR2.js} +3 -3
  252. package/dist/{service-fKr0VnMd.js → service-C8NMS3m_.js} +1 -1
  253. package/dist/{session-BKdoiopW.js → session-CdnrRhb4.js} +2 -2
  254. package/dist/{sessions-uS8Ko6pU.js → sessions-BtPXimXQ.js} +6 -6
  255. package/dist/{shared-Cvf3nhuq.js → shared-CpDPo3hJ.js} +2 -2
  256. package/dist/{shared-pSfUCPxh.js → shared-DpLSpJIl.js} +1 -1
  257. package/dist/{skill-commands-BY4BNcfR.js → skill-commands-BFzmZAfo.js} +6 -6
  258. package/dist/{skill-scanner-BFXxq_hZ.js → skill-scanner-D7mzXRXd.js} +1 -1
  259. package/dist/{skills-DuPZzvnK.js → skills-DlvDyK8L.js} +4 -4
  260. package/dist/{skills-cli-wSg-syqz.js → skills-cli-BhKGhjbO.js} +10 -10
  261. package/dist/{skills-install-CQihNd2n.js → skills-install-tr6wRWZj.js} +6 -6
  262. package/dist/{skills-status-D7aU-6Ob.js → skills-status-qjQ8XP0h.js} +4 -4
  263. package/dist/{status-DmPnFNgt.js → status-DxcdgCyX.js} +2 -2
  264. package/dist/{status-CQ18Gd-d.js → status-DzCllHYZ.js} +24 -24
  265. package/dist/{status.update-Cri65g-V.js → status.update-CTi6vuWj.js} +1 -1
  266. package/dist/{store-CR1Ag5tw.js → store-kH9wHHbO.js} +2 -2
  267. package/dist/{subagent-registry-CPeVtSZk.js → subagent-registry-BcpHnckA.js} +17 -13
  268. package/dist/{subsystem-BTkYq-SM.js → subsystem-CGZX2PBV.js} +1 -1
  269. package/dist/{system-cli-DSF87U3I.js → system-cli-DyVZ5udc.js} +13 -13
  270. package/dist/{system-run-approval-context-DtT5msEN.js → system-run-approval-context-CISBXlNw.js} +1 -1
  271. package/dist/{system-run-command-CrHlKsQv.js → system-run-command-qJdgzxLp.js} +1 -1
  272. package/dist/{systemd-C9CCJ2y5.js → systemd-CaCR5CyM.js} +2 -2
  273. package/dist/{systemd-hints-D4_AmIA0.js → systemd-hints-DHu-HVFx.js} +2 -2
  274. package/dist/{systemd-linger-BRBtRm6O.js → systemd-linger-B7XlUHk_.js} +2 -2
  275. package/dist/{table-PG064F0C.js → table-B9AmL3M1.js} +2 -2
  276. package/dist/{tables-Ca5i1iM6.js → tables-g9xkflht.js} +1 -1
  277. package/dist/{tailscale-Dr3FvwTm.js → tailscale-B5Irc_Bi.js} +2 -2
  278. package/dist/{target-errors-BhRMVh6a.js → target-errors-bLIVFsbF.js} +2 -2
  279. package/dist/{tokens-DY5TC4xI.js → tokens-Dg-QZ_pN.js} +1 -1
  280. package/dist/{tool-display-1HTlk4mF.js → tool-display-Dac7lHGW.js} +2 -2
  281. package/dist/{tool-images-ByP8vQ_u.js → tool-images-CHqepyF_.js} +2 -2
  282. package/dist/{tool-loop-detection-BxLycal4.js → tool-loop-detection-C5VjmhPJ.js} +2 -2
  283. package/dist/{trash-CHnKIQrP.js → trash-CUFiyQN5.js} +1 -1
  284. package/dist/{tui-BmvrLAnW.js → tui-Bne3YNiw.js} +9 -9
  285. package/dist/{tui-cli-Dm28GC4T.js → tui-cli-D0Z-rcUe.js} +39 -39
  286. package/dist/{update-D96LyJ5s.js → update-D79ppbMQ.js} +3 -3
  287. package/dist/{update-cli-Di_N9xCB.js → update-cli-B53rJqAV.js} +115 -115
  288. package/dist/{update-cli-DraOIip8.js → update-cli-CTETjvrF.js} +9 -9
  289. package/dist/{update-runner-BQlZS5zz.js → update-runner-BGAdvd0c.js} +1 -1
  290. package/dist/{update-runner-BJRwxU_y.js → update-runner-BOGIWX18.js} +5 -5
  291. package/dist/{utils-BfmeFj7S.js → utils-CXzXXV2o.js} +2 -2
  292. package/dist/{web-DzfcaLnK.js → web-3nv8mK11.js} +3 -3
  293. package/dist/{web-CrYZNxAg.js → web-C7HXffph.js} +8 -8
  294. package/dist/web-CqOVupWI.js +123 -0
  295. package/dist/{web-Cp8ceOUo.js → web-Dwj9igbL.js} +3 -3
  296. package/dist/{webhooks-cli-DLVMYO3R.js → webhooks-cli-2N03q0iY.js} +11 -11
  297. package/dist/{whatsapp-actions-De803Fwb.js → whatsapp-actions-Cms8wQM1.js} +22 -22
  298. package/dist/{widearea-dns-DJVz6r4U.js → widearea-dns-FDdFH5E8.js} +1 -1
  299. package/dist/{with-timeout-Bz8F3xNq.js → with-timeout-DEdycYxq.js} +5 -5
  300. package/dist/{workspace-BHN1rb4L.js → workspace-D3pARwoB.js} +3 -3
  301. package/dist/{workspace-dirs-C34pt6Pa.js → workspace-dirs-SsExQ3Bz.js} +1 -1
  302. package/package.json +4 -1
  303. package/dist/cli-VNJdJ9_T.js +0 -162
  304. package/dist/emergency-stop-BNon2wpA.js +0 -162
  305. package/dist/register.configure-Dhfhctpj.js +0 -168
  306. package/dist/web-D77Xu1Fp.js +0 -123
@@ -77,13 +77,126 @@ function markTaskDone(markdown, lineNo) {
77
77
  lines[idx] = (lines[idx] ?? "").replace(/^(\s*)- \[ \] /, "$1- [x] ");
78
78
  return `${lines.join("\n")}\n`;
79
79
  }
80
- function buildDirectTaskPrompt(task) {
80
+ function isJsonTaskFile(taskFile) {
81
+ return taskFile.toLowerCase().endsWith(".json");
82
+ }
83
+ function parsePendingTasksFromJson(jsonText) {
84
+ const data = JSON.parse(jsonText);
85
+ const pending = [];
86
+ const joinDetails = (parentDetails, subtasks) => {
87
+ const details = [];
88
+ if (typeof parentDetails === "string" && parentDetails.trim()) details.push(parentDetails.trim());
89
+ const lines = [];
90
+ for (const sub of subtasks) {
91
+ if (!sub || typeof sub !== "object") continue;
92
+ const subObj = sub;
93
+ if (subObj.done === true) continue;
94
+ const name = typeof subObj.name === "string" ? subObj.name.trim() : "";
95
+ if (!name) continue;
96
+ const subDetails = typeof subObj.details === "string" ? subObj.details.trim() : "";
97
+ lines.push(subDetails ? `- ${name}: ${subDetails}` : `- ${name}`);
98
+ }
99
+ if (lines.length > 0) details.push(`Subtasks:\n${lines.join("\n")}`);
100
+ return details.length > 0 ? details.join("\n\n") : void 0;
101
+ };
102
+ const pushTask = (jsonPath, obj) => {
103
+ if (obj.done === true) return;
104
+ const text = typeof obj.name === "string" ? obj.name.trim() : "";
105
+ if (!text) return;
106
+ const subtasks = Array.isArray(obj.subtasks) ? obj.subtasks : [];
107
+ pending.push({
108
+ text,
109
+ details: joinDetails(obj.details, subtasks),
110
+ jsonPath
111
+ });
112
+ };
113
+ if (data && typeof data === "object") {
114
+ const root = data;
115
+ const tasks = root.tasks;
116
+ if (Array.isArray(tasks)) for (let i = 0; i < tasks.length; i++) {
117
+ const task = tasks[i];
118
+ if (!task || typeof task !== "object") continue;
119
+ pushTask(["tasks", i], task);
120
+ }
121
+ else if ("name" in root || "subtasks" in root) pushTask([], root);
122
+ }
123
+ return {
124
+ pending,
125
+ data
126
+ };
127
+ }
128
+ function markJsonTaskDone(data, jsonPath) {
129
+ if (!jsonPath) return;
130
+ let cur = data;
131
+ for (const key of jsonPath) {
132
+ if (typeof key === "number") {
133
+ if (!Array.isArray(cur)) return;
134
+ cur = cur[key];
135
+ continue;
136
+ }
137
+ if (!cur || typeof cur !== "object" || Array.isArray(cur)) return;
138
+ cur = cur[key];
139
+ }
140
+ if (!cur || typeof cur !== "object" || Array.isArray(cur)) return;
141
+ cur.done = true;
142
+ }
143
+ function formatTaskForPrompt(task) {
144
+ if (task.details) return `${task.text}
145
+ Details: ${task.details}`;
146
+ return task.text;
147
+ }
148
+ function looksLikeVersionBumpTask(taskText) {
149
+ return /bump\s+version/i.test(taskText) || /version\s+(to|\d+\.)/i.test(taskText);
150
+ }
151
+ function allowsNoRepoChanges(taskText) {
152
+ return /(review|verify|ensure|confirm|check)/i.test(taskText) && /(doc|docs|documentation|readme)/i.test(taskText);
153
+ }
154
+ async function ensureRepoCleanOrThrow(cwd) {
155
+ const { stdout } = await execFile$1("git", ["status", "--porcelain"], { cwd });
156
+ if (stdout.split(/\r?\n/).map((line) => line.trimEnd()).filter(Boolean).map((line) => line.slice(3).trim().replace(/\\/g, "/")).filter((file) => file && !file.startsWith(".agents/tasks/")).length > 0) throw new Error(`Anton requires a clean git working tree. Dirty repo at: ${cwd}`);
157
+ }
158
+ async function hardCleanRepo(cwd) {
159
+ await execFile$1("git", ["reset", "--hard"], { cwd });
160
+ await execFile$1("git", [
161
+ "clean",
162
+ "-fd",
163
+ "-e",
164
+ ".agents/tasks",
165
+ "-e",
166
+ "node_modules"
167
+ ], { cwd });
168
+ }
169
+ async function commitAllIfDirty(cwd, message) {
170
+ const { stdout } = await execFile$1("git", ["status", "--porcelain"], { cwd });
171
+ if (stdout.trim().length === 0) return;
172
+ await execFile$1("git", ["add", "-A"], { cwd });
173
+ try {
174
+ await execFile$1("git", [
175
+ "restore",
176
+ "--staged",
177
+ ".agents/tasks"
178
+ ], { cwd });
179
+ } catch {}
180
+ const { stdout: staged } = await execFile$1("git", [
181
+ "diff",
182
+ "--cached",
183
+ "--name-only"
184
+ ], { cwd });
185
+ if (staged.trim().length === 0) return;
186
+ await execFile$1("git", [
187
+ "commit",
188
+ "-m",
189
+ message
190
+ ], { cwd });
191
+ }
192
+ function buildDirectTaskPrompt(task, opts) {
193
+ const skipTests = Boolean(opts?.skipTests);
81
194
  return [
82
195
  "You are executing one item from a managed checklist.",
83
196
  `Task: ${task}`,
84
197
  "Rules:",
85
198
  "1) Make the minimal code changes required for this task.",
86
- "2) Run targeted tests for your change.",
199
+ skipTests ? "2) Skip tests for this task unless you changed executable code." : "2) Run targeted tests for your change.",
87
200
  "3) Return a concise completion summary."
88
201
  ].join("\n");
89
202
  }
@@ -137,7 +250,8 @@ function buildReviewPrompt(planFilePath) {
137
250
 
138
251
  Do not skip reading the file. Do not return JSON without first reading and updating the plan.`;
139
252
  }
140
- function buildImplementationPrompt(task, planFilePath) {
253
+ function buildImplementationPrompt(task, planFilePath, opts) {
254
+ const skipTests = Boolean(opts?.skipTests);
141
255
  return [
142
256
  `Complete this task: ${task}`,
143
257
  "",
@@ -148,11 +262,12 @@ function buildImplementationPrompt(task, planFilePath) {
148
262
  "Describing changes in text or showing diffs without applying them does NOT count.",
149
263
  "Do not ask for confirmation — apply the changes now.",
150
264
  "",
151
- "After making the edits, run any verification steps from the plan.",
265
+ skipTests ? "Skip tests for this task unless you changed executable code." : "After making the edits, run any verification steps from the plan.",
152
266
  "Then return a brief summary of what you changed."
153
267
  ].join("\n");
154
268
  }
155
- function buildImplementationRetryPrompt(task, planFilePath) {
269
+ function buildImplementationRetryPrompt(task, planFilePath, opts) {
270
+ const skipTests = Boolean(opts?.skipTests);
156
271
  return [
157
272
  "Your previous implementation attempt made zero repository changes.",
158
273
  `Task: ${task}`,
@@ -162,7 +277,7 @@ function buildImplementationRetryPrompt(task, planFilePath) {
162
277
  "Required sequence:",
163
278
  "1) Read the plan file.",
164
279
  "2) Use edit/write to modify repository files.",
165
- "3) Optionally run verification.",
280
+ skipTests ? "3) Skip tests for this task unless you changed executable code." : "3) Optionally run verification.",
166
281
  "4) Return a short summary.",
167
282
  "",
168
283
  "If you only provide analysis/diff text without edit/write tool calls, this attempt fails."
@@ -247,7 +362,7 @@ async function loadAntonConfig() {
247
362
  }
248
363
  }
249
364
  async function runAgentTask(args) {
250
- const { agentCliCommand } = await import("./agent-via-gateway-DG8Axzn2.js");
365
+ const { agentCliCommand } = await import("./agent-via-gateway-DVTkXwmI.js");
251
366
  const extraSystemPrompt = args.workspaceDir ? `Your working directory is: ${args.workspaceDir}\nAll file paths are relative to this directory. Use this as your cwd for all operations.` : void 0;
252
367
  const result = await agentCliCommand({
253
368
  message: args.message,
@@ -391,8 +506,11 @@ async function runDiscoveryPhase(args) {
391
506
  task: `Discovery (attempt ${attempt + 1})`,
392
507
  sessionId
393
508
  });
509
+ const discoveryRepoCwd = args.workspaceDir ? path.resolve(args.workspaceDir) : path.dirname(args.taskFile);
510
+ await hardCleanRepo(discoveryRepoCwd);
511
+ await ensureRepoCleanOrThrow(discoveryRepoCwd);
394
512
  const firstPass = await runAgentTask({
395
- message: buildDiscoveryPrompt(args.task.text, args.taskFile, planFile),
513
+ message: buildDiscoveryPrompt(formatTaskForPrompt(args.task), args.taskFile, planFile),
396
514
  sessionId,
397
515
  timeout: args.timeout,
398
516
  agent: args.agent,
@@ -460,8 +578,10 @@ async function runDiscoveryPhase(args) {
460
578
  task: `Discovery repair (attempt ${attempt + 1})`,
461
579
  sessionId: repairSessionId
462
580
  });
581
+ await hardCleanRepo(discoveryRepoCwd);
582
+ await ensureRepoCleanOrThrow(discoveryRepoCwd);
463
583
  const repairPass = await runAgentTask({
464
- message: buildDiscoveryRepairPrompt(args.task.text, args.taskFile, declaredPlanFile),
584
+ message: buildDiscoveryRepairPrompt(formatTaskForPrompt(args.task), args.taskFile, declaredPlanFile),
465
585
  sessionId: repairSessionId,
466
586
  timeout: args.timeout,
467
587
  agent: args.agent,
@@ -559,6 +679,9 @@ async function runReviewPhase(args) {
559
679
  task: "Requirements review",
560
680
  sessionId
561
681
  });
682
+ const reviewRepoCwd = args.workspaceDir ? path.resolve(args.workspaceDir) : process.cwd();
683
+ await hardCleanRepo(reviewRepoCwd);
684
+ await ensureRepoCleanOrThrow(reviewRepoCwd);
562
685
  await runAgentTask({
563
686
  message: buildReviewPrompt(args.planFile),
564
687
  sessionId,
@@ -594,7 +717,14 @@ async function runReviewPhase(args) {
594
717
  }
595
718
  async function runAnton(args) {
596
719
  const filePath = path.resolve(args.taskFile);
597
- const pending = parsePendingTasks(await fs.readFile(filePath, "utf8"));
720
+ const raw = await fs.readFile(filePath, "utf8");
721
+ let pending = [];
722
+ let jsonData;
723
+ if (isJsonTaskFile(filePath)) {
724
+ const parsed = parsePendingTasksFromJson(raw);
725
+ pending = parsed.pending;
726
+ jsonData = parsed.data;
727
+ } else pending = parsePendingTasks(raw);
598
728
  const notify = args.onProgress ?? (async () => {});
599
729
  if (args.dryRun) {
600
730
  args.runtime.log(`Dry run: ${pending.length} pending task(s)`);
@@ -627,6 +757,8 @@ async function runAnton(args) {
627
757
  const { loadConfig } = await import("./model-selection-1MMYqY6M.js").then((n) => n.I);
628
758
  const cfg = loadConfig();
629
759
  const defaultTimeout = String(Number.isFinite(args.timeoutSec) && (args.timeoutSec ?? 0) > 0 ? args.timeoutSec : cfg.agents?.defaults?.timeoutSeconds ?? taskTimeout);
760
+ const repoCwd = args.workspaceDir ? path.resolve(args.workspaceDir) : path.dirname(filePath);
761
+ await ensureRepoCleanOrThrow(repoCwd);
630
762
  await acquireLock(Boolean(args.force));
631
763
  const startedAt = Date.now();
632
764
  await writeState({
@@ -661,6 +793,9 @@ async function runAnton(args) {
661
793
  const task = pending[i];
662
794
  if (!task) continue;
663
795
  const taskNum = i + 1;
796
+ const taskPromptText = formatTaskForPrompt(task);
797
+ const skipTests = looksLikeVersionBumpTask(task.text) || allowsNoRepoChanges(task.text);
798
+ const allowNoChanges = allowsNoRepoChanges(task.text);
664
799
  await writeState({
665
800
  running: true,
666
801
  taskFile: filePath,
@@ -684,6 +819,8 @@ async function runAnton(args) {
684
819
  const taskFileRelForBaseline = path.relative(gitCwdForBaseline, filePath).replace(/\\/g, "/");
685
820
  const changedBeforeTask = await getGitChangedFileCount(gitCwdForBaseline, taskFileRelForBaseline.startsWith("..") ? [] : [taskFileRelForBaseline]);
686
821
  if (mode === "preflight") {
822
+ await hardCleanRepo(repoCwd);
823
+ await ensureRepoCleanOrThrow(repoCwd);
687
824
  const discoveryResult = await runDiscoveryPhase({
688
825
  task,
689
826
  taskNum,
@@ -706,8 +843,17 @@ async function runAnton(args) {
706
843
  total: pending.length,
707
844
  task: task.text
708
845
  });
709
- const updated = markTaskDone(await fs.readFile(filePath, "utf8"), task.line);
710
- await fs.writeFile(filePath, updated, "utf8");
846
+ const latest = await fs.readFile(filePath, "utf8");
847
+ if (isJsonTaskFile(filePath)) {
848
+ if (jsonData && task.jsonPath) {
849
+ markJsonTaskDone(jsonData, task.jsonPath);
850
+ await fs.writeFile(filePath, JSON.stringify(jsonData, null, 2) + "\n", "utf8");
851
+ }
852
+ } else {
853
+ const updated = markTaskDone(latest, task.line ?? 0);
854
+ await fs.writeFile(filePath, updated, "utf8");
855
+ }
856
+ await commitAllIfDirty(repoCwd, `anton: ${task.text}`);
711
857
  completed += 1;
712
858
  await notify({
713
859
  phase: "task_complete",
@@ -750,10 +896,12 @@ async function runAnton(args) {
750
896
  task: task.text,
751
897
  sessionId: implSessionId
752
898
  });
753
- const implPrompt = planFile ? buildImplementationPrompt(task.text, planFile) : buildDirectTaskPrompt(task.text);
899
+ const implPrompt = planFile ? buildImplementationPrompt(taskPromptText, planFile, { skipTests }) : buildDirectTaskPrompt(taskPromptText, { skipTests });
754
900
  const gitCwd = args.workspaceDir ? path.resolve(args.workspaceDir) : path.dirname(filePath);
755
901
  const taskFileRel = path.relative(gitCwd, filePath).replace(/\\/g, "/");
756
902
  const changeIgnores = taskFileRel.startsWith("..") ? [] : [taskFileRel];
903
+ await hardCleanRepo(repoCwd);
904
+ await ensureRepoCleanOrThrow(repoCwd);
757
905
  await runAgentTask({
758
906
  message: implPrompt,
759
907
  sessionId: implSessionId,
@@ -765,30 +913,44 @@ async function runAnton(args) {
765
913
  workspaceDir: args.workspaceDir
766
914
  });
767
915
  let changedAfter = await getGitChangedFileCount(gitCwd, changeIgnores);
916
+ if (mode === "direct" && changedBeforeTask !== null && changedAfter !== null && changedAfter <= changedBeforeTask && !allowNoChanges) throw new Error("Implementation made no repository changes; refusing to mark task complete");
768
917
  if (mode === "preflight" && changedBeforeTask !== null && changedAfter !== null && changedAfter <= changedBeforeTask) {
769
- const retrySessionId = `anton-impl-retry-${Date.now()}-${taskNum}`;
770
- await notify({
771
- phase: "task_agent_spawned",
772
- index: taskNum,
773
- total: pending.length,
774
- task: `${task.text} (implementation retry)`,
775
- sessionId: retrySessionId
776
- });
777
- await runAgentTask({
778
- message: buildImplementationRetryPrompt(task.text, planFile ?? ""),
779
- sessionId: retrySessionId,
780
- timeout: defaultTimeout,
781
- agent: args.agent,
782
- to: args.to,
783
- runtime: args.runtime,
784
- deps: args.deps,
785
- workspaceDir: args.workspaceDir
786
- });
787
- changedAfter = await getGitChangedFileCount(gitCwd, changeIgnores);
788
- if (changedAfter !== null && changedAfter <= changedBeforeTask) throw new Error("Implementation made no repository changes after retry; refusing to mark task complete");
918
+ if (!allowNoChanges) {
919
+ const retrySessionId = `anton-impl-retry-${Date.now()}-${taskNum}`;
920
+ await notify({
921
+ phase: "task_agent_spawned",
922
+ index: taskNum,
923
+ total: pending.length,
924
+ task: `${task.text} (implementation retry)`,
925
+ sessionId: retrySessionId
926
+ });
927
+ await hardCleanRepo(repoCwd);
928
+ await ensureRepoCleanOrThrow(repoCwd);
929
+ await runAgentTask({
930
+ message: buildImplementationRetryPrompt(taskPromptText, planFile ?? "", { skipTests }),
931
+ sessionId: retrySessionId,
932
+ timeout: defaultTimeout,
933
+ agent: args.agent,
934
+ to: args.to,
935
+ runtime: args.runtime,
936
+ deps: args.deps,
937
+ workspaceDir: args.workspaceDir
938
+ });
939
+ changedAfter = await getGitChangedFileCount(gitCwd, changeIgnores);
940
+ if (changedAfter !== null && changedAfter <= changedBeforeTask) throw new Error("Implementation made no repository changes after retry; refusing to mark task complete");
941
+ }
942
+ }
943
+ const latest = await fs.readFile(filePath, "utf8");
944
+ if (isJsonTaskFile(filePath)) {
945
+ if (jsonData && task.jsonPath) {
946
+ markJsonTaskDone(jsonData, task.jsonPath);
947
+ await fs.writeFile(filePath, JSON.stringify(jsonData, null, 2) + "\n", "utf8");
948
+ }
949
+ } else {
950
+ const updated = markTaskDone(latest, task.line ?? 0);
951
+ await fs.writeFile(filePath, updated, "utf8");
789
952
  }
790
- const updated = markTaskDone(await fs.readFile(filePath, "utf8"), task.line);
791
- await fs.writeFile(filePath, updated, "utf8");
953
+ await commitAllIfDirty(repoCwd, `anton: ${task.text}`);
792
954
  completed += 1;
793
955
  await notify({
794
956
  phase: "task_complete",
@@ -797,6 +959,9 @@ async function runAnton(args) {
797
959
  task: task.text
798
960
  });
799
961
  } catch (err) {
962
+ try {
963
+ await hardCleanRepo(repoCwd);
964
+ } catch {}
800
965
  skipped += 1;
801
966
  const errorMsg = err instanceof Error ? err.message : String(err);
802
967
  args.runtime.error(`[Anton] Task failed and was skipped: ${task.text}`);