@visorcraft/idlehands 4.0.15 → 4.0.17

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 (380) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{accounts-DLTODa_Z.js → accounts-D-hQsUw-.js} +1 -1
  3. package/dist/{accounts-DgbTKQoW.js → accounts-D87a1Y_K.js} +1 -1
  4. package/dist/{accounts-3HS_UAhJ.js → accounts-DsVN0UNw.js} +1 -1
  5. package/dist/{acp-cli-B-7CXaeS.js → acp-cli-D52jj29o.js} +7 -7
  6. package/dist/{agent-scope-RA0zXRpu.js → agent-scope-Bn39ugK4.js} +18 -18
  7. package/dist/{agent-via-gateway-CcaPUQrc.js → agent-via-gateway-BDWomN2t.js} +4 -4
  8. package/dist/{agent-via-gateway-BvXS1sXv.js → agent-via-gateway-BVY7w5-N.js} +1 -1
  9. package/dist/{agent-via-gateway-CIM26Dxl.js → agent-via-gateway-BlRwv6D6.js} +2 -2
  10. package/dist/{agent-via-gateway-BFtbpQpT.js → agent-via-gateway-DSZK5iRF.js} +2 -2
  11. package/dist/{agents-DPlb4UQu.js → agents-BLa67Gdv.js} +4 -4
  12. package/dist/{agents.config-8pxRoZvL.js → agents.config-ADCeu0yD.js} +1 -1
  13. package/dist/{agents.config-BKoyeUnK.js → agents.config-CyEkgCQE.js} +2 -2
  14. package/dist/{anton-DKA8iAQE.js → anton-CZ5moxh6.js} +22 -4
  15. package/dist/{anton-BTjKlGm7.js → anton-D-0SP_5T.js} +22 -4
  16. package/dist/{anton-DhBvDNcB.js → anton-DYEYyPJ1.js} +40 -22
  17. package/dist/{anton-Dyhtv3C8.js → anton-llLwn1lp.js} +22 -4
  18. package/dist/{api-key-rotation-B-FTJm5p.js → api-key-rotation-nXQVJErE.js} +1 -1
  19. package/dist/{audio-preflight-Dl1TO10w.js → audio-preflight-DzjXupNO.js} +31 -31
  20. package/dist/{audit-BmaVRZSd.js → audit-D12wg2tV.js} +22 -22
  21. package/dist/{auth-choice-D-_AVWgJ.js → auth-choice-01ELTnLA.js} +1 -1
  22. package/dist/{auth-choice-D12Wsf7w.js → auth-choice-BDndThZZ.js} +12 -12
  23. package/dist/{auth-choice-CMUzxwaw.js → auth-choice-CqbTnCYz.js} +10 -10
  24. package/dist/{auth-choice.apply-helpers-CGcniL1T.js → auth-choice.apply-helpers-pTqMTYmi.js} +1 -1
  25. package/dist/{auth-store-DDzIMy8_.js → auth-store-CMyrmmSF.js} +7 -7
  26. package/dist/{auth-token-BJq87X3o.js → auth-token-fKt_cHOj.js} +1 -1
  27. package/dist/{banner-B6ih1A5q.js → banner-Dv_eAAWw.js} +1 -1
  28. package/dist/{bindings-B59Q7nsk.js → bindings-DZjkLUU_.js} +1 -1
  29. package/dist/{browser-cli-Ny1nHwqv.js → browser-cli-Da-0lyq2.js} +11 -11
  30. package/dist/build-info.json +3 -3
  31. package/dist/bundled/boot-md/handler.js +2 -2
  32. package/dist/bundled/session-memory/handler.js +2 -2
  33. package/dist/{call-BRL23UCk.js → call-DnTBT02D.js} +9 -9
  34. package/dist/{channel-account-context-CDbY5AIr.js → channel-account-context-B4nJPU2N.js} +5 -5
  35. package/dist/{channel-options-DqOp64vm.js → channel-options-BilcK806.js} +1 -1
  36. package/dist/{channel-options-DdT_iiu2.js → channel-options-BvOLgXCF.js} +3 -3
  37. package/dist/{channel-selection-ZxRkxpuF.js → channel-selection-3jUl-PyW.js} +1 -1
  38. package/dist/{channel-web-DjS8VQYO.js → channel-web-B1IazKKL.js} +22 -22
  39. package/dist/{channel-web-PG7u76pG.js → channel-web-BptLTwvg.js} +2 -2
  40. package/dist/{channels-cli-1tt6zmdw.js → channels-cli-DejBZZ85.js} +7 -7
  41. package/dist/{channels-cli-CWxVX3_x.js → channels-cli-FssbSykQ.js} +88 -88
  42. package/dist/{channels-status-issues-CDpWjdI3.js → channels-status-issues-hgASw9UA.js} +1 -1
  43. package/dist/{chrome-VBsQfIrt.js → chrome-YguTEaLx.js} +2 -2
  44. package/dist/{clawbot-cli-uFgYrysW.js → clawbot-cli-C5cDal-5.js} +5 -5
  45. package/dist/cli/daemon-cli.js +1 -1
  46. package/dist/{cli-D4FV736E.js → cli-BrQZTuUX.js} +70 -70
  47. package/dist/{cli-CmOlEYcx.js → cli-j1A8WKSj.js} +2 -2
  48. package/dist/{client-DxH9hwLn.js → client-DIckPnsi.js} +1 -1
  49. package/dist/{command-registry-CQ_cgvak.js → command-registry-DZZAmcbA.js} +10 -10
  50. package/dist/{commands-Dj5LalLo.js → commands-D3BU_t7G.js} +1 -1
  51. package/dist/{commands-registry-CURlRZQJ.js → commands-registry-Cj4D_1tw.js} +3 -3
  52. package/dist/{completion-cli-UytEAOmM.js → completion-cli-Cxvf8clb.js} +2 -2
  53. package/dist/{completion-cli-y9BFk5F6.js → completion-cli-ktxbWAiG.js} +12 -12
  54. package/dist/{config-cli-DUb0ZGdL.js → config-cli-Bq_MWzp9.js} +1 -1
  55. package/dist/{config-cli-5c6A3y5U.js → config-cli-CogA71uD.js} +6 -6
  56. package/dist/{config-guard-BdsOumqh.js → config-guard-DnAyuF6T.js} +17 -17
  57. package/dist/{config-validation-BvKX6fPw.js → config-validation-DIomLMwH.js} +2 -2
  58. package/dist/{configure-AlSS40po.js → configure-CPDGJFyt.js} +3 -3
  59. package/dist/{configure-BPwYKVb4.js → configure-CZUn--aN.js} +16 -16
  60. package/dist/{control-ui-assets-C7ZpN9hN.js → control-ui-assets-CiaCDBvZ.js} +1 -1
  61. package/dist/{cron-cli-Xml0Uww8.js → cron-cli-B8uqoogS.js} +12 -12
  62. package/dist/{daemon-cli-B1Ti51bt.js → daemon-cli-CMBNTpSS.js} +11 -11
  63. package/dist/{daemon-install-CYPo4M1M.js → daemon-install-DeqQiAad.js} +4 -4
  64. package/dist/{daemon-install-helpers-BZY9-jNW.js → daemon-install-helpers-Bug_GYuy.js} +9 -9
  65. package/dist/{deliver--kttnrER.js → deliver-yTpXc5sv.js} +7 -7
  66. package/dist/{deps-DxMLbT7t.js → deps-BUUwigzc.js} +1 -1
  67. package/dist/{deps-KIFYHxig.js → deps-B_5kPH1Q.js} +1 -1
  68. package/dist/{deps-BYfE_aIY.js → deps-CH8f3TJK.js} +6 -6
  69. package/dist/{deps-TwKaIh1I.js → deps-PAzfFs3Q.js} +1 -1
  70. package/dist/{devices-cli-BNkO0Fey.js → devices-cli-DVLF8Yvw.js} +7 -7
  71. package/dist/{diagnostics-DmZbQ8Nc.js → diagnostics-CdUgLS0N.js} +5 -5
  72. package/dist/{directory-cli-Dz9iXeut.js → directory-cli-BAMS8f9U.js} +9 -9
  73. package/dist/{dns-cli-DD6hWsdc.js → dns-cli-BdxBk-k_.js} +4 -4
  74. package/dist/{dock-Y96MzKuM.js → dock-CzF5XYGd.js} +4 -4
  75. package/dist/{docs-cli-cHkrTB2e.js → docs-cli-SF7es4Zs.js} +4 -4
  76. package/dist/{doctor-completion-S-XHygGb.js → doctor-completion-i04j1TGW.js} +1 -1
  77. package/dist/{doctor-completion-HzTBPNbS.js → doctor-completion-iWmUY3B4.js} +2 -2
  78. package/dist/{doctor-config-flow-Ck4oCjfl.js → doctor-config-flow-8qXzBx09.js} +14 -14
  79. package/dist/{emergency-stop-BDwI4Cyl.js → emergency-stop-CfKEsUr_.js} +70 -70
  80. package/dist/{emergency-stop-DpMAMIiz.js → emergency-stop-CzExWKhr.js} +2 -2
  81. package/dist/{emergency-stop-DOi-rKmj.js → emergency-stop-DAmKucxm.js} +2 -2
  82. package/dist/{emergency-stop--ScwariE.js → emergency-stop-tKLAiFAG.js} +2 -2
  83. package/dist/{enable-o_s6PBsC.js → enable-DaA_orGN.js} +1 -1
  84. package/dist/entry.js +1 -1
  85. package/dist/{exec-approvals-allowlist-Co2tJSEo.js → exec-approvals-allowlist-8AkOwwIr.js} +1 -1
  86. package/dist/{exec-approvals-cli-CyjTnYfk.js → exec-approvals-cli-CtoJW2K-.js} +15 -15
  87. package/dist/{exec-safe-bin-runtime-policy-DaoU9-ni.js → exec-safe-bin-runtime-policy-DYXuBKqH.js} +2 -2
  88. package/dist/extensionAPI.js +2 -2
  89. package/dist/{fs-safe-_JQUGpZf.js → fs-safe-DNFrxDS-.js} +15 -15
  90. package/dist/{gateway-cli-DQcjWJr7.js → gateway-cli-C8P5BVto.js} +148 -148
  91. package/dist/{gateway-cli-B4T44JsM.js → gateway-cli-DSJcNJYR.js} +9 -9
  92. package/dist/{gateway-rpc-Du-ZpDjh.js → gateway-rpc-6vnhO4v8.js} +1 -1
  93. package/dist/{health-D7UCYzfy.js → health-BN8WNyon.js} +1 -1
  94. package/dist/{health--39yieH5.js → health-CNZK5D2k.js} +13 -13
  95. package/dist/{hooks-cli-CGB7TcZZ.js → hooks-cli-L32lBsp7.js} +3 -3
  96. package/dist/{hooks-cli-Cko_uweG.js → hooks-cli-t7tiLn8P.js} +84 -84
  97. package/dist/{hooks-status-DNGo2G8Q.js → hooks-status-CPIWc_bx.js} +1 -1
  98. package/dist/{idlehands-root-B8cUs-5M.js → idlehands-root-DFL2GrNW.js} +8 -8
  99. package/dist/{image-DSDEbSiO.js → image-C2JZiK-6.js} +5 -5
  100. package/dist/{image-ops-BU-VdLZu.js → image-ops-BkoEFRYH.js} +10 -10
  101. package/dist/index.js +80 -80
  102. package/dist/{inspect-ISQZuNM5.js → inspect-Dg16DMLn.js} +4 -4
  103. package/dist/{install-safe-path-ChNR9pl6.js → install-safe-path-CNNMzJl9.js} +19 -19
  104. package/dist/{installs-CNubze2L.js → installs-ST3UaUVJ.js} +9 -9
  105. package/dist/{ir-VncGpwA1.js → ir-DV0Hszc8.js} +6 -6
  106. package/dist/{lifecycle-core-B6UoqYTJ.js → lifecycle-core-DOScNyOv.js} +5 -5
  107. package/dist/llm-slug-generator.js +2 -2
  108. package/dist/{local-roots-q0xbefkf.js → local-roots-Cco87A2_.js} +2 -2
  109. package/dist/{login-CfUhrgWT.js → login-Dl_lsEHS.js} +4 -4
  110. package/dist/{login-qr-DBMsUxgL.js → login-qr-B68cBRH0.js} +7 -7
  111. package/dist/{logs-cli-CH4mFhUt.js → logs-cli-BluGGq03.js} +8 -8
  112. package/dist/{manager-BMAFgXyU.js → manager-BBeTPO2h.js} +13 -13
  113. package/dist/{manifest-registry-Bak1x76G.js → manifest-registry-RfRn8HJx.js} +1 -1
  114. package/dist/{markdown-tables-DZClqsNo.js → markdown-tables-C5hTDqNm.js} +1 -1
  115. package/dist/{memory-cli-CUGwnVIY.js → memory-cli-4wfelGdK.js} +12 -12
  116. package/dist/{model-C-icShH2.js → model-Bd-05WpB.js} +2 -2
  117. package/dist/{model-catalog-D9no0CH2.js → model-catalog-BCsDrrvq.js} +3 -3
  118. package/dist/{model-picker-BkXoTOiA.js → model-picker-D3U0wJCO.js} +4 -4
  119. package/dist/{model-selection-0dGxYGp8.js → model-selection-CSn9tUuH.js} +16 -16
  120. package/dist/{models-cli-d_ead6LU.js → models-cli-ChStpcQY.js} +79 -79
  121. package/dist/{models-cli-NlT2N74B.js → models-cli-dd-wJvj0.js} +4 -4
  122. package/dist/{models-config-C5A1wDWh.js → models-config-lQpqp472.js} +6 -6
  123. package/dist/{models-CWfcMshO.js → models-mQeB9JXZ.js} +2 -2
  124. package/dist/{node-cli-Ch7K7WtL.js → node-cli-DhD8-NHR.js} +32 -32
  125. package/dist/{node-service-C3vyxHLA.js → node-service-GpI0jzKr.js} +1 -1
  126. package/dist/{nodes-cli-D_hUCPNt.js → nodes-cli-DPzxQ0mY.js} +14 -14
  127. package/dist/{nodes-screen-CcpPaFxa.js → nodes-screen-CIAn0wXq.js} +4 -4
  128. package/dist/{npm-registry-spec-BCbbfIhX.js → npm-registry-spec-BfeHLbIQ.js} +16 -16
  129. package/dist/{npm-resolution-Dpn9DNPz.js → npm-resolution-WKW4cIrd.js} +1 -1
  130. package/dist/{npm-resolution-DIJeEhoa.js → npm-resolution-tT1BUac2.js} +3 -3
  131. package/dist/{onboard-DFseyAG9.js → onboard-D1wKkHHC.js} +2 -2
  132. package/dist/{onboard-channels-mLWuxUlN.js → onboard-channels-CG1R8Ozs.js} +1 -1
  133. package/dist/{onboard-channels-CG1HcORq.js → onboard-channels-CRHp5hA-.js} +20 -20
  134. package/dist/{onboard-custom-DUbzMMu7.js → onboard-custom-D2sCP3_S.js} +4 -4
  135. package/dist/{onboard-helpers-BQmbMJxJ.js → onboard-helpers-ByhJg2ST.js} +8 -8
  136. package/dist/{onboard-hooks-D9teGxfH.js → onboard-hooks-_1Jgimeu.js} +4 -4
  137. package/dist/{onboard-remote-CIjhaP2W.js → onboard-remote-DuhWSiAO.js} +1 -1
  138. package/dist/{onboard-Raw5nkGc.js → onboard-rze7pzoW.js} +6 -6
  139. package/dist/{onboard-skills-BsaUIuq6.js → onboard-skills-vFwEasAg.js} +4 -4
  140. package/dist/{onboarding-CzzjhwRf.js → onboarding-BgHfZNln.js} +3 -3
  141. package/dist/{onboarding-DYlNLV9R.js → onboarding-BxvY_aEE.js} +13 -13
  142. package/dist/{onboarding.finalize-CIOBj6Jy.js → onboarding.finalize-5_UCPMAw.js} +7 -7
  143. package/dist/{onboarding.finalize-BJYuOTPe.js → onboarding.finalize-DnCFQEPR.js} +82 -82
  144. package/dist/{onboarding.gateway-config-CEQMyj8l.js → onboarding.gateway-config-qVAY6x7I.js} +16 -16
  145. package/dist/{openai-model-default-7J6cw1rA.js → openai-model-default-OPCCNNS0.js} +2 -2
  146. package/dist/{outbound-DPTxwchq.js → outbound-CG19kl0w.js} +4 -4
  147. package/dist/{plugin-sdk/outbound-attachment-BisU5Vji.js → outbound-attachment-jYdMgCml.js} +2 -2
  148. package/dist/{pairing-cli-jwx6hMsM.js → pairing-cli-QJYYDcIK.js} +10 -10
  149. package/dist/{pairing-labels-ChQJzbS9.js → pairing-labels-DuZ7ih-T.js} +1 -1
  150. package/dist/{pairing-store-CPpEEQJO.js → pairing-store-qvpPoWL_.js} +2 -2
  151. package/dist/{pairing-token-lKXTMQ_M.js → pairing-token-3hoCgQqp.js} +7 -7
  152. package/dist/{path-alias-guards-FXBVVTLw.js → path-alias-guards-BCskHdfJ.js} +3 -3
  153. package/dist/{path-safety-DwibX65n.js → path-safety-C1Y004P_.js} +1 -1
  154. package/dist/{paths-B-CLQ5RT.js → paths-Bt0fZexW.js} +9 -9
  155. package/dist/{pi-embedded-Swc7dke2.js → pi-embedded-BcmA23Ak.js} +12 -12
  156. package/dist/{pi-embedded-7XGjNojd.js → pi-embedded-D_8x2ll-.js} +12 -12
  157. package/dist/{pi-embedded-helpers-BCsfqpDt.js → pi-embedded-helpers-BkzrQ5bZ.js} +6 -6
  158. package/dist/{pi-model-discovery-BIP3RjXl.js → pi-model-discovery-Bt79ifyi.js} +1 -1
  159. package/dist/{pi-tools.policy-DfITIKZj.js → pi-tools.policy-B_ME3yF6.js} +5 -5
  160. package/dist/{plugin-auto-enable-7DUxMy6A.js → plugin-auto-enable-BMuSi4aV.js} +3 -3
  161. package/dist/{plugin-registry-BAd0SoEv.js → plugin-registry-C3IHwz9i.js} +3 -3
  162. package/dist/{plugin-registry-D9Z1bMNt.js → plugin-registry-CncOKeD3.js} +1 -1
  163. package/dist/plugin-sdk/{accounts-CBVAw5_G.js → accounts-B9nfRzyn.js} +1 -1
  164. package/dist/plugin-sdk/{accounts-BLYMokxV.js → accounts-Kt6ygPsC.js} +2 -2
  165. package/dist/plugin-sdk/{accounts-C5tHm1UI.js → accounts-mjFAny5F.js} +1 -1
  166. package/dist/plugin-sdk/{agent-scope-jl80I5G9.js → agent-scope-CU41EMlR.js} +2 -2
  167. package/dist/plugin-sdk/{agent-via-gateway-B3F-royZ.js → agent-via-gateway-CDKZ0Jk9.js} +55 -55
  168. package/dist/plugin-sdk/{anton-DfpQdXJJ.js → anton-Bp5L7uaN.js} +25 -7
  169. package/dist/plugin-sdk/{api-key-rotation-D6nK54XH.js → api-key-rotation-CZhCWd61.js} +2 -2
  170. package/dist/plugin-sdk/{audio-preflight-CKqqN8ty.js → audio-preflight-CRgDehfO.js} +30 -30
  171. package/dist/plugin-sdk/{auth-store-DaPWgQTx.js → auth-store-DycBvVqL.js} +1 -1
  172. package/dist/plugin-sdk/{bindings-xXgmJGxj.js → bindings-BDKKHGv-.js} +2 -2
  173. package/dist/plugin-sdk/{channel-activity-loOg1DRw.js → channel-activity-TcS_VfJk.js} +3 -3
  174. package/dist/plugin-sdk/{channel-web-BWE_kecR.js → channel-web-DcgShj6y.js} +24 -24
  175. package/dist/plugin-sdk/{chrome-Cb9FgiCI.js → chrome-BCTizrZD.js} +6 -6
  176. package/dist/plugin-sdk/{chunk-PW4MBmaN.js → chunk-DZr5xuqv.js} +1 -1
  177. package/dist/plugin-sdk/{commands-registry-B5m2EsHz.js → commands-registry-BqJLwZYh.js} +5 -5
  178. package/dist/plugin-sdk/{config-CEgzwk0J.js → config-BzPMtEKA.js} +10 -10
  179. package/dist/plugin-sdk/{deliver-BNfMF0Nb.js → deliver-Cfc1UCre.js} +10 -10
  180. package/dist/plugin-sdk/{deps-B0MfJgDH.js → deps-B5eQTF_d.js} +6 -6
  181. package/dist/plugin-sdk/{diagnostic-ByA6zvzu.js → diagnostic-B8VzcqLf.js} +1 -1
  182. package/dist/plugin-sdk/{dock-DKQYtT6-.js → dock-CMURqoee.js} +6 -6
  183. package/dist/plugin-sdk/{emergency-stop-rTRWpk26.js → emergency-stop-DQppo4RU.js} +55 -55
  184. package/dist/plugin-sdk/{env-5XecRTLs.js → env-qurSiOO2.js} +1 -1
  185. package/dist/plugin-sdk/{errors-CMcD8Lhh.js → errors-UqLewZJL.js} +1 -1
  186. package/dist/plugin-sdk/{fetch-guard-DwdUEdmT.js → fetch-guard-C174s8ZV.js} +1 -1
  187. package/dist/plugin-sdk/{fs-safe-qsx2_8-o.js → fs-safe-CCXTOK7j.js} +2 -2
  188. package/dist/plugin-sdk/{image-C_1tftC8.js → image-DDuK8tyO.js} +6 -6
  189. package/dist/plugin-sdk/{image-ops-CXSUo-AM.js → image-ops-BRYGGDwL.js} +1 -1
  190. package/dist/plugin-sdk/index.js +60 -60
  191. package/dist/plugin-sdk/{ir-kdDGpPMq.js → ir-Bv0Zbp2E.js} +5 -5
  192. package/dist/plugin-sdk/{local-roots-DjB6DYeI.js → local-roots-bHCsSVt_.js} +4 -4
  193. package/dist/plugin-sdk/{login-DIwO5D5Y.js → login-CkQrnY2G.js} +6 -6
  194. package/dist/plugin-sdk/{login-qr-CpCAJuvT.js → login-qr-DAeHibH_.js} +8 -8
  195. package/dist/plugin-sdk/{manager-Dox9r7og.js → manager-CTC1S_c9.js} +10 -10
  196. package/dist/plugin-sdk/{markdown-tables-Drtwd4J5.js → markdown-tables-DfUQHRZY.js} +1 -1
  197. package/dist/plugin-sdk/{message-channel-CQ0qkGHj.js → message-channel-DiMXmQeQ.js} +1 -1
  198. package/dist/plugin-sdk/{outbound-Dx_q6JAI.js → outbound-B1twcfz5.js} +6 -6
  199. package/dist/{outbound-attachment-Bot3bRnK.js → plugin-sdk/outbound-attachment-Bs7fNaqv.js} +2 -2
  200. package/dist/plugin-sdk/{path-alias-guards-C_uBEYb4.js → path-alias-guards-yyy61qHh.js} +1 -1
  201. package/dist/plugin-sdk/{pi-embedded-helpers-B68z4sHq.js → pi-embedded-helpers-BAm9cWol.js} +16 -16
  202. package/dist/plugin-sdk/{pi-model-discovery-Dt6899be.js → pi-model-discovery-Bt6JtUFr.js} +1 -1
  203. package/dist/plugin-sdk/{plugins-NTjIvHYk.js → plugins-DRPlVBr_.js} +5 -5
  204. package/dist/plugin-sdk/{pw-ai-Dk2PTZzq.js → pw-ai-CY0evCZ2.js} +10 -10
  205. package/dist/plugin-sdk/{qmd-manager-juzrnopq.js → qmd-manager-BckPBwZX.js} +5 -5
  206. package/dist/plugin-sdk/{query-expansion-xBXvzdkL.js → query-expansion-CPqK-tTR.js} +2 -2
  207. package/dist/plugin-sdk/{redact-B6VQH3UQ.js → redact-Ub8sMBBC.js} +1 -1
  208. package/dist/plugin-sdk/{replies-ZovJp-3F.js → replies-DwTNZJgi.js} +3 -3
  209. package/dist/plugin-sdk/{reply-C2G4DKTN.js → reply-BtQHoQT3.js} +96 -96
  210. package/dist/plugin-sdk/{reply-prefix--mxmTL7A.js → reply-prefix-BqV0o7_7.js} +1 -1
  211. package/dist/plugin-sdk/{resolve-outbound-target-CnUtsDch.js → resolve-outbound-target-DAdNGEqG.js} +2 -2
  212. package/dist/plugin-sdk/{resolve-route-BZABUE4J.js → resolve-route-C5mAwY-o.js} +3 -3
  213. package/dist/plugin-sdk/{retry-Bh7jveNm.js → retry-2OVzZJMZ.js} +1 -1
  214. package/dist/plugin-sdk/{runner-CZz1tOIR.js → runner-Ck0w3rcz.js} +10 -10
  215. package/dist/plugin-sdk/{send-Cb5NIN8s.js → send-A4Lv5nrg.js} +7 -7
  216. package/dist/plugin-sdk/{send-0EVlThEG.js → send-BBD-m-nM.js} +10 -10
  217. package/dist/plugin-sdk/{send-BCjVQhp3.js → send-CPeuqOlq.js} +13 -13
  218. package/dist/plugin-sdk/{send-B26cNPqY.js → send-CaPoBwby.js} +6 -6
  219. package/dist/plugin-sdk/{send-CHUGIZs9.js → send-SsqudCMv.js} +7 -7
  220. package/dist/plugin-sdk/{session-DdJj6_DW.js → session-DpL4uk1J.js} +3 -3
  221. package/dist/plugin-sdk/{sessions-DNx9c2O2.js → sessions-CQ5iD4Uq.js} +6 -6
  222. package/dist/plugin-sdk/{skill-commands-DorIK8kn.js → skill-commands-C_O9I71g.js} +5 -5
  223. package/dist/plugin-sdk/{skills-Dh_Cf2PA.js → skills-DmiIiX4l.js} +8 -8
  224. package/dist/plugin-sdk/{store-CCCXwngh.js → store-BI3rLJdW.js} +2 -2
  225. package/dist/plugin-sdk/{subsystem-DWPzKeZ0.js → subsystem-lJo9gqAK.js} +1 -1
  226. package/dist/plugin-sdk/{tables-CF9W23Rd.js → tables-C4X_nAUQ.js} +1 -1
  227. package/dist/plugin-sdk/{target-errors-DaH0qYtL.js → target-errors-CXh6e9ZE.js} +2 -2
  228. package/dist/plugin-sdk/{tokens-Y97UKh4C.js → tokens-CU9S3S7t.js} +1 -1
  229. package/dist/plugin-sdk/{tool-images-BMRkn_yk.js → tool-images-Cf9aWlVu.js} +2 -2
  230. package/dist/plugin-sdk/{tool-loop-detection-Cv8wyfAi.js → tool-loop-detection-DuwkSqZL.js} +2 -2
  231. package/dist/plugin-sdk/{upgrade-command-DKUGbn8D.js → upgrade-command-y1YvsJbf.js} +12 -2
  232. package/dist/plugin-sdk/{utils-Dyj2wV4e.js → utils-dP-FpIgu.js} +2 -2
  233. package/dist/plugin-sdk/web-Cg6vlkku.js +71 -0
  234. package/dist/plugin-sdk/{whatsapp-actions-B5g-Rywy.js → whatsapp-actions-Bcknq6EZ.js} +23 -23
  235. package/dist/{plugins-D46VZh7u.js → plugins-B4hASNc2.js} +2 -2
  236. package/dist/{plugins-cli-BYfDyWXn.js → plugins-cli-BMptU-1l.js} +80 -80
  237. package/dist/{plugins-cli-DP46ipIu.js → plugins-cli-CMYlin6k.js} +3 -3
  238. package/dist/{ports-B2o0FSFD.js → ports-B07M55Gr.js} +1 -1
  239. package/dist/{ports-SQy1d-RL.js → ports-DWJO5S52.js} +2 -2
  240. package/dist/{program-BlV0XOMu.js → program-DyMaBEqF.js} +8 -8
  241. package/dist/{program-context-PC7Knx3s.js → program-context-BxflGz_G.js} +43 -43
  242. package/dist/{prompt-select-styled-BgfuPDVv.js → prompt-select-styled-CI3hobey.js} +37 -37
  243. package/dist/{prompt-select-styled-BEnn1bwr.js → prompt-select-styled-es3PJxfH.js} +4 -4
  244. package/dist/{provider-auth-helpers-CrjXAqYu.js → provider-auth-helpers-CrGScfnN.js} +1 -1
  245. package/dist/{provider-auth-helpers-CKIkgNDk.js → provider-auth-helpers-DYxaYmlq.js} +5 -5
  246. package/dist/{push-apns-B4sxQAG3.js → push-apns-BNxgGXQy.js} +1 -1
  247. package/dist/{push-apns-BPmS_f8e.js → push-apns-CjAXPy2N.js} +5 -5
  248. package/dist/{pw-ai-7i9eGnLh.js → pw-ai-BGALvhDi.js} +11 -11
  249. package/dist/{qmd-manager-B-qeywfQ.js → qmd-manager-CVcPfkhL.js} +19 -19
  250. package/dist/{qr-cli-CSt5ihwG.js → qr-cli-D2Oh8f0U.js} +1 -1
  251. package/dist/{query-expansion-Clts_AGz.js → query-expansion-i5I3yavb.js} +12 -12
  252. package/dist/{redact-snapshot-BBNDQZIe.js → redact-snapshot-CtIVs92s.js} +1 -1
  253. package/dist/{register.agent-DRcOj2U3.js → register.agent-B9f0mtlc.js} +9 -9
  254. package/dist/{register.agent-uaM-OgFM.js → register.agent-DrVFgVpf.js} +95 -95
  255. package/dist/register.configure-BxZRBEJ9.js +168 -0
  256. package/dist/{register.configure-BebpNVXc.js → register.configure-DAlBU97I.js} +8 -8
  257. package/dist/{register.maintenance-CjWtRkPb.js → register.maintenance-BThQUyMI.js} +9 -9
  258. package/dist/{register.maintenance-Cr0SJRGa.js → register.maintenance-G_dZOyQA.js} +90 -90
  259. package/dist/{register.message-BNqRwnPx.js → register.message-BVTuvjQA.js} +71 -71
  260. package/dist/{register.message-DMAqqNBh.js → register.message-DKaxesxx.js} +3 -3
  261. package/dist/{register.onboard-9Z1ghVgM.js → register.onboard-CnoQ56yq.js} +18 -18
  262. package/dist/{register.onboard-DDLj9mJ2.js → register.onboard-CwtL9YYR.js} +2 -2
  263. package/dist/{register.orchestrator-anton-BybNaYi1.js → register.orchestrator-anton-2LtPHPXM.js} +14 -14
  264. package/dist/{register.orchestrator-anton-9Al8Av8i.js → register.orchestrator-anton-Ce55Lxt0.js} +2 -2
  265. package/dist/{register.setup-yqN0SXow.js → register.setup-Dg5LmRxd.js} +2 -2
  266. package/dist/{register.setup-Z1tBfa9d.js → register.setup-_s2CQaBF.js} +21 -21
  267. package/dist/{register.status-health-sessions-r-mpQR1m.js → register.status-health-sessions-DX2OgAeG.js} +4 -4
  268. package/dist/{register.status-health-sessions-Di92AnoH.js → register.status-health-sessions-iSQzPXD0.js} +82 -82
  269. package/dist/{register.subclis-DPQqxIZd.js → register.subclis-YeKuHCRg.js} +10 -10
  270. package/dist/{replies-hSFVxL4h.js → replies-Czp4hvpS.js} +1 -1
  271. package/dist/{reply-ZWOav11z.js → reply-DKIv9jez.js} +153 -153
  272. package/dist/{reply-prefix-C3y4zpTl.js → reply-prefix-BMEdvSpA.js} +1 -1
  273. package/dist/{resolve-route-D_AbcmD6.js → resolve-route-Ef_Yt2Dw.js} +2 -2
  274. package/dist/{rpc-CCimHATv.js → rpc-DDTp_J6f.js} +1 -1
  275. package/dist/{run-main-DDbBATo6.js → run-main-BwWO5erE.js} +15 -15
  276. package/dist/{runner-DzszLzI4.js → runner-BFG54hnb.js} +20 -20
  277. package/dist/{runtime-XmXLaHNk.js → runtime-DEmy759r.js} +2 -2
  278. package/dist/{sandbox-DcUw5h3p.js → sandbox-CfPbhDY_.js} +20 -20
  279. package/dist/{sandbox-cli-DGvJ7Eeq.js → sandbox-cli-B4wLJr21.js} +22 -22
  280. package/dist/{secrets-cli-Bgp_H_bH.js → secrets-cli-CidAOBfl.js} +9 -9
  281. package/dist/{security-cli-MQ__Ca6v.js → security-cli-Ch7AhbhS.js} +39 -39
  282. package/dist/{send-C4v0Leny.js → send-BCPkAE2k.js} +6 -6
  283. package/dist/{send-DuwdEkLw.js → send-BPwTl4-K.js} +4 -4
  284. package/dist/{send-DQiw_nGD.js → send-CEavqqEz.js} +6 -6
  285. package/dist/{send-DwdHiC7_.js → send-CVIXqubC.js} +13 -13
  286. package/dist/{send--lzpNy4f.js → send-DDMaLJAQ.js} +7 -7
  287. package/dist/{server-D6MltJIF.js → server-BpSbZAwg.js} +14 -14
  288. package/dist/{server-context-DI0W_H7R.js → server-context-BxNSTpH6.js} +10 -10
  289. package/dist/{server-lifecycle-B5PlrlbG.js → server-lifecycle-CGKrGrhM.js} +2 -2
  290. package/dist/{server-node-events-DNJLKEMT.js → server-node-events-CZ5OkouD.js} +71 -71
  291. package/dist/{server-node-events-BcZPS5tj.js → server-node-events-lbb8M18B.js} +3 -3
  292. package/dist/{service-C8NMS3m_.js → service-Bj2oSfpw.js} +15 -15
  293. package/dist/{session-CdnrRhb4.js → session-BKVySI8q.js} +1 -1
  294. package/dist/{sessions-BtPXimXQ.js → sessions-BqWocozB.js} +14 -14
  295. package/dist/{shared-CpDPo3hJ.js → shared-DnQ4iyXk.js} +2 -2
  296. package/dist/{shared-DpLSpJIl.js → shared-Jzrx8DfN.js} +1 -1
  297. package/dist/{skill-commands-BFzmZAfo.js → skill-commands-BwIRWSCI.js} +5 -5
  298. package/dist/{skill-scanner-D7mzXRXd.js → skill-scanner-B4Ftsbd2.js} +5 -5
  299. package/dist/{skills-DlvDyK8L.js → skills-TIyQDZx7.js} +3 -3
  300. package/dist/{skills-cli-BhKGhjbO.js → skills-cli-5lbXi4Lh.js} +5 -5
  301. package/dist/{skills-install-tr6wRWZj.js → skills-install-D0JHP5uM.js} +4 -4
  302. package/dist/{skills-status-qjQ8XP0h.js → skills-status-Q9skQExW.js} +1 -1
  303. package/dist/{status-geIYZraQ.js → status-BE1Y0CKS.js} +2 -2
  304. package/dist/{status-BXSiFfmy.js → status-Bd9NYE1U.js} +24 -24
  305. package/dist/{status.update-CTi6vuWj.js → status.update-C3uRz7W6.js} +2 -2
  306. package/dist/{store-kH9wHHbO.js → store-CLNuI8-G.js} +5 -5
  307. package/dist/{subagent-registry-C6uygQa1.js → subagent-registry-CTZmDdGV.js} +12 -12
  308. package/dist/{system-cli-3T-OTIKv.js → system-cli-DBp9Zmvt.js} +8 -8
  309. package/dist/{system-run-approval-context-CISBXlNw.js → system-run-approval-context-xZVoE4nS.js} +1 -1
  310. package/dist/{system-run-command-qJdgzxLp.js → system-run-command-BIhrK3OI.js} +1 -1
  311. package/dist/{systemd-CaCR5CyM.js → systemd-DyrVLTI0.js} +9 -9
  312. package/dist/{systemd-hints-DHu-HVFx.js → systemd-hints-BoKKzRI_.js} +6 -6
  313. package/dist/{systemd-linger-B7XlUHk_.js → systemd-linger-DrhGd61G.js} +1 -1
  314. package/dist/{tables-g9xkflht.js → tables-CZSD889r.js} +1 -1
  315. package/dist/{target-errors-bLIVFsbF.js → target-errors-BYuWhuLU.js} +4 -4
  316. package/dist/{tool-images-CHqepyF_.js → tool-images-DZHrc4pq.js} +1 -1
  317. package/dist/{tui-lalhRHve.js → tui-DWGHGeZ3.js} +6 -6
  318. package/dist/{tui-cli-BVKWJ9X7.js → tui-cli-DKyA5pZ2.js} +30 -30
  319. package/dist/{update-cli-BxVcRBy_.js → update-cli-D-4_OhRR.js} +9 -9
  320. package/dist/{update-cli-VlK55yII.js → update-cli-DvUx2El6.js} +99 -99
  321. package/dist/{update-D79ppbMQ.js → update-la2AdLf3.js} +3 -3
  322. package/dist/{update-runner-bFqEARFN.js → update-runner-BvaywdEe.js} +1 -1
  323. package/dist/{update-runner-Cw7BbjGv.js → update-runner-n2snlf-4.js} +15 -15
  324. package/dist/{upgrade-command-Bh61DpzA.js → upgrade-command-28wRHZZ2.js} +15 -5
  325. package/dist/{upgrade-command-CvbcPPIF.js → upgrade-command-BOG7TpIq.js} +12 -2
  326. package/dist/{upgrade-command-Bvrv4iDU.js → upgrade-command-CWP8S_lt.js} +12 -2
  327. package/dist/{upgrade-command-L9y3xbza.js → upgrade-command-eqla-KnV.js} +12 -2
  328. package/dist/{web-BjMMu9l1.js → web-BedV4zGE.js} +3 -3
  329. package/dist/{web-DptF9st7.js → web-BjP-D0Iz.js} +3 -3
  330. package/dist/web-CDFWB79W.js +123 -0
  331. package/dist/{web-TRTzT6rm.js → web-Dbrx58hF.js} +3 -3
  332. package/dist/{webhooks-cli-2N03q0iY.js → webhooks-cli-BnmVPYkU.js} +6 -6
  333. package/dist/{whatsapp-actions-Cms8wQM1.js → whatsapp-actions-D2mBFzmK.js} +18 -18
  334. package/dist/{with-timeout-DEdycYxq.js → with-timeout-BodPmGCY.js} +3 -3
  335. package/dist/{workspace-D3pARwoB.js → workspace-CDw87aZG.js} +1 -1
  336. package/dist/{workspace-dirs-SsExQ3Bz.js → workspace-dirs-D3bousoX.js} +1 -1
  337. package/dist/{wsl-BJW8nTyL.js → wsl-CgXDjE09.js} +2 -2
  338. package/extensions/acpx/package.json +1 -1
  339. package/extensions/bluebubbles/package.json +1 -1
  340. package/extensions/copilot-proxy/package.json +1 -1
  341. package/extensions/diagnostics-otel/package.json +1 -1
  342. package/extensions/discord/package.json +1 -1
  343. package/extensions/feishu/package.json +1 -1
  344. package/extensions/google-gemini-cli-auth/package.json +1 -1
  345. package/extensions/googlechat/package.json +1 -1
  346. package/extensions/hand/package.json +1 -1
  347. package/extensions/imessage/package.json +1 -1
  348. package/extensions/irc/package.json +1 -1
  349. package/extensions/line/package.json +1 -1
  350. package/extensions/llm-task/package.json +1 -1
  351. package/extensions/matrix/CHANGELOG.md +12 -0
  352. package/extensions/matrix/package.json +1 -1
  353. package/extensions/mattermost/package.json +1 -1
  354. package/extensions/memory-core/package.json +1 -1
  355. package/extensions/memory-lancedb/package.json +1 -1
  356. package/extensions/minimax-portal-auth/package.json +1 -1
  357. package/extensions/msteams/CHANGELOG.md +12 -0
  358. package/extensions/msteams/package.json +1 -1
  359. package/extensions/nextcloud-talk/package.json +1 -1
  360. package/extensions/nostr/CHANGELOG.md +12 -0
  361. package/extensions/nostr/package.json +1 -1
  362. package/extensions/open-prose/package.json +1 -1
  363. package/extensions/signal/package.json +1 -1
  364. package/extensions/slack/package.json +1 -1
  365. package/extensions/synology-chat/package.json +1 -1
  366. package/extensions/telegram/package.json +1 -1
  367. package/extensions/tlon/package.json +1 -1
  368. package/extensions/twitch/CHANGELOG.md +12 -0
  369. package/extensions/twitch/package.json +1 -1
  370. package/extensions/voice-call/CHANGELOG.md +12 -0
  371. package/extensions/voice-call/package.json +1 -1
  372. package/extensions/whatsapp/package.json +1 -1
  373. package/extensions/zalo/CHANGELOG.md +12 -0
  374. package/extensions/zalo/package.json +1 -1
  375. package/extensions/zalouser/CHANGELOG.md +12 -0
  376. package/extensions/zalouser/package.json +1 -1
  377. package/package.json +1 -1
  378. package/dist/plugin-sdk/web-bxu2RRVS.js +0 -71
  379. package/dist/register.configure-B0i1vobR.js +0 -168
  380. package/dist/web-Bjj9WtlF.js +0 -123
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  Docs: https://docs.idlehands.ai
4
4
 
