@claudexor/orchestrator 1.0.1
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/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/attemptTelemetry.d.ts +82 -0
- package/dist/attemptTelemetry.d.ts.map +1 -0
- package/dist/attemptTelemetry.js +283 -0
- package/dist/attemptTelemetry.js.map +1 -0
- package/dist/diffReview.d.ts +32 -0
- package/dist/diffReview.d.ts.map +1 -0
- package/dist/diffReview.js +69 -0
- package/dist/diffReview.js.map +1 -0
- package/dist/finalVerifier.d.ts +25 -0
- package/dist/finalVerifier.d.ts.map +1 -0
- package/dist/finalVerifier.js +110 -0
- package/dist/finalVerifier.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction.d.ts +22 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +117 -0
- package/dist/interaction.js.map +1 -0
- package/dist/modelGovernance.d.ts +22 -0
- package/dist/modelGovernance.d.ts.map +1 -0
- package/dist/modelGovernance.js +33 -0
- package/dist/modelGovernance.js.map +1 -0
- package/dist/orchestratePlanner.d.ts +12 -0
- package/dist/orchestratePlanner.d.ts.map +1 -0
- package/dist/orchestratePlanner.js +91 -0
- package/dist/orchestratePlanner.js.map +1 -0
- package/dist/orchestrator.d.ts +380 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +4927 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/reviewerPanel.d.ts +26 -0
- package/dist/reviewerPanel.d.ts.map +1 -0
- package/dist/reviewerPanel.js +146 -0
- package/dist/reviewerPanel.js.map +1 -0
- package/dist/runSupport.d.ts +178 -0
- package/dist/runSupport.d.ts.map +1 -0
- package/dist/runSupport.js +372 -0
- package/dist/runSupport.js.map +1 -0
- package/dist/runTerminals.d.ts +56 -0
- package/dist/runTerminals.d.ts.map +1 -0
- package/dist/runTerminals.js +124 -0
- package/dist/runTerminals.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal-state machinery shared by every strategy: typed failure artifacts,
|
|
3
|
+
* the cancelled terminal, and the announced-run safety net. Every run that
|
|
4
|
+
* was ANNOUNCED (run.created after createRun) must end with a terminal event
|
|
5
|
+
* — run.completed, run.blocked, or run.failed — plus failure.yaml/summary
|
|
6
|
+
* artifacts on the failure paths. An escaped throw used to orphan the run
|
|
7
|
+
* dir, leaving events.jsonl without a terminal and SSE tailers waiting
|
|
8
|
+
* forever.
|
|
9
|
+
*/
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { redactSecrets } from "@claudexor/util";
|
|
12
|
+
export function writeFailure(store, paths, failure) {
|
|
13
|
+
store.writeYaml(join(paths.finalDir, "failure.yaml"), {
|
|
14
|
+
phase: failure.phase,
|
|
15
|
+
category: failure.category,
|
|
16
|
+
harnessId: failure.harnessId ?? null,
|
|
17
|
+
attemptId: failure.attemptId ?? null,
|
|
18
|
+
safeMessage: redactSecrets(failure.safeMessage),
|
|
19
|
+
rawDetailRef: failure.rawDetailRef ?? null,
|
|
20
|
+
logRefs: failure.logRefs ?? [],
|
|
21
|
+
eventRefs: failure.eventRefs ?? [],
|
|
22
|
+
runDir: failure.runDir ?? paths.root,
|
|
23
|
+
nextActions: failure.nextActions ?? [],
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Terminal result for a cancelled run: emits run.failed with status
|
|
28
|
+
* "cancelled" so every mode ends consistently. `writeTelemetry` carries the
|
|
29
|
+
* PARTIAL attempt telemetry collected before the abort — a cancelled run
|
|
30
|
+
* must still account for what it spent and observed; it used to be
|
|
31
|
+
* written only by convergence.
|
|
32
|
+
*/
|
|
33
|
+
export function cancelledResult(log, runId, taskId, mode, runDir, candidates, writeTelemetry, spendUsd) {
|
|
34
|
+
if (writeTelemetry) {
|
|
35
|
+
try {
|
|
36
|
+
writeTelemetry();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
/* partial telemetry is best-effort on the cancel path */
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
log.emit("run.failed", { status: "cancelled" });
|
|
43
|
+
return {
|
|
44
|
+
runId,
|
|
45
|
+
taskId,
|
|
46
|
+
mode,
|
|
47
|
+
status: "cancelled",
|
|
48
|
+
winner: null,
|
|
49
|
+
runDir,
|
|
50
|
+
summary: "run cancelled",
|
|
51
|
+
candidates,
|
|
52
|
+
...(spendUsd !== undefined ? { spendUsd } : {}),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Terminal safety net for an unexpected throw in a post-announce phase.
|
|
57
|
+
* Every run must end with failure.yaml + summary + a terminal run.failed
|
|
58
|
+
* event.
|
|
59
|
+
*/
|
|
60
|
+
export function failTerminally(log, store, paths, runId, taskId, mode, phase, err, spendUsd) {
|
|
61
|
+
const message = redactSecrets(err instanceof Error ? err.message : String(err));
|
|
62
|
+
store.writeText(join(paths.finalDir, "summary.md"), `# Run ${runId} (${mode})\n\n- Status: failed\n- Phase: ${phase}\n\n${message}\n`);
|
|
63
|
+
writeFailure(store, paths, {
|
|
64
|
+
phase,
|
|
65
|
+
category: "internal",
|
|
66
|
+
safeMessage: message,
|
|
67
|
+
runDir: paths.root,
|
|
68
|
+
nextActions: ["Open diagnostics", "Retry the run"],
|
|
69
|
+
});
|
|
70
|
+
log.emit("output.ready", { kind: "summary", path: "final/summary.md", state: "diagnostic" });
|
|
71
|
+
log.emit("run.failed", {
|
|
72
|
+
status: "failed",
|
|
73
|
+
phase,
|
|
74
|
+
error: message,
|
|
75
|
+
failure_ref: "final/failure.yaml",
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
runId,
|
|
79
|
+
taskId,
|
|
80
|
+
mode,
|
|
81
|
+
status: "failed",
|
|
82
|
+
winner: null,
|
|
83
|
+
runDir: paths.root,
|
|
84
|
+
summary: message,
|
|
85
|
+
candidates: [],
|
|
86
|
+
...(spendUsd !== undefined ? { spendUsd } : {}),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Whole-strategy terminal net: run `body`; if it throws AFTER announcing,
|
|
91
|
+
* stamp terminal artifacts instead of orphaning the run. Pre-announce throws
|
|
92
|
+
* keep the loud-request contract (the caller gets the error; no run dir
|
|
93
|
+
* exists). An abort surfaced as a throw is a CANCELLED terminal, not an
|
|
94
|
+
* internal failure.
|
|
95
|
+
*/
|
|
96
|
+
export async function guardAnnouncedRun(signal, body) {
|
|
97
|
+
let announced = null;
|
|
98
|
+
try {
|
|
99
|
+
return await body((a) => {
|
|
100
|
+
announced = a;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
// TS cannot see the closure assignment; the cast is safe (set-once).
|
|
105
|
+
const a = announced;
|
|
106
|
+
if (!a)
|
|
107
|
+
throw err;
|
|
108
|
+
// Settled-spend accounting is part of the terminal contract on EVERY
|
|
109
|
+
// path (the orchestrate executor aggregates it); a broken spend snapshot
|
|
110
|
+
// must not mask the original failure, so it degrades to null loudly-typed.
|
|
111
|
+
let spendUsd = null;
|
|
112
|
+
try {
|
|
113
|
+
spendUsd = a.spend ? a.spend() : null;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
spendUsd = null;
|
|
117
|
+
}
|
|
118
|
+
if (signal?.aborted) {
|
|
119
|
+
return cancelledResult(a.log, a.runId, a.taskId, a.mode, a.paths.root, [], undefined, spendUsd);
|
|
120
|
+
}
|
|
121
|
+
return failTerminally(a.log, a.store, a.paths, a.runId, a.taskId, a.mode, a.phase, err, spendUsd);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=runTerminals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runTerminals.js","sourceRoot":"","sources":["../src/runTerminals.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@claudexor/orchestrator",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"description": "Hub that composes all subsystems and implements the five canonical modes (ask, plan, audit, agent, orchestrate) with their strategy flags (best-of-N race, attempt caps, until-clean, swarm, create).",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@claudexor/arbitration": "1.0.1",
|
|
20
|
+
"@claudexor/artifact-store": "1.0.1",
|
|
21
|
+
"@claudexor/budget": "1.0.1",
|
|
22
|
+
"@claudexor/config": "1.0.1",
|
|
23
|
+
"@claudexor/core": "1.0.1",
|
|
24
|
+
"@claudexor/delivery": "1.0.1",
|
|
25
|
+
"@claudexor/event-log": "1.0.1",
|
|
26
|
+
"@claudexor/context": "1.0.1",
|
|
27
|
+
"@claudexor/gateway": "1.0.1",
|
|
28
|
+
"@claudexor/policy": "1.0.1",
|
|
29
|
+
"@claudexor/interview": "1.0.1",
|
|
30
|
+
"@claudexor/review": "1.0.1",
|
|
31
|
+
"@claudexor/schema": "1.0.1",
|
|
32
|
+
"@claudexor/workspace": "1.0.1",
|
|
33
|
+
"@claudexor/util": "1.0.1",
|
|
34
|
+
"@claudexor/synthesis": "1.0.1"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@claudexor/harness-fake": "1.0.1"
|
|
38
|
+
},
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/razzant/claudexor.git",
|
|
42
|
+
"directory": "packages/orchestrator"
|
|
43
|
+
},
|
|
44
|
+
"homepage": "https://github.com/razzant/claudexor#readme",
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/razzant/claudexor/issues"
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=20.19"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
},
|
|
54
|
+
"scripts": {
|
|
55
|
+
"build": "tsc",
|
|
56
|
+
"typecheck": "tsc --noEmit"
|
|
57
|
+
}
|
|
58
|
+
}
|