@a-company/paradigm 5.37.11 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/dist/{accept-orchestration-SBZVK3H4.js → accept-orchestration-QQISPINV.js} +1 -1
  2. package/dist/add-UOR4INIV.js +8 -0
  3. package/dist/{agent-loader-RIVI6QPP.js → agent-loader-2WJHD46U.js} +1 -1
  4. package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-YKS2PQWO.js} +1 -1
  5. package/dist/{aggregate-W66DM3GA.js → aggregate-A5S5MTCC.js} +1 -1
  6. package/dist/{ambient-76YMUA5Q.js → ambient-BE3SQXNN.js} +1 -1
  7. package/dist/{ambient-WTLYUAQM.js → ambient-NVKQCW2A.js} +12 -12
  8. package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
  9. package/dist/{beacon-5QVYV5DF.js → beacon-QVUD3MGP.js} +1 -1
  10. package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
  11. package/dist/{chunk-SI6SV76D.js → chunk-3DZK54RU.js} +72 -19
  12. package/dist/{chunk-CHVQNRRT.js → chunk-4PSD5R7N.js} +2 -2
  13. package/dist/chunk-6SKSV5B2.js +24 -0
  14. package/dist/{chunk-KFNHCQ4R.js → chunk-FEYOQMZ5.js} +1 -1
  15. package/dist/{chunk-NEJ4ZLCY.js → chunk-GAFKOFAV.js} +1 -1
  16. package/dist/chunk-GRZQIKST.js +2 -0
  17. package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
  18. package/dist/chunk-LPBCQM5Y.js +6 -0
  19. package/dist/{chunk-T6IDXUUA.js → chunk-LWAIVOSF.js} +1 -1
  20. package/dist/{chunk-74SGKSRQ.js → chunk-M2HKWR25.js} +1 -1
  21. package/dist/{chunk-BOYQAMGC.js → chunk-M3PPXJU4.js} +1 -1
  22. package/dist/chunk-PHEX6LU4.js +111 -0
  23. package/dist/chunk-Q527BPUF.js +2 -0
  24. package/dist/chunk-R5ECMBIV.js +11 -0
  25. package/dist/{chunk-X3U3IGYT.js → chunk-TBWWFRL5.js} +1 -1
  26. package/dist/{chunk-MQIG6SMF.js → chunk-TNVWGPCE.js} +1 -1
  27. package/dist/{chunk-SUU6M4JH.js → chunk-TOYQ2QCB.js} +1 -1
  28. package/dist/chunk-TZDYIPVU.js +521 -0
  29. package/dist/{chunk-3XGNXXCT.js → chunk-UZ5H7K6Q.js} +1 -1
  30. package/dist/chunk-VIG5LSGZ.js +2 -0
  31. package/dist/chunk-VNIX5KBT.js +3 -0
  32. package/dist/{chunk-AGFPVSX5.js → chunk-VXIIVMTM.js} +1 -1
  33. package/dist/{chunk-ORDKEGII.js → chunk-WESTEMIM.js} +1 -1
  34. package/dist/{chunk-LBQBWIEX.js → chunk-Y4P4SGZV.js} +1 -1
  35. package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
  36. package/dist/chunk-Z5QW6USC.js +2 -0
  37. package/dist/chunk-ZJQY5PPP.js +7 -0
  38. package/dist/{commands-LMUD5L6R.js → commands-ANRJNG2W.js} +1 -1
  39. package/dist/compliance-BNFWQPKM.js +6 -0
  40. package/dist/config-schema-FLHRVZMI.js +2 -0
  41. package/dist/{constellation-CG7C4WFE.js → constellation-NWLXYATA.js} +1 -1
  42. package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
  43. package/dist/{cost-IDNVMAEV.js → cost-24UZSS2P.js} +1 -1
  44. package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
  45. package/dist/decision-loader-HELL2AMX.js +2 -0
  46. package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
  47. package/dist/{diff-JVEYCXUC.js → diff-MF55KQZH.js} +1 -1
  48. package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
  49. package/dist/dist-JZZJLVMR.js +2 -0
  50. package/dist/{dist-3ZCH25SG.js → dist-OG6MM4VY.js} +1 -1
  51. package/dist/dist-SE67SOXB.js +2 -0
  52. package/dist/{docs-USDAF26F.js → docs-O37YLLRN.js} +1 -1
  53. package/dist/doctor-IG5XM4C4.js +2 -0
  54. package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
  55. package/dist/{flow-POQP27WA.js → flow-BGXOVE2V.js} +1 -1
  56. package/dist/{hooks-IG2GOAHP.js → hooks-TFMMMB2H.js} +1 -1
  57. package/dist/index.js +6 -6
  58. package/dist/init-M44SO65G.js +2 -0
  59. package/dist/init-V4KSEKPK.js +2 -0
  60. package/dist/{integrity-UYDOOJDP.js → integrity-ROO3G43N.js} +1 -1
  61. package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
  62. package/dist/list-CFHINXIS.js +12 -0
  63. package/dist/lore-loader-D2ISOASW.js +2 -0
  64. package/dist/lore-loader-PXFKMKAN.js +2 -0
  65. package/dist/mcp.js +19 -11
  66. package/dist/metrics-UESGUHTA.js +2 -0
  67. package/dist/{migrate-IBDE7VK4.js → migrate-Z5UQN57G.js} +1 -1
  68. package/dist/migrate-assessments-YSITX7KM.js +4 -0
  69. package/dist/migrate-decisions-NPLQOEEH.js +6 -0
  70. package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
  71. package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-QPZJH6XO.js} +1 -1
  72. package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
  73. package/dist/{orchestrate-RCAMBOIB.js → orchestrate-RID7HHHH.js} +1 -1
  74. package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
  75. package/dist/portal-check-DV2VSJ5E.js +8 -0
  76. package/dist/{portal-compliance-4MG5F2GI.js → portal-compliance-JONQ4SOP.js} +1 -1
  77. package/dist/{probe-B22G2JKF.js → probe-5HAXULAD.js} +1 -1
  78. package/dist/{providers-AWA7WLLM.js → providers-4PXMWA7V.js} +1 -1
  79. package/dist/quiz-WYIZJG5K.js +10 -0
  80. package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
  81. package/dist/reindex-FWPD2VGM.js +2 -0
  82. package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
  83. package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
  84. package/dist/{review-6UAH6V3R.js → review-VMSX2PKI.js} +1 -1
  85. package/dist/{ripple-ZGDITCGB.js → ripple-FNZI47SH.js} +1 -1
  86. package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
  87. package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
  88. package/dist/sentinel.js +1 -1
  89. package/dist/{serve-U47GULB6.js → serve-MO35XIZE.js} +1 -1
  90. package/dist/serve-OQYUO7CR.js +12 -0
  91. package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
  92. package/dist/server-FGUL2FWQ.js +7 -0
  93. package/dist/session-tracker-KGORN6B5.js +2 -0
  94. package/dist/{session-work-log-PAKXOFGL.js → session-work-log-4IEVE4KK.js} +1 -1
  95. package/dist/{session-work-log-ZP45TREI.js → session-work-log-EE4UIZ33.js} +1 -1
  96. package/dist/{setup-3F5IK7MO.js → setup-ZSEC72BS.js} +2 -2
  97. package/dist/{shift-FDADESC4.js → shift-TVNY2CQF.js} +6 -6
  98. package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
  99. package/dist/show-WVHAL4VU.js +7 -0
  100. package/dist/{snapshot-L2G56RPL.js → snapshot-3IYB67D4.js} +1 -1
  101. package/dist/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
  102. package/dist/{status-77M3SDIF.js → status-DB3KNLW3.js} +1 -1
  103. package/dist/status-S7Z5FVIE.js +6 -0
  104. package/dist/{summary-LXLHFRN7.js → summary-WLI3NF4G.js} +2 -2
  105. package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
  106. package/dist/sync-55U6QPIA.js +2 -0
  107. package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
  108. package/dist/team-MGT66HZQ.js +2 -0
  109. package/dist/{test-BQJMS4Y2.js → test-WLEPZQFC.js} +1 -1
  110. package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
  111. package/dist/tools-QJHAVYI6.js +2 -0
  112. package/dist/university-content/notes/N-para-001-build-something.md +126 -0
  113. package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
  114. package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
  115. package/dist/university-content/notes/N-para-101-component-types.md +99 -0
  116. package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
  117. package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
  118. package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
  119. package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
  120. package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
  121. package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
  122. package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
  123. package/dist/university-content/notes/N-para-101-welcome.md +51 -0
  124. package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
  125. package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
  126. package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
  127. package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
  128. package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
  129. package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
  130. package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
  131. package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
  132. package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
  133. package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
  134. package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
  135. package/dist/university-content/notes/N-para-301-context-management.md +53 -0
  136. package/dist/university-content/notes/N-para-301-decisions.md +99 -0
  137. package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
  138. package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
  139. package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
  140. package/dist/university-content/notes/N-para-301-history-system.md +42 -0
  141. package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
  142. package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
  143. package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
  144. package/dist/university-content/notes/N-para-301-protocols.md +113 -0
  145. package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
  146. package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
  147. package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
  148. package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
  149. package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
  150. package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
  151. package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
  152. package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
  153. package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
  154. package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
  155. package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
  156. package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
  157. package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
  158. package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
  159. package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
  160. package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
  161. package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
  162. package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
  163. package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
  164. package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
  165. package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
  166. package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
  167. package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
  168. package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
  169. package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
  170. package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
  171. package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
  172. package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
  173. package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
  174. package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
  175. package/dist/university-content/notes/N-para-501-task-management.md +100 -0
  176. package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
  177. package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
  178. package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
  179. package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
  180. package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
  181. package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
  182. package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
  183. package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
  184. package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
  185. package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
  186. package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
  187. package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
  188. package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
  189. package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
  190. package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
  191. package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
  192. package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
  193. package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
  194. package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
  195. package/dist/university-content/paths/LP-para-001.yaml +29 -0
  196. package/dist/university-content/paths/LP-para-101.yaml +59 -0
  197. package/dist/university-content/paths/LP-para-201.yaml +69 -0
  198. package/dist/university-content/paths/LP-para-301.yaml +84 -0
  199. package/dist/university-content/paths/LP-para-401.yaml +74 -0
  200. package/dist/university-content/paths/LP-para-501.yaml +89 -0
  201. package/dist/university-content/paths/LP-para-601.yaml +59 -0
  202. package/dist/university-content/paths/LP-para-701.yaml +64 -0
  203. package/dist/university-content/quizzes/Q-para-001-build-something.yaml +46 -0
  204. package/dist/university-content/quizzes/Q-para-001-meet-the-team.yaml +46 -0
  205. package/dist/university-content/quizzes/Q-para-001-shift-setup.yaml +46 -0
  206. package/dist/university-content/quizzes/Q-para-101-component-types.yaml +46 -0
  207. package/dist/university-content/quizzes/Q-para-101-first-steps.yaml +56 -0
  208. package/dist/university-content/quizzes/Q-para-101-five-symbols.yaml +66 -0
  209. package/dist/university-content/quizzes/Q-para-101-paradigm-logger.yaml +56 -0
  210. package/dist/university-content/quizzes/Q-para-101-portal-yaml.yaml +56 -0
  211. package/dist/university-content/quizzes/Q-para-101-project-structure.yaml +66 -0
  212. package/dist/university-content/quizzes/Q-para-101-purpose-files.yaml +56 -0
  213. package/dist/university-content/quizzes/Q-para-101-tags-and-classification.yaml +56 -0
  214. package/dist/university-content/quizzes/Q-para-101-welcome.yaml +56 -0
  215. package/dist/university-content/quizzes/Q-para-201-architecture-review.yaml +66 -0
  216. package/dist/university-content/quizzes/Q-para-201-aspect-graph.yaml +46 -0
  217. package/dist/university-content/quizzes/Q-para-201-aspects-and-anchors.yaml +56 -0
  218. package/dist/university-content/quizzes/Q-para-201-component-patterns.yaml +56 -0
  219. package/dist/university-content/quizzes/Q-para-201-cross-cutting-concerns.yaml +56 -0
  220. package/dist/university-content/quizzes/Q-para-201-disciplines.yaml +66 -0
  221. package/dist/university-content/quizzes/Q-para-201-flows-deep-dive.yaml +66 -0
  222. package/dist/university-content/quizzes/Q-para-201-gates-deep-dive.yaml +66 -0
  223. package/dist/university-content/quizzes/Q-para-201-portal-protocol.yaml +56 -0
  224. package/dist/university-content/quizzes/Q-para-201-signal-patterns.yaml +56 -0
  225. package/dist/university-content/quizzes/Q-para-201-symbol-naming.yaml +66 -0
  226. package/dist/university-content/quizzes/Q-para-301-context-management.yaml +56 -0
  227. package/dist/university-content/quizzes/Q-para-301-decisions.yaml +76 -0
  228. package/dist/university-content/quizzes/Q-para-301-doctor-and-validation.yaml +66 -0
  229. package/dist/university-content/quizzes/Q-para-301-enforcement-levels.yaml +46 -0
  230. package/dist/university-content/quizzes/Q-para-301-fragility-tracking.yaml +46 -0
  231. package/dist/university-content/quizzes/Q-para-301-history-system.yaml +56 -0
  232. package/dist/university-content/quizzes/Q-para-301-navigation-system.yaml +56 -0
  233. package/dist/university-content/quizzes/Q-para-301-operations-review.yaml +66 -0
  234. package/dist/university-content/quizzes/Q-para-301-paradigm-shift.yaml +46 -0
  235. package/dist/university-content/quizzes/Q-para-301-protocols.yaml +56 -0
  236. package/dist/university-content/quizzes/Q-para-301-ripple-analysis.yaml +56 -0
  237. package/dist/university-content/quizzes/Q-para-301-sentinel-observability.yaml +46 -0
  238. package/dist/university-content/quizzes/Q-para-301-sync-and-maintenance.yaml +46 -0
  239. package/dist/university-content/quizzes/Q-para-301-wisdom-system.yaml +56 -0
  240. package/dist/university-content/quizzes/Q-para-401-agent-identity.yaml +66 -0
  241. package/dist/university-content/quizzes/Q-para-401-agent-interop.yaml +46 -0
  242. package/dist/university-content/quizzes/Q-para-401-agent-roles.yaml +56 -0
  243. package/dist/university-content/quizzes/Q-para-401-commit-conventions.yaml +56 -0
  244. package/dist/university-content/quizzes/Q-para-401-mastery-review.yaml +66 -0
  245. package/dist/university-content/quizzes/Q-para-401-mcp-tools-overview.yaml +66 -0
  246. package/dist/university-content/quizzes/Q-para-401-multi-agent-coordination.yaml +76 -0
  247. package/dist/university-content/quizzes/Q-para-401-notebooks-permissions.yaml +61 -0
  248. package/dist/university-content/quizzes/Q-para-401-orchestration-workflow.yaml +66 -0
  249. package/dist/university-content/quizzes/Q-para-401-pm-governance.yaml +66 -0
  250. package/dist/university-content/quizzes/Q-para-401-provider-cascade.yaml +56 -0
  251. package/dist/university-content/quizzes/Q-para-401-quick-check.yaml +46 -0
  252. package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
  253. package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
  254. package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
  255. package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
  256. package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
  257. package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
  258. package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
  259. package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
  260. package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
  261. package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
  262. package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
  263. package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
  264. package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
  265. package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
  266. package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
  267. package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
  268. package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
  269. package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
  270. package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
  271. package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
  272. package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
  273. package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
  274. package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
  275. package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
  276. package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
  277. package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
  278. package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
  279. package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
  280. package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
  281. package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
  282. package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
  283. package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
  284. package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
  285. package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
  286. package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
  287. package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
  288. package/dist/university-content/reference.json +2 -2
  289. package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
  290. package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
  291. package/dist/university-ui/index.html +1 -1
  292. package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
  293. package/dist/{validate-VZXTJHGO.js → validate-BB6LRWIY.js} +1 -1
  294. package/dist/validate-XUQZTF3H.js +9 -0
  295. package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
  296. package/dist/workspace-VMSPYIBV.js +2 -0
  297. package/lore-ui/dist/assets/{index-Bk-K0qgN.js → index-DKhNxgtW.js} +10 -10
  298. package/lore-ui/dist/index.html +1 -1
  299. package/package.json +3 -2
  300. package/platform-ui/dist/assets/{AmbientSection-BYjt75R1.js → AmbientSection-CwatqcBD.js} +1 -1
  301. package/platform-ui/dist/assets/{CanvasSection-rKvA_vZj.js → CanvasSection-dFAthehN.js} +1 -1
  302. package/platform-ui/dist/assets/{DocsSection-CI9K73M-.js → DocsSection-BZ2SFJBZ.js} +1 -1
  303. package/platform-ui/dist/assets/{GitSection-DSGj_c6S.js → GitSection-MNNYU1tO.js} +1 -1
  304. package/platform-ui/dist/assets/{GraphSection-CawN7pC5.js → GraphSection-COYjb4Pt.js} +1 -1
  305. package/platform-ui/dist/assets/LoreSection-B0hUbfsJ.js +1 -0
  306. package/platform-ui/dist/assets/{SentinelSection-DNgoYMH0.js → SentinelSection-BCxW1DCp.js} +1 -1
  307. package/platform-ui/dist/assets/{SymphonySection-C0zfcqv3.js → SymphonySection-BsucZRqy.js} +1 -1
  308. package/platform-ui/dist/assets/{TeamSection-Bzd3Dt9Q.js → TeamSection-C0QNTudW.js} +1 -1
  309. package/platform-ui/dist/assets/{UniversitySection-tBr62R0S.js → UniversitySection-DN1-g9pw.js} +1 -1
  310. package/platform-ui/dist/assets/{index-BaOmyn11.js → index-DwUT8pju.js} +2 -2
  311. package/platform-ui/dist/index.html +1 -1
  312. package/templates/paradigm/specs/symbols.md +4 -2
  313. package/dist/add-P76GEMGF.js +0 -8
  314. package/dist/chunk-3TR6LLXP.js +0 -111
  315. package/dist/chunk-G7XFK2GI.js +0 -11
  316. package/dist/chunk-J6KWGCHN.js +0 -24
  317. package/dist/chunk-JQKKVAAN.js +0 -2
  318. package/dist/chunk-ODVKPZZ4.js +0 -2
  319. package/dist/chunk-Q2J542ST.js +0 -2
  320. package/dist/chunk-QT2LKB3P.js +0 -7
  321. package/dist/chunk-SHD27BQX.js +0 -6
  322. package/dist/chunk-WS2N27RX.js +0 -3
  323. package/dist/chunk-YT52WLBF.js +0 -521
  324. package/dist/compliance-WJINB5DM.js +0 -6
  325. package/dist/config-schema-GUQY2QN7.js +0 -2
  326. package/dist/decision-loader-2XPZE4EZ.js +0 -2
  327. package/dist/dist-R3RWD35F.js +0 -2
  328. package/dist/dist-VXCZWVVJ.js +0 -2
  329. package/dist/doctor-QJ47XAUP.js +0 -2
  330. package/dist/init-HIBRSVUB.js +0 -2
  331. package/dist/list-5IUGP3ZB.js +0 -7
  332. package/dist/lore-loader-RVQI5GXL.js +0 -2
  333. package/dist/lore-loader-XY5MZRR2.js +0 -2
  334. package/dist/migrate-assessments-GEI5WMI2.js +0 -4
  335. package/dist/portal-check-Z3OCQEQR.js +0 -8
  336. package/dist/quiz-FE5UGAY2.js +0 -10
  337. package/dist/reindex-FO5VMZVQ.js +0 -2
  338. package/dist/serve-OY6XYL7F.js +0 -12
  339. package/dist/server-2MNROHF6.js +0 -7
  340. package/dist/session-tracker-MWJAJA6Z.js +0 -2
  341. package/dist/show-BOAVWZPZ.js +0 -7
  342. package/dist/status-A37ECYNJ.js +0 -6
  343. package/dist/sync-DLUBV5HQ.js +0 -2
  344. package/dist/team-NSP6PMPS.js +0 -2
  345. package/dist/tools-CERDNVCG.js +0 -2
  346. package/dist/university-content/courses/.purpose +0 -492
  347. package/dist/university-content/courses/para-001.json +0 -166
  348. package/dist/university-content/courses/para-101.json +0 -615
  349. package/dist/university-content/courses/para-201.json +0 -794
  350. package/dist/university-content/courses/para-301.json +0 -830
  351. package/dist/university-content/courses/para-401.json +0 -868
  352. package/dist/university-content/courses/para-501.json +0 -1166
  353. package/dist/university-content/courses/para-601.json +0 -719
  354. package/dist/university-content/courses/para-701.json +0 -807
  355. package/dist/university-content/plsat/.purpose +0 -162
  356. package/dist/university-content/plsat/v2.0.json +0 -760
  357. package/dist/university-content/plsat/v3.0.json +0 -3453
  358. package/dist/validate-C6SMKGYD.js +0 -9
  359. package/dist/workspace-MKSQN7B2.js +0 -2
  360. package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
  361. /package/dist/{chunk-BV5PRPLB.js → chunk-IZSBGW6E.js} +0 -0
  362. /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoreSection-oO5dCe6O.js","assets/LoreSection-qnmm3o4y.css","assets/GraphSection-CawN7pC5.js","assets/GraphSection-Bbs2a8sC.css","assets/CanvasSection-rKvA_vZj.js","assets/CanvasSection-flMXU19z.css","assets/GitSection-DSGj_c6S.js","assets/GitSection-C-GQWHcu.css","assets/SentinelSection-DNgoYMH0.js","assets/SentinelSection-BI-aIYKL.css","assets/SymphonySection-C0zfcqv3.js","assets/SymphonySection-zY0C5tFl.css","assets/DocsSection-CI9K73M-.js","assets/DocsSection-CjdO6R-u.css","assets/AmbientSection-BYjt75R1.js","assets/AmbientSection-10pbwWjo.css","assets/TeamSection-Bzd3Dt9Q.js","assets/TeamSection-udxWQTcX.css","assets/UniversitySection-tBr62R0S.js","assets/UniversitySection-B3ltVfpt.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoreSection-B0hUbfsJ.js","assets/LoreSection-qnmm3o4y.css","assets/GraphSection-COYjb4Pt.js","assets/GraphSection-Bbs2a8sC.css","assets/CanvasSection-dFAthehN.js","assets/CanvasSection-flMXU19z.css","assets/GitSection-MNNYU1tO.js","assets/GitSection-C-GQWHcu.css","assets/SentinelSection-BCxW1DCp.js","assets/SentinelSection-BI-aIYKL.css","assets/SymphonySection-BsucZRqy.js","assets/SymphonySection-zY0C5tFl.css","assets/DocsSection-BZ2SFJBZ.js","assets/DocsSection-CjdO6R-u.css","assets/AmbientSection-CwatqcBD.js","assets/AmbientSection-10pbwWjo.css","assets/TeamSection-C0QNTudW.js","assets/TeamSection-udxWQTcX.css","assets/UniversitySection-DN1-g9pw.js","assets/UniversitySection-B3ltVfpt.css"])))=>i.map(i=>d[i]);