5
+ ## 4.0.17
6
+
7
+ ### Fixes
8
+
9
+ - Anton preflight plan validation: reject discovery artifacts that contain only status JSON (for example `{"status":"incomplete","filename":"..."}`) and require meaningful implementation-plan content before marking a plan as valid.
10
+ - Anton preflight fallback hardening: prevent JSON-only discovery output from being persisted as a plan file during recovery; retry/repair continues until a real plan is produced or the task is skipped.
11
+
12
+ ## 4.0.16
13
+
14
+ ### Fixes
15
+
16
+ - Upgrade/NPM source: force self-upgrade installs to use the official npmjs registry (`https://registry.npmjs.org`) to avoid `ETARGET` failures caused by misconfigured or lagging alternate registries under elevated (`sudo`) installs.
17
+
5
18
  ## 4.0.15
6
19
 
7
20
  ### Fixes
@@ -2,7 +2,7 @@ import { m as resolveOAuthDir } from "./paths-Cn44w-EB.js";
2
2
  import { y as resolveUserPath } from "./utils-CXzXXV2o.js";
3
3
  import { h as normalizeAccountId, m as DEFAULT_ACCOUNT_ID } from "./session-key-Cuihcz_O.js";
4
4
  import { t as resolveAccountEntry } from "./account-lookup-BtMY6XyP.js";
