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.
Files changed (85) hide show
  1. package/README.md +1123 -0
  2. package/dist/cli/main.d.ts +2 -0
  3. package/dist/cli/main.js +19 -0
  4. package/dist/cli/main.js.map +1 -0
  5. package/dist/cli/program-name.d.ts +2 -0
  6. package/dist/cli/program-name.js +12 -0
  7. package/dist/cli/program-name.js.map +1 -0
  8. package/dist/cli/typescript-runtime.d.ts +52 -0
  9. package/dist/cli/typescript-runtime.js +18009 -0
  10. package/dist/cli/typescript-runtime.js.map +1 -0
  11. package/dist/index.d.ts +37 -0
  12. package/dist/index.js +20 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/runtime/audit.d.ts +96 -0
  15. package/dist/runtime/audit.js +298 -0
  16. package/dist/runtime/audit.js.map +1 -0
  17. package/dist/runtime/classify.d.ts +8 -0
  18. package/dist/runtime/classify.js +128 -0
  19. package/dist/runtime/classify.js.map +1 -0
  20. package/dist/runtime/codex-session.d.ts +103 -0
  21. package/dist/runtime/codex-session.js +408 -0
  22. package/dist/runtime/codex-session.js.map +1 -0
  23. package/dist/runtime/commands.d.ts +92 -0
  24. package/dist/runtime/commands.js +408 -0
  25. package/dist/runtime/commands.js.map +1 -0
  26. package/dist/runtime/dispatch.d.ts +74 -0
  27. package/dist/runtime/dispatch.js +669 -0
  28. package/dist/runtime/dispatch.js.map +1 -0
  29. package/dist/runtime/export.d.ts +22 -0
  30. package/dist/runtime/export.js +77 -0
  31. package/dist/runtime/export.js.map +1 -0
  32. package/dist/runtime/ingest.d.ts +28 -0
  33. package/dist/runtime/ingest.js +177 -0
  34. package/dist/runtime/ingest.js.map +1 -0
  35. package/dist/runtime/loop-evidence.d.ts +87 -0
  36. package/dist/runtime/loop-evidence.js +448 -0
  37. package/dist/runtime/loop-evidence.js.map +1 -0
  38. package/dist/runtime/manager-config.d.ts +20 -0
  39. package/dist/runtime/manager-config.js +34 -0
  40. package/dist/runtime/manager-config.js.map +1 -0
  41. package/dist/runtime/manager-permissions.d.ts +7 -0
  42. package/dist/runtime/manager-permissions.js +85 -0
  43. package/dist/runtime/manager-permissions.js.map +1 -0
  44. package/dist/runtime/notifications.d.ts +89 -0
  45. package/dist/runtime/notifications.js +208 -0
  46. package/dist/runtime/notifications.js.map +1 -0
  47. package/dist/runtime/replay.d.ts +29 -0
  48. package/dist/runtime/replay.js +331 -0
  49. package/dist/runtime/replay.js.map +1 -0
  50. package/dist/runtime/tasks.d.ts +54 -0
  51. package/dist/runtime/tasks.js +195 -0
  52. package/dist/runtime/tasks.js.map +1 -0
  53. package/dist/runtime/tmux.d.ts +61 -0
  54. package/dist/runtime/tmux.js +189 -0
  55. package/dist/runtime/tmux.js.map +1 -0
  56. package/dist/runtime/visual-diff.d.ts +23 -0
  57. package/dist/runtime/visual-diff.js +234 -0
  58. package/dist/runtime/visual-diff.js.map +1 -0
  59. package/dist/state/database.d.ts +21 -0
  60. package/dist/state/database.js +142 -0
  61. package/dist/state/database.js.map +1 -0
  62. package/dist/state/files.d.ts +38 -0
  63. package/dist/state/files.js +73 -0
  64. package/dist/state/files.js.map +1 -0
  65. package/dist/state/schema-v22.d.ts +1 -0
  66. package/dist/state/schema-v22.js +566 -0
  67. package/dist/state/schema-v22.js.map +1 -0
  68. package/dist/state/sqlite-contract.d.ts +4 -0
  69. package/dist/state/sqlite-contract.js +78 -0
  70. package/dist/state/sqlite-contract.js.map +1 -0
  71. package/dist/state/status.d.ts +12 -0
  72. package/dist/state/status.js +40 -0
  73. package/dist/state/status.js.map +1 -0
  74. package/docs/typescript-migration/cli-contract.md +147 -0
  75. package/docs/typescript-migration/dashboard-contract.md +76 -0
  76. package/docs/typescript-migration/package-install-contract.md +98 -0
  77. package/docs/typescript-migration/qa-gate-matrix.md +103 -0
  78. package/docs/typescript-migration/sqlite-state-contract.md +92 -0
  79. package/docs/typescript-migration/t005-runtime-parity.md +47 -0
  80. package/package.json +88 -0
  81. package/scripts/capture-static-html-screenshot.mjs +88 -0
  82. package/skills/codex-review/SKILL.md +116 -0
  83. package/skills/codex-review/scripts/codex-review +344 -0
  84. package/skills/manage-codex-workers/SKILL.md +696 -0
  85. 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;