@xdevops/issue-auto-finish 1.0.0
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/bin/issue-auto-finish.js +2 -0
- package/dist/ai-runner/AIRunner.d.ts +27 -0
- package/dist/ai-runner/AIRunner.d.ts.map +1 -0
- package/dist/ai-runner/BaseAIRunner.d.ts +19 -0
- package/dist/ai-runner/BaseAIRunner.d.ts.map +1 -0
- package/dist/ai-runner/ClaudeInternalRunner.d.ts +13 -0
- package/dist/ai-runner/ClaudeInternalRunner.d.ts.map +1 -0
- package/dist/ai-runner/CodebuddyRunner.d.ts +13 -0
- package/dist/ai-runner/CodebuddyRunner.d.ts.map +1 -0
- package/dist/ai-runner/CursorAgentRunner.d.ts +13 -0
- package/dist/ai-runner/CursorAgentRunner.d.ts.map +1 -0
- package/dist/ai-runner/index.d.ts +15 -0
- package/dist/ai-runner/index.d.ts.map +1 -0
- package/dist/chunk-HCHEFK4Z.js +80 -0
- package/dist/chunk-HCHEFK4Z.js.map +1 -0
- package/dist/chunk-I3T573SU.js +153 -0
- package/dist/chunk-I3T573SU.js.map +1 -0
- package/dist/chunk-IDUKWCC2.js +1995 -0
- package/dist/chunk-IDUKWCC2.js.map +1 -0
- package/dist/chunk-OWVT3Z34.js +770 -0
- package/dist/chunk-OWVT3Z34.js.map +1 -0
- package/dist/chunk-RIUI4ROA.js +180 -0
- package/dist/chunk-RIUI4ROA.js.map +1 -0
- package/dist/chunk-TBIEB3JY.js +3295 -0
- package/dist/chunk-TBIEB3JY.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/start.d.ts +5 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/setup/ConfigGenerator.d.ts +44 -0
- package/dist/cli/setup/ConfigGenerator.d.ts.map +1 -0
- package/dist/cli/setup/DependencyChecker.d.ts +21 -0
- package/dist/cli/setup/DependencyChecker.d.ts.map +1 -0
- package/dist/cli.js +73 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/GongfengClient.d.ts +86 -0
- package/dist/clients/GongfengClient.d.ts.map +1 -0
- package/dist/config.d.ts +92 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/deploy/DevServerManager.d.ts +21 -0
- package/dist/deploy/DevServerManager.d.ts.map +1 -0
- package/dist/deploy/PortAllocator.d.ts +20 -0
- package/dist/deploy/PortAllocator.d.ts.map +1 -0
- package/dist/deploy/index.d.ts +3 -0
- package/dist/deploy/index.d.ts.map +1 -0
- package/dist/doctor-B26Q6JWI.js +33 -0
- package/dist/doctor-B26Q6JWI.js.map +1 -0
- package/dist/e2e/E2eSettings.d.ts +6 -0
- package/dist/e2e/E2eSettings.d.ts.map +1 -0
- package/dist/e2e/ScreenshotCollector.d.ts +11 -0
- package/dist/e2e/ScreenshotCollector.d.ts.map +1 -0
- package/dist/e2e/ScreenshotPublisher.d.ts +16 -0
- package/dist/e2e/ScreenshotPublisher.d.ts.map +1 -0
- package/dist/events/EventBus.d.ts +14 -0
- package/dist/events/EventBus.d.ts.map +1 -0
- package/dist/git/GitOperations.d.ts +30 -0
- package/dist/git/GitOperations.d.ts.map +1 -0
- package/dist/git/WorktreeContext.d.ts +9 -0
- package/dist/git/WorktreeContext.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +8 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/locales/en.d.ts +2 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/zh-CN.d.ts +2 -0
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/init-L3VIWCOV.js +65 -0
- package/dist/init-L3VIWCOV.js.map +1 -0
- package/dist/lib.d.ts +26 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +50 -0
- package/dist/lib.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/notesync/NoteSyncSettings.d.ts +12 -0
- package/dist/notesync/NoteSyncSettings.d.ts.map +1 -0
- package/dist/orchestrator/PipelineOrchestrator.d.ts +53 -0
- package/dist/orchestrator/PipelineOrchestrator.d.ts.map +1 -0
- package/dist/persistence/PlanPersistence.d.ts +37 -0
- package/dist/persistence/PlanPersistence.d.ts.map +1 -0
- package/dist/phases/AnalysisPhase.d.ts +13 -0
- package/dist/phases/AnalysisPhase.d.ts.map +1 -0
- package/dist/phases/BasePhase.d.ts +44 -0
- package/dist/phases/BasePhase.d.ts.map +1 -0
- package/dist/phases/BuildPhase.d.ts +9 -0
- package/dist/phases/BuildPhase.d.ts.map +1 -0
- package/dist/phases/DesignPhase.d.ts +13 -0
- package/dist/phases/DesignPhase.d.ts.map +1 -0
- package/dist/phases/ImplementPhase.d.ts +9 -0
- package/dist/phases/ImplementPhase.d.ts.map +1 -0
- package/dist/phases/PhaseFactory.d.ts +13 -0
- package/dist/phases/PhaseFactory.d.ts.map +1 -0
- package/dist/phases/PlanPhase.d.ts +14 -0
- package/dist/phases/PlanPhase.d.ts.map +1 -0
- package/dist/phases/VerifyPhase.d.ts +13 -0
- package/dist/phases/VerifyPhase.d.ts.map +1 -0
- package/dist/pipeline/PipelineDefinition.d.ts +40 -0
- package/dist/pipeline/PipelineDefinition.d.ts.map +1 -0
- package/dist/poller/IssuePoller.d.ts +26 -0
- package/dist/poller/IssuePoller.d.ts.map +1 -0
- package/dist/prompts/brainstorm-templates.d.ts +4 -0
- package/dist/prompts/brainstorm-templates.d.ts.map +1 -0
- package/dist/prompts/templates.d.ts +27 -0
- package/dist/prompts/templates.d.ts.map +1 -0
- package/dist/rules/RuleResolver.d.ts +13 -0
- package/dist/rules/RuleResolver.d.ts.map +1 -0
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/run.d.ts +2 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +15 -0
- package/dist/run.js.map +1 -0
- package/dist/services/BrainstormService.d.ts +39 -0
- package/dist/services/BrainstormService.d.ts.map +1 -0
- package/dist/start-TVN4SS6E.js +25 -0
- package/dist/start-TVN4SS6E.js.map +1 -0
- package/dist/supplement/SupplementStore.d.ts +21 -0
- package/dist/supplement/SupplementStore.d.ts.map +1 -0
- package/dist/tracker/IssueState.d.ts +63 -0
- package/dist/tracker/IssueState.d.ts.map +1 -0
- package/dist/tracker/IssueTracker.d.ts +29 -0
- package/dist/tracker/IssueTracker.d.ts.map +1 -0
- package/dist/utils/AsyncMutex.d.ts +14 -0
- package/dist/utils/AsyncMutex.d.ts.map +1 -0
- package/dist/utils/MergeRequestHelper.d.ts +10 -0
- package/dist/utils/MergeRequestHelper.d.ts.map +1 -0
- package/dist/web/AgentLogStore.d.ts +22 -0
- package/dist/web/AgentLogStore.d.ts.map +1 -0
- package/dist/web/WebServer.d.ts +26 -0
- package/dist/web/WebServer.d.ts.map +1 -0
- package/dist/web/routes/api.d.ts +20 -0
- package/dist/web/routes/api.d.ts.map +1 -0
- package/dist/web/routes/brainstorm.d.ts +9 -0
- package/dist/web/routes/brainstorm.d.ts.map +1 -0
- package/dist/web/routes/setup.d.ts +8 -0
- package/dist/web/routes/setup.d.ts.map +1 -0
- package/dist/webhook/CommandExecutor.d.ts +45 -0
- package/dist/webhook/CommandExecutor.d.ts.map +1 -0
- package/dist/webhook/CommandParser.d.ts +24 -0
- package/dist/webhook/CommandParser.d.ts.map +1 -0
- package/dist/webhook/IntentRecognizer.d.ts +35 -0
- package/dist/webhook/IntentRecognizer.d.ts.map +1 -0
- package/dist/webhook/NoteDeduplicator.d.ts +18 -0
- package/dist/webhook/NoteDeduplicator.d.ts.map +1 -0
- package/dist/webhook/WebhookHandler.d.ts +30 -0
- package/dist/webhook/WebhookHandler.d.ts.map +1 -0
- package/dist/webhook/WebhookServer.d.ts +21 -0
- package/dist/webhook/WebhookServer.d.ts.map +1 -0
- package/dist/webhook/index.d.ts +12 -0
- package/dist/webhook/index.d.ts.map +1 -0
- package/package.json +82 -0
- package/src/web/frontend/dist/assets/index-CQdlU9PE.js +65 -0
- package/src/web/frontend/dist/assets/index-CgMEkyZJ.css +1 -0
- package/src/web/frontend/dist/index.html +13 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface SetupConfig {
|
|
2
|
+
gongfeng: {
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
privateToken: string;
|
|
5
|
+
projectPath: string;
|
|
6
|
+
};
|
|
7
|
+
project: {
|
|
8
|
+
workDir: string;
|
|
9
|
+
gitRootDir?: string;
|
|
10
|
+
baseBranch?: string;
|
|
11
|
+
branchPrefix?: string;
|
|
12
|
+
worktreeBaseDir?: string;
|
|
13
|
+
projectSubDir?: string;
|
|
14
|
+
};
|
|
15
|
+
ai: {
|
|
16
|
+
mode: 'claude-internal' | 'cursor-agent' | 'codebuddy';
|
|
17
|
+
model?: string;
|
|
18
|
+
phaseTimeoutMs?: number;
|
|
19
|
+
};
|
|
20
|
+
poll?: {
|
|
21
|
+
discoveryIntervalMs?: number;
|
|
22
|
+
driveIntervalMs?: number;
|
|
23
|
+
maxRetries?: number;
|
|
24
|
+
maxConcurrent?: number;
|
|
25
|
+
};
|
|
26
|
+
web?: {
|
|
27
|
+
port?: number;
|
|
28
|
+
};
|
|
29
|
+
pipeline?: {
|
|
30
|
+
mode?: string;
|
|
31
|
+
};
|
|
32
|
+
review?: {
|
|
33
|
+
enabled?: boolean;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare class ConfigGenerator {
|
|
37
|
+
static getGlobalConfigDir(): string;
|
|
38
|
+
static getGlobalConfigPath(): string;
|
|
39
|
+
static isInitialized(configPath?: string): boolean;
|
|
40
|
+
static resolveConfigPath(configPath?: string): string;
|
|
41
|
+
static generate(config: SetupConfig): string;
|
|
42
|
+
static write(config: SetupConfig, outputPath?: string): string;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=ConfigGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigGenerator.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/ConfigGenerator.ts"],"names":[],"mappings":"AAIA,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,iBAAiB,GAAG,cAAc,GAAG,WAAW,CAAC;QACvD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,qBAAa,eAAe;IAC1B,MAAM,CAAC,kBAAkB,IAAI,MAAM;IAInC,MAAM,CAAC,mBAAmB,IAAI,MAAM;IAIpC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;IAKlD,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAOrD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IA2D5C,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;CAU/D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface DepCheckResult {
|
|
2
|
+
name: string;
|
|
3
|
+
displayName: string;
|
|
4
|
+
required: boolean;
|
|
5
|
+
installed: boolean;
|
|
6
|
+
version?: string;
|
|
7
|
+
installCommand?: string;
|
|
8
|
+
installHint?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class DependencyChecker {
|
|
11
|
+
checkAll(aiMode?: string): Promise<DepCheckResult[]>;
|
|
12
|
+
checkVolta(): Promise<DepCheckResult>;
|
|
13
|
+
checkNode(): Promise<DepCheckResult>;
|
|
14
|
+
checkGit(): Promise<DepCheckResult>;
|
|
15
|
+
checkPnpm(): Promise<DepCheckResult>;
|
|
16
|
+
checkClaudeInternal(required: boolean): Promise<DepCheckResult>;
|
|
17
|
+
checkCursor(required: boolean): Promise<DepCheckResult>;
|
|
18
|
+
checkCodebuddy(required: boolean): Promise<DepCheckResult>;
|
|
19
|
+
install(name: string): AsyncGenerator<string>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=DependencyChecker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/DependencyChecker.ts"],"names":[],"mappings":"AAGA,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;CACtB;AA8BD,qBAAa,iBAAiB;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAepD,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAYrC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAYpC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAYnC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAapC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAe/D,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAavD,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAezD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;CAyCrD"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/cli/index.ts
|
|
4
|
+
import { Command } from "commander";
|
|
5
|
+
import { readFileSync, existsSync } from "fs";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
import path from "path";
|
|
8
|
+
var __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
function findPackageJson() {
|
|
10
|
+
for (let dir = __dirname; dir !== path.dirname(dir); dir = path.dirname(dir)) {
|
|
11
|
+
const candidate = path.join(dir, "package.json");
|
|
12
|
+
if (existsSync(candidate)) {
|
|
13
|
+
try {
|
|
14
|
+
const content = JSON.parse(readFileSync(candidate, "utf-8"));
|
|
15
|
+
if (content.name === "issue-auto-finish") return candidate;
|
|
16
|
+
} catch {
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return path.resolve(__dirname, "../package.json");
|
|
21
|
+
}
|
|
22
|
+
var pkg = JSON.parse(readFileSync(findPackageJson(), "utf-8"));
|
|
23
|
+
var program = new Command();
|
|
24
|
+
program.name("issue-auto-finish").description("Issue Auto-Finish: AI-powered issue resolution daemon").version(pkg.version);
|
|
25
|
+
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) => {
|
|
26
|
+
const { initCommand } = await import("./init-L3VIWCOV.js");
|
|
27
|
+
await initCommand({ port: parseInt(opts.port, 10), config: opts.config });
|
|
28
|
+
});
|
|
29
|
+
program.command("start").description("Start the issue-auto-finish daemon service").option("-c, --config <path>", "Path to .env config file").action(async (opts) => {
|
|
30
|
+
const { startCommand } = await import("./start-TVN4SS6E.js");
|
|
31
|
+
await startCommand({ config: opts.config });
|
|
32
|
+
});
|
|
33
|
+
program.command("doctor").description("Check environment dependencies").action(async () => {
|
|
34
|
+
const { doctorCommand } = await import("./doctor-B26Q6JWI.js");
|
|
35
|
+
await doctorCommand();
|
|
36
|
+
});
|
|
37
|
+
program.command("status").description("Show service status").option("-p, --port <port>", "Web UI port to query", "3000").action(async (opts) => {
|
|
38
|
+
const port = parseInt(opts.port, 10);
|
|
39
|
+
try {
|
|
40
|
+
const resp = await fetch(`http://localhost:${port}/api/system/status`, {
|
|
41
|
+
signal: AbortSignal.timeout(5e3)
|
|
42
|
+
});
|
|
43
|
+
if (!resp.ok) {
|
|
44
|
+
console.error(` Service returned HTTP ${resp.status}`);
|
|
45
|
+
process.exitCode = 1;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const status = await resp.json();
|
|
49
|
+
console.log("\n Issue Auto-Finish Status\n");
|
|
50
|
+
const cfg = status.config;
|
|
51
|
+
const issues = status.issues;
|
|
52
|
+
console.log(` Uptime: ${formatUptime(status.uptime)}`);
|
|
53
|
+
console.log(` AI Mode: ${cfg?.aiMode ?? "unknown"}`);
|
|
54
|
+
console.log(` Pipeline: ${cfg?.pipelineMode ?? "unknown"}`);
|
|
55
|
+
console.log(` Issues: ${issues?.total ?? 0} total, ${issues?.active ?? 0} active`);
|
|
56
|
+
console.log("");
|
|
57
|
+
} catch {
|
|
58
|
+
console.error(`
|
|
59
|
+
Cannot connect to service at localhost:${port}.`);
|
|
60
|
+
console.error(" Is the service running? Start with: issue-auto-finish start\n");
|
|
61
|
+
process.exitCode = 1;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
function formatUptime(ms) {
|
|
65
|
+
const s = Math.floor(ms / 1e3);
|
|
66
|
+
const h = Math.floor(s / 3600);
|
|
67
|
+
const m = Math.floor(s % 3600 / 60);
|
|
68
|
+
if (h > 0) return `${h}h ${m}m`;
|
|
69
|
+
if (m > 0) return `${m}m ${s % 60}s`;
|
|
70
|
+
return `${s}s`;
|
|
71
|
+
}
|
|
72
|
+
program.parse();
|
|
73
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport path from 'node:path';\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 === '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\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);\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\nprogram\n .command('start')\n .description('Start the issue-auto-finish daemon service')\n .option('-c, --config <path>', 'Path to .env config file')\n .action(async (opts) => {\n const { startCommand } = await import('./commands/start.js');\n await startCommand({ config: opts.config });\n });\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\nprogram\n .command('status')\n .description('Show service status')\n .option('-p, --port <port>', 'Web UI port to query', '3000')\n .action(async (opts) => {\n const port = parseInt(opts.port, 10);\n try {\n const resp = await fetch(`http://localhost:${port}/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 Record<string, unknown>;\n console.log('\\n Issue Auto-Finish Status\\n');\n const cfg = status.config as Record<string, unknown> | undefined;\n const issues = status.issues as Record<string, unknown> | undefined;\n console.log(` Uptime: ${formatUptime(status.uptime as number)}`);\n console.log(` AI Mode: ${cfg?.aiMode ?? 'unknown'}`);\n console.log(` Pipeline: ${cfg?.pipelineMode ?? 'unknown'}`);\n console.log(` Issues: ${issues?.total ?? 0} total, ${issues?.active ?? 0} active`);\n console.log('');\n } catch {\n console.error(`\\n Cannot connect to service at localhost:${port}.`);\n console.error(' Is the service running? Start with: issue-auto-finish start\\n');\n process.exitCode = 1;\n }\n });\n\nfunction formatUptime(ms: number): string {\n const s = Math.floor(ms / 1000);\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n if (h > 0) return `${h}h ${m}m`;\n if (m > 0) return `${m}m ${s % 60}s`;\n return `${s}s`;\n}\n\nprogram.parse();\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export interface GongfengIssue {
|
|
2
|
+
id: number;
|
|
3
|
+
iid: number;
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
state: string;
|
|
7
|
+
labels: string[];
|
|
8
|
+
created_at: string;
|
|
9
|
+
updated_at: string;
|
|
10
|
+
author: {
|
|
11
|
+
username: string;
|
|
12
|
+
name: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface GongfengConfig {
|
|
16
|
+
apiUrl: string;
|
|
17
|
+
privateToken: string;
|
|
18
|
+
projectPath: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CreateMergeRequestOptions {
|
|
21
|
+
sourceBranch: string;
|
|
22
|
+
targetBranch: string;
|
|
23
|
+
title: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface GongfengMergeRequest {
|
|
27
|
+
id: number;
|
|
28
|
+
iid: number;
|
|
29
|
+
title: string;
|
|
30
|
+
web_url: string;
|
|
31
|
+
state: string;
|
|
32
|
+
source_branch?: string;
|
|
33
|
+
target_branch?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface UploadResult {
|
|
36
|
+
alt: string;
|
|
37
|
+
url: string;
|
|
38
|
+
markdown: string;
|
|
39
|
+
}
|
|
40
|
+
export interface GongfengNote {
|
|
41
|
+
id: number;
|
|
42
|
+
body: string;
|
|
43
|
+
author: {
|
|
44
|
+
username: string;
|
|
45
|
+
name: string;
|
|
46
|
+
};
|
|
47
|
+
created_at: string;
|
|
48
|
+
}
|
|
49
|
+
export declare const AGENT_NOTE_MARKER = "\n\n<!-- issue-auto-finish-agent -->";
|
|
50
|
+
export declare class GongfengClient {
|
|
51
|
+
private apiUrl;
|
|
52
|
+
private token;
|
|
53
|
+
private projectPath;
|
|
54
|
+
constructor(config: GongfengConfig);
|
|
55
|
+
private get projectApiBase();
|
|
56
|
+
private requestRaw;
|
|
57
|
+
private request;
|
|
58
|
+
createIssue(title: string, description: string, labels?: string[]): Promise<GongfengIssue>;
|
|
59
|
+
listIssues(state?: string, labels?: string): Promise<GongfengIssue[]>;
|
|
60
|
+
listIssuesAdvanced(options?: {
|
|
61
|
+
state?: string;
|
|
62
|
+
labels?: string;
|
|
63
|
+
search?: string;
|
|
64
|
+
page?: number;
|
|
65
|
+
perPage?: number;
|
|
66
|
+
}): Promise<{
|
|
67
|
+
issues: GongfengIssue[];
|
|
68
|
+
total: number;
|
|
69
|
+
}>;
|
|
70
|
+
getIssueDetail(issueId: number): Promise<GongfengIssue>;
|
|
71
|
+
createIssueNote(issueId: number, body: string): Promise<void>;
|
|
72
|
+
updateIssueLabels(issueId: number, labels: string[]): Promise<void>;
|
|
73
|
+
createMergeRequest(options: CreateMergeRequestOptions): Promise<GongfengMergeRequest>;
|
|
74
|
+
findMergeRequestByBranch(sourceBranch: string, targetBranch: string, state?: string): Promise<GongfengMergeRequest | null>;
|
|
75
|
+
private buildMergeRequestUrl;
|
|
76
|
+
uploadFile(filePath: string): Promise<UploadResult>;
|
|
77
|
+
createMergeRequestNote(mrIid: number, body: string): Promise<void>;
|
|
78
|
+
closeMergeRequest(mrIid: number): Promise<void>;
|
|
79
|
+
deleteIssue(issueId: number): Promise<void>;
|
|
80
|
+
closeIssue(issueId: number): Promise<void>;
|
|
81
|
+
listIssueNotes(issueId: number): Promise<GongfengNote[]>;
|
|
82
|
+
deleteIssueNote(issueId: number, noteId: number): Promise<void>;
|
|
83
|
+
cleanupAgentNotes(issueId: number): Promise<number>;
|
|
84
|
+
addLabel(issueId: number, label: string): Promise<void>;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=GongfengClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GongfengClient.d.ts","sourceRoot":"","sources":["../../src/clients/GongfengClient.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export interface Config {
|
|
2
|
+
gongfeng: {
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
privateToken: string;
|
|
5
|
+
projectPath: string;
|
|
6
|
+
};
|
|
7
|
+
project: {
|
|
8
|
+
workDir: string;
|
|
9
|
+
gitRootDir: string;
|
|
10
|
+
baseBranch: string;
|
|
11
|
+
branchPrefix: string;
|
|
12
|
+
worktreeBaseDir: string;
|
|
13
|
+
projectSubDir: string;
|
|
14
|
+
};
|
|
15
|
+
/** @deprecated Use ai instead */
|
|
16
|
+
claude?: {
|
|
17
|
+
binary: string;
|
|
18
|
+
phaseTimeoutMs: number;
|
|
19
|
+
nvmNodeVersion: string;
|
|
20
|
+
};
|
|
21
|
+
ai: {
|
|
22
|
+
mode: 'claude-internal' | 'cursor-agent' | 'codebuddy';
|
|
23
|
+
binary: string;
|
|
24
|
+
phaseTimeoutMs: number;
|
|
25
|
+
nvmNodeVersion: string;
|
|
26
|
+
model?: string;
|
|
27
|
+
};
|
|
28
|
+
poll: {
|
|
29
|
+
/** @deprecated Use discoveryIntervalMs instead */
|
|
30
|
+
intervalMs: number;
|
|
31
|
+
discoveryIntervalMs: number;
|
|
32
|
+
driveIntervalMs: number;
|
|
33
|
+
maxRetries: number;
|
|
34
|
+
maxConcurrent: number;
|
|
35
|
+
};
|
|
36
|
+
pipeline: {
|
|
37
|
+
mode: 'auto' | 'classic' | 'plan-mode';
|
|
38
|
+
};
|
|
39
|
+
review: {
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
autoApproveLabels: string[];
|
|
42
|
+
};
|
|
43
|
+
web: {
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
port: number;
|
|
46
|
+
frontendDistDir: string;
|
|
47
|
+
};
|
|
48
|
+
issueNoteSync: {
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
webBaseUrl: string;
|
|
51
|
+
};
|
|
52
|
+
webhook: {
|
|
53
|
+
enabled: boolean;
|
|
54
|
+
port: number;
|
|
55
|
+
secret: string;
|
|
56
|
+
/** Use LLM to parse natural-language commands when regex fails */
|
|
57
|
+
llmFallback: boolean;
|
|
58
|
+
/** Binary for LLM intent recognition (defaults to claude-internal, independent of AI_RUNNER_MODE) */
|
|
59
|
+
llmBinary: string;
|
|
60
|
+
};
|
|
61
|
+
e2e: {
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
baseUrl: string;
|
|
64
|
+
backendUrl: string;
|
|
65
|
+
authCookies: string;
|
|
66
|
+
backendPortBase: number;
|
|
67
|
+
frontendPortBase: number;
|
|
68
|
+
};
|
|
69
|
+
preview: {
|
|
70
|
+
enabled: boolean;
|
|
71
|
+
host: string;
|
|
72
|
+
ttlMs: number;
|
|
73
|
+
keepAfterComplete: boolean;
|
|
74
|
+
};
|
|
75
|
+
brainstorm: {
|
|
76
|
+
enabled: boolean;
|
|
77
|
+
maxRefinementRounds: number;
|
|
78
|
+
timeoutMs: number;
|
|
79
|
+
generator: BrainstormAgentConfig;
|
|
80
|
+
reviewer: BrainstormAgentConfig;
|
|
81
|
+
};
|
|
82
|
+
locale: 'zh-CN' | 'en';
|
|
83
|
+
}
|
|
84
|
+
export type AIRunnerMode = 'claude-internal' | 'cursor-agent' | 'codebuddy';
|
|
85
|
+
export interface BrainstormAgentConfig {
|
|
86
|
+
mode: AIRunnerMode;
|
|
87
|
+
binary: string;
|
|
88
|
+
nvmNodeVersion: string;
|
|
89
|
+
model?: string;
|
|
90
|
+
}
|
|
91
|
+
export declare function loadConfig(): Config;
|
|
92
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PortPair } from './PortAllocator.js';
|
|
2
|
+
import type { WorktreeContext } from '../git/WorktreeContext.js';
|
|
3
|
+
export interface DevServerManagerOptions {
|
|
4
|
+
healthCheckTimeoutMs: number;
|
|
5
|
+
healthCheckIntervalMs: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class DevServerManager {
|
|
8
|
+
private servers;
|
|
9
|
+
private options;
|
|
10
|
+
constructor(options?: Partial<DevServerManagerOptions>);
|
|
11
|
+
startServers(wtCtx: WorktreeContext, ports: PortPair): Promise<void>;
|
|
12
|
+
stopServers(issueIid: number): void;
|
|
13
|
+
stopAll(): void;
|
|
14
|
+
getStatus(issueIid: number): {
|
|
15
|
+
running: boolean;
|
|
16
|
+
ports?: PortPair;
|
|
17
|
+
startedAt?: string;
|
|
18
|
+
};
|
|
19
|
+
getRunningIssues(): number[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=DevServerManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevServerManager.d.ts","sourceRoot":"","sources":["../../src/deploy/DevServerManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAajE,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AA6CD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,OAAO,CAA0B;gBAE7B,OAAO,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAIhD,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6F1E,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAYnC,OAAO,IAAI,IAAI;IAMf,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAUvF,gBAAgB,IAAI,MAAM,EAAE;CAG7B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface PortPair {
|
|
2
|
+
backendPort: number;
|
|
3
|
+
frontendPort: number;
|
|
4
|
+
}
|
|
5
|
+
export interface PortAllocatorOptions {
|
|
6
|
+
backendPortBase: number;
|
|
7
|
+
frontendPortBase: number;
|
|
8
|
+
maxPorts: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class PortAllocator {
|
|
11
|
+
private allocated;
|
|
12
|
+
private options;
|
|
13
|
+
constructor(options?: Partial<PortAllocatorOptions>);
|
|
14
|
+
allocate(issueIid: number): Promise<PortPair>;
|
|
15
|
+
release(issueIid: number): void;
|
|
16
|
+
getPortsForIssue(issueIid: number): PortPair | undefined;
|
|
17
|
+
getAllAllocated(): Map<number, PortPair>;
|
|
18
|
+
restore(issueIid: number, ports: PortPair): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=PortAllocator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortAllocator.d.ts","sourceRoot":"","sources":["../../src/deploy/PortAllocator.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmBD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAI7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA6CnD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ/B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIxD,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIxC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI;CAIjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/deploy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DependencyChecker
|
|
3
|
+
} from "./chunk-RIUI4ROA.js";
|
|
4
|
+
import "./chunk-OWVT3Z34.js";
|
|
5
|
+
|
|
6
|
+
// src/cli/commands/doctor.ts
|
|
7
|
+
async function doctorCommand() {
|
|
8
|
+
const checker = new DependencyChecker();
|
|
9
|
+
console.log("\n Issue Auto-Finish - Environment Check\n");
|
|
10
|
+
const results = await checker.checkAll();
|
|
11
|
+
for (const dep of results) {
|
|
12
|
+
const icon = dep.installed ? "\u2705" : dep.required ? "\u274C" : "\u26A0\uFE0F";
|
|
13
|
+
const version = dep.version ? ` (${dep.version})` : "";
|
|
14
|
+
const label = dep.required ? "" : " [optional]";
|
|
15
|
+
console.log(` ${icon} ${dep.displayName}${version}${label}`);
|
|
16
|
+
if (!dep.installed && dep.installHint) {
|
|
17
|
+
console.log(` -> ${dep.installHint}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const missing = results.filter((d) => d.required && !d.installed);
|
|
21
|
+
console.log("");
|
|
22
|
+
if (missing.length > 0) {
|
|
23
|
+
console.log(` ${missing.length} required dependencies missing.`);
|
|
24
|
+
console.log(' Run "issue-auto-finish init" to set up interactively.\n');
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
} else {
|
|
27
|
+
console.log(" All required dependencies are installed.\n");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
doctorCommand
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=doctor-B26Q6JWI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/doctor.ts"],"sourcesContent":["import { DependencyChecker } from '../setup/DependencyChecker.js';\n\nexport async function doctorCommand(): Promise<void> {\n const checker = new DependencyChecker();\n console.log('\\n Issue Auto-Finish - Environment Check\\n');\n\n const results = await checker.checkAll();\n\n for (const dep of results) {\n const icon = dep.installed ? '\\u2705' : (dep.required ? '\\u274C' : '\\u26A0\\uFE0F');\n const version = dep.version ? ` (${dep.version})` : '';\n const label = dep.required ? '' : ' [optional]';\n console.log(` ${icon} ${dep.displayName}${version}${label}`);\n if (!dep.installed && dep.installHint) {\n console.log(` -> ${dep.installHint}`);\n }\n }\n\n const missing = results.filter((d) => d.required && !d.installed);\n console.log('');\n if (missing.length > 0) {\n console.log(` ${missing.length} required dependencies missing.`);\n console.log(' Run \"issue-auto-finish init\" to set up interactively.\\n');\n process.exitCode = 1;\n } else {\n console.log(' All required dependencies are installed.\\n');\n }\n}\n"],"mappings":";;;;;;AAEA,eAAsB,gBAA+B;AACnD,QAAM,UAAU,IAAI,kBAAkB;AACtC,UAAQ,IAAI,6CAA6C;AAEzD,QAAM,UAAU,MAAM,QAAQ,SAAS;AAEvC,aAAW,OAAO,SAAS;AACzB,UAAM,OAAO,IAAI,YAAY,WAAY,IAAI,WAAW,WAAW;AACnE,UAAM,UAAU,IAAI,UAAU,KAAK,IAAI,OAAO,MAAM;AACpD,UAAM,QAAQ,IAAI,WAAW,KAAK;AAClC,YAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,WAAW,GAAG,OAAO,GAAG,KAAK,EAAE;AAC5D,QAAI,CAAC,IAAI,aAAa,IAAI,aAAa;AACrC,cAAQ,IAAI,WAAW,IAAI,WAAW,EAAE;AAAA,IAC1C;AAAA,EACF;AAEA,QAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,SAAS;AAChE,UAAQ,IAAI,EAAE;AACd,MAAI,QAAQ,SAAS,GAAG;AACtB,YAAQ,IAAI,KAAK,QAAQ,MAAM,iCAAiC;AAChE,YAAQ,IAAI,2DAA2D;AACvE,YAAQ,WAAW;AAAA,EACrB,OAAO;AACL,YAAQ,IAAI,8CAA8C;AAAA,EAC5D;AACF;","names":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Config } from '../config.js';
|
|
2
|
+
import type { IssueTracker } from '../tracker/IssueTracker.js';
|
|
3
|
+
export declare function getE2eEnabled(cfg: Config): boolean;
|
|
4
|
+
export declare function setE2eOverride(value: boolean | undefined): void;
|
|
5
|
+
export declare function isE2eEnabledForIssue(issueIid: number, tracker: IssueTracker, cfg: Config): boolean;
|
|
6
|
+
//# sourceMappingURL=E2eSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"E2eSettings.d.ts","sourceRoot":"","sources":["../../src/e2e/E2eSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAE/D;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAIT"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ScreenshotFile {
|
|
2
|
+
filePath: string;
|
|
3
|
+
testName: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* 从 worktree 的 frontend/test-results/ 目录收集 E2E 截图。
|
|
7
|
+
* Playwright 以 `screenshot: 'on'` 运行时,每个测试的截图保存在
|
|
8
|
+
* `test-results/<project>-<test-name>-<browser>/` 子目录下。
|
|
9
|
+
*/
|
|
10
|
+
export declare function collectScreenshots(workDir: string): ScreenshotFile[];
|
|
11
|
+
//# sourceMappingURL=ScreenshotCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotCollector.d.ts","sourceRoot":"","sources":["../../src/e2e/ScreenshotCollector.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CA6BpE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { GongfengClient } from '../clients/GongfengClient.js';
|
|
2
|
+
export interface PublishOptions {
|
|
3
|
+
workDir: string;
|
|
4
|
+
issueIid: number;
|
|
5
|
+
issueId: number;
|
|
6
|
+
mrIid?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class ScreenshotPublisher {
|
|
9
|
+
private gongfeng;
|
|
10
|
+
constructor(gongfeng: GongfengClient);
|
|
11
|
+
publish(options: PublishOptions): Promise<void>;
|
|
12
|
+
private uploadAll;
|
|
13
|
+
private postToIssue;
|
|
14
|
+
private postToMergeRequest;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ScreenshotPublisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotPublisher.d.ts","sourceRoot":"","sources":["../../src/e2e/ScreenshotPublisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,MAAM,8BAA8B,CAAC;AAO5E,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAqBD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,cAAc;IAEtC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;YA+BvC,SAAS;YAqBT,WAAW;YAWX,kBAAkB;CAUjC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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';
|
|
3
|
+
export interface EventPayload {
|
|
4
|
+
type: EventType;
|
|
5
|
+
data: unknown;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
}
|
|
8
|
+
declare class EventBusImpl extends EventEmitter {
|
|
9
|
+
emit(event: string | symbol, ...args: unknown[]): boolean;
|
|
10
|
+
emitTyped(type: EventType, data: unknown): void;
|
|
11
|
+
}
|
|
12
|
+
export declare const eventBus: EventBusImpl;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=EventBus.d.ts.map
|
|
@@ -0,0 +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,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,YAAa,SAAQ,YAAY;IACrC,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,eAAO,MAAM,QAAQ,cAAqB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare class GitOperations {
|
|
2
|
+
private workDir;
|
|
3
|
+
constructor(workDir: string);
|
|
4
|
+
private exec;
|
|
5
|
+
fetchAndPull(branch: string): Promise<void>;
|
|
6
|
+
fetch(): Promise<void>;
|
|
7
|
+
createBranch(name: string, from: string): Promise<void>;
|
|
8
|
+
checkout(branch: string): Promise<void>;
|
|
9
|
+
add(files: string[]): Promise<void>;
|
|
10
|
+
commit(message: string): Promise<void>;
|
|
11
|
+
push(branch: string): Promise<void>;
|
|
12
|
+
branchExists(name: string): Promise<boolean>;
|
|
13
|
+
remoteBranchExists(name: string): Promise<boolean>;
|
|
14
|
+
getCurrentBranch(): Promise<string>;
|
|
15
|
+
stash(): Promise<void>;
|
|
16
|
+
stashPop(): Promise<void>;
|
|
17
|
+
hasChanges(): Promise<boolean>;
|
|
18
|
+
addAndCommit(files: string[], message: string): Promise<void>;
|
|
19
|
+
checkoutTrack(remoteBranch: string): Promise<void>;
|
|
20
|
+
addCommitAndPush(files: string[], message: string, branch: string): Promise<void>;
|
|
21
|
+
deleteBranch(name: string): Promise<void>;
|
|
22
|
+
deleteRemoteBranch(name: string): Promise<void>;
|
|
23
|
+
worktreeAdd(dir: string, newBranch: string, startPoint: string): Promise<void>;
|
|
24
|
+
worktreeAddExisting(dir: string, branch: string): Promise<void>;
|
|
25
|
+
worktreeAddTracking(dir: string, remoteBranch: string): Promise<void>;
|
|
26
|
+
worktreeRemove(dir: string, force?: boolean): Promise<void>;
|
|
27
|
+
worktreeList(): Promise<string[]>;
|
|
28
|
+
showFile(ref: string, filePath: string): Promise<string | null>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=GitOperations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitOperations.d.ts","sourceRoot":"","sources":["../../src/git/GitOperations.ts"],"names":[],"mappings":"AAOA,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;YAIb,IAAI;IAUZ,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASlD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK9B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQjC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAOtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorktreeContext.d.ts","sourceRoot":"","sources":["../../src/git/WorktreeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type Locale = 'zh-CN' | 'en';
|
|
2
|
+
type MessageMap = Record<string, string>;
|
|
3
|
+
export declare function setLocale(locale: Locale): void;
|
|
4
|
+
export declare function getLocale(): Locale;
|
|
5
|
+
export declare function registerLocale(locale: Locale, messages: MessageMap): void;
|
|
6
|
+
export declare function t(key: string, params?: Record<string, string | number>): string;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAEpC,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAKzC,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI,CAEzE;AAED,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAc/E"}
|
|
@@ -0,0 +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,CAwYrC,CAAC"}
|
|
@@ -0,0 +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,CAwYvC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA6D1C"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
main
|
|
3
|
+
} from "./chunk-IDUKWCC2.js";
|
|
4
|
+
import "./chunk-TBIEB3JY.js";
|
|
5
|
+
import "./chunk-I3T573SU.js";
|
|
6
|
+
import "./chunk-HCHEFK4Z.js";
|
|
7
|
+
import "./chunk-RIUI4ROA.js";
|
|
8
|
+
import "./chunk-OWVT3Z34.js";
|
|
9
|
+
export {
|
|
10
|
+
main
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|