@contractspec/bundle.workspace 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +79 -0
  3. package/dist/_virtual/rolldown_runtime.js +36 -0
  4. package/dist/adapters/ai.d.ts +12 -0
  5. package/dist/adapters/ai.d.ts.map +1 -0
  6. package/dist/adapters/ai.js +83 -0
  7. package/dist/adapters/ai.js.map +1 -0
  8. package/dist/adapters/factory.d.ts +29 -0
  9. package/dist/adapters/factory.d.ts.map +1 -0
  10. package/dist/adapters/factory.js +37 -0
  11. package/dist/adapters/factory.js.map +1 -0
  12. package/dist/adapters/fs.d.ts +11 -0
  13. package/dist/adapters/fs.d.ts.map +1 -0
  14. package/dist/adapters/fs.js +131 -0
  15. package/dist/adapters/fs.js.map +1 -0
  16. package/dist/adapters/git.d.ts +11 -0
  17. package/dist/adapters/git.d.ts.map +1 -0
  18. package/dist/adapters/git.js +55 -0
  19. package/dist/adapters/git.js.map +1 -0
  20. package/dist/adapters/index.d.ts +7 -0
  21. package/dist/adapters/index.js +7 -0
  22. package/dist/adapters/logger.d.ts +18 -0
  23. package/dist/adapters/logger.d.ts.map +1 -0
  24. package/dist/adapters/logger.js +81 -0
  25. package/dist/adapters/logger.js.map +1 -0
  26. package/dist/adapters/watcher.d.ts +11 -0
  27. package/dist/adapters/watcher.d.ts.map +1 -0
  28. package/dist/adapters/watcher.js +74 -0
  29. package/dist/adapters/watcher.js.map +1 -0
  30. package/dist/adapters/workspace.d.ts +148 -0
  31. package/dist/adapters/workspace.d.ts.map +1 -0
  32. package/dist/adapters/workspace.js +275 -0
  33. package/dist/adapters/workspace.js.map +1 -0
  34. package/dist/ai/agents/claude-code-agent.d.ts +22 -0
  35. package/dist/ai/agents/claude-code-agent.d.ts.map +1 -0
  36. package/dist/ai/agents/claude-code-agent.js +182 -0
  37. package/dist/ai/agents/claude-code-agent.js.map +1 -0
  38. package/dist/ai/agents/cursor-agent.d.ts +68 -0
  39. package/dist/ai/agents/cursor-agent.d.ts.map +1 -0
  40. package/dist/ai/agents/cursor-agent.js +436 -0
  41. package/dist/ai/agents/cursor-agent.js.map +1 -0
  42. package/dist/ai/agents/index.js +5 -0
  43. package/dist/ai/agents/openai-codex-agent.d.ts +22 -0
  44. package/dist/ai/agents/openai-codex-agent.d.ts.map +1 -0
  45. package/dist/ai/agents/openai-codex-agent.js +167 -0
  46. package/dist/ai/agents/openai-codex-agent.js.map +1 -0
  47. package/dist/ai/agents/orchestrator.d.ts +50 -0
  48. package/dist/ai/agents/orchestrator.d.ts.map +1 -0
  49. package/dist/ai/agents/orchestrator.js +143 -0
  50. package/dist/ai/agents/orchestrator.js.map +1 -0
  51. package/dist/ai/agents/simple-agent.d.ts +17 -0
  52. package/dist/ai/agents/simple-agent.d.ts.map +1 -0
  53. package/dist/ai/agents/simple-agent.js +92 -0
  54. package/dist/ai/agents/simple-agent.js.map +1 -0
  55. package/dist/ai/agents/types.d.ts +36 -0
  56. package/dist/ai/agents/types.d.ts.map +1 -0
  57. package/dist/ai/client.d.ts +83 -0
  58. package/dist/ai/client.d.ts.map +1 -0
  59. package/dist/ai/client.js +163 -0
  60. package/dist/ai/client.js.map +1 -0
  61. package/dist/ai/index.d.ts +17 -0
  62. package/dist/ai/index.d.ts.map +1 -0
  63. package/dist/ai/index.js +28 -0
  64. package/dist/ai/index.js.map +1 -0
  65. package/dist/ai/prompts/code-generation.d.ts +26 -0
  66. package/dist/ai/prompts/code-generation.d.ts.map +1 -0
  67. package/dist/ai/prompts/code-generation.js +143 -0
  68. package/dist/ai/prompts/code-generation.js.map +1 -0
  69. package/dist/ai/prompts/index.d.ts +10 -0
  70. package/dist/ai/prompts/index.d.ts.map +1 -0
  71. package/dist/ai/prompts/index.js +13 -0
  72. package/dist/ai/prompts/index.js.map +1 -0
  73. package/dist/ai/prompts/spec-creation.d.ts +29 -0
  74. package/dist/ai/prompts/spec-creation.d.ts.map +1 -0
  75. package/dist/ai/prompts/spec-creation.js +111 -0
  76. package/dist/ai/prompts/spec-creation.js.map +1 -0
  77. package/dist/ai/providers.d.ts +29 -0
  78. package/dist/ai/providers.d.ts.map +1 -0
  79. package/dist/ai/providers.js +39 -0
  80. package/dist/ai/providers.js.map +1 -0
  81. package/dist/formatters/index.d.ts +11 -0
  82. package/dist/formatters/index.d.ts.map +1 -0
  83. package/dist/formatters/index.js +19 -0
  84. package/dist/formatters/index.js.map +1 -0
  85. package/dist/formatters/json.d.ts +89 -0
  86. package/dist/formatters/json.d.ts.map +1 -0
  87. package/dist/formatters/json.js +72 -0
  88. package/dist/formatters/json.js.map +1 -0
  89. package/dist/formatters/sarif.d.ts +101 -0
  90. package/dist/formatters/sarif.d.ts.map +1 -0
  91. package/dist/formatters/sarif.js +163 -0
  92. package/dist/formatters/sarif.js.map +1 -0
  93. package/dist/formatters/text.d.ts +35 -0
  94. package/dist/formatters/text.d.ts.map +1 -0
  95. package/dist/formatters/text.js +209 -0
  96. package/dist/formatters/text.js.map +1 -0
  97. package/dist/index.d.ts +82 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +204 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/ports/ai.d.ts +59 -0
  102. package/dist/ports/ai.d.ts.map +1 -0
  103. package/dist/ports/fs.d.ts +81 -0
  104. package/dist/ports/fs.d.ts.map +1 -0
  105. package/dist/ports/git.d.ts +33 -0
  106. package/dist/ports/git.d.ts.map +1 -0
  107. package/dist/ports/index.d.ts +5 -0
  108. package/dist/ports/logger.d.ts +88 -0
  109. package/dist/ports/logger.d.ts.map +1 -0
  110. package/dist/ports/watcher.d.ts +52 -0
  111. package/dist/ports/watcher.d.ts.map +1 -0
  112. package/dist/services/agent-guide/adapters/claude-code.d.ts +35 -0
  113. package/dist/services/agent-guide/adapters/claude-code.d.ts.map +1 -0
  114. package/dist/services/agent-guide/adapters/claude-code.js +144 -0
  115. package/dist/services/agent-guide/adapters/claude-code.js.map +1 -0
  116. package/dist/services/agent-guide/adapters/cursor-cli.d.ts +39 -0
  117. package/dist/services/agent-guide/adapters/cursor-cli.d.ts.map +1 -0
  118. package/dist/services/agent-guide/adapters/cursor-cli.js +135 -0
  119. package/dist/services/agent-guide/adapters/cursor-cli.js.map +1 -0
  120. package/dist/services/agent-guide/adapters/generic-mcp.d.ts +53 -0
  121. package/dist/services/agent-guide/adapters/generic-mcp.d.ts.map +1 -0
  122. package/dist/services/agent-guide/adapters/generic-mcp.js +159 -0
  123. package/dist/services/agent-guide/adapters/generic-mcp.js.map +1 -0
  124. package/dist/services/agent-guide/adapters/index.d.ts +23 -0
  125. package/dist/services/agent-guide/adapters/index.d.ts.map +1 -0
  126. package/dist/services/agent-guide/adapters/index.js +31 -0
  127. package/dist/services/agent-guide/adapters/index.js.map +1 -0
  128. package/dist/services/agent-guide/agent-guide-service.d.ts +56 -0
  129. package/dist/services/agent-guide/agent-guide-service.d.ts.map +1 -0
  130. package/dist/services/agent-guide/agent-guide-service.js +147 -0
  131. package/dist/services/agent-guide/agent-guide-service.js.map +1 -0
  132. package/dist/services/agent-guide/index.d.ts +6 -0
  133. package/dist/services/agent-guide/index.js +5 -0
  134. package/dist/services/agent-guide/types.d.ts +58 -0
  135. package/dist/services/agent-guide/types.d.ts.map +1 -0
  136. package/dist/services/build.d.ts +59 -0
  137. package/dist/services/build.d.ts.map +1 -0
  138. package/dist/services/build.js +140 -0
  139. package/dist/services/build.js.map +1 -0
  140. package/dist/services/ci-check/ci-check-service.d.ts +16 -0
  141. package/dist/services/ci-check/ci-check-service.d.ts.map +1 -0
  142. package/dist/services/ci-check/ci-check-service.js +392 -0
  143. package/dist/services/ci-check/ci-check-service.js.map +1 -0
  144. package/dist/services/ci-check/index.d.ts +2 -0
  145. package/dist/services/ci-check/index.js +2 -0
  146. package/dist/services/ci-check/types.d.ts +143 -0
  147. package/dist/services/ci-check/types.d.ts.map +1 -0
  148. package/dist/services/ci-check/types.js +29 -0
  149. package/dist/services/ci-check/types.js.map +1 -0
  150. package/dist/services/clean.d.ts +41 -0
  151. package/dist/services/clean.d.ts.map +1 -0
  152. package/dist/services/clean.js +72 -0
  153. package/dist/services/clean.js.map +1 -0
  154. package/dist/services/config.d.ts +26 -0
  155. package/dist/services/config.d.ts.map +1 -0
  156. package/dist/services/config.js +77 -0
  157. package/dist/services/config.js.map +1 -0
  158. package/dist/services/deps.d.ts +53 -0
  159. package/dist/services/deps.d.ts.map +1 -0
  160. package/dist/services/deps.js +62 -0
  161. package/dist/services/deps.js.map +1 -0
  162. package/dist/services/diff.d.ts +34 -0
  163. package/dist/services/diff.d.ts.map +1 -0
  164. package/dist/services/diff.js +34 -0
  165. package/dist/services/diff.js.map +1 -0
  166. package/dist/services/doctor/checks/ai.js +119 -0
  167. package/dist/services/doctor/checks/ai.js.map +1 -0
  168. package/dist/services/doctor/checks/cli.js +147 -0
  169. package/dist/services/doctor/checks/cli.js.map +1 -0
  170. package/dist/services/doctor/checks/config.js +171 -0
  171. package/dist/services/doctor/checks/config.js.map +1 -0
  172. package/dist/services/doctor/checks/deps.js +247 -0
  173. package/dist/services/doctor/checks/deps.js.map +1 -0
  174. package/dist/services/doctor/checks/index.js +6 -0
  175. package/dist/services/doctor/checks/mcp.js +145 -0
  176. package/dist/services/doctor/checks/mcp.js.map +1 -0
  177. package/dist/services/doctor/checks/workspace.js +244 -0
  178. package/dist/services/doctor/checks/workspace.js.map +1 -0
  179. package/dist/services/doctor/doctor-service.d.ts +24 -0
  180. package/dist/services/doctor/doctor-service.d.ts.map +1 -0
  181. package/dist/services/doctor/doctor-service.js +116 -0
  182. package/dist/services/doctor/doctor-service.js.map +1 -0
  183. package/dist/services/doctor/index.d.ts +2 -0
  184. package/dist/services/doctor/index.js +2 -0
  185. package/dist/services/doctor/types.d.ts +118 -0
  186. package/dist/services/doctor/types.d.ts.map +1 -0
  187. package/dist/services/doctor/types.js +27 -0
  188. package/dist/services/doctor/types.js.map +1 -0
  189. package/dist/services/impact/formatters.d.ts +27 -0
  190. package/dist/services/impact/formatters.d.ts.map +1 -0
  191. package/dist/services/impact/formatters.js +111 -0
  192. package/dist/services/impact/formatters.js.map +1 -0
  193. package/dist/services/impact/impact-detection-service.d.ts +22 -0
  194. package/dist/services/impact/impact-detection-service.d.ts.map +1 -0
  195. package/dist/services/impact/impact-detection-service.js +96 -0
  196. package/dist/services/impact/impact-detection-service.js.map +1 -0
  197. package/dist/services/impact/index.d.ts +11 -0
  198. package/dist/services/impact/index.d.ts.map +1 -0
  199. package/dist/services/impact/index.js +16 -0
  200. package/dist/services/impact/index.js.map +1 -0
  201. package/dist/services/impact/types.d.ts +58 -0
  202. package/dist/services/impact/types.d.ts.map +1 -0
  203. package/dist/services/implementation/discovery.d.ts +30 -0
  204. package/dist/services/implementation/discovery.d.ts.map +1 -0
  205. package/dist/services/implementation/discovery.js +144 -0
  206. package/dist/services/implementation/discovery.js.map +1 -0
  207. package/dist/services/implementation/index.d.ts +3 -0
  208. package/dist/services/implementation/index.js +2 -0
  209. package/dist/services/implementation/resolver.d.ts +44 -0
  210. package/dist/services/implementation/resolver.d.ts.map +1 -0
  211. package/dist/services/implementation/resolver.js +224 -0
  212. package/dist/services/implementation/resolver.js.map +1 -0
  213. package/dist/services/implementation/types.d.ts +79 -0
  214. package/dist/services/implementation/types.d.ts.map +1 -0
  215. package/dist/services/index.d.ts +60 -0
  216. package/dist/services/index.js +57 -0
  217. package/dist/services/integrity-diagram.d.ts +36 -0
  218. package/dist/services/integrity-diagram.d.ts.map +1 -0
  219. package/dist/services/integrity-diagram.js +275 -0
  220. package/dist/services/integrity-diagram.js.map +1 -0
  221. package/dist/services/integrity.d.ts +134 -0
  222. package/dist/services/integrity.d.ts.map +1 -0
  223. package/dist/services/integrity.js +272 -0
  224. package/dist/services/integrity.js.map +1 -0
  225. package/dist/services/list.d.ts +31 -0
  226. package/dist/services/list.d.ts.map +1 -0
  227. package/dist/services/list.js +36 -0
  228. package/dist/services/list.js.map +1 -0
  229. package/dist/services/openapi/export-service.d.ts +53 -0
  230. package/dist/services/openapi/export-service.d.ts.map +1 -0
  231. package/dist/services/openapi/export-service.js +50 -0
  232. package/dist/services/openapi/export-service.js.map +1 -0
  233. package/dist/services/openapi/import-service.d.ts +17 -0
  234. package/dist/services/openapi/import-service.d.ts.map +1 -0
  235. package/dist/services/openapi/import-service.js +74 -0
  236. package/dist/services/openapi/import-service.js.map +1 -0
  237. package/dist/services/openapi/index.d.ts +5 -0
  238. package/dist/services/openapi/index.js +4 -0
  239. package/dist/services/openapi/sync-service.d.ts +17 -0
  240. package/dist/services/openapi/sync-service.d.ts.map +1 -0
  241. package/dist/services/openapi/sync-service.js +120 -0
  242. package/dist/services/openapi/sync-service.js.map +1 -0
  243. package/dist/services/openapi/types.d.ts +162 -0
  244. package/dist/services/openapi/types.d.ts.map +1 -0
  245. package/dist/services/openapi/validate-service.d.ts +16 -0
  246. package/dist/services/openapi/validate-service.d.ts.map +1 -0
  247. package/dist/services/openapi/validate-service.js +130 -0
  248. package/dist/services/openapi/validate-service.js.map +1 -0
  249. package/dist/services/quickstart/dependencies.d.ts +31 -0
  250. package/dist/services/quickstart/dependencies.d.ts.map +1 -0
  251. package/dist/services/quickstart/dependencies.js +57 -0
  252. package/dist/services/quickstart/dependencies.js.map +1 -0
  253. package/dist/services/quickstart/index.js +2 -0
  254. package/dist/services/quickstart/quickstart-service.d.ts +20 -0
  255. package/dist/services/quickstart/quickstart-service.d.ts.map +1 -0
  256. package/dist/services/quickstart/quickstart-service.js +196 -0
  257. package/dist/services/quickstart/quickstart-service.js.map +1 -0
  258. package/dist/services/quickstart/types.d.ts +81 -0
  259. package/dist/services/quickstart/types.d.ts.map +1 -0
  260. package/dist/services/regenerator.d.ts +18 -0
  261. package/dist/services/regenerator.d.ts.map +1 -0
  262. package/dist/services/regenerator.js +23 -0
  263. package/dist/services/regenerator.js.map +1 -0
  264. package/dist/services/registry.d.ts +53 -0
  265. package/dist/services/registry.d.ts.map +1 -0
  266. package/dist/services/registry.js +74 -0
  267. package/dist/services/registry.js.map +1 -0
  268. package/dist/services/setup/config-generators.d.ts +42 -0
  269. package/dist/services/setup/config-generators.d.ts.map +1 -0
  270. package/dist/services/setup/config-generators.js +238 -0
  271. package/dist/services/setup/config-generators.js.map +1 -0
  272. package/dist/services/setup/file-merger.d.ts +27 -0
  273. package/dist/services/setup/file-merger.d.ts.map +1 -0
  274. package/dist/services/setup/file-merger.js +61 -0
  275. package/dist/services/setup/file-merger.js.map +1 -0
  276. package/dist/services/setup/index.js +4 -0
  277. package/dist/services/setup/setup-service.d.ts +12 -0
  278. package/dist/services/setup/setup-service.d.ts.map +1 -0
  279. package/dist/services/setup/setup-service.js +96 -0
  280. package/dist/services/setup/setup-service.js.map +1 -0
  281. package/dist/services/setup/targets/agents-md.js +47 -0
  282. package/dist/services/setup/targets/agents-md.js.map +1 -0
  283. package/dist/services/setup/targets/cli-config.js +60 -0
  284. package/dist/services/setup/targets/cli-config.js.map +1 -0
  285. package/dist/services/setup/targets/cursor-rules.js +48 -0
  286. package/dist/services/setup/targets/cursor-rules.js.map +1 -0
  287. package/dist/services/setup/targets/mcp-claude.js +60 -0
  288. package/dist/services/setup/targets/mcp-claude.js.map +1 -0
  289. package/dist/services/setup/targets/mcp-cursor.js +59 -0
  290. package/dist/services/setup/targets/mcp-cursor.js.map +1 -0
  291. package/dist/services/setup/targets/vscode-settings.js +63 -0
  292. package/dist/services/setup/targets/vscode-settings.js.map +1 -0
  293. package/dist/services/setup/types.d.ts +85 -0
  294. package/dist/services/setup/types.d.ts.map +1 -0
  295. package/dist/services/setup/types.js +27 -0
  296. package/dist/services/setup/types.js.map +1 -0
  297. package/dist/services/sync.d.ts +41 -0
  298. package/dist/services/sync.d.ts.map +1 -0
  299. package/dist/services/sync.js +63 -0
  300. package/dist/services/sync.js.map +1 -0
  301. package/dist/services/test.d.ts +15 -0
  302. package/dist/services/test.d.ts.map +1 -0
  303. package/dist/services/test.js +30 -0
  304. package/dist/services/test.js.map +1 -0
  305. package/dist/services/validate-implementation.d.ts +32 -0
  306. package/dist/services/validate-implementation.d.ts.map +1 -0
  307. package/dist/services/validate-implementation.js +64 -0
  308. package/dist/services/validate-implementation.js.map +1 -0
  309. package/dist/services/validate.d.ts +41 -0
  310. package/dist/services/validate.d.ts.map +1 -0
  311. package/dist/services/validate.js +48 -0
  312. package/dist/services/validate.js.map +1 -0
  313. package/dist/services/verification-cache/adapters/filesystem.d.ts +46 -0
  314. package/dist/services/verification-cache/adapters/filesystem.d.ts.map +1 -0
  315. package/dist/services/verification-cache/adapters/filesystem.js +120 -0
  316. package/dist/services/verification-cache/adapters/filesystem.js.map +1 -0
  317. package/dist/services/verification-cache/adapters/in-memory.d.ts +27 -0
  318. package/dist/services/verification-cache/adapters/in-memory.d.ts.map +1 -0
  319. package/dist/services/verification-cache/adapters/in-memory.js +46 -0
  320. package/dist/services/verification-cache/adapters/in-memory.js.map +1 -0
  321. package/dist/services/verification-cache/adapters/index.d.ts +3 -0
  322. package/dist/services/verification-cache/adapters/index.js +3 -0
  323. package/dist/services/verification-cache/adapters/workspace-state.d.ts +49 -0
  324. package/dist/services/verification-cache/adapters/workspace-state.d.ts.map +1 -0
  325. package/dist/services/verification-cache/adapters/workspace-state.js +91 -0
  326. package/dist/services/verification-cache/adapters/workspace-state.js.map +1 -0
  327. package/dist/services/verification-cache/cache-service.d.ts +70 -0
  328. package/dist/services/verification-cache/cache-service.d.ts.map +1 -0
  329. package/dist/services/verification-cache/cache-service.js +256 -0
  330. package/dist/services/verification-cache/cache-service.js.map +1 -0
  331. package/dist/services/verification-cache/index.d.ts +6 -0
  332. package/dist/services/verification-cache/index.js +6 -0
  333. package/dist/services/verification-cache/types.d.ts +124 -0
  334. package/dist/services/verification-cache/types.d.ts.map +1 -0
  335. package/dist/services/verification-cache/types.js +16 -0
  336. package/dist/services/verification-cache/types.js.map +1 -0
  337. package/dist/services/verify/ai-verifier.d.ts +25 -0
  338. package/dist/services/verify/ai-verifier.d.ts.map +1 -0
  339. package/dist/services/verify/ai-verifier.js +403 -0
  340. package/dist/services/verify/ai-verifier.js.map +1 -0
  341. package/dist/services/verify/behavior-verifier.d.ts +12 -0
  342. package/dist/services/verify/behavior-verifier.d.ts.map +1 -0
  343. package/dist/services/verify/behavior-verifier.js +186 -0
  344. package/dist/services/verify/behavior-verifier.js.map +1 -0
  345. package/dist/services/verify/index.d.ts +5 -0
  346. package/dist/services/verify/index.js +4 -0
  347. package/dist/services/verify/structure-verifier.d.ts +12 -0
  348. package/dist/services/verify/structure-verifier.d.ts.map +1 -0
  349. package/dist/services/verify/structure-verifier.js +196 -0
  350. package/dist/services/verify/structure-verifier.js.map +1 -0
  351. package/dist/services/verify/types.d.ts +137 -0
  352. package/dist/services/verify/types.d.ts.map +1 -0
  353. package/dist/services/verify/verify-service.d.ts +60 -0
  354. package/dist/services/verify/verify-service.d.ts.map +1 -0
  355. package/dist/services/verify/verify-service.js +204 -0
  356. package/dist/services/verify/verify-service.js.map +1 -0
  357. package/dist/services/watch.d.ts +25 -0
  358. package/dist/services/watch.d.ts.map +1 -0
  359. package/dist/services/watch.js +32 -0
  360. package/dist/services/watch.js.map +1 -0
  361. package/dist/services/workspace-info.d.ts +62 -0
  362. package/dist/services/workspace-info.d.ts.map +1 -0
  363. package/dist/services/workspace-info.js +103 -0
  364. package/dist/services/workspace-info.js.map +1 -0
  365. package/dist/templates/app-config.template.d.ts +7 -0
  366. package/dist/templates/app-config.template.d.ts.map +1 -0
  367. package/dist/templates/app-config.template.js +107 -0
  368. package/dist/templates/app-config.template.js.map +1 -0
  369. package/dist/templates/data-view.template.d.ts +7 -0
  370. package/dist/templates/data-view.template.d.ts.map +1 -0
  371. package/dist/templates/data-view.template.js +70 -0
  372. package/dist/templates/data-view.template.js.map +1 -0
  373. package/dist/templates/event.template.d.ts +11 -0
  374. package/dist/templates/event.template.d.ts.map +1 -0
  375. package/dist/templates/event.template.js +40 -0
  376. package/dist/templates/event.template.js.map +1 -0
  377. package/dist/templates/experiment.template.d.ts +7 -0
  378. package/dist/templates/experiment.template.d.ts.map +1 -0
  379. package/dist/templates/experiment.template.js +89 -0
  380. package/dist/templates/experiment.template.js.map +1 -0
  381. package/dist/templates/handler.template.d.ts +16 -0
  382. package/dist/templates/handler.template.d.ts.map +1 -0
  383. package/dist/templates/handler.template.js +100 -0
  384. package/dist/templates/handler.template.js.map +1 -0
  385. package/dist/templates/index.d.ts +21 -0
  386. package/dist/templates/index.d.ts.map +1 -0
  387. package/dist/templates/index.js +37 -0
  388. package/dist/templates/index.js.map +1 -0
  389. package/dist/templates/integration.template.d.ts +7 -0
  390. package/dist/templates/integration.template.d.ts.map +1 -0
  391. package/dist/templates/integration.template.js +160 -0
  392. package/dist/templates/integration.template.js.map +1 -0
  393. package/dist/templates/knowledge.template.d.ts +7 -0
  394. package/dist/templates/knowledge.template.d.ts.map +1 -0
  395. package/dist/templates/knowledge.template.js +75 -0
  396. package/dist/templates/knowledge.template.js.map +1 -0
  397. package/dist/templates/migration.template.d.ts +7 -0
  398. package/dist/templates/migration.template.d.ts.map +1 -0
  399. package/dist/templates/migration.template.js +62 -0
  400. package/dist/templates/migration.template.js.map +1 -0
  401. package/dist/templates/operation.template.d.ts +11 -0
  402. package/dist/templates/operation.template.d.ts.map +1 -0
  403. package/dist/templates/operation.template.js +105 -0
  404. package/dist/templates/operation.template.js.map +1 -0
  405. package/dist/templates/presentation.template.d.ts +11 -0
  406. package/dist/templates/presentation.template.d.ts.map +1 -0
  407. package/dist/templates/presentation.template.js +80 -0
  408. package/dist/templates/presentation.template.js.map +1 -0
  409. package/dist/templates/telemetry.template.d.ts +7 -0
  410. package/dist/templates/telemetry.template.d.ts.map +1 -0
  411. package/dist/templates/telemetry.template.js +91 -0
  412. package/dist/templates/telemetry.template.js.map +1 -0
  413. package/dist/templates/workflow-runner.template.d.ts +16 -0
  414. package/dist/templates/workflow-runner.template.d.ts.map +1 -0
  415. package/dist/templates/workflow-runner.template.js +50 -0
  416. package/dist/templates/workflow-runner.template.js.map +1 -0
  417. package/dist/templates/workflow.template.d.ts +7 -0
  418. package/dist/templates/workflow.template.d.ts.map +1 -0
  419. package/dist/templates/workflow.template.js +69 -0
  420. package/dist/templates/workflow.template.js.map +1 -0
  421. package/dist/types/config.d.ts +34 -0
  422. package/dist/types/config.d.ts.map +1 -0
  423. package/dist/types.d.ts +324 -0
  424. package/dist/types.d.ts.map +1 -0
  425. package/package.json +68 -0
