@xdevops/issue-auto-finish 1.0.88 → 1.0.90
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-M5C2WILQ.js → chunk-5M5SB6ZA.js} +7 -5
- package/dist/{chunk-M5C2WILQ.js.map → chunk-5M5SB6ZA.js.map} +1 -1
- package/dist/{chunk-D47Q5745.js → chunk-ENF24C44.js} +7 -7
- 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-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-LNFMARKQ.js → chunk-SEO57UYI.js} +25 -8
- package/dist/chunk-SEO57UYI.js.map +1 -0
- package/dist/{chunk-2GJ2KA4Z.js → chunk-TDKTI363.js} +3 -3
- package/dist/{chunk-SAMTXC4A.js → chunk-TFEPHOVE.js} +12 -17
- package/dist/chunk-TFEPHOVE.js.map +1 -0
- package/dist/{chunk-C4MFVASL.js → chunk-Y62E72TA.js} +63 -20
- package/dist/chunk-Y62E72TA.js.map +1 -0
- package/dist/{chunk-HDFNMVRQ.js → chunk-Z3OBKODV.js} +12 -11
- package/dist/chunk-Z3OBKODV.js.map +1 -0
- package/dist/cli/setup/ConfigGenerator.d.ts +2 -0
- package/dist/cli/setup/ConfigGenerator.d.ts.map +1 -1
- package/dist/cli/setup/DependencyChecker.d.ts +1 -1
- package/dist/cli/setup/DependencyChecker.d.ts.map +1 -1
- 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-LLETZLW2.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-4THZTNXY.js → init-UKTP7LXS.js} +9 -8
- package/dist/{init-4THZTNXY.js.map → init-UKTP7LXS.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-VEDIKB6M.js → restart-2BCP6AMK.js} +9 -8
- package/dist/{restart-VEDIKB6M.js.map → restart-2BCP6AMK.js.map} +1 -1
- package/dist/run.js +16 -14
- package/dist/run.js.map +1 -1
- package/dist/start-ECUOKGM2.js +16 -0
- package/dist/start-ECUOKGM2.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-DWOHf3bd.css +1 -0
- package/src/web/frontend/dist/assets/index-Dby4j-V_.js +151 -0
- 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-C4MFVASL.js.map +0 -1
- package/dist/chunk-HDFNMVRQ.js.map +0 -1
- package/dist/chunk-IP3QTP5A.js.map +0 -1
- package/dist/chunk-LNFMARKQ.js.map +0 -1
- package/dist/chunk-NZHKAPU6.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-5N6DIWM2.js +0 -15
- package/src/web/frontend/dist/assets/index-COYziOhv.css +0 -1
- package/src/web/frontend/dist/assets/index-D_oTMuJU.js +0 -151
- /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-D47Q5745.js.map → chunk-ENF24C44.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-2GJ2KA4Z.js.map → chunk-TDKTI363.js.map} +0 -0
- /package/dist/{errors-S3BWYA4I.js.map → config-23TBYFP5.js.map} +0 -0
- /package/dist/{doctor-37JNBGDN.js.map → doctor-LLETZLW2.js.map} +0 -0
- /package/dist/{start-5N6DIWM2.js.map → errors-J3ZRP66W.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
t
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OBGEEGQ3.js";
|
|
4
4
|
|
|
5
5
|
// src/cli/setup/DependencyChecker.ts
|
|
6
6
|
import { spawn } from "child_process";
|
|
@@ -57,27 +57,28 @@ async function getVersion(binary, args = ["--version"]) {
|
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
var DependencyChecker = class {
|
|
60
|
-
async checkAll(
|
|
60
|
+
async checkAll(aiMode) {
|
|
61
|
+
const effectiveMode = aiMode || "cursor-agent";
|
|
62
|
+
const ptyAgent = effectiveMode === "pty" ? process.env.PTY_DEFAULT_AGENT || "claude-internal" : "";
|
|
61
63
|
const results = await Promise.all([
|
|
62
64
|
this.checkNode(),
|
|
63
65
|
this.checkGit(),
|
|
64
|
-
this.checkCursor(
|
|
65
|
-
|
|
66
|
-
this.
|
|
67
|
-
// 可选
|
|
68
|
-
this.checkCodebuddy(false)
|
|
69
|
-
// 可选
|
|
66
|
+
this.checkCursor(effectiveMode === "cursor-agent" || ptyAgent === "cursor-agent"),
|
|
67
|
+
this.checkClaudeInternal(effectiveMode === "claude-internal" || effectiveMode === "pty"),
|
|
68
|
+
this.checkCodebuddy(effectiveMode === "codebuddy" || ptyAgent === "codebuddy")
|
|
70
69
|
]);
|
|
71
70
|
return results;
|
|
72
71
|
}
|
|
73
72
|
async checkNode() {
|
|
74
73
|
const version = await getVersion("node");
|
|
74
|
+
const majorVersion = version ? parseInt(version.split(".")[0], 10) : 0;
|
|
75
|
+
const meetsMinVersion = version !== null && majorVersion >= 20;
|
|
75
76
|
return {
|
|
76
77
|
name: "node",
|
|
77
78
|
displayName: "Node.js (>= 20)",
|
|
78
79
|
required: true,
|
|
79
|
-
installed:
|
|
80
|
-
version: version
|
|
80
|
+
installed: meetsMinVersion,
|
|
81
|
+
version: version ? `${version}${!meetsMinVersion ? " (\u9700\u8981 >= 20)" : ""}` : void 0,
|
|
81
82
|
installCommand: platform() === "linux" ? "curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs" : void 0,
|
|
82
83
|
installHint: "https://nodejs.org/ or nvm install 20",
|
|
83
84
|
category: "toolchain",
|
|
@@ -407,4 +408,4 @@ async function* streamProcessLines(proc, timeoutMs) {
|
|
|
407
408
|
export {
|
|
408
409
|
DependencyChecker
|
|
409
410
|
};
|
|
410
|
-
//# sourceMappingURL=chunk-
|
|
411
|
+
//# sourceMappingURL=chunk-Z3OBKODV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/setup/DependencyChecker.ts"],"sourcesContent":["import { ChildProcess, spawn } from 'node:child_process';\nimport { platform, arch } from 'node:os';\nimport { t } from '../../i18n/index.js';\n\nconst INSTALL_TIMEOUT_MS = 120_000;\nconst AI_INSTALL_TIMEOUT_MS = 180_000;\n\nexport type AuthStatus = 'logged_in' | 'not_logged_in' | 'unknown';\n\nexport interface DepCheckResult {\n name: string;\n displayName: string;\n required: boolean;\n installed: boolean;\n version?: string;\n installCommand?: string;\n installHint?: string;\n aiInstallable?: boolean;\n category: 'ai-cli' | 'toolchain';\n authStatus?: AuthStatus;\n loginCommand?: string;\n}\n\nexport interface InstallAllEvent {\n phase?: string;\n dep?: string;\n status?: 'start' | 'done';\n installed?: boolean;\n line?: string;\n}\n\nasync function checkAuth(binary: string, args: string[]): Promise<AuthStatus> {\n return new Promise((resolve) => {\n const proc = spawn(binary, args, { stdio: ['ignore', 'pipe', 'pipe'] });\n const timer = setTimeout(() => { proc.kill('SIGTERM'); resolve('unknown'); }, 10_000);\n proc.on('close', (code) => { clearTimeout(timer); resolve(code === 0 ? 'logged_in' : 'not_logged_in'); });\n proc.on('error', () => { clearTimeout(timer); resolve('unknown'); });\n });\n}\n\nasync function which(binary: string): Promise<string | null> {\n return new Promise((resolve) => {\n const proc = spawn('which', [binary], { stdio: ['ignore', 'pipe', 'ignore'] });\n let out = '';\n proc.stdout.on('data', (d) => { out += d.toString(); });\n proc.on('close', (code) => resolve(code === 0 ? out.trim() : null));\n proc.on('error', () => resolve(null));\n });\n}\n\nasync function getVersion(binary: string, args: string[] = ['--version']): Promise<string | null> {\n return new Promise((resolve) => {\n const proc = spawn(binary, args, { stdio: ['ignore', 'pipe', 'pipe'] });\n let out = '';\n proc.stdout.on('data', (d) => { out += d.toString(); });\n proc.stderr.on('data', (d) => { out += d.toString(); });\n proc.on('close', (code) => {\n if (code === 0 && out.trim()) {\n const match = out.trim().match(/[\\d]+\\.[\\d]+[\\d.a-z-]*/);\n resolve(match ? match[0] : out.trim().split('\\n')[0]);\n } else {\n resolve(null);\n }\n });\n proc.on('error', () => resolve(null));\n });\n}\n\nexport class DependencyChecker {\n async checkAll(aiMode?: string): Promise<DepCheckResult[]> {\n const effectiveMode = aiMode || 'cursor-agent';\n const ptyAgent = effectiveMode === 'pty' ? (process.env.PTY_DEFAULT_AGENT || 'claude-internal') : '';\n const results = await Promise.all([\n this.checkNode(),\n this.checkGit(),\n this.checkCursor(effectiveMode === 'cursor-agent' || ptyAgent === 'cursor-agent'),\n this.checkClaudeInternal(effectiveMode === 'claude-internal' || effectiveMode === 'pty'),\n this.checkCodebuddy(effectiveMode === 'codebuddy' || ptyAgent === 'codebuddy'),\n ]);\n return results;\n }\n\n async checkNode(): Promise<DepCheckResult> {\n const version = await getVersion('node');\n const majorVersion = version ? parseInt(version.split('.')[0], 10) : 0;\n const meetsMinVersion = version !== null && majorVersion >= 20;\n return {\n name: 'node',\n displayName: 'Node.js (>= 20)',\n required: true,\n installed: meetsMinVersion,\n version: version ? `${version}${!meetsMinVersion ? ' (需要 >= 20)' : ''}` : undefined,\n installCommand: platform() === 'linux' ? 'curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs' : undefined,\n installHint: 'https://nodejs.org/ or nvm install 20',\n category: 'toolchain',\n aiInstallable: true,\n };\n }\n\n async checkGit(): Promise<DepCheckResult> {\n const version = await getVersion('git');\n return {\n name: 'git',\n displayName: 'Git',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installCommand: platform() === 'linux' ? 'sudo apt-get install -y git' : undefined,\n installHint: 'sudo apt install git / brew install git',\n category: 'toolchain',\n aiInstallable: true,\n };\n }\n\n async checkClaudeInternal(required: boolean): Promise<DepCheckResult> {\n const binPath = await which('claude-internal');\n const version = binPath ? await getVersion('claude-internal') : null;\n const cmd = 'npm install -g claude-code-internal';\n const authStatus: AuthStatus = binPath ? await checkAuth('claude-internal', ['auth', 'status']) : 'unknown';\n return {\n name: 'claude-internal',\n displayName: 'Claude Internal CLI',\n required,\n installed: binPath !== null,\n version: version ?? undefined,\n installCommand: cmd,\n installHint: cmd,\n category: 'ai-cli',\n aiInstallable: false,\n authStatus,\n loginCommand: 'claude-internal auth login',\n };\n }\n\n async checkCursor(required: boolean): Promise<DepCheckResult> {\n const binPath = await which('cursor-agent');\n const version = binPath ? await getVersion('cursor-agent', ['-v']) : null;\n const authStatus: AuthStatus = binPath ? await checkAuth('cursor-agent', ['auth', 'whoami']) : 'unknown';\n return {\n name: 'cursor-agent',\n displayName: 'Cursor Agent CLI',\n required,\n installed: version !== null,\n version: version ?? undefined,\n // 不设置 installCommand → 前端不显示自动安装按钮\n // cursor-agent 使用 curl | bash 管道安装,在非 TTY 环境下无输出,改为手动安装\n installHint: t('cli.cursorInstallHint'),\n category: 'ai-cli',\n aiInstallable: false,\n authStatus,\n loginCommand: 'cursor-agent auth login',\n };\n }\n\n async checkCodebuddy(required: boolean): Promise<DepCheckResult> {\n const binPath = await which('codebuddy');\n const version = binPath ? await getVersion('codebuddy') : null;\n const cmd = 'npm install -g codebuddy-code';\n const authStatus: AuthStatus = binPath ? await checkAuth('codebuddy', ['auth', 'status']) : 'unknown';\n return {\n name: 'codebuddy',\n displayName: 'CodeBuddy CLI',\n required,\n installed: binPath !== null,\n version: version ?? undefined,\n installCommand: cmd,\n installHint: cmd,\n category: 'ai-cli',\n aiInstallable: false,\n authStatus,\n loginCommand: 'codebuddy auth login',\n };\n }\n\n async checkOne(name: string): Promise<DepCheckResult | null> {\n switch (name) {\n case 'node': return this.checkNode();\n case 'git': return this.checkGit();\n case 'claude-internal': return this.checkClaudeInternal(true);\n case 'cursor-agent': return this.checkCursor(true);\n case 'codebuddy': return this.checkCodebuddy(true);\n default: return null;\n }\n }\n\n async *install(name: string): AsyncGenerator<string> {\n yield t('cli.checkingDep', { name });\n const dep = await this.checkOne(name);\n if (!dep) {\n yield t('cli.unknownDep', { name });\n return;\n }\n if (dep.installed) {\n yield t('cli.alreadyInstalled', { name: dep.displayName, version: dep.version ?? '' });\n return;\n }\n if (!dep.installCommand) {\n yield t('cli.manualInstall', { name: dep.displayName, hint: dep.installHint ?? '' });\n return;\n }\n\n yield t('cli.installing', { name: dep.displayName });\n yield `$ ${dep.installCommand}`;\n\n const proc = spawn(dep.installCommand, {\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n });\n\n const { exitCode, timedOut, lineCount } = yield* streamProcess(proc, INSTALL_TIMEOUT_MS);\n\n if (timedOut) {\n yield t('cli.installTimeout', { name: dep.displayName, seconds: INSTALL_TIMEOUT_MS / 1000 });\n return;\n }\n\n if (lineCount === 0) {\n yield t('cli.noOutput');\n }\n\n yield t('cli.verifyingInstall');\n\n if (exitCode === 0) {\n yield t('cli.installSuccess', { name: dep.displayName });\n } else {\n yield t('cli.installFailed', { name: dep.displayName, code: exitCode });\n }\n }\n\n async *installWithAI(dep: DepCheckResult): AsyncGenerator<string> {\n const claudePath = await which('claude-internal');\n if (!claudePath) {\n yield t('cli.aiInstallUnavailable');\n return;\n }\n\n yield t('cli.aiInstalling', { name: dep.displayName });\n\n const osInfo = `${platform()} ${arch()}`;\n const prompt = `Please install ${dep.displayName} on the current system (${osInfo}).\\nReference hint: ${dep.installHint ?? dep.installCommand ?? dep.name}\\nAfter installation, verify it was successful by running the version check command.\\nIf you need to modify shell config files (e.g. .bashrc), do it directly.`;\n\n // Remove CLAUDECODE env var to prevent nested session detection\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { CLAUDECODE, ...env } = process.env;\n const proc = spawn('claude-internal', [\n '-p', prompt,\n '--dangerously-skip-permissions',\n ], {\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: false,\n env,\n });\n\n const { exitCode, timedOut } = yield* streamProcess(proc, AI_INSTALL_TIMEOUT_MS, true);\n\n if (timedOut) {\n yield t('cli.aiInstallTimeout', { name: dep.displayName, seconds: AI_INSTALL_TIMEOUT_MS / 1000 });\n return;\n }\n\n if (exitCode === 0) {\n yield t('cli.aiInstallSuccess', { name: dep.displayName });\n } else {\n yield t('cli.aiInstallFailed', { name: dep.displayName, code: exitCode });\n }\n }\n\n async *installAll(aiMode?: string): AsyncGenerator<InstallAllEvent> {\n yield { line: t('cli.installAllStart') };\n\n const installOrder: string[] = ['claude-internal'];\n if (aiMode === 'cursor-agent') {\n installOrder.push('cursor-agent');\n } else if (aiMode === 'codebuddy') {\n installOrder.push('codebuddy');\n }\n installOrder.push('node', 'git');\n\n let checks = await this.checkAll(aiMode);\n\n for (const depName of installOrder) {\n let dep = checks.find((d) => d.name === depName);\n if (!dep) continue;\n\n if (dep.installed) {\n yield { line: t('cli.skippingInstalled', { name: dep.displayName, version: dep.version ?? '' }) };\n continue;\n }\n\n const phase = dep.category === 'ai-cli' ? 'ai-cli' : 'toolchain';\n yield { phase, dep: depName, status: 'start' };\n\n let installed = false;\n let lineCount = 0;\n\n // Skip deps without installCommand (e.g. cursor-agent needs manual install)\n if (!dep.installCommand) {\n yield { line: t('cli.manualInstallRequired', { name: dep.displayName, hint: dep.installHint ?? '' }), dep: depName };\n yield { phase, dep: depName, status: 'done', installed: false };\n continue;\n }\n\n // Try installCommand first\n if (dep.installCommand) {\n yield { line: t('cli.installing', { name: dep.displayName }), dep: depName };\n yield { line: `$ ${dep.installCommand}`, dep: depName };\n\n const proc = spawn(dep.installCommand, {\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n });\n\n for await (const chunk of streamProcessLines(proc, INSTALL_TIMEOUT_MS)) {\n yield { line: chunk.line, dep: depName };\n lineCount += chunk.count;\n }\n\n if (lineCount === 0) {\n yield { line: t('cli.noOutput'), dep: depName };\n }\n\n yield { line: t('cli.verifyingInstall'), dep: depName };\n\n // Re-check installation\n checks = await this.checkAll(aiMode);\n dep = checks.find((d) => d.name === depName)!;\n installed = dep.installed;\n }\n\n // AI fallback for toolchain deps\n if (!installed && dep.aiInstallable) {\n const claudePath = await which('claude-internal');\n if (claudePath) {\n yield { line: t('cli.tryingAiFallback', { name: dep.displayName }), dep: depName };\n yield { phase: 'ai-fallback', dep: depName, status: 'start' };\n\n for await (const chunk of this.installWithAILines(dep)) {\n yield { line: chunk, dep: depName };\n }\n\n // Re-check installation\n checks = await this.checkAll(aiMode);\n dep = checks.find((d) => d.name === depName)!;\n installed = dep.installed;\n }\n }\n\n yield { phase, dep: depName, status: 'done', installed };\n }\n\n yield { line: t('cli.installAllDone') };\n }\n\n private async *installWithAILines(dep: DepCheckResult): AsyncGenerator<string> {\n for await (const line of this.installWithAI(dep)) {\n yield line;\n }\n }\n}\n\nasync function* streamProcess(\n proc: ChildProcess,\n timeoutMs: number,\n markStderr = false,\n): AsyncGenerator<string, { exitCode: number; timedOut: boolean; lineCount: number }> {\n const chunks: string[] = [];\n let notify: (() => void) | null = null;\n let closed = false;\n let closedCode = 1;\n let timedOut = false;\n let lineCount = 0;\n\n const onStdout = (d: Buffer) => {\n chunks.push(d.toString());\n notify?.();\n };\n const onStderr = (d: Buffer) => {\n const text = d.toString();\n chunks.push(markStderr ? `[stderr] ${text}` : text);\n notify?.();\n };\n proc.stdout?.on('data', onStdout);\n proc.stderr?.on('data', onStderr);\n\n proc.on('close', (code) => {\n closed = true;\n closedCode = code ?? 1;\n notify?.();\n });\n\n const timer = setTimeout(() => {\n timedOut = true;\n proc.kill('SIGTERM');\n setTimeout(() => { if (!closed) proc.kill('SIGKILL'); }, 5000);\n notify?.();\n }, timeoutMs);\n\n try {\n while (!closed || chunks.length > 0) {\n if (chunks.length > 0) {\n lineCount++;\n yield chunks.shift()!;\n } else if (!closed) {\n await new Promise<void>((r) => { notify = r; });\n notify = null;\n }\n }\n } finally {\n clearTimeout(timer);\n }\n\n return { exitCode: closedCode, timedOut, lineCount };\n}\n\nasync function* streamProcessLines(\n proc: ChildProcess,\n timeoutMs: number,\n): AsyncGenerator<{ line: string; count: number }> {\n const chunks: string[] = [];\n let notify: (() => void) | null = null;\n let closed = false;\n let timedOut = false;\n let count = 0;\n\n const onStdout = (d: Buffer) => {\n chunks.push(d.toString());\n notify?.();\n };\n const onStderr = (d: Buffer) => {\n chunks.push(`[stderr] ${d.toString()}`);\n notify?.();\n };\n proc.stdout?.on('data', onStdout);\n proc.stderr?.on('data', onStderr);\n\n proc.on('close', () => {\n closed = true;\n notify?.();\n });\n\n const timer = setTimeout(() => {\n timedOut = true;\n proc.kill('SIGTERM');\n setTimeout(() => { if (!closed) proc.kill('SIGKILL'); }, 5000);\n notify?.();\n }, timeoutMs);\n\n try {\n while (!closed || chunks.length > 0) {\n if (chunks.length > 0) {\n count++;\n yield { line: chunks.shift()!, count };\n } else if (!closed) {\n await new Promise<void>((r) => { notify = r; });\n notify = null;\n }\n }\n } finally {\n clearTimeout(timer);\n }\n\n if (timedOut) {\n yield { line: '[stderr] Process timed out', count };\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigGenerator.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/ConfigGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAI1E,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,EAAE,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigGenerator.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/ConfigGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export interface InstallAllEvent {
|
|
|
20
20
|
line?: string;
|
|
21
21
|
}
|
|
22
22
|
export declare class DependencyChecker {
|
|
23
|
-
checkAll(
|
|
23
|
+
checkAll(aiMode?: string): Promise<DepCheckResult[]>;
|
|
24
24
|
checkNode(): Promise<DepCheckResult>;
|
|
25
25
|
checkGit(): Promise<DepCheckResult>;
|
|
26
26
|
checkClaudeInternal(required: boolean): Promise<DepCheckResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/DependencyChecker.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAC;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuCD,qBAAa,iBAAiB;IACtB,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/DependencyChecker.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAC;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuCD,qBAAa,iBAAiB;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAapD,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAiBpC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAenC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB/D,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAoBvD,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB1D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAWrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IA4C7C,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;IAsC1D,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,eAAe,CAAC;YAsFpD,kBAAkB;CAKlC"}
|
|
@@ -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;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;
|
|
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-UKTP7LXS.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-ECUOKGM2.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-2BCP6AMK.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-LLETZLW2.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-Z3OBKODV.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-LLETZLW2.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-Y62E72TA.js";
|
|
4
|
+
import "./chunk-5M5SB6ZA.js";
|
|
5
|
+
import "./chunk-ENF24C44.js";
|
|
6
|
+
import "./chunk-Z3OBKODV.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-SEO57UYI.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 {
|