reflectt-node 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 (486) hide show
  1. package/LICENSE +178 -0
  2. package/README.md +188 -0
  3. package/dist/activationEvents.d.ts +110 -0
  4. package/dist/activationEvents.d.ts.map +1 -0
  5. package/dist/activationEvents.js +378 -0
  6. package/dist/activationEvents.js.map +1 -0
  7. package/dist/activity-signal.d.ts +30 -0
  8. package/dist/activity-signal.d.ts.map +1 -0
  9. package/dist/activity-signal.js +93 -0
  10. package/dist/activity-signal.js.map +1 -0
  11. package/dist/alert-integrity.d.ts +100 -0
  12. package/dist/alert-integrity.d.ts.map +1 -0
  13. package/dist/alert-integrity.js +333 -0
  14. package/dist/alert-integrity.js.map +1 -0
  15. package/dist/alert-preflight.d.ts +40 -0
  16. package/dist/alert-preflight.d.ts.map +1 -0
  17. package/dist/alert-preflight.js +235 -0
  18. package/dist/alert-preflight.js.map +1 -0
  19. package/dist/analytics.d.ts +131 -0
  20. package/dist/analytics.d.ts.map +1 -0
  21. package/dist/analytics.js +371 -0
  22. package/dist/analytics.js.map +1 -0
  23. package/dist/artifact-mirror.d.ts +26 -0
  24. package/dist/artifact-mirror.d.ts.map +1 -0
  25. package/dist/artifact-mirror.js +170 -0
  26. package/dist/artifact-mirror.js.map +1 -0
  27. package/dist/artifact-resolver.d.ts +48 -0
  28. package/dist/artifact-resolver.d.ts.map +1 -0
  29. package/dist/artifact-resolver.js +164 -0
  30. package/dist/artifact-resolver.js.map +1 -0
  31. package/dist/assignment.d.ts +116 -0
  32. package/dist/assignment.d.ts.map +1 -0
  33. package/dist/assignment.js +475 -0
  34. package/dist/assignment.js.map +1 -0
  35. package/dist/auditLedger.d.ts +50 -0
  36. package/dist/auditLedger.d.ts.map +1 -0
  37. package/dist/auditLedger.js +136 -0
  38. package/dist/auditLedger.js.map +1 -0
  39. package/dist/boardHealthWorker.d.ts +134 -0
  40. package/dist/boardHealthWorker.d.ts.map +1 -0
  41. package/dist/boardHealthWorker.js +882 -0
  42. package/dist/boardHealthWorker.js.map +1 -0
  43. package/dist/bootstrap-team.d.ts +42 -0
  44. package/dist/bootstrap-team.d.ts.map +1 -0
  45. package/dist/bootstrap-team.js +111 -0
  46. package/dist/bootstrap-team.js.map +1 -0
  47. package/dist/buildInfo.d.ts +17 -0
  48. package/dist/buildInfo.d.ts.map +1 -0
  49. package/dist/buildInfo.js +56 -0
  50. package/dist/buildInfo.js.map +1 -0
  51. package/dist/calendar-events.d.ts +133 -0
  52. package/dist/calendar-events.d.ts.map +1 -0
  53. package/dist/calendar-events.js +615 -0
  54. package/dist/calendar-events.js.map +1 -0
  55. package/dist/calendar-ical.d.ts +41 -0
  56. package/dist/calendar-ical.d.ts.map +1 -0
  57. package/dist/calendar-ical.js +413 -0
  58. package/dist/calendar-ical.js.map +1 -0
  59. package/dist/calendar-reminder-engine.d.ts +10 -0
  60. package/dist/calendar-reminder-engine.d.ts.map +1 -0
  61. package/dist/calendar-reminder-engine.js +143 -0
  62. package/dist/calendar-reminder-engine.js.map +1 -0
  63. package/dist/calendar.d.ts +75 -0
  64. package/dist/calendar.d.ts.map +1 -0
  65. package/dist/calendar.js +391 -0
  66. package/dist/calendar.js.map +1 -0
  67. package/dist/canvas-multiplexer.d.ts +44 -0
  68. package/dist/canvas-multiplexer.d.ts.map +1 -0
  69. package/dist/canvas-multiplexer.js +150 -0
  70. package/dist/canvas-multiplexer.js.map +1 -0
  71. package/dist/canvas-slots.d.ts +83 -0
  72. package/dist/canvas-slots.d.ts.map +1 -0
  73. package/dist/canvas-slots.js +144 -0
  74. package/dist/canvas-slots.js.map +1 -0
  75. package/dist/canvas-types.d.ts +56 -0
  76. package/dist/canvas-types.d.ts.map +1 -0
  77. package/dist/canvas-types.js +54 -0
  78. package/dist/canvas-types.js.map +1 -0
  79. package/dist/cf-keepalive.d.ts +40 -0
  80. package/dist/cf-keepalive.d.ts.map +1 -0
  81. package/dist/cf-keepalive.js +153 -0
  82. package/dist/cf-keepalive.js.map +1 -0
  83. package/dist/changeFeed.d.ts +38 -0
  84. package/dist/changeFeed.d.ts.map +1 -0
  85. package/dist/changeFeed.js +324 -0
  86. package/dist/changeFeed.js.map +1 -0
  87. package/dist/channels.d.ts +28 -0
  88. package/dist/channels.d.ts.map +1 -0
  89. package/dist/channels.js +23 -0
  90. package/dist/channels.js.map +1 -0
  91. package/dist/chat-approval-detector.d.ts +47 -0
  92. package/dist/chat-approval-detector.d.ts.map +1 -0
  93. package/dist/chat-approval-detector.js +224 -0
  94. package/dist/chat-approval-detector.js.map +1 -0
  95. package/dist/chat.d.ts +119 -0
  96. package/dist/chat.d.ts.map +1 -0
  97. package/dist/chat.js +666 -0
  98. package/dist/chat.js.map +1 -0
  99. package/dist/cli.d.ts +3 -0
  100. package/dist/cli.d.ts.map +1 -0
  101. package/dist/cli.js +1142 -0
  102. package/dist/cli.js.map +1 -0
  103. package/dist/cloud.d.ts +45 -0
  104. package/dist/cloud.d.ts.map +1 -0
  105. package/dist/cloud.js +962 -0
  106. package/dist/cloud.js.map +1 -0
  107. package/dist/config.d.ts +17 -0
  108. package/dist/config.d.ts.map +1 -0
  109. package/dist/config.js +33 -0
  110. package/dist/config.js.map +1 -0
  111. package/dist/connectivity.d.ts +59 -0
  112. package/dist/connectivity.d.ts.map +1 -0
  113. package/dist/connectivity.js +173 -0
  114. package/dist/connectivity.js.map +1 -0
  115. package/dist/contacts.d.ts +59 -0
  116. package/dist/contacts.d.ts.map +1 -0
  117. package/dist/contacts.js +183 -0
  118. package/dist/contacts.js.map +1 -0
  119. package/dist/content.d.ts +130 -0
  120. package/dist/content.d.ts.map +1 -0
  121. package/dist/content.js +186 -0
  122. package/dist/content.js.map +1 -0
  123. package/dist/context-budget.d.ts +87 -0
  124. package/dist/context-budget.d.ts.map +1 -0
  125. package/dist/context-budget.js +459 -0
  126. package/dist/context-budget.js.map +1 -0
  127. package/dist/continuity-loop.d.ts +55 -0
  128. package/dist/continuity-loop.d.ts.map +1 -0
  129. package/dist/continuity-loop.js +267 -0
  130. package/dist/continuity-loop.js.map +1 -0
  131. package/dist/dashboard.d.ts +6 -0
  132. package/dist/dashboard.d.ts.map +1 -0
  133. package/dist/dashboard.js +2348 -0
  134. package/dist/dashboard.js.map +1 -0
  135. package/dist/db.d.ts +44 -0
  136. package/dist/db.d.ts.map +1 -0
  137. package/dist/db.js +648 -0
  138. package/dist/db.js.map +1 -0
  139. package/dist/doctor.d.ts +30 -0
  140. package/dist/doctor.d.ts.map +1 -0
  141. package/dist/doctor.js +159 -0
  142. package/dist/doctor.js.map +1 -0
  143. package/dist/duplicateClosureGuard.d.ts +31 -0
  144. package/dist/duplicateClosureGuard.d.ts.map +1 -0
  145. package/dist/duplicateClosureGuard.js +83 -0
  146. package/dist/duplicateClosureGuard.js.map +1 -0
  147. package/dist/embeddings.d.ts +13 -0
  148. package/dist/embeddings.d.ts.map +1 -0
  149. package/dist/embeddings.js +78 -0
  150. package/dist/embeddings.js.map +1 -0
  151. package/dist/escalation.d.ts +80 -0
  152. package/dist/escalation.d.ts.map +1 -0
  153. package/dist/escalation.js +213 -0
  154. package/dist/escalation.js.map +1 -0
  155. package/dist/events.d.ts +130 -0
  156. package/dist/events.d.ts.map +1 -0
  157. package/dist/events.js +382 -0
  158. package/dist/events.js.map +1 -0
  159. package/dist/executionSweeper.d.ts +97 -0
  160. package/dist/executionSweeper.d.ts.map +1 -0
  161. package/dist/executionSweeper.js +875 -0
  162. package/dist/executionSweeper.js.map +1 -0
  163. package/dist/experiments.d.ts +47 -0
  164. package/dist/experiments.d.ts.map +1 -0
  165. package/dist/experiments.js +133 -0
  166. package/dist/experiments.js.map +1 -0
  167. package/dist/feedback.d.ts +179 -0
  168. package/dist/feedback.d.ts.map +1 -0
  169. package/dist/feedback.js +397 -0
  170. package/dist/feedback.js.map +1 -0
  171. package/dist/files.d.ts +52 -0
  172. package/dist/files.d.ts.map +1 -0
  173. package/dist/files.js +172 -0
  174. package/dist/files.js.map +1 -0
  175. package/dist/format-duration.d.ts +19 -0
  176. package/dist/format-duration.d.ts.map +1 -0
  177. package/dist/format-duration.js +33 -0
  178. package/dist/format-duration.js.map +1 -0
  179. package/dist/github-actor-auth.d.ts +20 -0
  180. package/dist/github-actor-auth.d.ts.map +1 -0
  181. package/dist/github-actor-auth.js +54 -0
  182. package/dist/github-actor-auth.js.map +1 -0
  183. package/dist/github-ci.d.ts +16 -0
  184. package/dist/github-ci.d.ts.map +1 -0
  185. package/dist/github-ci.js +37 -0
  186. package/dist/github-ci.js.map +1 -0
  187. package/dist/github-identity.d.ts +30 -0
  188. package/dist/github-identity.d.ts.map +1 -0
  189. package/dist/github-identity.js +96 -0
  190. package/dist/github-identity.js.map +1 -0
  191. package/dist/github-reviews.d.ts +24 -0
  192. package/dist/github-reviews.d.ts.map +1 -0
  193. package/dist/github-reviews.js +56 -0
  194. package/dist/github-reviews.js.map +1 -0
  195. package/dist/health.d.ts +391 -0
  196. package/dist/health.d.ts.map +1 -0
  197. package/dist/health.js +1841 -0
  198. package/dist/health.js.map +1 -0
  199. package/dist/host-keepalive.d.ts +22 -0
  200. package/dist/host-keepalive.d.ts.map +1 -0
  201. package/dist/host-keepalive.js +126 -0
  202. package/dist/host-keepalive.js.map +1 -0
  203. package/dist/host-registry.d.ts +43 -0
  204. package/dist/host-registry.d.ts.map +1 -0
  205. package/dist/host-registry.js +93 -0
  206. package/dist/host-registry.js.map +1 -0
  207. package/dist/inbox.d.ts +87 -0
  208. package/dist/inbox.d.ts.map +1 -0
  209. package/dist/inbox.js +410 -0
  210. package/dist/inbox.js.map +1 -0
  211. package/dist/index.d.ts +2 -0
  212. package/dist/index.d.ts.map +1 -0
  213. package/dist/index.js +306 -0
  214. package/dist/index.js.map +1 -0
  215. package/dist/insight-mutation.d.ts +32 -0
  216. package/dist/insight-mutation.d.ts.map +1 -0
  217. package/dist/insight-mutation.js +160 -0
  218. package/dist/insight-mutation.js.map +1 -0
  219. package/dist/insight-promotion.d.ts +89 -0
  220. package/dist/insight-promotion.d.ts.map +1 -0
  221. package/dist/insight-promotion.js +278 -0
  222. package/dist/insight-promotion.js.map +1 -0
  223. package/dist/insight-task-bridge.d.ts +77 -0
  224. package/dist/insight-task-bridge.d.ts.map +1 -0
  225. package/dist/insight-task-bridge.js +556 -0
  226. package/dist/insight-task-bridge.js.map +1 -0
  227. package/dist/insights.d.ts +222 -0
  228. package/dist/insights.d.ts.map +1 -0
  229. package/dist/insights.js +871 -0
  230. package/dist/insights.js.map +1 -0
  231. package/dist/intake-pipeline.d.ts +74 -0
  232. package/dist/intake-pipeline.d.ts.map +1 -0
  233. package/dist/intake-pipeline.js +199 -0
  234. package/dist/intake-pipeline.js.map +1 -0
  235. package/dist/intensity.d.ts +31 -0
  236. package/dist/intensity.d.ts.map +1 -0
  237. package/dist/intensity.js +94 -0
  238. package/dist/intensity.js.map +1 -0
  239. package/dist/knowledge-auto-index.d.ts +37 -0
  240. package/dist/knowledge-auto-index.d.ts.map +1 -0
  241. package/dist/knowledge-auto-index.js +149 -0
  242. package/dist/knowledge-auto-index.js.map +1 -0
  243. package/dist/knowledge-docs.d.ts +45 -0
  244. package/dist/knowledge-docs.d.ts.map +1 -0
  245. package/dist/knowledge-docs.js +188 -0
  246. package/dist/knowledge-docs.js.map +1 -0
  247. package/dist/lane-config.d.ts +25 -0
  248. package/dist/lane-config.d.ts.map +1 -0
  249. package/dist/lane-config.js +105 -0
  250. package/dist/lane-config.js.map +1 -0
  251. package/dist/lineage.d.ts +86 -0
  252. package/dist/lineage.d.ts.map +1 -0
  253. package/dist/lineage.js +303 -0
  254. package/dist/lineage.js.map +1 -0
  255. package/dist/logStore.d.ts +25 -0
  256. package/dist/logStore.d.ts.map +1 -0
  257. package/dist/logStore.js +83 -0
  258. package/dist/logStore.js.map +1 -0
  259. package/dist/manage.d.ts +12 -0
  260. package/dist/manage.d.ts.map +1 -0
  261. package/dist/manage.js +253 -0
  262. package/dist/manage.js.map +1 -0
  263. package/dist/mcp.d.ts +5 -0
  264. package/dist/mcp.d.ts.map +1 -0
  265. package/dist/mcp.js +604 -0
  266. package/dist/mcp.js.map +1 -0
  267. package/dist/memory.d.ts +47 -0
  268. package/dist/memory.d.ts.map +1 -0
  269. package/dist/memory.js +149 -0
  270. package/dist/memory.js.map +1 -0
  271. package/dist/mention-ack.d.ts +80 -0
  272. package/dist/mention-ack.d.ts.map +1 -0
  273. package/dist/mention-ack.js +175 -0
  274. package/dist/mention-ack.js.map +1 -0
  275. package/dist/messageRouter.d.ts +60 -0
  276. package/dist/messageRouter.d.ts.map +1 -0
  277. package/dist/messageRouter.js +309 -0
  278. package/dist/messageRouter.js.map +1 -0
  279. package/dist/mutationAlert.d.ts +44 -0
  280. package/dist/mutationAlert.d.ts.map +1 -0
  281. package/dist/mutationAlert.js +174 -0
  282. package/dist/mutationAlert.js.map +1 -0
  283. package/dist/noise-budget.d.ts +136 -0
  284. package/dist/noise-budget.d.ts.map +1 -0
  285. package/dist/noise-budget.js +340 -0
  286. package/dist/noise-budget.js.map +1 -0
  287. package/dist/notifications.d.ts +67 -0
  288. package/dist/notifications.d.ts.map +1 -0
  289. package/dist/notifications.js +253 -0
  290. package/dist/notifications.js.map +1 -0
  291. package/dist/openclaw.d.ts +34 -0
  292. package/dist/openclaw.d.ts.map +1 -0
  293. package/dist/openclaw.js +208 -0
  294. package/dist/openclaw.js.map +1 -0
  295. package/dist/pause-controls.d.ts +31 -0
  296. package/dist/pause-controls.d.ts.map +1 -0
  297. package/dist/pause-controls.js +130 -0
  298. package/dist/pause-controls.js.map +1 -0
  299. package/dist/pidlock.d.ts +25 -0
  300. package/dist/pidlock.d.ts.map +1 -0
  301. package/dist/pidlock.js +179 -0
  302. package/dist/pidlock.js.map +1 -0
  303. package/dist/policy.d.ts +139 -0
  304. package/dist/policy.d.ts.map +1 -0
  305. package/dist/policy.js +264 -0
  306. package/dist/policy.js.map +1 -0
  307. package/dist/polls.d.ts +47 -0
  308. package/dist/polls.d.ts.map +1 -0
  309. package/dist/polls.js +162 -0
  310. package/dist/polls.js.map +1 -0
  311. package/dist/portability.d.ts +55 -0
  312. package/dist/portability.d.ts.map +1 -0
  313. package/dist/portability.js +292 -0
  314. package/dist/portability.js.map +1 -0
  315. package/dist/pr-integrity.d.ts +45 -0
  316. package/dist/pr-integrity.d.ts.map +1 -0
  317. package/dist/pr-integrity.js +124 -0
  318. package/dist/pr-integrity.js.map +1 -0
  319. package/dist/prAutoMerge.d.ts +62 -0
  320. package/dist/prAutoMerge.d.ts.map +1 -0
  321. package/dist/prAutoMerge.js +493 -0
  322. package/dist/prAutoMerge.js.map +1 -0
  323. package/dist/preflight.d.ts +66 -0
  324. package/dist/preflight.d.ts.map +1 -0
  325. package/dist/preflight.js +864 -0
  326. package/dist/preflight.js.map +1 -0
  327. package/dist/presence.d.ts +98 -0
  328. package/dist/presence.d.ts.map +1 -0
  329. package/dist/presence.js +347 -0
  330. package/dist/presence.js.map +1 -0
  331. package/dist/provisioning.d.ts +101 -0
  332. package/dist/provisioning.d.ts.map +1 -0
  333. package/dist/provisioning.js +430 -0
  334. package/dist/provisioning.js.map +1 -0
  335. package/dist/reflection-automation.d.ts +59 -0
  336. package/dist/reflection-automation.d.ts.map +1 -0
  337. package/dist/reflection-automation.js +350 -0
  338. package/dist/reflection-automation.js.map +1 -0
  339. package/dist/reflections.d.ts +65 -0
  340. package/dist/reflections.d.ts.map +1 -0
  341. package/dist/reflections.js +306 -0
  342. package/dist/reflections.js.map +1 -0
  343. package/dist/release.d.ts +67 -0
  344. package/dist/release.d.ts.map +1 -0
  345. package/dist/release.js +275 -0
  346. package/dist/release.js.map +1 -0
  347. package/dist/request-tracker.d.ts +36 -0
  348. package/dist/request-tracker.d.ts.map +1 -0
  349. package/dist/request-tracker.js +109 -0
  350. package/dist/request-tracker.js.map +1 -0
  351. package/dist/research.d.ts +75 -0
  352. package/dist/research.d.ts.map +1 -0
  353. package/dist/research.js +171 -0
  354. package/dist/research.js.map +1 -0
  355. package/dist/routing-approvals.d.ts +73 -0
  356. package/dist/routing-approvals.d.ts.map +1 -0
  357. package/dist/routing-approvals.js +88 -0
  358. package/dist/routing-approvals.js.map +1 -0
  359. package/dist/routing-override.d.ts +94 -0
  360. package/dist/routing-override.d.ts.map +1 -0
  361. package/dist/routing-override.js +290 -0
  362. package/dist/routing-override.js.map +1 -0
  363. package/dist/scope-routing.d.ts +18 -0
  364. package/dist/scope-routing.d.ts.map +1 -0
  365. package/dist/scope-routing.js +29 -0
  366. package/dist/scope-routing.js.map +1 -0
  367. package/dist/secrets.d.ts +77 -0
  368. package/dist/secrets.d.ts.map +1 -0
  369. package/dist/secrets.js +287 -0
  370. package/dist/secrets.js.map +1 -0
  371. package/dist/server.d.ts +3 -0
  372. package/dist/server.d.ts.map +1 -0
  373. package/dist/server.js +10887 -0
  374. package/dist/server.js.map +1 -0
  375. package/dist/service-probe.d.ts +53 -0
  376. package/dist/service-probe.d.ts.map +1 -0
  377. package/dist/service-probe.js +225 -0
  378. package/dist/service-probe.js.map +1 -0
  379. package/dist/shared-workspace-api.d.ts +73 -0
  380. package/dist/shared-workspace-api.d.ts.map +1 -0
  381. package/dist/shared-workspace-api.js +281 -0
  382. package/dist/shared-workspace-api.js.map +1 -0
  383. package/dist/shipped-heartbeat.d.ts +91 -0
  384. package/dist/shipped-heartbeat.d.ts.map +1 -0
  385. package/dist/shipped-heartbeat.js +272 -0
  386. package/dist/shipped-heartbeat.js.map +1 -0
  387. package/dist/starter-team.d.ts +23 -0
  388. package/dist/starter-team.d.ts.map +1 -0
  389. package/dist/starter-team.js +88 -0
  390. package/dist/starter-team.js.map +1 -0
  391. package/dist/suppression-ledger.d.ts +73 -0
  392. package/dist/suppression-ledger.d.ts.map +1 -0
  393. package/dist/suppression-ledger.js +125 -0
  394. package/dist/suppression-ledger.js.map +1 -0
  395. package/dist/system-loop-state.d.ts +4 -0
  396. package/dist/system-loop-state.d.ts.map +1 -0
  397. package/dist/system-loop-state.js +40 -0
  398. package/dist/system-loop-state.js.map +1 -0
  399. package/dist/taskCommentIngest.d.ts +43 -0
  400. package/dist/taskCommentIngest.d.ts.map +1 -0
  401. package/dist/taskCommentIngest.js +59 -0
  402. package/dist/taskCommentIngest.js.map +1 -0
  403. package/dist/taskPrecheck.d.ts +20 -0
  404. package/dist/taskPrecheck.d.ts.map +1 -0
  405. package/dist/taskPrecheck.js +329 -0
  406. package/dist/taskPrecheck.js.map +1 -0
  407. package/dist/taskStateSync.d.ts +8 -0
  408. package/dist/taskStateSync.d.ts.map +1 -0
  409. package/dist/taskStateSync.js +79 -0
  410. package/dist/taskStateSync.js.map +1 -0
  411. package/dist/tasks.d.ts +140 -0
  412. package/dist/tasks.d.ts.map +1 -0
  413. package/dist/tasks.js +1281 -0
  414. package/dist/tasks.js.map +1 -0
  415. package/dist/team-config.d.ts +24 -0
  416. package/dist/team-config.d.ts.map +1 -0
  417. package/dist/team-config.js +221 -0
  418. package/dist/team-config.js.map +1 -0
  419. package/dist/team-doctor.d.ts +22 -0
  420. package/dist/team-doctor.d.ts.map +1 -0
  421. package/dist/team-doctor.js +270 -0
  422. package/dist/team-doctor.js.map +1 -0
  423. package/dist/team-pulse.d.ts +52 -0
  424. package/dist/team-pulse.d.ts.map +1 -0
  425. package/dist/team-pulse.js +176 -0
  426. package/dist/team-pulse.js.map +1 -0
  427. package/dist/telemetry.d.ts +74 -0
  428. package/dist/telemetry.d.ts.map +1 -0
  429. package/dist/telemetry.js +256 -0
  430. package/dist/telemetry.js.map +1 -0
  431. package/dist/test-task-filter.d.ts +21 -0
  432. package/dist/test-task-filter.d.ts.map +1 -0
  433. package/dist/test-task-filter.js +48 -0
  434. package/dist/test-task-filter.js.map +1 -0
  435. package/dist/types.d.ts +126 -0
  436. package/dist/types.d.ts.map +1 -0
  437. package/dist/types.js +4 -0
  438. package/dist/types.js.map +1 -0
  439. package/dist/usage-tracking.d.ts +101 -0
  440. package/dist/usage-tracking.d.ts.map +1 -0
  441. package/dist/usage-tracking.js +325 -0
  442. package/dist/usage-tracking.js.map +1 -0
  443. package/dist/vector-store.d.ts +87 -0
  444. package/dist/vector-store.d.ts.map +1 -0
  445. package/dist/vector-store.js +247 -0
  446. package/dist/vector-store.js.map +1 -0
  447. package/dist/watchdog/idleNudgeLane.d.ts +22 -0
  448. package/dist/watchdog/idleNudgeLane.d.ts.map +1 -0
  449. package/dist/watchdog/idleNudgeLane.js +98 -0
  450. package/dist/watchdog/idleNudgeLane.js.map +1 -0
  451. package/dist/webhooks.d.ts +103 -0
  452. package/dist/webhooks.d.ts.map +1 -0
  453. package/dist/webhooks.js +398 -0
  454. package/dist/webhooks.js.map +1 -0
  455. package/dist/working-contract.d.ts +42 -0
  456. package/dist/working-contract.d.ts.map +1 -0
  457. package/dist/working-contract.js +228 -0
  458. package/dist/working-contract.js.map +1 -0
  459. package/dist/ws-heartbeat.d.ts +66 -0
  460. package/dist/ws-heartbeat.d.ts.map +1 -0
  461. package/dist/ws-heartbeat.js +174 -0
  462. package/dist/ws-heartbeat.js.map +1 -0
  463. package/package.json +87 -0
  464. package/plugins/reflectt-channel/README.md +96 -0
  465. package/plugins/reflectt-channel/index.ts +789 -0
  466. package/plugins/reflectt-channel/openclaw.plugin.json +23 -0
  467. package/plugins/reflectt-channel/package.json +23 -0
  468. package/plugins/reflectt-channel/src/channel.ts +433 -0
  469. package/plugins/reflectt-channel/src/types.ts +29 -0
  470. package/public/avatars/echo.png +0 -0
  471. package/public/avatars/harmony.png +0 -0
  472. package/public/avatars/kai.png +0 -0
  473. package/public/avatars/link.png +0 -0
  474. package/public/avatars/pixel.png +0 -0
  475. package/public/avatars/rhythm.png +0 -0
  476. package/public/avatars/ryan.png +0 -0
  477. package/public/avatars/sage.png +0 -0
  478. package/public/avatars/scout.png +0 -0
  479. package/public/avatars/spark.png +0 -0
  480. package/public/dashboard-animations.css +381 -0
  481. package/public/dashboard.js +3479 -0
  482. package/public/docs.md +1062 -0
  483. package/public/file-upload-mock.html +1097 -0
  484. package/public/og-card.png +0 -0
  485. package/public/ui-kit.html +318 -0
  486. package/public/widget/feedback.js +194 -0