@@ -0,0 +1,79 @@
1
+ import { ImplementationType } from "@contractspec/lib.contracts";
2
+
3
+ //#region src/services/implementation/types.d.ts
4
+
5
+ /**
6
+ * Source of how an implementation was discovered/linked.
7
+ */
8
+ type ImplementationSource = 'explicit' | 'discovered' | 'convention';
9
+ /**
10
+ * Status of a spec's implementation coverage.
11
+ */
12
+ type ImplementationStatus = 'implemented' | 'partial' | 'missing';
13
+ /**
14
+ * A resolved implementation file for a spec.
15
+ */
16
+ interface ResolvedImplementation {
17
+ /** Path to the implementation file (relative to workspace root) */
18
+ path: string;
19
+ /** Type of implementation artifact */
20
+ type: ImplementationType;
21
+ /** How this implementation was found */
22
+ source: ImplementationSource;
23
+ /** Whether the file exists on disk */
24
+ exists: boolean;
25
+ /** Content hash for cache invalidation (SHA256) */
26
+ contentHash?: string;
27
+ /** Optional description */
28
+ description?: string;
29
+ }
30
+ /**
31
+ * Full resolution result for a spec's implementations.
32
+ */
33
+ interface SpecImplementationResult {
34
+ /** Spec key */
35
+ specKey: string;
36
+ /** Spec version */
37
+ specVersion: number;
38
+ /** Path to the spec file */
39
+ specPath: string;
40
+ /** Spec type (operation, event, presentation, etc.) */
41
+ specType: string;
42
+ /** All resolved implementations */
43
+ implementations: ResolvedImplementation[];
44
+ /** Overall implementation status */
45
+ status: ImplementationStatus;
46
+ /** Content hash of the spec file */
47
+ specHash?: string;
48
+ }
49
+ /**
50
+ * Options for implementation discovery.
51
+ */
52
+ interface DiscoveryOptions {
53
+ /** Workspace root directory */
54
+ workspaceRoot?: string;
55
+ /** Glob patterns to search */
56
+ includePatterns?: string[];
57
+ /** Glob patterns to exclude */
58
+ excludePatterns?: string[];
59
+ /** Whether to compute content hashes */
60
+ computeHashes?: boolean;
61
+ }
62
+ /**
63
+ * Result of scanning for spec references in a file.
64
+ */
65
+ interface SpecReferenceMatch {
66
+ /** Path to the file containing the reference */
67
+ filePath: string;
68
+ /** Key of the spec being referenced */
69
+ specKey: string;
70
+ /** Type of reference (import, typeof, handler) */
71
+ referenceType: 'import' | 'typeof' | 'handler' | 'unknown';
72
+ /** Line number where reference was found */
73
+ lineNumber?: number;
74
+ /** Inferred implementation type based on context */
75
+ inferredType: ImplementationType;
76
+ }
77
+ //#endregion
78
+ export { DiscoveryOptions, ImplementationSource, ImplementationStatus, ResolvedImplementation, SpecImplementationResult, SpecReferenceMatch };
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/services/implementation/types.ts"],"sourcesContent":[],"mappings":";;;;AAcA;AAKA;AAkBA;AAoBiB,KAhDL,oBAAA,GAgDqB,UAAA,GAAA,YAAA,GAAA,YAAA;AAcjC;;;KAzDY,oBAAA;;;;UAKK,sBAAA;;;;QAIT;;UAEE;;;;;;;;;;;UAYO,wBAAA;;;;;;;;;;mBAUE;;UAET;;;;;;;UAQO,gBAAA;;;;;;;;;;;;;UAcA,kBAAA;;;;;;;;;;gBAUD"}
@@ -0,0 +1,60 @@
1
+ import { PackageManager, WorkspaceInfo, detectPackageManager, findPackageRoot, findWorkspaceRoot, getWorkspaceInfo } from "../adapters/workspace.js";
2
+ import { ValidateSpecOptions, ValidateSpecResult, validateSpec, validateSpecs } from "./validate.js";
3
+ import { ValidateImplementationOptions, ValidateImplementationResult, validateImplementationFiles } from "./validate-implementation.js";
4
+ import { CompareSpecsOptions, CompareSpecsResult, compareSpecs } from "./diff.js";
5
+ import { AnalyzeDepsOptions, AnalyzeDepsResult, analyzeDeps, exportGraphAsDot, getContractNode, getGraphStats } from "./deps.js";
6
+ import { ListSpecsOptions, groupSpecsByType, listSpecs } from "./list.js";
7
+ import { getApiKey, loadWorkspaceConfig, mergeWorkspaceConfig } from "./config.js";
8
+ import { BuildSpecOptions, BuildSpecResult, BuildTarget, BuildTargetResult, buildSpec } from "./build.js";
9
+ import { OpenApiExportServiceOptions, OpenApiExportServiceResult, OpenApiImportServiceOptions, OpenApiImportServiceResult, OpenApiSyncServiceOptions, OpenApiSyncServiceResult, OpenApiValidateServiceOptions, OpenApiValidateServiceResult } from "./openapi/types.js";
10
+ import { importFromOpenApiService } from "./openapi/import-service.js";
11
+ import { syncWithOpenApiService } from "./openapi/sync-service.js";
12
+ import { validateAgainstOpenApiService } from "./openapi/validate-service.js";
13
+ import { OpenApiExportOptions, OpenApiExportResult, exportOpenApi } from "./openapi/export-service.js";
14
+ import "./openapi/index.js";
15
+ import { RegistryClient, RegistryClientOptions, addToRegistry, listFromRegistry, resolveRegistryUrl, searchRegistry } from "./registry.js";
16
+ import { SyncBuildFn, SyncSpecsOptions, SyncSpecsResult, SyncSpecsRunResult, SyncValidateFn, syncSpecs } from "./sync.js";
17
+ import { WatchBuildFn, WatchSpecsOptions, WatchValidateFn, watchSpecs } from "./watch.js";
18
+ import { CleanOptions, CleanResult, cleanArtifacts } from "./clean.js";
19
+ import { RunTestsResult, TestRunResult, runTests } from "./test.js";
20
+ import { CreateRegeneratorOptions, createRegeneratorService } from "./regenerator.js";
21
+ import { ExtendedWorkspaceInfo, MonorepoConfig, findAllConfigFiles, formatWorkspaceInfo, getExtendedWorkspaceInfo, mergeMonorepoConfigs } from "./workspace-info.js";
22
+ import { CoverageByType, IntegrityAnalysisOptions, IntegrityAnalysisResult, IntegrityIssue, SpecInventory, SpecLocation, analyzeIntegrity, filterIssuesBySeverity, filterIssuesByType, getAllSpecs } from "./integrity.js";
23
+ import { DiagramOptions, DiagramType, generateMermaidDiagram } from "./integrity-diagram.js";
24
+ import { ALL_SETUP_TARGETS, SETUP_TARGET_LABELS, SetupFileResult, SetupOptions, SetupPromptCallbacks, SetupResult, SetupScope, SetupTarget } from "./setup/types.js";
25
+ import { runSetup } from "./setup/setup-service.js";
26
+ import { generateAgentsMd, generateClaudeMcpConfig, generateContractsrcConfig, generateCursorMcpConfig, generateCursorRules, generateVscodeSettings, getClaudeDesktopConfigPath } from "./setup/config-generators.js";
27
+ import { deepMergeOverwrite, deepMergePreserve, formatJson, safeParseJson } from "./setup/file-merger.js";
28
+ import { ALL_CHECK_CATEGORIES, CHECK_CATEGORY_LABELS, CheckCategory, CheckContext, CheckResult, CheckStatus, DoctorOptions, DoctorPromptCallbacks, DoctorResult, FixAction, FixResult } from "./doctor/types.js";
29
+ import { formatCheckResult, formatDoctorSummary, runDoctor } from "./doctor/doctor-service.js";
30
+ import "./doctor/index.js";
31
+ import { ALL_CI_CHECK_CATEGORIES, CICheckCategory, CICheckCategorySummary, CICheckOptions, CICheckResult, CIFormatOptions, CIIssue, CIIssueSeverity, CIOutputFormat, CI_CHECK_CATEGORY_LABELS } from "./ci-check/types.js";
32
+ import { runCIChecks } from "./ci-check/ci-check-service.js";
33
+ import "./ci-check/index.js";
34
+ import { AgentAdapter, AgentGuideConfig, FormatOptions, GuideOptions, GuideResult } from "./agent-guide/types.js";
35
+ import { AgentGuideService, agentGuideService, createAgentGuideService } from "./agent-guide/agent-guide-service.js";
36
+ import { ClaudeCodeAdapter, claudeCodeAdapter } from "./agent-guide/adapters/claude-code.js";
37
+ import { CursorCLIAdapter, cursorCLIAdapter } from "./agent-guide/adapters/cursor-cli.js";
38
+ import { GenericMCPAdapter, genericMCPAdapter } from "./agent-guide/adapters/generic-mcp.js";
39
+ import { agentAdapters, getAgentAdapter, listAgentTypes } from "./agent-guide/adapters/index.js";
40
+ import "./agent-guide/index.js";
41
+ import { AIReviewResult, BehaviorCheck, FieldMapping, FieldMatchType, IntentAlignment, SemanticVerificationResult, StructureCheck, VerifyConfig, VerifyInput, VerifyOptions, VerifyResult } from "./verify/types.js";
42
+ import { VerifyService, createVerifyService, verifyService } from "./verify/verify-service.js";
43
+ import { verifyStructure } from "./verify/structure-verifier.js";
44
+ import { verifyBehavior } from "./verify/behavior-verifier.js";
45
+ import { createQuickAIReview, verifySemanticFields, verifyWithAI, verifyWithAIEnhanced } from "./verify/ai-verifier.js";
46
+ import "./verify/index.js";
47
+ import { DiscoveryOptions, ImplementationSource, ImplementationStatus, ResolvedImplementation, SpecImplementationResult, SpecReferenceMatch } from "./implementation/types.js";
48
+ import { discoverAllImplementations, discoverImplementationsForSpec, extractSpecReferences, inferImplementationType } from "./implementation/discovery.js";
49
+ import { ResolverOptions, getImplementationSummary, resolveAllImplementations, resolveImplementations } from "./implementation/resolver.js";
50
+ import "./implementation/index.js";
51
+ import { CacheEntryMeta, CacheKeyString, CacheLookupResult, CacheMissReason, CacheStats, CacheStorageAdapter, DEFAULT_CACHE_CONFIG, VerificationCacheConfig, VerificationCacheEntry, VerificationCacheKey } from "./verification-cache/types.js";
52
+ import { VerificationCacheService, cacheKeyToString, computeContentHash, createVerificationCacheService, stringToCacheKey } from "./verification-cache/cache-service.js";
53
+ import { InMemoryCacheStorage, createInMemoryCacheStorage } from "./verification-cache/adapters/in-memory.js";
54
+ import { FileSystemCacheStorage, createFileSystemCacheStorage } from "./verification-cache/adapters/filesystem.js";
55
+ import { KeyValueStore, WorkspaceStateCacheStorage, createWorkspaceStateCacheStorage } from "./verification-cache/adapters/workspace-state.js";
56
+ import "./verification-cache/index.js";
57
+ import { PackageInstallResult, QuickstartDependency, QuickstartMode, QuickstartOptions, QuickstartPromptCallbacks, QuickstartResult } from "./quickstart/types.js";
58
+ import { FULL_DEPENDENCIES, MINIMAL_DEPENDENCIES, getDependencies, getDevDependencies, getProductionDependencies } from "./quickstart/dependencies.js";
59
+ import { formatQuickstartPreview, isContractSpecInstalled, runQuickstart } from "./quickstart/quickstart-service.js";
60
+ import { index_d_exports } from "./impact/index.js";
@@ -0,0 +1,57 @@
1
+ import { detectPackageManager, findPackageRoot, findWorkspaceRoot, getWorkspaceInfo } from "../adapters/workspace.js";
2
+ import { validateSpec, validateSpecs } from "./validate.js";
3
+ import { validateImplementationFiles } from "./validate-implementation.js";
4
+ import { compareSpecs } from "./diff.js";
5
+ import { analyzeDeps, exportGraphAsDot, getContractNode, getGraphStats } from "./deps.js";
6
+ import { groupSpecsByType, listSpecs } from "./list.js";
7
+ import { getApiKey, loadWorkspaceConfig, mergeWorkspaceConfig } from "./config.js";
8
+ import { buildSpec } from "./build.js";
9
+ import { importFromOpenApiService } from "./openapi/import-service.js";
10
+ import { syncWithOpenApiService } from "./openapi/sync-service.js";
11
+ import { validateAgainstOpenApiService } from "./openapi/validate-service.js";
12
+ import { exportOpenApi } from "./openapi/export-service.js";
13
+ import "./openapi/index.js";
14
+ import { RegistryClient, addToRegistry, listFromRegistry, resolveRegistryUrl, searchRegistry } from "./registry.js";
15
+ import { syncSpecs } from "./sync.js";
16
+ import { watchSpecs } from "./watch.js";
17
+ import { cleanArtifacts } from "./clean.js";
18
+ import { runTests } from "./test.js";
19
+ import { createRegeneratorService } from "./regenerator.js";
20
+ import { findAllConfigFiles, formatWorkspaceInfo, getExtendedWorkspaceInfo, mergeMonorepoConfigs } from "./workspace-info.js";
21
+ import { analyzeIntegrity, filterIssuesBySeverity, filterIssuesByType, getAllSpecs } from "./integrity.js";
22
+ import { generateMermaidDiagram } from "./integrity-diagram.js";
23
+ import { ALL_SETUP_TARGETS, SETUP_TARGET_LABELS } from "./setup/types.js";
24
+ import { generateAgentsMd, generateClaudeMcpConfig, generateContractsrcConfig, generateCursorMcpConfig, generateCursorRules, generateVscodeSettings, getClaudeDesktopConfigPath } from "./setup/config-generators.js";
25
+ import { deepMergeOverwrite, deepMergePreserve, formatJson, safeParseJson } from "./setup/file-merger.js";
26
+ import { runSetup } from "./setup/setup-service.js";
27
+ import "./setup/index.js";
28
+ import { ALL_CHECK_CATEGORIES, CHECK_CATEGORY_LABELS } from "./doctor/types.js";
29
+ import { formatCheckResult, formatDoctorSummary, runDoctor } from "./doctor/doctor-service.js";
30
+ import "./doctor/index.js";
31
+ import { ALL_CI_CHECK_CATEGORIES, CI_CHECK_CATEGORY_LABELS } from "./ci-check/types.js";
32
+ import { discoverAllImplementations, discoverImplementationsForSpec, extractSpecReferences, inferImplementationType } from "./implementation/discovery.js";
33
+ import { getImplementationSummary, resolveAllImplementations, resolveImplementations } from "./implementation/resolver.js";
34
+ import { runCIChecks } from "./ci-check/ci-check-service.js";
35
+ import "./ci-check/index.js";
36
+ import { ClaudeCodeAdapter, claudeCodeAdapter } from "./agent-guide/adapters/claude-code.js";
37
+ import { CursorCLIAdapter, cursorCLIAdapter } from "./agent-guide/adapters/cursor-cli.js";
38
+ import { GenericMCPAdapter, genericMCPAdapter } from "./agent-guide/adapters/generic-mcp.js";
39
+ import { agentAdapters, getAgentAdapter, listAgentTypes } from "./agent-guide/adapters/index.js";
40
+ import { AgentGuideService, agentGuideService, createAgentGuideService } from "./agent-guide/agent-guide-service.js";
41
+ import "./agent-guide/index.js";
42
+ import { verifyStructure } from "./verify/structure-verifier.js";
43
+ import { verifyBehavior } from "./verify/behavior-verifier.js";
44
+ import { createQuickAIReview, verifySemanticFields, verifyWithAI, verifyWithAIEnhanced } from "./verify/ai-verifier.js";
45
+ import { VerifyService, createVerifyService, verifyService } from "./verify/verify-service.js";
46
+ import "./verify/index.js";
47
+ import "./implementation/index.js";
48
+ import { DEFAULT_CACHE_CONFIG } from "./verification-cache/types.js";
49
+ import { VerificationCacheService, cacheKeyToString, computeContentHash, createVerificationCacheService, stringToCacheKey } from "./verification-cache/cache-service.js";
50
+ import { InMemoryCacheStorage, createInMemoryCacheStorage } from "./verification-cache/adapters/in-memory.js";
51
+ import { FileSystemCacheStorage, createFileSystemCacheStorage } from "./verification-cache/adapters/filesystem.js";
52
+ import { WorkspaceStateCacheStorage, createWorkspaceStateCacheStorage } from "./verification-cache/adapters/workspace-state.js";
53
+ import "./verification-cache/index.js";
54
+ import { FULL_DEPENDENCIES, MINIMAL_DEPENDENCIES, getDependencies, getDevDependencies, getProductionDependencies } from "./quickstart/dependencies.js";
55
+ import { formatQuickstartPreview, isContractSpecInstalled, runQuickstart } from "./quickstart/quickstart-service.js";
56
+ import "./quickstart/index.js";
57
+ import { impact_exports } from "./impact/index.js";
@@ -0,0 +1,36 @@
1
+ import { IntegrityAnalysisResult } from "./integrity.js";
2
+
3
+ //#region src/services/integrity-diagram.d.ts
4
+
5
+ /**
6
+ * Type of diagram to generate.
7
+ */
8
+ type DiagramType = 'feature-map' | 'orphans' | 'dependencies' | 'full';
9
+ /**
10
+ * Options for diagram generation.
11
+ */
12
+ interface DiagramOptions {
13
+ /**
14
+ * Maximum number of nodes to display.
15
+ */
16
+ maxNodes?: number;
17
+ /**
18
+ * Include only specific features.
19
+ */
20
+ featureKeys?: string[];
21
+ /**
22
+ * Show spec versions in labels.
23
+ */
24
+ showVersions?: boolean;
25
+ /**
26
+ * Direction for the flowchart.
27
+ */
28
+ direction?: 'LR' | 'TB' | 'RL' | 'BT';
29
+ }
30
+ /**
31
+ * Generate a Mermaid diagram from integrity analysis results.
32
+ */
33
+ declare function generateMermaidDiagram(result: IntegrityAnalysisResult, type?: DiagramType, options?: DiagramOptions): string;
34
+ //#endregion
35
+ export { DiagramOptions, DiagramType, generateMermaidDiagram };
36
+ //# sourceMappingURL=integrity-diagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity-diagram.d.ts","names":[],"sources":["../../src/services/integrity-diagram.ts"],"sourcesContent":[],"mappings":";;;;;;;KAeY,WAAA;;;;UAKK,cAAA;;;;;;;;;;;;;;;;;;;;;iBAyBD,sBAAA,SACN,gCACF,uBACG"}
@@ -0,0 +1,275 @@
1
+ //#region src/services/integrity-diagram.ts
2
+ /**
3
+ * Generate a Mermaid diagram from integrity analysis results.
4
+ */
5
+ function generateMermaidDiagram(result, type = "feature-map", options = {}) {
6
+ switch (type) {
7
+ case "feature-map": return generateFeatureMapDiagram(result, options);
8
+ case "orphans": return generateOrphansDiagram(result, options);
9
+ case "dependencies": return generateDependenciesDiagram(result, options);
10
+ case "full": return generateFullDiagram(result, options);
11
+ default: return generateFeatureMapDiagram(result, options);
12
+ }
13
+ }
14
+ /**
15
+ * Generate a feature map diagram showing features and their linked specs.
16
+ */
17
+ function generateFeatureMapDiagram(result, options) {
18
+ const { direction = "LR", showVersions = true, maxNodes = 50 } = options;
19
+ const lines = [`flowchart ${direction}`];
20
+ let features = result.features;
21
+ if (options.featureKeys && options.featureKeys.length > 0) features = features.filter((f) => options.featureKeys?.includes(f.key));
22
+ let nodeCount = 0;
23
+ if (features.length > 0) {
24
+ lines.push(" subgraph features [Features]");
25
+ for (const feature of features) {
26
+ if (nodeCount >= maxNodes) break;
27
+ const nodeId = sanitizeId(`F_${feature.key}`);
28
+ const label = feature.title ?? feature.key;
29
+ lines.push(` ${nodeId}["${escapeLabel(label)}"]`);
30
+ nodeCount++;
31
+ }
32
+ lines.push(" end");
33
+ }
34
+ const ops = getReferencedSpecs(features, "operations", result.inventory);
35
+ if (ops.length > 0 && nodeCount < maxNodes) {
36
+ lines.push(" subgraph ops [Operations]");
37
+ for (const op of ops) {
38
+ if (nodeCount >= maxNodes) break;
39
+ const nodeId = sanitizeId(`O_${op.key}_v${op.version}`);
40
+ const label = showVersions ? `${op.key}.v${op.version}` : op.key;
41
+ lines.push(` ${nodeId}["${escapeLabel(label)}"]`);
42
+ nodeCount++;
43
+ }
44
+ lines.push(" end");
45
+ }
46
+ const events = getReferencedSpecs(features, "events", result.inventory);
47
+ if (events.length > 0 && nodeCount < maxNodes) {
48
+ lines.push(" subgraph events [Events]");
49
+ for (const event of events) {
50
+ if (nodeCount >= maxNodes) break;
51
+ const nodeId = sanitizeId(`E_${event.key}_v${event.version}`);
52
+ const label = showVersions ? `${event.key}.v${event.version}` : event.key;
53
+ lines.push(` ${nodeId}["${escapeLabel(label)}"]`);
54
+ nodeCount++;
55
+ }
56
+ lines.push(" end");
57
+ }
58
+ const presentations = getReferencedSpecs(features, "presentations", result.inventory);
59
+ if (presentations.length > 0 && nodeCount < maxNodes) {
60
+ lines.push(" subgraph presentations [Presentations]");
61
+ for (const pres of presentations) {
62
+ if (nodeCount >= maxNodes) break;
63
+ const nodeId = sanitizeId(`P_${pres.key}_v${pres.version}`);
64
+ const label = showVersions ? `${pres.key}.v${pres.version}` : pres.key;
65
+ lines.push(` ${nodeId}["${escapeLabel(label)}"]`);
66
+ nodeCount++;
67
+ }
68
+ lines.push(" end");
69
+ }
70
+ for (const feature of features) {
71
+ const featureId = sanitizeId(`F_${feature.key}`);
72
+ for (const op of feature.operations) {
73
+ const opId = sanitizeId(`O_${op.key}_v${op.version}`);
74
+ lines.push(` ${featureId} --> ${opId}`);
75
+ }
76
+ for (const event of feature.events) {
77
+ const eventId = sanitizeId(`E_${event.key}_v${event.version}`);
78
+ lines.push(` ${featureId} -.-> ${eventId}`);
79
+ }
80
+ for (const pres of feature.presentations) {
81
+ const presId = sanitizeId(`P_${pres.key}_v${pres.version}`);
82
+ lines.push(` ${featureId} --> ${presId}`);
83
+ }
84
+ }
85
+ return lines.join("\n");
86
+ }
87
+ /**
88
+ * Generate a diagram highlighting orphaned specs.
89
+ */
90
+ function generateOrphansDiagram(result, options) {
91
+ const { direction = "TB", showVersions = true, maxNodes = 50 } = options;
92
+ const lines = [`flowchart ${direction}`];
93
+ const linkedOps = /* @__PURE__ */ new Set();
94
+ const linkedEvents = /* @__PURE__ */ new Set();
95
+ const linkedPres = /* @__PURE__ */ new Set();
96
+ for (const feature of result.features) {
97
+ for (const op of feature.operations) linkedOps.add(`${op.key}.v${op.version}`);
98
+ for (const event of feature.events) linkedEvents.add(`${event.key}.v${event.version}`);
99
+ for (const pres of feature.presentations) linkedPres.add(`${pres.key}.v${pres.version}`);
100
+ }
101
+ let nodeCount = 0;
102
+ if (result.features.length > 0) {
103
+ lines.push(" subgraph features [Features]");
104
+ for (const feature of result.features) {
105
+ if (nodeCount >= maxNodes) break;
106
+ const nodeId = sanitizeId(`F_${feature.key}`);
107
+ lines.push(` ${nodeId}["${escapeLabel(feature.title ?? feature.key)}"]`);
108
+ nodeCount++;
109
+ }
110
+ lines.push(" end");
111
+ }
112
+ if (result.orphanedSpecs.length > 0) {
113
+ lines.push(" subgraph orphaned [Orphaned Specs]");
114
+ for (const spec of result.orphanedSpecs) {
115
+ if (nodeCount >= maxNodes) break;
116
+ const nodeId = sanitizeId(`orphan_${spec.type}_${spec.key}_v${spec.version}`);
117
+ const label = showVersions ? `${spec.key}.v${spec.version}` : spec.key;
118
+ lines.push(` ${nodeId}["${escapeLabel(label)}"]`);
119
+ nodeCount++;
120
+ }
121
+ lines.push(" end");
122
+ }
123
+ const allLinked = [];
124
+ for (const opKey of linkedOps) {
125
+ const [parsedKey, parsedVersion] = parseSpecKey(opKey);
126
+ if (parsedKey && parsedVersion) allLinked.push({
127
+ type: "operation",
128
+ key: parsedKey,
129
+ version: parsedVersion
130
+ });
131
+ }
132
+ for (const eventKey of linkedEvents) {
133
+ const [parsedKey, parsedVersion] = parseSpecKey(eventKey);
134
+ if (parsedKey && parsedVersion) allLinked.push({
135
+ type: "event",
136
+ key: parsedKey,
137
+ version: parsedVersion
138
+ });
139
+ }
140
+ for (const presKey of linkedPres) {
141
+ const [parsedKey, parsedVersion] = parseSpecKey(presKey);
142
+ if (parsedKey && parsedVersion) allLinked.push({
143
+ type: "presentation",
144
+ key: parsedKey,
145
+ version: parsedVersion
146
+ });
147
+ }
148
+ if (allLinked.length > 0 && nodeCount < maxNodes) {
149
+ lines.push(" subgraph linked [Linked Specs]");
150
+ for (const spec of allLinked) {
151
+ if (nodeCount >= maxNodes) break;
152
+ const nodeId = sanitizeId(`${spec.type}_${spec.key}_v${spec.version}`);
153
+ const label = showVersions ? `${spec.key}.v${spec.version}` : spec.key;
154
+ lines.push(` ${nodeId}["${escapeLabel(label)}"]`);
155
+ nodeCount++;
156
+ }
157
+ lines.push(" end");
158
+ }
159
+ for (const feature of result.features) {
160
+ const featureId = sanitizeId(`F_${feature.key}`);
161
+ for (const op of feature.operations) {
162
+ const opId = sanitizeId(`operation_${op.key}_v${op.version}`);
163
+ lines.push(` ${featureId} --> ${opId}`);
164
+ }
165
+ for (const event of feature.events) {
166
+ const eventId = sanitizeId(`event_${event.key}_v${event.version}`);
167
+ lines.push(` ${featureId} -.-> ${eventId}`);
168
+ }
169
+ for (const pres of feature.presentations) {
170
+ const presId = sanitizeId(`presentation_${pres.key}_v${pres.version}`);
171
+ lines.push(` ${featureId} --> ${presId}`);
172
+ }
173
+ }
174
+ return lines.join("\n");
175
+ }
176
+ /**
177
+ * Generate a dependency diagram showing spec relationships.
178
+ */
179
+ function generateDependenciesDiagram(result, options) {
180
+ const { direction = "TB", showVersions = true, maxNodes = 50 } = options;
181
+ const lines = [`flowchart ${direction}`];
182
+ let nodeCount = 0;
183
+ for (const feature of result.features) {
184
+ if (nodeCount >= maxNodes) break;
185
+ const featureId = sanitizeId(`F_${feature.key}`);
186
+ lines.push(` ${featureId}["${escapeLabel(feature.title ?? feature.key)}"]`);
187
+ nodeCount++;
188
+ for (const op of feature.operations) {
189
+ if (nodeCount >= maxNodes) break;
190
+ const opId = sanitizeId(`O_${op.key}_v${op.version}`);
191
+ const label = showVersions ? `${op.key}.v${op.version}` : op.key;
192
+ lines.push(` ${opId}["${escapeLabel(label)}"]`);
193
+ lines.push(` ${featureId} --> ${opId}`);
194
+ nodeCount++;
195
+ }
196
+ for (const event of feature.events) {
197
+ if (nodeCount >= maxNodes) break;
198
+ const eventId = sanitizeId(`E_${event.key}_v${event.version}`);
199
+ const label = showVersions ? `${event.key}.v${event.version}` : event.key;
200
+ lines.push(` ${eventId}["${escapeLabel(label)}"]`);
201
+ lines.push(` ${featureId} -.-> ${eventId}`);
202
+ nodeCount++;
203
+ }
204
+ for (const pres of feature.presentations) {
205
+ if (nodeCount >= maxNodes) break;
206
+ const presId = sanitizeId(`P_${pres.key}_v${pres.version}`);
207
+ const label = showVersions ? `${pres.key}.v${pres.version}` : pres.key;
208
+ lines.push(` ${presId}["${escapeLabel(label)}"]`);
209
+ lines.push(` ${featureId} --> ${presId}`);
210
+ nodeCount++;
211
+ }
212
+ for (const link of feature.opToPresentationLinks) {
213
+ const opId = sanitizeId(`O_${link.op.key}_v${link.op.version}`);
214
+ const presId = sanitizeId(`P_${link.pres.key}_v${link.pres.version}`);
215
+ lines.push(` ${opId} --> ${presId}`);
216
+ }
217
+ }
218
+ return lines.join("\n");
219
+ }
220
+ /**
221
+ * Generate a full diagram with all relationships.
222
+ */
223
+ function generateFullDiagram(result, options) {
224
+ const featureMap = generateFeatureMapDiagram(result, options);
225
+ if (result.orphanedSpecs.length === 0) return featureMap;
226
+ const lines = featureMap.split("\n");
227
+ lines.push(" subgraph orphaned [Orphaned Specs]");
228
+ for (const spec of result.orphanedSpecs.slice(0, 20)) {
229
+ const nodeId = sanitizeId(`orphan_${spec.type}_${spec.key}_v${spec.version}`);
230
+ const label = `${spec.key}.v${spec.version}`;
231
+ lines.push(` ${nodeId}["${escapeLabel(label)}"]:::orphan`);
232
+ }
233
+ lines.push(" end");
234
+ lines.push(" classDef orphan stroke-dasharray: 5 5");
235
+ return lines.join("\n");
236
+ }
237
+ /**
238
+ * Get referenced specs from features.
239
+ */
240
+ function getReferencedSpecs(features, field, _inventory) {
241
+ const seen = /* @__PURE__ */ new Set();
242
+ const result = [];
243
+ for (const feature of features) for (const ref of feature[field]) {
244
+ const key = `${ref.key}.v${ref.version}`;
245
+ if (!seen.has(key)) {
246
+ seen.add(key);
247
+ result.push(ref);
248
+ }
249
+ }
250
+ return result;
251
+ }
252
+ /**
253
+ * Parse a spec key like "name.v1" into [name, version].
254
+ */
255
+ function parseSpecKey(key) {
256
+ const match = key.match(/^(.+)\.v(\d+)$/);
257
+ if (!match) return [void 0, void 0];
258
+ return [match[1], Number(match[2])];
259
+ }
260
+ /**
261
+ * Sanitize an ID for use in Mermaid.
262
+ */
263
+ function sanitizeId(id) {
264
+ return id.replace(/[^a-zA-Z0-9_]/g, "_");
265
+ }
266
+ /**
267
+ * Escape a label for use in Mermaid.
268
+ */
269
+ function escapeLabel(label) {
270
+ return label.replace(/"/g, "'").replace(/\[/g, "(").replace(/\]/g, ")").replace(/\{/g, "(").replace(/\}/g, ")");
271
+ }
272
+
273
+ //#endregion
274
+ export { generateMermaidDiagram };
275
+ //# sourceMappingURL=integrity-diagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity-diagram.js","names":["lines: string[]","allLinked: { type: string; key: string; version: number }[]","result: { key: string; version: number }[]"],"sources":["../../src/services/integrity-diagram.ts"],"sourcesContent":["/**\n * Mermaid diagram generation for integrity analysis.\n *\n * Generates visual diagrams showing:\n * - Feature to spec relationships\n * - Orphaned specs\n * - Dependency graphs\n */\n\nimport type { IntegrityAnalysisResult, SpecInventory } from './integrity';\nimport type { FeatureScanResult } from '@contractspec/module.workspace';\n\n/**\n * Type of diagram to generate.\n */\nexport type DiagramType = 'feature-map' | 'orphans' | 'dependencies' | 'full';\n\n/**\n * Options for diagram generation.\n */\nexport interface DiagramOptions {\n /**\n * Maximum number of nodes to display.\n */\n maxNodes?: number;\n\n /**\n * Include only specific features.\n */\n featureKeys?: string[];\n\n /**\n * Show spec versions in labels.\n */\n showVersions?: boolean;\n\n /**\n * Direction for the flowchart.\n */\n direction?: 'LR' | 'TB' | 'RL' | 'BT';\n}\n\n/**\n * Generate a Mermaid diagram from integrity analysis results.\n */\nexport function generateMermaidDiagram(\n result: IntegrityAnalysisResult,\n type: DiagramType = 'feature-map',\n options: DiagramOptions = {}\n): string {\n switch (type) {\n case 'feature-map':\n return generateFeatureMapDiagram(result, options);\n case 'orphans':\n return generateOrphansDiagram(result, options);\n case 'dependencies':\n return generateDependenciesDiagram(result, options);\n case 'full':\n return generateFullDiagram(result, options);\n default:\n return generateFeatureMapDiagram(result, options);\n }\n}\n\n/**\n * Generate a feature map diagram showing features and their linked specs.\n */\nfunction generateFeatureMapDiagram(\n result: IntegrityAnalysisResult,\n options: DiagramOptions\n): string {\n const { direction = 'LR', showVersions = true, maxNodes = 50 } = options;\n const lines: string[] = [`flowchart ${direction}`];\n\n // Filter features if specified\n let features = result.features;\n if (options.featureKeys && options.featureKeys.length > 0) {\n features = features.filter((f) => options.featureKeys?.includes(f.key));\n }\n\n // Track node count\n let nodeCount = 0;\n const truncated = false;\n\n // Add features subgraph\n if (features.length > 0) {\n lines.push(' subgraph features [Features]');\n for (const feature of features) {\n if (nodeCount >= maxNodes) break;\n const nodeId = sanitizeId(`F_${feature.key}`);\n const label = feature.title ?? feature.key;\n lines.push(` ${nodeId}[\"${escapeLabel(label)}\"]`);\n nodeCount++;\n }\n lines.push(' end');\n }\n\n // Add operations subgraph\n const ops = getReferencedSpecs(features, 'operations', result.inventory);\n if (ops.length > 0 && nodeCount < maxNodes) {\n lines.push(' subgraph ops [Operations]');\n for (const op of ops) {\n if (nodeCount >= maxNodes) break;\n const nodeId = sanitizeId(`O_${op.key}_v${op.version}`);\n const label = showVersions ? `${op.key}.v${op.version}` : op.key;\n lines.push(` ${nodeId}[\"${escapeLabel(label)}\"]`);\n nodeCount++;\n }\n lines.push(' end');\n }\n\n // Add events subgraph\n const events = getReferencedSpecs(features, 'events', result.inventory);\n if (events.length > 0 && nodeCount < maxNodes) {\n lines.push(' subgraph events [Events]');\n for (const event of events) {\n if (nodeCount >= maxNodes) break;\n const nodeId = sanitizeId(`E_${event.key}_v${event.version}`);\n const label = showVersions ? `${event.key}.v${event.version}` : event.key;\n lines.push(` ${nodeId}[\"${escapeLabel(label)}\"]`);\n nodeCount++;\n }\n lines.push(' end');\n }\n\n // Add presentations subgraph\n const presentations = getReferencedSpecs(\n features,\n 'presentations',\n result.inventory\n );\n if (presentations.length > 0 && nodeCount < maxNodes) {\n lines.push(' subgraph presentations [Presentations]');\n for (const pres of presentations) {\n if (nodeCount >= maxNodes) break;\n const nodeId = sanitizeId(`P_${pres.key}_v${pres.version}`);\n const label = showVersions ? `${pres.key}.v${pres.version}` : pres.key;\n lines.push(` ${nodeId}[\"${escapeLabel(label)}\"]`);\n nodeCount++;\n }\n lines.push(' end');\n }\n\n // Add edges from features to specs\n for (const feature of features) {\n const featureId = sanitizeId(`F_${feature.key}`);\n\n for (const op of feature.operations) {\n const opId = sanitizeId(`O_${op.key}_v${op.version}`);\n lines.push(` ${featureId} --> ${opId}`);\n }\n\n for (const event of feature.events) {\n const eventId = sanitizeId(`E_${event.key}_v${event.version}`);\n lines.push(` ${featureId} -.-> ${eventId}`);\n }\n\n for (const pres of feature.presentations) {\n const presId = sanitizeId(`P_${pres.key}_v${pres.version}`);\n lines.push(` ${featureId} --> ${presId}`);\n }\n }\n\n if (truncated) {\n lines.push(` note[\"... and more (truncated at ${maxNodes} nodes)\"]`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate a diagram highlighting orphaned specs.\n */\nfunction generateOrphansDiagram(\n result: IntegrityAnalysisResult,\n options: DiagramOptions\n): string {\n const { direction = 'TB', showVersions = true, maxNodes = 50 } = options;\n const lines: string[] = [`flowchart ${direction}`];\n\n // Add linked specs\n const linkedOps = new Set<string>();\n const linkedEvents = new Set<string>();\n const linkedPres = new Set<string>();\n\n for (const feature of result.features) {\n for (const op of feature.operations) {\n linkedOps.add(`${op.key}.v${op.version}`);\n }\n for (const event of feature.events) {\n linkedEvents.add(`${event.key}.v${event.version}`);\n }\n for (const pres of feature.presentations) {\n linkedPres.add(`${pres.key}.v${pres.version}`);\n }\n }\n\n let nodeCount = 0;\n\n // Add features\n if (result.features.length > 0) {\n lines.push(' subgraph features [Features]');\n for (const feature of result.features) {\n if (nodeCount >= maxNodes) break;\n const nodeId = sanitizeId(`F_${feature.key}`);\n lines.push(\n ` ${nodeId}[\"${escapeLabel(feature.title ?? feature.key)}\"]`\n );\n nodeCount++;\n }\n lines.push(' end');\n }\n\n // Add orphaned specs\n if (result.orphanedSpecs.length > 0) {\n lines.push(' subgraph orphaned [Orphaned Specs]');\n for (const spec of result.orphanedSpecs) {\n if (nodeCount >= maxNodes) break;\n const nodeId = sanitizeId(\n `orphan_${spec.type}_${spec.key}_v${spec.version}`\n );\n const label = showVersions ? `${spec.key}.v${spec.version}` : spec.key;\n lines.push(` ${nodeId}[\"${escapeLabel(label)}\"]`);\n nodeCount++;\n }\n lines.push(' end');\n }\n\n // Add linked specs\n const allLinked: { type: string; key: string; version: number }[] = [];\n\n for (const opKey of linkedOps) {\n const [parsedKey, parsedVersion] = parseSpecKey(opKey);\n if (parsedKey && parsedVersion) {\n allLinked.push({\n type: 'operation',\n key: parsedKey,\n version: parsedVersion,\n });\n }\n }\n\n for (const eventKey of linkedEvents) {\n const [parsedKey, parsedVersion] = parseSpecKey(eventKey);\n if (parsedKey && parsedVersion) {\n allLinked.push({ type: 'event', key: parsedKey, version: parsedVersion });\n }\n }\n\n for (const presKey of linkedPres) {\n const [parsedKey, parsedVersion] = parseSpecKey(presKey);\n if (parsedKey && parsedVersion) {\n allLinked.push({\n type: 'presentation',\n key: parsedKey,\n version: parsedVersion,\n });\n }\n }\n\n if (allLinked.length > 0 && nodeCount < maxNodes) {\n lines.push(' subgraph linked [Linked Specs]');\n for (const spec of allLinked) {\n if (nodeCount >= maxNodes) break;\n const nodeId = sanitizeId(`${spec.type}_${spec.key}_v${spec.version}`);\n const label = showVersions ? `${spec.key}.v${spec.version}` : spec.key;\n lines.push(` ${nodeId}[\"${escapeLabel(label)}\"]`);\n nodeCount++;\n }\n lines.push(' end');\n }\n\n // Add edges from features to linked specs\n for (const feature of result.features) {\n const featureId = sanitizeId(`F_${feature.key}`);\n\n for (const op of feature.operations) {\n const opId = sanitizeId(`operation_${op.key}_v${op.version}`);\n lines.push(` ${featureId} --> ${opId}`);\n }\n\n for (const event of feature.events) {\n const eventId = sanitizeId(`event_${event.key}_v${event.version}`);\n lines.push(` ${featureId} -.-> ${eventId}`);\n }\n\n for (const pres of feature.presentations) {\n const presId = sanitizeId(`presentation_${pres.key}_v${pres.version}`);\n lines.push(` ${featureId} --> ${presId}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate a dependency diagram showing spec relationships.\n */\nfunction generateDependenciesDiagram(\n result: IntegrityAnalysisResult,\n options: DiagramOptions\n): string {\n const { direction = 'TB', showVersions = true, maxNodes = 50 } = options;\n const lines: string[] = [`flowchart ${direction}`];\n\n let nodeCount = 0;\n\n // Show features and their deep dependencies\n for (const feature of result.features) {\n if (nodeCount >= maxNodes) break;\n\n const featureId = sanitizeId(`F_${feature.key}`);\n lines.push(\n ` ${featureId}[\"${escapeLabel(feature.title ?? feature.key)}\"]`\n );\n nodeCount++;\n\n // Add operations\n for (const op of feature.operations) {\n if (nodeCount >= maxNodes) break;\n const opId = sanitizeId(`O_${op.key}_v${op.version}`);\n const label = showVersions ? `${op.key}.v${op.version}` : op.key;\n lines.push(` ${opId}[\"${escapeLabel(label)}\"]`);\n lines.push(` ${featureId} --> ${opId}`);\n nodeCount++;\n }\n\n // Add events (linked from feature)\n for (const event of feature.events) {\n if (nodeCount >= maxNodes) break;\n const eventId = sanitizeId(`E_${event.key}_v${event.version}`);\n const label = showVersions ? `${event.key}.v${event.version}` : event.key;\n lines.push(` ${eventId}[\"${escapeLabel(label)}\"]`);\n lines.push(` ${featureId} -.-> ${eventId}`);\n nodeCount++;\n }\n\n // Add presentations\n for (const pres of feature.presentations) {\n if (nodeCount >= maxNodes) break;\n const presId = sanitizeId(`P_${pres.key}_v${pres.version}`);\n const label = showVersions ? `${pres.key}.v${pres.version}` : pres.key;\n lines.push(` ${presId}[\"${escapeLabel(label)}\"]`);\n lines.push(` ${featureId} --> ${presId}`);\n nodeCount++;\n }\n\n // Add op to presentation links\n for (const link of feature.opToPresentationLinks) {\n const opId = sanitizeId(`O_${link.op.key}_v${link.op.version}`);\n const presId = sanitizeId(`P_${link.pres.key}_v${link.pres.version}`);\n lines.push(` ${opId} --> ${presId}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate a full diagram with all relationships.\n */\nfunction generateFullDiagram(\n result: IntegrityAnalysisResult,\n options: DiagramOptions\n): string {\n // For full diagrams, combine feature-map with orphans\n const featureMap = generateFeatureMapDiagram(result, options);\n\n // Add orphaned specs if any\n if (result.orphanedSpecs.length === 0) {\n return featureMap;\n }\n\n const lines = featureMap.split('\\n');\n\n // Insert orphaned specs subgraph before the end\n lines.push(' subgraph orphaned [Orphaned Specs]');\n\n for (const spec of result.orphanedSpecs.slice(0, 20)) {\n const nodeId = sanitizeId(\n `orphan_${spec.type}_${spec.key}_v${spec.version}`\n );\n const label = `${spec.key}.v${spec.version}`;\n lines.push(` ${nodeId}[\"${escapeLabel(label)}\"]:::orphan`);\n }\n\n lines.push(' end');\n\n // Add styling for orphaned nodes\n lines.push(' classDef orphan stroke-dasharray: 5 5');\n\n return lines.join('\\n');\n}\n\n/**\n * Get referenced specs from features.\n */\nfunction getReferencedSpecs(\n features: FeatureScanResult[],\n field: 'operations' | 'events' | 'presentations',\n _inventory: SpecInventory\n): { key: string; version: number }[] {\n const seen = new Set<string>();\n const result: { key: string; version: number }[] = [];\n\n for (const feature of features) {\n for (const ref of feature[field]) {\n const key = `${ref.key}.v${ref.version}`;\n if (!seen.has(key)) {\n seen.add(key);\n result.push(ref);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Parse a spec key like \"name.v1\" into [name, version].\n */\nfunction parseSpecKey(key: string): [string | undefined, number | undefined] {\n const match = key.match(/^(.+)\\.v(\\d+)$/);\n if (!match) return [undefined, undefined];\n return [match[1], Number(match[2])];\n}\n\n/**\n * Sanitize an ID for use in Mermaid.\n */\nfunction sanitizeId(id: string): string {\n return id.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\n/**\n * Escape a label for use in Mermaid.\n */\nfunction escapeLabel(label: string): string {\n return label\n .replace(/\"/g, \"'\")\n .replace(/\\[/g, '(')\n .replace(/\\]/g, ')')\n .replace(/\\{/g, '(')\n .replace(/\\}/g, ')');\n}\n"],"mappings":";;;;AA6CA,SAAgB,uBACd,QACA,OAAoB,eACpB,UAA0B,EAAE,EACpB;AACR,SAAQ,MAAR;EACE,KAAK,cACH,QAAO,0BAA0B,QAAQ,QAAQ;EACnD,KAAK,UACH,QAAO,uBAAuB,QAAQ,QAAQ;EAChD,KAAK,eACH,QAAO,4BAA4B,QAAQ,QAAQ;EACrD,KAAK,OACH,QAAO,oBAAoB,QAAQ,QAAQ;EAC7C,QACE,QAAO,0BAA0B,QAAQ,QAAQ;;;;;;AAOvD,SAAS,0BACP,QACA,SACQ;CACR,MAAM,EAAE,YAAY,MAAM,eAAe,MAAM,WAAW,OAAO;CACjE,MAAMA,QAAkB,CAAC,aAAa,YAAY;CAGlD,IAAI,WAAW,OAAO;AACtB,KAAI,QAAQ,eAAe,QAAQ,YAAY,SAAS,EACtD,YAAW,SAAS,QAAQ,MAAM,QAAQ,aAAa,SAAS,EAAE,IAAI,CAAC;CAIzE,IAAI,YAAY;AAIhB,KAAI,SAAS,SAAS,GAAG;AACvB,QAAM,KAAK,mCAAmC;AAC9C,OAAK,MAAM,WAAW,UAAU;AAC9B,OAAI,aAAa,SAAU;GAC3B,MAAM,SAAS,WAAW,KAAK,QAAQ,MAAM;GAC7C,MAAM,QAAQ,QAAQ,SAAS,QAAQ;AACvC,SAAM,KAAK,WAAW,OAAO,IAAI,YAAY,MAAM,CAAC,IAAI;AACxD;;AAEF,QAAM,KAAK,UAAU;;CAIvB,MAAM,MAAM,mBAAmB,UAAU,cAAc,OAAO,UAAU;AACxE,KAAI,IAAI,SAAS,KAAK,YAAY,UAAU;AAC1C,QAAM,KAAK,gCAAgC;AAC3C,OAAK,MAAM,MAAM,KAAK;AACpB,OAAI,aAAa,SAAU;GAC3B,MAAM,SAAS,WAAW,KAAK,GAAG,IAAI,IAAI,GAAG,UAAU;GACvD,MAAM,QAAQ,eAAe,GAAG,GAAG,IAAI,IAAI,GAAG,YAAY,GAAG;AAC7D,SAAM,KAAK,WAAW,OAAO,IAAI,YAAY,MAAM,CAAC,IAAI;AACxD;;AAEF,QAAM,KAAK,UAAU;;CAIvB,MAAM,SAAS,mBAAmB,UAAU,UAAU,OAAO,UAAU;AACvE,KAAI,OAAO,SAAS,KAAK,YAAY,UAAU;AAC7C,QAAM,KAAK,+BAA+B;AAC1C,OAAK,MAAM,SAAS,QAAQ;AAC1B,OAAI,aAAa,SAAU;GAC3B,MAAM,SAAS,WAAW,KAAK,MAAM,IAAI,IAAI,MAAM,UAAU;GAC7D,MAAM,QAAQ,eAAe,GAAG,MAAM,IAAI,IAAI,MAAM,YAAY,MAAM;AACtE,SAAM,KAAK,WAAW,OAAO,IAAI,YAAY,MAAM,CAAC,IAAI;AACxD;;AAEF,QAAM,KAAK,UAAU;;CAIvB,MAAM,gBAAgB,mBACpB,UACA,iBACA,OAAO,UACR;AACD,KAAI,cAAc,SAAS,KAAK,YAAY,UAAU;AACpD,QAAM,KAAK,6CAA6C;AACxD,OAAK,MAAM,QAAQ,eAAe;AAChC,OAAI,aAAa,SAAU;GAC3B,MAAM,SAAS,WAAW,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU;GAC3D,MAAM,QAAQ,eAAe,GAAG,KAAK,IAAI,IAAI,KAAK,YAAY,KAAK;AACnE,SAAM,KAAK,WAAW,OAAO,IAAI,YAAY,MAAM,CAAC,IAAI;AACxD;;AAEF,QAAM,KAAK,UAAU;;AAIvB,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,YAAY,WAAW,KAAK,QAAQ,MAAM;AAEhD,OAAK,MAAM,MAAM,QAAQ,YAAY;GACnC,MAAM,OAAO,WAAW,KAAK,GAAG,IAAI,IAAI,GAAG,UAAU;AACrD,SAAM,KAAK,OAAO,UAAU,OAAO,OAAO;;AAG5C,OAAK,MAAM,SAAS,QAAQ,QAAQ;GAClC,MAAM,UAAU,WAAW,KAAK,MAAM,IAAI,IAAI,MAAM,UAAU;AAC9D,SAAM,KAAK,OAAO,UAAU,QAAQ,UAAU;;AAGhD,OAAK,MAAM,QAAQ,QAAQ,eAAe;GACxC,MAAM,SAAS,WAAW,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU;AAC3D,SAAM,KAAK,OAAO,UAAU,OAAO,SAAS;;;AAQhD,QAAO,MAAM,KAAK,KAAK;;;;;AAMzB,SAAS,uBACP,QACA,SACQ;CACR,MAAM,EAAE,YAAY,MAAM,eAAe,MAAM,WAAW,OAAO;CACjE,MAAMA,QAAkB,CAAC,aAAa,YAAY;CAGlD,MAAM,4BAAY,IAAI,KAAa;CACnC,MAAM,+BAAe,IAAI,KAAa;CACtC,MAAM,6BAAa,IAAI,KAAa;AAEpC,MAAK,MAAM,WAAW,OAAO,UAAU;AACrC,OAAK,MAAM,MAAM,QAAQ,WACvB,WAAU,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,UAAU;AAE3C,OAAK,MAAM,SAAS,QAAQ,OAC1B,cAAa,IAAI,GAAG,MAAM,IAAI,IAAI,MAAM,UAAU;AAEpD,OAAK,MAAM,QAAQ,QAAQ,cACzB,YAAW,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,UAAU;;CAIlD,IAAI,YAAY;AAGhB,KAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,QAAM,KAAK,mCAAmC;AAC9C,OAAK,MAAM,WAAW,OAAO,UAAU;AACrC,OAAI,aAAa,SAAU;GAC3B,MAAM,SAAS,WAAW,KAAK,QAAQ,MAAM;AAC7C,SAAM,KACJ,WAAW,OAAO,IAAI,YAAY,QAAQ,SAAS,QAAQ,IAAI,CAAC,IACjE;AACD;;AAEF,QAAM,KAAK,UAAU;;AAIvB,KAAI,OAAO,cAAc,SAAS,GAAG;AACnC,QAAM,KAAK,yCAAyC;AACpD,OAAK,MAAM,QAAQ,OAAO,eAAe;AACvC,OAAI,aAAa,SAAU;GAC3B,MAAM,SAAS,WACb,UAAU,KAAK,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,UAC1C;GACD,MAAM,QAAQ,eAAe,GAAG,KAAK,IAAI,IAAI,KAAK,YAAY,KAAK;AACnE,SAAM,KAAK,WAAW,OAAO,IAAI,YAAY,MAAM,CAAC,IAAI;AACxD;;AAEF,QAAM,KAAK,UAAU;;CAIvB,MAAMC,YAA8D,EAAE;AAEtE,MAAK,MAAM,SAAS,WAAW;EAC7B,MAAM,CAAC,WAAW,iBAAiB,aAAa,MAAM;AACtD,MAAI,aAAa,cACf,WAAU,KAAK;GACb,MAAM;GACN,KAAK;GACL,SAAS;GACV,CAAC;;AAIN,MAAK,MAAM,YAAY,cAAc;EACnC,MAAM,CAAC,WAAW,iBAAiB,aAAa,SAAS;AACzD,MAAI,aAAa,cACf,WAAU,KAAK;GAAE,MAAM;GAAS,KAAK;GAAW,SAAS;GAAe,CAAC;;AAI7E,MAAK,MAAM,WAAW,YAAY;EAChC,MAAM,CAAC,WAAW,iBAAiB,aAAa,QAAQ;AACxD,MAAI,aAAa,cACf,WAAU,KAAK;GACb,MAAM;GACN,KAAK;GACL,SAAS;GACV,CAAC;;AAIN,KAAI,UAAU,SAAS,KAAK,YAAY,UAAU;AAChD,QAAM,KAAK,qCAAqC;AAChD,OAAK,MAAM,QAAQ,WAAW;AAC5B,OAAI,aAAa,SAAU;GAC3B,MAAM,SAAS,WAAW,GAAG,KAAK,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,UAAU;GACtE,MAAM,QAAQ,eAAe,GAAG,KAAK,IAAI,IAAI,KAAK,YAAY,KAAK;AACnE,SAAM,KAAK,WAAW,OAAO,IAAI,YAAY,MAAM,CAAC,IAAI;AACxD;;AAEF,QAAM,KAAK,UAAU;;AAIvB,MAAK,MAAM,WAAW,OAAO,UAAU;EACrC,MAAM,YAAY,WAAW,KAAK,QAAQ,MAAM;AAEhD,OAAK,MAAM,MAAM,QAAQ,YAAY;GACnC,MAAM,OAAO,WAAW,aAAa,GAAG,IAAI,IAAI,GAAG,UAAU;AAC7D,SAAM,KAAK,OAAO,UAAU,OAAO,OAAO;;AAG5C,OAAK,MAAM,SAAS,QAAQ,QAAQ;GAClC,MAAM,UAAU,WAAW,SAAS,MAAM,IAAI,IAAI,MAAM,UAAU;AAClE,SAAM,KAAK,OAAO,UAAU,QAAQ,UAAU;;AAGhD,OAAK,MAAM,QAAQ,QAAQ,eAAe;GACxC,MAAM,SAAS,WAAW,gBAAgB,KAAK,IAAI,IAAI,KAAK,UAAU;AACtE,SAAM,KAAK,OAAO,UAAU,OAAO,SAAS;;;AAIhD,QAAO,MAAM,KAAK,KAAK;;;;;AAMzB,SAAS,4BACP,QACA,SACQ;CACR,MAAM,EAAE,YAAY,MAAM,eAAe,MAAM,WAAW,OAAO;CACjE,MAAMD,QAAkB,CAAC,aAAa,YAAY;CAElD,IAAI,YAAY;AAGhB,MAAK,MAAM,WAAW,OAAO,UAAU;AACrC,MAAI,aAAa,SAAU;EAE3B,MAAM,YAAY,WAAW,KAAK,QAAQ,MAAM;AAChD,QAAM,KACJ,OAAO,UAAU,IAAI,YAAY,QAAQ,SAAS,QAAQ,IAAI,CAAC,IAChE;AACD;AAGA,OAAK,MAAM,MAAM,QAAQ,YAAY;AACnC,OAAI,aAAa,SAAU;GAC3B,MAAM,OAAO,WAAW,KAAK,GAAG,IAAI,IAAI,GAAG,UAAU;GACrD,MAAM,QAAQ,eAAe,GAAG,GAAG,IAAI,IAAI,GAAG,YAAY,GAAG;AAC7D,SAAM,KAAK,OAAO,KAAK,IAAI,YAAY,MAAM,CAAC,IAAI;AAClD,SAAM,KAAK,OAAO,UAAU,OAAO,OAAO;AAC1C;;AAIF,OAAK,MAAM,SAAS,QAAQ,QAAQ;AAClC,OAAI,aAAa,SAAU;GAC3B,MAAM,UAAU,WAAW,KAAK,MAAM,IAAI,IAAI,MAAM,UAAU;GAC9D,MAAM,QAAQ,eAAe,GAAG,MAAM,IAAI,IAAI,MAAM,YAAY,MAAM;AACtE,SAAM,KAAK,OAAO,QAAQ,IAAI,YAAY,MAAM,CAAC,IAAI;AACrD,SAAM,KAAK,OAAO,UAAU,QAAQ,UAAU;AAC9C;;AAIF,OAAK,MAAM,QAAQ,QAAQ,eAAe;AACxC,OAAI,aAAa,SAAU;GAC3B,MAAM,SAAS,WAAW,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU;GAC3D,MAAM,QAAQ,eAAe,GAAG,KAAK,IAAI,IAAI,KAAK,YAAY,KAAK;AACnE,SAAM,KAAK,OAAO,OAAO,IAAI,YAAY,MAAM,CAAC,IAAI;AACpD,SAAM,KAAK,OAAO,UAAU,OAAO,SAAS;AAC5C;;AAIF,OAAK,MAAM,QAAQ,QAAQ,uBAAuB;GAChD,MAAM,OAAO,WAAW,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,UAAU;GAC/D,MAAM,SAAS,WAAW,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,UAAU;AACrE,SAAM,KAAK,OAAO,KAAK,OAAO,SAAS;;;AAI3C,QAAO,MAAM,KAAK,KAAK;;;;;AAMzB,SAAS,oBACP,QACA,SACQ;CAER,MAAM,aAAa,0BAA0B,QAAQ,QAAQ;AAG7D,KAAI,OAAO,cAAc,WAAW,EAClC,QAAO;CAGT,MAAM,QAAQ,WAAW,MAAM,KAAK;AAGpC,OAAM,KAAK,yCAAyC;AAEpD,MAAK,MAAM,QAAQ,OAAO,cAAc,MAAM,GAAG,GAAG,EAAE;EACpD,MAAM,SAAS,WACb,UAAU,KAAK,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,UAC1C;EACD,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,KAAK;AACnC,QAAM,KAAK,WAAW,OAAO,IAAI,YAAY,MAAM,CAAC,aAAa;;AAGnE,OAAM,KAAK,UAAU;AAGrB,OAAM,KAAK,4CAA4C;AAEvD,QAAO,MAAM,KAAK,KAAK;;;;;AAMzB,SAAS,mBACP,UACA,OACA,YACoC;CACpC,MAAM,uBAAO,IAAI,KAAa;CAC9B,MAAME,SAA6C,EAAE;AAErD,MAAK,MAAM,WAAW,SACpB,MAAK,MAAM,OAAO,QAAQ,QAAQ;EAChC,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI;AAC/B,MAAI,CAAC,KAAK,IAAI,IAAI,EAAE;AAClB,QAAK,IAAI,IAAI;AACb,UAAO,KAAK,IAAI;;;AAKtB,QAAO;;;;;AAMT,SAAS,aAAa,KAAuD;CAC3E,MAAM,QAAQ,IAAI,MAAM,iBAAiB;AACzC,KAAI,CAAC,MAAO,QAAO,CAAC,QAAW,OAAU;AACzC,QAAO,CAAC,MAAM,IAAI,OAAO,MAAM,GAAG,CAAC;;;;;AAMrC,SAAS,WAAW,IAAoB;AACtC,QAAO,GAAG,QAAQ,kBAAkB,IAAI;;;;;AAM1C,SAAS,YAAY,OAAuB;AAC1C,QAAO,MACJ,QAAQ,MAAM,IAAI,CAClB,QAAQ,OAAO,IAAI,CACnB,QAAQ,OAAO,IAAI,CACnB,QAAQ,OAAO,IAAI,CACnB,QAAQ,OAAO,IAAI"}