@xdevops/issue-auto-finish 1.0.87 → 1.0.89

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 (134) hide show
  1. package/dist/{AIRunnerRegistry-II3WWSFN.js → AIRunnerRegistry-CFDNWSXC.js} +6 -3
  2. package/dist/{LockNote-Z2CLDZNN.js → LockNote-W2JNVMW7.js} +3 -3
  3. package/dist/PtyRunner-NYASBTRP.js +33 -0
  4. package/dist/SdkRunner-U2OTOMZU.js +9 -0
  5. package/dist/ai-runner/AIRunner.d.ts +19 -1
  6. package/dist/ai-runner/AIRunner.d.ts.map +1 -1
  7. package/dist/ai-runner/AIRunnerRegistry.d.ts +8 -0
  8. package/dist/ai-runner/AIRunnerRegistry.d.ts.map +1 -1
  9. package/dist/ai-runner/PlanFileResolver.d.ts +53 -0
  10. package/dist/ai-runner/PlanFileResolver.d.ts.map +1 -0
  11. package/dist/ai-runner/PtyRunner.d.ts +45 -4
  12. package/dist/ai-runner/PtyRunner.d.ts.map +1 -1
  13. package/dist/ai-runner/SdkRunner.d.ts +22 -0
  14. package/dist/ai-runner/SdkRunner.d.ts.map +1 -0
  15. package/dist/ai-runner/index.d.ts +5 -2
  16. package/dist/ai-runner/index.d.ts.map +1 -1
  17. package/dist/ai-runner/sdk/ClaudeCodeSDK.d.ts +37 -0
  18. package/dist/ai-runner/sdk/ClaudeCodeSDK.d.ts.map +1 -0
  19. package/dist/ai-runner/sdk/Stream.d.ts +22 -0
  20. package/dist/ai-runner/sdk/Stream.d.ts.map +1 -0
  21. package/dist/ai-runner/sdk/types.d.ts +146 -0
  22. package/dist/ai-runner/sdk/types.d.ts.map +1 -0
  23. package/dist/{ai-runner-HLA44WI6.js → ai-runner-TOHVJJ76.js} +14 -5
  24. package/dist/{analyze-ZIXNC5GN.js → analyze-DBH4K3J7.js} +8 -6
  25. package/dist/{analyze-ZIXNC5GN.js.map → analyze-DBH4K3J7.js.map} +1 -1
  26. package/dist/{braindump-56WAY2RD.js → braindump-RYI4BGMG.js} +11 -9
  27. package/dist/{braindump-56WAY2RD.js.map → braindump-RYI4BGMG.js.map} +1 -1
  28. package/dist/{chunk-AVGZH64A.js → chunk-2RWGZPNF.js} +4 -1
  29. package/dist/chunk-2RWGZPNF.js.map +1 -0
  30. package/dist/chunk-4XMYOXGZ.js +1153 -0
  31. package/dist/chunk-4XMYOXGZ.js.map +1 -0
  32. package/dist/{chunk-UBQLXQ7I.js → chunk-5JBADEKR.js} +7 -7
  33. package/dist/{chunk-M5C2WILQ.js → chunk-5M5SB6ZA.js} +7 -5
  34. package/dist/{chunk-M5C2WILQ.js.map → chunk-5M5SB6ZA.js.map} +1 -1
  35. package/dist/{chunk-HDFNMVRQ.js → chunk-DVNAH2GV.js} +2 -2
  36. package/dist/{chunk-GXFG4JU6.js → chunk-EU4XFZ2T.js} +2 -2
  37. package/dist/{chunk-NZHKAPU6.js → chunk-FJTZKAJA.js} +9 -3
  38. package/dist/chunk-FJTZKAJA.js.map +1 -0
  39. package/dist/chunk-G7QI5WDI.js +14 -0
  40. package/dist/chunk-G7QI5WDI.js.map +1 -0
  41. package/dist/{chunk-2YQHKXLL.js → chunk-GPZX4DSY.js} +22 -6
  42. package/dist/chunk-GPZX4DSY.js.map +1 -0
  43. package/dist/{chunk-IP3QTP5A.js → chunk-IWSMQXBL.js} +189 -48
  44. package/dist/chunk-IWSMQXBL.js.map +1 -0
  45. package/dist/{chunk-O3WEV5W3.js → chunk-JMACM7AJ.js} +47 -9
  46. package/dist/chunk-JMACM7AJ.js.map +1 -0
  47. package/dist/chunk-MSL7ROVK.js +1 -0
  48. package/dist/{chunk-YCYVNRLF.js → chunk-OBGEEGQ3.js} +61 -19
  49. package/dist/chunk-OBGEEGQ3.js.map +1 -0
  50. package/dist/chunk-R32Q3RGK.js +666 -0
  51. package/dist/chunk-R32Q3RGK.js.map +1 -0
  52. package/dist/{chunk-SAMTXC4A.js → chunk-TFEPHOVE.js} +12 -17
  53. package/dist/chunk-TFEPHOVE.js.map +1 -0
  54. package/dist/{chunk-QZZGIZWC.js → chunk-XSX3PGQW.js} +63 -20
  55. package/dist/chunk-XSX3PGQW.js.map +1 -0
  56. package/dist/{chunk-2MESXJEZ.js → chunk-YNRKPQLS.js} +3 -3
  57. package/dist/cli/setup/PreflightChecker.d.ts +1 -0
  58. package/dist/cli/setup/PreflightChecker.d.ts.map +1 -1
  59. package/dist/cli/setup/env-metadata.d.ts.map +1 -1
  60. package/dist/cli.js +10 -9
  61. package/dist/cli.js.map +1 -1
  62. package/dist/{config-WTRSZLOC.js → config-23TBYFP5.js} +5 -4
  63. package/dist/config-schema.d.ts +6 -0
  64. package/dist/config-schema.d.ts.map +1 -1
  65. package/dist/config.d.ts +6 -0
  66. package/dist/config.d.ts.map +1 -1
  67. package/dist/{doctor-37JNBGDN.js → doctor-ZG3DO7J5.js} +3 -3
  68. package/dist/errors/AIExecutionError.d.ts +3 -0
  69. package/dist/errors/AIExecutionError.d.ts.map +1 -1
  70. package/dist/{errors-S3BWYA4I.js → errors-J3ZRP66W.js} +2 -2
  71. package/dist/events/EventBus.d.ts +1 -1
  72. package/dist/events/EventBus.d.ts.map +1 -1
  73. package/dist/i18n/locales/en.d.ts.map +1 -1
  74. package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +16 -14
  77. package/dist/{init-QQDXGTPB.js → init-37DLQ5AJ.js} +9 -8
  78. package/dist/{init-QQDXGTPB.js.map → init-37DLQ5AJ.js.map} +1 -1
  79. package/dist/lib.js +10 -8
  80. package/dist/lib.js.map +1 -1
  81. package/dist/orchestrator/PendingDialogStore.d.ts +12 -0
  82. package/dist/orchestrator/PendingDialogStore.d.ts.map +1 -0
  83. package/dist/orchestrator/steps/FailureHandler.d.ts.map +1 -1
  84. package/dist/orchestrator/steps/PhaseLoopStep.d.ts.map +1 -1
  85. package/dist/persistence/PlanPersistence.d.ts +5 -0
  86. package/dist/persistence/PlanPersistence.d.ts.map +1 -1
  87. package/dist/persistence/TodolistExtractor.d.ts +31 -0
  88. package/dist/persistence/TodolistExtractor.d.ts.map +1 -0
  89. package/dist/phases/BasePhase.d.ts.map +1 -1
  90. package/dist/phases/PhaseOutcome.d.ts +2 -0
  91. package/dist/phases/PhaseOutcome.d.ts.map +1 -1
  92. package/dist/phases/PlanPhase.d.ts.map +1 -1
  93. package/dist/prompts/templates.d.ts +2 -2
  94. package/dist/prompts/templates.d.ts.map +1 -1
  95. package/dist/{restart-BMILTP5X.js → restart-C7QBXT44.js} +9 -8
  96. package/dist/{restart-BMILTP5X.js.map → restart-C7QBXT44.js.map} +1 -1
  97. package/dist/run.js +16 -14
  98. package/dist/run.js.map +1 -1
  99. package/dist/start-66JO56AW.js +16 -0
  100. package/dist/start-66JO56AW.js.map +1 -0
  101. package/dist/tracker/IssueTracker.d.ts +6 -0
  102. package/dist/tracker/IssueTracker.d.ts.map +1 -1
  103. package/dist/web/routes/api.d.ts.map +1 -1
  104. package/package.json +5 -1
  105. package/src/web/frontend/dist/assets/index-DJzC2saL.css +1 -0
  106. package/src/web/frontend/dist/assets/{index-D_oTMuJU.js → index-Mnu8M3ww.js} +57 -57
  107. package/src/web/frontend/dist/index.html +2 -2
  108. package/dist/PtyRunner-6UGI5STW.js +0 -22
  109. package/dist/chunk-2YQHKXLL.js.map +0 -1
  110. package/dist/chunk-AVGZH64A.js.map +0 -1
  111. package/dist/chunk-IP3QTP5A.js.map +0 -1
  112. package/dist/chunk-NZHKAPU6.js.map +0 -1
  113. package/dist/chunk-O3WEV5W3.js.map +0 -1
  114. package/dist/chunk-QZZGIZWC.js.map +0 -1
  115. package/dist/chunk-SAMTXC4A.js.map +0 -1
  116. package/dist/chunk-U237JSLB.js +0 -1
  117. package/dist/chunk-U6GWFTKA.js +0 -657
  118. package/dist/chunk-U6GWFTKA.js.map +0 -1
  119. package/dist/chunk-YCYVNRLF.js.map +0 -1
  120. package/dist/start-6QRW6IJI.js +0 -15
  121. package/src/web/frontend/dist/assets/index-COYziOhv.css +0 -1
  122. /package/dist/{AIRunnerRegistry-II3WWSFN.js.map → AIRunnerRegistry-CFDNWSXC.js.map} +0 -0
  123. /package/dist/{LockNote-Z2CLDZNN.js.map → LockNote-W2JNVMW7.js.map} +0 -0
  124. /package/dist/{PtyRunner-6UGI5STW.js.map → PtyRunner-NYASBTRP.js.map} +0 -0
  125. /package/dist/{ai-runner-HLA44WI6.js.map → SdkRunner-U2OTOMZU.js.map} +0 -0
  126. /package/dist/{chunk-U237JSLB.js.map → ai-runner-TOHVJJ76.js.map} +0 -0
  127. /package/dist/{chunk-UBQLXQ7I.js.map → chunk-5JBADEKR.js.map} +0 -0
  128. /package/dist/{chunk-HDFNMVRQ.js.map → chunk-DVNAH2GV.js.map} +0 -0
  129. /package/dist/{chunk-GXFG4JU6.js.map → chunk-EU4XFZ2T.js.map} +0 -0
  130. /package/dist/{config-WTRSZLOC.js.map → chunk-MSL7ROVK.js.map} +0 -0
  131. /package/dist/{chunk-2MESXJEZ.js.map → chunk-YNRKPQLS.js.map} +0 -0
  132. /package/dist/{errors-S3BWYA4I.js.map → config-23TBYFP5.js.map} +0 -0
  133. /package/dist/{doctor-37JNBGDN.js.map → doctor-ZG3DO7J5.js.map} +0 -0
  134. /package/dist/{start-6QRW6IJI.js.map → errors-J3ZRP66W.js.map} +0 -0
