@coralai/sps-cli 0.6.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/dist/commands/cardAdd.d.ts +2 -0
- package/dist/commands/cardAdd.d.ts.map +1 -0
- package/dist/commands/cardAdd.js +65 -0
- package/dist/commands/cardAdd.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +264 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/monitorTick.d.ts +2 -0
- package/dist/commands/monitorTick.d.ts.map +1 -0
- package/dist/commands/monitorTick.js +47 -0
- package/dist/commands/monitorTick.js.map +1 -0
- package/dist/commands/pipelineTick.d.ts +2 -0
- package/dist/commands/pipelineTick.d.ts.map +1 -0
- package/dist/commands/pipelineTick.js +44 -0
- package/dist/commands/pipelineTick.js.map +1 -0
- package/dist/commands/pmCommand.d.ts +2 -0
- package/dist/commands/pmCommand.d.ts.map +1 -0
- package/dist/commands/pmCommand.js +159 -0
- package/dist/commands/pmCommand.js.map +1 -0
- package/dist/commands/projectInit.d.ts +2 -0
- package/dist/commands/projectInit.d.ts.map +1 -0
- package/dist/commands/projectInit.js +75 -0
- package/dist/commands/projectInit.js.map +1 -0
- package/dist/commands/qaTick.d.ts +2 -0
- package/dist/commands/qaTick.d.ts.map +1 -0
- package/dist/commands/qaTick.js +43 -0
- package/dist/commands/qaTick.js.map +1 -0
- package/dist/commands/schedulerTick.d.ts +2 -0
- package/dist/commands/schedulerTick.d.ts.map +1 -0
- package/dist/commands/schedulerTick.js +45 -0
- package/dist/commands/schedulerTick.js.map +1 -0
- package/dist/commands/tick.d.ts +14 -0
- package/dist/commands/tick.d.ts.map +1 -0
- package/dist/commands/tick.js +251 -0
- package/dist/commands/tick.js.map +1 -0
- package/dist/commands/workerLaunch.d.ts +2 -0
- package/dist/commands/workerLaunch.d.ts.map +1 -0
- package/dist/commands/workerLaunch.js +56 -0
- package/dist/commands/workerLaunch.js.map +1 -0
- package/dist/core/config.d.ts +38 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +131 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +23 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +28 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/lock.d.ts +14 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +65 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/logger.d.ts +24 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +62 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/paths.d.ts +27 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +29 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/queue.d.ts +14 -0
- package/dist/core/queue.d.ts.map +1 -0
- package/dist/core/queue.js +38 -0
- package/dist/core/queue.js.map +1 -0
- package/dist/core/state.d.ts +32 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +52 -0
- package/dist/core/state.js.map +1 -0
- package/dist/engines/CloseoutEngine.d.ts +60 -0
- package/dist/engines/CloseoutEngine.d.ts.map +1 -0
- package/dist/engines/CloseoutEngine.js +596 -0
- package/dist/engines/CloseoutEngine.js.map +1 -0
- package/dist/engines/ExecutionEngine.d.ts +65 -0
- package/dist/engines/ExecutionEngine.d.ts.map +1 -0
- package/dist/engines/ExecutionEngine.js +603 -0
- package/dist/engines/ExecutionEngine.js.map +1 -0
- package/dist/engines/MonitorEngine.d.ts +39 -0
- package/dist/engines/MonitorEngine.d.ts.map +1 -0
- package/dist/engines/MonitorEngine.js +473 -0
- package/dist/engines/MonitorEngine.js.map +1 -0
- package/dist/engines/SchedulerEngine.d.ts +24 -0
- package/dist/engines/SchedulerEngine.d.ts.map +1 -0
- package/dist/engines/SchedulerEngine.js +195 -0
- package/dist/engines/SchedulerEngine.js.map +1 -0
- package/dist/interfaces/HookProvider.d.ts +9 -0
- package/dist/interfaces/HookProvider.d.ts.map +1 -0
- package/dist/interfaces/HookProvider.js +2 -0
- package/dist/interfaces/HookProvider.js.map +1 -0
- package/dist/interfaces/Notifier.d.ts +11 -0
- package/dist/interfaces/Notifier.d.ts.map +1 -0
- package/dist/interfaces/Notifier.js +2 -0
- package/dist/interfaces/Notifier.js.map +1 -0
- package/dist/interfaces/RepoBackend.d.ts +23 -0
- package/dist/interfaces/RepoBackend.d.ts.map +1 -0
- package/dist/interfaces/RepoBackend.js +2 -0
- package/dist/interfaces/RepoBackend.js.map +1 -0
- package/dist/interfaces/TaskBackend.d.ts +24 -0
- package/dist/interfaces/TaskBackend.d.ts.map +1 -0
- package/dist/interfaces/TaskBackend.js +2 -0
- package/dist/interfaces/TaskBackend.js.map +1 -0
- package/dist/interfaces/WorkerProvider.d.ts +23 -0
- package/dist/interfaces/WorkerProvider.d.ts.map +1 -0
- package/dist/interfaces/WorkerProvider.js +2 -0
- package/dist/interfaces/WorkerProvider.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +226 -0
- package/dist/main.js.map +1 -0
- package/dist/models/types.d.ts +68 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +2 -0
- package/dist/models/types.js.map +1 -0
- package/dist/providers/ClaudeWorkerProvider.d.ts +84 -0
- package/dist/providers/ClaudeWorkerProvider.d.ts.map +1 -0
- package/dist/providers/ClaudeWorkerProvider.js +293 -0
- package/dist/providers/ClaudeWorkerProvider.js.map +1 -0
- package/dist/providers/CodexWorkerProvider.d.ts +50 -0
- package/dist/providers/CodexWorkerProvider.d.ts.map +1 -0
- package/dist/providers/CodexWorkerProvider.js +275 -0
- package/dist/providers/CodexWorkerProvider.js.map +1 -0
- package/dist/providers/GitLabRepoBackend.d.ts +42 -0
- package/dist/providers/GitLabRepoBackend.d.ts.map +1 -0
- package/dist/providers/GitLabRepoBackend.js +280 -0
- package/dist/providers/GitLabRepoBackend.js.map +1 -0
- package/dist/providers/MarkdownTaskBackend.d.ts +88 -0
- package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -0
- package/dist/providers/MarkdownTaskBackend.js +414 -0
- package/dist/providers/MarkdownTaskBackend.js.map +1 -0
- package/dist/providers/MatrixNotifier.d.ts +30 -0
- package/dist/providers/MatrixNotifier.d.ts.map +1 -0
- package/dist/providers/MatrixNotifier.js +82 -0
- package/dist/providers/MatrixNotifier.js.map +1 -0
- package/dist/providers/PlaneTaskBackend.d.ts +86 -0
- package/dist/providers/PlaneTaskBackend.d.ts.map +1 -0
- package/dist/providers/PlaneTaskBackend.js +409 -0
- package/dist/providers/PlaneTaskBackend.js.map +1 -0
- package/dist/providers/TrelloTaskBackend.d.ts +53 -0
- package/dist/providers/TrelloTaskBackend.d.ts.map +1 -0
- package/dist/providers/TrelloTaskBackend.js +300 -0
- package/dist/providers/TrelloTaskBackend.js.map +1 -0
- package/dist/providers/registry.d.ts +10 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +29 -0
- package/dist/providers/registry.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, renameSync, existsSync } from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* Read pipeline_order.json — a pure array of seq numbers.
|
|
4
|
+
* Returns empty array if file doesn't exist.
|
|
5
|
+
*/
|
|
6
|
+
export function readQueue(filePath) {
|
|
7
|
+
if (!existsSync(filePath))
|
|
8
|
+
return [];
|
|
9
|
+
try {
|
|
10
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
11
|
+
const parsed = JSON.parse(raw);
|
|
12
|
+
if (!Array.isArray(parsed))
|
|
13
|
+
return [];
|
|
14
|
+
return parsed.filter((v) => typeof v === 'number');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Atomic write of pipeline_order.json.
|
|
22
|
+
*/
|
|
23
|
+
export function writeQueue(filePath, queue) {
|
|
24
|
+
const tmpFile = filePath + '.tmp';
|
|
25
|
+
writeFileSync(tmpFile, JSON.stringify(queue, null, 2) + '\n');
|
|
26
|
+
renameSync(tmpFile, filePath);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Remove a seq from the queue and write back atomically.
|
|
30
|
+
*/
|
|
31
|
+
export function removeFromQueue(filePath, seq) {
|
|
32
|
+
const queue = readQueue(filePath);
|
|
33
|
+
const updated = queue.filter((s) => s !== seq);
|
|
34
|
+
if (updated.length !== queue.length) {
|
|
35
|
+
writeQueue(filePath, updated);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/core/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG9E;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAe;IAC1D,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,GAAW;IAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface WorkerSlotState {
|
|
2
|
+
status: 'idle' | 'active' | 'releasing';
|
|
3
|
+
seq: number | null;
|
|
4
|
+
branch: string | null;
|
|
5
|
+
worktree: string | null;
|
|
6
|
+
tmuxSession: string | null;
|
|
7
|
+
claimedAt: string | null;
|
|
8
|
+
lastHeartbeat: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface ActiveCardState {
|
|
11
|
+
seq: number;
|
|
12
|
+
state: string;
|
|
13
|
+
worker: string | null;
|
|
14
|
+
mrUrl: string | null;
|
|
15
|
+
conflictDomains: string[];
|
|
16
|
+
startedAt: string;
|
|
17
|
+
}
|
|
18
|
+
export interface RuntimeState {
|
|
19
|
+
version: number;
|
|
20
|
+
generation: number;
|
|
21
|
+
updatedAt: string;
|
|
22
|
+
updatedBy: string;
|
|
23
|
+
workers: Record<string, WorkerSlotState>;
|
|
24
|
+
activeCards: Record<string, ActiveCardState>;
|
|
25
|
+
}
|
|
26
|
+
export declare function readState(stateFile: string, maxWorkers: number): RuntimeState;
|
|
27
|
+
/**
|
|
28
|
+
* Atomic write: write to temp file, then rename.
|
|
29
|
+
* Increments generation automatically.
|
|
30
|
+
*/
|
|
31
|
+
export declare function writeState(stateFile: string, state: RuntimeState, updatedBy: string): void;
|
|
32
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;IACxC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AAyBD,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAU7E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAW1F"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, renameSync, existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
function defaultState(maxWorkers) {
|
|
4
|
+
const workers = {};
|
|
5
|
+
for (let i = 1; i <= maxWorkers; i++) {
|
|
6
|
+
workers[`worker-${i}`] = {
|
|
7
|
+
status: 'idle',
|
|
8
|
+
seq: null,
|
|
9
|
+
branch: null,
|
|
10
|
+
worktree: null,
|
|
11
|
+
tmuxSession: null,
|
|
12
|
+
claimedAt: null,
|
|
13
|
+
lastHeartbeat: null,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
version: 1,
|
|
18
|
+
generation: 0,
|
|
19
|
+
updatedAt: new Date().toISOString(),
|
|
20
|
+
updatedBy: 'init',
|
|
21
|
+
workers,
|
|
22
|
+
activeCards: {},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function readState(stateFile, maxWorkers) {
|
|
26
|
+
if (!existsSync(stateFile)) {
|
|
27
|
+
return defaultState(maxWorkers);
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const raw = readFileSync(stateFile, 'utf-8');
|
|
31
|
+
return JSON.parse(raw);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return defaultState(maxWorkers);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Atomic write: write to temp file, then rename.
|
|
39
|
+
* Increments generation automatically.
|
|
40
|
+
*/
|
|
41
|
+
export function writeState(stateFile, state, updatedBy) {
|
|
42
|
+
const dir = dirname(stateFile);
|
|
43
|
+
if (!existsSync(dir))
|
|
44
|
+
mkdirSync(dir, { recursive: true });
|
|
45
|
+
state.generation += 1;
|
|
46
|
+
state.updatedAt = new Date().toISOString();
|
|
47
|
+
state.updatedBy = updatedBy;
|
|
48
|
+
const tmpFile = stateFile + '.tmp';
|
|
49
|
+
writeFileSync(tmpFile, JSON.stringify(state, null, 2) + '\n');
|
|
50
|
+
renameSync(tmpFile, stateFile);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAW,OAAO,EAAE,MAAM,WAAW,CAAC;AA8B7C,SAAS,YAAY,CAAC,UAAkB;IACtC,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG;YACvB,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,MAAM;QACjB,OAAO;QACP,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAiB,EAAE,UAAkB;IAC7D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,KAAmB,EAAE,SAAiB;IAClF,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1D,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;IACtB,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAE5B,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACnC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { ProjectContext } from '../core/context.js';
|
|
2
|
+
import type { TaskBackend } from '../interfaces/TaskBackend.js';
|
|
3
|
+
import type { RepoBackend } from '../interfaces/RepoBackend.js';
|
|
4
|
+
import type { WorkerProvider } from '../interfaces/WorkerProvider.js';
|
|
5
|
+
import type { Notifier } from '../interfaces/Notifier.js';
|
|
6
|
+
import type { CommandResult } from '../models/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* CloseoutEngine handles the QA → merge → Done → resource release pipeline.
|
|
9
|
+
*
|
|
10
|
+
* Decision tree per 01 §10.3.2:
|
|
11
|
+
* QA card → check MR exists?
|
|
12
|
+
* ├─ MR not found → NEEDS-FIX
|
|
13
|
+
* └─ MR exists → check MR state
|
|
14
|
+
* ├─ already merged → resource release → Done
|
|
15
|
+
* ├─ open + CI success + can_be_merged → attempt merge
|
|
16
|
+
* ├─ open + CI failed → self-repair or NEEDS-FIX
|
|
17
|
+
* ├─ open + CI running/pending → skip
|
|
18
|
+
* ├─ open + cannot_be_merged → CONFLICT
|
|
19
|
+
* └─ closed (not merged) → NEEDS-FIX
|
|
20
|
+
*/
|
|
21
|
+
export declare class CloseoutEngine {
|
|
22
|
+
private ctx;
|
|
23
|
+
private taskBackend;
|
|
24
|
+
private repoBackend;
|
|
25
|
+
private workerProvider;
|
|
26
|
+
private notifier?;
|
|
27
|
+
private log;
|
|
28
|
+
constructor(ctx: ProjectContext, taskBackend: TaskBackend, repoBackend: RepoBackend, workerProvider: WorkerProvider, notifier?: Notifier | undefined);
|
|
29
|
+
tick(): Promise<CommandResult>;
|
|
30
|
+
private processQaCard;
|
|
31
|
+
private processOpenMr;
|
|
32
|
+
private handleCiFailure;
|
|
33
|
+
private attemptMerge;
|
|
34
|
+
/**
|
|
35
|
+
* Release resources after successful merge. Each step failure MUST NOT
|
|
36
|
+
* block subsequent steps — log and continue.
|
|
37
|
+
*
|
|
38
|
+
* Order:
|
|
39
|
+
* 1. Move card to Done
|
|
40
|
+
* 2. Release claim in PM
|
|
41
|
+
* 3. Release worker slot in state.json (→ idle)
|
|
42
|
+
* 4. Stop worker session
|
|
43
|
+
* 5. Mark worktree for cleanup
|
|
44
|
+
*/
|
|
45
|
+
private releaseAndDone;
|
|
46
|
+
/**
|
|
47
|
+
* Attempt to resolve merge conflict automatically.
|
|
48
|
+
* L1: auto rebase + force push
|
|
49
|
+
* L2: send conflict to original worker to resolve
|
|
50
|
+
* Returns true if resolution was initiated (wait for next tick to verify).
|
|
51
|
+
*/
|
|
52
|
+
private resolveConflict;
|
|
53
|
+
private buildBranchName;
|
|
54
|
+
private markNeedsFix;
|
|
55
|
+
private addLabelSafe;
|
|
56
|
+
private commentSafe;
|
|
57
|
+
private notifySafe;
|
|
58
|
+
private logEvent;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=CloseoutEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloseoutEngine.d.ts","sourceRoot":"","sources":["../../src/engines/CloseoutEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAyC,MAAM,oBAAoB,CAAC;AAI/F;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ,CAAC;IAPnB,OAAO,CAAC,GAAG,CAAS;gBAGV,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,QAAQ,YAAA;IAKvB,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;YAkEtB,aAAa;YAoDb,aAAa;YAkHb,eAAe;YAmFf,YAAY;IAyC1B;;;;;;;;;;OAUG;YACW,cAAc;IA0H5B;;;;;OAKG;YACW,eAAe;IAuF7B,OAAO,CAAC,eAAe;YAST,YAAY;YAMZ,YAAY;YASZ,WAAW;YASX,UAAU;IAYxB,OAAO,CAAC,QAAQ;CAcjB"}
|