reflectt-node 0.1.8 → 0.1.11

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 (163) hide show
  1. package/defaults/TEAM-ROLES.yaml +317 -5
  2. package/dist/agent-config.d.ts +51 -0
  3. package/dist/agent-config.d.ts.map +1 -0
  4. package/dist/agent-config.js +129 -0
  5. package/dist/agent-config.js.map +1 -0
  6. package/dist/agent-config.test.d.ts +2 -0
  7. package/dist/agent-config.test.d.ts.map +1 -0
  8. package/dist/agent-config.test.js +91 -0
  9. package/dist/agent-config.test.js.map +1 -0
  10. package/dist/agent-memories.d.ts +58 -0
  11. package/dist/agent-memories.d.ts.map +1 -0
  12. package/dist/agent-memories.js +168 -0
  13. package/dist/agent-memories.js.map +1 -0
  14. package/dist/agent-memories.test.d.ts +2 -0
  15. package/dist/agent-memories.test.d.ts.map +1 -0
  16. package/dist/agent-memories.test.js +327 -0
  17. package/dist/agent-memories.test.js.map +1 -0
  18. package/dist/agent-messaging.d.ts +50 -0
  19. package/dist/agent-messaging.d.ts.map +1 -0
  20. package/dist/agent-messaging.js +103 -0
  21. package/dist/agent-messaging.js.map +1 -0
  22. package/dist/agent-messaging.test.d.ts +2 -0
  23. package/dist/agent-messaging.test.d.ts.map +1 -0
  24. package/dist/agent-messaging.test.js +105 -0
  25. package/dist/agent-messaging.test.js.map +1 -0
  26. package/dist/agent-runs.d.ts +158 -0
  27. package/dist/agent-runs.d.ts.map +1 -0
  28. package/dist/agent-runs.js +514 -0
  29. package/dist/agent-runs.js.map +1 -0
  30. package/dist/agent-runs.test.d.ts +2 -0
  31. package/dist/agent-runs.test.d.ts.map +1 -0
  32. package/dist/agent-runs.test.js +386 -0
  33. package/dist/agent-runs.test.js.map +1 -0
  34. package/dist/approval-queue.test.d.ts +2 -0
  35. package/dist/approval-queue.test.d.ts.map +1 -0
  36. package/dist/approval-queue.test.js +118 -0
  37. package/dist/approval-queue.test.js.map +1 -0
  38. package/dist/artifact-store.d.ts +55 -0
  39. package/dist/artifact-store.d.ts.map +1 -0
  40. package/dist/artifact-store.js +128 -0
  41. package/dist/artifact-store.js.map +1 -0
  42. package/dist/artifact-store.test.d.ts +2 -0
  43. package/dist/artifact-store.test.d.ts.map +1 -0
  44. package/dist/artifact-store.test.js +119 -0
  45. package/dist/artifact-store.test.js.map +1 -0
  46. package/dist/boardHealthWorker.d.ts +28 -0
  47. package/dist/boardHealthWorker.d.ts.map +1 -1
  48. package/dist/boardHealthWorker.js +33 -1
  49. package/dist/boardHealthWorker.js.map +1 -1
  50. package/dist/canvas-input.test.d.ts +2 -0
  51. package/dist/canvas-input.test.d.ts.map +1 -0
  52. package/dist/canvas-input.test.js +96 -0
  53. package/dist/canvas-input.test.js.map +1 -0
  54. package/dist/canvas-render.test.d.ts +2 -0
  55. package/dist/canvas-render.test.d.ts.map +1 -0
  56. package/dist/canvas-render.test.js +95 -0
  57. package/dist/canvas-render.test.js.map +1 -0
  58. package/dist/capabilities/browser.d.ts +75 -0
  59. package/dist/capabilities/browser.d.ts.map +1 -0
  60. package/dist/capabilities/browser.js +172 -0
  61. package/dist/capabilities/browser.js.map +1 -0
  62. package/dist/channels.d.ts +1 -1
  63. package/dist/cli.js +4 -2
  64. package/dist/cli.js.map +1 -1
  65. package/dist/cloud.d.ts +2 -0
  66. package/dist/cloud.d.ts.map +1 -1
  67. package/dist/cloud.js +21 -1
  68. package/dist/cloud.js.map +1 -1
  69. package/dist/cost-enforcement.d.ts +38 -0
  70. package/dist/cost-enforcement.d.ts.map +1 -0
  71. package/dist/cost-enforcement.js +84 -0
  72. package/dist/cost-enforcement.js.map +1 -0
  73. package/dist/db.d.ts.map +1 -1
  74. package/dist/db.js +131 -0
  75. package/dist/db.js.map +1 -1
  76. package/dist/e2e-loop-proof.test.d.ts +2 -0
  77. package/dist/e2e-loop-proof.test.d.ts.map +1 -0
  78. package/dist/e2e-loop-proof.test.js +104 -0
  79. package/dist/e2e-loop-proof.test.js.map +1 -0
  80. package/dist/email-sms-send.test.d.ts +2 -0
  81. package/dist/email-sms-send.test.d.ts.map +1 -0
  82. package/dist/email-sms-send.test.js +96 -0
  83. package/dist/email-sms-send.test.js.map +1 -0
  84. package/dist/events.d.ts +1 -1
  85. package/dist/events.d.ts.map +1 -1
  86. package/dist/events.js +2 -0
  87. package/dist/events.js.map +1 -1
  88. package/dist/fingerprint.d.ts.map +1 -1
  89. package/dist/fingerprint.js +5 -10
  90. package/dist/fingerprint.js.map +1 -1
  91. package/dist/github-webhook-chat.d.ts +75 -0
  92. package/dist/github-webhook-chat.d.ts.map +1 -0
  93. package/dist/github-webhook-chat.js +108 -0
  94. package/dist/github-webhook-chat.js.map +1 -0
  95. package/dist/handoff-state.test.d.ts +2 -0
  96. package/dist/handoff-state.test.d.ts.map +1 -0
  97. package/dist/handoff-state.test.js +102 -0
  98. package/dist/handoff-state.test.js.map +1 -0
  99. package/dist/health.d.ts +9 -0
  100. package/dist/health.d.ts.map +1 -1
  101. package/dist/health.js +18 -0
  102. package/dist/health.js.map +1 -1
  103. package/dist/host-error-correlation.d.ts +65 -0
  104. package/dist/host-error-correlation.d.ts.map +1 -0
  105. package/dist/host-error-correlation.js +123 -0
  106. package/dist/host-error-correlation.js.map +1 -0
  107. package/dist/index.js +39 -10
  108. package/dist/index.js.map +1 -1
  109. package/dist/notificationDedupeGuard.d.ts +4 -0
  110. package/dist/notificationDedupeGuard.d.ts.map +1 -1
  111. package/dist/notificationDedupeGuard.js +8 -4
  112. package/dist/notificationDedupeGuard.js.map +1 -1
  113. package/dist/presence.d.ts +37 -5
  114. package/dist/presence.d.ts.map +1 -1
  115. package/dist/presence.js +127 -16
  116. package/dist/presence.js.map +1 -1
  117. package/dist/review-sla.d.ts +9 -0
  118. package/dist/review-sla.d.ts.map +1 -0
  119. package/dist/review-sla.js +51 -0
  120. package/dist/review-sla.js.map +1 -0
  121. package/dist/routing-enforcement.test.d.ts +2 -0
  122. package/dist/routing-enforcement.test.d.ts.map +1 -0
  123. package/dist/routing-enforcement.test.js +86 -0
  124. package/dist/routing-enforcement.test.js.map +1 -0
  125. package/dist/run-retention.test.d.ts +2 -0
  126. package/dist/run-retention.test.d.ts.map +1 -0
  127. package/dist/run-retention.test.js +57 -0
  128. package/dist/run-retention.test.js.map +1 -0
  129. package/dist/run-stream.test.d.ts +2 -0
  130. package/dist/run-stream.test.d.ts.map +1 -0
  131. package/dist/run-stream.test.js +70 -0
  132. package/dist/run-stream.test.js.map +1 -0
  133. package/dist/server.d.ts.map +1 -1
  134. package/dist/server.js +1229 -75
  135. package/dist/server.js.map +1 -1
  136. package/dist/tasks.d.ts.map +1 -1
  137. package/dist/tasks.js +45 -0
  138. package/dist/tasks.js.map +1 -1
  139. package/dist/todoHoardingGuard.d.ts +17 -0
  140. package/dist/todoHoardingGuard.d.ts.map +1 -1
  141. package/dist/todoHoardingGuard.js +25 -2
  142. package/dist/todoHoardingGuard.js.map +1 -1
  143. package/dist/webhook-storage.d.ts +50 -0
  144. package/dist/webhook-storage.d.ts.map +1 -0
  145. package/dist/webhook-storage.js +102 -0
  146. package/dist/webhook-storage.js.map +1 -0
  147. package/dist/webhook-storage.test.d.ts +2 -0
  148. package/dist/webhook-storage.test.d.ts.map +1 -0
  149. package/dist/webhook-storage.test.js +86 -0
  150. package/dist/webhook-storage.test.js.map +1 -0
  151. package/dist/workflow-templates.d.ts +44 -0
  152. package/dist/workflow-templates.d.ts.map +1 -0
  153. package/dist/workflow-templates.js +154 -0
  154. package/dist/workflow-templates.js.map +1 -0
  155. package/dist/workflow-templates.test.d.ts +2 -0
  156. package/dist/workflow-templates.test.d.ts.map +1 -0
  157. package/dist/workflow-templates.test.js +76 -0
  158. package/dist/workflow-templates.test.js.map +1 -0
  159. package/package.json +3 -1
  160. package/public/dashboard.js +11 -0
  161. package/public/design-tokens-platform.md +118 -0
  162. package/public/design-tokens.css +195 -0
  163. package/public/docs.md +127 -2