@@ -6,10 +6,10 @@ import {
6
6
  import {
7
7
  ConfigGenerator,
8
8
  PreflightChecker
9
- } from "./chunk-O3WEV5W3.js";
9
+ } from "./chunk-JMACM7AJ.js";
10
10
  import {
11
11
  resolveConfigFilePath
12
- } from "./chunk-NZHKAPU6.js";
12
+ } from "./chunk-FJTZKAJA.js";
13
13
  import {
14
14
  ensureDir,
15
15
  resolveLogsDir
@@ -110,4 +110,4 @@ async function startDaemon(configPath) {
110
110
  export {
111
111
  startCommand
112
112
  };
113
- //# sourceMappingURL=chunk-2MESXJEZ.js.map
113
+ //# sourceMappingURL=chunk-YNRKPQLS.js.map
@@ -24,6 +24,7 @@ export declare class PreflightChecker {
24
24
  checkBaseBranch(): Promise<PreflightResult>;
25
25
  checkWorktreeDir(): Promise<PreflightResult>;
26
26
  checkAIRunnerBinary(): Promise<PreflightResult>;
27
+ private checkPtyAgentBinaries;
27
28
  checkGongfengToken(): Promise<PreflightResult>;
28
29
  checkGongfengProject(): Promise<PreflightResult>;
29
30
  checkWebPort(): Promise<PreflightResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"PreflightChecker.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/PreflightChecker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMxD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAgDD,qBAAa,gBAAgB;IACf,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEjC,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAc1C,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO;IAQxC,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;IA4BxC,iBAAiB,IAAI,OAAO,CAAC,eAAe,CAAC;IAkB7C,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IA6B3C,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;IAiC5C,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IA0B/C,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;IAuC9C,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC;IAuChD,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;CAY/C"}
1
+ {"version":3,"file":"PreflightChecker.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/PreflightChecker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOxD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAgDD,qBAAa,gBAAgB;IACf,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEjC,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAc1C,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO;IAQxC,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;IA4BxC,iBAAiB,IAAI,OAAO,CAAC,eAAe,CAAC;IAkB7C,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IA6B3C,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;IAiC5C,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;YA4BvC,qBAAqB;IAiC7B,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;IAuC9C,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC;IAuChD,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;CAY/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"env-metadata.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/env-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,UAAU;IACzB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA6B5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA4KnD,CAAC"}
1
+ {"version":3,"file":"env-metadata.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/env-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,UAAU;IACzB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA6B5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA+KnD,CAAC"}
package/dist/cli.js CHANGED
@@ -12,13 +12,14 @@ import {
12
12
  } from "./chunk-B7XUZJOK.js";
13
13
  import {
14
14
  resolveConfigFilePath
15
- } from "./chunk-NZHKAPU6.js";
15
+ } from "./chunk-FJTZKAJA.js";
16
16
  import {
17
17
  resolveDisplayHost
18
18
  } from "./chunk-AKXDQH25.js";
19
19
  import "./chunk-TN2SYADO.js";
20
- import "./chunk-SAMTXC4A.js";
21
- import "./chunk-AVGZH64A.js";
20
+ import "./chunk-TFEPHOVE.js";
21
+ import "./chunk-G7QI5WDI.js";
22
+ import "./chunk-2RWGZPNF.js";
22
23
  import "./chunk-GF2RRYHB.js";
23
24
 
24
25
  // src/cli/index.ts
@@ -88,11 +89,11 @@ var defaults = getCliDefaults();
88
89
  var program = new Command();
89
90
  program.name("issue-auto-finish").description("Issue Auto-Finish: AI-powered issue resolution daemon").version(pkg.version, "-v, --version");
90
91
  program.command("init").description("Launch the interactive web setup wizard").option("-p, --port <port>", "Port for the setup wizard", "3456").option("-c, --config <path>", "Config file path to generate").action(async (opts) => {
91
- const { initCommand } = await import("./init-QQDXGTPB.js");
92
+ const { initCommand } = await import("./init-37DLQ5AJ.js");
92
93
  await initCommand({ port: parseInt(opts.port, 10), config: opts.config });
93
94
  });
94
95
  program.command("start").description("Start the issue-auto-finish daemon service").option("-c, --config <path>", "Path to .env config file").option("-d, --daemon", "Run as a background daemon").action(async (opts) => {
95
- const { startCommand } = await import("./start-6QRW6IJI.js");
96
+ const { startCommand } = await import("./start-66JO56AW.js");
96
97
  await startCommand({ config: opts.config, daemon: opts.daemon });
97
98
  });
98
99
  program.command("stop").description("Stop the running service").option("-p, --port <port>", "Web UI port", defaults.port).option("-H, --host <host>", "Service host", defaults.host).option("-f, --force", "Force kill via SIGKILL").action(async (opts) => {
@@ -104,7 +105,7 @@ program.command("stop").description("Stop the running service").option("-p, --po
104
105
  });
105
106
  });
106
107
  program.command("restart").description("Restart the service (stop + start)").option("-c, --config <path>", "Path to .env config file").option("-p, --port <port>", "Web UI port", defaults.port).option("-H, --host <host>", "Service host", defaults.host).option("-d, --daemon", "Restart as a background daemon").action(async (opts) => {
107
- const { restartCommand } = await import("./restart-BMILTP5X.js");
108
+ const { restartCommand } = await import("./restart-C7QBXT44.js");
108
109
  await restartCommand({
109
110
  config: opts.config,
110
111
  host: opts.host,
@@ -113,11 +114,11 @@ program.command("restart").description("Restart the service (stop + start)").opt
113
114
  });
114
115
  });
115
116
  program.command("doctor").description("Check environment dependencies").action(async () => {
116
- const { doctorCommand } = await import("./doctor-37JNBGDN.js");
117
+ const { doctorCommand } = await import("./doctor-ZG3DO7J5.js");
117
118
  await doctorCommand();
118
119
  });
119
120
  program.command("analyze").description("Analyze target repository and generate knowledge.json").option("-d, --dir <path>", "Project directory to analyze (defaults to PROJECT_WORK_DIR)").option("-o, --output <path>", "Output path for knowledge.json").option("-f, --force", "Overwrite existing knowledge.json").action(async (opts) => {
120
- const { analyzeCommand } = await import("./analyze-ZIXNC5GN.js");
121
+ const { analyzeCommand } = await import("./analyze-DBH4K3J7.js");
121
122
  await analyzeCommand({ dir: opts.dir, output: opts.output, force: opts.force });
122
123
  });
123
124
  program.command("status").description("Show service status").option("-p, --port <port>", "Web UI port to query", defaults.port).option("-H, --host <host>", "Service host to query", defaults.host).option("--json", "Output raw JSON").action(async (opts) => {
@@ -250,7 +251,7 @@ program.command("issues").description("List tracked issues").option("-p, --port
250
251
  });
251
252
  });