5
- import { r as hasWebCredsSync } from "./auth-store-DDzIMy8_.js";
5
+ import { r as hasWebCredsSync } from "./auth-store-CMyrmmSF.js";
6
6
  import fs from "node:fs";
7
7
  import path from "node:path";
8
8
 
@@ -1,6 +1,6 @@
1
1
  import { h as normalizeAccountId } from "./session-key-Cuihcz_O.js";
2
2
  import { t as resolveAccountEntry } from "./account-lookup-BtMY6XyP.js";
3
- import { o as createAccountListHelpers } from "./accounts-DLTODa_Z.js";
3
+ import { o as createAccountListHelpers } from "./accounts-D-hQsUw-.js";
4
4
 
5
5
  //#region src/signal/accounts.ts
6
6
  const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("signal");
@@ -1,6 +1,6 @@
1
1
  import { h as normalizeAccountId } from "./session-key-Cuihcz_O.js";
2
2
  import { t as resolveAccountEntry } from "./account-lookup-BtMY6XyP.js";
3
- import { o as createAccountListHelpers } from "./accounts-DLTODa_Z.js";
3
+ import { o as createAccountListHelpers } from "./accounts-D-hQsUw-.js";
4
4
 
5
5
  //#region src/imessage/accounts.ts
6
6
  const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("imessage");
