ralph-research 0.1.0 → 0.1.2
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/README.md +69 -0
- package/dist/adapters/extractor/command-extractor.js +46 -4
- package/dist/adapters/extractor/command-extractor.js.map +1 -1
- package/dist/adapters/fs/json-file-frontier-store.js +4 -2
- package/dist/adapters/fs/json-file-frontier-store.js.map +1 -1
- package/dist/adapters/fs/lockfile.d.ts +21 -1
- package/dist/adapters/fs/lockfile.js +65 -11
- package/dist/adapters/fs/lockfile.js.map +1 -1
- package/dist/adapters/fs/manifest-loader.d.ts +5 -1
- package/dist/adapters/fs/manifest-loader.js +15 -2
- package/dist/adapters/fs/manifest-loader.js.map +1 -1
- package/dist/adapters/git/git-client.d.ts +2 -0
- package/dist/adapters/git/git-client.js +19 -0
- package/dist/adapters/git/git-client.js.map +1 -1
- package/dist/app/services/manual-decision-service.js +76 -25
- package/dist/app/services/manual-decision-service.js.map +1 -1
- package/dist/app/services/project-state-service.d.ts +26 -1
- package/dist/app/services/project-state-service.js +172 -14
- package/dist/app/services/project-state-service.js.map +1 -1
- package/dist/app/services/run-admission-service.d.ts +20 -0
- package/dist/app/services/run-admission-service.js +30 -0
- package/dist/app/services/run-admission-service.js.map +1 -0
- package/dist/app/services/run-cycle-service.d.ts +5 -4
- package/dist/app/services/run-cycle-service.js +175 -14
- package/dist/app/services/run-cycle-service.js.map +1 -1
- package/dist/app/services/run-loop-service.d.ts +21 -0
- package/dist/app/services/run-loop-service.js +155 -0
- package/dist/app/services/run-loop-service.js.map +1 -0
- package/dist/cli/commands/demo.js +1 -0
- package/dist/cli/commands/demo.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +8 -0
- package/dist/cli/commands/doctor.js +59 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.js +1 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/inspect.js +4 -0
- package/dist/cli/commands/inspect.js.map +1 -1
- package/dist/cli/commands/run.d.ts +3 -1
- package/dist/cli/commands/run.js +31 -28
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/status.js +35 -4
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/validate.js +21 -18
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/main.js +3 -10
- package/dist/cli/main.js.map +1 -1
- package/dist/core/engine/cycle-runner.d.ts +2 -0
- package/dist/core/engine/cycle-runner.js +504 -34
- package/dist/core/engine/cycle-runner.js.map +1 -1
- package/dist/core/engine/promotion-artifact.d.ts +23 -0
- package/dist/core/engine/promotion-artifact.js +58 -0
- package/dist/core/engine/promotion-artifact.js.map +1 -0
- package/dist/core/engine/workspace-manager.d.ts +10 -1
- package/dist/core/engine/workspace-manager.js +70 -3
- package/dist/core/engine/workspace-manager.js.map +1 -1
- package/dist/core/manifest/admission.d.ts +16 -0
- package/dist/core/manifest/admission.js +64 -0
- package/dist/core/manifest/admission.js.map +1 -0
- package/dist/core/manifest/schema.d.ts +47 -0
- package/dist/core/manifest/schema.js +18 -1
- package/dist/core/manifest/schema.js.map +1 -1
- package/dist/core/model/decision-record.d.ts +4 -0
- package/dist/core/model/decision-record.js +6 -0
- package/dist/core/model/decision-record.js.map +1 -1
- package/dist/core/model/metric-diagnostics.d.ts +7 -0
- package/dist/core/model/metric-diagnostics.js +51 -0
- package/dist/core/model/metric-diagnostics.js.map +1 -0
- package/dist/core/model/run-record.d.ts +6 -0
- package/dist/core/model/run-record.js +4 -0
- package/dist/core/model/run-record.js.map +1 -1
- package/dist/core/state/frontier-materializer.d.ts +12 -0
- package/dist/core/state/frontier-materializer.js +74 -0
- package/dist/core/state/frontier-materializer.js.map +1 -0
- package/dist/core/state/frontier-semantics.d.ts +12 -0
- package/dist/core/state/frontier-semantics.js +26 -0
- package/dist/core/state/frontier-semantics.js.map +1 -0
- package/dist/core/state/ratchet-engine.js +29 -21
- package/dist/core/state/ratchet-engine.js.map +1 -1
- package/dist/core/state/recovery-classifier.d.ts +17 -0
- package/dist/core/state/recovery-classifier.js +150 -0
- package/dist/core/state/recovery-classifier.js.map +1 -0
- package/dist/core/state/run-state-machine.js +33 -23
- package/dist/core/state/run-state-machine.js.map +1 -1
- package/dist/core/state/stopping-target.d.ts +14 -0
- package/dist/core/state/stopping-target.js +67 -0
- package/dist/core/state/stopping-target.js.map +1 -0
- package/dist/mcp/server.js +17 -23
- package/dist/mcp/server.js.map +1 -1
- package/package.json +2 -2
- package/templates/writing/ralph.yaml +7 -0
|
@@ -7,8 +7,11 @@ import { loadManifestFromFile } from "../../adapters/fs/manifest-loader.js";
|
|
|
7
7
|
import { GitClient } from "../../adapters/git/git-client.js";
|
|
8
8
|
import { DEFAULT_STORAGE_ROOT } from "../../core/manifest/defaults.js";
|
|
9
9
|
import { DEFAULT_MANIFEST_FILENAME } from "../../core/manifest/schema.js";
|
|
10
|
+
import { ensurePromotionArtifact, requirePromotionPatch, requirePromotionPaths } from "../../core/engine/promotion-artifact.js";
|
|
10
11
|
import { advanceRunPhase } from "../../core/state/run-state-machine.js";
|
|
11
12
|
import { GitWorktreeWorkspaceManager } from "../../core/engine/workspace-manager.js";
|
|
13
|
+
import { attachCommitShaToFrontierEntries, buildAcceptedFrontierEntry, updateAcceptedFrontier, } from "../../core/state/frontier-semantics.js";
|
|
14
|
+
import { materializeFrontier } from "../../core/state/frontier-materializer.js";
|
|
12
15
|
export class ManualDecisionService {
|
|
13
16
|
async accept(input) {
|
|
14
17
|
const repoRoot = resolve(input.repoRoot);
|
|
@@ -25,31 +28,75 @@ export class ManualDecisionService {
|
|
|
25
28
|
const gitClient = new GitClient(repoRoot);
|
|
26
29
|
const run = await requirePendingHumanRun(runStore, input.runId);
|
|
27
30
|
const decision = await requireDecision(decisionStore, run);
|
|
28
|
-
const
|
|
29
|
-
|
|
31
|
+
const runs = await runStore.list();
|
|
32
|
+
const decisions = await decisionStore.list();
|
|
33
|
+
const currentFrontier = await materializeFrontier({
|
|
34
|
+
manifest,
|
|
35
|
+
frontierStore,
|
|
36
|
+
runs,
|
|
37
|
+
decisions,
|
|
30
38
|
});
|
|
31
|
-
const
|
|
32
|
-
const
|
|
39
|
+
const decisionCreatedAt = new Date().toISOString();
|
|
40
|
+
const runDir = join(storageRoot, "runs", run.runId);
|
|
41
|
+
const promotion = await ensurePromotionArtifact({
|
|
42
|
+
run,
|
|
43
|
+
runDir,
|
|
44
|
+
manifest,
|
|
45
|
+
workspaceManager,
|
|
46
|
+
});
|
|
47
|
+
let updatedRun = {
|
|
48
|
+
...run,
|
|
49
|
+
proposal: {
|
|
50
|
+
...run.proposal,
|
|
51
|
+
patchPath: promotion.patchPath,
|
|
52
|
+
changedPaths: promotion.changedPaths,
|
|
53
|
+
filesChanged: promotion.changedPaths.length,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
const candidateFrontierEntry = buildAcceptedFrontierEntry({
|
|
57
|
+
runId: updatedRun.runId,
|
|
58
|
+
candidateId: updatedRun.candidateId,
|
|
59
|
+
acceptedAt: decisionCreatedAt,
|
|
60
|
+
metrics: updatedRun.metrics,
|
|
61
|
+
artifacts: updatedRun.artifacts,
|
|
62
|
+
});
|
|
63
|
+
const frontierUpdate = updateAcceptedFrontier(manifest, currentFrontier, candidateFrontierEntry);
|
|
64
|
+
let acceptedDecision = {
|
|
33
65
|
...decision,
|
|
34
66
|
outcome: "accepted",
|
|
35
67
|
actorType: "human",
|
|
36
68
|
...(input.by ? { actorId: input.by } : {}),
|
|
37
69
|
reason: appendHumanDecisionReason(decision.reason, "accepted", input),
|
|
38
|
-
|
|
39
|
-
|
|
70
|
+
createdAt: decisionCreatedAt,
|
|
71
|
+
frontierChanged: frontierUpdate.comparison.frontierChanged,
|
|
72
|
+
beforeFrontierIds: currentFrontier.map((entry) => entry.frontierId),
|
|
73
|
+
afterFrontierIds: frontierUpdate.entries.map((entry) => entry.frontierId),
|
|
74
|
+
};
|
|
75
|
+
await decisionStore.put(acceptedDecision);
|
|
76
|
+
updatedRun = advanceRunPhase(updatedRun, "decision_written", {
|
|
77
|
+
status: "accepted",
|
|
78
|
+
decisionId: acceptedDecision.decisionId,
|
|
79
|
+
});
|
|
80
|
+
await runStore.put(updatedRun);
|
|
81
|
+
await gitClient.applyPatchIfNeeded(requirePromotionPatch(updatedRun));
|
|
82
|
+
const commitResult = await gitClient.stageAndCommitPaths(requirePromotionPaths(updatedRun), `rrx: accept ${updatedRun.runId}`);
|
|
83
|
+
acceptedDecision = {
|
|
84
|
+
...acceptedDecision,
|
|
40
85
|
commitSha: commitResult.commitSha,
|
|
41
86
|
};
|
|
42
87
|
await decisionStore.put(acceptedDecision);
|
|
43
|
-
const acceptedFrontier =
|
|
44
|
-
|
|
45
|
-
|
|
88
|
+
const acceptedFrontier = attachCommitShaToFrontierEntries(frontierUpdate.entries, updatedRun.runId, commitResult.commitSha);
|
|
89
|
+
updatedRun = advanceRunPhase(updatedRun, "committed");
|
|
90
|
+
await runStore.put(updatedRun);
|
|
46
91
|
await frontierStore.save(acceptedFrontier);
|
|
47
|
-
|
|
92
|
+
updatedRun = advanceRunPhase(updatedRun, "frontier_updated");
|
|
93
|
+
await runStore.put(updatedRun);
|
|
94
|
+
await workspaceManager.cleanupWorkspace(updatedRun.candidateId);
|
|
95
|
+
updatedRun = advanceRunPhase(updatedRun, "completed", {
|
|
48
96
|
status: "accepted",
|
|
49
97
|
decisionId: acceptedDecision.decisionId,
|
|
50
98
|
});
|
|
51
99
|
await runStore.put(updatedRun);
|
|
52
|
-
await workspaceManager.cleanupWorkspace(run.candidateId);
|
|
53
100
|
return {
|
|
54
101
|
status: "accepted",
|
|
55
102
|
run: updatedRun,
|
|
@@ -75,23 +122,38 @@ export class ManualDecisionService {
|
|
|
75
122
|
const workspaceManager = new GitWorktreeWorkspaceManager(repoRoot, storageRoot);
|
|
76
123
|
const run = await requirePendingHumanRun(runStore, input.runId);
|
|
77
124
|
const decision = await requireDecision(decisionStore, run);
|
|
78
|
-
const
|
|
125
|
+
const runs = await runStore.list();
|
|
126
|
+
const decisions = await decisionStore.list();
|
|
127
|
+
const currentFrontier = await materializeFrontier({
|
|
128
|
+
manifest,
|
|
129
|
+
frontierStore,
|
|
130
|
+
runs,
|
|
131
|
+
decisions,
|
|
132
|
+
});
|
|
133
|
+
const decisionCreatedAt = new Date().toISOString();
|
|
79
134
|
const rejectedDecision = {
|
|
80
135
|
...decision,
|
|
81
136
|
outcome: "rejected",
|
|
82
137
|
actorType: "human",
|
|
83
138
|
...(input.by ? { actorId: input.by } : {}),
|
|
84
139
|
reason: appendHumanDecisionReason(decision.reason, "rejected", input),
|
|
140
|
+
createdAt: decisionCreatedAt,
|
|
85
141
|
frontierChanged: false,
|
|
142
|
+
beforeFrontierIds: currentFrontier.map((entry) => entry.frontierId),
|
|
86
143
|
afterFrontierIds: currentFrontier.map((entry) => entry.frontierId),
|
|
87
144
|
};
|
|
88
145
|
await decisionStore.put(rejectedDecision);
|
|
89
|
-
|
|
146
|
+
let updatedRun = advanceRunPhase(run, "decision_written", {
|
|
147
|
+
status: "rejected",
|
|
148
|
+
decisionId: rejectedDecision.decisionId,
|
|
149
|
+
});
|
|
150
|
+
await runStore.put(updatedRun);
|
|
151
|
+
await workspaceManager.cleanupWorkspace(updatedRun.candidateId);
|
|
152
|
+
updatedRun = advanceRunPhase(updatedRun, "completed", {
|
|
90
153
|
status: "rejected",
|
|
91
154
|
decisionId: rejectedDecision.decisionId,
|
|
92
155
|
});
|
|
93
156
|
await runStore.put(updatedRun);
|
|
94
|
-
await workspaceManager.cleanupWorkspace(run.candidateId);
|
|
95
157
|
return {
|
|
96
158
|
status: "rejected",
|
|
97
159
|
run: updatedRun,
|
|
@@ -129,15 +191,4 @@ function appendHumanDecisionReason(existingReason, outcome, input) {
|
|
|
129
191
|
const note = input.note ? `; note=${input.note}` : "";
|
|
130
192
|
return `${existingReason}; human ${outcome}${by}${note}`;
|
|
131
193
|
}
|
|
132
|
-
function buildManualFrontierEntry(run, commitSha) {
|
|
133
|
-
return {
|
|
134
|
-
frontierId: `frontier-${run.runId}`,
|
|
135
|
-
runId: run.runId,
|
|
136
|
-
candidateId: run.candidateId,
|
|
137
|
-
acceptedAt: new Date().toISOString(),
|
|
138
|
-
commitSha,
|
|
139
|
-
metrics: run.metrics,
|
|
140
|
-
artifacts: run.artifacts,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
194
|
//# sourceMappingURL=manual-decision-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manual-decision-service.js","sourceRoot":"","sources":["../../../src/app/services/manual-decision-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,yBAAyB,
|
|
1
|
+
{"version":3,"file":"manual-decision-service.js","sourceRoot":"","sources":["../../../src/app/services/manual-decision-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { DecisionRecord } from "../../core/model/decision-record.js";
|
|
2
2
|
import type { FrontierEntry } from "../../core/model/frontier-entry.js";
|
|
3
|
-
import type { RunRecord } from "../../core/model/run-record.js";
|
|
3
|
+
import type { PendingAction, RunRecord } from "../../core/model/run-record.js";
|
|
4
|
+
import { type RecoveryStatus } from "../../core/state/recovery-classifier.js";
|
|
4
5
|
export interface ProjectStateInput {
|
|
5
6
|
repoRoot: string;
|
|
6
7
|
manifestPath?: string;
|
|
@@ -8,14 +9,32 @@ export interface ProjectStateInput {
|
|
|
8
9
|
export interface ProjectStatus {
|
|
9
10
|
manifestPath: string;
|
|
10
11
|
latestRun: RunRecord | null;
|
|
12
|
+
recovery: RecoveryStatus;
|
|
13
|
+
runtime: ProjectRuntimeStatus;
|
|
11
14
|
frontier: FrontierEntry[];
|
|
12
15
|
pendingHumanRuns: RunRecord[];
|
|
13
16
|
decisions: DecisionRecord[];
|
|
14
17
|
}
|
|
18
|
+
export type RuntimeState = "idle" | "running" | "stale" | "stopped";
|
|
19
|
+
export interface ProjectRuntimeStatus {
|
|
20
|
+
state: RuntimeState;
|
|
21
|
+
processAlive: boolean;
|
|
22
|
+
stale: boolean;
|
|
23
|
+
resumable: boolean;
|
|
24
|
+
reason: string;
|
|
25
|
+
lockPath: string;
|
|
26
|
+
pid?: number;
|
|
27
|
+
lastHeartbeatAt?: string;
|
|
28
|
+
heartbeatAgeMs?: number;
|
|
29
|
+
currentStep: PendingAction;
|
|
30
|
+
currentStepStartedAt?: string;
|
|
31
|
+
lastProgressAt?: string;
|
|
32
|
+
}
|
|
15
33
|
export interface InspectRunResult {
|
|
16
34
|
manifestPath: string;
|
|
17
35
|
run: RunRecord;
|
|
18
36
|
decision: DecisionRecord | null;
|
|
37
|
+
recovery: RecoveryStatus;
|
|
19
38
|
frontier: FrontierEntry[];
|
|
20
39
|
explainability: {
|
|
21
40
|
decisionReason: string | null;
|
|
@@ -30,6 +49,12 @@ export interface InspectRunResult {
|
|
|
30
49
|
delta?: number;
|
|
31
50
|
confidence?: number;
|
|
32
51
|
direction: "maximize" | "minimize";
|
|
52
|
+
sourceMetricId?: string;
|
|
53
|
+
}>;
|
|
54
|
+
metricDiagnostics: Array<{
|
|
55
|
+
metricId: string;
|
|
56
|
+
sourceMetricId?: string;
|
|
57
|
+
reasons: string[];
|
|
33
58
|
}>;
|
|
34
59
|
diffSummary: {
|
|
35
60
|
filesChanged?: number;
|
|
@@ -2,8 +2,13 @@ import { join, resolve } from "node:path";
|
|
|
2
2
|
import { JsonFileDecisionStore } from "../../adapters/fs/json-file-decision-store.js";
|
|
3
3
|
import { JsonFileFrontierStore } from "../../adapters/fs/json-file-frontier-store.js";
|
|
4
4
|
import { JsonFileRunStore } from "../../adapters/fs/json-file-run-store.js";
|
|
5
|
+
import { inspectLock } from "../../adapters/fs/lockfile.js";
|
|
5
6
|
import { loadManifestFromFile } from "../../adapters/fs/manifest-loader.js";
|
|
7
|
+
import { DEFAULT_STORAGE_ROOT } from "../../core/manifest/defaults.js";
|
|
6
8
|
import { DEFAULT_MANIFEST_FILENAME } from "../../core/manifest/schema.js";
|
|
9
|
+
import { summarizeMetricDiagnostics } from "../../core/model/metric-diagnostics.js";
|
|
10
|
+
import { materializeFrontier } from "../../core/state/frontier-materializer.js";
|
|
11
|
+
import { classifyRecovery, derivePendingAction } from "../../core/state/recovery-classifier.js";
|
|
7
12
|
export class RunNotFoundError extends Error {
|
|
8
13
|
constructor(runId) {
|
|
9
14
|
super(`Run ${runId} was not found`);
|
|
@@ -11,33 +16,69 @@ export class RunNotFoundError extends Error {
|
|
|
11
16
|
}
|
|
12
17
|
}
|
|
13
18
|
export async function getProjectStatus(input) {
|
|
14
|
-
const { manifestPath, runStore, decisionStore, frontierStore } = await loadProjectStores(input);
|
|
19
|
+
const { manifestPath, manifest, runStore, decisionStore, frontierStore, lockPath } = await loadProjectStores(input);
|
|
15
20
|
const runs = await runStore.list();
|
|
16
21
|
const decisions = await decisionStore.list();
|
|
17
|
-
const frontier = await
|
|
22
|
+
const frontier = await materializeFrontier({
|
|
23
|
+
manifest,
|
|
24
|
+
frontierStore,
|
|
25
|
+
runs,
|
|
26
|
+
decisions,
|
|
27
|
+
});
|
|
28
|
+
const latestRun = runs.at(-1) ?? null;
|
|
29
|
+
const latestDecision = latestRun?.decisionId
|
|
30
|
+
? decisions.find((decision) => decision.decisionId === latestRun.decisionId) ?? await decisionStore.get(latestRun.decisionId)
|
|
31
|
+
: null;
|
|
32
|
+
const recovery = classifyRecovery({
|
|
33
|
+
latestRun,
|
|
34
|
+
decision: latestDecision,
|
|
35
|
+
frontier,
|
|
36
|
+
});
|
|
37
|
+
const lockRuntime = await inspectLock(lockPath);
|
|
18
38
|
return {
|
|
19
39
|
manifestPath,
|
|
20
|
-
latestRun
|
|
40
|
+
latestRun,
|
|
41
|
+
recovery,
|
|
42
|
+
runtime: describeRuntime({
|
|
43
|
+
latestRun,
|
|
44
|
+
recovery,
|
|
45
|
+
lockPath,
|
|
46
|
+
lockRuntime,
|
|
47
|
+
}),
|
|
21
48
|
frontier,
|
|
22
49
|
pendingHumanRuns: runs.filter((run) => run.status === "needs_human"),
|
|
23
50
|
decisions,
|
|
24
51
|
};
|
|
25
52
|
}
|
|
26
53
|
export async function getProjectFrontier(input) {
|
|
27
|
-
const { manifestPath, frontierStore } = await loadProjectStores(input);
|
|
54
|
+
const { manifestPath, manifest, runStore, decisionStore, frontierStore } = await loadProjectStores(input);
|
|
55
|
+
const runs = await runStore.list();
|
|
56
|
+
const decisions = await decisionStore.list();
|
|
28
57
|
return {
|
|
29
58
|
manifestPath,
|
|
30
|
-
frontier: await
|
|
59
|
+
frontier: await materializeFrontier({
|
|
60
|
+
manifest,
|
|
61
|
+
frontierStore,
|
|
62
|
+
runs,
|
|
63
|
+
decisions,
|
|
64
|
+
}),
|
|
31
65
|
};
|
|
32
66
|
}
|
|
33
67
|
export async function inspectRun(input) {
|
|
34
|
-
const { manifestPath, runStore, decisionStore, frontierStore } = await loadProjectStores(input);
|
|
68
|
+
const { manifestPath, manifest, runStore, decisionStore, frontierStore } = await loadProjectStores(input);
|
|
69
|
+
const runs = await runStore.list();
|
|
70
|
+
const decisions = await decisionStore.list();
|
|
35
71
|
const run = await runStore.get(input.runId);
|
|
36
72
|
if (!run) {
|
|
37
73
|
throw new RunNotFoundError(input.runId);
|
|
38
74
|
}
|
|
39
75
|
const decision = run.decisionId ? await decisionStore.get(run.decisionId) : null;
|
|
40
|
-
const frontier = await
|
|
76
|
+
const frontier = await materializeFrontier({
|
|
77
|
+
manifest,
|
|
78
|
+
frontierStore,
|
|
79
|
+
runs,
|
|
80
|
+
decisions,
|
|
81
|
+
});
|
|
41
82
|
const judgeRationales = Object.values(run.metrics)
|
|
42
83
|
.flatMap((metric) => {
|
|
43
84
|
const rationale = typeof metric.details.rationale === "string" ? metric.details.rationale : null;
|
|
@@ -52,22 +93,45 @@ export async function inspectRun(input) {
|
|
|
52
93
|
},
|
|
53
94
|
];
|
|
54
95
|
});
|
|
55
|
-
const metricDeltas = Object.values(run.metrics).map((metric) =>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
96
|
+
const metricDeltas = Object.values(run.metrics).map((metric) => {
|
|
97
|
+
const diagnostics = summarizeMetricDiagnostics(metric);
|
|
98
|
+
return {
|
|
99
|
+
metricId: metric.metricId,
|
|
100
|
+
value: metric.value,
|
|
101
|
+
direction: metric.direction,
|
|
102
|
+
...(metric.confidence === undefined ? {} : { confidence: metric.confidence }),
|
|
103
|
+
...(diagnostics?.sourceMetricId ? { sourceMetricId: diagnostics.sourceMetricId } : {}),
|
|
104
|
+
...(decision?.metricId === metric.metricId && decision.delta !== undefined ? { delta: decision.delta } : {}),
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
const metricDiagnostics = Object.values(run.metrics)
|
|
108
|
+
.map((metric) => {
|
|
109
|
+
const diagnostics = summarizeMetricDiagnostics(metric);
|
|
110
|
+
if (!diagnostics) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
metricId: metric.metricId,
|
|
115
|
+
reasons: diagnostics.reasons,
|
|
116
|
+
...(diagnostics.sourceMetricId ? { sourceMetricId: diagnostics.sourceMetricId } : {}),
|
|
117
|
+
};
|
|
118
|
+
})
|
|
119
|
+
.filter((entry) => entry !== null);
|
|
62
120
|
return {
|
|
63
121
|
manifestPath,
|
|
64
122
|
run,
|
|
65
123
|
decision,
|
|
124
|
+
recovery: classifyRecovery({
|
|
125
|
+
latestRun: run,
|
|
126
|
+
decision,
|
|
127
|
+
frontier,
|
|
128
|
+
}),
|
|
66
129
|
frontier,
|
|
67
130
|
explainability: {
|
|
68
131
|
decisionReason: decision?.reason ?? null,
|
|
69
132
|
judgeRationales,
|
|
70
133
|
metricDeltas,
|
|
134
|
+
metricDiagnostics,
|
|
71
135
|
diffSummary: {
|
|
72
136
|
...(run.proposal.filesChanged === undefined ? {} : { filesChanged: run.proposal.filesChanged }),
|
|
73
137
|
...(run.proposal.diffLines === undefined ? {} : { lineDelta: run.proposal.diffLines }),
|
|
@@ -84,9 +148,103 @@ async function loadProjectStores(input) {
|
|
|
84
148
|
const storageRoot = join(repoRoot, loadedManifest.manifest.storage.root);
|
|
85
149
|
return {
|
|
86
150
|
manifestPath: loadedManifest.path,
|
|
151
|
+
manifest: loadedManifest.manifest,
|
|
152
|
+
lockPath: join(repoRoot, DEFAULT_STORAGE_ROOT, "lock"),
|
|
87
153
|
runStore: new JsonFileRunStore(join(storageRoot, "runs")),
|
|
88
154
|
decisionStore: new JsonFileDecisionStore(join(storageRoot, "decisions")),
|
|
89
155
|
frontierStore: new JsonFileFrontierStore(join(storageRoot, "frontier.json")),
|
|
90
156
|
};
|
|
91
157
|
}
|
|
158
|
+
function describeRuntime(input) {
|
|
159
|
+
const currentStep = getCurrentStep(input.latestRun);
|
|
160
|
+
const lastProgressAt = input.latestRun
|
|
161
|
+
? input.latestRun.updatedAt ?? input.latestRun.endedAt ?? input.latestRun.startedAt
|
|
162
|
+
: undefined;
|
|
163
|
+
const currentStepStartedAt = input.latestRun
|
|
164
|
+
? input.latestRun.currentStepStartedAt ?? input.latestRun.updatedAt ?? input.latestRun.startedAt
|
|
165
|
+
: undefined;
|
|
166
|
+
const processAlive = input.lockRuntime?.processAlive ?? false;
|
|
167
|
+
const stale = input.lockRuntime?.stale ?? false;
|
|
168
|
+
const runCycleLock = input.lockRuntime
|
|
169
|
+
? (input.lockRuntime.metadata.owner?.operation ?? "run-cycle") === "run-cycle"
|
|
170
|
+
: false;
|
|
171
|
+
if (input.recovery.classification === "resumable") {
|
|
172
|
+
if (processAlive && !stale && runCycleLock) {
|
|
173
|
+
return {
|
|
174
|
+
state: "running",
|
|
175
|
+
processAlive,
|
|
176
|
+
stale: false,
|
|
177
|
+
resumable: true,
|
|
178
|
+
reason: "live run-cycle heartbeat present",
|
|
179
|
+
lockPath: input.lockPath,
|
|
180
|
+
currentStep,
|
|
181
|
+
...(input.lockRuntime ? buildLockDetails(input.lockRuntime) : {}),
|
|
182
|
+
...(currentStepStartedAt ? { currentStepStartedAt } : {}),
|
|
183
|
+
...(lastProgressAt ? { lastProgressAt } : {}),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
state: "stale",
|
|
188
|
+
processAlive,
|
|
189
|
+
stale: true,
|
|
190
|
+
resumable: true,
|
|
191
|
+
reason: "latest run is resumable but no live run-cycle heartbeat is present",
|
|
192
|
+
lockPath: input.lockPath,
|
|
193
|
+
currentStep,
|
|
194
|
+
...(input.lockRuntime ? buildLockDetails(input.lockRuntime) : {}),
|
|
195
|
+
...(currentStepStartedAt ? { currentStepStartedAt } : {}),
|
|
196
|
+
...(lastProgressAt ? { lastProgressAt } : {}),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
if (input.recovery.classification === "manual_review_blocked") {
|
|
200
|
+
return {
|
|
201
|
+
state: "stopped",
|
|
202
|
+
processAlive,
|
|
203
|
+
stale,
|
|
204
|
+
resumable: false,
|
|
205
|
+
reason: "manual review blocked",
|
|
206
|
+
lockPath: input.lockPath,
|
|
207
|
+
currentStep: "none",
|
|
208
|
+
...(input.lockRuntime ? buildLockDetails(input.lockRuntime) : {}),
|
|
209
|
+
...(lastProgressAt ? { lastProgressAt } : {}),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
if (input.recovery.classification === "repair_required") {
|
|
213
|
+
return {
|
|
214
|
+
state: "stopped",
|
|
215
|
+
processAlive,
|
|
216
|
+
stale,
|
|
217
|
+
resumable: false,
|
|
218
|
+
reason: "repair required",
|
|
219
|
+
lockPath: input.lockPath,
|
|
220
|
+
currentStep: "none",
|
|
221
|
+
...(input.lockRuntime ? buildLockDetails(input.lockRuntime) : {}),
|
|
222
|
+
...(lastProgressAt ? { lastProgressAt } : {}),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
state: "idle",
|
|
227
|
+
processAlive,
|
|
228
|
+
stale,
|
|
229
|
+
resumable: false,
|
|
230
|
+
reason: "no live run is expected",
|
|
231
|
+
lockPath: input.lockPath,
|
|
232
|
+
currentStep: "none",
|
|
233
|
+
...(input.lockRuntime ? buildLockDetails(input.lockRuntime) : {}),
|
|
234
|
+
...(lastProgressAt ? { lastProgressAt } : {}),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
function getCurrentStep(run) {
|
|
238
|
+
if (!run) {
|
|
239
|
+
return "none";
|
|
240
|
+
}
|
|
241
|
+
return run.pendingAction !== "none" ? run.pendingAction : derivePendingAction(run);
|
|
242
|
+
}
|
|
243
|
+
function buildLockDetails(lockRuntime) {
|
|
244
|
+
return {
|
|
245
|
+
pid: lockRuntime.metadata.pid,
|
|
246
|
+
lastHeartbeatAt: lockRuntime.metadata.updatedAt,
|
|
247
|
+
heartbeatAgeMs: lockRuntime.heartbeatAgeMs,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
92
250
|
//# sourceMappingURL=project-state-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-state-service.js","sourceRoot":"","sources":["../../../src/app/services/project-state-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"project-state-service.js","sourceRoot":"","sources":["../../../src/app/services/project-state-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAyB,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAIpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAuB,MAAM,yCAAyC,CAAC;AAqErH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAmB,KAAa;QAC9B,KAAK,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAwB;IAC7D,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACpH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC;QACzC,QAAQ;QACR,aAAa;QACb,IAAI;QACJ,SAAS;KACV,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACtC,MAAM,cAAc,GAAG,SAAS,EAAE,UAAU;QAC1C,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,CAAC,IAAI,MAAM,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;QAC7H,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,QAAQ,GAAG,gBAAgB,CAAC;QAChC,SAAS;QACT,QAAQ,EAAE,cAAc;QACxB,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEhD,OAAO;QACL,YAAY;QACZ,SAAS;QACT,QAAQ;QACR,OAAO,EAAE,eAAe,CAAC;YACvB,SAAS;YACT,QAAQ;YACR,QAAQ;YACR,WAAW;SACZ,CAAC;QACF,QAAQ;QACR,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,aAAa,CAAC;QACpE,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAwB;IAI/D,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC1G,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC7C,OAAO;QACL,YAAY;QACZ,QAAQ,EAAE,MAAM,mBAAmB,CAAC;YAClC,QAAQ;YACR,aAAa;YACb,IAAI;YACJ,SAAS;SACV,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAA4C;IAC3E,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC1G,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjF,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC;QACzC,QAAQ;QACR,aAAa;QACb,IAAI;QACJ,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;SAC/C,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACjG,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL;gBACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS;gBACT,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5E;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7D,MAAM,WAAW,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAEvD,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7E,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7G,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;SACjD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,WAAW,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAsC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAEzE,OAAO;QACL,YAAY;QACZ,GAAG;QACH,QAAQ;QACR,QAAQ,EAAE,gBAAgB,CAAC;YACzB,SAAS,EAAE,GAAG;YACd,QAAQ;YACR,QAAQ;SACT,CAAC;QACF,QAAQ;QACR,cAAc,EAAE;YACd,cAAc,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI;YACxC,eAAe;YACf,YAAY;YACZ,iBAAiB;YACjB,WAAW,EAAE;gBACX,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC/F,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACtF,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;aAChG;SACF;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,KAAwB;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,IAAI,yBAAyB,CAAC,CAAC;IACxF,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,OAAO;QACL,YAAY,EAAE,cAAc,CAAC,IAAI;QACjC,QAAQ,EAAE,cAAc,CAAC,QAAQ;QACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,oBAAoB,EAAE,MAAM,CAAC;QACtD,QAAQ,EAAE,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACzD,aAAa,EAAE,IAAI,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACxE,aAAa,EAAE,IAAI,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAKxB;IACC,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS;QACpC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS;QACnF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,oBAAoB,GAAG,KAAK,CAAC,SAAS;QAC1C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,oBAAoB,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS;QAChG,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,YAAY,IAAI,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,KAAK,CAAC;IAChD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW;QACpC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,WAAW,CAAC,KAAK,WAAW;QAC9E,CAAC,CAAC,KAAK,CAAC;IAEV,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;QAClD,IAAI,YAAY,IAAI,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;YAC3C,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,YAAY;gBACZ,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,kCAAkC;gBAC1C,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW;gBACX,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,OAAO;YACd,YAAY;YACZ,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,oEAAoE;YAC5E,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW;YACX,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,KAAK,uBAAuB,EAAE,CAAC;QAC9D,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,YAAY;YACZ,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,MAAM;YACnB,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,KAAK,iBAAiB,EAAE,CAAC;QACxD,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,YAAY;YACZ,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,MAAM;YACnB,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM;QACb,YAAY;QACZ,KAAK;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,yBAAyB;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,MAAM;QACnB,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAqB;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,gBAAgB,CAAC,WAA6B;IACrD,OAAO;QACL,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG;QAC7B,eAAe,EAAE,WAAW,CAAC,QAAQ,CAAC,SAAS;QAC/C,cAAc,EAAE,WAAW,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface RunAdmissionInput {
|
|
2
|
+
repoRoot: string;
|
|
3
|
+
manifestPath?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface RunAdmissionSuccess {
|
|
6
|
+
ok: true;
|
|
7
|
+
executable: true;
|
|
8
|
+
path: string;
|
|
9
|
+
project: string;
|
|
10
|
+
schemaVersion: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RunAdmissionFailure {
|
|
13
|
+
ok: false;
|
|
14
|
+
executable: false;
|
|
15
|
+
path: string;
|
|
16
|
+
error: string;
|
|
17
|
+
details?: unknown;
|
|
18
|
+
}
|
|
19
|
+
export type RunAdmissionResult = RunAdmissionSuccess | RunAdmissionFailure;
|
|
20
|
+
export declare function getRunAdmission(input: RunAdmissionInput): Promise<RunAdmissionResult>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { loadManifestFromFile, ManifestLoadError } from "../../adapters/fs/manifest-loader.js";
|
|
3
|
+
import { DEFAULT_MANIFEST_FILENAME } from "../../core/manifest/schema.js";
|
|
4
|
+
export async function getRunAdmission(input) {
|
|
5
|
+
const repoRoot = resolve(input.repoRoot);
|
|
6
|
+
const manifestPath = resolve(repoRoot, input.manifestPath ?? DEFAULT_MANIFEST_FILENAME);
|
|
7
|
+
try {
|
|
8
|
+
const loadedManifest = await loadManifestFromFile(manifestPath, { repoRoot });
|
|
9
|
+
return {
|
|
10
|
+
ok: true,
|
|
11
|
+
executable: true,
|
|
12
|
+
path: loadedManifest.path,
|
|
13
|
+
project: loadedManifest.manifest.project.name,
|
|
14
|
+
schemaVersion: loadedManifest.manifest.schemaVersion,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error instanceof ManifestLoadError) {
|
|
19
|
+
return {
|
|
20
|
+
ok: false,
|
|
21
|
+
executable: false,
|
|
22
|
+
path: manifestPath,
|
|
23
|
+
error: error.message,
|
|
24
|
+
...(error.causeValue === undefined ? {} : { details: error.causeValue }),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=run-admission-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-admission-service.js","sourceRoot":"","sources":["../../../src/app/services/run-admission-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAyB1E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAwB;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,IAAI,yBAAyB,CAAC,CAAC;IAExF,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9E,OAAO;YACL,EAAE,EAAE,IAAI;YACR,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,cAAc,CAAC,IAAI;YACzB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;YAC7C,aAAa,EAAE,cAAc,CAAC,QAAQ,CAAC,aAAa;SACrD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACvC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,UAAU,EAAE,KAAK;gBACjB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;aACzE,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import type { JudgeProvider } from "../../adapters/judge/llm-judge-provider.js";
|
|
2
|
-
import { type
|
|
2
|
+
import { type RecoveryStatus } from "../../core/state/recovery-classifier.js";
|
|
3
3
|
import { type CycleRunResult } from "../../core/engine/cycle-runner.js";
|
|
4
4
|
export interface RunCycleServiceInput {
|
|
5
5
|
repoRoot: string;
|
|
6
6
|
manifestPath?: string;
|
|
7
|
-
|
|
7
|
+
fresh?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export interface RunCycleServiceResult {
|
|
10
|
-
status: CycleRunResult["status"]
|
|
10
|
+
status: CycleRunResult["status"];
|
|
11
11
|
manifestPath: string;
|
|
12
12
|
lockPath: string;
|
|
13
13
|
runResult?: CycleRunResult;
|
|
14
|
-
|
|
14
|
+
recovery?: RecoveryStatus;
|
|
15
|
+
warning?: string;
|
|
15
16
|
}
|
|
16
17
|
export interface RunCycleServiceDependencies {
|
|
17
18
|
judgeProvider?: JudgeProvider;
|