252
253
  program.command("braindump").description("Batch braindump: split ideas into tasks and execute in parallel").option("-f, --file <path>", "Read input from file").option("-t, --target <branch>", "Target branch for merging").option("-c, --concurrency <n>", "Max concurrent tasks").option("--runner <mode>", "Default AI runner mode (claude-internal, cursor-agent, codebuddy)").option("--auto", "Skip confirmation and execute immediately").option("-p, --port <port>", "Service port (proxy to running daemon)", defaults.port).option("-H, --host <host>", "Service host", defaults.host).action(async (opts) => {
253
- const { braindumpCommand } = await import("./braindump-56WAY2RD.js");
254
+ const { braindumpCommand } = await import("./braindump-RYI4BGMG.js");
254
255
  await braindumpCommand({
255
256
  file: opts.file,
256
257
  target: opts.target,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/index.ts","../src/cli/utils/defaults.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { execFile } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\nimport path from 'node:path';\nimport {\n bold, dim, green, yellow, red, cyan,\n formatUptime, buildServiceUrl, formatConnectionError,\n} from './utils/format.js';\nimport { getCliDefaults } from './utils/defaults.js';\nimport { resolveDisplayHost } from '../utils/network.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nfunction findPackageJson(): string {\n for (let dir = __dirname; dir !== path.dirname(dir); dir = path.dirname(dir)) {\n const candidate = path.join(dir, 'package.json');\n if (existsSync(candidate)) {\n try {\n const content = JSON.parse(readFileSync(candidate, 'utf-8'));\n if (content.name === '@xdevops/issue-auto-finish' || content.name === 'issue-auto-finish') return candidate;\n } catch { /* skip */ }\n }\n }\n return path.resolve(__dirname, '../package.json');\n}\n\nconst pkg = JSON.parse(readFileSync(findPackageJson(), 'utf-8'));\n\n/**\n * Detect global package manager and upgrade the CLI binary.\n * Supports Volta and plain npm.\n */\nasync function upgradeGlobalCli(targetVersion: string): Promise<void> {\n const pkgSpec = `${pkg.name}@${targetVersion}`;\n\n const runCmd = (cmd: string, args: string[]): Promise<string> =>\n new Promise((resolve, reject) => {\n execFile(cmd, args, { timeout: 120_000 }, (err, stdout, stderr) => {\n if (err) {\n reject(new Error(`${cmd} ${args.join(' ')} failed: ${stderr || err.message}`));\n return;\n }\n resolve(stdout);\n });\n });\n\n // Detect whether the CLI was installed via Volta\n const cliPath = process.argv[1] ?? '';\n const isVolta = cliPath.includes('.volta') || !!process.env.VOLTA_HOME;\n\n if (isVolta) {\n console.log(` Upgrading global CLI via Volta...`);\n await runCmd('volta', ['install', pkgSpec]);\n } else {\n console.log(` Upgrading global CLI via npm...`);\n await runCmd('npm', ['install', '-g', pkgSpec]);\n }\n}\n\n// Resolve default host/port from .env config (lazy, no Zod validation)\nconst defaults = getCliDefaults();\n\nconst program = new Command();\n\nprogram\n .name('issue-auto-finish')\n .description('Issue Auto-Finish: AI-powered issue resolution daemon')\n .version(pkg.version, '-v, --version');\n\n// ------ init ------\n\nprogram\n .command('init')\n .description('Launch the interactive web setup wizard')\n .option('-p, --port <port>', 'Port for the setup wizard', '3456')\n .option('-c, --config <path>', 'Config file path to generate')\n .action(async (opts) => {\n const { initCommand } = await import('./commands/init.js');\n await initCommand({ port: parseInt(opts.port, 10), config: opts.config });\n });\n\n// ------ start ------\n\nprogram\n .command('start')\n .description('Start the issue-auto-finish daemon service')\n .option('-c, --config <path>', 'Path to .env config file')\n .option('-d, --daemon', 'Run as a background daemon')\n .action(async (opts) => {\n const { startCommand } = await import('./commands/start.js');\n await startCommand({ config: opts.config, daemon: opts.daemon });\n });\n\n// ------ stop ------\n\nprogram\n .command('stop')\n .description('Stop the running service')\n .option('-p, --port <port>', 'Web UI port', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .option('-f, --force', 'Force kill via SIGKILL')\n .action(async (opts) => {\n const { stopCommand } = await import('./commands/stop.js');\n await stopCommand({\n host: opts.host,\n port: parseInt(opts.port, 10),\n force: !!opts.force,\n });\n });\n\n// ------ restart ------\n\nprogram\n .command('restart')\n .description('Restart the service (stop + start)')\n .option('-c, --config <path>', 'Path to .env config file')\n .option('-p, --port <port>', 'Web UI port', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .option('-d, --daemon', 'Restart as a background daemon')\n .action(async (opts) => {\n const { restartCommand } = await import('./commands/restart.js');\n await restartCommand({\n config: opts.config,\n host: opts.host,\n port: parseInt(opts.port, 10),\n daemon: opts.daemon,\n });\n });\n\n// ------ doctor ------\n\nprogram\n .command('doctor')\n .description('Check environment dependencies')\n .action(async () => {\n const { doctorCommand } = await import('./commands/doctor.js');\n await doctorCommand();\n });\n\n// ------ analyze ------\n\nprogram\n .command('analyze')\n .description('Analyze target repository and generate knowledge.json')\n .option('-d, --dir <path>', 'Project directory to analyze (defaults to PROJECT_WORK_DIR)')\n .option('-o, --output <path>', 'Output path for knowledge.json')\n .option('-f, --force', 'Overwrite existing knowledge.json')\n .action(async (opts) => {\n const { analyzeCommand } = await import('./commands/analyze.js');\n await analyzeCommand({ dir: opts.dir, output: opts.output, force: opts.force });\n });\n\n// ------ status ------\n\ninterface StatusData {\n uptime: number;\n pid: number;\n version: string;\n config: {\n aiMode: string;\n aiModel: string;\n pipelineMode: string;\n baseBranch: string;\n projectPath: string;\n maxConcurrent: number;\n webHost: string;\n webPort: number;\n };\n issues: {\n total: number;\n active: number;\n failed: number;\n };\n}\n\nprogram\n .command('status')\n .description('Show service status')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .option('--json', 'Output raw JSON')\n .action(async (opts) => {\n const host = opts.host as string;\n const port = parseInt(opts.port, 10);\n const url = buildServiceUrl(host, port);\n try {\n const resp = await fetch(`${url}/api/system/status`, {\n signal: AbortSignal.timeout(5000),\n });\n if (!resp.ok) {\n console.error(` Service returned HTTP ${resp.status}`);\n process.exitCode = 1;\n return;\n }\n const status = await resp.json() as StatusData;\n\n if (opts.json) {\n console.log(JSON.stringify(status, null, 2));\n return;\n }\n\n const cfg = status.config;\n const issues = status.issues;\n const webUrl = `http://${resolveDisplayHost(cfg.webHost)}:${cfg.webPort}`;\n\n console.log(`\\n ${bold('Issue Auto-Finish Status')}\\n`);\n console.log(` ${dim('Service:')} ${green('running')} (PID ${status.pid}) ${dim('Version:')} ${status.version}`);\n console.log(` ${dim('Uptime:')} ${formatUptime(status.uptime)} ${dim('Web UI:')} ${cyan(webUrl)}`);\n console.log('');\n console.log(` ${dim('AI Mode:')} ${cfg.aiMode} ${dim('Pipeline:')} ${cfg.pipelineMode}`);\n console.log(` ${dim('AI Model:')} ${cfg.aiModel} ${dim('Branch:')} ${cfg.baseBranch}`);\n console.log(` ${dim('Project:')} ${cfg.projectPath} ${dim('Concurrent:')} ${cfg.maxConcurrent}`);\n console.log('');\n const issuesSummary = [\n `${issues.total} total`,\n `${issues.active} active`,\n issues.failed > 0 ? red(`${issues.failed} failed`) : `${issues.failed} failed`,\n ].join(', ');\n console.log(` ${dim('Issues:')} ${issuesSummary}`);\n console.log('');\n } catch (err) {\n console.error(formatConnectionError(host, port, err));\n process.exitCode = 1;\n }\n });\n\n// ------ update ------\n\nprogram\n .command('update')\n .description('Check for updates or trigger an update')\n .option('--check', 'Only check for a new version without updating')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .action(async (opts) => {\n const host = opts.host as string;\n const port = parseInt(opts.port, 10);\n const url = buildServiceUrl(host, port);\n const checkOnly = !!opts.check;\n\n try {\n if (checkOnly) {\n const resp = await fetch(`${url}/api/system/update-check`, {\n method: 'POST',\n signal: AbortSignal.timeout(20_000),\n });\n if (!resp.ok) {\n const body = await resp.json() as { error?: string };\n console.error(` Check failed: ${body.error ?? resp.statusText}`);\n process.exitCode = 1;\n return;\n }\n const result = await resp.json() as { currentVersion: string; latestVersion: string; hasUpdate: boolean };\n console.log(`\\n Current version: ${result.currentVersion}`);\n console.log(` Latest version: ${result.latestVersion}`);\n console.log(` Update available: ${result.hasUpdate ? yellow('Yes') : green('No')}\\n`);\n } else {\n const checkResp = await fetch(`${url}/api/system/update-check`, {\n method: 'POST',\n signal: AbortSignal.timeout(20_000),\n });\n if (!checkResp.ok) {\n const body = await checkResp.json() as { error?: string };\n console.error(` Check failed: ${body.error ?? checkResp.statusText}`);\n process.exitCode = 1;\n return;\n }\n const result = await checkResp.json() as { currentVersion: string; latestVersion: string; hasUpdate: boolean };\n if (!result.hasUpdate) {\n console.log(`\\n ${green('Already up to date')} (v${result.currentVersion})\\n`);\n return;\n }\n\n console.log(`\\n Updating from v${result.currentVersion} to v${result.latestVersion}...`);\n const updateResp = await fetch(`${url}/api/system/update`, {\n method: 'POST',\n signal: AbortSignal.timeout(10_000),\n });\n if (!updateResp.ok) {\n const body = await updateResp.json() as { error?: string };\n console.error(` Update trigger failed: ${body.error ?? updateResp.statusText}`);\n process.exitCode = 1;\n return;\n }\n console.log(' Update triggered. The service will restart automatically via PM2.');\n\n // Also upgrade global CLI binary\n try {\n await upgradeGlobalCli(result.latestVersion);\n console.log(` ${green('Global CLI upgraded to v' + result.latestVersion)}\\n`);\n } catch (cliErr) {\n console.warn(` ${yellow('Global CLI upgrade failed (service update still proceeding):')}`);\n console.warn(` ${dim((cliErr as Error).message)}\\n`);\n }\n }\n } catch (err) {\n console.error(formatConnectionError(host, port, err));\n process.exitCode = 1;\n }\n });\n\n// ------ logs ------\n\nprogram\n .command('logs')\n .description('View service logs')\n .option('-f, --follow', 'Follow log output in real-time')\n .option('-n, --lines <count>', 'Number of lines to show', '50')\n .option('--error', 'Show only error logs')\n .action(async (opts) => {\n const { logsCommand } = await import('./commands/logs.js');\n await logsCommand({\n follow: !!opts.follow,\n lines: parseInt(opts.lines, 10),\n errorOnly: !!opts.error,\n });\n });\n\n// ------ issues ------\n\nprogram\n .command('issues')\n .description('List tracked issues')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .option('-s, --state <state>', 'Filter by state (active, failed, completed, all)', 'all')\n .option('--json', 'Output raw JSON')\n .action(async (opts) => {\n const { issuesCommand } = await import('./commands/issues.js');\n await issuesCommand({\n host: opts.host,\n port: parseInt(opts.port, 10),\n state: opts.state,\n json: !!opts.json,\n });\n });\n\n// ------ braindump ------\n\nprogram\n .command('braindump')\n .description('Batch braindump: split ideas into tasks and execute in parallel')\n .option('-f, --file <path>', 'Read input from file')\n .option('-t, --target <branch>', 'Target branch for merging')\n .option('-c, --concurrency <n>', 'Max concurrent tasks')\n .option('--runner <mode>', 'Default AI runner mode (claude-internal, cursor-agent, codebuddy)')\n .option('--auto', 'Skip confirmation and execute immediately')\n .option('-p, --port <port>', 'Service port (proxy to running daemon)', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .action(async (opts) => {\n const { braindumpCommand } = await import('./commands/braindump.js');\n await braindumpCommand({\n file: opts.file,\n target: opts.target,\n concurrency: opts.concurrency ? parseInt(opts.concurrency, 10) : undefined,\n runner: opts.runner,\n auto: !!opts.auto,\n port: opts.port,\n host: opts.host,\n });\n });\n\n// ------ distill ------\n\nprogram\n .command('distill [action]')\n .description('Knowledge distillation management (run, status, search)')\n .argument('[query]', 'Search query (for distill search)')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .option('--json', 'Output raw JSON')\n .action(async (action, query, opts) => {\n const { distillCommand } = await import('./commands/distill.js');\n await distillCommand({\n action: action || 'status',\n query,\n host: opts.host,\n port: parseInt(opts.port, 10),\n json: !!opts.json,\n });\n });\n\n// ------ knowledge ------\n\nprogram\n .command('knowledge [action]')\n .description('Knowledge sync management (publish, restore, status)')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .option('--json', 'Output raw JSON')\n .action(async (action, opts) => {\n const { knowledgeSyncCommand } = await import('./commands/knowledge-sync.js');\n await knowledgeSyncCommand({\n action: action || 'status',\n host: opts.host,\n port: parseInt(opts.port, 10),\n json: !!opts.json,\n });\n });\n\n// ------ migrate ------\n\nprogram\n .command('migrate')\n .description('Migrate data from PM2 source-mode to npm package mode')\n .requiredOption('-s, --source <path>', 'Source project directory (PM2 mode)')\n .option('-f, --force', 'Overwrite existing files without asking')\n .option('--dry-run', 'Show what would be migrated without copying')\n .action(async (opts) => {\n const { migrateCommand } = await import('./commands/migrate.js');\n await migrateCommand({ source: opts.source, force: !!opts.force, dryRun: !!opts.dryRun });\n });\n\n// ------ lock-migrate ------\n\nprogram\n .command('lock-migrate')\n .description('Migrate existing active issues to use lock notes (one-time upgrade)')\n .option('-p, --port <port>', 'Web UI port', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .action(async (opts) => {\n const { lockMigrateCommand } = await import('./commands/lock-migrate.js');\n await lockMigrateCommand({\n host: opts.host,\n port: parseInt(opts.port, 10),\n });\n });\n\n// ------ release-locks ------\n\nprogram\n .command('release-locks')\n .description('Release all lock notes held by the current node')\n .option('-p, --port <port>', 'Web UI port', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .action(async (opts) => {\n const { releaseLocksCommand } = await import('./commands/release-locks.js');\n await releaseLocksCommand({\n host: opts.host,\n port: parseInt(opts.port, 10),\n });\n });\n\nprogram.parse();\n","/**\n * CLI defaults — resolve --host / --port defaults from .env config.\n *\n * Reads the .env file (same lookup chain as the service) to extract\n * WEB_HOST and WEB_PORT, so CLI commands automatically connect to\n * the right address without manual --host / --port flags.\n *\n * This is a lightweight, lazy-init module — it only parses .env when\n * the defaults are first accessed, and does NOT import the full config\n * stack (no Zod validation, no side effects).\n */\nimport { config as loadDotenv } from 'dotenv';\nimport { resolveConfigFilePath } from '../../config.js';\n\ninterface CliDefaults {\n host: string;\n port: string;\n}\n\nlet _cached: CliDefaults | null = null;\n\n/**\n * Return default host / port for CLI commands.\n *\n * Priority:\n * 1. .env `WEB_HOST` / `WEB_PORT` (via resolveConfigFilePath)\n * 2. Hardcoded fallbacks: `127.0.0.1` / `3000`\n */\nexport function getCliDefaults(): CliDefaults {\n if (_cached) return _cached;\n\n try {\n const envFile = resolveConfigFilePath();\n const result = loadDotenv({ path: envFile, override: false });\n const parsed = result.parsed ?? {};\n\n _cached = {\n host: parsed.WEB_HOST || '127.0.0.1',\n port: parsed.WEB_PORT || '3000',\n };\n } catch {\n _cached = { host: '127.0.0.1', port: '3000' };\n }\n\n return _cached;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/cli/utils/defaults.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { execFile } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\nimport path from 'node:path';\nimport {\n bold, dim, green, yellow, red, cyan,\n formatUptime, buildServiceUrl, formatConnectionError,\n} from './utils/format.js';\nimport { getCliDefaults } from './utils/defaults.js';\nimport { resolveDisplayHost } from '../utils/network.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nfunction findPackageJson(): string {\n for (let dir = __dirname; dir !== path.dirname(dir); dir = path.dirname(dir)) {\n const candidate = path.join(dir, 'package.json');\n if (existsSync(candidate)) {\n try {\n const content = JSON.parse(readFileSync(candidate, 'utf-8'));\n if (content.name === '@xdevops/issue-auto-finish' || content.name === 'issue-auto-finish') return candidate;\n } catch { /* skip */ }\n }\n }\n return path.resolve(__dirname, '../package.json');\n}\n\nconst pkg = JSON.parse(readFileSync(findPackageJson(), 'utf-8'));\n\n/**\n * Detect global package manager and upgrade the CLI binary.\n * Supports Volta and plain npm.\n */\nasync function upgradeGlobalCli(targetVersion: string): Promise<void> {\n const pkgSpec = `${pkg.name}@${targetVersion}`;\n\n const runCmd = (cmd: string, args: string[]): Promise<string> =>\n new Promise((resolve, reject) => {\n execFile(cmd, args, { timeout: 120_000 }, (err, stdout, stderr) => {\n if (err) {\n reject(new Error(`${cmd} ${args.join(' ')} failed: ${stderr || err.message}`));\n return;\n }\n resolve(stdout);\n });\n });\n\n // Detect whether the CLI was installed via Volta\n const cliPath = process.argv[1] ?? '';\n const isVolta = cliPath.includes('.volta') || !!process.env.VOLTA_HOME;\n\n if (isVolta) {\n console.log(` Upgrading global CLI via Volta...`);\n await runCmd('volta', ['install', pkgSpec]);\n } else {\n console.log(` Upgrading global CLI via npm...`);\n await runCmd('npm', ['install', '-g', pkgSpec]);\n }\n}\n\n// Resolve default host/port from .env config (lazy, no Zod validation)\nconst defaults = getCliDefaults();\n\nconst program = new Command();\n\nprogram\n .name('issue-auto-finish')\n .description('Issue Auto-Finish: AI-powered issue resolution daemon')\n .version(pkg.version, '-v, --version');\n\n// ------ init ------\n\nprogram\n .command('init')\n .description('Launch the interactive web setup wizard')\n .option('-p, --port <port>', 'Port for the setup wizard', '3456')\n .option('-c, --config <path>', 'Config file path to generate')\n .action(async (opts) => {\n const { initCommand } = await import('./commands/init.js');\n await initCommand({ port: parseInt(opts.port, 10), config: opts.config });\n });\n\n// ------ start ------\n\nprogram\n .command('start')\n .description('Start the issue-auto-finish daemon service')\n .option('-c, --config <path>', 'Path to .env config file')\n .option('-d, --daemon', 'Run as a background daemon')\n .action(async (opts) => {\n const { startCommand } = await import('./commands/start.js');\n await startCommand({ config: opts.config, daemon: opts.daemon });\n });\n\n// ------ stop ------\n\nprogram\n .command('stop')\n .description('Stop the running service')\n .option('-p, --port <port>', 'Web UI port', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .option('-f, --force', 'Force kill via SIGKILL')\n .action(async (opts) => {\n const { stopCommand } = await import('./commands/stop.js');\n await stopCommand({\n host: opts.host,\n port: parseInt(opts.port, 10),\n force: !!opts.force,\n });\n });\n\n// ------ restart ------\n\nprogram\n .command('restart')\n .description('Restart the service (stop + start)')\n .option('-c, --config <path>', 'Path to .env config file')\n .option('-p, --port <port>', 'Web UI port', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .option('-d, --daemon', 'Restart as a background daemon')\n .action(async (opts) => {\n const { restartCommand } = await import('./commands/restart.js');\n await restartCommand({\n config: opts.config,\n host: opts.host,\n port: parseInt(opts.port, 10),\n daemon: opts.daemon,\n });\n });\n\n// ------ doctor ------\n\nprogram\n .command('doctor')\n .description('Check environment dependencies')\n .action(async () => {\n const { doctorCommand } = await import('./commands/doctor.js');\n await doctorCommand();\n });\n\n// ------ analyze ------\n\nprogram\n .command('analyze')\n .description('Analyze target repository and generate knowledge.json')\n .option('-d, --dir <path>', 'Project directory to analyze (defaults to PROJECT_WORK_DIR)')\n .option('-o, --output <path>', 'Output path for knowledge.json')\n .option('-f, --force', 'Overwrite existing knowledge.json')\n .action(async (opts) => {\n const { analyzeCommand } = await import('./commands/analyze.js');\n await analyzeCommand({ dir: opts.dir, output: opts.output, force: opts.force });\n });\n\n// ------ status ------\n\ninterface StatusData {\n uptime: number;\n pid: number;\n version: string;\n config: {\n aiMode: string;\n aiModel: string;\n pipelineMode: string;\n baseBranch: string;\n projectPath: string;\n maxConcurrent: number;\n webHost: string;\n webPort: number;\n };\n issues: {\n total: number;\n active: number;\n failed: number;\n };\n}\n\nprogram\n .command('status')\n .description('Show service status')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .option('--json', 'Output raw JSON')\n .action(async (opts) => {\n const host = opts.host as string;\n const port = parseInt(opts.port, 10);\n const url = buildServiceUrl(host, port);\n try {\n const resp = await fetch(`${url}/api/system/status`, {\n signal: AbortSignal.timeout(5000),\n });\n if (!resp.ok) {\n console.error(` Service returned HTTP ${resp.status}`);\n process.exitCode = 1;\n return;\n }\n const status = await resp.json() as StatusData;\n\n if (opts.json) {\n console.log(JSON.stringify(status, null, 2));\n return;\n }\n\n const cfg = status.config;\n const issues = status.issues;\n const webUrl = `http://${resolveDisplayHost(cfg.webHost)}:${cfg.webPort}`;\n\n console.log(`\\n ${bold('Issue Auto-Finish Status')}\\n`);\n console.log(` ${dim('Service:')} ${green('running')} (PID ${status.pid}) ${dim('Version:')} ${status.version}`);\n console.log(` ${dim('Uptime:')} ${formatUptime(status.uptime)} ${dim('Web UI:')} ${cyan(webUrl)}`);\n console.log('');\n console.log(` ${dim('AI Mode:')} ${cfg.aiMode} ${dim('Pipeline:')} ${cfg.pipelineMode}`);\n console.log(` ${dim('AI Model:')} ${cfg.aiModel} ${dim('Branch:')} ${cfg.baseBranch}`);\n console.log(` ${dim('Project:')} ${cfg.projectPath} ${dim('Concurrent:')} ${cfg.maxConcurrent}`);\n console.log('');\n const issuesSummary = [\n `${issues.total} total`,\n `${issues.active} active`,\n issues.failed > 0 ? red(`${issues.failed} failed`) : `${issues.failed} failed`,\n ].join(', ');\n console.log(` ${dim('Issues:')} ${issuesSummary}`);\n console.log('');\n } catch (err) {\n console.error(formatConnectionError(host, port, err));\n process.exitCode = 1;\n }\n });\n\n// ------ update ------\n\nprogram\n .command('update')\n .description('Check for updates or trigger an update')\n .option('--check', 'Only check for a new version without updating')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .action(async (opts) => {\n const host = opts.host as string;\n const port = parseInt(opts.port, 10);\n const url = buildServiceUrl(host, port);\n const checkOnly = !!opts.check;\n\n try {\n if (checkOnly) {\n const resp = await fetch(`${url}/api/system/update-check`, {\n method: 'POST',\n signal: AbortSignal.timeout(20_000),\n });\n if (!resp.ok) {\n const body = await resp.json() as { error?: string };\n console.error(` Check failed: ${body.error ?? resp.statusText}`);\n process.exitCode = 1;\n return;\n }\n const result = await resp.json() as { currentVersion: string; latestVersion: string; hasUpdate: boolean };\n console.log(`\\n Current version: ${result.currentVersion}`);\n console.log(` Latest version: ${result.latestVersion}`);\n console.log(` Update available: ${result.hasUpdate ? yellow('Yes') : green('No')}\\n`);\n } else {\n const checkResp = await fetch(`${url}/api/system/update-check`, {\n method: 'POST',\n signal: AbortSignal.timeout(20_000),\n });\n if (!checkResp.ok) {\n const body = await checkResp.json() as { error?: string };\n console.error(` Check failed: ${body.error ?? checkResp.statusText}`);\n process.exitCode = 1;\n return;\n }\n const result = await checkResp.json() as { currentVersion: string; latestVersion: string; hasUpdate: boolean };\n if (!result.hasUpdate) {\n console.log(`\\n ${green('Already up to date')} (v${result.currentVersion})\\n`);\n return;\n }\n\n console.log(`\\n Updating from v${result.currentVersion} to v${result.latestVersion}...`);\n const updateResp = await fetch(`${url}/api/system/update`, {\n method: 'POST',\n signal: AbortSignal.timeout(10_000),\n });\n if (!updateResp.ok) {\n const body = await updateResp.json() as { error?: string };\n console.error(` Update trigger failed: ${body.error ?? updateResp.statusText}`);\n process.exitCode = 1;\n return;\n }\n console.log(' Update triggered. The service will restart automatically via PM2.');\n\n // Also upgrade global CLI binary\n try {\n await upgradeGlobalCli(result.latestVersion);\n console.log(` ${green('Global CLI upgraded to v' + result.latestVersion)}\\n`);\n } catch (cliErr) {\n console.warn(` ${yellow('Global CLI upgrade failed (service update still proceeding):')}`);\n console.warn(` ${dim((cliErr as Error).message)}\\n`);\n }\n }\n } catch (err) {\n console.error(formatConnectionError(host, port, err));\n process.exitCode = 1;\n }\n });\n\n// ------ logs ------\n\nprogram\n .command('logs')\n .description('View service logs')\n .option('-f, --follow', 'Follow log output in real-time')\n .option('-n, --lines <count>', 'Number of lines to show', '50')\n .option('--error', 'Show only error logs')\n .action(async (opts) => {\n const { logsCommand } = await import('./commands/logs.js');\n await logsCommand({\n follow: !!opts.follow,\n lines: parseInt(opts.lines, 10),\n errorOnly: !!opts.error,\n });\n });\n\n// ------ issues ------\n\nprogram\n .command('issues')\n .description('List tracked issues')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .option('-s, --state <state>', 'Filter by state (active, failed, completed, all)', 'all')\n .option('--json', 'Output raw JSON')\n .action(async (opts) => {\n const { issuesCommand } = await import('./commands/issues.js');\n await issuesCommand({\n host: opts.host,\n port: parseInt(opts.port, 10),\n state: opts.state,\n json: !!opts.json,\n });\n });\n\n// ------ braindump ------\n\nprogram\n .command('braindump')\n .description('Batch braindump: split ideas into tasks and execute in parallel')\n .option('-f, --file <path>', 'Read input from file')\n .option('-t, --target <branch>', 'Target branch for merging')\n .option('-c, --concurrency <n>', 'Max concurrent tasks')\n .option('--runner <mode>', 'Default AI runner mode (claude-internal, cursor-agent, codebuddy)')\n .option('--auto', 'Skip confirmation and execute immediately')\n .option('-p, --port <port>', 'Service port (proxy to running daemon)', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .action(async (opts) => {\n const { braindumpCommand } = await import('./commands/braindump.js');\n await braindumpCommand({\n file: opts.file,\n target: opts.target,\n concurrency: opts.concurrency ? parseInt(opts.concurrency, 10) : undefined,\n runner: opts.runner,\n auto: !!opts.auto,\n port: opts.port,\n host: opts.host,\n });\n });\n\n// ------ distill ------\n\nprogram\n .command('distill [action]')\n .description('Knowledge distillation management (run, status, search)')\n .argument('[query]', 'Search query (for distill search)')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .option('--json', 'Output raw JSON')\n .action(async (action, query, opts) => {\n const { distillCommand } = await import('./commands/distill.js');\n await distillCommand({\n action: action || 'status',\n query,\n host: opts.host,\n port: parseInt(opts.port, 10),\n json: !!opts.json,\n });\n });\n\n// ------ knowledge ------\n\nprogram\n .command('knowledge [action]')\n .description('Knowledge sync management (publish, restore, status)')\n .option('-p, --port <port>', 'Web UI port to query', defaults.port)\n .option('-H, --host <host>', 'Service host to query', defaults.host)\n .option('--json', 'Output raw JSON')\n .action(async (action, opts) => {\n const { knowledgeSyncCommand } = await import('./commands/knowledge-sync.js');\n await knowledgeSyncCommand({\n action: action || 'status',\n host: opts.host,\n port: parseInt(opts.port, 10),\n json: !!opts.json,\n });\n });\n\n// ------ migrate ------\n\nprogram\n .command('migrate')\n .description('Migrate data from PM2 source-mode to npm package mode')\n .requiredOption('-s, --source <path>', 'Source project directory (PM2 mode)')\n .option('-f, --force', 'Overwrite existing files without asking')\n .option('--dry-run', 'Show what would be migrated without copying')\n .action(async (opts) => {\n const { migrateCommand } = await import('./commands/migrate.js');\n await migrateCommand({ source: opts.source, force: !!opts.force, dryRun: !!opts.dryRun });\n });\n\n// ------ lock-migrate ------\n\nprogram\n .command('lock-migrate')\n .description('Migrate existing active issues to use lock notes (one-time upgrade)')\n .option('-p, --port <port>', 'Web UI port', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .action(async (opts) => {\n const { lockMigrateCommand } = await import('./commands/lock-migrate.js');\n await lockMigrateCommand({\n host: opts.host,\n port: parseInt(opts.port, 10),\n });\n });\n\n// ------ release-locks ------\n\nprogram\n .command('release-locks')\n .description('Release all lock notes held by the current node')\n .option('-p, --port <port>', 'Web UI port', defaults.port)\n .option('-H, --host <host>', 'Service host', defaults.host)\n .action(async (opts) => {\n const { releaseLocksCommand } = await import('./commands/release-locks.js');\n await releaseLocksCommand({\n host: opts.host,\n port: parseInt(opts.port, 10),\n });\n });\n\nprogram.parse();\n","/**\n * CLI defaults — resolve --host / --port defaults from .env config.\n *\n * Reads the .env file (same lookup chain as the service) to extract\n * WEB_HOST and WEB_PORT, so CLI commands automatically connect to\n * the right address without manual --host / --port flags.\n *\n * This is a lightweight, lazy-init module — it only parses .env when\n * the defaults are first accessed, and does NOT import the full config\n * stack (no Zod validation, no side effects).\n */\nimport { config as loadDotenv } from 'dotenv';\nimport { resolveConfigFilePath } from '../../config.js';\n\ninterface CliDefaults {\n host: string;\n port: string;\n}\n\nlet _cached: CliDefaults | null = null;\n\n/**\n * Return default host / port for CLI commands.\n *\n * Priority:\n * 1. .env `WEB_HOST` / `WEB_PORT` (via resolveConfigFilePath)\n * 2. Hardcoded fallbacks: `127.0.0.1` / `3000`\n */\nexport function getCliDefaults(): CliDefaults {\n if (_cached) return _cached;\n\n try {\n const envFile = resolveConfigFilePath();\n const result = loadDotenv({ path: envFile, override: false });\n const parsed = result.parsed ?? {};\n\n _cached = {\n host: parsed.WEB_HOST || '127.0.0.1',\n port: parsed.WEB_PORT || '3000',\n };\n } catch {\n _cached = { host: '127.0.0.1', port: '3000' };\n }\n\n return _cached;\n}\n"],"mappings":"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","names":[]}
@@ -4,11 +4,12 @@ import {
4
4
  reloadConfig,
5
5
  resetDotenvCache,
6
6
  resolveConfigFilePath
7
- } from "./chunk-NZHKAPU6.js";
7
+ } from "./chunk-FJTZKAJA.js";
8
8
  import "./chunk-AKXDQH25.js";
9
9
  import "./chunk-TN2SYADO.js";
10
- import "./chunk-SAMTXC4A.js";
11
- import "./chunk-AVGZH64A.js";
10
+ import "./chunk-TFEPHOVE.js";
11
+ import "./chunk-G7QI5WDI.js";
12
+ import "./chunk-2RWGZPNF.js";
12
13
  import "./chunk-GF2RRYHB.js";
13
14
  export {
14
15
  ConfigValidationError,
@@ -17,4 +18,4 @@ export {
17
18
  resetDotenvCache,
18
19
  resolveConfigFilePath
19
20
  };
20
- //# sourceMappingURL=config-WTRSZLOC.js.map
21
+ //# sourceMappingURL=config-23TBYFP5.js.map
@@ -28,6 +28,9 @@ export declare const envSchema: z.ZodObject<{
28
28
  CODEBUDDY_ACP_AUTO_APPROVE: z.ZodPipe<z.ZodDefault<z.ZodOptional<z.ZodString>>, z.ZodTransform<boolean, string>>;
29
29
  CLAUDE_PHASE_TIMEOUT_MS: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
30
30
  AI_IDLE_TIMEOUT_MS: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
31
+ PHASE_TIMEOUT_GRACE_MS: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
32
+ PHASE_TIMEOUT_EXTENSION_MS: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
33
+ PHASE_TIMEOUT_MAX_EXTENSIONS: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
31
34
  NVM_NODE_VERSION: z.ZodDefault<z.ZodOptional<z.ZodString>>;
32
35
  PIPELINE_MODE: z.ZodDefault<z.ZodOptional<z.ZodString>>;
33
36
  POLL_DISCOVERY_INTERVAL_MS: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
@@ -163,6 +166,9 @@ export declare function transformEnvToConfig(env: ParsedEnv, dirname: string): {
163
166
  readonly binary: string;
164
167
  readonly phaseTimeoutMs: number;
165
168
  readonly idleTimeoutMs: number | undefined;
169
+ readonly timeoutGraceMs: number;
170
+ readonly timeoutExtensionMs: number;
171
+ readonly timeoutMaxExtensions: number;
166
172
  readonly nvmNodeVersion: string;
167
173
  readonly model: string;
168
174
  readonly codebuddyAcpAutoApprove: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -37,6 +37,9 @@ export declare function loadConfig(): {
37
37
  readonly binary: string;
38
38
  readonly phaseTimeoutMs: number;
39
39
  readonly idleTimeoutMs: number | undefined;
40
+ readonly timeoutGraceMs: number;
41
+ readonly timeoutExtensionMs: number;
42
+ readonly timeoutMaxExtensions: number;
40
43
  readonly nvmNodeVersion: string;
41
44
  readonly model: string;
42
45
  readonly codebuddyAcpAutoApprove: boolean;
@@ -208,6 +211,9 @@ export declare function reloadConfig(): {
208
211
  readonly binary: string;
209
212
  readonly phaseTimeoutMs: number;
210
213
  readonly idleTimeoutMs: number | undefined;
214
+ readonly timeoutGraceMs: number;
215
+ readonly timeoutExtensionMs: number;
216
+ readonly timeoutMaxExtensions: number;
211
217
  readonly nvmNodeVersion: string;
212
218
  readonly model: string;
213
219
  readonly codebuddyAcpAutoApprove: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,YAAY,EACV,MAAM,EACN,YAAY,EACZ,qBAAqB,EACrB,eAAe,EAEf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,aAAa,EACb,UAAU,EACV,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAI3D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBjE;AASD,wBAAgB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ3B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,YAAY,EACV,MAAM,EACN,YAAY,EACZ,qBAAqB,EACrB,eAAe,EAEf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,aAAa,EACb,UAAU,EACV,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAI3D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBjE;AASD,wBAAgB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ3B"}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DependencyChecker
3
- } from "./chunk-HDFNMVRQ.js";
4
- import "./chunk-YCYVNRLF.js";
3
+ } from "./chunk-DVNAH2GV.js";
4
+ import "./chunk-OBGEEGQ3.js";
5
5
  import {
6
6
  resolveDataDir
7
7
  } from "./chunk-TN2SYADO.js";
@@ -98,4 +98,4 @@ async function doctorCommand() {
98
98
  export {
99
99
  doctorCommand
100
100
  };
101
- //# sourceMappingURL=doctor-37JNBGDN.js.map
101
+ //# sourceMappingURL=doctor-ZG3DO7J5.js.map
@@ -4,11 +4,14 @@ export declare class AIExecutionError extends AppError {
4
4
  readonly output?: string;
5
5
  readonly exitCode?: number | null;
6
6
  readonly isRetryable: boolean;
7
+ /** Agent was still actively producing output when timeout fired — soft failure */
8
+ readonly wasActiveAtTimeout: boolean;
7
9
  constructor(phase: string, message: string, opts?: {
8
10
  output?: string;
9
11
  exitCode?: number | null;
10
12
  cause?: Error;
11
13
  isRetryable?: boolean;
14
+ wasActiveAtTimeout?: boolean;
12
15
  });
13
16
  }
14
17
  //# sourceMappingURL=AIExecutionError.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AIExecutionError.d.ts","sourceRoot":"","sources":["../../src/errors/AIExecutionError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,SAAgB,WAAW,EAAE,OAAO,CAAC;gBAEzB,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;CAOvI"}
1
+ {"version":3,"file":"AIExecutionError.d.ts","sourceRoot":"","sources":["../../src/errors/AIExecutionError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,SAAgB,WAAW,EAAE,OAAO,CAAC;IACrC,kFAAkF;IAClF,SAAgB,kBAAkB,EAAE,OAAO,CAAC;gBAEhC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE;CAQrK"}
@@ -18,7 +18,7 @@ import {
18
18
  SessionNotFoundError,
19
19
  TaskNotFoundError,
20
20
  UnregisteredPhasesError
21
- } from "./chunk-AVGZH64A.js";
21
+ } from "./chunk-2RWGZPNF.js";
22
22
  export {
23
23
  AIExecutionError,
24
24
  AIOutputParseError,
@@ -40,4 +40,4 @@ export {
40
40
  TaskNotFoundError,
41
41
  UnregisteredPhasesError
42
42
  };
43
- //# sourceMappingURL=errors-S3BWYA4I.js.map
43
+ //# sourceMappingURL=errors-J3ZRP66W.js.map
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from 'node:events';
2
- export type EventType = 'issue:created' | 'issue:stateChanged' | 'issue:failed' | 'issue:deleted' | 'issue:resetForRetry' | 'issue:restarted' | 'issue:retryFromPhase' | 'poll:tick' | 'heartbeat' | 'agent:output' | 'pipeline:progress' | 'review:requested' | 'review:approved' | 'review:rejected' | 'conflict:started' | 'conflict:resolved' | 'conflict:failed' | 'update:checking' | 'update:available' | 'update:downloading' | 'update:completed' | 'update:failed' | 'braindump:created' | 'braindump:split:done' | 'braindump:confirmed' | 'braindump:task:started' | 'braindump:task:completed' | 'braindump:task:merging' | 'braindump:task:merged' | 'braindump:task:failed' | 'braindump:completed' | 'braindump:failed' | 'distill:diary:created' | 'distill:started' | 'distill:memory:updated' | 'distill:rule:generated' | 'distill:completed' | 'distill:failed' | 'verify:loopStarted' | 'verify:iterationComplete' | 'verify:loopExhausted' | 'release:gateRequested' | 'uat:gateRequested' | 'uat:completed' | 'uat:failed' | 'issue:paused' | 'issue:continued' | 'issue:redone' | 'preview:reaped';
2
+ export type EventType = 'issue:created' | 'issue:stateChanged' | 'issue:failed' | 'issue:deleted' | 'issue:resetForRetry' | 'issue:restarted' | 'issue:retryFromPhase' | 'poll:tick' | 'heartbeat' | 'agent:output' | 'pipeline:progress' | 'review:requested' | 'review:approved' | 'review:rejected' | 'conflict:started' | 'conflict:resolved' | 'conflict:failed' | 'update:checking' | 'update:available' | 'update:downloading' | 'update:completed' | 'update:failed' | 'braindump:created' | 'braindump:split:done' | 'braindump:confirmed' | 'braindump:task:started' | 'braindump:task:completed' | 'braindump:task:merging' | 'braindump:task:merged' | 'braindump:task:failed' | 'braindump:completed' | 'braindump:failed' | 'distill:diary:created' | 'distill:started' | 'distill:memory:updated' | 'distill:rule:generated' | 'distill:completed' | 'distill:failed' | 'verify:loopStarted' | 'verify:iterationComplete' | 'verify:loopExhausted' | 'release:gateRequested' | 'uat:gateRequested' | 'uat:completed' | 'uat:failed' | 'issue:paused' | 'issue:continued' | 'issue:redone' | 'preview:reaped' | 'agent:inputRequired' | 'agent:inputResponse' | 'agent:dialogDismissed';
3
3
  export interface EventPayload {
4
4
  type: EventType;
5
5
  data: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"EventBus.d.ts","sourceRoot":"","sources":["../../src/events/EventBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,GACtB,WAAW,GACX,WAAW,GACX,cAAc,GACd,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,kBAAkB,GAClB,eAAe,GAEf,mBAAmB,GACnB,sBAAsB,GACtB,qBAAqB,GACrB,wBAAwB,GACxB,0BAA0B,GAC1B,wBAAwB,GACxB,uBAAuB,GACvB,uBAAuB,GACvB,qBAAqB,GACrB,kBAAkB,GAElB,uBAAuB,GACvB,iBAAiB,GACjB,wBAAwB,GACxB,wBAAwB,GACxB,mBAAmB,GACnB,gBAAgB,GAEhB,oBAAoB,GACpB,0BAA0B,GAC1B,sBAAsB,GAEtB,uBAAuB,GAEvB,mBAAmB,GACnB,eAAe,GACf,YAAY,GAEZ,cAAc,GACd,iBAAiB,GACjB,cAAc,GAEd,gBAAgB,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,YAAY;IACxC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;IAKzD,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;CAQhD;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
1
+ {"version":3,"file":"EventBus.d.ts","sourceRoot":"","sources":["../../src/events/EventBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,GACtB,WAAW,GACX,WAAW,GACX,cAAc,GACd,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,kBAAkB,GAClB,eAAe,GAEf,mBAAmB,GACnB,sBAAsB,GACtB,qBAAqB,GACrB,wBAAwB,GACxB,0BAA0B,GAC1B,wBAAwB,GACxB,uBAAuB,GACvB,uBAAuB,GACvB,qBAAqB,GACrB,kBAAkB,GAElB,uBAAuB,GACvB,iBAAiB,GACjB,wBAAwB,GACxB,wBAAwB,GACxB,mBAAmB,GACnB,gBAAgB,GAEhB,oBAAoB,GACpB,0BAA0B,GAC1B,sBAAsB,GAEtB,uBAAuB,GAEvB,mBAAmB,GACnB,eAAe,GACf,YAAY,GAEZ,cAAc,GACd,iBAAiB,GACjB,cAAc,GAEd,gBAAgB,GAEhB,qBAAqB,GACrB,qBAAqB,GACrB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,YAAY;IACxC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;IAKzD,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;CAQhD;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6iBrC,CAAC"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmkBrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/zh-CN.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6iBvC,CAAC"}
1
+ {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/zh-CN.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmkBvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4CA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA4e1C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4CA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0f1C"}
package/dist/index.js CHANGED
@@ -1,24 +1,26 @@
1
1
  import {
2
2
  main
3
- } from "./chunk-QZZGIZWC.js";
4
- import "./chunk-M5C2WILQ.js";
5
- import "./chunk-UBQLXQ7I.js";
6
- import "./chunk-HDFNMVRQ.js";
7
- import "./chunk-GXFG4JU6.js";
3
+ } from "./chunk-XSX3PGQW.js";
4
+ import "./chunk-5M5SB6ZA.js";
5
+ import "./chunk-5JBADEKR.js";
6
+ import "./chunk-DVNAH2GV.js";
7
+ import "./chunk-EU4XFZ2T.js";
8
8
  import "./chunk-KC5S66OZ.js";
9
- import "./chunk-O3WEV5W3.js";
10
- import "./chunk-IP3QTP5A.js";
11
- import "./chunk-2YQHKXLL.js";
12
- import "./chunk-U237JSLB.js";
13
- import "./chunk-U6GWFTKA.js";
9
+ import "./chunk-JMACM7AJ.js";
10
+ import "./chunk-IWSMQXBL.js";
11
+ import "./chunk-GPZX4DSY.js";
12
+ import "./chunk-MSL7ROVK.js";
13
+ import "./chunk-4XMYOXGZ.js";
14
+ import "./chunk-R32Q3RGK.js";
14
15
  import "./chunk-ACVOOHAR.js";
15
16
  import "./chunk-B7TVVODN.js";
16
- import "./chunk-YCYVNRLF.js";
17
- import "./chunk-NZHKAPU6.js";
17
+ import "./chunk-OBGEEGQ3.js";
18
+ import "./chunk-FJTZKAJA.js";
18
19
  import "./chunk-AKXDQH25.js";
19
20
  import "./chunk-TN2SYADO.js";
20
- import "./chunk-SAMTXC4A.js";
21
- import "./chunk-AVGZH64A.js";
21
+ import "./chunk-TFEPHOVE.js";
22
+ import "./chunk-G7QI5WDI.js";
23
+ import "./chunk-2RWGZPNF.js";
22
24
  import "./chunk-DAX3FD2O.js";
23
25
  import "./chunk-GF2RRYHB.js";
24
26
  export {
@@ -1,18 +1,19 @@
1
1
  import {
2
2
  createSetupRouter
3
- } from "./chunk-UBQLXQ7I.js";
4
- import "./chunk-HDFNMVRQ.js";
5
- import "./chunk-O3WEV5W3.js";
3
+ } from "./chunk-5JBADEKR.js";
4
+ import "./chunk-DVNAH2GV.js";
5
+ import "./chunk-JMACM7AJ.js";
6
6
  import "./chunk-ACVOOHAR.js";
7
7
  import "./chunk-B7TVVODN.js";
8
- import "./chunk-YCYVNRLF.js";
9
- import "./chunk-NZHKAPU6.js";
8
+ import "./chunk-OBGEEGQ3.js";
9
+ import "./chunk-FJTZKAJA.js";
10
10
  import {
11
11
  getLocalIP
12
12
  } from "./chunk-AKXDQH25.js";
13
13
  import "./chunk-TN2SYADO.js";
14
- import "./chunk-SAMTXC4A.js";
15
- import "./chunk-AVGZH64A.js";
14
+ import "./chunk-TFEPHOVE.js";
15
+ import "./chunk-G7QI5WDI.js";
16
+ import "./chunk-2RWGZPNF.js";
16
17
  import "./chunk-DAX3FD2O.js";
17
18
  import "./chunk-GF2RRYHB.js";
18
19
 
@@ -87,4 +88,4 @@ async function initCommand(options) {
87
88
  export {
88
89
  initCommand
89
90
  };
90
- //# sourceMappingURL=init-QQDXGTPB.js.map
91
+ //# sourceMappingURL=init-37DLQ5AJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/init.ts"],"sourcesContent":["import express from 'express';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createSetupRouter } from '../../web/routes/setup.js';\nimport { getLocalIP } from '../../utils/network.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport interface InitOptions {\n port: number;\n config?: string;\n}\n\nexport async function initCommand(options: InitOptions): Promise<void> {\n const app = express();\n app.use(express.json());\n\n let serverRef: ReturnType<typeof app.listen> | null = null;\n\n let setupRouter;\n try {\n setupRouter = createSetupRouter({\n configPath: options.config,\n onComplete: (configPath) => {\n console.log(`\\n Configuration saved to: ${configPath}`);\n console.log(' Run \"issue-auto-finish start\" to start the service.\\n');\n setTimeout(() => {\n serverRef?.close();\n process.exit(0);\n }, 1000);\n },\n });\n } catch (err) {\n console.error(' Failed to create setup router:', (err as Error).message);\n process.exit(1);\n }\n\n app.use(setupRouter);\n\n const packageRoot = path.resolve(__dirname, '..');\n const publicDir = path.resolve(packageRoot, 'src/web/frontend/dist');\n\n const indexHtml = path.join(publicDir, 'index.html');\n if (fs.existsSync(indexHtml)) {\n app.use(express.static(publicDir));\n app.get('/{*splat}', (_req, res) => {\n res.sendFile('index.html', { root: publicDir }, (err) => {\n if (err) {\n res.status(404).type('html').send('<!DOCTYPE html><html><body>Not Found</body></html>');\n }\n });\n });\n } else {\n app.get('/', (_req, res) => {\n res.type('html').send(`<!DOCTYPE html>\n<html><head><title>Issue Auto-Finish Setup</title></head>\n<body style=\"font-family:system-ui;max-width:600px;margin:60px auto;padding:20px\">\n<h1>Issue Auto-Finish Setup</h1>\n<p>Frontend assets not found. Please build the frontend first:</p>\n<pre>cd issue-auto-finish && npm run web:build</pre>\n<p>Or use the API directly at <code>/api/setup/*</code></p>\n</body></html>`);\n });\n }\n\n serverRef = app.listen(options.port, async () => {\n const url = `http://${getLocalIP()}:${options.port}`;\n const routeCount = setupRouter.stack?.length ?? 0;\n console.log(`\\n Issue Auto-Finish Setup Wizard`);\n console.log(` Open: ${url}`);\n console.log(` Registered ${routeCount} API routes\\n`);\n\n try {\n const open = (await import('open')).default;\n await open(url);\n } catch {\n // Browser open failed, user can manually navigate\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,OAAO,aAAa;AACpB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAI9B,IAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAO7D,eAAsB,YAAY,SAAqC;AACrE,QAAM,MAAM,QAAQ;AACpB,MAAI,IAAI,QAAQ,KAAK,CAAC;AAEtB,MAAI,YAAkD;AAEtD,MAAI;AACJ,MAAI;AACF,kBAAc,kBAAkB;AAAA,MAC9B,YAAY,QAAQ;AAAA,MACpB,YAAY,CAAC,eAAe;AAC1B,gBAAQ,IAAI;AAAA,4BAA+B,UAAU,EAAE;AACvD,gBAAQ,IAAI,yDAAyD;AACrE,mBAAW,MAAM;AACf,qBAAW,MAAM;AACjB,kBAAQ,KAAK,CAAC;AAAA,QAChB,GAAG,GAAI;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,YAAQ,MAAM,oCAAqC,IAAc,OAAO;AACxE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,IAAI,WAAW;AAEnB,QAAM,cAAc,KAAK,QAAQ,WAAW,IAAI;AAChD,QAAM,YAAY,KAAK,QAAQ,aAAa,uBAAuB;AAEnE,QAAM,YAAY,KAAK,KAAK,WAAW,YAAY;AACnD,MAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,QAAI,IAAI,QAAQ,OAAO,SAAS,CAAC;AACjC,QAAI,IAAI,aAAa,CAAC,MAAM,QAAQ;AAClC,UAAI,SAAS,cAAc,EAAE,MAAM,UAAU,GAAG,CAAC,QAAQ;AACvD,YAAI,KAAK;AACP,cAAI,OAAO,GAAG,EAAE,KAAK,MAAM,EAAE,KAAK,oDAAoD;AAAA,QACxF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,OAAO;AACL,QAAI,IAAI,KAAK,CAAC,MAAM,QAAQ;AAC1B,UAAI,KAAK,MAAM,EAAE,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOb;AAAA,IACX,CAAC;AAAA,EACH;AAEA,cAAY,IAAI,OAAO,QAAQ,MAAM,YAAY;AAC/C,UAAM,MAAM,UAAU,WAAW,CAAC,IAAI,QAAQ,IAAI;AAClD,UAAM,aAAa,YAAY,OAAO,UAAU;AAChD,YAAQ,IAAI;AAAA,iCAAoC;AAChD,YAAQ,IAAI,WAAW,GAAG,EAAE;AAC5B,YAAQ,IAAI,gBAAgB,UAAU;AAAA,CAAe;AAErD,QAAI;AACF,YAAM,QAAQ,MAAM,OAAO,MAAM,GAAG;AACpC,YAAM,KAAK,GAAG;AAAA,IAChB,QAAQ;AAAA,IAER;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../src/cli/commands/init.ts"],"sourcesContent":["import express from 'express';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createSetupRouter } from '../../web/routes/setup.js';\nimport { getLocalIP } from '../../utils/network.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport interface InitOptions {\n port: number;\n config?: string;\n}\n\nexport async function initCommand(options: InitOptions): Promise<void> {\n const app = express();\n app.use(express.json());\n\n let serverRef: ReturnType<typeof app.listen> | null = null;\n\n let setupRouter;\n try {\n setupRouter = createSetupRouter({\n configPath: options.config,\n onComplete: (configPath) => {\n console.log(`\\n Configuration saved to: ${configPath}`);\n console.log(' Run \"issue-auto-finish start\" to start the service.\\n');\n setTimeout(() => {\n serverRef?.close();\n process.exit(0);\n }, 1000);\n },\n });\n } catch (err) {\n console.error(' Failed to create setup router:', (err as Error).message);\n process.exit(1);\n }\n\n app.use(setupRouter);\n\n const packageRoot = path.resolve(__dirname, '..');\n const publicDir = path.resolve(packageRoot, 'src/web/frontend/dist');\n\n const indexHtml = path.join(publicDir, 'index.html');\n if (fs.existsSync(indexHtml)) {\n app.use(express.static(publicDir));\n app.get('/{*splat}', (_req, res) => {\n res.sendFile('index.html', { root: publicDir }, (err) => {\n if (err) {\n res.status(404).type('html').send('<!DOCTYPE html><html><body>Not Found</body></html>');\n }\n });\n });\n } else {\n app.get('/', (_req, res) => {\n res.type('html').send(`<!DOCTYPE html>\n<html><head><title>Issue Auto-Finish Setup</title></head>\n<body style=\"font-family:system-ui;max-width:600px;margin:60px auto;padding:20px\">\n<h1>Issue Auto-Finish Setup</h1>\n<p>Frontend assets not found. Please build the frontend first:</p>\n<pre>cd issue-auto-finish && npm run web:build</pre>\n<p>Or use the API directly at <code>/api/setup/*</code></p>\n</body></html>`);\n });\n }\n\n serverRef = app.listen(options.port, async () => {\n const url = `http://${getLocalIP()}:${options.port}`;\n const routeCount = setupRouter.stack?.length ?? 0;\n console.log(`\\n Issue Auto-Finish Setup Wizard`);\n console.log(` Open: ${url}`);\n console.log(` Registered ${routeCount} API routes\\n`);\n\n try {\n const open = (await import('open')).default;\n await open(url);\n } catch {\n // Browser open failed, user can manually navigate\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,OAAO,aAAa;AACpB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAI9B,IAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAO7D,eAAsB,YAAY,SAAqC;AACrE,QAAM,MAAM,QAAQ;AACpB,MAAI,IAAI,QAAQ,KAAK,CAAC;AAEtB,MAAI,YAAkD;AAEtD,MAAI;AACJ,MAAI;AACF,kBAAc,kBAAkB;AAAA,MAC9B,YAAY,QAAQ;AAAA,MACpB,YAAY,CAAC,eAAe;AAC1B,gBAAQ,IAAI;AAAA,4BAA+B,UAAU,EAAE;AACvD,gBAAQ,IAAI,yDAAyD;AACrE,mBAAW,MAAM;AACf,qBAAW,MAAM;AACjB,kBAAQ,KAAK,CAAC;AAAA,QAChB,GAAG,GAAI;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,YAAQ,MAAM,oCAAqC,IAAc,OAAO;AACxE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,IAAI,WAAW;AAEnB,QAAM,cAAc,KAAK,QAAQ,WAAW,IAAI;AAChD,QAAM,YAAY,KAAK,QAAQ,aAAa,uBAAuB;AAEnE,QAAM,YAAY,KAAK,KAAK,WAAW,YAAY;AACnD,MAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,QAAI,IAAI,QAAQ,OAAO,SAAS,CAAC;AACjC,QAAI,IAAI,aAAa,CAAC,MAAM,QAAQ;AAClC,UAAI,SAAS,cAAc,EAAE,MAAM,UAAU,GAAG,CAAC,QAAQ;AACvD,YAAI,KAAK;AACP,cAAI,OAAO,GAAG,EAAE,KAAK,MAAM,EAAE,KAAK,oDAAoD;AAAA,QACxF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,OAAO;AACL,QAAI,IAAI,KAAK,CAAC,MAAM,QAAQ;AAC1B,UAAI,KAAK,MAAM,EAAE,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOb;AAAA,IACX,CAAC;AAAA,EACH;AAEA,cAAY,IAAI,OAAO,QAAQ,MAAM,YAAY;AAC/C,UAAM,MAAM,UAAU,WAAW,CAAC,IAAI,QAAQ,IAAI;AAClD,UAAM,aAAa,YAAY,OAAO,UAAU;AAChD,YAAQ,IAAI;AAAA,iCAAoC;AAChD,YAAQ,IAAI,WAAW,GAAG,EAAE;AAC5B,YAAQ,IAAI,gBAAgB,UAAU;AAAA,CAAe;AAErD,QAAI;AACF,YAAM,QAAQ,MAAM,OAAO,MAAM,GAAG;AACpC,YAAM,KAAK,GAAG;AAAA,IAChB,QAAQ;AAAA,IAER;AAAA,EACF,CAAC;AACH;","names":[]}
package/dist/lib.js CHANGED
@@ -13,21 +13,22 @@ import {
13
13
  registerPhase,
14
14
  registerPipeline,
15
15
  resolvePipelineMode
16
- } from "./chunk-IP3QTP5A.js";
16
+ } from "./chunk-IWSMQXBL.js";
17
17
  import {
18
18
  AsyncMutex,
19
19
  GitOperations,
20
20
  eventBus
21
- } from "./chunk-2YQHKXLL.js";
22
- import "./chunk-U237JSLB.js";
23
- import "./chunk-U6GWFTKA.js";
21
+ } from "./chunk-GPZX4DSY.js";
22
+ import "./chunk-MSL7ROVK.js";
23
+ import "./chunk-4XMYOXGZ.js";
24
+ import "./chunk-R32Q3RGK.js";
24
25
  import "./chunk-ACVOOHAR.js";
25
26
  import "./chunk-B7TVVODN.js";
26
- import "./chunk-YCYVNRLF.js";
27
+ import "./chunk-OBGEEGQ3.js";
27
28
  import {
28
29
  ConfigValidationError,
29
30
  loadConfig
30
- } from "./chunk-NZHKAPU6.js";
31
+ } from "./chunk-FJTZKAJA.js";
31
32
  import "./chunk-AKXDQH25.js";
32
33
  import "./chunk-TN2SYADO.js";
33
34
  import {
@@ -40,8 +41,9 @@ import {
40
41
  isRegisteredRunner,
41
42
  registerAIRunner,
42
43
  validateRunnerRegistry
43
- } from "./chunk-SAMTXC4A.js";
44
- import "./chunk-AVGZH64A.js";
44
+ } from "./chunk-TFEPHOVE.js";
45
+ import "./chunk-G7QI5WDI.js";
46
+ import "./chunk-2RWGZPNF.js";
45
47
  import "./chunk-DAX3FD2O.js";
46
48
  import {
47
49
  Logger,