@@ -1,26 +1,26 @@
1
1
  import "./paths-Cn44w-EB.js";
2
2
  import { B as theme, S as shortenHomePath, y as resolveUserPath } from "./utils-CXzXXV2o.js";
3
- import "./agent-scope-RA0zXRpu.js";
3
+ import "./agent-scope-Bn39ugK4.js";
4
4
  import "./subsystem-CGZX2PBV.js";
5
5
  import { n as defaultRuntime } from "./runtime-44j_X4Y6.js";
6
- import "./idlehands-root-B8cUs-5M.js";
6
+ import "./idlehands-root-DFL2GrNW.js";
7
7
  import "./exec-CKHMT0tZ.js";
8
- import { It as loadConfig } from "./model-selection-0dGxYGp8.js";
8
+ import { It as loadConfig } from "./model-selection-CSn9tUuH.js";
9
9
  import "./github-copilot-token-D7lpquOO.js";
10
10
  import "./boolean-BsqeuxE6.js";
11
11
  import "./env-Bx-F45X5.js";
12
12
  import "./host-env-security-DkAVVuaw.js";
13
13
  import { r as VERSION } from "./env-vars-sTMVGyld.js";
14
- import "./manifest-registry-Bak1x76G.js";
14
+ import "./manifest-registry-RfRn8HJx.js";
15
15
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-DVauVtrg.js";
16
16
  import { r as isKnownCoreToolId } from "./tool-catalog-4_Wxc542.js";
