@visorcraft/idlehands 4.0.13 → 4.0.15

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 (167) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/{agent-via-gateway-B7gDrTh2.js → agent-via-gateway-BFtbpQpT.js} +7 -7
  3. package/dist/{agent-via-gateway-C1akskt-.js → agent-via-gateway-BvXS1sXv.js} +1 -1
  4. package/dist/{agent-via-gateway-C9xTFnnb.js → agent-via-gateway-CIM26Dxl.js} +2 -2
  5. package/dist/{agent-via-gateway-Cq6YTkRw.js → agent-via-gateway-CcaPUQrc.js} +1 -1
  6. package/dist/{agents-BEWuTIwE.js → agents-DPlb4UQu.js} +4 -4
  7. package/dist/{agents.config-s_1D920P.js → agents.config-8pxRoZvL.js} +1 -1
  8. package/dist/{agents.config-cH3kcrKU.js → agents.config-BKoyeUnK.js} +1 -1
  9. package/dist/{anton-gFIz387q.js → anton-BTjKlGm7.js} +155 -12
  10. package/dist/{anton-DZGESeSl.js → anton-DKA8iAQE.js} +155 -12
  11. package/dist/{anton-bQ51g5Ec.js → anton-DhBvDNcB.js} +155 -12
  12. package/dist/{anton-Cs3aBMKq.js → anton-Dyhtv3C8.js} +155 -12
  13. package/dist/{audio-preflight-BSlR2jEq.js → audio-preflight-CW8IH1lU.js} +4 -4
  14. package/dist/{auth-choice-Dunr1I8A.js → auth-choice-CMUzxwaw.js} +1 -1
  15. package/dist/{auth-choice-CoDCd8IM.js → auth-choice-D-_AVWgJ.js} +1 -1
  16. package/dist/{banner-XXOWQkH8.js → banner-B6ih1A5q.js} +1 -1
  17. package/dist/build-info.json +3 -3
  18. package/dist/bundled/boot-md/handler.js +7 -7
  19. package/dist/bundled/session-memory/handler.js +7 -7
  20. package/dist/{channel-options-JZ8UUgne.js → channel-options-DdT_iiu2.js} +1 -1
  21. package/dist/{channel-options-DcbnvkV8.js → channel-options-DqOp64vm.js} +1 -1
  22. package/dist/{channel-web-Z-H-wjMO.js → channel-web-DjS8VQYO.js} +2 -2
  23. package/dist/{channel-web-Dz8l9j3Z.js → channel-web-PG7u76pG.js} +2 -2
  24. package/dist/{channels-cli-F1TB2Ms2.js → channels-cli-1tt6zmdw.js} +7 -7
  25. package/dist/{channels-cli-DVTF8msL.js → channels-cli-CWxVX3_x.js} +7 -7
  26. package/dist/{chrome-_2tzVjVl.js → chrome-BcJB6PcM.js} +9 -9
  27. package/dist/{cli-CLfBho_N.js → cli-CmOlEYcx.js} +2 -2
  28. package/dist/{cli-Cysh5mku.js → cli-D4FV736E.js} +2 -2
  29. package/dist/{command-registry-BzM89IOr.js → command-registry-CQ_cgvak.js} +10 -10
  30. package/dist/{completion-cli-CWl8tMGs.js → completion-cli-UytEAOmM.js} +2 -2
  31. package/dist/{completion-cli-C5Y0omSs.js → completion-cli-y9BFk5F6.js} +1 -1
  32. package/dist/{config-cli-DrupHrLQ.js → config-cli-5c6A3y5U.js} +1 -1
  33. package/dist/{config-cli-DY7H5mxq.js → config-cli-DUb0ZGdL.js} +1 -1
  34. package/dist/{configure-CEhvh4Tl.js → configure-AlSS40po.js} +3 -3
  35. package/dist/{configure-teHRuPU7.js → configure-BPwYKVb4.js} +3 -3
  36. package/dist/{deliver-CVTXl0Cv.js → deliver-BUiQ-9fE.js} +1 -1
  37. package/dist/{deps-DOKkEv5X.js → deps-BYfE_aIY.js} +1 -1
  38. package/dist/{deps-BuqRbUb-.js → deps-DxMLbT7t.js} +1 -1
  39. package/dist/{deps--Jd_1mvW.js → deps-KIFYHxig.js} +1 -1
  40. package/dist/{deps-CEc0DzO7.js → deps-TwKaIh1I.js} +1 -1
  41. package/dist/{doctor-completion-C47EWkPr.js → doctor-completion-HzTBPNbS.js} +1 -1
  42. package/dist/{doctor-completion-jhxR4t3O.js → doctor-completion-S-XHygGb.js} +1 -1
  43. package/dist/{emergency-stop-CC3HM3fX.js → emergency-stop--ScwariE.js} +7 -7
  44. package/dist/{emergency-stop-DeVGttt7.js → emergency-stop-BDwI4Cyl.js} +2 -2
  45. package/dist/{emergency-stop-BDOqqnou.js → emergency-stop-DOi-rKmj.js} +2 -2
  46. package/dist/{emergency-stop-C1Aq7hF2.js → emergency-stop-DpMAMIiz.js} +2 -2
  47. package/dist/entry.js +1 -1
  48. package/dist/extensionAPI.js +2 -2
  49. package/dist/{gateway-cli-Bg9EHlHZ.js → gateway-cli-B4T44JsM.js} +9 -9
  50. package/dist/{gateway-cli-CwuxFfnq.js → gateway-cli-DQcjWJr7.js} +9 -9
  51. package/dist/{health-B5FcoZjN.js → health--39yieH5.js} +1 -1
  52. package/dist/{health-D-LRUDN7.js → health-D7UCYzfy.js} +1 -1
  53. package/dist/{hooks-cli-hH93rV1P.js → hooks-cli-CGB7TcZZ.js} +3 -3
  54. package/dist/{hooks-cli-DrwJGeyQ.js → hooks-cli-Cko_uweG.js} +3 -3
  55. package/dist/{image-COw__ACq.js → image-D8b_rlQC.js} +1 -1
  56. package/dist/index.js +7 -7
  57. package/dist/llm-slug-generator.js +7 -7
  58. package/dist/{models-C7BxqYrW.js → models-CWfcMshO.js} +2 -2
  59. package/dist/{models-cli-CDDj0F5v.js → models-cli-NlT2N74B.js} +4 -4
  60. package/dist/{models-cli-CqjmKMK2.js → models-cli-d_ead6LU.js} +3 -3
  61. package/dist/{npm-resolution-BjPIvwHA.js → npm-resolution-DIJeEhoa.js} +1 -1
  62. package/dist/{npm-resolution-C_gT5wrI.js → npm-resolution-Dpn9DNPz.js} +1 -1
  63. package/dist/{onboard-DyZAtFGg.js → onboard-DFseyAG9.js} +2 -2
  64. package/dist/{onboard-CAifMogc.js → onboard-Raw5nkGc.js} +2 -2
  65. package/dist/{onboard-channels-Bk3dz_Jr.js → onboard-channels-CG1HcORq.js} +1 -1
  66. package/dist/{onboard-channels-DAk60Ns1.js → onboard-channels-mLWuxUlN.js} +1 -1
  67. package/dist/{onboarding-DxXFvGbr.js → onboarding-CzzjhwRf.js} +3 -3
  68. package/dist/{onboarding-kCJZ-hVf.js → onboarding-DYlNLV9R.js} +3 -3
  69. package/dist/{onboarding.finalize-Dl63X819.js → onboarding.finalize-BJYuOTPe.js} +6 -6
  70. package/dist/{onboarding.finalize-CLyBIGRt.js → onboarding.finalize-CIOBj6Jy.js} +7 -7
  71. package/dist/{pi-embedded-B4tp4aBd.js → pi-embedded-7XGjNojd.js} +26 -26
  72. package/dist/{pi-embedded-CNvCKXkm.js → pi-embedded-Swc7dke2.js} +11 -11
  73. package/dist/{pi-embedded-helpers-CyTpDKo5.js → pi-embedded-helpers-CghCLoPo.js} +4 -4
  74. package/dist/{plugin-registry-CVL1r-yd.js → plugin-registry-BAd0SoEv.js} +1 -1
  75. package/dist/{plugin-registry-n---u7EU.js → plugin-registry-D9Z1bMNt.js} +1 -1
  76. package/dist/plugin-sdk/{agent-via-gateway-nyxykUkn.js → agent-via-gateway-B3F-royZ.js} +2 -2
  77. package/dist/plugin-sdk/{anton-BdO0Oxvp.js → anton-DfpQdXJJ.js} +155 -12
  78. package/dist/plugin-sdk/{channel-web-CtnWXT6I.js → channel-web-BWE_kecR.js} +2 -2
  79. package/dist/plugin-sdk/{deps-Be1yXgl3.js → deps-B0MfJgDH.js} +1 -1
  80. package/dist/plugin-sdk/{emergency-stop-qkFklwE3.js → emergency-stop-rTRWpk26.js} +2 -2
  81. package/dist/plugin-sdk/index.js +3 -3
  82. package/dist/plugin-sdk/{reply-Csf1i8F8.js → reply-C2G4DKTN.js} +11 -11
  83. package/dist/plugin-sdk/{web-Cs2SXpS-.js → web-bxu2RRVS.js} +3 -3
  84. package/dist/{plugins-cli--xMWIg-4.js → plugins-cli-BYfDyWXn.js} +3 -3
  85. package/dist/{plugins-cli-D3VgmVpQ.js → plugins-cli-DP46ipIu.js} +3 -3
  86. package/dist/{program-C4UqPGzI.js → program-BlV0XOMu.js} +8 -8
  87. package/dist/{program-context-Dp52v2OQ.js → program-context-PC7Knx3s.js} +18 -18
  88. package/dist/{prompt-select-styled-CsGzk9Gq.js → prompt-select-styled-BEnn1bwr.js} +4 -4
  89. package/dist/{prompt-select-styled-DlX1LGGJ.js → prompt-select-styled-BgfuPDVv.js} +4 -4
  90. package/dist/{provider-auth-helpers-Czzq_QPi.js → provider-auth-helpers-CKIkgNDk.js} +1 -1
  91. package/dist/{provider-auth-helpers-DOkJeW-i.js → provider-auth-helpers-CrjXAqYu.js} +1 -1
  92. package/dist/{push-apns-BtFayED4.js → push-apns-B4sxQAG3.js} +1 -1
  93. package/dist/{push-apns-RknfH2wN.js → push-apns-BPmS_f8e.js} +1 -1
  94. package/dist/{pw-ai-CowTfhOG.js → pw-ai-CfYaR1K2.js} +1 -1
  95. package/dist/{register.agent-C35pTLnm.js → register.agent-DRcOj2U3.js} +9 -9
  96. package/dist/{register.agent-BiHrmIpA.js → register.agent-uaM-OgFM.js} +8 -8
  97. package/dist/{register.configure-DCf6SaYp.js → register.configure-B0i1vobR.js} +8 -8
  98. package/dist/{register.configure-BPdGcoT-.js → register.configure-BebpNVXc.js} +8 -8
  99. package/dist/{register.maintenance-DUdYmaQm.js → register.maintenance-CjWtRkPb.js} +9 -9
  100. package/dist/{register.maintenance-DujCPOfC.js → register.maintenance-Cr0SJRGa.js} +8 -8
  101. package/dist/{register.message-BhzLKaq7.js → register.message-BNqRwnPx.js} +3 -3
  102. package/dist/{register.message-BHLa16p6.js → register.message-DMAqqNBh.js} +3 -3
  103. package/dist/{register.onboard-hOo1cBls.js → register.onboard-9Z1ghVgM.js} +2 -2
  104. package/dist/{register.onboard-DqRuNACj.js → register.onboard-DDLj9mJ2.js} +2 -2
  105. package/dist/{register.orchestrator-anton-gJUfWbMJ.js → register.orchestrator-anton-9Al8Av8i.js} +2 -2
  106. package/dist/{register.orchestrator-anton-DDUP6r-1.js → register.orchestrator-anton-BybNaYi1.js} +2 -2
  107. package/dist/{register.setup-1kqsk9Nz.js → register.setup-Z1tBfa9d.js} +2 -2
  108. package/dist/{register.setup-Cg9pGGKa.js → register.setup-yqN0SXow.js} +2 -2
  109. package/dist/{register.status-health-sessions-DGVjxQ4x.js → register.status-health-sessions-Di92AnoH.js} +4 -4
  110. package/dist/{register.status-health-sessions-DWCD-xxm.js → register.status-health-sessions-r-mpQR1m.js} +4 -4
  111. package/dist/{register.subclis-C39R-X4d.js → register.subclis-DPQqxIZd.js} +9 -9
  112. package/dist/{reply-DuYN0-Pb.js → reply-ZWOav11z.js} +11 -11
  113. package/dist/{run-main-DhnKFvJ8.js → run-main-DDbBATo6.js} +15 -15
  114. package/dist/{runner-BzNdfqDz.js → runner-PgRFPYUj.js} +1 -1
  115. package/dist/{server-node-events-S-Ffj9aJ.js → server-node-events-BcZPS5tj.js} +3 -3
  116. package/dist/{server-node-events-CsvrVnbd.js → server-node-events-DNJLKEMT.js} +3 -3
  117. package/dist/{status-DtnoXYQp.js → status-BXSiFfmy.js} +2 -2
  118. package/dist/{status-OrfDNo6n.js → status-geIYZraQ.js} +2 -2
  119. package/dist/{subagent-registry-CV8jrQca.js → subagent-registry-C6uygQa1.js} +11 -11
  120. package/dist/{update-cli-DZfUy8hM.js → update-cli-BxVcRBy_.js} +9 -9
  121. package/dist/{update-cli-UpWfq3c5.js → update-cli-VlK55yII.js} +8 -8
  122. package/dist/{update-runner-DTzgmQYD.js → update-runner-Cw7BbjGv.js} +1 -1
  123. package/dist/{update-runner-GJO5-g7n.js → update-runner-bFqEARFN.js} +1 -1
  124. package/dist/{web-DpyY5rK8.js → web-BjMMu9l1.js} +3 -3
  125. package/dist/{web-CwYkIq_A.js → web-Bjj9WtlF.js} +3 -3
  126. package/dist/{web-y9QkD_tf.js → web-DptF9st7.js} +3 -3
  127. package/dist/{web-BC36pno5.js → web-TRTzT6rm.js} +8 -8
  128. package/extensions/acpx/package.json +1 -1
  129. package/extensions/bluebubbles/package.json +1 -1
  130. package/extensions/copilot-proxy/package.json +1 -1
  131. package/extensions/diagnostics-otel/package.json +1 -1
  132. package/extensions/discord/package.json +1 -1
  133. package/extensions/feishu/package.json +1 -1
  134. package/extensions/google-gemini-cli-auth/package.json +1 -1
  135. package/extensions/googlechat/package.json +1 -1
  136. package/extensions/hand/package.json +1 -1
  137. package/extensions/imessage/package.json +1 -1
  138. package/extensions/irc/package.json +1 -1
  139. package/extensions/line/package.json +1 -1
  140. package/extensions/llm-task/package.json +1 -1
  141. package/extensions/matrix/CHANGELOG.md +12 -0
  142. package/extensions/matrix/package.json +1 -1
  143. package/extensions/mattermost/package.json +1 -1
  144. package/extensions/memory-core/package.json +1 -1
  145. package/extensions/memory-lancedb/package.json +1 -1
  146. package/extensions/minimax-portal-auth/package.json +1 -1
  147. package/extensions/msteams/CHANGELOG.md +12 -0
  148. package/extensions/msteams/package.json +1 -1
  149. package/extensions/nextcloud-talk/package.json +1 -1
  150. package/extensions/nostr/CHANGELOG.md +12 -0
  151. package/extensions/nostr/package.json +1 -1
  152. package/extensions/open-prose/package.json +1 -1
  153. package/extensions/signal/package.json +1 -1
  154. package/extensions/slack/package.json +1 -1
  155. package/extensions/synology-chat/package.json +1 -1
  156. package/extensions/telegram/package.json +1 -1
  157. package/extensions/tlon/package.json +1 -1
  158. package/extensions/twitch/CHANGELOG.md +12 -0
  159. package/extensions/twitch/package.json +1 -1
  160. package/extensions/voice-call/CHANGELOG.md +12 -0
  161. package/extensions/voice-call/package.json +1 -1
  162. package/extensions/whatsapp/package.json +1 -1
  163. package/extensions/zalo/CHANGELOG.md +12 -0
  164. package/extensions/zalo/package.json +1 -1
  165. package/extensions/zalouser/CHANGELOG.md +12 -0
  166. package/extensions/zalouser/package.json +1 -1
  167. package/package.json +1 -1
