reflectt-node 0.1.15 → 0.1.17

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 (216) hide show
  1. package/README.md +54 -0
  2. package/defaults/TEAM-ROLES.starter.yaml +87 -0
  3. package/defaults/lane-templates/ops.json +32 -0
  4. package/defaults/lane-templates/workflow.json +32 -0
  5. package/defaults/reviewer-routing.yaml +34 -0
  6. package/dist/activationEvents.d.ts +7 -1
  7. package/dist/activationEvents.d.ts.map +1 -1
  8. package/dist/activationEvents.js +29 -3
  9. package/dist/activationEvents.js.map +1 -1
  10. package/dist/activity-stream-normalizer.d.ts +37 -0
  11. package/dist/activity-stream-normalizer.d.ts.map +1 -0
  12. package/dist/activity-stream-normalizer.js +101 -0
  13. package/dist/activity-stream-normalizer.js.map +1 -0
  14. package/dist/agent-exec-guardrail.d.ts +9 -0
  15. package/dist/agent-exec-guardrail.d.ts.map +1 -0
  16. package/dist/agent-exec-guardrail.js +24 -0
  17. package/dist/agent-exec-guardrail.js.map +1 -0
  18. package/dist/agent-exec-guardrail.test.d.ts +2 -0
  19. package/dist/agent-exec-guardrail.test.d.ts.map +1 -0
  20. package/dist/agent-exec-guardrail.test.js +55 -0
  21. package/dist/agent-exec-guardrail.test.js.map +1 -0
  22. package/dist/agent-interface.d.ts +137 -0
  23. package/dist/agent-interface.d.ts.map +1 -0
  24. package/dist/agent-interface.js +463 -0
  25. package/dist/agent-interface.js.map +1 -0
  26. package/dist/agent-notifications.d.ts +51 -0
  27. package/dist/agent-notifications.d.ts.map +1 -0
  28. package/dist/agent-notifications.js +104 -0
  29. package/dist/agent-notifications.js.map +1 -0
  30. package/dist/agent-runs.d.ts +29 -2
  31. package/dist/agent-runs.d.ts.map +1 -1
  32. package/dist/agent-runs.js +118 -8
  33. package/dist/agent-runs.js.map +1 -1
  34. package/dist/artifact-mirror.d.ts.map +1 -1
  35. package/dist/artifact-mirror.js +4 -1
  36. package/dist/artifact-mirror.js.map +1 -1
  37. package/dist/assignment.d.ts.map +1 -1
  38. package/dist/assignment.js +54 -2
  39. package/dist/assignment.js.map +1 -1
  40. package/dist/boardHealthWorker.d.ts.map +1 -1
  41. package/dist/boardHealthWorker.js +15 -1
  42. package/dist/boardHealthWorker.js.map +1 -1
  43. package/dist/canvas-auto-state.d.ts +58 -0
  44. package/dist/canvas-auto-state.d.ts.map +1 -0
  45. package/dist/canvas-auto-state.js +89 -0
  46. package/dist/canvas-auto-state.js.map +1 -0
  47. package/dist/canvas-routes.d.ts +36 -0
  48. package/dist/canvas-routes.d.ts.map +1 -0
  49. package/dist/canvas-routes.js +47 -0
  50. package/dist/canvas-routes.js.map +1 -0
  51. package/dist/capability-readiness.d.ts +28 -0
  52. package/dist/capability-readiness.d.ts.map +1 -0
  53. package/dist/capability-readiness.js +162 -0
  54. package/dist/capability-readiness.js.map +1 -0
  55. package/dist/channels.d.ts.map +1 -1
  56. package/dist/channels.js +1 -0
  57. package/dist/channels.js.map +1 -1
  58. package/dist/cli.js +179 -4
  59. package/dist/cli.js.map +1 -1
  60. package/dist/cloud.d.ts +5 -0
  61. package/dist/cloud.d.ts.map +1 -1
  62. package/dist/cloud.js +486 -18
  63. package/dist/cloud.js.map +1 -1
  64. package/dist/comms-routing-policy.d.ts +31 -0
  65. package/dist/comms-routing-policy.d.ts.map +1 -0
  66. package/dist/comms-routing-policy.js +128 -0
  67. package/dist/comms-routing-policy.js.map +1 -0
  68. package/dist/config.d.ts.map +1 -1
  69. package/dist/config.js +1 -0
  70. package/dist/config.js.map +1 -1
  71. package/dist/continuity-loop.d.ts.map +1 -1
  72. package/dist/continuity-loop.js +26 -0
  73. package/dist/continuity-loop.js.map +1 -1
  74. package/dist/cost-enforcement.d.ts.map +1 -1
  75. package/dist/cost-enforcement.js +22 -0
  76. package/dist/cost-enforcement.js.map +1 -1
  77. package/dist/db.d.ts.map +1 -1
  78. package/dist/db.js +56 -5
  79. package/dist/db.js.map +1 -1
  80. package/dist/doctor.js +2 -2
  81. package/dist/events.d.ts +4 -2
  82. package/dist/events.d.ts.map +1 -1
  83. package/dist/events.js +22 -1
  84. package/dist/events.js.map +1 -1
  85. package/dist/executionSweeper.d.ts.map +1 -1
  86. package/dist/executionSweeper.js +155 -0
  87. package/dist/executionSweeper.js.map +1 -1
  88. package/dist/health.d.ts +21 -1
  89. package/dist/health.d.ts.map +1 -1
  90. package/dist/health.js +164 -19
  91. package/dist/health.js.map +1 -1
  92. package/dist/inbox.d.ts +4 -0
  93. package/dist/inbox.d.ts.map +1 -1
  94. package/dist/inbox.js +38 -1
  95. package/dist/inbox.js.map +1 -1
  96. package/dist/index.js +90 -14
  97. package/dist/index.js.map +1 -1
  98. package/dist/insight-auto-tagger.d.ts +58 -0
  99. package/dist/insight-auto-tagger.d.ts.map +1 -0
  100. package/dist/insight-auto-tagger.js +331 -0
  101. package/dist/insight-auto-tagger.js.map +1 -0
  102. package/dist/insight-task-bridge.d.ts +9 -0
  103. package/dist/insight-task-bridge.d.ts.map +1 -1
  104. package/dist/insight-task-bridge.js +43 -7
  105. package/dist/insight-task-bridge.js.map +1 -1
  106. package/dist/insights.d.ts +6 -0
  107. package/dist/insights.d.ts.map +1 -1
  108. package/dist/insights.js +13 -0
  109. package/dist/insights.js.map +1 -1
  110. package/dist/lane-config.d.ts.map +1 -1
  111. package/dist/lane-config.js +1 -0
  112. package/dist/lane-config.js.map +1 -1
  113. package/dist/lane-template-successor.d.ts +13 -0
  114. package/dist/lane-template-successor.d.ts.map +1 -0
  115. package/dist/lane-template-successor.js +132 -0
  116. package/dist/lane-template-successor.js.map +1 -0
  117. package/dist/local-whisper.d.ts +21 -0
  118. package/dist/local-whisper.d.ts.map +1 -0
  119. package/dist/local-whisper.js +137 -0
  120. package/dist/local-whisper.js.map +1 -0
  121. package/dist/macos-accessibility.d.ts +50 -0
  122. package/dist/macos-accessibility.d.ts.map +1 -0
  123. package/dist/macos-accessibility.js +185 -0
  124. package/dist/macos-accessibility.js.map +1 -0
  125. package/dist/manage.d.ts.map +1 -1
  126. package/dist/manage.js +47 -1
  127. package/dist/manage.js.map +1 -1
  128. package/dist/mcp.d.ts.map +1 -1
  129. package/dist/mcp.js +123 -0
  130. package/dist/mcp.js.map +1 -1
  131. package/dist/notification-worker.d.ts +66 -0
  132. package/dist/notification-worker.d.ts.map +1 -0
  133. package/dist/notification-worker.js +232 -0
  134. package/dist/notification-worker.js.map +1 -0
  135. package/dist/openclaw-usage-sync.d.ts +28 -0
  136. package/dist/openclaw-usage-sync.d.ts.map +1 -0
  137. package/dist/openclaw-usage-sync.js +161 -0
  138. package/dist/openclaw-usage-sync.js.map +1 -0
  139. package/dist/policy.js +1 -1
  140. package/dist/policy.js.map +1 -1
  141. package/dist/pr-link-reconciler.d.ts +61 -0
  142. package/dist/pr-link-reconciler.d.ts.map +1 -0
  143. package/dist/pr-link-reconciler.js +127 -0
  144. package/dist/pr-link-reconciler.js.map +1 -0
  145. package/dist/preflight.d.ts.map +1 -1
  146. package/dist/preflight.js +9 -2
  147. package/dist/preflight.js.map +1 -1
  148. package/dist/presence-narrator.d.ts +52 -0
  149. package/dist/presence-narrator.d.ts.map +1 -0
  150. package/dist/presence-narrator.js +193 -0
  151. package/dist/presence-narrator.js.map +1 -0
  152. package/dist/presence.d.ts +2 -0
  153. package/dist/presence.d.ts.map +1 -1
  154. package/dist/presence.js +23 -3
  155. package/dist/presence.js.map +1 -1
  156. package/dist/product-observation-source.d.ts +52 -0
  157. package/dist/product-observation-source.d.ts.map +1 -0
  158. package/dist/product-observation-source.js +326 -0
  159. package/dist/product-observation-source.js.map +1 -0
  160. package/dist/reflection-automation.d.ts +25 -0
  161. package/dist/reflection-automation.d.ts.map +1 -1
  162. package/dist/reflection-automation.js +163 -42
  163. package/dist/reflection-automation.js.map +1 -1
  164. package/dist/review-autoclose.d.ts +62 -0
  165. package/dist/review-autoclose.d.ts.map +1 -0
  166. package/dist/review-autoclose.js +75 -0
  167. package/dist/review-autoclose.js.map +1 -0
  168. package/dist/sentry-webhook.d.ts +69 -0
  169. package/dist/sentry-webhook.d.ts.map +1 -0
  170. package/dist/sentry-webhook.js +88 -0
  171. package/dist/sentry-webhook.js.map +1 -0
  172. package/dist/sentry.d.ts +29 -0
  173. package/dist/sentry.d.ts.map +1 -0
  174. package/dist/sentry.js +86 -0
  175. package/dist/sentry.js.map +1 -0
  176. package/dist/server.d.ts.map +1 -1
  177. package/dist/server.js +5146 -223
  178. package/dist/server.js.map +1 -1
  179. package/dist/stale-candidate-reconciler.d.ts +69 -0
  180. package/dist/stale-candidate-reconciler.d.ts.map +1 -0
  181. package/dist/stale-candidate-reconciler.js +236 -0
  182. package/dist/stale-candidate-reconciler.js.map +1 -0
  183. package/dist/system-loop-state.d.ts +1 -1
  184. package/dist/system-loop-state.d.ts.map +1 -1
  185. package/dist/system-loop-state.js +1 -0
  186. package/dist/system-loop-state.js.map +1 -1
  187. package/dist/taskPrecheck.d.ts.map +1 -1
  188. package/dist/taskPrecheck.js +47 -2
  189. package/dist/taskPrecheck.js.map +1 -1
  190. package/dist/tasks.d.ts.map +1 -1
  191. package/dist/tasks.js +130 -0
  192. package/dist/tasks.js.map +1 -1
  193. package/dist/trust-events.d.ts +61 -0
  194. package/dist/trust-events.d.ts.map +1 -0
  195. package/dist/trust-events.js +148 -0
  196. package/dist/trust-events.js.map +1 -0
  197. package/dist/types.d.ts +1 -0
  198. package/dist/types.d.ts.map +1 -1
  199. package/dist/usage-tracking.d.ts +6 -0
  200. package/dist/usage-tracking.d.ts.map +1 -1
  201. package/dist/usage-tracking.js +14 -0
  202. package/dist/usage-tracking.js.map +1 -1
  203. package/dist/voice-sessions.d.ts +51 -0
  204. package/dist/voice-sessions.d.ts.map +1 -0
  205. package/dist/voice-sessions.js +143 -0
  206. package/dist/voice-sessions.js.map +1 -0
  207. package/dist/workflow-templates.d.ts.map +1 -1
  208. package/dist/workflow-templates.js +16 -1
  209. package/dist/workflow-templates.js.map +1 -1
  210. package/dist/working-contract.d.ts +22 -1
  211. package/dist/working-contract.d.ts.map +1 -1
  212. package/dist/working-contract.js +31 -2
  213. package/dist/working-contract.js.map +1 -1
  214. package/package.json +4 -4
  215. package/public/dashboard.js +12 -4
  216. package/public/docs.md +98 -10
