@visorcraft/idlehands 4.0.11 → 4.0.12

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 (94) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/{agent-via-gateway-DFfeM1f8.js → agent-via-gateway-DY9s7C5O.js} +7 -7
  3. package/dist/{anton-y_9cmetd.js → anton-CFb43gM1.js} +1 -1
  4. package/dist/{audio-preflight-BSlR2jEq.js → audio-preflight-CW8IH1lU.js} +4 -4
  5. package/dist/build-info.json +3 -3
  6. package/dist/bundled/boot-md/handler.js +7 -7
  7. package/dist/bundled/session-memory/handler.js +7 -7
  8. package/dist/{chrome-_2tzVjVl.js → chrome-BcJB6PcM.js} +9 -9
  9. package/dist/{command-registry-D_coG163.js → command-registry-Ch1LX7dG.js} +6 -6
  10. package/dist/{completion-cli-CAERO_KP.js → completion-cli-4GjUKmcp.js} +1 -1
  11. package/dist/{completion-cli-CTGLJrsU.js → completion-cli-Dp2cBB7r.js} +2 -2
  12. package/dist/{config-cli-Ft-MoBA0.js → config-cli-DHOt2fiX.js} +1 -1
  13. package/dist/{config-cli-QKNRUury.js → config-cli-fEyZU_fS.js} +1 -1
  14. package/dist/{configure-Dp2SC2bd.js → configure-Dd1r8lCc.js} +80 -0
  15. package/dist/{configure-CSFuzRuG.js → configure-UHNr2tF7.js} +80 -0
  16. package/dist/daemon-cli.js +6 -6
  17. package/dist/{deliver-CVTXl0Cv.js → deliver-BUiQ-9fE.js} +1 -1
  18. package/dist/{deps-DMIwjElF.js → deps-LUq8tPGl.js} +1 -1
  19. package/dist/{doctor-completion-BTK69nw4.js → doctor-completion-D4_Xz0GW.js} +1 -1
  20. package/dist/{doctor-completion-C4IaYTpf.js → doctor-completion-k1NPhnSD.js} +1 -1
  21. package/dist/{emergency-stop-BFA2JE99.js → emergency-stop-DvzTW9v2.js} +7 -7
  22. package/dist/entry.js +1 -1
  23. package/dist/{gateway-cli-vdmjtTaI.js → gateway-cli-BvfZQI4f.js} +1 -1
  24. package/dist/{gateway-cli-DOdmF6H_.js → gateway-cli-BzLinXVg.js} +1 -1
  25. package/dist/{image-COw__ACq.js → image-D8b_rlQC.js} +1 -1
  26. package/dist/index.js +1 -1
  27. package/dist/llm-slug-generator.js +7 -7
  28. package/dist/{onboard-BGttnPtz.js → onboard-BbaM-mHQ.js} +1 -1
  29. package/dist/{onboard-DmJrRFm6.js → onboard-Co1aTajZ.js} +1 -1
  30. package/dist/{onboarding-BH14vh8u.js → onboarding-DJ5uRALX.js} +1 -1
  31. package/dist/{onboarding-CatctZfr.js → onboarding-GUp6F9pi.js} +1 -1
  32. package/dist/{onboarding.finalize-y4p-rW_B.js → onboarding.finalize-BF0WE60A.js} +3 -3
  33. package/dist/{onboarding.finalize-B1xAj3zP.js → onboarding.finalize-CCSwszBV.js} +4 -4
  34. package/dist/{pi-embedded-BuvTuh5b.js → pi-embedded-AgRG5Ssx.js} +26 -26
  35. package/dist/{pi-embedded-helpers-CyTpDKo5.js → pi-embedded-helpers-CghCLoPo.js} +4 -4
  36. package/dist/{program-CA0hdsv9.js → program-Bxd5OUE_.js} +2 -2
  37. package/dist/{program-context-C4ufrdyk.js → program-context-CeyrkmGJ.js} +8 -8
  38. package/dist/{prompt-select-styled-HOmODGGE.js → prompt-select-styled-Dxt7znW6.js} +1 -1
  39. package/dist/{prompt-select-styled-CoVuIbC6.js → prompt-select-styled-QGoSGceD.js} +1 -1
  40. package/dist/{pw-ai-CowTfhOG.js → pw-ai-CfYaR1K2.js} +1 -1
  41. package/dist/{register.configure-oHPQgac2.js → register.configure-BFu6tHW9.js} +1 -1
  42. package/dist/{register.configure-sCW4AYHX.js → register.configure-WUqB9nea.js} +1 -1
  43. package/dist/{register.maintenance-BNuu5G8a.js → register.maintenance-D3gFMNHJ.js} +5 -5
  44. package/dist/{register.maintenance-DBOmtQ_7.js → register.maintenance-D_Xb1h9n.js} +4 -4
  45. package/dist/{register.onboard-5CNO_6MJ.js → register.onboard-DFQubnz_.js} +2 -2
  46. package/dist/{register.onboard-DldXC3xb.js → register.onboard-DaU8z55G.js} +2 -2
  47. package/dist/{register.setup-Dtbm5ocC.js → register.setup-6T_0-gzK.js} +2 -2
  48. package/dist/{register.setup-B5GQC9NR.js → register.setup-DeEMWLk1.js} +2 -2
  49. package/dist/{register.subclis-WjFoTOYx.js → register.subclis-Pcge2ZUD.js} +3 -3
  50. package/dist/{run-main-BtJbp5Nx.js → run-main-FpL-RwcQ.js} +5 -5
  51. package/dist/{runner-BzNdfqDz.js → runner-PgRFPYUj.js} +1 -1
  52. package/dist/{update-cli-Dv_xfkAV.js → update-cli-CdX0Fl_m.js} +5 -5
  53. package/dist/{update-cli-DBsT1H2C.js → update-cli-POnZaBSb.js} +4 -4
  54. package/dist/{web-C1TtGYq7.js → web-DsPIUwWo.js} +8 -8
  55. package/extensions/acpx/package.json +1 -1
  56. package/extensions/bluebubbles/package.json +1 -1
  57. package/extensions/copilot-proxy/package.json +1 -1
  58. package/extensions/diagnostics-otel/package.json +1 -1
  59. package/extensions/discord/package.json +1 -1
  60. package/extensions/feishu/package.json +1 -1
  61. package/extensions/google-gemini-cli-auth/package.json +1 -1
  62. package/extensions/googlechat/package.json +1 -1
  63. package/extensions/hand/package.json +1 -1
  64. package/extensions/imessage/package.json +1 -1
  65. package/extensions/irc/package.json +1 -1
  66. package/extensions/line/package.json +1 -1
  67. package/extensions/llm-task/package.json +1 -1
  68. package/extensions/matrix/CHANGELOG.md +6 -0
  69. package/extensions/matrix/package.json +1 -1
  70. package/extensions/mattermost/package.json +1 -1
  71. package/extensions/memory-core/package.json +1 -1
  72. package/extensions/memory-lancedb/package.json +1 -1
  73. package/extensions/minimax-portal-auth/package.json +1 -1
  74. package/extensions/msteams/CHANGELOG.md +6 -0
  75. package/extensions/msteams/package.json +1 -1
  76. package/extensions/nextcloud-talk/package.json +1 -1
  77. package/extensions/nostr/CHANGELOG.md +6 -0
  78. package/extensions/nostr/package.json +1 -1
  79. package/extensions/open-prose/package.json +1 -1
  80. package/extensions/signal/package.json +1 -1
  81. package/extensions/slack/package.json +1 -1
  82. package/extensions/synology-chat/package.json +1 -1
  83. package/extensions/telegram/package.json +1 -1
  84. package/extensions/tlon/package.json +1 -1
  85. package/extensions/twitch/CHANGELOG.md +6 -0
  86. package/extensions/twitch/package.json +1 -1
  87. package/extensions/voice-call/CHANGELOG.md +6 -0
  88. package/extensions/voice-call/package.json +1 -1
  89. package/extensions/whatsapp/package.json +1 -1
  90. package/extensions/zalo/CHANGELOG.md +6 -0
  91. package/extensions/zalo/package.json +1 -1
  92. package/extensions/zalouser/CHANGELOG.md +6 -0
  93. package/extensions/zalouser/package.json +1 -1
  94. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  Docs: https://docs.idlehands.ai