@@ -2,10 +2,13 @@ import "./paths-CtGV5i8O.js";
2
2
  import { t as CONFIG_DIR } from "./utils-Dyj2wV4e.js";
3
3
  import path from "node:path";
4
4
  import fs from "node:fs/promises";
5
+ import { promisify } from "node:util";
6
+ import { execFile } from "node:child_process";
5
7
 
6
8
  //#region src/commands/anton.ts
7
9
  const ANTON_STATE_PATH = path.join(CONFIG_DIR, "anton.state.json");
8
10
  const ANTON_LOCK_PATH = path.join(CONFIG_DIR, "anton.lock");
11
+ const execFile$1 = promisify(execFile);
9
12
  async function ensureStateDir() {
10
13
  await fs.mkdir(CONFIG_DIR, { recursive: true });
11
14
  }
@@ -216,18 +219,19 @@ async function loadAntonConfig() {
216
219
  }
217
220
  }
218
221
  async function runAgentTask(args) {
219
- const { agentCliCommand } = await import("./agent-via-gateway-nyxykUkn.js");
222
+ const { agentCliCommand } = await import("./agent-via-gateway-B3F-royZ.js");
220
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;
221
- await agentCliCommand({
224
+ const result = await agentCliCommand({
222
225
  message: args.message,
223
226
  agent: args.agent,
224
227
  to: args.to,
225
228
  sessionId: args.sessionId,
226
229
  timeout: args.timeout,
227
- json: false,
230
+ json: true,
228
231
  deliver: false,
229
232
  extraSystemPrompt
230
233
  }, args.runtime, args.deps);
234
+ return { text: (result && typeof result === "object" && "result" in result ? result.result?.payloads ?? [] : []).map((p) => typeof p?.text === "string" ? p.text.trim() : "").filter(Boolean).join("\n\n").trim() };
231
235
  }
232
236
  function makePlanFilePath(planDir, taskIndex) {
233
237
  return path.join(planDir, `task-${taskIndex}-${Date.now()}.md`);
@@ -243,6 +247,71 @@ async function isPlanFileValid(filePath) {
243
247
  return false;
244
248
  }
245
249
  }
250
+ async function getGitChangedFileCount(cwd) {
251
+ try {
252
+ const { stdout } = await execFile$1("git", ["status", "--porcelain"], { cwd });
253
+ return stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).length;
254
+ } catch {
255
+ return null;
256
+ }
257
+ }
258
+ function extractJsonObject(text) {
259
+ const trimmed = text.trim();
260
+ if (!trimmed) return null;
261
+ const tryParse = (candidate) => {
262
+ try {
263
+ const parsed = JSON.parse(candidate);
264
+ if (!parsed || typeof parsed !== "object") return null;
265
+ return parsed;
266
+ } catch {
267
+ return null;
268
+ }
269
+ };
270
+ const direct = tryParse(trimmed);
271
+ if (direct) return direct;
272
+ const fencedMatch = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/i);
273
+ if (fencedMatch?.[1]) {
274
+ const fenced = tryParse(fencedMatch[1].trim());
275
+ if (fenced) return fenced;
276
+ }
277
+ const first = trimmed.indexOf("{");
278
+ const last = trimmed.lastIndexOf("}");
279
+ if (first >= 0 && last > first) {
280
+ const sliced = tryParse(trimmed.slice(first, last + 1));
281
+ if (sliced) return sliced;
282
+ }
283
+ return null;
284
+ }
285
+ function extractPlanMarkdownFromText(text) {
286
+ const candidate = text.match(/```(?:markdown|md)?\s*([\s\S]*?)```/i)?.[1]?.trim() ?? text.trim();
287
+ if (candidate.length < 60) return;
288
+ return candidate;
289
+ }
290
+ function normalizeDiscoveryFilename(filename, expectedPlanFile) {
291
+ const trimmed = filename?.trim();
292
+ if (!trimmed) return expectedPlanFile;
293
+ return path.resolve(trimmed);
294
+ }
295
+ function buildDiscoveryRepairPrompt(task, taskFile, planFilePath) {
296
+ return `RETRY: your previous preflight response did not produce a valid plan file.
297
+
298
+ You MUST complete these steps exactly:
299
+ 1) Write the implementation plan to: ${planFilePath}
300
+ 2) Verify the file exists and is non-empty
301
+ 3) Return ONLY strict JSON: {"status":"incomplete","filename":"${planFilePath}"}
302
+
303
+ If task is already complete, return ONLY: {"status":"complete","filename":""}
304
+
305
+ Do not include THOUGHT, markdown fences, or extra commentary.
306
+ Task file: ${taskFile}
307
+ Task: ${task}`;
308
+ }
309
+ async function tryPersistPlanFallback(params) {
310
+ 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;
312
+ await fs.writeFile(params.planFile, `${planText}\n`, "utf8");
313
+ return await isPlanFileValid(params.planFile);
314
+ }
246
315
  async function runDiscoveryPhase(args) {
247
316
  const planFile = makePlanFilePath(args.planDir, args.taskNum);
248
317
  await ensurePlanDir(args.planDir);
@@ -262,7 +331,7 @@ async function runDiscoveryPhase(args) {
262
331
  task: `Discovery (attempt ${attempt + 1})`,
263
332
  sessionId
264
333
  });