@@ -8,6 +8,91 @@ import { policyManager } from './policy.js';
8
8
  // ── State ──
9
9
  const pendingNudges = [];
10
10
  const lastNudgeAt = {};
11
+ // Dedup guards for tiered escalation (SIGNAL-ROUTING Change 2)
12
+ // mention fires at most once per 24h per agent; escalate at most once per 48h.
13
+ // task-1773525631162-cjxch4mrz
14
+ const mentionLastAt = {};
15
+ const escalateLastAt = {};
16
+ const MENTION_DEDUP_MS = 24 * 60 * 60 * 1000;
17
+ const ESCALATE_DEDUP_MS = 48 * 60 * 60 * 1000;
18
+ /**
19
+ * 4-tier reflection reminder decision per SIGNAL-ROUTING Change 2 spec.
20
+ *
21
+ * | Overdue | Tier | Channel |
22
+ * |------------|-----------|---------|
23
+ * | < 14h | none | — |
24
+ * | 14h–24h | digest | #ops (batched, no @mention) |
25
+ * | 24h–48h | mention | #ops with @mention, once per 24h |
26
+ * | 48h+ | escalate | #ops with @kai, once per 48h |
27
+ * | post-task | immediate | #general direct to agent |
28
+ */
29
+ export function getReflectionTier(agent, lastReflectionAt, justCompletedTask, nowMs = Date.now()) {
30
+ if (justCompletedTask)
31
+ return 'immediate';
32
+ const overdueMs = nowMs - lastReflectionAt;
33
+ const overdueHours = overdueMs / (1000 * 60 * 60);
34
+ if (overdueHours < 14)
35
+ return 'none';
36
+ if (overdueHours < 24)
37
+ return 'digest';
38
+ if (overdueHours < 48) {
39
+ // mention: dedup to once per 24h
40
+ const lastMention = mentionLastAt[agent] ?? 0;
41
+ if (nowMs - lastMention < MENTION_DEDUP_MS)
42
+ return 'none';
43
+ mentionLastAt[agent] = nowMs; // record on selection so dispatch doesn't double-set
44
+ return 'mention';
45
+ }
46
+ // escalate: dedup to once per 48h
47
+ const lastEscalate = escalateLastAt[agent] ?? 0;
48
+ if (nowMs - lastEscalate < ESCALATE_DEDUP_MS)
49
+ return 'none';
50
+ escalateLastAt[agent] = nowMs; // record on selection
51
+ return 'escalate';
52
+ }
53
+ /** Exposed for tests — reset dedup state between test runs */
54
+ export function _resetTierDedupForTest() {
55
+ for (const k of Object.keys(mentionLastAt))
56
+ delete mentionLastAt[k];
57
+ for (const k of Object.keys(escalateLastAt))
58
+ delete escalateLastAt[k];
59
+ }
60
+ /**
61
+ * Dispatch a reflection reminder based on the computed tier.
62
+ * digest → batchNag (existing batch-before-post gate, Change 4)
63
+ * mention/escalate → immediate routeMessage to #ops
64
+ * immediate → routeMessage to #general direct to agent
65
+ */
66
+ export async function dispatchReflectionTier(agent, tier, hoursSince, lastReflectionAt, config) {
67
+ const opsChannel = 'ops';
68
+ const now = Date.now();
69
+ switch (tier) {
70
+ case 'none':
71
+ return;
72
+ case 'digest':
73
+ // Add to ops batch — batchNag handles flush (Change 4)
74
+ batchNag(opsChannel, `@${agent}: reflection ${hoursSince}h overdue — submit when you can`);
75
+ return;
76
+ case 'mention': {
77
+ // mentionLastAt already set in getReflectionTier
78
+ const msg = `🪞 @${agent} reflection overdue ${hoursSince}h — submit when you have a moment. POST /reflections.`;
79
+ await routeMessage({ from: 'system', content: msg, category: 'watchdog-alert', severity: 'warning', forceChannel: opsChannel }).catch(() => { });
80
+ return;
81
+ }
82
+ case 'escalate': {
83
+ // escalateLastAt already set in getReflectionTier
84
+ const lastDate = lastReflectionAt > 0 ? new Date(lastReflectionAt).toISOString().slice(0, 10) : 'never';
85
+ const msg = `🚨 @kai @${agent} reflection overdue ${hoursSince}h. Last reflection: ${lastDate}. Needs attention.`;
86
+ await routeMessage({ from: 'system', content: msg, category: 'watchdog-alert', severity: 'critical', forceChannel: opsChannel }).catch(() => { });
87
+ return;
88
+ }
89
+ case 'immediate': {
90
+ const msg = `🪞 @${agent} task complete — good moment to reflect. POST /reflections.`;
91
+ batchNag('ops', msg);
92
+ return;
93
+ }
94
+ }
95
+ }
11
96
  /** Running guard — prevents concurrent tick calls from firing duplicate nudges */
