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,448 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { computeVisualDiffSync } from "./visual-diff.js";
3
+ export class LoopEvidenceError extends Error {
4
+ constructor(message) {
5
+ super(message);
6
+ this.name = "LoopEvidenceError";
7
+ }
8
+ }
9
+ export function loopEvidenceCriterion(runId, iteration, evidenceType) {
10
+ return `Ralph loop ${runId} iteration ${iteration} ${evidenceType} evidence`;
11
+ }
12
+ export function recordLoopEvidenceSync(database, options) {
13
+ if (options.iteration < 1) {
14
+ throw new LoopEvidenceError("--iteration must be at least 1");
15
+ }
16
+ const evidenceType = options.evidenceType.trim();
17
+ if (!evidenceType) {
18
+ throw new LoopEvidenceError("--evidence-type must be non-empty");
19
+ }
20
+ const metadata = evidenceType === "adversarial_check"
21
+ ? adversarialCheckMetadata(options.metadata ?? {})
22
+ : { ...(options.metadata ?? {}) };
23
+ const task = taskRowSync(database, options.task);
24
+ const run = ralphLoopRunForTaskSync(database, { loopRunId: options.loopRunId, task });
25
+ const status = options.status ?? "pass";
26
+ const criterionStatus = loopEvidenceCriterionStatus(status);
27
+ const evidence = {
28
+ ...metadata,
29
+ evidence_type: evidenceType,
30
+ iteration: options.iteration,
31
+ ralph_loop_run_id: run.id,
32
+ status,
33
+ };
34
+ if (options.artifactPath) {
35
+ evidence.artifact_path = String(options.artifactPath);
36
+ }
37
+ if (options.correlationId) {
38
+ evidence.correlation_id = options.correlationId;
39
+ }
40
+ const criterionText = loopEvidenceCriterion(run.id, options.iteration, evidenceType);
41
+ const existing = acceptanceCriteriaForTaskSync(database, { taskId: task.id })
42
+ .filter((criterion) => criterion.criterion === criterionText);
43
+ let criterion = null;
44
+ if (existing.length === 0) {
45
+ const criterionId = insertAcceptanceCriterionSync(database, {
46
+ criterion: criterionText,
47
+ evidence,
48
+ now: options.now,
49
+ proof: options.proof ?? `${evidenceType} evidence recorded for Ralph loop ${run.id} iteration ${options.iteration}.`,
50
+ source: options.source ?? "manager_inferred",
51
+ status: criterionStatus,
52
+ taskId: task.id,
53
+ });
54
+ criterion = acceptanceCriteriaForTaskSync(database, { taskId: task.id }).find((row) => row.id === criterionId) ?? null;
55
+ if (!criterion) {
56
+ throw new LoopEvidenceError(`Unknown acceptance criterion: ${criterionId}`);
57
+ }
58
+ insertAcceptanceCriterionEventSync(database, {
59
+ criterion,
60
+ created: true,
61
+ eventType: "acceptance_criterion_added",
62
+ now: options.now,
63
+ taskId: task.id,
64
+ });
65
+ }
66
+ else {
67
+ for (const previous of existing) {
68
+ criterion = updateAcceptanceCriterionSync(database, {
69
+ criterionId: previous.id,
70
+ evidence,
71
+ now: options.now,
72
+ proof: options.proof ?? previous.proof,
73
+ status: criterionStatus,
74
+ });
75
+ insertAcceptanceCriterionEventSync(database, {
76
+ criterion,
77
+ eventType: "acceptance_criterion_updated",
78
+ now: options.now,
79
+ previous,
80
+ taskId: task.id,
81
+ });
82
+ }
83
+ }
84
+ if (!criterion) {
85
+ throw new LoopEvidenceError("failed to record loop evidence");
86
+ }
87
+ return { criterion, evidence, run };
88
+ }
89
+ export function recordAdversarialLoopEvidenceSync(database, options) {
90
+ const metadata = adversarialCheckMetadata({
91
+ check: options.check,
92
+ failure_mode: options.failureMode,
93
+ result: options.result,
94
+ });
95
+ return recordLoopEvidenceSync(database, {
96
+ artifactPath: options.artifactPath,
97
+ correlationId: options.correlationId,
98
+ evidenceType: "adversarial_check",
99
+ iteration: options.iteration,
100
+ loopRunId: options.loopRunId,
101
+ metadata,
102
+ now: options.now,
103
+ proof: `Adversarial check: ${metadata.failure_mode} -> ${metadata.result}`,
104
+ source: options.source,
105
+ status: options.status,
106
+ task: options.task,
107
+ });
108
+ }
109
+ export function recordVisualDiffLoopEvidenceSync(database, options) {
110
+ const task = taskRowSync(database, options.task);
111
+ ralphLoopRunForTaskSync(database, { loopRunId: options.loopRunId, task });
112
+ const report = computeVisualDiffSync({
113
+ candidatePath: options.candidatePath,
114
+ diffOutput: options.diffOutput,
115
+ referencePath: options.referencePath,
116
+ reportOutput: options.reportOutput,
117
+ threshold: options.threshold,
118
+ });
119
+ const reportResult = recordLoopEvidenceSync(database, {
120
+ artifactPath: options.reportOutput,
121
+ correlationId: options.correlationId,
122
+ evidenceType: "visual_diff_report",
123
+ iteration: options.iteration,
124
+ loopRunId: options.loopRunId,
125
+ metadata: { ...report },
126
+ now: options.now,
127
+ proof: "Visual diff report recorded.",
128
+ source: options.source,
129
+ status: "pass",
130
+ task: task.id,
131
+ });
132
+ const thresholdStatus = report.below_threshold ? "pass" : "fail";
133
+ const thresholdProof = report.below_threshold
134
+ ? `Visual diff score ${formatNumber(report.diff_score)} is at or below threshold ${formatNumber(report.threshold)}.`
135
+ : `Visual diff score ${formatNumber(report.diff_score)} exceeds threshold ${formatNumber(report.threshold)}.`;
136
+ const thresholdResult = recordLoopEvidenceSync(database, {
137
+ artifactPath: options.reportOutput,
138
+ correlationId: options.correlationId,
139
+ evidenceType: "diff_below_threshold",
140
+ iteration: options.iteration,
141
+ loopRunId: options.loopRunId,
142
+ metadata: { ...report },
143
+ now: options.now,
144
+ proof: thresholdProof,
145
+ source: options.source,
146
+ status: thresholdStatus,
147
+ task: task.id,
148
+ });
149
+ return {
150
+ criterion: reportResult.criterion,
151
+ diff: report,
152
+ evidence: reportResult.evidence,
153
+ threshold_criterion: thresholdResult.criterion,
154
+ };
155
+ }
156
+ export function acceptanceCriteriaForTaskSync(database, options) {
157
+ const params = [options.taskId];
158
+ let where = "where task_id = ?";
159
+ if (options.statuses !== undefined) {
160
+ if (options.statuses.length === 0) {
161
+ return [];
162
+ }
163
+ for (const status of options.statuses) {
164
+ validateAcceptanceCriterionStatus(status);
165
+ }
166
+ where += ` and status in (${options.statuses.map(() => "?").join(", ")})`;
167
+ params.push(...options.statuses);
168
+ }
169
+ const rows = database.prepare(`
170
+ select id, task_id, criterion, status, source, proof, rationale,
171
+ evidence_json, created_at, updated_at
172
+ from acceptance_criteria
173
+ ${where}
174
+ order by id
175
+ `).all(...params);
176
+ return rows.map(acceptanceCriterionRecord);
177
+ }
178
+ function insertAcceptanceCriterionSync(database, options) {
179
+ validateAcceptanceCriterionStatus(options.status);
180
+ validateAcceptanceCriterionSource(options.source);
181
+ const existing = database.prepare(`
182
+ select id
183
+ from acceptance_criteria
184
+ where task_id = ? and source = ? and criterion = ?
185
+ `).get(options.taskId, options.source, options.criterion);
186
+ if (existing) {
187
+ return existing.id;
188
+ }
189
+ const timestamp = options.now ?? new Date().toISOString();
190
+ const result = database.prepare(`
191
+ insert into acceptance_criteria(
192
+ task_id, criterion, status, source, proof, rationale,
193
+ evidence_json, created_at, updated_at
194
+ )
195
+ values (?, ?, ?, ?, ?, ?, ?, ?, ?)
196
+ `).run(options.taskId, options.criterion, options.status, options.source, options.proof, options.rationale ?? null, stableJson(options.evidence), timestamp, timestamp);
197
+ const criterionId = Number(result.lastInsertRowid);
198
+ emitTelemetry(database, {
199
+ attributes: {
200
+ criterion: options.criterion,
201
+ has_evidence: true,
202
+ has_proof: options.proof !== null,
203
+ status: options.status,
204
+ },
205
+ correlation: {
206
+ criterion_id: criterionId,
207
+ source: options.source,
208
+ },
209
+ eventType: "acceptance_criterion_added",
210
+ summary: "Added acceptance criterion.",
211
+ taskId: options.taskId,
212
+ timestamp,
213
+ });
214
+ return criterionId;
215
+ }
216
+ function updateAcceptanceCriterionSync(database, options) {
217
+ validateAcceptanceCriterionStatus(options.status);
218
+ const existing = database.prepare(`
219
+ select id, task_id, criterion, status, source, proof, rationale,
220
+ evidence_json, created_at, updated_at
221
+ from acceptance_criteria
222
+ where id = ?
223
+ `).get(options.criterionId);
224
+ if (!existing) {
225
+ throw new LoopEvidenceError(`Unknown acceptance criterion: ${options.criterionId}`);
226
+ }
227
+ const timestamp = options.now ?? new Date().toISOString();
228
+ database.prepare(`
229
+ update acceptance_criteria
230
+ set status = ?, evidence_json = ?, proof = ?, rationale = ?, updated_at = ?
231
+ where id = ?
232
+ `).run(options.status, stableJson(options.evidence), options.proof, options.rationale ?? existing.rationale, timestamp, options.criterionId);
233
+ const updated = database.prepare(`
234
+ select id, task_id, criterion, status, source, proof, rationale,
235
+ evidence_json, created_at, updated_at
236
+ from acceptance_criteria
237
+ where id = ?
238
+ `).get(options.criterionId);
239
+ if (!updated) {
240
+ throw new LoopEvidenceError(`Unknown acceptance criterion: ${options.criterionId}`);
241
+ }
242
+ const record = acceptanceCriterionRecord(updated);
243
+ emitTelemetry(database, {
244
+ attributes: {
245
+ criterion: record.criterion,
246
+ has_evidence: true,
247
+ has_proof: record.proof !== null,
248
+ previous_status: existing.status,
249
+ status: record.status,
250
+ },
251
+ correlation: {
252
+ criterion_id: record.id,
253
+ source: record.source,
254
+ },
255
+ eventType: "acceptance_criterion_updated",
256
+ summary: "Updated acceptance criterion.",
257
+ taskId: record.task_id,
258
+ timestamp,
259
+ });
260
+ return record;
261
+ }
262
+ function loopEvidenceCriterionStatus(status) {
263
+ const normalized = status.trim().toLowerCase();
264
+ if (new Set(["green", "ok", "pass", "passed", "satisfied", "success", "succeeded"]).has(normalized)) {
265
+ return "satisfied";
266
+ }
267
+ return "rejected";
268
+ }
269
+ function formatNumber(value) {
270
+ return Number.isInteger(value) ? String(value) : `${value.toPrecision(6)}`.replace(/\.?0+$/, "");
271
+ }
272
+ function adversarialCheckMetadata(metadata) {
273
+ const values = { ...metadata };
274
+ for (const [key, flag] of [
275
+ ["failure_mode", "--failure-mode"],
276
+ ["check", "--check"],
277
+ ["result", "--result"],
278
+ ]) {
279
+ const value = typeof values[key] === "string" ? values[key].trim() : "";
280
+ if (!value) {
281
+ throw new LoopEvidenceError(`${flag} must be non-empty`);
282
+ }
283
+ values[key] = value;
284
+ }
285
+ return values;
286
+ }
287
+ function taskRowSync(database, task) {
288
+ const row = database.prepare(`
289
+ select id, name
290
+ from tasks
291
+ where id = ? or name = ?
292
+ limit 1
293
+ `).get(task, task);
294
+ if (!row) {
295
+ throw new LoopEvidenceError(`Unknown task: ${task}`);
296
+ }
297
+ return row;
298
+ }
299
+ function ralphLoopRunForTaskSync(database, options) {
300
+ const run = ralphLoopRunSync(database, options.loopRunId);
301
+ if (run.task_id !== options.task.id) {
302
+ throw new LoopEvidenceError(`loop run ${JSON.stringify(options.loopRunId)} does not belong to task ${JSON.stringify(options.task.name)}`);
303
+ }
304
+ return run;
305
+ }
306
+ function ralphLoopRunSync(database, runId) {
307
+ const exact = database.prepare(`
308
+ select id, task_id, name, purpose, metadata_json
309
+ from runs
310
+ where id = ?
311
+ limit 1
312
+ `).get(runId);
313
+ const row = exact ?? database.prepare(`
314
+ select id, task_id, name, purpose, metadata_json
315
+ from runs
316
+ where name = ?
317
+ order by started_at desc, id desc
318
+ limit 1
319
+ `).get(runId);
320
+ if (!row) {
321
+ throw new LoopEvidenceError(`Unknown run: ${runId}`);
322
+ }
323
+ const metadata = parseJsonObject(row.metadata_json);
324
+ if (metadata.kind !== "ralph_loop" && row.purpose !== "ralph_loop") {
325
+ throw new LoopEvidenceError(`Run ${JSON.stringify(runId)} is not a Ralph loop run`);
326
+ }
327
+ const currentIteration = integerMetadata(metadata.current_iteration);
328
+ const maxIterations = integerMetadata(metadata.max_iterations);
329
+ if (currentIteration === null || maxIterations === null) {
330
+ throw new LoopEvidenceError(`Ralph loop run ${JSON.stringify(runId)} is missing iteration policy`);
331
+ }
332
+ return {
333
+ cleanup_policy: typeof metadata.cleanup_policy === "string" ? metadata.cleanup_policy : null,
334
+ current_iteration: currentIteration,
335
+ id: row.id,
336
+ max_iterations: maxIterations,
337
+ metadata,
338
+ name: row.name,
339
+ preset: typeof metadata.preset === "string" ? metadata.preset : null,
340
+ required_before_continue: stringList(metadata.required_before_continue),
341
+ seed_prompt_sha256: typeof metadata.seed_prompt_sha256 === "string" ? metadata.seed_prompt_sha256 : null,
342
+ stop_conditions: stringList(metadata.stop_conditions),
343
+ task_id: row.task_id,
344
+ };
345
+ }
346
+ function insertAcceptanceCriterionEventSync(database, options) {
347
+ const payload = {
348
+ criterion: options.criterion.criterion,
349
+ criterion_id: options.criterion.id,
350
+ evidence: options.criterion.evidence,
351
+ proof: options.criterion.proof,
352
+ rationale: options.criterion.rationale,
353
+ source: options.criterion.source,
354
+ status: options.criterion.status,
355
+ task_id: options.taskId,
356
+ };
357
+ if (options.created !== undefined) {
358
+ payload.created = options.created;
359
+ }
360
+ if (options.previous) {
361
+ payload.previous_evidence = options.previous.evidence;
362
+ payload.previous_proof = options.previous.proof;
363
+ payload.previous_rationale = options.previous.rationale;
364
+ payload.previous_status = options.previous.status;
365
+ }
366
+ database.prepare(`
367
+ insert into events(created_at, actor, command_id, correlation_id, task_id, worker_id, manager_id, type, payload_json)
368
+ values (?, 'workerctl', null, null, ?, null, null, ?, ?)
369
+ `).run(options.now ?? new Date().toISOString(), options.taskId, options.eventType, stableJson(payload));
370
+ }
371
+ function emitTelemetry(database, options) {
372
+ const eventId = `telemetry-${randomUUID()}`;
373
+ const attributesJson = stableJson(options.attributes);
374
+ database.prepare(`
375
+ insert into telemetry_events(
376
+ id, run_id, task_id, timestamp, actor, event_type, severity,
377
+ summary, correlation_json, attributes_json
378
+ )
379
+ values (?, null, ?, ?, 'workerctl', ?, 'info', ?, ?, ?)
380
+ `).run(eventId, options.taskId, options.timestamp, options.eventType, options.summary, stableJson(options.correlation), attributesJson);
381
+ database.prepare(`
382
+ insert into telemetry_events_fts(
383
+ event_id, task_id, run_id, actor, event_type, summary, attributes
384
+ )
385
+ values (?, ?, null, 'workerctl', ?, ?, ?)
386
+ `).run(eventId, options.taskId, options.eventType, options.summary, attributesJson);
387
+ }
388
+ function validateAcceptanceCriterionStatus(status) {
389
+ if (!new Set(["accepted", "deferred", "proposed", "rejected", "satisfied"]).has(status)) {
390
+ throw new LoopEvidenceError(`Invalid acceptance criterion status: ${status}`);
391
+ }
392
+ }
393
+ function validateAcceptanceCriterionSource(source) {
394
+ if (!new Set(["final_audit", "manager_inferred", "user_requested", "worker_proposed"]).has(source)) {
395
+ throw new LoopEvidenceError(`Invalid acceptance criterion source: ${source}`);
396
+ }
397
+ }
398
+ function acceptanceCriterionRecord(row) {
399
+ return {
400
+ created_at: row.created_at,
401
+ criterion: row.criterion,
402
+ evidence: parseJsonObject(row.evidence_json),
403
+ id: row.id,
404
+ proof: row.proof,
405
+ rationale: row.rationale,
406
+ source: row.source,
407
+ status: row.status,
408
+ task_id: row.task_id,
409
+ updated_at: row.updated_at,
410
+ };
411
+ }
412
+ function parseJsonObject(json) {
413
+ const value = JSON.parse(json);
414
+ return isRecord(value) ? value : {};
415
+ }
416
+ function integerMetadata(value) {
417
+ if (typeof value === "number" && Number.isInteger(value)) {
418
+ return value;
419
+ }
420
+ if (typeof value === "string" && /^-?\d+$/.test(value)) {
421
+ return Number(value);
422
+ }
423
+ return null;
424
+ }
425
+ function stringList(value) {
426
+ if (!Array.isArray(value)) {
427
+ return [];
428
+ }
429
+ return value.filter((item) => typeof item === "string" && item.trim().length > 0).map((item) => item.trim());
430
+ }
431
+ function isRecord(value) {
432
+ return value !== null && typeof value === "object" && !Array.isArray(value);
433
+ }
434
+ function stableJson(value) {
435
+ return JSON.stringify(sortJson(value));
436
+ }
437
+ function sortJson(value) {
438
+ if (Array.isArray(value)) {
439
+ return value.map(sortJson);
440
+ }
441
+ if (value !== null && typeof value === "object") {
442
+ return Object.fromEntries(Object.entries(value)
443
+ .sort(([left], [right]) => left.localeCompare(right))
444
+ .map(([key, child]) => [key, sortJson(child)]));
445
+ }
446
+ return value;
447
+ }
448
+ //# sourceMappingURL=loop-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-evidence.js","sourceRoot":"","sources":["../../src/runtime/loop-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { DatabaseSync } from "node:sqlite";
2
+ import type { ManagerPermissions } from "./manager-permissions.js";
3
+ export interface ManagerConfigRecord {
4
+ acceptance_criteria: string[];
5
+ created_at: string;
6
+ epilogues: string[];
7
+ guidelines: string[];
8
+ nudge_on_completion: string;
9
+ objective: string | null;
10
+ permissions: ManagerPermissions;
11
+ reference_paths: string[];
12
+ require_acks: boolean;
13
+ revision: number;
14
+ supervision_mode: string;
15
+ task_id: string;
16
+ tools: string[];
17
+ updated_at: string;
18
+ }
19
+ export declare function managerConfigSync(database: DatabaseSync, taskId: string): ManagerConfigRecord | null;
20
+ export declare function managerConfigPermissionAllowed(config: ManagerConfigRecord | null, action: string): boolean;
@@ -0,0 +1,34 @@
1
+ import { managerPermissionAllowed, normalizeManagerPermissions } from "./manager-permissions.js";
2
+ export function managerConfigSync(database, taskId) {
3
+ const row = database.prepare(`
4
+ select task_id, supervision_mode, objective, guidelines_json,
5
+ acceptance_criteria_json, reference_paths_json, permissions_json,
6
+ tools_json, epilogues_json, nudge_on_completion, require_acks,
7
+ revision, created_at, updated_at
8
+ from manager_configs
9
+ where task_id = ?
10
+ `).get(taskId);
11
+ if (!row) {
12
+ return null;
13
+ }
14
+ return {
15
+ acceptance_criteria: JSON.parse(row.acceptance_criteria_json),
16
+ created_at: row.created_at,
17
+ epilogues: JSON.parse(row.epilogues_json),
18
+ guidelines: JSON.parse(row.guidelines_json),
19
+ nudge_on_completion: row.nudge_on_completion,
20
+ objective: row.objective,
21
+ permissions: normalizeManagerPermissions(JSON.parse(row.permissions_json)),
22
+ reference_paths: JSON.parse(row.reference_paths_json),
23
+ require_acks: Boolean(row.require_acks),
24
+ revision: row.revision,
25
+ supervision_mode: row.supervision_mode,
26
+ task_id: row.task_id,
27
+ tools: JSON.parse(row.tools_json),
28
+ updated_at: row.updated_at,
29
+ };
30
+ }
31
+ export function managerConfigPermissionAllowed(config, action) {
32
+ return config !== null && managerPermissionAllowed(config.permissions, action);
33
+ }
34
+ //# sourceMappingURL=manager-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager-config.js","sourceRoot":"","sources":["../../src/runtime/manager-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAoBjG,MAAM,UAAU,iBAAiB,CAAC,QAAsB,EAAE,MAAc;IACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;;;;GAO5B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAiC,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC7D,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;QACzC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;QAC3C,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;QAC5C,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,WAAW,EAAE,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC1E,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACrD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACvC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,UAAU,EAAE,GAAG,CAAC,UAAU;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAkC,EAAE,MAAc;IAC/F,OAAO,MAAM,KAAK,IAAI,IAAI,wBAAwB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type ManagerPermissionCategory = "communication" | "context" | "repo" | "verification" | "worker_session";
2
+ export type ManagerPermissions = Record<ManagerPermissionCategory, string[]>;
3
+ export declare function canonicalManagerPermissionNames(name: string): string[];
4
+ export declare function normalizeManagerPermissions(permissions: Record<string, unknown> | null | undefined): ManagerPermissions;
5
+ export declare function flattenManagerPermissions(permissions: Record<string, unknown> | null | undefined): string[];
6
+ export declare function managerPermissionAllowed(permissions: Record<string, unknown> | null | undefined, action: string): boolean;
7
+ export declare function validateRequiredPermission(requiredPermission: string | null): string | null;
@@ -0,0 +1,85 @@
1
+ const MANAGER_PERMISSION_TAXONOMY = {
2
+ communication: new Set(["comment_on_pr", "notify_operator"]),
3
+ context: new Set(["spawn_reviewer", "fetch_prs", "fetch_issues"]),
4
+ repo: new Set(["open_pr", "push_branch", "merge_green_pr"]),
5
+ verification: new Set(["run_playwright", "run_xcodebuild", "run_pytest", "run_cargo"]),
6
+ worker_session: new Set(["compact", "clear", "interrupt", "stop"]),
7
+ };
8
+ const MANAGER_PERMISSION_ALIASES = new Map([
9
+ ["allow_pr", "repo.open_pr"],
10
+ ["create_pr", "repo.open_pr"],
11
+ ["allow_merge_green", "repo.merge_green_pr"],
12
+ ["merge_green_pr", "repo.merge_green_pr"],
13
+ ["allow_worker_compact_clear", ["worker_session.compact", "worker_session.clear"]],
14
+ ["worker_compact_clear", ["worker_session.compact", "worker_session.clear"]],
15
+ ]);
16
+ const MANAGER_PERMISSION_ACTIONS = new Set(Object.entries(MANAGER_PERMISSION_TAXONOMY).flatMap(([category, actions]) => (Array.from(actions).map((action) => `${category}.${action}`))));
17
+ function emptyManagerPermissions() {
18
+ return {
19
+ communication: [],
20
+ context: [],
21
+ repo: [],
22
+ verification: [],
23
+ worker_session: [],
24
+ };
25
+ }
26
+ export function canonicalManagerPermissionNames(name) {
27
+ const alias = MANAGER_PERMISSION_ALIASES.get(name) ?? name;
28
+ return Array.isArray(alias) ? alias : [alias];
29
+ }
30
+ export function normalizeManagerPermissions(permissions) {
31
+ const normalized = emptyManagerPermissions();
32
+ for (const [key, value] of Object.entries(permissions ?? {})) {
33
+ if (isManagerPermissionCategory(key) && Array.isArray(value)) {
34
+ for (const action of value) {
35
+ if (typeof action === "string" && MANAGER_PERMISSION_TAXONOMY[key].has(action)) {
36
+ grantManagerPermission(normalized, `${key}.${action}`);
37
+ }
38
+ }
39
+ continue;
40
+ }
41
+ if (value) {
42
+ grantManagerPermission(normalized, key);
43
+ }
44
+ }
45
+ return normalized;
46
+ }
47
+ export function flattenManagerPermissions(permissions) {
48
+ const normalized = normalizeManagerPermissions(permissions);
49
+ return Object.entries(normalized).flatMap(([category, actions]) => actions.map((action) => `${category}.${action}`));
50
+ }
51
+ export function managerPermissionAllowed(permissions, action) {
52
+ const flattened = new Set(flattenManagerPermissions(permissions));
53
+ return canonicalManagerPermissionNames(action).every((permission) => flattened.has(permission));
54
+ }
55
+ export function validateRequiredPermission(requiredPermission) {
56
+ if (requiredPermission === null) {
57
+ return null;
58
+ }
59
+ const permission = requiredPermission.trim();
60
+ if (!permission) {
61
+ throw new Error("required_permission must be non-empty when provided");
62
+ }
63
+ const unknown = canonicalManagerPermissionNames(permission).filter((item) => !MANAGER_PERMISSION_ACTIONS.has(item));
64
+ if (unknown.length > 0) {
65
+ throw new Error(`unknown required_permission: ${requiredPermission}`);
66
+ }
67
+ return permission;
68
+ }
69
+ function isManagerPermissionCategory(value) {
70
+ return Object.prototype.hasOwnProperty.call(MANAGER_PERMISSION_TAXONOMY, value);
71
+ }
72
+ function grantManagerPermission(normalized, name) {
73
+ for (const canonical of canonicalManagerPermissionNames(name)) {
74
+ const [category, action] = canonical.split(".", 2);
75
+ if (!isManagerPermissionCategory(category) || !action || !MANAGER_PERMISSION_TAXONOMY[category].has(action)) {
76
+ continue;
77
+ }
78
+ const bucket = normalized[category];
79
+ if (!bucket.includes(action)) {
80
+ bucket.push(action);
81
+ bucket.sort();
82
+ }
83
+ }
84
+ }
85
+ //# sourceMappingURL=manager-permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager-permissions.js","sourceRoot":"","sources":["../../src/runtime/manager-permissions.ts"],"names":[],"mappings":"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"}