4
4
 
5
+ ## 4.0.12
6
+
7
+ ### Changes
8
+
9
+ - Configure wizard: add an `Anton` section so `idlehands configure` can interactively set Anton defaults (mode, timeout, approval mode, and preflight options).
10
+
11
+ ### Fixes
12
+
13
+ - Release hygiene: removed an accidental memory commit from `main` history.
14
+
5
15
  ## 2026.2.27
6
16
 
7
17
  ### Changes
@@ -12,14 +12,14 @@ 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-BuvTuh5b.js";
15
+ import { H as randomIdempotencyKey, V as callGateway, a as agentCommand, o as resolveSessionKeyForRequest, v as withProgress } from "./pi-embedded-AgRG5Ssx.js";
16
16
  import "./plugins-CRB60mCJ.js";
17
17
  import "./accounts-Dk8mJIrQ.js";
18
18
  import "./bindings-D3b5Fmc9.js";
19
19
  import "./auth-store-DXT-l7fO.js";
20
20
  import "./send-BeIZJuy4.js";
21
21
  import "./send-DmLC7aEF.js";
22
- import "./deliver-CVTXl0Cv.js";
22
+ import "./deliver-BUiQ-9fE.js";
23
23
  import "./diagnostic-4owMk4vH.js";
24
24
  import "./diagnostic-session-state-BGF2r-kt.js";
25
25
  import "./accounts-BDVs8LTu.js";
@@ -27,8 +27,8 @@ import "./send-Dfa3sn6r.js";
27
27
  import "./image-ops-D1KtygWz.js";
28
28
  import "./pi-model-discovery-Bb__OY-j.js";
29
29
  import { d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, s as normalizeMessageChannel } from "./message-channel-C8QtrwEU.js";