12
97
  let _tickRunning = false;
13
98
  /**
@@ -171,19 +256,32 @@ async function _doTick() {
171
256
  }
172
257
  }
173
258
  if (shouldNudge) {
174
- await sendIdleNudge(agent, hoursSinceDisplay, tracking?.tasks_done_since_reflection || 0, config);
175
- lastNudgeAt[agent] = now;
176
- // Record nudge in DB
177
- ensureReflectionTrackingTable();
178
- const db = getDb();
179
- db.prepare(`
180
- INSERT INTO reflection_tracking (agent, last_nudge_at, tasks_done_since_reflection, updated_at)
181
- VALUES (?, ?, 0, ?)
182
- ON CONFLICT(agent) DO UPDATE SET
183
- last_nudge_at = ?,
184
- updated_at = ?
185
- `).run(agent, now, now, now, now);
186
- idleNudges++;
259
+ // Lane-aware suppression: skip nudge if agent has no unblocked todo tasks.
260
+ // Agents whose in-lane queue is genuinely empty cannot take new work —
261
+ // nudging them is a false positive (they're compliant, not idle).
262
+ const unblockedTodo = taskManager.listTasks({
263
+ status: 'todo',
264
+ assigneeIn: [agent],
265
+ }).filter(t => t.status === 'todo');
266
+ if (unblockedTodo.length === 0)
267
+ continue;
268
+ // 4-tier dispatch per SIGNAL-ROUTING Change 2
269
+ const tier = getReflectionTier(agent, lastReflection, false, now);
270
+ if (tier !== 'none') {
271
+ await dispatchReflectionTier(agent, tier, hoursSinceDisplay, lastReflection, config);
272
+ lastNudgeAt[agent] = now;
273
+ // Record nudge in DB
274
+ ensureReflectionTrackingTable();
275
+ const db = getDb();
276
+ db.prepare(`
277
+ INSERT INTO reflection_tracking (agent, last_nudge_at, tasks_done_since_reflection, updated_at)
278
+ VALUES (?, ?, 0, ?)
279
+ ON CONFLICT(agent) DO UPDATE SET
280
+ last_nudge_at = ?,
281
+ updated_at = ?
282
+ `).run(agent, now, now, now, now);
283
+ idleNudges++;
284
+ }
187
285
  }
188
286
  }
189
287
  return { postTaskNudges, idleNudges, total: postTaskNudges + idleNudges };
@@ -243,41 +341,64 @@ export function getReflectionSLAs() {
243
341
  return order[a.status] - order[b.status];
244
342
  });
245
343
  }
246
- // ── Nudge messages ──
247
- async function sendPostTaskNudge(agent, taskId, taskTitle, config, taskStatus) {
248
- const isBlocked = taskStatus === 'blocked';
249
- const msg = isBlocked
250
- ? `🪞 Reflection nudge: @${agent}, "${taskTitle}" (${taskId}) is blocked. ` +
251
- `Take 2 min to reflect what's blocking you, what did you try, and what would unblock it? ` +
252
- `Submit via POST /reflections with your observations.`
253
- : `🪞 Reflection nudge: @${agent}, you just completed "${taskTitle}" (${taskId}). ` +
254
- `Take 2 min to reflect — what went well, what was painful, and what would you change? ` +
255
- `Submit via POST /reflections with your observations.`;
256
- try {
257
- await routeMessage({
344
+ // ── Batch-before-post gate (SIGNAL-ROUTING Change 4) ─────────────────────────
345
+ // All per-agent nags (reflection reminders, idle alerts) go through batchNag()
346
+ // before any channel post. A 5-minute batch window accumulates messages; the
347
+ // flush posts a single Noise Budget Digest instead of N individual posts.
348
+ //
349
+ // Window duration controlled by WATCHDOG_BATCH_WINDOW_MS env var (default 5min).
350
+ // Tests can set WATCHDOG_BATCH_WINDOW_MS to a small value (e.g. 50ms).
351
+ //
352
+ // task-1773525646527-rgpsta72u
353
+ export function getBatchWindowMs() {
354
+ const envVal = process.env.WATCHDOG_BATCH_WINDOW_MS;
355
+ if (envVal)
356
+ return Number(envVal);
357
+ return 5 * 60 * 1000; // 5 minutes (production default)
358
+ }
359
+ // Exported for testing — allows tests to flush the batch manually
360
+ export const _nagBatch = new Map(); // channel → messages
361
+ let _batchTimer = null;
362
+ export function _flushNagBatch() {
363
+ for (const [channel, messages] of _nagBatch.entries()) {
364
+ if (messages.length === 0)
365
+ continue;
366
+ const content = `📋 **Reflection & Idle Digest** (${messages.length} reminder${messages.length !== 1 ? 's' : ''}):\n${messages.map(m => `• ${m}`).join('\n')}`;
367
+ routeMessage({
258
368
  from: 'system',
259
- content: msg,
369
+ content,
260
370
  category: 'watchdog-alert',
261
371
  severity: 'info',
262
- forceChannel: config.channel || 'general',
263
- });
372
+ forceChannel: channel,
373
+ }).catch(() => { });
264
374
  }
265
- catch { /* chat may not be available */ }
375
+ _nagBatch.clear();
376
+ _batchTimer = null;
266
377
  }
