@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.
- package/dist/{AIRunnerRegistry-II3WWSFN.js → AIRunnerRegistry-CFDNWSXC.js} +6 -3
- package/dist/{LockNote-Z2CLDZNN.js → LockNote-W2JNVMW7.js} +3 -3
- package/dist/PtyRunner-NYASBTRP.js +33 -0
- package/dist/SdkRunner-U2OTOMZU.js +9 -0
- package/dist/ai-runner/AIRunner.d.ts +19 -1
- package/dist/ai-runner/AIRunner.d.ts.map +1 -1
- package/dist/ai-runner/AIRunnerRegistry.d.ts +8 -0
- package/dist/ai-runner/AIRunnerRegistry.d.ts.map +1 -1
- package/dist/ai-runner/PlanFileResolver.d.ts +53 -0
- package/dist/ai-runner/PlanFileResolver.d.ts.map +1 -0
- package/dist/ai-runner/PtyRunner.d.ts +45 -4
- package/dist/ai-runner/PtyRunner.d.ts.map +1 -1
- package/dist/ai-runner/SdkRunner.d.ts +22 -0
- package/dist/ai-runner/SdkRunner.d.ts.map +1 -0
- package/dist/ai-runner/index.d.ts +5 -2
- package/dist/ai-runner/index.d.ts.map +1 -1
- package/dist/ai-runner/sdk/ClaudeCodeSDK.d.ts +37 -0
- package/dist/ai-runner/sdk/ClaudeCodeSDK.d.ts.map +1 -0
- package/dist/ai-runner/sdk/Stream.d.ts +22 -0
- package/dist/ai-runner/sdk/Stream.d.ts.map +1 -0
- package/dist/ai-runner/sdk/types.d.ts +146 -0
- package/dist/ai-runner/sdk/types.d.ts.map +1 -0
- package/dist/{ai-runner-HLA44WI6.js → ai-runner-TOHVJJ76.js} +14 -5
- package/dist/{analyze-ZIXNC5GN.js → analyze-DBH4K3J7.js} +8 -6
- package/dist/{analyze-ZIXNC5GN.js.map → analyze-DBH4K3J7.js.map} +1 -1
- package/dist/{braindump-56WAY2RD.js → braindump-RYI4BGMG.js} +11 -9
- package/dist/{braindump-56WAY2RD.js.map → braindump-RYI4BGMG.js.map} +1 -1
- package/dist/{chunk-AVGZH64A.js → chunk-2RWGZPNF.js} +4 -1
- package/dist/chunk-2RWGZPNF.js.map +1 -0
- package/dist/chunk-4XMYOXGZ.js +1153 -0
- package/dist/chunk-4XMYOXGZ.js.map +1 -0
- package/dist/{chunk-UBQLXQ7I.js → chunk-5JBADEKR.js} +7 -7
- package/dist/{chunk-M5C2WILQ.js → chunk-5M5SB6ZA.js} +7 -5
- package/dist/{chunk-M5C2WILQ.js.map → chunk-5M5SB6ZA.js.map} +1 -1
- package/dist/{chunk-HDFNMVRQ.js → chunk-DVNAH2GV.js} +2 -2
- package/dist/{chunk-GXFG4JU6.js → chunk-EU4XFZ2T.js} +2 -2
- package/dist/{chunk-NZHKAPU6.js → chunk-FJTZKAJA.js} +9 -3
- package/dist/chunk-FJTZKAJA.js.map +1 -0
- package/dist/chunk-G7QI5WDI.js +14 -0
- package/dist/chunk-G7QI5WDI.js.map +1 -0
- package/dist/{chunk-2YQHKXLL.js → chunk-GPZX4DSY.js} +22 -6
- package/dist/chunk-GPZX4DSY.js.map +1 -0
- package/dist/{chunk-IP3QTP5A.js → chunk-IWSMQXBL.js} +189 -48
- package/dist/chunk-IWSMQXBL.js.map +1 -0
- package/dist/{chunk-O3WEV5W3.js → chunk-JMACM7AJ.js} +47 -9
- package/dist/chunk-JMACM7AJ.js.map +1 -0
- package/dist/chunk-MSL7ROVK.js +1 -0
- package/dist/{chunk-YCYVNRLF.js → chunk-OBGEEGQ3.js} +61 -19
- package/dist/chunk-OBGEEGQ3.js.map +1 -0
- package/dist/chunk-R32Q3RGK.js +666 -0
- package/dist/chunk-R32Q3RGK.js.map +1 -0
- package/dist/{chunk-SAMTXC4A.js → chunk-TFEPHOVE.js} +12 -17
- package/dist/chunk-TFEPHOVE.js.map +1 -0
- package/dist/{chunk-QZZGIZWC.js → chunk-XSX3PGQW.js} +63 -20
- package/dist/chunk-XSX3PGQW.js.map +1 -0
- package/dist/{chunk-2MESXJEZ.js → chunk-YNRKPQLS.js} +3 -3
- package/dist/cli/setup/PreflightChecker.d.ts +1 -0
- package/dist/cli/setup/PreflightChecker.d.ts.map +1 -1
- package/dist/cli/setup/env-metadata.d.ts.map +1 -1
- package/dist/cli.js +10 -9
- package/dist/cli.js.map +1 -1
- package/dist/{config-WTRSZLOC.js → config-23TBYFP5.js} +5 -4
- package/dist/config-schema.d.ts +6 -0
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/{doctor-37JNBGDN.js → doctor-ZG3DO7J5.js} +3 -3
- package/dist/errors/AIExecutionError.d.ts +3 -0
- package/dist/errors/AIExecutionError.d.ts.map +1 -1
- package/dist/{errors-S3BWYA4I.js → errors-J3ZRP66W.js} +2 -2
- package/dist/events/EventBus.d.ts +1 -1
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -14
- package/dist/{init-QQDXGTPB.js → init-37DLQ5AJ.js} +9 -8
- package/dist/{init-QQDXGTPB.js.map → init-37DLQ5AJ.js.map} +1 -1
- package/dist/lib.js +10 -8
- package/dist/lib.js.map +1 -1
- package/dist/orchestrator/PendingDialogStore.d.ts +12 -0
- package/dist/orchestrator/PendingDialogStore.d.ts.map +1 -0
- package/dist/orchestrator/steps/FailureHandler.d.ts.map +1 -1
- package/dist/orchestrator/steps/PhaseLoopStep.d.ts.map +1 -1
- package/dist/persistence/PlanPersistence.d.ts +5 -0
- package/dist/persistence/PlanPersistence.d.ts.map +1 -1
- package/dist/persistence/TodolistExtractor.d.ts +31 -0
- package/dist/persistence/TodolistExtractor.d.ts.map +1 -0
- package/dist/phases/BasePhase.d.ts.map +1 -1
- package/dist/phases/PhaseOutcome.d.ts +2 -0
- package/dist/phases/PhaseOutcome.d.ts.map +1 -1
- package/dist/phases/PlanPhase.d.ts.map +1 -1
- package/dist/prompts/templates.d.ts +2 -2
- package/dist/prompts/templates.d.ts.map +1 -1
- package/dist/{restart-BMILTP5X.js → restart-C7QBXT44.js} +9 -8
- package/dist/{restart-BMILTP5X.js.map → restart-C7QBXT44.js.map} +1 -1
- package/dist/run.js +16 -14
- package/dist/run.js.map +1 -1
- package/dist/start-66JO56AW.js +16 -0
- package/dist/start-66JO56AW.js.map +1 -0
- package/dist/tracker/IssueTracker.d.ts +6 -0
- package/dist/tracker/IssueTracker.d.ts.map +1 -1
- package/dist/web/routes/api.d.ts.map +1 -1
- package/package.json +5 -1
- package/src/web/frontend/dist/assets/index-DJzC2saL.css +1 -0
- package/src/web/frontend/dist/assets/{index-D_oTMuJU.js → index-Mnu8M3ww.js} +57 -57
- package/src/web/frontend/dist/index.html +2 -2
- package/dist/PtyRunner-6UGI5STW.js +0 -22
- package/dist/chunk-2YQHKXLL.js.map +0 -1
- package/dist/chunk-AVGZH64A.js.map +0 -1
- package/dist/chunk-IP3QTP5A.js.map +0 -1
- package/dist/chunk-NZHKAPU6.js.map +0 -1
- package/dist/chunk-O3WEV5W3.js.map +0 -1
- package/dist/chunk-QZZGIZWC.js.map +0 -1
- package/dist/chunk-SAMTXC4A.js.map +0 -1
- package/dist/chunk-U237JSLB.js +0 -1
- package/dist/chunk-U6GWFTKA.js +0 -657
- package/dist/chunk-U6GWFTKA.js.map +0 -1
- package/dist/chunk-YCYVNRLF.js.map +0 -1
- package/dist/start-6QRW6IJI.js +0 -15
- package/src/web/frontend/dist/assets/index-COYziOhv.css +0 -1
- /package/dist/{AIRunnerRegistry-II3WWSFN.js.map → AIRunnerRegistry-CFDNWSXC.js.map} +0 -0
- /package/dist/{LockNote-Z2CLDZNN.js.map → LockNote-W2JNVMW7.js.map} +0 -0
- /package/dist/{PtyRunner-6UGI5STW.js.map → PtyRunner-NYASBTRP.js.map} +0 -0
- /package/dist/{ai-runner-HLA44WI6.js.map → SdkRunner-U2OTOMZU.js.map} +0 -0
- /package/dist/{chunk-U237JSLB.js.map → ai-runner-TOHVJJ76.js.map} +0 -0
- /package/dist/{chunk-UBQLXQ7I.js.map → chunk-5JBADEKR.js.map} +0 -0
- /package/dist/{chunk-HDFNMVRQ.js.map → chunk-DVNAH2GV.js.map} +0 -0
- /package/dist/{chunk-GXFG4JU6.js.map → chunk-EU4XFZ2T.js.map} +0 -0
- /package/dist/{config-WTRSZLOC.js.map → chunk-MSL7ROVK.js.map} +0 -0
- /package/dist/{chunk-2MESXJEZ.js.map → chunk-YNRKPQLS.js.map} +0 -0
- /package/dist/{errors-S3BWYA4I.js.map → config-23TBYFP5.js.map} +0 -0
- /package/dist/{doctor-37JNBGDN.js.map → doctor-ZG3DO7J5.js.map} +0 -0
- /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-
|
|
9
|
+
} from "./chunk-JMACM7AJ.js";
|
|
10
10
|
import {
|
|
11
11
|
resolveConfigFilePath
|
|
12
|
-
} from "./chunk-
|
|
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-
|
|
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;
|
|
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,
|
|
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-
|
|
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-
|
|
21
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
7
|
+
} from "./chunk-FJTZKAJA.js";
|
|
8
8
|
import "./chunk-AKXDQH25.js";
|
|
9
9
|
import "./chunk-TN2SYADO.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
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-
|
|
21
|
+
//# sourceMappingURL=config-23TBYFP5.js.map
|
package/dist/config-schema.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8DxB,eAAO,MAAM,SAAS
|
|
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;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -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
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
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-
|
|
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;
|
|
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-
|
|
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-
|
|
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;
|
|
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,
|
|
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,
|
|
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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4CA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
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-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
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-
|
|
17
|
-
import "./chunk-
|
|
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-
|
|
21
|
-
import "./chunk-
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
9
|
-
import "./chunk-
|
|
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-
|
|
15
|
-
import "./chunk-
|
|
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-
|
|
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":"
|
|
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-
|
|
16
|
+
} from "./chunk-IWSMQXBL.js";
|
|
17
17
|
import {
|
|
18
18
|
AsyncMutex,
|
|
19
19
|
GitOperations,
|
|
20
20
|
eventBus
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
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-
|
|
27
|
+
import "./chunk-OBGEEGQ3.js";
|
|
27
28
|
import {
|
|
28
29
|
ConfigValidationError,
|
|
29
30
|
loadConfig
|
|
30
|
-
} from "./chunk-
|
|
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-
|
|
44
|
-
import "./chunk-
|
|
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,
|