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
package/dist/index.js ADDED
@@ -0,0 +1,306 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) Reflectt AI
3
+ /**
4
+ * reflectt-node - Local node server for agent communication via OpenClaw
5
+ *
6
+ * Entry point
7
+ */
8
+ import { createServer } from './server.js';
9
+ import { serverConfig, isDev, openclawConfig, DATA_DIR } from './config.js';
10
+ import { acquirePidLock, releasePidLock, getPidPath } from './pidlock.js';
11
+ import { startCloudIntegration, stopCloudIntegration, isCloudConfigured, watchConfigForCloudChanges, stopConfigWatcher } from './cloud.js';
12
+ import { stopConfigWatch } from './assignment.js';
13
+ import { getDb, closeDb } from './db.js';
14
+ import { startTeamConfigLinter, stopTeamConfigLinter } from './team-config.js';
15
+ // OpenClaw connection is optional — server works for chat/tasks without it
16
+ /**
17
+ * Build-freshness check: warn if dist/ is older than src/
18
+ * Prevents silently running stale compiled code after source changes.
19
+ */
20
+ import { statSync, readdirSync, existsSync, readFileSync } from 'fs';
21
+ import { join, dirname } from 'path';
22
+ import { fileURLToPath } from 'url';
23
+ import { hostname as osHostname } from 'os';
24
+ import { randomBytes } from 'crypto';
25
+ function checkBuildFreshness() {
26
+ try {
27
+ const thisFile = fileURLToPath(import.meta.url);
28
+ const distDir = dirname(thisFile);
29
+ const srcDir = join(distDir, '..', 'src');
30
+ // Find newest src file
31
+ let newestSrc = 0;
32
+ try {
33
+ const srcFiles = readdirSync(srcDir).filter(f => f.endsWith('.ts'));
34
+ for (const f of srcFiles) {
35
+ const mtime = statSync(join(srcDir, f)).mtimeMs;
36
+ if (mtime > newestSrc)
37
+ newestSrc = mtime;
38
+ }
39
+ }
40
+ catch {
41
+ return;
42
+ } // src dir not accessible, skip
43
+ // Find this dist file's mtime
44
+ const distMtime = statSync(thisFile).mtimeMs;
45
+ if (newestSrc > distMtime + 1000) { // 1s tolerance
46
+ const ageSec = Math.round((newestSrc - distMtime) / 1000);
47
+ console.warn(`⚠️ Build may be stale: src/ is ${ageSec}s newer than dist/. Run \`npm run build\` to recompile.`);
48
+ }
49
+ }
50
+ catch {
51
+ // Non-fatal — skip check if anything goes wrong
52
+ }
53
+ }
54
+ /**
55
+ * Docker identity isolation: detect if mounted volumes contain another team's
56
+ * config and warn/block to prevent identity inheritance.
57
+ */
58
+ function checkDockerIdentity() {
59
+ const isDocker = existsSync('/.dockerenv') || process.env.REFLECTT_HOME === '/data';
60
+ if (!isDocker)
61
+ return;
62
+ const reflecttHome = process.env.REFLECTT_HOME || '/data';
63
+ // Check for inherited OpenClaw config
64
+ const openclawConfigPath = join(reflecttHome, '.openclaw', 'openclaw.json');
65
+ if (existsSync(openclawConfigPath)) {
66
+ try {
67
+ const raw = JSON.parse(readFileSync(openclawConfigPath, 'utf-8'));
68
+ const gatewayToken = raw?.gateway?.auth?.token;
69
+ const agentId = raw?.agentId;
70
+ // If there's an inherited identity with a gateway token, warn
71
+ if (gatewayToken && agentId) {
72
+ console.warn('');
73
+ console.warn('⚠️ Inherited identity detected in mounted volume!');
74
+ console.warn(` Agent ID: ${agentId}`);
75
+ console.warn(' This Docker instance may appear as another team\'s agent.');
76
+ console.warn('');
77
+ console.warn(' To use a fresh identity:');
78
+ console.warn(' 1. Remove the mounted .openclaw directory, or');
79
+ console.warn(' 2. Set OPENCLAW_AGENT_ID=my-docker-agent in docker-compose.yml');
80
+ console.warn('');
81
+ }
82
+ }
83
+ catch {
84
+ // Config exists but can't be parsed — not a problem
85
+ }
86
+ }
87
+ // Check for inherited cloud credentials
88
+ const cloudConfigPath = join(reflecttHome, 'config.json');
89
+ if (existsSync(cloudConfigPath)) {
90
+ try {
91
+ const raw = JSON.parse(readFileSync(cloudConfigPath, 'utf-8'));
92
+ const hostName = raw?.cloud?.hostName;
93
+ const hostId = raw?.cloud?.hostId;
94
+ const credential = raw?.cloud?.credential;
95
+ if (hostId && credential) {
96
+ const explicitName = process.env.REFLECTT_HOST_NAME;
97
+ if (!explicitName) {
98
+ console.warn('');
99
+ console.warn('⚠️ Inherited cloud registration detected!');
100
+ console.warn(` Host: ${hostName || 'unknown'} (${hostId})`);
101
+ console.warn(' This Docker instance will appear as an existing host in the cloud dashboard.');
102
+ console.warn('');
103
+ console.warn(' To register as a new host:');
104
+ console.warn(' 1. Set REFLECTT_HOST_NAME=my-docker-host in docker-compose.yml');
105
+ console.warn(' 2. Generate a new join token in the cloud dashboard');
106
+ console.warn(' 3. Set REFLECTT_HOST_TOKEN=<new-token> in docker-compose.yml');
107
+ console.warn('');
108
+ }
109
+ }
110
+ }
111
+ catch {
112
+ // Config exists but can't be parsed
113
+ }
114
+ }
115
+ // Generate a fresh agent identity if none is explicitly set
116
+ if (!process.env.OPENCLAW_AGENT_ID) {
117
+ const hn = osHostname();
118
+ const shortId = randomBytes(3).toString('hex');
119
+ const defaultId = `docker-${hn}-${shortId}`;
120
+ process.env.OPENCLAW_AGENT_ID = defaultId;
121
+ console.log(`🆔 Docker identity: ${defaultId} (set OPENCLAW_AGENT_ID to override)`);
122
+ }
123
+ }
124
+ /**
125
+ * Docker bootstrap check: detect container environment and print
126
+ * actionable guidance when required configuration is missing.
127
+ */
128
+ function checkDockerBootstrap() {
129
+ const isDocker = existsSync('/.dockerenv') || process.env.REFLECTT_HOME === '/data';
130
+ if (!isDocker)
131
+ return;
132
+ const hasGatewayUrl = !!process.env.OPENCLAW_GATEWAY_URL;
133
+ const hasGatewayToken = !!process.env.OPENCLAW_GATEWAY_TOKEN;
134
+ if (!hasGatewayUrl && !hasGatewayToken) {
135
+ console.log('');
136
+ console.log('┌──────────────────────────────────────────────────────────┐');
137
+ console.log('│ 📋 Docker Quick Start │');
138
+ console.log('├──────────────────────────────────────────────────────────┤');
139
+ console.log('│ │');
140
+ console.log('│ reflectt-node is running standalone (no OpenClaw). │');
141
+ console.log('│ The dashboard, tasks, and API work fine without it. │');
142
+ console.log('│ │');
143
+ console.log('│ To connect to OpenClaw (for agent messaging): │');
144
+ console.log('│ │');
145
+ console.log('│ 1. Set env vars in docker-compose.yml: │');
146
+ console.log('│ OPENCLAW_GATEWAY_URL=ws://host.docker.internal:18789 │');
147
+ console.log('│ OPENCLAW_GATEWAY_TOKEN=your_token_here │');
148
+ console.log('│ │');
149
+ console.log('│ 2. Restart: docker-compose up -d │');
150
+ console.log('│ │');
151
+ console.log('│ Get your token: openclaw gateway token │');
152
+ console.log('│ Full guide: https://reflectt.ai/bootstrap │');
153
+ console.log('└──────────────────────────────────────────────────────────┘');
154
+ console.log('');
155
+ }
156
+ else if (hasGatewayUrl && !hasGatewayToken) {
157
+ console.warn('');
158
+ console.warn('⚠️ OPENCLAW_GATEWAY_URL is set but OPENCLAW_GATEWAY_TOKEN is missing.');
159
+ console.warn(' Connection will fail without a valid token.');
160
+ console.warn(' Get your token: openclaw gateway token');
161
+ console.warn(' Then add to docker-compose.yml:');
162
+ console.warn(' OPENCLAW_GATEWAY_TOKEN=your_token_here');
163
+ console.warn('');
164
+ }
165
+ }
166
+ async function main() {
167
+ console.log('🚀 Starting reflectt-node...');
168
+ // Build-freshness check (non-blocking)
169
+ checkBuildFreshness();
170
+ // Docker identity isolation (must run before bootstrap)
171
+ checkDockerIdentity();
172
+ // Docker bootstrap guidance (non-blocking)
173
+ checkDockerBootstrap();
174
+ // Dev-mode port guard: prevent dev servers from hijacking production port
175
+ const PRODUCTION_PORT = 4445;
176
+ if (isDev && serverConfig.port === PRODUCTION_PORT) {
177
+ console.error(`\n🚫 BLOCKED: Cannot run dev server on port ${PRODUCTION_PORT} — that's the production port.`);
178
+ console.error(` Use a different port: PORT=${PRODUCTION_PORT + 1} npm run dev`);
179
+ console.error(` Or set NODE_ENV=production if this IS the production server.\n`);
180
+ process.exit(1);
181
+ }
182
+ // Acquire PID lock — kills any previous instance and resolves port conflicts
183
+ // Use port-specific lockfile to avoid cross-port conflicts
184
+ const pidPath = getPidPath(serverConfig.port);
185
+ const lockResult = acquirePidLock(serverConfig.port, pidPath);
186
+ if (lockResult.killedPrevious) {
187
+ console.log(` Replaced previous instance (pid ${lockResult.previousPid})`);
188
+ }
189
+ if (lockResult.portConflictPids.length > 0) {
190
+ console.log(` Resolved ${lockResult.portConflictPids.length} port conflict(s)`);
191
+ }
192
+ try {
193
+ // Initialize SQLite database (WAL mode, auto-migration from JSONL)
194
+ const db = getDb();
195
+ console.log(`📦 SQLite database initialized (WAL mode)`);
196
+ // Initialize vector search (sqlite-vec) — optional, degrades gracefully
197
+ try {
198
+ const { initVectorSearch } = await import('./db.js');
199
+ initVectorSearch();
200
+ }
201
+ catch {
202
+ console.warn('⚠️ Vector search not available (sqlite-vec not installed)');
203
+ }
204
+ // Team config linter (TEAM.md + TEAM-ROLES.yaml + TEAM-STANDARDS.md)
205
+ startTeamConfigLinter();
206
+ const app = await createServer();
207
+ await app.listen({
208
+ port: serverConfig.port,
209
+ host: serverConfig.host,
210
+ });
211
+ const baseUrl = `http://${serverConfig.host}:${serverConfig.port}`;
212
+ console.log(`✅ Server running at ${baseUrl}`);
213
+ console.log(` - Dashboard: ${baseUrl}/dashboard`);
214
+ console.log(` - REST API: ${baseUrl}`);
215
+ console.log(` - WebSocket: ws://${serverConfig.host}:${serverConfig.port}/chat/ws`);
216
+ console.log(` - Health: ${baseUrl}/health`);
217
+ console.log(` - PID: ${process.pid}`);
218
+ // OpenClaw gateway status
219
+ if (openclawConfig.gatewayToken) {
220
+ console.log(`🔗 OpenClaw gateway: configured (${openclawConfig.gatewayUrl})`);
221
+ }
222
+ else {
223
+ console.log('⚠️ OpenClaw gateway: not configured');
224
+ console.log(' To connect agents, set OPENCLAW_GATEWAY_URL and OPENCLAW_GATEWAY_TOKEN');
225
+ console.log(' Get your token: openclaw gateway token');
226
+ console.log(' Guide: https://reflectt.ai/bootstrap');
227
+ }
228
+ // Cloud integration (checks env vars + config.json for credentials)
229
+ if (isCloudConfigured()) {
230
+ // Non-blocking: don't prevent server from starting if cloud is down
231
+ startCloudIntegration().catch(err => {
232
+ console.warn(`☁️ Cloud integration error: ${err?.message || err}`);
233
+ });
234
+ }
235
+ else {
236
+ console.log('☁️ Cloud integration: disabled (run `reflectt host connect` to enable)');
237
+ // Watch config.json so we auto-connect when agent enrolls
238
+ watchConfigForCloudChanges();
239
+ }
240
+ // First-boot seeding: if no agents and no tasks, create starter team + welcome task
241
+ try {
242
+ const { taskManager } = await import('./tasks.js');
243
+ const { createStarterTeam } = await import('./starter-team.js');
244
+ const allTasks = taskManager.listTasks({});
245
+ const agentsDir = join(DATA_DIR, 'agents');
246
+ const hasAgents = existsSync(agentsDir) && readdirSync(agentsDir).filter(f => !f.startsWith('.')).length > 0;
247
+ if (allTasks.length === 0 && !hasAgents) {
248
+ console.log('🌱 First boot detected — seeding starter team…');
249
+ const result = await createStarterTeam();
250
+ console.log(` Created agents: ${result.created.join(', ') || 'none (already exist)'}`);
251
+ // Create a welcome task so the dashboard isn't empty
252
+ taskManager.createTask({
253
+ status: 'todo',
254
+ createdBy: 'system',
255
+ title: 'Welcome to reflectt-node — explore the dashboard and connect your agents',
256
+ description: [
257
+ '## Getting Started',
258
+ '',
259
+ 'Your reflectt-node is running! Here\'s what to do next:',
260
+ '',
261
+ '1. **Connect OpenClaw agents** — set `OPENCLAW_GATEWAY_URL` and `OPENCLAW_GATEWAY_TOKEN`',
262
+ '2. **Explore the dashboard** — visit `/dashboard` to see tasks, agents, and chat',
263
+ '3. **Try the API** — `GET /capabilities` lists every endpoint',
264
+ '4. **Connect to the cloud** — `reflectt host connect --join-token <token>`',
265
+ '',
266
+ 'When done, move this task to `done`. Your first task cycle is complete!',
267
+ ].join('\n'),
268
+ priority: 'P2',
269
+ assignee: 'builder',
270
+ reviewer: 'ops',
271
+ done_criteria: [
272
+ 'Dashboard loads and shows this task',
273
+ 'At least one agent connected via OpenClaw',
274
+ ],
275
+ metadata: { source: 'first-boot', reflection_exempt: true, reflection_exempt_reason: 'Auto-created welcome task' },
276
+ });
277
+ console.log(' Created welcome task');
278
+ }
279
+ }
280
+ catch (err) {
281
+ // Non-blocking — don't prevent server from starting
282
+ console.warn(`⚠️ First-boot seeding: ${err?.message || err}`);
283
+ }
284
+ // Graceful shutdown
285
+ const shutdown = async (signal) => {
286
+ console.log(`\n${signal} received, shutting down...`);
287
+ stopConfigWatch();
288
+ stopConfigWatcher();
289
+ stopCloudIntegration();
290
+ stopTeamConfigLinter();
291
+ closeDb();
292
+ releasePidLock(pidPath);
293
+ await app.close();
294
+ process.exit(0);
295
+ };
296
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
297
+ process.on('SIGINT', () => shutdown('SIGINT'));
298
+ }
299
+ catch (err) {
300
+ releasePidLock(pidPath);
301
+ console.error('Failed to start server:', err);
302
+ process.exit(1);
303
+ }
304
+ }
305
+ main();
306
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,4BAA4B;AAE5B;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC1I,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC9E,2EAA2E;AAE3E;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,IAAI,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAEpC,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;QAEzC,uBAAuB;QACvB,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;YACnE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;gBAC/C,IAAI,KAAK,GAAG,SAAS;oBAAE,SAAS,GAAG,KAAK,CAAA;YAC1C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAAC,OAAM;QAAC,CAAC,CAAC,+BAA+B;QAElD,8BAA8B;QAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAA;QAE5C,IAAI,SAAS,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC,eAAe;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;YACzD,OAAO,CAAC,IAAI,CAAC,mCAAmC,MAAM,yDAAyD,CAAC,CAAA;QAClH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,OAAO,CAAA;IACnF,IAAI,CAAC,QAAQ;QAAE,OAAM;IAErB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAA;IAEzD,sCAAsC;IACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,CAAC,CAAA;IAC3E,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAA;YACjE,MAAM,YAAY,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAA;YAC9C,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,CAAA;YAE5B,8DAA8D;YAC9D,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAChB,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;gBAClE,OAAO,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAA;gBACvC,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;gBAC5E,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAChB,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;gBAC3C,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;gBAClE,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAA;gBACnF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;IACzD,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;YAC9D,MAAM,QAAQ,GAAG,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAA;YACrC,MAAM,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,CAAA;YACjC,MAAM,UAAU,GAAG,GAAG,EAAE,KAAK,EAAE,UAAU,CAAA;YAEzC,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;gBACnD,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAChB,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;oBAC1D,OAAO,CAAC,IAAI,CAAC,YAAY,QAAQ,IAAI,SAAS,KAAK,MAAM,GAAG,CAAC,CAAA;oBAC7D,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;oBAC/F,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAChB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;oBAC7C,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAA;oBACnF,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;oBACxE,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;oBACjF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;QACvB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9C,MAAM,SAAS,GAAG,UAAU,EAAE,IAAI,OAAO,EAAE,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,sCAAsC,CAAC,CAAA;IACrF,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB;IAC3B,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,OAAO,CAAA;IACnF,IAAI,CAAC,QAAQ;QAAE,OAAM;IAErB,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA;IACxD,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAA;IAE5D,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAA;QAC1E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;SAAM,IAAI,aAAa,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;QACtF,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAC9D,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QAClD,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;QAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;IAE3C,uCAAuC;IACvC,mBAAmB,EAAE,CAAA;IAErB,wDAAwD;IACxD,mBAAmB,EAAE,CAAA;IAErB,2CAA2C;IAC3C,oBAAoB,EAAE,CAAA;IAEtB,0EAA0E;IAC1E,MAAM,eAAe,GAAG,IAAI,CAAA;IAC5B,IAAI,KAAK,IAAI,YAAY,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,+CAA+C,eAAe,gCAAgC,CAAC,CAAA;QAC7G,OAAO,CAAC,KAAK,CAAC,iCAAiC,eAAe,GAAG,CAAC,cAAc,CAAC,CAAA;QACjF,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAA;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,6EAA6E;IAC7E,2DAA2D;IAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAC7C,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7D,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,sCAAsC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,CAAC,gBAAgB,CAAC,MAAM,mBAAmB,CAAC,CAAA;IACnF,CAAC;IAED,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;QAClB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;QAExD,wEAAwE;QACxE,IAAI,CAAC;YACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;YACpD,gBAAgB,EAAE,CAAA;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;QAC5E,CAAC;QAED,qEAAqE;QACrE,qBAAqB,EAAE,CAAA;QAEvB,MAAM,GAAG,GAAG,MAAM,YAAY,EAAE,CAAA;QAGhC,MAAM,GAAG,CAAC,MAAM,CAAC;YACf,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,IAAI,EAAE,YAAY,CAAC,IAAI;SACxB,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,UAAU,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,CAAA;QAClE,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,YAAY,CAAC,CAAA;QACnD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,wBAAwB,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,UAAU,CAAC,CAAA;QACrF,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,SAAS,CAAC,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAEvC,0BAA0B;QAC1B,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,oCAAoC,cAAc,CAAC,UAAU,GAAG,CAAC,CAAA;QAC/E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAA;YACxF,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;YACxD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;QACxD,CAAC;QAED,oEAAoE;QACpE,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACxB,oEAAoE;YACpE,qBAAqB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAClC,OAAO,CAAC,IAAI,CAAC,gCAAgC,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAA;YACrE,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAA;YACtF,0DAA0D;YAC1D,0BAA0B,EAAE,CAAA;QAC9B,CAAC;QAED,oFAAoF;QACpF,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;YAClD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;YAC5G,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAA;gBAC7D,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAA;gBACxC,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAA;gBAExF,qDAAqD;gBACrD,WAAW,CAAC,UAAU,CAAC;oBACrB,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,0EAA0E;oBACjF,WAAW,EAAE;wBACX,oBAAoB;wBACpB,EAAE;wBACF,yDAAyD;wBACzD,EAAE;wBACF,0FAA0F;wBAC1F,kFAAkF;wBAClF,+DAA+D;wBAC/D,4EAA4E;wBAC5E,EAAE;wBACF,yEAAyE;qBAC1E,CAAC,IAAI,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE;wBACb,qCAAqC;wBACrC,2CAA2C;qBAC5C;oBACD,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,2BAA2B,EAAE;iBACnH,CAAC,CAAA;gBACF,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oDAAoD;YACpD,OAAO,CAAC,IAAI,CAAC,2BAA4B,GAAa,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAA;QAC3E,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,6BAA6B,CAAC,CAAA;YACrD,eAAe,EAAE,CAAA;YACjB,iBAAiB,EAAE,CAAA;YACnB,oBAAoB,EAAE,CAAA;YACtB,oBAAoB,EAAE,CAAA;YACtB,OAAO,EAAE,CAAA;YACT,cAAc,CAAC,OAAO,CAAC,CAAA;YACvB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAA;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC,CAAA;QAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEhD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAA;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { type Insight, type InsightStatus } from './insights.js';
2
+ export interface InsightMutationAuditEntry {
3
+ timestamp: number;
4
+ insightId: string;
5
+ actor: string;
6
+ reason: string;
7
+ changes: Array<{
8
+ field: string;
9
+ before: unknown;
10
+ after: unknown;
11
+ }>;
12
+ context: string;
13
+ }
14
+ export declare function recordInsightMutation(entry: InsightMutationAuditEntry): Promise<void>;
15
+ export declare function getRecentInsightMutationAudits(limit?: number): InsightMutationAuditEntry[];
16
+ export declare function _clearInsightMutationAuditLog(): void;
17
+ export interface InsightPatchRequest {
18
+ actor: string;
19
+ reason: string;
20
+ status?: InsightStatus;
21
+ cluster_key?: string;
22
+ metadata?: {
23
+ notes?: string;
24
+ cluster_key_override?: string;
25
+ };
26
+ }
27
+ export declare function patchInsightById(insightId: string, patch: InsightPatchRequest): {
28
+ success: boolean;
29
+ insight?: Insight;
30
+ error?: string;
31
+ };
32
+ //# sourceMappingURL=insight-mutation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-mutation.d.ts","sourceRoot":"","sources":["../src/insight-mutation.ts"],"names":[],"mappings":"AAOA,OAAO,EAAoB,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAMlF,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAClE,OAAO,EAAE,MAAM,CAAA;CAChB;AAKD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAc3F;AAED,wBAAgB,8BAA8B,CAAC,KAAK,SAAK,GAAG,yBAAyB,EAAE,CAEtF;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAC9B,CAAA;CACF;AA6BD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgHvI"}
@@ -0,0 +1,160 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Minimal admin-only insight mutation helpers (cluster re-key + status close)
3
+ import { promises as fs } from 'node:fs';
4
+ import path from 'node:path';
5
+ import { getDb, safeJsonParse, safeJsonStringify } from './db.js';
6
+ import { DATA_DIR } from './config.js';
7
+ import { INSIGHT_STATUSES } from './insights.js';
8
+ // ── Audit log ─────────────────────────────────────────────────────────────
9
+ const AUDIT_FILE = process.env.REFLECTT_INSIGHT_MUTATION_AUDIT_FILE || path.join(DATA_DIR, 'insight-mutation-audit.jsonl');
10
+ const auditEntries = [];
11
+ const MAX_IN_MEMORY = 2000;
12
+ export async function recordInsightMutation(entry) {
13
+ auditEntries.push(entry);
14
+ if (auditEntries.length > MAX_IN_MEMORY) {
15
+ auditEntries.splice(0, auditEntries.length - MAX_IN_MEMORY);
16
+ }
17
+ // Best-effort append-only JSONL
18
+ try {
19
+ await fs.mkdir(path.dirname(AUDIT_FILE), { recursive: true });
20
+ await fs.appendFile(AUDIT_FILE, JSON.stringify(entry) + '\n', 'utf-8');
21
+ }
22
+ catch (err) {
23
+ // Don't block mutations on audit I/O failure
24
+ console.error('[InsightMutationAudit] Failed to write audit entry:', err);
25
+ }
26
+ }
27
+ export function getRecentInsightMutationAudits(limit = 50) {
28
+ return auditEntries.slice(-Math.max(1, Math.min(limit, 500)));
29
+ }
30
+ export function _clearInsightMutationAuditLog() {
31
+ auditEntries.splice(0, auditEntries.length);
32
+ }
33
+ function parseClusterKeyString(clusterKey) {
34
+ const parts = clusterKey.split('::').map(p => p.trim()).filter(Boolean);
35
+ if (parts.length !== 3)
36
+ return null;
37
+ const [workflow_stage, failure_family, impacted_unit] = parts;
38
+ if (!workflow_stage || !failure_family || !impacted_unit)
39
+ return null;
40
+ return { workflow_stage, failure_family, impacted_unit };
41
+ }
42
+ function diff(before, after) {
43
+ const changes = [];
44
+ const fields = [
45
+ 'status',
46
+ 'cluster_key',
47
+ 'workflow_stage',
48
+ 'failure_family',
49
+ 'impacted_unit',
50
+ 'metadata',
51
+ 'updated_at',
52
+ ];
53
+ for (const field of fields) {
54
+ const b = before[field];
55
+ const a = after[field];
56
+ if (JSON.stringify(b) !== JSON.stringify(a))
57
+ changes.push({ field: String(field), before: b, after: a });
58
+ }
59
+ return changes;
60
+ }
61
+ export function patchInsightById(insightId, patch) {
62
+ const db = getDb();
63
+ if (!patch.actor?.trim())
64
+ return { success: false, error: 'actor is required' };
65
+ if (!patch.reason?.trim())
66
+ return { success: false, error: 'reason is required' };
67
+ const row = db.prepare('SELECT * FROM insights WHERE id = ?').get(insightId);
68
+ if (!row)
69
+ return { success: false, error: 'Insight not found' };
70
+ // Defer to rowToInsight mapping via getInsight to keep consistent shapes.
71
+ const current = db.prepare('SELECT * FROM insights WHERE id = ?').get(insightId);
72
+ const before = {
73
+ id: current.id,
74
+ cluster_key: current.cluster_key,
75
+ workflow_stage: current.workflow_stage,
76
+ failure_family: current.failure_family,
77
+ impacted_unit: current.impacted_unit,
78
+ title: current.title,
79
+ status: current.status,
80
+ score: current.score,
81
+ priority: current.priority,
82
+ reflection_ids: safeJsonParse(current.reflection_ids) ?? [],
83
+ independent_count: current.independent_count,
84
+ evidence_refs: safeJsonParse(current.evidence_refs) ?? [],
85
+ authors: safeJsonParse(current.authors) ?? [],
86
+ promotion_readiness: current.promotion_readiness,
87
+ recurring_candidate: current.recurring_candidate === 1,
88
+ cooldown_until: current.cooldown_until,
89
+ cooldown_reason: current.cooldown_reason,
90
+ severity_max: current.severity_max,
91
+ task_id: current.task_id ?? null,
92
+ metadata: safeJsonParse(current.metadata),
93
+ created_at: current.created_at,
94
+ updated_at: current.updated_at,
95
+ };
96
+ // Validate status
97
+ if (patch.status !== undefined) {
98
+ if (!INSIGHT_STATUSES.includes(patch.status)) {
99
+ return { success: false, error: `Invalid status. Allowed: ${INSIGHT_STATUSES.join(', ')}` };
100
+ }
101
+ }
102
+ // Validate cluster key
103
+ let parsedKey = null;
104
+ if (patch.cluster_key !== undefined) {
105
+ parsedKey = parseClusterKeyString(patch.cluster_key);
106
+ if (!parsedKey)
107
+ return { success: false, error: 'Invalid cluster_key. Expected "stage::family::unit"' };
108
+ }
109
+ // Merge metadata (allowlist only)
110
+ // Preserve NULL unless metadata was explicitly provided.
111
+ const beforeMetaStr = (current.metadata ?? null);
112
+ const baseMeta = before.metadata ?? undefined;
113
+ const nextMeta = { ...(baseMeta ?? {}) };
114
+ const shouldWriteMetadata = !!patch.metadata;
115
+ if (patch.metadata) {
116
+ if (patch.metadata.notes !== undefined)
117
+ nextMeta.notes = patch.metadata.notes;
118
+ if (patch.metadata.cluster_key_override !== undefined)
119
+ nextMeta.cluster_key_override = patch.metadata.cluster_key_override;
120
+ }
121
+ const nextMetaStr = shouldWriteMetadata ? safeJsonStringify(nextMeta) : beforeMetaStr;
122
+ const now = Date.now();
123
+ const nextStatus = patch.status ?? before.status;
124
+ const nextClusterKey = patch.cluster_key ?? before.cluster_key;
125
+ const nextWorkflowStage = parsedKey?.workflow_stage ?? before.workflow_stage;
126
+ const nextFailureFamily = parsedKey?.failure_family ?? before.failure_family;
127
+ const nextImpactedUnit = parsedKey?.impacted_unit ?? before.impacted_unit;
128
+ db.prepare(`
129
+ UPDATE insights SET
130
+ status = ?,
131
+ cluster_key = ?,
132
+ workflow_stage = ?,
133
+ failure_family = ?,
134
+ impacted_unit = ?,
135
+ metadata = ?,
136
+ updated_at = ?
137
+ WHERE id = ?
138
+ `).run(nextStatus, nextClusterKey, nextWorkflowStage, nextFailureFamily, nextImpactedUnit, nextMetaStr, now, insightId);
139
+ const updated = db.prepare('SELECT * FROM insights WHERE id = ?').get(insightId);
140
+ const after = {
141
+ ...before,
142
+ status: updated.status,
143
+ cluster_key: updated.cluster_key,
144
+ workflow_stage: updated.workflow_stage,
145
+ failure_family: updated.failure_family,
146
+ impacted_unit: updated.impacted_unit,
147
+ metadata: safeJsonParse(updated.metadata),
148
+ updated_at: updated.updated_at,
149
+ };
150
+ void recordInsightMutation({
151
+ timestamp: now,
152
+ insightId,
153
+ actor: patch.actor,
154
+ reason: patch.reason,
155
+ changes: diff(before, after),
156
+ context: 'PATCH /insights/:id',
157
+ });
158
+ return { success: true, insight: after };
159
+ }
160
+ //# sourceMappingURL=insight-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-mutation.js","sourceRoot":"","sources":["../src/insight-mutation.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,8EAA8E;AAE9E,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAoC,MAAM,eAAe,CAAA;AAElF,6EAA6E;AAE7E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAA;AAW1H,MAAM,YAAY,GAAgC,EAAE,CAAA;AACpD,MAAM,aAAa,GAAG,IAAI,CAAA;AAE1B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAgC;IAC1E,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,IAAI,YAAY,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACxC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,aAAa,CAAC,CAAA;IAC7D,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7D,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6CAA6C;QAC7C,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,GAAG,CAAC,CAAA;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAK,GAAG,EAAE;IACvD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;AAC7C,CAAC;AAeD,SAAS,qBAAqB,CAAC,UAAkB;IAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACnC,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,aAAa,CAAC,GAAG,KAAK,CAAA;IAC7D,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAA;IACrE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA;AAC1D,CAAC;AAED,SAAS,IAAI,CAAC,MAAe,EAAE,KAAc;IAC3C,MAAM,OAAO,GAA8D,EAAE,CAAA;IAC7E,MAAM,MAAM,GAAyB;QACnC,QAAQ;QACR,aAAa;QACb,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,UAAU;QACV,YAAY;KACb,CAAA;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACvB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QACtB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IAC1G,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,KAA0B;IAC5E,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAElB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAA;IAC/E,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;IAEjF,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAQ,CAAA;IACnF,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAA;IAE/D,0EAA0E;IAC1E,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAQ,CAAA;IACvF,MAAM,MAAM,GAAY;QACtB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,aAAa,CAAW,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE;QACrE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,aAAa,EAAE,aAAa,CAAW,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE;QACnE,OAAO,EAAE,aAAa,CAAW,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;QACvD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,KAAK,CAAC;QACtD,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAChC,QAAQ,EAAE,aAAa,CAA0B,OAAO,CAAC,QAAQ,CAAC;QAClE,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;KACT,CAAA;IAEvB,kBAAkB;IAClB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAa,CAAC,EAAE,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;QAC7F,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,SAAS,GAAqF,IAAI,CAAA;IACtG,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAA;IACzG,CAAC;IAED,kCAAkC;IAClC,yDAAyD;IACzD,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAkB,CAAA;IACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAA;IAC7C,MAAM,QAAQ,GAA4B,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAA;IACjE,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;IAC5C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAA;QAC7E,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAoB,KAAK,SAAS;YAAE,QAAQ,CAAC,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAA;IAC5H,CAAC;IACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;IAErF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAK,MAAM,CAAC,MAAwB,CAAA;IACnE,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAA;IAC9D,MAAM,iBAAiB,GAAG,SAAS,EAAE,cAAc,IAAI,MAAM,CAAC,cAAc,CAAA;IAC5E,MAAM,iBAAiB,GAAG,SAAS,EAAE,cAAc,IAAI,MAAM,CAAC,cAAc,CAAA;IAC5E,MAAM,gBAAgB,GAAG,SAAS,EAAE,aAAa,IAAI,MAAM,CAAC,aAAa,CAAA;IAEzE,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;GAUV,CAAC,CAAC,GAAG,CACJ,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,GAAG,EACH,SAAS,CACV,CAAA;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAQ,CAAA;IACvF,MAAM,KAAK,GAAY;QACrB,GAAG,MAAM;QACT,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,aAAa,CAA0B,OAAO,CAAC,QAAQ,CAAC;QAClE,UAAU,EAAE,OAAO,CAAC,UAAU;KACT,CAAA;IAEvB,KAAK,qBAAqB,CAAC;QACzB,SAAS,EAAE,GAAG;QACd,SAAS;QACT,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;QAC5B,OAAO,EAAE,qBAAqB;KAC/B,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,89 @@
1
+ /** Required contract fields for promoted tasks */
2
+ export interface PromotionContract {
3
+ /** Task owner/assignee */
4
+ owner: string;
5
+ /** Reviewer for the task */
6
+ reviewer: string;
7
+ /** Estimated completion time */
8
+ eta: string;
9
+ /** How to verify the fix worked */
10
+ acceptance_check: string;
11
+ /** What artifact must be produced as proof */
12
+ artifact_proof_requirement: string;
13
+ /** When to check in on progress */
14
+ next_checkpoint_eta: string;
15
+ }
16
+ export interface PromotionInput {
17
+ insight_id: string;
18
+ contract: PromotionContract;
19
+ /** Override title (defaults to insight title) */
20
+ title?: string;
21
+ /** Override description */
22
+ description?: string;
23
+ /** Priority override (defaults to insight priority) */
24
+ priority?: 'P0' | 'P1' | 'P2' | 'P3';
25
+ /** Team id */
26
+ team_id?: string;
27
+ }
28
+ export interface PromotionResult {
29
+ success: boolean;
30
+ task_id?: string;
31
+ insight_id: string;
32
+ audit_id?: string;
33
+ error?: string;
34
+ }
35
+ export interface PromotionAudit {
36
+ id: string;
37
+ insight_id: string;
38
+ task_id: string;
39
+ promoted_by: string;
40
+ contract: PromotionContract;
41
+ insight_snapshot: {
42
+ score: number;
43
+ priority: string;
44
+ reflection_count: number;
45
+ independent_count: number;
46
+ severity_max: string | null;
47
+ cluster_key: string;
48
+ };
49
+ created_at: number;
50
+ }
51
+ export interface RecurringCandidate {
52
+ insight_id: string;
53
+ cluster_key: string;
54
+ failure_family: string;
55
+ impacted_unit: string;
56
+ reflection_count: number;
57
+ reopened_count: number;
58
+ score: number;
59
+ priority: string;
60
+ severity_max: string | null;
61
+ suggested_owner: string | null;
62
+ suggested_lane: string | null;
63
+ reason: string;
64
+ }
65
+ export interface PromotionValidation {
66
+ valid: boolean;
67
+ errors?: string[];
68
+ }
69
+ export declare function validatePromotionInput(body: unknown): PromotionValidation;
70
+ /**
71
+ * Promote an insight into a board task.
72
+ */
73
+ export declare function promoteInsight(input: PromotionInput, promotedBy: string): Promise<PromotionResult>;
74
+ export declare function ensurePromotionAuditTable(): void;
75
+ export declare function getPromotionAuditByInsight(insightId: string): PromotionAudit | null;
76
+ export declare function listPromotionAudits(limit?: number): PromotionAudit[];
77
+ /**
78
+ * Generate recurring task candidates from insights that show persistent patterns.
79
+ *
80
+ * Criteria:
81
+ * - recurring_candidate = true (insight was reopened or has 4+ reflections)
82
+ * - status is promoted or cooldown (active insights)
83
+ * - Not already promoted to a task
84
+ *
85
+ * Per-lane assignment: maps failure_family + impacted_unit to agent roles.
86
+ */
87
+ export declare function generateRecurringCandidates(): RecurringCandidate[];
88
+ export declare function _clearPromotionAudits(): void;
89
+ //# sourceMappingURL=insight-promotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-promotion.d.ts","sourceRoot":"","sources":["../src/insight-promotion.ts"],"names":[],"mappings":"AAeA,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,mCAAmC;IACnC,gBAAgB,EAAE,MAAM,CAAA;IACxB,8CAA8C;IAC9C,0BAA0B,EAAE,MAAM,CAAA;IAClC,mCAAmC;IACnC,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACpC,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,gBAAgB,EAAE;QAChB,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,gBAAgB,EAAE,MAAM,CAAA;QACxB,iBAAiB,EAAE,MAAM,CAAA;QACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;CACf;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,CA8BzE;AAID;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA6ExG;AA0BD,wBAAgB,yBAAyB,IAAI,IAAI,CAehD;AAyBD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAcnF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,SAAK,GAAG,cAAc,EAAE,CAahE;AAID;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,IAAI,kBAAkB,EAAE,CAsClE;AA2CD,wBAAgB,qBAAqB,IAAI,IAAI,CAO5C"}