@@ -0,0 +1,514 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) Reflectt AI
3
+ /**
4
+ * Agent Runs & Events
5
+ *
6
+ * Durable agent work sessions with append-only event log.
7
+ * - agent_runs: tracks objective, status, artifacts, context
8
+ * - agent_events: immutable event stream (no updates, no deletes)
9
+ *
10
+ * Task: task-1773246466959-qxwos0ffp
11
+ */
12
+ import { getDb, safeJsonParse } from './db.js';
13
+ export const VALID_RUN_STATUSES = [
14
+ 'idle', 'working', 'blocked', 'waiting_review', 'completed', 'failed', 'cancelled',
15
+ ];
16
+ export const VALID_EVENT_TYPES = [
17
+ 'run_created',
18
+ 'task_attached',
19
+ 'tool_invoked',
20
+ 'artifact_produced',
21
+ 'review_requested',
22
+ 'review_approved',
23
+ 'review_rejected',
24
+ 'blocked',
25
+ 'handed_off',
26
+ 'completed',
27
+ 'failed',
28
+ ];
29
+ // ── ID generation ──────────────────────────────────────────────────────────
30
+ function generateRunId() {
31
+ return `arun-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
32
+ }
33
+ function generateEventId() {
34
+ return `aevt-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
35
+ }
36
+ function rowToRun(row) {
37
+ return {
38
+ id: row.id,
39
+ agentId: row.agent_id,
40
+ teamId: row.team_id,
41
+ objective: row.objective,
42
+ status: row.status,
43
+ parentRunId: row.parent_run_id,
44
+ contextSnapshot: safeJsonParse(row.context_snapshot) ?? {},
45
+ artifacts: safeJsonParse(row.artifacts) ?? [],
46
+ startedAt: row.started_at,
47
+ updatedAt: row.updated_at,
48
+ completedAt: row.completed_at,
49
+ };
50
+ }
51
+ function rowToEvent(row) {
52
+ return {
53
+ id: row.id,
54
+ runId: row.run_id,
55
+ agentId: row.agent_id,
56
+ eventType: row.event_type,
57
+ payload: safeJsonParse(row.payload) ?? {},
58
+ createdAt: row.created_at,
59
+ };
60
+ }
61
+ function isDecisionEventType(eventType) {
62
+ return ['review_requested', 'review_approved', 'review_rejected', 'handed_off'].includes(eventType);
63
+ }
64
+ export function validateRationale(rationale) {
65
+ if (!rationale || typeof rationale !== 'object' || Array.isArray(rationale)) {
66
+ throw new Error('rationale must be an object with choice, considered[], constraint');
67
+ }
68
+ const r = rationale;
69
+ if (typeof r.choice !== 'string' || r.choice.trim().length === 0) {
70
+ throw new Error('rationale.choice is required');
71
+ }
72
+ if (r.considered !== undefined) {
73
+ if (!Array.isArray(r.considered) || !r.considered.every(v => typeof v === 'string' && v.trim().length > 0)) {
74
+ throw new Error('rationale.considered must be an array of non-empty strings');
75
+ }
76
+ }
77
+ if (r.constraint !== undefined && typeof r.constraint !== 'string') {
78
+ throw new Error('rationale.constraint must be a string');
79
+ }
80
+ return {
81
+ choice: r.choice.trim(),
82
+ ...(r.considered ? { considered: r.considered.map(v => v.trim()) } : {}),
83
+ ...(typeof r.constraint === 'string' ? { constraint: r.constraint.trim() } : {}),
84
+ };
85
+ }
86
+ // ── Runs ───────────────────────────────────────────────────────────────────
87
+ export function createAgentRun(agentId, teamId, objective, opts) {
88
+ const db = getDb();
89
+ const now = Date.now();
90
+ const id = generateRunId();
91
+ const contextSnapshot = opts?.taskId ? { taskId: opts.taskId } : {};
92
+ db.prepare(`
93
+ INSERT INTO agent_runs (id, agent_id, team_id, objective, status, parent_run_id, context_snapshot, artifacts, started_at, updated_at)
94
+ VALUES (?, ?, ?, ?, 'idle', ?, ?, '[]', ?, ?)
95
+ `).run(id, agentId, teamId, objective, opts?.parentRunId ?? null, JSON.stringify(contextSnapshot), now, now);
96
+ // Append run_created event
97
+ appendAgentEvent({
98
+ agentId,
99
+ runId: id,
100
+ eventType: 'run_created',
101
+ payload: { objective, taskId: opts?.taskId },
102
+ });
103
+ return {
104
+ id,
105
+ agentId,
106
+ teamId,
107
+ objective,
108
+ status: 'idle',
109
+ parentRunId: opts?.parentRunId ?? null,
110
+ contextSnapshot,
111
+ artifacts: [],
112
+ startedAt: now,
113
+ updatedAt: now,
114
+ completedAt: null,
115
+ };
116
+ }
117
+ export function updateAgentRun(runId, updates) {
118
+ const db = getDb();
119
+ const now = Date.now();
120
+ // Validate status if provided
121
+ if (updates.status && !VALID_RUN_STATUSES.includes(updates.status)) {
122
+ throw new Error(`Invalid run status: ${updates.status}`);
123
+ }
124
+ const sets = ['updated_at = ?'];
125
+ const params = [now];
126
+ if (updates.status) {
127
+ sets.push('status = ?');
128
+ params.push(updates.status);
129
+ }
130
+ if (updates.contextSnapshot !== undefined) {
131
+ sets.push('context_snapshot = ?');
132
+ params.push(JSON.stringify(updates.contextSnapshot));
133
+ }
134
+ if (updates.artifacts !== undefined) {
135
+ sets.push('artifacts = ?');
136
+ params.push(JSON.stringify(updates.artifacts));
137
+ }
138
+ if (updates.completedAt !== undefined) {
139
+ sets.push('completed_at = ?');
140
+ params.push(updates.completedAt);
141
+ }
142
+ // Auto-set completed_at for terminal statuses
143
+ if (updates.status && ['completed', 'failed', 'cancelled'].includes(updates.status) && updates.completedAt === undefined) {
144
+ sets.push('completed_at = ?');
145
+ params.push(now);
146
+ }
147
+ params.push(runId);
148
+ const result = db.prepare(`UPDATE agent_runs SET ${sets.join(', ')} WHERE id = ?`).run(...params);
149
+ if (result.changes === 0)
150
+ return null;
151
+ const row = db.prepare('SELECT * FROM agent_runs WHERE id = ?').get(runId);
152
+ if (!row)
153
+ return null;
154
+ const run = rowToRun(row);
155
+ return run;
156
+ }
157
+ export function getAgentRun(runId) {
158
+ const db = getDb();
159
+ const row = db.prepare('SELECT * FROM agent_runs WHERE id = ?').get(runId);
160
+ return row ? rowToRun(row) : null;
161
+ }
162
+ export function getActiveAgentRun(agentId, teamId) {
163
+ const db = getDb();
164
+ const row = db.prepare(`SELECT * FROM agent_runs WHERE agent_id = ? AND team_id = ? AND status NOT IN ('completed', 'failed', 'cancelled') ORDER BY started_at DESC LIMIT 1`).get(agentId, teamId);
165
+ return row ? rowToRun(row) : null;
166
+ }
167
+ export function listAgentRuns(agentId, teamId, opts) {
168
+ const db = getDb();
169
+ const limit = opts?.limit ?? 50;
170
+ let sql = 'SELECT * FROM agent_runs WHERE agent_id = ? AND team_id = ?';
171
+ const params = [agentId, teamId];
172
+ if (opts?.status) {
173
+ sql += ' AND status = ?';
174
+ params.push(opts.status);
175
+ }
176
+ sql += ' ORDER BY started_at DESC LIMIT ?';
177
+ params.push(limit);
178
+ const rows = db.prepare(sql).all(...params);
179
+ return rows.map(rowToRun);
180
+ }
181
+ // ── Events (append-only) ──────────────────────────────────────────────────
182
+ // Event types that require structured payload fields per COO routing semantics
183
+ const ACTIONABLE_EVENT_TYPES = new Set([
184
+ 'review_requested',
185
+ 'approval_requested',
186
+ 'escalation',
187
+ 'handoff',
188
+ ]);
189
+ const VALID_URGENCY = new Set(['low', 'normal', 'high', 'critical']);
190
+ /**
191
+ * Validate routing semantics for actionable events.
192
+ * Enforces: action_required, urgency, owner required.
193
+ * Optional: expires_at.
194
+ */
195
+ export function validateRoutingSemantics(eventType, payload) {
196
+ const errors = [];
197
+ const warnings = [];
198
+ if (!ACTIONABLE_EVENT_TYPES.has(eventType)) {
199
+ return { valid: true, errors: [], warnings: [] };
200
+ }
201
+ if (!payload.action_required || typeof payload.action_required !== 'string') {
202
+ errors.push('Actionable events require action_required (string describing what needs to happen)');
203
+ }
204
+ if (!payload.urgency || typeof payload.urgency !== 'string') {
205
+ errors.push('Actionable events require urgency (low|normal|high|critical)');
206
+ }
207
+ else if (!VALID_URGENCY.has(payload.urgency)) {
208
+ errors.push(`urgency must be one of: ${[...VALID_URGENCY].join(', ')}`);
209
+ }
210
+ if (!payload.owner || typeof payload.owner !== 'string') {
211
+ errors.push('Actionable events require owner (who needs to act)');
212
+ }
213
+ if (payload.expires_at !== undefined && typeof payload.expires_at !== 'number') {
214
+ warnings.push('expires_at should be a numeric timestamp (epoch ms)');
215
+ }
216
+ // Decision events should include rationale
217
+ if (eventType === 'approval_requested' && !payload.title) {
218
+ warnings.push('approval_requested events should include title for the approval queue');
219
+ }
220
+ return { valid: errors.length === 0, errors, warnings };
221
+ }
222
+ export function appendAgentEvent(event) {
223
+ const db = getDb();
224
+ const id = generateEventId();
225
+ const now = Date.now();
226
+ const payload = { ...(event.payload ?? {}) };
227
+ if (isDecisionEventType(event.eventType)) {
228
+ if (payload.rationale === undefined) {
229
+ throw new Error(`rationale is required for ${event.eventType}`);
230
+ }
231
+ payload.rationale = validateRationale(payload.rationale);
232
+ }
233
+ else if (payload.rationale !== undefined) {
234
+ payload.rationale = validateRationale(payload.rationale);
235
+ }
236
+ // Enforce routing semantics for actionable events
237
+ const enforce = event.enforceRouting !== false;
238
+ if (enforce) {
239
+ const validation = validateRoutingSemantics(event.eventType, payload);
240
+ if (!validation.valid) {
241
+ throw new Error(`Routing semantics violation: ${validation.errors.join('; ')}`);
242
+ }
243
+ }
244
+ db.prepare(`
245
+ INSERT INTO agent_events (id, run_id, agent_id, event_type, payload, created_at)
246
+ VALUES (?, ?, ?, ?, ?, ?)
247
+ `).run(id, event.runId ?? null, event.agentId, event.eventType, JSON.stringify(payload), now);
248
+ return {
249
+ id,
250
+ runId: event.runId ?? null,
251
+ agentId: event.agentId,
252
+ eventType: event.eventType,
253
+ payload,
254
+ createdAt: now,
255
+ };
256
+ }
257
+ export function listAgentEvents(opts) {
258
+ const db = getDb();
259
+ const limit = opts.limit ?? 100;
260
+ const conditions = [];
261
+ const params = [];
262
+ if (opts.agentId) {
263
+ conditions.push('agent_id = ?');
264
+ params.push(opts.agentId);
265
+ }
266
+ if (opts.runId) {
267
+ conditions.push('run_id = ?');
268
+ params.push(opts.runId);
269
+ }
270
+ if (opts.eventType) {
271
+ conditions.push('event_type = ?');
272
+ params.push(opts.eventType);
273
+ }
274
+ if (opts.since) {
275
+ conditions.push('created_at >= ?');
276
+ params.push(opts.since);
277
+ }
278
+ let sql = 'SELECT * FROM agent_events';
279
+ if (conditions.length > 0) {
280
+ sql += ' WHERE ' + conditions.join(' AND ');
281
+ }
282
+ sql += ' ORDER BY created_at DESC LIMIT ?';
283
+ params.push(limit);
284
+ const rows = db.prepare(sql).all(...params);
285
+ return rows.map(rowToEvent);
286
+ }
287
+ const DEFAULT_RETENTION = {
288
+ maxAgeDays: 30,
289
+ maxCompletedRuns: 100,
290
+ deleteArchived: false,
291
+ };
292
+ /**
293
+ * Archive old completed/cancelled/failed runs per retention policy.
294
+ * Returns count of runs archived and events cleaned up.
295
+ */
296
+ export function applyRunRetention(opts) {
297
+ const db = getDb();
298
+ const policy = { ...DEFAULT_RETENTION, ...opts?.policy };
299
+ const dryRun = opts?.dryRun ?? false;
300
+ const now = Date.now();
301
+ const cutoffMs = now - policy.maxAgeDays * 24 * 60 * 60 * 1000;
302
+ const terminalStatuses = ['completed', 'failed', 'cancelled'];
303
+ // Find runs to archive: terminal status + older than cutoff
304
+ let sql = `
305
+ SELECT id, agent_id FROM agent_runs
306
+ WHERE status IN (${terminalStatuses.map(() => '?').join(',')})
307
+ AND started_at < ?
308
+ `;
309
+ const params = [...terminalStatuses, cutoffMs];
310
+ if (opts?.agentId) {
311
+ sql += ' AND agent_id = ?';
312
+ params.push(opts.agentId);
313
+ }
314
+ sql += ' ORDER BY started_at ASC';
315
+ const rows = db.prepare(sql).all(...params);
316
+ if (dryRun) {
317
+ return { archived: rows.length, deleted: 0, eventsDeleted: 0, dryRun: true };
318
+ }
319
+ let archived = 0;
320
+ let deleted = 0;
321
+ let eventsDeleted = 0;
322
+ for (const row of rows) {
323
+ if (policy.deleteArchived) {
324
+ // Delete events first (foreign key-like cleanup)
325
+ const evtResult = db.prepare('DELETE FROM agent_events WHERE run_id = ?').run(row.id);
326
+ eventsDeleted += evtResult.changes;
327
+ // Delete the run
328
+ db.prepare('DELETE FROM agent_runs WHERE id = ?').run(row.id);
329
+ deleted++;
330
+ }
331
+ else {
332
+ // Mark as archived (update status)
333
+ db.prepare("UPDATE agent_runs SET status = 'completed', updated_at = ? WHERE id = ?").run(now, row.id);
334
+ archived++;
335
+ }
336
+ }
337
+ // Enforce max completed runs per agent — keep newest, archive/delete oldest
338
+ const agentIds = opts?.agentId
339
+ ? [opts.agentId]
340
+ : db.prepare('SELECT DISTINCT agent_id FROM agent_runs').all().map(r => r.agent_id);
341
+ for (const agentId of agentIds) {
342
+ const completedRuns = db.prepare(`
343
+ SELECT id FROM agent_runs
344
+ WHERE agent_id = ? AND status IN (${terminalStatuses.map(() => '?').join(',')})
345
+ ORDER BY started_at DESC
346
+ `).all(agentId, ...terminalStatuses);
347
+ if (completedRuns.length > policy.maxCompletedRuns) {
348
+ const toRemove = completedRuns.slice(policy.maxCompletedRuns);
349
+ for (const run of toRemove) {
350
+ if (policy.deleteArchived) {
351
+ const evtResult = db.prepare('DELETE FROM agent_events WHERE run_id = ?').run(run.id);
352
+ eventsDeleted += evtResult.changes;
353
+ db.prepare('DELETE FROM agent_runs WHERE id = ?').run(run.id);
354
+ deleted++;
355
+ }
356
+ else {
357
+ archived++;
358
+ }
359
+ }
360
+ }
361
+ }
362
+ return { archived, deleted, eventsDeleted, dryRun: false };
363
+ }
364
+ /**
365
+ * Get retention stats — how many runs would be affected by current policy.
366
+ */
367
+ export function getRetentionStats(policy) {
368
+ const db = getDb();
369
+ const p = { ...DEFAULT_RETENTION, ...policy };
370
+ const now = Date.now();
371
+ const cutoffMs = now - p.maxAgeDays * 24 * 60 * 60 * 1000;
372
+ const totalRuns = db.prepare('SELECT COUNT(*) as c FROM agent_runs').get().c;
373
+ const terminalRuns = db.prepare("SELECT COUNT(*) as c FROM agent_runs WHERE status IN ('completed','failed','cancelled')").get().c;
374
+ const wouldArchive = db.prepare("SELECT COUNT(*) as c FROM agent_runs WHERE status IN ('completed','failed','cancelled') AND started_at < ?").get(cutoffMs).c;
375
+ const oldest = db.prepare('SELECT MIN(started_at) as m FROM agent_runs').get();
376
+ const oldestRunAge = oldest.m ? Math.floor((now - oldest.m) / (24 * 60 * 60 * 1000)) : null;
377
+ return { totalRuns, terminalRuns, wouldArchive, oldestRunAge };
378
+ }
379
+ /**
380
+ * List pending approvals: review_requested events with action_required
381
+ * that don't yet have a matching review_approved or review_rejected.
382
+ */
383
+ export function listPendingApprovals(opts) {
384
+ const db = getDb();
385
+ const limit = opts?.limit ?? 50;
386
+ const conditions = ["e.event_type = 'review_requested'", "json_extract(e.payload, '$.action_required') IS NOT NULL"];
387
+ const params = [];
388
+ if (opts?.agentId) {
389
+ conditions.push('e.agent_id = ?');
390
+ params.push(opts.agentId);
391
+ }
392
+ // Exclude events that already have a resolution (approved/rejected) for the same run
393
+ const sql = `
394
+ SELECT e.* FROM agent_events e
395
+ WHERE ${conditions.join(' AND ')}
396
+ AND NOT EXISTS (
397
+ SELECT 1 FROM agent_events r
398
+ WHERE r.run_id = e.run_id
399
+ AND r.event_type IN ('review_approved', 'review_rejected')
400
+ AND r.created_at > e.created_at
401
+ )
402
+ ORDER BY e.created_at DESC
403
+ LIMIT ?
404
+ `;
405
+ params.push(limit);
406
+ const rows = db.prepare(sql).all(...params);
407
+ return rows.map(row => {
408
+ const event = rowToEvent(row);
409
+ return {
410
+ event,
411
+ agentId: event.agentId,
412
+ runId: event.runId,
413
+ urgency: event.payload.urgency ?? null,
414
+ owner: event.payload.owner ?? null,
415
+ expiresAt: event.payload.expires_at ?? null,
416
+ };
417
+ });
418
+ }
419
+ export function listApprovalQueue(opts) {
420
+ const db = getDb();
421
+ const limit = opts?.limit ?? 50;
422
+ const now = Date.now();
423
+ const eventTypes = ["'review_requested'", "'approval_requested'"];
424
+ if (opts?.category === 'review') {
425
+ eventTypes.length = 0;
426
+ eventTypes.push("'review_requested'");
427
+ }
428
+ else if (opts?.category === 'agent_action') {
429
+ eventTypes.length = 0;
430
+ eventTypes.push("'approval_requested'");
431
+ }
432
+ const conditions = [
433
+ `e.event_type IN (${eventTypes.join(', ')})`,
434
+ ];
435
+ const params = [];
436
+ if (opts?.agentId) {
437
+ conditions.push('e.agent_id = ?');
438
+ params.push(opts.agentId);
439
+ }
440
+ // Exclude resolved items
441
+ const sql = `
442
+ SELECT e.* FROM agent_events e
443
+ WHERE ${conditions.join(' AND ')}
444
+ AND NOT EXISTS (
445
+ SELECT 1 FROM agent_events r
446
+ WHERE r.run_id = e.run_id
447
+ AND r.event_type IN ('review_approved', 'review_rejected', 'approval_approved', 'approval_rejected')
448
+ AND r.created_at > e.created_at
449
+ )
450
+ ORDER BY e.created_at DESC
451
+ LIMIT ?
452
+ `;
453
+ params.push(limit);
454
+ const rows = db.prepare(sql).all(...params);
455
+ const items = rows.map(row => {
456
+ const event = rowToEvent(row);
457
+ const expiresAt = event.payload.expires_at ?? null;
458
+ const isExpired = expiresAt !== null && expiresAt < now;
459
+ return {
460
+ id: event.id,
461
+ category: (event.eventType === 'review_requested' ? 'review' : 'agent_action'),
462
+ event,
463
+ agentId: event.agentId,
464
+ runId: event.runId,
465
+ title: event.payload.title ?? event.payload.action_required ?? 'Pending approval',
466
+ description: event.payload.description ?? event.payload.context ?? null,
467
+ urgency: event.payload.urgency ?? null,
468
+ owner: event.payload.owner ?? null,
469
+ expiresAt,
470
+ autoAction: event.payload.auto_action ?? null,
471
+ createdAt: event.createdAt,
472
+ isExpired,
473
+ };
474
+ });
475
+ if (!opts?.includeExpired) {
476
+ return items.filter(i => !i.isExpired);
477
+ }
478
+ return items;
479
+ }
480
+ export function submitApprovalDecision(opts) {
481
+ const db = getDb();
482
+ // Find the original review_requested event
483
+ const originalRow = db.prepare('SELECT * FROM agent_events WHERE id = ?').get(opts.eventId);
484
+ if (!originalRow)
485
+ throw new Error(`Event ${opts.eventId} not found`);
486
+ const original = rowToEvent(originalRow);
487
+ if (original.eventType !== 'review_requested') {
488
+ throw new Error(`Event ${opts.eventId} is not a review_requested event`);
489
+ }
490
+ // Record the decision
491
+ const eventType = opts.decision === 'approve' ? 'review_approved' : 'review_rejected';
492
+ const decisionEvent = appendAgentEvent({
493
+ agentId: original.agentId,
494
+ runId: original.runId,
495
+ eventType,
496
+ payload: {
497
+ original_event_id: opts.eventId,
498
+ reviewer: opts.reviewer,
499
+ ...(opts.comment ? { comment: opts.comment } : {}),
500
+ rationale: opts.rationale,
501
+ },
502
+ });
503
+ // Auto-unblock: if approved and run exists in waiting_review, move to working
504
+ let runUnblocked = false;
505
+ if (opts.decision === 'approve' && original.runId) {
506
+ const run = getAgentRun(original.runId);
507
+ if (run && run.status === 'waiting_review') {
508
+ updateAgentRun(original.runId, { status: 'working' });
509
+ runUnblocked = true;
510
+ }
511
+ }
512
+ return { event: decisionEvent, runUnblocked };
513
+ }
514
+ //# sourceMappingURL=agent-runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runs.js","sourceRoot":"","sources":["../src/agent-runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-runs.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runs.test.d.ts","sourceRoot":"","sources":["../src/agent-runs.test.ts"],"names":[],"mappings":""}