30
- import "./pi-embedded-helpers-CyTpDKo5.js";
31
- import "./chrome-_2tzVjVl.js";
30
+ import "./pi-embedded-helpers-CghCLoPo.js";
31
+ import "./chrome-BcJB6PcM.js";
32
32
  import "./ssrf-CZeHDwVZ.js";
33
33
  import "./frontmatter-BOudmHMS.js";
34
34
  import "./skills-CnAPWfca.js";
@@ -42,7 +42,7 @@ import "./accounts-CIvVRRHb.js";
42
42
  import "./paths-D_qUel1T.js";
43
43
  import "./tool-images-CcGZpzmq.js";
44
44
  import "./thinking-z4_linel.js";
45
- import "./image-COw__ACq.js";
45
+ import "./image-D8b_rlQC.js";
46
46
  import "./reply-prefix-BUgeSN2R.js";
47
47
  import "./manager-BE_76jWB.js";
48
48
  import "./gemini-auth-CIyaa44H.js";
@@ -57,7 +57,7 @@ import "./ir-B7IBoKLy.js";
57
57
  import "./render-MTSxc7LK.js";
58
58
  import "./commands-registry-j4vAzcF2.js";
59
59
  import "./skill-commands-Ck3flWX7.js";
60
- import "./runner-BzNdfqDz.js";
60
+ import "./runner-PgRFPYUj.js";
61
61
  import "./fetch-CsfR_943.js";
62
62
  import "./channel-activity-D_TMOGQ0.js";
63
63
  import "./tables-5k-zOZ-s.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-DMIwjElF.js";
70
+ import "./deps-LUq8tPGl.js";
71
71
 
72
72
  //#region src/commands/agent-via-gateway.ts
73
73
  const NO_GATEWAY_TIMEOUT_MS = 2147e6;
@@ -216,7 +216,7 @@ async function loadAntonConfig() {
216
216
  }
217
217
  }