17
17
  import "./ip-DJ5wsTQn.js";
18
18
  import "./tailnet-C9lH_YnG.js";
19
19
  import "./ws-XBTtYpJc.js";
20
20
  import { t as resolveGatewayCredentialsFromConfig } from "./credentials-DcJ9zJDt.js";
21
- import { t as GatewayClient } from "./client-DxH9hwLn.js";
22
- import { t as buildGatewayConnectionDetails } from "./call-BRL23UCk.js";
23
- import "./pairing-token-lKXTMQ_M.js";
21
+ import { t as GatewayClient } from "./client-DIckPnsi.js";
22
+ import { t as buildGatewayConnectionDetails } from "./call-DnTBT02D.js";
23
+ import "./pairing-token-3hoCgQqp.js";
24
24
  import { t as formatDocsLink } from "./links-15764jZB.js";
25
25
  import { t as isMainModule } from "./is-main-DxnLDMqD.js";
26
26
  import { t as ensureIdleHandsCliOnPath } from "./path-env-CKSLQUS1.js";
@@ -2,13 +2,13 @@ import { g as resolveStateDir, y as resolveRequiredHomeDir } from "./paths-Cn44w
2
2
  import { h as pathExists, y as resolveUserPath } from "./utils-CXzXXV2o.js";
3
3
  import { t as createSubsystemLogger } from "./subsystem-CGZX2PBV.js";
4
4
  import { C as isSubagentSessionKey, S as isCronSessionKey, l as resolveAgentIdFromSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, w as parseAgentSessionKey } from "./session-key-Cuihcz_O.js";
5
- import { h as normalizeSkillFilter, i as openBoundaryFile, t as resolveIdleHandsPackageRoot } from "./idlehands-root-B8cUs-5M.js";
5
+ import { h as normalizeSkillFilter, i as openBoundaryFile, t as resolveIdleHandsPackageRoot } from "./idlehands-root-DFL2GrNW.js";
6
6
  import { t as runCommandWithTimeout } from "./exec-CKHMT0tZ.js";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import fs from "node:fs";
9
9
  import os from "node:os";
10
10
  import path from "node:path";
11
- import fs$1 from "node:fs/promises";
11
+ import fsPromises from "node:fs/promises";
12
12
 
13
13
  //#region src/config/model-input.ts