267
- async function sendIdleNudge(agent, hoursSince, tasksDone, config) {
268
- const taskNote = tasksDone > 0 ? ` You've completed ${tasksDone} task(s) since your last reflection.` : '';
269
- const msg = `🪞 Reflection due: @${agent}, it's been ${hoursSince}h since your last reflection.${taskNote} ` +
270
- `Take a moment to capture what you've learned. Submit via POST /reflections.`;
271
- try {
272
- await routeMessage({
273
- from: 'system',
274
- content: msg,
275
- category: 'watchdog-alert',
276
- severity: 'warning',
277
- forceChannel: config.channel || 'general',
278
- });
378
+ function batchNag(channel, message) {
379
+ const existing = _nagBatch.get(channel);
380
+ if (existing) {
381
+ existing.push(message);
279
382
  }
280
- catch { /* chat may not be available */ }
383
+ else {
384
+ _nagBatch.set(channel, [message]);
385
+ }
386
+ if (!_batchTimer) {
387
+ _batchTimer = setTimeout(_flushNagBatch, getBatchWindowMs());
388
+ }
389
+ }
390
+ // ── Nudge messages ──
391
+ async function sendPostTaskNudge(agent, taskId, taskTitle, config, taskStatus) {
392
+ const isBlocked = taskStatus === 'blocked';
393
+ const msg = isBlocked
394
+ ? `🪞 @${agent}: "${taskTitle}" (${taskId}) is blocked — reflect on what's blocking you`
395
+ : `🪞 @${agent}: completed "${taskTitle}" (${taskId}) — what went well, what was painful?`;
396
+ batchNag(config.channel || 'general', msg);
397
+ }
398
+ async function sendIdleNudge(agent, hoursSince, tasksDone, config) {
399
+ const taskNote = tasksDone > 0 ? ` (${tasksDone} task(s) done since last reflection)` : '';
400
+ const msg = `🪞 @${agent}: ${hoursSince}h since last reflection${taskNote} — capture what you've learned`;
401
+ batchNag(config.channel || 'general', msg);
281
402
  }
282
403
  // ── Helpers ──
283
404
  function getConfig() {
@@ -1 +1 @@
1
- {"version":3,"file":"reflection-automation.js","sourceRoot":"","sources":["../src/reflection-automation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reflection-automation.js","sourceRoot":"","sources":["../src/reflection-automation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Review auto-close bridge.
3
+ *
4
+ * Parses structured `[review] approved:` / `[review] rejected:` comments
5
+ * posted by the assigned reviewer and auto-fires the review decision,
6
+ * transitioning the task from validating→done or validating→todo.
7
+ *
8
+ * Safety invariants:
9
+ * - Only fires when task.status === 'validating'
10
+ * - Author must match task.reviewer (exact match, case-insensitive)
11
+ * - Parsed via strict regex — no fuzzy matching
12
+ * - Idempotent: ignores if task already past validating
13
+ * - Emits trust event on self-review attempt (reviewer === assignee)
14
+ * - Dry-run safe: `dryRun=true` returns parsed result without mutating
15
+ *
16
+ * Comment format (reviewer posts in task-comments):
17
+ * [review] approved: <comment text>
18
+ * [review] rejected: <comment text>
19
+ *
20
+ * task-1773490646984-eujrozhai
21
+ */
22
+ /** Result of parsing a comment for a review signal. */
23
+ export interface ReviewSignal {
24
+ detected: boolean;
25
+ decision?: 'approve' | 'reject';
26
+ comment?: string;
27
+ }
28
+ /**
29
+ * Parse a task comment body for a structured review signal.
30
+ *
31
+ * Accepts:
32
+ * [review] approved: <comment>
33
+ * [review] rejected: <comment>
34
+ * [review] approved (no trailing text also accepted)
35
+ *
36
+ * Case-insensitive. Leading/trailing whitespace ignored.
37
+ */
38
+ export declare function parseReviewSignal(content: string): ReviewSignal;
39
+ export interface AutoCloseContext {
40
+ taskId: string;
41
+ taskStatus: string;
42
+ taskReviewer: string | null | undefined;
43
+ taskAssignee: string | null | undefined;
44
+ commentAuthor: string;
45
+ commentContent: string;
46
+ dryRun?: boolean;
47
+ }
48
+ export interface AutoCloseResult {
49
+ fired: boolean;
50
+ decision?: 'approve' | 'reject';
51
+ reason?: string;
52
+ dryRun?: boolean;
53
+ }
54
+ /**
55
+ * Evaluate whether a comment should trigger auto-close, and return the decision.
56
+ * Does NOT mutate — caller is responsible for invoking the review endpoint.
57
+ *
58
+ * Returns fired=true + decision when all safety checks pass.
59
+ * Returns fired=false with reason when skipped.
60
+ */
61
+ export declare function evaluateAutoClose(ctx: AutoCloseContext): AutoCloseResult;
62
+ //# sourceMappingURL=review-autoclose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-autoclose.d.ts","sourceRoot":"","sources":["../src/review-autoclose.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAQ/D;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACvC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACvC,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,eAAe,CA6BxE"}
@@ -0,0 +1,75 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Review auto-close bridge.
4
+ *
5
+ * Parses structured `[review] approved:` / `[review] rejected:` comments
6
+ * posted by the assigned reviewer and auto-fires the review decision,
7
+ * transitioning the task from validating→done or validating→todo.
8
+ *
9
+ * Safety invariants:
10
+ * - Only fires when task.status === 'validating'
11
+ * - Author must match task.reviewer (exact match, case-insensitive)
12
+ * - Parsed via strict regex — no fuzzy matching
13
+ * - Idempotent: ignores if task already past validating
14
+ * - Emits trust event on self-review attempt (reviewer === assignee)
15
+ * - Dry-run safe: `dryRun=true` returns parsed result without mutating
16
+ *
17
+ * Comment format (reviewer posts in task-comments):
18
+ * [review] approved: <comment text>
19
+ * [review] rejected: <comment text>
20
+ *
21
+ * task-1773490646984-eujrozhai
22
+ */
23
+ /**
24
+ * Parse a task comment body for a structured review signal.
25
+ *
26
+ * Accepts:
27
+ * [review] approved: <comment>
28
+ * [review] rejected: <comment>
29
+ * [review] approved (no trailing text also accepted)
30
+ *
31
+ * Case-insensitive. Leading/trailing whitespace ignored.
32
+ */
33
+ export function parseReviewSignal(content) {
34
+ const normalized = content.trim();
35
+ // Match: [review] approved: ... or [review] rejected: ...
36
+ const match = normalized.match(/^\[review\]\s+(approved|rejected)[:\s]*(.*)/i);
37
+ if (!match)
38
+ return { detected: false };
39
+ const decision = match[1].toLowerCase() === 'approved' ? 'approve' : 'reject';
40
+ const comment = (match[2] ?? '').trim() || (decision === 'approve' ? 'Approved via structured review comment' : 'Rejected via structured review comment');
41
+ return { detected: true, decision, comment };
42
+ }
43
+ /**
44
+ * Evaluate whether a comment should trigger auto-close, and return the decision.
45
+ * Does NOT mutate — caller is responsible for invoking the review endpoint.
46
+ *
47
+ * Returns fired=true + decision when all safety checks pass.
48
+ * Returns fired=false with reason when skipped.
49
+ */
50
+ export function evaluateAutoClose(ctx) {
51
+ const { taskStatus, taskReviewer, taskAssignee, commentAuthor, commentContent, dryRun } = ctx;
52
+ // Only act on validating tasks
53
+ if (taskStatus !== 'validating') {
54
+ return { fired: false, reason: `task is ${taskStatus}, not validating` };
55
+ }
56
+ // Must have an assigned reviewer
57
+ if (!taskReviewer) {
58
+ return { fired: false, reason: 'task has no assigned reviewer' };
59
+ }
60
+ // Author must be the assigned reviewer
61
+ if (commentAuthor.trim().toLowerCase() !== taskReviewer.trim().toLowerCase()) {
62
+ return { fired: false, reason: `author "${commentAuthor}" is not the assigned reviewer "${taskReviewer}"` };
63
+ }
64
+ // Parse the comment
65
+ const signal = parseReviewSignal(commentContent);
66
+ if (!signal.detected) {
67
+ return { fired: false, reason: 'no structured [review] signal found in comment' };
68
+ }
69
+ return {
70
+ fired: true,
71
+ decision: signal.decision,
72
+ dryRun,
73
+ };
74
+ }
75
+ //# sourceMappingURL=review-autoclose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-autoclose.js","sourceRoot":"","sources":["../src/review-autoclose.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;GAoBG;AASH;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IACjC,0DAA0D;IAC1D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;IAC9E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC7E,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAA;IACzJ,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AAC9C,CAAC;AAmBD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAqB;IACrD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,GAAG,CAAA;IAE7F,+BAA+B;IAC/B,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,UAAU,kBAAkB,EAAE,CAAA;IAC1E,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAA;IAClE,CAAC;IAED,uCAAuC;IACvC,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,aAAa,mCAAmC,YAAY,GAAG,EAAE,CAAA;IAC7G,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAA;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gDAAgD,EAAE,CAAA;IACnF,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;KACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Sentry Webhook → #ops Bridge
3
+ *
4
+ * Parses Sentry webhook payloads (issue alerts, metric alerts, etc.)
5
+ * and formats them as chat messages for the #ops channel.
6
+ *
7
+ * Sentry webhook payload docs:
8
+ * https://docs.sentry.io/organization/integrations/integration-platform/webhooks/
9
+ */
10
+ interface SentryIssueData {
11
+ id?: string;
12
+ title?: string;
13
+ culprit?: string;
14
+ metadata?: {
15
+ type?: string;
16
+ value?: string;
17
+ filename?: string;
18
+ function?: string;
19
+ };
20
+ count?: string | number;
21
+ userCount?: number;
22
+ firstSeen?: string;
23
+ shortId?: string;
24
+ project?: {
25
+ slug?: string;
26
+ name?: string;
27
+ id?: string;
28
+ };
29
+ level?: string;
30
+ status?: string;
31
+ }
32
+ interface SentryActor {
33
+ type?: string;
34
+ id?: string;
35
+ name?: string;
36
+ }
37
+ interface SentryWebhookPayload {
38
+ action?: string;
39
+ data?: {
40
+ issue?: SentryIssueData;
41
+ event?: Record<string, unknown>;
42
+ triggered_rule?: string;
43
+ metric_alert?: {
44
+ id?: string | number;
45
+ title?: string;
46
+ alert_rule?: {
47
+ id?: number;
48
+ name?: string;
49
+ };
50
+ status?: string;
51
+ };
52
+ };
53
+ actor?: SentryActor;
54
+ installation?: {
55
+ uuid?: string;
56
+ };
57
+ }
58
+ /**
59
+ * Format a Sentry webhook payload as a human-readable chat message.
60
+ * Returns null if the payload isn't actionable (e.g. installation hooks).
61
+ */
62
+ export declare function formatSentryAlert(payload: SentryWebhookPayload): string | null;
63
+ /**
64
+ * Verify Sentry webhook signature (HMAC-SHA256).
65
+ * Returns true if valid or if no secret is configured (permissive mode).
66
+ */
67
+ export declare function verifySentrySignature(rawBody: string | Buffer, signatureHeader: string | undefined, clientSecret: string | undefined): boolean;
68
+ export {};
69
+ //# sourceMappingURL=sentry-webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry-webhook.d.ts","sourceRoot":"","sources":["../src/sentry-webhook.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAIH,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,eAAe,CAAA;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,YAAY,CAAC,EAAE;YACb,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;YACpB,KAAK,CAAC,EAAE,MAAM,CAAA;YACd,UAAU,CAAC,EAAE;gBAAE,EAAE,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;YAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;SAChB,CAAA;KACF,CAAA;IACD,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACjC;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAkB9E;AA8CD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAkBT"}
@@ -0,0 +1,88 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) Reflectt AI
3
+ // ── Severity Emoji ─────────────────────────────────────────────────────────
4
+ function severityEmoji(level) {
5
+ switch (level) {
6
+ case 'fatal': return '💀';
7
+ case 'error': return '🔴';
8
+ case 'warning': return '🟡';
9
+ case 'info': return 'ℹ️';
10
+ default: return '🔴';
11
+ }
12
+ }
13
+ // ── Formatters ─────────────────────────────────────────────────────────────
14
+ /**
15
+ * Format a Sentry webhook payload as a human-readable chat message.
16
+ * Returns null if the payload isn't actionable (e.g. installation hooks).
17
+ */
18
+ export function formatSentryAlert(payload) {
19
+ const action = payload.action;
20
+ // Issue alert (most common)
21
+ if (payload.data?.issue) {
22
+ return formatIssueAlert(action, payload.data.issue, payload.data.triggered_rule);
23
+ }
24
+ // Metric alert
25
+ if (payload.data?.metric_alert) {
26
+ const ma = payload.data.metric_alert;
27
+ const ruleName = ma.alert_rule?.name ?? ma.title ?? 'Unknown metric alert';
28
+ const status = ma.status ?? action ?? 'triggered';
29
+ return `📊 **Metric Alert** — ${ruleName}\nStatus: ${status}`;
30
+ }
31
+ // Unrecognized / installation / comment hooks — skip
32
+ return null;
33
+ }
34
+ function formatIssueAlert(action, issue, triggeredRule) {
35
+ const emoji = severityEmoji(issue.level);
36
+ const title = issue.title ?? 'Unknown error';
37
+ const project = issue.project?.slug ?? issue.project?.name ?? 'unknown';
38
+ const shortId = issue.shortId ?? issue.id ?? '?';
39
+ const count = issue.count ?? '?';
40
+ // Build file/function hint
41
+ const file = issue.metadata?.filename ?? issue.culprit ?? null;
42
+ const fn = issue.metadata?.function ?? null;
43
+ const location = file ? (fn ? `${file} in ${fn}` : file) : null;
44
+ // Action verb
45
+ const verb = action === 'resolved' ? '✅ Resolved'
46
+ : action === 'assigned' ? '👤 Assigned'
47
+ : action === 'archived' ? '📦 Archived'
48
+ : action === 'unresolved' ? '🔄 Reopened'
49
+ : `${emoji} Triggered`;
50
+ const lines = [
51
+ `${verb}: **${title}**`,
52
+ `Project: ${project} · ${shortId} · ${count} event(s)`,
53
+ ];
54
+ if (location) {
55
+ lines.push(`📁 ${location}`);
56
+ }
57
+ if (triggeredRule) {
58
+ lines.push(`Rule: ${triggeredRule}`);
59
+ }
60
+ // Sentry issue URL (conventional format)
61
+ if (issue.project?.slug && issue.id) {
62
+ lines.push(`🔗 https://sentry.io/issues/${issue.id}/`);
63
+ }
64
+ return lines.join('\n');
65
+ }
66
+ /**
67
+ * Verify Sentry webhook signature (HMAC-SHA256).
68
+ * Returns true if valid or if no secret is configured (permissive mode).
69
+ */
70
+ export function verifySentrySignature(rawBody, signatureHeader, clientSecret) {
71
+ // If no secret configured, accept all (permissive mode for initial setup)
72
+ if (!clientSecret)
73
+ return true;
74
+ if (!signatureHeader)
75
+ return false;
76
+ try {
77
+ const crypto = require('crypto');
78
+ const expected = crypto
79
+ .createHmac('sha256', clientSecret)
80
+ .update(rawBody)
81
+ .digest('hex');
82
+ return crypto.timingSafeEqual(Buffer.from(signatureHeader), Buffer.from(expected));
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ }
88
+ //# sourceMappingURL=sentry-webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry-webhook.js","sourceRoot":"","sources":["../src/sentry-webhook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Sentry Integration
3
+ *
4
+ * Initializes Sentry error tracking for reflectt-node.
5
+ * Only activates when SENTRY_DSN environment variable is set.
6
+ *
7
+ * Setup:
8
+ * 1. Create a Sentry project at sentry.io
9
+ * 2. Set SENTRY_DSN env var to the project's DSN
10
+ * 3. Optionally set SENTRY_ENVIRONMENT (defaults to 'production')
11
+ * 4. Optionally set SENTRY_CLIENT_SECRET for webhook signature verification
12
+ */
13
+ import * as Sentry from '@sentry/node';
14
+ export declare function initSentry(): boolean;
15
+ /**
16
+ * Capture an exception and send to Sentry.
17
+ * No-op if Sentry is not initialized.
18
+ */
19
+ export declare function captureException(error: Error | unknown, context?: Record<string, unknown>): void;
20
+ /**
21
+ * Capture a message and send to Sentry.
22
+ */
23
+ export declare function captureMessage(message: string, level?: 'info' | 'warning' | 'error'): void;
24
+ /**
25
+ * Flush pending events before shutdown.
26
+ */
27
+ export declare function flushSentry(timeoutMs?: number): Promise<void>;
28
+ export { Sentry };
29
+ //# sourceMappingURL=sentry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../src/sentry.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAItC,wBAAgB,UAAU,IAAI,OAAO,CA2CpC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGhG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAS,GAAG,OAAgB,GAAG,IAAI,CAGlG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}