@revisium/orchestrator 0.0.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/LICENSE +21 -0
- package/README.md +20 -0
- package/bin/revo.js +2 -0
- package/control-plane/bootstrap.config.json +931 -0
- package/dist/app.module.js +28 -0
- package/dist/app.module.js.map +1 -0
- package/dist/cli/commands/bootstrap.js +39 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/dev.js +143 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/inbox.js +288 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/mcp.js +16 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/playbook.js +74 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/poll-workflow-state.js +144 -0
- package/dist/cli/commands/poll-workflow-state.js.map +1 -0
- package/dist/cli/commands/revisium-context.js +23 -0
- package/dist/cli/commands/revisium-context.js.map +1 -0
- package/dist/cli/commands/revisium-helpers.js +61 -0
- package/dist/cli/commands/revisium-helpers.js.map +1 -0
- package/dist/cli/commands/revisium.js +89 -0
- package/dist/cli/commands/revisium.js.map +1 -0
- package/dist/cli/commands/run.js +426 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/work.js +149 -0
- package/dist/cli/commands/work.js.map +1 -0
- package/dist/cli/config.js +2 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.js +32 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/live-guard.js +49 -0
- package/dist/cli/live-guard.js.map +1 -0
- package/dist/cli/needs-host.js +78 -0
- package/dist/cli/needs-host.js.map +1 -0
- package/dist/cli/program.js +37 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/config.js +102 -0
- package/dist/config.js.map +1 -0
- package/dist/control-plane/client-transport.js +146 -0
- package/dist/control-plane/client-transport.js.map +1 -0
- package/dist/control-plane/data-access.js +99 -0
- package/dist/control-plane/data-access.js.map +1 -0
- package/dist/control-plane/definitions.js +120 -0
- package/dist/control-plane/definitions.js.map +1 -0
- package/dist/control-plane/errors.js +13 -0
- package/dist/control-plane/errors.js.map +1 -0
- package/dist/control-plane/inbox.js +261 -0
- package/dist/control-plane/inbox.js.map +1 -0
- package/dist/control-plane/index.js +6 -0
- package/dist/control-plane/index.js.map +1 -0
- package/dist/control-plane/json-fields.js +68 -0
- package/dist/control-plane/json-fields.js.map +1 -0
- package/dist/control-plane/resolve-cwd.js +75 -0
- package/dist/control-plane/resolve-cwd.js.map +1 -0
- package/dist/control-plane/steps.js +381 -0
- package/dist/control-plane/steps.js.map +1 -0
- package/dist/control-plane/tables.js +13 -0
- package/dist/control-plane/tables.js.map +1 -0
- package/dist/control-plane/versioned-meaning.js +53 -0
- package/dist/control-plane/versioned-meaning.js.map +1 -0
- package/dist/engine/dbos.module.js +18 -0
- package/dist/engine/dbos.module.js.map +1 -0
- package/dist/engine/dbos.service.js +296 -0
- package/dist/engine/dbos.service.js.map +1 -0
- package/dist/engine/ensure-postgres.js +80 -0
- package/dist/engine/ensure-postgres.js.map +1 -0
- package/dist/engine/types.js +2 -0
- package/dist/engine/types.js.map +1 -0
- package/dist/host/ensure-revisium.js +269 -0
- package/dist/host/ensure-revisium.js.map +1 -0
- package/dist/host/host.lifecycle.js +75 -0
- package/dist/host/host.lifecycle.js.map +1 -0
- package/dist/mcp/mcp-capabilities.js +47 -0
- package/dist/mcp/mcp-capabilities.js.map +1 -0
- package/dist/mcp/mcp-facade.service.js +130 -0
- package/dist/mcp/mcp-facade.service.js.map +1 -0
- package/dist/mcp/mcp-stdio.service.js +48 -0
- package/dist/mcp/mcp-stdio.service.js.map +1 -0
- package/dist/mcp/mcp-tools.js +264 -0
- package/dist/mcp/mcp-tools.js.map +1 -0
- package/dist/mcp/mcp.module.js +21 -0
- package/dist/mcp/mcp.module.js.map +1 -0
- package/dist/package-info.js +10 -0
- package/dist/package-info.js.map +1 -0
- package/dist/pipeline/await-human.js +62 -0
- package/dist/pipeline/await-human.js.map +1 -0
- package/dist/pipeline/develop-task.workflow.js +497 -0
- package/dist/pipeline/develop-task.workflow.js.map +1 -0
- package/dist/pipeline/pipeline.module.js +34 -0
- package/dist/pipeline/pipeline.module.js.map +1 -0
- package/dist/playbook/catalog-loader.js +145 -0
- package/dist/playbook/catalog-loader.js.map +1 -0
- package/dist/playbook/errors.js +14 -0
- package/dist/playbook/errors.js.map +1 -0
- package/dist/playbook/import-mapper.js +186 -0
- package/dist/playbook/import-mapper.js.map +1 -0
- package/dist/playbook/manifest.js +60 -0
- package/dist/playbook/manifest.js.map +1 -0
- package/dist/playbook/playbook-installer.js +51 -0
- package/dist/playbook/playbook-installer.js.map +1 -0
- package/dist/playbook/prompt-composer.js +34 -0
- package/dist/playbook/prompt-composer.js.map +1 -0
- package/dist/playbook/source-resolver.js +105 -0
- package/dist/playbook/source-resolver.js.map +1 -0
- package/dist/poller/pr-readiness-core.js +656 -0
- package/dist/poller/pr-readiness-core.js.map +1 -0
- package/dist/poller/pr-readiness.js +91 -0
- package/dist/poller/pr-readiness.js.map +1 -0
- package/dist/revisium/inbox.service.js +67 -0
- package/dist/revisium/inbox.service.js.map +1 -0
- package/dist/revisium/playbooks.service.js +99 -0
- package/dist/revisium/playbooks.service.js.map +1 -0
- package/dist/revisium/revisium.module.js +55 -0
- package/dist/revisium/revisium.module.js.map +1 -0
- package/dist/revisium/roles.service.js +79 -0
- package/dist/revisium/roles.service.js.map +1 -0
- package/dist/revisium/run.service.js +182 -0
- package/dist/revisium/run.service.js.map +1 -0
- package/dist/revisium/tokens.js +7 -0
- package/dist/revisium/tokens.js.map +1 -0
- package/dist/run/append-event.js +112 -0
- package/dist/run/append-event.js.map +1 -0
- package/dist/run/cancel-run.js +47 -0
- package/dist/run/cancel-run.js.map +1 -0
- package/dist/run/create-run.js +208 -0
- package/dist/run/create-run.js.map +1 -0
- package/dist/run/fail-run.js +20 -0
- package/dist/run/fail-run.js.map +1 -0
- package/dist/run/inspect-run.js +287 -0
- package/dist/run/inspect-run.js.map +1 -0
- package/dist/run/terminal-run-status.js +45 -0
- package/dist/run/terminal-run-status.js.map +1 -0
- package/dist/runners/claude-code.service.js +48 -0
- package/dist/runners/claude-code.service.js.map +1 -0
- package/dist/runners/gh-identity.js +108 -0
- package/dist/runners/gh-identity.js.map +1 -0
- package/dist/runners/integrator.js +417 -0
- package/dist/runners/integrator.js.map +1 -0
- package/dist/runners/runner.module.js +40 -0
- package/dist/runners/runner.module.js.map +1 -0
- package/dist/runners/tokens.js +7 -0
- package/dist/runners/tokens.js.map +1 -0
- package/dist/task-control-plane/pr-readiness.service.js +33 -0
- package/dist/task-control-plane/pr-readiness.service.js.map +1 -0
- package/dist/task-control-plane/task-control-plane-api.service.js +440 -0
- package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -0
- package/dist/task-control-plane/task-control-plane.module.js +23 -0
- package/dist/task-control-plane/task-control-plane.module.js.map +1 -0
- package/dist/worker/build-context.js +39 -0
- package/dist/worker/build-context.js.map +1 -0
- package/dist/worker/claude-code-runner.js +135 -0
- package/dist/worker/claude-code-runner.js.map +1 -0
- package/dist/worker/git-worktree-manager.js +84 -0
- package/dist/worker/git-worktree-manager.js.map +1 -0
- package/dist/worker/loop.js +122 -0
- package/dist/worker/loop.js.map +1 -0
- package/dist/worker/process-executor.js +62 -0
- package/dist/worker/process-executor.js.map +1 -0
- package/dist/worker/result-envelope.js +134 -0
- package/dist/worker/result-envelope.js.map +1 -0
- package/dist/worker/runner-dispatch.js +20 -0
- package/dist/worker/runner-dispatch.js.map +1 -0
- package/dist/worker/runner.js +2 -0
- package/dist/worker/runner.js.map +1 -0
- package/dist/worker/script-runner.js +28 -0
- package/dist/worker/script-runner.js.map +1 -0
- package/dist/worker/stub-runner.js +59 -0
- package/dist/worker/stub-runner.js.map +1 -0
- package/dist/worker/worker-id.js +18 -0
- package/dist/worker/worker-id.js.map +1 -0
- package/dist/worker/worktree-manager.js +7 -0
- package/dist/worker/worktree-manager.js.map +1 -0
- package/package.json +66 -0
- package/revisium.config.json +10 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { ControlPlaneError } from './errors.js';
|
|
3
|
+
// ─── internal helpers ────────────────────────────────────────
|
|
4
|
+
const CLAIM_CAP = 500;
|
|
5
|
+
// Per-step attempt fetch limit during crash recovery; N+1 at startup is acceptable at this scale.
|
|
6
|
+
const RECOVERY_ATTEMPT_CAP = 100;
|
|
7
|
+
export function compactStamp(date) {
|
|
8
|
+
const pad = (v, l = 2) => String(v).padStart(l, '0');
|
|
9
|
+
return [
|
|
10
|
+
date.getUTCFullYear(),
|
|
11
|
+
pad(date.getUTCMonth() + 1),
|
|
12
|
+
pad(date.getUTCDate()),
|
|
13
|
+
'T',
|
|
14
|
+
pad(date.getUTCHours()),
|
|
15
|
+
pad(date.getUTCMinutes()),
|
|
16
|
+
pad(date.getUTCSeconds()),
|
|
17
|
+
pad(date.getUTCMilliseconds(), 3),
|
|
18
|
+
'Z',
|
|
19
|
+
].join('');
|
|
20
|
+
}
|
|
21
|
+
function clockNow(opts) {
|
|
22
|
+
return opts?.now ?? new Date();
|
|
23
|
+
}
|
|
24
|
+
function clockSuffix(opts) {
|
|
25
|
+
return opts?.idSuffix ?? randomUUID().replaceAll('-', '').slice(0, 8);
|
|
26
|
+
}
|
|
27
|
+
// Non-cryptographic FNV-1a 64-bit hash → 16 hex chars. Used to derive a child step id that is
|
|
28
|
+
// DETERMINISTIC (same parent + index → same id, so a crash-retry is idempotent) yet BOUNDED in
|
|
29
|
+
// length. Revisium rowIds max out at 64 chars; concatenating the parent id per level
|
|
30
|
+
// (`${parent}_ch_${i}`) overflowed on deep chains. Not crypto, so it does not trip the
|
|
31
|
+
// weak-hash security hotspot.
|
|
32
|
+
export function fnv1a64Hex(input) {
|
|
33
|
+
let hash = 0xcbf29ce484222325n;
|
|
34
|
+
const prime = 0x100000001b3n;
|
|
35
|
+
const mask = 0xffffffffffffffffn;
|
|
36
|
+
for (let i = 0; i < input.length; i++) {
|
|
37
|
+
hash ^= BigInt(input.codePointAt(i) ?? 0);
|
|
38
|
+
hash = (hash * prime) & mask;
|
|
39
|
+
}
|
|
40
|
+
return hash.toString(16).padStart(16, '0');
|
|
41
|
+
}
|
|
42
|
+
export function toStr(v) {
|
|
43
|
+
if (typeof v === 'string')
|
|
44
|
+
return v;
|
|
45
|
+
if (typeof v === 'number')
|
|
46
|
+
return String(v);
|
|
47
|
+
return '';
|
|
48
|
+
}
|
|
49
|
+
function mapStep(row) {
|
|
50
|
+
const d = row.data;
|
|
51
|
+
return {
|
|
52
|
+
id: row.rowId,
|
|
53
|
+
taskId: toStr(d.task_id),
|
|
54
|
+
runId: toStr(d.run_id),
|
|
55
|
+
role: toStr(d.role),
|
|
56
|
+
kind: toStr(d.kind),
|
|
57
|
+
status: toStr(d.status),
|
|
58
|
+
input: d.input ?? null,
|
|
59
|
+
output: d.output ?? null,
|
|
60
|
+
modelProfile: toStr(d.model_profile),
|
|
61
|
+
runAfter: toStr(d.run_after),
|
|
62
|
+
attemptCount: Number(d.attempt_count ?? 0),
|
|
63
|
+
maxAttempts: Number(d.max_attempts ?? 3),
|
|
64
|
+
priority: Number(d.priority ?? 0),
|
|
65
|
+
leaseOwner: toStr(d.lease_owner),
|
|
66
|
+
leaseExpiresAt: toStr(d.lease_expires_at),
|
|
67
|
+
deadReason: toStr(d.dead_reason),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function compareByPriorityThenAge(a, b) {
|
|
71
|
+
const pa = Number(a.data.priority ?? 0);
|
|
72
|
+
const pb = Number(b.data.priority ?? 0);
|
|
73
|
+
if (pb !== pa)
|
|
74
|
+
return pb - pa;
|
|
75
|
+
const ca = toStr(a.data.created_at);
|
|
76
|
+
const cb = toStr(b.data.created_at);
|
|
77
|
+
if (ca < cb)
|
|
78
|
+
return -1;
|
|
79
|
+
if (ca > cb)
|
|
80
|
+
return 1;
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
function backoffRunAfter(t, attemptCount) {
|
|
84
|
+
const delayMs = 30_000 * Math.pow(2, attemptCount);
|
|
85
|
+
return new Date(t.getTime() + delayMs).toISOString();
|
|
86
|
+
}
|
|
87
|
+
// ─── exported verbs ──────────────────────────────────────────
|
|
88
|
+
// MVP: single-worker read-then-write is acceptable; atomic claim belongs only here later.
|
|
89
|
+
export async function claimNextStep(da, workerId, roles, opts) {
|
|
90
|
+
const t = clockNow(opts);
|
|
91
|
+
const nowIso = t.toISOString();
|
|
92
|
+
const leaseTtlMs = opts?.leaseTtlMs ?? 30_000;
|
|
93
|
+
const leaseExpiresAt = new Date(t.getTime() + leaseTtlMs).toISOString();
|
|
94
|
+
// Server-side: filter status=ready AND role∈roles, sort by priority desc then createdAt asc.
|
|
95
|
+
// WORKAROUND: JsonFilterDto.equals is typed as { [key: string]: unknown } but accepts scalar
|
|
96
|
+
// strings at runtime; the @revisium/client JSON-path scalar-equality type gap requires the cast.
|
|
97
|
+
// run_after <= now CANNOT be pushed server-side: JsonFilterDto.lte is typed as number only and
|
|
98
|
+
// has no string/date counterpart. The in-process filter below is the authoritative gate, bounded
|
|
99
|
+
// by CLAIM_CAP so future-scheduled steps cannot exhaust the cap if they accumulate.
|
|
100
|
+
// In-process: re-apply all predicates for correctness against fake/unconstrained transports.
|
|
101
|
+
const rows = await da.listRows('steps', {
|
|
102
|
+
first: CLAIM_CAP,
|
|
103
|
+
where: {
|
|
104
|
+
AND: [
|
|
105
|
+
{ data: { path: 'status', equals: 'ready' } },
|
|
106
|
+
{ OR: roles.map((r) => ({ data: { path: 'role', equals: r } })) },
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
orderBy: [
|
|
110
|
+
{ field: 'data', direction: 'desc', path: 'priority', type: 'int' },
|
|
111
|
+
{ field: 'createdAt', direction: 'asc' },
|
|
112
|
+
],
|
|
113
|
+
});
|
|
114
|
+
const candidateRow = rows
|
|
115
|
+
.filter((row) => {
|
|
116
|
+
const d = row.data;
|
|
117
|
+
return (toStr(d.status) === 'ready' &&
|
|
118
|
+
roles.includes(toStr(d.role)) &&
|
|
119
|
+
(toStr(d.run_after) === '' || toStr(d.run_after) <= nowIso));
|
|
120
|
+
})
|
|
121
|
+
.sort(compareByPriorityThenAge)
|
|
122
|
+
.at(0);
|
|
123
|
+
if (!candidateRow)
|
|
124
|
+
return null;
|
|
125
|
+
const candidate = mapStep(candidateRow);
|
|
126
|
+
await da.patchRow('steps', candidate.id, [
|
|
127
|
+
{ op: 'replace', path: 'status', value: 'claimed' },
|
|
128
|
+
{ op: 'replace', path: 'lease_owner', value: workerId },
|
|
129
|
+
{ op: 'replace', path: 'lease_expires_at', value: leaseExpiresAt },
|
|
130
|
+
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
131
|
+
]);
|
|
132
|
+
return { ...candidate, status: 'claimed', leaseOwner: workerId, leaseExpiresAt };
|
|
133
|
+
}
|
|
134
|
+
export async function startAttempt(da, step, opts) {
|
|
135
|
+
const t = clockNow(opts);
|
|
136
|
+
const nowIso = t.toISOString();
|
|
137
|
+
const sfx = clockSuffix(opts);
|
|
138
|
+
const st = compactStamp(t);
|
|
139
|
+
const attemptId = `attempt_${st}_${sfx}`;
|
|
140
|
+
const idempotencyKey = `idem_${st}_${sfx}`;
|
|
141
|
+
// Attempt row is written before step status flips to 'running'.
|
|
142
|
+
await da.createRow('attempts', attemptId, {
|
|
143
|
+
id: attemptId,
|
|
144
|
+
step_id: step.id,
|
|
145
|
+
run_id: step.runId,
|
|
146
|
+
worker_id: opts.workerId,
|
|
147
|
+
attempt_no: step.attemptCount + 1,
|
|
148
|
+
status: 'running',
|
|
149
|
+
idempotency_key: idempotencyKey,
|
|
150
|
+
model_profile: opts.modelProfile ?? step.modelProfile,
|
|
151
|
+
input_tokens: 0,
|
|
152
|
+
output_tokens: 0,
|
|
153
|
+
lesson: '',
|
|
154
|
+
error: '',
|
|
155
|
+
started_at: nowIso,
|
|
156
|
+
finished_at: '',
|
|
157
|
+
});
|
|
158
|
+
// Increment attempt_count here so crash recovery (recoverInFlight) sees the correct value
|
|
159
|
+
// even when failStep is never called. failStep reads the same derived value so no double-count.
|
|
160
|
+
await da.patchRow('steps', step.id, [
|
|
161
|
+
{ op: 'replace', path: 'status', value: 'running' },
|
|
162
|
+
{ op: 'replace', path: 'attempt_count', value: step.attemptCount + 1 },
|
|
163
|
+
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
164
|
+
]);
|
|
165
|
+
return { attemptId, idempotencyKey };
|
|
166
|
+
}
|
|
167
|
+
export async function writeResult(da, step, attemptId, output, costs, opts) {
|
|
168
|
+
const t = clockNow(opts);
|
|
169
|
+
const nowIso = t.toISOString();
|
|
170
|
+
const sfx = clockSuffix(opts);
|
|
171
|
+
const st = compactStamp(t);
|
|
172
|
+
// 1. Close attempt
|
|
173
|
+
await da.patchRow('attempts', attemptId, [
|
|
174
|
+
{ op: 'replace', path: 'status', value: 'succeeded' },
|
|
175
|
+
{ op: 'replace', path: 'finished_at', value: nowIso },
|
|
176
|
+
]);
|
|
177
|
+
// 2. Append event
|
|
178
|
+
await da.createRow('events', `event_${st}_step-succeeded_${sfx}`, {
|
|
179
|
+
id: `event_${st}_step-succeeded_${sfx}`,
|
|
180
|
+
run_id: step.runId,
|
|
181
|
+
task_id: step.taskId,
|
|
182
|
+
step_id: step.id,
|
|
183
|
+
type: 'step_succeeded',
|
|
184
|
+
payload: { attempt_id: attemptId },
|
|
185
|
+
actor: 'orchestrator',
|
|
186
|
+
created_at: nowIso,
|
|
187
|
+
});
|
|
188
|
+
// 3. Append cost rows
|
|
189
|
+
for (let i = 0; i < costs.length; i++) {
|
|
190
|
+
const cost = costs[i];
|
|
191
|
+
if (!cost)
|
|
192
|
+
continue;
|
|
193
|
+
await da.createRow('cost_ledger', `cost_${st}_${sfx}_${i}`, {
|
|
194
|
+
id: `cost_${st}_${sfx}_${i}`,
|
|
195
|
+
run_id: step.runId,
|
|
196
|
+
step_id: step.id,
|
|
197
|
+
attempt_id: attemptId,
|
|
198
|
+
model_profile: cost.modelProfile,
|
|
199
|
+
input_tokens: cost.inputTokens,
|
|
200
|
+
output_tokens: cost.outputTokens,
|
|
201
|
+
cost_amount: cost.costAmount,
|
|
202
|
+
currency: cost.currency ?? 'USD',
|
|
203
|
+
recorded_at: nowIso,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// 4. Last: flip step status to succeeded, clear lease so terminal state is not misleading
|
|
207
|
+
await da.patchRow('steps', step.id, [
|
|
208
|
+
{ op: 'replace', path: 'status', value: 'succeeded' },
|
|
209
|
+
{ op: 'replace', path: 'output', value: output },
|
|
210
|
+
{ op: 'replace', path: 'lease_owner', value: '' },
|
|
211
|
+
{ op: 'replace', path: 'lease_expires_at', value: '' },
|
|
212
|
+
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
213
|
+
]);
|
|
214
|
+
}
|
|
215
|
+
export async function createSteps(da, steps, opts) {
|
|
216
|
+
const t = clockNow(opts);
|
|
217
|
+
const nowIso = t.toISOString();
|
|
218
|
+
const sfx = clockSuffix(opts);
|
|
219
|
+
const st = compactStamp(t);
|
|
220
|
+
for (let i = 0; i < steps.length; i++) {
|
|
221
|
+
const ns = steps[i];
|
|
222
|
+
if (!ns)
|
|
223
|
+
continue;
|
|
224
|
+
// When parentStepId is supplied, derive a deterministic, BOUNDED-length ID from a hash of
|
|
225
|
+
// (parent id + index) so that a crash-and-retry (new attemptId, same parent) regenerates the
|
|
226
|
+
// exact same child IDs (idempotent: ROW_CONFLICT from createRow means it already exists → skip)
|
|
227
|
+
// WITHOUT growing the id per chain level. Concatenating the full parent id per level
|
|
228
|
+
// (`${parent}_ch_${i}`) overflowed Revisium's 64-char rowId limit on deep chains. The id
|
|
229
|
+
// depends ONLY on (parent id, index) — NOT on role — so the retry contract holds even if a
|
|
230
|
+
// re-run yields a different role for the same logical next step, and the length is fixed
|
|
231
|
+
// ("step_" + 16 hex = 21 chars) regardless of role. The 64-bit hash keeps it collision-resistant.
|
|
232
|
+
const childKey = `${opts?.parentStepId ?? ''}:${i}`;
|
|
233
|
+
const stepId = opts?.parentStepId
|
|
234
|
+
? `step_${fnv1a64Hex(childKey)}`
|
|
235
|
+
: `step_${st}_${ns.role}_${sfx}_${i}`;
|
|
236
|
+
// Steps with unresolved dependencies start 'pending'; promoting them to 'ready' once their
|
|
237
|
+
// depends_on complete is the dependency resolver's job, deferred to a later plan (not Plan 0006).
|
|
238
|
+
const hasDeps = ns.dependsOn !== undefined && ns.dependsOn.length > 0;
|
|
239
|
+
try {
|
|
240
|
+
await da.createRow('steps', stepId, {
|
|
241
|
+
id: stepId,
|
|
242
|
+
task_id: ns.taskId,
|
|
243
|
+
run_id: ns.runId,
|
|
244
|
+
role: ns.role,
|
|
245
|
+
kind: ns.kind,
|
|
246
|
+
status: hasDeps ? 'pending' : 'ready',
|
|
247
|
+
input: ns.input,
|
|
248
|
+
output: null,
|
|
249
|
+
model_profile: ns.modelProfile,
|
|
250
|
+
run_after: ns.runAfter ?? '',
|
|
251
|
+
attempt_count: 0,
|
|
252
|
+
max_attempts: ns.maxAttempts ?? 3,
|
|
253
|
+
priority: ns.priority ?? 0,
|
|
254
|
+
depends_on: ns.dependsOn ?? [],
|
|
255
|
+
lease_owner: '',
|
|
256
|
+
lease_expires_at: '',
|
|
257
|
+
dead_reason: '',
|
|
258
|
+
created_at: nowIso,
|
|
259
|
+
updated_at: nowIso,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
catch (e) {
|
|
263
|
+
if (e instanceof ControlPlaneError && e.code === 'ROW_CONFLICT' && opts?.parentStepId)
|
|
264
|
+
continue;
|
|
265
|
+
throw e;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
export async function failStep(da, step, attemptId, opts) {
|
|
270
|
+
const t = clockNow(opts);
|
|
271
|
+
const nowIso = t.toISOString();
|
|
272
|
+
const sfx = clockSuffix(opts);
|
|
273
|
+
const st = compactStamp(t);
|
|
274
|
+
// 1. Close attempt
|
|
275
|
+
await da.patchRow('attempts', attemptId, [
|
|
276
|
+
{ op: 'replace', path: 'status', value: 'failed' },
|
|
277
|
+
{ op: 'replace', path: 'lesson', value: opts.lesson ?? '' },
|
|
278
|
+
{ op: 'replace', path: 'error', value: opts.error ?? '' },
|
|
279
|
+
{ op: 'replace', path: 'finished_at', value: nowIso },
|
|
280
|
+
]);
|
|
281
|
+
// 2. Append event
|
|
282
|
+
await da.createRow('events', `event_${st}_step-failed_${sfx}`, {
|
|
283
|
+
id: `event_${st}_step-failed_${sfx}`,
|
|
284
|
+
run_id: step.runId,
|
|
285
|
+
task_id: step.taskId,
|
|
286
|
+
step_id: step.id,
|
|
287
|
+
type: 'step_failed',
|
|
288
|
+
payload: { attempt_id: attemptId, lesson: opts.lesson, error: opts.error },
|
|
289
|
+
actor: 'orchestrator',
|
|
290
|
+
created_at: nowIso,
|
|
291
|
+
});
|
|
292
|
+
// 3. Gate on the PERSISTED attempt_count, never the caller's snapshot. startAttempt owns the
|
|
293
|
+
// increment and already wrote it, so re-deriving here (snapshot + 1) would double-count a step
|
|
294
|
+
// that the worker refetched between startAttempt and failStep, killing it one attempt early.
|
|
295
|
+
// failStep therefore reads the current row and does not write attempt_count itself.
|
|
296
|
+
const current = await da.getRow('steps', step.id);
|
|
297
|
+
const attemptCount = Number(current?.data.attempt_count ?? step.attemptCount);
|
|
298
|
+
const maxAttempts = Number(current?.data.max_attempts ?? step.maxAttempts);
|
|
299
|
+
if (attemptCount < maxAttempts) {
|
|
300
|
+
// 4. Attempts remain: backoff to ready, clear lease (attempt_count left as startAttempt set it)
|
|
301
|
+
await da.patchRow('steps', step.id, [
|
|
302
|
+
{ op: 'replace', path: 'status', value: 'ready' },
|
|
303
|
+
{ op: 'replace', path: 'run_after', value: backoffRunAfter(t, attemptCount) },
|
|
304
|
+
{ op: 'replace', path: 'lease_owner', value: '' },
|
|
305
|
+
{ op: 'replace', path: 'lease_expires_at', value: '' },
|
|
306
|
+
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
307
|
+
]);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
// 5. Cap reached: dead, clear lease
|
|
311
|
+
const deadReason = opts.lesson ?? opts.error ?? `exhausted ${maxAttempts} attempt(s)`;
|
|
312
|
+
await da.patchRow('steps', step.id, [
|
|
313
|
+
{ op: 'replace', path: 'status', value: 'dead' },
|
|
314
|
+
{ op: 'replace', path: 'dead_reason', value: deadReason },
|
|
315
|
+
{ op: 'replace', path: 'lease_owner', value: '' },
|
|
316
|
+
{ op: 'replace', path: 'lease_expires_at', value: '' },
|
|
317
|
+
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
318
|
+
]);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
export async function recoverInFlight(da, workerId, opts) {
|
|
322
|
+
const t = clockNow(opts);
|
|
323
|
+
const nowIso = t.toISOString();
|
|
324
|
+
const sfx = clockSuffix(opts);
|
|
325
|
+
const st = compactStamp(t);
|
|
326
|
+
// Server-side: filter by lease_owner + status to avoid a full-table scan.
|
|
327
|
+
// MVP single-worker startup: first-page result (CLAIM_CAP rows) is acceptable; a multi-worker
|
|
328
|
+
// deployment would need pagination here, but that belongs to a later plan.
|
|
329
|
+
const allSteps = await da.listRows('steps', {
|
|
330
|
+
first: CLAIM_CAP,
|
|
331
|
+
where: {
|
|
332
|
+
AND: [
|
|
333
|
+
{ data: { path: 'lease_owner', equals: workerId } },
|
|
334
|
+
{
|
|
335
|
+
OR: [
|
|
336
|
+
{ data: { path: 'status', equals: 'claimed' } },
|
|
337
|
+
{ data: { path: 'status', equals: 'running' } },
|
|
338
|
+
],
|
|
339
|
+
},
|
|
340
|
+
],
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
// In-process filter provides correctness against fake/unconstrained transports.
|
|
344
|
+
const orphans = allSteps
|
|
345
|
+
.map(mapStep)
|
|
346
|
+
.filter((s) => s.leaseOwner === workerId && (s.status === 'claimed' || s.status === 'running'));
|
|
347
|
+
for (let i = 0; i < orphans.length; i++) {
|
|
348
|
+
const orphan = orphans[i];
|
|
349
|
+
if (!orphan)
|
|
350
|
+
continue;
|
|
351
|
+
if (orphan.status === 'running') {
|
|
352
|
+
const allAttempts = await da.listRows('attempts', { first: RECOVERY_ATTEMPT_CAP });
|
|
353
|
+
const runningAttempts = allAttempts.filter((a) => String(a.data.step_id) === orphan.id && String(a.data.status) === 'running');
|
|
354
|
+
for (const attempt of runningAttempts) {
|
|
355
|
+
await da.patchRow('attempts', attempt.rowId, [
|
|
356
|
+
{ op: 'replace', path: 'status', value: 'failed' },
|
|
357
|
+
{ op: 'replace', path: 'lesson', value: 'worker crashed mid-step' },
|
|
358
|
+
{ op: 'replace', path: 'finished_at', value: nowIso },
|
|
359
|
+
]);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
await da.createRow('events', `event_${st}_step-recovered_${sfx}_${i}`, {
|
|
363
|
+
id: `event_${st}_step-recovered_${sfx}_${i}`,
|
|
364
|
+
run_id: orphan.runId,
|
|
365
|
+
task_id: orphan.taskId,
|
|
366
|
+
step_id: orphan.id,
|
|
367
|
+
type: 'step_recovered',
|
|
368
|
+
payload: { worker_id: workerId },
|
|
369
|
+
actor: 'orchestrator',
|
|
370
|
+
created_at: nowIso,
|
|
371
|
+
});
|
|
372
|
+
await da.patchRow('steps', orphan.id, [
|
|
373
|
+
{ op: 'replace', path: 'status', value: 'ready' },
|
|
374
|
+
{ op: 'replace', path: 'lease_owner', value: '' },
|
|
375
|
+
{ op: 'replace', path: 'lease_expires_at', value: '' },
|
|
376
|
+
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
377
|
+
]);
|
|
378
|
+
}
|
|
379
|
+
return orphans;
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=steps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/control-plane/steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/control-plane/tables.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,OAAO;IACP,OAAO;IACP,UAAU;IACV,QAAQ;IACR,OAAO;IACP,aAAa;CACL,CAAC;AAIX,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAQ,aAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { RevisiumClient } from '@revisium/client';
|
|
2
|
+
import { baseUrl, getConfig, isAlive, isHealthy, readRuntime } from '../config.js';
|
|
3
|
+
import { ControlPlaneError } from './errors.js';
|
|
4
|
+
function isRowNotFound(error) {
|
|
5
|
+
const err = error;
|
|
6
|
+
return (err?.statusCode === 404 ||
|
|
7
|
+
err?.status === 404 ||
|
|
8
|
+
err?.code === 'ROW_NOT_FOUND' ||
|
|
9
|
+
(typeof err?.message === 'string' && err.message.toLowerCase().includes('not found')));
|
|
10
|
+
}
|
|
11
|
+
async function createDraftScope() {
|
|
12
|
+
const runtime = readRuntime();
|
|
13
|
+
if (!runtime || !isAlive(runtime.pid) || !(await isHealthy(runtime.httpPort))) {
|
|
14
|
+
throw new ControlPlaneError('DAEMON_NOT_RUNNING', 'Local Revisium daemon is not running or healthy');
|
|
15
|
+
}
|
|
16
|
+
const { org, project, branch } = getConfig();
|
|
17
|
+
const client = new RevisiumClient({ baseUrl: baseUrl(runtime.httpPort) });
|
|
18
|
+
return client.revision({ org, project, branch, revision: 'draft' });
|
|
19
|
+
}
|
|
20
|
+
export function createVersionedMeaningAccess(options = {}) {
|
|
21
|
+
const dryRun = options.dryRun ?? false;
|
|
22
|
+
const scopeFactory = options.scopeFactory ?? createDraftScope;
|
|
23
|
+
let scopePromise;
|
|
24
|
+
function scope() {
|
|
25
|
+
scopePromise ??= scopeFactory();
|
|
26
|
+
return scopePromise;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
async upsertRow(row) {
|
|
30
|
+
if (dryRun) {
|
|
31
|
+
return { action: 'dry-run', table: row.table, rowId: row.rowId };
|
|
32
|
+
}
|
|
33
|
+
const draft = await scope();
|
|
34
|
+
try {
|
|
35
|
+
await draft.getRow(row.table, row.rowId);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (!isRowNotFound(error))
|
|
39
|
+
throw error;
|
|
40
|
+
await draft.createRow(row.table, row.rowId, row.data);
|
|
41
|
+
return { action: 'create', table: row.table, rowId: row.rowId };
|
|
42
|
+
}
|
|
43
|
+
await draft.updateRow(row.table, row.rowId, row.data);
|
|
44
|
+
return { action: 'update', table: row.table, rowId: row.rowId };
|
|
45
|
+
},
|
|
46
|
+
async commit(message) {
|
|
47
|
+
if (dryRun)
|
|
48
|
+
return null;
|
|
49
|
+
return (await scope()).commit(message);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=versioned-meaning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioned-meaning.js","sourceRoot":"","sources":["../../src/control-plane/versioned-meaning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Module } from '@nestjs/common';
|
|
8
|
+
import { DbosService } from './dbos.service.js';
|
|
9
|
+
let EngineModule = class EngineModule {
|
|
10
|
+
};
|
|
11
|
+
EngineModule = __decorate([
|
|
12
|
+
Module({
|
|
13
|
+
providers: [DbosService],
|
|
14
|
+
exports: [DbosService],
|
|
15
|
+
})
|
|
16
|
+
], EngineModule);
|
|
17
|
+
export { EngineModule };
|
|
18
|
+
//# sourceMappingURL=dbos.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbos.module.js","sourceRoot":"","sources":["../../src/engine/dbos.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMzC,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,YAAY;IAJxB,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,OAAO,EAAE,CAAC,WAAW,CAAC;KACvB,CAAC;GACW,YAAY,CAAG"}
|