@xdevops/issue-auto-finish 1.0.96 → 1.0.98
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/{PtyRunner-UD3M7GNM.js → PtyRunner-AVP7C4HC.js} +2 -2
- package/dist/ai-runner/AIRunner.d.ts +2 -4
- package/dist/ai-runner/AIRunner.d.ts.map +1 -1
- package/dist/ai-runner/PlanFileResolver.d.ts +20 -3
- package/dist/ai-runner/PlanFileResolver.d.ts.map +1 -1
- package/dist/ai-runner/PtyRunner.d.ts.map +1 -1
- package/dist/{ai-runner-6OQYGU56.js → ai-runner-GPHHQKUT.js} +2 -2
- package/dist/{analyze-LZHS3MHW.js → analyze-SYJXCCU7.js} +2 -2
- package/dist/{braindump-7QDUYUZW.js → braindump-QIUTH777.js} +2 -2
- package/dist/{chunk-P6KYWBMT.js → chunk-APROB5LF.js} +9 -9
- package/dist/{chunk-75ANI33A.js → chunk-CKYGI2V2.js} +1 -1
- package/dist/{chunk-W553OKAJ.js → chunk-DUQUGPMI.js} +32 -66
- package/dist/chunk-DUQUGPMI.js.map +1 -0
- package/dist/{chunk-AFGUFM6H.js → chunk-URL4HZ66.js} +2 -2
- package/dist/{chunk-SJSVO46Z.js → chunk-XOOKCEAK.js} +92 -76
- package/dist/chunk-XOOKCEAK.js.map +1 -0
- package/dist/cli.js +5 -5
- package/dist/hooks/HookInjector.d.ts +0 -6
- package/dist/hooks/HookInjector.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/{init-Q4DTX6JN.js → init-FDXIJNXF.js} +2 -2
- package/dist/lib.js +2 -2
- package/dist/orchestrator/steps/PhaseHelpers.d.ts +1 -1
- package/dist/orchestrator/steps/PhaseHelpers.d.ts.map +1 -1
- package/dist/orchestrator/steps/SetupStep.d.ts +0 -7
- package/dist/orchestrator/steps/SetupStep.d.ts.map +1 -1
- package/dist/phases/BasePhase.d.ts.map +1 -1
- package/dist/{restart-CEFVMQLL.js → restart-BRO6NIID.js} +2 -2
- package/dist/run.js +4 -4
- package/dist/{start-JYVFJZCL.js → start-ZIJDXV56.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-SJSVO46Z.js.map +0 -1
- package/dist/chunk-W553OKAJ.js.map +0 -1
- /package/dist/{PtyRunner-UD3M7GNM.js.map → PtyRunner-AVP7C4HC.js.map} +0 -0
- /package/dist/{ai-runner-6OQYGU56.js.map → ai-runner-GPHHQKUT.js.map} +0 -0
- /package/dist/{analyze-LZHS3MHW.js.map → analyze-SYJXCCU7.js.map} +0 -0
- /package/dist/{braindump-7QDUYUZW.js.map → braindump-QIUTH777.js.map} +0 -0
- /package/dist/{chunk-P6KYWBMT.js.map → chunk-APROB5LF.js.map} +0 -0
- /package/dist/{chunk-75ANI33A.js.map → chunk-CKYGI2V2.js.map} +0 -0
- /package/dist/{chunk-AFGUFM6H.js.map → chunk-URL4HZ66.js.map} +0 -0
- /package/dist/{init-Q4DTX6JN.js.map → init-FDXIJNXF.js.map} +0 -0
- /package/dist/{restart-CEFVMQLL.js.map → restart-BRO6NIID.js.map} +0 -0
- /package/dist/{start-JYVFJZCL.js.map → start-ZIJDXV56.js.map} +0 -0
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
isTuiNoise,
|
|
13
13
|
parseInteractiveDialog,
|
|
14
14
|
stripAnsi
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-XOOKCEAK.js";
|
|
16
16
|
import "./chunk-TFEPHOVE.js";
|
|
17
17
|
import "./chunk-G7QI5WDI.js";
|
|
18
18
|
import "./chunk-2RWGZPNF.js";
|
|
@@ -32,4 +32,4 @@ export {
|
|
|
32
32
|
parseInteractiveDialog,
|
|
33
33
|
stripAnsi
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=PtyRunner-
|
|
35
|
+
//# sourceMappingURL=PtyRunner-AVP7C4HC.js.map
|
|
@@ -26,6 +26,8 @@ export interface RunOptions {
|
|
|
26
26
|
mode?: string;
|
|
27
27
|
/** Current pipeline phase name — used by PtyRunner for per-phase agent selection */
|
|
28
28
|
phaseName?: string;
|
|
29
|
+
/** Issue title — used by PlanFileResolver for content-based plan file matching */
|
|
30
|
+
issueTitle?: string;
|
|
29
31
|
/** PTY 产物门控:返回 true 表示预期产物已就绪,false 时 PtyRunner 不会声明完成 */
|
|
30
32
|
artifactCheck?: () => boolean;
|
|
31
33
|
/** 预期产物文件的完整路径列表(用于 PtyRunner 原生 plan mode 的 commit 步骤) */
|
|
@@ -39,10 +41,6 @@ export interface RunOptions {
|
|
|
39
41
|
/** When PTY output matches this regex, immediately signal task completion (skip debounce).
|
|
40
42
|
* Used by native plan mode to detect the plan confirmation dialog. */
|
|
41
43
|
completionSignal?: RegExp;
|
|
42
|
-
/** Hook event name that should trigger completion when detected via HookEventWatcher.
|
|
43
|
-
* Used as a fallback when completionSignal regex fails to match PTY output.
|
|
44
|
-
* A grace period (5s) is applied to let the primary signal match first. */
|
|
45
|
-
completionHookEvent?: string;
|
|
46
44
|
onStreamEvent?: (event: StreamEvent) => void;
|
|
47
45
|
onInputRequired?: (request: InputRequest) => Promise<string>;
|
|
48
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRunner.d.ts","sourceRoot":"","sources":["../../src/ai-runner/AIRunner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,eAAe,GAAG,oBAAoB,GAAG,SAAS,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9B,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,uGAAuG;IACvG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;2EACuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B
|
|
1
|
+
{"version":3,"file":"AIRunner.d.ts","sourceRoot":"","sources":["../../src/ai-runner/AIRunner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,eAAe,GAAG,oBAAoB,GAAG,SAAS,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9B,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,uGAAuG;IACvG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;2EACuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IACpC;oFACgF;IAChF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,IAAI,IAAI,CAAC;IAChB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,gFAAgF;IAChF,kBAAkB,CAAC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;CACrD"}
|
|
@@ -10,13 +10,26 @@ export interface ResolvedPlanFile {
|
|
|
10
10
|
* optional content-based validation to handle concurrent plan generation.
|
|
11
11
|
*/
|
|
12
12
|
export declare class PlanFileResolver {
|
|
13
|
+
/** Plan files older than this are removed before snapshot (2 hours). */
|
|
14
|
+
static readonly STALE_THRESHOLD_MS: number;
|
|
15
|
+
/** Resolved plan files shorter than this are considered empty/fragment. */
|
|
16
|
+
static readonly MIN_PLAN_BYTES = 200;
|
|
13
17
|
private readonly plansDir;
|
|
14
18
|
private beforeFiles;
|
|
15
19
|
constructor(plansDir?: string);
|
|
16
20
|
/** Create a resolver for a specific runner mode (e.g. 'claude-internal', 'codebuddy'). */
|
|
17
21
|
static forRunner(agentMode: string): PlanFileResolver;
|
|
18
|
-
/**
|
|
19
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Take a snapshot of existing plan files before the plan phase starts.
|
|
24
|
+
* Optionally removes stale files (older than STALE_THRESHOLD_MS) to reduce
|
|
25
|
+
* noise in the snapshot diff.
|
|
26
|
+
*/
|
|
27
|
+
takeBeforeSnapshot(cleanStale?: boolean): void;
|
|
28
|
+
/**
|
|
29
|
+
* Remove plan files older than STALE_THRESHOLD_MS to prevent accumulation
|
|
30
|
+
* that confuses snapshot-based resolution on long-lived machines.
|
|
31
|
+
*/
|
|
32
|
+
private removeStaleFiles;
|
|
20
33
|
/**
|
|
21
34
|
* Check if any new or modified plan files exist since the before-snapshot.
|
|
22
35
|
* Used as an artifact gate by detectCompletion to prevent premature
|
|
@@ -41,7 +54,6 @@ export declare class PlanFileResolver {
|
|
|
41
54
|
static buildContentHint(issueIid: number, issueTitle?: string): string;
|
|
42
55
|
private listFiles;
|
|
43
56
|
private findNewFiles;
|
|
44
|
-
private isMetadataFile;
|
|
45
57
|
/**
|
|
46
58
|
* Fallback: if no new files found (rare case — plan might have overwritten
|
|
47
59
|
* an existing file), find the most recently modified file.
|
|
@@ -49,6 +61,11 @@ export declare class PlanFileResolver {
|
|
|
49
61
|
private fallbackByMtime;
|
|
50
62
|
private matchByContent;
|
|
51
63
|
private contentMatches;
|
|
64
|
+
/**
|
|
65
|
+
* Read and validate a candidate, warning if content is below MIN_PLAN_BYTES.
|
|
66
|
+
* Returns the file even if short (caller may still use it as best-effort).
|
|
67
|
+
*/
|
|
68
|
+
private readAndValidate;
|
|
52
69
|
private readCandidate;
|
|
53
70
|
}
|
|
54
71
|
//# sourceMappingURL=PlanFileResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanFileResolver.d.ts","sourceRoot":"","sources":["../../src/ai-runner/PlanFileResolver.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"PlanFileResolver.d.ts","sourceRoot":"","sources":["../../src/ai-runner/PlanFileResolver.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAQD;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,wEAAwE;IACxE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,SAAsB;IACxD,2EAA2E;IAC3E,MAAM,CAAC,QAAQ,CAAC,cAAc,OAAO;IAErC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,WAAW,CAAkC;gBAEzC,QAAQ,CAAC,EAAE,MAAM;IAI7B,0FAA0F;IAC1F,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAKrD;;;;OAIG;IACH,kBAAkB,CAAC,UAAU,UAAO,GAAG,IAAI;IAW3C;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;;;OAIG;IACH,qBAAqB,IAAI,OAAO;IAShC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAqCtD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAMtE,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,YAAY;IAUpB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,cAAc;IAKtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,aAAa;CActB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PtyRunner.d.ts","sourceRoot":"","sources":["../../src/ai-runner/PtyRunner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PtyRunner.d.ts","sourceRoot":"","sources":["../../src/ai-runner/PtyRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import "./chunk-MSL7ROVK.js";
|
|
|
2
2
|
import {
|
|
3
3
|
PlanFileResolver,
|
|
4
4
|
PtyRunner
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-XOOKCEAK.js";
|
|
6
6
|
import {
|
|
7
7
|
SdkRunner
|
|
8
8
|
} from "./chunk-R32Q3RGK.js";
|
|
@@ -54,4 +54,4 @@ export {
|
|
|
54
54
|
usesDeterministicPlanCopy,
|
|
55
55
|
validateRunnerRegistry
|
|
56
56
|
};
|
|
57
|
-
//# sourceMappingURL=ai-runner-
|
|
57
|
+
//# sourceMappingURL=ai-runner-GPHHQKUT.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./chunk-MSL7ROVK.js";
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-XOOKCEAK.js";
|
|
3
3
|
import "./chunk-R32Q3RGK.js";
|
|
4
4
|
import {
|
|
5
5
|
analyze
|
|
@@ -77,4 +77,4 @@ async function analyzeCommand(opts) {
|
|
|
77
77
|
export {
|
|
78
78
|
analyzeCommand
|
|
79
79
|
};
|
|
80
|
-
//# sourceMappingURL=analyze-
|
|
80
|
+
//# sourceMappingURL=analyze-SYJXCCU7.js.map
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
GitOperations
|
|
16
16
|
} from "./chunk-GPZX4DSY.js";
|
|
17
17
|
import "./chunk-MSL7ROVK.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-XOOKCEAK.js";
|
|
19
19
|
import "./chunk-R32Q3RGK.js";
|
|
20
20
|
import "./chunk-ACVOOHAR.js";
|
|
21
21
|
import "./chunk-B7TVVODN.js";
|
|
@@ -209,4 +209,4 @@ ${bold("\u786E\u8BA4\u6267\u884C\uFF1F")} (${green("y")}=\u786E\u8BA4 / ${red("q
|
|
|
209
209
|
export {
|
|
210
210
|
braindumpCommand
|
|
211
211
|
};
|
|
212
|
-
//# sourceMappingURL=braindump-
|
|
212
|
+
//# sourceMappingURL=braindump-QIUTH777.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-5M5SB6ZA.js";
|
|
5
5
|
import {
|
|
6
6
|
createSetupRouter
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-URL4HZ66.js";
|
|
8
8
|
import {
|
|
9
9
|
buildLockNoteBody,
|
|
10
10
|
buildReleaseNoteBody,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
setE2eOverride,
|
|
39
39
|
setNoteSyncOverride,
|
|
40
40
|
validatePhaseRegistry
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-DUQUGPMI.js";
|
|
42
42
|
import {
|
|
43
43
|
AsyncMutex,
|
|
44
44
|
BaseTracker,
|
|
@@ -2458,7 +2458,7 @@ function createKnowledgeRouter(deps) {
|
|
|
2458
2458
|
heartbeat = setInterval(() => {
|
|
2459
2459
|
sendProgress({ step: "analyzing", current: 2, total, message: "AI \u5206\u6790\u4E2D...", elapsed: Date.now() - aiStart });
|
|
2460
2460
|
}, 3e3);
|
|
2461
|
-
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-
|
|
2461
|
+
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-GPHHQKUT.js");
|
|
2462
2462
|
const runner = createAIRunner2(config.ai);
|
|
2463
2463
|
const { analyze } = await import("./KnowledgeAnalyzer-MTTTSSHX.js");
|
|
2464
2464
|
const knowledge = await analyze({ workDir, aiRunner: runner, syncToProject: config.sync.knowledgeToProject });
|
|
@@ -2503,7 +2503,7 @@ function createKnowledgeRouter(deps) {
|
|
|
2503
2503
|
(async () => {
|
|
2504
2504
|
try {
|
|
2505
2505
|
sendProgress({ step: "collecting", current: 1, total, message: "\u68C0\u6D4B\u53D8\u66F4\u5E76\u6536\u96C6\u4FE1\u606F..." });
|
|
2506
|
-
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-
|
|
2506
|
+
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-GPHHQKUT.js");
|
|
2507
2507
|
const { analyzeIncremental } = await import("./KnowledgeAnalyzer-MTTTSSHX.js");
|
|
2508
2508
|
const runner = createAIRunner2(config.ai);
|
|
2509
2509
|
sendProgress({ step: "analyzing", current: 2, total, message: "\u589E\u91CF\u5206\u6790\u4E2D..." });
|
|
@@ -2787,7 +2787,7 @@ function createDomainModelRouter(deps) {
|
|
|
2787
2787
|
}
|
|
2788
2788
|
(async () => {
|
|
2789
2789
|
try {
|
|
2790
|
-
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-
|
|
2790
|
+
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-GPHHQKUT.js");
|
|
2791
2791
|
const runner = createAIRunner2(config.ai);
|
|
2792
2792
|
const model = await analyzer.analyze({
|
|
2793
2793
|
workDir: config.project.workDir,
|
|
@@ -3001,7 +3001,7 @@ function createSystemUseCaseRouter(deps) {
|
|
|
3001
3001
|
}
|
|
3002
3002
|
(async () => {
|
|
3003
3003
|
try {
|
|
3004
|
-
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-
|
|
3004
|
+
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-GPHHQKUT.js");
|
|
3005
3005
|
const runner = createAIRunner2(config.ai);
|
|
3006
3006
|
const model = await analyzer.analyze({
|
|
3007
3007
|
workDir: config.project.workDir,
|
|
@@ -3191,7 +3191,7 @@ function createSystemUseCaseRouter(deps) {
|
|
|
3191
3191
|
res.status(404).json({ error: "No domain model loaded \u2014 run domain analysis first" });
|
|
3192
3192
|
return;
|
|
3193
3193
|
}
|
|
3194
|
-
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-
|
|
3194
|
+
const { createAIRunner: createAIRunner2 } = await import("./ai-runner-GPHHQKUT.js");
|
|
3195
3195
|
const runner = createAIRunner2(config.ai);
|
|
3196
3196
|
const associations = await analyzer.suggestDomainAssociations(
|
|
3197
3197
|
useCaseModel,
|
|
@@ -8883,7 +8883,7 @@ async function main() {
|
|
|
8883
8883
|
let sharedTerminalManager;
|
|
8884
8884
|
if (config.ai.mode === "pty") {
|
|
8885
8885
|
const { TerminalManager: TerminalManager2 } = await import("./TerminalManager-RT2N7N5R.js");
|
|
8886
|
-
const { PtyRunner } = await import("./PtyRunner-
|
|
8886
|
+
const { PtyRunner } = await import("./PtyRunner-AVP7C4HC.js");
|
|
8887
8887
|
const { registerAIRunner: regRunner, getPtyProfile } = await import("./AIRunnerRegistry-CFDNWSXC.js");
|
|
8888
8888
|
const allPtyAgents = /* @__PURE__ */ new Set([
|
|
8889
8889
|
config.pty.defaultAgent,
|
|
@@ -9303,4 +9303,4 @@ function migrateKnowledgeDir(srcDir, destDir) {
|
|
|
9303
9303
|
export {
|
|
9304
9304
|
main
|
|
9305
9305
|
};
|
|
9306
|
-
//# sourceMappingURL=chunk-
|
|
9306
|
+
//# sourceMappingURL=chunk-APROB5LF.js.map
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
} from "./chunk-GPZX4DSY.js";
|
|
21
21
|
import {
|
|
22
22
|
HookInjector
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-XOOKCEAK.js";
|
|
24
24
|
import {
|
|
25
25
|
getProjectKnowledge
|
|
26
26
|
} from "./chunk-ACVOOHAR.js";
|
|
@@ -236,8 +236,8 @@ var GongfengClient = class {
|
|
|
236
236
|
const encoded = encodeURIComponent(this.projectPath);
|
|
237
237
|
return `${this.apiUrl}/api/v3/projects/${encoded}`;
|
|
238
238
|
}
|
|
239
|
-
async requestRaw(
|
|
240
|
-
const url = `${this.projectApiBase}${
|
|
239
|
+
async requestRaw(path12, options = {}) {
|
|
240
|
+
const url = `${this.projectApiBase}${path12}`;
|
|
241
241
|
logger4.debug("API request", { method: options.method || "GET", url });
|
|
242
242
|
return this.circuitBreaker.execute(
|
|
243
243
|
() => this.retryPolicy.execute(async () => {
|
|
@@ -254,11 +254,11 @@ var GongfengClient = class {
|
|
|
254
254
|
throw new GongfengApiError(resp.status, `Gongfeng API error ${resp.status}: ${body}`, body);
|
|
255
255
|
}
|
|
256
256
|
return resp;
|
|
257
|
-
}, `requestRaw ${options.method || "GET"} ${
|
|
257
|
+
}, `requestRaw ${options.method || "GET"} ${path12}`)
|
|
258
258
|
);
|
|
259
259
|
}
|
|
260
|
-
async request(
|
|
261
|
-
const resp = await this.requestRaw(
|
|
260
|
+
async request(path12, options = {}) {
|
|
261
|
+
const resp = await this.requestRaw(path12, options);
|
|
262
262
|
return resp.json();
|
|
263
263
|
}
|
|
264
264
|
async createIssue(title, description, labels) {
|
|
@@ -437,8 +437,8 @@ var GongfengClient = class {
|
|
|
437
437
|
}
|
|
438
438
|
return mr;
|
|
439
439
|
}
|
|
440
|
-
async requestGlobal(
|
|
441
|
-
const url = `${this.apiUrl}${
|
|
440
|
+
async requestGlobal(path12, options = {}) {
|
|
441
|
+
const url = `${this.apiUrl}${path12}`;
|
|
442
442
|
logger4.debug("API request (global)", { method: options.method || "GET", url });
|
|
443
443
|
const resp = await this.circuitBreaker.execute(
|
|
444
444
|
() => this.retryPolicy.execute(async () => {
|
|
@@ -455,7 +455,7 @@ var GongfengClient = class {
|
|
|
455
455
|
throw new GongfengApiError(r.status, `Gongfeng API error ${r.status}: ${body}`, body);
|
|
456
456
|
}
|
|
457
457
|
return r;
|
|
458
|
-
}, `requestGlobal ${options.method || "GET"} ${
|
|
458
|
+
}, `requestGlobal ${options.method || "GET"} ${path12}`)
|
|
459
459
|
);
|
|
460
460
|
return resp.json();
|
|
461
461
|
}
|
|
@@ -1902,6 +1902,7 @@ ${t("basePhase.rulesSection", { rules })}`;
|
|
|
1902
1902
|
timeoutMaxExtensions: this.config.ai.timeoutMaxExtensions,
|
|
1903
1903
|
mode: this.getRunMode(),
|
|
1904
1904
|
phaseName: this.phaseName,
|
|
1905
|
+
issueTitle: ctx?.demand.title,
|
|
1905
1906
|
artifactCheck,
|
|
1906
1907
|
artifactPaths,
|
|
1907
1908
|
sessionId: options?.sessionId,
|
|
@@ -3134,8 +3135,8 @@ var WorkspaceManager = class {
|
|
|
3134
3135
|
};
|
|
3135
3136
|
|
|
3136
3137
|
// src/orchestrator/PipelineOrchestrator.ts
|
|
3137
|
-
import
|
|
3138
|
-
import
|
|
3138
|
+
import path11 from "path";
|
|
3139
|
+
import fs9 from "fs/promises";
|
|
3139
3140
|
import fsSync from "fs";
|
|
3140
3141
|
import { execFile as execFile2 } from "child_process";
|
|
3141
3142
|
import { promisify as promisify2 } from "util";
|
|
@@ -3774,38 +3775,7 @@ metrics.registerCounter("iaf_braindump_batches_total", "Total braindump batches"
|
|
|
3774
3775
|
metrics.registerCounter("iaf_braindump_tasks_total", "Total braindump tasks");
|
|
3775
3776
|
|
|
3776
3777
|
// src/orchestrator/steps/SetupStep.ts
|
|
3777
|
-
import fs9 from "fs";
|
|
3778
|
-
import path11 from "path";
|
|
3779
3778
|
var logger14 = logger.child("SetupStep");
|
|
3780
|
-
var PLAN_DIR_NAME = ".claude-plan";
|
|
3781
|
-
function cleanupStalePlanDirs(workDir, currentIid) {
|
|
3782
|
-
const claudePlanDir = path11.join(workDir, PLAN_DIR_NAME);
|
|
3783
|
-
if (!fs9.existsSync(claudePlanDir)) return;
|
|
3784
|
-
const currentDirName = `issue-${currentIid}`;
|
|
3785
|
-
let entries;
|
|
3786
|
-
try {
|
|
3787
|
-
entries = fs9.readdirSync(claudePlanDir);
|
|
3788
|
-
} catch {
|
|
3789
|
-
return;
|
|
3790
|
-
}
|
|
3791
|
-
for (const entry of entries) {
|
|
3792
|
-
if (entry.startsWith("issue-") && entry !== currentDirName) {
|
|
3793
|
-
const stalePath = path11.join(claudePlanDir, entry);
|
|
3794
|
-
try {
|
|
3795
|
-
fs9.rmSync(stalePath, { recursive: true, force: true });
|
|
3796
|
-
logger14.info("Removed stale plan directory from worktree", {
|
|
3797
|
-
removed: entry,
|
|
3798
|
-
currentIid
|
|
3799
|
-
});
|
|
3800
|
-
} catch (err) {
|
|
3801
|
-
logger14.warn("Failed to remove stale plan directory", {
|
|
3802
|
-
path: stalePath,
|
|
3803
|
-
error: err.message
|
|
3804
|
-
});
|
|
3805
|
-
}
|
|
3806
|
-
}
|
|
3807
|
-
}
|
|
3808
|
-
}
|
|
3809
3779
|
async function executeSetup(ctx, deps) {
|
|
3810
3780
|
const { issue, wtCtx, record, pipelineDef, branchName } = ctx;
|
|
3811
3781
|
try {
|
|
@@ -3839,7 +3809,6 @@ async function executeSetup(ctx, deps) {
|
|
|
3839
3809
|
const primaryGitRoot = wtCtx.workspace ? wtCtx.workspace.primary.gitRootDir : wtCtx.gitRootDir;
|
|
3840
3810
|
const wtGit = new GitOperations(primaryGitRoot);
|
|
3841
3811
|
const wtPlan = new PlanPersistence(primaryWorkDir, issue.iid);
|
|
3842
|
-
cleanupStalePlanDirs(primaryWorkDir, issue.iid);
|
|
3843
3812
|
wtPlan.ensureDir();
|
|
3844
3813
|
wtPlan.writeIssueMeta({
|
|
3845
3814
|
id: issue.id,
|
|
@@ -4002,10 +3971,7 @@ function resolveUatRunner(deps, issueIid) {
|
|
|
4002
3971
|
}
|
|
4003
3972
|
return deps.aiRunner;
|
|
4004
3973
|
}
|
|
4005
|
-
async function commitPlanFiles(ctx, wtGit, wtGitMap, phaseName, displayId
|
|
4006
|
-
if (planWorkDir) {
|
|
4007
|
-
cleanupStalePlanDirs(planWorkDir, displayId);
|
|
4008
|
-
}
|
|
3974
|
+
async function commitPlanFiles(ctx, wtGit, wtGitMap, phaseName, displayId) {
|
|
4009
3975
|
const commitMsg = `chore(auto): ${phaseName} phase completed for issue #${displayId}`;
|
|
4010
3976
|
if (ctx.workspace && ctx.workspace.repos.length > 1) {
|
|
4011
3977
|
for (const repo of ctx.workspace.repos) {
|
|
@@ -4237,7 +4203,7 @@ var DefaultLifecycleHook = class {
|
|
|
4237
4203
|
completedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
4238
4204
|
});
|
|
4239
4205
|
wtPlan.updatePhaseProgress(spec.name, "completed");
|
|
4240
|
-
await commitPlanFiles(phaseCtx, wtGit, wtGitMap, spec.name, displayId
|
|
4206
|
+
await commitPlanFiles(phaseCtx, wtGit, wtGitMap, spec.name, displayId);
|
|
4241
4207
|
if (phase) {
|
|
4242
4208
|
await syncResultToIssue(phase, phaseCtx, displayId, spec.name, deps, issue.id, wtPlan);
|
|
4243
4209
|
}
|
|
@@ -4385,7 +4351,7 @@ var AiPhaseStrategy = class {
|
|
|
4385
4351
|
completedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
4386
4352
|
});
|
|
4387
4353
|
wtPlan.updatePhaseProgress(spec.name, "completed");
|
|
4388
|
-
await commitPlanFiles(phaseCtx, wtGit, wtGitMap, spec.name, issue.iid
|
|
4354
|
+
await commitPlanFiles(phaseCtx, wtGit, wtGitMap, spec.name, issue.iid);
|
|
4389
4355
|
const runner = this.resolveRunner(ctx);
|
|
4390
4356
|
const phase = createPhase(spec.name, runner, wtGit, wtPlan, deps.config);
|
|
4391
4357
|
await syncResultToIssue(phase, phaseCtx, issue.iid, spec.name, deps, issue.id, wtPlan);
|
|
@@ -4953,7 +4919,7 @@ var PipelineOrchestrator = class {
|
|
|
4953
4919
|
});
|
|
4954
4920
|
this.devServerManager = new DevServerManager();
|
|
4955
4921
|
this.screenshotPublisher = new ScreenshotPublisher(gongfeng);
|
|
4956
|
-
this.effectiveWorktreeBaseDir = this.tenantId === "default" ? config.project.worktreeBaseDir :
|
|
4922
|
+
this.effectiveWorktreeBaseDir = this.tenantId === "default" ? config.project.worktreeBaseDir : path11.join(config.project.worktreeBaseDir, this.tenantId);
|
|
4957
4923
|
const effectiveWsConfig = wsConfig ?? buildSingleRepoWorkspace(config.project, config.gongfeng.projectPath);
|
|
4958
4924
|
this.workspaceManager = new WorkspaceManager({
|
|
4959
4925
|
wsConfig: effectiveWsConfig,
|
|
@@ -4992,9 +4958,9 @@ var PipelineOrchestrator = class {
|
|
|
4992
4958
|
if (wtDir === repoGitRoot) continue;
|
|
4993
4959
|
if (!wtDir.includes("/issue-")) continue;
|
|
4994
4960
|
try {
|
|
4995
|
-
const gitFile =
|
|
4961
|
+
const gitFile = path11.join(wtDir, ".git");
|
|
4996
4962
|
try {
|
|
4997
|
-
await
|
|
4963
|
+
await fs9.access(gitFile);
|
|
4998
4964
|
} catch {
|
|
4999
4965
|
logger23.warn("Worktree corrupted (.git missing), force removing", { dir: wtDir });
|
|
5000
4966
|
await this.mainGit.worktreeRemove(wtDir, true).catch(() => {
|
|
@@ -5009,9 +4975,9 @@ var PipelineOrchestrator = class {
|
|
|
5009
4975
|
await wtGit.rebaseAbort();
|
|
5010
4976
|
cleaned++;
|
|
5011
4977
|
}
|
|
5012
|
-
const indexLock =
|
|
4978
|
+
const indexLock = path11.join(wtDir, ".git", "index.lock");
|
|
5013
4979
|
try {
|
|
5014
|
-
await
|
|
4980
|
+
await fs9.unlink(indexLock);
|
|
5015
4981
|
logger23.warn("Removed stale index.lock", { path: indexLock });
|
|
5016
4982
|
cleaned++;
|
|
5017
4983
|
} catch {
|
|
@@ -5023,9 +4989,9 @@ var PipelineOrchestrator = class {
|
|
|
5023
4989
|
} catch (err) {
|
|
5024
4990
|
logger23.warn("Failed to list worktrees for cleanup", { error: err.message });
|
|
5025
4991
|
}
|
|
5026
|
-
const mainIndexLock =
|
|
4992
|
+
const mainIndexLock = path11.join(repoGitRoot, ".git", "index.lock");
|
|
5027
4993
|
try {
|
|
5028
|
-
await
|
|
4994
|
+
await fs9.unlink(mainIndexLock);
|
|
5029
4995
|
logger23.warn("Removed stale main repo index.lock", { path: mainIndexLock });
|
|
5030
4996
|
cleaned++;
|
|
5031
4997
|
} catch {
|
|
@@ -5141,17 +5107,17 @@ var PipelineOrchestrator = class {
|
|
|
5141
5107
|
}
|
|
5142
5108
|
}
|
|
5143
5109
|
async ensureNodeModules(workDir) {
|
|
5144
|
-
const targetBin =
|
|
5110
|
+
const targetBin = path11.join(workDir, "node_modules", ".bin");
|
|
5145
5111
|
try {
|
|
5146
|
-
await
|
|
5112
|
+
await fs9.access(targetBin);
|
|
5147
5113
|
logger23.info("node_modules already complete (has .bin/)");
|
|
5148
5114
|
return true;
|
|
5149
5115
|
} catch {
|
|
5150
5116
|
}
|
|
5151
|
-
const sourceNM =
|
|
5152
|
-
const targetNM =
|
|
5117
|
+
const sourceNM = path11.join(this.config.project.workDir, "node_modules");
|
|
5118
|
+
const targetNM = path11.join(workDir, "node_modules");
|
|
5153
5119
|
try {
|
|
5154
|
-
await
|
|
5120
|
+
await fs9.access(sourceNM);
|
|
5155
5121
|
} catch {
|
|
5156
5122
|
logger23.warn("Main repo node_modules not found, skipping seed", { sourceNM });
|
|
5157
5123
|
return false;
|
|
@@ -5238,10 +5204,10 @@ var PipelineOrchestrator = class {
|
|
|
5238
5204
|
async cleanupE2eOutputs(issueIid) {
|
|
5239
5205
|
const vendorDir = this.config.e2e.uatVendorDir;
|
|
5240
5206
|
if (!vendorDir) return;
|
|
5241
|
-
const abs =
|
|
5242
|
-
const outputDir =
|
|
5207
|
+
const abs = path11.isAbsolute(vendorDir) ? vendorDir : path11.resolve(this.config.project.workDir, vendorDir);
|
|
5208
|
+
const outputDir = path11.join(abs, "outputs", `issue-${issueIid}`);
|
|
5243
5209
|
try {
|
|
5244
|
-
await
|
|
5210
|
+
await fs9.rm(outputDir, { recursive: true, force: true });
|
|
5245
5211
|
logger23.info("E2E outputs cleaned up", { issueIid, dir: outputDir });
|
|
5246
5212
|
} catch (err) {
|
|
5247
5213
|
logger23.warn("Failed to cleanup E2E outputs", { issueIid, dir: outputDir, error: err.message });
|
|
@@ -5256,7 +5222,7 @@ var PipelineOrchestrator = class {
|
|
|
5256
5222
|
if (!this.workspaceManager) return;
|
|
5257
5223
|
const wsRoot = this.workspaceManager.getWorkspaceRoot(issueIid);
|
|
5258
5224
|
try {
|
|
5259
|
-
await
|
|
5225
|
+
await fs9.rm(wsRoot, { recursive: true, force: true });
|
|
5260
5226
|
logger23.info("Workspace root cleaned up", { issueIid, dir: wsRoot });
|
|
5261
5227
|
} catch (err) {
|
|
5262
5228
|
logger23.warn("Failed to cleanup workspace root", { issueIid, dir: wsRoot, error: err.message });
|
|
@@ -6108,4 +6074,4 @@ export {
|
|
|
6108
6074
|
PipelineOrchestrator,
|
|
6109
6075
|
BrainstormService
|
|
6110
6076
|
};
|
|
6111
|
-
//# sourceMappingURL=chunk-
|
|
6077
|
+
//# sourceMappingURL=chunk-DUQUGPMI.js.map
|