@a-company/paradigm 5.11.0 → 5.21.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 (408) hide show
  1. package/dist/accept-orchestration-IUAWQZUN.js +18 -0
  2. package/dist/add-P76GEMGF.js +8 -0
  3. package/dist/agent-UUTYOFTH.js +33 -0
  4. package/dist/agent-loader-EPXURMO7.js +2 -0
  5. package/dist/agent-loader-PYGPX6D2.js +2 -0
  6. package/dist/agent-state-KSQ3S7OB.js +2 -0
  7. package/dist/agents-suggest-HYTFMQD3.js +10 -0
  8. package/dist/aggregate-W66DM3GA.js +10 -0
  9. package/dist/ambient-HYZR42NX.js +35 -0
  10. package/dist/assess-UFPYEJKP.js +9 -0
  11. package/dist/auto-RHJXOZFL.js +14 -0
  12. package/dist/beacon-5QVYV5DF.js +13 -0
  13. package/dist/calibration-OLJYB5HN.js +7 -0
  14. package/dist/check-THVGY4R5.js +14 -0
  15. package/dist/chunk-22ISTMKI.js +31 -0
  16. package/dist/chunk-2QO33NYK.js +3 -0
  17. package/dist/chunk-33LKBMVK.js +134 -0
  18. package/dist/chunk-4QADCWPU.js +7 -0
  19. package/dist/chunk-4TXOVRWD.js +3 -0
  20. package/dist/chunk-4UJ4NIEQ.js +4 -0
  21. package/dist/chunk-4ZGGWZ32.js +3 -0
  22. package/dist/chunk-5TAVYPOV.js +2 -0
  23. package/dist/chunk-6EX37L4Q.js +8 -0
  24. package/dist/chunk-AD5TAD2A.js +5 -0
  25. package/dist/chunk-AGVAHVUA.js +2 -0
  26. package/dist/chunk-AO7ZSRME.js +13 -0
  27. package/dist/chunk-BFD3GFRK.js +2 -0
  28. package/dist/chunk-D34YFK4M.js +6 -0
  29. package/dist/chunk-DVZWCXB6.js +2 -0
  30. package/dist/chunk-EKZDFEJW.js +2 -0
  31. package/dist/chunk-ET5XJTSX.js +2 -0
  32. package/dist/chunk-FYDRENK7.js +3 -0
  33. package/dist/chunk-HMQ5BHP2.js +743 -0
  34. package/dist/chunk-HXKWL3VK.js +29 -0
  35. package/dist/chunk-IZSBGW6E.js +2 -0
  36. package/dist/chunk-J32OPJEX.js +2 -0
  37. package/dist/chunk-JBDMCRPP.js +7 -0
  38. package/dist/chunk-JIXHEBGK.js +7 -0
  39. package/dist/chunk-JNSJVCTU.js +2 -0
  40. package/dist/chunk-JQKKVAAN.js +2 -0
  41. package/dist/chunk-KLBH26PA.js +429 -0
  42. package/dist/chunk-L6K5HNDL.js +24 -0
  43. package/dist/chunk-LKAT7IAK.js +2 -0
  44. package/dist/chunk-M4UMM6DC.js +5 -0
  45. package/dist/chunk-NKYNHSA5.js +424 -0
  46. package/dist/chunk-NW6OKHE6.js +5 -0
  47. package/dist/chunk-NXRVR37G.js +60 -0
  48. package/dist/chunk-ODVKPZZ4.js +2 -0
  49. package/dist/chunk-PUBB7LIT.js +5 -0
  50. package/dist/chunk-Q2J542ST.js +2 -0
  51. package/dist/chunk-QGZRM6ZB.js +2 -0
  52. package/dist/chunk-QNZEG7IT.js +13 -0
  53. package/dist/chunk-QT2LKB3P.js +7 -0
  54. package/dist/chunk-RVRARWSY.js +9 -0
  55. package/dist/chunk-T6IDXUUA.js +2 -0
  56. package/dist/chunk-TYWB5IQJ.js +3 -0
  57. package/dist/chunk-UIKLE3WD.js +2 -0
  58. package/dist/chunk-V7K6CQVX.js +111 -0
  59. package/dist/chunk-VCKKJDLP.js +8 -0
  60. package/dist/chunk-VG7FN2TU.js +4 -0
  61. package/dist/chunk-W5IWDW4Y.js +16 -0
  62. package/dist/chunk-W7C6FFMO.js +8 -0
  63. package/dist/chunk-WESTEMIM.js +10 -0
  64. package/dist/chunk-WR6D3SC6.js +5 -0
  65. package/dist/chunk-WS2N27RX.js +3 -0
  66. package/dist/chunk-XMAV5AG6.js +2 -0
  67. package/dist/chunk-XROULIQN.js +2 -0
  68. package/dist/chunk-XUFYOXOU.js +3 -0
  69. package/dist/chunk-Y4XFVDZC.js +3 -0
  70. package/dist/chunk-Y6KXTQBG.js +2 -0
  71. package/dist/{chunk-GTR2TBIJ.js → chunk-Z2UZUCY6.js} +237 -1047
  72. package/dist/chunk-Z34K6GY2.js +8 -0
  73. package/dist/claude-4LR3LJQZ.js +13 -0
  74. package/dist/claude-cli-UP6HGH7C.js +6 -0
  75. package/dist/claude-code-RLJ4GX77.js +11 -0
  76. package/dist/claude-code-teams-R37HJY3Y.js +29 -0
  77. package/dist/commands-LMUD5L6R.js +455 -0
  78. package/dist/compliance-GZ7UAOG3.js +6 -0
  79. package/dist/conductor-Y5IXELTL.js +4 -0
  80. package/dist/config-schema-HR7LDEQ6.js +2 -0
  81. package/dist/constellation-CG7C4WFE.js +13 -0
  82. package/dist/context-audit-RSSRX6XC.js +6 -0
  83. package/dist/cost-IDNVMAEV.js +10 -0
  84. package/dist/cost-PK4KIF7R.js +2 -0
  85. package/dist/cursor-cli-QKF7Z6M2.js +4 -0
  86. package/dist/cursorrules-U5O4G5T4.js +14 -0
  87. package/dist/decision-loader-2XPZE4EZ.js +2 -0
  88. package/dist/delete-P5VULXR4.js +14 -0
  89. package/dist/diff-RTFUKJHF.js +9 -0
  90. package/dist/discipline-H7LDI6NT.js +2 -0
  91. package/dist/dist-3ZCH25SG.js +2 -0
  92. package/dist/dist-KGRCLBJP-2QAPFYNF.js +39 -0
  93. package/dist/dist-R3RWD35F.js +2 -0
  94. package/dist/dist-VGFSP3XM.js +2 -0
  95. package/dist/dist-VXCZWVVJ.js +2 -0
  96. package/dist/dist-W3XCATBJ.js +2 -0
  97. package/dist/docs-EDQ2STFK.js +2 -0
  98. package/dist/docs-RXPN6CK7.js +12 -0
  99. package/dist/doctor-2T2QL6VM.js +2 -0
  100. package/dist/drift-ILZE5BFJ.js +13 -0
  101. package/dist/echo-UPTQUEDU.js +46 -0
  102. package/dist/edit-GUU3HBVW.js +9 -0
  103. package/dist/event-Y3VXC2RV.js +3 -0
  104. package/dist/explain-files-3GPZUETV.js +4 -0
  105. package/dist/export-CV5KCTPS.js +2 -0
  106. package/dist/flow-S3RQ4YPY.js +11 -0
  107. package/dist/global-C44FW4G2.js +13 -0
  108. package/dist/graduate-3BBSC27A.js +5 -0
  109. package/dist/graph-CNDE5TAT.js +2 -0
  110. package/dist/graph-server-COZR5C3Z.js +14 -0
  111. package/dist/habits-4J2KRYUL.js +42 -0
  112. package/dist/history-UW454SDP.js +12 -0
  113. package/dist/hooks-XH52VGOU.js +2 -0
  114. package/dist/index.js +15 -1039
  115. package/dist/init-24MAQJFM.js +2 -0
  116. package/dist/integrity-UYDOOJDP.js +7 -0
  117. package/dist/integrity-checker-DHGMZQDG.js +2 -0
  118. package/dist/journal-loader-GLH7XFTK.js +2 -0
  119. package/dist/lint-IGKE6UPS.js +26 -0
  120. package/dist/list-5IUGP3ZB.js +7 -0
  121. package/dist/list-YKIQNKGB.js +6 -0
  122. package/dist/lore-loader-RVQI5GXL.js +2 -0
  123. package/dist/lore-loader-XY5MZRR2.js +2 -0
  124. package/dist/lore-server-FC2GMDLT.js +14 -0
  125. package/dist/manual-RXSPSFLL.js +20 -0
  126. package/dist/mcp.js +93 -20529
  127. package/dist/migrate-X5OMAFAQ.js +59 -0
  128. package/dist/migrate-assessments-GEI5WMI2.js +4 -0
  129. package/dist/model-discovery-HMB3YI4L.js +2 -0
  130. package/dist/nomination-engine-XF7TWPAP.js +2 -0
  131. package/dist/notebook-PE3JSYZI.js +11 -0
  132. package/dist/notebook-loader-CENTDDUJ.js +2 -0
  133. package/dist/orchestrate-35HBQ3O3.js +8 -0
  134. package/dist/peers-P2KXU7ZK.js +5 -0
  135. package/dist/persona-STQWZH5P.js +29 -0
  136. package/dist/pipeline-MZUITRVN.js +4 -0
  137. package/dist/platform-server-2KXHGHFV.js +25 -0
  138. package/dist/plugin-update-checker-M7PW434O.js +2 -0
  139. package/dist/portal-check-3JVNLOEP.js +8 -0
  140. package/dist/portal-compliance-2UG4VKWH.js +2 -0
  141. package/dist/probe-5L5BQDGE.js +6 -0
  142. package/dist/project-type-SURTOIG7.js +2 -0
  143. package/dist/promote-NJQDZBZA.js +8 -0
  144. package/dist/providers-4PXMWA7V.js +8 -0
  145. package/dist/quiz-FE5UGAY2.js +10 -0
  146. package/dist/record-YXPB34MY.js +6 -0
  147. package/dist/reindex-PGDQSM42.js +2 -0
  148. package/dist/remember-MJRNTXYS.js +14 -0
  149. package/dist/retag-N5XF3KXP.js +6 -0
  150. package/dist/review-6UAH6V3R.js +11 -0
  151. package/dist/review-77QI6VOC.js +6 -0
  152. package/dist/ripple-ZGDITCGB.js +10 -0
  153. package/dist/roster-FLRZ5J42.js +2 -0
  154. package/dist/sentinel-HYAZ3CO5.js +19 -0
  155. package/dist/sentinel-bridge-VR357PKL.js +2 -0
  156. package/dist/sentinel-mcp.js +38 -3808
  157. package/dist/sentinel.js +1 -34
  158. package/dist/serve-JE6UF5P2.js +8 -0
  159. package/dist/serve-L52ZUTU6.js +10 -0
  160. package/dist/serve-OY6XYL7F.js +12 -0
  161. package/dist/server-2MNROHF6.js +7 -0
  162. package/dist/server-4YNUIK4W.js +8 -0
  163. package/dist/session-tracker-SKOMBDOW.js +2 -0
  164. package/dist/session-work-log-3MNUDEZ6.js +2 -0
  165. package/dist/session-work-log-J2H5OZBR.js +2 -0
  166. package/dist/setup-3F5IK7MO.js +31 -0
  167. package/dist/setup-KPIMRZ4Q.js +2 -0
  168. package/dist/shift-6GCNH666.js +11 -0
  169. package/dist/show-BOAVWZPZ.js +7 -0
  170. package/dist/show-PJ5LFLIL.js +5 -0
  171. package/dist/snapshot-L2G56RPL.js +8 -0
  172. package/dist/spawn-UH5RENSE.js +12 -0
  173. package/dist/status-77M3SDIF.js +8 -0
  174. package/dist/status-A37ECYNJ.js +6 -0
  175. package/dist/summary-ZJLQ6KHB.js +7 -0
  176. package/dist/sweep-HU74OPVW.js +17 -0
  177. package/dist/switch-CTW4PDGI.js +17 -0
  178. package/dist/symphony-3QMBGCZY.js +2 -0
  179. package/dist/symphony-QI63XL62.js +53 -0
  180. package/dist/symphony-loader-XACVV2E3.js +2 -0
  181. package/dist/symphony-peers-U4KHMKGI.js +2 -0
  182. package/dist/symphony-peers-X5NGWXFP.js +2 -0
  183. package/dist/symphony-relay-5GY5JIPT.js +3 -0
  184. package/dist/sync-QRDSFETO.js +2 -0
  185. package/dist/sync-llms-HL5PPW3M.js +15 -0
  186. package/dist/task-loader-NZFDTUQ5.js +2 -0
  187. package/dist/team-WGERKGNP.js +2 -0
  188. package/dist/test-BQJMS4Y2.js +111 -0
  189. package/dist/thread-HFXK65D4.js +41 -0
  190. package/dist/timeline-K3ZFKJ3R.js +6 -0
  191. package/dist/triage-FCWOZASE.js +18 -0
  192. package/dist/tutorial-UC6YQMNN.js +305 -0
  193. package/dist/university-content/courses/.purpose +74 -5
  194. package/dist/university-content/plsat/.purpose +3 -2
  195. package/dist/university-ui/assets/{index-BjewBB6s.js → index-CGFJczb1.js} +2 -2
  196. package/dist/university-ui/assets/{index-BjewBB6s.js.map → index-CGFJczb1.js.map} +1 -1
  197. package/dist/university-ui/index.html +1 -1
  198. package/dist/upgrade-B4IOLZYK.js +53 -0
  199. package/dist/validate-C6SMKGYD.js +9 -0
  200. package/dist/validate-LSCDOLBO.js +13 -0
  201. package/dist/validate-VZXTJHGO.js +6 -0
  202. package/dist/watch-LRM5XD46.js +8 -0
  203. package/dist/watch-PZCCUP6K.js +9 -0
  204. package/dist/wisdom-XZ3QKPNP.js +7 -0
  205. package/dist/work-log-loader-DL5GZ2BQ.js +2 -0
  206. package/dist/workspace-2ODL5WLY.js +2 -0
  207. package/package.json +1 -1
  208. package/platform-ui/dist/assets/AmbientSection-DqQ2mfCO.js +1 -0
  209. package/platform-ui/dist/assets/{CanvasSection-DwPTRdIN.js → CanvasSection-DLW0s-Bu.js} +1 -1
  210. package/platform-ui/dist/assets/{DocsSection-BJc_ws4I.js → DocsSection-BQ9Hi51g.js} +1 -1
  211. package/platform-ui/dist/assets/{GitSection-DhqBo1xc.js → GitSection-QQeUX6o3.js} +1 -1
  212. package/platform-ui/dist/assets/{GraphSection-D9fhVnZ0.js → GraphSection-0c9C-w7K.js} +2 -2
  213. package/platform-ui/dist/assets/{GraphSection-BlgXTl53.css → GraphSection-Bbs2a8sC.css} +1 -1
  214. package/platform-ui/dist/assets/LoreSection--t56kCj2.js +1 -0
  215. package/platform-ui/dist/assets/LoreSection-qnmm3o4y.css +1 -0
  216. package/platform-ui/dist/assets/SentinelSection-C4OoME9U.js +1 -0
  217. package/platform-ui/dist/assets/{SymphonySection-BRoBaUSS.js → SymphonySection-B-rvsLxq.js} +1 -1
  218. package/platform-ui/dist/assets/TeamSection-CBFmNEEo.js +1 -0
  219. package/platform-ui/dist/assets/index-Bxp0TVaf.css +1 -0
  220. package/platform-ui/dist/assets/index-DPpOdAtC.js +57 -0
  221. package/platform-ui/dist/index.html +2 -2
  222. package/dist/accept-orchestration-UQLM7PTQ.js +0 -189
  223. package/dist/add-FZRKEGH4.js +0 -81
  224. package/dist/agent-WERIO2XV.js +0 -523
  225. package/dist/agent-loader-TFIANSF4.js +0 -44
  226. package/dist/agent-state-S5DAWPTF.js +0 -24
  227. package/dist/agents-suggest-DNSYJ6IA.js +0 -83
  228. package/dist/aggregate-H57K7PNV.js +0 -88
  229. package/dist/assess-4WVXZLZQ.js +0 -68
  230. package/dist/auto-QFS5NHQU.js +0 -504
  231. package/dist/beacon-KXZXYQHX.js +0 -251
  232. package/dist/calibration-V46G7JTY.js +0 -135
  233. package/dist/check-OWAIWV23.js +0 -175
  234. package/dist/chunk-2IO7JAG2.js +0 -148
  235. package/dist/chunk-2T6BTYBN.js +0 -712
  236. package/dist/chunk-36TKPM5Z.js +0 -400
  237. package/dist/chunk-45MUDW6E.js +0 -804
  238. package/dist/chunk-4BLYIB7J.js +0 -5701
  239. package/dist/chunk-4L3UTYQX.js +0 -677
  240. package/dist/chunk-4NCFWYGG.js +0 -110
  241. package/dist/chunk-54LTTQBH.js +0 -138
  242. package/dist/chunk-5EWAQHFY.js +0 -269
  243. package/dist/chunk-5JGJACDU.js +0 -37
  244. package/dist/chunk-5OUOLN6M.js +0 -659
  245. package/dist/chunk-5VKJBNJL.js +0 -444
  246. package/dist/chunk-6N3JTACN.js +0 -2260
  247. package/dist/chunk-6QC3YGB6.js +0 -114
  248. package/dist/chunk-7N7GSU6K.js +0 -34
  249. package/dist/chunk-ABVQGRF7.js +0 -268
  250. package/dist/chunk-CL7JSK52.js +0 -129
  251. package/dist/chunk-CSD7IHSN.js +0 -152
  252. package/dist/chunk-EDOAWN7J.js +0 -717
  253. package/dist/chunk-EKGMAM62.js +0 -525
  254. package/dist/chunk-EZ3GOCYC.js +0 -132
  255. package/dist/chunk-F3BCHPYT.js +0 -143
  256. package/dist/chunk-FKJUBQU3.js +0 -3081
  257. package/dist/chunk-GT5QGC2H.js +0 -253
  258. package/dist/chunk-GZDFVP2N.js +0 -540
  259. package/dist/chunk-IRKUEJVW.js +0 -405
  260. package/dist/chunk-J2JEQRT3.js +0 -164
  261. package/dist/chunk-JASGXLK3.js +0 -679
  262. package/dist/chunk-KVDYJLTC.js +0 -121
  263. package/dist/chunk-L27I3CPZ.js +0 -357
  264. package/dist/chunk-LHLIAYQ3.js +0 -185
  265. package/dist/chunk-MCMOGQMU.js +0 -145
  266. package/dist/chunk-NQKQG45G.js +0 -688
  267. package/dist/chunk-PBHIFAL4.js +0 -259
  268. package/dist/chunk-PDX44BCA.js +0 -11
  269. package/dist/chunk-PMXRGPRQ.js +0 -305
  270. package/dist/chunk-RAB5IKPR.js +0 -487
  271. package/dist/chunk-RJE5G7WO.js +0 -590
  272. package/dist/chunk-RTHA3XRE.js +0 -880
  273. package/dist/chunk-S2HO5MLR.js +0 -621
  274. package/dist/chunk-S3ORKP3V.js +0 -716
  275. package/dist/chunk-TAIJOFOE.js +0 -124
  276. package/dist/chunk-TXESEO7Y.js +0 -245
  277. package/dist/chunk-UPLDI7CN.js +0 -1334
  278. package/dist/chunk-VL67H5IC.js +0 -506
  279. package/dist/chunk-VPPK3SY4.js +0 -1136
  280. package/dist/chunk-YMDLDELF.js +0 -314
  281. package/dist/chunk-YO6DVTL7.js +0 -99
  282. package/dist/chunk-YRZ5RPEB.js +0 -1561
  283. package/dist/chunk-ZDHLG5VP.js +0 -5676
  284. package/dist/chunk-ZGUAAVMA.js +0 -756
  285. package/dist/chunk-ZSYVKSY6.js +0 -2602
  286. package/dist/claude-FRRWJSTJ.js +0 -362
  287. package/dist/claude-cli-XJLK2X4L.js +0 -276
  288. package/dist/claude-code-HTBA4XRB.js +0 -126
  289. package/dist/claude-code-teams-T4SP24MD.js +0 -199
  290. package/dist/commands-5N4ILTPH.js +0 -5859
  291. package/dist/conductor-CQVGTEQN.js +0 -161
  292. package/dist/config-schema-EA4XALGG.js +0 -154
  293. package/dist/constellation-A26CCGQS.js +0 -225
  294. package/dist/context-audit-RLO3ETRP.js +0 -682
  295. package/dist/cost-BGM32XJU.js +0 -93
  296. package/dist/cost-VI46A4XL.js +0 -174
  297. package/dist/cursor-cli-JVEZGHWQ.js +0 -269
  298. package/dist/cursorrules-HLIKJJZT.js +0 -84
  299. package/dist/decision-loader-WWCLIQPJ.js +0 -20
  300. package/dist/delete-KBRPQLPC.js +0 -56
  301. package/dist/diff-D4X53HAC.js +0 -126
  302. package/dist/discipline-FA4OZXIS.js +0 -24
  303. package/dist/dist-34NA5RS5.js +0 -74
  304. package/dist/dist-5QE2BB2B-5S3T6Y3T.js +0 -6919
  305. package/dist/dist-77JDTVAY.js +0 -62
  306. package/dist/dist-OGTSAZ55.js +0 -1358
  307. package/dist/dist-QK4SQAK7.js +0 -64
  308. package/dist/dist-TA6LSC2Q.js +0 -20
  309. package/dist/docs-PBZB7LYP.js +0 -89
  310. package/dist/docs-QIYKO3BR.js +0 -155
  311. package/dist/doctor-ULBOHEIC.js +0 -11
  312. package/dist/drift-R5NRKFHI.js +0 -251
  313. package/dist/echo-O2LY7CC2.js +0 -248
  314. package/dist/edit-R2HNLMOG.js +0 -63
  315. package/dist/event-25OJKDCE.js +0 -31
  316. package/dist/export-IWVL7XLF.js +0 -38
  317. package/dist/flow-CRRVV3O3.js +0 -185
  318. package/dist/global-3NG5JXUB.js +0 -136
  319. package/dist/graduate-USAWGBJM.js +0 -160
  320. package/dist/graph-VHUMAAS6.js +0 -12
  321. package/dist/graph-server-YL22VBBN.js +0 -116
  322. package/dist/habits-OL5NGPXO.js +0 -1405
  323. package/dist/history-WOWC573W.js +0 -277
  324. package/dist/hooks-HFWSCGPV.js +0 -12
  325. package/dist/integrity-IHO4FZTS.js +0 -194
  326. package/dist/integrity-checker-PSKJA5SB.js +0 -12
  327. package/dist/journal-loader-5EYSBFFY.js +0 -18
  328. package/dist/lint-K6CJGGPH.js +0 -456
  329. package/dist/list-4YK7QKFF.js +0 -57
  330. package/dist/list-ENR7Q4CR.js +0 -56
  331. package/dist/lore-loader-7NO6N6FT.js +0 -26
  332. package/dist/lore-server-UNJY5KC3.js +0 -118
  333. package/dist/manual-G6FISID5.js +0 -204
  334. package/dist/migrate-LS45DNEV.js +0 -889
  335. package/dist/migrate-assessments-RGH4O6IX.js +0 -97
  336. package/dist/model-discovery-D2H3VBGC.js +0 -8
  337. package/dist/nomination-engine-RV5CNO5B.js +0 -42
  338. package/dist/notebook-YWIYGEHV.js +0 -155
  339. package/dist/orchestrate-JLILBBJE.js +0 -324
  340. package/dist/peers-DEOUIZM6.js +0 -82
  341. package/dist/persona-UHAHIVST.js +0 -390
  342. package/dist/pipeline-L4HCSBGN.js +0 -263
  343. package/dist/platform-server-H5YO3DQD.js +0 -1475
  344. package/dist/plugin-update-checker-KRRSGXMV.js +0 -12
  345. package/dist/portal-check-NPYGII2D.js +0 -42
  346. package/dist/portal-compliance-J7DGAPFX.js +0 -18
  347. package/dist/probe-MHL5HQZ2.js +0 -167
  348. package/dist/promote-F6ZYZZAL.js +0 -182
  349. package/dist/providers-GK7PB2OL.js +0 -104
  350. package/dist/quiz-M66SC7F7.js +0 -99
  351. package/dist/record-RA4WR2BO.js +0 -49
  352. package/dist/reindex-5LTD53ZC.js +0 -16
  353. package/dist/remember-HBWJ655S.js +0 -77
  354. package/dist/retag-3OLCVDEQ.js +0 -62
  355. package/dist/review-27ATYTD2.js +0 -33
  356. package/dist/review-57QMURZV.js +0 -334
  357. package/dist/ripple-JPBXP5I3.js +0 -215
  358. package/dist/sentinel-4XIG4STA.js +0 -63
  359. package/dist/sentinel-bridge-MDUXTQRL.js +0 -109
  360. package/dist/serve-CAH3PHE7.js +0 -33
  361. package/dist/serve-INL7SNBK.js +0 -36
  362. package/dist/serve-KBSE36PL.js +0 -49
  363. package/dist/server-54SKYFFY.js +0 -1647
  364. package/dist/server-XUOIO7E6.js +0 -338
  365. package/dist/session-tracker-C4BMD5WG.js +0 -13
  366. package/dist/session-work-log-MZ47OAPB.js +0 -20
  367. package/dist/setup-EDS27WUR.js +0 -25
  368. package/dist/setup-KO5AFC4K.js +0 -296
  369. package/dist/shift-D2JOHHBF.js +0 -668
  370. package/dist/show-5PV5KFJE.js +0 -176
  371. package/dist/show-NQKYX6WQ.js +0 -82
  372. package/dist/snapshot-BK4RBPCG.js +0 -62
  373. package/dist/spawn-RCHNXDHE.js +0 -196
  374. package/dist/status-WGIAQODY.js +0 -71
  375. package/dist/summary-NIRABMF5.js +0 -140
  376. package/dist/sweep-QMHNSIY5.js +0 -934
  377. package/dist/switch-6EJPZDIA.js +0 -232
  378. package/dist/symphony-4OCY36AI.js +0 -791
  379. package/dist/symphony-B75X2MME.js +0 -326
  380. package/dist/symphony-loader-UZGON56V.js +0 -90
  381. package/dist/symphony-peers-2ZQYLRNI.js +0 -34
  382. package/dist/symphony-peers-OL7F6M5S.js +0 -121
  383. package/dist/symphony-relay-UJYUXN65.js +0 -710
  384. package/dist/sync-VEHUH4OA.js +0 -11
  385. package/dist/sync-llms-YHCFIE6X.js +0 -166
  386. package/dist/task-loader-LDYWQSLM.js +0 -20
  387. package/dist/team-O5MIIFMA.js +0 -34
  388. package/dist/test-566CP5KC.js +0 -1017
  389. package/dist/thread-N754I4D5.js +0 -274
  390. package/dist/timeline-M3CICQFE.js +0 -112
  391. package/dist/triage-HHYGT3HY.js +0 -671
  392. package/dist/tutorial-KD22SUNO.js +0 -666
  393. package/dist/upgrade-H5PF32BW.js +0 -551
  394. package/dist/validate-CNKEKO6A.js +0 -134
  395. package/dist/validate-MB5ULIHS.js +0 -39
  396. package/dist/validate-QH3LADM6.js +0 -64
  397. package/dist/watch-2TKP5PVL.js +0 -199
  398. package/dist/watch-ZF4ML6CD.js +0 -111
  399. package/dist/wisdom-AATMGNFA.js +0 -319
  400. package/dist/work-log-loader-5L45XNYZ.js +0 -14
  401. package/dist/workspace-6E6OSRNU.js +0 -21
  402. package/platform-ui/dist/assets/AmbientSection-WtHfNedO.js +0 -1
  403. package/platform-ui/dist/assets/LoreSection-C3EixkjW.css +0 -1
  404. package/platform-ui/dist/assets/LoreSection-CwDDHrz9.js +0 -1
  405. package/platform-ui/dist/assets/SentinelSection-Cl7e5oZ6.js +0 -1
  406. package/platform-ui/dist/assets/TeamSection-CqSIMrKz.js +0 -1
  407. package/platform-ui/dist/assets/index-CfpZFjea.css +0 -1
  408. package/platform-ui/dist/assets/index-F0KL9xrN.js +0 -57
