agent-conveyor 0.1.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/README.md +1123 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +19 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/program-name.d.ts +2 -0
- package/dist/cli/program-name.js +12 -0
- package/dist/cli/program-name.js.map +1 -0
- package/dist/cli/typescript-runtime.d.ts +52 -0
- package/dist/cli/typescript-runtime.js +18009 -0
- package/dist/cli/typescript-runtime.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/audit.d.ts +96 -0
- package/dist/runtime/audit.js +298 -0
- package/dist/runtime/audit.js.map +1 -0
- package/dist/runtime/classify.d.ts +8 -0
- package/dist/runtime/classify.js +128 -0
- package/dist/runtime/classify.js.map +1 -0
- package/dist/runtime/codex-session.d.ts +103 -0
- package/dist/runtime/codex-session.js +408 -0
- package/dist/runtime/codex-session.js.map +1 -0
- package/dist/runtime/commands.d.ts +92 -0
- package/dist/runtime/commands.js +408 -0
- package/dist/runtime/commands.js.map +1 -0
- package/dist/runtime/dispatch.d.ts +74 -0
- package/dist/runtime/dispatch.js +669 -0
- package/dist/runtime/dispatch.js.map +1 -0
- package/dist/runtime/export.d.ts +22 -0
- package/dist/runtime/export.js +77 -0
- package/dist/runtime/export.js.map +1 -0
- package/dist/runtime/ingest.d.ts +28 -0
- package/dist/runtime/ingest.js +177 -0
- package/dist/runtime/ingest.js.map +1 -0
- package/dist/runtime/loop-evidence.d.ts +87 -0
- package/dist/runtime/loop-evidence.js +448 -0
- package/dist/runtime/loop-evidence.js.map +1 -0
- package/dist/runtime/manager-config.d.ts +20 -0
- package/dist/runtime/manager-config.js +34 -0
- package/dist/runtime/manager-config.js.map +1 -0
- package/dist/runtime/manager-permissions.d.ts +7 -0
- package/dist/runtime/manager-permissions.js +85 -0
- package/dist/runtime/manager-permissions.js.map +1 -0
- package/dist/runtime/notifications.d.ts +89 -0
- package/dist/runtime/notifications.js +208 -0
- package/dist/runtime/notifications.js.map +1 -0
- package/dist/runtime/replay.d.ts +29 -0
- package/dist/runtime/replay.js +331 -0
- package/dist/runtime/replay.js.map +1 -0
- package/dist/runtime/tasks.d.ts +54 -0
- package/dist/runtime/tasks.js +195 -0
- package/dist/runtime/tasks.js.map +1 -0
- package/dist/runtime/tmux.d.ts +61 -0
- package/dist/runtime/tmux.js +189 -0
- package/dist/runtime/tmux.js.map +1 -0
- package/dist/runtime/visual-diff.d.ts +23 -0
- package/dist/runtime/visual-diff.js +234 -0
- package/dist/runtime/visual-diff.js.map +1 -0
- package/dist/state/database.d.ts +21 -0
- package/dist/state/database.js +142 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/files.d.ts +38 -0
- package/dist/state/files.js +73 -0
- package/dist/state/files.js.map +1 -0
- package/dist/state/schema-v22.d.ts +1 -0
- package/dist/state/schema-v22.js +566 -0
- package/dist/state/schema-v22.js.map +1 -0
- package/dist/state/sqlite-contract.d.ts +4 -0
- package/dist/state/sqlite-contract.js +78 -0
- package/dist/state/sqlite-contract.js.map +1 -0
- package/dist/state/status.d.ts +12 -0
- package/dist/state/status.js +40 -0
- package/dist/state/status.js.map +1 -0
- package/docs/typescript-migration/cli-contract.md +147 -0
- package/docs/typescript-migration/dashboard-contract.md +76 -0
- package/docs/typescript-migration/package-install-contract.md +98 -0
- package/docs/typescript-migration/qa-gate-matrix.md +103 -0
- package/docs/typescript-migration/sqlite-state-contract.md +92 -0
- package/docs/typescript-migration/t005-runtime-parity.md +47 -0
- package/package.json +88 -0
- package/scripts/capture-static-html-screenshot.mjs +88 -0
- package/skills/codex-review/SKILL.md +116 -0
- package/skills/codex-review/scripts/codex-review +344 -0
- package/skills/manage-codex-workers/SKILL.md +696 -0
- package/skills/manage-codex-workers/agents/openai.yaml +5 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { validateRequiredPermission as validateManagerRequiredPermission } from "./manager-permissions.js";
|
|
3
|
+
export class CommandQueueError extends Error {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "CommandQueueError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function claimableDispatchCommandsSync(database, options) {
|
|
10
|
+
if (options.commandTypes.length === 0) {
|
|
11
|
+
throw new CommandQueueError("command_types must not be empty");
|
|
12
|
+
}
|
|
13
|
+
const timestamp = options.now ?? new Date().toISOString();
|
|
14
|
+
const placeholders = options.commandTypes.map(() => "?").join(", ");
|
|
15
|
+
const rows = database.prepare(`
|
|
16
|
+
select id, idempotency_key, created_at, updated_at, task_id, worker_id,
|
|
17
|
+
manager_id, correlation_id, type, state, available_at, claimed_by,
|
|
18
|
+
claimed_at, claim_expires_at, attempts, max_attempts, payload_json,
|
|
19
|
+
required_permission, result_json, error
|
|
20
|
+
from commands
|
|
21
|
+
where state = 'pending'
|
|
22
|
+
and type in (${placeholders})
|
|
23
|
+
and (available_at is null or available_at <= ?)
|
|
24
|
+
and attempts < max_attempts
|
|
25
|
+
order by created_at, id
|
|
26
|
+
limit ?
|
|
27
|
+
`).all(...options.commandTypes, timestamp, Math.max(1, options.limit ?? 10));
|
|
28
|
+
return rows.map(commandRecord);
|
|
29
|
+
}
|
|
30
|
+
export function createCommandSync(database, options) {
|
|
31
|
+
const requiredPermission = validateRequiredPermission(options.requiredPermission ?? null);
|
|
32
|
+
const commandId = options.commandId ?? `command-${randomUUID()}`;
|
|
33
|
+
const correlationId = options.correlationId ?? `dispatch-${randomUUID()}`;
|
|
34
|
+
const timestamp = options.now ?? new Date().toISOString();
|
|
35
|
+
const idempotencyKey = options.idempotencyKey ?? commandId;
|
|
36
|
+
database.prepare(`
|
|
37
|
+
insert into commands(
|
|
38
|
+
id, idempotency_key, created_at, updated_at, task_id, worker_id,
|
|
39
|
+
manager_id, correlation_id, type, state, available_at, max_attempts,
|
|
40
|
+
required_permission, payload_json
|
|
41
|
+
)
|
|
42
|
+
values (?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?)
|
|
43
|
+
`).run(commandId, idempotencyKey, timestamp, timestamp, options.taskId ?? null, options.workerId ?? null, options.managerId ?? null, correlationId, options.commandType, options.availableAt ?? null, options.maxAttempts ?? 1, requiredPermission, stableJson(options.payload));
|
|
44
|
+
emitTelemetry(database, {
|
|
45
|
+
actor: "workerctl",
|
|
46
|
+
attributes: {
|
|
47
|
+
idempotency_key: idempotencyKey,
|
|
48
|
+
manager_id: options.managerId ?? null,
|
|
49
|
+
required_permission: requiredPermission,
|
|
50
|
+
state: "pending",
|
|
51
|
+
worker_id: options.workerId ?? null,
|
|
52
|
+
},
|
|
53
|
+
correlation: {
|
|
54
|
+
command_id: commandId,
|
|
55
|
+
command_type: options.commandType,
|
|
56
|
+
correlation_id: correlationId,
|
|
57
|
+
},
|
|
58
|
+
eventType: "command_created",
|
|
59
|
+
severity: "info",
|
|
60
|
+
summary: `Created command ${options.commandType}.`,
|
|
61
|
+
taskId: options.taskId ?? null,
|
|
62
|
+
timestamp,
|
|
63
|
+
});
|
|
64
|
+
return commandId;
|
|
65
|
+
}
|
|
66
|
+
export function recoverStaleDispatchClaimsSync(database, options) {
|
|
67
|
+
if (options.commandTypes.length === 0) {
|
|
68
|
+
throw new CommandQueueError("command_types must not be empty");
|
|
69
|
+
}
|
|
70
|
+
const timestamp = options.now ?? new Date().toISOString();
|
|
71
|
+
const placeholders = options.commandTypes.map(() => "?").join(", ");
|
|
72
|
+
const commands = database.prepare(`
|
|
73
|
+
select id, task_id, type, correlation_id, attempts, max_attempts
|
|
74
|
+
from commands
|
|
75
|
+
where state = 'attempted'
|
|
76
|
+
and type in (${placeholders})
|
|
77
|
+
and claim_expires_at is not null
|
|
78
|
+
and claim_expires_at <= ?
|
|
79
|
+
order by claim_expires_at, created_at, id
|
|
80
|
+
limit ?
|
|
81
|
+
`).all(...options.commandTypes, timestamp, Math.max(1, options.limit ?? 10));
|
|
82
|
+
const recovered = [];
|
|
83
|
+
for (const command of commands) {
|
|
84
|
+
const attempt = database.prepare(`
|
|
85
|
+
select id, side_effect_started
|
|
86
|
+
from command_attempts
|
|
87
|
+
where command_id = ? and state = 'running'
|
|
88
|
+
order by id desc
|
|
89
|
+
limit 1
|
|
90
|
+
`).get(command.id);
|
|
91
|
+
const sideEffectStarted = Boolean(attempt?.side_effect_started);
|
|
92
|
+
let error;
|
|
93
|
+
let eventType;
|
|
94
|
+
let state;
|
|
95
|
+
if (sideEffectStarted) {
|
|
96
|
+
error = "stale dispatch claim expired after side effect started; manual review required";
|
|
97
|
+
if (attempt) {
|
|
98
|
+
database.prepare(`
|
|
99
|
+
update command_attempts
|
|
100
|
+
set state = 'failed', finished_at = ?, error = ?
|
|
101
|
+
where id = ?
|
|
102
|
+
`).run(timestamp, error, attempt.id);
|
|
103
|
+
}
|
|
104
|
+
database.prepare(`
|
|
105
|
+
update commands
|
|
106
|
+
set state = 'failed', updated_at = ?, error = ?,
|
|
107
|
+
claimed_by = null, claimed_at = null, claim_expires_at = null
|
|
108
|
+
where id = ?
|
|
109
|
+
`).run(timestamp, error, command.id);
|
|
110
|
+
state = "failed";
|
|
111
|
+
eventType = "dispatch_command_failed";
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
error = "stale dispatch claim abandoned before side effect started";
|
|
115
|
+
const nextState = command.attempts < command.max_attempts ? "pending" : "failed";
|
|
116
|
+
if (attempt) {
|
|
117
|
+
database.prepare(`
|
|
118
|
+
update command_attempts
|
|
119
|
+
set state = 'abandoned', finished_at = ?, error = ?
|
|
120
|
+
where id = ?
|
|
121
|
+
`).run(timestamp, error, attempt.id);
|
|
122
|
+
}
|
|
123
|
+
database.prepare(`
|
|
124
|
+
update commands
|
|
125
|
+
set state = ?, updated_at = ?, error = ?,
|
|
126
|
+
claimed_by = null, claimed_at = null, claim_expires_at = null
|
|
127
|
+
where id = ?
|
|
128
|
+
`).run(nextState, timestamp, nextState === "pending" ? null : error, command.id);
|
|
129
|
+
state = nextState === "pending" ? "requeued" : "failed";
|
|
130
|
+
eventType = "dispatch_command_abandoned";
|
|
131
|
+
}
|
|
132
|
+
emitTelemetry(database, {
|
|
133
|
+
actor: "dispatch",
|
|
134
|
+
attributes: {
|
|
135
|
+
recovery_state: state,
|
|
136
|
+
side_effect_started: sideEffectStarted,
|
|
137
|
+
},
|
|
138
|
+
correlation: {
|
|
139
|
+
attempt_id: attempt?.id ?? null,
|
|
140
|
+
command_id: command.id,
|
|
141
|
+
command_type: command.type,
|
|
142
|
+
correlation_id: command.correlation_id,
|
|
143
|
+
dispatcher_id: options.dispatcherId,
|
|
144
|
+
},
|
|
145
|
+
eventType,
|
|
146
|
+
severity: state === "failed" ? "error" : "warning",
|
|
147
|
+
summary: `Recovered stale dispatch claim for ${command.type}.`,
|
|
148
|
+
taskId: command.task_id,
|
|
149
|
+
timestamp,
|
|
150
|
+
});
|
|
151
|
+
recovered.push({
|
|
152
|
+
attempt_id: attempt?.id ?? null,
|
|
153
|
+
command_id: command.id,
|
|
154
|
+
command_type: command.type,
|
|
155
|
+
error,
|
|
156
|
+
side_effect_started: sideEffectStarted,
|
|
157
|
+
state,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return recovered;
|
|
161
|
+
}
|
|
162
|
+
export function claimNextDispatchCommandSync(database, options) {
|
|
163
|
+
if (options.commandTypes.length === 0) {
|
|
164
|
+
throw new CommandQueueError("command_types must not be empty");
|
|
165
|
+
}
|
|
166
|
+
const timestamp = options.now ?? new Date().toISOString();
|
|
167
|
+
const claimExpiresAt = isoAfter(timestamp, Math.max(1, options.leaseSeconds ?? 60));
|
|
168
|
+
const correlationId = `dispatch-${randomUUID()}`;
|
|
169
|
+
const placeholders = options.commandTypes.map(() => "?").join(", ");
|
|
170
|
+
const row = database.prepare(`
|
|
171
|
+
update commands
|
|
172
|
+
set state = 'attempted',
|
|
173
|
+
updated_at = ?,
|
|
174
|
+
correlation_id = coalesce(correlation_id, ?),
|
|
175
|
+
claimed_by = ?,
|
|
176
|
+
claimed_at = ?,
|
|
177
|
+
claim_expires_at = ?,
|
|
178
|
+
attempts = attempts + 1
|
|
179
|
+
where id = (
|
|
180
|
+
select id
|
|
181
|
+
from commands
|
|
182
|
+
where state = 'pending'
|
|
183
|
+
and type in (${placeholders})
|
|
184
|
+
and (available_at is null or available_at <= ?)
|
|
185
|
+
and attempts < max_attempts
|
|
186
|
+
order by created_at, id
|
|
187
|
+
limit 1
|
|
188
|
+
)
|
|
189
|
+
and state = 'pending'
|
|
190
|
+
returning id, idempotency_key, created_at, updated_at, task_id, worker_id,
|
|
191
|
+
manager_id, correlation_id, type, state, available_at, claimed_by,
|
|
192
|
+
claimed_at, claim_expires_at, attempts, max_attempts, payload_json,
|
|
193
|
+
required_permission, result_json, error
|
|
194
|
+
`).get(timestamp, correlationId, options.dispatcherId, timestamp, claimExpiresAt, ...options.commandTypes, timestamp);
|
|
195
|
+
if (!row) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const attemptResult = database.prepare(`
|
|
199
|
+
insert into command_attempts(
|
|
200
|
+
command_id, correlation_id, dispatcher_id, started_at, state
|
|
201
|
+
)
|
|
202
|
+
values (?, ?, ?, ?, 'running')
|
|
203
|
+
`).run(row.id, row.correlation_id, options.dispatcherId, timestamp);
|
|
204
|
+
const attemptId = Number(attemptResult.lastInsertRowid);
|
|
205
|
+
emitTelemetry(database, {
|
|
206
|
+
actor: "dispatch",
|
|
207
|
+
attributes: {
|
|
208
|
+
attempts: row.attempts,
|
|
209
|
+
claim_expires_at: row.claim_expires_at,
|
|
210
|
+
manager_id: row.manager_id,
|
|
211
|
+
worker_id: row.worker_id,
|
|
212
|
+
},
|
|
213
|
+
correlation: {
|
|
214
|
+
attempt_id: attemptId,
|
|
215
|
+
command_id: row.id,
|
|
216
|
+
command_type: row.type,
|
|
217
|
+
correlation_id: row.correlation_id,
|
|
218
|
+
dispatcher_id: options.dispatcherId,
|
|
219
|
+
},
|
|
220
|
+
eventType: "dispatch_command_claimed",
|
|
221
|
+
severity: "info",
|
|
222
|
+
summary: `Dispatch claimed command ${row.type}.`,
|
|
223
|
+
taskId: row.task_id,
|
|
224
|
+
timestamp,
|
|
225
|
+
});
|
|
226
|
+
return {
|
|
227
|
+
attempt: {
|
|
228
|
+
command_id: row.id,
|
|
229
|
+
correlation_id: row.correlation_id ?? "",
|
|
230
|
+
dispatcher_id: options.dispatcherId,
|
|
231
|
+
error: null,
|
|
232
|
+
finished_at: null,
|
|
233
|
+
id: attemptId,
|
|
234
|
+
result: null,
|
|
235
|
+
side_effect_completed: false,
|
|
236
|
+
side_effect_started: false,
|
|
237
|
+
started_at: timestamp,
|
|
238
|
+
state: "running",
|
|
239
|
+
},
|
|
240
|
+
command: commandRecord(row),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
export function finishCommandAttemptSync(database, options) {
|
|
244
|
+
const timestamp = options.now ?? new Date().toISOString();
|
|
245
|
+
const resultJson = options.result === undefined || options.result === null ? null : stableJson(options.result);
|
|
246
|
+
const update = database.prepare(`
|
|
247
|
+
update command_attempts
|
|
248
|
+
set state = ?, finished_at = ?, result_json = ?, error = ?,
|
|
249
|
+
side_effect_started = ?, side_effect_completed = ?
|
|
250
|
+
where id = ? and state = 'running'
|
|
251
|
+
`).run(options.state, timestamp, resultJson, options.error ?? null, options.sideEffectStarted ? 1 : 0, options.sideEffectCompleted ? 1 : 0, options.attemptId);
|
|
252
|
+
if (update.changes !== 1) {
|
|
253
|
+
const existing = database.prepare("select state from command_attempts where id = ?").get(options.attemptId);
|
|
254
|
+
if (!existing) {
|
|
255
|
+
throw new CommandQueueError(`Unknown command attempt: ${options.attemptId}`);
|
|
256
|
+
}
|
|
257
|
+
throw new CommandQueueError(`Command attempt ${options.attemptId} is not running (state: ${existing.state})`);
|
|
258
|
+
}
|
|
259
|
+
const attempt = database.prepare(`
|
|
260
|
+
select command_attempts.id, command_attempts.command_id,
|
|
261
|
+
command_attempts.correlation_id, command_attempts.dispatcher_id,
|
|
262
|
+
command_attempts.started_at, command_attempts.finished_at,
|
|
263
|
+
command_attempts.state, command_attempts.result_json,
|
|
264
|
+
command_attempts.error, command_attempts.side_effect_started,
|
|
265
|
+
command_attempts.side_effect_completed,
|
|
266
|
+
commands.task_id, commands.worker_id, commands.manager_id,
|
|
267
|
+
commands.type as command_type
|
|
268
|
+
from command_attempts
|
|
269
|
+
join commands on commands.id = command_attempts.command_id
|
|
270
|
+
where command_attempts.id = ?
|
|
271
|
+
`).get(options.attemptId);
|
|
272
|
+
if (!attempt) {
|
|
273
|
+
throw new CommandQueueError(`Unknown command attempt: ${options.attemptId}`);
|
|
274
|
+
}
|
|
275
|
+
const commandState = options.state === "succeeded" ? "succeeded" : options.state === "blocked" ? "blocked" : "failed";
|
|
276
|
+
database.prepare(`
|
|
277
|
+
update commands
|
|
278
|
+
set state = ?, updated_at = ?, result_json = ?, error = ?
|
|
279
|
+
where id = ?
|
|
280
|
+
`).run(commandState, timestamp, resultJson, options.error ?? null, attempt.command_id);
|
|
281
|
+
const finishEventType = {
|
|
282
|
+
abandoned: "dispatch_command_abandoned",
|
|
283
|
+
blocked: "dispatch_command_blocked",
|
|
284
|
+
failed: "dispatch_command_failed",
|
|
285
|
+
succeeded: "dispatch_command_succeeded",
|
|
286
|
+
};
|
|
287
|
+
const finishSeverity = {
|
|
288
|
+
abandoned: "warning",
|
|
289
|
+
blocked: "warning",
|
|
290
|
+
failed: "error",
|
|
291
|
+
succeeded: "info",
|
|
292
|
+
};
|
|
293
|
+
emitTelemetry(database, {
|
|
294
|
+
actor: "dispatch",
|
|
295
|
+
attributes: {
|
|
296
|
+
error: options.error ?? null,
|
|
297
|
+
manager_id: attempt.manager_id,
|
|
298
|
+
result: options.result ?? {},
|
|
299
|
+
side_effect_completed: options.sideEffectCompleted ?? false,
|
|
300
|
+
side_effect_started: options.sideEffectStarted ?? false,
|
|
301
|
+
worker_id: attempt.worker_id,
|
|
302
|
+
},
|
|
303
|
+
correlation: {
|
|
304
|
+
attempt_id: options.attemptId,
|
|
305
|
+
command_id: attempt.command_id,
|
|
306
|
+
command_type: attempt.command_type,
|
|
307
|
+
correlation_id: attempt.correlation_id,
|
|
308
|
+
dispatcher_id: attempt.dispatcher_id,
|
|
309
|
+
},
|
|
310
|
+
eventType: finishEventType[options.state],
|
|
311
|
+
severity: finishSeverity[options.state],
|
|
312
|
+
summary: `Dispatch command ${attempt.command_type} ${options.state}.`,
|
|
313
|
+
taskId: attempt.task_id,
|
|
314
|
+
timestamp,
|
|
315
|
+
});
|
|
316
|
+
return commandAttemptRecord(attempt);
|
|
317
|
+
}
|
|
318
|
+
export function markCommandAttemptSideEffectStartedSync(database, attemptId) {
|
|
319
|
+
database.prepare(`
|
|
320
|
+
update command_attempts
|
|
321
|
+
set side_effect_started = 1
|
|
322
|
+
where id = ? and state = 'running'
|
|
323
|
+
`).run(attemptId);
|
|
324
|
+
}
|
|
325
|
+
function commandRecord(row) {
|
|
326
|
+
return {
|
|
327
|
+
attempts: row.attempts,
|
|
328
|
+
available_at: row.available_at,
|
|
329
|
+
claim_expires_at: row.claim_expires_at,
|
|
330
|
+
claimed_at: row.claimed_at,
|
|
331
|
+
claimed_by: row.claimed_by,
|
|
332
|
+
correlation_id: row.correlation_id,
|
|
333
|
+
created_at: row.created_at,
|
|
334
|
+
error: row.error,
|
|
335
|
+
id: row.id,
|
|
336
|
+
idempotency_key: row.idempotency_key,
|
|
337
|
+
manager_id: row.manager_id,
|
|
338
|
+
max_attempts: row.max_attempts,
|
|
339
|
+
payload: JSON.parse(row.payload_json),
|
|
340
|
+
required_permission: row.required_permission,
|
|
341
|
+
result: row.result_json ? JSON.parse(row.result_json) : null,
|
|
342
|
+
state: row.state,
|
|
343
|
+
task_id: row.task_id,
|
|
344
|
+
type: row.type,
|
|
345
|
+
updated_at: row.updated_at,
|
|
346
|
+
worker_id: row.worker_id,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
function commandAttemptRecord(row) {
|
|
350
|
+
return {
|
|
351
|
+
command_id: row.command_id,
|
|
352
|
+
correlation_id: row.correlation_id,
|
|
353
|
+
dispatcher_id: row.dispatcher_id,
|
|
354
|
+
error: row.error,
|
|
355
|
+
finished_at: row.finished_at,
|
|
356
|
+
id: row.id,
|
|
357
|
+
result: row.result_json ? JSON.parse(row.result_json) : null,
|
|
358
|
+
side_effect_completed: Boolean(row.side_effect_completed),
|
|
359
|
+
side_effect_started: Boolean(row.side_effect_started),
|
|
360
|
+
started_at: row.started_at,
|
|
361
|
+
state: row.state,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
function validateRequiredPermission(requiredPermission) {
|
|
365
|
+
try {
|
|
366
|
+
return validateManagerRequiredPermission(requiredPermission);
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
throw new CommandQueueError(error instanceof Error ? error.message : String(error));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
function emitTelemetry(database, options) {
|
|
373
|
+
const eventId = `telemetry-${randomUUID()}`;
|
|
374
|
+
const attributesJson = stableJson(options.attributes);
|
|
375
|
+
database.prepare(`
|
|
376
|
+
insert into telemetry_events(
|
|
377
|
+
id, run_id, task_id, timestamp, actor, event_type, severity,
|
|
378
|
+
summary, correlation_json, attributes_json
|
|
379
|
+
)
|
|
380
|
+
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
381
|
+
`).run(eventId, null, options.taskId, options.timestamp, options.actor, options.eventType, options.severity, options.summary, stableJson(options.correlation), attributesJson);
|
|
382
|
+
database.prepare(`
|
|
383
|
+
insert into telemetry_events_fts(
|
|
384
|
+
event_id, task_id, run_id, actor, event_type, summary, attributes
|
|
385
|
+
)
|
|
386
|
+
values (?, ?, ?, ?, ?, ?, ?)
|
|
387
|
+
`).run(eventId, options.taskId, null, options.actor, options.eventType, options.summary, attributesJson);
|
|
388
|
+
}
|
|
389
|
+
function isoAfter(value, seconds) {
|
|
390
|
+
const date = new Date(value);
|
|
391
|
+
date.setUTCSeconds(date.getUTCSeconds() + seconds);
|
|
392
|
+
return date.toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
393
|
+
}
|
|
394
|
+
function stableJson(value) {
|
|
395
|
+
return JSON.stringify(sortJson(value));
|
|
396
|
+
}
|
|
397
|
+
function sortJson(value) {
|
|
398
|
+
if (Array.isArray(value)) {
|
|
399
|
+
return value.map(sortJson);
|
|
400
|
+
}
|
|
401
|
+
if (value !== null && typeof value === "object") {
|
|
402
|
+
return Object.fromEntries(Object.entries(value)
|
|
403
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
404
|
+
.map(([key, child]) => [key, sortJson(child)]));
|
|
405
|
+
}
|
|
406
|
+
return value;
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/runtime/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { ClaimedCommand, CommandRecord } from "./commands.js";
|
|
3
|
+
import type { RoutedNotificationDeliveryMode } from "./notifications.js";
|
|
4
|
+
import type { SendTextResult, TmuxRunner } from "./tmux.js";
|
|
5
|
+
export interface DispatchPermissionCheck {
|
|
6
|
+
allowed: boolean;
|
|
7
|
+
configured: boolean;
|
|
8
|
+
required_permission: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DispatchCommandRoute {
|
|
11
|
+
binding_id: string;
|
|
12
|
+
created_at: string;
|
|
13
|
+
manager_session_id: string;
|
|
14
|
+
manager_session_name: string;
|
|
15
|
+
signal_type: string;
|
|
16
|
+
source_session_id: string;
|
|
17
|
+
source_session_name: string;
|
|
18
|
+
state: string;
|
|
19
|
+
target_session_id: string;
|
|
20
|
+
target_session_name: string;
|
|
21
|
+
task_id: string;
|
|
22
|
+
worker_session_id: string;
|
|
23
|
+
worker_session_name: string;
|
|
24
|
+
}
|
|
25
|
+
export interface DispatchCommandResult {
|
|
26
|
+
attempt_id: number;
|
|
27
|
+
cleanup_policy?: string | null;
|
|
28
|
+
command_id: string;
|
|
29
|
+
command_type: string;
|
|
30
|
+
correlation_id: string | null;
|
|
31
|
+
current_iteration?: number;
|
|
32
|
+
delivered?: boolean;
|
|
33
|
+
delivery_mode?: RoutedNotificationDeliveryMode;
|
|
34
|
+
dispatcher_id: string;
|
|
35
|
+
dry_run: boolean;
|
|
36
|
+
error?: string;
|
|
37
|
+
loop_policy?: Record<string, unknown>;
|
|
38
|
+
manager_decision_id?: number | null;
|
|
39
|
+
max_iterations?: number;
|
|
40
|
+
missing_evidence?: string[];
|
|
41
|
+
notification_id?: number | null;
|
|
42
|
+
permission_check?: DispatchPermissionCheck | null;
|
|
43
|
+
reason?: string | null;
|
|
44
|
+
requested_iteration?: number;
|
|
45
|
+
required_before_continue?: string[];
|
|
46
|
+
run_id?: string;
|
|
47
|
+
seed_prompt_sha256?: string | null;
|
|
48
|
+
send_result?: SendTextResult;
|
|
49
|
+
side_effect_completed?: boolean;
|
|
50
|
+
side_effect_started?: boolean;
|
|
51
|
+
state: "blocked" | "delivered" | "failed" | "planned" | "pull_required";
|
|
52
|
+
stop_conditions?: string[];
|
|
53
|
+
target_session?: string;
|
|
54
|
+
target_worker_notified?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export declare class DispatchPermissionError extends Error {
|
|
57
|
+
constructor(message: string);
|
|
58
|
+
}
|
|
59
|
+
export declare class DispatchRoutingError extends Error {
|
|
60
|
+
constructor(message: string);
|
|
61
|
+
}
|
|
62
|
+
export declare function resolveDispatchCommandRouteSync(database: DatabaseSync, command: CommandRecord): DispatchCommandRoute;
|
|
63
|
+
export declare function executeDispatchCommandSync(database: DatabaseSync, options: {
|
|
64
|
+
claimed: ClaimedCommand;
|
|
65
|
+
dispatcherId: string;
|
|
66
|
+
dryRun?: boolean;
|
|
67
|
+
now?: string;
|
|
68
|
+
sleep?: (milliseconds: number) => void;
|
|
69
|
+
tmuxRunner?: TmuxRunner;
|
|
70
|
+
}): DispatchCommandResult;
|
|
71
|
+
export declare function checkDispatchRequiredPermissionSync(database: DatabaseSync, options: {
|
|
72
|
+
command: CommandRecord;
|
|
73
|
+
now?: string;
|
|
74
|
+
}): DispatchPermissionCheck | null;
|