14
14
  function resolveAgentModelPrimaryValue(model) {
@@ -150,11 +150,11 @@ async function loadTemplate(name) {
150
150
  const templateDir = await resolveWorkspaceTemplateDir();
151
151
  const templatePath = path.join(templateDir, name);
152
152
  try {
153
- return stripFrontMatter(await fs$1.readFile(templatePath, "utf-8"));
153
+ return stripFrontMatter(await fsPromises.readFile(templatePath, "utf-8"));
154
154
  } catch {
155
155
  const devTemplatePath = name.endsWith(".md") ? path.join(templateDir, name.replace(/\.md$/, ".dev.md")) : "";
156
156
  if (devTemplatePath) try {
157
- return stripFrontMatter(await fs$1.readFile(devTemplatePath, "utf-8"));
157
+ return stripFrontMatter(await fsPromises.readFile(devTemplatePath, "utf-8"));
158
158
  } catch {}
159
159
  throw new Error(`Missing workspace template: ${name} (${templatePath}). Ensure docs/reference/templates are packaged.`);
160
160
  }
@@ -169,7 +169,7 @@ async function loadTemplate(name) {
169
169
  }
170
170
  async function writeFileIfMissing(filePath, content) {
171
171
  try {
172
- await fs$1.writeFile(filePath, content, {
172
+ await fsPromises.writeFile(filePath, content, {
173
173
  encoding: "utf-8",
174
174
  flag: "wx"
175
175
  });
@@ -181,7 +181,7 @@ async function writeFileIfMissing(filePath, content) {
181
181
  }
182
182
  async function fileExists(filePath) {
183
183
  try {
184
- await fs$1.access(filePath);
184
+ await fsPromises.access(filePath);
185
185
  return true;
186
186
  } catch {
187
187
  return false;
@@ -205,7 +205,7 @@ function parseWorkspaceOnboardingState(raw) {
205
205
  }
206
206
  async function readWorkspaceOnboardingState(statePath) {
207
207
  try {
208
- return parseWorkspaceOnboardingState(await fs$1.readFile(statePath, "utf-8")) ?? { version: WORKSPACE_STATE_VERSION };
208
+ return parseWorkspaceOnboardingState(await fsPromises.readFile(statePath, "utf-8")) ?? { version: WORKSPACE_STATE_VERSION };
209
209
  } catch (err) {
210
210
  if (err.code !== "ENOENT") throw err;
211
211
  return { version: WORKSPACE_STATE_VERSION };
@@ -219,20 +219,20 @@ async function isWorkspaceOnboardingCompleted(dir) {
219
219
  return typeof state.onboardingCompletedAt === "string" && state.onboardingCompletedAt.trim().length > 0;
220
220
  }
221
221
  async function writeWorkspaceOnboardingState(statePath, state) {
222
- await fs$1.mkdir(path.dirname(statePath), { recursive: true });
222
+ await fsPromises.mkdir(path.dirname(statePath), { recursive: true });
223
223
  const payload = `${JSON.stringify(state, null, 2)}\n`;
224
224
  const tmpPath = `${statePath}.tmp-${process.pid}-${Date.now().toString(36)}`;
225
225
  try {
226
- await fs$1.writeFile(tmpPath, payload, { encoding: "utf-8" });
227
- await fs$1.rename(tmpPath, statePath);
226
+ await fsPromises.writeFile(tmpPath, payload, { encoding: "utf-8" });
227
+ await fsPromises.rename(tmpPath, statePath);
228
228
  } catch (err) {
229
- await fs$1.unlink(tmpPath).catch(() => {});
229
+ await fsPromises.unlink(tmpPath).catch(() => {});
230
230
  throw err;
231
231
  }
232
232
  }
233
233
  async function hasGitRepo(dir) {
234
234
  try {
235
- await fs$1.stat(path.join(dir, ".git"));
235
+ await fsPromises.stat(path.join(dir, ".git"));
236
236
  return true;
237
237
  } catch {
238
238
  return false;
@@ -262,7 +262,7 @@ async function ensureGitRepo(dir, isBrandNewWorkspace) {
262
262
  }
263
263
  async function ensureAgentWorkspace(params) {
264
264
  const dir = resolveUserPath(params?.dir?.trim() ? params.dir.trim() : DEFAULT_AGENT_WORKSPACE_DIR);
265
- await fs$1.mkdir(dir, { recursive: true });
265
+ await fsPromises.mkdir(dir, { recursive: true });
266
266
  if (!params?.ensureBootstrapFiles) return { dir };
267
267
  const agentsPath = path.join(dir, DEFAULT_AGENTS_FILENAME);
268
268
  const soulPath = path.join(dir, DEFAULT_SOUL_FILENAME);
@@ -289,7 +289,7 @@ async function ensureAgentWorkspace(params) {
289
289
  const paths = [...templatePaths, ...userContentPaths];
290
290
  return (await Promise.all(paths.map(async (p) => {
291
291
  try {
292
- await fs$1.access(p);
292
+ await fsPromises.access(p);
293
293
  return true;
294
294
  } catch {
295
295
  return false;
@@ -322,7 +322,7 @@ async function ensureAgentWorkspace(params) {
322
322
  if (!state.bootstrapSeededAt && bootstrapExists) markState({ bootstrapSeededAt: nowIso() });
323
323
  if (!state.onboardingCompletedAt && state.bootstrapSeededAt && !bootstrapExists) markState({ onboardingCompletedAt: nowIso() });
324
324
  if (!state.bootstrapSeededAt && !state.onboardingCompletedAt && !bootstrapExists) {
325
- const [identityContent, userContent] = await Promise.all([fs$1.readFile(identityPath, "utf-8"), fs$1.readFile(userPath, "utf-8")]);
325
+ const [identityContent, userContent] = await Promise.all([fsPromises.readFile(identityPath, "utf-8"), fsPromises.readFile(userPath, "utf-8")]);
326
326
  const hasUserContent = await (async () => {
327
327
  const indicators = [
328
328
  path.join(dir, "memory"),
@@ -330,7 +330,7 @@ async function ensureAgentWorkspace(params) {
330
330
  path.join(dir, ".git")
331
331
  ];
332
332
  for (const indicator of indicators) try {
333
- await fs$1.access(indicator);
333
+ await fsPromises.access(indicator);
334
334
  return true;
335
335
  } catch {}
336
336
  return false;
@@ -361,7 +361,7 @@ async function resolveMemoryBootstrapEntries(resolvedDir) {
361
361
  for (const name of candidates) {
362
362
  const filePath = path.join(resolvedDir, name);
363
363
  try {
364
- await fs$1.access(filePath);
364
+ await fsPromises.access(filePath);
365
365
  entries.push({
366
366
  name,
367
367
  filePath
@@ -374,7 +374,7 @@ async function resolveMemoryBootstrapEntries(resolvedDir) {
374
374
  for (const entry of entries) {
375
375
  let key = entry.filePath;
376
376
  try {
377
- key = await fs$1.realpath(entry.filePath);
377
+ key = await fsPromises.realpath(entry.filePath);
378
378
  } catch {}
379
379
  if (seen.has(key)) continue;
380
380
  seen.add(key);
@@ -1,11 +1,11 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { Mt as resolveSessionKeyForRequest, jt as agentCommand } from "./reply-ZWOav11z.js";
3
- import { r as listAgentIds } from "./agent-scope-RA0zXRpu.js";
2
+ import { Mt as resolveSessionKeyForRequest, jt as agentCommand } from "./reply-DKIv9jez.js";
3
+ import { r as listAgentIds } from "./agent-scope-Bn39ugK4.js";
4
4
  import { s as normalizeAgentId } from "./session-key-Cuihcz_O.js";
5
- import { It as loadConfig } from "./model-selection-0dGxYGp8.js";
5
+ import { It as loadConfig } from "./model-selection-CSn9tUuH.js";
6
6
  import { t as formatCliCommand } from "./command-format-DInZLuZ8.js";
7
7
  import { h as GATEWAY_CLIENT_NAMES, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES } from "./message-channel-DVauVtrg.js";
8
- import { a as randomIdempotencyKey, n as callGateway } from "./call-BRL23UCk.js";
8
+ import { a as randomIdempotencyKey, n as callGateway } from "./call-DnTBT02D.js";
9
9
  import { n as withProgress } from "./progress-BQLz1r3L.js";
10
10
 
11
11
  //#region src/commands/agent-via-gateway.ts
@@ -4,7 +4,7 @@ import { t as formatCliCommand } from "./command-format-CPa5ksO_.js";
4
4
  import { r as listAgentIds } from "./agent-scope-mLXQGQde.js";
5
5
  import { s as normalizeAgentId } from "./session-key-B9ePuoPx.js";
6
6
  import { h as GATEWAY_CLIENT_NAMES, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES } from "./message-channel-Qpj4ExtQ.js";
7
- import { D as resolveSessionKeyForRequest, E as agentCommand } from "./subagent-registry-C6uygQa1.js";
7
+ import { D as resolveSessionKeyForRequest, E as agentCommand } from "./subagent-registry-CTZmDdGV.js";
8
8
  import { a as randomIdempotencyKey, n as callGateway } from "./call-DuNslqj2.js";
9
9
  import { n as withProgress } from "./progress-B76RkFx7.js";
10
10
 
@@ -11,7 +11,7 @@ import { t as formatCliCommand } from "./command-format-BAxx4PW5.js";
11
11
  import "./env-BpvqFD5n.js";
12
12
  import "./dock-QcCdS4qA.js";
13
13
  import "./tokens-Cg4XNE3H.js";
14
- import { H as callGateway, U as randomIdempotencyKey, a as agentCommand, o as resolveSessionKeyForRequest, v as withProgress } from "./pi-embedded-Swc7dke2.js";
14
+ import { H as callGateway, U as randomIdempotencyKey, a as agentCommand, o as resolveSessionKeyForRequest, v as withProgress } from "./pi-embedded-BcmA23Ak.js";
15
15
  import "./plugins-D-_jp4FO.js";
16
16
  import "./accounts-BwrguHMw.js";
17
17
  import "./bindings-hT7SPhiA.js";
@@ -64,7 +64,7 @@ import "./send-Cn2wvd3W.js";
64
64
  import "./resolve-route-BI3VjtwE.js";
65
65
  import "./proxy-CNZpb4NE.js";
66
66
  import "./replies-CqYEEgmA.js";
67
- import "./deps-TwKaIh1I.js";
67
+ import "./deps-PAzfFs3Q.js";
68
68
 
69
69
  //#region src/commands/agent-via-gateway.ts
70
70
  const NO_GATEWAY_TIMEOUT_MS = 2147e6;
@@ -12,7 +12,7 @@ import "./boolean-CE7i9tBR.js";
12
12
  import "./env-B5G1qwGc.js";
13
13
  import "./dock-BgOmHcbh.js";
14
14
  import "./tokens-BRLyURxW.js";
15
- import { H as randomIdempotencyKey, V as callGateway, a as agentCommand, o as resolveSessionKeyForRequest, v as withProgress } from "./pi-embedded-7XGjNojd.js";
15
+ import { H as randomIdempotencyKey, V as callGateway, a as agentCommand, o as resolveSessionKeyForRequest, v as withProgress } from "./pi-embedded-D_8x2ll-.js";
16
16
  import "./plugins-CRB60mCJ.js";
17
17
  import "./accounts-Dk8mJIrQ.js";
18
18
  import "./bindings-D3b5Fmc9.js";
@@ -67,7 +67,7 @@ import "./send-D4bMycQu.js";
67
67
  import "./resolve-route-DuttYY7A.js";
68
68
  import "./proxy-CRB9oCP5.js";
69
69
  import "./replies-6_GxvQYe.js";
70
- import "./deps-KIFYHxig.js";
70
+ import "./deps-B_5kPH1Q.js";
71
71
 
72
72
  //#region src/commands/agent-via-gateway.ts
73
73
  const NO_GATEWAY_TIMEOUT_MS = 2147e6;
@@ -6,18 +6,18 @@ import { t as formatCliCommand } from "./command-format-CPa5ksO_.js";
6
6
  import { a as resolveAgentDir, b as DEFAULT_IDENTITY_FILENAME, d as resolveDefaultAgentId, n as listAgentEntries, u as resolveAgentWorkspaceDir } from "./agent-scope-mLXQGQde.js";
7
7
  import { m as DEFAULT_ACCOUNT_ID, s as normalizeAgentId, t as DEFAULT_AGENT_ID } from "./session-key-B9ePuoPx.js";
8
8
  import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-CCrfZ49T.js";
9
- import { M as identityHasValues, P as parseIdentityMarkdown } from "./subagent-registry-C6uygQa1.js";
9
+ import { M as identityHasValues, P as parseIdentityMarkdown } from "./subagent-registry-CTZmDdGV.js";
10
10
  import { l as resolveSessionTranscriptsDirForAgent } from "./paths-CC17i2eK.js";
11
11
  import { a as ensureWorkspaceAndSessions, l as moveToTrash } from "./onboard-helpers-Dp6wXNs7.js";
12
12
  import { t as WizardCancelledError } from "./prompts-D3HHe1ZZ.js";
13
13
  import { t as createClackPrompter } from "./clack-prompter-Bo7vS5xP.js";
14
14
  import { t as resolveChannelDefaultAccountId } from "./helpers-CIyuenBU.js";
15
15
  import { a as parseBindingSpecs, i as describeBinding, n as applyAgentBindings, o as removeAgentBindings, r as buildChannelBindings, t as requireValidConfigSnapshot } from "./config-validation-BgKexeQb.js";
16
- import { a as pruneAgentConfig, i as loadAgentIdentity, n as buildAgentSummaries, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-8pxRoZvL.js";
17
- import { r as setupChannels } from "./onboard-channels-mLWuxUlN.js";
16
+ import { a as pruneAgentConfig, i as loadAgentIdentity, n as buildAgentSummaries, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-ADCeu0yD.js";
17
+ import { r as setupChannels } from "./onboard-channels-CG1R8Ozs.js";
18
18
  import { n as logConfigUpdated } from "./logging-MF6Thoxk.js";
19
19
  import { n as promptAuthChoiceGrouped } from "./auth-choice-prompt-kycZqH8q.js";
20
- import { i as applyAuthChoice, r as warnIfModelConfigLooksOff } from "./auth-choice-D-_AVWgJ.js";
20
+ import { i as applyAuthChoice, r as warnIfModelConfigLooksOff } from "./auth-choice-01ELTnLA.js";
21
21
  import path from "node:path";
22
22
  import fs from "node:fs/promises";
23
23
 
@@ -1,6 +1,6 @@
1
1
  import { a as resolveAgentDir, d as resolveDefaultAgentId, n as listAgentEntries, u as resolveAgentWorkspaceDir } from "./agent-scope-mLXQGQde.js";
2
2
  import { s as normalizeAgentId } from "./session-key-B9ePuoPx.js";
3
- import { M as identityHasValues, N as loadAgentIdentityFromWorkspace } from "./subagent-registry-C6uygQa1.js";
3
+ import { M as identityHasValues, N as loadAgentIdentityFromWorkspace } from "./subagent-registry-CTZmDdGV.js";
4
4
 
5
5
  //#region src/commands/agents.config.ts
6
6
  function findAgentEntryIndex(list, agentId) {
@@ -1,5 +1,5 @@
1
- import { en as identityHasValues, tn as loadAgentIdentityFromWorkspace } from "./reply-ZWOav11z.js";
2
- import { a as resolveAgentDir, d as resolveDefaultAgentId, n as listAgentEntries, u as resolveAgentWorkspaceDir } from "./agent-scope-RA0zXRpu.js";
1
+ import { en as identityHasValues, tn as loadAgentIdentityFromWorkspace } from "./reply-DKIv9jez.js";
2
+ import { a as resolveAgentDir, d as resolveDefaultAgentId, n as listAgentEntries, u as resolveAgentWorkspaceDir } from "./agent-scope-Bn39ugK4.js";
3
3
  import { s as normalizeAgentId } from "./session-key-Cuihcz_O.js";
4
4
 
5
5
  //#region src/commands/agents.config.ts
@@ -225,7 +225,7 @@ async function loadAntonConfig() {
225
225
  }
226
226
  }
227
227
  async function runAgentTask(args) {
228
- const { agentCliCommand } = await import("./agent-via-gateway-BvXS1sXv.js").then((n) => n.n);
228
+ const { agentCliCommand } = await import("./agent-via-gateway-BVY7w5-N.js").then((n) => n.n);
229
229
  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;
230
230
  const result = await agentCliCommand({
231
231
  message: args.message,
@@ -245,10 +245,28 @@ function makePlanFilePath(planDir, taskIndex) {
245
245
  async function ensurePlanDir(planDir) {
246
246
  await fs.mkdir(planDir, { recursive: true });
247
247
  }
248
+ function looksLikeStatusJsonOnly(text) {
249
+ const trimmed = text.trim();
250
+ if (!trimmed.startsWith("{") || !trimmed.endsWith("}")) return false;
251
+ try {
252
+ const parsed = JSON.parse(trimmed);
253
+ const keys = Object.keys(parsed).toSorted();
254
+ return keys.length <= 3 && keys.includes("status") && keys.includes("filename");
255
+ } catch {
256
+ return false;
257
+ }
258
+ }
259
+ function isUsefulPlanText(text) {
260
+ const trimmed = text.trim();
261
+ if (trimmed.length < 120) return false;
262
+ if (looksLikeStatusJsonOnly(trimmed)) return false;
263
+ return /^#\s+/m.test(trimmed) || /\b(Implementation approach|What needs to change|Files to modify|How to verify)\b/i.test(trimmed);
264
+ }
248
265
  async function isPlanFileValid(filePath) {
249
266
  try {
250
267
  const stat = await fs.stat(filePath);
251
- return stat.isFile() && stat.size > 10;
268
+ if (!stat.isFile() || stat.size < 20) return false;
269
+ return isUsefulPlanText(await fs.readFile(filePath, "utf8"));
252
270
  } catch {
253
271
  return false;
254
272
  }
@@ -290,7 +308,7 @@ function extractJsonObject(text) {
290
308
  }
291
309
  function extractPlanMarkdownFromText(text) {
292
310
  const candidate = text.match(/```(?:markdown|md)?\s*([\s\S]*?)```/i)?.[1]?.trim() ?? text.trim();
293
- if (candidate.length < 60) return;
311
+ if (!isUsefulPlanText(candidate)) return;
294
312
  return candidate;
295
313
  }
296
314
  function normalizeDiscoveryFilename(filename, expectedPlanFile) {
@@ -314,7 +332,7 @@ Task: ${task}`;
314
332
  }
315
333
  async function tryPersistPlanFallback(params) {
316
334
  const planText = (((typeof params.parsed?.planMarkdown === "string" ? params.parsed.planMarkdown : void 0) ?? (typeof params.parsed?.plan === "string" ? params.parsed.plan : void 0))?.trim() || extractPlanMarkdownFromText(params.rawText) || "").trim();
317
- if (planText.length < 60) return false;
335
+ if (!isUsefulPlanText(planText)) return false;
318
336
  await fs.writeFile(params.planFile, `${planText}\n`, "utf8");
319
337
  return await isPlanFileValid(params.planFile);
320
338
  }
@@ -219,7 +219,7 @@ async function loadAntonConfig() {
219
219
  }
220
220
  }
221
221
  async function runAgentTask(args) {
222
- const { agentCliCommand } = await import("./agent-via-gateway-CIM26Dxl.js");
222
+ const { agentCliCommand } = await import("./agent-via-gateway-BlRwv6D6.js");
223
223
  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;
224
224
  const result = await agentCliCommand({
225
225
  message: args.message,
@@ -239,10 +239,28 @@ function makePlanFilePath(planDir, taskIndex) {
239
239
  async function ensurePlanDir(planDir) {
240
240
  await fs.mkdir(planDir, { recursive: true });
241
241
  }
242
+ function looksLikeStatusJsonOnly(text) {
243
+ const trimmed = text.trim();
244
+ if (!trimmed.startsWith("{") || !trimmed.endsWith("}")) return false;
245
+ try {
246
+ const parsed = JSON.parse(trimmed);
247
+ const keys = Object.keys(parsed).toSorted();
248
+ return keys.length <= 3 && keys.includes("status") && keys.includes("filename");
249
+ } catch {
250
+ return false;
251
+ }
252
+ }
253
+ function isUsefulPlanText(text) {
254
+ const trimmed = text.trim();
255
+ if (trimmed.length < 120) return false;
256
+ if (looksLikeStatusJsonOnly(trimmed)) return false;
257
+ return /^#\s+/m.test(trimmed) || /\b(Implementation approach|What needs to change|Files to modify|How to verify)\b/i.test(trimmed);
258
+ }
242
259
  async function isPlanFileValid(filePath) {
243
260
  try {
244
261
  const stat = await fs.stat(filePath);
245
- return stat.isFile() && stat.size > 10;
262
+ if (!stat.isFile() || stat.size < 20) return false;
263
+ return isUsefulPlanText(await fs.readFile(filePath, "utf8"));
246
264
  } catch {
247
265
  return false;
248
266
  }
@@ -284,7 +302,7 @@ function extractJsonObject(text) {
284
302
  }
285
303
  function extractPlanMarkdownFromText(text) {
286
304
  const candidate = text.match(/```(?:markdown|md)?\s*([\s\S]*?)```/i)?.[1]?.trim() ?? text.trim();
287
- if (candidate.length < 60) return;
305
+ if (!isUsefulPlanText(candidate)) return;
288
306
  return candidate;
289
307
  }
290
308
  function normalizeDiscoveryFilename(filename, expectedPlanFile) {
@@ -308,7 +326,7 @@ Task: ${task}`;
308
326
  }
309
327
  async function tryPersistPlanFallback(params) {
310
328
  const planText = (((typeof params.parsed?.planMarkdown === "string" ? params.parsed.planMarkdown : void 0) ?? (typeof params.parsed?.plan === "string" ? params.parsed.plan : void 0))?.trim() || extractPlanMarkdownFromText(params.rawText) || "").trim();
311
- if (planText.length < 60) return false;
329
+ if (!isUsefulPlanText(planText)) return false;
312
330
  await fs.writeFile(params.planFile, `${planText}\n`, "utf8");
313
331
  return await isPlanFileValid(params.planFile);
314
332
  }
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { t as CONFIG_DIR } from "./utils-CXzXXV2o.js";
3
3
  import path from "node:path";
4
4
  import { promisify } from "node:util";
5
- import fs from "node:fs/promises";
5
+ import fsPromises from "node:fs/promises";
6
6
  import { execFile } from "node:child_process";
7
7
 
8
8
  //#region src/commands/anton.ts
@@ -16,18 +16,18 @@ const ANTON_STATE_PATH = path.join(CONFIG_DIR, "anton.state.json");
16
16
  const ANTON_LOCK_PATH = path.join(CONFIG_DIR, "anton.lock");
17
17
  const execFile$1 = promisify(execFile);
18
18
  async function ensureStateDir() {
19
- await fs.mkdir(CONFIG_DIR, { recursive: true });
19
+ await fsPromises.mkdir(CONFIG_DIR, { recursive: true });
20
20
  }
21
21
  async function readState() {
22
22
  try {
23
- return JSON.parse(await fs.readFile(ANTON_STATE_PATH, "utf8"));
23
+ return JSON.parse(await fsPromises.readFile(ANTON_STATE_PATH, "utf8"));
24
24
  } catch {
25
25
  return { running: false };
26
26
  }
27
27
  }
28
28
  async function writeState(state) {
29
29
  await ensureStateDir();
30
- await fs.writeFile(ANTON_STATE_PATH, `${JSON.stringify({
30
+ await fsPromises.writeFile(ANTON_STATE_PATH, `${JSON.stringify({
31
31
  ...state,
32
32
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
33
33
  }, null, 2)}\n`, "utf8");
@@ -35,7 +35,7 @@ async function writeState(state) {
35
35
  async function acquireLock(force = false) {
36
36
  await ensureStateDir();
37
37
  try {
38
- await fs.writeFile(ANTON_LOCK_PATH, JSON.stringify({
38
+ await fsPromises.writeFile(ANTON_LOCK_PATH, JSON.stringify({
39
39
  pid: process.pid,
40
40
  startedAt: (/* @__PURE__ */ new Date()).toISOString()
41
41
  }), {
@@ -44,8 +44,8 @@ async function acquireLock(force = false) {
44
44
  });
45
45
  } catch {
46
46
  if (!force) throw new Error("Anton is already running (lock held)");
47
- await fs.rm(ANTON_LOCK_PATH, { force: true });
48
- await fs.writeFile(ANTON_LOCK_PATH, JSON.stringify({
47
+ await fsPromises.rm(ANTON_LOCK_PATH, { force: true });
48
+ await fsPromises.writeFile(ANTON_LOCK_PATH, JSON.stringify({
49
49
  pid: process.pid,
50
50
  startedAt: (/* @__PURE__ */ new Date()).toISOString(),
51
51
  force: true
@@ -56,7 +56,7 @@ async function acquireLock(force = false) {
56
56
  }
57
57
  }
58
58
  async function releaseLock() {
59
- await fs.rm(ANTON_LOCK_PATH, { force: true });
59
+ await fsPromises.rm(ANTON_LOCK_PATH, { force: true });
60
60
  }
61
61
  async function shouldStop() {
62
62
  const s = await readState();
@@ -218,14 +218,14 @@ async function antonStop(runtime) {
218
218
  /** Load Anton config from the IdleHands config file. */
219
219
  async function loadAntonConfig() {
220
220
  try {
221
- const { loadConfig } = await import("./model-selection-0dGxYGp8.js").then((n) => n.Mt);
221
+ const { loadConfig } = await import("./model-selection-CSn9tUuH.js").then((n) => n.Mt);
222
222
  return loadConfig().anton ?? {};
223
223
  } catch {
224
224
  return {};
225
225
  }
226
226
  }
227
227
  async function runAgentTask(args) {
228
- const { agentCliCommand } = await import("./agent-via-gateway-CcaPUQrc.js").then((n) => n.n);
228
+ const { agentCliCommand } = await import("./agent-via-gateway-BDWomN2t.js").then((n) => n.n);
229
229
  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;
230
230
  const result = await agentCliCommand({
231
231
  message: args.message,
@@ -243,12 +243,30 @@ function makePlanFilePath(planDir, taskIndex) {
243
243
  return path.join(planDir, `task-${taskIndex}-${Date.now()}.md`);
244
244
  }
245
245
  async function ensurePlanDir(planDir) {
246
- await fs.mkdir(planDir, { recursive: true });
246
+ await fsPromises.mkdir(planDir, { recursive: true });
247
+ }
248
+ function looksLikeStatusJsonOnly(text) {
249
+ const trimmed = text.trim();
250
+ if (!trimmed.startsWith("{") || !trimmed.endsWith("}")) return false;
251
+ try {
252
+ const parsed = JSON.parse(trimmed);
253
+ const keys = Object.keys(parsed).toSorted();
254
+ return keys.length <= 3 && keys.includes("status") && keys.includes("filename");
255
+ } catch {
256
+ return false;
257
+ }
258
+ }
259
+ function isUsefulPlanText(text) {
260
+ const trimmed = text.trim();
261
+ if (trimmed.length < 120) return false;
262
+ if (looksLikeStatusJsonOnly(trimmed)) return false;
263
+ return /^#\s+/m.test(trimmed) || /\b(Implementation approach|What needs to change|Files to modify|How to verify)\b/i.test(trimmed);
247
264
  }
248
265
  async function isPlanFileValid(filePath) {
249
266
  try {
250
- const stat = await fs.stat(filePath);
251
- return stat.isFile() && stat.size > 10;
267
+ const stat = await fsPromises.stat(filePath);
268
+ if (!stat.isFile() || stat.size < 20) return false;
269
+ return isUsefulPlanText(await fsPromises.readFile(filePath, "utf8"));
252
270
  } catch {
253
271
  return false;
254
272
  }
@@ -290,7 +308,7 @@ function extractJsonObject(text) {
290
308
  }
291
309
  function extractPlanMarkdownFromText(text) {
292
310
  const candidate = text.match(/```(?:markdown|md)?\s*([\s\S]*?)```/i)?.[1]?.trim() ?? text.trim();
293
- if (candidate.length < 60) return;
311
+ if (!isUsefulPlanText(candidate)) return;
294
312
  return candidate;
295
313
  }
296
314
  function normalizeDiscoveryFilename(filename, expectedPlanFile) {
@@ -314,8 +332,8 @@ Task: ${task}`;
314
332
  }
315
333
  async function tryPersistPlanFallback(params) {
316
334
  const planText = (((typeof params.parsed?.planMarkdown === "string" ? params.parsed.planMarkdown : void 0) ?? (typeof params.parsed?.plan === "string" ? params.parsed.plan : void 0))?.trim() || extractPlanMarkdownFromText(params.rawText) || "").trim();
317
- if (planText.length < 60) return false;
318
- await fs.writeFile(params.planFile, `${planText}\n`, "utf8");
335
+ if (!isUsefulPlanText(planText)) return false;
336
+ await fsPromises.writeFile(params.planFile, `${planText}\n`, "utf8");
319
337
  return await isPlanFileValid(params.planFile);
320
338
  }
321
339
  async function runDiscoveryPhase(args) {
@@ -506,7 +524,7 @@ async function runReviewPhase(args) {
506
524
  }
507
525
  async function runAnton(args) {
508
526
  const filePath = path.resolve(args.taskFile);
509
- const pending = parsePendingTasks(await fs.readFile(filePath, "utf8"));
527
+ const pending = parsePendingTasks(await fsPromises.readFile(filePath, "utf8"));
510
528
  const notify = args.onProgress ?? (async () => {});
511
529
  if (args.dryRun) {
512
530
  args.runtime.log(`Dry run: ${pending.length} pending task(s)`);
@@ -532,7 +550,7 @@ async function runAnton(args) {
532
550
  const reviewTimeout = antonCfg.reviewTimeoutSec ?? taskTimeout;
533
551
  const preflightMaxRetries = antonCfg.preflightMaxRetries ?? 2;
534
552
  const planDir = antonCfg.planDir ? path.resolve(antonCfg.planDir) : path.resolve(path.dirname(filePath), ".agents", "tasks");
535
- const { loadConfig } = await import("./model-selection-0dGxYGp8.js").then((n) => n.Mt);
553
+ const { loadConfig } = await import("./model-selection-CSn9tUuH.js").then((n) => n.Mt);
536
554
  const cfg = loadConfig();
537
555
  const defaultTimeout = String(Number.isFinite(args.timeoutSec) && (args.timeoutSec ?? 0) > 0 ? args.timeoutSec : cfg.agents?.defaults?.timeoutSeconds ?? taskTimeout);
538
556
  await acquireLock(Boolean(args.force));
@@ -611,8 +629,8 @@ async function runAnton(args) {
611
629
  total: pending.length,
612
630
  task: task.text
613
631
  });
614
- const updated = markTaskDone(await fs.readFile(filePath, "utf8"), task.line);
615
- await fs.writeFile(filePath, updated, "utf8");
632
+ const updated = markTaskDone(await fsPromises.readFile(filePath, "utf8"), task.line);
633
+ await fsPromises.writeFile(filePath, updated, "utf8");
616
634
  completed += 1;
617
635
  await notify({
618
636
  phase: "task_complete",
@@ -670,8 +688,8 @@ async function runAnton(args) {
670
688
  });
671
689
  const changedAfter = await getGitChangedFileCount(gitCwd);
672
690
  if (mode === "preflight" && changedBefore !== null && changedAfter !== null && changedAfter <= changedBefore) throw new Error("Implementation made no repository changes; refusing to mark task complete");
673
- const updated = markTaskDone(await fs.readFile(filePath, "utf8"), task.line);
674
- await fs.writeFile(filePath, updated, "utf8");
691
+ const updated = markTaskDone(await fsPromises.readFile(filePath, "utf8"), task.line);
692
+ await fsPromises.writeFile(filePath, updated, "utf8");
675
693
  completed += 1;
676
694
  await notify({
677
695
  phase: "task_complete",