@@ -0,0 +1,429 @@
1
+ #!/usr/bin/env node
2
+ import {v4}from'uuid';import W from'sql.js';import*as y from'path';import*as f from'fs';import {fileURLToPath}from'url';var b={url:"http://localhost:3838",batchSize:50,flushIntervalMs:5e3,maxBufferSize:1e3,maxRetries:3,retryBackoffMs:1e3},w=class{url;service;version;environment;token;batchSize;maxBufferSize;maxRetries;retryBackoffMs;onDrop;onError;sessionId;logBuffer=[];metricsBuffer=[];flushTimer=null;closed=false;beforeUnloadHandler=null;constructor(e){this.url=(e.url??b.url).replace(/\/+$/,""),this.service=e.service,this.version=e.version,this.environment=e.environment,this.token=e.token,this.batchSize=e.batchSize??b.batchSize,this.maxBufferSize=e.maxBufferSize??b.maxBufferSize,this.maxRetries=e.maxRetries??b.maxRetries,this.retryBackoffMs=e.retryBackoffMs??b.retryBackoffMs,this.onDrop=e.onDrop,this.onError=e.onError,this.sessionId=v4();let t=e.flushIntervalMs??b.flushIntervalMs;this.flushTimer=setInterval(()=>{this.flush().catch(s=>{this.handleError(s);});},t),this.flushTimer&&typeof this.flushTimer=="object"&&"unref"in this.flushTimer&&this.flushTimer.unref(),typeof globalThis<"u"&&typeof globalThis.addEventListener=="function"&&(this.beforeUnloadHandler=()=>{this.flushSync();},globalThis.addEventListener("beforeunload",this.beforeUnloadHandler)),this.registerService();}debug(e,t,s){this.log("debug",e,t,s);}info(e,t,s){this.log("info",e,t,s);}warn(e,t,s){this.log("warn",e,t,s);}error(e,t,s){this.log("error",e,t,s);}log(e,t,s,i){if(this.closed)return;let r={level:e,symbol:t,message:s,service:this.service,sessionId:this.sessionId,environment:this.environment,data:i};this.pushToLogBuffer(r);}counter(e,t,s){this.metric({name:e,type:"counter",value:t??1,tags:s});}gauge(e,t,s){this.metric({name:e,type:"gauge",value:t,tags:s});}histogram(e,t,s){this.metric({name:e,type:"histogram",value:t,tags:s});}metric(e){if(this.closed)return;let t={...e,service:this.service,environment:this.environment};this.pushToMetricsBuffer(t);}async pushState(e,t,s){this.closed||await this.post("/api/state",{service:this.service,sessionId:this.sessionId,state:e,activeFlows:t,activeGates:s});}startSpan(e,t,s){let i=s?s.split("-")[0]||v4():v4(),r=v4(),n=new Date().toISOString(),a=Date.now(),o=this;return {traceId:i,spanId:r,async end(l="ok"){let u=new Date().toISOString(),d=Date.now()-a,g={traceId:i,spanId:r,parentSpanId:s,service:o.service,symbol:e,operation:t,startTime:n,endTime:u,durationMs:d,status:l};await o.post("/api/traces",g);}}}async flush(){let e=this.drainLogBuffer(),t=this.drainMetricsBuffer(),s=[];e.length>0&&s.push(this.sendLogs(e)),t.length>0&&s.push(this.sendMetrics(t)),await Promise.allSettled(s);}async close(){if(!this.closed){this.closed=true,this.flushTimer!==null&&(clearInterval(this.flushTimer),this.flushTimer=null),this.beforeUnloadHandler&&typeof globalThis<"u"&&typeof globalThis.removeEventListener=="function"&&(globalThis.removeEventListener("beforeunload",this.beforeUnloadHandler),this.beforeUnloadHandler=null);try{await this.flush();}catch{}}}getSessionId(){return this.sessionId}flushSync(){let e=this.drainLogBuffer(),t=this.drainMetricsBuffer(),s=typeof navigator<"u"&&typeof navigator.sendBeacon=="function"?navigator.sendBeacon.bind(navigator):void 0;s&&(e.length>0&&s(`${this.url}/api/logs`,JSON.stringify({entries:e})),t.length>0&&s(`${this.url}/api/metrics`,JSON.stringify({entries:t})));}registerService(){let e={name:this.service,version:this.version,pid:typeof process<"u"?process.pid:void 0,environment:this.environment};this.post("/api/services",e).catch(()=>{});}pushToLogBuffer(e){if(this.logBuffer.length>=this.maxBufferSize){let t=Math.max(1,Math.floor(this.maxBufferSize*.1));this.logBuffer.splice(0,t),this.onDrop&&this.onDrop(t);}this.logBuffer.push(e),this.logBuffer.length>=this.batchSize&&this.flush().catch(t=>{this.handleError(t);});}pushToMetricsBuffer(e){if(this.metricsBuffer.length>=this.maxBufferSize){let t=Math.max(1,Math.floor(this.maxBufferSize*.1));this.metricsBuffer.splice(0,t),this.onDrop&&this.onDrop(t);}this.metricsBuffer.push(e),this.metricsBuffer.length>=this.batchSize&&this.flush().catch(t=>{this.handleError(t);});}drainLogBuffer(){let e=this.logBuffer;return this.logBuffer=[],e}drainMetricsBuffer(){let e=this.metricsBuffer;return this.metricsBuffer=[],e}async sendLogs(e){try{await this.post("/api/logs",{entries:e});}catch(t){let s=this.maxBufferSize-this.logBuffer.length;if(s>0){let i=e.slice(0,s);this.logBuffer.unshift(...i);let r=e.length-i.length;r>0&&this.onDrop&&this.onDrop(r);}else this.onDrop&&this.onDrop(e.length);throw t}}async sendMetrics(e){try{await this.post("/api/metrics",{entries:e});}catch(t){let s=this.maxBufferSize-this.metricsBuffer.length;if(s>0){let i=e.slice(0,s);this.metricsBuffer.unshift(...i);let r=e.length-i.length;r>0&&this.onDrop&&this.onDrop(r);}else this.onDrop&&this.onDrop(e.length);throw t}}async post(e,t){let s=this.getFetch();if(!s)return;let i=`${this.url}${e}`,r={"Content-Type":"application/json"};this.token&&(r.Authorization=`Bearer ${this.token}`);let n;for(let a=0;a<=this.maxRetries;a++)try{let o=await s(i,{method:"POST",headers:r,body:JSON.stringify(t)});if(o.status>=400&&o.status<500){let l=await o.text().catch(()=>""),u=new Error(`Sentinel server returned ${o.status}: ${l}`);this.handleError(u);return}if(o.status>=500){let l=await o.text().catch(()=>"");if(n=new Error(`Sentinel server returned ${o.status}: ${l}`),a<this.maxRetries){await this.backoff(a);continue}throw this.handleError(n),n}return (o.headers.get("content-type")||"").includes("application/json")?await o.json():void 0}catch(o){if(n=o instanceof Error?o:new Error(String(o)),a<this.maxRetries){await this.backoff(a);continue}throw this.handleError(n),n}if(n)throw n}getFetch(){if(typeof globalThis<"u"&&typeof globalThis.fetch=="function")return globalThis.fetch}backoff(e){let t=this.retryBackoffMs*Math.pow(2,e),s=Math.floor(Math.random()*t*.25);return new Promise(i=>setTimeout(i,t+s))}handleError(e){if(this.onError){let t=e instanceof Error?e:new Error(String(e));this.onError(t);}}};function H(e){return new w(e)}var D=class{client;constructor(e){this.client=e;}send(e){this.client.log(e.level,e.symbol,e.message,{...e.data,symbolType:e.symbolType,correlationId:e.correlationId});}};function M(e){let t=e instanceof w?e:new w(e);return new D(t)}function J(e,t){let s=M(t);return e.addTransport(s),s}var Y=5,G={score:50,timesMatched:0,timesResolved:0,timesRecurred:0},R=null,A=class{db=null;dbPath;incidentCounter=0;initialized=false;constructor(e){this.dbPath=e||this.getDefaultDbPath();}getDefaultDbPath(){let e=process.env.SENTINEL_DATA_DIR||process.env.PARADIGM_DATA_DIR||y.join(process.cwd(),".paradigm","sentinel");return y.join(e,"sentinel.db")}createSchema(){this.db&&(this.db.run(`
3
+ -- Metadata table for schema versioning
4
+ CREATE TABLE IF NOT EXISTS metadata (
5
+ key TEXT PRIMARY KEY,
6
+ value TEXT NOT NULL
7
+ );
8
+
9
+ -- Incidents table
10
+ CREATE TABLE IF NOT EXISTS incidents (
11
+ id TEXT PRIMARY KEY,
12
+ timestamp TEXT NOT NULL,
13
+ status TEXT NOT NULL DEFAULT 'open',
14
+ error_message TEXT NOT NULL,
15
+ error_stack TEXT,
16
+ error_code TEXT,
17
+ error_type TEXT,
18
+ symbols TEXT NOT NULL,
19
+ flow_position TEXT,
20
+ environment TEXT NOT NULL,
21
+ service TEXT,
22
+ version TEXT,
23
+ user_id TEXT,
24
+ request_id TEXT,
25
+ group_id TEXT,
26
+ notes TEXT DEFAULT '[]',
27
+ related_incidents TEXT DEFAULT '[]',
28
+ resolved_at TEXT,
29
+ resolved_by TEXT,
30
+ resolution TEXT,
31
+ created_at TEXT NOT NULL,
32
+ updated_at TEXT NOT NULL
33
+ );
34
+
35
+ -- Patterns table
36
+ CREATE TABLE IF NOT EXISTS patterns (
37
+ id TEXT PRIMARY KEY,
38
+ name TEXT NOT NULL,
39
+ description TEXT,
40
+ pattern TEXT NOT NULL,
41
+ resolution TEXT NOT NULL,
42
+ confidence TEXT NOT NULL,
43
+ source TEXT NOT NULL DEFAULT 'manual',
44
+ private INTEGER NOT NULL DEFAULT 0,
45
+ tags TEXT DEFAULT '[]',
46
+ created_at TEXT NOT NULL,
47
+ updated_at TEXT NOT NULL
48
+ );
49
+
50
+ -- Incident groups
51
+ CREATE TABLE IF NOT EXISTS groups (
52
+ id TEXT PRIMARY KEY,
53
+ name TEXT,
54
+ common_symbols TEXT,
55
+ common_error_patterns TEXT,
56
+ suggested_pattern_id TEXT,
57
+ first_seen TEXT NOT NULL,
58
+ last_seen TEXT NOT NULL,
59
+ created_at TEXT NOT NULL,
60
+ updated_at TEXT NOT NULL
61
+ );
62
+
63
+ -- Group members
64
+ CREATE TABLE IF NOT EXISTS group_members (
65
+ group_id TEXT NOT NULL,
66
+ incident_id TEXT NOT NULL,
67
+ added_at TEXT NOT NULL,
68
+ PRIMARY KEY (group_id, incident_id)
69
+ );
70
+
71
+ -- Resolutions history
72
+ CREATE TABLE IF NOT EXISTS resolutions (
73
+ id TEXT PRIMARY KEY,
74
+ incident_id TEXT NOT NULL,
75
+ pattern_id TEXT,
76
+ commit_hash TEXT,
77
+ pr_url TEXT,
78
+ notes TEXT,
79
+ resolved_at TEXT NOT NULL,
80
+ recurred INTEGER DEFAULT 0
81
+ );
82
+
83
+ -- Practice events (habits system)
84
+ CREATE TABLE IF NOT EXISTS practice_events (
85
+ id TEXT PRIMARY KEY,
86
+ timestamp TEXT NOT NULL,
87
+ habit_id TEXT NOT NULL,
88
+ habit_category TEXT NOT NULL,
89
+ result TEXT NOT NULL CHECK (result IN ('followed', 'skipped', 'partial')),
90
+ engineer TEXT NOT NULL,
91
+ session_id TEXT NOT NULL,
92
+ lore_entry_id TEXT,
93
+ task_description TEXT,
94
+ symbols_touched TEXT DEFAULT '[]',
95
+ files_modified TEXT DEFAULT '[]',
96
+ related_incident_id TEXT,
97
+ notes TEXT
98
+ );
99
+
100
+ -- Structured logs table
101
+ CREATE TABLE IF NOT EXISTS logs (
102
+ id TEXT PRIMARY KEY,
103
+ timestamp TEXT NOT NULL,
104
+ level TEXT NOT NULL CHECK (level IN ('debug','info','warn','error')),
105
+ symbol TEXT NOT NULL,
106
+ symbol_type TEXT NOT NULL DEFAULT 'raw',
107
+ message TEXT NOT NULL,
108
+ data_json TEXT,
109
+ service TEXT NOT NULL,
110
+ session_id TEXT,
111
+ correlation_id TEXT,
112
+ duration_ms REAL,
113
+ environment TEXT
114
+ );
115
+
116
+ -- Service registry
117
+ CREATE TABLE IF NOT EXISTS services (
118
+ name TEXT PRIMARY KEY,
119
+ version TEXT,
120
+ pid INTEGER,
121
+ started_at TEXT NOT NULL,
122
+ last_seen_at TEXT NOT NULL,
123
+ environment TEXT,
124
+ metadata_json TEXT
125
+ );
126
+
127
+ -- Live app state snapshots (latest-wins per service+session)
128
+ CREATE TABLE IF NOT EXISTS app_state (
129
+ service TEXT NOT NULL,
130
+ session_id TEXT NOT NULL,
131
+ timestamp TEXT NOT NULL,
132
+ state_json TEXT NOT NULL,
133
+ active_flows_json TEXT,
134
+ active_gates_json TEXT,
135
+ PRIMARY KEY (service, session_id)
136
+ );
137
+
138
+ -- Metrics table
139
+ CREATE TABLE IF NOT EXISTS metrics (
140
+ id TEXT PRIMARY KEY,
141
+ timestamp TEXT NOT NULL,
142
+ name TEXT NOT NULL,
143
+ type TEXT NOT NULL CHECK (type IN ('counter','gauge','histogram')),
144
+ value REAL NOT NULL,
145
+ tags_json TEXT DEFAULT '{}',
146
+ service TEXT NOT NULL,
147
+ environment TEXT
148
+ );
149
+
150
+ -- Traces table
151
+ CREATE TABLE IF NOT EXISTS traces (
152
+ trace_id TEXT NOT NULL,
153
+ span_id TEXT PRIMARY KEY,
154
+ parent_span_id TEXT,
155
+ service TEXT NOT NULL,
156
+ symbol TEXT NOT NULL,
157
+ operation TEXT NOT NULL,
158
+ start_time TEXT NOT NULL,
159
+ end_time TEXT,
160
+ duration_ms REAL,
161
+ status TEXT NOT NULL DEFAULT 'ok',
162
+ tags_json TEXT DEFAULT '{}',
163
+ log_ids_json TEXT DEFAULT '[]'
164
+ );
165
+
166
+ -- Indexes
167
+ CREATE INDEX IF NOT EXISTS idx_incidents_timestamp ON incidents(timestamp);
168
+ CREATE INDEX IF NOT EXISTS idx_incidents_status ON incidents(status);
169
+ CREATE INDEX IF NOT EXISTS idx_incidents_environment ON incidents(environment);
170
+ CREATE INDEX IF NOT EXISTS idx_patterns_source ON patterns(source);
171
+ CREATE INDEX IF NOT EXISTS idx_practice_events_timestamp ON practice_events(timestamp);
172
+ CREATE INDEX IF NOT EXISTS idx_practice_events_habit_id ON practice_events(habit_id);
173
+ CREATE INDEX IF NOT EXISTS idx_practice_events_engineer ON practice_events(engineer);
174
+ CREATE INDEX IF NOT EXISTS idx_practice_events_session_id ON practice_events(session_id);
175
+ CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON logs(timestamp);
176
+ CREATE INDEX IF NOT EXISTS idx_logs_level ON logs(level);
177
+ CREATE INDEX IF NOT EXISTS idx_logs_symbol ON logs(symbol);
178
+ CREATE INDEX IF NOT EXISTS idx_logs_service ON logs(service);
179
+ CREATE INDEX IF NOT EXISTS idx_logs_session_id ON logs(session_id);
180
+ CREATE INDEX IF NOT EXISTS idx_logs_correlation_id ON logs(correlation_id);
181
+ CREATE INDEX IF NOT EXISTS idx_metrics_timestamp ON metrics(timestamp);
182
+ CREATE INDEX IF NOT EXISTS idx_metrics_name ON metrics(name);
183
+ CREATE INDEX IF NOT EXISTS idx_metrics_service ON metrics(service);
184
+ CREATE INDEX IF NOT EXISTS idx_traces_trace_id ON traces(trace_id);
185
+ CREATE INDEX IF NOT EXISTS idx_traces_service ON traces(service);
186
+ CREATE INDEX IF NOT EXISTS idx_traces_start_time ON traces(start_time);
187
+ `),this.db.run("INSERT OR REPLACE INTO metadata (key, value) VALUES ('schema_version', ?)",[String(Y)]));}save(){if(!this.db)return;let e=this.db.export(),t=Buffer.from(e);f.writeFileSync(this.dbPath,t);}recordIncident(e){this.db||this.initializeSync(),this.incidentCounter++;let t=`INC-${String(this.incidentCounter).padStart(3,"0")}`,s=new Date().toISOString();return this.db.run(`INSERT INTO incidents (
188
+ id, timestamp, status, error_message, error_stack, error_code, error_type,
189
+ symbols, flow_position, environment, service, version, user_id, request_id,
190
+ group_id, notes, related_incidents, resolved_at, resolved_by, resolution,
191
+ created_at, updated_at
192
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[t,e.timestamp||s,e.status||"open",e.error.message,e.error.stack||null,e.error.code||null,e.error.type||null,JSON.stringify(e.symbols),e.flowPosition?JSON.stringify(e.flowPosition):null,e.environment,e.service||null,e.version||null,e.userId||null,e.requestId||null,e.groupId||null,"[]","[]",e.resolvedAt||null,e.resolvedBy||null,e.resolution?JSON.stringify(e.resolution):null,s,s]),this.save(),t}initializeSync(){if(!(this.initialized&&this.db)&&!this.db&&R){let e=y.dirname(this.dbPath);if(f.existsSync(e)||f.mkdirSync(e,{recursive:true}),f.existsSync(this.dbPath)){let t=f.readFileSync(this.dbPath);this.db=new R.Database(t);}else this.db=new R.Database,this.createSchema();try{let t=this.db.exec("SELECT MAX(CAST(SUBSTR(id, 5) AS INTEGER)) as max FROM incidents");t.length>0&&t[0].values.length>0&&t[0].values[0][0]&&(this.incidentCounter=t[0].values[0][0]);}catch{this.incidentCounter=0;}this.migrateSchema(),this.initialized=true,this.save();}}migrateSchema(){if(!this.db)return;let e=1;try{let t=this.db.exec("SELECT value FROM metadata WHERE key = 'schema_version'");t.length>0&&t[0].values.length>0&&(e=parseInt(t[0].values[0][0],10)||1);}catch{}if(e<2){try{this.db.run(`
193
+ CREATE TABLE IF NOT EXISTS practice_events (
194
+ id TEXT PRIMARY KEY,
195
+ timestamp TEXT NOT NULL,
196
+ habit_id TEXT NOT NULL,
197
+ habit_category TEXT NOT NULL,
198
+ result TEXT NOT NULL CHECK (result IN ('followed', 'skipped', 'partial')),
199
+ engineer TEXT NOT NULL,
200
+ session_id TEXT NOT NULL,
201
+ lore_entry_id TEXT,
202
+ task_description TEXT,
203
+ symbols_touched TEXT DEFAULT '[]',
204
+ files_modified TEXT DEFAULT '[]',
205
+ related_incident_id TEXT,
206
+ notes TEXT
207
+ );
208
+
209
+ CREATE INDEX IF NOT EXISTS idx_practice_events_timestamp ON practice_events(timestamp);
210
+ CREATE INDEX IF NOT EXISTS idx_practice_events_habit_id ON practice_events(habit_id);
211
+ CREATE INDEX IF NOT EXISTS idx_practice_events_engineer ON practice_events(engineer);
212
+ CREATE INDEX IF NOT EXISTS idx_practice_events_session_id ON practice_events(session_id);
213
+ `);}catch{}this.db.run("INSERT OR REPLACE INTO metadata (key, value) VALUES ('schema_version', '2')"),e=2;}if(e<3){try{this.db.run(`
214
+ CREATE TABLE IF NOT EXISTS logs (
215
+ id TEXT PRIMARY KEY,
216
+ timestamp TEXT NOT NULL,
217
+ level TEXT NOT NULL CHECK (level IN ('debug','info','warn','error')),
218
+ symbol TEXT NOT NULL,
219
+ symbol_type TEXT NOT NULL DEFAULT 'raw',
220
+ message TEXT NOT NULL,
221
+ data_json TEXT,
222
+ service TEXT NOT NULL,
223
+ session_id TEXT,
224
+ correlation_id TEXT,
225
+ duration_ms REAL,
226
+ environment TEXT
227
+ );
228
+
229
+ CREATE TABLE IF NOT EXISTS services (
230
+ name TEXT PRIMARY KEY,
231
+ version TEXT,
232
+ pid INTEGER,
233
+ started_at TEXT NOT NULL,
234
+ last_seen_at TEXT NOT NULL,
235
+ environment TEXT,
236
+ metadata_json TEXT
237
+ );
238
+
239
+ CREATE TABLE IF NOT EXISTS app_state (
240
+ service TEXT NOT NULL,
241
+ session_id TEXT NOT NULL,
242
+ timestamp TEXT NOT NULL,
243
+ state_json TEXT NOT NULL,
244
+ active_flows_json TEXT,
245
+ active_gates_json TEXT,
246
+ PRIMARY KEY (service, session_id)
247
+ );
248
+
249
+ CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON logs(timestamp);
250
+ CREATE INDEX IF NOT EXISTS idx_logs_level ON logs(level);
251
+ CREATE INDEX IF NOT EXISTS idx_logs_symbol ON logs(symbol);
252
+ CREATE INDEX IF NOT EXISTS idx_logs_service ON logs(service);
253
+ CREATE INDEX IF NOT EXISTS idx_logs_session_id ON logs(session_id);
254
+ CREATE INDEX IF NOT EXISTS idx_logs_correlation_id ON logs(correlation_id);
255
+ `);}catch{}this.db.run("INSERT OR REPLACE INTO metadata (key, value) VALUES ('schema_version', '3')"),e=3;}if(e<4){try{this.db.run(`
256
+ CREATE TABLE IF NOT EXISTS metrics (
257
+ id TEXT PRIMARY KEY,
258
+ timestamp TEXT NOT NULL,
259
+ name TEXT NOT NULL,
260
+ type TEXT NOT NULL CHECK (type IN ('counter','gauge','histogram')),
261
+ value REAL NOT NULL,
262
+ tags_json TEXT DEFAULT '{}',
263
+ service TEXT NOT NULL,
264
+ environment TEXT
265
+ );
266
+
267
+ CREATE TABLE IF NOT EXISTS traces (
268
+ trace_id TEXT NOT NULL,
269
+ span_id TEXT PRIMARY KEY,
270
+ parent_span_id TEXT,
271
+ service TEXT NOT NULL,
272
+ symbol TEXT NOT NULL,
273
+ operation TEXT NOT NULL,
274
+ start_time TEXT NOT NULL,
275
+ end_time TEXT,
276
+ duration_ms REAL,
277
+ status TEXT NOT NULL DEFAULT 'ok',
278
+ tags_json TEXT DEFAULT '{}',
279
+ log_ids_json TEXT DEFAULT '[]'
280
+ );
281
+
282
+ CREATE INDEX IF NOT EXISTS idx_metrics_timestamp ON metrics(timestamp);
283
+ CREATE INDEX IF NOT EXISTS idx_metrics_name ON metrics(name);
284
+ CREATE INDEX IF NOT EXISTS idx_metrics_service ON metrics(service);
285
+ CREATE INDEX IF NOT EXISTS idx_traces_trace_id ON traces(trace_id);
286
+ CREATE INDEX IF NOT EXISTS idx_traces_service ON traces(service);
287
+ CREATE INDEX IF NOT EXISTS idx_traces_start_time ON traces(start_time);
288
+ `);}catch{}this.db.run("INSERT OR REPLACE INTO metadata (key, value) VALUES ('schema_version', '4')"),e=4;}if(e<5){try{this.db.run(`
289
+ CREATE TABLE IF NOT EXISTS schemas (
290
+ id TEXT PRIMARY KEY,
291
+ version TEXT NOT NULL,
292
+ name TEXT NOT NULL,
293
+ description TEXT,
294
+ scope_json TEXT NOT NULL,
295
+ event_types_json TEXT NOT NULL,
296
+ causality_json TEXT,
297
+ visualization_json TEXT,
298
+ tags_json TEXT DEFAULT '[]',
299
+ registered_at TEXT NOT NULL,
300
+ updated_at TEXT NOT NULL
301
+ );
302
+
303
+ CREATE TABLE IF NOT EXISTS events (
304
+ id TEXT PRIMARY KEY,
305
+ schema_id TEXT NOT NULL,
306
+ event_type TEXT NOT NULL,
307
+ category TEXT NOT NULL,
308
+ timestamp TEXT NOT NULL,
309
+ scope_value TEXT,
310
+ scope_ordinal INTEGER,
311
+ session_id TEXT,
312
+ service TEXT NOT NULL,
313
+ data_json TEXT,
314
+ severity TEXT DEFAULT 'info',
315
+ parent_event_id TEXT,
316
+ depth INTEGER DEFAULT 0
317
+ );
318
+
319
+ CREATE INDEX IF NOT EXISTS idx_events_schema ON events(schema_id);
320
+ CREATE INDEX IF NOT EXISTS idx_events_type ON events(event_type);
321
+ CREATE INDEX IF NOT EXISTS idx_events_scope ON events(schema_id, scope_value);
322
+ CREATE INDEX IF NOT EXISTS idx_events_scope_ord ON events(schema_id, scope_ordinal);
323
+ CREATE INDEX IF NOT EXISTS idx_events_session ON events(session_id);
324
+ CREATE INDEX IF NOT EXISTS idx_events_timestamp ON events(timestamp);
325
+ CREATE INDEX IF NOT EXISTS idx_events_service ON events(service);
326
+ `);}catch{}this.db.run("INSERT OR REPLACE INTO metadata (key, value) VALUES ('schema_version', '5')");}}async ensureReady(){R||(R=await W()),this.initializeSync();}getIncident(e){this.initializeSync();let t=this.db.exec("SELECT * FROM incidents WHERE id = ?",[e]);return t.length===0||t[0].values.length===0?null:this.rowToIncident(t[0].columns,t[0].values[0])}getRecentIncidents(e={}){this.initializeSync();let{limit:t=50,offset:s=0}=e,i=[],r=[];e.status&&e.status!=="all"&&(i.push("status = ?"),r.push(e.status)),e.environment&&(i.push("environment = ?"),r.push(e.environment)),e.symbol&&(i.push("symbols LIKE ?"),r.push(`%${e.symbol}%`)),e.search&&(i.push("(error_message LIKE ? OR notes LIKE ?)"),r.push(`%${e.search}%`,`%${e.search}%`)),e.dateFrom&&(i.push("timestamp >= ?"),r.push(e.dateFrom)),e.dateTo&&(i.push("timestamp <= ?"),r.push(e.dateTo)),e.groupId&&(i.push("group_id = ?"),r.push(e.groupId));let n=i.length>0?`WHERE ${i.join(" AND ")}`:"",a=this.db.exec(`SELECT * FROM incidents ${n} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...r,t,s]);return a.length===0?[]:a[0].values.map(o=>this.rowToIncident(a[0].columns,o))}updateIncident(e,t){this.initializeSync();let s=new Date().toISOString(),i=["updated_at = ?"],r=[s];t.status!==void 0&&(i.push("status = ?"),r.push(t.status)),t.error!==void 0&&(i.push("error_message = ?"),r.push(t.error.message),t.error.stack!==void 0&&(i.push("error_stack = ?"),r.push(t.error.stack||null))),t.symbols!==void 0&&(i.push("symbols = ?"),r.push(JSON.stringify(t.symbols))),t.flowPosition!==void 0&&(i.push("flow_position = ?"),r.push(t.flowPosition?JSON.stringify(t.flowPosition):null)),t.groupId!==void 0&&(i.push("group_id = ?"),r.push(t.groupId||null)),t.resolvedAt!==void 0&&(i.push("resolved_at = ?"),r.push(t.resolvedAt||null)),t.resolvedBy!==void 0&&(i.push("resolved_by = ?"),r.push(t.resolvedBy||null)),t.resolution!==void 0&&(i.push("resolution = ?"),r.push(t.resolution?JSON.stringify(t.resolution):null)),r.push(e),this.db.run(`UPDATE incidents SET ${i.join(", ")} WHERE id = ?`,r),this.save();}resolveIncident(e,t){this.updateIncident(e,{status:"resolved",resolvedAt:new Date().toISOString()}),t?.notes&&this.addIncidentNote(e,{author:"system",content:t.notes,timestamp:new Date().toISOString()});}addIncidentNote(e,t){this.initializeSync();let s=this.getIncident(e);if(!s)return;let i={id:v4(),...t},r=[...s.notes,i];this.db.run("UPDATE incidents SET notes = ?, updated_at = ? WHERE id = ?",[JSON.stringify(r),new Date().toISOString(),e]),this.save();}linkIncidents(e,t){this.initializeSync();let s=this.getIncident(e);if(!s)return;if(!s.relatedIncidents.includes(t)){let r=[...s.relatedIncidents,t];this.db.run("UPDATE incidents SET related_incidents = ?, updated_at = ? WHERE id = ?",[JSON.stringify(r),new Date().toISOString(),e]);}let i=this.getIncident(t);if(i&&!i.relatedIncidents.includes(e)){let r=[...i.relatedIncidents,e];this.db.run("UPDATE incidents SET related_incidents = ?, updated_at = ? WHERE id = ?",[JSON.stringify(r),new Date().toISOString(),t]);}this.save();}getIncidentCount(e={}){this.initializeSync();let t=[],s=[];e.status&&e.status!=="all"&&(t.push("status = ?"),s.push(e.status)),e.environment&&(t.push("environment = ?"),s.push(e.environment)),e.dateFrom&&(t.push("timestamp >= ?"),s.push(e.dateFrom)),e.dateTo&&(t.push("timestamp <= ?"),s.push(e.dateTo));let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=this.db.exec(`SELECT COUNT(*) as count FROM incidents ${i}`,s);return r.length===0||r[0].values.length===0?0:r[0].values[0][0]}addPattern(e){this.initializeSync();let t=new Date().toISOString(),s={...G,...e.confidence};return this.db.run(`INSERT INTO patterns (
327
+ id, name, description, pattern, resolution, confidence,
328
+ source, private, tags, created_at, updated_at
329
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[e.id,e.name,e.description||null,JSON.stringify(e.pattern),JSON.stringify(e.resolution),JSON.stringify(s),e.source,e.private?1:0,JSON.stringify(e.tags||[]),t,t]),this.save(),e.id}getPattern(e){this.initializeSync();let t=this.db.exec("SELECT * FROM patterns WHERE id = ?",[e]);return t.length===0||t[0].values.length===0?null:this.rowToPattern(t[0].columns,t[0].values[0])}getAllPatterns(e={}){this.initializeSync();let t=[],s=[];if(e.source&&(t.push("source = ?"),s.push(e.source)),e.minConfidence!==void 0&&(t.push("json_extract(confidence, '$.score') >= ?"),s.push(e.minConfidence)),e.includePrivate||t.push("private = 0"),e.tags&&e.tags.length>0){let n=e.tags.map(()=>"tags LIKE ?");t.push(`(${n.join(" OR ")})`),s.push(...e.tags.map(a=>`%"${a}"%`));}let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=this.db.exec(`SELECT * FROM patterns ${i} ORDER BY json_extract(confidence, '$.score') DESC`,s);return r.length===0?[]:r[0].values.map(n=>this.rowToPattern(r[0].columns,n))}updatePattern(e,t){this.initializeSync();let s=new Date().toISOString(),i=["updated_at = ?"],r=[s];t.name!==void 0&&(i.push("name = ?"),r.push(t.name)),t.description!==void 0&&(i.push("description = ?"),r.push(t.description||null)),t.pattern!==void 0&&(i.push("pattern = ?"),r.push(JSON.stringify(t.pattern))),t.resolution!==void 0&&(i.push("resolution = ?"),r.push(JSON.stringify(t.resolution))),t.confidence!==void 0&&(i.push("confidence = ?"),r.push(JSON.stringify(t.confidence))),t.source!==void 0&&(i.push("source = ?"),r.push(t.source)),t.private!==void 0&&(i.push("private = ?"),r.push(t.private?1:0)),t.tags!==void 0&&(i.push("tags = ?"),r.push(JSON.stringify(t.tags))),r.push(e),this.db.run(`UPDATE patterns SET ${i.join(", ")} WHERE id = ?`,r),this.save();}deletePattern(e){this.initializeSync(),this.db.run("DELETE FROM patterns WHERE id = ?",[e]),this.save();}updatePatternConfidence(e,t){let s=this.getPattern(e);if(!s)return;let i=new Date().toISOString(),r={...s.confidence};switch(t){case "matched":r.timesMatched++,r.lastMatched=i;break;case "resolved":r.timesResolved++,r.lastResolved=i,r.score=Math.min(100,r.score+2);break;case "recurred":r.timesRecurred++,r.score=Math.max(10,r.score-5);break}this.updatePattern(e,{confidence:r});}createGroup(e){this.initializeSync();let t=`GRP-${v4().substring(0,8)}`,s=new Date().toISOString();this.db.run(`INSERT INTO groups (
330
+ id, name, common_symbols, common_error_patterns,
331
+ suggested_pattern_id, first_seen, last_seen, created_at, updated_at
332
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[t,e.name||null,JSON.stringify(e.commonSymbols),JSON.stringify(e.commonErrorPatterns),e.suggestedPattern?.id||null,e.firstSeen,e.lastSeen,s,s]);for(let i of e.incidents)this.addToGroup(t,i);return this.save(),t}getGroup(e){this.initializeSync();let t=this.db.exec("SELECT * FROM groups WHERE id = ?",[e]);return t.length===0||t[0].values.length===0?null:this.rowToGroup(t[0].columns,t[0].values[0])}getGroups(e={}){this.initializeSync();let t=e.limit||100,s=this.db.exec("SELECT * FROM groups ORDER BY last_seen DESC LIMIT ?",[t]);return s.length===0?[]:s[0].values.map(i=>this.rowToGroup(s[0].columns,i))}addToGroup(e,t){this.initializeSync();let s=new Date().toISOString();this.db.run("INSERT OR IGNORE INTO group_members (group_id, incident_id, added_at) VALUES (?, ?, ?)",[e,t,s]),this.db.run("UPDATE incidents SET group_id = ? WHERE id = ?",[e,t]),this.db.run("UPDATE groups SET last_seen = ?, updated_at = ? WHERE id = ?",[s,s,e]),this.save();}recordResolution(e){this.initializeSync();let t=v4(),s=new Date().toISOString();this.db.run(`INSERT INTO resolutions (id, incident_id, pattern_id, commit_hash, pr_url, notes, resolved_at)
333
+ VALUES (?, ?, ?, ?, ?, ?, ?)`,[t,e.incidentId,e.patternId||null,e.commitHash||null,e.prUrl||null,e.notes||null,s]),this.updateIncident(e.incidentId,{status:"resolved",resolvedAt:s,resolvedBy:e.patternId||"manual",resolution:{patternId:e.patternId,commitHash:e.commitHash,prUrl:e.prUrl,notes:e.notes}}),e.patternId&&this.updatePatternConfidence(e.patternId,"resolved"),this.save();}markRecurred(e){this.initializeSync(),this.db.run("UPDATE resolutions SET recurred = 1 WHERE incident_id = ?",[e]);let t=this.db.exec("SELECT pattern_id FROM resolutions WHERE incident_id = ?",[e]);t.length>0&&t[0].values.length>0&&t[0].values[0][0]&&this.updatePatternConfidence(t[0].values[0][0],"recurred"),this.save();}getResolutionHistory(e={}){this.initializeSync();let t=[],s=[];e.patternId&&(t.push("pattern_id = ?"),s.push(e.patternId)),e.symbol&&(t.push(`incident_id IN (
334
+ SELECT id FROM incidents WHERE symbols LIKE ?
335
+ )`),s.push(`%${e.symbol}%`));let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=e.limit||100,n=this.db.exec(`SELECT * FROM resolutions ${i} ORDER BY resolved_at DESC LIMIT ?`,[...s,r]);if(n.length===0)return [];let a=n[0].columns;return n[0].values.map(o=>{let l={};return a.forEach((u,d)=>{l[u]=o[d];}),{id:l.id,incidentId:l.incident_id,patternId:l.pattern_id||void 0,commitHash:l.commit_hash||void 0,prUrl:l.pr_url||void 0,notes:l.notes||void 0,resolvedAt:l.resolved_at,recurred:l.recurred===1}})}getStats(e){this.initializeSync();let{start:t,end:s}=e,i=this.getIncidentCount({dateFrom:t,dateTo:s}),r=this.getIncidentCount({dateFrom:t,dateTo:s,status:"open"}),n=this.getIncidentCount({dateFrom:t,dateTo:s,status:"resolved"}),a=this.db.exec(`SELECT environment, COUNT(*) as count
336
+ FROM incidents
337
+ WHERE timestamp >= ? AND timestamp <= ?
338
+ GROUP BY environment`,[t,s]),o={};if(a.length>0)for(let c of a[0].values)o[c[0]]=c[1];let l=this.db.exec(`SELECT DATE(timestamp) as date, COUNT(*) as count
339
+ FROM incidents
340
+ WHERE timestamp >= ? AND timestamp <= ?
341
+ GROUP BY DATE(timestamp)
342
+ ORDER BY date`,[t,s]),u=[];if(l.length>0)for(let c of l[0].values)u.push({date:c[0],count:c[1]});let d=this.getAllPatterns({includePrivate:true}),g=d.length>0?d.reduce((c,T)=>c+T.confidence.score,0)/d.length:0,p=d.sort((c,T)=>T.confidence.timesResolved-c.confidence.timesResolved).slice(0,5).map(c=>({patternId:c.id,resolvedCount:c.confidence.timesResolved})),h=d.filter(c=>c.confidence.timesMatched>0).map(c=>({patternId:c.id,recurrenceRate:c.confidence.timesRecurred/Math.max(1,c.confidence.timesResolved)})).sort((c,T)=>T.recurrenceRate-c.recurrenceRate).slice(0,5),m=new Map,v=this.getRecentIncidents({dateFrom:t,dateTo:s,limit:1e3});for(let c of v)for(let[,T]of Object.entries(c.symbols))T&&m.set(T,(m.get(T)||0)+1);let S=Array.from(m.entries()).sort((c,T)=>T[1]-c[1]).slice(0,10).map(([c,T])=>({symbol:c,count:T})),O=this.getResolutionHistory({limit:1e3}).filter(c=>c.resolvedAt>=t&&c.resolvedAt<=s),X=O.filter(c=>c.patternId).length,k=O.length-X;return {period:{start:t,end:s},incidents:{total:i,open:r,resolved:n,byEnvironment:o,byDay:u},patterns:{total:d.length,avgConfidence:Math.round(g),mostEffective:p,leastEffective:h},symbols:{mostIncidents:S,mostResolved:[],hotspots:S.slice(0,5).map(c=>({symbol:c.symbol,incidentRate:c.count/Math.max(1,i)}))},resolution:{avgTimeToResolve:0,resolvedWithPattern:X,resolvedManually:k,resolutionRate:i>0?n/i*100:0}}}getSymbolHealth(e){let t=this.getRecentIncidents({symbol:e,limit:1e3}),s=t.length,i=new Map;for(let n of t)if(n.resolution?.patternId){let a=i.get(n.resolution.patternId)||0;i.set(n.resolution.patternId,a+1);}let r=Array.from(i.entries()).sort((n,a)=>a[1]-n[1]).slice(0,5).map(([n,a])=>({patternId:n,count:a}));return {incidentCount:s,avgTimeToResolve:0,topPatterns:r}}exportPatterns(e={}){let t=this.getAllPatterns({includePrivate:e.includePrivate});return {version:"1.0.0",exportedAt:new Date().toISOString(),patterns:t}}importPatterns(e,t={}){let s=0,i=0;for(let r of e.patterns){let n=this.getPattern(r.id);if(n&&!t.overwrite){i++;continue}n?this.updatePattern(r.id,r):this.addPattern({...r,source:"imported"}),s++;}return {imported:s,skipped:i}}exportBackup(){let e=this.getRecentIncidents({limit:1e5}),t=this.getAllPatterns({includePrivate:true}),s=this.getGroups({limit:1e4});return {version:"1.0.0",exportedAt:new Date().toISOString(),incidents:e,patterns:t,groups:s}}importBackup(e){this.initializeSync(),this.db.run("DELETE FROM group_members"),this.db.run("DELETE FROM resolutions"),this.db.run("DELETE FROM groups"),this.db.run("DELETE FROM incidents"),this.db.run("DELETE FROM patterns");for(let i of e.patterns)this.addPattern(i);for(let i of e.incidents){let r=i.timestamp;this.db.run(`INSERT INTO incidents (
343
+ id, timestamp, status, error_message, error_stack, error_code, error_type,
344
+ symbols, flow_position, environment, service, version, user_id, request_id,
345
+ group_id, notes, related_incidents, resolved_at, resolved_by, resolution,
346
+ created_at, updated_at
347
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.id,i.timestamp,i.status,i.error.message,i.error.stack||null,i.error.code||null,i.error.type||null,JSON.stringify(i.symbols),i.flowPosition?JSON.stringify(i.flowPosition):null,i.environment,i.service||null,i.version||null,i.userId||null,i.requestId||null,i.groupId||null,JSON.stringify(i.notes),JSON.stringify(i.relatedIncidents),i.resolvedAt||null,i.resolvedBy||null,i.resolution?JSON.stringify(i.resolution):null,r,r]);}let t=this.db.exec("SELECT MAX(CAST(SUBSTR(id, 5) AS INTEGER)) as max FROM incidents");t.length>0&&t[0].values.length>0&&t[0].values[0][0]&&(this.incidentCounter=t[0].values[0][0]);let s=new Date().toISOString();for(let i of e.groups){this.db.run(`INSERT INTO groups (
348
+ id, name, common_symbols, common_error_patterns,
349
+ suggested_pattern_id, first_seen, last_seen, created_at, updated_at
350
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.id,i.name||null,JSON.stringify(i.commonSymbols),JSON.stringify(i.commonErrorPatterns),i.suggestedPattern?.id||null,i.firstSeen,i.lastSeen,s,s]);for(let r of i.incidents)this.db.run("INSERT OR IGNORE INTO group_members (group_id, incident_id, added_at) VALUES (?, ?, ?)",[i.id,r,s]);}this.save();}rowToIncident(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{id:s.id,timestamp:s.timestamp,status:s.status,error:{message:s.error_message,stack:s.error_stack||void 0,code:s.error_code||void 0,type:s.error_type||void 0},symbols:JSON.parse(s.symbols||"{}"),flowPosition:s.flow_position?JSON.parse(s.flow_position):void 0,environment:s.environment,service:s.service||void 0,version:s.version||void 0,userId:s.user_id||void 0,requestId:s.request_id||void 0,groupId:s.group_id||void 0,notes:JSON.parse(s.notes||"[]"),relatedIncidents:JSON.parse(s.related_incidents||"[]"),resolvedAt:s.resolved_at||void 0,resolvedBy:s.resolved_by||void 0,resolution:s.resolution?JSON.parse(s.resolution):void 0}}rowToPattern(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{id:s.id,name:s.name,description:s.description||"",pattern:JSON.parse(s.pattern),resolution:JSON.parse(s.resolution),confidence:JSON.parse(s.confidence),source:s.source,private:s.private===1,tags:JSON.parse(s.tags||"[]"),createdAt:s.created_at,updatedAt:s.updated_at}}rowToGroup(e,t){let s={};e.forEach((o,l)=>{s[o]=t[l];});let i=this.db.exec("SELECT incident_id FROM group_members WHERE group_id = ?",[s.id]),r=[];if(i.length>0)for(let o of i[0].values)r.push(o[0]);let n=this.db.exec(`SELECT DISTINCT environment FROM incidents
351
+ WHERE id IN (SELECT incident_id FROM group_members WHERE group_id = ?)`,[s.id]),a=[];if(n.length>0)for(let o of n[0].values)a.push(o[0]);return {id:s.id,name:s.name||void 0,incidents:r,commonSymbols:JSON.parse(s.common_symbols||"{}"),commonErrorPatterns:JSON.parse(s.common_error_patterns||"[]"),count:r.length,firstSeen:s.first_seen,lastSeen:s.last_seen,environments:a,suggestedPattern:s.suggested_pattern_id&&this.getPattern(s.suggested_pattern_id)||void 0}}recordPracticeEvent(e){this.initializeSync();let t=`PE-${v4().substring(0,8)}`,s=new Date().toISOString();return this.db.run(`INSERT INTO practice_events (
352
+ id, timestamp, habit_id, habit_category, result,
353
+ engineer, session_id, lore_entry_id, task_description,
354
+ symbols_touched, files_modified, related_incident_id, notes
355
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[t,s,e.habitId,e.habitCategory,e.result,e.engineer,e.sessionId,e.loreEntryId||null,e.taskDescription||null,JSON.stringify(e.symbolsTouched||[]),JSON.stringify(e.filesModified||[]),e.relatedIncidentId||null,e.notes||null]),this.save(),t}getPracticeEvents(e={}){this.initializeSync();let{limit:t=100,offset:s=0}=e,i=[],r=[];e.habitId&&(i.push("habit_id = ?"),r.push(e.habitId)),e.habitCategory&&(i.push("habit_category = ?"),r.push(e.habitCategory)),e.result&&(i.push("result = ?"),r.push(e.result)),e.engineer&&(i.push("engineer = ?"),r.push(e.engineer)),e.sessionId&&(i.push("session_id = ?"),r.push(e.sessionId)),e.dateFrom&&(i.push("timestamp >= ?"),r.push(e.dateFrom)),e.dateTo&&(i.push("timestamp <= ?"),r.push(e.dateTo));let n=i.length>0?`WHERE ${i.join(" AND ")}`:"",a=this.db.exec(`SELECT * FROM practice_events ${n} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...r,t,s]);return a.length===0?[]:a[0].values.map(o=>this.rowToPracticeEvent(a[0].columns,o))}getPracticeEventCount(e={}){this.initializeSync();let t=[],s=[];e.habitId&&(t.push("habit_id = ?"),s.push(e.habitId)),e.habitCategory&&(t.push("habit_category = ?"),s.push(e.habitCategory)),e.result&&(t.push("result = ?"),s.push(e.result)),e.engineer&&(t.push("engineer = ?"),s.push(e.engineer)),e.dateFrom&&(t.push("timestamp >= ?"),s.push(e.dateFrom)),e.dateTo&&(t.push("timestamp <= ?"),s.push(e.dateTo));let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=this.db.exec(`SELECT COUNT(*) as count FROM practice_events ${i}`,s);return r.length===0||r[0].values.length===0?0:r[0].values[0][0]}getComplianceRate(e={}){this.initializeSync();let t=[],s=[];e.habitId&&(t.push("habit_id = ?"),s.push(e.habitId)),e.habitCategory&&(t.push("habit_category = ?"),s.push(e.habitCategory)),e.engineer&&(t.push("engineer = ?"),s.push(e.engineer)),e.dateFrom&&(t.push("timestamp >= ?"),s.push(e.dateFrom)),e.dateTo&&(t.push("timestamp <= ?"),s.push(e.dateTo));let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=this.db.exec(`SELECT result, COUNT(*) as count
356
+ FROM practice_events ${i}
357
+ GROUP BY result`,s),n=0,a=0,o=0;if(r.length>0)for(let d of r[0].values){let g=d[0],p=d[1];g==="followed"?n=p:g==="skipped"?a=p:g==="partial"&&(o=p);}let l=n+a+o,u=l>0?(n+o*.5)/l*100:100;return {total:l,followed:n,skipped:a,partial:o,rate:Math.round(u)}}rowToPracticeEvent(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{id:s.id,timestamp:s.timestamp,habitId:s.habit_id,habitCategory:s.habit_category,result:s.result,engineer:s.engineer,sessionId:s.session_id,loreEntryId:s.lore_entry_id||void 0,taskDescription:s.task_description||void 0,symbolsTouched:JSON.parse(s.symbols_touched||"[]"),filesModified:JSON.parse(s.files_modified||"[]"),relatedIncidentId:s.related_incident_id||void 0,notes:s.notes||void 0}}inferSymbolType(e){return e.startsWith("#")?"component":e.startsWith("^")?"gate":e.startsWith("!")?"signal":e.startsWith("$")?"flow":e.startsWith("~")?"aspect":"raw"}insertLog(e){this.initializeSync();let t=e.id||v4(),s=e.timestamp||new Date().toISOString(),i=e.symbolType||this.inferSymbolType(e.symbol);return this.db.run(`INSERT INTO logs (
358
+ id, timestamp, level, symbol, symbol_type, message, data_json,
359
+ service, session_id, correlation_id, duration_ms, environment
360
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[t,s,e.level,e.symbol,i,e.message,e.data?JSON.stringify(e.data):null,e.service,e.sessionId||null,e.correlationId||null,e.durationMs??null,e.environment||null]),this.save(),t}insertLogBatch(e){this.initializeSync();let t=0,s=[];for(let i of e)try{let r=i.id||v4(),n=i.timestamp||new Date().toISOString(),a=i.symbolType||this.inferSymbolType(i.symbol);this.db.run(`INSERT INTO logs (
361
+ id, timestamp, level, symbol, symbol_type, message, data_json,
362
+ service, session_id, correlation_id, duration_ms, environment
363
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[r,n,i.level,i.symbol,a,i.message,i.data?JSON.stringify(i.data):null,i.service,i.sessionId||null,i.correlationId||null,i.durationMs??null,i.environment||null]),t++;}catch(r){s.push(r instanceof Error?r.message:String(r));}return this.save(),{accepted:t,errors:s}}queryLogs(e={}){this.initializeSync();let{limit:t=100,offset:s=0}=e,i=[],r=[];e.level&&(i.push("level = ?"),r.push(e.level)),e.symbol&&(i.push("symbol LIKE ?"),r.push(`%${e.symbol}%`)),e.service&&(i.push("service = ?"),r.push(e.service)),e.sessionId&&(i.push("session_id = ?"),r.push(e.sessionId)),e.correlationId&&(i.push("correlation_id = ?"),r.push(e.correlationId)),e.search&&(i.push("message LIKE ?"),r.push(`%${e.search}%`)),e.since&&(i.push("timestamp >= ?"),r.push(e.since)),e.until&&(i.push("timestamp <= ?"),r.push(e.until));let n=i.length>0?`WHERE ${i.join(" AND ")}`:"",a=this.db.exec(`SELECT * FROM logs ${n} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...r,t,s]);return a.length===0?[]:a[0].values.map(o=>this.rowToLogEntry(a[0].columns,o))}getLogCount(e={}){this.initializeSync();let t=[],s=[];e.level&&(t.push("level = ?"),s.push(e.level)),e.symbol&&(t.push("symbol LIKE ?"),s.push(`%${e.symbol}%`)),e.service&&(t.push("service = ?"),s.push(e.service)),e.since&&(t.push("timestamp >= ?"),s.push(e.since)),e.until&&(t.push("timestamp <= ?"),s.push(e.until));let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=this.db.exec(`SELECT COUNT(*) as count FROM logs ${i}`,s);return r.length===0||r[0].values.length===0?0:r[0].values[0][0]}pruneLogs(e){if(this.initializeSync(),e<=0)return 0;let t=this.getLogCount();if(t<=e)return 0;let s=t-e;return this.db.run(`DELETE FROM logs WHERE id IN (
364
+ SELECT id FROM logs ORDER BY timestamp ASC LIMIT ?
365
+ )`,[s]),this.save(),s}rowToLogEntry(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{id:s.id,timestamp:s.timestamp,level:s.level,symbol:s.symbol,symbolType:s.symbol_type||"raw",message:s.message,data:s.data_json?JSON.parse(s.data_json):void 0,service:s.service,sessionId:s.session_id||void 0,correlationId:s.correlation_id||void 0,durationMs:s.duration_ms||void 0,environment:s.environment||void 0}}registerService(e){this.initializeSync();let t=new Date().toISOString();this.db.run(`INSERT INTO services (name, version, pid, started_at, last_seen_at, environment, metadata_json)
366
+ VALUES (?, ?, ?, ?, ?, ?, ?)
367
+ ON CONFLICT(name) DO UPDATE SET
368
+ version = excluded.version,
369
+ pid = excluded.pid,
370
+ last_seen_at = excluded.last_seen_at,
371
+ environment = excluded.environment,
372
+ metadata_json = excluded.metadata_json`,[e.name,e.version||null,e.pid??null,t,t,e.environment||null,e.metadata?JSON.stringify(e.metadata):null]),this.save();}updateServiceLastSeen(e){this.initializeSync();let t=new Date().toISOString();this.db.run("UPDATE services SET last_seen_at = ? WHERE name = ?",[t,e]),this.save();}getServices(){this.initializeSync();let e=this.db.exec("SELECT * FROM services ORDER BY last_seen_at DESC");return e.length===0?[]:e[0].values.map(t=>{let s={};return e[0].columns.forEach((i,r)=>{s[i]=t[r];}),{name:s.name,version:s.version||void 0,pid:s.pid||void 0,startedAt:s.started_at,lastSeenAt:s.last_seen_at,environment:s.environment||void 0,metadata:s.metadata_json?JSON.parse(s.metadata_json):void 0}})}upsertAppState(e){this.initializeSync(),this.db.run(`INSERT INTO app_state (service, session_id, timestamp, state_json, active_flows_json, active_gates_json)
373
+ VALUES (?, ?, ?, ?, ?, ?)
374
+ ON CONFLICT(service, session_id) DO UPDATE SET
375
+ timestamp = excluded.timestamp,
376
+ state_json = excluded.state_json,
377
+ active_flows_json = excluded.active_flows_json,
378
+ active_gates_json = excluded.active_gates_json`,[e.service,e.sessionId,e.timestamp||new Date().toISOString(),JSON.stringify(e.state),e.activeFlows?JSON.stringify(e.activeFlows):null,e.activeGates?JSON.stringify(e.activeGates):null]),this.save();}getAppState(e,t){this.initializeSync();let s="SELECT * FROM app_state WHERE service = ?",i=[e];t&&(s+=" AND session_id = ?",i.push(t)),s+=" ORDER BY timestamp DESC";let r=this.db.exec(s,i);return r.length===0?[]:r[0].values.map(n=>this.rowToAppState(r[0].columns,n))}getAllAppStates(){this.initializeSync();let e=this.db.exec("SELECT * FROM app_state ORDER BY timestamp DESC");return e.length===0?[]:e[0].values.map(t=>this.rowToAppState(e[0].columns,t))}rowToAppState(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{service:s.service,sessionId:s.session_id,timestamp:s.timestamp,state:JSON.parse(s.state_json),activeFlows:s.active_flows_json?JSON.parse(s.active_flows_json):void 0,activeGates:s.active_gates_json?JSON.parse(s.active_gates_json):void 0}}insertMetric(e){this.initializeSync();let t=v4(),s=e.timestamp||new Date().toISOString();return this.db.run(`INSERT INTO metrics (
379
+ id, timestamp, name, type, value, tags_json, service, environment
380
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,[t,s,e.name,e.type,e.value,JSON.stringify(e.tags||{}),e.service,e.environment||null]),this.save(),t}insertMetricBatch(e){this.initializeSync();let t=0,s=[];for(let i of e)try{let r=v4(),n=i.timestamp||new Date().toISOString();this.db.run(`INSERT INTO metrics (
381
+ id, timestamp, name, type, value, tags_json, service, environment
382
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,[r,n,i.name,i.type,i.value,JSON.stringify(i.tags||{}),i.service,i.environment||null]),t++;}catch(r){s.push(r instanceof Error?r.message:String(r));}return this.save(),{accepted:t,errors:s}}queryMetrics(e={}){this.initializeSync();let{limit:t=100,offset:s=0}=e,i=[],r=[];if(e.name&&(i.push("name = ?"),r.push(e.name)),e.type&&(i.push("type = ?"),r.push(e.type)),e.service&&(i.push("service = ?"),r.push(e.service)),e.tag){let o=e.tag.indexOf("=");if(o>0){let l=e.tag.substring(0,o),u=e.tag.substring(o+1);i.push("tags_json LIKE ?"),r.push(`%"${l}":"${u}"%`);}}e.since&&(i.push("timestamp >= ?"),r.push(e.since)),e.until&&(i.push("timestamp <= ?"),r.push(e.until));let n=i.length>0?`WHERE ${i.join(" AND ")}`:"",a=this.db.exec(`SELECT * FROM metrics ${n} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...r,t,s]);return a.length===0?[]:a[0].values.map(o=>this.rowToMetricEntry(a[0].columns,o))}getMetricCount(e={}){this.initializeSync();let t=[],s=[];if(e.name&&(t.push("name = ?"),s.push(e.name)),e.type&&(t.push("type = ?"),s.push(e.type)),e.service&&(t.push("service = ?"),s.push(e.service)),e.tag){let n=e.tag.indexOf("=");if(n>0){let a=e.tag.substring(0,n),o=e.tag.substring(n+1);t.push("tags_json LIKE ?"),s.push(`%"${a}":"${o}"%`);}}e.since&&(t.push("timestamp >= ?"),s.push(e.since)),e.until&&(t.push("timestamp <= ?"),s.push(e.until));let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=this.db.exec(`SELECT COUNT(*) as count FROM metrics ${i}`,s);return r.length===0||r[0].values.length===0?0:r[0].values[0][0]}aggregateMetric(e,t){this.initializeSync();let s=["name = ?"],i=[e];t?.service&&(s.push("service = ?"),i.push(t.service)),t?.since&&(s.push("timestamp >= ?"),i.push(t.since)),t?.until&&(s.push("timestamp <= ?"),i.push(t.until));let r=`WHERE ${s.join(" AND ")}`,n=this.db.exec(`SELECT COUNT(*) as count, SUM(value) as sum, MIN(value) as min, MAX(value) as max, AVG(value) as avg
383
+ FROM metrics ${r}`,i);if(n.length===0||n[0].values.length===0)return {name:e,count:0,sum:0,min:0,max:0,avg:0};let a=n[0].values[0];return {name:e,count:a[0]||0,sum:a[1]||0,min:a[2]||0,max:a[3]||0,avg:a[4]||0}}pruneMetrics(e){if(this.initializeSync(),e<=0)return 0;let t=this.getMetricCount();if(t<=e)return 0;let s=t-e;return this.db.run(`DELETE FROM metrics WHERE id IN (
384
+ SELECT id FROM metrics ORDER BY timestamp ASC LIMIT ?
385
+ )`,[s]),this.save(),s}rowToMetricEntry(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{id:s.id,timestamp:s.timestamp,name:s.name,type:s.type,value:s.value,tags:s.tags_json?JSON.parse(s.tags_json):{},service:s.service,environment:s.environment||void 0}}insertSpan(e){this.initializeSync();let t=e.spanId||v4(),s=e.startTime||new Date().toISOString();return this.db.run(`INSERT INTO traces (
386
+ trace_id, span_id, parent_span_id, service, symbol, operation,
387
+ start_time, end_time, duration_ms, status, tags_json, log_ids_json
388
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[e.traceId,t,e.parentSpanId||null,e.service,e.symbol,e.operation,s,e.endTime||null,e.durationMs??null,e.status||"ok",JSON.stringify(e.tags||{}),JSON.stringify(e.logIds||[])]),this.save(),t}getTrace(e){this.initializeSync();let t=this.db.exec("SELECT * FROM traces WHERE trace_id = ? ORDER BY start_time ASC",[e]);if(t.length===0||t[0].values.length===0)return null;let s=t[0].values.map(d=>this.rowToTraceSpan(t[0].columns,d)),i=[...new Set(s.map(d=>d.service))],r=s.map(d=>d.startTime),n=s.filter(d=>d.endTime).map(d=>d.endTime),a=r.sort()[0],o=n.length>0?n.sort().reverse()[0]:a,l=new Date(a).getTime(),u=new Date(o).getTime()-l;return {traceId:e,spans:s,services:i,totalDurationMs:u>0?u:0,startTime:a,endTime:o}}queryTraces(e={}){this.initializeSync();let t=[],s=[];e.service&&(t.push("service = ?"),s.push(e.service)),e.symbol&&(t.push("symbol = ?"),s.push(e.symbol)),e.since&&(t.push("start_time >= ?"),s.push(e.since));let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=Math.min(e.limit||20,20),n=this.db.exec(`SELECT DISTINCT trace_id FROM traces ${i} ORDER BY start_time DESC LIMIT ?`,[...s,r]);if(n.length===0)return [];let a=[];for(let o of n[0].values){let l=o[0],u=this.getTrace(l);u&&a.push(u);}return a}rowToTraceSpan(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{traceId:s.trace_id,spanId:s.span_id,parentSpanId:s.parent_span_id||void 0,service:s.service,symbol:s.symbol,operation:s.operation,startTime:s.start_time,endTime:s.end_time||void 0,durationMs:s.duration_ms||void 0,status:s.status||"ok",tags:s.tags_json?JSON.parse(s.tags_json):{},logs:s.log_ids_json?JSON.parse(s.log_ids_json):[]}}registerSchema(e){this.initializeSync();let t=new Date().toISOString();return this.db.run(`INSERT INTO schemas (
389
+ id, version, name, description, scope_json, event_types_json,
390
+ causality_json, visualization_json, tags_json, registered_at, updated_at
391
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
392
+ ON CONFLICT(id) DO UPDATE SET
393
+ version = excluded.version,
394
+ name = excluded.name,
395
+ description = excluded.description,
396
+ scope_json = excluded.scope_json,
397
+ event_types_json = excluded.event_types_json,
398
+ causality_json = excluded.causality_json,
399
+ visualization_json = excluded.visualization_json,
400
+ tags_json = excluded.tags_json,
401
+ updated_at = excluded.updated_at`,[e.id,e.version,e.name,e.description||null,JSON.stringify(e.scope),JSON.stringify(e.eventTypes),e.causality?JSON.stringify(e.causality):null,e.visualization?JSON.stringify(e.visualization):null,JSON.stringify(e.tags||[]),t,t]),this.save(),{id:e.id,version:e.version,name:e.name,description:e.description,scope:e.scope,eventTypes:e.eventTypes,causality:e.causality,visualization:e.visualization,tags:e.tags||[],registeredAt:t,updatedAt:t}}getSchema(e){this.initializeSync();let t=this.db.exec("SELECT * FROM schemas WHERE id = ?",[e]);return t.length===0||t[0].values.length===0?null:this.rowToSchema(t[0].columns,t[0].values[0])}listSchemas(){this.initializeSync();let e=this.db.exec("SELECT * FROM schemas ORDER BY name ASC");return e.length===0?[]:e[0].values.map(t=>this.rowToSchema(e[0].columns,t))}rowToSchema(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{id:s.id,version:s.version,name:s.name,description:s.description||void 0,scope:JSON.parse(s.scope_json),eventTypes:JSON.parse(s.event_types_json),causality:s.causality_json?JSON.parse(s.causality_json):void 0,visualization:s.visualization_json?JSON.parse(s.visualization_json):void 0,tags:JSON.parse(s.tags_json||"[]"),registeredAt:s.registered_at,updatedAt:s.updated_at}}insertEventBatch(e,t,s){this.initializeSync();let i=this.getSchema(e),r=new Map;if(i)for(let o of i.eventTypes)r.set(o.type,{category:o.category,severity:o.severity||"info"});let n=0,a=[];for(let o of s)try{let l=o.id||v4(),u=o.timestamp||new Date().toISOString(),d=r.get(o.type),g=d?.category||"unknown",p=o.severity||d?.severity||"info",h=o.scopeValue!=null?String(o.scopeValue):null,m=typeof o.scopeValue=="number"?o.scopeValue:null;this.db.run(`INSERT INTO events (
402
+ id, schema_id, event_type, category, timestamp, scope_value,
403
+ scope_ordinal, session_id, service, data_json, severity,
404
+ parent_event_id, depth
405
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[l,e,o.type,g,u,h,m,o.sessionId||null,t,o.data?JSON.stringify(o.data):null,p,o.parentEventId||null,o.depth??0]),n++;}catch(l){a.push(l instanceof Error?l.message:String(l));}return this.save(),{accepted:n,errors:a}}queryEvents(e={}){this.initializeSync();let{limit:t=100,offset:s=0}=e,i=[],r=[];e.schemaId&&(i.push("schema_id = ?"),r.push(e.schemaId)),e.eventType&&(i.push("event_type = ?"),r.push(e.eventType)),e.category&&(i.push("category = ?"),r.push(e.category)),e.service&&(i.push("service = ?"),r.push(e.service)),e.sessionId&&(i.push("session_id = ?"),r.push(e.sessionId)),e.scopeValue&&(i.push("scope_value = ?"),r.push(e.scopeValue)),e.scopeFrom&&(i.push("scope_value >= ?"),r.push(e.scopeFrom)),e.scopeTo&&(i.push("scope_value <= ?"),r.push(e.scopeTo)),e.severity&&(i.push("severity = ?"),r.push(e.severity)),e.since&&(i.push("timestamp >= ?"),r.push(e.since)),e.until&&(i.push("timestamp <= ?"),r.push(e.until)),e.search&&(i.push("data_json LIKE ?"),r.push(`%${e.search}%`));let n=i.length>0?`WHERE ${i.join(" AND ")}`:"",a=this.db.exec(`SELECT * FROM events ${n} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...r,t,s]);return a.length===0?[]:a[0].values.map(o=>this.rowToGenericEvent(a[0].columns,o))}queryEventsByScope(e,t){this.initializeSync();let s=this.db.exec(`SELECT * FROM events
406
+ WHERE schema_id = ? AND scope_value = ?
407
+ ORDER BY timestamp ASC`,[e,t]);return s.length===0?[]:s[0].values.map(i=>this.rowToGenericEvent(s[0].columns,i))}getEventScopes(e,t={}){this.initializeSync();let{limit:s=100,offset:i=0}=t,r=["schema_id = ?"],n=[e];t.sessionId&&(r.push("session_id = ?"),n.push(t.sessionId));let a=`WHERE ${r.join(" AND ")}`,o=this.db.exec(`SELECT
408
+ scope_value,
409
+ MIN(scope_ordinal) as scope_ordinal,
410
+ COUNT(*) as event_count,
411
+ MIN(timestamp) as first_timestamp,
412
+ MAX(timestamp) as last_timestamp
413
+ FROM events
414
+ ${a}
415
+ AND scope_value IS NOT NULL
416
+ GROUP BY scope_value
417
+ ORDER BY MIN(COALESCE(scope_ordinal, 0)) DESC, MIN(timestamp) DESC
418
+ LIMIT ? OFFSET ?`,[...n,s,i]);if(o.length===0)return [];let l=[];for(let u of o[0].values){let d=u[0],g=u[1]!=null?u[1]:void 0,p=u[2],h=u[3],m=u[4],v=this.db.exec(`SELECT category, COUNT(*) as count FROM events
419
+ WHERE schema_id = ? AND scope_value = ?
420
+ GROUP BY category`,[e,d]),S={};if(v.length>0)for(let O of v[0].values)S[O[0]]=O[1];l.push({scopeValue:d,scopeOrdinal:g,eventCount:p,categories:S,firstTimestamp:h,lastTimestamp:m});}return l}getEventCount(e={}){this.initializeSync();let t=[],s=[];e.schemaId&&(t.push("schema_id = ?"),s.push(e.schemaId)),e.eventType&&(t.push("event_type = ?"),s.push(e.eventType)),e.service&&(t.push("service = ?"),s.push(e.service)),e.since&&(t.push("timestamp >= ?"),s.push(e.since)),e.until&&(t.push("timestamp <= ?"),s.push(e.until));let i=t.length>0?`WHERE ${t.join(" AND ")}`:"",r=this.db.exec(`SELECT COUNT(*) as count FROM events ${i}`,s);return r.length===0||r[0].values.length===0?0:r[0].values[0][0]}pruneEvents(e){if(this.initializeSync(),e<=0)return 0;let t=this.getEventCount();if(t<=e)return 0;let s=t-e;return this.db.run(`DELETE FROM events WHERE id IN (
421
+ SELECT id FROM events ORDER BY timestamp ASC LIMIT ?
422
+ )`,[s]),this.save(),s}rowToGenericEvent(e,t){let s={};return e.forEach((i,r)=>{s[i]=t[r];}),{id:s.id,schemaId:s.schema_id,eventType:s.event_type,category:s.category,timestamp:s.timestamp,scopeValue:s.scope_value||void 0,scopeOrdinal:s.scope_ordinal!=null?s.scope_ordinal:void 0,sessionId:s.session_id||void 0,service:s.service,data:s.data_json?JSON.parse(s.data_json):void 0,severity:s.severity||"info",parentEventId:s.parent_event_id||void 0,depth:s.depth||0}}close(){this.db&&(this.save(),this.db.close(),this.db=null);}},F={enabled:false,tokens:[]},P={enabled:false,global:{maxRequestsPerMinute:600,maxEntriesPerBatch:500,samplingRate:1},perService:{}},U={port:3838,maxLogs:1e4,maxBatchSize:500,wsMaxSubscribers:256,pruneIntervalInserts:100,logRetentionDays:0,auth:F,rateLimit:P},q=[".sentinel.yaml",".sentinel.yml"];function x(e){for(let t of q){let s=y.join(e,t);if(f.existsSync(s)){let i=f.readFileSync(s,"utf-8");return V(i)}}return null}function K(e,t){let s=y.join(e,".sentinel.yaml"),i=Z(t);f.writeFileSync(s,i,"utf-8");}function V(e){let t={version:"1.0",project:""},s=e.split(`
423
+ `),i=null,r=null;for(let n of s){let a=n.trimEnd();if(!a||a.startsWith("#"))continue;let o=a.match(/^(\w+):\s*(.+)$/);if(o){let[,h,m]=o;h==="version"?t.version=m.replace(/['"]/g,""):h==="project"?t.project=m.replace(/['"]/g,""):h==="environment"&&(t.environment=m.replace(/['"]/g,"")),i=null,r=null;continue}let l=a.match(/^(\w+):$/);if(l){i=l[1],r=null,i==="symbols"&&!t.symbols&&(t.symbols={}),i==="routes"&&!t.routes&&(t.routes={}),i==="scrub"&&!t.scrub&&(t.scrub={}),i==="server"&&!t.server&&(t.server={});continue}let u=a.match(/^\s{2}(\w+):$/);if(u&&i){r=u[1],i==="symbols"&&t.symbols&&(t.symbols[r]=[]),i==="scrub"&&t.scrub&&(t.scrub[r]=[]);continue}let d=a.match(/^\s+-\s+(.+)$/);if(d&&i&&r){let h=d[1].replace(/['"]/g,"");if(i==="symbols"&&t.symbols){let m=t.symbols[r];Array.isArray(m)&&m.push(h);}if(i==="scrub"&&t.scrub){let m=t.scrub[r];Array.isArray(m)&&m.push(h);}continue}let g=a.match(/^\s+(['"]?\/[^'"]+['"]?):\s+['"]?([^'"]+)['"]?$/);if(g&&i==="routes"&&t.routes){let h=g[1].replace(/['"]/g,"");t.routes[h]=g[2];continue}let p=a.match(/^\s+(\w+):\s+(\d+)$/);if(p&&i==="server"&&t.server){let h=p[1],m=parseInt(p[2],10);h in{port:1,maxLogs:1,maxBatchSize:1,wsMaxSubscribers:1,pruneIntervalInserts:1,logRetentionDays:1}&&(t.server[h]=m);continue}}return t}function Z(e){let t=[];if(t.push("# Sentinel Configuration"),t.push("# Auto-generated \u2014 edit freely"),t.push(""),t.push(`version: "${e.version}"`),t.push(`project: "${e.project}"`),e.environment&&t.push(`environment: "${e.environment}"`),e.symbols){t.push(""),t.push("symbols:");for(let[s,i]of Object.entries(e.symbols))if(i&&i.length>0){t.push(` ${s}:`);for(let r of i)t.push(` - ${r}`);}}if(e.routes&&Object.keys(e.routes).length>0){t.push(""),t.push("routes:");for(let[s,i]of Object.entries(e.routes))t.push(` "${s}": ${i}`);}if(e.scrub){if(t.push(""),t.push("scrub:"),e.scrub.headers?.length){t.push(" headers:");for(let s of e.scrub.headers)t.push(` - ${s}`);}if(e.scrub.fields?.length){t.push(" fields:");for(let s of e.scrub.fields)t.push(` - ${s}`);}}if(e.server&&Object.keys(e.server).length>0){t.push(""),t.push("server:");for(let[s,i]of Object.entries(e.server))i!==void 0&&t.push(` ${s}: ${i}`);}return t.push(""),t.join(`
424
+ `)}function Q(e){let t={...U},s=e?x(e):null,i=y.join(process.env.HOME||"~",".paradigm"),r=x(i);for(let n of [r,s])n?.server&&(n.server.port!==void 0&&(t.port=n.server.port),n.server.maxLogs!==void 0&&(t.maxLogs=n.server.maxLogs),n.server.maxBatchSize!==void 0&&(t.maxBatchSize=n.server.maxBatchSize),n.server.wsMaxSubscribers!==void 0&&(t.wsMaxSubscribers=n.server.wsMaxSubscribers),n.server.pruneIntervalInserts!==void 0&&(t.pruneIntervalInserts=n.server.pruneIntervalInserts),n.server.logRetentionDays!==void 0&&(t.logRetentionDays=n.server.logRetentionDays));return process.env.SENTINEL_PORT&&(t.port=parseInt(process.env.SENTINEL_PORT,10)),process.env.SENTINEL_MAX_LOGS&&(t.maxLogs=parseInt(process.env.SENTINEL_MAX_LOGS,10)),t}var ee={id:"paradigm-logger",version:"1.0.0",name:"Paradigm Logger",description:"Structured logs from @a-company/paradigm-logger with symbolic context",scope:{field:"correlationId",type:"string",label:"Correlation",ordering:"independent",sessionField:"sessionId"},eventTypes:[{type:"log:debug",category:"logs",label:"Debug Log",severity:"debug",frequency:"high",fields:[{name:"symbol",type:"string",indexed:true,display:true},{name:"symbolType",type:"string",indexed:true,display:true},{name:"message",type:"string",display:true},{name:"service",type:"string",indexed:true,display:true},{name:"durationMs",type:"number",display:true}]},{type:"log:info",category:"logs",label:"Info Log",severity:"info",frequency:"high",fields:[{name:"symbol",type:"string",indexed:true,display:true},{name:"symbolType",type:"string",indexed:true,display:true},{name:"message",type:"string",display:true},{name:"service",type:"string",indexed:true,display:true},{name:"durationMs",type:"number",display:true}]},{type:"log:warn",category:"logs",label:"Warning Log",severity:"warn",frequency:"medium",fields:[{name:"symbol",type:"string",indexed:true,display:true},{name:"symbolType",type:"string",indexed:true,display:true},{name:"message",type:"string",display:true},{name:"service",type:"string",indexed:true,display:true}]},{type:"log:error",category:"logs",label:"Error Log",severity:"error",frequency:"low",fields:[{name:"symbol",type:"string",indexed:true,display:true},{name:"symbolType",type:"string",indexed:true,display:true},{name:"message",type:"string",display:true},{name:"service",type:"string",indexed:true,display:true}]},{type:"metric:counter",category:"metrics",label:"Counter Metric",severity:"info",frequency:"high",fields:[{name:"name",type:"string",indexed:true,display:true},{name:"value",type:"number",display:true},{name:"tags",type:"object"}]},{type:"metric:gauge",category:"metrics",label:"Gauge Metric",severity:"info",frequency:"medium",fields:[{name:"name",type:"string",indexed:true,display:true},{name:"value",type:"number",display:true},{name:"tags",type:"object"}]},{type:"metric:histogram",category:"metrics",label:"Histogram Metric",severity:"info",frequency:"medium",fields:[{name:"name",type:"string",indexed:true,display:true},{name:"value",type:"number",display:true},{name:"tags",type:"object"}]},{type:"trace:span",category:"traces",label:"Trace Span",severity:"info",frequency:"medium",fields:[{name:"traceId",type:"string",indexed:true,display:true},{name:"spanId",type:"string",indexed:true},{name:"operation",type:"string",display:true},{name:"durationMs",type:"number",display:true},{name:"status",type:"string",display:true}]},{type:"incident:recorded",category:"incidents",label:"Incident Recorded",severity:"error",frequency:"low",fields:[{name:"incidentId",type:"string",indexed:true,display:true},{name:"errorMessage",type:"string",display:true},{name:"symbols",type:"object"},{name:"environment",type:"string",display:true}]}],visualization:{defaultView:"table",categoryColors:{logs:"#3b82f6",metrics:"#22c55e",traces:"#a855f7",incidents:"#ef4444"},summaryFields:["symbol","message","service"],defaultExcluded:["log:debug"]},tags:["builtin","paradigm"]},te={id:"paradigm-symphony",version:"1.0.0",name:"Symphony Conversations",description:"Agent-to-agent messaging events from The Score protocol",scope:{field:"threadId",type:"string",label:"Thread",ordering:"independent",sessionField:"sessionId"},eventTypes:[{type:"note:question",category:"dialogue",label:"Question",severity:"info",frequency:"high",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:context",category:"dialogue",label:"Context",severity:"info",frequency:"high",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:clarification",category:"dialogue",label:"Clarification",severity:"info",frequency:"medium",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:verification",category:"dialogue",label:"Verification",severity:"info",frequency:"medium",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:reference",category:"dialogue",label:"Reference",severity:"info",frequency:"medium",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:proposal",category:"action",label:"Proposal",severity:"info",frequency:"medium",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"diff",type:"string"},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:action",category:"action",label:"Action",severity:"info",frequency:"medium",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"diff",type:"string"},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:decision",category:"outcome",label:"Decision",severity:"warn",frequency:"low",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"decision",type:"string",display:true},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:approval",category:"outcome",label:"Approval",severity:"info",frequency:"low",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"parentId",type:"string",indexed:true}]},{type:"note:rejection",category:"outcome",label:"Rejection",severity:"warn",frequency:"low",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"parentId",type:"string",indexed:true}]},{type:"note:alert",category:"system",label:"Alert",severity:"error",frequency:"low",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"symbols",type:"object"},{name:"parentId",type:"string",indexed:true}]},{type:"note:handoff",category:"lifecycle",label:"Handoff",severity:"info",frequency:"low",fields:[{name:"sender",type:"string",indexed:true,display:true},{name:"senderRole",type:"string",indexed:true,display:true},{name:"text",type:"string",display:true},{name:"parentId",type:"string",indexed:true}]},{type:"thread:created",category:"lifecycle",label:"Thread Created",severity:"info",frequency:"low",fields:[{name:"topic",type:"string",display:true},{name:"initiator",type:"string",indexed:true,display:true}]},{type:"thread:resolved",category:"lifecycle",label:"Thread Resolved",severity:"info",frequency:"low",fields:[{name:"topic",type:"string",display:true},{name:"decision",type:"string",display:true}]},{type:"participant:joined",category:"lifecycle",label:"Participant Joined",severity:"info",frequency:"low",fields:[{name:"participantId",type:"string",indexed:true,display:true},{name:"participantName",type:"string",display:true},{name:"participantRole",type:"string",display:true}]},{type:"participant:left",category:"lifecycle",label:"Participant Left",severity:"info",frequency:"low",fields:[{name:"participantId",type:"string",indexed:true,display:true},{name:"participantName",type:"string",display:true}]},{type:"file:requested",category:"transfer",label:"File Requested",severity:"info",frequency:"low",fields:[{name:"requestId",type:"string",indexed:true,display:true},{name:"filePath",type:"string",display:true},{name:"requester",type:"string",indexed:true,display:true},{name:"reason",type:"string",display:true},{name:"urgency",type:"string",display:true}]},{type:"file:approved",category:"transfer",label:"File Approved",severity:"info",frequency:"low",fields:[{name:"requestId",type:"string",indexed:true,display:true},{name:"filePath",type:"string",display:true},{name:"size",type:"number",display:true},{name:"hash",type:"string"}]},{type:"file:denied",category:"transfer",label:"File Denied",severity:"warn",frequency:"low",fields:[{name:"requestId",type:"string",indexed:true,display:true},{name:"filePath",type:"string",display:true},{name:"reason",type:"string",display:true}]},{type:"file:delivered",category:"transfer",label:"File Delivered",severity:"info",frequency:"low",fields:[{name:"requestId",type:"string",indexed:true,display:true},{name:"filePath",type:"string",display:true},{name:"size",type:"number",display:true},{name:"hash",type:"string"}]}],visualization:{defaultView:"tree",categoryColors:{dialogue:"#7dd3fc",action:"#86efac",outcome:"#fbbf24",system:"#f87171",lifecycle:"#a78bfa",transfer:"#34d399"},summaryFields:["sender","text","senderRole"],defaultExcluded:[]},tags:["builtin","symphony"]};var ie={minScore:30,maxResults:5,boostConfidence:true},re=class{constructor(e){this.storage=e;}match(e,t={}){let{minScore:s,maxResults:i,boostConfidence:r}={...ie,...t},n=this.storage.getAllPatterns({includePrivate:true}),a=[];for(let o of n){if(!this.matchEnvironment(o,e))continue;let{score:l,matchedCriteria:u}=this.scoreMatch(o,e);if(l>=s){let d=l;if(r){let g=o.confidence.score/100;d=l*(.5+.5*g);}a.push({pattern:o,score:l,matchedCriteria:u,confidence:Math.round(d)}),this.storage.updatePatternConfidence(o.id,"matched");}}return a.sort((o,l)=>l.confidence-o.confidence).slice(0,i)}testPattern(e,t=100){let s=this.storage.getRecentIncidents({limit:t}),i=[],r=0;for(let n of s){if(!this.matchEnvironment(e,n))continue;let{score:a}=this.scoreMatch(e,n);a>=30&&(i.push(n),r+=a);}return {wouldMatch:i,matchCount:i.length,avgScore:i.length>0?Math.round(r/i.length):0}}scoreMatch(e,t){let s=0,i={symbols:[],errorKeywords:[],missingSignals:[]},r=this.matchSymbols(e.pattern.symbols,t.symbols,i.symbols);s+=Math.min(r,50);let n=this.matchErrorText(e,t,i.errorKeywords);s+=Math.min(n,25);let a=this.matchMissingSignals(e,t,i.missingSignals);return s+=Math.min(a,25),s=Math.min(s,100),{score:s,matchedCriteria:i}}matchSymbols(e,t,s){let i=0,r=["feature","component","flow","gate","signal","state","integration"];for(let n of r){let a=e[n],o=t[n];if(!(!a||!o)){if(typeof a=="string")this.matchSingleSymbol(a,o)&&(i+=a.includes("*")?5:10,s.push(n));else if(Array.isArray(a)){for(let l of a)if(this.matchSingleSymbol(l,o)){i+=7,s.push(n);break}}}}return i}matchSingleSymbol(e,t){if(e==="*")return true;if(e.endsWith("*")){let s=e.slice(0,-1);return t.startsWith(s)}if(e.startsWith("*")){let s=e.slice(1);return t.endsWith(s)}return e.includes("*")?new RegExp("^"+e.replace(/\*/g,".*")+"$").test(t):e===t}matchErrorText(e,t,s){let i=0,r=t.error.message.toLowerCase(),n=t.error.type?.toLowerCase();if(e.pattern.errorContains)for(let a of e.pattern.errorContains)r.includes(a.toLowerCase())&&(i+=5,s.push(a));if(e.pattern.errorMatches)try{new RegExp(e.pattern.errorMatches,"i").test(t.error.message)&&(i+=10,s.push(`regex:${e.pattern.errorMatches}`));}catch{}if(e.pattern.errorType&&n)for(let a of e.pattern.errorType)n.includes(a.toLowerCase())&&(i+=5,s.push(`type:${a}`));return i}matchMissingSignals(e,t,s){if(!e.pattern.missingSignals||!t.flowPosition?.missing)return 0;let i=0;for(let r of e.pattern.missingSignals)for(let n of t.flowPosition.missing)if(this.matchSingleSymbol(r,n)){i+=12,s.push(n);break}return i}matchEnvironment(e,t){return !e.pattern.environment||e.pattern.environment.length===0?true:e.pattern.environment.includes(t.environment)}},ne=fileURLToPath(import.meta.url),j=y.dirname(ne);function ae(){let e=y.join(j,"universal-patterns.json"),t=f.readFileSync(e,"utf-8");return JSON.parse(t)}function oe(){let e=y.join(j,"paradigm-patterns.json"),t=f.readFileSync(e,"utf-8");return JSON.parse(t)}function le(){let e=ae(),t=oe();return {version:"1.0.0",exportedAt:new Date().toISOString(),patterns:[...e.patterns,...t.patterns]}}function N(e,t){return e.startsWith(t)?e:`${t}${e}`}var ue=class{flowId;sentinel;actual=[];expected=[];completed=false;constructor(e,t){this.flowId=N(e,"$"),this.sentinel=t;}expect(...e){return this.expected.push(...e),this}step(e){return this.actual.push(e),this}gate(e,t){let s=N(e,"^");return this.actual.push(s),t||this.fail(new Error(`Gate ${s} failed`)),this}signal(e,t){return this.actual.push(N(e,"!")),this}complete(){this.completed=true;}fail(e){if(this.completed)return;this.completed=true;let t=this.expected.filter(r=>!this.actual.includes(r)),s=this.actual.length>0?this.actual[this.actual.length-1]:void 0,i={flowId:this.flowId,expected:this.expected,actual:this.actual,missing:t,failedAt:s};this.sentinel.capture(e,{flow:this.flowId},i);}},Ne=class{storage;matcher;config;ready=false;readyPromise=null;seeded=false;constructor(e){this.config=e,this.storage=new A(e.dbPath),this.matcher=new re(this.storage);}async init(){if(!this.ready)return this.readyPromise?this.readyPromise:(this.readyPromise=this.doInit(),this.readyPromise)}async doInit(){if(await this.storage.ensureReady(),!this.seeded){try{let{patterns:e}=le();for(let t of e)try{this.storage.addPattern(t);}catch{}}catch{}this.seeded=true;}this.ready=true;}ensureReady(){this.ready||this.readyPromise||(this.readyPromise=this.doInit());}component(e){let t=N(e,"#"),s=this;return {id:t,capture(i,r){return s.capture(i,{component:t,...r})},wrap(i){return((...r)=>{try{let n=i(...r);return n&&typeof n.catch=="function"?n.catch(a=>{throw s.capture(a,{component:t}),a}):n}catch(n){throw n instanceof Error&&s.capture(n,{component:t}),n}})}}}gate(e,t){if(!t){let s=N(e,"^");this.capture(new Error(`Gate ${s} failed`),{gate:s});}}signal(e,t){N(e,"!");}flow(e){return new ue(e,this)}capture(e,t,s){this.ensureReady();let i={error:{message:e.message,stack:e.stack,type:e.constructor.name!=="Error"?e.constructor.name:void 0},symbols:t||{},environment:this.config.environment||"development",service:this.config.service,version:this.config.version,flowPosition:s},r=this.storage.recordIncident(i),n=this.storage.getIncident(r);return n&&this.config.onCapture&&this.config.onCapture(n),r}match(e){let t=this.storage.getIncident(e);return t?this.matcher.match(t):[]}express(){let e=this;return (t,s,i,r)=>{let n={},a=(s.path||s.url||"").split("/").filter(Boolean);a.length>=2&&(n.component=`#${a[1]}`);let o=e.capture(t,n);i.setHeader&&i.setHeader("X-Sentinel-Incident",o),r(t);}}close(){this.storage.close(),this.ready=false,this.readyPromise=null;}getStorage(){return this.storage}getMatcher(){return this.matcher}},de=[{dirs:["services","src/services"],prefix:"#",type:"components"},{dirs:["routes","src/routes","api","src/api"],prefix:"#",type:"components"},{dirs:["handlers","src/handlers"],prefix:"#",type:"components"},{dirs:["controllers","src/controllers"],prefix:"#",type:"components"},{dirs:["components","src/components"],prefix:"#",type:"components"},{dirs:["lib","src/lib"],prefix:"#",type:"components"},{dirs:["middleware","src/middleware"],prefix:"^",type:"gates"},{dirs:["guards","src/guards"],prefix:"^",type:"gates"},{dirs:["auth","src/auth"],prefix:"^",type:"gates"},{dirs:["events","src/events"],prefix:"!",type:"signals"},{dirs:["listeners","src/listeners"],prefix:"!",type:"signals"},{dirs:["flows","src/flows"],prefix:"$",type:"flows"},{dirs:["workflows","src/workflows"],prefix:"$",type:"flows"},{dirs:["pipelines","src/pipelines"],prefix:"$",type:"flows"}],$=new Set([".ts",".js",".tsx",".jsx",".mjs",".mts"]);function ce(e){let t={components:[],gates:[],flows:[],signals:[],routes:{}},s=pe(e);s&&(t.components.push(...s.components),t.gates.push(...s.gates),t.flows.push(...s.flows),t.signals.push(...s.signals));for(let i of de)for(let r of i.dirs){let n=y.join(e,r);if(!f.existsSync(n))continue;let a=B(n);for(let o of a){let l=y.extname(o);if(!$.has(l))continue;let u=y.basename(o,l);if(u==="index"||u.endsWith(".test")||u.endsWith(".spec"))continue;let d=`${i.prefix}${C(u)}`;t[i.type].includes(d)||t[i.type].push(d);}}return he(e,t),t}function Oe(e){let t=ce(e);return {version:"1.0",project:y.basename(e),symbols:{components:t.components.length>0?t.components:void 0,gates:t.gates.length>0?t.gates:void 0,flows:t.flows.length>0?t.flows:void 0,signals:t.signals.length>0?t.signals:void 0},routes:Object.keys(t.routes).length>0?t.routes:void 0}}function pe(e){let t=y.join(e,".paradigm");if(!f.existsSync(t))return null;let s={components:[],gates:[],flows:[],signals:[],routes:{}},i=z(e,".purpose");for(let r of i)try{let n=f.readFileSync(r,"utf-8");me(n,s);}catch{}return s.components.length>0||s.gates.length>0||s.flows.length>0||s.signals.length>0?s:null}function me(e,t){let s=e.split(`
425
+ `),i="";for(let r of s){let n=r.trim();if(n==="components:"||n==="features:"){i="components";continue}if(n==="gates:"){i="gates";continue}if(n==="flows:"){i="flows";continue}if(n==="signals:"){i="signals";continue}if(i&&/^\s{2}\S/.test(r)){let a=n.match(/^([a-zA-Z][\w-]*):$/);if(a){let o=`${{components:"#",gates:"^",flows:"$",signals:"!"}[i]||"#"}${a[1]}`;t[i]?.includes(o)||t[i]?.push(o);}}n&&!r.startsWith(" ")&&!n.endsWith(":")&&(i="");}}function he(e,t){let s=["routes","src/routes","api","src/api"];for(let i of s){let r=y.join(e,i);if(!f.existsSync(r))continue;let n=B(r);for(let a of n){let o=y.extname(a);if(!$.has(o))continue;let l=y.basename(a,o);if(l==="index")continue;let u=`/api/${C(l)}`,d=`#${C(l)}`;t.routes[u]=d;}}}function C(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").replace(/\..*$/,"").toLowerCase()}function B(e){try{return f.readdirSync(e).filter(t=>{let s=y.join(e,t);try{return f.statSync(s).isFile()}catch{return !1}})}catch{return []}}function z(e,t,s=4,i=0){if(i>s)return [];let r=[],n=new Set(["node_modules","dist",".git","coverage",".next",".nuxt"]);try{let a=f.readdirSync(e,{withFileTypes:!0});for(let o of a)o.isFile()&&o.name===t?r.push(y.join(e,o.name)):o.isDirectory()&&!n.has(o.name)&&r.push(...z(y.join(e,o.name),t,s,i+1));}catch{}return r}var Re=class{constructor(e,t){this.storage=e,this.similarityThreshold=t?.similarityThreshold??.6,this.decayHalfLifeDays=t?.decayHalfLifeDays??14,this.useStackFingerprint=t?.useStackFingerprint??true;}similarityThreshold;decayHalfLifeDays;useStackFingerprint;group(e){let t=this.storage.getGroups({limit:100});for(let i of t)if(this.shouldJoinGroup(e,i))return this.storage.addToGroup(i.id,e.id),i.id;let s=this.findSimilar(e,10);if(s.length>=1){let i=this.extractCommonSymbols([e,...s]),r=this.extractCommonErrorPatterns([e,...s]);return this.storage.createGroup({incidents:[e.id,...s.map(n=>n.id)],commonSymbols:i,commonErrorPatterns:r,firstSeen:this.getEarliestTimestamp([e,...s]),lastSeen:e.timestamp,environments:this.getUniqueEnvironments([e,...s])})}return null}findSimilar(e,t=10){let s=this.storage.getRecentIncidents({limit:500,status:"all"}),i=[];for(let r of s){if(r.id===e.id)continue;let n=this.calculateSimilarity(e,r);n>=this.similarityThreshold&&i.push({incident:r,score:n});}return i.sort((r,n)=>n.score-r.score).slice(0,t).map(r=>r.incident)}analyzeAndGroup(e={}){let t=e.minSize||3,s=this.storage.getRecentIncidents({limit:1e3}).filter(n=>!n.groupId),i=[],r=new Set;for(let n of s){if(r.has(n.id))continue;let a=s.filter(o=>o.id!==n.id&&!r.has(o.id)&&this.calculateSimilarity(n,o)>=this.similarityThreshold);if(a.length+1>=t){let o=[n,...a],l=this.extractCommonSymbols(o),u=this.extractCommonErrorPatterns(o),d=this.storage.createGroup({incidents:o.map(p=>p.id),commonSymbols:l,commonErrorPatterns:u,firstSeen:this.getEarliestTimestamp(o),lastSeen:this.getLatestTimestamp(o),environments:this.getUniqueEnvironments(o)});for(let p of o)r.add(p.id);let g=this.storage.getGroup(d);g&&i.push(g);}}return i}calculateSimilarity(e,t){let s=0,i=0,r=this.useStackFingerprint&&e.error.stack&&t.error.stack,n=r?.45:.6,a=r?.25:.3,o=.1,l=r?.2:0,u=["feature","component","flow","gate","signal","state","integration"];for(let m of u){let v=e.symbols[m],S=t.symbols[m];(v||S)&&(i+=n/u.length,v===S&&(s+=n/u.length));}let d=this.stringSimilarity(e.error.message,t.error.message);if(s+=a*d,i+=a,e.environment===t.environment&&(s+=o),i+=o,r){let m=this.fingerprintStack(e.error.stack),v=this.fingerprintStack(t.error.stack),S=this.compareFingerprints(m,v);s+=l*S,i+=l;}let g=i>0?s/i:0,p=Math.abs(new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime())/(1e3*60*60*24),h=Math.pow(.5,p/this.decayHalfLifeDays);return g*h}fingerprintStack(e){return e.split(`
426
+ `).filter(t=>t.trim().startsWith("at ")).slice(0,10).map(t=>t.trim().replace(/:\d+:\d+\)?$/,"").replace(/\(.*[/\\]/,"(").replace(/^\s*at\s+/,""))}compareFingerprints(e,t){if(e.length===0&&t.length===0)return 1;if(e.length===0||t.length===0)return 0;let s=0,i=Math.max(e.length,t.length);for(let r=0;r<Math.min(e.length,t.length);r++)e[r]===t[r]&&s++;return s/i}stringSimilarity(e,t){let s=Math.max(e.length,t.length);return s===0?1:1-this.levenshteinDistance(e.toLowerCase(),t.toLowerCase())/s}levenshteinDistance(e,t){if(e.length===0)return t.length;if(t.length===0)return e.length;let s=[];for(let i=0;i<=t.length;i++)s[i]=[i];for(let i=0;i<=e.length;i++)s[0][i]=i;for(let i=1;i<=t.length;i++)for(let r=1;r<=e.length;r++){let n=e[r-1]===t[i-1]?0:1;s[i][r]=Math.min(s[i-1][r]+1,s[i][r-1]+1,s[i-1][r-1]+n);}return s[t.length][e.length]}shouldJoinGroup(e,t){let s=0,i=0;for(let[o,l]of Object.entries(t.commonSymbols))l&&(i++,e.symbols[o]===l&&s++);if(i===0)return false;let r=s/i,n=e.error.message.toLowerCase(),a=t.commonErrorPatterns.some(o=>n.includes(o.toLowerCase()));return r>=.5||a}extractCommonSymbols(e){if(e.length===0)return {};let t=e[0].symbols,s={};for(let[i,r]of Object.entries(t))r&&e.every(n=>n.symbols[i]===r)&&(s[i]=r);return s}extractCommonErrorPatterns(e){if(e.length===0)return [];let t=new Map,s=new Set(["the","a","an","is","are","was","were","in","on","at","to","for","of","with","error","failed","cannot"]);for(let r of e){let n=r.error.message.toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(o=>o.length>2&&!s.has(o)),a=new Set(n);for(let o of a)t.set(o,(t.get(o)||0)+1);}let i=Math.ceil(e.length*.6);return Array.from(t.entries()).filter(([,r])=>r>=i).map(([r])=>r).slice(0,5)}getEarliestTimestamp(e){return e.reduce((t,s)=>s.timestamp<t?s.timestamp:t,e[0].timestamp)}getLatestTimestamp(e){return e.reduce((t,s)=>s.timestamp>t?s.timestamp:t,e[0].timestamp)}getUniqueEnvironments(e){return [...new Set(e.map(t=>t.environment))]}},Le=class{build(e){if(!e.flowPosition)return null;let t=[],s=new Date(e.timestamp).getTime();t.push({timestamp:new Date(s-5e3).toISOString(),symbol:e.flowPosition.flowId,type:"flow-started"});let i=1e3;for(let n of e.flowPosition.actual){let a=this.inferEventType(n);t.push({timestamp:new Date(s-4e3+i).toISOString(),symbol:n,type:a}),i+=Math.random()*1e3+500;}let r=e.flowPosition.failedAt||e.flowPosition.missing[0]||e.symbols.gate||e.symbols.signal||"unknown";return t.push({timestamp:e.timestamp,symbol:r,type:"error",data:{message:e.error.message,missing:e.flowPosition.missing}}),{incidentId:e.id,flowId:e.flowPosition.flowId,events:t,failure:{at:e.timestamp,symbol:r,reason:e.error.message}}}renderAscii(e){let t=[];t.push(`${e.flowId} Timeline`),t.push("\u2550".repeat(40)),t.push("");for(let i of e.events){let r=this.formatTime(i.timestamp),n=this.getEventIcon(i.type),a=this.getEventStatus(i.type),o=`${r} ${n} ${i.symbol}`;a&&(o+=` (${a})`),t.push(o),i.type==="error"&&i.data&&(t.push(` \u2514\u2500 ${i.data.message}`),i.data.missing&&Array.isArray(i.data.missing)&&i.data.missing.length>0&&t.push(` \u2514\u2500 Expected: ${i.data.missing.join(", ")}`));}let s=e.events.find(i=>i.type==="error")?.data?.missing;return s&&s.length>0&&(t.push(""),t.push(`Missing signals: ${s.join(", ")}`)),t.join(`
427
+ `)}renderStructured(e){return {incidentId:e.incidentId,flow:{id:e.flowId,eventCount:e.events.length},events:e.events.map(t=>({time:this.formatTime(t.timestamp),symbol:t.symbol,type:t.type,status:this.getEventStatus(t.type),data:t.data})),failure:{at:this.formatTime(e.failure.at),symbol:e.failure.symbol,reason:e.failure.reason}}}inferEventType(e){return e.startsWith("^")?"gate-passed":e.startsWith("!")?"signal-emitted":e.startsWith("%")?"state-changed":"signal-emitted"}getEventIcon(e){switch(e){case "flow-started":return "\u25B6";case "flow-ended":return "\u25A0";case "gate-passed":return "\u2713";case "gate-failed":return "\u2717";case "signal-emitted":return "\u26A1";case "state-changed":return "\u25C6";case "error":return "\u2717";default:return "\u2022"}}getEventStatus(e){switch(e){case "gate-passed":return "PASSED";case "gate-failed":return "FAILED";case "signal-emitted":return "EMITTED";case "state-changed":return "CHANGED";case "error":return "ERROR";default:return ""}}formatTime(e){let t=new Date(e),s=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),r=String(t.getSeconds()).padStart(2,"0"),n=String(t.getMilliseconds()).padStart(3,"0");return `${s}:${i}:${r}.${n}`}},we=class{constructor(e){this.storage=e;}getStats(e=7){let t=new Date().toISOString(),s=new Date(Date.now()-e*24*60*60*1e3).toISOString();return this.storage.getStats({start:s,end:t})}getSymbolHealth(e){return this.storage.getSymbolHealth(e)}getTrendingIssues(e=7){let t=Date.now(),s=e*24*60*60*1e3/2,i=new Date(t-e*24*60*60*1e3).toISOString(),r=new Date(t-s).toISOString(),n=new Date(t).toISOString(),a=this.storage.getRecentIncidents({dateFrom:i,dateTo:r,limit:1e3}),o=this.storage.getRecentIncidents({dateFrom:r,dateTo:n,limit:1e3}),l=this.countSymbols(a),u=this.countSymbols(o),d=[],g=new Set([...l.keys(),...u.keys()]);for(let p of g){let h=l.get(p)||0,m=u.get(p)||0;if(h===0&&m>0)d.push({symbol:p,trend:m*100});else if(h>0){let v=(m-h)/h*100;d.push({symbol:p,trend:v});}}return d.filter(p=>p.trend>0).sort((p,h)=>h.trend-p.trend).slice(0,10)}getResolutionMetrics(){let e=this.getStats(30);return {avgTimeToResolve:e.resolution.avgTimeToResolve,resolvedWithPattern:e.resolution.resolvedWithPattern,resolvedManually:e.resolution.resolvedManually,totalResolved:e.incidents.resolved,resolutionRate:e.resolution.resolutionRate}}getPatternEffectiveness(){return this.storage.getAllPatterns({includePrivate:true}).filter(e=>e.confidence.timesMatched>0).map(e=>({patternId:e.id,name:e.name,matches:e.confidence.timesMatched,resolutions:e.confidence.timesResolved,recurrences:e.confidence.timesRecurred,effectiveness:e.confidence.timesMatched>0?Math.round((e.confidence.timesResolved-e.confidence.timesRecurred)/e.confidence.timesMatched*100):0})).sort((e,t)=>t.effectiveness-e.effectiveness)}getIncidentsByHour(e=7){let t=new Date(Date.now()-e*24*60*60*1e3).toISOString(),s=this.storage.getRecentIncidents({dateFrom:t,limit:1e4}),i=new Map;for(let r=0;r<24;r++)i.set(r,0);for(let r of s){let n=new Date(r.timestamp).getHours();i.set(n,(i.get(n)||0)+1);}return Array.from(i.entries()).map(([r,n])=>({hour:r,count:n}))}getIncidentsByEnvironment(){let e=this.getStats(30),t=e.incidents.total;return Object.entries(e.incidents.byEnvironment).map(([s,i])=>({environment:s,count:i,percentage:t>0?Math.round(i/t*100):0})).sort((s,i)=>i.count-s.count)}getSymbolCorrelation(){let e=this.storage.getRecentIncidents({limit:1e3}),t=new Map,s=new Map;for(let r of e){let n=this.getSymbolsFromIncident(r);for(let a of n)s.set(a,(s.get(a)||0)+1);for(let a=0;a<n.length;a++)for(let o=a+1;o<n.length;o++){let l=[n[a],n[o]].sort().join("|");t.set(l,(t.get(l)||0)+1);}}let i=[];for(let[r,n]of t){let[a,o]=r.split("|"),l=s.get(a)||1,u=s.get(o)||1,d=n/Math.max(l,u);d>.3&&i.push({symbol1:a,symbol2:o,correlation:Math.round(d*100)/100});}return i.sort((r,n)=>n.correlation-r.correlation).slice(0,20)}generateDashboard(e=7){let t=this.getStats(e),s=[];s.push("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"),s.push("\u2551 PARADIGM SENTINEL DASHBOARD \u2551"),s.push("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563");let i=t.incidents.byDay[t.incidents.byDay.length-1]?.count||0;s.push(`\u2551 Open: ${String(t.incidents.open).padEnd(4)} \u2502 Investigating: ${String(t.incidents.total-t.incidents.open-t.incidents.resolved).padEnd(3)} \u2502 Resolved: ${String(t.incidents.resolved).padEnd(4)} \u2502 Today: +${i} \u2551`),s.push("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"),s.push(""),s.push("Incidents by Day (last 7 days):"),s.push("\u2500".repeat(50));let r=Math.max(...t.incidents.byDay.map(n=>n.count),1);for(let n of t.incidents.byDay.slice(-7)){let a=Math.round(n.count/r*30),o="\u2588".repeat(a);s.push(`${n.date.substring(5)} ${o} ${n.count}`);}s.push(""),s.push("Most Affected Symbols:"),s.push("\u2500".repeat(50));for(let{symbol:n,count:a}of t.symbols.mostIncidents.slice(0,5))s.push(` ${n.padEnd(25)} ${a} incidents`);s.push(""),s.push("Top Patterns:"),s.push("\u2500".repeat(50));for(let{patternId:n,resolvedCount:a}of t.patterns.mostEffective.slice(0,5))s.push(` ${n.padEnd(25)} ${a} resolved`);return s.push(""),s.push("Resolution Stats:"),s.push("\u2500".repeat(50)),s.push(` Resolution rate: ${Math.round(t.resolution.resolutionRate)}%`),s.push(` With pattern: ${t.resolution.resolvedWithPattern}`),s.push(` Manual: ${t.resolution.resolvedManually}`),s.join(`
428
+ `)}countSymbols(e){let t=new Map;for(let s of e)for(let[,i]of Object.entries(s.symbols))i&&t.set(i,(t.get(i)||0)+1);return t}getSymbolsFromIncident(e){let t=[];for(let[,s]of Object.entries(e.symbols))s&&t.push(s);return t}},xe=class{constructor(e=process.cwd()){this.projectRoot=e;}symbolCache=new Map;purposeCache=new Map;enrich(e){let t={};for(let[,i]of Object.entries(e.symbols))if(i){let r=this.getSymbolContext(i);r&&Object.keys(r).length>0&&(t[i]=r);}let s;return e.symbols.flow&&(s=this.getSymbolContext(e.symbols.flow)?.description),{...e,enriched:{symbols:t,flowDescription:s}}}getSymbolContext(e){let t=this.symbolCache.get(e);if(t)return t;let s={},i=this.findInSymbolIndex(e);i&&(s.description=i.description,s.definedIn=i.file,s.references=i.references,s.referencedBy=i.referencedBy);let r=this.findInPurposeFiles(e);return r&&(!s.description&&r.description&&(s.description=r.description),r.references&&(s.references=[...new Set([...s.references||[],...r.references])]),r.referencedBy&&(s.referencedBy=[...new Set([...s.referencedBy||[],...r.referencedBy])])),this.symbolCache.set(e,s),s}findInSymbolIndex(e){let t=y.join(this.projectRoot,".paradigm","index.json");if(!f.existsSync(t))return null;try{let s=f.readFileSync(t,"utf-8"),i=JSON.parse(s);return i.symbols&&Array.isArray(i.symbols)&&i.symbols.find(r=>r.id===e)||null}catch{return null}}findInPurposeFiles(e){let t=this.getSearchPathsForSymbol(e);for(let s of t){let i=y.join(this.projectRoot,s);if(!f.existsSync(i))continue;let r=this.purposeCache.get(i);if(r){if(r.symbol===e)return r;continue}try{let n=f.readFileSync(i,"utf-8"),a=this.parsePurposeFile(n);if(this.purposeCache.set(i,a),a.symbol===e)return a}catch{continue}}return null}getSearchPathsForSymbol(e){let t=[],s=e.replace(/^[@#$%^!&~?]/,""),i={"@":["features","src/features"],"#":["components","src/components"],$:["flows","src/flows"],"^":["middleware","gates","src/middleware"],"!":["signals","events","src/signals"],"%":["state","store","src/state"],"&":["integrations","services","src/integrations"]},r=e[0],n=i[r]||[];for(let a of n)t.push(y.join(a,s,".purpose")),t.push(y.join(a,`${s}.purpose`));return t.push(y.join(".paradigm","purposes",`${s}.yaml`)),t.push(y.join(".paradigm","purposes",`${s}.json`)),t}parsePurposeFile(e){let t={},s=e.split(`
429
+ `);for(let i of s){let r=i.trim();r.startsWith("symbol:")?t.symbol=r.substring(7).trim():r.startsWith("description:")?t.description=r.substring(12).trim():r.startsWith("purpose:")&&(t.description=r.substring(8).trim());}if(!t.description){let i=s.find(r=>r.trim()&&!r.startsWith("#"));i&&(t.description=i.trim());}return t}clearCache(){this.symbolCache.clear(),this.purposeCache.clear();}enrichBatch(e){return e.map(t=>this.enrich(t))}},Ae=class{constructor(e){this.storage=e;}suggestFromIncident(e){let t=this.generatePatternId(e),s=this.buildSymbolCriteria(e.symbols),i=this.extractErrorKeywords(e.error.message);return {id:t,name:this.generatePatternName(e),description:`Auto-suggested pattern from incident ${e.id}`,pattern:{symbols:s,errorContains:i.length>0?i:void 0,missingSignals:e.flowPosition?.missing},resolution:{description:e.resolution?.notes||"Resolution approach TBD",strategy:this.inferStrategy([e]),priority:"medium"},source:"suggested",private:false,tags:this.generateTags(e)}}suggestFromGroup(e){let t=`group-${e.id.toLowerCase().replace(/[^a-z0-9]/g,"-")}`,s=this.buildSymbolCriteria(e.commonSymbols),i=e.incidents.slice(0,20).map(r=>this.storage.getIncident(r)).filter(r=>r!=null);return {id:t,name:e.name||`Pattern from group ${e.id}`,description:`Auto-suggested pattern from incident group with ${e.count} incidents`,pattern:{symbols:s,errorContains:e.commonErrorPatterns.length>0?e.commonErrorPatterns:void 0},resolution:{description:"Resolution approach TBD based on grouped incidents",strategy:i.length>0?this.inferStrategy(i):"fix-code",priority:this.getPriorityFromCount(e.count)},source:"suggested",private:false,tags:this.generateTagsFromGroup(e)}}findPatternCandidates(e=3){let t=this.storage.getRecentIncidents({limit:1e3,status:"resolved"}),s=new Map;for(let r of t){let n=this.getSymbolSignature(r.symbols),a=s.get(n)||[];a.push(r),s.set(n,a);}let i=[];for(let[,r]of s)if(r.length>=e){if(this.hasMatchingPattern(r[0]))continue;let n=this.suggestFromIncidents(r);i.push({incidents:r,suggestedPattern:n,occurrenceCount:r.length});}return i.sort((r,n)=>n.occurrenceCount-r.occurrenceCount)}suggestFromIncidents(e){let t=this.extractCommonSymbols(e),s=this.buildSymbolCriteria(t),i=this.extractCommonErrorKeywords(e),r=this.extractCommonMissingSignals(e);return {id:this.generatePatternId(e[0]),name:this.generatePatternName(e[0]),description:`Auto-suggested pattern from ${e.length} similar incidents`,pattern:{symbols:s,errorContains:i.length>0?i:void 0,missingSignals:r.length>0?r:void 0},resolution:{description:"Resolution approach based on previous resolutions",strategy:this.inferStrategy(e),priority:this.getPriorityFromCount(e.length)},source:"suggested",private:false,tags:this.generateTagsFromIncidents(e)}}buildSymbolCriteria(e){let t={};for(let[s,i]of Object.entries(e))i&&(t[s]=i);return t}extractErrorKeywords(e){let t=new Set(["the","a","an","is","are","was","were","in","on","at","to","for","of","with","and","or","but","not","no","be","been","have","has","had","do","does","did"]),s=e.toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(i=>i.length>2&&!t.has(i));return [...new Set(s)].slice(0,5)}extractCommonErrorKeywords(e){let t=new Map;for(let i of e){let r=this.extractErrorKeywords(i.error.message);for(let n of r)t.set(n,(t.get(n)||0)+1);}let s=Math.ceil(e.length*.5);return Array.from(t.entries()).filter(([,i])=>i>=s).map(([i])=>i).slice(0,5)}extractCommonSymbols(e){if(e.length===0)return {};let t=e[0].symbols,s={};for(let[i,r]of Object.entries(t))r&&e.every(n=>n.symbols[i]===r)&&(s[i]=r);return s}extractCommonMissingSignals(e){let t=new Map;for(let i of e)if(i.flowPosition?.missing)for(let r of i.flowPosition.missing)t.set(r,(t.get(r)||0)+1);let s=Math.ceil(e.length*.5);return Array.from(t.entries()).filter(([,i])=>i>=s).map(([i])=>i)}generatePatternId(e){let t=[];e.symbols.gate?t.push(e.symbols.gate.replace(/[^a-z0-9]/gi,"")):e.symbols.feature?t.push(e.symbols.feature.replace(/[^a-z0-9]/gi,"")):e.symbols.component?t.push(e.symbols.component.replace(/[^a-z0-9]/gi,"")):e.symbols.integration?t.push(e.symbols.integration.replace(/[^a-z0-9]/gi,"")):t.push("unknown");let s=e.error.type?.toLowerCase()||"error";return t.push(s.replace(/[^a-z0-9]/gi,"")),t.push(String(Date.now()%1e3).padStart(3,"0")),t.join("-")}generatePatternName(e){let t=[];if(e.symbols.feature&&t.push(e.symbols.feature.replace("@","").replace(/-/g," ")),e.symbols.gate&&t.push("gate "+e.symbols.gate.replace("^","")),e.error.type&&t.push(e.error.type),t.length===0)return "Unnamed Pattern";let s=t.join(" - ");return s.charAt(0).toUpperCase()+s.slice(1)}generateTags(e){let t=[];return e.symbols.feature&&t.push("feature"),e.symbols.gate&&t.push("gate"),e.symbols.integration&&(t.push("integration"),t.push(e.symbols.integration.replace("&",""))),e.error.type&&t.push(e.error.type.toLowerCase()),t.push(e.environment),[...new Set(t)].slice(0,5)}generateTagsFromGroup(e){let t=["grouped"];e.commonSymbols.feature&&t.push("feature"),e.commonSymbols.gate&&t.push("gate"),e.commonSymbols.integration&&t.push("integration");for(let s of e.environments)t.push(s);return [...new Set(t)].slice(0,5)}generateTagsFromIncidents(e){let t=new Map;for(let s of e){let i=this.generateTags(s);for(let r of i)t.set(r,(t.get(r)||0)+1);}return Array.from(t.entries()).sort((s,i)=>i[1]-s[1]).slice(0,5).map(([s])=>s)}getSymbolSignature(e){let t=[];return e.feature&&t.push(`f:${e.feature}`),e.component&&t.push(`c:${e.component}`),e.flow&&t.push(`fl:${e.flow}`),e.gate&&t.push(`g:${e.gate}`),e.integration&&t.push(`i:${e.integration}`),t.sort().join("|")}hasMatchingPattern(e){let t=this.storage.getAllPatterns({includePrivate:true});for(let s of t){let i=0,r=["feature","component","flow","gate","signal","integration"];for(let n of r){let a=s.pattern.symbols[n],o=e.symbols[n];a&&o&&a===o&&i++;}if(i>=2)return true}return false}inferStrategy(e){let t=e.map(i=>i.error.message.toLowerCase()),s=i=>t.some(r=>i.some(n=>r.includes(n)));return s(["revert","rollback","regression","broke after deploy","since deploy"])?"rollback":s(["config","environment variable","env var","missing key","secret","credential"])?"config-change":s(["out of memory","oom","heap","memory limit","capacity","too many connections","pool exhausted"])?"scale-up":s(["timeout","network","econnrefused","econnreset","dns","socket hang up"])?"retry":s(["unavailable","service down","circuit breaker","fallback","503","502"])?"fallback":s(["validation","invalid","required","constraint","duplicate","not found","404"])?"fix-data":s(["permission","forbidden","403","401","unauthorized","access denied"])?"escalate":new Set(e.map(i=>i.error.type).filter(Boolean)).size>2?"investigate":"fix-code"}getPriorityFromCount(e){return e>=20?"critical":e>=10?"high":e>=5?"medium":"low"}},Ce=class{validate(e){let t=[],s=[];if(!e||typeof e!="object")return {valid:false,errors:["Invalid data: expected object"],warnings:[]};let i=e;if(i.version||t.push("Missing version field"),!Array.isArray(i.patterns))return t.push("Missing or invalid patterns array"),{valid:false,errors:t,warnings:s};for(let r=0;r<i.patterns.length;r++){let n=i.patterns[r],a=this.validatePattern(n,r);t.push(...a.errors),s.push(...a.warnings);}return {valid:t.length===0,errors:t,warnings:s}}validatePattern(e,t){let s=[],i=[],r=`Pattern[${t}]`;if(!e.id||typeof e.id!="string"?s.push(`${r}: Missing or invalid id`):/^[a-z0-9-]+$/.test(e.id)||i.push(`${r}: ID "${e.id}" should be kebab-case`),(!e.name||typeof e.name!="string")&&s.push(`${r}: Missing or invalid name`),!e.pattern||typeof e.pattern!="object")s.push(`${r}: Missing or invalid pattern criteria`);else {let n=e.pattern,a=n.symbols&&typeof n.symbols=="object"&&Object.keys(n.symbols).length>0,o=Array.isArray(n.errorContains)&&n.errorContains.length>0,l=n.errorMatches&&typeof n.errorMatches=="string",u=Array.isArray(n.missingSignals)&&n.missingSignals.length>0;!a&&!o&&!l&&!u&&s.push(`${r}: Pattern must have at least one matching criteria`);}if(!e.resolution||typeof e.resolution!="object")s.push(`${r}: Missing or invalid resolution`);else {let n=e.resolution;(!n.description||typeof n.description!="string")&&s.push(`${r}: Missing resolution description`),!n.strategy||typeof n.strategy!="string"?s.push(`${r}: Missing resolution strategy`):["retry","fallback","fix-data","fix-code","ignore","escalate"].includes(n.strategy)||s.push(`${r}: Invalid strategy "${n.strategy}"`),!n.priority||typeof n.priority!="string"?i.push(`${r}: Missing priority, will default to medium`):["low","medium","high","critical"].includes(n.priority)||i.push(`${r}: Invalid priority "${n.priority}"`);}return {errors:s,warnings:i}}loadFromFile(e){if(!f.existsSync(e))throw new Error(`File not found: ${e}`);let t=f.readFileSync(e,"utf-8"),s=JSON.parse(t),i=this.validate(s);if(!i.valid)throw new Error(`Invalid pattern file: ${i.errors.join(", ")}`);return this.normalizeExport(s)}async loadFromUrl(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch patterns: ${t.statusText}`);let s=await t.json(),i=this.validate(s);if(!i.valid)throw new Error(`Invalid pattern data: ${i.errors.join(", ")}`);return this.normalizeExport(s)}normalizeExport(e){let t=e.patterns.map(s=>this.normalizePattern(s));return {version:e.version||"1.0.0",exportedAt:e.exportedAt||new Date().toISOString(),patterns:t}}normalizePattern(e){let t=e.pattern,s=e.resolution,i=e.confidence||{};return {id:e.id,name:e.name,description:e.description||"",pattern:{symbols:t.symbols||{},errorContains:t.errorContains,errorMatches:t.errorMatches,errorType:t.errorType,missingSignals:t.missingSignals,environment:t.environment},resolution:{description:s.description,strategy:s.strategy,priority:s.priority||"medium",codeHint:s.codeHint,codeSnippet:s.codeSnippet,symbolsToModify:s.symbolsToModify,filesLikelyInvolved:s.filesLikelyInvolved,commitRef:s.commitRef,prRef:s.prRef,docsRef:s.docsRef},confidence:{score:i.score||50,timesMatched:i.timesMatched||0,timesResolved:i.timesResolved||0,timesRecurred:i.timesRecurred||0,avgTimeToResolve:i.avgTimeToResolve,lastMatched:i.lastMatched,lastResolved:i.lastResolved},source:e.source||"imported",private:!!e.private,tags:e.tags||[],createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()}}mergePatterns(...e){let t=new Map;for(let s of e)for(let i of s.patterns)t.set(i.id,i);return {version:"1.0.0",exportedAt:new Date().toISOString(),patterns:Array.from(t.values())}}};export{Ae as A,Ce as B,w as a,H as b,D as c,M as d,J as e,A as f,F as g,P as h,U as i,x as j,K as k,Q as l,ee as m,te as n,re as o,ae as p,oe as q,le as r,ue as s,Ne as t,ce as u,Oe as v,Re as w,Le as x,we as y,xe as z};