265
- await runAgentTask({
334
+ const firstPass = await runAgentTask({
266
335
  message: buildDiscoveryPrompt(args.task.text, args.taskFile, planFile),
267
336
  sessionId,
268
337
  timeout: args.timeout,
@@ -272,23 +341,91 @@ async function runDiscoveryPhase(args) {
272
341
  deps: args.deps,
273
342
  workspaceDir: args.workspaceDir
274
343
  });
275
- if (await isPlanFileValid(planFile)) {
344
+ const firstParsed = extractJsonObject(firstPass.text);
345
+ if ((firstParsed?.status ?? "").toLowerCase() === "complete") return { status: "complete" };
346
+ const declaredPlanFile = normalizeDiscoveryFilename(firstParsed?.filename, planFile);
347
+ if (await isPlanFileValid(declaredPlanFile)) {
276
348
  await args.notify({
277
349
  phase: "discovery_complete",
278
350
  index: args.taskNum,
279
351
  total: args.total,
280
352
  task: args.task.text,
281
- planFile
353
+ planFile: declaredPlanFile
282
354
  });
283
355
  return {
284
356
  status: "plan_ready",
285
- planFile
357
+ planFile: declaredPlanFile
358
+ };
359
+ }
360
+ if ((firstParsed?.status ?? "").toLowerCase() === "incomplete" && await tryPersistPlanFallback({
361
+ planFile: declaredPlanFile,
362
+ parsed: firstParsed,
363
+ rawText: firstPass.text
364
+ })) {
365
+ await args.notify({
366
+ phase: "discovery_complete",
367
+ index: args.taskNum,
368
+ total: args.total,
369
+ task: args.task.text,
370
+ planFile: declaredPlanFile
371
+ });
372
+ return {
373
+ status: "plan_ready",
374
+ planFile: declaredPlanFile
375
+ };
376
+ }
377
+ const repairSessionId = `anton-discovery-repair-${Date.now()}-${args.taskNum}-${attempt}`;
378
+ await args.notify({
379
+ phase: "task_agent_spawned",
380
+ index: args.taskNum,
381
+ total: args.total,
382
+ task: `Discovery repair (attempt ${attempt + 1})`,
383
+ sessionId: repairSessionId
384
+ });
385
+ const repairPass = await runAgentTask({
386
+ message: buildDiscoveryRepairPrompt(args.task.text, args.taskFile, declaredPlanFile),
387
+ sessionId: repairSessionId,
388
+ timeout: args.timeout,
389
+ agent: args.agent,
390
+ to: args.to,
391
+ runtime: args.runtime,
392
+ deps: args.deps,
393
+ workspaceDir: args.workspaceDir
394
+ });
395
+ const repairParsed = extractJsonObject(repairPass.text);
396
+ if ((repairParsed?.status ?? "").toLowerCase() === "complete") return { status: "complete" };
397
+ const repairPlanFile = normalizeDiscoveryFilename(repairParsed?.filename, declaredPlanFile);
398
+ if (await isPlanFileValid(repairPlanFile) || await tryPersistPlanFallback({
399
+ planFile: repairPlanFile,
400
+ parsed: repairParsed,
401
+ rawText: repairPass.text
402
+ })) {
403
+ await args.notify({
404
+ phase: "discovery_complete",
405
+ index: args.taskNum,
406
+ total: args.total,
407
+ task: args.task.text,
408
+ planFile: repairPlanFile
409
+ });
410
+ return {
411
+ status: "plan_ready",
412
+ planFile: repairPlanFile
413
+ };
414
+ }
415
+ if (attempt === args.maxRetries) {
416
+ const reason = "Discovery did not produce a valid plan file after primary + repair passes";
417
+ await args.notify({
418
+ phase: "discovery_failed",
419
+ index: args.taskNum,
420
+ total: args.total,
421
+ task: args.task.text,
422
+ error: reason
423
+ });
424
+ return {
425
+ status: "failed",
426
+ error: reason
286
427
  };
287
428
  }
288
- if (attempt === args.maxRetries) return {
289
- status: "failed",
290
- error: "Discovery did not produce a valid plan file"
291
- };
292
429
  } catch (err) {
293
430
  const errorMsg = err instanceof Error ? err.message : String(err);
294
431
  if (attempt === args.maxRetries) {
@@ -495,6 +632,7 @@ async function runAnton(args) {
495
632
  workspaceDir: args.workspaceDir
496
633
  });
497
634
  }
635
+ if (!planFile) throw new Error("Preflight discovery did not produce a verified plan file; refusing direct implementation fallback");
498
636
  }
499
637
  await notify({
500
638
  phase: "implementation_start",
@@ -511,8 +649,11 @@ async function runAnton(args) {
511
649
  task: task.text,
512
650
  sessionId: implSessionId
513
651
  });
652
+ const implPrompt = planFile ? buildImplementationPrompt(task.text, planFile) : buildDirectTaskPrompt(task.text);
653
+ const gitCwd = args.workspaceDir ? path.resolve(args.workspaceDir) : path.dirname(filePath);
654
+ const changedBefore = await getGitChangedFileCount(gitCwd);
514
655
  await runAgentTask({
515
- message: planFile ? buildImplementationPrompt(task.text, planFile) : buildDirectTaskPrompt(task.text),
656
+ message: implPrompt,
516
657
  sessionId: implSessionId,
517
658
  timeout: defaultTimeout,
518
659
  agent: args.agent,
@@ -521,6 +662,8 @@ async function runAnton(args) {
521
662
  deps: args.deps,
522
663
  workspaceDir: args.workspaceDir
523
664
  });
665
+ const changedAfter = await getGitChangedFileCount(gitCwd);
666
+ if (mode === "preflight" && changedBefore !== null && changedAfter !== null && changedAfter <= changedBefore) throw new Error("Implementation made no repository changes; refusing to mark task complete");
524
667
  const updated = markTaskDone(await fs.readFile(filePath, "utf8"), task.line);
525
668
  await fs.writeFile(filePath, updated, "utf8");
526
669
  completed += 1;
@@ -1,6 +1,6 @@
1
1
  import { a as buildGroupHistoryKey, f as DEFAULT_ACCOUNT_ID, n as DEFAULT_MAIN_KEY, r as buildAgentMainSessionKey, s as normalizeAgentId } from "./session-key-47BV2tLd.js";
2
2
  import { i as resolveWhatsAppAccount } from "./accounts-BLYMokxV.js";
3
- import { A as formatDurationPrecise, Ct as formatInboundEnvelope, Gt as resolveOpenProviderRuntimeGroupPolicy, Lt as resolveDmGroupAccessWithCommandGate, Mt as buildPairingReply, Pt as readStoreAllowFromForDmPolicy, Rt as resolveDmGroupAccessWithLists, Tt as resolveEnvelopeFormatOptions, Wt as resolveDefaultGroupPolicy, X as shouldAckReactionForWhatsApp, Z as resolveMentionGating, _ as resolveInboundDebounceMs, ct as recordPendingHistoryEntryIfEnabled, g as createInboundDebouncer, i as parseActivationCommand, j as enqueueSystemEvent, l as computeBackoff, lt as buildMentionRegexes, m as dispatchReplyWithBufferedBlockDispatcher, nt as buildHistoryContextFromEntries, qt as warnMissingProviderGroupPolicyFallbackOnce, r as normalizeGroupActivation, t as getReplyFromConfig, tt as DEFAULT_GROUP_HISTORY_LIMIT, u as sleepWithAbort, ut as normalizeMentionText, v as hasControlCommand, y as shouldComputeCommandAuthorized, yt as createDedupeCache } from "./reply-Csf1i8F8.js";
3
+ import { A as formatDurationPrecise, Ct as formatInboundEnvelope, Gt as resolveOpenProviderRuntimeGroupPolicy, Lt as resolveDmGroupAccessWithCommandGate, Mt as buildPairingReply, Pt as readStoreAllowFromForDmPolicy, Rt as resolveDmGroupAccessWithLists, Tt as resolveEnvelopeFormatOptions, Wt as resolveDefaultGroupPolicy, X as shouldAckReactionForWhatsApp, Z as resolveMentionGating, _ as resolveInboundDebounceMs, ct as recordPendingHistoryEntryIfEnabled, g as createInboundDebouncer, i as parseActivationCommand, j as enqueueSystemEvent, l as computeBackoff, lt as buildMentionRegexes, m as dispatchReplyWithBufferedBlockDispatcher, nt as buildHistoryContextFromEntries, qt as warnMissingProviderGroupPolicyFallbackOnce, r as normalizeGroupActivation, t as getReplyFromConfig, tt as DEFAULT_GROUP_HISTORY_LIMIT, u as sleepWithAbort, ut as normalizeMentionText, v as hasControlCommand, y as shouldComputeCommandAuthorized, yt as createDedupeCache } from "./reply-C2G4DKTN.js";
4
4
  import { r as loadConfig } from "./config-CEgzwk0J.js";
5
5
  import { A as shouldLogVerbose, D as logVerbose, I as getChildLogger, d as normalizeE164, l as isSelfChatMode, m as resolveJidToE164, n as clamp, u as jidToE164, x as toWhatsappJid, y as sleep } from "./utils-Dyj2wV4e.js";
6
6
  import { l as normalizeChatChannelId, t as createSubsystemLogger } from "./subsystem-DWPzKeZ0.js";
@@ -878,7 +878,7 @@ async function monitorWebInbox(options) {
878
878
  };
879
879
  const stopText = (inboundMessage.body ?? "").trim();
880
880
  if (stopText) {
881
- const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-qkFklwE3.js");
881
+ const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-rTRWpk26.js");
882
882
  if (isAbortRequestText(stopText)) {
883
883
  const { loadConfig: loadCfg } = await import("./config-CEgzwk0J.js").then((n) => n.t);
884
884
  const { resolveAgentRoute } = await import("./resolve-route-BZABUE4J.js").then((n) => n.r);
@@ -18,7 +18,7 @@ var deps_exports = /* @__PURE__ */ __exportAll({ createDefaultDeps: () => create
18
18
  function createDefaultDeps() {
19
19
  return {
20
20
  sendMessageWhatsApp: async (...args) => {
21
- const { sendMessageWhatsApp } = await import("./web-Cs2SXpS-.js");
21
+ const { sendMessageWhatsApp } = await import("./web-bxu2RRVS.js");
22
22
  return await sendMessageWhatsApp(...args);
23
23
  },
24
24
  sendMessageTelegram: async (...args) => {
@@ -1,5 +1,5 @@
1
1
  import "./accounts-BLYMokxV.js";
2
- import { S as stopSubagentsForRequester, b as formatAbortReplyText, n as abortEmbeddedPiRun, w as clearSessionQueues, x as isAbortRequestText } from "./reply-Csf1i8F8.js";
2
+ import { S as stopSubagentsForRequester, b as formatAbortReplyText, n as abortEmbeddedPiRun, w as clearSessionQueues, x as isAbortRequestText } from "./reply-C2G4DKTN.js";
3
3
  import "./paths-CtGV5i8O.js";
4
4
  import "./github-copilot-token-CY2euW0d.js";
5
5
  import "./config-CEgzwk0J.js";
@@ -61,7 +61,7 @@ import "./send-B26cNPqY.js";
61
61
  import "./proxy-C4ewPdlN.js";
62
62
  import "./resolve-route-BZABUE4J.js";
63
63
  import "./replies-ZovJp-3F.js";
64
- import "./deps-Be1yXgl3.js";
64
+ import "./deps-B0MfJgDH.js";
65
65
  import "./outbound-attachment-BisU5Vji.js";
66
66
 
67
67
  //#region src/auto-reply/reply/emergency-stop.ts
@@ -1,6 +1,6 @@
1
1
  import { f as DEFAULT_ACCOUNT_ID, p as normalizeAccountId, u as resolveThreadSessionKeys } from "./session-key-47BV2tLd.js";
2
2
  import { a as resolveWhatsAppAuthDir, i as resolveWhatsAppAccount, n as listWhatsAppAccountIds, o as createAccountListHelpers, r as resolveDefaultWhatsAppAccountId } from "./accounts-BLYMokxV.js";
3
- import { $ as mergeAllowlist, $t as unregisterAcpRuntimeBackend, At as extractToolSend, B as formatDocsLink, Bt as resolveControlCommandGate, D as stripMarkdown, Dt as formatZonedTimestamp, E as processLineMessage, Et as formatUtcTimestamp, Ft as resolveDmAllowState, G as logInboundDrop, Gt as resolveOpenProviderRuntimeGroupPolicy, H as stringEnum, Ht as resetMissingProviderGroupPolicyFallbackWarningsForTesting, It as resolveDmGroupAccessDecision, J as removeAckReactionAfterReply, Jt as isDangerousNameMatchingEnabled, K as logTypingFailure, Kt as resolveRuntimeGroupPolicy, L as resolveDiscordUserAllowlist, Lt as resolveDmGroupAccessWithCommandGate, M as resolveSlackUserAllowlist, N as resolveSlackChannelAllowlist, Nt as DM_GROUP_ACCESS_REASON, O as createReceiptCard, Ot as resolveTimezone, P as detectBinary, Pt as readStoreAllowFromForDmPolicy, Q as resolveMentionGatingWithBypass, Qt as requireAcpRuntimeBackend, R as resolveDiscordChannelAllowlist, Rt as resolveDmGroupAccessWithLists, St as rejectDevicePairing, T as hasMarkdownToConvert, U as recordInboundSession, Ut as resolveAllowlistProviderRuntimeGroupPolicy, V as optionalStringEnum, Vt as GROUP_POLICY_BLOCKED_LABEL, W as logAckFailure, Wt as resolveDefaultGroupPolicy, X as shouldAckReactionForWhatsApp, Xt as getAcpRuntimeBackend, Y as shouldAckReaction, Yt as registerPluginHttpRoute, Z as resolveMentionGating, Zt as registerAcpRuntimeBackend, _t as readRequestBodyWithLimit, a as listLineAccountIds, an as formatAllowlistMatchMeta, at as clearHistoryEntriesIfEnabled, bt as approveDevicePairing, c as resolveLineAccount, cn as BLUEBUBBLES_ACTION_NAMES, ct as recordPendingHistoryEntryIfEnabled, dt as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, en as ACP_ERROR_CODES, et as summarizeMapping, ft as DEFAULT_WEBHOOK_MAX_BODY_BYTES, gt as readJsonBodyWithLimit, ht as isRequestBodyLimitError, in as unbindThreadBindingsBySessionKey, it as clearHistoryEntries, jt as issuePairingChallenge, k as attachFooterText, kt as buildMediaPayload, ln as BLUEBUBBLES_GROUP_ACTIONS, mt as installRequestBodyLimitGuard, nn as autoBindSpawnedDiscordSubagent, o as normalizeAccountId$1, on as resolveAllowlistMatchSimple, ot as evictOldHistoryKeys, pt as RequestBodyLimitError, q as createTypingCallbacks, qt as warnMissingProviderGroupPolicyFallbackOnce, rn as listThreadBindingsBySessionKey, rt as buildPendingHistoryContextFromMap, s as resolveDefaultLineAccountId, sn as BLUEBUBBLES_ACTIONS, st as recordPendingHistoryEntry, tn as AcpRuntimeError, tt as DEFAULT_GROUP_HISTORY_LIMIT, un as CHANNEL_MESSAGE_ACTION_NAMES, vt as requestBodyErrorToText, wt as formatInboundFromLabel, xt as listDevicePairing, yt as createDedupeCache, z as collectDiscordAuditChannelIds, zt as resolveEffectiveAllowFromLists } from "./reply-Csf1i8F8.js";
3
+ import { $ as mergeAllowlist, $t as unregisterAcpRuntimeBackend, At as extractToolSend, B as formatDocsLink, Bt as resolveControlCommandGate, D as stripMarkdown, Dt as formatZonedTimestamp, E as processLineMessage, Et as formatUtcTimestamp, Ft as resolveDmAllowState, G as logInboundDrop, Gt as resolveOpenProviderRuntimeGroupPolicy, H as stringEnum, Ht as resetMissingProviderGroupPolicyFallbackWarningsForTesting, It as resolveDmGroupAccessDecision, J as removeAckReactionAfterReply, Jt as isDangerousNameMatchingEnabled, K as logTypingFailure, Kt as resolveRuntimeGroupPolicy, L as resolveDiscordUserAllowlist, Lt as resolveDmGroupAccessWithCommandGate, M as resolveSlackUserAllowlist, N as resolveSlackChannelAllowlist, Nt as DM_GROUP_ACCESS_REASON, O as createReceiptCard, Ot as resolveTimezone, P as detectBinary, Pt as readStoreAllowFromForDmPolicy, Q as resolveMentionGatingWithBypass, Qt as requireAcpRuntimeBackend, R as resolveDiscordChannelAllowlist, Rt as resolveDmGroupAccessWithLists, St as rejectDevicePairing, T as hasMarkdownToConvert, U as recordInboundSession, Ut as resolveAllowlistProviderRuntimeGroupPolicy, V as optionalStringEnum, Vt as GROUP_POLICY_BLOCKED_LABEL, W as logAckFailure, Wt as resolveDefaultGroupPolicy, X as shouldAckReactionForWhatsApp, Xt as getAcpRuntimeBackend, Y as shouldAckReaction, Yt as registerPluginHttpRoute, Z as resolveMentionGating, Zt as registerAcpRuntimeBackend, _t as readRequestBodyWithLimit, a as listLineAccountIds, an as formatAllowlistMatchMeta, at as clearHistoryEntriesIfEnabled, bt as approveDevicePairing, c as resolveLineAccount, cn as BLUEBUBBLES_ACTION_NAMES, ct as recordPendingHistoryEntryIfEnabled, dt as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, en as ACP_ERROR_CODES, et as summarizeMapping, ft as DEFAULT_WEBHOOK_MAX_BODY_BYTES, gt as readJsonBodyWithLimit, ht as isRequestBodyLimitError, in as unbindThreadBindingsBySessionKey, it as clearHistoryEntries, jt as issuePairingChallenge, k as attachFooterText, kt as buildMediaPayload, ln as BLUEBUBBLES_GROUP_ACTIONS, mt as installRequestBodyLimitGuard, nn as autoBindSpawnedDiscordSubagent, o as normalizeAccountId$1, on as resolveAllowlistMatchSimple, ot as evictOldHistoryKeys, pt as RequestBodyLimitError, q as createTypingCallbacks, qt as warnMissingProviderGroupPolicyFallbackOnce, rn as listThreadBindingsBySessionKey, rt as buildPendingHistoryContextFromMap, s as resolveDefaultLineAccountId, sn as BLUEBUBBLES_ACTIONS, st as recordPendingHistoryEntry, tn as AcpRuntimeError, tt as DEFAULT_GROUP_HISTORY_LIMIT, un as CHANNEL_MESSAGE_ACTION_NAMES, vt as requestBodyErrorToText, wt as formatInboundFromLabel, xt as listDevicePairing, yt as createDedupeCache, z as collectDiscordAuditChannelIds, zt as resolveEffectiveAllowFromLists } from "./reply-C2G4DKTN.js";
4
4
  import "./paths-CtGV5i8O.js";
5
5
  import "./github-copilot-token-CY2euW0d.js";
6
6
  import { A as GroupPolicySchema, An as acquireFileLock, D as BlockStreamingCoalesceSchema, E as ToolPolicySchema, F as TtsConfigSchema, I as TtsModeSchema, L as TtsProviderSchema, M as MarkdownTableModeSchema, N as ReplyRuntimeConfigSchemaShape, O as DmConfigSchema, P as TtsAutoSchema, R as normalizeAllowFrom, d as GoogleChatConfigSchema, f as IMessageConfigSchema, g as TelegramConfigSchema, h as SlackConfigSchema, j as MarkdownConfigSchema, jn as withFileLock, k as DmPolicySchema, l as WhatsAppConfigSchema, m as SignalConfigSchema, p as MSTeamsConfigSchema, u as DiscordConfigSchema, z as requireOpenAllowFrom } from "./config-CEgzwk0J.js";
@@ -52,7 +52,7 @@ import { h as onDiagnosticEvent, m as isDiagnosticsEnabled, p as emitDiagnosticE
52
52
  import { n as extractOriginalFilename } from "./store-CCCXwngh.js";
53
53
  import "./pi-embedded-helpers-B68z4sHq.js";
54
54
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-CnUtsDch.js";
55
- import { r as resolveWhatsAppHeartbeatRecipients } from "./channel-web-CtnWXT6I.js";
55
+ import { r as resolveWhatsAppHeartbeatRecipients } from "./channel-web-BWE_kecR.js";
56
56
  import "./thinking-g4Rrlwu4.js";
57
57
  import "./image-C_1tftC8.js";
58
58
  import "./pi-model-discovery-Dt6899be.js";
@@ -65,7 +65,7 @@ import "./send-B26cNPqY.js";
65
65
  import "./proxy-C4ewPdlN.js";
66
66
  import "./resolve-route-BZABUE4J.js";
67
67
  import "./replies-ZovJp-3F.js";
68
- import "./deps-Be1yXgl3.js";
68
+ import "./deps-B0MfJgDH.js";
69
69
  import "./outbound-attachment-BisU5Vji.js";
70
70
  import "./outbound-Dx_q6JAI.js";
71
71
  import "./session-DdJj6_DW.js";
@@ -72,7 +72,7 @@ import { t as makeProxyFetch } from "./proxy-C4ewPdlN.js";
72
72
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-BZABUE4J.js";
73
73
  import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-ZovJp-3F.js";
74
74
  import { i as redactIdentifier, t as getActiveWebListener } from "./active-listener-WMrtFGPv.js";
75
- import { r as createOutboundSendDepsFromCliSource, t as createDefaultDeps } from "./deps-Be1yXgl3.js";
75
+ import { r as createOutboundSendDepsFromCliSource, t as createDefaultDeps } from "./deps-B0MfJgDH.js";
76
76
  import { createRequire } from "node:module";
77
77
  import fs, { existsSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
78
78
  import * as path$1 from "node:path";
@@ -33090,7 +33090,7 @@ function createDiscordMessageHandler(params) {
33090
33090
  try {
33091
33091
  const messageText = resolveDiscordMessageText(data.message)?.trim();
33092
33092
  if (messageText) {
33093
- const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-qkFklwE3.js");
33093
+ const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-rTRWpk26.js");
33094
33094
  if (isAbortRequestText(messageText)) {
33095
33095
  const { resolveAgentRoute } = await import("./resolve-route-BZABUE4J.js").then((n) => n.r);
33096
33096
  const channelId = resolveDiscordMessageChannelId({
@@ -43834,7 +43834,7 @@ async function monitorIMessageProvider(opts = {}) {
43834
43834
  }
43835
43835
  const msgText = (message.text ?? "").trim();
43836
43836
  if (msgText) {
43837
- const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-qkFklwE3.js");
43837
+ const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-rTRWpk26.js");
43838
43838
  if (isAbortRequestText(msgText)) {
43839
43839
  const { resolveAgentRoute } = await import("./resolve-route-BZABUE4J.js").then((n) => n.r);
43840
43840
  const route = resolveAgentRoute({
@@ -46230,7 +46230,7 @@ function createSignalEventHandler(deps) {
46230
46230
  const senderName = envelope.sourceName ?? senderDisplay;
46231
46231
  const messageId = typeof envelope.timestamp === "number" ? String(envelope.timestamp) : void 0;
46232
46232
  if (bodyText) {
46233
- const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-qkFklwE3.js");
46233
+ const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-rTRWpk26.js");
46234
46234
  if (isAbortRequestText(bodyText)) {
46235
46235
  const { resolveAgentRoute } = await import("./resolve-route-BZABUE4J.js").then((n) => n.r);
46236
46236
  const route = resolveAgentRoute({
@@ -49601,7 +49601,7 @@ function createSlackMessageHandler(params) {
49601
49601
  if (ctx.markMessageSeen(message.channel, message.ts)) return;
49602
49602
  const rawText = (message.text ?? "").trim();
49603
49603
  if (rawText) {
49604
- const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-qkFklwE3.js");
49604
+ const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-rTRWpk26.js");
49605
49605
  if (isAbortRequestText(rawText)) {
49606
49606
  const { resolveAgentRoute } = await import("./resolve-route-BZABUE4J.js").then((n) => n.r);
49607
49607
  const route = resolveAgentRoute({
@@ -54224,7 +54224,7 @@ const registerTelegramHandlers = ({ cfg, accountId, bot, opts, runtime, mediaMax
54224
54224
  const { ctx, msg, chatId, resolvedThreadId, storeAllowFrom, sendOversizeWarning, oversizeLogMessage } = params;
54225
54225
  const text = typeof msg.text === "string" ? msg.text : void 0;
54226
54226
  if (text) {
54227
- const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-qkFklwE3.js");
54227
+ const { isAbortRequestText, emergencyStop, resolveSessionForEmergencyStop } = await import("./emergency-stop-rTRWpk26.js");
54228
54228
  if (isAbortRequestText(text)) {
54229
54229
  const senderId = msg.from?.id ? String(msg.from.id) : "";
54230
54230
  if (!senderId || !allowFrom?.length || allowFrom.includes(senderId)) {
@@ -57709,7 +57709,7 @@ function loadWebLoginQr() {
57709
57709
  return webLoginQrPromise;
57710
57710
  }
57711
57711
  function loadWebChannel() {
57712
- webChannelPromise ??= import("./web-Cs2SXpS-.js");
57712
+ webChannelPromise ??= import("./web-bxu2RRVS.js");
57713
57713
  return webChannelPromise;
57714
57714
  }
57715
57715
  function loadWhatsAppActions() {
@@ -80281,7 +80281,7 @@ const handleAntonCommand = async (params, _allowTextCommands) => {
80281
80281
  };
80282
80282
  const arg = body.slice(6).trim();
80283
80283
  if (arg === "status" || arg === "") {
80284
- const { antonStatus } = await import("./anton-BdO0Oxvp.js");
80284
+ const { antonStatus } = await import("./anton-DfpQdXJJ.js");
80285
80285
  const lines = [];
80286
80286
  await antonStatus({
80287
80287
  log: (msg) => lines.push(msg),
@@ -80297,7 +80297,7 @@ const handleAntonCommand = async (params, _allowTextCommands) => {
80297
80297
  return { shouldContinue: false };
80298
80298
  }
80299
80299
  if (arg === "stop") {
80300
- const { antonStop } = await import("./anton-BdO0Oxvp.js");
80300
+ const { antonStop } = await import("./anton-DfpQdXJJ.js");
80301
80301
  const lines = [];
80302
80302
  await antonStop({
80303
80303
  log: (msg) => lines.push(msg),
@@ -80335,8 +80335,8 @@ const handleAntonCommand = async (params, _allowTextCommands) => {
80335
80335
  await sendProgress(replyCtx, text);
80336
80336
  return { shouldContinue: false };
80337
80337
  }
80338
- const { runAnton, formatProgressMessage } = await import("./anton-BdO0Oxvp.js");
80339
- const { createDefaultDeps } = await import("./deps-Be1yXgl3.js").then((n) => n.n);
80338
+ const { runAnton, formatProgressMessage } = await import("./anton-DfpQdXJJ.js");
80339
+ const { createDefaultDeps } = await import("./deps-B0MfJgDH.js").then((n) => n.n);
80340
80340
  const { createNonExitingRuntime } = await import("./runtime-CjfcfOBD.js").then((n) => n.r);
80341
80341
  const runtime = createNonExitingRuntime();
80342
80342
  const deps = createDefaultDeps();
@@ -1,5 +1,5 @@
1
1
  import "./accounts-BLYMokxV.js";
2
- import "./reply-Csf1i8F8.js";
2
+ import "./reply-C2G4DKTN.js";
3
3
  import "./paths-CtGV5i8O.js";
4
4
  import "./github-copilot-token-CY2euW0d.js";
5
5
  import "./config-CEgzwk0J.js";
@@ -49,7 +49,7 @@ import "./deliver-BNfMF0Nb.js";
49
49
  import "./diagnostic-ByA6zvzu.js";
50
50
  import "./store-CCCXwngh.js";
51
51
  import "./pi-embedded-helpers-B68z4sHq.js";
52
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-CtnWXT6I.js";
52
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-BWE_kecR.js";
53
53
  import "./thinking-g4Rrlwu4.js";
54
54
  import "./image-C_1tftC8.js";
55
55
  import "./pi-model-discovery-Dt6899be.js";
@@ -62,7 +62,7 @@ import "./send-B26cNPqY.js";
62
62
  import "./proxy-C4ewPdlN.js";
63
63
  import "./resolve-route-BZABUE4J.js";
64
64
  import "./replies-ZovJp-3F.js";
65
- import "./deps-Be1yXgl3.js";
65
+ import "./deps-B0MfJgDH.js";
66
66
  import "./outbound-attachment-BisU5Vji.js";
67
67
  import { n as sendMessageWhatsApp } from "./outbound-Dx_q6JAI.js";
68
68
  import { i as waitForWaConnection, t as createWaSocket } from "./session-DdJj6_DW.js";
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir } from "./paths-Cn44w-EB.js";
2
2
  import { B as theme, S as shortenHomePath, g as resolveConfigDir, x as shortenHomeInString, y as resolveUserPath } from "./utils-CXzXXV2o.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import "./reply-DuYN0-Pb.js";
4
+ import "./reply-ZWOav11z.js";
5
5
  import "./agent-scope-RA0zXRpu.js";
6
6
  import "./subsystem-CGZX2PBV.js";
7
7
  import { n as defaultRuntime } from "./runtime-44j_X4Y6.js";
@@ -102,7 +102,7 @@ import "./resolve-route-D_AbcmD6.js";
102
102
  import "./replies-hSFVxL4h.js";
103
103
  import "./skill-commands-BFzmZAfo.js";
104
104
  import "./workspace-dirs-SsExQ3Bz.js";
105
- import "./deps-DOKkEv5X.js";
105
+ import "./deps-BYfE_aIY.js";
106
106
  import "./plugin-auto-enable-7DUxMy6A.js";
107
107
  import "./channel-selection-ZxRkxpuF.js";
108
108
  import "./outbound-attachment-Bot3bRnK.js";
@@ -121,7 +121,7 @@ import "./npm-registry-spec-BCbbfIhX.js";
121
121
  import "./skill-scanner-D7mzXRXd.js";
122
122
  import { a as resolvePluginInstallDir, i as installPluginFromPath, n as recordPluginInstall, r as installPluginFromNpmSpec } from "./installs-CNubze2L.js";
123
123
  import { t as renderTable } from "./table-B9AmL3M1.js";
124
- import { n as resolvePinnedNpmInstallRecordForCli, r as buildPluginStatusReport } from "./npm-resolution-BjPIvwHA.js";
124
+ import { n as resolvePinnedNpmInstallRecordForCli, r as buildPluginStatusReport } from "./npm-resolution-DIJeEhoa.js";
125
125
  import { n as updateNpmInstalledPlugins, r as findBundledPluginByNpmSpec } from "./update-D79ppbMQ.js";
126
126
  import fs from "node:fs";
127
127
  import os from "node:os";
@@ -25,7 +25,7 @@ import "./logging-Bgrm4o7g.js";
25
25
  import "./auth-store-D9BmR4S6.js";
26
26
  import "./send-m4lQkQcY.js";
27
27
  import "./send-CCiDIuX4.js";
28
- import "./subagent-registry-CV8jrQca.js";
28
+ import "./subagent-registry-C6uygQa1.js";
29
29
  import "./paths-CC17i2eK.js";
30
30
  import "./chat-envelope-Dedaetiq.js";
31
31
  import "./client-Brv1GCwX.js";
@@ -108,7 +108,7 @@ import "./cli-utils-BfsDuRZS.js";
108
108
  import "./help-format-CldHB7lS.js";
109
109
  import "./progress-B76RkFx7.js";
110
110
  import "./replies-DSfpze17.js";
111
- import "./deps-BuqRbUb-.js";
111
+ import "./deps-DxMLbT7t.js";
112
112
  import "./onboard-helpers-Dp6wXNs7.js";
113
113
  import "./prompt-style-XmK49QYK.js";
114
114
  import "./pairing-labels-D7xcHkxi.js";
@@ -118,7 +118,7 @@ import "./npm-registry-spec-BlFqJFsA.js";
118
118
  import "./skill-scanner-CdLElD51.js";
119
119
  import { a as resolvePluginInstallDir, i as installPluginFromPath, n as recordPluginInstall, r as installPluginFromNpmSpec } from "./installs-8aQVDSI0.js";
120
120
  import { t as renderTable } from "./table-aJzHv5Oe.js";
121
- import { n as resolvePinnedNpmInstallRecordForCli, r as buildPluginStatusReport } from "./npm-resolution-C_gT5wrI.js";
121
+ import { n as resolvePinnedNpmInstallRecordForCli, r as buildPluginStatusReport } from "./npm-resolution-Dpn9DNPz.js";
122
122
  import { n as updateNpmInstalledPlugins, r as findBundledPluginByNpmSpec } from "./update-If9iCjgB.js";
123
123
  import os from "node:os";
124
124
  import path from "node:path";
@@ -26,7 +26,7 @@ import "./logging-Bgrm4o7g.js";
26
26
  import "./auth-store-D9BmR4S6.js";
27
27
  import "./send-m4lQkQcY.js";
28
28
  import "./send-CCiDIuX4.js";
29
- import "./subagent-registry-CV8jrQca.js";
29
+ import "./subagent-registry-C6uygQa1.js";
30
30
  import "./paths-CC17i2eK.js";
31
31
  import "./chat-envelope-Dedaetiq.js";
32
32
  import "./client-Brv1GCwX.js";
@@ -109,17 +109,17 @@ import "./cli-utils-BfsDuRZS.js";
109
109
  import "./help-format-CldHB7lS.js";
110
110
  import "./progress-B76RkFx7.js";
111
111
  import "./replies-DSfpze17.js";
112
- import "./deps-BuqRbUb-.js";
112
+ import "./deps-DxMLbT7t.js";
113
113
  import "./onboard-helpers-Dp6wXNs7.js";
114
114
  import "./prompt-style-XmK49QYK.js";
115
115
  import "./pairing-labels-D7xcHkxi.js";
116
- import "./plugin-registry-n---u7EU.js";
117
- import { n as resolveCliChannelOptions } from "./channel-options-DcbnvkV8.js";
118
- import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-C39R-X4d.js";
119
- import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-BzM89IOr.js";
116
+ import "./plugin-registry-D9Z1bMNt.js";
117
+ import { n as resolveCliChannelOptions } from "./channel-options-DqOp64vm.js";
118
+ import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-DPQqxIZd.js";
119
+ import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-CQ_cgvak.js";
120
120
  import { r as setProgramContext } from "./program-context-BrqeiWcA.js";
121
121
  import { t as forceFreePort } from "./ports-CIJavqzS.js";
122
- import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-XXOWQkH8.js";
122
+ import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-B6ih1A5q.js";
123
123
  import { Command, InvalidArgumentError } from "commander";
124
124
 
125
125
  //#region src/cli/program/context.ts
@@ -258,7 +258,7 @@ function registerPreActionHooks(program, programVersion) {
258
258
  commandPath
259
259
  });
260
260
  if (PLUGIN_REQUIRED_COMMANDS.has(commandPath[0])) {
261
- const { ensurePluginRegistryLoaded } = await import("./plugin-registry-n---u7EU.js").then((n) => n.n);
261
+ const { ensurePluginRegistryLoaded } = await import("./plugin-registry-D9Z1bMNt.js").then((n) => n.n);
262
262
  ensurePluginRegistryLoaded();
263
263
  }
264
264
  });