2
2
  var zc=Object.defineProperty;var Lc=(e,t,n)=>t in e?zc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Yi=(e,t,n)=>Lc(e,typeof t!="symbol"?t+"":t,n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();var dm=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Zo(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var cs={exports:{}},al={},fs={exports:{}},z={};/**
3
3
  * @license React
4
4
  * react.production.min.js
@@ -54,4 +54,4 @@ Error generating stack: `+o.message+`
54
54
  *
55
55
  * This source code is licensed under the MIT license found in the
56
56
  * LICENSE file in the root directory of this source tree.
57
- */var Cl=L,gp=yp;function wp(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Sp=typeof Object.is=="function"?Object.is:wp,kp=gp.useSyncExternalStore,_p=Cl.useRef,Ep=Cl.useEffect,xp=Cl.useMemo,Cp=Cl.useDebugValue;Cc.useSyncExternalStoreWithSelector=function(e,t,n,r,l){var o=_p(null);if(o.current===null){var i={hasValue:!1,value:null};o.current=i}else i=o.current;o=xp(function(){function s(S){if(!c){if(c=!0,h=S,S=r(S),l!==void 0&&i.hasValue){var y=i.value;if(l(y,S))return p=y}return p=S}if(y=p,Sp(h,S))return y;var k=r(S);return l!==void 0&&l(y,k)?(h=S,y):(h=S,p=k)}var c=!1,h,p,m=n===void 0?null:n;return[function(){return s(t())},m===null?void 0:function(){return s(m())}]},[t,n,r,l]);var u=kp(e,o[0],o[1]);return Ep(function(){i.hasValue=!0,i.value=u},[u]),Cp(u),u};xc.exports=Cc;var Np=xc.exports;const jp=Zo(Np),Pc={},{useDebugValue:Pp}=Ss,{useSyncExternalStoreWithSelector:Tp}=jp;let os=!1;const zp=e=>e;function Lp(e,t=zp,n){(Pc?"production":void 0)!=="production"&&n&&!os&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),os=!0);const r=Tp(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return Pp(r),r}const is=e=>{(Pc?"production":void 0)!=="production"&&typeof e!="function"&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");const t=typeof e=="function"?up(e):e,n=(r,l)=>Lp(t,r,l);return Object.assign(n,t),n},Qi=e=>e?is(e):is;let xn=null;const X=Qi((e,t)=>({activeSection:"overview",availableSections:["overview","lore","graph","git"],projectName:"",theme:localStorage.getItem("paradigm-platform-theme")||"dark",setActiveSection:n=>{e({activeSection:n}),window.history.pushState(null,"",`/${n==="overview"?"":n}`)},setAvailableSections:n=>e({availableSections:n}),setProjectName:n=>e({projectName:n}),toggleTheme:()=>{const n=t().theme==="dark"?"light":"dark";e({theme:n}),localStorage.setItem("paradigm-platform-theme",n),document.documentElement.setAttribute("data-theme",n)},fetchPlatformInfo:async()=>{var r;xn==null||xn.abort(),xn=new AbortController;const{signal:n}=xn;try{const[l,o]=await Promise.all([fetch("/api/info",{signal:n}),fetch("/api/platform/sections",{signal:n})]);if(l.ok){const i=await l.json();e({projectName:i.project||i.name||""})}if(o.ok){const i=await o.json();(r=i.sections)!=null&&r.length&&e({availableSections:i.sections})}}catch(l){if(l instanceof Error&&l.name==="AbortError")return}}})),Op={overview:"◉",lore:"◆",graph:"◎",canvas:"▦",git:"⎇",sentinel:"◈",university:"▣",symphony:"♪",docs:"☰",ambient:"◌",team:"◫",meetings:"●"};function Rp(){const e=X(o=>o.activeSection),t=X(o=>o.availableSections),n=X(o=>o.setActiveSection),r=X(o=>o.toggleTheme),l=X(o=>o.theme);return v.jsxs("nav",{className:"sidebar",children:[v.jsx("div",{className:"sidebar__nav",children:t.map(o=>v.jsxs("button",{className:`sidebar__item ${e===o?"sidebar__item--active":""}`,onClick:()=>n(o),title:o.charAt(0).toUpperCase()+o.slice(1),children:[v.jsx("span",{className:"sidebar__item-icon",children:Op[o]||"○"}),v.jsx("span",{className:"sidebar__item-label",children:o})]},o))}),v.jsx("div",{className:"sidebar__bottom",children:v.jsxs("button",{className:"sidebar__item",onClick:r,title:`Switch to ${l==="dark"?"light":"dark"} theme`,children:[v.jsx("span",{className:"sidebar__item-icon",children:l==="dark"?"◑":"◐"}),v.jsx("span",{className:"sidebar__item-label",children:"theme"})]})})]})}const We=Qi((e,t)=>({agents:[],highlights:[],annotations:[],toasts:[],agentMuted:!1,pendingNavigation:null,handleAgentMessage:n=>{const r=t();if(!(r.agentMuted&&n.type!=="agent:mute_changed"))switch(n.type){case"agent:join":{const l=n.agent;l&&e({agents:[...r.agents.filter(o=>o.agentId!==l.agentId),l]});break}case"agent:leave":{const l=n.agentId;e({agents:r.agents.filter(o=>o.agentId!==l)});break}case"agent:navigate":{n.userActive?e({pendingNavigation:{agentId:n.agentId,section:n.section,symbol:n.symbol,loreId:n.loreId}}):(e({pendingNavigation:{agentId:n.agentId,section:n.section,symbol:n.symbol,loreId:n.loreId}}),setTimeout(()=>t().acceptNavigation(),0));break}case"agent:highlight":{const l={symbols:n.symbols||[],color:n.color||"var(--p-accent-blue)",duration:n.duration||5e3,pulse:n.pulse??!0,label:n.label};e({highlights:[...r.highlights,l]}),l.duration>0&&setTimeout(()=>{e({highlights:t().highlights.filter(o=>o!==l)})},l.duration);break}case"agent:annotate":{const l=n.annotation;l&&(l.type==="toast"?(e({toasts:[...r.toasts,l]}),l.duration>0&&setTimeout(()=>{e({toasts:t().toasts.filter(o=>o.id!==l.id)})},l.duration)):(e({annotations:[...r.annotations,l]}),l.duration>0&&setTimeout(()=>{e({annotations:t().annotations.filter(o=>o.id!==l.id)})},l.duration)));break}case"agent:clear":{const l=n.target;(l==="highlights"||l==="all")&&e({highlights:[]}),(l==="annotations"||l==="all")&&e({annotations:[],toasts:[]});break}case"agent:mute_changed":{e({agentMuted:n.muted});break}}},setAgentMuted:n=>{e({agentMuted:n}),n&&e({highlights:[],annotations:[],toasts:[],pendingNavigation:null})},dismissToast:n=>{e({toasts:t().toasts.filter(r=>r.id!==n)})},acceptNavigation:()=>{const n=t().pendingNavigation;n&&(window.dispatchEvent(new CustomEvent("agent-navigate",{detail:n})),e({pendingNavigation:null}))},dismissNavigation:()=>{e({pendingNavigation:null})},clearAll:()=>{e({highlights:[],annotations:[],toasts:[],pendingNavigation:null})}}));function Ip(){const e=X(i=>i.activeSection),t=X(i=>i.projectName),n=We(i=>i.agents),r=We(i=>i.agentMuted),l=We(i=>i.setAgentMuted),o=e.charAt(0).toUpperCase()+e.slice(1);return v.jsxs("header",{className:"header",children:[v.jsxs("div",{className:"header__left",children:[v.jsx("span",{className:"header__title",children:"Paradigm Platform"}),t&&v.jsx("span",{className:"header__project",children:t})]}),v.jsxs("div",{className:"header__right",children:[n.length>0&&v.jsxs("div",{className:"agent-presence",children:[n.map(i=>v.jsx("span",{className:"agent-presence__dot",style:{backgroundColor:i.color},title:i.agentId},i.agentId)),v.jsxs("span",{children:[n.length," agent",n.length!==1?"s":""]}),v.jsx("button",{className:`agent-mute-btn${r?" agent-mute-btn--muted":""}`,onClick:()=>l(!r),title:r?"Unmute agent actions":"Mute agent actions",children:r?"Muted":"Mute"})]}),v.jsx("span",{style:{fontSize:12,color:"var(--p-text-muted)"},children:o})]})]})}class ze extends L.Component{constructor(){super(...arguments);Yi(this,"state",{hasError:!1,error:null})}static getDerivedStateFromError(n){return{hasError:!0,error:n}}render(){var n;return this.state.hasError?v.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",gap:12,color:"var(--p-text-muted)",padding:24},children:[v.jsx("span",{style:{fontSize:32},children:"!"}),v.jsxs("h3",{style:{margin:0,color:"var(--p-text-primary)"},children:[this.props.sectionName," encountered an error"]}),v.jsx("p",{style:{margin:0,fontSize:13,maxWidth:400,textAlign:"center"},children:((n=this.state.error)==null?void 0:n.message)||"An unexpected error occurred"}),v.jsx("button",{onClick:()=>this.setState({hasError:!1,error:null}),style:{marginTop:8,padding:"6px 16px",cursor:"pointer",background:"var(--p-bg-tertiary)",color:"var(--p-text-primary)",border:"1px solid var(--p-border)",borderRadius:6,fontSize:13},children:"Reload section"})]}):this.props.children}}let Cn=null;const Dp=Qi(e=>({data:null,loading:!1,error:null,fetchOverview:async()=>{Cn==null||Cn.abort(),Cn=new AbortController;const{signal:t}=Cn;e({loading:!0,error:null});try{const n=await fetch("/api/platform/overview",{signal:t});if(!n.ok)throw new Error(`HTTP ${n.status}`);const r=await n.json();e({data:r,loading:!1})}catch(n){if(n instanceof Error&&n.name==="AbortError")return;e({error:String(n),loading:!1})}}}));function At({label:e,value:t,icon:n,trend:r,detail:l,accent:o,onClick:i}){return v.jsxs("div",{className:`stat-card ${i?"stat-card--clickable":""}`,onClick:i,style:o?{borderTopColor:o,borderTopWidth:2}:void 0,children:[v.jsxs("div",{className:"stat-card__value",children:[n&&v.jsx("span",{className:"stat-card__icon",children:n}),t,r&&v.jsx("span",{className:"stat-card__trend",children:r})]}),v.jsx("div",{className:"stat-card__label",children:e}),l&&v.jsx("div",{className:"stat-card__detail",children:l})]})}function Mp(e){return e>=.8?"var(--p-accent-green)":e>=.5?"var(--p-accent-orange)":"var(--p-accent-red)"}function Nn({label:e,value:t,color:n}){const r=Math.round(t*100),l=n||Mp(t);return v.jsxs("div",{className:"health-bar",children:[v.jsxs("div",{className:"health-bar__header",children:[v.jsx("span",{className:"health-bar__label",children:e}),v.jsxs("span",{className:"health-bar__value",children:[r,"%"]})]}),v.jsx("div",{className:"health-bar__track",children:v.jsx("div",{className:"health-bar__fill",style:{width:`${r}%`,backgroundColor:l}})})]})}function Ap(e){try{const t=new Date(e),r=Date.now()-t.getTime();return r<6e4?"just now":r<36e5?`${Math.floor(r/6e4)}m ago`:r<864e5?`${Math.floor(r/36e5)}h ago`:r<6048e5?`${Math.floor(r/864e5)}d ago`:t.toLocaleDateString()}catch{return""}}function Fp({items:e}){return e.length===0?v.jsx("div",{className:"activity-feed__empty",children:"No recent activity"}):v.jsx("div",{className:"activity-feed",children:e.map((t,n)=>v.jsxs("div",{className:"activity-feed__item",children:[v.jsx("span",{className:`activity-feed__icon activity-feed__icon--${t.type}`,children:t.type==="commit"?"○":"◆"}),v.jsxs("div",{className:"activity-feed__content",children:[v.jsx("span",{className:"activity-feed__summary",children:t.summary}),t.symbol&&v.jsx("span",{className:"activity-feed__symbol",children:t.symbol})]}),v.jsx("span",{className:"activity-feed__time",children:Ap(t.timestamp)})]},`${t.type}-${t.link||n}`))})}const Up={component:"#",flow:"$",gate:"^",signal:"!",aspect:"~"};function $p(e){return Object.entries(e).map(([t,n])=>`${Up[t]||""}${n}`).join(" · ")}function Vp(){const{data:e,loading:t,fetchOverview:n}=Dp(),r=X(o=>o.setActiveSection);if(L.useEffect(()=>{n();const o=setInterval(()=>{document.hidden||n()},15e3);return()=>clearInterval(o)},[]),t&&!e)return v.jsxs("div",{className:"overview",children:[v.jsx("h1",{className:"overview__title",children:"Overview"}),v.jsx("p",{style:{color:"var(--p-text-muted)"},children:"Loading..."})]});if(!e)return v.jsxs("div",{className:"overview",children:[v.jsx("h1",{className:"overview__title",children:"Overview"}),v.jsx("p",{style:{color:"var(--p-text-muted)"},children:"Could not load overview data."})]});const l=(e.health.purposeCoverage+e.health.aspectAnchors+e.health.gateCompliance+e.health.calibration)/4;return v.jsxs("div",{className:"overview",children:[v.jsxs("h1",{className:"overview__title",children:["Overview",v.jsx("span",{style:{fontSize:13,fontWeight:400,color:"var(--p-text-muted)",marginLeft:12},children:e.project.branch})]}),v.jsxs("div",{className:"overview__cards",children:[v.jsx(At,{value:e.symbols.total,label:"Symbols",detail:$p(e.symbols.byType),accent:"var(--p-accent-blue)",onClick:()=>r("graph")}),v.jsx(At,{value:e.lore.total,label:"Lore Entries",detail:`${e.lore.thisWeek} this week`,accent:"var(--p-accent-purple)",onClick:()=>r("lore")}),v.jsx(At,{value:e.calibration.score!==null?`${Math.round(e.calibration.score*100)}%`:"--",label:"Calibration",detail:`${e.calibration.assessed} assessed`,accent:"var(--p-accent-orange)"}),v.jsx(At,{value:e.tasks.total,label:"Tasks",detail:`${e.tasks.inProgress} active · ${e.tasks.completed} done`,accent:"var(--p-accent-green)"}),v.jsx(At,{value:`${Math.round(l*100)}%`,label:"Health",detail:"Overall project health"}),v.jsx(At,{value:e.recentActivity.length,label:"Recent Activity",detail:"Commits + lore"})]}),v.jsx("div",{className:"overview__section-title",children:"Project Health"}),v.jsxs("div",{className:"overview__health",children:[v.jsx(Nn,{label:"Purpose Coverage",value:e.health.purposeCoverage}),v.jsx(Nn,{label:"Aspect Anchors",value:e.health.aspectAnchors}),v.jsx(Nn,{label:"Gate Compliance",value:e.health.gateCompliance}),v.jsx(Nn,{label:"Calibration",value:e.health.calibration}),v.jsx(Nn,{label:"Lore Freshness",value:e.health.loreFreshnessDays<=7?1:e.health.loreFreshnessDays<=30?.5:.2})]}),v.jsxs("div",{className:"overview__activity",children:[v.jsx("div",{className:"overview__section-title",children:"Recent Activity"}),v.jsx(Fp,{items:e.recentActivity})]})]})}const us={info:"var(--p-symbol-component)",warning:"var(--p-symbol-signal)",error:"var(--p-symbol-gate)",success:"var(--p-symbol-flow)"};function Wp({toast:e}){const t=We(r=>r.dismissToast),n=us[e.severity]||us.info;return v.jsxs("div",{className:"agent-toast",style:{borderLeftColor:n},children:[v.jsx("span",{className:"agent-toast__icon",children:"🤖"}),v.jsx("span",{className:"agent-toast__message",children:e.message}),v.jsx("button",{className:"agent-toast__dismiss",onClick:()=>t(e.id),"aria-label":"Dismiss",children:"×"})]})}function Bp(){const e=We(t=>t.toasts);return e.length===0?null:v.jsx("div",{className:"agent-toast-container",children:e.map(t=>v.jsx(Wp,{toast:t},t.id))})}const ss={info:"var(--p-symbol-component)",warning:"var(--p-symbol-signal)",error:"var(--p-symbol-gate)",success:"var(--p-symbol-flow)"};function Hp(){const t=We(n=>n.annotations).filter(n=>n.type==="callout");return t.length===0?null:v.jsx("div",{className:"agent-callout-overlay",children:t.map(n=>v.jsxs("div",{className:"agent-callout",style:{borderColor:ss[n.severity]||ss.info},children:[v.jsx("div",{className:"agent-callout__symbol",children:n.symbol||""}),v.jsx("div",{className:"agent-callout__message",children:n.message})]},n.id))})}function Qp(){const e=We(l=>l.pendingNavigation),t=We(l=>l.acceptNavigation),n=We(l=>l.dismissNavigation);if(!e)return null;const r=e.symbol||e.section||"a view";return v.jsxs("div",{className:"agent-nav-prompt",children:[v.jsx("span",{className:"agent-nav-prompt__icon",children:"🤖"}),v.jsxs("span",{className:"agent-nav-prompt__text",children:["Agent wants to show you ",v.jsx("strong",{children:r})]}),v.jsx("button",{className:"agent-nav-prompt__accept",onClick:t,children:"Go there"}),v.jsx("button",{className:"agent-nav-prompt__dismiss",onClick:n,children:"Dismiss"})]})}function Kp(){const e=We(l=>l.handleAgentMessage),t=X(l=>l.setActiveSection),n=L.useRef(null),r=L.useRef();return L.useEffect(()=>{function l(){const o=window.location.protocol==="https:"?"wss:":"ws:",i=new WebSocket(`${o}//${window.location.host}/ws`);n.current=i,i.onmessage=u=>{var s,c,h;try{const p=JSON.parse(u.data);(s=p.type)!=null&&s.startsWith("agent:")&&e(p),(c=p.type)!=null&&c.startsWith("sentinel:")&&window.dispatchEvent(new CustomEvent("sentinel-ws",{detail:p})),(h=p.type)!=null&&h.startsWith("symphony:")&&window.dispatchEvent(new CustomEvent("symphony-ws",{detail:p}))}catch{}},i.onclose=()=>{n.current=null,r.current=setTimeout(l,3e3)},i.onerror=()=>{i.close()}}return l(),()=>{var o;clearTimeout(r.current),(o=n.current)==null||o.close()}},[e]),L.useEffect(()=>{function l(o){const i=o.detail;if(!i)return;const u=["overview","lore","graph","canvas","git","sentinel","university","symphony","docs","ambient","team"];i.section&&u.includes(i.section)&&t(i.section)}return window.addEventListener("agent-navigate",l),()=>window.removeEventListener("agent-navigate",l)},[t]),n}function Yp(e){const t=X(r=>r.activeSection),n=X(r=>r.theme);L.useEffect(()=>{const r=e.current;(r==null?void 0:r.readyState)===WebSocket.OPEN&&r.send(JSON.stringify({type:"user:navigate",section:t}))},[t,e]),L.useEffect(()=>{const r=e.current;(r==null?void 0:r.readyState)===WebSocket.OPEN&&r.send(JSON.stringify({type:"user:theme",theme:n}))},[n,e])}const Gp={1:"overview",2:"lore",3:"graph",4:"canvas",5:"git",6:"sentinel",7:"university",8:"symphony",9:"docs"};function Xp(e){if(!e)return!1;const t=e.tagName.toLowerCase();return!!(t==="input"||t==="textarea"||t==="select"||e.isContentEditable)}function Zp(){const e=X(n=>n.setActiveSection),t=X(n=>n.availableSections);L.useEffect(()=>{function n(r){if((r.metaKey||r.ctrlKey)&&r.key==="k"){r.preventDefault(),window.dispatchEvent(new CustomEvent("open-command-palette"));return}if(r.key==="Escape"){window.dispatchEvent(new CustomEvent("close-overlay"));return}if(Xp(document.activeElement))return;const l=Gp[r.key];l&&t.includes(l)&&(r.preventDefault(),e(l))}return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[e,t])}const Jp={overview:"◉",lore:"◆",graph:"◎",canvas:"▦",git:"⎋",sentinel:"◈",university:"▣",symphony:"♪",docs:"☰",ambient:"◌",team:"◫"},as={overview:"1",lore:"2",graph:"3",canvas:"4",git:"5",sentinel:"6",university:"7",symphony:"8",docs:"9"};function qp(){const[e,t]=L.useState(!1),[n,r]=L.useState(""),[l,o]=L.useState(0),i=L.useRef(null),u=X(y=>y.availableSections),s=X(y=>y.setActiveSection),c=u.filter(y=>y.toLowerCase().includes(n.toLowerCase())),h=L.useCallback(()=>{t(!0),r(""),o(0)},[]),p=L.useCallback(()=>{t(!1),r(""),o(0)},[]),m=L.useCallback(y=>{s(y),p()},[s,p]);L.useEffect(()=>{function y(){h()}function k(){e&&p()}return window.addEventListener("open-command-palette",y),window.addEventListener("close-overlay",k),()=>{window.removeEventListener("open-command-palette",y),window.removeEventListener("close-overlay",k)}},[e,h,p]),L.useEffect(()=>{e&&requestAnimationFrame(()=>{var y;return(y=i.current)==null?void 0:y.focus()})},[e]),L.useEffect(()=>{o(0)},[n]);function S(y){if(y.key==="ArrowDown")y.preventDefault(),o(k=>(k+1)%c.length);else if(y.key==="ArrowUp")y.preventDefault(),o(k=>(k-1+c.length)%c.length);else if(y.key==="Enter"){y.preventDefault();const k=c[l];k&&m(k)}else y.key==="Escape"&&(y.preventDefault(),p())}return e?v.jsx("div",{className:"command-palette-backdrop",onClick:p,children:v.jsxs("div",{className:"command-palette",onClick:y=>y.stopPropagation(),onKeyDown:S,children:[v.jsx("div",{className:"command-palette__input-wrapper",children:v.jsx("input",{ref:i,className:"command-palette__input",type:"text",placeholder:"Go to section...",value:n,onChange:y=>r(y.target.value)})}),c.length>0?v.jsx("ul",{className:"command-palette__list",children:c.map((y,k)=>v.jsxs("li",{className:`command-palette__item ${k===l?"command-palette__item--active":""}`,onClick:()=>m(y),onMouseEnter:()=>o(k),children:[v.jsx("span",{className:"command-palette__item-icon",children:Jp[y]||"○"}),v.jsx("span",{className:"command-palette__item-label",children:y}),as[y]&&v.jsx("span",{className:"command-palette__item-shortcut",children:as[y]})]},y))}):v.jsx("div",{className:"command-palette__empty",children:"No matching sections"})]})}):null}const bp=L.lazy(()=>Be(()=>import("./LoreSection-oO5dCe6O.js"),__vite__mapDeps([0,1]))),em=L.lazy(()=>Be(()=>import("./GraphSection-CawN7pC5.js"),__vite__mapDeps([2,3]))),tm=L.lazy(()=>Be(()=>import("./CanvasSection-rKvA_vZj.js"),__vite__mapDeps([4,5]))),nm=L.lazy(()=>Be(()=>import("./GitSection-DSGj_c6S.js"),__vite__mapDeps([6,7]))),rm=L.lazy(()=>Be(()=>import("./SentinelSection-DNgoYMH0.js"),__vite__mapDeps([8,9]))),lm=L.lazy(()=>Be(()=>import("./SymphonySection-C0zfcqv3.js"),__vite__mapDeps([10,11]))),om=L.lazy(()=>Be(()=>import("./DocsSection-CI9K73M-.js"),__vite__mapDeps([12,13]))),im=L.lazy(()=>Be(()=>import("./AmbientSection-BYjt75R1.js"),__vite__mapDeps([14,15]))),um=L.lazy(()=>Be(()=>import("./TeamSection-Bzd3Dt9Q.js"),__vite__mapDeps([16,17]))),sm=L.lazy(()=>Be(()=>import("./UniversitySection-tBr62R0S.js"),__vite__mapDeps([18,19])));function am(){return v.jsx("div",{style:{padding:24,color:"var(--p-text-muted)"},children:"Loading section..."})}function cm(){const e=X(l=>l.activeSection),t=X(l=>l.theme),n=X(l=>l.fetchPlatformInfo),r=Kp();return Yp(r),Zp(),L.useEffect(()=>{document.documentElement.setAttribute("data-theme",t),n();const l=()=>{const o=window.location.pathname.slice(1)||"overview";["overview","lore","graph","canvas","git","sentinel","university","symphony","docs","ambient","team"].includes(o)&&X.getState().setActiveSection(o)};return l(),window.addEventListener("popstate",l),()=>window.removeEventListener("popstate",l)},[]),v.jsxs("div",{className:"shell",children:[v.jsx(Rp,{}),v.jsxs("div",{className:"main",children:[v.jsx(Ip,{}),v.jsx("div",{className:"content",children:v.jsxs(L.Suspense,{fallback:v.jsx(am,{}),children:[e==="overview"&&v.jsx(ze,{sectionName:"Overview",children:v.jsx(Vp,{})}),e==="lore"&&v.jsx(ze,{sectionName:"Lore",children:v.jsx(bp,{})}),e==="graph"&&v.jsx(ze,{sectionName:"Graph",children:v.jsx(em,{})}),e==="canvas"&&v.jsx(ze,{sectionName:"Canvas",children:v.jsx(tm,{})}),e==="git"&&v.jsx(ze,{sectionName:"Git",children:v.jsx(nm,{})}),e==="sentinel"&&v.jsx(ze,{sectionName:"Sentinel",children:v.jsx(rm,{})}),e==="university"&&v.jsx(ze,{sectionName:"University",children:v.jsx(sm,{})}),e==="symphony"&&v.jsx(ze,{sectionName:"Symphony",children:v.jsx(lm,{})}),e==="docs"&&v.jsx(ze,{sectionName:"Docs",children:v.jsx(om,{})}),e==="ambient"&&v.jsx(ze,{sectionName:"Ambient",children:v.jsx(im,{})}),e==="team"&&v.jsx(ze,{sectionName:"Team",children:v.jsx(um,{})})]})})]}),v.jsx(qp,{}),v.jsx(Qp,{}),v.jsx(Bp,{}),v.jsx(Hp,{})]})}no.createRoot(document.getElementById("root")).render(v.jsx(Ss.StrictMode,{children:v.jsx(cm,{})}));export{Ss as R,At as S,up as a,dm as b,Qi as c,pm as d,X as e,Zo as g,v as j,L as r,jp as u};
57
+ */var Cl=L,gp=yp;function wp(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Sp=typeof Object.is=="function"?Object.is:wp,kp=gp.useSyncExternalStore,_p=Cl.useRef,Ep=Cl.useEffect,xp=Cl.useMemo,Cp=Cl.useDebugValue;Cc.useSyncExternalStoreWithSelector=function(e,t,n,r,l){var o=_p(null);if(o.current===null){var i={hasValue:!1,value:null};o.current=i}else i=o.current;o=xp(function(){function s(S){if(!c){if(c=!0,h=S,S=r(S),l!==void 0&&i.hasValue){var y=i.value;if(l(y,S))return p=y}return p=S}if(y=p,Sp(h,S))return y;var k=r(S);return l!==void 0&&l(y,k)?(h=S,y):(h=S,p=k)}var c=!1,h,p,m=n===void 0?null:n;return[function(){return s(t())},m===null?void 0:function(){return s(m())}]},[t,n,r,l]);var u=kp(e,o[0],o[1]);return Ep(function(){i.hasValue=!0,i.value=u},[u]),Cp(u),u};xc.exports=Cc;var Np=xc.exports;const jp=Zo(Np),Pc={},{useDebugValue:Pp}=Ss,{useSyncExternalStoreWithSelector:Tp}=jp;let os=!1;const zp=e=>e;function Lp(e,t=zp,n){(Pc?"production":void 0)!=="production"&&n&&!os&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),os=!0);const r=Tp(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return Pp(r),r}const is=e=>{(Pc?"production":void 0)!=="production"&&typeof e!="function"&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");const t=typeof e=="function"?up(e):e,n=(r,l)=>Lp(t,r,l);return Object.assign(n,t),n},Qi=e=>e?is(e):is;let xn=null;const X=Qi((e,t)=>({activeSection:"overview",availableSections:["overview","lore","graph","git"],projectName:"",theme:localStorage.getItem("paradigm-platform-theme")||"dark",setActiveSection:n=>{e({activeSection:n}),window.history.pushState(null,"",`/${n==="overview"?"":n}`)},setAvailableSections:n=>e({availableSections:n}),setProjectName:n=>e({projectName:n}),toggleTheme:()=>{const n=t().theme==="dark"?"light":"dark";e({theme:n}),localStorage.setItem("paradigm-platform-theme",n),document.documentElement.setAttribute("data-theme",n)},fetchPlatformInfo:async()=>{var r;xn==null||xn.abort(),xn=new AbortController;const{signal:n}=xn;try{const[l,o]=await Promise.all([fetch("/api/info",{signal:n}),fetch("/api/platform/sections",{signal:n})]);if(l.ok){const i=await l.json();e({projectName:i.project||i.name||""})}if(o.ok){const i=await o.json();(r=i.sections)!=null&&r.length&&e({availableSections:i.sections})}}catch(l){if(l instanceof Error&&l.name==="AbortError")return}}})),Op={overview:"◉",lore:"◆",graph:"◎",canvas:"▦",git:"⎇",sentinel:"◈",university:"▣",symphony:"♪",docs:"☰",ambient:"◌",team:"◫",meetings:"●"};function Rp(){const e=X(o=>o.activeSection),t=X(o=>o.availableSections),n=X(o=>o.setActiveSection),r=X(o=>o.toggleTheme),l=X(o=>o.theme);return v.jsxs("nav",{className:"sidebar",children:[v.jsx("div",{className:"sidebar__nav",children:t.map(o=>v.jsxs("button",{className:`sidebar__item ${e===o?"sidebar__item--active":""}`,onClick:()=>n(o),title:o.charAt(0).toUpperCase()+o.slice(1),children:[v.jsx("span",{className:"sidebar__item-icon",children:Op[o]||"○"}),v.jsx("span",{className:"sidebar__item-label",children:o})]},o))}),v.jsx("div",{className:"sidebar__bottom",children:v.jsxs("button",{className:"sidebar__item",onClick:r,title:`Switch to ${l==="dark"?"light":"dark"} theme`,children:[v.jsx("span",{className:"sidebar__item-icon",children:l==="dark"?"◑":"◐"}),v.jsx("span",{className:"sidebar__item-label",children:"theme"})]})})]})}const We=Qi((e,t)=>({agents:[],highlights:[],annotations:[],toasts:[],agentMuted:!1,pendingNavigation:null,handleAgentMessage:n=>{const r=t();if(!(r.agentMuted&&n.type!=="agent:mute_changed"))switch(n.type){case"agent:join":{const l=n.agent;l&&e({agents:[...r.agents.filter(o=>o.agentId!==l.agentId),l]});break}case"agent:leave":{const l=n.agentId;e({agents:r.agents.filter(o=>o.agentId!==l)});break}case"agent:navigate":{n.userActive?e({pendingNavigation:{agentId:n.agentId,section:n.section,symbol:n.symbol,loreId:n.loreId}}):(e({pendingNavigation:{agentId:n.agentId,section:n.section,symbol:n.symbol,loreId:n.loreId}}),setTimeout(()=>t().acceptNavigation(),0));break}case"agent:highlight":{const l={symbols:n.symbols||[],color:n.color||"var(--p-accent-blue)",duration:n.duration||5e3,pulse:n.pulse??!0,label:n.label};e({highlights:[...r.highlights,l]}),l.duration>0&&setTimeout(()=>{e({highlights:t().highlights.filter(o=>o!==l)})},l.duration);break}case"agent:annotate":{const l=n.annotation;l&&(l.type==="toast"?(e({toasts:[...r.toasts,l]}),l.duration>0&&setTimeout(()=>{e({toasts:t().toasts.filter(o=>o.id!==l.id)})},l.duration)):(e({annotations:[...r.annotations,l]}),l.duration>0&&setTimeout(()=>{e({annotations:t().annotations.filter(o=>o.id!==l.id)})},l.duration)));break}case"agent:clear":{const l=n.target;(l==="highlights"||l==="all")&&e({highlights:[]}),(l==="annotations"||l==="all")&&e({annotations:[],toasts:[]});break}case"agent:mute_changed":{e({agentMuted:n.muted});break}}},setAgentMuted:n=>{e({agentMuted:n}),n&&e({highlights:[],annotations:[],toasts:[],pendingNavigation:null})},dismissToast:n=>{e({toasts:t().toasts.filter(r=>r.id!==n)})},acceptNavigation:()=>{const n=t().pendingNavigation;n&&(window.dispatchEvent(new CustomEvent("agent-navigate",{detail:n})),e({pendingNavigation:null}))},dismissNavigation:()=>{e({pendingNavigation:null})},clearAll:()=>{e({highlights:[],annotations:[],toasts:[],pendingNavigation:null})}}));function Ip(){const e=X(i=>i.activeSection),t=X(i=>i.projectName),n=We(i=>i.agents),r=We(i=>i.agentMuted),l=We(i=>i.setAgentMuted),o=e.charAt(0).toUpperCase()+e.slice(1);return v.jsxs("header",{className:"header",children:[v.jsxs("div",{className:"header__left",children:[v.jsx("span",{className:"header__title",children:"Paradigm Platform"}),t&&v.jsx("span",{className:"header__project",children:t})]}),v.jsxs("div",{className:"header__right",children:[n.length>0&&v.jsxs("div",{className:"agent-presence",children:[n.map(i=>v.jsx("span",{className:"agent-presence__dot",style:{backgroundColor:i.color},title:i.agentId},i.agentId)),v.jsxs("span",{children:[n.length," agent",n.length!==1?"s":""]}),v.jsx("button",{className:`agent-mute-btn${r?" agent-mute-btn--muted":""}`,onClick:()=>l(!r),title:r?"Unmute agent actions":"Mute agent actions",children:r?"Muted":"Mute"})]}),v.jsx("span",{style:{fontSize:12,color:"var(--p-text-muted)"},children:o})]})]})}class ze extends L.Component{constructor(){super(...arguments);Yi(this,"state",{hasError:!1,error:null})}static getDerivedStateFromError(n){return{hasError:!0,error:n}}render(){var n;return this.state.hasError?v.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",gap:12,color:"var(--p-text-muted)",padding:24},children:[v.jsx("span",{style:{fontSize:32},children:"!"}),v.jsxs("h3",{style:{margin:0,color:"var(--p-text-primary)"},children:[this.props.sectionName," encountered an error"]}),v.jsx("p",{style:{margin:0,fontSize:13,maxWidth:400,textAlign:"center"},children:((n=this.state.error)==null?void 0:n.message)||"An unexpected error occurred"}),v.jsx("button",{onClick:()=>this.setState({hasError:!1,error:null}),style:{marginTop:8,padding:"6px 16px",cursor:"pointer",background:"var(--p-bg-tertiary)",color:"var(--p-text-primary)",border:"1px solid var(--p-border)",borderRadius:6,fontSize:13},children:"Reload section"})]}):this.props.children}}let Cn=null;const Dp=Qi(e=>({data:null,loading:!1,error:null,fetchOverview:async()=>{Cn==null||Cn.abort(),Cn=new AbortController;const{signal:t}=Cn;e({loading:!0,error:null});try{const n=await fetch("/api/platform/overview",{signal:t});if(!n.ok)throw new Error(`HTTP ${n.status}`);const r=await n.json();e({data:r,loading:!1})}catch(n){if(n instanceof Error&&n.name==="AbortError")return;e({error:String(n),loading:!1})}}}));function At({label:e,value:t,icon:n,trend:r,detail:l,accent:o,onClick:i}){return v.jsxs("div",{className:`stat-card ${i?"stat-card--clickable":""}`,onClick:i,style:o?{borderTopColor:o,borderTopWidth:2}:void 0,children:[v.jsxs("div",{className:"stat-card__value",children:[n&&v.jsx("span",{className:"stat-card__icon",children:n}),t,r&&v.jsx("span",{className:"stat-card__trend",children:r})]}),v.jsx("div",{className:"stat-card__label",children:e}),l&&v.jsx("div",{className:"stat-card__detail",children:l})]})}function Mp(e){return e>=.8?"var(--p-accent-green)":e>=.5?"var(--p-accent-orange)":"var(--p-accent-red)"}function Nn({label:e,value:t,color:n}){const r=Math.round(t*100),l=n||Mp(t);return v.jsxs("div",{className:"health-bar",children:[v.jsxs("div",{className:"health-bar__header",children:[v.jsx("span",{className:"health-bar__label",children:e}),v.jsxs("span",{className:"health-bar__value",children:[r,"%"]})]}),v.jsx("div",{className:"health-bar__track",children:v.jsx("div",{className:"health-bar__fill",style:{width:`${r}%`,backgroundColor:l}})})]})}function Ap(e){try{const t=new Date(e),r=Date.now()-t.getTime();return r<6e4?"just now":r<36e5?`${Math.floor(r/6e4)}m ago`:r<864e5?`${Math.floor(r/36e5)}h ago`:r<6048e5?`${Math.floor(r/864e5)}d ago`:t.toLocaleDateString()}catch{return""}}function Fp({items:e}){return e.length===0?v.jsx("div",{className:"activity-feed__empty",children:"No recent activity"}):v.jsx("div",{className:"activity-feed",children:e.map((t,n)=>v.jsxs("div",{className:"activity-feed__item",children:[v.jsx("span",{className:`activity-feed__icon activity-feed__icon--${t.type}`,children:t.type==="commit"?"○":"◆"}),v.jsxs("div",{className:"activity-feed__content",children:[v.jsx("span",{className:"activity-feed__summary",children:t.summary}),t.symbol&&v.jsx("span",{className:"activity-feed__symbol",children:t.symbol})]}),v.jsx("span",{className:"activity-feed__time",children:Ap(t.timestamp)})]},`${t.type}-${t.link||n}`))})}const Up={component:"#",flow:"$",gate:"^",signal:"!",aspect:"~"};function $p(e){return Object.entries(e).map(([t,n])=>`${Up[t]||""}${n}`).join(" · ")}function Vp(){const{data:e,loading:t,fetchOverview:n}=Dp(),r=X(o=>o.setActiveSection);if(L.useEffect(()=>{n();const o=setInterval(()=>{document.hidden||n()},15e3);return()=>clearInterval(o)},[]),t&&!e)return v.jsxs("div",{className:"overview",children:[v.jsx("h1",{className:"overview__title",children:"Overview"}),v.jsx("p",{style:{color:"var(--p-text-muted)"},children:"Loading..."})]});if(!e)return v.jsxs("div",{className:"overview",children:[v.jsx("h1",{className:"overview__title",children:"Overview"}),v.jsx("p",{style:{color:"var(--p-text-muted)"},children:"Could not load overview data."})]});const l=(e.health.purposeCoverage+e.health.aspectAnchors+e.health.gateCompliance+e.health.calibration)/4;return v.jsxs("div",{className:"overview",children:[v.jsxs("h1",{className:"overview__title",children:["Overview",v.jsx("span",{style:{fontSize:13,fontWeight:400,color:"var(--p-text-muted)",marginLeft:12},children:e.project.branch})]}),v.jsxs("div",{className:"overview__cards",children:[v.jsx(At,{value:e.symbols.total,label:"Symbols",detail:$p(e.symbols.byType),accent:"var(--p-accent-blue)",onClick:()=>r("graph")}),v.jsx(At,{value:e.lore.total,label:"Lore Entries",detail:`${e.lore.thisWeek} this week`,accent:"var(--p-accent-purple)",onClick:()=>r("lore")}),v.jsx(At,{value:e.calibration.score!==null?`${Math.round(e.calibration.score*100)}%`:"--",label:"Calibration",detail:`${e.calibration.assessed} assessed`,accent:"var(--p-accent-orange)"}),v.jsx(At,{value:e.tasks.total,label:"Tasks",detail:`${e.tasks.inProgress} active · ${e.tasks.completed} done`,accent:"var(--p-accent-green)"}),v.jsx(At,{value:`${Math.round(l*100)}%`,label:"Health",detail:"Overall project health"}),v.jsx(At,{value:e.recentActivity.length,label:"Recent Activity",detail:"Commits + lore"})]}),v.jsx("div",{className:"overview__section-title",children:"Project Health"}),v.jsxs("div",{className:"overview__health",children:[v.jsx(Nn,{label:"Purpose Coverage",value:e.health.purposeCoverage}),v.jsx(Nn,{label:"Aspect Anchors",value:e.health.aspectAnchors}),v.jsx(Nn,{label:"Gate Compliance",value:e.health.gateCompliance}),v.jsx(Nn,{label:"Calibration",value:e.health.calibration}),v.jsx(Nn,{label:"Lore Freshness",value:e.health.loreFreshnessDays<=7?1:e.health.loreFreshnessDays<=30?.5:.2})]}),v.jsxs("div",{className:"overview__activity",children:[v.jsx("div",{className:"overview__section-title",children:"Recent Activity"}),v.jsx(Fp,{items:e.recentActivity})]})]})}const us={info:"var(--p-symbol-component)",warning:"var(--p-symbol-signal)",error:"var(--p-symbol-gate)",success:"var(--p-symbol-flow)"};function Wp({toast:e}){const t=We(r=>r.dismissToast),n=us[e.severity]||us.info;return v.jsxs("div",{className:"agent-toast",style:{borderLeftColor:n},children:[v.jsx("span",{className:"agent-toast__icon",children:"🤖"}),v.jsx("span",{className:"agent-toast__message",children:e.message}),v.jsx("button",{className:"agent-toast__dismiss",onClick:()=>t(e.id),"aria-label":"Dismiss",children:"×"})]})}function Bp(){const e=We(t=>t.toasts);return e.length===0?null:v.jsx("div",{className:"agent-toast-container",children:e.map(t=>v.jsx(Wp,{toast:t},t.id))})}const ss={info:"var(--p-symbol-component)",warning:"var(--p-symbol-signal)",error:"var(--p-symbol-gate)",success:"var(--p-symbol-flow)"};function Hp(){const t=We(n=>n.annotations).filter(n=>n.type==="callout");return t.length===0?null:v.jsx("div",{className:"agent-callout-overlay",children:t.map(n=>v.jsxs("div",{className:"agent-callout",style:{borderColor:ss[n.severity]||ss.info},children:[v.jsx("div",{className:"agent-callout__symbol",children:n.symbol||""}),v.jsx("div",{className:"agent-callout__message",children:n.message})]},n.id))})}function Qp(){const e=We(l=>l.pendingNavigation),t=We(l=>l.acceptNavigation),n=We(l=>l.dismissNavigation);if(!e)return null;const r=e.symbol||e.section||"a view";return v.jsxs("div",{className:"agent-nav-prompt",children:[v.jsx("span",{className:"agent-nav-prompt__icon",children:"🤖"}),v.jsxs("span",{className:"agent-nav-prompt__text",children:["Agent wants to show you ",v.jsx("strong",{children:r})]}),v.jsx("button",{className:"agent-nav-prompt__accept",onClick:t,children:"Go there"}),v.jsx("button",{className:"agent-nav-prompt__dismiss",onClick:n,children:"Dismiss"})]})}function Kp(){const e=We(l=>l.handleAgentMessage),t=X(l=>l.setActiveSection),n=L.useRef(null),r=L.useRef();return L.useEffect(()=>{function l(){const o=window.location.protocol==="https:"?"wss:":"ws:",i=new WebSocket(`${o}//${window.location.host}/ws`);n.current=i,i.onmessage=u=>{var s,c,h;try{const p=JSON.parse(u.data);(s=p.type)!=null&&s.startsWith("agent:")&&e(p),(c=p.type)!=null&&c.startsWith("sentinel:")&&window.dispatchEvent(new CustomEvent("sentinel-ws",{detail:p})),(h=p.type)!=null&&h.startsWith("symphony:")&&window.dispatchEvent(new CustomEvent("symphony-ws",{detail:p}))}catch{}},i.onclose=()=>{n.current=null,r.current=setTimeout(l,3e3)},i.onerror=()=>{i.close()}}return l(),()=>{var o;clearTimeout(r.current),(o=n.current)==null||o.close()}},[e]),L.useEffect(()=>{function l(o){const i=o.detail;if(!i)return;const u=["overview","lore","graph","canvas","git","sentinel","university","symphony","docs","ambient","team"];i.section&&u.includes(i.section)&&t(i.section)}return window.addEventListener("agent-navigate",l),()=>window.removeEventListener("agent-navigate",l)},[t]),n}function Yp(e){const t=X(r=>r.activeSection),n=X(r=>r.theme);L.useEffect(()=>{const r=e.current;(r==null?void 0:r.readyState)===WebSocket.OPEN&&r.send(JSON.stringify({type:"user:navigate",section:t}))},[t,e]),L.useEffect(()=>{const r=e.current;(r==null?void 0:r.readyState)===WebSocket.OPEN&&r.send(JSON.stringify({type:"user:theme",theme:n}))},[n,e])}const Gp={1:"overview",2:"lore",3:"graph",4:"canvas",5:"git",6:"sentinel",7:"university",8:"symphony",9:"docs"};function Xp(e){if(!e)return!1;const t=e.tagName.toLowerCase();return!!(t==="input"||t==="textarea"||t==="select"||e.isContentEditable)}function Zp(){const e=X(n=>n.setActiveSection),t=X(n=>n.availableSections);L.useEffect(()=>{function n(r){if((r.metaKey||r.ctrlKey)&&r.key==="k"){r.preventDefault(),window.dispatchEvent(new CustomEvent("open-command-palette"));return}if(r.key==="Escape"){window.dispatchEvent(new CustomEvent("close-overlay"));return}if(Xp(document.activeElement))return;const l=Gp[r.key];l&&t.includes(l)&&(r.preventDefault(),e(l))}return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[e,t])}const Jp={overview:"◉",lore:"◆",graph:"◎",canvas:"▦",git:"⎋",sentinel:"◈",university:"▣",symphony:"♪",docs:"☰",ambient:"◌",team:"◫"},as={overview:"1",lore:"2",graph:"3",canvas:"4",git:"5",sentinel:"6",university:"7",symphony:"8",docs:"9"};function qp(){const[e,t]=L.useState(!1),[n,r]=L.useState(""),[l,o]=L.useState(0),i=L.useRef(null),u=X(y=>y.availableSections),s=X(y=>y.setActiveSection),c=u.filter(y=>y.toLowerCase().includes(n.toLowerCase())),h=L.useCallback(()=>{t(!0),r(""),o(0)},[]),p=L.useCallback(()=>{t(!1),r(""),o(0)},[]),m=L.useCallback(y=>{s(y),p()},[s,p]);L.useEffect(()=>{function y(){h()}function k(){e&&p()}return window.addEventListener("open-command-palette",y),window.addEventListener("close-overlay",k),()=>{window.removeEventListener("open-command-palette",y),window.removeEventListener("close-overlay",k)}},[e,h,p]),L.useEffect(()=>{e&&requestAnimationFrame(()=>{var y;return(y=i.current)==null?void 0:y.focus()})},[e]),L.useEffect(()=>{o(0)},[n]);function S(y){if(y.key==="ArrowDown")y.preventDefault(),o(k=>(k+1)%c.length);else if(y.key==="ArrowUp")y.preventDefault(),o(k=>(k-1+c.length)%c.length);else if(y.key==="Enter"){y.preventDefault();const k=c[l];k&&m(k)}else y.key==="Escape"&&(y.preventDefault(),p())}return e?v.jsx("div",{className:"command-palette-backdrop",onClick:p,children:v.jsxs("div",{className:"command-palette",onClick:y=>y.stopPropagation(),onKeyDown:S,children:[v.jsx("div",{className:"command-palette__input-wrapper",children:v.jsx("input",{ref:i,className:"command-palette__input",type:"text",placeholder:"Go to section...",value:n,onChange:y=>r(y.target.value)})}),c.length>0?v.jsx("ul",{className:"command-palette__list",children:c.map((y,k)=>v.jsxs("li",{className:`command-palette__item ${k===l?"command-palette__item--active":""}`,onClick:()=>m(y),onMouseEnter:()=>o(k),children:[v.jsx("span",{className:"command-palette__item-icon",children:Jp[y]||"○"}),v.jsx("span",{className:"command-palette__item-label",children:y}),as[y]&&v.jsx("span",{className:"command-palette__item-shortcut",children:as[y]})]},y))}):v.jsx("div",{className:"command-palette__empty",children:"No matching sections"})]})}):null}const bp=L.lazy(()=>Be(()=>import("./LoreSection-B0hUbfsJ.js"),__vite__mapDeps([0,1]))),em=L.lazy(()=>Be(()=>import("./GraphSection-COYjb4Pt.js"),__vite__mapDeps([2,3]))),tm=L.lazy(()=>Be(()=>import("./CanvasSection-dFAthehN.js"),__vite__mapDeps([4,5]))),nm=L.lazy(()=>Be(()=>import("./GitSection-MNNYU1tO.js"),__vite__mapDeps([6,7]))),rm=L.lazy(()=>Be(()=>import("./SentinelSection-BCxW1DCp.js"),__vite__mapDeps([8,9]))),lm=L.lazy(()=>Be(()=>import("./SymphonySection-BsucZRqy.js"),__vite__mapDeps([10,11]))),om=L.lazy(()=>Be(()=>import("./DocsSection-BZ2SFJBZ.js"),__vite__mapDeps([12,13]))),im=L.lazy(()=>Be(()=>import("./AmbientSection-CwatqcBD.js"),__vite__mapDeps([14,15]))),um=L.lazy(()=>Be(()=>import("./TeamSection-C0QNTudW.js"),__vite__mapDeps([16,17]))),sm=L.lazy(()=>Be(()=>import("./UniversitySection-DN1-g9pw.js"),__vite__mapDeps([18,19])));function am(){return v.jsx("div",{style:{padding:24,color:"var(--p-text-muted)"},children:"Loading section..."})}function cm(){const e=X(l=>l.activeSection),t=X(l=>l.theme),n=X(l=>l.fetchPlatformInfo),r=Kp();return Yp(r),Zp(),L.useEffect(()=>{document.documentElement.setAttribute("data-theme",t),n();const l=()=>{const o=window.location.pathname.slice(1)||"overview";["overview","lore","graph","canvas","git","sentinel","university","symphony","docs","ambient","team"].includes(o)&&X.getState().setActiveSection(o)};return l(),window.addEventListener("popstate",l),()=>window.removeEventListener("popstate",l)},[]),v.jsxs("div",{className:"shell",children:[v.jsx(Rp,{}),v.jsxs("div",{className:"main",children:[v.jsx(Ip,{}),v.jsx("div",{className:"content",children:v.jsxs(L.Suspense,{fallback:v.jsx(am,{}),children:[e==="overview"&&v.jsx(ze,{sectionName:"Overview",children:v.jsx(Vp,{})}),e==="lore"&&v.jsx(ze,{sectionName:"Lore",children:v.jsx(bp,{})}),e==="graph"&&v.jsx(ze,{sectionName:"Graph",children:v.jsx(em,{})}),e==="canvas"&&v.jsx(ze,{sectionName:"Canvas",children:v.jsx(tm,{})}),e==="git"&&v.jsx(ze,{sectionName:"Git",children:v.jsx(nm,{})}),e==="sentinel"&&v.jsx(ze,{sectionName:"Sentinel",children:v.jsx(rm,{})}),e==="university"&&v.jsx(ze,{sectionName:"University",children:v.jsx(sm,{})}),e==="symphony"&&v.jsx(ze,{sectionName:"Symphony",children:v.jsx(lm,{})}),e==="docs"&&v.jsx(ze,{sectionName:"Docs",children:v.jsx(om,{})}),e==="ambient"&&v.jsx(ze,{sectionName:"Ambient",children:v.jsx(im,{})}),e==="team"&&v.jsx(ze,{sectionName:"Team",children:v.jsx(um,{})})]})})]}),v.jsx(qp,{}),v.jsx(Qp,{}),v.jsx(Bp,{}),v.jsx(Hp,{})]})}no.createRoot(document.getElementById("root")).render(v.jsx(Ss.StrictMode,{children:v.jsx(cm,{})}));export{Ss as R,At as S,up as a,dm as b,Qi as c,pm as d,X as e,Zo as g,v as j,L as r,jp as u};
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Paradigm Platform</title>
7
7
  <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>◉</text></svg>" />
8
- <script type="module" crossorigin src="/assets/index-BaOmyn11.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DwUT8pju.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-Bxp0TVaf.css">
10
10
  </head>
11
11
  <body>
@@ -133,7 +133,9 @@ Authorization and validation checkpoints. Gates either pass or block.
133
133
  ### Definition
134
134
 
135
135
  ```yaml
136
- ^payment-authorized:
136
+ # Inside portal.yaml under `gates:`, the key is bare (no ^ prefix).
137
+ # The ^ prefix appears only in references (routes, flow steps, `blocks:`).
138
+ payment-authorized:
137
139
  description: Verify payment method is valid and has sufficient funds
138
140
  tags: [security, payment]
139
141
  anchors:
@@ -144,7 +146,7 @@ Authorization and validation checkpoints. Gates either pass or block.
144
146
  cart.total <= user.paymentMethod.limit
145
147
  blocks:
146
148
  - $checkout-flow
147
- - #process-refund
149
+ - "#process-refund"
148
150
  ```
149
151
 
150
152
  ### Gate Patterns
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- import {g,i,f}from'./chunk-D34YFK4M.js';import'./chunk-5TAVYPOV.js';import r from'chalk';import {execSync}from'child_process';import*as y from'os';function b(){try{return execSync("git config user.name",{encoding:"utf-8",timeout:3e3}).trim().toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").slice(0,20)||"unknown"}catch{try{return y.userInfo().username}catch{return "unknown"}}}async function w(i$1,t){let s=process.cwd();t.title||(console.error(r.red(`
3
- Error: --title is required
4
- `)),process.exit(1));let a=b(),n=new Date().toISOString().slice(0,10),l=t.title.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,40),u=t.tags?t.tags.split(",").map(e=>e.trim()):[],d=t.symbols?t.symbols.split(",").map(e=>e.trim()):[];if(i$1==="quiz"){let e=`Q-${l}`,p={id:e,title:t.title,description:t.body||"",author:a,created:n,updated:n,tags:u,symbols:d,difficulty:t.difficulty||"beginner",passThreshold:.7,questions:[]};g(s,p),i(s),console.log(r.green(`
5
- Created quiz: ${e}`)),console.log(r.gray(` Add questions by editing the YAML file
6
- `));return}let o=`${i$1==="policy"?"P":"N"}-${l}`,g$1={id:o,title:t.title,type:i$1,author:a,created:n,updated:n,tags:u,symbols:d,difficulty:t.difficulty||"beginner",estimatedMinutes:t.minutes?parseInt(t.minutes,10):void 0,prerequisites:[]};f(s,g$1,t.body||""),i(s),console.log(r.green(`
7
- Created ${i$1}: ${o}`)),console.log(r.gray(` Edit at .paradigm/university/content/${i$1==="policy"?"policies":"notes"}/${o}.md
8
- `));}export{w as universityAddCommand};
@@ -1,111 +0,0 @@
1
- #!/usr/bin/env node
2
- import {a as a$1,b as b$3,c as c$2}from'./chunk-M4UMM6DC.js';import {j,b as b$2,a as a$2}from'./chunk-ODVKPZZ4.js';import {j as j$1,a,c as c$1,b as b$1,k as k$1}from'./chunk-MQIG6SMF.js';import {c,b,d}from'./chunk-5TAVYPOV.js';import*as x from'fs';import*as k from'path';import*as J from'crypto';import {execSync}from'child_process';import*as F from'js-yaml';import {z}from'zod';import {glob}from'glob';import*as ye from'os';import hs from'sql.js';var Nt={};c(Nt,{contentSearch:()=>ms,detectFileRename:()=>Ot,generateFingerprint:()=>At,levenshteinDistance:()=>Lt,levenshteinSimilarity:()=>Fe,searchSiblingFiles:()=>Ft,slidingWindowSearch:()=>be});function At(t){let e=t.split(`
3
- `).filter(s=>s.trim()!=="");return {firstLine:we(e[0]||""),lastLine:we(e[e.length-1]||""),lineCount:e.length,structuralHash:jt(e)}}function jt(t){let e=t.map(s=>s.trim()).filter(s=>Pt.test(s)).map(s=>{let n=s.match(Pt);return n?n[1].trim():""}).join("|");return J.createHash("sha256").update(e).digest("hex").slice(0,16)}function we(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function Lt(t,e){if(t===e)return 0;if(t.length===0)return e.length;if(e.length===0)return t.length;t.length>e.length&&([t,e]=[e,t]);let s=t.length,n=e.length;if(s>5e3||n>5e3)return Math.abs(s-n);let o=new Array(s+1),r=new Array(s+1);for(let i=0;i<=s;i++)o[i]=i;for(let i=1;i<=n;i++){r[0]=i;for(let a=1;a<=s;a++){let c=t[a-1]===e[i-1]?0:1;r[a]=Math.min(o[a]+1,r[a-1]+1,o[a-1]+c);}[o,r]=[r,o];}return o[s]}function Fe(t,e){if(t.length===0&&e.length===0)return 1;let s=Math.max(t.length,e.length);return 1-Lt(t,e)/s}function be(t,e,s,n=3){let{lineCount:o}=e,r=Math.max(1,Math.floor(o*.8)),i=Math.ceil(o*1.2),a=[],c=Oe(s);for(let d of [o,r,i])if(!(d>t.length))for(let u=0;u<=t.length-d;u++){let p=t.slice(u,u+d),m=gs(p,e,c);if(m>=.5){let g=p.join(`
4
- `);a.push({windowStart:u+1,windowEnd:u+d,similarity:Fe(Oe(g),c),score:m});}}let l=new Map;for(let d of a){let u=l.get(d.windowStart);(!u||d.score>u.score)&&l.set(d.windowStart,d);}return Array.from(l.values()).sort((d,u)=>u.score-d.score).slice(0,n)}function gs(t,e,s){let n=t.filter(p=>p.trim()!=="");if(n.length===0)return 0;let o=0,r=we(n[0]),i=we(n[n.length-1]),a=0;r===e.firstLine&&(a+=.5),i===e.lastLine&&(a+=.5),o+=a*ds,jt(n)===e.structuralHash&&(o+=us);let l=n.join(`
5
- `),d=Fe(Oe(l),s);d>=.8&&(o+=(d-.8)/.2*ps);let u=n.length/e.lineCount;if(u>=.8&&u<=1.2){let p=1-Math.abs(1-u)/.2;o+=p*fs;}return o}function Oe(t){return t.split(`
6
- `).map(e=>e.trim()).filter(e=>e!=="").join(`
7
- `)}function Ot(t,e){try{let s=execSync(`git log --follow --diff-filter=R --name-status --format="" -- "${e}"`,{cwd:t,encoding:"utf8",timeout:5e3}).trim();if(!s)return null;let n=s.split(`
8
- `);for(let o of n){let r=o.split(" ");if(r.length>=3&&r[0].startsWith("R"))return r[2]}return null}catch{return null}}function Ft(t,e,s,n,o=10){let r=k.isAbsolute(e)?e:k.join(t,e);if(!x.existsSync(r))return [];let i=[];try{let a=x.readdirSync(r).filter(c=>!c.startsWith(".")&&x.statSync(k.join(r,c)).isFile()).slice(0,o);for(let c of a)try{let d=x.readFileSync(k.join(r,c),"utf8").split(`
9
- `),u=be(d,s,n,1);if(u.length>0&&u[0].score>=.7){let p=k.relative(t,k.join(r,c));i.push({file:p,score:u[0].score,start:u[0].windowStart,end:u[0].windowEnd});}}catch{}}catch{return []}return i.sort((a,c)=>c.score-a.score)}function ms(t,e,s,n=true){let o=At(s),r=k.isAbsolute(e)?e:k.join(t,e);if(x.existsSync(r)){let d=x.readFileSync(r,"utf8").split(`
10
- `),u=be(d,o,s);if(u.length>0){let p=u[0];return {found:p.score>=.7,score:p.score,suggestedStart:p.windowStart,suggestedEnd:p.windowEnd,similarity:p.similarity}}}let i=Ot(t,e);if(i){let l=k.join(t,i);if(x.existsSync(l)){let u=x.readFileSync(l,"utf8").split(`
11
- `),p=be(u,o,s);if(p.length>0&&p[0].score>=.7)return {found:true,score:p[0].score,suggestedStart:p[0].windowStart,suggestedEnd:p[0].windowEnd,suggestedPath:i,similarity:p[0].similarity}}}let a=k.dirname(e),c=Ft(t,a,o,s);if(c.length>0&&c[0].score>=.7){let l=c[0];return {found:true,score:l.score,suggestedStart:l.start,suggestedEnd:l.end,suggestedPath:l.file!==e?l.file:void 0,similarity:l.score}}return {found:false,score:0}}var Pt,ds,us,ps,fs,Dt=b(()=>{Pt=/^\s*(function |class |if |else |for |while |switch |case |return |export |import |const |let |var |async |await |try |catch |throw |struct |enum |protocol |guard |def |fn )/;ds=.4,us=.3,ps=.2,fs=.1;});var Re=z.object({description:z.string(),type:z.string().optional(),parent:z.string().optional(),anchors:z.array(z.string()).optional(),tags:z.array(z.string()).optional(),endpoints:z.array(z.string()).optional(),tests:z.array(z.string()).optional(),rules:z.record(z.unknown()).optional(),aspects:z.array(z.string()).optional(),flows:z.array(z.string()).optional(),gates:z.array(z.string()).optional(),signals:z.array(z.string()).optional(),states:z.array(z.string()).optional(),components:z.array(z.string()).optional(),location:z.string().optional(),locations:z.array(z.string()).optional(),uses:z.array(z.string()).optional(),"used-by":z.array(z.string()).optional(),"used-for":z.array(z.string()).optional(),exports:z.array(z.string()).optional(),status:z.string().optional(),properties:z.record(z.unknown()).optional(),handles:z.array(z.string()).optional()}).passthrough(),nt=Re.extend({id:z.string()}),fn=z.object({description:z.string().optional(),category:z.string().optional(),severity:z.enum(["info","warn","error"]).optional(),emitters:z.array(z.string()).optional(),related:z.array(z.string()).optional(),data:z.record(z.unknown()).optional()}),gn=z.union([fn,z.string().transform(t=>({description:t}))]),mn=z.object({from:z.string(),to:z.string(),type:z.string(),description:z.string().optional()}),hn=z.union([mn,z.string()]),yn=z.object({component:z.string(),action:z.string(),description:z.string().optional()}),it=z.union([yn,z.string()]),wn=z.object({name:z.string(),description:z.string().optional(),steps:z.array(it)}),bn=z.object({description:z.string().optional(),gates:z.array(z.string()).optional(),signals:z.array(z.string()).optional(),components:z.array(z.string()).optional(),steps:z.array(it).optional()}),Sn=z.object({description:z.string().optional(),requires:z.array(z.string()).optional(),keys:z.array(z.string()).optional(),signals:z.array(z.string()).optional()}),xn=z.object({description:z.string().optional(),default:z.unknown().optional(),type:z.string().optional()}),vn=z.object({description:z.string().optional(),tags:z.array(z.string()).optional(),anchors:z.array(z.string()).optional(),"applies-to":z.array(z.string()).optional(),enforcement:z.string().optional()}),En=z.object({target:z.string(),type:z.string(),path:z.string()}),Tn=z.object({version:z.string().optional(),description:z.string().optional(),apiSpec:z.string().optional(),context:z.array(z.string()).optional(),rules:z.record(z.unknown()).optional(),features:z.union([z.array(nt),z.record(Re)]).optional(),components:z.union([z.array(nt),z.record(Re)]).optional(),gates:z.record(Sn).optional(),states:z.record(xn).optional(),signals:z.record(gn).optional(),aspects:z.record(vn).optional(),relationships:z.array(hn).optional(),flows:z.union([z.array(wn),z.record(bn)]).optional(),references:z.array(En).optional()});function Ie(t){let e=_n(t);return {data:e.data,errors:e.errors}}function _n(t){let e=[],s=[],n;try{n=x.readFileSync(t,"utf8");}catch(a){let c=`Cannot read file: ${a.message}`;return e.push(c),s.push({message:c,type:"file"}),{data:null,errors:e,detailedErrors:s,rawContent:void 0,isYamlValid:false}}let o=n.replace(/^([#~!$^][\w-]+):/gm,'"$1":').replace(/^(\s*-\s+)([!#][\w-]+)$/gm,'$1"$2"'),r=null;try{r=F.load(o);}catch(a){let c=a,l=c.mark?.line?c.mark.line+1:void 0,d=`YAML syntax error: ${c.reason||a.message}`;return e.push(`${d}${l?` (line ${l})`:""}`),s.push({message:d,line:l,type:"yaml"}),{data:null,errors:e,detailedErrors:s,rawContent:n,isYamlValid:false}}if(r==null)return {data:{},errors:[],detailedErrors:[],rawContent:n,isYamlValid:true};if(typeof r=="object"&&r!==null){let a=r,c={"#":"components",$:"flows","^":"gates","!":"signals","~":"aspects"};for(let l of Object.keys(a)){let d=l[0],u=c[d];if(!u||l.length<2)continue;let p=l.slice(1),m=a[l];if(typeof m!="object"||m===null)continue;let g=a[u]||{};u in a||(a[u]=g),p in g||(g[p]=m),delete a[l];}}let i=Tn.safeParse(r);if(!i.success){for(let a of i.error.issues){let c=a.path.join("."),l=a.message;e.push(`Schema error at ${c||"/"}: ${l}`),s.push({message:l,path:c||"/",type:"schema"});}return {data:r,errors:e,detailedErrors:s,rawContent:n,isYamlValid:true}}return {data:i.data,errors:[],detailedErrors:[],rawContent:n,isYamlValid:true}}function fo(t){return F.dump(t,{indent:2,lineWidth:-1,noRefs:true,sortKeys:false})}function pe(t){return t?Array.isArray(t)?t.map(e=>[e.id,e]):Object.entries(t):[]}async function Rn(t){let e=k.resolve(t);return (await glob("**/.purpose",{cwd:e,absolute:true,ignore:["**/node_modules/**","**/dist/**","**/.git/**"]})).sort((n,o)=>{let r=n.split(k.sep).length,i=o.split(k.sep).length;return r-i})}async function at(t){let e=await Rn(t),s=[];for(let n of e){let{data:o,errors:r}=Ie(n);o&&(s.push({filePath:n,data:o}),r.length>0&&console.warn(`Warnings parsing ${n}:`,r));}return s}function ct(t){let e=new Map;for(let{filePath:s,data:n}of t){let o=pe(n.features);for(let[r,i]of o)e.set(r,{item:i,filePath:s});}return e}function lt(t){let e=new Map;for(let{filePath:s,data:n}of t){let o=pe(n.components);for(let[r,i]of o)e.set(r,{item:i,filePath:s});}return e}function dt(t){let e=new Map;for(let{filePath:s,data:n}of t)if(n.gates)for(let[o,r]of Object.entries(n.gates))e.set(o,{item:r,filePath:s});return e}function ut(t){let e=new Map;for(let{filePath:s,data:n}of t)if(n.states)for(let[o,r]of Object.entries(n.states))e.set(o,{item:r,filePath:s});return e}function pt(t){let e=new Map;for(let{filePath:s,data:n}of t)if(n.flows)if(Array.isArray(n.flows))for(let o of n.flows)e.set(o.name,{item:{id:o.name,description:o.description,steps:o.steps},filePath:s});else for(let[o,r]of Object.entries(n.flows))e.set(o,{item:{id:o,description:r.description,gates:r.gates,signals:r.signals,components:r.components,steps:r.steps},filePath:s});return e}function ft(t){let e=new Map;for(let{filePath:s,data:n}of t)if(n.signals)for(let[o,r]of Object.entries(n.signals))e.set(o,{item:r,filePath:s});return e}function gt(t){let e=new Map;for(let{filePath:s,data:n}of t)if(n.aspects)for(let[o,r]of Object.entries(n.aspects))e.set(o,{item:r,filePath:s});return e}function mt(t){let e=[],s=new Set;for(let{filePath:n,data:o}of t){let r=pe(o.features);for(let[a,c]of r)st(`#${a}`,c,n,e,s);let i=pe(o.components);for(let[a,c]of i)st(`#${a}`,c,n,e,s);}return e}function st(t,e,s,n,o){if(e.flows)for(let r of e.flows){let i=r.startsWith("$")?r:`$${r}`;o.has(i)||(o.add(i),n.push({symbol:i,type:"flow",sourceSymbol:t,filePath:s}));}if(e.gates)for(let r of e.gates){let i=r.startsWith("^")?r:`^${r}`;o.has(i)||(o.add(i),n.push({symbol:i,type:"gate",sourceSymbol:t,filePath:s}));}if(e.signals)for(let r of e.signals){let i=r.startsWith("!")?r:`!${r}`;o.has(i)||(o.add(i),n.push({symbol:i,type:"signal",sourceSymbol:t,filePath:s}));}if(e.states)for(let r of e.states){let i=r.startsWith("#")?r:r.startsWith("%")?`#${r.slice(1)}`:`#${r}`;o.has(i)||(o.add(i),n.push({symbol:i,type:"component",sourceSymbol:t,filePath:s}));}if(e.components)for(let r of e.components){let i=r.startsWith("#")?r:`#${r}`;o.has(i)||(o.add(i),n.push({symbol:i,type:"component",sourceSymbol:t,filePath:s}));}if(e.aspects)for(let r of e.aspects){let i=r.startsWith("~")?r:`~${r}`;o.has(i)||(o.add(i),n.push({symbol:i,type:"aspect",sourceSymbol:t,filePath:s}));}if(e.description){let r=kn(e.description);for(let{symbol:i,type:a}of r)o.has(i)||(o.add(i),n.push({symbol:i,type:a,sourceSymbol:t,filePath:s}));}}var In=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);function kn(t){let e=[],s=/([$^!#~%])([a-zA-Z][a-zA-Z0-9._-]*)/g,n;for(;(n=s.exec(t))!==null;){let o=n[1],r=n[2],i,a;switch(o){case "#":a="component",i=`#${r}`;break;case "$":a="flow",i=`$${r}`;break;case "^":a="gate",i=`^${r}`;break;case "!":a="signal",i=`!${r}`;break;case "~":a="aspect",i=`~${r}`;break;case "%":a="component",i=`#${r}`;break;default:continue}In.has(i)||e.push({symbol:i,type:a});}return e}function se(t){return t?Array.isArray(t)?t.map(e=>[e.id,e]):Object.entries(t):[]}function $e(t){return t?Array.isArray(t)?t.map(e=>e.id):Object.keys(t):[]}function mo(t,e){let s=[],n=e?`${e}: `:"",o=se(t.features);for(let[i,a]of o)ot(i,a,"feature",n,s);let r=se(t.components);for(let[i,a]of r)ot(i,a,"component",n,s);if(t.relationships){let i=new Set([...$e(t.features),...$e(t.components)]);for(let a of t.relationships){if(typeof a=="string"||!a||!a.from||!a.to)continue;let c=a.from.replace(/^[@#$%~^!?]/,"");!i.has(c)&&!a.from.includes(".")&&s.push({type:"warning",message:`${n}Relationship references unknown source: "${a.from}"`,path:"relationships"});let l=a.to.replace(/^[@#$%~^!?]/,"");!i.has(l)&&!a.to.includes(".")&&s.push({type:"warning",message:`${n}Relationship references unknown target: "${a.to}"`,path:"relationships"});}}if(t.flows){let i=new Set($e(t.components));if(Array.isArray(t.flows)){for(let a of t.flows)if(!(!a||typeof a!="object")&&(a.name||s.push({type:"error",message:`${n}Flow missing required "name" field`,path:"flows"}),a.steps&&Array.isArray(a.steps)))for(let c of a.steps){if(typeof c=="string"||!c||!c.component)continue;let l=c.component.replace(/^#/,"");i.has(l)||s.push({type:"warning",message:`${n}Flow "${a.name}" references unknown component: "${c.component}"`,path:`flows.${a.name}`});}}else for(let[a,c]of Object.entries(t.flows))if(!(!c||typeof c!="object")&&c.steps&&Array.isArray(c.steps))for(let l of c.steps){if(typeof l=="string"||!l||!l.component)continue;let d=l.component.replace(/^#/,"");i.has(d)||s.push({type:"warning",message:`${n}Flow "${a}" references unknown component: "${l.component}"`,path:`flows.${a}`});}}return {valid:s.filter(i=>i.type==="error").length===0,issues:s}}function ot(t,e,s,n,o){let r=`${s}s.${t}`;if(/^[a-zA-Z][a-zA-Z0-9-]*$/.test(t)||o.push({type:"warning",message:`${n}${s} ID "${t}" should use alphanumeric characters and hyphens`,path:r}),(!e.description||e.description.trim()==="")&&o.push({type:"warning",message:`${n}${s} "${t}" has no description`,path:r}),e.endpoints)for(let i of e.endpoints)/^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\s+\//.test(i)||o.push({type:"warning",message:`${n}Endpoint "${i}" in ${s} "${t}" may not be in standard format (e.g., "GET /api/users")`,path:`${r}.endpoints`});}function ht(t){let e=[],s=new Set;for(let{data:n}of t){let o=se(n.components);for(let[i]of o)s.add(`#${i}`),s.add(i);let r=se(n.features);for(let[i]of r)s.add(`#${i}`),s.add(i);if(n.gates)for(let i of Object.keys(n.gates))s.add(`^${i}`),s.add(i);if(n.signals)for(let i of Object.keys(n.signals))s.add(`!${i}`),s.add(i);if(n.flows)if(Array.isArray(n.flows))for(let i of n.flows)i?.name&&(s.add(`$${i.name}`),s.add(i.name));else for(let i of Object.keys(n.flows))s.add(`$${i}`),s.add(i);if(n.aspects)for(let i of Object.keys(n.aspects))s.add(`~${i}`),s.add(i);if(n.states)for(let i of Object.keys(n.states))s.add(`#${i}`),s.add(i);}for(let{filePath:n,data:o}of t){let r=n?`${n}: `:"",i=[...se(o.components),...se(o.features)];for(let[a,c]of i){if(c.parent){let d=c.parent.replace(/^["']|["']$/g,""),u=d.replace(/^[#$^!~@%?&]/,"");!s.has(d)&&!s.has(u)&&e.push({type:"warning",message:`${r}Component "${a}" references parent "${d}" which is not defined in any .purpose file`,path:`components.${a}.parent`});}let l=[{field:"gates",refs:c.gates},{field:"signals",refs:c.signals},{field:"flows",refs:c.flows},{field:"components",refs:c.components},{field:"aspects",refs:c.aspects}];for(let{field:d,refs:u}of l)if(u)for(let p of u){let m=p.replace(/^[#$^!~@%?&]/,"");!s.has(p)&&!s.has(m)&&e.push({type:"warning",message:`${r}Symbol "${a}" references ${d} "${p}" which is not defined`,path:`components.${a}.${d}`});}}if(o.flows){if(Array.isArray(o.flows)){for(let a of o.flows)if(a?.steps)for(let c of a.steps){if(typeof c=="string"||!c?.component)continue;let l=c.component.replace(/^#/,"");!s.has(c.component)&&!s.has(l)&&e.push({type:"warning",message:`${r}Flow "${a.name}" step references "${c.component}" which is not defined`,path:`flows.${a.name}.steps`});}}else for(let[a,c]of Object.entries(o.flows))if(c?.steps)for(let l of c.steps){if(typeof l=="string"||!l?.component)continue;let d=l.component.replace(/^#/,"");!s.has(l.component)&&!s.has(d)&&e.push({type:"warning",message:`${r}Flow "${a}" step references "${l.component}" which is not defined`,path:`flows.${a}.steps`});}}}return {valid:e.filter(n=>n.type==="error").length===0,issues:e}}var Pn={visualizerPort:42195,watcherPort:42196,autoConnect:true};async function me(t){let e=k.resolve(t),s=k.dirname(e);if(!x.existsSync(e))throw new Error(`Gate config not found: ${e}`);let n=x.readFileSync(e,"utf8"),o=F.load(n);if(!o.version)throw new Error('Gate config missing required "version" field');let r=[],i=o,a=o.gates||i.portals;if(a)for(let[l,d]of Object.entries(a))r.push(ke(l,d));if(o.include)for(let l of o.include){let d=k.join(s,l),u=await glob(d.replace(/\\/g,"/"));for(let p of u){let m=await Cn(p);r.push(...m);}}let c=[];if(o.flows)for(let[l,d]of Object.entries(o.flows))c.push(Ln(l,d));return {version:o.version,gates:r,flows:c,settings:{dev:{...Pn,...o.settings?.dev}}}}async function Cn(t){let e=x.readFileSync(t,"utf8"),s=F.load(e);if(s.id)return [ke(s.id,s)];if(s.gates){let n=[];for(let[o,r]of Object.entries(s.gates))n.push(ke(o,r));return n}return []}function ke(t,e){let s=[];if(e.locks)for(let o of e.locks)s.push(An(o));let n=[];if(e.prizes)for(let o of e.prizes)n.push(jn(o));return {id:t,description:e.description,locks:s,prizes:n,position:e.position}}function An(t){let e=t,s=[];if(e.keys){for(let n of e.keys)if(typeof n=="string")s.push({expression:n});else if(n.expression){let o=n;s.push({expression:o.expression,description:o.description});}}return {id:e.id,description:e.description,keys:s,mode:e.mode||"all"}}function jn(t){let e=t;return {id:e.id,oneTime:e.oneTime??false,metadata:e.metadata}}function Ln(t,e){return {id:t,description:e.description,gates:e.gates||[],forkable:e.forkable}}async function wt(t){let e=k.resolve(t);return await glob("**/portal.yaml",{cwd:e,absolute:true,ignore:["**/node_modules/**","**/dist/**","**/.git/**"]})}var On=z.object({x:z.number(),y:z.number()}),Fn=z.object({x:z.number(),y:z.number(),zoom:z.number()}),bt=z.object({path:z.string(),include:z.array(z.string()).optional(),exclude:z.array(z.string()).optional()}),xt=z.object({id:z.string(),symbol:z.string(),type:z.enum(["feature","component","flow","state","aspect","gate","signal","idea"]),content:z.string().optional(),position:On,tags:z.array(z.string()).optional(),created:z.string(),modified:z.string().optional()}),vt=z.object({from:z.string(),to:z.string(),label:z.string().optional(),type:z.string().optional()}),Nn=z.object({id:z.string(),name:z.string(),nodes:z.array(z.string()),color:z.string().optional()}),Et=z.object({viewport:Fn,groups:z.array(Nn).optional()}),Dn=z.object({nodes:z.array(xt),connections:z.array(vt),layout:Et}),Mn=z.object({id:z.string(),name:z.string(),timestamp:z.string(),description:z.string().optional(),state:Dn});z.object({version:z.string(),metadata:z.object({name:z.string(),created:z.string(),modified:z.string()}),sources:z.object({purpose:z.array(bt).optional(),portal:z.array(bt).optional()}),nodes:z.array(xt),connections:z.array(vt),layout:Et,snapshots:z.array(Mn).optional()});async function Un(t,e){let s=[],n=[],o=[],r=[];if(t.sources.purpose)for(let c of t.sources.purpose){let l=k.resolve(e,c.path);try{let d=await at(l);o.push(...d.map(S=>S.filePath));let u=ct(d);for(let[S,{item:b,filePath:w}]of u){let I=["feature",...b.tags||[]];s.push(M({id:`purpose-feature-${S}`,symbol:`#${S}`,type:"component",source:"purpose",filePath:w,data:b,description:b.description,tags:I,componentType:b.type,parentSymbol:b.parent,anchors:b.anchors?.map(N=>Pe(N))}));}let p=lt(d);for(let[S,{item:b,filePath:w}]of p)s.push(M({id:`purpose-component-${S}`,symbol:`#${S}`,type:"component",source:"purpose",filePath:w,data:b,description:b.description,tags:b.tags,componentType:b.type,parentSymbol:b.parent,anchors:b.anchors?.map(I=>Pe(I))}));let m=dt(d);for(let[S,{item:b,filePath:w}]of m)s.push(M({id:`purpose-gate-${S}`,symbol:`^${S}`,type:"gate",source:"purpose",filePath:w,data:b,description:b.description}));let g=ut(d);for(let[S,{item:b,filePath:w}]of g)s.push(M({id:`purpose-state-${S}`,symbol:`#${S}`,type:"component",source:"purpose",filePath:w,data:b,description:b.description,tags:["state"]}));let h=pt(d);for(let[S,{item:b,filePath:w}]of h)s.push(M({id:`purpose-flow-${S}`,symbol:`$${S}`,type:"flow",source:"purpose",filePath:w,data:b,description:b.description}));let v=ft(d);for(let[S,{item:b,filePath:w}]of v)s.push(M({id:`purpose-signal-${S}`,symbol:`!${S}`,type:"signal",source:"purpose",filePath:w,data:b,description:b.description}));let T=gt(d);for(let[S,{item:b,filePath:w}]of T)s.push(M({id:`purpose-aspect-${S}`,symbol:`~${S}`,type:"aspect",source:"purpose",filePath:w,data:b,description:b.description,anchors:b.anchors?.map(I=>Pe(I)),appliesTo:b["applies-to"],tags:b.tags,enforcement:b.enforcement}));let E=mt(d),_=new Set(s.map(S=>S.symbol));for(let S of E)_.has(S.symbol)||(_.add(S.symbol),s.push(M({id:`purpose-ref-${S.type}-${S.symbol.slice(1)}`,symbol:S.symbol,type:S.type,source:"purpose",filePath:S.filePath,data:{referencedFrom:S.sourceSymbol},description:`Referenced from ${S.sourceSymbol}`})));}catch(d){n.push({source:"purpose",filePath:l,message:d.message});}}if(t.sources.portal)for(let c of t.sources.portal){let l=k.resolve(e,c.path);try{let d;if(l.endsWith(".yaml")||l.endsWith(".yml"))d=await me(l),r.push(l);else {let u=await wt(l);if(r.push(...u),u.length>0){d=await me(u[0]);for(let p=1;p<u.length;p++){let m=await me(u[p]);d.gates.push(...m.gates),d.flows.push(...m.flows);}}else continue}for(let u of d.gates){s.push(zn(u,l));for(let p of u.prizes)s.push(M({id:`gate-signal-${u.id}-${p.id}`,symbol:`!${p.id}`,type:"signal",source:"portal",filePath:l,data:p,description:`Signal from gate ${u.id}`}));}for(let u of d.flows)s.push(Hn(u,l));}catch(d){n.push({source:"portal",filePath:l,message:d.message});}}for(let c of t.nodes){let l=c.tags?.includes("idea");if(!c.content&&!l){let d=s.find(u=>u.symbol===c.symbol);if(d){d.position=c.position,d.tags=c.tags;continue}}s.push(M({id:c.id,symbol:c.symbol,type:c.type,source:"premise",filePath:".premise",data:c,description:c.content,position:c.position,tags:c.tags,created:c.created,modified:c.modified}));}Gn(s);let i=new Map;for(let c of s){let l=i.get(c.symbol)||[];l.includes(c.filePath)||l.push(c.filePath),i.set(c.symbol,l);}let a=[];for(let[c,l]of i)l.length>1&&a.push({symbol:c,files:l});return {symbols:s,purposeFiles:o,portalFiles:r,errors:n,timestamp:Date.now(),...a.length>0?{duplicateSymbols:a}:{}}}function M(t){return {...t,data:t.data??null,references:t.references??[],referencedBy:t.referencedBy??[]}}function zn(t,e){return M({id:`gate-${t.id}`,symbol:`^${t.id}`,type:"gate",source:"portal",filePath:e,data:t,description:t.description,position:t.position})}function Hn(t,e){return M({id:`gate-flow-${t.id}`,symbol:`$${t.id}`,type:"flow",source:"portal",filePath:e,data:t,description:t.description})}function Pe(t){let e=t.lastIndexOf(":");if(e===-1||e===t.length-1)return {path:t,lines:0,raw:t};let s=t.slice(e+1),n=t.slice(0,e);if(!/^[\d,\- ]+$/.test(s))return {path:t,lines:0,raw:t};if(s.includes("-")){let[o,r]=s.split("-").map(Number);return {path:n,lines:[o,r],raw:t}}else if(s.includes(",")){let o=s.split(",").map(Number);return {path:n,lines:o,raw:t}}else return {path:n,lines:Number(s),raw:t}}var Wn=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);function Gn(t){let e=new Map(t.map(s=>[s.symbol,s]));for(let s of t){let n=JSON.stringify(s.data),o=/(?:\?[@#$%~^!]|[@#$%~^!?])[a-zA-Z][\w-]*/g,r=(n.match(o)||[]).filter(i=>!Wn.has(i));for(let i of r)if(i!==s.symbol&&e.has(i)){s.references.includes(i)||s.references.push(i);let a=e.get(i);a&&!a.referencedBy.includes(s.symbol)&&a.referencedBy.push(s.symbol);}}}async function Tt(t){let e={metadata:{name:k.basename(t),created:new Date().toISOString(),modified:new Date().toISOString()},sources:{purpose:[{path:"./"}],portal:[{path:"./"}]},nodes:[]};return Un(e,t)}function Bn(){return {entries:new Map,byType:new Map,bySource:new Map,timestamp:0}}function Eo(t){let e=Bn();e.timestamp=t.timestamp;for(let s of t.symbols)e.entries.set(s.id,s),e.byType.has(s.type)||e.byType.set(s.type,[]),e.byType.get(s.type).push(s),e.bySource.has(s.source)||e.bySource.set(s.source,[]),e.bySource.get(s.source).push(s);return e}function he(t,e){for(let s of t.entries.values())if(s.symbol===e)return s}function To(t,e){return t.byType.get(e)||[]}function _o(t,e){let s=e.toLowerCase(),n=[];for(let o of t.entries.values()){if(o.symbol.toLowerCase().includes(s)){n.push(o);continue}if(o.description?.toLowerCase().includes(s)){n.push(o);continue}if(o.tags?.some(r=>r.toLowerCase().includes(s))){n.push(o);continue}if(o.componentType?.toLowerCase().includes(s)){n.push(o);continue}}return n}function $o(t,e){let s=he(t,e);return s?s.referencedBy.map(n=>he(t,n)).filter(n=>n!==void 0):[]}function Ro(t,e){let s=he(t,e);return s?s.references.map(n=>he(t,n)).filter(n=>n!==void 0):[]}function Io(t){let e={component:0,flow:0,gate:0,signal:0,aspect:0};for(let[s,n]of t.byType)s in e&&(e[s]=n.length);return e}function ko(t){return Array.from(t.entries.values())}var Xn="0.1.0",qn="1.0.0";function Ce(t,e){let s={$meta:Vn(e.projectName,t),components:{},features:{},flows:{},state:{},gates:{},signals:{},aspects:{},screens:{},symbolMap:{}};for(let o of t.symbols)Yn(o,s,e);if(e.screenDefinitions)for(let[o,r]of Object.entries(e.screenDefinitions))s.screens[o]||(s.screens[o]={id:o,name:V(o),route:r.route,path:"",components:r.components,features:r.features});let n={};for(let o of Object.values(s.components))o.componentType&&(n[o.componentType]=(n[o.componentType]||0)+1);for(let o of Object.values(s.features))o.componentType&&(n[o.componentType]=(n[o.componentType]||0)+1);return Object.keys(n).length>0&&(s.$meta.componentTypes=n),ss(s),s}function Vn(t,e){return {version:qn,project:t,generatedAt:new Date().toISOString(),paradigmVersion:Xn,sources:{purposeFiles:e.purposeFiles.length,portalFiles:e.portalFiles.length,premiseFiles:e.symbols.filter(s=>s.source==="premise").length>0?1:0}}}function Yn(t,e,s){let{type:n}=t;switch(n){case "component":Jn(t,e,s);break;case "feature":Kn(t,e,s);break;case "flow":Qn(t,e);break;case "state":Zn(t,e);break;case "gate":es(t,e);break;case "signal":ts(t,e);break;case "aspect":ns(t,e);break;}}function Jn(t,e,s){let n=ee(t.symbol),o=_t(n,t.data,s.visualTagMappings),r={id:n,name:V(n),symbol:t.symbol,category:"components",path:t.filePath,description:t.description,visualTags:o,related:t.references,componentType:t.componentType,parent:t.parentSymbol};e.components[n]=r,e.symbolMap[t.symbol]={category:"components",id:n};}function Kn(t,e,s){let n=ee(t.symbol),o=_t(n,t.data,s.visualTagMappings),r={id:n,name:V(n),symbol:t.symbol,category:"features",path:t.filePath,description:t.description,visualTags:o,related:t.references,componentType:t.componentType,parent:t.parentSymbol};e.features[n]=r,e.symbolMap[t.symbol]={category:"features",id:n};}function Qn(t,e){let s=ee(t.symbol),n=t.data,o=[];if(n?.steps)for(let i=0;i<n.steps.length;i++){let a=n.steps[i];o.push({id:`${s}-step-${i}`,name:a.action||`Step ${i+1}`,target:a.component,description:a.description,order:i});}let r={id:s,name:V(s),symbol:t.symbol,path:t.filePath,description:t.description,steps:o};e.flows[s]=r,e.symbolMap[t.symbol]={category:"flows",id:s};}function Zn(t,e){let s=ee(t.symbol),n={id:s,name:V(s),symbol:t.symbol,path:t.filePath,description:t.description,consumers:t.referencedBy};e.state[s]=n,e.symbolMap[t.symbol]={category:"state",id:s};}function es(t,e){let s=ee(t.symbol),n={id:s,name:V(s),symbol:t.symbol,category:"gates",path:t.filePath,description:t.description,related:t.references};e.gates[s]=n,e.symbolMap[t.symbol]={category:"gates",id:s};}function ts(t,e){let s=ee(t.symbol),n={id:s,name:V(s),symbol:t.symbol,category:"signals",path:t.filePath,description:t.description,related:t.references};e.signals[s]=n,e.symbolMap[t.symbol]={category:"signals",id:s};}function ns(t,e){let s=ee(t.symbol),n={id:s,name:V(s),symbol:t.symbol,category:"aspects",path:t.filePath,description:t.description,related:t.references};e.aspects[s]=n,e.symbolMap[t.symbol]={category:"aspects",id:s};}function ss(t){for(let e of Object.values(t.screens))if(e.components)for(let s of e.components){let n=t.components[s];n&&(n.screens=n.screens||[],n.screens.includes(e.id)||n.screens.push(e.id));}}function ee(t){return t.slice(1)}function V(t){return t.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function _t(t,e,s){let n=[];if(s?.[t])return s[t];let o=[[/button/i,"button"],[/btn/i,"button"],[/form/i,"form"],[/input/i,"input"],[/field/i,"input"],[/select/i,"input"],[/card/i,"card"],[/list/i,"list"],[/table/i,"list"],[/modal/i,"modal"],[/dialog/i,"modal"],[/drawer/i,"modal"],[/nav/i,"nav"],[/menu/i,"menu"],[/dropdown/i,"menu"],[/header/i,"header"],[/footer/i,"footer"],[/sidebar/i,"sidebar"],[/hero/i,"hero"],[/grid/i,"grid"],[/chart/i,"chart"],[/graph/i,"chart"],[/icon/i,"icon"],[/image/i,"image"],[/avatar/i,"avatar"],[/badge/i,"badge"],[/tag/i,"badge"],[/tab/i,"tab"],[/accordion/i,"accordion"],[/toast/i,"toast"],[/notification/i,"toast"],[/alert/i,"toast"],[/spinner/i,"spinner"],[/loader/i,"spinner"],[/loading/i,"spinner"],[/skeleton/i,"skeleton"]];for(let[r,i]of o)r.test(t)&&n.push(i);return n}function Ae(t){return JSON.stringify(t,null,2)}function je(t,e="unknown"){j$1().trackToolCall(e,t);}function Uo(t,e="paradigm://unknown"){j$1().trackResourceRead(e,t);}function os(){k$1();}function rs(t,e){switch(t){case "paradigm_search":return {summary:`Searched for "${e.query}"${e.type?` (type: ${e.type})`:""}`,symbol:e.query};case "paradigm_ripple":return {summary:`Ripple analysis on ${e.symbol}${e.depth?` (depth: ${e.depth})`:""}`,symbol:e.symbol};case "paradigm_related":return {summary:`Checked relations for ${e.symbol}`,symbol:e.symbol};case "paradigm_status":return {summary:"Checked project status"};case "paradigm_navigate":{let s=e.intent,n=e.target,o=e.task;return s==="context"&&o?{summary:`Navigate context: "${o}"`}:n?{summary:`Navigate ${s||"find"}: ${n}`,symbol:n}:{summary:`Navigate (${s||"unknown"})`}}case "paradigm_gates_for_route":return {summary:`Gate suggestions for ${e.method||"GET"} ${e.route}`};case "paradigm_wisdom_context":return {summary:`Checked wisdom for ${Array.isArray(e.symbols)?e.symbols.join(", "):"symbols"}`,symbol:Array.isArray(e.symbols)?e.symbols[0]:void 0};case "paradigm_history_context":return {summary:`Checked history for ${Array.isArray(e.symbols)?e.symbols.join(", "):"symbols"}`,symbol:Array.isArray(e.symbols)?e.symbols[0]:void 0};case "paradigm_history_record":return {summary:`Recorded ${e.type}: ${(e.description||"").slice(0,60)}`,symbol:Array.isArray(e.symbols)?e.symbols[0]:void 0};case "paradigm_history_fragility":return {summary:`Checked fragility for ${Array.isArray(e.symbols)?e.symbols.join(", "):"symbols"}`,symbol:Array.isArray(e.symbols)?e.symbols[0]:void 0};case "paradigm_flows_affected":return {summary:`Checked flows affected by ${e.symbol}`,symbol:e.symbol};case "paradigm_reindex":return {summary:"Rebuilt static index files"};case "paradigm_session_checkpoint":return {summary:`Checkpoint: phase=${e.phase}, ${(e.context||"").slice(0,60)}`};case "paradigm_task_create":return {summary:`Created task: "${(e.blurb||"").slice(0,60)}"`};case "paradigm_task_done":return {summary:`Completed task ${e.id}`};case "paradigm_task_shelve":return {summary:`Shelved task ${e.id}`};case "paradigm_task_list":return {summary:`Listed tasks (status: ${e.status||"open"})`};case "paradigm_task_update":return {summary:`Updated task ${e.id}`};case "paradigm_assessment_record":return {summary:`Assessment: ${(e.title||"").slice(0,60)} \u2192 ${e.arc_id}`,symbol:Array.isArray(e.symbols)?e.symbols[0]:void 0};case "paradigm_assessment_list":return {summary:e.arc_id?`Listed entries in ${e.arc_id}`:"Listed assessment arcs"};case "paradigm_assessment_search":return {summary:`Searched assessments${e.symbol?` for ${e.symbol}`:""}`,symbol:e.symbol};case "paradigm_assessment_arc_create":return {summary:`Created arc: ${e.id}`};case "paradigm_assessment_arc_close":return {summary:`Closed arc: ${e.arc_id}`};default:{let s=t.replace(/^paradigm_/,""),n=Object.values(e).find(o=>typeof o=="string"&&o.length>0);return {summary:n?`${s}: ${n.slice(0,60)}`:s,symbol:e.symbol||void 0}}}}function zo(t,e){let s=j$1(),{summary:n,symbol:o}=rs(t,e);s.addBreadcrumb("tool-call",n,{tool:t,symbol:o});}function Ho(){return [{name:"paradigm_session_health",description:"Check if context handoff is recommended based on session activity. Call this periodically during long sessions. Returns usage percentage and recommendation (continue, consider-handoff, handoff-recommended, handoff-urgent). ~100 tokens.",inputSchema:{type:"object",properties:{estimatedTotalTokens:{type:"number",description:"Optional: Your estimate of total conversation tokens (if available)"},contextWindowSize:{type:"number",description:"Context window size in tokens (default: 200000)"}}},annotations:{readOnlyHint:true,destructiveHint:false}},{name:"paradigm_context_check",description:"DEPRECATED: renamed to paradigm_session_health. This alias will be removed in a future version.",inputSchema:{type:"object",properties:{}},annotations:{readOnlyHint:true,destructiveHint:false}},{name:"paradigm_handoff_prepare",description:"Prepare a handoff summary. Generates a structured handoff file with markdown summary and recovery instructions. Returns structured markdown with summary, modified files, and next steps. ~300 tokens.",inputSchema:{type:"object",properties:{summary:{type:"string",description:"Brief summary of work done in this session"},nextSteps:{type:"array",items:{type:"string"},description:"List of next steps for the continuing session"},agent:{type:"string",description:'Target agent role (e.g., "builder", "architect")'},modifiedFiles:{type:"array",items:{type:"string"},description:"List of files modified in this session"},symbolsTouched:{type:"array",items:{type:"string"},description:"List of symbols (@feature, #component, etc.) touched"},openQuestions:{type:"array",items:{type:"string"},description:"Unresolved questions or decisions needed"}},required:["summary"]},annotations:{readOnlyHint:false,destructiveHint:false}},{name:"paradigm_session_stats",description:"Get current session statistics (MCP interactions, estimated tokens). Returns tool call count, estimated tokens used, and cost breakdown. ~100 tokens.",inputSchema:{type:"object",properties:{}},annotations:{readOnlyHint:true,destructiveHint:false}},{name:"paradigm_session_recover",description:"Load previous session breadcrumbs for continuity. Call this at the start of a new session to understand what was done before. Returns symbols modified, files explored, recent actions, and suggestions for continuity. ~200 tokens. NOTE: Recovery data is automatically surfaced as a preamble on the first tool call of each session \u2014 explicit calls are retained for direct inspection or forcing a second recovery pass.",inputSchema:{type:"object",properties:{}},annotations:{readOnlyHint:true,destructiveHint:false},aliases:["resume","pick up","continue","what was I doing","last session","recover"]},{name:"paradigm_session_checkpoint",description:"Save a cognitive-transition checkpoint for crash recovery. Call when transitioning between phases (planning \u2192 implementing \u2192 validating \u2192 complete). ~100 tokens.",inputSchema:{type:"object",properties:{phase:{type:"string",enum:["planning","implementing","validating","complete"],description:"Current workflow phase"},context:{type:"string",description:"What's top-of-mind right now (1-3 sentences)"},externalId:{type:"string",description:'Optional: deterministic ID from external source for automatic session recovery (e.g. "linear:PROJ-123", "github:owner/repo#42")'},plan:{type:"string",description:"Optional: the current plan or approach"},modifiedFiles:{type:"array",items:{type:"string"},description:"Optional: files modified so far"},symbolsTouched:{type:"array",items:{type:"string"},description:"Optional: symbols touched so far"},decisions:{type:"array",items:{type:"string"},description:"Optional: key decisions made so far"}},required:["phase","context"]},annotations:{readOnlyHint:false,destructiveHint:false}}]}async function Wo(t,e,s){let n=j$1();if(t==="paradigm_session_health"||t==="paradigm_context_check"){let o=e.contextWindowSize||2e5,r=e.estimatedTotalTokens,i=n.getStats(),{recommendation:a,message:c,usagePercent:l,signals:d}=n.getHandoffRecommendation(o,r),u=n.getDurationMinutes();return {handled:true,text:JSON.stringify({recommendation:a,message:c,stats:{sessionDurationMinutes:u,mcpToolCalls:i.totals.toolCallCount,mcpResourceReads:i.totals.resourceReadCount,estimatedMcpTokens:i.totals.totalTokens,estimatedTotalTokens:r||Math.round(i.totals.totalTokens*5),contextWindowSize:o,usagePercent:l},signals:d,action:a==="continue"?null:"Call paradigm_handoff_prepare to create handoff file"},null,2)}}if(t==="paradigm_handoff_prepare"){let o=e.summary,r=e.nextSteps||[],i=e.agent||"builder",a$1=e.modifiedFiles||[],c=e.symbolsTouched||[],l=e.openQuestions||[],d=n.getStats(),u=n.getCostBreakdown(),p=`h${Date.now().toString(36)}`,m=new Date().toISOString(),g={id:p,timestamp:m,from:"current-session",to:i,summary:o,nextSteps:r,modifiedFiles:a$1,symbolsTouched:c,openQuestions:l,sessionStats:{duration:n.getDurationMinutes(),mcpCalls:d.totals.toolCallCount+d.totals.resourceReadCount,estimatedTokens:d.totals.totalTokens,estimatedCostUsd:u.total.costUsd,model:u.model},status:"pending"},h=false;try{a(s.rootDir,g),h=!0;}catch{}let v=`# Handoff: ${m}
12
-
13
- ## Session Summary
14
- ${o}
15
-
16
- ## Next Steps
17
- ${r.map((T,E)=>`${E+1}. ${T}`).join(`
18
- `)||"(none specified)"}
19
-
20
- ## Key Context
21
- - Modified files: ${a$1.length>0?a$1.join(", "):"(not specified)"}
22
- - Symbols touched: ${c.length>0?c.join(", "):"(not specified)"}
23
- - Open questions: ${l.length>0?l.join(", "):"(none)"}
24
- `;return os(),{handled:true,text:JSON.stringify({handoff:g,markdownSummary:v,persisted:h,recovery:"The next session will automatically receive this handoff via paradigm_session_recover."},null,2)}}if(t==="paradigm_session_stats"){let o=n.getStats(),r=n.getCostBreakdown(),i=n.getDurationMinutes();return {handled:true,text:JSON.stringify({session:{startTime:new Date(o.startTime).toISOString(),durationMinutes:i,lastActivity:new Date(o.lastActivity).toISOString()},model:{name:r.model,id:r.modelId,pricing:{inputPerMillion:`$${r.pricing.input.toFixed(2)}`,outputPerMillion:`$${r.pricing.output.toFixed(2)}`}},interactions:{toolCalls:o.totals.toolCallCount,resourceReads:o.totals.resourceReadCount,totalInteractions:o.totals.toolCallCount+o.totals.resourceReadCount},tokens:{total:o.totals.totalTokens,byCategory:{resources:r.resources.tokens,tools:r.tools.tokens}},cost:{totalUsd:`$${r.total.costUsd.toFixed(4)}`,breakdown:{resources:`$${r.resources.costUsd.toFixed(4)}`,tools:`$${r.tools.costUsd.toFixed(4)}`},note:"Cost is for MCP output tokens only (responses sent to model)"},details:{resourcesByType:r.resources.byType,toolsByName:r.tools.byName}},null,2)}}if(t==="paradigm_session_recover"){let{checkpoint:o,pendingHandoffs:r,previousSession:i}=$t(s.rootDir);if(!i&&r.length===0&&!o)return {handled:true,text:JSON.stringify({found:false,message:"No previous session breadcrumbs, checkpoints, or pending handoffs found.",tip:"Breadcrumbs persist to ~/.paradigm/sessions/ and handoffs persist via paradigm_handoff_prepare. Checkpoints persist via paradigm_session_checkpoint."},null,2)};let a={found:true};if(o){let l=Date.now()-o.timestamp,d=Math.round(l/6e4),u=Math.round(l/36e5);a.checkpoint={phase:o.phase,context:o.context,age:u>1?`${u} hours ago`:`${d} minutes ago`,timestamp:new Date(o.timestamp).toISOString(),sessionId:o.sessionId,plan:o.plan,modifiedFiles:o.modifiedFiles,symbolsTouched:o.symbolsTouched,decisions:o.decisions,recentBreadcrumbs:o.recentBreadcrumbs?.map(p=>({time:new Date(p.timestamp).toISOString(),action:p.action,tool:p.tool,symbol:p.symbol,summary:p.summary}))};}if(i){let l=Date.now()-i.lastActivity,d=Math.round(l/6e4),u=Math.round(l/36e5),m=i.breadcrumbs.slice(-10).map(g=>({time:new Date(g.timestamp).toISOString(),action:g.action,tool:g.tool,symbol:g.symbol,summary:g.summary}));a.previousSession={sessionId:i.sessionId,startTime:new Date(i.startTime).toISOString(),lastActivity:new Date(i.lastActivity).toISOString(),age:u>1?`${u} hours ago`:`${d} minutes ago`},a.context={symbolsModified:i.symbolsModified,filesExplored:i.filesExplored},a.recentActions=m;}if(r.length>0){a.pendingHandoffs=r.map(l=>({id:l.id,timestamp:l.timestamp,from:l.from,to:l.to,summary:l.summary,nextSteps:l.nextSteps,modifiedFiles:l.modifiedFiles,symbolsTouched:l.symbolsTouched,openQuestions:l.openQuestions}));for(let l of r)try{c$1(s.rootDir,l.id);}catch{}}let c="Continue where the previous session left off.";if(o)c=`Previous session was in "${o.phase}" phase: ${o.context}`,o.decisions?.length&&(c+=` Key decisions: ${o.decisions.slice(0,2).join("; ")}`);else if(r.length>0){let l=r[r.length-1];c=`Handoff received: "${l.summary}". `,l.nextSteps.length>0&&(c+=`Start with: ${l.nextSteps[0]}`);}else if(i){let l=i.breadcrumbs.slice(-10);if(l.length>0){let d=l[l.length-1];d.symbol&&(c=`Last work involved ${d.symbol}. Consider checking its current state with paradigm_ripple.`);}}return a.suggestion=c,a.agentInstruction="Present a brief summary of the previous session, then ask the user what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking.",n.markRecovered(),{handled:true,text:JSON.stringify(a,null,2)}}if(t==="paradigm_session_checkpoint"){n.setRootDir(s.rootDir);let o=e.phase,r=e.context,i=e.externalId,a=e.plan,c=e.modifiedFiles,l=e.symbolsTouched,d=e.decisions,{checkpoint:u,persisted:p}=n.saveCheckpoint({phase:o,context:r,externalId:i,plan:a,modifiedFiles:c,symbolsTouched:l,decisions:d}),m=p.local||p.global;return {handled:true,text:JSON.stringify({saved:m,persisted:p,checkpoint:{phase:u.phase,context:u.context,sessionId:u.sessionId,...u.externalId?{externalId:u.externalId}:{},timestamp:new Date(u.timestamp).toISOString(),modifiedFiles:u.modifiedFiles?.length||0,symbolsTouched:u.symbolsTouched?.length||0,decisions:u.decisions?.length||0,recentBreadcrumbs:u.recentBreadcrumbs?.length||0},...m?{note:"Checkpoint saved. Recovery data will be auto-surfaced on the first tool call of the next session."}:{warning:"Checkpoint was NOT persisted to disk. Both local and global writes failed. Check MCP server stderr for details."}},null,2)}}return {handled:false,text:""}}function $t(t){let e=j$1();e.setRootDir(t);let s=e.loadCheckpoint(),n=e.loadPreviousSession(),o=[];try{o=b$1(t);}catch{}return {checkpoint:s,pendingHandoffs:o,previousSession:n}}async function Go(t){let{checkpoint:e,pendingHandoffs:s}=$t(t);if(!e&&s.length===0)return null;let n=[];if(n.push("--- SESSION RECOVERY ---"),e){let o=Date.now()-e.timestamp,r=Math.round(o/6e4),i=Math.round(o/36e5),a=i>1?`${i}h ago`:`${r}m ago`;n.push(`Previous session was in "${e.phase}" phase (${a}): ${e.context}`),e.modifiedFiles?.length&&n.push(`Modified files: ${e.modifiedFiles.join(", ")}`),e.symbolsTouched?.length&&n.push(`Symbols: ${e.symbolsTouched.join(", ")}`),e.decisions?.length&&n.push(`Decisions: ${e.decisions.join("; ")}`),e.plan&&n.push(`Plan: ${e.plan.slice(0,200)}`);}if(s.length>0){let o=s[s.length-1];n.push(`Pending handoff: "${o.summary}"`),o.nextSteps.length>0&&n.push(`Next steps: ${o.nextSteps.slice(0,3).join(", ")}`);}try{let{loadTasks:o}=await import('./task-loader-NZFDTUQ5.js'),r=await o(t,{status:"open",limit:5});if(r.length>0){n.push(""),n.push("Open tasks:");for(let i of r){let a=i.tags.length>0?` [${i.tags.join(", ")}]`:"";n.push(` [${i.priority}] ${i.id}: ${i.blurb}${a}`);}}}catch{}try{let{loadLoreEntries:o}=await import('./lore-loader-RVQI5GXL.js'),i=(await o(t,{limit:10})).filter(a=>a.tags?.some(c=>c.startsWith("arc:")));if(i.length>0){let a=new Map;for(let d of i){let u=d.tags?.find(p=>p.startsWith("arc:"))||"";a.set(u,(a.get(u)||0)+1);}let c=e?.symbolsTouched||[];if((c.length>0?i.filter(d=>d.symbols_touched?.some(u=>c.includes(u))):i.slice(0,3)).length>0||a.size>0){n.push(""),n.push("Active lore arcs:");for(let[d,u]of a)n.push(` ${d} (${u} entries)`);}}}catch{}try{let{loadNominations:o}=await import('./nomination-engine-EALA5MGI.js'),r=o(t,{pending_only:!0}).filter(i=>i.urgency==="critical"||i.urgency==="high");if(r.length>0){n.push(""),n.push("Ambient nominations (urgent):");for(let i of r.slice(0,5))n.push(` [${i.urgency}] ${i.brief}`);r.length>5&&n.push(` ... and ${r.length-5} more. Use paradigm_ambient_nominations to see all.`);}}catch{}return n.push(""),n.push("IMPORTANT: Present a brief summary of this recovery data to the user, then ask what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking."),n.push("---"),n.join(`
25
- `)}var Le=class{cache=new Map;ttlMs;constructor(e=3e4){this.ttlMs=e;}async getOrCompute(e,s){let n=this.cache.get(e);if(n&&Date.now()-n.createdAt<this.ttlMs)return n.data;let o=await s();return this.cache.set(e,{data:o,createdAt:Date.now()}),o}invalidate(e){this.cache.delete(e);}invalidatePrefix(e){for(let s of this.cache.keys())s.startsWith(e)&&this.cache.delete(s);}clear(){this.cache.clear();}stats(){return {size:this.cache.size,ttlMs:this.ttlMs}}},Rt=new Le(3e4);var is=300*1e3,ae=null;function kt(){ae=null;}function G(t,e){return x.existsSync(k.join(t,e))}function Y(t,e){return x.existsSync(k.join(t,e))}function as(t,e,s){let n=t;try{if(!x.existsSync(n))return !1;let o=x.readdirSync(n,{withFileTypes:!0});for(let r of o){if(r.isFile()&&r.name.endsWith(e))return !0;if(r.isDirectory())try{if(x.readdirSync(k.join(n,r.name)).some(a=>a.endsWith(e)))return !0}catch{}}}catch{}return false}var cs={wisdom:t=>G(t,".paradigm/wisdom"),history:t=>G(t,".paradigm/history"),lore:t=>G(t,".paradigm/lore"),habits:t=>Y(t,".paradigm/habits.yaml"),sentinel:t=>{try{let e=k.join(t,".paradigm","config.yaml");return x.existsSync(e)?x.readFileSync(e,"utf-8").includes("sentinel"):!1}catch{return false}},flows:t=>Y(t,".paradigm/flow-index.json")||Y(t,".paradigm/flows.yaml"),fixtures:t=>Y(t,".paradigm/fixtures.yaml"),orchestration:t=>Y(t,".paradigm/agents.yaml"),tasks:t=>G(t,".paradigm/tasks"),assessment:t=>G(t,".paradigm/lore"),personas:t=>as(t,".persona"),protocols:t=>G(t,".paradigm/protocols"),symphony:()=>{let t=k.join(ye.homedir(),".paradigm","score");return x.existsSync(t)},university:t=>G(t,".paradigm/university"),agents:t=>{let e=k.join(ye.homedir(),".paradigm","agents");return G(t,".paradigm/agents")||x.existsSync(e)},"aspect-graph":t=>Y(t,".paradigm/aspect-graph.db"),pan:t=>Y(t,".pan")||Y(t,"nevr.yaml"),notebooks:t=>{let e=k.join(ye.homedir(),".paradigm","notebooks");return G(t,".paradigm/notebooks")||x.existsSync(e)}},It=class{modules=new Map;activatedAdvanced=new Set;rootDir;constructor(e){this.rootDir=e;}register(e){this.modules.set(e.key,e);}registerAll(e){for(let s of e)this.register(s);}detectActiveFeatures(){if(ae&&Date.now()-ae.timestamp<is)return ae.features;let e=new Set;for(let[s,n]of this.modules){if(n.tier==="core"){e.add(s);continue}if(n.tier==="advanced"){this.activatedAdvanced.has(s)&&e.add(s);continue}let o=n.detect||cs[s];if(o)try{o(this.rootDir)&&e.add(s);}catch{}else e.add(s);}return ae={features:e,timestamp:Date.now()},e}getActiveTools(){let e=this.detectActiveFeatures(),s=[];for(let[n,o]of this.modules)e.has(n)&&s.push(...o.getToolsList());return s}activateAdvanced(e){let s=this.modules.get(e);return !s||s.tier!=="advanced"?null:(this.activatedAdvanced.add(e),s.getToolsList())}getAvailableAdvanced(){let e=[];for(let[s,n]of this.modules)n.tier==="advanced"&&!this.activatedAdvanced.has(s)&&e.push({key:s,toolCount:n.getToolsList().length});return e}async dispatch(e,s,n,o){let r=this.detectActiveFeatures();for(let[i,a]of this.modules)if(r.has(i))try{let c=await a.handleTool(e,s,n,o);if(c.handled)return c}catch(c){return {handled:true,text:JSON.stringify({error:`Tool handler error in module "${i}"`,message:c.message},null,2)}}return null}get size(){return this.modules.size}getRegistryInfo(){let e=this.detectActiveFeatures(),s={core:0,feature:0,advanced:0};for(let n of this.modules.values())s[n.tier]++;return {total:this.modules.size,byTier:s,activeFeatures:[...e],availableAdvanced:[...this.modules.entries()].filter(([n,o])=>o.tier==="advanced"&&!this.activatedAdvanced.has(n)).map(([n])=>n)}}};var Ne=null;async function ys(){return Ne||(Ne=await hs()),Ne}var ws=[`CREATE TABLE IF NOT EXISTS aspects (
26
- id TEXT PRIMARY KEY,
27
- description TEXT NOT NULL,
28
- category TEXT DEFAULT 'rule',
29
- severity TEXT DEFAULT 'medium',
30
- value TEXT,
31
- enforcement TEXT,
32
- defined_in TEXT NOT NULL,
33
- tags TEXT,
34
- created_at TEXT NOT NULL,
35
- updated_at TEXT NOT NULL
36
- )`,`CREATE TABLE IF NOT EXISTS anchors (
37
- id INTEGER PRIMARY KEY AUTOINCREMENT,
38
- aspect_id TEXT NOT NULL REFERENCES aspects(id) ON DELETE CASCADE,
39
- file_path TEXT NOT NULL,
40
- start_line INTEGER NOT NULL,
41
- end_line INTEGER NOT NULL,
42
- content_hash TEXT,
43
- normalized_hash TEXT,
44
- materialized_at_commit TEXT,
45
- last_verified TEXT,
46
- drifted INTEGER DEFAULT 0
47
- )`,"CREATE INDEX IF NOT EXISTS idx_anchors_file ON anchors(file_path)","CREATE INDEX IF NOT EXISTS idx_anchors_aspect ON anchors(aspect_id)",`CREATE TABLE IF NOT EXISTS edges (
48
- id INTEGER PRIMARY KEY AUTOINCREMENT,
49
- source TEXT NOT NULL,
50
- target TEXT NOT NULL,
51
- relation TEXT NOT NULL,
52
- weight REAL DEFAULT 1.0,
53
- origin TEXT DEFAULT 'explicit',
54
- created_at TEXT NOT NULL
55
- )`,"CREATE INDEX IF NOT EXISTS idx_edges_source ON edges(source)","CREATE INDEX IF NOT EXISTS idx_edges_target ON edges(target)",`CREATE TABLE IF NOT EXISTS lore_links (
56
- aspect_id TEXT NOT NULL,
57
- lore_id TEXT NOT NULL,
58
- PRIMARY KEY (aspect_id, lore_id)
59
- )`,`CREATE TABLE IF NOT EXISTS search_log (
60
- id INTEGER PRIMARY KEY AUTOINCREMENT,
61
- query TEXT NOT NULL,
62
- results_returned TEXT NOT NULL,
63
- selected_result TEXT,
64
- timestamp TEXT NOT NULL
65
- )`,"CREATE INDEX IF NOT EXISTS idx_search_query ON search_log(query)",`CREATE TABLE IF NOT EXISTS search_weights (
66
- query_normalized TEXT NOT NULL,
67
- aspect_id TEXT NOT NULL,
68
- weight REAL DEFAULT 1.0,
69
- hit_count INTEGER DEFAULT 1,
70
- last_hit TEXT NOT NULL,
71
- PRIMARY KEY (query_normalized, aspect_id)
72
- )`,`CREATE TABLE IF NOT EXISTS heatmap (
73
- aspect_id TEXT NOT NULL,
74
- access_type TEXT NOT NULL,
75
- count INTEGER DEFAULT 0,
76
- last_accessed TEXT NOT NULL,
77
- PRIMARY KEY (aspect_id, access_type)
78
- )`],bs=["ALTER TABLE anchors ADD COLUMN original_content TEXT",`CREATE TABLE IF NOT EXISTS anchor_history (
79
- id INTEGER PRIMARY KEY AUTOINCREMENT,
80
- anchor_id INTEGER NOT NULL,
81
- action TEXT NOT NULL,
82
- old_start INTEGER,
83
- old_end INTEGER,
84
- new_start INTEGER,
85
- new_end INTEGER,
86
- old_path TEXT,
87
- new_path TEXT,
88
- confidence REAL,
89
- commit_hash TEXT,
90
- healed_at TEXT NOT NULL
91
- )`],Ss="CREATE VIRTUAL TABLE IF NOT EXISTS aspects_fts USING fts5(id, description, enforcement, tags)";function H(t,e,s){let n=t.prepare(e);s&&s.length>0&&n.bind(s);let o=[];for(;n.step();)o.push(n.getAsObject());return n.free(),o}function xs(t,e,s){let n=t.prepare(e);s&&s.length>0&&n.bind(s);let o=null;return n.step()&&(o=n.getAsObject()),n.free(),o}async function Ut(t){let e=await ys(),s=k.join(t,".paradigm"),n=k.join(s,"aspect-graph.db"),o;if(x.existsSync(n)){let r=x.readFileSync(n);o=new e.Database(r);}else x.existsSync(s)||x.mkdirSync(s,{recursive:true}),o=new e.Database;for(let r of ws)o.run(r);try{o.run(Ss);}catch{}for(let r of bs)try{o.run(r);}catch{}return o}function zt(t,e){if(e){let s=k.join(e,".paradigm");x.existsSync(s)||x.mkdirSync(s,{recursive:true});let n=k.join(s,"aspect-graph.db"),o=t.export();x.writeFileSync(n,Buffer.from(o));}t.close();}function Ht(t,e,s){let n=e.filter(i=>i.type==="aspect"),o=new Date().toISOString(),r=null;try{r=execSync("git rev-parse HEAD",{cwd:s,encoding:"utf8"}).trim();}catch{}t.run("DELETE FROM anchors"),t.run("DELETE FROM edges"),t.run("DELETE FROM aspects");try{t.run("DELETE FROM aspects_fts");}catch{}for(let i of n){let a=i.data??{},c=_s(a,i),l=$s(a,i),d=a.value!=null?String(a.value):null,u=i.enforcement??(a.enforcement!=null?String(a.enforcement):null),p=i.tags?JSON.stringify(i.tags):null;if(t.run(`INSERT INTO aspects (id, description, category, severity, value, enforcement, defined_in, tags, created_at, updated_at)
92
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.symbol,i.description??"",c,l,d,u,i.filePath,p,i.created??o,i.modified??o]),i.anchors)for(let g of i.anchors){let{startLine:h,endLine:v}=Wt(g),T=Ts();t.run(`INSERT INTO anchors (aspect_id, file_path, start_line, end_line, content_hash, normalized_hash, materialized_at_commit, last_verified, original_content)
93
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.symbol,g.path,h,v,T.exact,T.normalized,r,o,T.normalizedContent]);}let m=a.edges;if(Array.isArray(m))for(let g of m)t.run(`INSERT INTO edges (source, target, relation, weight, origin, created_at)
94
- VALUES (?, ?, ?, ?, ?, ?)`,[g.source??i.symbol,g.target??"",g.relation??"related-to",g.weight??1,g.origin??"explicit",o]);if(i.appliesTo)for(let g of i.appliesTo)t.run(`INSERT INTO edges (source, target, relation, weight, origin, created_at)
95
- VALUES (?, ?, ?, ?, ?, ?)`,[i.symbol,g,"related-to",.5,"inferred",o]);try{t.run(`INSERT INTO aspects_fts (id, description, enforcement, tags)
96
- VALUES (?, ?, ?, ?)`,[i.symbol,i.description??"",u??"",p??""]);}catch{}}}function Ko(t,e){return xs(t,"SELECT * FROM aspects WHERE id = ?",[e])}function Qo(t,e){return H(t,"SELECT * FROM anchors WHERE aspect_id = ?",[e])}function Zo(t,e){return H(t,"SELECT * FROM edges WHERE source = ?",[e])}function er(t,e){return H(t,"SELECT * FROM edges WHERE target = ?",[e])}function tr(t,e){return H(t,"SELECT * FROM edges WHERE source = ? OR target = ?",[e,e])}function nr(t,e,s){let n=new Date().toISOString();t.run(`INSERT INTO heatmap (aspect_id, access_type, count, last_accessed)
97
- VALUES (?, ?, 1, ?)
98
- ON CONFLICT(aspect_id, access_type)
99
- DO UPDATE SET count = count + 1, last_accessed = ?`,[e,s,n,n]);}function sr(t,e=20,s){return s?H(t,"SELECT * FROM heatmap WHERE access_type = ? ORDER BY count DESC LIMIT ?",[s,e]):H(t,"SELECT * FROM heatmap ORDER BY count DESC LIMIT ?",[e])}function or(t,e,s,n=true,o=.7,r=.85){let i=s?H(t,"SELECT * FROM anchors WHERE aspect_id = ?",[s]):H(t,"SELECT * FROM anchors"),a=[];for(let c of i){let l=k.isAbsolute(c.file_path)?c.file_path:k.join(e,c.file_path);if(!x.existsSync(l)){a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"missing",resolvedBy:"none",exists:false,drifted:true});continue}try{let u=x.readFileSync(l,"utf8").split(`
100
- `),p=Math.max(0,c.start_line-1),m=Math.min(u.length,c.end_line),g=u.slice(p,m).join(`
101
- `),h=J.createHash("sha256").update(g).digest("hex");if(c.content_hash!=null&&h===c.content_hash){a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"clean",resolvedBy:"exact-hash",exists:!0,drifted:!1}),c.drifted===1&&t.run("UPDATE anchors SET drifted = 0 WHERE id = ?",[c.id]);continue}let v=J.createHash("sha256").update(Me(g)).digest("hex");if(c.normalized_hash!=null&&v===c.normalized_hash){t.run("UPDATE anchors SET content_hash = ?, drifted = 0 WHERE id = ?",[h,c.id]),a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"cosmetic",resolvedBy:"normalized-hash",exists:!0,drifted:!1});continue}if(c.content_hash==null&&c.normalized_hash==null){t.run("UPDATE anchors SET content_hash = ?, normalized_hash = ?, drifted = 0 WHERE id = ?",[h,v,c.id]),a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"clean",resolvedBy:"exact-hash",exists:!0,drifted:!1});continue}let T=!1;if(c.materialized_at_commit){let E=Es(e,c.file_path,c.materialized_at_commit,c.start_line,c.end_line);if(E){let _=Math.max(0,E.currentStart-1),S=Math.min(u.length,E.currentEnd),b=u.slice(_,S).join(`
102
- `),w=J.createHash("sha256").update(b).digest("hex");if(c.content_hash!=null&&w===c.content_hash){let I=n;if(I){t.run("UPDATE anchors SET start_line = ?, end_line = ?, drifted = 0 WHERE id = ?",[E.currentStart,E.currentEnd,c.id]);let N=H(t,"SELECT defined_in FROM aspects WHERE id = ?",[c.aspect_id]);N.length>0&&De(e,N[0].defined_in,c.file_path,c.start_line,c.end_line,E.currentStart,E.currentEnd);}a.push({aspectId:c.aspect_id,path:c.file_path,startLine:I?E.currentStart:c.start_line,endLine:I?E.currentEnd:c.end_line,status:"shifted",resolvedBy:"git-line-mapping",exists:!0,drifted:!1,suggestedStart:E.currentStart,suggestedEnd:E.currentEnd,autoHealed:I}),T=!0;}else {let I=J.createHash("sha256").update(Me(b)).digest("hex");if(c.normalized_hash!=null&&I===c.normalized_hash){if(n){let N=J.createHash("sha256").update(b).digest("hex");t.run("UPDATE anchors SET start_line = ?, end_line = ?, content_hash = ?, drifted = 0 WHERE id = ?",[E.currentStart,E.currentEnd,N,c.id]);let ue=H(t,"SELECT defined_in FROM aspects WHERE id = ?",[c.aspect_id]);ue.length>0&&De(e,ue[0].defined_in,c.file_path,c.start_line,c.end_line,E.currentStart,E.currentEnd);}a.push({aspectId:c.aspect_id,path:c.file_path,startLine:n?E.currentStart:c.start_line,endLine:n?E.currentEnd:c.end_line,status:"shifted",resolvedBy:"git-line-mapping",exists:!0,drifted:!1,suggestedStart:E.currentStart,suggestedEnd:E.currentEnd,autoHealed:n}),T=!0;}}}}if(T)continue;if(c.original_content){let{contentSearch:E}=(Dt(),d(Nt)),_=E(e,c.file_path,c.original_content,n);if(_.found&&_.score>=o){if(n&&_.score>=r&&!_.suggestedPath&&_.suggestedStart&&_.suggestedEnd){t.run("UPDATE anchors SET start_line = ?, end_line = ?, drifted = 0 WHERE id = ?",[_.suggestedStart,_.suggestedEnd,c.id]);try{t.run(`INSERT INTO anchor_history (anchor_id, action, old_start, old_end, new_start, new_end, confidence, healed_at)
103
- VALUES (?, 'relocated', ?, ?, ?, ?, ?, ?)`,[c.id,c.start_line,c.end_line,_.suggestedStart,_.suggestedEnd,_.score,new Date().toISOString()]);}catch{}let b=H(t,"SELECT defined_in FROM aspects WHERE id = ?",[c.aspect_id]);b.length>0&&De(e,b[0].defined_in,c.file_path,c.start_line,c.end_line,_.suggestedStart,_.suggestedEnd),a.push({aspectId:c.aspect_id,path:c.file_path,startLine:_.suggestedStart,endLine:_.suggestedEnd,status:"relocated",resolvedBy:"content-search",exists:!0,similarity:_.similarity,suggestedStart:_.suggestedStart,suggestedEnd:_.suggestedEnd,autoHealed:!0,drifted:!1});continue}a.push({aspectId:c.aspect_id,path:_.suggestedPath||c.file_path,startLine:c.start_line,endLine:c.end_line,status:"relocated",resolvedBy:"content-search",exists:!0,similarity:_.similarity,suggestedStart:_.suggestedStart,suggestedEnd:_.suggestedEnd,autoHealed:!1,drifted:!0});continue}}t.run("UPDATE anchors SET drifted = 1 WHERE id = ?",[c.id]),a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"modified",resolvedBy:"none",exists:!0,currentContent:g,drifted:!0});}catch{a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"modified",resolvedBy:"none",exists:true,drifted:true});}}return a}function Wt(t){let{lines:e}=t;return typeof e=="number"?{startLine:e,endLine:e}:Array.isArray(e)?e.length===2?{startLine:e[0],endLine:e[1]}:{startLine:Math.min(...e),endLine:Math.max(...e)}:{startLine:1,endLine:1}}function vs(t){let e=[],s=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/gm,n;for(;(n=s.exec(t))!==null;)e.push({oldStart:parseInt(n[1],10),oldCount:n[2]!==void 0?parseInt(n[2],10):1,newStart:parseInt(n[3],10),newCount:n[4]!==void 0?parseInt(n[4],10):1});return e}function Es(t,e,s,n,o){let r;try{r=execSync(`git diff ${s}..HEAD --unified=0 -- "${e}"`,{cwd:t,encoding:"utf8",timeout:5e3});}catch{return null}if(!r.trim())return {originalStart:n,originalEnd:o,currentStart:n,currentEnd:o};let i=vs(r),a=0;for(let c of i){if(c.oldStart+c.oldCount<=n){a+=c.newCount-c.oldCount;continue}if(c.oldStart<o)return null;break}return a===0?null:{originalStart:n,originalEnd:o,currentStart:n+a,currentEnd:o+a}}function De(t,e,s,n,o,r,i){let a=k.isAbsolute(e)?e:k.join(t,e);if(!x.existsSync(a))return false;try{let c=x.readFileSync(a,"utf8"),l=n===o?`${s}:${n}`:`${s}:${n}-${o}`,d=r===i?`${s}:${r}`:`${s}:${r}-${i}`;if(!c.includes(l))return !1;let u=c.replace(l,d);return x.writeFileSync(a,u,"utf8"),!0}catch{return false}}function Me(t){return t.split(`
104
- `).map(e=>e.trimEnd()).filter(e=>e.trim()!=="").map(e=>e.replace(/\s+/g," ")).join(`
105
- `)}function Ts(t,e){return {exact:null,normalized:null,normalizedContent:null};}function _s(t,e){if(typeof t.category=="string")return t.category;let s=(e.description??"").toLowerCase();return /\b(must|require|always)\b/.test(s)?"rule":/\b(decided|chose)\b/.test(s)?"decision":/\b(limit|cannot)\b/.test(s)?"constraint":/\b(set to|configured|value)\b/.test(s)?"configuration":"rule"}function $s(t,e){if(typeof t.severity=="string")return t.severity;let s=e.tags??[];return s.includes("critical")?"critical":s.includes("security")||s.includes("compliance")?"high":"medium"}j();var Rs=/L-\d{4}-\d{2}-\d{2}-\d{3}/g;async function Gt(t,e){t.run("DELETE FROM lore_links");let s=await a$2(e);if(s.length===0)return 0;let n=Is(s),o=new Map;for(let l of s)o.set(l.id,l);let r=new Set,i=t.exec("SELECT id, enforcement FROM aspects");if(i.length>0){let{columns:l,values:d}=i[0],u=l.indexOf("id"),p=l.indexOf("enforcement");for(let m of d){let g=String(m[u]),h=m[p];if(h&&typeof h=="string"){let v=h.match(Rs);if(v)for(let T of v)o.has(T)&&r.add(`${g}\0${T}`);}}}let a=t.exec("SELECT source, target FROM edges");if(a.length>0&&i.length>0){let l=ks(t,a);for(let[d,u]of l)for(let p of u){let m=n.get(p);if(m)for(let g of m)r.add(`${d}\0${g}`);}}if(r.size===0)return 0;let c=t.prepare("INSERT OR IGNORE INTO lore_links (aspect_id, lore_id) VALUES (?, ?)");try{for(let l of r){let[d,u]=l.split("\0");c.bind([d,u]),c.step(),c.reset();}}finally{c.free();}return r.size}async function ar(t,e,s){let n=t.exec("SELECT lore_id FROM lore_links WHERE aspect_id = ?",[s]);if(n.length===0||n[0].values.length===0)return [];let o=n[0].values.map(r=>String(r[0]));return Ps(e,o)}async function Bt(t,e){let s=await a$2(e);if(s.length===0)return 0;let n=t.exec("SELECT id FROM aspects"),o=new Set;if(n.length>0)for(let c of n[0].values)o.add(String(c[0]));if(o.size<2)return 0;let r=new Date().toISOString(),i=0,a=t.prepare(`INSERT OR IGNORE INTO edges (source, target, relation, weight, origin, created_at)
106
- VALUES (?, ?, 'related-to', 0.3, 'learned', ?)`);try{for(let c of s){if(!c.symbols_touched||c.symbols_touched.length<2)continue;let l=[];for(let d of c.symbols_touched){let u=d.startsWith("~")?d.slice(1):d;o.has(u)&&l.push(u);}for(let d=0;d<l.length;d++)for(let u=d+1;u<l.length;u++){let[p,m]=l[d]<l[u]?[l[d],l[u]]:[l[u],l[d]];a.bind([p,m,r]),a.step(),a.reset(),i++;}}}finally{a.free();}return i}function Is(t){let e=new Map;for(let s of t)if(s.symbols_touched)for(let n of s.symbols_touched){let o=e.get(n);o||(o=new Set,e.set(n,o)),o.add(s.id);}return e}function ks(t,e){let s=t.exec("SELECT id FROM aspects"),n=new Set;if(s.length>0)for(let l of s[0].values)n.add(String(l[0]));let o=new Map;if(e.length===0)return o;let{columns:r,values:i}=e[0],a=r.indexOf("source"),c=r.indexOf("target");for(let l of i){let d=String(l[a]),u=String(l[c]);if(n.has(d)){let p=o.get(d);p||(p=new Set,o.set(d,p)),p.add(u),p.add(`~${d}`);}if(n.has(u)){let p=o.get(u);p||(p=new Set,o.set(u,p)),p.add(d),p.add(`~${u}`);}}return o}async function Ps(t,e){let s=new Set,n=[];for(let o of e){if(s.has(o))continue;s.add(o);let r=await b$2(t,o);r&&n.push(Cs(r));}return n}function Cs(t){return {id:t.id,title:t.title,summary:t.summary,timestamp:t.timestamp,symbolsTouched:t.symbols_touched}}var oe=".paradigm/personas",As="index.yaml";async function ce(t,e){let s=k.join(t,oe);if(!x.existsSync(s))return [];let n=x.readdirSync(s).filter(r=>r.endsWith(".persona")),o=[];for(let r of n)try{let i=x.readFileSync(k.join(s,r),"utf8"),a=F.load(i);a&&a.id&&o.push(a);}catch{}return js(o,e)}async function le(t,e){let s=k.join(t,oe,`${e}.persona`);if(!x.existsSync(s))return null;try{return F.load(x.readFileSync(s,"utf8"))}catch{return null}}function js(t,e){if(!e)return t;let s=t;return e.tag&&(s=s.filter(n=>n.tags?.includes(e.tag))),e.trigger_type&&(s=s.filter(n=>n.trigger.type===e.trigger_type)),e.gate&&(s=s.filter(n=>n.journey.some(o=>o.gates.includes(e.gate)))),e.flow&&(s=s.filter(n=>n.journey.some(o=>o.flow===e.flow))),e.limit&&(s=s.slice(0,e.limit)),s}async function lr(t,e){let s=k.join(t,oe);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.persona`);if(x.existsSync(n))throw new Error(`Persona ${e.id} already exists`);let o=new Date().toISOString(),r={version:"1.0",id:e.id,name:e.name,description:e.description,traits:e.traits,trigger:e.trigger,fixtures:e.fixtures,tags:e.tags||[],journey:e.journey||[],created:o,updated:o};return x.writeFileSync(n,F.dump(r,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await de(t),e.id}async function Xt(t,e,s){let n=await le(t,e);if(!n)return false;let o=k.join(t,oe,`${e}.persona`),r={...n,...s,id:n.id,version:n.version,created:n.created,updated:new Date().toISOString()};return x.writeFileSync(o,F.dump(r,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await de(t),true}async function dr(t,e){let s=k.join(t,oe,`${e}.persona`);if(!x.existsSync(s))return {deleted:false,warnings:[]};let n=[],o=await ce(t);for(let r of o)if(r.id!==e){r.trigger.spawned_by?.startsWith(e+".")&&n.push(`Persona ${r.id} is spawned by ${e} \u2014 it will become orphaned`);for(let i of r.journey)i.spawns?.some(a=>a.persona===e)&&n.push(`Persona ${r.id} step ${i.id} spawns ${e} \u2014 spawn will break`);}return x.unlinkSync(s),await de(t),{deleted:true,warnings:n}}async function ur(t,e,s,n){let o=await le(t,e);if(!o)return false;if(o.journey.some(r=>r.id===s.id))throw new Error(`Step ${s.id} already exists in persona ${e}`);if(n){let r=o.journey.findIndex(i=>i.id===n);if(r===-1)throw new Error(`Step ${n} not found in persona ${e}`);o.journey.splice(r+1,0,s);}else o.journey.push(s);return Xt(t,e,{journey:o.journey})}async function pr(t,e,s){let n=await le(t,e);if(!n)return {removed:false,warnings:[]};let o=n.journey.findIndex(a=>a.id===s);if(o===-1)return {removed:false,warnings:[]};let r=n.journey[o],i=[];if(r.produces)for(let a of Object.keys(r.produces)){let c=`{{produces.${a}}}`;for(let l=o+1;l<n.journey.length;l++){let d=n.journey[l];JSON.stringify(d).includes(c)&&i.push(`Step ${d.id} consumes {{produces.${a}}} from this step`);}}if(r.spawns&&r.spawns.length>0)for(let a of r.spawns)i.push(`Step spawns persona ${a.persona} \u2014 spawn chain will break`);return n.journey.splice(o,1),await Xt(t,e,{journey:n.journey}),{removed:true,warnings:i}}var Ls=/^[a-z][a-z0-9-]*$/,Os=/^[a-z][a-z0-9-]*$/,Fs=/^(GET|POST|PUT|PATCH|DELETE)\s+\//;async function fr(t,e,s=false){let n=[],o=[];Ls.test(e.id)||n.push({type:"invalid-id",detail:`ID "${e.id}" must match /^[a-z][a-z0-9-]*$/`}),(!e.name||e.name.trim()==="")&&n.push({type:"missing-name",detail:"Name is required"}),(!e.trigger||!e.trigger.type)&&n.push({type:"missing-trigger",detail:"Trigger with type is required"}),e.trigger.type!=="root"&&!e.trigger.spawned_by&&n.push({type:"missing-spawned-by",detail:`Non-root trigger type "${e.trigger.type}" requires spawned_by`}),(!e.journey||e.journey.length===0)&&n.push({type:"empty-journey",detail:"Journey must have at least one step"});let r=new Set,i=new Set;for(let a of e.journey){Os.test(a.id)||n.push({type:"invalid-step-id",step:a.id,detail:"Step ID must match /^[a-z][a-z0-9-]*$/"}),r.has(a.id)&&n.push({type:"duplicate-step-id",step:a.id,detail:`Duplicate step ID "${a.id}"`}),r.add(a.id),Fs.test(a.route)||n.push({type:"invalid-route",step:a.id,route:a.route,detail:'Route must match "METHOD /path" (e.g., "POST /api/auth/signup")'}),(!a.gates||a.gates.length===0)&&n.push({type:"missing-gates",step:a.id,detail:"Step must have at least one gate"}),(!a.expect||a.expect.status===void 0)&&n.push({type:"missing-expect",step:a.id,detail:"Step must have expect with status"});let l=JSON.stringify(a).match(/\{\{produces\.([^}]+)\}\}/g)||[];for(let d of l){let u=d.replace("{{produces.","").replace("}}","");i.has(u)||n.push({type:"unresolved-produces",step:a.id,key:u,detail:`{{produces.${u}}} used but not produced by a prior step`});}if(a.produces)for(let d of Object.keys(a.produces))i.add(d);}if(s){let a=k.join(t,"portal.yaml"),c=[],l=[];if(x.existsSync(a))try{let u=F.load(x.readFileSync(a,"utf8"));u.gates&&typeof u.gates=="object"&&(c=Object.keys(u.gates)),u.routes&&typeof u.routes=="object"&&(l=Object.keys(u.routes));}catch{}for(let u of e.journey)for(let p of u.gates)c.length>0&&!c.includes(p)&&n.push({type:"gate-not-found",step:u.id,gate:p,detail:`Gate ${p} not defined in portal.yaml`});for(let u of e.journey)if(l.length>0){let p=u.route;l.some(g=>Ue(g,p))||o.push({type:"route-not-in-portal",detail:`Route "${p}" (step ${u.id}) not found in portal.yaml`});}for(let u of e.journey)if(u.spawns)for(let p of u.spawns)await le(t,p.persona)||n.push({type:"spawn-target-missing",step:u.id,detail:`Spawn target persona "${p.persona}" does not exist`});let d=await Ns(t,e.id);if(d&&n.push({type:"spawn-cycle",detail:`Circular spawn dependency: ${d.join(" \u2192 ")}`}),l.length>0||c.length>0){let u=await ce(t),p=new Set,m=new Set;for(let T of u)for(let E of T.journey){for(let _ of E.gates)p.add(_);m.add(E.route);}let g=[],h=k.join(t,".paradigm","flow-index.json");if(x.existsSync(h))try{let T=JSON.parse(x.readFileSync(h,"utf8"));g=Object.keys(T.flows||{});}catch{}let v=new Set;for(let T of u)for(let E of T.journey)E.flow&&v.add(E.flow);return {persona:e.id,valid:n.length===0,errors:n,warnings:o,coverage:{routes:{covered:m.size,total:l.length,uncovered:l.filter(T=>!m.has(T))},gates:{covered:p.size,total:c.length,uncovered:c.filter(T=>!p.has(T))},flows:{covered:v.size,total:g.length,uncovered:g.filter(T=>!v.has(T))}}}}}return {persona:e.id,valid:n.length===0,errors:n,warnings:o}}function Ue(t,e){let s=n=>n.replace(/:[a-zA-Z_]+/g,":param").replace(/\{\{[^}]+\}\}/g,":param");return s(t)===s(e)}async function Ns(t,e){let s=new Set,n=[];async function o(r){if(s.has(r)){let a=n.indexOf(r);return a!==-1?[...n.slice(a),r]:null}s.add(r),n.push(r);let i=await le(t,r);if(i){for(let a of i.journey)if(a.spawns)for(let c of a.spawns){let l=await o(c.persona);if(l)return l}}return n.pop(),null}return o(e)}async function de(t){let e=k.join(t,oe);x.mkdirSync(e,{recursive:true});let s=await ce(t),n={},o={},r={};for(let u of s){let p=new Set,m=new Set,g=[],h=new Set;for(let v of u.journey){for(let T of v.gates)p.add(T);if(v.flow&&m.add(v.flow),g.push(v.route),v.spawns)for(let T of v.spawns)h.add(T.persona);}n[u.id]={name:u.name,trigger:u.trigger.type,spawned_by:u.trigger.spawned_by,steps:u.journey.length,gates:[...p],flows:[...m],routes:g,spawns:[...h],tags:u.tags||[]};for(let v of p)o[v]||(o[v]=[]),o[v].push(u.id);for(let v of g)r[v]||(r[v]=[]),r[v].push(u.id);}let i=[],a=k.join(t,"portal.yaml");if(x.existsSync(a))try{let u=F.load(x.readFileSync(a,"utf8"));u.routes&&typeof u.routes=="object"&&(i=Object.keys(u.routes).filter(m=>!Object.keys(r).some(g=>Ue(m,g))));}catch{}let c={},l=k.join(e,"chains");if(x.existsSync(l)){let u=x.readdirSync(l).filter(p=>p.endsWith(".yaml"));for(let p of u)try{let m=x.readFileSync(k.join(l,p),"utf8"),g=F.load(m);if(g&&g.id){let h=g.order.map(E=>E.persona),v=0,T=new Set;for(let E of h){let _=n[E];if(_){v+=_.steps;for(let S of _.gates)T.add(S);}}c[g.id]={description:g.description||"",order:h,total_steps:v,total_gates:T.size};}}catch{}}let d={version:"1.0",generated:new Date().toISOString(),personas:n,chains:c,gate_coverage:o,route_coverage:r,uncovered_routes:i};return x.writeFileSync(k.join(e,As),F.dump(d,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),d}async function gr(t){let e=await ce(t),s=new Set,n=new Set,o=new Set;for(let d of e)for(let u of d.journey){for(let p of u.gates)s.add(p);n.add(u.route),u.flow&&o.add(u.flow);}let r=[],i=[],a=k.join(t,"portal.yaml");if(x.existsSync(a))try{let d=F.load(x.readFileSync(a,"utf8"));d.gates&&typeof d.gates=="object"&&(r=Object.keys(d.gates)),d.routes&&typeof d.routes=="object"&&(i=Object.keys(d.routes));}catch{}let c=[],l=k.join(t,".paradigm","flow-index.json");if(x.existsSync(l))try{let d=JSON.parse(x.readFileSync(l,"utf8"));c=Object.keys(d.flows||{});}catch{}return {routes:{covered:n.size,total:i.length,uncovered:i.filter(d=>!Array.from(n).some(u=>Ue(d,u)))},gates:{covered:s.size,total:r.length,uncovered:r.filter(d=>!s.has(d))},flows:{covered:o.size,total:c.length,uncovered:c.filter(d=>!o.has(d))},personas:e.length}}async function mr(t,e){let s=await ce(t),n=[];for(let o of s){let r=[],i=[];for(let a of o.journey)if((a.gates.includes(e)||a.flow===e||a.route===e||a.signals?.includes(e))&&(r.push(a.id),a.spawns))for(let l of a.spawns)i.push(l.persona);r.length>0&&n.push({persona:o.id,steps:r,spawns_blocked:i});}return n}function Ds(t,e){let s=e.split(/[.\[\]]+/).filter(Boolean),n=t;for(let o of s){if(n==null||typeof n!="object")return;n=n[o];}return n}function Ms(t,e){let s=[];if(e.status!==t.expect.status&&s.push({type:"status",field:"status",expected:t.expect.status,actual:e.status,message:`Step ${t.id}: status is ${e.status}, expected ${t.expect.status}`}),t.expect.body?.has){let n=e.body;for(let o of t.expect.body.has)(!n||typeof n!="object"||!(o in n))&&s.push({type:"body.has",field:o,expected:true,actual:false,message:`Step ${t.id}: body missing key '${o}'`});}if(t.expect.body?.match){let n=e.body;for(let[o,r]of Object.entries(t.expect.body.match)){let i=n?Ds(n,o):void 0;JSON.stringify(i)!==JSON.stringify(r)&&s.push({type:"body.match",field:o,expected:r,actual:i??null,message:`Step ${t.id}: '${o}' is ${JSON.stringify(i??null)}, expected ${JSON.stringify(r)}`});}}if(t.signals&&t.signals.length>0){let n=e.signals_fired||[];for(let o of t.signals)n.includes(o)||s.push({type:"signal",field:"signals_fired",expected:o,actual:n,message:`Step ${t.id}: signal '${o}' was not fired`});}if(t.gates.length>0&&e.gates_traversed)for(let n of t.gates)e.gates_traversed.includes(n)||s.push({type:"gate",field:"gates_traversed",expected:n,actual:e.gates_traversed,message:`Step ${t.id}: gate '${n}' was not traversed`});return s}async function hr(t,e={}){let s=[];try{let{SentinelStorage:a}=await import('./dist-W3XCATBJ.js'),c=new a,d=(c.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.complete",scopeValue:t.id,limit:500})||[]).filter(g=>{let h=JSON.parse(g.data_json||"{}");return !(e.run_id&&h.run_id!==e.run_id||e.chain_id&&h.chain_id!==e.chain_id||e.environment&&h.environment!==e.environment)}),p=(c.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.fail",scopeValue:t.id,limit:500})||[]).filter(g=>{let h=JSON.parse(g.data_json||"{}");return !(e.run_id&&h.run_id!==e.run_id||e.chain_id&&h.chain_id!==e.chain_id||e.environment&&h.environment!==e.environment)}),m=new Map;for(let g of [...d,...p]){let h=JSON.parse(g.data_json||"{}");h.step_id&&m.set(h.step_id,h);}for(let g of t.journey){let h=m.get(g.id);if(!h){s.push({step_id:g.id,matched:!1,assertions:[],message:`No Sentinel event found for step '${g.id}' \u2014 step was never exercised`});continue}let v=Ms(g,{status:h.status,body:h.body,gates_traversed:h.gates_traversed,signals_fired:h.signals_fired});s.push({step_id:g.id,matched:!0,passed:v.length===0,assertions:v});}}catch{for(let a of t.journey)s.push({step_id:a.id,matched:false,assertions:[],message:"Sentinel unavailable \u2014 cannot validate events"});}let n=s.filter(a=>a.matched).length,o=s.filter(a=>a.passed).length,r=s.filter(a=>a.matched&&!a.passed).length,i=s.reduce((a,c)=>a+c.assertions.length,0);return {run_id:e.run_id,environment:e.environment,steps:s,summary:{total_steps:t.journey.length,matched:n,unmatched:t.journey.length-n,passed:o,failed:r,assertion_failures:i}}}var te=".paradigm/protocols",qt="index.yaml";async function ze(t){let e=k.join(t,te);if(!x.existsSync(e))return [];let s=x.readdirSync(e).filter(o=>o.endsWith(".protocol")).sort(),n=[];for(let o of s)try{let r=x.readFileSync(k.join(e,o),"utf8"),i=F.load(r);i?.id&&i?.name&&n.push(i);}catch{}return n}async function Us(t,e){let s=e.replace(/^P-/,""),n=k.join(t,te,`${s}.protocol`);if(x.existsSync(n))try{let r=x.readFileSync(n,"utf8");return F.load(r)}catch{return null}return (await ze(t)).find(r=>r.id===e)||null}async function wr(t){let e=k.join(t,te,qt);if(!x.existsSync(e))return null;try{let s=x.readFileSync(e,"utf8");return F.load(s)}catch{return null}}async function br(t,e,s=3){let n=await ze(t);if(n.length===0)return [];let o=Hs(e);if(o.length===0)return [];let r=[];for(let i of n){let a=0;for(let d of i.trigger){let u=d.toLowerCase();for(let p of o)u.includes(p)&&(a+=3);}for(let d of i.tags){let u=d.toLowerCase();for(let p of o)(u.includes(p)||p.includes(u))&&(a+=2);}let c=i.name.toLowerCase(),l=i.description.toLowerCase();for(let d of o)c.includes(d)&&(a+=1),l.includes(d)&&(a+=1);for(let d of i.steps)if(d.notes){let u=d.notes.toLowerCase();for(let p of o)u.includes(p)&&(a+=.5);}a>0&&r.push({protocol:i,score:a});}return r.sort((i,a)=>a.score-i.score),r.slice(0,s)}async function Sr(t,e){let s=k.join(t,te);x.existsSync(s)||x.mkdirSync(s,{recursive:true});let n=Gs(e.name),o=`P-${n}`,r=new Date().toISOString(),i={id:o,name:e.name,description:e.description,trigger:e.trigger,tags:e.tags,symbols:e.symbols||[],exemplar:e.exemplar,steps:e.steps,recorded_from:e.recorded_from,recorded_at:r,last_verified:r,verified_by:e.verified_by||"claude-opus-4-6",status:"current"},a=k.join(s,`${n}.protocol`);return x.writeFileSync(a,F.dump(i,{lineWidth:-1,noRefs:true}),"utf8"),o}async function xr(t,e,s,n=false){let o=await Us(t,e);if(!o)return false;s.name!==void 0&&(o.name=s.name),s.description!==void 0&&(o.description=s.description),s.trigger!==void 0&&(o.trigger=s.trigger),s.tags!==void 0&&(o.tags=s.tags),s.symbols!==void 0&&(o.symbols=s.symbols),s.exemplar!==void 0&&(o.exemplar=s.exemplar),s.steps!==void 0&&(o.steps=s.steps),s.status!==void 0&&(o.status=s.status),s.verified_by!==void 0&&(o.verified_by=s.verified_by),n&&(o.last_verified=new Date().toISOString(),o.verified_by=s.verified_by||"claude-opus-4-6");let r=e.replace(/^P-/,""),i=k.join(t,te,`${r}.protocol`);return x.writeFileSync(i,F.dump(o,{lineWidth:-1,noRefs:true}),"utf8"),true}function zs(t,e){let s=[],n="current";if(e.exemplar){let o=k.join(t,e.exemplar);x.existsSync(o)?x.statSync(o).mtime.toISOString()>e.last_verified&&(s.push(`Exemplar modified since last verified: ${e.exemplar}`),n!=="broken"&&(n="stale")):(s.push(`Exemplar missing: ${e.exemplar}`),n="broken");}for(let o of e.steps){if(o.template_from){let r=k.join(t,o.template_from);x.existsSync(r)||(s.push(`Template file missing: ${o.template_from}`),n="broken");}if(o.action==="modify"&&o.target){let r=k.join(t,o.target);!o.target.includes("{")&&!x.existsSync(r)&&(s.push(`Modify target missing: ${o.target}`),n="broken");}}return {status:n,issues:s}}async function Vt(t){let e=await ze(t),s=[],n=0,o=0,r=0;for(let c of e){let l=zs(t,c);if(c.status!==l.status){c.status=l.status;let d=c.id.replace(/^P-/,""),u=k.join(t,te,`${d}.protocol`);x.existsSync(u)&&x.writeFileSync(u,F.dump(c,{lineWidth:-1,noRefs:true}),"utf8");}switch(l.status){case "current":n++;break;case "stale":o++;break;case "broken":r++;break}s.push({id:c.id,name:c.name,status:l.status,last_verified:c.last_verified,trigger:c.trigger,tags:c.tags});}let i={version:"1.0",generated:new Date().toISOString(),protocols:s,health:{total:e.length,current:n,stale:o,broken:r}},a=k.join(t,te);if(e.length>0){x.existsSync(a)||x.mkdirSync(a,{recursive:true});let c=k.join(a,qt);x.writeFileSync(c,F.dump(i,{lineWidth:-1,noRefs:true}),"utf8");}return i}function vr(t,e,s){if(!e||e.length<2)return null;let n={};for(let o of e){let r=k.dirname(o);n[r]||(n[r]=[]),n[r].push(o);}for(let[o,r]of Object.entries(n)){if(r.length<2)continue;let i=k.join(t,o);if(!x.existsSync(i))continue;let c=x.readdirSync(i).filter(l=>{let d=k.extname(l);return [".ts",".tsx",".js",".jsx",".rs",".py"].includes(d)}).filter(l=>!r.some(d=>k.basename(d)===l));if(c.length>0){let l=k.join(o,c[0]),d=[...r.map(u=>({action:"create",target:u})),...s.map(u=>({action:"modify",target:u}))];return {hint:`This session created ${r.length} new files in ${o}/ following existing patterns. Consider recording a protocol.`,draft:{name:`Add a ${k.basename(o).replace(/s$/,"")}`,exemplar:l,steps:d}}}}return null}function Hs(t){return t.toLowerCase().replace(/[^a-z0-9\s-]/g," ").split(/\s+/).filter(e=>e.length>1).filter(e=>!Ws.has(e))}var Ws=new Set(["a","an","the","is","are","was","were","be","been","to","of","in","for","on","with","at","by","from","it","this","that","and","or","but","if","then","so","as","do","does","did","will","would","can","could","should","may","might","must","shall","i","me","my","we","our","you","your","he","she","how","what","when","where","which","who","whom"]);function Gs(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}var Q=".paradigm/university",K="content",We="notes",Se="policies",xe="quizzes",ve="paths",Yt="diplomas",Jt="index.yaml",Bs="config.yaml",Kt={name:"Project University",tagline:"Learn the codebase",institution:"Paradigm"},Qt={primary:"#6366f1",secondary:"#8b5cf6",accent:"#f59e0b",background:"#0f172a",surface:"#1e293b",text:"#f8fafc",textMuted:"#94a3b8",success:"#22c55e",error:"#ef4444",font:"Inter, system-ui, sans-serif"},He={branding:Kt,theme:Qt,content:{categories:[],defaultDifficulty:"beginner",requireApproval:false},diplomas:{includeGlobalPLSAT:true,customCertStyle:null}};function Ge(t){let e=k.join(t,Q,Bs);if(!x.existsSync(e))return {...He};try{let s=x.readFileSync(e,"utf8"),n=F.load(s);return n?{branding:{...Kt,...n.branding||{}},theme:{...Qt,...n.theme||{}},content:{categories:n.content?.categories||[],defaultDifficulty:n.content?.defaultDifficulty||"beginner",requireApproval:n.content?.requireApproval??!1,defaultCategory:n.content?.defaultCategory},diplomas:{includeGlobalPLSAT:n.diplomas?.includeGlobalPLSAT??!0,customCertStyle:n.diplomas?.customCertStyle??null}}:{...He}}catch{return {...He}}}function Ee(t){let e=k.join(t,Q,Jt);if(!x.existsSync(e))return null;try{let s=x.readFileSync(e,"utf8");return F.load(s)}catch{return null}}function Zt(t){let e=t.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!e)return null;try{return {frontmatter:F.load(e[1]),body:e[2].trim()}}catch{return null}}function Xs(t,e){return `---
107
- ${F.dump(t,{lineWidth:-1,noRefs:true,sortKeys:false})}---
108
-
109
- ${e}
110
- `}function Tr(t,e){let s=Xe(t,e,".md");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=Zt(n);if(!o)return null;let r=o.frontmatter;return {frontmatter:Js(r),body:o.body}}catch{return null}}function _r(t,e,s){let n=e.type==="policy"?Se:We,o=k.join(t,Q,K,n);x.mkdirSync(o,{recursive:true});let r=k.join(o,`${e.id}.md`),i=Xs(e,s);return x.writeFileSync(r,i,"utf8"),r}function qs(t,e){let s=Xe(t,e,".yaml");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=F.load(n);return !o||!o.id?null:Ks(o)}catch{return null}}function $r(t,e){let s=k.join(t,Q,K,xe);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.yaml`);return x.writeFileSync(n,F.dump(e,{lineWidth:-1,noRefs:true}),"utf8"),n}function en(t,e){let s=Xe(t,e,".yaml");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=F.load(n);return !o||!o.id?null:o}catch{return null}}function Rr(t,e){let s=k.join(t,Q,K,ve);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.yaml`);return x.writeFileSync(n,F.dump(e,{lineWidth:-1,noRefs:true}),"utf8"),n}function tn(t,e){let s=k.join(t,Q,Yt);if(!x.existsSync(s))return [];let n=[];try{let o=x.readdirSync(s).filter(r=>r.endsWith(".yaml"));for(let r of o)try{let i=x.readFileSync(k.join(s,r),"utf8"),a=F.load(i);if(!a||!a.id||e?.student&&a.student!==e.student||e?.type&&a.type!==e.type)continue;n.push(a);}catch{}}catch{}return n.sort((o,r)=>r.earnedAt.localeCompare(o.earnedAt))}function Ir(t,e){let s=Ee(t);if(!s)return [];let n=[...s.entries];if(e.type&&(n=n.filter(r=>r.type===e.type)),e.tag&&(n=n.filter(r=>r.tags.some(i=>i.startsWith(e.tag)))),e.difficulty&&(n=n.filter(r=>r.difficulty===e.difficulty)),e.symbol&&(n=n.filter(r=>r.symbols.some(i=>i===e.symbol))),e.author&&(n=n.filter(r=>r.author===e.author)),e.query){let r=e.query.toLowerCase();n=n.filter(i=>i.title.toLowerCase().includes(r)||i.id.toLowerCase().includes(r)||i.tags.some(a=>a.toLowerCase().includes(r)));}if(e.category&&(n=n.filter(r=>r.category===e.category)),e.track){let r=Ge(t),i=new Map;for(let a of r.content.categories)i.set(a.id,a.track||"core");n=n.filter(a=>(a.category&&i.get(a.category)||"core")===e.track);}let o=e.limit||20;return n.slice(0,o)}function Be(t){let e=k.join(t,Q),s=k.join(e,K),n=[];for(let d of [We,Se]){let u=k.join(s,d);if(x.existsSync(u))try{for(let p of x.readdirSync(u).filter(m=>m.endsWith(".md")))try{let m=x.readFileSync(k.join(u,p),"utf8"),g=Zt(m);if(!g)continue;let h=g.frontmatter;n.push({id:h.id||p.replace(".md",""),title:h.title||p,type:h.type||(d===Se?"policy":"note"),author:h.author||"unknown",created:h.created||"",updated:h.updated||"",tags:Array.isArray(h.tags)?h.tags:[],symbols:Array.isArray(h.symbols)?h.symbols:[],difficulty:h.difficulty||"beginner",file:`${K}/${d}/${p}`,...h.category?{category:h.category}:{}});}catch{}}catch{}}let o=k.join(s,xe);if(x.existsSync(o))try{for(let d of x.readdirSync(o).filter(u=>u.endsWith(".yaml")))try{let u=x.readFileSync(k.join(o,d),"utf8"),p=F.load(u);if(!p||!p.id)continue;n.push({id:p.id,title:p.title||d,type:"quiz",author:p.author||"unknown",created:p.created||"",updated:p.updated||"",tags:p.tags||[],symbols:p.symbols||[],difficulty:p.difficulty||"beginner",file:`${K}/${xe}/${d}`,...p.category?{category:p.category}:{}});}catch{}}catch{}let r=k.join(s,ve);if(x.existsSync(r))try{for(let d of x.readdirSync(r).filter(u=>u.endsWith(".yaml")))try{let u=x.readFileSync(k.join(r,d),"utf8"),p=F.load(u);if(!p||!p.id)continue;n.push({id:p.id,title:p.title||d,type:"path",author:p.author||"unknown",created:p.created||"",updated:p.updated||"",tags:p.tags||[],symbols:[],file:`${K}/${ve}/${d}`,...p.category?{category:p.category}:{}});}catch{}}catch{}let i=0,a=k.join(e,Yt);if(x.existsSync(a))try{i=x.readdirSync(a).filter(d=>d.endsWith(".yaml")).length;}catch{}let c={version:"1.0",generatedAt:new Date().toISOString(),totalContent:n.length,entries:n,diplomaCount:i};x.mkdirSync(e,{recursive:true});let l=k.join(e,Jt);return x.writeFileSync(l,F.dump(c,{lineWidth:-1,noRefs:true}),"utf8"),c}function kr(t,e){let s=Ee(t)||Be(t),n=[],o=s.entries;e?.id&&(o=o.filter(l=>l.id===e.id));let r=null;e?.deep&&(r=nn(t));let i=new Set(s.entries.map(l=>l.id));for(let l of o){if(l.title||n.push({contentId:l.id,severity:"error",check:"missing-title",message:"Content is missing a title",fix:"Add a title field to the content frontmatter"}),l.type==="quiz"&&Vs(t,l.id,n),l.type==="path"&&Ys(t,l.id,i,n),r&&l.symbols.length>0){Ge(t).content.categories.find(m=>m.id===l.category)?.validationStrictness==="relaxed";for(let m of l.symbols)r.has(m)||n.push({contentId:l.id,severity:"warning",check:"broken-symbol-ref",message:`Symbol "${m}" not found in scan-index`,fix:`Remove or update the symbol reference in ${l.id}`});}e?.deep&&l.symbols.length>0&&l.updated&&Zs(t,l,n);}let a=tn(t);for(let l of a)if(l.total>0&&l.percentage!==Math.round(l.score/l.total*1e4)/100){let d=Math.round(l.score/l.total*1e4)/100;Math.abs(l.percentage-d)>.1&&n.push({contentId:l.id,severity:"warning",check:"diploma-score-mismatch",message:`Diploma percentage ${l.percentage} doesn't match score ${l.score}/${l.total} (expected ${d})`});}let c=Qs(t,s);return {status:n.some(l=>l.severity==="error")?"errors":n.length>0?"warnings":"healthy",totalContent:s.totalContent,checked:o.length,issues:n,symbolCoverage:c}}function Vs(t,e,s){let n=qs(t,e);if(!n){s.push({contentId:e,severity:"error",check:"unreadable-quiz",message:"Quiz file could not be parsed"});return}(!n.passThreshold||n.passThreshold<0||n.passThreshold>1)&&s.push({contentId:e,severity:"warning",check:"invalid-pass-threshold",message:`passThreshold should be between 0 and 1, got ${n.passThreshold}`,fix:"Set passThreshold to a value between 0.0 and 1.0"});for(let o of n.questions){if(!o.choices||typeof o.choices!="object"){s.push({contentId:e,severity:"error",check:"invalid-quiz-choices",message:`Question ${o.id} has no choices defined`});continue}(!o.correct||!(o.correct in o.choices))&&s.push({contentId:e,severity:"error",check:"invalid-quiz-answer",message:`Question ${o.id}: correct answer "${o.correct}" not found in choices [${Object.keys(o.choices).join(", ")}]`,fix:`Set correct to one of: ${Object.keys(o.choices).join(", ")}`});}}function Ys(t,e,s,n){let o=en(t,e);if(!o){n.push({contentId:e,severity:"error",check:"unreadable-path",message:"Learning path file could not be parsed"});return}for(let r of o.steps)r.content.startsWith("plsat:")||s.has(r.content)||n.push({contentId:e,severity:"error",check:"broken-path-step",message:`Learning path step references "${r.content}" which doesn't exist`,fix:`Create content with id "${r.content}" or remove this step`});}function Pr(t,e){let s=Ee(t);if(!s)return [];let n=[];for(let o of s.entries)if(o.symbols.includes(e)){let r=sn(t,o,e);n.push({id:o.id,title:o.title,type:o.type,stale:r});}return n}function Cr(t,e){let s=Ee(t);if(!s)return {paths:[],suggestedContent:[],extracurricular:[],diplomaCount:0,totalContent:0};let n=Ge(t),o=new Set;for(let p of n.content.categories)p.excludeFromOnboarding&&o.add(p.id);let r=s.entries.filter(p=>!p.category||!o.has(p.category)),i=s.entries.filter(p=>p.category&&o.has(p.category)),a=r.filter(p=>p.type==="path"),c=e?tn(t,{student:e}):[],l=new Set(c.map(p=>p.source)),d=a.map(p=>{let m=en(t,p.id);return {id:p.id,title:p.title,steps:m?.steps.length||0,completed:l.has(p.id)}}),u=r.filter(p=>p.type!=="path"&&(p.difficulty==="beginner"||p.tags.includes("onboarding"))).slice(0,10);return {paths:d,suggestedContent:u,extracurricular:i,diplomaCount:c.length,totalContent:s.totalContent}}function Xe(t,e,s){let n=k.join(t,Q,K);for(let o of [We,Se,xe,ve]){let r=k.join(n,o,`${e}${s}`);if(x.existsSync(r))return r}return null}function Js(t){return {id:t.id||"",title:t.title||"",type:t.type||"note",author:t.author||"unknown",created:t.created||"",updated:t.updated||"",tags:Array.isArray(t.tags)?t.tags:[],symbols:Array.isArray(t.symbols)?t.symbols:[],difficulty:t.difficulty||"beginner",estimatedMinutes:t.estimatedMinutes,prerequisites:Array.isArray(t.prerequisites)?t.prerequisites:[],...t.category?{category:t.category}:{}}}function Ks(t){return {...t,tags:t.tags||[],symbols:t.symbols||[],difficulty:t.difficulty||"beginner",passThreshold:t.passThreshold??.7,questions:t.questions||[]}}function nn(t){let e=new Set,s=k.join(t,".paradigm","scan-index.json");if(!x.existsSync(s))return e;try{let n=x.readFileSync(s,"utf8"),o=JSON.parse(n);if(o.symbols&&Array.isArray(o.symbols))for(let r of o.symbols)r.symbol&&e.add(r.symbol);}catch{}return e}function Qs(t,e){let s=nn(t),n=new Set;for(let r of e.entries)for(let i of r.symbols)s.has(i)&&n.add(i);let o=s.size;return {totalSymbols:o,coveredByContent:n.size,percentage:o>0?Math.round(n.size/o*100):0}}function sn(t,e,s){if(!e.updated)return false;let n=new Date(e.updated).getTime();if(isNaN(n))return false;let o=k.join(t,".paradigm","scan-index.json");if(!x.existsSync(o))return false;try{let r=x.readFileSync(o,"utf8"),i=JSON.parse(r);if(i.symbols&&Array.isArray(i.symbols)){for(let a of i.symbols)if(a.symbol===s&&a.filePath){let c=k.join(t,a.filePath);if(x.existsSync(c)&&x.statSync(c).mtime.getTime()>n)return !0}}}catch{}return false}function Zs(t,e,s){for(let n of e.symbols)if(sn(t,e,n)){s.push({contentId:e.id,severity:"warning",check:"stale-content",message:`Content may be stale: symbol "${n}" was updated after content was last modified`,fix:`Review and update ${e.id} to reflect changes to ${n}`});break}}var eo={"@":{category:"features",prefix:"@"},"#":{category:"components",prefix:"#"},"^":{category:"gates",prefix:"^"},$:{category:"flows",prefix:"$"},"&":{category:"integrations",prefix:"&"},"!":{category:"signals",prefix:"!"},"%":{category:"state",prefix:"%"}},to={features:["src/features/","features/","app/","src/app/","src/modules/","modules/"],components:["src/components/","components/","src/lib/","lib/","src/ui/","ui/"],gates:["middleware/","src/middleware/","auth/","src/auth/","guards/","src/guards/"],flows:["flows/","src/flows/","workflows/","src/workflows/","sagas/","src/sagas/"],integrations:["integrations/","src/integrations/","external/","src/external/","vendors/"],signals:["events/","src/events/","handlers/","src/handlers/"],state:["stores/","src/stores/","state/","src/state/","reducers/","src/reducers/"]},no={config:[".paradigm/config.yaml","package.json","tsconfig.json",".env.example"],entry:["src/index.ts","src/index.tsx","src/main.ts","src/main.tsx","index.ts","main.ts","src/app.ts","src/app.tsx"],types:["src/types/","types/","src/types.ts","types.ts"]},qe={always:["node_modules/","dist/","build/",".git/",".next/",".nuxt/",".cache/","*.lock","*.log"],unless_testing:["**/*.test.ts","**/*.test.tsx","**/*.spec.ts","**/*.spec.tsx","__tests__/","test/","tests/"],unless_docs:["docs/","*.md","README*","CHANGELOG*"]};function Br(){return [{name:"paradigm_reindex",description:"Rebuild scan-index.json, navigator.yaml, and flow-index.json from .purpose files. Call after modifying paradigm files or at the end of a work session to ensure static index files are fresh. Returns counts of indexed symbols, files processed, and any errors. ~150 tokens.",inputSchema:{type:"object",properties:{}},annotations:{readOnlyHint:false,destructiveHint:true},aliases:["rebuild","refresh","rescan","regenerate index","update index"]}]}async function Xr(t,e,s,n){if(t!=="paradigm_reindex")return {handled:false,text:""};try{let o=await so(s.rootDir,s);await n(),Rt.clear(),kt();let r=(o.integrityReport?.brokenReferences?.length||0)+(o.integrityReport?.duplicateSymbols?.length||0)+(o.componentAnchorIssues||0)+(o.crossFileIssues||0),i={success:!0,symbolCount:o.symbolCount,breakdown:o.breakdown,flowCount:o.flowCount,filesWritten:o.filesWritten.length,...o.aspectGraphStats?{aspects:o.aspectGraphStats.aspects,loreLinks:o.aspectGraphStats.loreLinks}:{},...o.protocolHealth?{protocols:o.protocolHealth.total,staleProtocols:o.protocolHealth.stale}:{},...r>0?{issues:r}:{}},a=JSON.stringify(i,null,2);return je(a.length,t),{handled:!0,text:a}}catch(o){let r=JSON.stringify({error:o.message},null,2);return je(r.length,t),{handled:true,text:r}}}async function so(t,e){let s=[],n;e?n=e.aggregation:n=await Tt(t);let o=e?.projectName||k.basename(t),r=k.join(t,".paradigm");x.existsSync(r)||x.mkdirSync(r,{recursive:true});let i=Ce({symbols:n.symbols,purposeFiles:n.purposeFiles,portalFiles:n.portalFiles},{projectName:o}),a=k.join(r,"scan-index.json");x.writeFileSync(a,Ae(i),"utf8"),s.push(".paradigm/scan-index.json");let c=oo(t,n),l=k.join(r,"navigator.yaml");x.writeFileSync(l,F.dump(c,{indent:2,lineWidth:120,noRefs:true,sortKeys:false}),"utf8"),s.push(".paradigm/navigator.yaml");let d=uo(t,n.purposeFiles),u=0;if(d&&Object.keys(d.flows).length>0){let w=k.join(r,"flow-index.json");x.writeFileSync(w,JSON.stringify(d,null,2),"utf8"),s.push(".paradigm/flow-index.json"),u=Object.keys(d.flows).length;}let p;try{let w=await Ut(t);Ht(w,n.symbols,t);let I=await Gt(w,t),N=await Bt(w,t),ue=w.exec("SELECT COUNT(*) FROM aspects")[0]?.values[0]?.[0]??0,an=w.exec("SELECT COUNT(*) FROM anchors")[0]?.values[0]?.[0]??0,cn=w.exec("SELECT COUNT(*) FROM edges")[0]?.values[0]?.[0]??0;zt(w,t),s.push(".paradigm/aspect-graph.db"),p={aspects:ue,anchors:an,edges:cn,loreLinks:I};}catch{}let m=0;try{let w=await de(t);m=Object.keys(w.personas).length,m>0&&s.push(".paradigm/personas/index.yaml");}catch{}let g;try{let w=await Vt(t);w.health.total>0&&(g=w.health,s.push(".paradigm/protocols/index.yaml"));}catch{}let h;try{let w=k.join(t,".paradigm","university");if(x.existsSync(w)){let I=Be(t);(I.totalContent>0||I.diplomaCount>0)&&(h={totalContent:I.totalContent,diplomaCount:I.diplomaCount},s.push(".paradigm/university/index.yaml"));}}catch{}let v;try{v=a$1(n,t);}catch{}let T;try{let w=b$3(n.symbols,t),I=w.missing+w.outOfBounds;I>0&&(T=I);}catch{}let E;try{E=c$2(n.purposeFiles,t);}catch{}let _;try{let w=[];for(let I of n.purposeFiles){let N=Ie(I);N.data&&w.push({filePath:I,data:N.data});}if(w.length>0){let N=ht(w).issues.length;N>0&&(_=N);}}catch{}let S={};for(let w of n.symbols)S[w.type]=(S[w.type]||0)+1;let b={};for(let w of n.symbols)w.type==="component"&&w.componentType&&(b[w.componentType]=(b[w.componentType]||0)+1);return {action:"reindex",filesWritten:s,symbolCount:n.symbols.length,breakdown:S,flowCount:u,aspectGraphStats:p,personaCount:m,protocolHealth:g,...Object.keys(b).length>0?{componentTypeBreakdown:b}:{},...h?{universityStats:h}:{},...v?{integrityReport:v}:{},...T!==void 0?{componentAnchorIssues:T}:{},...E?{purposeHealth:E}:{},..._!==void 0?{crossFileIssues:_}:{}}}function oo(t,e){let s={};for(let n of e.symbols)if(n.type==="component"&&n.componentType){let o=n.componentType;s[o]||(s[o]=[]),s[o].push(n.symbol);}return {version:"1.0",generated:new Date().toISOString(),structure:ro(t),key_files:io(t),skip_patterns:ao(t),symbols:lo(e.symbols,e.purposeFiles),...Object.keys(s).length>0?{symbolsByComponentType:s}:{}}}function ro(t){let e={};for(let[s,n]of Object.entries(to)){let o=n.filter(r=>x.existsSync(k.join(t,r)));if(o.length>0){let r=Object.values(eo).find(i=>i.category===s);e[s]={paths:o,symbol:r?.prefix||"@"};}}return e}function io(t){let e={};for(let[s,n]of Object.entries(no)){let o=n.filter(r=>x.existsSync(k.join(t,r)));o.length>0&&(e[s]=o);}return e.config||(e.config=[]),e.entry||(e.entry=[]),e.types||(e.types=[]),e}function ao(t){let e={always:[...qe.always],unless_testing:[...qe.unless_testing],unless_docs:[...qe.unless_docs]},s=k.join(t,".gitignore");if(x.existsSync(s))try{let o=x.readFileSync(s,"utf8").split(`
111
- `).map(r=>r.trim()).filter(r=>r&&!r.startsWith("#")).filter(r=>r.endsWith("/")||r.includes("*")||["node_modules","dist","build",".cache"].some(i=>r.includes(i))).slice(0,20);for(let r of o)e.always.includes(r)||e.always.push(r);}catch{}return e}function co(t){switch(t){case "feature":return "@";case "component":return "#";case "gate":return "^";case "flow":return "$";case "integration":return "&";case "signal":return "!";case "state":return "%";case "idea":return "?";case "deprecated":return "~";case "aspect":return "~";default:return "@"}}function lo(t,e,s){let n={};for(let o of t){let i=`${co(o.type)}${o.id}`;if(o.filePath)n[i]=o.filePath;else {let a=e.find(c=>k.dirname(c).toLowerCase().includes(o.id.toLowerCase()));a&&(n[i]=k.dirname(a)+"/");}}return n}function uo(t,e){let s={},n={};for(let o of e)try{let r=x.readFileSync(o,"utf8"),i=F.load(r);if(!i?.flows)continue;if(Array.isArray(i.flows))for(let a of i.flows){let c=a;if(!c.name)continue;let l=`$${c.name}`,d=on(c.steps);d.length>0&&(s[l]={id:l,description:c.description||"",steps:d,definedIn:k.relative(t,o)},rn(l,d,n));}else for(let[a,c]of Object.entries(i.flows)){let l=a.startsWith("$")?a:`$${a}`,d=on(c.steps);d.length>0&&(s[l]={id:l,description:c.description||"",trigger:c.trigger,steps:d,validation:c.validation,definedIn:k.relative(t,o)},rn(l,d,n));}}catch{}return Object.keys(s).length===0?null:{version:"1.0",generatedAt:new Date().toISOString(),flows:s,symbolToFlows:n}}function on(t){if(!t||!Array.isArray(t))return [];let e=[];for(let s=0;s<t.length;s++){let n=t[s];if(typeof n=="object"&&n!==null){let o=n,r=o.action||o.description||o.component||"";r&&e.push({id:o.id||`step-${s+1}`,action:r,symbol:o.symbol||o.component,expect:o.expect});}}return e}function rn(t,e,s){for(let n of e)n.symbol&&(s[n.symbol]||(s[n.symbol]=[]),s[n.symbol].includes(t)||s[n.symbol].push(t));}export{Ut as $,dr as A,ur as B,pr as C,fr as D,gr as E,mr as F,hr as G,Ge as H,Tr as I,_r as J,qs as K,$r as L,en as M,Rr as N,Ir as O,Be as P,kr as Q,Pr as R,Cr as S,ze as T,Us as U,wr as V,br as W,Sr as X,xr as Y,zs as Z,vr as _,_n as a,zt as aa,fo as b,Ko as ba,Rn as c,Qo as ca,mo as d,Zo as da,me as e,er as ea,Tt as f,tr as fa,Eo as g,nr as ga,he as h,sr as ha,To as i,or as ia,_o as j,ar as ja,$o as k,Br as ka,Ro as l,Xr as la,Io as m,so as ma,ko as n,je as o,Uo as p,zo as q,Ho as r,Wo as s,Go as t,It as u,Rt as v,ce as w,le as x,lr as y,Xt as z};
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env node
2
- import {c,a as a$1}from'./chunk-DOCDDDTD.js';import {e as e$1}from'./chunk-JQKKVAAN.js';import {a}from'./chunk-LKAT7IAK.js';import*as e from'fs';import*as i from'path';import*as S from'js-yaml';import l from'chalk';async function rs(P={}){let p=P.rootDir||process.cwd(),s=[],w=P.quiet,N=P.context;w||(console.log(l.blue(`
3
- \u{1FA7A} Paradigm Doctor
4
- `)),console.log(N?l.gray(`Running context audit checks...
5
- `):l.gray(`Checking Paradigm setup...
6
- `)));let I=a.command("doctor").start("Running health checks");if(!N){let E=function(t){let a=[];try{let n=e.readdirSync(t,{withFileTypes:!0});for(let r of n){if(r.name==="node_modules"||r.name==="dist"||r.name===".git")continue;let f=i.join(t,r.name);r.isDirectory()?a.push(...E(f)):r.name===".purpose"&&a.push(f);}}catch{}return a};let o=i.join(p,".paradigm");if(e.existsSync(o))if(e.statSync(o).isFile())s.push({name:".paradigm",status:"warn",message:"Legacy file format (should be directory)",fix:"paradigm upgrade --all"});else {s.push({name:".paradigm/",status:"ok",message:"Directory exists"});let a=i.join(o,"config.yaml");if(e.existsSync(a))try{let g=e.readFileSync(a,"utf8");e$1(g),s.push({name:".paradigm/config.yaml",status:"ok",message:"Valid YAML"});}catch(g){s.push({name:".paradigm/config.yaml",status:"error",message:`Invalid YAML: ${g.message}`,fix:"Check YAML syntax"});}else s.push({name:".paradigm/config.yaml",status:"missing",message:"Config file not found",fix:"paradigm init --force"});let n=["logger.md","scan.md","symbols.md"],r=i.join(o,"specs");if(e.existsSync(r))for(let g of n){let x=i.join(r,g);e.existsSync(x)?s.push({name:`.paradigm/specs/${g}`,status:"ok",message:"Present"}):s.push({name:`.paradigm/specs/${g}`,status:"missing",message:"Spec file not found",fix:"paradigm upgrade --all"});}else s.push({name:".paradigm/specs/",status:"missing",message:"Specs directory not found",fix:"paradigm upgrade --all"});let f=i.join(o,"docs");e.existsSync(f)?s.push({name:".paradigm/docs/",status:"ok",message:"Directory exists"}):s.push({name:".paradigm/docs/",status:"missing",message:"Docs directory not found",fix:"paradigm upgrade --all"});let h=i.join(o,"prompts");e.existsSync(h)?s.push({name:".paradigm/prompts/",status:"ok",message:"Directory exists"}):s.push({name:".paradigm/prompts/",status:"missing",message:"Prompts directory not found",fix:"paradigm upgrade --all"});let u=["specs","implementation-guides","prompts","decisions"],d=[];for(let g of u){let x=i.join(o,g);if(e.existsSync(x)&&e.statSync(x).isDirectory()){let k=i.join(x,".index.yaml");e.existsSync(k)||d.push(`.paradigm/${g}/`);}}d.length>0?s.push({name:"Docs-class indexes",status:"warn",message:`${d.length} director${d.length===1?"y":"ies"} missing .index.yaml: ${d.join(", ")}`,fix:"paradigm docs scaffold"}):s.push({name:"Docs-class indexes",status:"ok",message:"All docs-class directories have .index.yaml"});let y=i.join(o,"scan-index.json"),F=i.join(p,".paradigm-scan-index.json");if(e.existsSync(y)){let g=e.statSync(y),x=Date.now()-g.mtime.getTime(),k=Math.floor(x/(1e3*60*60));k>24?s.push({name:".paradigm/scan-index.json",status:"warn",message:`Stale (${k} hours old)`,fix:"paradigm index"}):s.push({name:".paradigm/scan-index.json",status:"ok",message:k>0?`${k} hours old`:"Fresh"});}else e.existsSync(F)?s.push({name:"scan-index",status:"warn",message:"Using legacy location",fix:"paradigm index"}):s.push({name:".paradigm/scan-index.json",status:"missing",message:"Not generated",fix:"paradigm index"});}else s.push({name:".paradigm/",status:"missing",message:"Not initialized",fix:"paradigm init"});let m=c(p);if(m.detected){let t=a$1(m.detected);if(t){let a=i.join(p,t.outputPath);e.existsSync(a)?s.push({name:t.outputPath,status:"ok",message:`Present (${m.detected})`}):s.push({name:t.outputPath,status:"missing",message:`Not generated for ${m.detected}`,fix:"paradigm sync"});}}let c$1=i.join(p,".premise");e.existsSync(c$1)?s.push({name:".premise",status:"ok",message:"Present"}):s.push({name:".premise",status:"missing",message:"Not found (optional)"});let v=i.join(p,".purpose");e.existsSync(v)?s.push({name:".purpose",status:"ok",message:"Present"}):s.push({name:".purpose",status:"warn",message:"Root .purpose not found",fix:"paradigm init"});let A=i.join(p,".paradigm","config.yaml");if(e.existsSync(A))try{let t=e.readFileSync(A,"utf8"),n=S.load(t)?.["purpose-required"];if(n&&Array.isArray(n)){let r=[];for(let f of n){if(!f.pattern)continue;let{glob:h}=await import('glob'),u=await h(f.pattern,{cwd:p,nodir:!1});for(let d of u){let y=i.join(p,d);try{e.statSync(y).isDirectory()&&!e.existsSync(i.join(y,".purpose"))&&r.push(d);}catch{}}}r.length>0?s.push({name:"Purpose-required",status:"warn",message:`${r.length} director${r.length===1?"y":"ies"} missing .purpose: ${r.join(", ")}`,fix:"Create .purpose files with paradigm_purpose_init + paradigm_purpose_add_component"}):s.push({name:"Purpose-required",status:"ok",message:"All required directories have .purpose files"});}}catch{}let q=/\[NEEDS CLARIFICATION:\s*[^\]]+\]/gi,R=0,Y=E(p);for(let t of Y)try{let n=e.readFileSync(t,"utf8").match(q);n&&(R+=n.length);}catch{}R>0?s.push({name:"Clarification markers",status:"warn",message:`${R} [NEEDS CLARIFICATION] marker${R>1?"s":""} found in .purpose files`,fix:"Resolve open clarification markers before shipping"}):Y.length>0&&s.push({name:"Clarification markers",status:"ok",message:"No unresolved markers"});let L=i.join(p,"portal.yaml");if(e.existsSync(L))try{let t=e.readFileSync(L,"utf8"),a=S.load(t);if(a?.version&&a?.gates){let n=Object.keys(a.gates||{}).length,r=Object.keys(a.routes||{}).length;s.push({name:"portal.yaml",status:"ok",message:`Valid (${n} gates, ${r} routes)`});}else s.push({name:"portal.yaml",status:"warn",message:"Missing version or gates section",fix:'Add version: "1.0" and gates: {} to portal.yaml'});}catch(t){s.push({name:"portal.yaml",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in portal.yaml"});}if(e.existsSync(L))try{let{checkPortalCompliance:t,getComplianceSummary:a}=await import('./portal-compliance-4MG5F2GI.js'),n=await t(p),r=a(n);s.push({name:"Portal compliance",status:r.status,message:r.message,fix:r.status!=="ok"?"paradigm portal check":void 0});}catch{}let U=i.join(p,".paradigm","flows.yaml");if(e.existsSync(U))try{let t=e.readFileSync(U,"utf8"),a=S.load(t);if(a?.version&&a?.flows){let n=Object.keys(a.flows||{}).length,r=Object.entries(a.flows||{}).filter(([,f])=>!f?.steps||(f.steps?.length??0)===0);r.length>0?s.push({name:".paradigm/flows.yaml",status:"warn",message:`${n} flows defined, ${r.length} have no steps`,fix:"Add steps to empty flow definitions"}):s.push({name:".paradigm/flows.yaml",status:"ok",message:`Valid (${n} flows)`});}else s.push({name:".paradigm/flows.yaml",status:"warn",message:"Missing version or flows section",fix:'Ensure flows.yaml has version: "1.0" and flows: {}'});}catch(t){s.push({name:".paradigm/flows.yaml",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in flows.yaml"});}let H=i.join(p,".paradigm","lore");if(e.existsSync(H))try{let t=e.readdirSync(H).filter(a=>a.endsWith(".yaml"));t.length===0?s.push({name:"Lore entries",status:"warn",message:"Lore directory exists but no entries found",fix:"Record a lore entry: paradigm lore record"}):s.push({name:"Lore entries",status:"ok",message:`${t.length} lore file${t.length>1?"s":""}`});}catch{s.push({name:"Lore entries",status:"warn",message:"Could not read lore directory"});}let G=i.join(p,".paradigm","university");if(e.existsSync(G))try{let t=i.join(G,"content"),a=0,n=0;if(e.existsSync(t))for(let r of ["notes","policies","quizzes","paths"]){let f=i.join(t,r);e.existsSync(f)&&(a+=e.readdirSync(f).filter(h=>h.endsWith(".md")||h.endsWith(".yaml")).length);}if(a===0)s.push({name:"University content",status:"warn",message:"University directory exists but no content found",fix:'Add content: paradigm university add note --title "Getting Started"'});else {let r=i.join(t,"quizzes");if(e.existsSync(r))for(let h of e.readdirSync(r).filter(u=>u.endsWith(".yaml")))try{let u=S.load(e.readFileSync(i.join(r,h),"utf8"));if(u?.questions)for(let d of u.questions)d.choices&&d.correct&&!(d.correct in d.choices)&&n++;}catch{}let f=i.join(t,"paths");if(e.existsSync(f))for(let h of e.readdirSync(f).filter(u=>u.endsWith(".yaml")))try{let u=S.load(e.readFileSync(i.join(f,h),"utf8"));if(u?.steps){for(let d of u.steps)if(d.content&&!d.content.startsWith("plsat:")){let y=!1;for(let F of ["notes","policies","quizzes","paths"]){let g=i.join(t,F);if(e.existsSync(g)&&e.readdirSync(g).some(k=>k.startsWith(d.content))){y=!0;break}}y||n++;}}}catch{}n>0?s.push({name:"University content",status:"warn",message:`${a} items, ${n} issue${n>1?"s":""}`,fix:"Run: paradigm university validate --deep"}):s.push({name:"University content",status:"ok",message:`${a} content item${a>1?"s":""}`});}}catch{s.push({name:"University content",status:"warn",message:"Could not read university directory"});}let _=i.join(p,".claude","hooks.json"),ss=i.join(p,"plugins","paradigm","hooks.json");if(e.existsSync(_)){let t=e.statSync(_),a=Date.now()-t.mtime.getTime(),n=Math.floor(a/(1e3*60*60*24));n>30?s.push({name:"Claude Code hooks",status:"warn",message:`Hooks are ${n} days old \u2014 may be outdated`,fix:"paradigm hooks install"}):s.push({name:"Claude Code hooks",status:"ok",message:n>0?`${n} days old`:"Fresh"});}else e.existsSync(ss)?s.push({name:"Claude Code hooks",status:"ok",message:"Using plugin hooks"}):s.push({name:"Claude Code hooks",status:"missing",message:"No hooks installed",fix:"paradigm hooks install"});let V=i.join(p,".paradigm","habits.yaml");if(e.existsSync(V))try{let t=e.readFileSync(V,"utf8"),a=S.load(t);if(a?.version&&Array.isArray(a?.habits)){let n=a.habits.filter(r=>r.enabled!==!1).length;s.push({name:"Habits config",status:"ok",message:`Valid (${n}/${a.habits.length} enabled)`});}else s.push({name:"Habits config",status:"warn",message:"Missing version or habits array",fix:"Regenerate habits.yaml with paradigm habits init"});}catch(t){s.push({name:"Habits config",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in habits.yaml"});}let J=i.join(p,"AGENTS.md");if(e.existsSync(J)){let t=e.statSync(J),a=Date.now()-t.mtime.getTime(),n=Math.floor(a/(1e3*60*60*24));n>60?s.push({name:"AGENTS.md",status:"warn",message:`${n} days since last update \u2014 may be stale`,fix:"paradigm sync"}):s.push({name:"AGENTS.md",status:"ok",message:n>0?`Updated ${n} days ago`:"Fresh"});}}let T=0,W=0,$=0;for(let o of s){let m,c;switch(o.status){case "ok":m="\u2713",c=l.green;break;case "warn":m="\u26A0",c=l.yellow,W++;break;case "error":m="\u2717",c=l.red,T++;break;case "missing":m="\u25CB",c=l.gray,$++;break}if(!w){let v=o.name.padEnd(30);console.log(` ${c(m)} ${v} ${c(o.message)}`),o.fix&&console.log(l.gray(` \u2514\u2500 Fix: ${o.fix}`));}}let{runContextAudit:Z}=await import('./context-audit-XRPT3OU2.js'),M=await Z(p,{quiet:w}),z=0,O=0,b=0;!w&&M.length>0&&(console.log(""),console.log(l.blue(" Context Audit")),console.log(l.gray(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")));for(let o of M){let m,c;switch(o.status){case "ok":m="\u2713",c=l.green;break;case "warn":m="\u26A0",c=l.yellow,O++;break;case "error":m="\u2717",c=l.red,z++;break;case "advisory":m="\u2139",c=l.cyan,b++;break}if(!w){let v=o.check.padEnd(30);if(console.log(` ${c(m)} ${v} ${c(o.message)}`),o.details&&o.details.length>0){let A=o.details.slice(0,5);for(let q of A)console.log(l.gray(` \u2502 ${q}`));o.details.length>5&&console.log(l.gray(` \u2502 ... and ${o.details.length-5} more`));}o.fix&&console.log(l.gray(` \u2514\u2500 Fix: ${o.fix}`));}}let C=T+z,j=W+O,D=C+j+$===0;if(!w)if(console.log(""),D)console.log(l.green(`\u2728 All checks passed!
7
- `));else {let o=[];C>0&&o.push(l.red(`${C} error${C>1?"s":""}`)),j>0&&o.push(l.yellow(`${j} warning${j>1?"s":""}`)),$>0&&o.push(l.gray(`${$} missing`)),b>0&&o.push(l.cyan(`${b} advisor${b>1?"ies":"y"}`)),console.log(`${o.join(", ")} found.
8
- `),console.log(l.gray("Run the suggested commands to fix issues.")),console.log(l.gray(`Troubleshooting guide: .paradigm/docs/troubleshooting.md
9
- `));}if(!w&&P.explain&&!D)try{let{narrateAllGaps:o}=await import('./gap-narrator-NTXLUI7I.js'),m=[];for(let c of s)c.status!=="ok"&&(c.name===".purpose"||c.name.startsWith("Purpose-required")?m.push({type:"missing-purpose",target:c.name,severity:"improvement"}):c.name===".paradigm/scan-index.json"&&c.status==="warn"?m.push({type:"index-stale",target:c.name,severity:"improvement"}):c.name==="Portal compliance"?m.push({type:"portal-mismatch",target:c.name,severity:c.status==="error"?"blocking":"improvement"}):c.name==="Clarification markers"&&m.push({type:"missing-description",target:c.name,severity:"improvement"}));if(m.length>0){let c=o(m);console.log(l.blue(`
10
- Gap Narrations (--explain)
11
- `)),console.log(l.gray(c.narrative)),console.log("");}}catch{}return D?I.success("All health checks passed",{total:s.length+M.length}):I.error("Health checks found issues",{errors:C,warnings:j,missing:$,advisories:b}),D}export{rs as a};