@claudexor/orchestrator 3.1.2 → 3.2.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/attemptFinalize.d.ts +14 -11
- package/dist/attemptFinalize.d.ts.map +1 -1
- package/dist/attemptFinalize.js +41 -14
- package/dist/attemptFinalize.js.map +1 -1
- package/dist/attemptTelemetry.d.ts +7 -0
- package/dist/attemptTelemetry.d.ts.map +1 -1
- package/dist/attemptTelemetry.js +2 -1
- package/dist/attemptTelemetry.js.map +1 -1
- package/dist/attemptUsageCost.d.ts +17 -1
- package/dist/attemptUsageCost.d.ts.map +1 -1
- package/dist/attemptUsageCost.js +11 -1
- package/dist/attemptUsageCost.js.map +1 -1
- package/dist/budgetFailure.js.map +1 -1
- package/dist/credential-profile-rotation.d.ts +145 -0
- package/dist/credential-profile-rotation.d.ts.map +1 -0
- package/dist/credential-profile-rotation.js +315 -0
- package/dist/credential-profile-rotation.js.map +1 -0
- package/dist/credential-profiles.d.ts +35 -134
- package/dist/credential-profiles.d.ts.map +1 -1
- package/dist/credential-profiles.js +73 -295
- package/dist/credential-profiles.js.map +1 -1
- package/dist/decisionBudget.d.ts +2 -2
- package/dist/decisionBudget.d.ts.map +1 -1
- package/dist/deepScanReducer.d.ts +14 -44
- package/dist/deepScanReducer.d.ts.map +1 -1
- package/dist/deepScanReducer.js +240 -128
- package/dist/deepScanReducer.js.map +1 -1
- package/dist/delegationBudgetAuthority.d.ts.map +1 -1
- package/dist/delegationBudgetAuthority.js.map +1 -1
- package/dist/delegationFailure.d.ts.map +1 -1
- package/dist/git-precondition.d.ts +11 -0
- package/dist/git-precondition.d.ts.map +1 -0
- package/dist/git-precondition.js +69 -0
- package/dist/git-precondition.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +14 -6
- package/dist/interaction.d.ts.map +1 -1
- package/dist/interaction.js +106 -19
- package/dist/interaction.js.map +1 -1
- package/dist/orchestrator.d.ts +39 -83
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +480 -676
- package/dist/orchestrator.js.map +1 -1
- package/dist/planBrief.d.ts +27 -0
- package/dist/planBrief.d.ts.map +1 -0
- package/dist/planBrief.js +42 -0
- package/dist/planBrief.js.map +1 -0
- package/dist/planRun.d.ts +4 -3
- package/dist/planRun.d.ts.map +1 -1
- package/dist/planRun.js +33 -33
- package/dist/planRun.js.map +1 -1
- package/dist/plannerAttempt.d.ts +64 -0
- package/dist/plannerAttempt.d.ts.map +1 -0
- package/dist/plannerAttempt.js +235 -0
- package/dist/plannerAttempt.js.map +1 -0
- package/dist/policyFindings.js.map +1 -1
- package/dist/requestRequirements.d.ts +28 -1
- package/dist/requestRequirements.d.ts.map +1 -1
- package/dist/requestRequirements.js +89 -10
- package/dist/requestRequirements.js.map +1 -1
- package/dist/reviewerPanel.js.map +1 -1
- package/dist/root-ledger.d.ts.map +1 -1
- package/dist/root-ledger.js +2 -0
- package/dist/root-ledger.js.map +1 -1
- package/dist/run-bounded.d.ts.map +1 -1
- package/dist/run-bounded.js +7 -1
- package/dist/run-bounded.js.map +1 -1
- package/dist/run-input-resolution.d.ts.map +1 -1
- package/dist/run-input-resolution.js +26 -8
- package/dist/run-input-resolution.js.map +1 -1
- package/dist/runEventLog.d.ts +48 -0
- package/dist/runEventLog.d.ts.map +1 -0
- package/dist/runEventLog.js +63 -0
- package/dist/runEventLog.js.map +1 -0
- package/dist/runFacts.d.ts +23 -0
- package/dist/runFacts.d.ts.map +1 -0
- package/dist/runFacts.js +179 -0
- package/dist/runFacts.js.map +1 -0
- package/dist/runFactsBuilder.d.ts +5 -0
- package/dist/runFactsBuilder.d.ts.map +1 -0
- package/dist/runFactsBuilder.js +412 -0
- package/dist/runFactsBuilder.js.map +1 -0
- package/dist/runFactsDeliverable.d.ts +13 -0
- package/dist/runFactsDeliverable.d.ts.map +1 -0
- package/dist/runFactsDeliverable.js +94 -0
- package/dist/runFactsDeliverable.js.map +1 -0
- package/dist/runFactsPresentation.d.ts +7 -0
- package/dist/runFactsPresentation.d.ts.map +1 -0
- package/dist/runFactsPresentation.js +113 -0
- package/dist/runFactsPresentation.js.map +1 -0
- package/dist/runFactsReview.d.ts +7 -0
- package/dist/runFactsReview.d.ts.map +1 -0
- package/dist/runFactsReview.js +63 -0
- package/dist/runFactsReview.js.map +1 -0
- package/dist/runSupport.d.ts +17 -15
- package/dist/runSupport.d.ts.map +1 -1
- package/dist/runSupport.js +16 -0
- package/dist/runSupport.js.map +1 -1
- package/dist/runTerminalContext.d.ts +31 -0
- package/dist/runTerminalContext.d.ts.map +1 -0
- package/dist/runTerminalContext.js +12 -0
- package/dist/runTerminalContext.js.map +1 -0
- package/dist/runTerminalResults.d.ts +55 -0
- package/dist/runTerminalResults.d.ts.map +1 -0
- package/dist/runTerminalResults.js +134 -0
- package/dist/runTerminalResults.js.map +1 -0
- package/dist/runTerminals.d.ts +4 -80
- package/dist/runTerminals.d.ts.map +1 -1
- package/dist/runTerminals.js +357 -260
- package/dist/runTerminals.js.map +1 -1
- package/dist/secretDiff.d.ts +3 -0
- package/dist/secretDiff.d.ts.map +1 -1
- package/dist/secretDiff.js +7 -0
- package/dist/secretDiff.js.map +1 -1
- package/dist/structuredOutput.d.ts.map +1 -1
- package/dist/structuredOutput.js.map +1 -1
- package/dist/task-contract-builder.d.ts +35 -0
- package/dist/task-contract-builder.d.ts.map +1 -0
- package/dist/task-contract-builder.js +114 -0
- package/dist/task-contract-builder.js.map +1 -0
- package/dist/transientClassify.js.map +1 -1
- package/package.json +17 -17
package/dist/runFacts.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, constants, fsyncSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { RunTelemetry, SCHEMA_VERSION, requiredActionsFor, validateRunFactsInvariants, } from "@claudexor/schema";
|
|
5
|
+
import { nowIso } from "@claudexor/util";
|
|
6
|
+
import { buildRunFacts } from "./runFactsBuilder.js";
|
|
7
|
+
import { terminalFactsFailurePresentation } from "./runFactsPresentation.js";
|
|
8
|
+
export { buildRunFacts };
|
|
9
|
+
function textSnapshot(path) {
|
|
10
|
+
try {
|
|
11
|
+
return { existed: true, text: readFileSync(path, "utf8") };
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error.code === "ENOENT") {
|
|
15
|
+
return { existed: false, text: "" };
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function restoreSnapshot(path, prior) {
|
|
21
|
+
if (!prior.existed) {
|
|
22
|
+
let removed = false;
|
|
23
|
+
try {
|
|
24
|
+
unlinkSync(path);
|
|
25
|
+
removed = true;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error.code !== "ENOENT")
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
if (removed)
|
|
32
|
+
fsyncParentDirectory(dirname(path));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
replaceTextAtomically(path, prior.text);
|
|
36
|
+
}
|
|
37
|
+
function fsyncParentDirectory(parent) {
|
|
38
|
+
const parentFd = openSync(parent, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
|
|
39
|
+
try {
|
|
40
|
+
fsyncSync(parentFd);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
closeSync(parentFd);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function replaceTextAtomically(path, text) {
|
|
47
|
+
const parent = dirname(path);
|
|
48
|
+
const tmp = join(parent, `.run-facts-restore-${randomUUID()}.tmp`);
|
|
49
|
+
let fileFd = null;
|
|
50
|
+
try {
|
|
51
|
+
fileFd = openSync(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
52
|
+
writeFileSync(fileFd, text, "utf8");
|
|
53
|
+
fsyncSync(fileFd);
|
|
54
|
+
closeSync(fileFd);
|
|
55
|
+
fileFd = null;
|
|
56
|
+
renameSync(tmp, path);
|
|
57
|
+
fsyncParentDirectory(parent);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
if (fileFd !== null)
|
|
61
|
+
closeSync(fileFd);
|
|
62
|
+
try {
|
|
63
|
+
unlinkSync(tmp);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error.code !== "ENOENT")
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function writeYamlAtomically(ctx, path, value) {
|
|
72
|
+
const parent = dirname(path);
|
|
73
|
+
const tmp = join(parent, `.run-facts-${randomUUID()}.tmp`);
|
|
74
|
+
try {
|
|
75
|
+
ctx.store.writeYaml(tmp, value);
|
|
76
|
+
const fileFd = openSync(tmp, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
77
|
+
try {
|
|
78
|
+
fsyncSync(fileFd);
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
closeSync(fileFd);
|
|
82
|
+
}
|
|
83
|
+
renameSync(tmp, path);
|
|
84
|
+
fsyncParentDirectory(parent);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
try {
|
|
88
|
+
unlinkSync(tmp);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error.code !== "ENOENT")
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function persistPreparedRunFacts(ctx, facts) {
|
|
97
|
+
const telemetryPath = join(ctx.paths.finalDir, "telemetry.yaml");
|
|
98
|
+
const receiptPath = join(ctx.paths.finalDir, "run_facts.yaml");
|
|
99
|
+
const parsedTelemetry = RunTelemetry.safeParse(ctx.store.readYaml(telemetryPath));
|
|
100
|
+
const telemetry = parsedTelemetry.success ? parsedTelemetry.data : null;
|
|
101
|
+
const embedded = telemetry ? RunTelemetry.parse({ ...telemetry, run_facts: facts }) : null;
|
|
102
|
+
let priorTelemetry = null;
|
|
103
|
+
let priorReceipt = null;
|
|
104
|
+
let committed = false;
|
|
105
|
+
let rolledBack = false;
|
|
106
|
+
const rollback = () => {
|
|
107
|
+
if (rolledBack)
|
|
108
|
+
return;
|
|
109
|
+
if (priorReceipt)
|
|
110
|
+
restoreSnapshot(receiptPath, priorReceipt);
|
|
111
|
+
if (priorTelemetry)
|
|
112
|
+
restoreSnapshot(telemetryPath, priorTelemetry);
|
|
113
|
+
rolledBack = true;
|
|
114
|
+
};
|
|
115
|
+
const commit = () => {
|
|
116
|
+
if (committed)
|
|
117
|
+
return;
|
|
118
|
+
if (rolledBack)
|
|
119
|
+
throw new Error("cannot commit a rolled-back RunFacts receipt");
|
|
120
|
+
priorTelemetry = textSnapshot(telemetryPath);
|
|
121
|
+
priorReceipt = textSnapshot(receiptPath);
|
|
122
|
+
if (embedded)
|
|
123
|
+
writeYamlAtomically(ctx, telemetryPath, embedded);
|
|
124
|
+
// Land the canonical marker last, after its telemetry compatibility copy.
|
|
125
|
+
writeYamlAtomically(ctx, receiptPath, facts);
|
|
126
|
+
committed = true;
|
|
127
|
+
};
|
|
128
|
+
return { facts, commit, rollback };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Prepare the validated receipt before terminal append. EventLog owns the
|
|
132
|
+
* commit boundary and invokes rollback if the terminal cannot become durable.
|
|
133
|
+
*/
|
|
134
|
+
export function prepareRunFactsReceipt(ctx, terminalOutcome) {
|
|
135
|
+
return persistPreparedRunFacts(ctx, buildRunFacts(ctx, terminalOutcome));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* A terminal-facts contradiction is itself a failed run. This minimal receipt
|
|
139
|
+
* deliberately does not trust the contradictory artifact graph, but still
|
|
140
|
+
* gives every surface a valid, fail-closed canonical outcome.
|
|
141
|
+
*/
|
|
142
|
+
export function prepareRunFactsFailureReceipt(ctx, failureOutcome) {
|
|
143
|
+
const facts = validateRunFactsInvariants({
|
|
144
|
+
schema_version: SCHEMA_VERSION,
|
|
145
|
+
run_id: ctx.runId,
|
|
146
|
+
task_id: ctx.taskId,
|
|
147
|
+
mode: ctx.mode,
|
|
148
|
+
outcome: failureOutcome,
|
|
149
|
+
deliverable: {
|
|
150
|
+
present: false,
|
|
151
|
+
kind: null,
|
|
152
|
+
path: null,
|
|
153
|
+
producer_attempt_id: null,
|
|
154
|
+
},
|
|
155
|
+
presentation: terminalFactsFailurePresentation(ctx),
|
|
156
|
+
participants: { planners: 0, attempts: [] },
|
|
157
|
+
gates: {
|
|
158
|
+
configured: false,
|
|
159
|
+
required: 0,
|
|
160
|
+
total: 0,
|
|
161
|
+
executed: false,
|
|
162
|
+
state: "not_configured",
|
|
163
|
+
receipt_attempt_id: null,
|
|
164
|
+
},
|
|
165
|
+
review: {
|
|
166
|
+
state: failureOutcome.review,
|
|
167
|
+
blocker_ids: [],
|
|
168
|
+
blockers: 0,
|
|
169
|
+
},
|
|
170
|
+
apply: {
|
|
171
|
+
eligibility: null,
|
|
172
|
+
operator_decision_present: false,
|
|
173
|
+
},
|
|
174
|
+
required_actions: requiredActionsFor(failureOutcome, false),
|
|
175
|
+
generated_at: nowIso(),
|
|
176
|
+
});
|
|
177
|
+
return persistPreparedRunFacts(ctx, facts);
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=runFacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runFacts.js","sourceRoot":"","sources":["../src/runFacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { RunFacts, type RunOutcomeFacts } from "@claudexor/schema";
|
|
2
|
+
import type { AnnouncedRunContext } from "./runTerminals.js";
|
|
3
|
+
/** Build and validate the terminal projection from canonical artifacts. */
|
|
4
|
+
export declare function buildRunFacts(ctx: AnnouncedRunContext, terminalOutcome: RunOutcomeFacts): RunFacts;
|
|
5
|
+
//# sourceMappingURL=runFactsBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runFactsBuilder.d.ts","sourceRoot":"","sources":["../src/runFactsBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,QAAQ,EAQR,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAmZ7D,2EAA2E;AAC3E,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,EACxB,eAAe,EAAE,eAAe,GAC/B,QAAQ,CAgHV"}
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { deriveApplyEligibility } from "@claudexor/delivery";
|
|
3
|
+
import { CouncilProjection, DecisionRecord, RunTelemetry, SCHEMA_VERSION, TaskContract, WorkProduct, needsDecision, requiredActionsFor, validateRunFactsInvariants, } from "@claudexor/schema";
|
|
4
|
+
import { nowIso, readTextSafe, redactSecrets, sha256 } from "@claudexor/util";
|
|
5
|
+
import { readReviewArtifacts } from "./runFactsReview.js";
|
|
6
|
+
import { canonicalDeliverable } from "./runFactsDeliverable.js";
|
|
7
|
+
import { terminalPresentation } from "./runFactsPresentation.js";
|
|
8
|
+
function parseArtifact(store, path, schema) {
|
|
9
|
+
// Three-state read (fail loudly): a missing canonical artifact is a
|
|
10
|
+
// legitimate absence, but a present-yet-invalid one is corrupted terminal
|
|
11
|
+
// evidence. Returning null for it would silently rewrite contract truth
|
|
12
|
+
// (e.g. a corrupted task.yaml projecting as "gates not configured" in the
|
|
13
|
+
// immutable receipt), so it throws instead and lands in the fail-closed
|
|
14
|
+
// terminal-facts path.
|
|
15
|
+
const raw = store.readYaml(path);
|
|
16
|
+
if (raw === null) {
|
|
17
|
+
if (readTextSafe(path) === null)
|
|
18
|
+
return null;
|
|
19
|
+
throw new Error(`canonical run artifact is not readable YAML: ${path}`);
|
|
20
|
+
}
|
|
21
|
+
const parsed = schema.safeParse(raw);
|
|
22
|
+
if (!parsed.success) {
|
|
23
|
+
const issues = parsed.error.issues
|
|
24
|
+
.slice(0, 3)
|
|
25
|
+
.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`)
|
|
26
|
+
.join("; ");
|
|
27
|
+
throw new Error(`canonical run artifact is invalid: ${path} (${issues})`);
|
|
28
|
+
}
|
|
29
|
+
return parsed.data;
|
|
30
|
+
}
|
|
31
|
+
function participantRole(args) {
|
|
32
|
+
if (args.mode === "plan") {
|
|
33
|
+
if (args.mergeAttemptId && args.attemptId === args.mergeAttemptId)
|
|
34
|
+
return "merge";
|
|
35
|
+
return "planner";
|
|
36
|
+
}
|
|
37
|
+
if (args.mode === "ask" && args.hasDeepScanProjection) {
|
|
38
|
+
return args.attemptId === args.reducerAttemptId ? "reducer" : "scout";
|
|
39
|
+
}
|
|
40
|
+
return "candidate";
|
|
41
|
+
}
|
|
42
|
+
function councilRosterEvidence(ctx, council) {
|
|
43
|
+
const events = ctx.log.readAll().events;
|
|
44
|
+
let startedMembers = [];
|
|
45
|
+
const failedByHarness = new Map();
|
|
46
|
+
const draftedHarnessIds = new Set();
|
|
47
|
+
const harnessByAttempt = new Map();
|
|
48
|
+
let mergedEventSeen = false;
|
|
49
|
+
for (const event of events) {
|
|
50
|
+
const payload = event.payload;
|
|
51
|
+
if (event.type === "council.started") {
|
|
52
|
+
const members = payload["members"];
|
|
53
|
+
if (Array.isArray(members)) {
|
|
54
|
+
startedMembers = members.filter((member) => typeof member === "string" && member.length > 0);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (event.type === "council.member.failed") {
|
|
58
|
+
const attemptId = payload["attempt_id"];
|
|
59
|
+
const harnessId = payload["harness_id"];
|
|
60
|
+
if (typeof attemptId === "string" && typeof harnessId === "string") {
|
|
61
|
+
failedByHarness.set(harnessId, attemptId);
|
|
62
|
+
harnessByAttempt.set(attemptId, harnessId);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (event.type === "council.draft") {
|
|
66
|
+
const harnessId = payload["harness_id"];
|
|
67
|
+
if (typeof harnessId === "string")
|
|
68
|
+
draftedHarnessIds.add(harnessId);
|
|
69
|
+
}
|
|
70
|
+
else if (event.type === "harness.started" || event.type === "budget.lease.created") {
|
|
71
|
+
const attemptId = payload["attempt_id"];
|
|
72
|
+
const harnessId = payload["harness_id"];
|
|
73
|
+
if (typeof attemptId === "string" && typeof harnessId === "string") {
|
|
74
|
+
harnessByAttempt.set(attemptId, harnessId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (event.type === "council.merged") {
|
|
78
|
+
mergedEventSeen = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const memberHarnessIds = startedMembers.length > 0
|
|
82
|
+
? startedMembers
|
|
83
|
+
: (council?.members.map((member) => member.harnessId) ?? []);
|
|
84
|
+
if (memberHarnessIds.length === 0)
|
|
85
|
+
return null;
|
|
86
|
+
const membershipByHarness = new Map(council?.members.map((member) => [member.harnessId, member]) ?? []);
|
|
87
|
+
const members = memberHarnessIds.map((harnessId, index) => {
|
|
88
|
+
const membership = membershipByHarness.get(harnessId);
|
|
89
|
+
return {
|
|
90
|
+
attemptId: failedByHarness.get(harnessId) ?? `p${String(index + 1).padStart(2, "0")}`,
|
|
91
|
+
harnessId,
|
|
92
|
+
failed: membership?.status === "failed" || failedByHarness.has(harnessId),
|
|
93
|
+
drafted: draftedHarnessIds.has(harnessId) ||
|
|
94
|
+
membership?.status === "drafted" ||
|
|
95
|
+
membership?.status === "merged",
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
const mergeAttemptId = council || mergedEventSeen ? `p${String(memberHarnessIds.length + 1).padStart(2, "0")}` : null;
|
|
99
|
+
const primaryHarnessId = council?.members.find((member) => member.role === "primary")?.harnessId ?? null;
|
|
100
|
+
return {
|
|
101
|
+
members,
|
|
102
|
+
mergeAttemptId,
|
|
103
|
+
mergeHarnessId: (mergeAttemptId ? harnessByAttempt.get(mergeAttemptId) : null) ??
|
|
104
|
+
council?.mergedBy ??
|
|
105
|
+
primaryHarnessId,
|
|
106
|
+
mergeFailed: council !== null && council.mergedBy === null,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function participantsFor(args) {
|
|
110
|
+
const { ctx, mode, telemetry, council } = args;
|
|
111
|
+
const reducerAttemptId = telemetry?.deep_scan_synthesis?.reducer_attempt_id ?? null;
|
|
112
|
+
const hasDeepScanProjection = telemetry?.deep_scan_synthesis != null;
|
|
113
|
+
const councilEvidence = mode === "plan" ? councilRosterEvidence(ctx, council) : null;
|
|
114
|
+
// Stable council ids keep denied pre-spawn lanes role-labelled.
|
|
115
|
+
const mergeAttemptId = councilEvidence?.mergeAttemptId ?? null;
|
|
116
|
+
const attempts = telemetry
|
|
117
|
+
? telemetry.attempts.map((attempt) => ({
|
|
118
|
+
attempt_id: attempt.attempt_id,
|
|
119
|
+
harness_id: attempt.harness_id,
|
|
120
|
+
role: participantRole({
|
|
121
|
+
mode,
|
|
122
|
+
attemptId: attempt.attempt_id,
|
|
123
|
+
mergeAttemptId,
|
|
124
|
+
reducerAttemptId,
|
|
125
|
+
hasDeepScanProjection,
|
|
126
|
+
}),
|
|
127
|
+
deliverable_present: attempt.outcome.deliverable_present,
|
|
128
|
+
status: attempt.outcome.status,
|
|
129
|
+
}))
|
|
130
|
+
: (() => {
|
|
131
|
+
const started = new Map();
|
|
132
|
+
for (const event of ctx.log.readAll().events) {
|
|
133
|
+
if (event.type !== "harness.started")
|
|
134
|
+
continue;
|
|
135
|
+
const attemptId = event.payload["attempt_id"];
|
|
136
|
+
const harnessId = event.payload["harness_id"];
|
|
137
|
+
if (typeof attemptId === "string" && typeof harnessId === "string") {
|
|
138
|
+
started.set(attemptId, harnessId);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return [...started].map(([attemptId, harnessId]) => ({
|
|
142
|
+
attempt_id: attemptId,
|
|
143
|
+
harness_id: harnessId,
|
|
144
|
+
role: participantRole({
|
|
145
|
+
mode,
|
|
146
|
+
attemptId,
|
|
147
|
+
mergeAttemptId,
|
|
148
|
+
reducerAttemptId,
|
|
149
|
+
hasDeepScanProjection,
|
|
150
|
+
}),
|
|
151
|
+
deliverable_present: false,
|
|
152
|
+
status: null,
|
|
153
|
+
}));
|
|
154
|
+
})();
|
|
155
|
+
if (councilEvidence) {
|
|
156
|
+
const presentAttemptIds = new Set(attempts.flatMap((attempt) => (attempt.attempt_id ? [attempt.attempt_id] : [])));
|
|
157
|
+
for (const member of councilEvidence.members) {
|
|
158
|
+
if (presentAttemptIds.has(member.attemptId))
|
|
159
|
+
continue;
|
|
160
|
+
attempts.push({
|
|
161
|
+
attempt_id: member.attemptId,
|
|
162
|
+
harness_id: member.harnessId,
|
|
163
|
+
role: "planner",
|
|
164
|
+
deliverable_present: member.drafted,
|
|
165
|
+
status: member.failed ? "failed" : member.drafted ? "success" : null,
|
|
166
|
+
});
|
|
167
|
+
presentAttemptIds.add(member.attemptId);
|
|
168
|
+
}
|
|
169
|
+
if (councilEvidence.mergeAttemptId &&
|
|
170
|
+
councilEvidence.mergeHarnessId &&
|
|
171
|
+
!presentAttemptIds.has(councilEvidence.mergeAttemptId)) {
|
|
172
|
+
attempts.push({
|
|
173
|
+
attempt_id: councilEvidence.mergeAttemptId,
|
|
174
|
+
harness_id: councilEvidence.mergeHarnessId,
|
|
175
|
+
role: "merge",
|
|
176
|
+
deliverable_present: !councilEvidence.mergeFailed,
|
|
177
|
+
status: councilEvidence.mergeFailed ? "failed" : "success",
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const councilOrder = new Map([
|
|
181
|
+
...councilEvidence.members.map((member) => member.attemptId),
|
|
182
|
+
...(councilEvidence.mergeAttemptId ? [councilEvidence.mergeAttemptId] : []),
|
|
183
|
+
].map((attemptId, index) => [attemptId, index]));
|
|
184
|
+
attempts.sort((left, right) => (left.attempt_id
|
|
185
|
+
? (councilOrder.get(left.attempt_id) ?? Number.MAX_SAFE_INTEGER)
|
|
186
|
+
: Number.MAX_SAFE_INTEGER) -
|
|
187
|
+
(right.attempt_id
|
|
188
|
+
? (councilOrder.get(right.attempt_id) ?? Number.MAX_SAFE_INTEGER)
|
|
189
|
+
: Number.MAX_SAFE_INTEGER));
|
|
190
|
+
}
|
|
191
|
+
for (const harnessId of args.reviewerHarnessIds) {
|
|
192
|
+
attempts.push({
|
|
193
|
+
attempt_id: null,
|
|
194
|
+
harness_id: harnessId,
|
|
195
|
+
role: "reviewer",
|
|
196
|
+
deliverable_present: false,
|
|
197
|
+
status: null,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
return attempts;
|
|
201
|
+
}
|
|
202
|
+
function gateReceipts(ctx) {
|
|
203
|
+
const receipts = [];
|
|
204
|
+
for (const event of ctx.log.readAll().events) {
|
|
205
|
+
if (event.type !== "gate.completed")
|
|
206
|
+
continue;
|
|
207
|
+
const payload = event.payload;
|
|
208
|
+
const attemptId = payload["attempt_id"];
|
|
209
|
+
const rawGates = payload["gates"];
|
|
210
|
+
if (typeof attemptId !== "string" || !Array.isArray(rawGates))
|
|
211
|
+
continue;
|
|
212
|
+
const gates = [];
|
|
213
|
+
for (const raw of rawGates) {
|
|
214
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
215
|
+
continue;
|
|
216
|
+
const record = raw;
|
|
217
|
+
if (typeof record["id"] !== "string" || typeof record["status"] !== "string")
|
|
218
|
+
continue;
|
|
219
|
+
gates.push({ id: record["id"], status: record["status"] });
|
|
220
|
+
}
|
|
221
|
+
receipts.push({ attemptId, gates });
|
|
222
|
+
}
|
|
223
|
+
return receipts;
|
|
224
|
+
}
|
|
225
|
+
function terminalGateReceipt(ctx, telemetry, decision, producerAttemptId) {
|
|
226
|
+
const receipts = gateReceipts(ctx);
|
|
227
|
+
if (decision?.final_verify?.attempted) {
|
|
228
|
+
const emitted = [...receipts]
|
|
229
|
+
.reverse()
|
|
230
|
+
.find((candidate) => candidate.attemptId === "final-verify");
|
|
231
|
+
if (emitted)
|
|
232
|
+
return emitted;
|
|
233
|
+
// An attempted final verify is authoritative even with no emitted gates.
|
|
234
|
+
return {
|
|
235
|
+
attemptId: "final-verify",
|
|
236
|
+
gates: decision.final_verify.gates.map((gate) => ({
|
|
237
|
+
id: gate.id,
|
|
238
|
+
status: gate.status,
|
|
239
|
+
})),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
const authoritativeAttemptId = decision?.winner ?? producerAttemptId ?? telemetry?.final_attempt_id ?? null;
|
|
243
|
+
if (authoritativeAttemptId) {
|
|
244
|
+
// Never promote a losing candidate's gates merely because the winner's
|
|
245
|
+
// receipt is missing. Missing authority fails closed in gateProjection.
|
|
246
|
+
return ([...receipts].reverse().find((candidate) => candidate.attemptId === authoritativeAttemptId) ??
|
|
247
|
+
null);
|
|
248
|
+
}
|
|
249
|
+
return receipts.at(-1) ?? null;
|
|
250
|
+
}
|
|
251
|
+
function gateProjection(ctx, contract, telemetry, decision, producerAttemptId, terminalOutcome) {
|
|
252
|
+
const commands = contract?.tests.commands ?? [];
|
|
253
|
+
if (commands.length === 0) {
|
|
254
|
+
return {
|
|
255
|
+
gates: {
|
|
256
|
+
configured: false,
|
|
257
|
+
required: 0,
|
|
258
|
+
total: 0,
|
|
259
|
+
executed: false,
|
|
260
|
+
state: "not_configured",
|
|
261
|
+
receipt_attempt_id: null,
|
|
262
|
+
},
|
|
263
|
+
// FinalVerifier and the protected live apply are deterministic checks
|
|
264
|
+
// that run even when the contract configures no gates. A fail-closed
|
|
265
|
+
// terminal CHECKS axis wins over the unconfigured default — otherwise a
|
|
266
|
+
// refused delivery would normalize to run.completed and become
|
|
267
|
+
// apply-eligible. gates.* stays honestly not_configured: it describes
|
|
268
|
+
// configured contract gates only.
|
|
269
|
+
checks: terminalOutcome.checks === "failed" ? "failed" : "not_configured",
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
const receipt = terminalGateReceipt(ctx, telemetry, decision, producerAttemptId);
|
|
273
|
+
const configuredIds = new Set(commands.map((command) => command.id));
|
|
274
|
+
const observed = new Map((receipt?.gates ?? [])
|
|
275
|
+
.filter((gate) => configuredIds.has(gate.id))
|
|
276
|
+
.map((gate) => [gate.id, gate.status]));
|
|
277
|
+
const allConfiguredObserved = commands.every((command) => observed.has(command.id));
|
|
278
|
+
const allRequiredPassed = commands
|
|
279
|
+
.filter((command) => command.required)
|
|
280
|
+
.every((command) => observed.get(command.id) === "passed");
|
|
281
|
+
if (!receipt || observed.size === 0) {
|
|
282
|
+
return {
|
|
283
|
+
gates: {
|
|
284
|
+
configured: true,
|
|
285
|
+
required: commands.filter((command) => command.required).length,
|
|
286
|
+
total: commands.length,
|
|
287
|
+
executed: false,
|
|
288
|
+
state: "skipped",
|
|
289
|
+
receipt_attempt_id: null,
|
|
290
|
+
},
|
|
291
|
+
// Missing required gate receipts fail closed as skipped.
|
|
292
|
+
checks: "failed",
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
const observedState = !allConfiguredObserved
|
|
296
|
+
? "skipped"
|
|
297
|
+
: allRequiredPassed
|
|
298
|
+
? "passed"
|
|
299
|
+
: "failed";
|
|
300
|
+
// A protected live delivery can be refused after a fresh verify passed
|
|
301
|
+
// (for example, when the target changes between verification and mutation).
|
|
302
|
+
// The terminal CHECKS axis is then fail-closed even though the now-stale
|
|
303
|
+
// receipt was green. Preserve that terminal truth and mark the receipt
|
|
304
|
+
// non-authoritative instead of greenwashing the blocked outcome.
|
|
305
|
+
const state = observedState === "passed" && terminalOutcome.checks === "failed" ? "skipped" : observedState;
|
|
306
|
+
return {
|
|
307
|
+
gates: {
|
|
308
|
+
configured: true,
|
|
309
|
+
required: commands.filter((command) => command.required).length,
|
|
310
|
+
total: commands.length,
|
|
311
|
+
executed: true,
|
|
312
|
+
state,
|
|
313
|
+
receipt_attempt_id: receipt.attemptId,
|
|
314
|
+
},
|
|
315
|
+
checks: state === "passed" ? "passed" : "failed",
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
function applyStateOf(workProduct) {
|
|
319
|
+
const value = workProduct?.meta["apply_state"];
|
|
320
|
+
return value === "not_applied" ||
|
|
321
|
+
value === "applied" ||
|
|
322
|
+
value === "applied_review_blocked" ||
|
|
323
|
+
value === "reverted"
|
|
324
|
+
? value
|
|
325
|
+
: null;
|
|
326
|
+
}
|
|
327
|
+
/** Build and validate the terminal projection from canonical artifacts. */
|
|
328
|
+
export function buildRunFacts(ctx, terminalOutcome) {
|
|
329
|
+
const contract = parseArtifact(ctx.store, join(ctx.paths.contextDir, "task.yaml"), TaskContract);
|
|
330
|
+
const telemetry = parseArtifact(ctx.store, join(ctx.paths.finalDir, "telemetry.yaml"), RunTelemetry);
|
|
331
|
+
const workProduct = parseArtifact(ctx.store, join(ctx.paths.finalDir, "work_product.yaml"), WorkProduct);
|
|
332
|
+
const decision = parseArtifact(ctx.store, join(ctx.paths.arbitrationDir, "decision.yaml"), DecisionRecord);
|
|
333
|
+
const council = parseArtifact(ctx.store, join(ctx.paths.root, "council", "membership.yaml"), CouncilProjection);
|
|
334
|
+
const operatorDecision = ctx.store.readYaml(join(ctx.paths.arbitrationDir, "operator_decision.yaml"));
|
|
335
|
+
const patch = readTextSafe(join(ctx.paths.finalDir, "patch.diff")) ?? "";
|
|
336
|
+
const operatorDecisionMatchesPatch = !!operatorDecision &&
|
|
337
|
+
patch.trim().length > 0 &&
|
|
338
|
+
(operatorDecision["action"] === "accept_risk" ||
|
|
339
|
+
operatorDecision["action"] === "override_needs_human") &&
|
|
340
|
+
operatorDecision["patch_sha256"] === sha256(patch);
|
|
341
|
+
const deliverable = canonicalDeliverable({
|
|
342
|
+
ctx,
|
|
343
|
+
mode: ctx.mode,
|
|
344
|
+
workProduct,
|
|
345
|
+
telemetry,
|
|
346
|
+
decision,
|
|
347
|
+
});
|
|
348
|
+
const reviews = readReviewArtifacts(ctx, decision?.winner ?? telemetry?.final_attempt_id ?? null);
|
|
349
|
+
const gate = gateProjection(ctx, contract, telemetry, decision, deliverable.producer_attempt_id, terminalOutcome);
|
|
350
|
+
const outcome = {
|
|
351
|
+
...terminalOutcome,
|
|
352
|
+
checks: gate.checks,
|
|
353
|
+
...(gate.checks === "failed" && terminalOutcome.lifecycle === "succeeded"
|
|
354
|
+
? { reason: "checks_failed" }
|
|
355
|
+
: {}),
|
|
356
|
+
};
|
|
357
|
+
const operatorDecisionPresent = operatorDecisionMatchesPatch && needsDecision(outcome, false);
|
|
358
|
+
const participants = participantsFor({
|
|
359
|
+
ctx,
|
|
360
|
+
mode: ctx.mode,
|
|
361
|
+
telemetry,
|
|
362
|
+
council,
|
|
363
|
+
reviewerHarnessIds: reviews.reviewerHarnessIds,
|
|
364
|
+
});
|
|
365
|
+
const decisionWithCanonicalFacts = decision ? { ...decision, facts: outcome } : null;
|
|
366
|
+
const applyEligibility = patch.trim() && contract && decisionWithCanonicalFacts
|
|
367
|
+
? deriveApplyEligibility({
|
|
368
|
+
state: outcome.lifecycle,
|
|
369
|
+
decision: decisionWithCanonicalFacts,
|
|
370
|
+
workProduct,
|
|
371
|
+
patch,
|
|
372
|
+
originalRepoRoot: contract.repo.root,
|
|
373
|
+
targetRepoRoot: contract.repo.root,
|
|
374
|
+
operatorDecision: operatorDecisionPresent && typeof operatorDecision?.["patch_sha256"] === "string"
|
|
375
|
+
? {
|
|
376
|
+
action: String(operatorDecision["action"]),
|
|
377
|
+
patch_sha256: operatorDecision["patch_sha256"],
|
|
378
|
+
}
|
|
379
|
+
: null,
|
|
380
|
+
applyState: applyStateOf(workProduct),
|
|
381
|
+
workState: outcome.work_state ?? null,
|
|
382
|
+
})
|
|
383
|
+
: null;
|
|
384
|
+
const rawFacts = {
|
|
385
|
+
schema_version: SCHEMA_VERSION,
|
|
386
|
+
run_id: ctx.runId,
|
|
387
|
+
task_id: ctx.taskId,
|
|
388
|
+
mode: ctx.mode,
|
|
389
|
+
outcome,
|
|
390
|
+
deliverable,
|
|
391
|
+
presentation: terminalPresentation(ctx),
|
|
392
|
+
participants: {
|
|
393
|
+
planners: participants.filter((participant) => participant.role === "planner").length,
|
|
394
|
+
attempts: participants,
|
|
395
|
+
},
|
|
396
|
+
gates: gate.gates,
|
|
397
|
+
review: {
|
|
398
|
+
state: outcome.review,
|
|
399
|
+
blocker_ids: reviews.blockerIds,
|
|
400
|
+
blockers: reviews.blockerIds.length,
|
|
401
|
+
},
|
|
402
|
+
apply: {
|
|
403
|
+
eligibility: applyEligibility,
|
|
404
|
+
operator_decision_present: operatorDecisionPresent,
|
|
405
|
+
},
|
|
406
|
+
required_actions: requiredActionsFor(outcome, operatorDecisionPresent),
|
|
407
|
+
generated_at: nowIso(),
|
|
408
|
+
};
|
|
409
|
+
// Redact once so every surface can preserve exact object identity.
|
|
410
|
+
return validateRunFactsInvariants(JSON.parse(redactSecrets(JSON.stringify(rawFacts))));
|
|
411
|
+
}
|
|
412
|
+
//# sourceMappingURL=runFactsBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runFactsBuilder.js","sourceRoot":"","sources":["../src/runFactsBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DecisionRecord, RunFacts, RunTelemetry, WorkProduct } from "@claudexor/schema";
|
|
2
|
+
import type { AnnouncedRunContext } from "./runTerminals.js";
|
|
3
|
+
import type { OrchestratorResult } from "./orchestrator.js";
|
|
4
|
+
/** The canonical primary deliverable of a terminal run: mode/result-kind
|
|
5
|
+
* ordered candidate paths probed with lstat and a real-content requirement. */
|
|
6
|
+
export declare function canonicalDeliverable(args: {
|
|
7
|
+
ctx: AnnouncedRunContext;
|
|
8
|
+
mode: OrchestratorResult["mode"];
|
|
9
|
+
workProduct: WorkProduct | null;
|
|
10
|
+
telemetry: RunTelemetry | null;
|
|
11
|
+
decision: DecisionRecord | null;
|
|
12
|
+
}): RunFacts["deliverable"];
|
|
13
|
+
//# sourceMappingURL=runFactsDeliverable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runFactsDeliverable.d.ts","sourceRoot":"","sources":["../src/runFactsDeliverable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU5D;+EAC+E;AAC/E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,mBAAmB,CAAC;IACzB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CACjC,GAAG,QAAQ,CAAC,aAAa,CAAC,CA0F1B"}
|