agentic-orchestrator 0.1.27 → 0.1.28
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/apps/control-plane/src/cli/resume-command-handler.ts +22 -3
- package/apps/control-plane/src/supervisor/run-coordinator.ts +91 -36
- package/apps/control-plane/test/path-normalizers.spec.ts +41 -0
- package/apps/control-plane/test/resume-command.spec.ts +29 -0
- package/apps/control-plane/test/run-coordinator.spec.ts +119 -0
- package/config/agentic/orchestrator/agents.yaml +1 -1
- package/dist/apps/control-plane/cli/resume-command-handler.js +17 -3
- package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
- package/dist/apps/control-plane/supervisor/run-coordinator.d.ts +3 -0
- package/dist/apps/control-plane/supervisor/run-coordinator.js +81 -33
- package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
- package/package.json +1 -1
- package/spec-files/progress.md +52 -0
|
@@ -53,6 +53,14 @@ function asStringArray(value: unknown): string[] {
|
|
|
53
53
|
return normalized;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
function asFeatureId(value: unknown): string | null {
|
|
57
|
+
if (typeof value !== 'string') {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const trimmed = value.trim();
|
|
61
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
62
|
+
}
|
|
63
|
+
|
|
56
64
|
function toResumePhase(status: string): string {
|
|
57
65
|
if (status === STATUS.BUILDING) {
|
|
58
66
|
return STATUS.BUILDING;
|
|
@@ -101,7 +109,8 @@ export class ResumeCommandHandler {
|
|
|
101
109
|
async execute(context: ResumeCommandContext): Promise<unknown> {
|
|
102
110
|
const { repoRoot, env, runId, transport, options, kernel, toolClient } = context;
|
|
103
111
|
const recovery = await kernel.recoverFromState();
|
|
104
|
-
const
|
|
112
|
+
const requestedFeatureId = asFeatureId(options.feature_id);
|
|
113
|
+
const resumePlan = await this.buildResumePlan(kernel, runId, requestedFeatureId);
|
|
105
114
|
|
|
106
115
|
if (resumePlan.features.length === 0) {
|
|
107
116
|
return {
|
|
@@ -176,7 +185,11 @@ export class ResumeCommandHandler {
|
|
|
176
185
|
};
|
|
177
186
|
}
|
|
178
187
|
|
|
179
|
-
private async buildResumePlan(
|
|
188
|
+
private async buildResumePlan(
|
|
189
|
+
kernel: AopKernel,
|
|
190
|
+
fallbackRunId: string,
|
|
191
|
+
requestedFeatureId?: string | null,
|
|
192
|
+
): Promise<ResumePlan> {
|
|
180
193
|
const index = await kernel.readIndex();
|
|
181
194
|
const runtimeSessions = await kernel.getRuntimeSessions();
|
|
182
195
|
const discovered = await kernel.featureDiscoverSpecs();
|
|
@@ -209,7 +222,13 @@ export class ResumeCommandHandler {
|
|
|
209
222
|
}
|
|
210
223
|
|
|
211
224
|
const resumable: ResumeFeature[] = [];
|
|
212
|
-
const
|
|
225
|
+
const normalizedRequestedFeatureId = asFeatureId(requestedFeatureId);
|
|
226
|
+
if (normalizedRequestedFeatureId) {
|
|
227
|
+
this.addSource(sourcesByFeature, normalizedRequestedFeatureId, 'cli.feature_id');
|
|
228
|
+
}
|
|
229
|
+
const sortedFeatureIds = normalizedRequestedFeatureId
|
|
230
|
+
? [normalizedRequestedFeatureId]
|
|
231
|
+
: [...sourcesByFeature.keys()].sort((a, b) => a.localeCompare(b));
|
|
213
232
|
for (const featureId of sortedFeatureIds) {
|
|
214
233
|
try {
|
|
215
234
|
const state = await kernel.featureStateGet(featureId);
|
|
@@ -63,6 +63,7 @@ export class RunCoordinator {
|
|
|
63
63
|
private readonly prMonitor: PrMonitorService | undefined;
|
|
64
64
|
private readonly issueTracker: IssueTracker | undefined;
|
|
65
65
|
private readonly statusCache: Map<string, string>;
|
|
66
|
+
private static readonly BACKGROUND_LEASE_RENEW_INTERVAL_MS = 30_000;
|
|
66
67
|
private static readonly TERMINAL_STATUSES = new Set<string>([
|
|
67
68
|
STATUS.MERGED,
|
|
68
69
|
STATUS.FAILED,
|
|
@@ -105,56 +106,110 @@ export class RunCoordinator {
|
|
|
105
106
|
});
|
|
106
107
|
|
|
107
108
|
this.state.runMetadata.took_over_stale = Boolean(leaseResult.data.took_over_stale);
|
|
109
|
+
const backgroundLeaseRenewal = this.startBackgroundLeaseRenewal();
|
|
108
110
|
|
|
109
|
-
|
|
111
|
+
try {
|
|
112
|
+
await this.sessionOrchestrator.ensureGlobalOrchestratorSession();
|
|
110
113
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
const sorted = [...features].sort((a, b) => a.feature_id.localeCompare(b.feature_id));
|
|
115
|
+
const scopedFeatureIds = sorted.map((item) => item.feature_id);
|
|
116
|
+
this.state.queue = sorted;
|
|
117
|
+
let activeFeatureIds: string[] = [];
|
|
115
118
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
await this.sessionOrchestrator.cleanupOrphanWorkerSessions(scopedFeatureIds);
|
|
120
|
+
await this.kernel.pruneFeatureSessionAssignments({
|
|
121
|
+
run_id: this.state.runId,
|
|
122
|
+
owner_instance_id: this.state.ownerInstanceId,
|
|
123
|
+
active_feature_ids: scopedFeatureIds,
|
|
124
|
+
});
|
|
122
125
|
|
|
123
|
-
|
|
126
|
+
activeFeatureIds = await this.rebalanceActiveFeatures(activeFeatureIds);
|
|
124
127
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
for (let iteration = 0; iteration < this.maxIterationsPerPhase; iteration += 1) {
|
|
129
|
+
this.throwIfBackgroundLeaseRenewalFailed(backgroundLeaseRenewal.error());
|
|
130
|
+
if (activeFeatureIds.length === 0 && this.state.queue.length === 0) {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
await this.leaseHeartbeatService.renew();
|
|
134
|
+
this.throwIfBackgroundLeaseRenewalFailed(backgroundLeaseRenewal.error());
|
|
135
|
+
activeFeatureIds = await this.applyOrchestratorPrioritization(
|
|
136
|
+
activeFeatureIds,
|
|
137
|
+
iteration + 1,
|
|
138
|
+
);
|
|
139
|
+
// N3: Check budget before waves; pause over-budget features
|
|
140
|
+
activeFeatureIds = await this.pauseOverBudgetFeatures(activeFeatureIds);
|
|
141
|
+
await this.planningWaveExecutor.run(activeFeatureIds);
|
|
142
|
+
await this.buildWaveExecutor.run(activeFeatureIds, this.maxParallelGateRuns);
|
|
143
|
+
await this.qaWaveExecutor.run(activeFeatureIds, this.maxParallelGateRuns);
|
|
144
|
+
await this.planningWaveExecutor.runPostQaReconciliation(activeFeatureIds, iteration + 1);
|
|
145
|
+
await this.notifyStatusTransitions(activeFeatureIds);
|
|
146
|
+
activeFeatureIds = await this.rebalanceActiveFeatures(activeFeatureIds);
|
|
128
147
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
148
|
+
|
|
149
|
+
const dashboard = await this.toolCaller.callTool('orchestrator', TOOLS.REPORT_DASHBOARD, {});
|
|
150
|
+
const runtimeSessions = await this.kernel.getRuntimeSessions();
|
|
151
|
+
this.throwIfBackgroundLeaseRenewalFailed(backgroundLeaseRenewal.error());
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
status: 'running',
|
|
155
|
+
dashboard: dashboard.data,
|
|
156
|
+
queue_depth: this.state.queue.length,
|
|
157
|
+
run_metadata: {
|
|
158
|
+
...this.state.runMetadata,
|
|
159
|
+
runtime_sessions: runtimeSessions,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
} finally {
|
|
163
|
+
await backgroundLeaseRenewal.stop();
|
|
142
164
|
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private startBackgroundLeaseRenewal(): {
|
|
168
|
+
stop: () => Promise<void>;
|
|
169
|
+
error: () => unknown;
|
|
170
|
+
} {
|
|
171
|
+
let inFlight: Promise<void> | null = null;
|
|
172
|
+
let failedRenewal: unknown = null;
|
|
173
|
+
let stopped = false;
|
|
174
|
+
|
|
175
|
+
const renew = (): void => {
|
|
176
|
+
if (stopped || inFlight !== null || failedRenewal) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
inFlight = this.leaseHeartbeatService
|
|
180
|
+
.renew()
|
|
181
|
+
.catch((error: unknown) => {
|
|
182
|
+
failedRenewal = error;
|
|
183
|
+
})
|
|
184
|
+
.finally(() => {
|
|
185
|
+
inFlight = null;
|
|
186
|
+
});
|
|
187
|
+
};
|
|
143
188
|
|
|
144
|
-
const
|
|
145
|
-
|
|
189
|
+
const timer = setInterval(renew, RunCoordinator.BACKGROUND_LEASE_RENEW_INTERVAL_MS);
|
|
190
|
+
if (typeof timer.unref === 'function') {
|
|
191
|
+
timer.unref();
|
|
192
|
+
}
|
|
146
193
|
|
|
147
194
|
return {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
195
|
+
stop: async () => {
|
|
196
|
+
stopped = true;
|
|
197
|
+
clearInterval(timer);
|
|
198
|
+
if (inFlight !== null) {
|
|
199
|
+
await inFlight;
|
|
200
|
+
}
|
|
154
201
|
},
|
|
202
|
+
error: () => failedRenewal,
|
|
155
203
|
};
|
|
156
204
|
}
|
|
157
205
|
|
|
206
|
+
private throwIfBackgroundLeaseRenewalFailed(error: unknown): void {
|
|
207
|
+
if (!error) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
|
|
158
213
|
private async pauseOverBudgetFeatures(activeFeatureIds: string[]): Promise<string[]> {
|
|
159
214
|
const remaining: string[] = [];
|
|
160
215
|
for (const featureId of activeFeatureIds) {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import {
|
|
4
|
+
normalizeFromWorktree,
|
|
5
|
+
normalizeRepoPathForState,
|
|
6
|
+
} from '../src/core/utils/path-normalizers.js';
|
|
7
|
+
|
|
8
|
+
describe('path-normalizers', () => {
|
|
9
|
+
it('normalizeRepoPathForState returns dot when absolute path is repo root', () => {
|
|
10
|
+
const repoRoot = '/repo';
|
|
11
|
+
expect(normalizeRepoPathForState(repoRoot, repoRoot)).toBe('.');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('normalizeRepoPathForState returns repo-relative path for nested file', () => {
|
|
15
|
+
const repoRoot = '/repo';
|
|
16
|
+
const absolutePath = path.join(repoRoot, 'apps', 'control-plane', 'src', 'index.ts');
|
|
17
|
+
expect(normalizeRepoPathForState(repoRoot, absolutePath)).toBe(
|
|
18
|
+
'apps/control-plane/src/index.ts',
|
|
19
|
+
);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('normalizeFromWorktree keeps relative path when target is inside worktree', () => {
|
|
23
|
+
const repoRoot = '/repo';
|
|
24
|
+
const worktreePath = '/repo/.worktrees/feature-a';
|
|
25
|
+
const repoRelativeFromWorktree = '.worktrees/feature-a/apps/control-plane/src/aop.ts';
|
|
26
|
+
|
|
27
|
+
expect(normalizeFromWorktree(worktreePath, repoRoot, repoRelativeFromWorktree)).toBe(
|
|
28
|
+
'apps/control-plane/src/aop.ts',
|
|
29
|
+
);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('normalizeFromWorktree falls back to repo-relative when target is outside worktree', () => {
|
|
33
|
+
const repoRoot = '/repo';
|
|
34
|
+
const worktreePath = '/repo/.worktrees/feature-a';
|
|
35
|
+
const repoRelativeFromWorktree = 'README.md';
|
|
36
|
+
|
|
37
|
+
expect(normalizeFromWorktree(worktreePath, repoRoot, repoRelativeFromWorktree)).toBe(
|
|
38
|
+
'README.md',
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -275,6 +275,35 @@ describe('ResumeCommandHandler', () => {
|
|
|
275
275
|
|
|
276
276
|
expect(result.ok).toBe(true);
|
|
277
277
|
});
|
|
278
|
+
|
|
279
|
+
it('GIVEN_resume_feature_id_filter_WHEN_execute_THEN_targets_only_requested_feature', async () => {
|
|
280
|
+
const kernel = makeKernel({
|
|
281
|
+
readIndex: vi.fn(async () => ({
|
|
282
|
+
active: ['feature_a', 'feature_b'],
|
|
283
|
+
blocked: [],
|
|
284
|
+
blocked_queue: [],
|
|
285
|
+
})),
|
|
286
|
+
featureStateGet: vi.fn(async (featureId: string) => ({
|
|
287
|
+
data: {
|
|
288
|
+
front_matter: {
|
|
289
|
+
status: featureId === 'feature_b' ? STATUS.BUILDING : STATUS.PLANNING,
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
})),
|
|
293
|
+
});
|
|
294
|
+
const handler = new ResumeCommandHandler();
|
|
295
|
+
const context = makeContext(kernel);
|
|
296
|
+
context.options = { feature_id: 'feature_b' } as any;
|
|
297
|
+
const result = (await handler.execute(context)) as any;
|
|
298
|
+
|
|
299
|
+
expect(result.ok).toBe(true);
|
|
300
|
+
expect(result.data.resumed).toBe(true);
|
|
301
|
+
expect(result.data.resumed_features).toEqual([
|
|
302
|
+
expect.objectContaining({ feature_id: 'feature_b' }),
|
|
303
|
+
]);
|
|
304
|
+
expect(kernel.featureStateGet).toHaveBeenCalledTimes(1);
|
|
305
|
+
expect(kernel.featureStateGet).toHaveBeenCalledWith('feature_b');
|
|
306
|
+
});
|
|
278
307
|
});
|
|
279
308
|
|
|
280
309
|
describe('ResumeCommandHandler additional branches', () => {
|
|
@@ -3,6 +3,125 @@ import { STATUS, TOOLS } from '../src/core/constants.js';
|
|
|
3
3
|
import { RunCoordinator } from '../src/supervisor/run-coordinator.js';
|
|
4
4
|
|
|
5
5
|
describe('RunCoordinator iteration behavior', () => {
|
|
6
|
+
it('GIVEN_long_running_wave_WHEN_iteration_exceeds_lease_interval_THEN_background_renew_keeps_run_lease_fresh', async () => {
|
|
7
|
+
vi.useFakeTimers();
|
|
8
|
+
try {
|
|
9
|
+
const kernel = {
|
|
10
|
+
ensureLoaded: vi.fn(async () => undefined),
|
|
11
|
+
recoverFromState: vi.fn(async () => ({ data: { recovered: true } })),
|
|
12
|
+
acquireRunLease: vi.fn(async () => ({ data: { took_over_stale: false } })),
|
|
13
|
+
pruneFeatureSessionAssignments: vi.fn(async () => ({ data: { removed: [] as string[] } })),
|
|
14
|
+
getRuntimeSessions: vi.fn(async () => ({
|
|
15
|
+
run_id: 'run:test',
|
|
16
|
+
owner_instance_id: 'owner:test',
|
|
17
|
+
orchestrator_session_id: 'orch:test',
|
|
18
|
+
feature_sessions: {},
|
|
19
|
+
})),
|
|
20
|
+
updateState: vi.fn(async () => ({})),
|
|
21
|
+
checkBudget: vi.fn(async () => ({
|
|
22
|
+
over_budget: false,
|
|
23
|
+
alert_threshold_reached: false,
|
|
24
|
+
current_cost_usd: 0,
|
|
25
|
+
limit_usd: -1,
|
|
26
|
+
alert_threshold: 0.8,
|
|
27
|
+
})),
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const provider = {
|
|
31
|
+
selection: {
|
|
32
|
+
provider: 'custom',
|
|
33
|
+
model: 'model-test',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const toolCaller = {
|
|
38
|
+
callTool: vi.fn(async (_role: string, toolName: string) => {
|
|
39
|
+
if (toolName === TOOLS.REPORT_DASHBOARD) {
|
|
40
|
+
return { ok: true, data: { features: [] } };
|
|
41
|
+
}
|
|
42
|
+
if (toolName === TOOLS.FEATURE_STATE_GET) {
|
|
43
|
+
return { ok: true, data: { front_matter: { status: STATUS.PLANNING } } };
|
|
44
|
+
}
|
|
45
|
+
return { ok: true, data: {} };
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const state = {
|
|
50
|
+
runId: 'run:test',
|
|
51
|
+
ownerInstanceId: 'owner:test',
|
|
52
|
+
orchestratorSessionId: 'orch:test',
|
|
53
|
+
sessionsByFeature: new Map<string, { planner: string; builder: string; qa: string }>(),
|
|
54
|
+
queue: [] as Array<{ feature_id: string }>,
|
|
55
|
+
runMetadata: {},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const sessionOrchestrator = {
|
|
59
|
+
ensureGlobalOrchestratorSession: vi.fn(async () => undefined),
|
|
60
|
+
cleanupOrphanWorkerSessions: vi.fn(async () => undefined),
|
|
61
|
+
initializeFeatureCluster: vi.fn(async (featureId: string) => {
|
|
62
|
+
state.sessionsByFeature.set(featureId, {
|
|
63
|
+
planner: `${featureId}:planner`,
|
|
64
|
+
builder: `${featureId}:builder`,
|
|
65
|
+
qa: `${featureId}:qa`,
|
|
66
|
+
});
|
|
67
|
+
}),
|
|
68
|
+
closeFeatureCluster: vi.fn(async () => undefined),
|
|
69
|
+
reconcileQueuedFeatures: vi.fn(async () => undefined),
|
|
70
|
+
enforceActiveFeatureInvariant: vi.fn(async () => undefined),
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const planningWaveExecutor = {
|
|
74
|
+
run: vi.fn(async () => undefined),
|
|
75
|
+
runPostQaReconciliation: vi.fn(async () => undefined),
|
|
76
|
+
clearFeatureTracking: vi.fn(),
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const buildWaveExecutor = {
|
|
80
|
+
run: vi.fn(
|
|
81
|
+
async () =>
|
|
82
|
+
await new Promise<void>((resolve) => {
|
|
83
|
+
setTimeout(resolve, 65_000);
|
|
84
|
+
}),
|
|
85
|
+
),
|
|
86
|
+
clearFeatureTracking: vi.fn(),
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const qaWaveExecutor = {
|
|
90
|
+
run: vi.fn(async () => undefined),
|
|
91
|
+
clearFeatureTracking: vi.fn(),
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const leaseHeartbeatService = {
|
|
95
|
+
renew: vi.fn(async () => undefined),
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const coordinator = new RunCoordinator({
|
|
99
|
+
kernel: kernel as never,
|
|
100
|
+
provider: provider as never,
|
|
101
|
+
toolCaller: toolCaller as never,
|
|
102
|
+
state: state as never,
|
|
103
|
+
sessionOrchestrator: sessionOrchestrator as never,
|
|
104
|
+
planningWaveExecutor: planningWaveExecutor as never,
|
|
105
|
+
buildWaveExecutor: buildWaveExecutor as never,
|
|
106
|
+
qaWaveExecutor: qaWaveExecutor as never,
|
|
107
|
+
leaseHeartbeatService: leaseHeartbeatService as never,
|
|
108
|
+
maxActiveFeatures: 1,
|
|
109
|
+
maxParallelGateRuns: 2,
|
|
110
|
+
maxIterationsPerPhase: 1,
|
|
111
|
+
takeoverStaleRun: false,
|
|
112
|
+
providerConfigRefHash: () => 'hash',
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
const startPromise = coordinator.start([{ feature_id: 'feature_a' }]);
|
|
116
|
+
await vi.advanceTimersByTimeAsync(65_000);
|
|
117
|
+
await startPromise;
|
|
118
|
+
|
|
119
|
+
expect(leaseHeartbeatService.renew).toHaveBeenCalledTimes(3);
|
|
120
|
+
} finally {
|
|
121
|
+
vi.useRealTimers();
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
6
125
|
it('GIVEN_configured_max_iterations_WHEN_starting_run_THEN_executes_each_wave_exactly_that_many_times', async () => {
|
|
7
126
|
const kernel = {
|
|
8
127
|
ensureLoaded: vi.fn(async () => undefined),
|
|
@@ -21,6 +21,13 @@ function asStringArray(value) {
|
|
|
21
21
|
}
|
|
22
22
|
return normalized;
|
|
23
23
|
}
|
|
24
|
+
function asFeatureId(value) {
|
|
25
|
+
if (typeof value !== 'string') {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const trimmed = value.trim();
|
|
29
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
30
|
+
}
|
|
24
31
|
function toResumePhase(status) {
|
|
25
32
|
if (status === STATUS.BUILDING) {
|
|
26
33
|
return STATUS.BUILDING;
|
|
@@ -58,7 +65,8 @@ export class ResumeCommandHandler {
|
|
|
58
65
|
async execute(context) {
|
|
59
66
|
const { repoRoot, env, runId, transport, options, kernel, toolClient } = context;
|
|
60
67
|
const recovery = await kernel.recoverFromState();
|
|
61
|
-
const
|
|
68
|
+
const requestedFeatureId = asFeatureId(options.feature_id);
|
|
69
|
+
const resumePlan = await this.buildResumePlan(kernel, runId, requestedFeatureId);
|
|
62
70
|
if (resumePlan.features.length === 0) {
|
|
63
71
|
return {
|
|
64
72
|
ok: true,
|
|
@@ -119,7 +127,7 @@ export class ResumeCommandHandler {
|
|
|
119
127
|
},
|
|
120
128
|
};
|
|
121
129
|
}
|
|
122
|
-
async buildResumePlan(kernel, fallbackRunId) {
|
|
130
|
+
async buildResumePlan(kernel, fallbackRunId, requestedFeatureId) {
|
|
123
131
|
const index = await kernel.readIndex();
|
|
124
132
|
const runtimeSessions = await kernel.getRuntimeSessions();
|
|
125
133
|
const discovered = await kernel.featureDiscoverSpecs();
|
|
@@ -148,7 +156,13 @@ export class ResumeCommandHandler {
|
|
|
148
156
|
}
|
|
149
157
|
}
|
|
150
158
|
const resumable = [];
|
|
151
|
-
const
|
|
159
|
+
const normalizedRequestedFeatureId = asFeatureId(requestedFeatureId);
|
|
160
|
+
if (normalizedRequestedFeatureId) {
|
|
161
|
+
this.addSource(sourcesByFeature, normalizedRequestedFeatureId, 'cli.feature_id');
|
|
162
|
+
}
|
|
163
|
+
const sortedFeatureIds = normalizedRequestedFeatureId
|
|
164
|
+
? [normalizedRequestedFeatureId]
|
|
165
|
+
: [...sourcesByFeature.keys()].sort((a, b) => a.localeCompare(b));
|
|
152
166
|
for (const featureId of sortedFeatureIds) {
|
|
153
167
|
try {
|
|
154
168
|
const state = await kernel.featureStateGet(featureId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-command-handler.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/cli/resume-command-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,kCAAkC,EAClC,2BAA2B,EAC3B,4BAA4B,GAE7B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAwB7D,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,MAAM,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,QAAQ;YAClB,OAAO,CAAC,CAAC;QACX,KAAK,MAAM,CAAC,QAAQ;YAClB,OAAO,CAAC,CAAC;QACX,KAAK,MAAM,CAAC,EAAE;YACZ,OAAO,CAAC,CAAC;QACX,KAAK,MAAM,CAAC,cAAc;YACxB,OAAO,CAAC,CAAC;QACX;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;AAC9D,CAAC;AAQD,MAAM,OAAO,oBAAoB;IACd,qBAAqB,CAAwB;IAE9D,YAAY,wBAA+C,IAAI,4BAA4B,EAAE;QAC3F,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA6B;QACzC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACjF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"resume-command-handler.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/cli/resume-command-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,9 +52,12 @@ export declare class RunCoordinator {
|
|
|
52
52
|
private readonly prMonitor;
|
|
53
53
|
private readonly issueTracker;
|
|
54
54
|
private readonly statusCache;
|
|
55
|
+
private static readonly BACKGROUND_LEASE_RENEW_INTERVAL_MS;
|
|
55
56
|
private static readonly TERMINAL_STATUSES;
|
|
56
57
|
constructor(dependencies: RunCoordinatorDependencies);
|
|
57
58
|
start(features: FeatureInput[]): Promise<Record<string, unknown>>;
|
|
59
|
+
private startBackgroundLeaseRenewal;
|
|
60
|
+
private throwIfBackgroundLeaseRenewalFailed;
|
|
58
61
|
private pauseOverBudgetFeatures;
|
|
59
62
|
private rebalanceActiveFeatures;
|
|
60
63
|
private clearWaveTracking;
|
|
@@ -23,6 +23,7 @@ export class RunCoordinator {
|
|
|
23
23
|
prMonitor;
|
|
24
24
|
issueTracker;
|
|
25
25
|
statusCache;
|
|
26
|
+
static BACKGROUND_LEASE_RENEW_INTERVAL_MS = 30_000;
|
|
26
27
|
static TERMINAL_STATUSES = new Set([
|
|
27
28
|
STATUS.MERGED,
|
|
28
29
|
STATUS.FAILED,
|
|
@@ -61,45 +62,92 @@ export class RunCoordinator {
|
|
|
61
62
|
takeover_stale_run: this.takeoverStaleRun,
|
|
62
63
|
});
|
|
63
64
|
this.state.runMetadata.took_over_stale = Boolean(leaseResult.data.took_over_stale);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (activeFeatureIds.length === 0 && this.state.queue.length === 0) {
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
await this.leaseHeartbeatService.renew();
|
|
81
|
-
activeFeatureIds = await this.applyOrchestratorPrioritization(activeFeatureIds, iteration + 1);
|
|
82
|
-
// N3: Check budget before waves; pause over-budget features
|
|
83
|
-
activeFeatureIds = await this.pauseOverBudgetFeatures(activeFeatureIds);
|
|
84
|
-
await this.planningWaveExecutor.run(activeFeatureIds);
|
|
85
|
-
await this.buildWaveExecutor.run(activeFeatureIds, this.maxParallelGateRuns);
|
|
86
|
-
await this.qaWaveExecutor.run(activeFeatureIds, this.maxParallelGateRuns);
|
|
87
|
-
await this.planningWaveExecutor.runPostQaReconciliation(activeFeatureIds, iteration + 1);
|
|
88
|
-
await this.notifyStatusTransitions(activeFeatureIds);
|
|
65
|
+
const backgroundLeaseRenewal = this.startBackgroundLeaseRenewal();
|
|
66
|
+
try {
|
|
67
|
+
await this.sessionOrchestrator.ensureGlobalOrchestratorSession();
|
|
68
|
+
const sorted = [...features].sort((a, b) => a.feature_id.localeCompare(b.feature_id));
|
|
69
|
+
const scopedFeatureIds = sorted.map((item) => item.feature_id);
|
|
70
|
+
this.state.queue = sorted;
|
|
71
|
+
let activeFeatureIds = [];
|
|
72
|
+
await this.sessionOrchestrator.cleanupOrphanWorkerSessions(scopedFeatureIds);
|
|
73
|
+
await this.kernel.pruneFeatureSessionAssignments({
|
|
74
|
+
run_id: this.state.runId,
|
|
75
|
+
owner_instance_id: this.state.ownerInstanceId,
|
|
76
|
+
active_feature_ids: scopedFeatureIds,
|
|
77
|
+
});
|
|
89
78
|
activeFeatureIds = await this.rebalanceActiveFeatures(activeFeatureIds);
|
|
79
|
+
for (let iteration = 0; iteration < this.maxIterationsPerPhase; iteration += 1) {
|
|
80
|
+
this.throwIfBackgroundLeaseRenewalFailed(backgroundLeaseRenewal.error());
|
|
81
|
+
if (activeFeatureIds.length === 0 && this.state.queue.length === 0) {
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
await this.leaseHeartbeatService.renew();
|
|
85
|
+
this.throwIfBackgroundLeaseRenewalFailed(backgroundLeaseRenewal.error());
|
|
86
|
+
activeFeatureIds = await this.applyOrchestratorPrioritization(activeFeatureIds, iteration + 1);
|
|
87
|
+
// N3: Check budget before waves; pause over-budget features
|
|
88
|
+
activeFeatureIds = await this.pauseOverBudgetFeatures(activeFeatureIds);
|
|
89
|
+
await this.planningWaveExecutor.run(activeFeatureIds);
|
|
90
|
+
await this.buildWaveExecutor.run(activeFeatureIds, this.maxParallelGateRuns);
|
|
91
|
+
await this.qaWaveExecutor.run(activeFeatureIds, this.maxParallelGateRuns);
|
|
92
|
+
await this.planningWaveExecutor.runPostQaReconciliation(activeFeatureIds, iteration + 1);
|
|
93
|
+
await this.notifyStatusTransitions(activeFeatureIds);
|
|
94
|
+
activeFeatureIds = await this.rebalanceActiveFeatures(activeFeatureIds);
|
|
95
|
+
}
|
|
96
|
+
const dashboard = await this.toolCaller.callTool('orchestrator', TOOLS.REPORT_DASHBOARD, {});
|
|
97
|
+
const runtimeSessions = await this.kernel.getRuntimeSessions();
|
|
98
|
+
this.throwIfBackgroundLeaseRenewalFailed(backgroundLeaseRenewal.error());
|
|
99
|
+
return {
|
|
100
|
+
status: 'running',
|
|
101
|
+
dashboard: dashboard.data,
|
|
102
|
+
queue_depth: this.state.queue.length,
|
|
103
|
+
run_metadata: {
|
|
104
|
+
...this.state.runMetadata,
|
|
105
|
+
runtime_sessions: runtimeSessions,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
await backgroundLeaseRenewal.stop();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
startBackgroundLeaseRenewal() {
|
|
114
|
+
let inFlight = null;
|
|
115
|
+
let failedRenewal = null;
|
|
116
|
+
let stopped = false;
|
|
117
|
+
const renew = () => {
|
|
118
|
+
if (stopped || inFlight !== null || failedRenewal) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
inFlight = this.leaseHeartbeatService
|
|
122
|
+
.renew()
|
|
123
|
+
.catch((error) => {
|
|
124
|
+
failedRenewal = error;
|
|
125
|
+
})
|
|
126
|
+
.finally(() => {
|
|
127
|
+
inFlight = null;
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
const timer = setInterval(renew, RunCoordinator.BACKGROUND_LEASE_RENEW_INTERVAL_MS);
|
|
131
|
+
if (typeof timer.unref === 'function') {
|
|
132
|
+
timer.unref();
|
|
90
133
|
}
|
|
91
|
-
const dashboard = await this.toolCaller.callTool('orchestrator', TOOLS.REPORT_DASHBOARD, {});
|
|
92
|
-
const runtimeSessions = await this.kernel.getRuntimeSessions();
|
|
93
134
|
return {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
135
|
+
stop: async () => {
|
|
136
|
+
stopped = true;
|
|
137
|
+
clearInterval(timer);
|
|
138
|
+
if (inFlight !== null) {
|
|
139
|
+
await inFlight;
|
|
140
|
+
}
|
|
100
141
|
},
|
|
142
|
+
error: () => failedRenewal,
|
|
101
143
|
};
|
|
102
144
|
}
|
|
145
|
+
throwIfBackgroundLeaseRenewalFailed(error) {
|
|
146
|
+
if (!error) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
103
151
|
async pauseOverBudgetFeatures(activeFeatureIds) {
|
|
104
152
|
const remaining = [];
|
|
105
153
|
for (const featureId of activeFeatureIds) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-coordinator.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/supervisor/run-coordinator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run-coordinator.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/supervisor/run-coordinator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/spec-files/progress.md
CHANGED
|
@@ -1585,6 +1585,58 @@
|
|
|
1585
1585
|
|
|
1586
1586
|
---
|
|
1587
1587
|
|
|
1588
|
+
✅ **Entry 226 — Prevent stale run leases during long waves via background heartbeat renewal**
|
|
1589
|
+
|
|
1590
|
+
- **Goal:** Fix false `run_already_active` stale-lease failures caused by long build/QA iterations that exceeded lease TTL between explicit heartbeat renewals.
|
|
1591
|
+
- **Changes made:**
|
|
1592
|
+
- `apps/control-plane/src/supervisor/run-coordinator.ts`
|
|
1593
|
+
- added background lease renewal loop (`30s` interval) started immediately after run lease acquisition and stopped in `finally`.
|
|
1594
|
+
- retained existing per-iteration renewal, and added failure propagation checks so background renewal errors fail the run deterministically.
|
|
1595
|
+
- `apps/control-plane/test/run-coordinator.spec.ts`
|
|
1596
|
+
- added long-wave regression test proving lease renewals occur during a 65s build wave (`GIVEN_long_running_wave...THEN_background_renew_keeps_run_lease_fresh`).
|
|
1597
|
+
- **Result:** `npx vitest run apps/control-plane/test/run-coordinator.spec.ts` [PASS] (including new regression). `npm run typecheck` [PASS]. `npm run validate:architecture` [PASS].
|
|
1598
|
+
|
|
1599
|
+
---
|
|
1600
|
+
|
|
1601
|
+
✅ **Entry 227 — Make `aop resume --feature-id` deterministic and single-feature scoped**
|
|
1602
|
+
|
|
1603
|
+
- **Goal:** Fix resume flow so `--feature-id` actually scopes execution to the requested feature instead of silently resuming all discovered non-terminal features.
|
|
1604
|
+
- **Changes made:**
|
|
1605
|
+
- `apps/control-plane/src/cli/resume-command-handler.ts`
|
|
1606
|
+
- added feature-id normalization helper.
|
|
1607
|
+
- threaded `options.feature_id` into resume-plan construction.
|
|
1608
|
+
- constrained feature candidate set to the requested feature when provided.
|
|
1609
|
+
- tagged requested feature source as `cli.feature_id` for traceability in `resume_plan`.
|
|
1610
|
+
- `apps/control-plane/test/resume-command.spec.ts`
|
|
1611
|
+
- added regression test proving `--feature-id feature_b` resumes only `feature_b` and only queries that feature state.
|
|
1612
|
+
- **Result:** `npx vitest run apps/control-plane/test/resume-command.spec.ts apps/control-plane/test/cli.unit.spec.ts` [PASS] (4 files / 106 tests). `npm run typecheck` [PASS]. `npm run validate:architecture` [PASS].
|
|
1613
|
+
|
|
1614
|
+
---
|
|
1615
|
+
|
|
1616
|
+
✅ **Entry 228 — Fix lint `no-misused-promises` in background lease renewal**
|
|
1617
|
+
|
|
1618
|
+
- **Goal:** Resolve publish-blocking ESLint errors in `RunCoordinator` caused by Promise truthiness checks in boolean conditionals.
|
|
1619
|
+
- **Changes made:**
|
|
1620
|
+
- `apps/control-plane/src/supervisor/run-coordinator.ts`
|
|
1621
|
+
- changed `if (stopped || inFlight || failedRenewal)` to `if (stopped || inFlight !== null || failedRenewal)`.
|
|
1622
|
+
- changed `if (inFlight) { await inFlight; }` to `if (inFlight !== null) { await inFlight; }`.
|
|
1623
|
+
- **Result:** `npx eslint apps/control-plane/src/supervisor/run-coordinator.ts` [PASS]. `npm run typecheck` [PASS].
|
|
1624
|
+
|
|
1625
|
+
---
|
|
1626
|
+
|
|
1627
|
+
✅ **Entry 229 — Restore path-normalizers coverage to satisfy global threshold**
|
|
1628
|
+
|
|
1629
|
+
- **Goal:** Eliminate the coverage gate failure caused by untested edge branches in `path-normalizers.ts`.
|
|
1630
|
+
- **Changes made:**
|
|
1631
|
+
- `apps/control-plane/test/path-normalizers.spec.ts`
|
|
1632
|
+
- added branch coverage for `normalizeRepoPathForState(...)` root-path normalization (`'.'` return path).
|
|
1633
|
+
- added branch coverage for `normalizeRepoPathForState(...)` nested repo-relative conversion.
|
|
1634
|
+
- added branch coverage for `normalizeFromWorktree(...)` in-worktree relative path behavior.
|
|
1635
|
+
- added branch coverage for `normalizeFromWorktree(...)` fallback when target resolves outside the worktree.
|
|
1636
|
+
- **Result:** `npm test` [PASS] (88 test files / 1242 tests). Global coverage now passes with `branches: 90.03%`; `apps/control-plane/src/core/utils/path-normalizers.ts` is `100%` across lines/statements/functions/branches.
|
|
1637
|
+
|
|
1638
|
+
---
|
|
1639
|
+
|
|
1588
1640
|
## Next Tasks:
|
|
1589
1641
|
|
|
1590
1642
|
- None currently.
|