@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,57 @@
1
+ //#region src/services/quickstart/dependencies.ts
2
+ /**
3
+ * Minimal dependencies required for ContractSpec to work.
4
+ *
5
+ * This is the absolute minimum needed to define and use contracts.
6
+ */
7
+ const MINIMAL_DEPENDENCIES = [{
8
+ name: "@contractspec/lib.contracts",
9
+ description: "Core ContractSpec library for defining commands, queries, and events"
10
+ }, {
11
+ name: "zod",
12
+ description: "Schema validation library (peer dependency)"
13
+ }];
14
+ /**
15
+ * Full dependencies for a complete ContractSpec setup.
16
+ *
17
+ * Includes development tools and extended libraries.
18
+ */
19
+ const FULL_DEPENDENCIES = [
20
+ ...MINIMAL_DEPENDENCIES,
21
+ {
22
+ name: "@contractspec/lib.schema",
23
+ description: "Extended schema utilities and common types"
24
+ },
25
+ {
26
+ name: "@contractspec/app.cli-contractspec",
27
+ dev: true,
28
+ description: "ContractSpec CLI for validation, scaffolding, and code generation"
29
+ },
30
+ {
31
+ name: "typescript",
32
+ dev: true,
33
+ description: "TypeScript compiler for type checking"
34
+ }
35
+ ];
36
+ /**
37
+ * Get dependencies for the specified mode.
38
+ */
39
+ function getDependencies(mode) {
40
+ return mode === "minimal" ? MINIMAL_DEPENDENCIES : FULL_DEPENDENCIES;
41
+ }
42
+ /**
43
+ * Get production dependencies (non-dev).
44
+ */
45
+ function getProductionDependencies(dependencies) {
46
+ return dependencies.filter((dep) => !dep.dev);
47
+ }
48
+ /**
49
+ * Get development dependencies.
50
+ */
51
+ function getDevDependencies(dependencies) {
52
+ return dependencies.filter((dep) => dep.dev);
53
+ }
54
+
55
+ //#endregion
56
+ export { FULL_DEPENDENCIES, MINIMAL_DEPENDENCIES, getDependencies, getDevDependencies, getProductionDependencies };
57
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","names":["MINIMAL_DEPENDENCIES: QuickstartDependency[]","FULL_DEPENDENCIES: QuickstartDependency[]"],"sources":["../../../src/services/quickstart/dependencies.ts"],"sourcesContent":["/**\n * Quickstart dependencies configuration.\n *\n * Defines the minimal and full sets of packages needed\n * for ContractSpec to work.\n */\n\nimport type { QuickstartDependency } from './types';\n\n/**\n * Minimal dependencies required for ContractSpec to work.\n *\n * This is the absolute minimum needed to define and use contracts.\n */\nexport const MINIMAL_DEPENDENCIES: QuickstartDependency[] = [\n {\n name: '@contractspec/lib.contracts',\n description:\n 'Core ContractSpec library for defining commands, queries, and events',\n },\n {\n name: 'zod',\n description: 'Schema validation library (peer dependency)',\n },\n];\n\n/**\n * Full dependencies for a complete ContractSpec setup.\n *\n * Includes development tools and extended libraries.\n */\nexport const FULL_DEPENDENCIES: QuickstartDependency[] = [\n // Core dependencies (from minimal)\n ...MINIMAL_DEPENDENCIES,\n // Extended schema utilities\n {\n name: '@contractspec/lib.schema',\n description: 'Extended schema utilities and common types',\n },\n // Development tools\n {\n name: '@contractspec/app.cli-contractspec',\n dev: true,\n description:\n 'ContractSpec CLI for validation, scaffolding, and code generation',\n },\n {\n name: 'typescript',\n dev: true,\n description: 'TypeScript compiler for type checking',\n },\n];\n\n/**\n * Get dependencies for the specified mode.\n */\nexport function getDependencies(\n mode: 'minimal' | 'full'\n): QuickstartDependency[] {\n return mode === 'minimal' ? MINIMAL_DEPENDENCIES : FULL_DEPENDENCIES;\n}\n\n/**\n * Get production dependencies (non-dev).\n */\nexport function getProductionDependencies(\n dependencies: QuickstartDependency[]\n): QuickstartDependency[] {\n return dependencies.filter((dep) => !dep.dev);\n}\n\n/**\n * Get development dependencies.\n */\nexport function getDevDependencies(\n dependencies: QuickstartDependency[]\n): QuickstartDependency[] {\n return dependencies.filter((dep) => dep.dev);\n}\n"],"mappings":";;;;;;AAcA,MAAaA,uBAA+C,CAC1D;CACE,MAAM;CACN,aACE;CACH,EACD;CACE,MAAM;CACN,aAAa;CACd,CACF;;;;;;AAOD,MAAaC,oBAA4C;CAEvD,GAAG;CAEH;EACE,MAAM;EACN,aAAa;EACd;CAED;EACE,MAAM;EACN,KAAK;EACL,aACE;EACH;CACD;EACE,MAAM;EACN,KAAK;EACL,aAAa;EACd;CACF;;;;AAKD,SAAgB,gBACd,MACwB;AACxB,QAAO,SAAS,YAAY,uBAAuB;;;;;AAMrD,SAAgB,0BACd,cACwB;AACxB,QAAO,aAAa,QAAQ,QAAQ,CAAC,IAAI,IAAI;;;;;AAM/C,SAAgB,mBACd,cACwB;AACxB,QAAO,aAAa,QAAQ,QAAQ,IAAI,IAAI"}
@@ -0,0 +1,2 @@
1
+ import { FULL_DEPENDENCIES, MINIMAL_DEPENDENCIES, getDependencies, getDevDependencies, getProductionDependencies } from "./dependencies.js";
2
+ import { formatQuickstartPreview, isContractSpecInstalled, runQuickstart } from "./quickstart-service.js";
@@ -0,0 +1,20 @@
1
+ import { FsAdapter } from "../../ports/fs.js";
2
+ import { QuickstartOptions, QuickstartPromptCallbacks, QuickstartResult } from "./types.js";
3
+
4
+ //#region src/services/quickstart/quickstart-service.d.ts
5
+
6
+ /**
7
+ * Run the ContractSpec quickstart installation.
8
+ */
9
+ declare function runQuickstart(fs: FsAdapter, options: QuickstartOptions, prompts?: QuickstartPromptCallbacks): Promise<QuickstartResult>;
10
+ /**
11
+ * Check if ContractSpec is already set up in the workspace.
12
+ */
13
+ declare function isContractSpecInstalled(fs: FsAdapter, workspaceRoot: string): Promise<boolean>;
14
+ /**
15
+ * Get a summary of what would be installed.
16
+ */
17
+ declare function formatQuickstartPreview(mode: 'minimal' | 'full'): string;
18
+ //#endregion
19
+ export { formatQuickstartPreview, isContractSpecInstalled, runQuickstart };
20
+ //# sourceMappingURL=quickstart-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart-service.d.ts","names":[],"sources":["../../../src/services/quickstart/quickstart-service.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAwQsB,iBA/NA,aAAA,CA+NuB,EAAA,EA9NvC,SA+NA,EAAA,OAEH,EAhOQ,iBAgOD,EAAA,OAAA,CAAA,EA/NC,yBA+ND,CAAA,EA9NP,OA8NO,CA9NC,gBA8ND,CAAA;AAwBV;;;iBA3BsB,uBAAA,KAChB,mCAEH;;;;iBAwBa,uBAAA"}
@@ -0,0 +1,196 @@
1
+ import { detectPackageManager, getInstallCommand } from "../../adapters/workspace.js";
2
+ import { getDependencies, getDevDependencies, getProductionDependencies } from "./dependencies.js";
3
+ import { exec } from "node:child_process";
4
+ import { promisify } from "node:util";
5
+
6
+ //#region src/services/quickstart/quickstart-service.ts
7
+ /**
8
+ * Quickstart service.
9
+ *
10
+ * Orchestrates the installation of minimal necessary packages
11
+ * for ContractSpec to work across CLI, VS Code, and JetBrains.
12
+ */
13
+ const execAsync = promisify(exec);
14
+ /**
15
+ * Default prompt callbacks that accept all defaults.
16
+ */
17
+ const defaultPrompts = {
18
+ confirm: async () => true,
19
+ select: async (_msg, options) => options[0]?.value ?? ""
20
+ };
21
+ /**
22
+ * Run the ContractSpec quickstart installation.
23
+ */
24
+ async function runQuickstart(fs, options, prompts = defaultPrompts) {
25
+ const dependencies = getDependencies(options.mode);
26
+ const prodDeps = getProductionDependencies(dependencies);
27
+ const devDeps = getDevDependencies(dependencies);
28
+ const installed = [];
29
+ const skipped = [];
30
+ const errors = [];
31
+ const packageJsonPath = fs.join(options.workspaceRoot, "package.json");
32
+ if (!await fs.exists(packageJsonPath)) return {
33
+ success: false,
34
+ installed: [],
35
+ skipped: [],
36
+ errors: [{
37
+ name: "package.json",
38
+ action: "error",
39
+ message: "No package.json found. Run `npm init` first."
40
+ }],
41
+ summary: "No package.json found in workspace root."
42
+ };
43
+ const packageJsonContent = await fs.readFile(packageJsonPath);
44
+ const packageJson = JSON.parse(packageJsonContent);
45
+ const existingDeps = new Set([...Object.keys(packageJson.dependencies ?? {}), ...Object.keys(packageJson.devDependencies ?? {})]);
46
+ const packageManager = detectPackageManager(options.workspaceRoot);
47
+ const toInstallProd = prodDeps.filter((dep) => {
48
+ if (existingDeps.has(dep.name) && !options.force) {
49
+ skipped.push({
50
+ name: dep.name,
51
+ action: "skipped",
52
+ message: "Already installed",
53
+ dev: false
54
+ });
55
+ return false;
56
+ }
57
+ return true;
58
+ });
59
+ const toInstallDev = devDeps.filter((dep) => {
60
+ if (existingDeps.has(dep.name) && !options.force) {
61
+ skipped.push({
62
+ name: dep.name,
63
+ action: "skipped",
64
+ message: "Already installed",
65
+ dev: true
66
+ });
67
+ return false;
68
+ }
69
+ return true;
70
+ });
71
+ if (options.dryRun) {
72
+ const wouldInstall = [...toInstallProd, ...toInstallDev];
73
+ return {
74
+ success: true,
75
+ installed: wouldInstall.map((dep) => ({
76
+ name: dep.name,
77
+ action: "installed",
78
+ message: `Would install: ${dep.description}`,
79
+ dev: dep.dev
80
+ })),
81
+ skipped,
82
+ errors: [],
83
+ summary: `Dry run: would install ${wouldInstall.length} package(s), skip ${skipped.length}.`
84
+ };
85
+ }
86
+ if (!options.skipPrompts && (toInstallProd.length > 0 || toInstallDev.length > 0)) {
87
+ const total = toInstallProd.length + toInstallDev.length;
88
+ if (!await prompts.confirm(`Install ${total} package(s) using ${packageManager}?`)) return {
89
+ success: true,
90
+ installed: [],
91
+ skipped: [
92
+ ...skipped,
93
+ ...toInstallProd.map((d) => ({
94
+ name: d.name,
95
+ action: "skipped",
96
+ message: "User cancelled"
97
+ })),
98
+ ...toInstallDev.map((d) => ({
99
+ name: d.name,
100
+ action: "skipped",
101
+ message: "User cancelled",
102
+ dev: true
103
+ }))
104
+ ],
105
+ errors: [],
106
+ summary: "Installation cancelled by user."
107
+ };
108
+ }
109
+ if (toInstallProd.length > 0) {
110
+ const results = await installPackages(toInstallProd, packageManager, options.workspaceRoot, false);
111
+ for (const result of results) if (result.action === "installed") installed.push(result);
112
+ else errors.push(result);
113
+ }
114
+ if (toInstallDev.length > 0) {
115
+ const results = await installPackages(toInstallDev, packageManager, options.workspaceRoot, true);
116
+ for (const result of results) if (result.action === "installed") installed.push(result);
117
+ else errors.push(result);
118
+ }
119
+ const success = errors.length === 0;
120
+ return {
121
+ success,
122
+ installed,
123
+ skipped,
124
+ errors,
125
+ summary: success ? `Successfully installed ${installed.length} package(s), skipped ${skipped.length}.` : `Installed ${installed.length}, skipped ${skipped.length}, failed ${errors.length}.`
126
+ };
127
+ }
128
+ /**
129
+ * Install a set of packages using the detected package manager.
130
+ */
131
+ async function installPackages(dependencies, packageManager, cwd, isDev) {
132
+ const results = [];
133
+ const packageNames = dependencies.map((dep) => dep.version ? `${dep.name}@${dep.version}` : dep.name);
134
+ try {
135
+ await execAsync(`${getInstallCommand(packageManager, isDev)} ${packageNames.join(" ")}`, {
136
+ cwd,
137
+ timeout: 12e4
138
+ });
139
+ for (const dep of dependencies) results.push({
140
+ name: dep.name,
141
+ action: "installed",
142
+ message: dep.description,
143
+ dev: isDev
144
+ });
145
+ } catch (error) {
146
+ const msg = error instanceof Error ? error.message : String(error);
147
+ for (const dep of dependencies) results.push({
148
+ name: dep.name,
149
+ action: "error",
150
+ message: `Failed to install: ${msg}`,
151
+ dev: isDev
152
+ });
153
+ }
154
+ return results;
155
+ }
156
+ /**
157
+ * Check if ContractSpec is already set up in the workspace.
158
+ */
159
+ async function isContractSpecInstalled(fs, workspaceRoot) {
160
+ const packageJsonPath = fs.join(workspaceRoot, "package.json");
161
+ try {
162
+ const content = await fs.readFile(packageJsonPath);
163
+ const packageJson = JSON.parse(content);
164
+ return "@contractspec/lib.contracts" in {
165
+ ...packageJson.dependencies,
166
+ ...packageJson.devDependencies
167
+ };
168
+ } catch {
169
+ return false;
170
+ }
171
+ }
172
+ /**
173
+ * Get a summary of what would be installed.
174
+ */
175
+ function formatQuickstartPreview(mode) {
176
+ const deps = getDependencies(mode);
177
+ const lines = [];
178
+ lines.push(`ContractSpec ${mode} installation:`);
179
+ lines.push("");
180
+ const prodDeps = getProductionDependencies(deps);
181
+ if (prodDeps.length > 0) {
182
+ lines.push("Dependencies:");
183
+ for (const dep of prodDeps) lines.push(` • ${dep.name} - ${dep.description}`);
184
+ }
185
+ const devDeps = getDevDependencies(deps);
186
+ if (devDeps.length > 0) {
187
+ lines.push("");
188
+ lines.push("Dev Dependencies:");
189
+ for (const dep of devDeps) lines.push(` • ${dep.name} - ${dep.description}`);
190
+ }
191
+ return lines.join("\n");
192
+ }
193
+
194
+ //#endregion
195
+ export { formatQuickstartPreview, isContractSpecInstalled, runQuickstart };
196
+ //# sourceMappingURL=quickstart-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart-service.js","names":["defaultPrompts: QuickstartPromptCallbacks","installed: PackageInstallResult[]","skipped: PackageInstallResult[]","errors: PackageInstallResult[]","results: PackageInstallResult[]","lines: string[]"],"sources":["../../../src/services/quickstart/quickstart-service.ts"],"sourcesContent":["/**\n * Quickstart service.\n *\n * Orchestrates the installation of minimal necessary packages\n * for ContractSpec to work across CLI, VS Code, and JetBrains.\n */\n\nimport { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { FsAdapter } from '../../ports/fs';\nimport type {\n QuickstartOptions,\n QuickstartResult,\n QuickstartPromptCallbacks,\n PackageInstallResult,\n QuickstartDependency,\n} from './types';\nimport {\n getDependencies,\n getProductionDependencies,\n getDevDependencies,\n} from './dependencies';\nimport {\n detectPackageManager,\n getInstallCommand,\n type PackageManager,\n} from '../../adapters/workspace';\n\nconst execAsync = promisify(exec);\n\n/**\n * Default prompt callbacks that accept all defaults.\n */\nconst defaultPrompts: QuickstartPromptCallbacks = {\n confirm: async () => true,\n select: async (_msg, options) => options[0]?.value ?? ('' as never),\n};\n\n/**\n * Run the ContractSpec quickstart installation.\n */\nexport async function runQuickstart(\n fs: FsAdapter,\n options: QuickstartOptions,\n prompts: QuickstartPromptCallbacks = defaultPrompts\n): Promise<QuickstartResult> {\n const dependencies = getDependencies(options.mode);\n const prodDeps = getProductionDependencies(dependencies);\n const devDeps = getDevDependencies(dependencies);\n\n const installed: PackageInstallResult[] = [];\n const skipped: PackageInstallResult[] = [];\n const errors: PackageInstallResult[] = [];\n\n // Check if package.json exists\n const packageJsonPath = fs.join(options.workspaceRoot, 'package.json');\n const hasPackageJson = await fs.exists(packageJsonPath);\n\n if (!hasPackageJson) {\n return {\n success: false,\n installed: [],\n skipped: [],\n errors: [\n {\n name: 'package.json',\n action: 'error',\n message: 'No package.json found. Run `npm init` first.',\n },\n ],\n summary: 'No package.json found in workspace root.',\n };\n }\n\n // Read current package.json to check existing dependencies\n const packageJsonContent = await fs.readFile(packageJsonPath);\n const packageJson = JSON.parse(packageJsonContent) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n\n const existingDeps = new Set([\n ...Object.keys(packageJson.dependencies ?? {}),\n ...Object.keys(packageJson.devDependencies ?? {}),\n ]);\n\n // Detect package manager\n const packageManager = detectPackageManager(options.workspaceRoot);\n\n // Filter dependencies based on what's already installed\n const toInstallProd = prodDeps.filter((dep) => {\n if (existingDeps.has(dep.name) && !options.force) {\n skipped.push({\n name: dep.name,\n action: 'skipped',\n message: 'Already installed',\n dev: false,\n });\n return false;\n }\n return true;\n });\n\n const toInstallDev = devDeps.filter((dep) => {\n if (existingDeps.has(dep.name) && !options.force) {\n skipped.push({\n name: dep.name,\n action: 'skipped',\n message: 'Already installed',\n dev: true,\n });\n return false;\n }\n return true;\n });\n\n // Dry run - just report what would be installed\n if (options.dryRun) {\n const wouldInstall = [...toInstallProd, ...toInstallDev];\n return {\n success: true,\n installed: wouldInstall.map((dep) => ({\n name: dep.name,\n action: 'installed',\n message: `Would install: ${dep.description}`,\n dev: dep.dev,\n })),\n skipped,\n errors: [],\n summary: `Dry run: would install ${wouldInstall.length} package(s), skip ${skipped.length}.`,\n };\n }\n\n // Confirm installation if interactive\n if (\n !options.skipPrompts &&\n (toInstallProd.length > 0 || toInstallDev.length > 0)\n ) {\n const total = toInstallProd.length + toInstallDev.length;\n const confirmed = await prompts.confirm(\n `Install ${total} package(s) using ${packageManager}?`\n );\n if (!confirmed) {\n return {\n success: true,\n installed: [],\n skipped: [\n ...skipped,\n ...toInstallProd.map((d) => ({\n name: d.name,\n action: 'skipped' as const,\n message: 'User cancelled',\n })),\n ...toInstallDev.map((d) => ({\n name: d.name,\n action: 'skipped' as const,\n message: 'User cancelled',\n dev: true,\n })),\n ],\n errors: [],\n summary: 'Installation cancelled by user.',\n };\n }\n }\n\n // Install production dependencies\n if (toInstallProd.length > 0) {\n const results = await installPackages(\n toInstallProd,\n packageManager,\n options.workspaceRoot,\n false\n );\n for (const result of results) {\n if (result.action === 'installed') {\n installed.push(result);\n } else {\n errors.push(result);\n }\n }\n }\n\n // Install dev dependencies\n if (toInstallDev.length > 0) {\n const results = await installPackages(\n toInstallDev,\n packageManager,\n options.workspaceRoot,\n true\n );\n for (const result of results) {\n if (result.action === 'installed') {\n installed.push(result);\n } else {\n errors.push(result);\n }\n }\n }\n\n const success = errors.length === 0;\n const summary = success\n ? `Successfully installed ${installed.length} package(s), skipped ${skipped.length}.`\n : `Installed ${installed.length}, skipped ${skipped.length}, failed ${errors.length}.`;\n\n return {\n success,\n installed,\n skipped,\n errors,\n summary,\n };\n}\n\n/**\n * Install a set of packages using the detected package manager.\n */\nasync function installPackages(\n dependencies: QuickstartDependency[],\n packageManager: PackageManager,\n cwd: string,\n isDev: boolean\n): Promise<PackageInstallResult[]> {\n const results: PackageInstallResult[] = [];\n const packageNames = dependencies.map((dep) =>\n dep.version ? `${dep.name}@${dep.version}` : dep.name\n );\n\n try {\n const baseCommand = getInstallCommand(packageManager, isDev);\n const command = `${baseCommand} ${packageNames.join(' ')}`;\n\n await execAsync(command, {\n cwd,\n timeout: 120000, // 2 minutes timeout\n });\n\n // All packages installed successfully\n for (const dep of dependencies) {\n results.push({\n name: dep.name,\n action: 'installed',\n message: dep.description,\n dev: isDev,\n });\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n for (const dep of dependencies) {\n results.push({\n name: dep.name,\n action: 'error',\n message: `Failed to install: ${msg}`,\n dev: isDev,\n });\n }\n }\n\n return results;\n}\n\n/**\n * Check if ContractSpec is already set up in the workspace.\n */\nexport async function isContractSpecInstalled(\n fs: FsAdapter,\n workspaceRoot: string\n): Promise<boolean> {\n const packageJsonPath = fs.join(workspaceRoot, 'package.json');\n\n try {\n const content = await fs.readFile(packageJsonPath);\n const packageJson = JSON.parse(content) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return '@contractspec/lib.contracts' in allDeps;\n } catch {\n return false;\n }\n}\n\n/**\n * Get a summary of what would be installed.\n */\nexport function formatQuickstartPreview(mode: 'minimal' | 'full'): string {\n const deps = getDependencies(mode);\n const lines: string[] = [];\n\n lines.push(`ContractSpec ${mode} installation:`);\n lines.push('');\n\n const prodDeps = getProductionDependencies(deps);\n if (prodDeps.length > 0) {\n lines.push('Dependencies:');\n for (const dep of prodDeps) {\n lines.push(` • ${dep.name} - ${dep.description}`);\n }\n }\n\n const devDeps = getDevDependencies(deps);\n if (devDeps.length > 0) {\n lines.push('');\n lines.push('Dev Dependencies:');\n for (const dep of devDeps) {\n lines.push(` • ${dep.name} - ${dep.description}`);\n }\n }\n\n return lines.join('\\n');\n}\n"],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ //#region src/services/quickstart/types.d.ts
2
+ /**
3
+ * Quickstart service types.
4
+ *
5
+ * Type definitions for the ContractSpec quickstart installation feature.
6
+ */
7
+ /**
8
+ * Installation mode for quickstart.
9
+ */
10
+ type QuickstartMode = 'minimal' | 'full';
11
+ /**
12
+ * A dependency to install during quickstart.
13
+ */
14
+ interface QuickstartDependency {
15
+ /** Package name (e.g., '@contractspec/lib.contracts') */
16
+ name: string;
17
+ /** Specific version or latest if not specified */
18
+ version?: string;
19
+ /** Whether this is a dev dependency */
20
+ dev?: boolean;
21
+ /** Whether this dependency is optional */
22
+ optional?: boolean;
23
+ /** Human-readable description */
24
+ description: string;
25
+ }
26
+ /**
27
+ * Options for running quickstart.
28
+ */
29
+ interface QuickstartOptions {
30
+ /** Workspace root directory */
31
+ workspaceRoot: string;
32
+ /** Installation mode */
33
+ mode: QuickstartMode;
34
+ /** Dry run - show what would be installed without installing */
35
+ dryRun?: boolean;
36
+ /** Skip interactive prompts */
37
+ skipPrompts?: boolean;
38
+ /** Force reinstall even if packages exist */
39
+ force?: boolean;
40
+ /** Verbose output */
41
+ verbose?: boolean;
42
+ }
43
+ /**
44
+ * Result of a single package installation.
45
+ */
46
+ interface PackageInstallResult {
47
+ name: string;
48
+ action: 'installed' | 'skipped' | 'error';
49
+ message: string;
50
+ dev?: boolean;
51
+ }
52
+ /**
53
+ * Result of the quickstart operation.
54
+ */
55
+ interface QuickstartResult {
56
+ /** Whether the operation was successful overall */
57
+ success: boolean;
58
+ /** Packages that were installed */
59
+ installed: PackageInstallResult[];
60
+ /** Packages that were skipped (already installed) */
61
+ skipped: PackageInstallResult[];
62
+ /** Packages that failed to install */
63
+ errors: PackageInstallResult[];
64
+ /** Summary message */
65
+ summary: string;
66
+ }
67
+ /**
68
+ * Prompt callbacks for interactive quickstart.
69
+ */
70
+ interface QuickstartPromptCallbacks {
71
+ /** Confirm a yes/no question */
72
+ confirm: (message: string) => Promise<boolean>;
73
+ /** Select from a list of options */
74
+ select: <T extends string>(message: string, options: {
75
+ value: T;
76
+ label: string;
77
+ }[]) => Promise<T>;
78
+ }
79
+ //#endregion
80
+ export { PackageInstallResult, QuickstartDependency, QuickstartMode, QuickstartOptions, QuickstartPromptCallbacks, QuickstartResult };
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/services/quickstart/types.ts"],"sourcesContent":[],"mappings":";;AASA;AAKA;AAgBA;AAkBA;AAUA;;;AAQU,KAzDE,cAAA,GAyDF,SAAA,GAAA,MAAA;;AAQV;;AAMsB,UAlEL,oBAAA,CAkEK;EACP;EAAR,IAAA,EAAA,MAAA;EAAO;;;;;;;;;;;;UAnDG,iBAAA;;;;QAIT;;;;;;;;;;;;;UAcS,oBAAA;;;;;;;;;UAUA,gBAAA;;;;aAIJ;;WAEF;;UAED;;;;;;;UAQO,yBAAA;;gCAEe;;;WAIV;;UACf,QAAQ"}
@@ -0,0 +1,18 @@
1
+ import { RegeneratorService } from "@contractspec/lib.contracts/regenerator";
2
+ import { ProposalSink, RegenerationContext, RegenerationRule } from "@contractspec/lib.contracts/regenerator/types";
3
+ import { SignalAdapters } from "@contractspec/lib.contracts/regenerator/adapters";
4
+
5
+ //#region src/services/regenerator.d.ts
6
+
7
+ interface CreateRegeneratorOptions {
8
+ contexts: RegenerationContext[];
9
+ rules: RegenerationRule[];
10
+ sink: ProposalSink;
11
+ adapters?: SignalAdapters;
12
+ pollIntervalMs?: number;
13
+ batchDurationMs?: number;
14
+ }
15
+ declare function createRegeneratorService(options: CreateRegeneratorOptions): RegeneratorService;
16
+ //#endregion
17
+ export { CreateRegeneratorOptions, createRegeneratorService };
18
+ //# sourceMappingURL=regenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regenerator.d.ts","names":[],"sources":["../../src/services/regenerator.ts"],"sourcesContent":[],"mappings":";;;;;;AAmBa,UAJI,wBAAA,CAIJ;EAAc,QAAA,EAHf,mBAGe,EAAA;EAKX,KAAA,EAPP,gBAOO,EAAA;QANR;aACK;;;;iBAKG,wBAAA,UACL,2BACR"}
@@ -0,0 +1,23 @@
1
+ import { RegeneratorService } from "@contractspec/lib.contracts/regenerator";
2
+
3
+ //#region src/services/regenerator.ts
4
+ /**
5
+ * Regenerator service.
6
+ *
7
+ * Thin wrapper around `@contractspec/lib.contracts/regenerator` for reuse across CLI/VSCode/web.
8
+ * This service does not perform module loading; callers provide resolved contexts/rules/sink.
9
+ */
10
+ function createRegeneratorService(options) {
11
+ return new RegeneratorService({
12
+ contexts: options.contexts,
13
+ adapters: options.adapters ?? {},
14
+ rules: options.rules,
15
+ sink: options.sink,
16
+ pollIntervalMs: options.pollIntervalMs,
17
+ batchDurationMs: options.batchDurationMs
18
+ });
19
+ }
20
+
21
+ //#endregion
22
+ export { createRegeneratorService };
23
+ //# sourceMappingURL=regenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regenerator.js","names":[],"sources":["../../src/services/regenerator.ts"],"sourcesContent":["/**\n * Regenerator service.\n *\n * Thin wrapper around `@contractspec/lib.contracts/regenerator` for reuse across CLI/VSCode/web.\n * This service does not perform module loading; callers provide resolved contexts/rules/sink.\n */\n\nimport { RegeneratorService } from '@contractspec/lib.contracts/regenerator';\nimport type {\n ProposalSink,\n RegenerationContext,\n RegenerationRule,\n} from '@contractspec/lib.contracts/regenerator/types';\nimport type { SignalAdapters } from '@contractspec/lib.contracts/regenerator/adapters';\n\nexport interface CreateRegeneratorOptions {\n contexts: RegenerationContext[];\n rules: RegenerationRule[];\n sink: ProposalSink;\n adapters?: SignalAdapters;\n pollIntervalMs?: number;\n batchDurationMs?: number;\n}\n\nexport function createRegeneratorService(\n options: CreateRegeneratorOptions\n): RegeneratorService {\n return new RegeneratorService({\n contexts: options.contexts,\n adapters: options.adapters ?? {},\n rules: options.rules,\n sink: options.sink,\n pollIntervalMs: options.pollIntervalMs,\n batchDurationMs: options.batchDurationMs,\n });\n}\n"],"mappings":";;;;;;;;;AAwBA,SAAgB,yBACd,SACoB;AACpB,QAAO,IAAI,mBAAmB;EAC5B,UAAU,QAAQ;EAClB,UAAU,QAAQ,YAAY,EAAE;EAChC,OAAO,QAAQ;EACf,MAAM,QAAQ;EACd,gBAAgB,QAAQ;EACxB,iBAAiB,QAAQ;EAC1B,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { LoggerAdapter } from "../ports/logger.js";
2
+
3
+ //#region src/services/registry.d.ts
4
+
5
+ /**
6
+ * Registry client options.
7
+ */
8
+ interface RegistryClientOptions {
9
+ registryUrl: string;
10
+ }
11
+ /**
12
+ * Registry client for interacting with ContractSpec registry.
13
+ */
14
+ declare class RegistryClient {
15
+ private readonly registryUrl;
16
+ constructor(opts: RegistryClientOptions);
17
+ /**
18
+ * Make GET request to registry.
19
+ */
20
+ getJson<T>(path: string): Promise<T>;
21
+ }
22
+ /**
23
+ * Resolve registry URL from options or environment.
24
+ */
25
+ declare function resolveRegistryUrl(cliRegistryUrl?: string): string;
26
+ /**
27
+ * Add spec to registry.
28
+ */
29
+ declare function addToRegistry(specPath: string, options: {
30
+ registryUrl?: string;
31
+ }, adapters: {
32
+ logger: LoggerAdapter;
33
+ }): Promise<void>;
34
+ /**
35
+ * List specs from registry.
36
+ */
37
+ declare function listFromRegistry(options: {
38
+ registryUrl?: string;
39
+ filter?: string;
40
+ }, adapters: {
41
+ logger: LoggerAdapter;
42
+ }): Promise<unknown[]>;
43
+ /**
44
+ * Search registry for specs.
45
+ */
46
+ declare function searchRegistry(query: string, options: {
47
+ registryUrl?: string;
48
+ }, adapters: {
49
+ logger: LoggerAdapter;
50
+ }): Promise<unknown[]>;
51
+ //#endregion
52
+ export { RegistryClient, RegistryClientOptions, addToRegistry, listFromRegistry, resolveRegistryUrl, searchRegistry };
53
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","names":[],"sources":["../../src/services/registry.ts"],"sourcesContent":[],"mappings":";;;;AAgBA;;;AAUkC,UAjBjB,qBAAA,CAiBiB;EAAO,WAAA,EAAA,MAAA;AA6BzC;AAWA;AAsBA;AAwBA;cAhGa,cAAA;;oBAGO;;;;4BAOc,QAAQ;;;;;iBA6B1B,kBAAA;;;;iBAWM,aAAA;;;UAGA;IACnB;;;;iBAkBmB,gBAAA;;;;UAEA;IACnB;;;;iBAqBmB,cAAA;;;UAGA;IACnB"}
@@ -0,0 +1,74 @@
1
+ //#region src/services/registry.ts
2
+ /**
3
+ * Registry client for interacting with ContractSpec registry.
4
+ */
5
+ var RegistryClient = class {
6
+ registryUrl;
7
+ constructor(opts) {
8
+ this.registryUrl = opts.registryUrl.replace(/\/+$/, "");
9
+ }
10
+ /**
11
+ * Make GET request to registry.
12
+ */
13
+ async getJson(path) {
14
+ const url = `${this.registryUrl}${path.startsWith("/") ? "" : "/"}${path}`;
15
+ let res;
16
+ try {
17
+ res = await fetch(url, {
18
+ method: "GET",
19
+ headers: { Accept: "application/json" }
20
+ });
21
+ } catch (error) {
22
+ throw new Error(`Registry request failed: ${url} (${error instanceof Error ? error.message : String(error)})`);
23
+ }
24
+ if (!res.ok) {
25
+ const text = await res.text().catch(() => "");
26
+ throw new Error(`Registry request failed: ${res.status} ${res.statusText} ${text}`);
27
+ }
28
+ return await res.json();
29
+ }
30
+ };
31
+ /**
32
+ * Resolve registry URL from options or environment.
33
+ */
34
+ function resolveRegistryUrl(cliRegistryUrl) {
35
+ return cliRegistryUrl || process.env.CONTRACTSPEC_REGISTRY_URL || "http://localhost:8090";
36
+ }
37
+ /**
38
+ * Add spec to registry.
39
+ */
40
+ async function addToRegistry(specPath, options, adapters) {
41
+ const { logger } = adapters;
42
+ const registryUrl = resolveRegistryUrl(options.registryUrl);
43
+ logger.info(`Adding spec to registry: ${specPath}`, { registryUrl });
44
+ await new RegistryClient({ registryUrl }).getJson(`/specs/add?path=${encodeURIComponent(specPath)}`);
45
+ logger.info("Spec added to registry successfully");
46
+ }
47
+ /**
48
+ * List specs from registry.
49
+ */
50
+ async function listFromRegistry(options, adapters) {
51
+ const { logger } = adapters;
52
+ const registryUrl = resolveRegistryUrl(options.registryUrl);
53
+ logger.info("Listing specs from registry", { registryUrl });
54
+ const client = new RegistryClient({ registryUrl });
55
+ const filter = options.filter ? `?filter=${encodeURIComponent(options.filter)}` : "";
56
+ const specs = await client.getJson(`/specs${filter}`);
57
+ logger.info(`Found ${specs.length} specs`);
58
+ return specs;
59
+ }
60
+ /**
61
+ * Search registry for specs.
62
+ */
63
+ async function searchRegistry(query, options, adapters) {
64
+ const { logger } = adapters;
65
+ const registryUrl = resolveRegistryUrl(options.registryUrl);
66
+ logger.info(`Searching registry: ${query}`, { registryUrl });
67
+ const results = await new RegistryClient({ registryUrl }).getJson(`/specs/search?q=${encodeURIComponent(query)}`);
68
+ logger.info(`Found ${results.length} results`);
69
+ return results;
70
+ }
71
+
72
+ //#endregion
73
+ export { RegistryClient, addToRegistry, listFromRegistry, resolveRegistryUrl, searchRegistry };
74
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","names":["res: Response"],"sources":["../../src/services/registry.ts"],"sourcesContent":["/**\n * Registry service - interacts with ContractSpec registry.\n */\n\nimport type { LoggerAdapter } from '../ports/logger';\n\n/**\n * Registry client options.\n */\nexport interface RegistryClientOptions {\n registryUrl: string;\n}\n\n/**\n * Registry client for interacting with ContractSpec registry.\n */\nexport class RegistryClient {\n private readonly registryUrl: string;\n\n constructor(opts: RegistryClientOptions) {\n this.registryUrl = opts.registryUrl.replace(/\\/+$/, '');\n }\n\n /**\n * Make GET request to registry.\n */\n async getJson<T>(path: string): Promise<T> {\n const url = `${this.registryUrl}${path.startsWith('/') ? '' : '/'}${path}`;\n let res: Response;\n\n try {\n res = await fetch(url, {\n method: 'GET',\n headers: { Accept: 'application/json' },\n });\n } catch (error) {\n throw new Error(\n `Registry request failed: ${url} (${error instanceof Error ? error.message : String(error)})`\n );\n }\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(\n `Registry request failed: ${res.status} ${res.statusText} ${text}`\n );\n }\n\n return (await res.json()) as T;\n }\n}\n\n/**\n * Resolve registry URL from options or environment.\n */\nexport function resolveRegistryUrl(cliRegistryUrl?: string): string {\n return (\n cliRegistryUrl ||\n process.env.CONTRACTSPEC_REGISTRY_URL ||\n 'http://localhost:8090'\n );\n}\n\n/**\n * Add spec to registry.\n */\nexport async function addToRegistry(\n specPath: string,\n options: { registryUrl?: string },\n adapters: { logger: LoggerAdapter }\n): Promise<void> {\n const { logger } = adapters;\n const registryUrl = resolveRegistryUrl(options.registryUrl);\n\n logger.info(`Adding spec to registry: ${specPath}`, { registryUrl });\n\n const client = new RegistryClient({ registryUrl });\n\n // Implementation depends on registry API\n // This is a placeholder\n await client.getJson(`/specs/add?path=${encodeURIComponent(specPath)}`);\n\n logger.info('Spec added to registry successfully');\n}\n\n/**\n * List specs from registry.\n */\nexport async function listFromRegistry(\n options: { registryUrl?: string; filter?: string },\n adapters: { logger: LoggerAdapter }\n): Promise<unknown[]> {\n const { logger } = adapters;\n const registryUrl = resolveRegistryUrl(options.registryUrl);\n\n logger.info('Listing specs from registry', { registryUrl });\n\n const client = new RegistryClient({ registryUrl });\n\n const filter = options.filter\n ? `?filter=${encodeURIComponent(options.filter)}`\n : '';\n const specs = await client.getJson<unknown[]>(`/specs${filter}`);\n\n logger.info(`Found ${specs.length} specs`);\n\n return specs;\n}\n\n/**\n * Search registry for specs.\n */\nexport async function searchRegistry(\n query: string,\n options: { registryUrl?: string },\n adapters: { logger: LoggerAdapter }\n): Promise<unknown[]> {\n const { logger } = adapters;\n const registryUrl = resolveRegistryUrl(options.registryUrl);\n\n logger.info(`Searching registry: ${query}`, { registryUrl });\n\n const client = new RegistryClient({ registryUrl });\n\n const results = await client.getJson<unknown[]>(\n `/specs/search?q=${encodeURIComponent(query)}`\n );\n\n logger.info(`Found ${results.length} results`);\n\n return results;\n}\n"],"mappings":";;;;AAgBA,IAAa,iBAAb,MAA4B;CAC1B,AAAiB;CAEjB,YAAY,MAA6B;AACvC,OAAK,cAAc,KAAK,YAAY,QAAQ,QAAQ,GAAG;;;;;CAMzD,MAAM,QAAW,MAA0B;EACzC,MAAM,MAAM,GAAG,KAAK,cAAc,KAAK,WAAW,IAAI,GAAG,KAAK,MAAM;EACpE,IAAIA;AAEJ,MAAI;AACF,SAAM,MAAM,MAAM,KAAK;IACrB,QAAQ;IACR,SAAS,EAAE,QAAQ,oBAAoB;IACxC,CAAC;WACK,OAAO;AACd,SAAM,IAAI,MACR,4BAA4B,IAAI,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC,GAC5F;;AAGH,MAAI,CAAC,IAAI,IAAI;GACX,MAAM,OAAO,MAAM,IAAI,MAAM,CAAC,YAAY,GAAG;AAC7C,SAAM,IAAI,MACR,4BAA4B,IAAI,OAAO,GAAG,IAAI,WAAW,GAAG,OAC7D;;AAGH,SAAQ,MAAM,IAAI,MAAM;;;;;;AAO5B,SAAgB,mBAAmB,gBAAiC;AAClE,QACE,kBACA,QAAQ,IAAI,6BACZ;;;;;AAOJ,eAAsB,cACpB,UACA,SACA,UACe;CACf,MAAM,EAAE,WAAW;CACnB,MAAM,cAAc,mBAAmB,QAAQ,YAAY;AAE3D,QAAO,KAAK,4BAA4B,YAAY,EAAE,aAAa,CAAC;AAMpE,OAJe,IAAI,eAAe,EAAE,aAAa,CAAC,CAIrC,QAAQ,mBAAmB,mBAAmB,SAAS,GAAG;AAEvE,QAAO,KAAK,sCAAsC;;;;;AAMpD,eAAsB,iBACpB,SACA,UACoB;CACpB,MAAM,EAAE,WAAW;CACnB,MAAM,cAAc,mBAAmB,QAAQ,YAAY;AAE3D,QAAO,KAAK,+BAA+B,EAAE,aAAa,CAAC;CAE3D,MAAM,SAAS,IAAI,eAAe,EAAE,aAAa,CAAC;CAElD,MAAM,SAAS,QAAQ,SACnB,WAAW,mBAAmB,QAAQ,OAAO,KAC7C;CACJ,MAAM,QAAQ,MAAM,OAAO,QAAmB,SAAS,SAAS;AAEhE,QAAO,KAAK,SAAS,MAAM,OAAO,QAAQ;AAE1C,QAAO;;;;;AAMT,eAAsB,eACpB,OACA,SACA,UACoB;CACpB,MAAM,EAAE,WAAW;CACnB,MAAM,cAAc,mBAAmB,QAAQ,YAAY;AAE3D,QAAO,KAAK,uBAAuB,SAAS,EAAE,aAAa,CAAC;CAI5D,MAAM,UAAU,MAFD,IAAI,eAAe,EAAE,aAAa,CAAC,CAErB,QAC3B,mBAAmB,mBAAmB,MAAM,GAC7C;AAED,QAAO,KAAK,SAAS,QAAQ,OAAO,UAAU;AAE9C,QAAO"}
@@ -0,0 +1,42 @@
1
+ import { SetupOptions } from "./types.js";
2
+
3
+ //#region src/services/setup/config-generators.d.ts
4
+
5
+ /**
6
+ * Generate .contractsrc.json content.
7
+ *
8
+ * Adapts defaults based on monorepo scope.
9
+ */
10
+ declare function generateContractsrcConfig(options: SetupOptions): object;
11
+ /**
12
+ * Generate .vscode/settings.json ContractSpec settings.
13
+ */
14
+ declare function generateVscodeSettings(): object;
15
+ /**
16
+ * Generate .cursor/mcp.json content.
17
+ */
18
+ declare function generateCursorMcpConfig(): object;
19
+ /**
20
+ * Generate Claude Desktop MCP config.
21
+ * Returns the mcpServers section to merge into claude_desktop_config.json.
22
+ */
23
+ declare function generateClaudeMcpConfig(): object;
24
+ /**
25
+ * Generate .cursor/rules/contractspec.mdc content.
26
+ *
27
+ * Adapts paths based on monorepo scope.
28
+ */
29
+ declare function generateCursorRules(options: SetupOptions): string;
30
+ /**
31
+ * Generate AGENTS.md content.
32
+ *
33
+ * Adapts paths and instructions based on monorepo scope.
34
+ */
35
+ declare function generateAgentsMd(options: SetupOptions): string;
36
+ /**
37
+ * Get the file path for Claude Desktop config based on platform.
38
+ */
39
+ declare function getClaudeDesktopConfigPath(): string;
40
+ //#endregion
41
+ export { generateAgentsMd, generateClaudeMcpConfig, generateContractsrcConfig, generateCursorMcpConfig, generateCursorRules, generateVscodeSettings, getClaudeDesktopConfigPath };
42
+ //# sourceMappingURL=config-generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-generators.d.ts","names":[],"sources":["../../../src/services/setup/config-generators.ts"],"sourcesContent":[],"mappings":";;;;AA0EA;AAgBA;AAwEA;AA4GA;;iBAjQgB,yBAAA,UAAmC;;;;iBA8BnC,sBAAA,CAAA;;;;iBAgBA,uBAAA,CAAA;;;;;iBAeA,uBAAA,CAAA;;;;;;iBAgBA,mBAAA,UAA6B;;;;;;iBAwE7B,gBAAA,UAA0B;;;;iBA4G1B,0BAAA,CAAA"}