@runcore-sh/runcore 0.1.2

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 (1112) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +353 -0
  3. package/dist/activity/log.d.ts +37 -0
  4. package/dist/activity/log.d.ts.map +1 -0
  5. package/dist/activity/log.js +259 -0
  6. package/dist/activity/log.js.map +1 -0
  7. package/dist/adapters/storage/gdrive-backup.d.ts +20 -0
  8. package/dist/adapters/storage/gdrive-backup.d.ts.map +1 -0
  9. package/dist/adapters/storage/gdrive-backup.js +244 -0
  10. package/dist/adapters/storage/gdrive-backup.js.map +1 -0
  11. package/dist/adapters/storage/local.d.ts +19 -0
  12. package/dist/adapters/storage/local.d.ts.map +1 -0
  13. package/dist/adapters/storage/local.js +101 -0
  14. package/dist/adapters/storage/local.js.map +1 -0
  15. package/dist/adapters/storage/types.d.ts +44 -0
  16. package/dist/adapters/storage/types.d.ts.map +1 -0
  17. package/dist/adapters/storage/types.js +6 -0
  18. package/dist/adapters/storage/types.js.map +1 -0
  19. package/dist/agents/autonomous.d.ts +67 -0
  20. package/dist/agents/autonomous.d.ts.map +1 -0
  21. package/dist/agents/autonomous.js +710 -0
  22. package/dist/agents/autonomous.js.map +1 -0
  23. package/dist/agents/commit.d.ts +22 -0
  24. package/dist/agents/commit.d.ts.map +1 -0
  25. package/dist/agents/commit.js +120 -0
  26. package/dist/agents/commit.js.map +1 -0
  27. package/dist/agents/continue.d.ts +19 -0
  28. package/dist/agents/continue.d.ts.map +1 -0
  29. package/dist/agents/continue.js +158 -0
  30. package/dist/agents/continue.js.map +1 -0
  31. package/dist/agents/cooldown.d.ts +127 -0
  32. package/dist/agents/cooldown.d.ts.map +1 -0
  33. package/dist/agents/cooldown.js +396 -0
  34. package/dist/agents/cooldown.js.map +1 -0
  35. package/dist/agents/dedup-guard.d.ts +15 -0
  36. package/dist/agents/dedup-guard.d.ts.map +1 -0
  37. package/dist/agents/dedup-guard.js +128 -0
  38. package/dist/agents/dedup-guard.js.map +1 -0
  39. package/dist/agents/index.d.ts +34 -0
  40. package/dist/agents/index.d.ts.map +1 -0
  41. package/dist/agents/index.js +51 -0
  42. package/dist/agents/index.js.map +1 -0
  43. package/dist/agents/instance-manager.d.ts +262 -0
  44. package/dist/agents/instance-manager.d.ts.map +1 -0
  45. package/dist/agents/instance-manager.js +850 -0
  46. package/dist/agents/instance-manager.js.map +1 -0
  47. package/dist/agents/locks.d.ts +81 -0
  48. package/dist/agents/locks.d.ts.map +1 -0
  49. package/dist/agents/locks.js +234 -0
  50. package/dist/agents/locks.js.map +1 -0
  51. package/dist/agents/memory.d.ts +37 -0
  52. package/dist/agents/memory.d.ts.map +1 -0
  53. package/dist/agents/memory.js +92 -0
  54. package/dist/agents/memory.js.map +1 -0
  55. package/dist/agents/monitor.d.ts +16 -0
  56. package/dist/agents/monitor.d.ts.map +1 -0
  57. package/dist/agents/monitor.js +235 -0
  58. package/dist/agents/monitor.js.map +1 -0
  59. package/dist/agents/orchestration.d.ts +218 -0
  60. package/dist/agents/orchestration.d.ts.map +1 -0
  61. package/dist/agents/orchestration.js +715 -0
  62. package/dist/agents/orchestration.js.map +1 -0
  63. package/dist/agents/recover.d.ts +30 -0
  64. package/dist/agents/recover.d.ts.map +1 -0
  65. package/dist/agents/recover.js +166 -0
  66. package/dist/agents/recover.js.map +1 -0
  67. package/dist/agents/reflection.d.ts +36 -0
  68. package/dist/agents/reflection.d.ts.map +1 -0
  69. package/dist/agents/reflection.js +198 -0
  70. package/dist/agents/reflection.js.map +1 -0
  71. package/dist/agents/runtime/bus.d.ts +46 -0
  72. package/dist/agents/runtime/bus.d.ts.map +1 -0
  73. package/dist/agents/runtime/bus.js +174 -0
  74. package/dist/agents/runtime/bus.js.map +1 -0
  75. package/dist/agents/runtime/config.d.ts +14 -0
  76. package/dist/agents/runtime/config.d.ts.map +1 -0
  77. package/dist/agents/runtime/config.js +100 -0
  78. package/dist/agents/runtime/config.js.map +1 -0
  79. package/dist/agents/runtime/driver.d.ts +25 -0
  80. package/dist/agents/runtime/driver.d.ts.map +1 -0
  81. package/dist/agents/runtime/driver.js +215 -0
  82. package/dist/agents/runtime/driver.js.map +1 -0
  83. package/dist/agents/runtime/errors.d.ts +30 -0
  84. package/dist/agents/runtime/errors.d.ts.map +1 -0
  85. package/dist/agents/runtime/errors.js +40 -0
  86. package/dist/agents/runtime/errors.js.map +1 -0
  87. package/dist/agents/runtime/index.d.ts +29 -0
  88. package/dist/agents/runtime/index.d.ts.map +1 -0
  89. package/dist/agents/runtime/index.js +54 -0
  90. package/dist/agents/runtime/index.js.map +1 -0
  91. package/dist/agents/runtime/lifecycle.d.ts +46 -0
  92. package/dist/agents/runtime/lifecycle.d.ts.map +1 -0
  93. package/dist/agents/runtime/lifecycle.js +116 -0
  94. package/dist/agents/runtime/lifecycle.js.map +1 -0
  95. package/dist/agents/runtime/manager.d.ts +129 -0
  96. package/dist/agents/runtime/manager.d.ts.map +1 -0
  97. package/dist/agents/runtime/manager.js +947 -0
  98. package/dist/agents/runtime/manager.js.map +1 -0
  99. package/dist/agents/runtime/registry.d.ts +66 -0
  100. package/dist/agents/runtime/registry.d.ts.map +1 -0
  101. package/dist/agents/runtime/registry.js +195 -0
  102. package/dist/agents/runtime/registry.js.map +1 -0
  103. package/dist/agents/runtime/resources.d.ts +49 -0
  104. package/dist/agents/runtime/resources.d.ts.map +1 -0
  105. package/dist/agents/runtime/resources.js +146 -0
  106. package/dist/agents/runtime/resources.js.map +1 -0
  107. package/dist/agents/runtime/types.d.ts +168 -0
  108. package/dist/agents/runtime/types.d.ts.map +1 -0
  109. package/dist/agents/runtime/types.js +24 -0
  110. package/dist/agents/runtime/types.js.map +1 -0
  111. package/dist/agents/runtime.d.ts +240 -0
  112. package/dist/agents/runtime.d.ts.map +1 -0
  113. package/dist/agents/runtime.js +577 -0
  114. package/dist/agents/runtime.js.map +1 -0
  115. package/dist/agents/spawn.d.ts +49 -0
  116. package/dist/agents/spawn.d.ts.map +1 -0
  117. package/dist/agents/spawn.js +975 -0
  118. package/dist/agents/spawn.js.map +1 -0
  119. package/dist/agents/store.d.ts +29 -0
  120. package/dist/agents/store.d.ts.map +1 -0
  121. package/dist/agents/store.js +174 -0
  122. package/dist/agents/store.js.map +1 -0
  123. package/dist/agents/triage.d.ts +23 -0
  124. package/dist/agents/triage.d.ts.map +1 -0
  125. package/dist/agents/triage.js +81 -0
  126. package/dist/agents/triage.js.map +1 -0
  127. package/dist/agents/types.d.ts +37 -0
  128. package/dist/agents/types.d.ts.map +1 -0
  129. package/dist/agents/types.js +2 -0
  130. package/dist/agents/types.js.map +1 -0
  131. package/dist/agents/workflow.d.ts +137 -0
  132. package/dist/agents/workflow.d.ts.map +1 -0
  133. package/dist/agents/workflow.js +542 -0
  134. package/dist/agents/workflow.js.map +1 -0
  135. package/dist/auth/crypto.d.ts +22 -0
  136. package/dist/auth/crypto.d.ts.map +1 -0
  137. package/dist/auth/crypto.js +42 -0
  138. package/dist/auth/crypto.js.map +1 -0
  139. package/dist/auth/identity.d.ts +89 -0
  140. package/dist/auth/identity.d.ts.map +1 -0
  141. package/dist/auth/identity.js +264 -0
  142. package/dist/auth/identity.js.map +1 -0
  143. package/dist/avatar/client.d.ts +34 -0
  144. package/dist/avatar/client.d.ts.map +1 -0
  145. package/dist/avatar/client.js +172 -0
  146. package/dist/avatar/client.js.map +1 -0
  147. package/dist/avatar/sidecar.d.ts +16 -0
  148. package/dist/avatar/sidecar.d.ts.map +1 -0
  149. package/dist/avatar/sidecar.js +125 -0
  150. package/dist/avatar/sidecar.js.map +1 -0
  151. package/dist/board/provider.d.ts +13 -0
  152. package/dist/board/provider.d.ts.map +1 -0
  153. package/dist/board/provider.js +19 -0
  154. package/dist/board/provider.js.map +1 -0
  155. package/dist/board/types.d.ts +76 -0
  156. package/dist/board/types.d.ts.map +1 -0
  157. package/dist/board/types.js +7 -0
  158. package/dist/board/types.js.map +1 -0
  159. package/dist/brain/skills.d.ts +177 -0
  160. package/dist/brain/skills.d.ts.map +1 -0
  161. package/dist/brain/skills.js +452 -0
  162. package/dist/brain/skills.js.map +1 -0
  163. package/dist/brain.d.ts +42 -0
  164. package/dist/brain.d.ts.map +1 -0
  165. package/dist/brain.js +98 -0
  166. package/dist/brain.js.map +1 -0
  167. package/dist/browser/sessions.d.ts +23 -0
  168. package/dist/browser/sessions.d.ts.map +1 -0
  169. package/dist/browser/sessions.js +121 -0
  170. package/dist/browser/sessions.js.map +1 -0
  171. package/dist/cache/file.d.ts +56 -0
  172. package/dist/cache/file.d.ts.map +1 -0
  173. package/dist/cache/file.js +176 -0
  174. package/dist/cache/file.js.map +1 -0
  175. package/dist/cache/index.d.ts +64 -0
  176. package/dist/cache/index.d.ts.map +1 -0
  177. package/dist/cache/index.js +108 -0
  178. package/dist/cache/index.js.map +1 -0
  179. package/dist/cache/keys.d.ts +29 -0
  180. package/dist/cache/keys.d.ts.map +1 -0
  181. package/dist/cache/keys.js +52 -0
  182. package/dist/cache/keys.js.map +1 -0
  183. package/dist/cache/llm-cache.d.ts +70 -0
  184. package/dist/cache/llm-cache.d.ts.map +1 -0
  185. package/dist/cache/llm-cache.js +165 -0
  186. package/dist/cache/llm-cache.js.map +1 -0
  187. package/dist/cache/memory.d.ts +53 -0
  188. package/dist/cache/memory.d.ts.map +1 -0
  189. package/dist/cache/memory.js +114 -0
  190. package/dist/cache/memory.js.map +1 -0
  191. package/dist/calendar/google-adapter.d.ts +16 -0
  192. package/dist/calendar/google-adapter.d.ts.map +1 -0
  193. package/dist/calendar/google-adapter.js +163 -0
  194. package/dist/calendar/google-adapter.js.map +1 -0
  195. package/dist/calendar/index.d.ts +8 -0
  196. package/dist/calendar/index.d.ts.map +1 -0
  197. package/dist/calendar/index.js +7 -0
  198. package/dist/calendar/index.js.map +1 -0
  199. package/dist/calendar/routes.d.ts +7 -0
  200. package/dist/calendar/routes.d.ts.map +1 -0
  201. package/dist/calendar/routes.js +199 -0
  202. package/dist/calendar/routes.js.map +1 -0
  203. package/dist/calendar/store.d.ts +73 -0
  204. package/dist/calendar/store.d.ts.map +1 -0
  205. package/dist/calendar/store.js +373 -0
  206. package/dist/calendar/store.js.map +1 -0
  207. package/dist/calendar/types.d.ts +99 -0
  208. package/dist/calendar/types.d.ts.map +1 -0
  209. package/dist/calendar/types.js +7 -0
  210. package/dist/calendar/types.js.map +1 -0
  211. package/dist/capabilities/definitions/board.d.ts +7 -0
  212. package/dist/capabilities/definitions/board.d.ts.map +1 -0
  213. package/dist/capabilities/definitions/board.js +232 -0
  214. package/dist/capabilities/definitions/board.js.map +1 -0
  215. package/dist/capabilities/definitions/browser.d.ts +18 -0
  216. package/dist/capabilities/definitions/browser.d.ts.map +1 -0
  217. package/dist/capabilities/definitions/browser.js +242 -0
  218. package/dist/capabilities/definitions/browser.js.map +1 -0
  219. package/dist/capabilities/definitions/calendar-context.d.ts +8 -0
  220. package/dist/capabilities/definitions/calendar-context.d.ts.map +1 -0
  221. package/dist/capabilities/definitions/calendar-context.js +41 -0
  222. package/dist/capabilities/definitions/calendar-context.js.map +1 -0
  223. package/dist/capabilities/definitions/calendar.d.ts +7 -0
  224. package/dist/capabilities/definitions/calendar.d.ts.map +1 -0
  225. package/dist/capabilities/definitions/calendar.js +173 -0
  226. package/dist/capabilities/definitions/calendar.js.map +1 -0
  227. package/dist/capabilities/definitions/docs.d.ts +6 -0
  228. package/dist/capabilities/definitions/docs.d.ts.map +1 -0
  229. package/dist/capabilities/definitions/docs.js +62 -0
  230. package/dist/capabilities/definitions/docs.js.map +1 -0
  231. package/dist/capabilities/definitions/email-context.d.ts +7 -0
  232. package/dist/capabilities/definitions/email-context.d.ts.map +1 -0
  233. package/dist/capabilities/definitions/email-context.js +55 -0
  234. package/dist/capabilities/definitions/email-context.js.map +1 -0
  235. package/dist/capabilities/definitions/email.d.ts +7 -0
  236. package/dist/capabilities/definitions/email.d.ts.map +1 -0
  237. package/dist/capabilities/definitions/email.js +94 -0
  238. package/dist/capabilities/definitions/email.js.map +1 -0
  239. package/dist/capabilities/definitions/task-done.d.ts +10 -0
  240. package/dist/capabilities/definitions/task-done.d.ts.map +1 -0
  241. package/dist/capabilities/definitions/task-done.js +83 -0
  242. package/dist/capabilities/definitions/task-done.js.map +1 -0
  243. package/dist/capabilities/definitions/vault-context.d.ts +12 -0
  244. package/dist/capabilities/definitions/vault-context.d.ts.map +1 -0
  245. package/dist/capabilities/definitions/vault-context.js +62 -0
  246. package/dist/capabilities/definitions/vault-context.js.map +1 -0
  247. package/dist/capabilities/definitions/web-search-context.d.ts +22 -0
  248. package/dist/capabilities/definitions/web-search-context.d.ts.map +1 -0
  249. package/dist/capabilities/definitions/web-search-context.js +60 -0
  250. package/dist/capabilities/definitions/web-search-context.js.map +1 -0
  251. package/dist/capabilities/index.d.ts +18 -0
  252. package/dist/capabilities/index.d.ts.map +1 -0
  253. package/dist/capabilities/index.js +21 -0
  254. package/dist/capabilities/index.js.map +1 -0
  255. package/dist/capabilities/registry.d.ts +84 -0
  256. package/dist/capabilities/registry.d.ts.map +1 -0
  257. package/dist/capabilities/registry.js +248 -0
  258. package/dist/capabilities/registry.js.map +1 -0
  259. package/dist/capabilities/types.d.ts +157 -0
  260. package/dist/capabilities/types.d.ts.map +1 -0
  261. package/dist/capabilities/types.js +35 -0
  262. package/dist/capabilities/types.js.map +1 -0
  263. package/dist/channels/whatsapp.d.ts +88 -0
  264. package/dist/channels/whatsapp.d.ts.map +1 -0
  265. package/dist/channels/whatsapp.js +200 -0
  266. package/dist/channels/whatsapp.js.map +1 -0
  267. package/dist/cli/backup.d.ts +13 -0
  268. package/dist/cli/backup.d.ts.map +1 -0
  269. package/dist/cli/backup.js +176 -0
  270. package/dist/cli/backup.js.map +1 -0
  271. package/dist/cli.d.ts +12 -0
  272. package/dist/cli.d.ts.map +1 -0
  273. package/dist/cli.js +231 -0
  274. package/dist/cli.js.map +1 -0
  275. package/dist/config/defaults.d.ts +45 -0
  276. package/dist/config/defaults.d.ts.map +1 -0
  277. package/dist/config/defaults.js +54 -0
  278. package/dist/config/defaults.js.map +1 -0
  279. package/dist/contacts/index.d.ts +3 -0
  280. package/dist/contacts/index.d.ts.map +1 -0
  281. package/dist/contacts/index.js +2 -0
  282. package/dist/contacts/index.js.map +1 -0
  283. package/dist/contacts/store.d.ts +58 -0
  284. package/dist/contacts/store.d.ts.map +1 -0
  285. package/dist/contacts/store.js +278 -0
  286. package/dist/contacts/store.js.map +1 -0
  287. package/dist/contacts/types.d.ts +47 -0
  288. package/dist/contacts/types.d.ts.map +1 -0
  289. package/dist/contacts/types.js +5 -0
  290. package/dist/contacts/types.js.map +1 -0
  291. package/dist/context/assembler.d.ts +26 -0
  292. package/dist/context/assembler.d.ts.map +1 -0
  293. package/dist/context/assembler.js +65 -0
  294. package/dist/context/assembler.js.map +1 -0
  295. package/dist/context/compaction.d.ts +34 -0
  296. package/dist/context/compaction.d.ts.map +1 -0
  297. package/dist/context/compaction.js +84 -0
  298. package/dist/context/compaction.js.map +1 -0
  299. package/dist/context/index.d.ts +3 -0
  300. package/dist/context/index.d.ts.map +1 -0
  301. package/dist/context/index.js +2 -0
  302. package/dist/context/index.js.map +1 -0
  303. package/dist/core/registry/index.d.ts +12 -0
  304. package/dist/core/registry/index.d.ts.map +1 -0
  305. package/dist/core/registry/index.js +14 -0
  306. package/dist/core/registry/index.js.map +1 -0
  307. package/dist/core/registry/publisher.d.ts +22 -0
  308. package/dist/core/registry/publisher.d.ts.map +1 -0
  309. package/dist/core/registry/publisher.js +195 -0
  310. package/dist/core/registry/publisher.js.map +1 -0
  311. package/dist/core/registry/registry.d.ts +92 -0
  312. package/dist/core/registry/registry.d.ts.map +1 -0
  313. package/dist/core/registry/registry.js +254 -0
  314. package/dist/core/registry/registry.js.map +1 -0
  315. package/dist/core/registry/search.d.ts +12 -0
  316. package/dist/core/registry/search.d.ts.map +1 -0
  317. package/dist/core/registry/search.js +132 -0
  318. package/dist/core/registry/search.js.map +1 -0
  319. package/dist/core/registry/store.d.ts +55 -0
  320. package/dist/core/registry/store.d.ts.map +1 -0
  321. package/dist/core/registry/store.js +185 -0
  322. package/dist/core/registry/store.js.map +1 -0
  323. package/dist/core/registry/types.d.ts +141 -0
  324. package/dist/core/registry/types.d.ts.map +1 -0
  325. package/dist/core/registry/types.js +30 -0
  326. package/dist/core/registry/types.js.map +1 -0
  327. package/dist/core/registry/versions.d.ts +56 -0
  328. package/dist/core/registry/versions.d.ts.map +1 -0
  329. package/dist/core/registry/versions.js +101 -0
  330. package/dist/core/registry/versions.js.map +1 -0
  331. package/dist/credentials/store.d.ts +59 -0
  332. package/dist/credentials/store.d.ts.map +1 -0
  333. package/dist/credentials/store.js +178 -0
  334. package/dist/credentials/store.js.map +1 -0
  335. package/dist/files/agent-api.d.ts +50 -0
  336. package/dist/files/agent-api.d.ts.map +1 -0
  337. package/dist/files/agent-api.js +126 -0
  338. package/dist/files/agent-api.js.map +1 -0
  339. package/dist/files/compress.d.ts +20 -0
  340. package/dist/files/compress.d.ts.map +1 -0
  341. package/dist/files/compress.js +83 -0
  342. package/dist/files/compress.js.map +1 -0
  343. package/dist/files/extract.d.ts +11 -0
  344. package/dist/files/extract.d.ts.map +1 -0
  345. package/dist/files/extract.js +33 -0
  346. package/dist/files/extract.js.map +1 -0
  347. package/dist/files/gdrive.d.ts +56 -0
  348. package/dist/files/gdrive.d.ts.map +1 -0
  349. package/dist/files/gdrive.js +246 -0
  350. package/dist/files/gdrive.js.map +1 -0
  351. package/dist/files/ingest-folder.d.ts +22 -0
  352. package/dist/files/ingest-folder.d.ts.map +1 -0
  353. package/dist/files/ingest-folder.js +71 -0
  354. package/dist/files/ingest-folder.js.map +1 -0
  355. package/dist/files/ingest.d.ts +13 -0
  356. package/dist/files/ingest.d.ts.map +1 -0
  357. package/dist/files/ingest.js +127 -0
  358. package/dist/files/ingest.js.map +1 -0
  359. package/dist/files/manager.d.ts +117 -0
  360. package/dist/files/manager.d.ts.map +1 -0
  361. package/dist/files/manager.js +306 -0
  362. package/dist/files/manager.js.map +1 -0
  363. package/dist/files/store.d.ts +41 -0
  364. package/dist/files/store.d.ts.map +1 -0
  365. package/dist/files/store.js +271 -0
  366. package/dist/files/store.js.map +1 -0
  367. package/dist/files/templates.d.ts +45 -0
  368. package/dist/files/templates.d.ts.map +1 -0
  369. package/dist/files/templates.js +179 -0
  370. package/dist/files/templates.js.map +1 -0
  371. package/dist/files/types.d.ts +115 -0
  372. package/dist/files/types.d.ts.map +1 -0
  373. package/dist/files/types.js +20 -0
  374. package/dist/files/types.js.map +1 -0
  375. package/dist/files/validate.d.ts +15 -0
  376. package/dist/files/validate.d.ts.map +1 -0
  377. package/dist/files/validate.js +213 -0
  378. package/dist/files/validate.js.map +1 -0
  379. package/dist/files/version.d.ts +31 -0
  380. package/dist/files/version.d.ts.map +1 -0
  381. package/dist/files/version.js +129 -0
  382. package/dist/files/version.js.map +1 -0
  383. package/dist/github/client.d.ts +83 -0
  384. package/dist/github/client.d.ts.map +1 -0
  385. package/dist/github/client.js +408 -0
  386. package/dist/github/client.js.map +1 -0
  387. package/dist/github/commit-analysis.d.ts +30 -0
  388. package/dist/github/commit-analysis.d.ts.map +1 -0
  389. package/dist/github/commit-analysis.js +276 -0
  390. package/dist/github/commit-analysis.js.map +1 -0
  391. package/dist/github/contributor-stats.d.ts +18 -0
  392. package/dist/github/contributor-stats.d.ts.map +1 -0
  393. package/dist/github/contributor-stats.js +119 -0
  394. package/dist/github/contributor-stats.js.map +1 -0
  395. package/dist/github/issue-sla.d.ts +25 -0
  396. package/dist/github/issue-sla.d.ts.map +1 -0
  397. package/dist/github/issue-sla.js +220 -0
  398. package/dist/github/issue-sla.js.map +1 -0
  399. package/dist/github/issue-triage.d.ts +49 -0
  400. package/dist/github/issue-triage.d.ts.map +1 -0
  401. package/dist/github/issue-triage.js +286 -0
  402. package/dist/github/issue-triage.js.map +1 -0
  403. package/dist/github/pr-readiness.d.ts +18 -0
  404. package/dist/github/pr-readiness.d.ts.map +1 -0
  405. package/dist/github/pr-readiness.js +197 -0
  406. package/dist/github/pr-readiness.js.map +1 -0
  407. package/dist/github/pr-review.d.ts +17 -0
  408. package/dist/github/pr-review.d.ts.map +1 -0
  409. package/dist/github/pr-review.js +410 -0
  410. package/dist/github/pr-review.js.map +1 -0
  411. package/dist/github/release-notes.d.ts +32 -0
  412. package/dist/github/release-notes.d.ts.map +1 -0
  413. package/dist/github/release-notes.js +227 -0
  414. package/dist/github/release-notes.js.map +1 -0
  415. package/dist/github/repo-health.d.ts +17 -0
  416. package/dist/github/repo-health.d.ts.map +1 -0
  417. package/dist/github/repo-health.js +303 -0
  418. package/dist/github/repo-health.js.map +1 -0
  419. package/dist/github/retry.d.ts +39 -0
  420. package/dist/github/retry.d.ts.map +1 -0
  421. package/dist/github/retry.js +117 -0
  422. package/dist/github/retry.js.map +1 -0
  423. package/dist/github/types.d.ts +527 -0
  424. package/dist/github/types.d.ts.map +1 -0
  425. package/dist/github/types.js +8 -0
  426. package/dist/github/types.js.map +1 -0
  427. package/dist/github/webhooks.d.ts +36 -0
  428. package/dist/github/webhooks.d.ts.map +1 -0
  429. package/dist/github/webhooks.js +153 -0
  430. package/dist/github/webhooks.js.map +1 -0
  431. package/dist/goals/loop.d.ts +27 -0
  432. package/dist/goals/loop.d.ts.map +1 -0
  433. package/dist/goals/loop.js +239 -0
  434. package/dist/goals/loop.js.map +1 -0
  435. package/dist/goals/notifications.d.ts +20 -0
  436. package/dist/goals/notifications.d.ts.map +1 -0
  437. package/dist/goals/notifications.js +101 -0
  438. package/dist/goals/notifications.js.map +1 -0
  439. package/dist/goals/timer.d.ts +21 -0
  440. package/dist/goals/timer.d.ts.map +1 -0
  441. package/dist/goals/timer.js +60 -0
  442. package/dist/goals/timer.js.map +1 -0
  443. package/dist/google/auth.d.ts +84 -0
  444. package/dist/google/auth.d.ts.map +1 -0
  445. package/dist/google/auth.js +323 -0
  446. package/dist/google/auth.js.map +1 -0
  447. package/dist/google/calendar-timer.d.ts +20 -0
  448. package/dist/google/calendar-timer.d.ts.map +1 -0
  449. package/dist/google/calendar-timer.js +91 -0
  450. package/dist/google/calendar-timer.js.map +1 -0
  451. package/dist/google/calendar.d.ts +126 -0
  452. package/dist/google/calendar.d.ts.map +1 -0
  453. package/dist/google/calendar.js +270 -0
  454. package/dist/google/calendar.js.map +1 -0
  455. package/dist/google/docs.d.ts +87 -0
  456. package/dist/google/docs.d.ts.map +1 -0
  457. package/dist/google/docs.js +309 -0
  458. package/dist/google/docs.js.map +1 -0
  459. package/dist/google/gmail-send.d.ts +58 -0
  460. package/dist/google/gmail-send.d.ts.map +1 -0
  461. package/dist/google/gmail-send.js +219 -0
  462. package/dist/google/gmail-send.js.map +1 -0
  463. package/dist/google/gmail-timer.d.ts +34 -0
  464. package/dist/google/gmail-timer.d.ts.map +1 -0
  465. package/dist/google/gmail-timer.js +223 -0
  466. package/dist/google/gmail-timer.js.map +1 -0
  467. package/dist/google/gmail.d.ts +172 -0
  468. package/dist/google/gmail.d.ts.map +1 -0
  469. package/dist/google/gmail.js +470 -0
  470. package/dist/google/gmail.js.map +1 -0
  471. package/dist/google/tasks-timer.d.ts +20 -0
  472. package/dist/google/tasks-timer.d.ts.map +1 -0
  473. package/dist/google/tasks-timer.js +107 -0
  474. package/dist/google/tasks-timer.js.map +1 -0
  475. package/dist/google/tasks.d.ts +167 -0
  476. package/dist/google/tasks.d.ts.map +1 -0
  477. package/dist/google/tasks.js +331 -0
  478. package/dist/google/tasks.js.map +1 -0
  479. package/dist/google/temporal.d.ts +76 -0
  480. package/dist/google/temporal.d.ts.map +1 -0
  481. package/dist/google/temporal.js +176 -0
  482. package/dist/google/temporal.js.map +1 -0
  483. package/dist/health/alert-defaults.d.ts +12 -0
  484. package/dist/health/alert-defaults.d.ts.map +1 -0
  485. package/dist/health/alert-defaults.js +88 -0
  486. package/dist/health/alert-defaults.js.map +1 -0
  487. package/dist/health/alert-types.d.ts +97 -0
  488. package/dist/health/alert-types.d.ts.map +1 -0
  489. package/dist/health/alert-types.js +8 -0
  490. package/dist/health/alert-types.js.map +1 -0
  491. package/dist/health/alerting.d.ts +66 -0
  492. package/dist/health/alerting.d.ts.map +1 -0
  493. package/dist/health/alerting.js +373 -0
  494. package/dist/health/alerting.js.map +1 -0
  495. package/dist/health/checker.d.ts +32 -0
  496. package/dist/health/checker.d.ts.map +1 -0
  497. package/dist/health/checker.js +138 -0
  498. package/dist/health/checker.js.map +1 -0
  499. package/dist/health/checks/openrouter.d.ts +29 -0
  500. package/dist/health/checks/openrouter.d.ts.map +1 -0
  501. package/dist/health/checks/openrouter.js +75 -0
  502. package/dist/health/checks/openrouter.js.map +1 -0
  503. package/dist/health/checks.d.ts +26 -0
  504. package/dist/health/checks.d.ts.map +1 -0
  505. package/dist/health/checks.js +122 -0
  506. package/dist/health/checks.js.map +1 -0
  507. package/dist/health/components.d.ts +38 -0
  508. package/dist/health/components.d.ts.map +1 -0
  509. package/dist/health/components.js +112 -0
  510. package/dist/health/components.js.map +1 -0
  511. package/dist/health/index.d.ts +19 -0
  512. package/dist/health/index.d.ts.map +1 -0
  513. package/dist/health/index.js +23 -0
  514. package/dist/health/index.js.map +1 -0
  515. package/dist/health/recovery.d.ts +42 -0
  516. package/dist/health/recovery.d.ts.map +1 -0
  517. package/dist/health/recovery.js +138 -0
  518. package/dist/health/recovery.js.map +1 -0
  519. package/dist/health/types.d.ts +68 -0
  520. package/dist/health/types.d.ts.map +1 -0
  521. package/dist/health/types.js +5 -0
  522. package/dist/health/types.js.map +1 -0
  523. package/dist/index.d.ts +25 -0
  524. package/dist/index.d.ts.map +1 -0
  525. package/dist/index.js +22 -0
  526. package/dist/index.js.map +1 -0
  527. package/dist/instance.d.ts +24 -0
  528. package/dist/instance.d.ts.map +1 -0
  529. package/dist/instance.js +48 -0
  530. package/dist/instance.js.map +1 -0
  531. package/dist/integrations/github.d.ts +83 -0
  532. package/dist/integrations/github.d.ts.map +1 -0
  533. package/dist/integrations/github.js +331 -0
  534. package/dist/integrations/github.js.map +1 -0
  535. package/dist/integrations/google-tasks.d.ts +232 -0
  536. package/dist/integrations/google-tasks.d.ts.map +1 -0
  537. package/dist/integrations/google-tasks.js +432 -0
  538. package/dist/integrations/google-tasks.js.map +1 -0
  539. package/dist/learning/extractor.d.ts +28 -0
  540. package/dist/learning/extractor.d.ts.map +1 -0
  541. package/dist/learning/extractor.js +135 -0
  542. package/dist/learning/extractor.js.map +1 -0
  543. package/dist/lib/BasePlugin.d.ts +58 -0
  544. package/dist/lib/BasePlugin.d.ts.map +1 -0
  545. package/dist/lib/BasePlugin.js +181 -0
  546. package/dist/lib/BasePlugin.js.map +1 -0
  547. package/dist/lib/PluginRegistry.d.ts +56 -0
  548. package/dist/lib/PluginRegistry.d.ts.map +1 -0
  549. package/dist/lib/PluginRegistry.js +172 -0
  550. package/dist/lib/PluginRegistry.js.map +1 -0
  551. package/dist/lib/brain-io.d.ts +60 -0
  552. package/dist/lib/brain-io.d.ts.map +1 -0
  553. package/dist/lib/brain-io.js +180 -0
  554. package/dist/lib/brain-io.js.map +1 -0
  555. package/dist/lib/encryption-config.d.ts +16 -0
  556. package/dist/lib/encryption-config.d.ts.map +1 -0
  557. package/dist/lib/encryption-config.js +40 -0
  558. package/dist/lib/encryption-config.js.map +1 -0
  559. package/dist/lib/encryption.d.ts +19 -0
  560. package/dist/lib/encryption.d.ts.map +1 -0
  561. package/dist/lib/encryption.js +65 -0
  562. package/dist/lib/encryption.js.map +1 -0
  563. package/dist/lib/key-store.d.ts +24 -0
  564. package/dist/lib/key-store.d.ts.map +1 -0
  565. package/dist/lib/key-store.js +38 -0
  566. package/dist/lib/key-store.js.map +1 -0
  567. package/dist/lib/schema-migration.d.ts +34 -0
  568. package/dist/lib/schema-migration.d.ts.map +1 -0
  569. package/dist/lib/schema-migration.js +77 -0
  570. package/dist/lib/schema-migration.js.map +1 -0
  571. package/dist/library/brain-shadow.d.ts +10 -0
  572. package/dist/library/brain-shadow.d.ts.map +1 -0
  573. package/dist/library/brain-shadow.js +158 -0
  574. package/dist/library/brain-shadow.js.map +1 -0
  575. package/dist/library/index.d.ts +7 -0
  576. package/dist/library/index.d.ts.map +1 -0
  577. package/dist/library/index.js +6 -0
  578. package/dist/library/index.js.map +1 -0
  579. package/dist/library/routes.d.ts +7 -0
  580. package/dist/library/routes.d.ts.map +1 -0
  581. package/dist/library/routes.js +473 -0
  582. package/dist/library/routes.js.map +1 -0
  583. package/dist/library/store.d.ts +54 -0
  584. package/dist/library/store.d.ts.map +1 -0
  585. package/dist/library/store.js +403 -0
  586. package/dist/library/store.js.map +1 -0
  587. package/dist/library/types.d.ts +56 -0
  588. package/dist/library/types.d.ts.map +1 -0
  589. package/dist/library/types.js +12 -0
  590. package/dist/library/types.js.map +1 -0
  591. package/dist/llm/cache.d.ts +42 -0
  592. package/dist/llm/cache.d.ts.map +1 -0
  593. package/dist/llm/cache.js +104 -0
  594. package/dist/llm/cache.js.map +1 -0
  595. package/dist/llm/complete.d.ts +24 -0
  596. package/dist/llm/complete.d.ts.map +1 -0
  597. package/dist/llm/complete.js +56 -0
  598. package/dist/llm/complete.js.map +1 -0
  599. package/dist/llm/errors.d.ts +28 -0
  600. package/dist/llm/errors.d.ts.map +1 -0
  601. package/dist/llm/errors.js +82 -0
  602. package/dist/llm/errors.js.map +1 -0
  603. package/dist/llm/ollama.d.ts +21 -0
  604. package/dist/llm/ollama.d.ts.map +1 -0
  605. package/dist/llm/ollama.js +116 -0
  606. package/dist/llm/ollama.js.map +1 -0
  607. package/dist/llm/openrouter.d.ts +13 -0
  608. package/dist/llm/openrouter.d.ts.map +1 -0
  609. package/dist/llm/openrouter.js +105 -0
  610. package/dist/llm/openrouter.js.map +1 -0
  611. package/dist/llm/providers/anthropic.d.ts +8 -0
  612. package/dist/llm/providers/anthropic.d.ts.map +1 -0
  613. package/dist/llm/providers/anthropic.js +189 -0
  614. package/dist/llm/providers/anthropic.js.map +1 -0
  615. package/dist/llm/providers/index.d.ts +20 -0
  616. package/dist/llm/providers/index.d.ts.map +1 -0
  617. package/dist/llm/providers/index.js +47 -0
  618. package/dist/llm/providers/index.js.map +1 -0
  619. package/dist/llm/providers/ollama.d.ts +13 -0
  620. package/dist/llm/providers/ollama.d.ts.map +1 -0
  621. package/dist/llm/providers/ollama.js +188 -0
  622. package/dist/llm/providers/ollama.js.map +1 -0
  623. package/dist/llm/providers/openai.d.ts +8 -0
  624. package/dist/llm/providers/openai.d.ts.map +1 -0
  625. package/dist/llm/providers/openai.js +144 -0
  626. package/dist/llm/providers/openai.js.map +1 -0
  627. package/dist/llm/providers/openrouter.d.ts +7 -0
  628. package/dist/llm/providers/openrouter.d.ts.map +1 -0
  629. package/dist/llm/providers/openrouter.js +158 -0
  630. package/dist/llm/providers/openrouter.js.map +1 -0
  631. package/dist/llm/providers/types.d.ts +29 -0
  632. package/dist/llm/providers/types.d.ts.map +1 -0
  633. package/dist/llm/providers/types.js +6 -0
  634. package/dist/llm/providers/types.js.map +1 -0
  635. package/dist/llm/retry.d.ts +29 -0
  636. package/dist/llm/retry.d.ts.map +1 -0
  637. package/dist/llm/retry.js +139 -0
  638. package/dist/llm/retry.js.map +1 -0
  639. package/dist/memory/file-backed.d.ts +36 -0
  640. package/dist/memory/file-backed.d.ts.map +1 -0
  641. package/dist/memory/file-backed.js +178 -0
  642. package/dist/memory/file-backed.js.map +1 -0
  643. package/dist/memory/index.d.ts +7 -0
  644. package/dist/memory/index.d.ts.map +1 -0
  645. package/dist/memory/index.js +6 -0
  646. package/dist/memory/index.js.map +1 -0
  647. package/dist/memory/long-term.d.ts +38 -0
  648. package/dist/memory/long-term.d.ts.map +1 -0
  649. package/dist/memory/long-term.js +58 -0
  650. package/dist/memory/long-term.js.map +1 -0
  651. package/dist/memory/vector-index.d.ts +55 -0
  652. package/dist/memory/vector-index.d.ts.map +1 -0
  653. package/dist/memory/vector-index.js +207 -0
  654. package/dist/memory/vector-index.js.map +1 -0
  655. package/dist/memory/visual.d.ts +53 -0
  656. package/dist/memory/visual.d.ts.map +1 -0
  657. package/dist/memory/visual.js +218 -0
  658. package/dist/memory/visual.js.map +1 -0
  659. package/dist/memory/working.d.ts +12 -0
  660. package/dist/memory/working.d.ts.map +1 -0
  661. package/dist/memory/working.js +34 -0
  662. package/dist/memory/working.js.map +1 -0
  663. package/dist/metrics/aggregator.d.ts +58 -0
  664. package/dist/metrics/aggregator.d.ts.map +1 -0
  665. package/dist/metrics/aggregator.js +253 -0
  666. package/dist/metrics/aggregator.js.map +1 -0
  667. package/dist/metrics/collector.d.ts +26 -0
  668. package/dist/metrics/collector.d.ts.map +1 -0
  669. package/dist/metrics/collector.js +346 -0
  670. package/dist/metrics/collector.js.map +1 -0
  671. package/dist/metrics/firewall-metrics.d.ts +95 -0
  672. package/dist/metrics/firewall-metrics.d.ts.map +1 -0
  673. package/dist/metrics/firewall-metrics.js +261 -0
  674. package/dist/metrics/firewall-metrics.js.map +1 -0
  675. package/dist/metrics/index.d.ts +20 -0
  676. package/dist/metrics/index.d.ts.map +1 -0
  677. package/dist/metrics/index.js +23 -0
  678. package/dist/metrics/index.js.map +1 -0
  679. package/dist/metrics/instruments.d.ts +89 -0
  680. package/dist/metrics/instruments.d.ts.map +1 -0
  681. package/dist/metrics/instruments.js +172 -0
  682. package/dist/metrics/instruments.js.map +1 -0
  683. package/dist/metrics/middleware.d.ts +12 -0
  684. package/dist/metrics/middleware.d.ts.map +1 -0
  685. package/dist/metrics/middleware.js +47 -0
  686. package/dist/metrics/middleware.js.map +1 -0
  687. package/dist/metrics/prometheus.d.ts +39 -0
  688. package/dist/metrics/prometheus.d.ts.map +1 -0
  689. package/dist/metrics/prometheus.js +115 -0
  690. package/dist/metrics/prometheus.js.map +1 -0
  691. package/dist/metrics/registry.d.ts +58 -0
  692. package/dist/metrics/registry.d.ts.map +1 -0
  693. package/dist/metrics/registry.js +145 -0
  694. package/dist/metrics/registry.js.map +1 -0
  695. package/dist/metrics/reporter.d.ts +21 -0
  696. package/dist/metrics/reporter.d.ts.map +1 -0
  697. package/dist/metrics/reporter.js +207 -0
  698. package/dist/metrics/reporter.js.map +1 -0
  699. package/dist/metrics/store.d.ts +47 -0
  700. package/dist/metrics/store.d.ts.map +1 -0
  701. package/dist/metrics/store.js +209 -0
  702. package/dist/metrics/store.js.map +1 -0
  703. package/dist/metrics/system.d.ts +20 -0
  704. package/dist/metrics/system.d.ts.map +1 -0
  705. package/dist/metrics/system.js +109 -0
  706. package/dist/metrics/system.js.map +1 -0
  707. package/dist/metrics/types.d.ts +101 -0
  708. package/dist/metrics/types.d.ts.map +1 -0
  709. package/dist/metrics/types.js +6 -0
  710. package/dist/metrics/types.js.map +1 -0
  711. package/dist/modules/index.d.ts +6 -0
  712. package/dist/modules/index.d.ts.map +1 -0
  713. package/dist/modules/index.js +6 -0
  714. package/dist/modules/index.js.map +1 -0
  715. package/dist/modules/registry.d.ts +36 -0
  716. package/dist/modules/registry.d.ts.map +1 -0
  717. package/dist/modules/registry.js +155 -0
  718. package/dist/modules/registry.js.map +1 -0
  719. package/dist/modules/types.d.ts +37 -0
  720. package/dist/modules/types.d.ts.map +1 -0
  721. package/dist/modules/types.js +9 -0
  722. package/dist/modules/types.js.map +1 -0
  723. package/dist/notifications/channel.d.ts +25 -0
  724. package/dist/notifications/channel.d.ts.map +1 -0
  725. package/dist/notifications/channel.js +83 -0
  726. package/dist/notifications/channel.js.map +1 -0
  727. package/dist/notifications/email.d.ts +27 -0
  728. package/dist/notifications/email.d.ts.map +1 -0
  729. package/dist/notifications/email.js +72 -0
  730. package/dist/notifications/email.js.map +1 -0
  731. package/dist/notifications/index.d.ts +16 -0
  732. package/dist/notifications/index.d.ts.map +1 -0
  733. package/dist/notifications/index.js +12 -0
  734. package/dist/notifications/index.js.map +1 -0
  735. package/dist/notifications/phone.d.ts +16 -0
  736. package/dist/notifications/phone.d.ts.map +1 -0
  737. package/dist/notifications/phone.js +48 -0
  738. package/dist/notifications/phone.js.map +1 -0
  739. package/dist/notifications/sms.d.ts +26 -0
  740. package/dist/notifications/sms.d.ts.map +1 -0
  741. package/dist/notifications/sms.js +65 -0
  742. package/dist/notifications/sms.js.map +1 -0
  743. package/dist/notifications/webhook.d.ts +28 -0
  744. package/dist/notifications/webhook.d.ts.map +1 -0
  745. package/dist/notifications/webhook.js +65 -0
  746. package/dist/notifications/webhook.js.map +1 -0
  747. package/dist/openloop/foldback.d.ts +24 -0
  748. package/dist/openloop/foldback.d.ts.map +1 -0
  749. package/dist/openloop/foldback.js +127 -0
  750. package/dist/openloop/foldback.js.map +1 -0
  751. package/dist/openloop/index.d.ts +11 -0
  752. package/dist/openloop/index.d.ts.map +1 -0
  753. package/dist/openloop/index.js +9 -0
  754. package/dist/openloop/index.js.map +1 -0
  755. package/dist/openloop/lifecycle.d.ts +16 -0
  756. package/dist/openloop/lifecycle.d.ts.map +1 -0
  757. package/dist/openloop/lifecycle.js +304 -0
  758. package/dist/openloop/lifecycle.js.map +1 -0
  759. package/dist/openloop/resolution-scanner.d.ts +17 -0
  760. package/dist/openloop/resolution-scanner.d.ts.map +1 -0
  761. package/dist/openloop/resolution-scanner.js +551 -0
  762. package/dist/openloop/resolution-scanner.js.map +1 -0
  763. package/dist/openloop/scanner.d.ts +28 -0
  764. package/dist/openloop/scanner.d.ts.map +1 -0
  765. package/dist/openloop/scanner.js +587 -0
  766. package/dist/openloop/scanner.js.map +1 -0
  767. package/dist/openloop/store.d.ts +41 -0
  768. package/dist/openloop/store.d.ts.map +1 -0
  769. package/dist/openloop/store.js +154 -0
  770. package/dist/openloop/store.js.map +1 -0
  771. package/dist/openloop/types.d.ts +94 -0
  772. package/dist/openloop/types.d.ts.map +1 -0
  773. package/dist/openloop/types.js +6 -0
  774. package/dist/openloop/types.js.map +1 -0
  775. package/dist/plugins/google-tasks/index.d.ts +55 -0
  776. package/dist/plugins/google-tasks/index.d.ts.map +1 -0
  777. package/dist/plugins/google-tasks/index.js +135 -0
  778. package/dist/plugins/google-tasks/index.js.map +1 -0
  779. package/dist/pulse/activation-event.d.ts +66 -0
  780. package/dist/pulse/activation-event.d.ts.map +1 -0
  781. package/dist/pulse/activation-event.js +139 -0
  782. package/dist/pulse/activation-event.js.map +1 -0
  783. package/dist/pulse/activation-log.d.ts +37 -0
  784. package/dist/pulse/activation-log.d.ts.map +1 -0
  785. package/dist/pulse/activation-log.js +101 -0
  786. package/dist/pulse/activation-log.js.map +1 -0
  787. package/dist/pulse/index.d.ts +11 -0
  788. package/dist/pulse/index.d.ts.map +1 -0
  789. package/dist/pulse/index.js +13 -0
  790. package/dist/pulse/index.js.map +1 -0
  791. package/dist/pulse/pressure.d.ts +69 -0
  792. package/dist/pulse/pressure.d.ts.map +1 -0
  793. package/dist/pulse/pressure.js +304 -0
  794. package/dist/pulse/pressure.js.map +1 -0
  795. package/dist/pulse/types.d.ts +89 -0
  796. package/dist/pulse/types.d.ts.map +1 -0
  797. package/dist/pulse/types.js +6 -0
  798. package/dist/pulse/types.js.map +1 -0
  799. package/dist/queue/grooming.d.ts +16 -0
  800. package/dist/queue/grooming.d.ts.map +1 -0
  801. package/dist/queue/grooming.js +269 -0
  802. package/dist/queue/grooming.js.map +1 -0
  803. package/dist/queue/provider.d.ts +50 -0
  804. package/dist/queue/provider.d.ts.map +1 -0
  805. package/dist/queue/provider.js +131 -0
  806. package/dist/queue/provider.js.map +1 -0
  807. package/dist/queue/store.d.ts +97 -0
  808. package/dist/queue/store.d.ts.map +1 -0
  809. package/dist/queue/store.js +448 -0
  810. package/dist/queue/store.js.map +1 -0
  811. package/dist/queue/types.d.ts +47 -0
  812. package/dist/queue/types.d.ts.map +1 -0
  813. package/dist/queue/types.js +22 -0
  814. package/dist/queue/types.js.map +1 -0
  815. package/dist/rate-limit.d.ts +26 -0
  816. package/dist/rate-limit.d.ts.map +1 -0
  817. package/dist/rate-limit.js +74 -0
  818. package/dist/rate-limit.js.map +1 -0
  819. package/dist/registry/discovery.d.ts +30 -0
  820. package/dist/registry/discovery.d.ts.map +1 -0
  821. package/dist/registry/discovery.js +171 -0
  822. package/dist/registry/discovery.js.map +1 -0
  823. package/dist/registry/index.d.ts +14 -0
  824. package/dist/registry/index.d.ts.map +1 -0
  825. package/dist/registry/index.js +18 -0
  826. package/dist/registry/index.js.map +1 -0
  827. package/dist/registry/installer.d.ts +45 -0
  828. package/dist/registry/installer.d.ts.map +1 -0
  829. package/dist/registry/installer.js +175 -0
  830. package/dist/registry/installer.js.map +1 -0
  831. package/dist/registry/registry.d.ts +70 -0
  832. package/dist/registry/registry.d.ts.map +1 -0
  833. package/dist/registry/registry.js +153 -0
  834. package/dist/registry/registry.js.map +1 -0
  835. package/dist/registry/store.d.ts +69 -0
  836. package/dist/registry/store.d.ts.map +1 -0
  837. package/dist/registry/store.js +242 -0
  838. package/dist/registry/store.js.map +1 -0
  839. package/dist/registry/types.d.ts +116 -0
  840. package/dist/registry/types.d.ts.map +1 -0
  841. package/dist/registry/types.js +9 -0
  842. package/dist/registry/types.js.map +1 -0
  843. package/dist/registry/validator.d.ts +24 -0
  844. package/dist/registry/validator.d.ts.map +1 -0
  845. package/dist/registry/validator.js +203 -0
  846. package/dist/registry/validator.js.map +1 -0
  847. package/dist/scheduling/index.d.ts +4 -0
  848. package/dist/scheduling/index.d.ts.map +1 -0
  849. package/dist/scheduling/index.js +3 -0
  850. package/dist/scheduling/index.js.map +1 -0
  851. package/dist/scheduling/store.d.ts +41 -0
  852. package/dist/scheduling/store.d.ts.map +1 -0
  853. package/dist/scheduling/store.js +237 -0
  854. package/dist/scheduling/store.js.map +1 -0
  855. package/dist/scheduling/timer.d.ts +25 -0
  856. package/dist/scheduling/timer.d.ts.map +1 -0
  857. package/dist/scheduling/timer.js +118 -0
  858. package/dist/scheduling/timer.js.map +1 -0
  859. package/dist/scheduling/types.d.ts +43 -0
  860. package/dist/scheduling/types.d.ts.map +1 -0
  861. package/dist/scheduling/types.js +5 -0
  862. package/dist/scheduling/types.js.map +1 -0
  863. package/dist/search/brain-docs.d.ts +20 -0
  864. package/dist/search/brain-docs.d.ts.map +1 -0
  865. package/dist/search/brain-docs.js +103 -0
  866. package/dist/search/brain-docs.js.map +1 -0
  867. package/dist/search/browse.d.ts +45 -0
  868. package/dist/search/browse.d.ts.map +1 -0
  869. package/dist/search/browse.js +225 -0
  870. package/dist/search/browse.js.map +1 -0
  871. package/dist/search/classify.d.ts +23 -0
  872. package/dist/search/classify.d.ts.map +1 -0
  873. package/dist/search/classify.js +132 -0
  874. package/dist/search/classify.js.map +1 -0
  875. package/dist/search/client.d.ts +32 -0
  876. package/dist/search/client.d.ts.map +1 -0
  877. package/dist/search/client.js +72 -0
  878. package/dist/search/client.js.map +1 -0
  879. package/dist/search/perplexity.d.ts +13 -0
  880. package/dist/search/perplexity.d.ts.map +1 -0
  881. package/dist/search/perplexity.js +41 -0
  882. package/dist/search/perplexity.js.map +1 -0
  883. package/dist/search/sidecar.d.ts +20 -0
  884. package/dist/search/sidecar.d.ts.map +1 -0
  885. package/dist/search/sidecar.js +103 -0
  886. package/dist/search/sidecar.js.map +1 -0
  887. package/dist/server.d.ts +8 -0
  888. package/dist/server.d.ts.map +1 -0
  889. package/dist/server.js +4851 -0
  890. package/dist/server.js.map +1 -0
  891. package/dist/services/backlogReview.d.ts +66 -0
  892. package/dist/services/backlogReview.d.ts.map +1 -0
  893. package/dist/services/backlogReview.js +285 -0
  894. package/dist/services/backlogReview.js.map +1 -0
  895. package/dist/services/backup.d.ts +43 -0
  896. package/dist/services/backup.d.ts.map +1 -0
  897. package/dist/services/backup.js +334 -0
  898. package/dist/services/backup.js.map +1 -0
  899. package/dist/services/credit-monitor.d.ts +40 -0
  900. package/dist/services/credit-monitor.d.ts.map +1 -0
  901. package/dist/services/credit-monitor.js +147 -0
  902. package/dist/services/credit-monitor.js.map +1 -0
  903. package/dist/services/morningBriefing.d.ts +125 -0
  904. package/dist/services/morningBriefing.d.ts.map +1 -0
  905. package/dist/services/morningBriefing.js +660 -0
  906. package/dist/services/morningBriefing.js.map +1 -0
  907. package/dist/services/routine-patterns.d.ts +21 -0
  908. package/dist/services/routine-patterns.d.ts.map +1 -0
  909. package/dist/services/routine-patterns.js +46 -0
  910. package/dist/services/routine-patterns.js.map +1 -0
  911. package/dist/services/traceInsights.d.ts +53 -0
  912. package/dist/services/traceInsights.d.ts.map +1 -0
  913. package/dist/services/traceInsights.js +762 -0
  914. package/dist/services/traceInsights.js.map +1 -0
  915. package/dist/services/training.d.ts +63 -0
  916. package/dist/services/training.d.ts.map +1 -0
  917. package/dist/services/training.js +697 -0
  918. package/dist/services/training.js.map +1 -0
  919. package/dist/services/whatsapp.d.ts +45 -0
  920. package/dist/services/whatsapp.d.ts.map +1 -0
  921. package/dist/services/whatsapp.js +194 -0
  922. package/dist/services/whatsapp.js.map +1 -0
  923. package/dist/sessions/store.d.ts +21 -0
  924. package/dist/sessions/store.d.ts.map +1 -0
  925. package/dist/sessions/store.js +47 -0
  926. package/dist/sessions/store.js.map +1 -0
  927. package/dist/settings.d.ts +111 -0
  928. package/dist/settings.d.ts.map +1 -0
  929. package/dist/settings.js +256 -0
  930. package/dist/settings.js.map +1 -0
  931. package/dist/skills/index.d.ts +10 -0
  932. package/dist/skills/index.d.ts.map +1 -0
  933. package/dist/skills/index.js +11 -0
  934. package/dist/skills/index.js.map +1 -0
  935. package/dist/skills/loader.d.ts +22 -0
  936. package/dist/skills/loader.d.ts.map +1 -0
  937. package/dist/skills/loader.js +65 -0
  938. package/dist/skills/loader.js.map +1 -0
  939. package/dist/skills/registry.d.ts +161 -0
  940. package/dist/skills/registry.d.ts.map +1 -0
  941. package/dist/skills/registry.js +664 -0
  942. package/dist/skills/registry.js.map +1 -0
  943. package/dist/skills/types.d.ts +83 -0
  944. package/dist/skills/types.d.ts.map +1 -0
  945. package/dist/skills/types.js +31 -0
  946. package/dist/skills/types.js.map +1 -0
  947. package/dist/skills/validator.d.ts +36 -0
  948. package/dist/skills/validator.d.ts.map +1 -0
  949. package/dist/skills/validator.js +114 -0
  950. package/dist/skills/validator.js.map +1 -0
  951. package/dist/slack/channels.d.ts +102 -0
  952. package/dist/slack/channels.d.ts.map +1 -0
  953. package/dist/slack/channels.js +277 -0
  954. package/dist/slack/channels.js.map +1 -0
  955. package/dist/slack/client.d.ts +151 -0
  956. package/dist/slack/client.d.ts.map +1 -0
  957. package/dist/slack/client.js +468 -0
  958. package/dist/slack/client.js.map +1 -0
  959. package/dist/slack/retry.d.ts +36 -0
  960. package/dist/slack/retry.d.ts.map +1 -0
  961. package/dist/slack/retry.js +100 -0
  962. package/dist/slack/retry.js.map +1 -0
  963. package/dist/slack/types.d.ts +271 -0
  964. package/dist/slack/types.d.ts.map +1 -0
  965. package/dist/slack/types.js +52 -0
  966. package/dist/slack/types.js.map +1 -0
  967. package/dist/slack/webhooks.d.ts +55 -0
  968. package/dist/slack/webhooks.d.ts.map +1 -0
  969. package/dist/slack/webhooks.js +285 -0
  970. package/dist/slack/webhooks.js.map +1 -0
  971. package/dist/stt/client.d.ts +18 -0
  972. package/dist/stt/client.d.ts.map +1 -0
  973. package/dist/stt/client.js +66 -0
  974. package/dist/stt/client.js.map +1 -0
  975. package/dist/stt/sidecar.d.ts +16 -0
  976. package/dist/stt/sidecar.d.ts.map +1 -0
  977. package/dist/stt/sidecar.js +115 -0
  978. package/dist/stt/sidecar.js.map +1 -0
  979. package/dist/tracing/bridge.d.ts +14 -0
  980. package/dist/tracing/bridge.d.ts.map +1 -0
  981. package/dist/tracing/bridge.js +70 -0
  982. package/dist/tracing/bridge.js.map +1 -0
  983. package/dist/tracing/correlation.d.ts +34 -0
  984. package/dist/tracing/correlation.d.ts.map +1 -0
  985. package/dist/tracing/correlation.js +49 -0
  986. package/dist/tracing/correlation.js.map +1 -0
  987. package/dist/tracing/index.d.ts +15 -0
  988. package/dist/tracing/index.d.ts.map +1 -0
  989. package/dist/tracing/index.js +18 -0
  990. package/dist/tracing/index.js.map +1 -0
  991. package/dist/tracing/init.d.ts +42 -0
  992. package/dist/tracing/init.d.ts.map +1 -0
  993. package/dist/tracing/init.js +81 -0
  994. package/dist/tracing/init.js.map +1 -0
  995. package/dist/tracing/instrument.d.ts +39 -0
  996. package/dist/tracing/instrument.d.ts.map +1 -0
  997. package/dist/tracing/instrument.js +145 -0
  998. package/dist/tracing/instrument.js.map +1 -0
  999. package/dist/tracing/middleware.d.ts +18 -0
  1000. package/dist/tracing/middleware.d.ts.map +1 -0
  1001. package/dist/tracing/middleware.js +69 -0
  1002. package/dist/tracing/middleware.js.map +1 -0
  1003. package/dist/tracing/tracer.d.ts +105 -0
  1004. package/dist/tracing/tracer.d.ts.map +1 -0
  1005. package/dist/tracing/tracer.js +327 -0
  1006. package/dist/tracing/tracer.js.map +1 -0
  1007. package/dist/tts/client.d.ts +18 -0
  1008. package/dist/tts/client.d.ts.map +1 -0
  1009. package/dist/tts/client.js +48 -0
  1010. package/dist/tts/client.js.map +1 -0
  1011. package/dist/tts/sidecar.d.ts +16 -0
  1012. package/dist/tts/sidecar.d.ts.map +1 -0
  1013. package/dist/tts/sidecar.js +148 -0
  1014. package/dist/tts/sidecar.js.map +1 -0
  1015. package/dist/twilio/call.d.ts +22 -0
  1016. package/dist/twilio/call.d.ts.map +1 -0
  1017. package/dist/twilio/call.js +79 -0
  1018. package/dist/twilio/call.js.map +1 -0
  1019. package/dist/types/plugin.d.ts +342 -0
  1020. package/dist/types/plugin.d.ts.map +1 -0
  1021. package/dist/types/plugin.js +10 -0
  1022. package/dist/types/plugin.js.map +1 -0
  1023. package/dist/types.d.ts +97 -0
  1024. package/dist/types.d.ts.map +1 -0
  1025. package/dist/types.js +5 -0
  1026. package/dist/types.js.map +1 -0
  1027. package/dist/utils/logger.d.ts +53 -0
  1028. package/dist/utils/logger.d.ts.map +1 -0
  1029. package/dist/utils/logger.js +169 -0
  1030. package/dist/utils/logger.js.map +1 -0
  1031. package/dist/vault/matcher.d.ts +39 -0
  1032. package/dist/vault/matcher.d.ts.map +1 -0
  1033. package/dist/vault/matcher.js +197 -0
  1034. package/dist/vault/matcher.js.map +1 -0
  1035. package/dist/vault/personal.d.ts +60 -0
  1036. package/dist/vault/personal.d.ts.map +1 -0
  1037. package/dist/vault/personal.js +162 -0
  1038. package/dist/vault/personal.js.map +1 -0
  1039. package/dist/vault/store.d.ts +39 -0
  1040. package/dist/vault/store.d.ts.map +1 -0
  1041. package/dist/vault/store.js +111 -0
  1042. package/dist/vault/store.js.map +1 -0
  1043. package/dist/webhooks/config.d.ts +64 -0
  1044. package/dist/webhooks/config.d.ts.map +1 -0
  1045. package/dist/webhooks/config.js +214 -0
  1046. package/dist/webhooks/config.js.map +1 -0
  1047. package/dist/webhooks/event-log.d.ts +90 -0
  1048. package/dist/webhooks/event-log.d.ts.map +1 -0
  1049. package/dist/webhooks/event-log.js +132 -0
  1050. package/dist/webhooks/event-log.js.map +1 -0
  1051. package/dist/webhooks/handler.d.ts +92 -0
  1052. package/dist/webhooks/handler.d.ts.map +1 -0
  1053. package/dist/webhooks/handler.js +103 -0
  1054. package/dist/webhooks/handler.js.map +1 -0
  1055. package/dist/webhooks/handlers.d.ts +100 -0
  1056. package/dist/webhooks/handlers.d.ts.map +1 -0
  1057. package/dist/webhooks/handlers.js +178 -0
  1058. package/dist/webhooks/handlers.js.map +1 -0
  1059. package/dist/webhooks/index.d.ts +29 -0
  1060. package/dist/webhooks/index.d.ts.map +1 -0
  1061. package/dist/webhooks/index.js +33 -0
  1062. package/dist/webhooks/index.js.map +1 -0
  1063. package/dist/webhooks/mount.d.ts +77 -0
  1064. package/dist/webhooks/mount.d.ts.map +1 -0
  1065. package/dist/webhooks/mount.js +400 -0
  1066. package/dist/webhooks/mount.js.map +1 -0
  1067. package/dist/webhooks/registry.d.ts +52 -0
  1068. package/dist/webhooks/registry.d.ts.map +1 -0
  1069. package/dist/webhooks/registry.js +143 -0
  1070. package/dist/webhooks/registry.js.map +1 -0
  1071. package/dist/webhooks/relay.d.ts +25 -0
  1072. package/dist/webhooks/relay.d.ts.map +1 -0
  1073. package/dist/webhooks/relay.js +53 -0
  1074. package/dist/webhooks/relay.js.map +1 -0
  1075. package/dist/webhooks/retry.d.ts +92 -0
  1076. package/dist/webhooks/retry.d.ts.map +1 -0
  1077. package/dist/webhooks/retry.js +270 -0
  1078. package/dist/webhooks/retry.js.map +1 -0
  1079. package/dist/webhooks/router.d.ts +94 -0
  1080. package/dist/webhooks/router.d.ts.map +1 -0
  1081. package/dist/webhooks/router.js +290 -0
  1082. package/dist/webhooks/router.js.map +1 -0
  1083. package/dist/webhooks/twilio.d.ts +63 -0
  1084. package/dist/webhooks/twilio.d.ts.map +1 -0
  1085. package/dist/webhooks/twilio.js +129 -0
  1086. package/dist/webhooks/twilio.js.map +1 -0
  1087. package/dist/webhooks/types.d.ts +142 -0
  1088. package/dist/webhooks/types.d.ts.map +1 -0
  1089. package/dist/webhooks/types.js +8 -0
  1090. package/dist/webhooks/types.js.map +1 -0
  1091. package/dist/webhooks/verify.d.ts +51 -0
  1092. package/dist/webhooks/verify.d.ts.map +1 -0
  1093. package/dist/webhooks/verify.js +98 -0
  1094. package/dist/webhooks/verify.js.map +1 -0
  1095. package/package.json +70 -0
  1096. package/public/board.html +1316 -0
  1097. package/public/browser.html +600 -0
  1098. package/public/help.html +655 -0
  1099. package/public/index.html +4689 -0
  1100. package/public/library.html +3642 -0
  1101. package/public/observatory.html +1693 -0
  1102. package/public/ops.html +1129 -0
  1103. package/public/share-modal.js +211 -0
  1104. package/skills/README.md +34 -0
  1105. package/skills/core-architecture.md +33 -0
  1106. package/skills/form-fill.md +98 -0
  1107. package/skills/form-review.md +110 -0
  1108. package/skills/form-scout.md +94 -0
  1109. package/skills/log-decision.md +27 -0
  1110. package/skills/onboard.md +98 -0
  1111. package/skills/voice-guide.md +22 -0
  1112. package/skills/write-blog.md +43 -0