@@ -0,0 +1,556 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Insight→Task Bridge: listens for insight:promoted events and creates tasks.
3
+ //
4
+ // Severity-aware routing:
5
+ // - high/critical → auto-create task immediately
6
+ // - medium/low → set insight to pending_triage (manual review required)
7
+ //
8
+ // Design decisions (locked by kai + sage):
9
+ // - Soft guardrail: prefer non-author assignee; if author is best, require non-author reviewer
10
+ // - Required linkage: task.metadata.insight_id + insight.task_id
11
+ // - Idempotency: one task per insight (check insight.task_id before creating)
12
+ import { eventBus } from './events.js';
13
+ import { getInsight, updateInsightStatus } from './insights.js';
14
+ import { taskManager } from './tasks.js';
15
+ import { getDb } from './db.js';
16
+ import { suggestAssignee, suggestReviewer, getAgentRoles } from './assignment.js';
17
+ // ── State ──
18
+ const LISTENER_ID = 'insight-task-bridge';
19
+ let stats = {
20
+ tasksAutoCreated: 0,
21
+ insightsTriaged: 0,
22
+ duplicatesSkipped: 0,
23
+ errors: 0,
24
+ lastEventAt: null,
25
+ };
26
+ let config = {
27
+ enabled: true,
28
+ autoCreateSeverities: ['high', 'critical'],
29
+ defaultReviewer: 'sage',
30
+ defaultEtaDays: 3,
31
+ assignableAgents: [],
32
+ ownershipGuardrail: {
33
+ enabled: true,
34
+ requireNonAuthorReviewer: true,
35
+ },
36
+ };
37
+ /**
38
+ * Update bridge config at runtime (e.g., from policy or API).
39
+ */
40
+ export function configureBridge(partial) {
41
+ config = { ...config, ...partial };
42
+ if (partial.ownershipGuardrail) {
43
+ config.ownershipGuardrail = { ...config.ownershipGuardrail, ...partial.ownershipGuardrail };
44
+ }
45
+ }
46
+ // ── Bridge Logic ──
47
+ async function handlePromotedInsight(event) {
48
+ const data = event.data;
49
+ if (data.kind !== 'insight:promoted' || !data.insightId)
50
+ return;
51
+ if (!config.enabled)
52
+ return;
53
+ stats.lastEventAt = Date.now();
54
+ const insight = getInsight(data.insightId);
55
+ if (!insight) {
56
+ stats.errors++;
57
+ console.error(`[InsightTaskBridge] Insight ${data.insightId} not found`);
58
+ return;
59
+ }
60
+ // Idempotency: skip if insight already has a linked task
61
+ if (insight.task_id) {
62
+ stats.duplicatesSkipped++;
63
+ return;
64
+ }
65
+ const severity = insight.severity_max || 'medium';
66
+ const isAutoCreate = config.autoCreateSeverities.includes(severity);
67
+ if (isAutoCreate) {
68
+ await autoCreateTask(insight);
69
+ }
70
+ else {
71
+ updateInsightStatus(insight.id, 'pending_triage');
72
+ stats.insightsTriaged++;
73
+ console.log(`[InsightTaskBridge] Insight ${insight.id} → pending_triage (severity: ${severity})`);
74
+ }
75
+ }
76
+ function findExistingTaskForInsight(insight) {
77
+ const allTasks = taskManager.listTasks({});
78
+ const targetTitle = `[Insight] ${insight.title}`.toLowerCase();
79
+ // Evidence-based dedup: if an insight explicitly references an existing task or PR,
80
+ // treat it as covered even if the cluster_key differs (common in follow-up insights).
81
+ const evidence = (insight.evidence_refs || []).filter(Boolean);
82
+ // 0a) Direct task-id reference in evidence (e.g. "task-..." in links/logs)
83
+ const taskIdMatches = new Set();
84
+ for (const line of evidence) {
85
+ const matches = String(line).match(/task-\d+-[a-z0-9]+/gi) || [];
86
+ for (const m of matches)
87
+ taskIdMatches.add(m);
88
+ }
89
+ if (taskIdMatches.size > 0) {
90
+ for (const task of allTasks) {
91
+ if (taskIdMatches.has(task.id)) {
92
+ return {
93
+ id: task.id,
94
+ title: task.title,
95
+ status: task.status,
96
+ alreadyAddressed: task.status === 'done' || task.status === 'validating',
97
+ };
98
+ }
99
+ }
100
+ }
101
+ // 0b) PR link reference in evidence (e.g. https://github.com/.../pull/123)
102
+ const prUrlMatches = new Set();
103
+ for (const line of evidence) {
104
+ const matches = String(line).match(/https:\/\/github\.com\/[^\s/]+\/[^\s/]+\/pull\/\d+/gi) || [];
105
+ for (const m of matches)
106
+ prUrlMatches.add(m);
107
+ }
108
+ if (prUrlMatches.size > 0) {
109
+ for (const task of allTasks) {
110
+ const meta = (task.metadata || {});
111
+ const prUrl = (meta.pr_url || meta.review_handoff?.pr_url || meta.qa_bundle?.pr_link);
112
+ if (prUrl && prUrlMatches.has(prUrl)) {
113
+ return {
114
+ id: task.id,
115
+ title: task.title,
116
+ status: task.status,
117
+ alreadyAddressed: task.status === 'done' || task.status === 'validating',
118
+ };
119
+ }
120
+ }
121
+ }
122
+ for (const task of allTasks) {
123
+ const meta = (task.metadata || {});
124
+ // 1. Direct insight_id match
125
+ if (meta.insight_id === insight.id || meta.source_insight === insight.id) {
126
+ return {
127
+ id: task.id,
128
+ title: task.title,
129
+ status: task.status,
130
+ alreadyAddressed: task.status === 'done' || task.status === 'validating',
131
+ };
132
+ }
133
+ // 2. Exact title match (case-insensitive) for insight-bridge tasks
134
+ if (meta.source === 'insight-task-bridge' && task.title.toLowerCase() === targetTitle) {
135
+ return {
136
+ id: task.id,
137
+ title: task.title,
138
+ status: task.status,
139
+ alreadyAddressed: task.status === 'done' || task.status === 'validating',
140
+ };
141
+ }
142
+ // 3. Same full cluster_key (stage::family::unit) via insight-bridge source
143
+ if (meta.source === 'insight-task-bridge' && typeof meta.insight_id === 'string') {
144
+ try {
145
+ const sourceInsight = getInsight(meta.insight_id);
146
+ if (sourceInsight && sourceInsight.cluster_key === insight.cluster_key) {
147
+ return {
148
+ id: task.id,
149
+ title: task.title,
150
+ status: task.status,
151
+ alreadyAddressed: task.status === 'done' || task.status === 'validating',
152
+ };
153
+ }
154
+ }
155
+ catch { /* ignore lookup failures */ }
156
+ }
157
+ }
158
+ return null;
159
+ }
160
+ // ── Feature Detection ──
161
+ /**
162
+ * Heuristic: classify whether an insight is a feature request vs a bug/problem.
163
+ * Feature requests should NOT be auto-promoted to P0.
164
+ *
165
+ * Signals:
166
+ * - cluster_key workflow_stage contains "feature", "enhancement", "request"
167
+ * - title contains feature-request language
168
+ * - No severity or low severity (features aren't "critical")
169
+ */
170
+ const FEATURE_PATTERNS = [
171
+ /\bfeature\b/i,
172
+ /\benhancement\b/i,
173
+ /\brequest\b/i,
174
+ /\badd support\b/i,
175
+ /\bwould be nice\b/i,
176
+ /\bwish list\b/i,
177
+ /\bnew capability\b/i,
178
+ /\bplease add\b/i,
179
+ ];
180
+ export function isFeatureRequest(insight) {
181
+ const title = insight.title || '';
182
+ const cluster = insight.cluster_key || '';
183
+ // Check title and cluster key against feature patterns
184
+ for (const pattern of FEATURE_PATTERNS) {
185
+ if (pattern.test(title) || pattern.test(cluster))
186
+ return true;
187
+ }
188
+ // No severity or low severity + no "bug/error/crash/broken" in title = likely feature
189
+ const bugPatterns = /\bbug\b|\berror\b|\bcrash\b|\bbroken\b|\bfail\b|\bfix\b|\bregress/i;
190
+ if (!insight.severity_max || insight.severity_max === 'low') {
191
+ if (!bugPatterns.test(title))
192
+ return true;
193
+ }
194
+ return false;
195
+ }
196
+ async function autoCreateTask(insight) {
197
+ const title = `[Insight] ${insight.title}`;
198
+ // Feature request gate: don't auto-create P0 tasks for feature requests
199
+ if (isFeatureRequest(insight)) {
200
+ updateInsightStatus(insight.id, 'pending_triage');
201
+ stats.insightsTriaged++;
202
+ console.log(`[InsightTaskBridge] Feature request detected: insight ${insight.id} ("${insight.title}") → pending_triage (not auto-promoted to P0)`);
203
+ return;
204
+ }
205
+ // Dedup check: prevent creating tasks for already-addressed problems
206
+ const existing = findExistingTaskForInsight(insight);
207
+ if (existing) {
208
+ stats.duplicatesSkipped++;
209
+ // Link this insight to the existing task regardless of status
210
+ updateInsightStatus(insight.id, 'task_created', existing.id);
211
+ const addressedNote = existing.alreadyAddressed ? ` (already ${existing.status})` : '';
212
+ console.log(`[InsightTaskBridge] Dedup: insight ${insight.id} linked to existing task ${existing.id} ("${existing.title}")${addressedNote}`);
213
+ return;
214
+ }
215
+ const description = buildTaskDescription(insight);
216
+ const decision = resolveAssignment(insight);
217
+ try {
218
+ const task = await taskManager.createTask({
219
+ title,
220
+ description,
221
+ status: 'todo',
222
+ priority: insight.priority || 'P2',
223
+ assignee: decision.assignee,
224
+ reviewer: decision.reviewer,
225
+ createdBy: 'insight-bridge',
226
+ done_criteria: [
227
+ 'Root cause addressed or mitigated',
228
+ `Evidence from insight ${insight.id} validated`,
229
+ 'Follow-up reflection submitted confirming fix',
230
+ ],
231
+ metadata: {
232
+ insight_id: insight.id,
233
+ source_insight: insight.id,
234
+ source_reflection: insight.reflection_ids[0] || undefined,
235
+ promotion_reason: insight.promotion_readiness,
236
+ severity: insight.severity_max,
237
+ source: 'insight-task-bridge',
238
+ reflection_count: insight.reflection_ids.length,
239
+ authors: insight.authors,
240
+ assignment_decision: {
241
+ reason: decision.reason,
242
+ guardrail_applied: decision.guardrailApplied,
243
+ sole_author_fallback: decision.soleAuthorFallback,
244
+ candidates_considered: decision.candidatesConsidered,
245
+ insight_authors: decision.insightAuthors,
246
+ },
247
+ },
248
+ });
249
+ updateInsightStatus(insight.id, 'task_created', task.id);
250
+ stats.tasksAutoCreated++;
251
+ console.log(`[InsightTaskBridge] Auto-created task ${task.id} from insight ${insight.id} (severity: ${insight.severity_max}, assignee: ${decision.assignee}, guardrail: ${decision.guardrailApplied})`);
252
+ }
253
+ catch (err) {
254
+ stats.errors++;
255
+ console.error(`[InsightTaskBridge] Failed to create task for insight ${insight.id}:`, err);
256
+ }
257
+ }
258
+ // ── Ownership Guardrail ──
259
+ /**
260
+ * Resolve assignee + reviewer with ownership guardrail.
261
+ *
262
+ * Policy:
263
+ * 1. If guardrail enabled and insight has single author:
264
+ * a. Use suggestAssignee (scoring engine) excluding the author
265
+ * b. If no non-author candidate available → fallback to author, but require non-author reviewer
266
+ * 2. If multi-author: normal suggestAssignee routing (authors are valid candidates)
267
+ * 3. Decision is fully recorded for audit trail
268
+ */
269
+ export function resolveAssignment(insight, teamId) {
270
+ const authors = insight.authors || [];
271
+ const guardrail = config.ownershipGuardrail;
272
+ const guardrailEnabled = guardrail.enabled &&
273
+ (!teamId || !guardrail.teamOverrides || guardrail.teamOverrides[teamId] !== false);
274
+ const isSingleAuthor = authors.length === 1;
275
+ const shouldAvoidAuthor = guardrailEnabled && isSingleAuthor;
276
+ // Get all tasks for WIP scoring
277
+ let allTasks = [];
278
+ try {
279
+ allTasks = taskManager.listTasks();
280
+ }
281
+ catch { /* scoring works without tasks */ }
282
+ // Get role-based candidates
283
+ const roleNames = getAgentRoles().map(r => r.name);
284
+ const candidates = config.assignableAgents.length > 0 ? config.assignableAgents : roleNames;
285
+ // Synthetic task for scoring
286
+ const metaTags = Array.isArray(insight.metadata?.tags)
287
+ ? insight.metadata.tags.map(String)
288
+ : [];
289
+ const syntheticTask = {
290
+ title: `[Insight] ${insight.title}`,
291
+ // Insight does not include reflection-level fields like pain/impact/proposed_fix.
292
+ // Use cluster metadata + optional metadata.tags for routing/affinity.
293
+ tags: [insight.cluster_key, insight.failure_family, insight.impacted_unit, ...metaTags].filter(Boolean),
294
+ // Use evidence refs as additional keywords (best-effort).
295
+ done_criteria: insight.evidence_refs.slice(0, 10),
296
+ metadata: {
297
+ cluster_key: insight.cluster_key,
298
+ failure_family: insight.failure_family,
299
+ // surface/lane may be absent for auto-created tasks; routing guardrails use cluster_key.
300
+ },
301
+ };
302
+ let assignee;
303
+ let reason;
304
+ let guardrailApplied = false;
305
+ let soleAuthorFallback = false;
306
+ if (shouldAvoidAuthor) {
307
+ // Score all agents including author for role-fit comparison
308
+ const suggestion = suggestAssignee(syntheticTask, allTasks);
309
+ const suggestedAgent = suggestion.suggested;
310
+ const authorName = authors[0];
311
+ const scores = suggestion.scores || [];
312
+ // Compare author's role-fit score vs best non-author
313
+ const authorScore = scores.find(s => s.agent === authorName);
314
+ const nonAuthorScored = scores
315
+ // Prefer any non-author candidate with non-negative score.
316
+ // If all scores are 0 (no clear affinity), we still want to avoid self-assignment.
317
+ .filter(s => !authors.includes(s.agent) && s.score >= 0 && !s.overCap &&
318
+ (candidates.length === 0 || candidates.includes(s.agent)));
319
+ const bestNonAuthor = nonAuthorScored[0]; // Already sorted desc
320
+ // Role-fit bypass: author-exclusion must NOT override when author is best/only fit.
321
+ // Use *affinity* (domain match) rather than final score so WIP penalties don't defeat best-fit detection.
322
+ const authorAffinity = authorScore?.breakdown?.affinity ?? 0;
323
+ const bestNonAuthorAffinity = bestNonAuthor?.breakdown?.affinity ?? 0;
324
+ const authorIsBestFit = authorScore && authorAffinity > 0 && (!bestNonAuthor ||
325
+ (authorAffinity > bestNonAuthorAffinity * 1.5) ||
326
+ (authorAffinity - bestNonAuthorAffinity >= 0.2));
327
+ const isProtectedMatch = suggestion.protectedMatch &&
328
+ suggestion.suggested === authorName;
329
+ if (isProtectedMatch) {
330
+ // Protected domain → author IS the correct owner, no guardrail needed
331
+ assignee = authorName;
332
+ reason = `author_exclusion_bypassed: protected domain "${suggestion.protectedMatch}" → author "${authorName}" is correct owner`;
333
+ guardrailApplied = false;
334
+ }
335
+ else if (authorIsBestFit) {
336
+ // Author is best role-fit → allow self-assignment, require non-author reviewer
337
+ assignee = authorName;
338
+ const gap = bestNonAuthor
339
+ ? `(author affinity ${authorAffinity.toFixed(2)} vs best non-author ${bestNonAuthor.agent} affinity ${bestNonAuthorAffinity.toFixed(2)})`
340
+ : '(no non-author candidates with non-negative score)';
341
+ const capNote = authorScore?.overCap ? ' (note: author over WIP cap)' : '';
342
+ reason = `author_exclusion_bypassed: author "${authorName}" is best role-fit ${gap}${capNote}. Non-author reviewer required.`;
343
+ guardrailApplied = true;
344
+ soleAuthorFallback = true; // Triggers non-author reviewer requirement
345
+ }
346
+ else if (suggestedAgent && !authors.includes(suggestedAgent) && (candidates.length === 0 || candidates.includes(suggestedAgent))) {
347
+ // Scoring engine picked a viable non-author — use it
348
+ assignee = suggestedAgent;
349
+ reason = `author_exclusion_applied: non-author "${suggestedAgent}" selected (sole author "${authorName}" avoided)`;
350
+ guardrailApplied = true;
351
+ }
352
+ else if (bestNonAuthor) {
353
+ // Best-scoring non-author
354
+ assignee = bestNonAuthor.agent;
355
+ reason = `author_exclusion_applied: best non-author "${bestNonAuthor.agent}" selected (sole author "${authorName}" avoided)`;
356
+ guardrailApplied = true;
357
+ }
358
+ else {
359
+ // No non-author available at all — fall back to author
360
+ assignee = authorName;
361
+ reason = `author_exclusion_bypassed: no non-author candidates available. "${authorName}" assigned as sole fallback. Non-author reviewer required.`;
362
+ guardrailApplied = true;
363
+ soleAuthorFallback = true;
364
+ }
365
+ }
366
+ else if (!guardrailEnabled) {
367
+ // Guardrail disabled — use scoring engine normally
368
+ const suggestion = suggestAssignee(syntheticTask, allTasks);
369
+ assignee = suggestion.suggested || authors[0] || candidates[0] || 'unassigned';
370
+ reason = `Guardrail disabled. Scoring engine selected "${assignee}".`;
371
+ }
372
+ else {
373
+ // Multi-author — normal routing (authors are valid candidates)
374
+ const suggestion = suggestAssignee(syntheticTask, allTasks);
375
+ assignee = suggestion.suggested || authors[0] || candidates[0] || 'unassigned';
376
+ reason = `Multi-author insight (${authors.length} authors). Normal scoring applied, selected "${assignee}".`;
377
+ }
378
+ // Resolve reviewer
379
+ const reviewer = resolveReviewer(insight, assignee, authors, soleAuthorFallback);
380
+ return {
381
+ assignee,
382
+ reviewer,
383
+ reason,
384
+ guardrailApplied,
385
+ soleAuthorFallback,
386
+ candidatesConsidered: candidates,
387
+ insightAuthors: authors,
388
+ };
389
+ }
390
+ /**
391
+ * Pick reviewer, enforcing non-author requirement when sole-author fallback was used.
392
+ */
393
+ function resolveReviewer(insight, assignee, authors, soleAuthorFallback) {
394
+ // Use suggestReviewer from assignment engine
395
+ let allTasks = [];
396
+ try {
397
+ allTasks = taskManager.listTasks();
398
+ }
399
+ catch { /* ok */ }
400
+ const metaTags = Array.isArray(insight.metadata?.tags)
401
+ ? insight.metadata.tags.map(String)
402
+ : [];
403
+ const suggestion = suggestReviewer({
404
+ title: `[Insight] ${insight.title}`,
405
+ assignee,
406
+ tags: [insight.cluster_key, insight.failure_family, insight.impacted_unit, ...metaTags].filter(Boolean),
407
+ done_criteria: insight.evidence_refs.slice(0, 10),
408
+ metadata: {
409
+ cluster_key: insight.cluster_key,
410
+ failure_family: insight.failure_family,
411
+ },
412
+ }, allTasks);
413
+ // If sole-author fallback, reviewer MUST NOT be an author
414
+ if (soleAuthorFallback && config.ownershipGuardrail.requireNonAuthorReviewer) {
415
+ if (suggestion.suggested && !authors.includes(suggestion.suggested)) {
416
+ return suggestion.suggested;
417
+ }
418
+ // Find any non-author reviewer from scores
419
+ const nonAuthorReviewer = (suggestion.scores || [])
420
+ .find(s => !authors.includes(s.agent) && s.agent !== assignee);
421
+ if (nonAuthorReviewer)
422
+ return nonAuthorReviewer.agent;
423
+ // Hard fallback: default reviewer if not an author
424
+ if (!authors.includes(config.defaultReviewer) && config.defaultReviewer !== assignee) {
425
+ return config.defaultReviewer;
426
+ }
427
+ // Last resort: any agent not the assignee
428
+ const roleNames = getAgentRoles().map(r => r.name);
429
+ const anyone = roleNames.find(r => r !== assignee && !authors.includes(r));
430
+ return anyone || config.defaultReviewer;
431
+ }
432
+ return suggestion.suggested || config.defaultReviewer;
433
+ }
434
+ function buildTaskDescription(insight) {
435
+ return [
436
+ `Auto-created from promoted insight **${insight.id}**.`,
437
+ '',
438
+ `**Cluster:** ${insight.cluster_key}`,
439
+ `**Severity:** ${insight.severity_max || 'unknown'}`,
440
+ `**Score:** ${insight.score}/10`,
441
+ `**Reflections:** ${insight.reflection_ids.length} (${insight.independent_count} independent)`,
442
+ `**Authors:** ${insight.authors.join(', ')}`,
443
+ '',
444
+ `**Evidence:**`,
445
+ ...insight.evidence_refs.map(e => `- ${e}`),
446
+ '',
447
+ 'Investigate root cause, validate evidence, implement fix.',
448
+ 'Submit a follow-up reflection when done.',
449
+ ].join('\n');
450
+ }
451
+ export function ensureTriageAuditTable() {
452
+ const db = getDb();
453
+ db.exec(`
454
+ CREATE TABLE IF NOT EXISTS triage_audit (
455
+ id TEXT PRIMARY KEY,
456
+ insight_id TEXT NOT NULL,
457
+ action TEXT NOT NULL,
458
+ reviewer TEXT NOT NULL,
459
+ rationale TEXT NOT NULL DEFAULT '',
460
+ outcome_task_id TEXT,
461
+ previous_status TEXT NOT NULL,
462
+ new_status TEXT NOT NULL,
463
+ timestamp INTEGER NOT NULL
464
+ );
465
+ CREATE INDEX IF NOT EXISTS idx_triage_audit_insight ON triage_audit(insight_id);
466
+ CREATE INDEX IF NOT EXISTS idx_triage_audit_ts ON triage_audit(timestamp);
467
+ `);
468
+ }
469
+ export function recordTriageDecision(decision) {
470
+ ensureTriageAuditTable();
471
+ const db = getDb();
472
+ const id = `triage-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
473
+ db.prepare(`
474
+ INSERT INTO triage_audit (id, insight_id, action, reviewer, rationale, outcome_task_id, previous_status, new_status, timestamp)
475
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
476
+ `).run(id, decision.insight_id, decision.action, decision.reviewer, decision.rationale, decision.outcome_task_id, decision.previous_status, decision.new_status, decision.timestamp);
477
+ return { id, ...decision };
478
+ }
479
+ export function getTriageAudit(insightId, limit = 50) {
480
+ ensureTriageAuditTable();
481
+ const db = getDb();
482
+ if (insightId) {
483
+ return db.prepare('SELECT * FROM triage_audit WHERE insight_id = ? ORDER BY timestamp DESC LIMIT ?')
484
+ .all(insightId, limit);
485
+ }
486
+ return db.prepare('SELECT * FROM triage_audit ORDER BY timestamp DESC LIMIT ?')
487
+ .all(limit);
488
+ }
489
+ // ── Lifecycle ──
490
+ export function startInsightTaskBridge() {
491
+ if (!config.enabled) {
492
+ console.log('[InsightTaskBridge] Disabled');
493
+ return;
494
+ }
495
+ eventBus.on(LISTENER_ID, handlePromotedInsight);
496
+ console.log('[InsightTaskBridge] Listening for insight:promoted events');
497
+ // Catch-up scan: process any promoted insights that were missed
498
+ // (e.g., emitted before bridge was registered, or async handler failed)
499
+ catchUpPromotedInsights().catch(err => console.error('[InsightTaskBridge] Catch-up scan error:', err));
500
+ }
501
+ /**
502
+ * Scan for promoted insights without linked tasks and process them.
503
+ * Runs once on bridge startup to close the event-miss gap.
504
+ */
505
+ async function catchUpPromotedInsights() {
506
+ const db = getDb();
507
+ // Find insights that are promoted but never got a task.
508
+ // Check both status=promoted (set by engine) and readiness signals.
509
+ const rows = db.prepare(`
510
+ SELECT * FROM insights
511
+ WHERE task_id IS NULL
512
+ AND (
513
+ status = 'promoted'
514
+ OR promotion_readiness IN ('promoted', 'override', 'ready')
515
+ )
516
+ AND status NOT IN ('closed', 'pending_triage', 'task_created')
517
+ ORDER BY score DESC
518
+ `).all();
519
+ if (rows.length === 0)
520
+ return;
521
+ console.log(`[InsightTaskBridge] Catch-up: found ${rows.length} promoted insight(s) without tasks`);
522
+ let processed = 0;
523
+ for (const row of rows) {
524
+ const insight = getInsight(row.id);
525
+ if (!insight || insight.task_id)
526
+ continue; // re-check after getInsight
527
+ const severity = insight.severity_max || 'medium';
528
+ const isAutoCreate = config.autoCreateSeverities.includes(severity);
529
+ if (isAutoCreate) {
530
+ await autoCreateTask(insight);
531
+ processed++;
532
+ }
533
+ else if (insight.status !== 'pending_triage') {
534
+ updateInsightStatus(insight.id, 'pending_triage');
535
+ stats.insightsTriaged++;
536
+ processed++;
537
+ }
538
+ }
539
+ if (processed > 0) {
540
+ console.log(`[InsightTaskBridge] Catch-up: processed ${processed} insight(s)`);
541
+ }
542
+ }
543
+ export function stopInsightTaskBridge() {
544
+ eventBus.off(LISTENER_ID);
545
+ }
546
+ export function getInsightTaskBridgeStats() {
547
+ return { ...stats };
548
+ }
549
+ export function _resetBridgeStats() {
550
+ stats = { tasksAutoCreated: 0, insightsTriaged: 0, duplicatesSkipped: 0, errors: 0, lastEventAt: null };
551
+ }
552
+ export function getBridgeConfig() {
553
+ return { ...config, ownershipGuardrail: { ...config.ownershipGuardrail } };
554
+ }
555
+ export { handlePromotedInsight as _handlePromotedInsight };
556
+ //# sourceMappingURL=insight-task-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-task-bridge.js","sourceRoot":"","sources":["../src/insight-task-bridge.ts"],"names":[],"mappings":"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"}