@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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/attemptTelemetry.d.ts +82 -0
  4. package/dist/attemptTelemetry.d.ts.map +1 -0
  5. package/dist/attemptTelemetry.js +283 -0
  6. package/dist/attemptTelemetry.js.map +1 -0
  7. package/dist/diffReview.d.ts +32 -0
  8. package/dist/diffReview.d.ts.map +1 -0
  9. package/dist/diffReview.js +69 -0
  10. package/dist/diffReview.js.map +1 -0
  11. package/dist/finalVerifier.d.ts +25 -0
  12. package/dist/finalVerifier.d.ts.map +1 -0
  13. package/dist/finalVerifier.js +110 -0
  14. package/dist/finalVerifier.js.map +1 -0
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +2 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/interaction.d.ts +22 -0
  20. package/dist/interaction.d.ts.map +1 -0
  21. package/dist/interaction.js +117 -0
  22. package/dist/interaction.js.map +1 -0
  23. package/dist/modelGovernance.d.ts +22 -0
  24. package/dist/modelGovernance.d.ts.map +1 -0
  25. package/dist/modelGovernance.js +33 -0
  26. package/dist/modelGovernance.js.map +1 -0
  27. package/dist/orchestratePlanner.d.ts +12 -0
  28. package/dist/orchestratePlanner.d.ts.map +1 -0
  29. package/dist/orchestratePlanner.js +91 -0
  30. package/dist/orchestratePlanner.js.map +1 -0
  31. package/dist/orchestrator.d.ts +380 -0
  32. package/dist/orchestrator.d.ts.map +1 -0
  33. package/dist/orchestrator.js +4927 -0
  34. package/dist/orchestrator.js.map +1 -0
  35. package/dist/reviewerPanel.d.ts +26 -0
  36. package/dist/reviewerPanel.d.ts.map +1 -0
  37. package/dist/reviewerPanel.js +146 -0
  38. package/dist/reviewerPanel.js.map +1 -0
  39. package/dist/runSupport.d.ts +178 -0
  40. package/dist/runSupport.d.ts.map +1 -0
  41. package/dist/runSupport.js +372 -0
  42. package/dist/runSupport.js.map +1 -0
  43. package/dist/runTerminals.d.ts +56 -0
  44. package/dist/runTerminals.d.ts.map +1 -0
  45. package/dist/runTerminals.js +124 -0
  46. package/dist/runTerminals.js.map +1 -0
  47. 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
+ }