@@ -0,0 +1,762 @@
1
+ /**
2
+ * Trace Correlation Engine — background service that watches the activity stream,
3
+ * builds trace chains, and uses the LLM to discover patterns and insights.
4
+ *
5
+ * Follows the established service pattern (morningBriefing.ts / backlogReview.ts):
6
+ * module-level state, idempotent start/stop, timer-driven.
7
+ */
8
+ import { randomBytes } from "node:crypto";
9
+ import { readFileSync, writeFileSync } from "node:fs";
10
+ import { join } from "node:path";
11
+ import { getInstanceName } from "../instance.js";
12
+ import { getActivities, getActivitiesByTraceIds, logActivity } from "../activity/log.js";
13
+ import { completeChat } from "../llm/complete.js";
14
+ import { resolveProvider, resolveUtilityModel } from "../settings.js";
15
+ import { createLogger } from "../utils/logger.js";
16
+ import { getBoardProvider } from "../board/provider.js";
17
+ import { filterRoutine } from "./routine-patterns.js";
18
+ import { recordRoutineFiltered, recordResolvedFiltered, recordAnalysisThroughput } from "../metrics/firewall-metrics.js";
19
+ import { readBrainLines, appendBrainLine, writeBrainLines, ensureBrainJsonl } from "../lib/brain-io.js";
20
+ import { emitCdt } from "../pulse/activation-event.js";
21
+ const log = createLogger("trace-insights");
22
+ // ─── Constants ──────────────────────────────────────────────────────────────
23
+ const ANALYSIS_INTERVAL_MS = 10 * 60 * 1000; // 10 min
24
+ const FIRST_RUN_DELAY_MS = 2 * 60 * 1000; // 2 min (let activity accumulate)
25
+ const MAX_INSIGHTS = 50; // FIFO eviction
26
+ const CLUSTER_WINDOW_MS = 5 * 60 * 1000; // 5 min temporal window
27
+ const MIN_CLUSTER_SIZE = 2;
28
+ const MAX_ENTRIES_PER_ANALYSIS = 100;
29
+ // ─── Escalation config ──────────────────────────────────────────────────────
30
+ /** Categories eligible for auto-escalation to the board. */
31
+ const ESCALATION_CATEGORIES = ["bottleneck", "anomaly"];
32
+ /** Only escalate high-confidence insights. */
33
+ const ESCALATION_MIN_CONFIDENCE = "high";
34
+ /** Track recently escalated titles to prevent duplicate board items. */
35
+ const escalatedTitles = new Set();
36
+ /**
37
+ * Cooldown tracker: maps insight title → timestamp of last escalation.
38
+ * Prevents re-escalating the same pattern within ESCALATION_COOLDOWN_MS.
39
+ */
40
+ const escalationCooldowns = new Map();
41
+ const ESCALATION_COOLDOWN_MS = 6 * 60 * 60 * 1000; // 6h per pattern
42
+ /** Max activity entries to include in a triage LLM call. */
43
+ const TRIAGE_MAX_ENTRIES = 15;
44
+ /**
45
+ * Patterns from done/cancelled board items — permanently suppressed from re-analysis.
46
+ * Populated from board queries during escalation and at startup.
47
+ */
48
+ const resolvedPatterns = new Set();
49
+ // ─── State ──────────────────────────────────────────────────────────────────
50
+ let timer = null;
51
+ let firstRunTimer = null;
52
+ let lastAnalysisId = 0;
53
+ let insights = [];
54
+ let lastRun = null;
55
+ // ─── Persistence ─────────────────────────────────────────────────────────────
56
+ const BRAIN_DIR = join(process.cwd(), "brain");
57
+ const INSIGHTS_FILE = join(BRAIN_DIR, "operations", "insights.jsonl");
58
+ const INSIGHTS_SCHEMA = JSON.stringify({ _schema: "insights", _version: "1.0" });
59
+ const WATERMARK_FILE = join(BRAIN_DIR, "operations", ".insights-watermark");
60
+ /** Load the analysis watermark so we don't re-analyze old entries on restart. */
61
+ function loadWatermark() {
62
+ try {
63
+ const raw = readFileSync(WATERMARK_FILE, "utf-8").trim();
64
+ const n = parseInt(raw, 10);
65
+ return Number.isFinite(n) && n > 0 ? n : 0;
66
+ }
67
+ catch {
68
+ return 0;
69
+ }
70
+ }
71
+ /** Persist the analysis watermark to disk. */
72
+ function persistWatermark(id) {
73
+ try {
74
+ writeFileSync(WATERMARK_FILE, String(id), "utf-8");
75
+ }
76
+ catch {
77
+ log.debug("Failed to persist insights watermark");
78
+ }
79
+ }
80
+ /** Load persisted insights from disk on startup. */
81
+ async function loadInsights() {
82
+ try {
83
+ await ensureBrainJsonl(INSIGHTS_FILE, INSIGHTS_SCHEMA);
84
+ const lines = await readBrainLines(INSIGHTS_FILE);
85
+ const loaded = [];
86
+ for (const line of lines) {
87
+ try {
88
+ const obj = JSON.parse(line);
89
+ if (obj._schema)
90
+ continue;
91
+ if (obj.id && obj.title)
92
+ loaded.push(obj);
93
+ }
94
+ catch {
95
+ continue;
96
+ }
97
+ }
98
+ // Keep only the latest MAX_INSIGHTS
99
+ insights = loaded.length > MAX_INSIGHTS
100
+ ? loaded.slice(loaded.length - MAX_INSIGHTS)
101
+ : loaded;
102
+ log.info(`Loaded ${insights.length} persisted insight(s)`);
103
+ }
104
+ catch (err) {
105
+ log.debug(`Could not load insights: ${err instanceof Error ? err.message : String(err)}`);
106
+ }
107
+ }
108
+ /** Append new insights to the JSONL file. */
109
+ async function persistInsights(newInsights) {
110
+ for (const ins of newInsights) {
111
+ await appendBrainLine(INSIGHTS_FILE, JSON.stringify(ins));
112
+ }
113
+ }
114
+ /** Compact insights file to only keep the latest MAX_INSIGHTS. */
115
+ async function compactInsights() {
116
+ const lines = [INSIGHTS_SCHEMA, ...insights.map((i) => JSON.stringify(i))];
117
+ await writeBrainLines(INSIGHTS_FILE, lines);
118
+ log.debug(`Insights compacted to ${insights.length} entries`);
119
+ }
120
+ // ─── Source affinity groups for temporal clustering ─────────────────────────
121
+ const SOURCE_AFFINITY = {
122
+ autonomous: "agent-lifecycle",
123
+ agent: "agent-lifecycle",
124
+ system: "agent-lifecycle",
125
+ "goal-loop": "goal-work",
126
+ gmail: "google-sync",
127
+ calendar: "google-sync",
128
+ google: "google-sync",
129
+ tasks: "google-sync",
130
+ slack: "messaging",
131
+ whatsapp: "messaging",
132
+ "open-loop": "open-loop",
133
+ };
134
+ // ─── Chain building ─────────────────────────────────────────────────────────
135
+ /**
136
+ * Build trace chains from activity entries using two strategies:
137
+ * 1. Backref linking (union-find style)
138
+ * 2. Temporal-source clustering (fallback for entries without backrefs)
139
+ */
140
+ export function buildTraceChains(entries) {
141
+ const chains = [];
142
+ // --- Strategy 1: Backref linking ---
143
+ const byTraceId = new Map();
144
+ for (const e of entries) {
145
+ byTraceId.set(e.traceId, e);
146
+ }
147
+ // Union-find: map each traceId to its root
148
+ const parent = new Map();
149
+ function find(id) {
150
+ let root = id;
151
+ while (parent.has(root) && parent.get(root) !== root) {
152
+ root = parent.get(root);
153
+ }
154
+ // Path compression
155
+ let cur = id;
156
+ while (cur !== root) {
157
+ const next = parent.get(cur);
158
+ parent.set(cur, root);
159
+ cur = next;
160
+ }
161
+ return root;
162
+ }
163
+ function union(a, b) {
164
+ const ra = find(a);
165
+ const rb = find(b);
166
+ if (ra !== rb)
167
+ parent.set(ra, rb);
168
+ }
169
+ // Initialize each entry as its own root
170
+ for (const e of entries) {
171
+ parent.set(e.traceId, e.traceId);
172
+ }
173
+ // Link entries via backrefs
174
+ const linkedTraceIds = new Set();
175
+ for (const e of entries) {
176
+ if (e.backref && byTraceId.has(e.backref)) {
177
+ union(e.traceId, e.backref);
178
+ linkedTraceIds.add(e.traceId);
179
+ linkedTraceIds.add(e.backref);
180
+ }
181
+ }
182
+ // Group linked entries by root
183
+ const groups = new Map();
184
+ for (const e of entries) {
185
+ if (!linkedTraceIds.has(e.traceId))
186
+ continue;
187
+ const root = find(e.traceId);
188
+ if (!groups.has(root))
189
+ groups.set(root, []);
190
+ groups.get(root).push(e);
191
+ }
192
+ for (const [rootId, groupEntries] of groups) {
193
+ if (groupEntries.length < 2)
194
+ continue;
195
+ groupEntries.sort((a, b) => a.id - b.id);
196
+ const timestamps = groupEntries.map((e) => new Date(e.timestamp).getTime());
197
+ const sources = [...new Set(groupEntries.map((e) => e.source))];
198
+ chains.push({
199
+ rootTraceId: rootId,
200
+ linkType: "backref",
201
+ entries: groupEntries,
202
+ sources,
203
+ spanMs: Math.max(...timestamps) - Math.min(...timestamps),
204
+ });
205
+ }
206
+ // --- Strategy 2: Temporal-source clustering ---
207
+ const unlinked = entries.filter((e) => !linkedTraceIds.has(e.traceId));
208
+ if (unlinked.length >= MIN_CLUSTER_SIZE) {
209
+ const sorted = [...unlinked].sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
210
+ let clusterStart = 0;
211
+ while (clusterStart < sorted.length) {
212
+ const windowEnd = new Date(sorted[clusterStart].timestamp).getTime() + CLUSTER_WINDOW_MS;
213
+ let clusterEnd = clusterStart;
214
+ // Expand window
215
+ while (clusterEnd + 1 < sorted.length &&
216
+ new Date(sorted[clusterEnd + 1].timestamp).getTime() <= windowEnd) {
217
+ clusterEnd++;
218
+ }
219
+ const window = sorted.slice(clusterStart, clusterEnd + 1);
220
+ // Sub-cluster by source affinity
221
+ const affinityGroups = new Map();
222
+ for (const e of window) {
223
+ const group = SOURCE_AFFINITY[e.source] ?? e.source;
224
+ if (!affinityGroups.has(group))
225
+ affinityGroups.set(group, []);
226
+ affinityGroups.get(group).push(e);
227
+ }
228
+ for (const [, groupEntries] of affinityGroups) {
229
+ if (groupEntries.length < MIN_CLUSTER_SIZE)
230
+ continue;
231
+ const timestamps = groupEntries.map((e) => new Date(e.timestamp).getTime());
232
+ const sources = [...new Set(groupEntries.map((e) => e.source))];
233
+ chains.push({
234
+ rootTraceId: groupEntries[0].traceId,
235
+ linkType: "temporal-cluster",
236
+ entries: groupEntries,
237
+ sources,
238
+ spanMs: Math.max(...timestamps) - Math.min(...timestamps),
239
+ });
240
+ }
241
+ clusterStart = clusterEnd + 1;
242
+ }
243
+ }
244
+ return chains;
245
+ }
246
+ // ─── LLM analysis ───────────────────────────────────────────────────────────
247
+ function getAnalystSystemPrompt() {
248
+ return `You are an activity pattern analyst for ${getInstanceName()}, a personal AI operating system.
249
+ You receive trace chains — groups of related activity entries linked by trace IDs or temporal proximity.
250
+
251
+ Analyze these chains and report 0-5 insights. Each insight should be one of:
252
+ - "pattern": A recurring behavior or cycle (e.g., "Agent GC runs every minute")
253
+ - "anomaly": Something unusual or unexpected
254
+ - "correlation": Two seemingly unrelated activities that co-occur
255
+ - "bottleneck": A chain that takes unusually long or has repeated retries
256
+
257
+ Respond with ONLY a JSON array of insight objects. If no interesting patterns exist, return [].
258
+
259
+ Each object: { "category": "pattern"|"anomaly"|"correlation"|"bottleneck", "title": "short title", "description": "1-2 sentences", "relatedTraceIds": ["id1","id2"], "confidence": "high"|"medium"|"low" }`;
260
+ }
261
+ async function analyzeChains(chains) {
262
+ // Serialize chains for the LLM
263
+ const serialized = chains.map((c) => ({
264
+ rootTraceId: c.rootTraceId,
265
+ linkType: c.linkType,
266
+ sources: c.sources,
267
+ spanMs: c.spanMs,
268
+ entries: c.entries.map((e) => ({
269
+ timestamp: e.timestamp,
270
+ source: e.source,
271
+ summary: e.summary,
272
+ traceId: e.traceId,
273
+ backref: e.backref ?? null,
274
+ })),
275
+ }));
276
+ const provider = resolveProvider();
277
+ const model = resolveUtilityModel();
278
+ const response = await completeChat({
279
+ messages: [
280
+ { role: "system", content: getAnalystSystemPrompt() },
281
+ { role: "user", content: JSON.stringify(serialized, null, 2) },
282
+ ],
283
+ model,
284
+ provider,
285
+ });
286
+ // Parse JSON array from response (handle markdown fences)
287
+ let jsonStr = response.trim();
288
+ const fenceMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
289
+ if (fenceMatch)
290
+ jsonStr = fenceMatch[1].trim();
291
+ const arrayMatch = jsonStr.match(/\[[\s\S]*\]/);
292
+ if (!arrayMatch)
293
+ return [];
294
+ try {
295
+ const parsed = JSON.parse(arrayMatch[0]);
296
+ if (!Array.isArray(parsed))
297
+ return [];
298
+ const now = new Date().toISOString();
299
+ return parsed
300
+ .filter((p) => p.category && p.title && p.description && p.relatedTraceIds)
301
+ .map((p) => ({
302
+ id: "ins_" + randomBytes(4).toString("hex"),
303
+ discoveredAt: now,
304
+ category: p.category,
305
+ title: p.title,
306
+ description: p.description,
307
+ relatedTraceIds: Array.isArray(p.relatedTraceIds) ? p.relatedTraceIds : [],
308
+ confidence: p.confidence ?? "medium",
309
+ }));
310
+ }
311
+ catch {
312
+ log.warn("Failed to parse LLM insight response");
313
+ return [];
314
+ }
315
+ }
316
+ // ─── Pre-analysis filters ────────────────────────────────────────────────────
317
+ /**
318
+ * Filter out activity entries whose summaries match patterns from
319
+ * done/cancelled board items. Saves the LLM call for known-solved issues.
320
+ */
321
+ function filterResolvedPatterns(entries) {
322
+ if (resolvedPatterns.size === 0)
323
+ return entries;
324
+ return entries.filter((e) => {
325
+ const lower = e.summary.toLowerCase();
326
+ for (const pattern of resolvedPatterns) {
327
+ if (lower.includes(pattern))
328
+ return false;
329
+ }
330
+ return true;
331
+ });
332
+ }
333
+ // ─── Core analysis run ──────────────────────────────────────────────────────
334
+ async function runAnalysis() {
335
+ const rawEntries = (await getActivities(lastAnalysisId)).slice(0, MAX_ENTRIES_PER_ANALYSIS);
336
+ if (rawEntries.length < 3) {
337
+ log.info(`Only ${rawEntries.length} new entries — skipping analysis`);
338
+ const summary = {
339
+ ranAt: new Date().toISOString(),
340
+ chainsAnalyzed: 0,
341
+ entriesAnalyzed: rawEntries.length,
342
+ newInsights: 0,
343
+ };
344
+ lastRun = summary;
345
+ return summary;
346
+ }
347
+ // Update watermark from raw (not filtered) to avoid re-analyzing filtered entries
348
+ const rawWatermark = rawEntries[rawEntries.length - 1].id;
349
+ // ── Filter pipeline (cheap string ops before expensive LLM call) ──
350
+ // Component 3: Routine Activity Classifier — skip Instance GC, health checks, etc.
351
+ const { kept: afterRoutine, filtered: routineCount } = filterRoutine(rawEntries);
352
+ if (routineCount > 0) {
353
+ log.debug(`Filtered ${routineCount} routine entries from analysis`);
354
+ recordRoutineFiltered(routineCount);
355
+ }
356
+ // Component 2: Resolved-pattern filter — skip patterns from done/cancelled board items
357
+ const newEntries = filterResolvedPatterns(afterRoutine);
358
+ const resolvedCount = afterRoutine.length - newEntries.length;
359
+ if (resolvedCount > 0) {
360
+ recordResolvedFiltered(resolvedCount);
361
+ }
362
+ // Record analysis pipeline throughput
363
+ recordAnalysisThroughput(rawEntries.length, newEntries.length);
364
+ if (newEntries.length < 3) {
365
+ log.info(`Only ${newEntries.length} entries after filtering (${routineCount} routine, ${resolvedCount} resolved) — skipping analysis`);
366
+ lastAnalysisId = rawWatermark;
367
+ persistWatermark(rawWatermark);
368
+ const summary = {
369
+ ranAt: new Date().toISOString(),
370
+ chainsAnalyzed: 0,
371
+ entriesAnalyzed: newEntries.length,
372
+ newInsights: 0,
373
+ };
374
+ lastRun = summary;
375
+ return summary;
376
+ }
377
+ log.info(`Analyzing ${newEntries.length} entries (filtered ${rawEntries.length - newEntries.length} of ${rawEntries.length} raw)...`);
378
+ const chains = buildTraceChains(newEntries);
379
+ if (chains.length === 0) {
380
+ log.info("No trace chains found — skipping LLM call");
381
+ // Still update watermark so we don't re-analyze these
382
+ lastAnalysisId = rawWatermark;
383
+ persistWatermark(rawWatermark);
384
+ const summary = {
385
+ ranAt: new Date().toISOString(),
386
+ chainsAnalyzed: 0,
387
+ entriesAnalyzed: newEntries.length,
388
+ newInsights: 0,
389
+ };
390
+ lastRun = summary;
391
+ return summary;
392
+ }
393
+ try {
394
+ const newInsights = await analyzeChains(chains);
395
+ // Append insights (FIFO eviction at MAX_INSIGHTS) + persist to disk
396
+ insights.push(...newInsights);
397
+ if (newInsights.length > 0) {
398
+ persistInsights(newInsights).catch((err) => {
399
+ log.debug(`Insight persist failed: ${err instanceof Error ? err.message : String(err)}`);
400
+ });
401
+ }
402
+ if (insights.length > MAX_INSIGHTS) {
403
+ insights = insights.slice(insights.length - MAX_INSIGHTS);
404
+ // Compact file after eviction to keep it trimmed
405
+ compactInsights().catch((err) => {
406
+ log.debug(`Insight compact failed: ${err instanceof Error ? err.message : String(err)}`);
407
+ });
408
+ }
409
+ // Update watermark (use raw to skip filtered entries too)
410
+ lastAnalysisId = rawWatermark;
411
+ persistWatermark(rawWatermark);
412
+ const summary = {
413
+ ranAt: new Date().toISOString(),
414
+ chainsAnalyzed: chains.length,
415
+ entriesAnalyzed: newEntries.length,
416
+ newInsights: newInsights.length,
417
+ };
418
+ lastRun = summary;
419
+ log.info(`Analysis complete: ${chains.length} chains, ${newInsights.length} new insights`);
420
+ if (newInsights.length > 0) {
421
+ const titles = newInsights.map((i) => i.title).join("; ");
422
+ logActivity({
423
+ source: "system",
424
+ summary: `Trace insights: ${newInsights.length} discovered — ${titles}`,
425
+ });
426
+ // Escalate actionable insights to the board
427
+ escalateInsights(newInsights).catch((err) => {
428
+ log.warn(`Insight escalation failed: ${err instanceof Error ? err.message : String(err)}`);
429
+ });
430
+ }
431
+ return summary;
432
+ }
433
+ catch (err) {
434
+ const msg = err instanceof Error ? err.message : String(err);
435
+ log.error(`Analysis failed: ${msg}`);
436
+ logActivity({ source: "system", summary: `Trace insight analysis failed: ${msg}` });
437
+ return null;
438
+ }
439
+ }
440
+ // ─── Insight triage ──────────────────────────────────────────────────────────
441
+ function getTriageSystemPrompt() {
442
+ return `You are a triage analyst for ${getInstanceName()}, a file-based personal AI operating system.
443
+
444
+ You receive an insight (a bottleneck or anomaly detected by the trace correlation engine) along with the related activity entries that triggered it.
445
+
446
+ Your job: convert this vague observation into a concrete, actionable task spec that an autonomous agent can execute.
447
+
448
+ Respond with ONLY a JSON object (no markdown fences, no extra text):
449
+ {
450
+ "problem": "1-2 sentence summary of what's wrong",
451
+ "investigationSteps": ["step 1", "step 2", ...],
452
+ "filesToCheck": [{"path": "src/...", "reason": "why this file matters"}],
453
+ "acceptanceCriteria": ["criterion 1", "criterion 2", ...],
454
+ "rootCauseHypothesis": "best guess based on the activity data"
455
+ }
456
+
457
+ Rules:
458
+ - Reference actual ${getInstanceName()} file paths (src/, brain/) — be specific
459
+ - Investigation steps should be concrete actions (read file X, check metric Y, compare timestamps)
460
+ - Acceptance criteria must be verifiable (not "works better" but "response time < 5s")
461
+ - Keep total output under 500 words`;
462
+ }
463
+ /**
464
+ * Use the LLM to convert a vague insight into a concrete task spec.
465
+ * Returns an enriched markdown description, or null on any failure.
466
+ */
467
+ async function triageInsightForEscalation(insight) {
468
+ try {
469
+ // Fetch related activity entries
470
+ const relatedEntries = await getActivitiesByTraceIds(insight.relatedTraceIds);
471
+ const capped = relatedEntries.slice(0, TRIAGE_MAX_ENTRIES);
472
+ const slimEntries = capped.map((e) => ({
473
+ timestamp: e.timestamp,
474
+ source: e.source,
475
+ summary: e.summary,
476
+ traceId: e.traceId,
477
+ }));
478
+ const payload = {
479
+ insight: {
480
+ category: insight.category,
481
+ title: insight.title,
482
+ description: insight.description,
483
+ confidence: insight.confidence,
484
+ discoveredAt: insight.discoveredAt,
485
+ },
486
+ relatedActivity: slimEntries,
487
+ };
488
+ const provider = resolveProvider();
489
+ const model = resolveUtilityModel();
490
+ const response = await completeChat({
491
+ messages: [
492
+ { role: "system", content: getTriageSystemPrompt() },
493
+ { role: "user", content: JSON.stringify(payload, null, 2) },
494
+ ],
495
+ model,
496
+ provider,
497
+ noCache: true,
498
+ });
499
+ // Parse JSON from response (handle markdown fences)
500
+ let jsonStr = response.trim();
501
+ const fenceMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
502
+ if (fenceMatch)
503
+ jsonStr = fenceMatch[1].trim();
504
+ const objMatch = jsonStr.match(/\{[\s\S]*\}/);
505
+ if (!objMatch) {
506
+ log.warn("Triage response contained no JSON object");
507
+ return null;
508
+ }
509
+ const parsed = JSON.parse(objMatch[0]);
510
+ if (!parsed.problem || !parsed.investigationSteps) {
511
+ log.warn("Triage response missing required fields");
512
+ return null;
513
+ }
514
+ // Format as markdown
515
+ const sections = [
516
+ `**Problem:** ${parsed.problem}`,
517
+ ``,
518
+ `**Investigation steps:**`,
519
+ ...parsed.investigationSteps.map((s, i) => `${i + 1}. ${s}`),
520
+ ];
521
+ if (parsed.rootCauseHypothesis) {
522
+ sections.push(``, `**Root cause hypothesis:** ${parsed.rootCauseHypothesis}`);
523
+ }
524
+ if (parsed.acceptanceCriteria && parsed.acceptanceCriteria.length > 0) {
525
+ sections.push(``, `**Acceptance criteria:**`);
526
+ for (const c of parsed.acceptanceCriteria) {
527
+ sections.push(`- ${c}`);
528
+ }
529
+ }
530
+ if (parsed.filesToCheck && parsed.filesToCheck.length > 0) {
531
+ sections.push(``, `**Files to check:**`);
532
+ for (const f of parsed.filesToCheck) {
533
+ sections.push(`- \`${f.path}\` — ${f.reason}`);
534
+ }
535
+ }
536
+ return sections.join("\n");
537
+ }
538
+ catch (err) {
539
+ log.warn(`Triage failed for insight "${insight.title}": ${err instanceof Error ? err.message : String(err)}`);
540
+ return null;
541
+ }
542
+ }
543
+ // ─── Insight → Board escalation ──────────────────────────────────────────────
544
+ /**
545
+ * Escalate high-confidence actionable insights to the board as backlog items.
546
+ * Only bottlenecks and anomalies qualify — patterns and correlations are informational.
547
+ *
548
+ * Deduplicates against:
549
+ * 1. In-memory set of recently escalated titles (fast path)
550
+ * 2. Existing board items (checks for substring match in title — survives restarts)
551
+ */
552
+ async function escalateInsights(newInsights) {
553
+ const board = getBoardProvider();
554
+ if (!board?.isAvailable())
555
+ return;
556
+ const now = Date.now();
557
+ // Prune expired cooldowns
558
+ for (const [title, ts] of escalationCooldowns) {
559
+ if (now - ts > ESCALATION_COOLDOWN_MS)
560
+ escalationCooldowns.delete(title);
561
+ }
562
+ const eligible = newInsights.filter((i) => ESCALATION_CATEGORIES.includes(i.category) &&
563
+ i.confidence === ESCALATION_MIN_CONFIDENCE &&
564
+ !escalatedTitles.has(i.title) &&
565
+ !escalationCooldowns.has(i.title));
566
+ if (eligible.length === 0)
567
+ return;
568
+ // Fetch existing board items to deduplicate against (survives restarts)
569
+ let existingTitles = [];
570
+ try {
571
+ const existing = await board.listIssues({ limit: 200 });
572
+ if (existing) {
573
+ existingTitles = existing.map((i) => i.title.toLowerCase());
574
+ // Backfill the in-memory set so we don't re-query next time
575
+ for (const item of existing) {
576
+ const titleLower = item.title.toLowerCase();
577
+ if (titleLower.startsWith("[bottleneck]") || titleLower.startsWith("[anomaly]")) {
578
+ const stripped = titleLower.replace(/^\[(bottleneck|anomaly)\]\s*/, "");
579
+ escalatedTitles.add(stripped);
580
+ // Component 2: If item is resolved, add to permanent suppress list
581
+ const stateLower = item.state.toLowerCase();
582
+ if (stateLower === "done" || stateLower === "cancelled") {
583
+ resolvedPatterns.add(stripped);
584
+ }
585
+ }
586
+ }
587
+ }
588
+ }
589
+ catch (err) {
590
+ log.warn(`Failed to fetch board items for dedup: ${err instanceof Error ? err.message : String(err)}`);
591
+ }
592
+ for (const insight of eligible) {
593
+ // Skip if already on the board (fuzzy: check if the insight title appears in any existing title)
594
+ const titleLower = insight.title.toLowerCase();
595
+ if (escalatedTitles.has(insight.title))
596
+ continue;
597
+ const alreadyOnBoard = existingTitles.some((t) => t.includes(titleLower) || titleLower.includes(t.replace(/^\[.*?\]\s*/, "")));
598
+ if (alreadyOnBoard) {
599
+ escalatedTitles.add(insight.title);
600
+ log.info(`Skipping escalation — already on board: ${insight.title}`);
601
+ continue;
602
+ }
603
+ try {
604
+ // Triage: enrich vague insight with concrete investigation spec
605
+ const enrichedDescription = await triageInsightForEscalation(insight);
606
+ const descriptionBody = enrichedDescription
607
+ ? [
608
+ `**Auto-escalated from insight engine**`,
609
+ ``,
610
+ `**Category:** ${insight.category}`,
611
+ `**Confidence:** ${insight.confidence}`,
612
+ `**Discovered:** ${insight.discoveredAt}`,
613
+ ``,
614
+ enrichedDescription,
615
+ ``,
616
+ `_Insight ID: ${insight.id}_`,
617
+ ].join("\n")
618
+ : [
619
+ `**Auto-escalated from insight engine**`,
620
+ ``,
621
+ `**Category:** ${insight.category}`,
622
+ `**Confidence:** ${insight.confidence}`,
623
+ `**Discovered:** ${insight.discoveredAt}`,
624
+ ``,
625
+ insight.description,
626
+ ``,
627
+ `_Insight ID: ${insight.id}_`,
628
+ ].join("\n");
629
+ const issue = await board.createIssue(`[${insight.category}] ${insight.title}`, {
630
+ description: descriptionBody,
631
+ priority: insight.category === "bottleneck" ? 2 : 3,
632
+ });
633
+ if (issue) {
634
+ escalatedTitles.add(insight.title);
635
+ escalationCooldowns.set(insight.title, Date.now());
636
+ log.info(`Escalated insight to board: ${issue.identifier} — ${insight.title}`);
637
+ logActivity({
638
+ source: "board",
639
+ summary: `Insight escalated to ${issue.identifier}: ${insight.title}`,
640
+ detail: issue.url,
641
+ actionLabel: "AUTONOMOUS",
642
+ reason: "insight engine escalated high-confidence finding",
643
+ });
644
+ // DASH-102: Emit CDT activation via unified primitive
645
+ emitCdt({
646
+ triggerId: insight.id,
647
+ sourceKey: `insight:${insight.category}`,
648
+ anchor: insight.title,
649
+ loopsInvolved: insight.relatedTraceIds,
650
+ });
651
+ }
652
+ }
653
+ catch (err) {
654
+ log.warn(`Failed to escalate insight "${insight.title}": ${err instanceof Error ? err.message : String(err)}`);
655
+ }
656
+ }
657
+ }
658
+ // ─── Resolved patterns hydration ─────────────────────────────────────────────
659
+ /**
660
+ * Pre-populate resolvedPatterns from board items in terminal states.
661
+ * Called once at startup so the first analysis run already benefits.
662
+ */
663
+ async function hydrateResolvedPatterns() {
664
+ const board = getBoardProvider();
665
+ if (!board?.isAvailable())
666
+ return;
667
+ const existing = await board.listIssues({ limit: 200 });
668
+ if (!existing)
669
+ return;
670
+ for (const item of existing) {
671
+ const titleLower = item.title.toLowerCase();
672
+ if (titleLower.startsWith("[bottleneck]") || titleLower.startsWith("[anomaly]")) {
673
+ const stripped = titleLower.replace(/^\[(bottleneck|anomaly)\]\s*/, "");
674
+ const stateLower = item.state.toLowerCase();
675
+ if (stateLower === "done" || stateLower === "cancelled") {
676
+ resolvedPatterns.add(stripped);
677
+ }
678
+ // Also backfill escalatedTitles
679
+ escalatedTitles.add(stripped);
680
+ }
681
+ }
682
+ if (resolvedPatterns.size > 0) {
683
+ log.info(`Hydrated ${resolvedPatterns.size} resolved pattern(s) from board`);
684
+ }
685
+ }
686
+ // ─── Public API ─────────────────────────────────────────────────────────────
687
+ /** Schedule the next recurring analysis run after ANALYSIS_INTERVAL_MS. */
688
+ function scheduleNextRun() {
689
+ timer = setTimeout(async () => {
690
+ try {
691
+ await runAnalysis();
692
+ }
693
+ catch (err) {
694
+ const msg = err instanceof Error ? err.message : String(err);
695
+ log.error(`Analysis error: ${msg}`);
696
+ }
697
+ // Chain next run after this one completes (prevents overlap)
698
+ if (timer)
699
+ scheduleNextRun();
700
+ }, ANALYSIS_INTERVAL_MS);
701
+ }
702
+ /** Start the insights analysis timer. Idempotent. */
703
+ export function startInsightsTimer() {
704
+ if (timer || firstRunTimer)
705
+ return;
706
+ // Restore watermark so we don't re-analyze old entries
707
+ lastAnalysisId = loadWatermark();
708
+ log.debug(`Restored analysis watermark: ${lastAnalysisId}`);
709
+ // Load persisted insights from disk (non-blocking)
710
+ loadInsights().catch((err) => {
711
+ log.debug(`Insight load failed: ${err instanceof Error ? err.message : String(err)}`);
712
+ });
713
+ // Hydrate resolvedPatterns from board state at startup
714
+ hydrateResolvedPatterns().catch((err) => {
715
+ log.debug(`Resolved patterns hydration failed: ${err instanceof Error ? err.message : String(err)}`);
716
+ });
717
+ // First run after a delay to let activity accumulate
718
+ firstRunTimer = setTimeout(async () => {
719
+ firstRunTimer = null;
720
+ log.info("First insight analysis starting...");
721
+ try {
722
+ await runAnalysis();
723
+ }
724
+ catch (err) {
725
+ const msg = err instanceof Error ? err.message : String(err);
726
+ log.error(`First analysis error: ${msg}`);
727
+ }
728
+ // Start recurring chain (10 min after first run completes, not from timer start)
729
+ scheduleNextRun();
730
+ }, FIRST_RUN_DELAY_MS);
731
+ log.info(`Trace insights: first run in ${FIRST_RUN_DELAY_MS / 1000}s, then every ${ANALYSIS_INTERVAL_MS / 60_000} min`);
732
+ }
733
+ /** Stop the insights timer. */
734
+ export function stopInsightsTimer() {
735
+ if (firstRunTimer) {
736
+ clearTimeout(firstRunTimer);
737
+ firstRunTimer = null;
738
+ }
739
+ if (timer) {
740
+ clearTimeout(timer);
741
+ timer = null;
742
+ }
743
+ }
744
+ /** Get all discovered insights. */
745
+ export function getInsights() {
746
+ return [...insights];
747
+ }
748
+ /** Get the summary of the last analysis run. */
749
+ export function getLastInsightRun() {
750
+ return lastRun;
751
+ }
752
+ /** Get timer diagnostic state. */
753
+ export function getInsightTimerState() {
754
+ return { timer: timer !== null, firstRunTimer: firstRunTimer !== null, lastAnalysisId };
755
+ }
756
+ /** Trigger an immediate analysis run (for manual/API use). */
757
+ export async function triggerInsightAnalysis() {
758
+ if (!timer && !firstRunTimer)
759
+ return null;
760
+ return runAnalysis();
761
+ }
762
+ //# sourceMappingURL=traceInsights.js.map