218
218
  async function runAgentTask(args) {
219
- const { agentCliCommand } = await import("./agent-via-gateway-DFfeM1f8.js");
219
+ const { agentCliCommand } = await import("./agent-via-gateway-DY9s7C5O.js");
220
220
  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;
221
221
  await agentCliCommand({
222
222
  message: args.message,
@@ -17,8 +17,8 @@ import "./accounts-BDVs8LTu.js";
17
17
  import "./image-ops-D1KtygWz.js";
18
18
  import "./pi-model-discovery-Bb__OY-j.js";
19
19
  import "./message-channel-C8QtrwEU.js";
20
- import "./pi-embedded-helpers-CyTpDKo5.js";
21
- import "./chrome-_2tzVjVl.js";
20
+ import "./pi-embedded-helpers-CghCLoPo.js";
21
+ import "./chrome-BcJB6PcM.js";
22
22
  import "./ssrf-CZeHDwVZ.js";
23
23
  import "./frontmatter-BOudmHMS.js";
24
24
  import "./skills-CnAPWfca.js";
@@ -32,11 +32,11 @@ import "./accounts-CIvVRRHb.js";
32
32
  import "./paths-D_qUel1T.js";
33
33
  import "./tool-images-CcGZpzmq.js";
34
34
  import "./thinking-z4_linel.js";
35
- import "./image-COw__ACq.js";
35
+ import "./image-D8b_rlQC.js";
36
36
  import "./gemini-auth-CIyaa44H.js";
37
37
  import "./fetch-guard-iuQsIjqN.js";
38
38
  import "./local-roots-KN4Hp1yZ.js";
39
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-BzNdfqDz.js";
39
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-PgRFPYUj.js";
40
40
 
41
41
  //#region src/media-understanding/audio-preflight.ts
42
42
  /**
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.0.11",
3
- "commit": "fd2e5f4ed2adc501eed99bd0dd17515091f0c61e",
4
- "builtAt": "2026-03-01T19:32:26.790Z"
2
+ "version": "4.0.12",
3
+ "commit": "8cf4a8394766a081b73604e28ea7ca93828cf0f6",
4
+ "builtAt": "2026-03-01T20:20:42.955Z"
5
5
  }
@@ -11,14 +11,14 @@ import "../../boolean-CE7i9tBR.js";
11
11
  import "../../env-B5G1qwGc.js";
12
12
  import "../../dock-BgOmHcbh.js";
13
13
  import { n as SILENT_REPLY_TOKEN } from "../../tokens-BRLyURxW.js";
14
- import { a as agentCommand } from "../../pi-embedded-BuvTuh5b.js";
14
+ import { a as agentCommand } from "../../pi-embedded-AgRG5Ssx.js";
15
15
  import "../../plugins-CRB60mCJ.js";
16
16
  import "../../accounts-Dk8mJIrQ.js";
17
17
  import "../../bindings-D3b5Fmc9.js";
18
18
  import "../../auth-store-DXT-l7fO.js";
19
19
  import "../../send-BeIZJuy4.js";
20
20
  import "../../send-DmLC7aEF.js";
21
- import "../../deliver-CVTXl0Cv.js";
21
+ import "../../deliver-BUiQ-9fE.js";
22
22
  import "../../diagnostic-4owMk4vH.js";
23
23
  import "../../diagnostic-session-state-BGF2r-kt.js";
24
24
  import "../../accounts-BDVs8LTu.js";
@@ -26,8 +26,8 @@ import "../../send-Dfa3sn6r.js";
26
26
  import "../../image-ops-D1KtygWz.js";
27
27
  import "../../pi-model-discovery-Bb__OY-j.js";
28
28
  import "../../message-channel-C8QtrwEU.js";
29
- import "../../pi-embedded-helpers-CyTpDKo5.js";
30
- import "../../chrome-_2tzVjVl.js";
29
+ import "../../pi-embedded-helpers-CghCLoPo.js";
30
+ import "../../chrome-BcJB6PcM.js";
31
31
  import "../../ssrf-CZeHDwVZ.js";
32
32
  import "../../frontmatter-BOudmHMS.js";
33
33
  import "../../skills-CnAPWfca.js";
@@ -41,7 +41,7 @@ import "../../accounts-CIvVRRHb.js";
41
41
  import { u as resolveStorePath } from "../../paths-D_qUel1T.js";
42
42
  import "../../tool-images-CcGZpzmq.js";
43
43
  import "../../thinking-z4_linel.js";
44
- import "../../image-COw__ACq.js";
44
+ import "../../image-D8b_rlQC.js";
45
45
  import "../../reply-prefix-BUgeSN2R.js";
46
46
  import "../../manager-BE_76jWB.js";
47
47
  import "../../gemini-auth-CIyaa44H.js";
@@ -56,7 +56,7 @@ import "../../ir-B7IBoKLy.js";
56
56
  import "../../render-MTSxc7LK.js";
57
57
  import "../../commands-registry-j4vAzcF2.js";
58
58
  import "../../skill-commands-Ck3flWX7.js";
59
- import "../../runner-BzNdfqDz.js";
59
+ import "../../runner-PgRFPYUj.js";
60
60
  import "../../fetch-CsfR_943.js";
61
61
  import "../../channel-activity-D_TMOGQ0.js";
62
62
  import "../../tables-5k-zOZ-s.js";
@@ -66,7 +66,7 @@ import "../../send-D4bMycQu.js";
66
66
  import "../../resolve-route-DuttYY7A.js";
67
67
  import "../../proxy-CRB9oCP5.js";
68
68
  import "../../replies-6_GxvQYe.js";
69
- import { t as createDefaultDeps } from "../../deps-DMIwjElF.js";
69
+ import { t as createDefaultDeps } from "../../deps-LUq8tPGl.js";
70
70
  import fs from "node:fs/promises";
71
71
  import path from "node:path";
72
72
  import crypto from "node:crypto";
@@ -11,14 +11,14 @@ import "../../boolean-CE7i9tBR.js";
11
11
  import "../../env-B5G1qwGc.js";
12
12
  import "../../dock-BgOmHcbh.js";
13
13
  import "../../tokens-BRLyURxW.js";
14
- import "../../pi-embedded-BuvTuh5b.js";
14
+ import "../../pi-embedded-AgRG5Ssx.js";
15
15
  import "../../plugins-CRB60mCJ.js";
16
16
  import "../../accounts-Dk8mJIrQ.js";
17
17
  import "../../bindings-D3b5Fmc9.js";
18
18
  import "../../auth-store-DXT-l7fO.js";
19
19
  import "../../send-BeIZJuy4.js";
20
20
  import "../../send-DmLC7aEF.js";
21
- import "../../deliver-CVTXl0Cv.js";
21
+ import "../../deliver-BUiQ-9fE.js";
22
22
  import "../../diagnostic-4owMk4vH.js";
23
23
  import "../../diagnostic-session-state-BGF2r-kt.js";
24
24
  import "../../accounts-BDVs8LTu.js";
@@ -26,8 +26,8 @@ import "../../send-Dfa3sn6r.js";
26
26
  import "../../image-ops-D1KtygWz.js";
27
27
  import "../../pi-model-discovery-Bb__OY-j.js";
28
28
  import "../../message-channel-C8QtrwEU.js";
29
- import "../../pi-embedded-helpers-CyTpDKo5.js";
30
- import "../../chrome-_2tzVjVl.js";
29
+ import "../../pi-embedded-helpers-CghCLoPo.js";
30
+ import "../../chrome-BcJB6PcM.js";
31
31
  import "../../ssrf-CZeHDwVZ.js";
32
32
  import "../../frontmatter-BOudmHMS.js";
33
33
  import "../../skills-CnAPWfca.js";
@@ -41,7 +41,7 @@ import "../../accounts-CIvVRRHb.js";
41
41
  import "../../paths-D_qUel1T.js";
42
42
  import "../../tool-images-CcGZpzmq.js";
43
43
  import "../../thinking-z4_linel.js";
44
- import "../../image-COw__ACq.js";
44
+ import "../../image-D8b_rlQC.js";
45
45
  import "../../reply-prefix-BUgeSN2R.js";
46
46
  import "../../manager-BE_76jWB.js";
47
47
  import "../../gemini-auth-CIyaa44H.js";
@@ -56,7 +56,7 @@ import "../../ir-B7IBoKLy.js";
56
56
  import "../../render-MTSxc7LK.js";
57
57
  import "../../commands-registry-j4vAzcF2.js";
58
58
  import "../../skill-commands-Ck3flWX7.js";
59
- import "../../runner-BzNdfqDz.js";
59
+ import "../../runner-PgRFPYUj.js";
60
60
  import "../../fetch-CsfR_943.js";
61
61
  import "../../channel-activity-D_TMOGQ0.js";
62
62
  import "../../tables-5k-zOZ-s.js";
@@ -66,7 +66,7 @@ import "../../send-D4bMycQu.js";
66
66
  import "../../resolve-route-DuttYY7A.js";
67
67
  import "../../proxy-CRB9oCP5.js";
68
68
  import "../../replies-6_GxvQYe.js";
69
- import "../../deps-DMIwjElF.js";
69
+ import "../../deps-LUq8tPGl.js";
70
70
  import { generateSlugViaLLM } from "../../llm-slug-generator.js";
71
71
  import { t as resolveHookConfig } from "../../config-BsP4lHEP.js";
72
72
  import fs from "node:fs/promises";
@@ -13,7 +13,7 @@ import { execFileSync, spawn } from "node:child_process";
13
13
  import { createHmac } from "node:crypto";
14
14
  import net from "node:net";
15
15
  import { createServer } from "node:http";
16
- import WebSocket, { WebSocketServer } from "ws";
16
+ import WebSocket$1, { WebSocketServer } from "ws";
17
17
  import { Buffer as Buffer$1 } from "node:buffer";
18
18
 
19
19
  //#region src/browser/constants.ts
@@ -398,7 +398,7 @@ async function ensureChromeExtensionRelayServer(opts) {
398
398
  let extensionWs = null;
399
399
  const cdpClients = /* @__PURE__ */ new Set();
400
400
  const connectedTargets = /* @__PURE__ */ new Map();
401
- const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
401
+ const extensionConnected = () => extensionWs?.readyState === WebSocket$1.OPEN;
402
402
  let extensionDisconnectCleanupTimer = null;
403
403
  const extensionReconnectWaiters = /* @__PURE__ */ new Set();
404
404
  const flushExtensionReconnectWaiters = (connected) => {
@@ -449,7 +449,7 @@ async function ensureChromeExtensionRelayServer(opts) {
449
449
  let nextExtensionId = 1;
450
450
  const sendToExtension = async (payload) => {
451
451
  const ws = extensionWs;
452
- if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
452
+ if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
453
453
  ws.send(JSON.stringify(payload));
454
454
  return await new Promise((resolve, reject) => {
455
455
  const timer = setTimeout(() => {
@@ -466,12 +466,12 @@ async function ensureChromeExtensionRelayServer(opts) {
466
466
  const broadcastToCdpClients = (evt) => {
467
467
  const msg = JSON.stringify(evt);
468
468
  for (const ws of cdpClients) {
469
- if (ws.readyState !== WebSocket.OPEN) continue;
469
+ if (ws.readyState !== WebSocket$1.OPEN) continue;
470
470
  ws.send(msg);
471
471
  }
472
472
  };
473
473
  const sendResponseToCdp = (ws, res) => {
474
- if (ws.readyState !== WebSocket.OPEN) return;
474
+ if (ws.readyState !== WebSocket$1.OPEN) return;
475
475
  ws.send(JSON.stringify(res));
476
476
  };
477
477
  const ensureTargetEventsForClient = (ws, mode) => {
@@ -681,7 +681,7 @@ async function ensureChromeExtensionRelayServer(opts) {
681
681
  rejectUpgrade(socket, 401, "Unauthorized");
682
682
  return;
683
683
  }
684
- if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
684
+ if (extensionWs && extensionWs.readyState !== WebSocket$1.OPEN) {
685
685
  try {
686
686
  extensionWs.terminate();
687
687
  } catch {}
@@ -718,7 +718,7 @@ async function ensureChromeExtensionRelayServer(opts) {
718
718
  clearExtensionDisconnectCleanupTimer();
719
719
  flushExtensionReconnectWaiters(true);
720
720
  const ping = setInterval(() => {
721
- if (ws.readyState !== WebSocket.OPEN) return;
721
+ if (ws.readyState !== WebSocket$1.OPEN) return;
722
722
  ws.send(JSON.stringify({ method: "ping" }));
723
723
  }, 5e3);
724
724
  ws.on("message", (data) => {
@@ -1060,7 +1060,7 @@ async function fetchOk(url, timeoutMs = 1500, init) {
1060
1060
  }
1061
1061
  async function withCdpSocket(wsUrl, fn, opts) {
1062
1062
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
1063
- const ws = new WebSocket(wsUrl, {
1063
+ const ws = new WebSocket$1(wsUrl, {
1064
1064
  handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
1065
1065
  ...Object.keys(headers).length ? { headers } : {}
1066
1066
  });
@@ -1986,7 +1986,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1986
1986
  async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1987
1987
  return await new Promise((resolve) => {
1988
1988
  const headers = getHeadersWithAuth(wsUrl);
1989
- const ws = new WebSocket(wsUrl, {
1989
+ const ws = new WebSocket$1(wsUrl, {
1990
1990
  handshakeTimeout: timeoutMs,
1991
1991
  ...Object.keys(headers).length ? { headers } : {}
1992
1992
  });
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { on as hasHelpOrVersion, rn as getPrimaryCommand } from "./entry.js";
3
- import { i as registerSubCliCommands, o as removeCommandByName, s as reparseProgramFromActionArgs } from "./register.subclis-WjFoTOYx.js";
3
+ import { i as registerSubCliCommands, o as removeCommandByName, s as reparseProgramFromActionArgs } from "./register.subclis-Pcge2ZUD.js";
4
4
 
5
5
  //#region src/cli/program/command-registry.ts
6
6
  var command_registry_exports = /* @__PURE__ */ __exportAll({
@@ -22,7 +22,7 @@ const coreEntries = [
22
22
  hasSubcommands: false
23
23
  }],
24
24
  register: async ({ program }) => {
25
- (await import("./register.setup-Dtbm5ocC.js")).registerSetupCommand(program);
25
+ (await import("./register.setup-6T_0-gzK.js")).registerSetupCommand(program);
26
26
  }
27
27
  },
28
28
  {
@@ -32,7 +32,7 @@ const coreEntries = [
32
32
  hasSubcommands: false
33
33
  }],
34
34
  register: async ({ program }) => {
35
- (await import("./register.onboard-5CNO_6MJ.js")).registerOnboardCommand(program);
35
+ (await import("./register.onboard-DFQubnz_.js")).registerOnboardCommand(program);
36
36
  }
37
37
  },
38
38
  {
@@ -42,7 +42,7 @@ const coreEntries = [
42
42
  hasSubcommands: false
43
43
  }],
44
44
  register: async ({ program }) => {
45
- (await import("./register.configure-sCW4AYHX.js")).registerConfigureCommand(program);
45
+ (await import("./register.configure-WUqB9nea.js")).registerConfigureCommand(program);
46
46
  }
47
47
  },
48
48
  {
@@ -52,7 +52,7 @@ const coreEntries = [
52
52
  hasSubcommands: true
53
53
  }],
54
54
  register: async ({ program }) => {
55
- (await import("./config-cli-Ft-MoBA0.js")).registerConfigCli(program);
55
+ (await import("./config-cli-DHOt2fiX.js")).registerConfigCli(program);
56
56
  }
57
57
  },
58
58
  {
@@ -79,7 +79,7 @@ const coreEntries = [
79
79
  }
80
80
  ],
81
81
  register: async ({ program }) => {
82
- (await import("./register.maintenance-BNuu5G8a.js")).registerMaintenanceCommands(program);
82
+ (await import("./register.maintenance-D3gFMNHJ.js")).registerMaintenanceCommands(program);
83
83
  }
84
84
  },
85
85
  {
@@ -3,7 +3,7 @@ import { g as resolveStateDir } from "./paths-Cn44w-EB.js";
3
3
  import { B as theme, h as pathExists } from "./utils-CXzXXV2o.js";
4
4
  import { i as routeLogsToStderr } from "./subsystem-CGZX2PBV.js";
5
5
  import { t as formatDocsLink } from "./links-15764jZB.js";
6
- import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-C4ufrdyk.js";
6
+ import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-CeyrkmGJ.js";
7
7
  import os from "node:os";
8
8
  import path from "node:path";
9
9
  import fs from "node:fs/promises";
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { St as theme, Z as pathExists, qt as resolveStateDir, u as routeLogsToStderr } from "./entry.js";
3
3
  import { t as formatDocsLink } from "./links-fKzK3pnZ.js";
4
- import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-WjFoTOYx.js";
5
- import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-D_coG163.js";
4
+ import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-Pcge2ZUD.js";
5
+ import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-Ch1LX7dG.js";
6
6
  import { t as getProgramContext } from "./program-context-BrqeiWcA.js";
7
7
  import os from "node:os";
8
8
  import path from "node:path";
@@ -213,7 +213,7 @@ async function runConfigUnset(opts) {
213
213
  }
214
214
  function registerConfigCli(program) {
215
215
  const cmd = program.command("config").description("Non-interactive config helpers (get/set/unset). Run without subcommand for the setup wizard.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.idlehands.ai/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
216
- const { configureCommandFromSectionsArg } = await import("./configure-Dp2SC2bd.js").then((n) => n.t);
216
+ const { configureCommandFromSectionsArg } = await import("./configure-Dd1r8lCc.js").then((n) => n.t);
217
217
  await configureCommandFromSectionsArg(opts.section, defaultRuntime);
218
218
  });
219
219
  cmd.command("get").description("Get a config value by dot path").argument("<path>", "Config path (dot or bracket notation)").option("--json", "Output JSON", false).action(async (path, opts) => {
@@ -217,7 +217,7 @@ async function runConfigUnset(opts) {
217
217
  }
218
218
  function registerConfigCli(program) {
219
219
  const cmd = program.command("config").description("Non-interactive config helpers (get/set/unset). Run without subcommand for the setup wizard.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.idlehands.ai/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
220
- const { configureCommandFromSectionsArg } = await import("./configure-CSFuzRuG.js").then((n) => n.t);
220
+ const { configureCommandFromSectionsArg } = await import("./configure-UHNr2tF7.js").then((n) => n.t);
221
221
  await configureCommandFromSectionsArg(opts.section, defaultRuntime);
222
222
  });
223
223
  cmd.command("get").description("Get a config value by dot path").argument("<path>", "Config path (dot or bracket notation)").option("--json", "Output JSON", false).action(async (path, opts) => {
@@ -40,6 +40,7 @@ const CONFIGURE_WIZARD_SECTIONS = [
40
40
  "daemon",
41
41
  "channels",
42
42
  "skills",
43
+ "anton",
43
44
  "health"
44
45
  ];
45
46
  function parseConfigureWizardSections(raw) {
@@ -90,6 +91,11 @@ const CONFIGURE_SECTION_OPTIONS = [
90
91
  label: "Skills",
91
92
  hint: "Install/enable workspace skills"
92
93
  },
94
+ {
95
+ value: "anton",
96
+ label: "Anton",
97
+ hint: "Configure Anton task runner defaults"
98
+ },
93
99
  {
94
100
  value: "health",
95
101
  label: "Health check",
@@ -649,6 +655,75 @@ async function promptWebToolsConfig(nextConfig, runtime) {
649
655
  }
650
656
  };
651
657
  }
658
+ async function promptAntonConfig(nextConfig, runtime) {
659
+ const existing = nextConfig.anton ?? {};
660
+ const existingPreflight = existing.preflight ?? {};
661
+ const mode = guardCancel(await select$1({
662
+ message: "Anton mode",
663
+ options: [{
664
+ value: "direct",
665
+ label: "Direct",
666
+ hint: "Implement tasks immediately"
667
+ }, {
668
+ value: "preflight",
669
+ label: "Preflight",
670
+ hint: "Discovery → optional review → implementation"
671
+ }],
672
+ initialValue: existing.mode ?? "direct"
673
+ }), runtime);
674
+ const taskTimeoutInput = guardCancel(await text$1({
675
+ message: "Anton task timeout (seconds)",
676
+ initialValue: String(existing.taskTimeoutSec ?? 1200),
677
+ validate: (value) => {
678
+ const n = Number(value);
679
+ return Number.isInteger(n) && n > 0 ? void 0 : "Enter a positive integer";
680
+ }
681
+ }), runtime);
682
+ const approvalMode = guardCancel(await select$1({
683
+ message: "Anton approval mode",
684
+ options: [{
685
+ value: "auto",
686
+ label: "Auto",
687
+ hint: "Normal safety/approval flow"
688
+ }, {
689
+ value: "yolo",
690
+ label: "Yolo",
691
+ hint: "No confirmation mode"
692
+ }],
693
+ initialValue: existing.approvalMode ?? "auto"
694
+ }), runtime);
695
+ let preflight = existingPreflight;
696
+ if (mode === "preflight") {
697
+ const requirementsReview = guardCancel(await confirm$1({
698
+ message: "Enable requirements review stage?",
699
+ initialValue: existingPreflight.requirementsReview ?? false
700
+ }), runtime);
701
+ const preflightMaxRetriesInput = guardCancel(await text$1({
702
+ message: "Preflight max retries",
703
+ initialValue: String(existingPreflight.maxRetries ?? 2),
704
+ validate: (value) => {
705
+ const n = Number(value);
706
+ return Number.isInteger(n) && n >= 0 ? void 0 : "Enter an integer ≥ 0";
707
+ }
708
+ }), runtime);
709
+ preflight = {
710
+ ...existingPreflight,
711
+ enabled: true,
712
+ requirementsReview,
713
+ maxRetries: Number(preflightMaxRetriesInput)
714
+ };
715
+ }
716
+ return {
717
+ ...nextConfig,
718
+ anton: {
719
+ ...existing,
720
+ mode,
721
+ taskTimeoutSec: Number(taskTimeoutInput),
722
+ approvalMode,
723
+ preflight
724
+ }
725
+ };
726
+ }
652
727
  async function runConfigureWizard(opts, runtime = defaultRuntime) {
653
728
  try {
654
729
  printWizardHeader(runtime);
@@ -801,6 +876,7 @@ async function runConfigureWizard(opts, runtime = defaultRuntime) {
801
876
  const wsDir = resolveUserPath(workspaceDir);
802
877
  nextConfig = await setupSkills(nextConfig, wsDir, runtime, prompter);
803
878
  }
879
+ if (selected.includes("anton")) nextConfig = await promptAntonConfig(nextConfig, runtime);
804
880
  await persistConfig();
805
881
  if (selected.includes("daemon")) {
806
882
  if (!selected.includes("gateway")) await promptDaemonPort();
@@ -851,6 +927,10 @@ async function runConfigureWizard(opts, runtime = defaultRuntime) {
851
927
  nextConfig = await setupSkills(nextConfig, wsDir, runtime, prompter);
852
928
  await persistConfig();
853
929
  }
930
+ if (choice === "anton") {
931
+ nextConfig = await promptAntonConfig(nextConfig, runtime);
932
+ await persistConfig();
933
+ }
854
934
  if (choice === "daemon") {
855
935
  if (!didConfigureGateway) await promptDaemonPort();
856
936
  await maybeInstallDaemon({
@@ -41,6 +41,7 @@ const CONFIGURE_WIZARD_SECTIONS = [
41
41
  "daemon",
42
42
  "channels",
43
43
  "skills",
44
+ "anton",
44
45
  "health"
45
46
  ];
46
47
  function parseConfigureWizardSections(raw) {
@@ -91,6 +92,11 @@ const CONFIGURE_SECTION_OPTIONS = [
91
92
  label: "Skills",
92
93
  hint: "Install/enable workspace skills"
93
94
  },
95
+ {
96
+ value: "anton",
97
+ label: "Anton",
98
+ hint: "Configure Anton task runner defaults"
99
+ },
94
100
  {
95
101
  value: "health",
96
102
  label: "Health check",
@@ -650,6 +656,75 @@ async function promptWebToolsConfig(nextConfig, runtime) {
650
656
  }
651
657
  };
652
658
  }
659
+ async function promptAntonConfig(nextConfig, runtime) {
660
+ const existing = nextConfig.anton ?? {};
661
+ const existingPreflight = existing.preflight ?? {};
662
+ const mode = guardCancel(await select$1({
663
+ message: "Anton mode",
664
+ options: [{
665
+ value: "direct",
666
+ label: "Direct",
667
+ hint: "Implement tasks immediately"
668
+ }, {
669
+ value: "preflight",
670
+ label: "Preflight",
671
+ hint: "Discovery → optional review → implementation"
672
+ }],
673
+ initialValue: existing.mode ?? "direct"
674
+ }), runtime);
675
+ const taskTimeoutInput = guardCancel(await text$1({
676
+ message: "Anton task timeout (seconds)",
677
+ initialValue: String(existing.taskTimeoutSec ?? 1200),
678
+ validate: (value) => {
679
+ const n = Number(value);
680
+ return Number.isInteger(n) && n > 0 ? void 0 : "Enter a positive integer";
681
+ }
682
+ }), runtime);
683
+ const approvalMode = guardCancel(await select$1({
684
+ message: "Anton approval mode",
685
+ options: [{
686
+ value: "auto",
687
+ label: "Auto",
688
+ hint: "Normal safety/approval flow"
689
+ }, {
690
+ value: "yolo",
691
+ label: "Yolo",
692
+ hint: "No confirmation mode"
693
+ }],
694
+ initialValue: existing.approvalMode ?? "auto"
695
+ }), runtime);
696
+ let preflight = existingPreflight;
697
+ if (mode === "preflight") {
698
+ const requirementsReview = guardCancel(await confirm$1({
699
+ message: "Enable requirements review stage?",
700
+ initialValue: existingPreflight.requirementsReview ?? false
701
+ }), runtime);
702
+ const preflightMaxRetriesInput = guardCancel(await text$1({
703
+ message: "Preflight max retries",
704
+ initialValue: String(existingPreflight.maxRetries ?? 2),
705
+ validate: (value) => {
706
+ const n = Number(value);
707
+ return Number.isInteger(n) && n >= 0 ? void 0 : "Enter an integer ≥ 0";
708
+ }
709
+ }), runtime);
710
+ preflight = {
711
+ ...existingPreflight,
712
+ enabled: true,
713
+ requirementsReview,
714
+ maxRetries: Number(preflightMaxRetriesInput)
715
+ };
716
+ }
717
+ return {
718
+ ...nextConfig,
719
+ anton: {
720
+ ...existing,
721
+ mode,
722
+ taskTimeoutSec: Number(taskTimeoutInput),
723
+ approvalMode,
724
+ preflight
725
+ }
726
+ };
727
+ }
653
728
  async function runConfigureWizard(opts, runtime = defaultRuntime) {
654
729
  try {
655
730
  printWizardHeader(runtime);
@@ -802,6 +877,7 @@ async function runConfigureWizard(opts, runtime = defaultRuntime) {
802
877
  const wsDir = resolveUserPath(workspaceDir);
803
878
  nextConfig = await setupSkills(nextConfig, wsDir, runtime, prompter);
804
879
  }
880
+ if (selected.includes("anton")) nextConfig = await promptAntonConfig(nextConfig, runtime);
805
881
  await persistConfig();
806
882
  if (selected.includes("daemon")) {
807
883
  if (!selected.includes("gateway")) await promptDaemonPort();
@@ -852,6 +928,10 @@ async function runConfigureWizard(opts, runtime = defaultRuntime) {
852
928
  nextConfig = await setupSkills(nextConfig, wsDir, runtime, prompter);
853
929
  await persistConfig();
854
930
  }
931
+ if (choice === "anton") {
932
+ nextConfig = await promptAntonConfig(nextConfig, runtime);
933
+ await persistConfig();
934
+ }
855
935
  if (choice === "daemon") {
856
936
  if (!didConfigureGateway) await promptDaemonPort();
857
937
  await maybeInstallDaemon({