@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.
- package/CHANGELOG.md +10 -0
- package/dist/{agent-via-gateway-DFfeM1f8.js → agent-via-gateway-DY9s7C5O.js} +7 -7
- package/dist/{anton-y_9cmetd.js → anton-CFb43gM1.js} +1 -1
- package/dist/{audio-preflight-BSlR2jEq.js → audio-preflight-CW8IH1lU.js} +4 -4
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +7 -7
- package/dist/bundled/session-memory/handler.js +7 -7
- package/dist/{chrome-_2tzVjVl.js → chrome-BcJB6PcM.js} +9 -9
- package/dist/{command-registry-D_coG163.js → command-registry-Ch1LX7dG.js} +6 -6
- package/dist/{completion-cli-CAERO_KP.js → completion-cli-4GjUKmcp.js} +1 -1
- package/dist/{completion-cli-CTGLJrsU.js → completion-cli-Dp2cBB7r.js} +2 -2
- package/dist/{config-cli-Ft-MoBA0.js → config-cli-DHOt2fiX.js} +1 -1
- package/dist/{config-cli-QKNRUury.js → config-cli-fEyZU_fS.js} +1 -1
- package/dist/{configure-Dp2SC2bd.js → configure-Dd1r8lCc.js} +80 -0
- package/dist/{configure-CSFuzRuG.js → configure-UHNr2tF7.js} +80 -0
- package/dist/daemon-cli.js +6 -6
- package/dist/{deliver-CVTXl0Cv.js → deliver-BUiQ-9fE.js} +1 -1
- package/dist/{deps-DMIwjElF.js → deps-LUq8tPGl.js} +1 -1
- package/dist/{doctor-completion-BTK69nw4.js → doctor-completion-D4_Xz0GW.js} +1 -1
- package/dist/{doctor-completion-C4IaYTpf.js → doctor-completion-k1NPhnSD.js} +1 -1
- package/dist/{emergency-stop-BFA2JE99.js → emergency-stop-DvzTW9v2.js} +7 -7
- package/dist/entry.js +1 -1
- package/dist/{gateway-cli-vdmjtTaI.js → gateway-cli-BvfZQI4f.js} +1 -1
- package/dist/{gateway-cli-DOdmF6H_.js → gateway-cli-BzLinXVg.js} +1 -1
- package/dist/{image-COw__ACq.js → image-D8b_rlQC.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/llm-slug-generator.js +7 -7
- package/dist/{onboard-BGttnPtz.js → onboard-BbaM-mHQ.js} +1 -1
- package/dist/{onboard-DmJrRFm6.js → onboard-Co1aTajZ.js} +1 -1
- package/dist/{onboarding-BH14vh8u.js → onboarding-DJ5uRALX.js} +1 -1
- package/dist/{onboarding-CatctZfr.js → onboarding-GUp6F9pi.js} +1 -1
- package/dist/{onboarding.finalize-y4p-rW_B.js → onboarding.finalize-BF0WE60A.js} +3 -3
- package/dist/{onboarding.finalize-B1xAj3zP.js → onboarding.finalize-CCSwszBV.js} +4 -4
- package/dist/{pi-embedded-BuvTuh5b.js → pi-embedded-AgRG5Ssx.js} +26 -26
- package/dist/{pi-embedded-helpers-CyTpDKo5.js → pi-embedded-helpers-CghCLoPo.js} +4 -4
- package/dist/{program-CA0hdsv9.js → program-Bxd5OUE_.js} +2 -2
- package/dist/{program-context-C4ufrdyk.js → program-context-CeyrkmGJ.js} +8 -8
- package/dist/{prompt-select-styled-HOmODGGE.js → prompt-select-styled-Dxt7znW6.js} +1 -1
- package/dist/{prompt-select-styled-CoVuIbC6.js → prompt-select-styled-QGoSGceD.js} +1 -1
- package/dist/{pw-ai-CowTfhOG.js → pw-ai-CfYaR1K2.js} +1 -1
- package/dist/{register.configure-oHPQgac2.js → register.configure-BFu6tHW9.js} +1 -1
- package/dist/{register.configure-sCW4AYHX.js → register.configure-WUqB9nea.js} +1 -1
- package/dist/{register.maintenance-BNuu5G8a.js → register.maintenance-D3gFMNHJ.js} +5 -5
- package/dist/{register.maintenance-DBOmtQ_7.js → register.maintenance-D_Xb1h9n.js} +4 -4
- package/dist/{register.onboard-5CNO_6MJ.js → register.onboard-DFQubnz_.js} +2 -2
- package/dist/{register.onboard-DldXC3xb.js → register.onboard-DaU8z55G.js} +2 -2
- package/dist/{register.setup-Dtbm5ocC.js → register.setup-6T_0-gzK.js} +2 -2
- package/dist/{register.setup-B5GQC9NR.js → register.setup-DeEMWLk1.js} +2 -2
- package/dist/{register.subclis-WjFoTOYx.js → register.subclis-Pcge2ZUD.js} +3 -3
- package/dist/{run-main-BtJbp5Nx.js → run-main-FpL-RwcQ.js} +5 -5
- package/dist/{runner-BzNdfqDz.js → runner-PgRFPYUj.js} +1 -1
- package/dist/{update-cli-Dv_xfkAV.js → update-cli-CdX0Fl_m.js} +5 -5
- package/dist/{update-cli-DBsT1H2C.js → update-cli-POnZaBSb.js} +4 -4
- package/dist/{web-C1TtGYq7.js → web-DsPIUwWo.js} +8 -8
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/hand/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +6 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- 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-
|
|
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-
|
|
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-
|
|
31
|
-
import "./chrome-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
21
|
-
import "./chrome-
|
|
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-
|
|
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-
|
|
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
|
/**
|
package/dist/build-info.json
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
30
|
-
import "../../chrome-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
30
|
-
import "../../chrome-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-
|
|
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-
|
|
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-
|
|
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({
|