@contractspec/bundle.workspace 0.0.0-canary-20260113162409

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 (703) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/_virtual/rolldown_runtime.mjs +20 -0
  4. package/dist/adapters/ai.d.mts +12 -0
  5. package/dist/adapters/ai.d.mts.map +1 -0
  6. package/dist/adapters/ai.mjs +83 -0
  7. package/dist/adapters/ai.mjs.map +1 -0
  8. package/dist/adapters/factory.d.mts +29 -0
  9. package/dist/adapters/factory.d.mts.map +1 -0
  10. package/dist/adapters/factory.mjs +37 -0
  11. package/dist/adapters/factory.mjs.map +1 -0
  12. package/dist/adapters/fs.d.mts +12 -0
  13. package/dist/adapters/fs.d.mts.map +1 -0
  14. package/dist/adapters/fs.mjs +133 -0
  15. package/dist/adapters/fs.mjs.map +1 -0
  16. package/dist/adapters/git.d.mts +11 -0
  17. package/dist/adapters/git.d.mts.map +1 -0
  18. package/dist/adapters/git.mjs +84 -0
  19. package/dist/adapters/git.mjs.map +1 -0
  20. package/dist/adapters/index.d.mts +7 -0
  21. package/dist/adapters/index.mjs +9 -0
  22. package/dist/adapters/logger.d.mts +18 -0
  23. package/dist/adapters/logger.d.mts.map +1 -0
  24. package/dist/adapters/logger.mjs +81 -0
  25. package/dist/adapters/logger.mjs.map +1 -0
  26. package/dist/adapters/watcher.d.mts +11 -0
  27. package/dist/adapters/watcher.d.mts.map +1 -0
  28. package/dist/adapters/watcher.mjs +74 -0
  29. package/dist/adapters/watcher.mjs.map +1 -0
  30. package/dist/adapters/workspace.d.mts +148 -0
  31. package/dist/adapters/workspace.d.mts.map +1 -0
  32. package/dist/adapters/workspace.mjs +275 -0
  33. package/dist/adapters/workspace.mjs.map +1 -0
  34. package/dist/ai/agents/claude-code-agent.d.mts +22 -0
  35. package/dist/ai/agents/claude-code-agent.d.mts.map +1 -0
  36. package/dist/ai/agents/claude-code-agent.mjs +182 -0
  37. package/dist/ai/agents/claude-code-agent.mjs.map +1 -0
  38. package/dist/ai/agents/cursor-agent.d.mts +68 -0
  39. package/dist/ai/agents/cursor-agent.d.mts.map +1 -0
  40. package/dist/ai/agents/cursor-agent.mjs +436 -0
  41. package/dist/ai/agents/cursor-agent.mjs.map +1 -0
  42. package/dist/ai/agents/index.mjs +7 -0
  43. package/dist/ai/agents/openai-codex-agent.d.mts +22 -0
  44. package/dist/ai/agents/openai-codex-agent.d.mts.map +1 -0
  45. package/dist/ai/agents/openai-codex-agent.mjs +167 -0
  46. package/dist/ai/agents/openai-codex-agent.mjs.map +1 -0
  47. package/dist/ai/agents/orchestrator.d.mts +50 -0
  48. package/dist/ai/agents/orchestrator.d.mts.map +1 -0
  49. package/dist/ai/agents/orchestrator.mjs +143 -0
  50. package/dist/ai/agents/orchestrator.mjs.map +1 -0
  51. package/dist/ai/agents/simple-agent.d.mts +17 -0
  52. package/dist/ai/agents/simple-agent.d.mts.map +1 -0
  53. package/dist/ai/agents/simple-agent.mjs +92 -0
  54. package/dist/ai/agents/simple-agent.mjs.map +1 -0
  55. package/dist/ai/agents/types.d.mts +36 -0
  56. package/dist/ai/agents/types.d.mts.map +1 -0
  57. package/dist/ai/client.d.mts +97 -0
  58. package/dist/ai/client.d.mts.map +1 -0
  59. package/dist/ai/client.mjs +189 -0
  60. package/dist/ai/client.mjs.map +1 -0
  61. package/dist/ai/index.d.mts +9 -0
  62. package/dist/ai/index.mjs +11 -0
  63. package/dist/ai/prompts/code-generation.d.mts +26 -0
  64. package/dist/ai/prompts/code-generation.d.mts.map +1 -0
  65. package/dist/ai/prompts/code-generation.mjs +143 -0
  66. package/dist/ai/prompts/code-generation.mjs.map +1 -0
  67. package/dist/ai/prompts/index.d.mts +10 -0
  68. package/dist/ai/prompts/index.d.mts.map +1 -0
  69. package/dist/ai/prompts/index.mjs +13 -0
  70. package/dist/ai/prompts/index.mjs.map +1 -0
  71. package/dist/ai/prompts/spec-creation.d.mts +29 -0
  72. package/dist/ai/prompts/spec-creation.d.mts.map +1 -0
  73. package/dist/ai/prompts/spec-creation.mjs +111 -0
  74. package/dist/ai/prompts/spec-creation.mjs.map +1 -0
  75. package/dist/ai/providers.d.mts +29 -0
  76. package/dist/ai/providers.d.mts.map +1 -0
  77. package/dist/ai/providers.mjs +39 -0
  78. package/dist/ai/providers.mjs.map +1 -0
  79. package/dist/formatters/index.d.mts +11 -0
  80. package/dist/formatters/index.d.mts.map +1 -0
  81. package/dist/formatters/index.mjs +17 -0
  82. package/dist/formatters/index.mjs.map +1 -0
  83. package/dist/formatters/json.d.mts +56 -0
  84. package/dist/formatters/json.d.mts.map +1 -0
  85. package/dist/formatters/json.mjs +43 -0
  86. package/dist/formatters/json.mjs.map +1 -0
  87. package/dist/formatters/sarif.d.mts +101 -0
  88. package/dist/formatters/sarif.d.mts.map +1 -0
  89. package/dist/formatters/sarif.mjs +163 -0
  90. package/dist/formatters/sarif.mjs.map +1 -0
  91. package/dist/formatters/text.d.mts +35 -0
  92. package/dist/formatters/text.d.mts.map +1 -0
  93. package/dist/formatters/text.mjs +209 -0
  94. package/dist/formatters/text.mjs.map +1 -0
  95. package/dist/index.d.mts +125 -0
  96. package/dist/index.mjs +110 -0
  97. package/dist/ports/ai.d.mts +59 -0
  98. package/dist/ports/ai.d.mts.map +1 -0
  99. package/dist/ports/fs.d.mts +81 -0
  100. package/dist/ports/fs.d.mts.map +1 -0
  101. package/dist/ports/git.d.mts +46 -0
  102. package/dist/ports/git.d.mts.map +1 -0
  103. package/dist/ports/index.d.mts +6 -0
  104. package/dist/ports/logger.d.mts +88 -0
  105. package/dist/ports/logger.d.mts.map +1 -0
  106. package/dist/ports/rulesync.d.mts +38 -0
  107. package/dist/ports/rulesync.d.mts.map +1 -0
  108. package/dist/ports/watcher.d.mts +52 -0
  109. package/dist/ports/watcher.d.mts.map +1 -0
  110. package/dist/services/agent-guide/adapters/claude-code.d.mts +35 -0
  111. package/dist/services/agent-guide/adapters/claude-code.d.mts.map +1 -0
  112. package/dist/services/agent-guide/adapters/claude-code.mjs +144 -0
  113. package/dist/services/agent-guide/adapters/claude-code.mjs.map +1 -0
  114. package/dist/services/agent-guide/adapters/cursor-cli.d.mts +39 -0
  115. package/dist/services/agent-guide/adapters/cursor-cli.d.mts.map +1 -0
  116. package/dist/services/agent-guide/adapters/cursor-cli.mjs +135 -0
  117. package/dist/services/agent-guide/adapters/cursor-cli.mjs.map +1 -0
  118. package/dist/services/agent-guide/adapters/generic-mcp.d.mts +53 -0
  119. package/dist/services/agent-guide/adapters/generic-mcp.d.mts.map +1 -0
  120. package/dist/services/agent-guide/adapters/generic-mcp.mjs +159 -0
  121. package/dist/services/agent-guide/adapters/generic-mcp.mjs.map +1 -0
  122. package/dist/services/agent-guide/adapters/index.d.mts +23 -0
  123. package/dist/services/agent-guide/adapters/index.d.mts.map +1 -0
  124. package/dist/services/agent-guide/adapters/index.mjs +31 -0
  125. package/dist/services/agent-guide/adapters/index.mjs.map +1 -0
  126. package/dist/services/agent-guide/agent-guide-service.d.mts +56 -0
  127. package/dist/services/agent-guide/agent-guide-service.d.mts.map +1 -0
  128. package/dist/services/agent-guide/agent-guide-service.mjs +147 -0
  129. package/dist/services/agent-guide/agent-guide-service.mjs.map +1 -0
  130. package/dist/services/agent-guide/index.d.mts +6 -0
  131. package/dist/services/agent-guide/index.mjs +7 -0
  132. package/dist/services/agent-guide/types.d.mts +58 -0
  133. package/dist/services/agent-guide/types.d.mts.map +1 -0
  134. package/dist/services/build.d.mts +61 -0
  135. package/dist/services/build.d.mts.map +1 -0
  136. package/dist/services/build.mjs +151 -0
  137. package/dist/services/build.mjs.map +1 -0
  138. package/dist/services/ci-check/checks/coverage.mjs +77 -0
  139. package/dist/services/ci-check/checks/coverage.mjs.map +1 -0
  140. package/dist/services/ci-check/checks/deps.mjs +32 -0
  141. package/dist/services/ci-check/checks/deps.mjs.map +1 -0
  142. package/dist/services/ci-check/checks/doctor.mjs +38 -0
  143. package/dist/services/ci-check/checks/doctor.mjs.map +1 -0
  144. package/dist/services/ci-check/checks/drift.mjs +40 -0
  145. package/dist/services/ci-check/checks/drift.mjs.map +1 -0
  146. package/dist/services/ci-check/checks/handlers.mjs +38 -0
  147. package/dist/services/ci-check/checks/handlers.mjs.map +1 -0
  148. package/dist/services/ci-check/checks/implementation.mjs +73 -0
  149. package/dist/services/ci-check/checks/implementation.mjs.map +1 -0
  150. package/dist/services/ci-check/checks/index.mjs +13 -0
  151. package/dist/services/ci-check/checks/integrity.mjs +31 -0
  152. package/dist/services/ci-check/checks/integrity.mjs.map +1 -0
  153. package/dist/services/ci-check/checks/layers.mjs +66 -0
  154. package/dist/services/ci-check/checks/layers.mjs.map +1 -0
  155. package/dist/services/ci-check/checks/structure.mjs +35 -0
  156. package/dist/services/ci-check/checks/structure.mjs.map +1 -0
  157. package/dist/services/ci-check/checks/test-refs.mjs +63 -0
  158. package/dist/services/ci-check/checks/test-refs.mjs.map +1 -0
  159. package/dist/services/ci-check/checks/tests.mjs +38 -0
  160. package/dist/services/ci-check/checks/tests.mjs.map +1 -0
  161. package/dist/services/ci-check/ci-check-service.d.mts +16 -0
  162. package/dist/services/ci-check/ci-check-service.d.mts.map +1 -0
  163. package/dist/services/ci-check/ci-check-service.mjs +129 -0
  164. package/dist/services/ci-check/ci-check-service.mjs.map +1 -0
  165. package/dist/services/ci-check/index.d.mts +2 -0
  166. package/dist/services/ci-check/index.mjs +4 -0
  167. package/dist/services/ci-check/types.d.mts +147 -0
  168. package/dist/services/ci-check/types.d.mts.map +1 -0
  169. package/dist/services/ci-check/types.mjs +37 -0
  170. package/dist/services/ci-check/types.mjs.map +1 -0
  171. package/dist/services/ci-check/utils.mjs +76 -0
  172. package/dist/services/ci-check/utils.mjs.map +1 -0
  173. package/dist/services/clean.d.mts +41 -0
  174. package/dist/services/clean.d.mts.map +1 -0
  175. package/dist/services/clean.mjs +72 -0
  176. package/dist/services/clean.mjs.map +1 -0
  177. package/dist/services/config.d.mts +16 -0
  178. package/dist/services/config.d.mts.map +1 -0
  179. package/dist/services/config.mjs +63 -0
  180. package/dist/services/config.mjs.map +1 -0
  181. package/dist/services/coverage/parsers/index.mjs +34 -0
  182. package/dist/services/coverage/parsers/index.mjs.map +1 -0
  183. package/dist/services/coverage/parsers/istanbul-parser.mjs +108 -0
  184. package/dist/services/coverage/parsers/istanbul-parser.mjs.map +1 -0
  185. package/dist/services/coverage/validator.mjs +55 -0
  186. package/dist/services/coverage/validator.mjs.map +1 -0
  187. package/dist/services/create/ai-generator.d.mts +84 -0
  188. package/dist/services/create/ai-generator.d.mts.map +1 -0
  189. package/dist/services/create/ai-generator.mjs +178 -0
  190. package/dist/services/create/ai-generator.mjs.map +1 -0
  191. package/dist/services/create/index.d.mts +28 -0
  192. package/dist/services/create/index.d.mts.map +1 -0
  193. package/dist/services/create/index.mjs +37 -0
  194. package/dist/services/create/index.mjs.map +1 -0
  195. package/dist/services/create/templates.d.mts +22 -0
  196. package/dist/services/create/templates.d.mts.map +1 -0
  197. package/dist/services/create/templates.mjs +39 -0
  198. package/dist/services/create/templates.mjs.map +1 -0
  199. package/dist/services/deps.d.mts +53 -0
  200. package/dist/services/deps.d.mts.map +1 -0
  201. package/dist/services/deps.mjs +62 -0
  202. package/dist/services/deps.mjs.map +1 -0
  203. package/dist/services/diff.d.mts +34 -0
  204. package/dist/services/diff.d.mts.map +1 -0
  205. package/dist/services/diff.mjs +34 -0
  206. package/dist/services/diff.mjs.map +1 -0
  207. package/dist/services/docs/docs-service.d.mts +20 -0
  208. package/dist/services/docs/docs-service.d.mts.map +1 -0
  209. package/dist/services/docs/docs-service.mjs +59 -0
  210. package/dist/services/docs/docs-service.mjs.map +1 -0
  211. package/dist/services/docs/index.d.mts +1 -0
  212. package/dist/services/docs/index.mjs +3 -0
  213. package/dist/services/doctor/checks/ai.mjs +119 -0
  214. package/dist/services/doctor/checks/ai.mjs.map +1 -0
  215. package/dist/services/doctor/checks/cli.mjs +156 -0
  216. package/dist/services/doctor/checks/cli.mjs.map +1 -0
  217. package/dist/services/doctor/checks/config.mjs +303 -0
  218. package/dist/services/doctor/checks/config.mjs.map +1 -0
  219. package/dist/services/doctor/checks/deps.mjs +267 -0
  220. package/dist/services/doctor/checks/deps.mjs.map +1 -0
  221. package/dist/services/doctor/checks/index.mjs +9 -0
  222. package/dist/services/doctor/checks/layers.mjs +139 -0
  223. package/dist/services/doctor/checks/layers.mjs.map +1 -0
  224. package/dist/services/doctor/checks/mcp.mjs +145 -0
  225. package/dist/services/doctor/checks/mcp.mjs.map +1 -0
  226. package/dist/services/doctor/checks/workspace.mjs +263 -0
  227. package/dist/services/doctor/checks/workspace.mjs.map +1 -0
  228. package/dist/services/doctor/doctor-service.d.mts +24 -0
  229. package/dist/services/doctor/doctor-service.d.mts.map +1 -0
  230. package/dist/services/doctor/doctor-service.mjs +118 -0
  231. package/dist/services/doctor/doctor-service.mjs.map +1 -0
  232. package/dist/services/doctor/index.d.mts +2 -0
  233. package/dist/services/doctor/index.mjs +4 -0
  234. package/dist/services/doctor/types.d.mts +118 -0
  235. package/dist/services/doctor/types.d.mts.map +1 -0
  236. package/dist/services/doctor/types.mjs +29 -0
  237. package/dist/services/doctor/types.mjs.map +1 -0
  238. package/dist/services/drift.mjs +73 -0
  239. package/dist/services/drift.mjs.map +1 -0
  240. package/dist/services/extract.d.mts +12 -0
  241. package/dist/services/extract.d.mts.map +1 -0
  242. package/dist/services/extract.mjs +33 -0
  243. package/dist/services/extract.mjs.map +1 -0
  244. package/dist/services/features/completion.d.mts +21 -0
  245. package/dist/services/features/completion.d.mts.map +1 -0
  246. package/dist/services/features/completion.mjs +70 -0
  247. package/dist/services/features/completion.mjs.map +1 -0
  248. package/dist/services/features/feature-editor.d.mts +27 -0
  249. package/dist/services/features/feature-editor.d.mts.map +1 -0
  250. package/dist/services/features/feature-editor.mjs +37 -0
  251. package/dist/services/features/feature-editor.mjs.map +1 -0
  252. package/dist/services/features/index.d.mts +11 -0
  253. package/dist/services/features/index.d.mts.map +1 -0
  254. package/dist/services/features/index.mjs +16 -0
  255. package/dist/services/features/index.mjs.map +1 -0
  256. package/dist/services/features/validation.d.mts +21 -0
  257. package/dist/services/features/validation.d.mts.map +1 -0
  258. package/dist/services/features/validation.mjs +27 -0
  259. package/dist/services/features/validation.mjs.map +1 -0
  260. package/dist/services/fix/fix-link-formatter.d.mts +12 -0
  261. package/dist/services/fix/fix-link-formatter.d.mts.map +1 -0
  262. package/dist/services/fix/fix-link-formatter.mjs +38 -0
  263. package/dist/services/fix/fix-link-formatter.mjs.map +1 -0
  264. package/dist/services/fix/fix-service.d.mts +74 -0
  265. package/dist/services/fix/fix-service.d.mts.map +1 -0
  266. package/dist/services/fix/fix-service.mjs +169 -0
  267. package/dist/services/fix/fix-service.mjs.map +1 -0
  268. package/dist/services/fix/index.d.mts +16 -0
  269. package/dist/services/fix/index.d.mts.map +1 -0
  270. package/dist/services/fix/index.mjs +24 -0
  271. package/dist/services/fix/index.mjs.map +1 -0
  272. package/dist/services/fix/path-resolver.mjs +83 -0
  273. package/dist/services/fix/path-resolver.mjs.map +1 -0
  274. package/dist/services/fix/schemas.d.mts +17 -0
  275. package/dist/services/fix/schemas.d.mts.map +1 -0
  276. package/dist/services/fix/schemas.mjs +12 -0
  277. package/dist/services/fix/schemas.mjs.map +1 -0
  278. package/dist/services/fix/strategies/implement-ai.d.mts +18 -0
  279. package/dist/services/fix/strategies/implement-ai.d.mts.map +1 -0
  280. package/dist/services/fix/strategies/implement-ai.mjs +139 -0
  281. package/dist/services/fix/strategies/implement-ai.mjs.map +1 -0
  282. package/dist/services/fix/strategies/implement-skeleton.d.mts +14 -0
  283. package/dist/services/fix/strategies/implement-skeleton.d.mts.map +1 -0
  284. package/dist/services/fix/strategies/implement-skeleton.mjs +77 -0
  285. package/dist/services/fix/strategies/implement-skeleton.mjs.map +1 -0
  286. package/dist/services/fix/strategies/index.d.mts +3 -0
  287. package/dist/services/fix/strategies/remove-reference.d.mts +17 -0
  288. package/dist/services/fix/strategies/remove-reference.d.mts.map +1 -0
  289. package/dist/services/fix/strategies/remove-reference.mjs +98 -0
  290. package/dist/services/fix/strategies/remove-reference.mjs.map +1 -0
  291. package/dist/services/fix/types.d.mts +207 -0
  292. package/dist/services/fix/types.d.mts.map +1 -0
  293. package/dist/services/fix/types.mjs +20 -0
  294. package/dist/services/fix/types.mjs.map +1 -0
  295. package/dist/services/formatter.d.mts +15 -0
  296. package/dist/services/formatter.d.mts.map +1 -0
  297. package/dist/services/formatter.mjs +26 -0
  298. package/dist/services/formatter.mjs.map +1 -0
  299. package/dist/services/gap.d.mts +18 -0
  300. package/dist/services/gap.d.mts.map +1 -0
  301. package/dist/services/gap.mjs +44 -0
  302. package/dist/services/gap.mjs.map +1 -0
  303. package/dist/services/generate-artifacts.d.mts +11 -0
  304. package/dist/services/generate-artifacts.d.mts.map +1 -0
  305. package/dist/services/generate-artifacts.mjs +27 -0
  306. package/dist/services/generate-artifacts.mjs.map +1 -0
  307. package/dist/services/hooks/hooks-service.d.mts +24 -0
  308. package/dist/services/hooks/hooks-service.d.mts.map +1 -0
  309. package/dist/services/hooks/hooks-service.mjs +126 -0
  310. package/dist/services/hooks/hooks-service.mjs.map +1 -0
  311. package/dist/services/hooks/index.d.mts +10 -0
  312. package/dist/services/hooks/index.d.mts.map +1 -0
  313. package/dist/services/hooks/index.mjs +12 -0
  314. package/dist/services/hooks/index.mjs.map +1 -0
  315. package/dist/services/hooks/types.d.mts +56 -0
  316. package/dist/services/hooks/types.d.mts.map +1 -0
  317. package/dist/services/impact/formatters.d.mts +27 -0
  318. package/dist/services/impact/formatters.d.mts.map +1 -0
  319. package/dist/services/impact/formatters.mjs +139 -0
  320. package/dist/services/impact/formatters.mjs.map +1 -0
  321. package/dist/services/impact/impact-detection-service.d.mts +22 -0
  322. package/dist/services/impact/impact-detection-service.d.mts.map +1 -0
  323. package/dist/services/impact/impact-detection-service.mjs +96 -0
  324. package/dist/services/impact/impact-detection-service.mjs.map +1 -0
  325. package/dist/services/impact/index.d.mts +11 -0
  326. package/dist/services/impact/index.d.mts.map +1 -0
  327. package/dist/services/impact/index.mjs +16 -0
  328. package/dist/services/impact/index.mjs.map +1 -0
  329. package/dist/services/impact/types.d.mts +63 -0
  330. package/dist/services/impact/types.d.mts.map +1 -0
  331. package/dist/services/implementation/discovery.d.mts +30 -0
  332. package/dist/services/implementation/discovery.d.mts.map +1 -0
  333. package/dist/services/implementation/discovery.mjs +144 -0
  334. package/dist/services/implementation/discovery.mjs.map +1 -0
  335. package/dist/services/implementation/index.d.mts +6 -0
  336. package/dist/services/implementation/index.mjs +7 -0
  337. package/dist/services/implementation/resolver/conventions.d.mts +18 -0
  338. package/dist/services/implementation/resolver/conventions.d.mts.map +1 -0
  339. package/dist/services/implementation/resolver/conventions.mjs +59 -0
  340. package/dist/services/implementation/resolver/conventions.mjs.map +1 -0
  341. package/dist/services/implementation/resolver/index.d.mts +24 -0
  342. package/dist/services/implementation/resolver/index.d.mts.map +1 -0
  343. package/dist/services/implementation/resolver/index.mjs +111 -0
  344. package/dist/services/implementation/resolver/index.mjs.map +1 -0
  345. package/dist/services/implementation/resolver/parsers.d.mts +16 -0
  346. package/dist/services/implementation/resolver/parsers.d.mts.map +1 -0
  347. package/dist/services/implementation/resolver/parsers.mjs +100 -0
  348. package/dist/services/implementation/resolver/parsers.mjs.map +1 -0
  349. package/dist/services/implementation/resolver/status.d.mts +21 -0
  350. package/dist/services/implementation/resolver/status.d.mts.map +1 -0
  351. package/dist/services/implementation/resolver/status.mjs +31 -0
  352. package/dist/services/implementation/resolver/status.mjs.map +1 -0
  353. package/dist/services/implementation/types.d.mts +89 -0
  354. package/dist/services/implementation/types.d.mts.map +1 -0
  355. package/dist/services/index.d.mts +103 -0
  356. package/dist/services/index.mjs +100 -0
  357. package/dist/services/integrity-diagram.d.mts +36 -0
  358. package/dist/services/integrity-diagram.d.mts.map +1 -0
  359. package/dist/services/integrity-diagram.mjs +275 -0
  360. package/dist/services/integrity-diagram.mjs.map +1 -0
  361. package/dist/services/integrity.d.mts +152 -0
  362. package/dist/services/integrity.d.mts.map +1 -0
  363. package/dist/services/integrity.mjs +361 -0
  364. package/dist/services/integrity.mjs.map +1 -0
  365. package/dist/services/layer-discovery.d.mts +77 -0
  366. package/dist/services/layer-discovery.d.mts.map +1 -0
  367. package/dist/services/layer-discovery.mjs +121 -0
  368. package/dist/services/layer-discovery.mjs.map +1 -0
  369. package/dist/services/list.d.mts +37 -0
  370. package/dist/services/list.d.mts.map +1 -0
  371. package/dist/services/list.mjs +46 -0
  372. package/dist/services/list.mjs.map +1 -0
  373. package/dist/services/llm/index.d.mts +28 -0
  374. package/dist/services/llm/index.d.mts.map +1 -0
  375. package/dist/services/llm/index.mjs +187 -0
  376. package/dist/services/llm/index.mjs.map +1 -0
  377. package/dist/services/llm/verify-static.d.mts +26 -0
  378. package/dist/services/llm/verify-static.d.mts.map +1 -0
  379. package/dist/services/llm/verify-static.mjs +82 -0
  380. package/dist/services/llm/verify-static.mjs.map +1 -0
  381. package/dist/services/modules/module-resolver.mjs +61 -0
  382. package/dist/services/modules/module-resolver.mjs.map +1 -0
  383. package/dist/services/openapi/export-service.d.mts +53 -0
  384. package/dist/services/openapi/export-service.d.mts.map +1 -0
  385. package/dist/services/openapi/export-service.mjs +50 -0
  386. package/dist/services/openapi/export-service.mjs.map +1 -0
  387. package/dist/services/openapi/import-service.d.mts +17 -0
  388. package/dist/services/openapi/import-service.d.mts.map +1 -0
  389. package/dist/services/openapi/import-service.mjs +168 -0
  390. package/dist/services/openapi/import-service.mjs.map +1 -0
  391. package/dist/services/openapi/index.d.mts +5 -0
  392. package/dist/services/openapi/index.mjs +6 -0
  393. package/dist/services/openapi/sync-service.d.mts +17 -0
  394. package/dist/services/openapi/sync-service.d.mts.map +1 -0
  395. package/dist/services/openapi/sync-service.mjs +120 -0
  396. package/dist/services/openapi/sync-service.mjs.map +1 -0
  397. package/dist/services/openapi/types.d.mts +162 -0
  398. package/dist/services/openapi/types.d.mts.map +1 -0
  399. package/dist/services/openapi/validate-service.d.mts +16 -0
  400. package/dist/services/openapi/validate-service.d.mts.map +1 -0
  401. package/dist/services/openapi/validate-service.mjs +130 -0
  402. package/dist/services/openapi/validate-service.mjs.map +1 -0
  403. package/dist/services/quickstart/dependencies.d.mts +31 -0
  404. package/dist/services/quickstart/dependencies.d.mts.map +1 -0
  405. package/dist/services/quickstart/dependencies.mjs +57 -0
  406. package/dist/services/quickstart/dependencies.mjs.map +1 -0
  407. package/dist/services/quickstart/index.mjs +4 -0
  408. package/dist/services/quickstart/quickstart-service.d.mts +20 -0
  409. package/dist/services/quickstart/quickstart-service.d.mts.map +1 -0
  410. package/dist/services/quickstart/quickstart-service.mjs +196 -0
  411. package/dist/services/quickstart/quickstart-service.mjs.map +1 -0
  412. package/dist/services/quickstart/types.d.mts +81 -0
  413. package/dist/services/quickstart/types.d.mts.map +1 -0
  414. package/dist/services/regenerator.d.mts +18 -0
  415. package/dist/services/regenerator.d.mts.map +1 -0
  416. package/dist/services/regenerator.mjs +23 -0
  417. package/dist/services/regenerator.mjs.map +1 -0
  418. package/dist/services/registry.d.mts +53 -0
  419. package/dist/services/registry.d.mts.map +1 -0
  420. package/dist/services/registry.mjs +74 -0
  421. package/dist/services/registry.mjs.map +1 -0
  422. package/dist/services/rulesync.d.mts +17 -0
  423. package/dist/services/rulesync.d.mts.map +1 -0
  424. package/dist/services/rulesync.mjs +71 -0
  425. package/dist/services/rulesync.mjs.map +1 -0
  426. package/dist/services/setup/config-generators.d.mts +42 -0
  427. package/dist/services/setup/config-generators.d.mts.map +1 -0
  428. package/dist/services/setup/config-generators.mjs +252 -0
  429. package/dist/services/setup/config-generators.mjs.map +1 -0
  430. package/dist/services/setup/file-merger.d.mts +27 -0
  431. package/dist/services/setup/file-merger.d.mts.map +1 -0
  432. package/dist/services/setup/file-merger.mjs +61 -0
  433. package/dist/services/setup/file-merger.mjs.map +1 -0
  434. package/dist/services/setup/setup-service.d.mts +12 -0
  435. package/dist/services/setup/setup-service.d.mts.map +1 -0
  436. package/dist/services/setup/setup-service.mjs +96 -0
  437. package/dist/services/setup/setup-service.mjs.map +1 -0
  438. package/dist/services/setup/targets/agents-md.mjs +47 -0
  439. package/dist/services/setup/targets/agents-md.mjs.map +1 -0
  440. package/dist/services/setup/targets/cli-config.mjs +60 -0
  441. package/dist/services/setup/targets/cli-config.mjs.map +1 -0
  442. package/dist/services/setup/targets/cursor-rules.mjs +48 -0
  443. package/dist/services/setup/targets/cursor-rules.mjs.map +1 -0
  444. package/dist/services/setup/targets/mcp-claude.mjs +60 -0
  445. package/dist/services/setup/targets/mcp-claude.mjs.map +1 -0
  446. package/dist/services/setup/targets/mcp-cursor.mjs +59 -0
  447. package/dist/services/setup/targets/mcp-cursor.mjs.map +1 -0
  448. package/dist/services/setup/targets/vscode-settings.mjs +63 -0
  449. package/dist/services/setup/targets/vscode-settings.mjs.map +1 -0
  450. package/dist/services/setup/types.d.mts +85 -0
  451. package/dist/services/setup/types.d.mts.map +1 -0
  452. package/dist/services/setup/types.mjs +27 -0
  453. package/dist/services/setup/types.mjs.map +1 -0
  454. package/dist/services/sync.d.mts +42 -0
  455. package/dist/services/sync.d.mts.map +1 -0
  456. package/dist/services/sync.mjs +64 -0
  457. package/dist/services/sync.mjs.map +1 -0
  458. package/dist/services/test/index.d.mts +2 -0
  459. package/dist/services/test/index.mjs +4 -0
  460. package/dist/services/test/test-generator-service.d.mts +24 -0
  461. package/dist/services/test/test-generator-service.d.mts.map +1 -0
  462. package/dist/services/test/test-generator-service.mjs +92 -0
  463. package/dist/services/test/test-generator-service.mjs.map +1 -0
  464. package/dist/services/test/test-service.d.mts +27 -0
  465. package/dist/services/test/test-service.d.mts.map +1 -0
  466. package/dist/services/test/test-service.mjs +94 -0
  467. package/dist/services/test/test-service.mjs.map +1 -0
  468. package/dist/services/test-link/index.d.mts +18 -0
  469. package/dist/services/test-link/index.d.mts.map +1 -0
  470. package/dist/services/test-link/index.mjs +60 -0
  471. package/dist/services/test-link/index.mjs.map +1 -0
  472. package/dist/services/test-link/test-ref-validator.d.mts +2 -0
  473. package/dist/services/test-link/test-ref-validator.mjs +50 -0
  474. package/dist/services/test-link/test-ref-validator.mjs.map +1 -0
  475. package/dist/services/upgrade/index.d.mts +10 -0
  476. package/dist/services/upgrade/index.d.mts.map +1 -0
  477. package/dist/services/upgrade/index.mjs +15 -0
  478. package/dist/services/upgrade/index.mjs.map +1 -0
  479. package/dist/services/upgrade/types.d.mts +78 -0
  480. package/dist/services/upgrade/types.d.mts.map +1 -0
  481. package/dist/services/upgrade/upgrade-service.d.mts +38 -0
  482. package/dist/services/upgrade/upgrade-service.d.mts.map +1 -0
  483. package/dist/services/upgrade/upgrade-service.mjs +201 -0
  484. package/dist/services/upgrade/upgrade-service.mjs.map +1 -0
  485. package/dist/services/validate/blueprint-validator.d.mts +23 -0
  486. package/dist/services/validate/blueprint-validator.d.mts.map +1 -0
  487. package/dist/services/validate/blueprint-validator.mjs +50 -0
  488. package/dist/services/validate/blueprint-validator.mjs.map +1 -0
  489. package/dist/services/validate/implementation-agent-validator.d.mts +20 -0
  490. package/dist/services/validate/implementation-agent-validator.d.mts.map +1 -0
  491. package/dist/services/validate/implementation-agent-validator.mjs +42 -0
  492. package/dist/services/validate/implementation-agent-validator.mjs.map +1 -0
  493. package/dist/services/validate/implementation-validator.d.mts +32 -0
  494. package/dist/services/validate/implementation-validator.d.mts.map +1 -0
  495. package/dist/services/validate/implementation-validator.mjs +64 -0
  496. package/dist/services/validate/implementation-validator.mjs.map +1 -0
  497. package/dist/services/validate/index.d.mts +5 -0
  498. package/dist/services/validate/index.mjs +7 -0
  499. package/dist/services/validate/spec-validator.d.mts +42 -0
  500. package/dist/services/validate/spec-validator.d.mts.map +1 -0
  501. package/dist/services/validate/spec-validator.mjs +49 -0
  502. package/dist/services/validate/spec-validator.mjs.map +1 -0
  503. package/dist/services/validate/tenant-validator.d.mts +21 -0
  504. package/dist/services/validate/tenant-validator.d.mts.map +1 -0
  505. package/dist/services/validate/tenant-validator.mjs +165 -0
  506. package/dist/services/validate/tenant-validator.mjs.map +1 -0
  507. package/dist/services/verification-cache/adapters/filesystem.d.mts +46 -0
  508. package/dist/services/verification-cache/adapters/filesystem.d.mts.map +1 -0
  509. package/dist/services/verification-cache/adapters/filesystem.mjs +120 -0
  510. package/dist/services/verification-cache/adapters/filesystem.mjs.map +1 -0
  511. package/dist/services/verification-cache/adapters/in-memory.d.mts +27 -0
  512. package/dist/services/verification-cache/adapters/in-memory.d.mts.map +1 -0
  513. package/dist/services/verification-cache/adapters/in-memory.mjs +46 -0
  514. package/dist/services/verification-cache/adapters/in-memory.mjs.map +1 -0
  515. package/dist/services/verification-cache/adapters/index.d.mts +3 -0
  516. package/dist/services/verification-cache/adapters/index.mjs +5 -0
  517. package/dist/services/verification-cache/adapters/workspace-state.d.mts +49 -0
  518. package/dist/services/verification-cache/adapters/workspace-state.d.mts.map +1 -0
  519. package/dist/services/verification-cache/adapters/workspace-state.mjs +91 -0
  520. package/dist/services/verification-cache/adapters/workspace-state.mjs.map +1 -0
  521. package/dist/services/verification-cache/cache-service.d.mts +70 -0
  522. package/dist/services/verification-cache/cache-service.d.mts.map +1 -0
  523. package/dist/services/verification-cache/cache-service.mjs +256 -0
  524. package/dist/services/verification-cache/cache-service.mjs.map +1 -0
  525. package/dist/services/verification-cache/index.d.mts +6 -0
  526. package/dist/services/verification-cache/index.mjs +8 -0
  527. package/dist/services/verification-cache/types.d.mts +124 -0
  528. package/dist/services/verification-cache/types.d.mts.map +1 -0
  529. package/dist/services/verification-cache/types.mjs +16 -0
  530. package/dist/services/verification-cache/types.mjs.map +1 -0
  531. package/dist/services/verify/ai-verifier.d.mts +25 -0
  532. package/dist/services/verify/ai-verifier.d.mts.map +1 -0
  533. package/dist/services/verify/ai-verifier.mjs +403 -0
  534. package/dist/services/verify/ai-verifier.mjs.map +1 -0
  535. package/dist/services/verify/behavior-verifier.d.mts +12 -0
  536. package/dist/services/verify/behavior-verifier.d.mts.map +1 -0
  537. package/dist/services/verify/behavior-verifier.mjs +186 -0
  538. package/dist/services/verify/behavior-verifier.mjs.map +1 -0
  539. package/dist/services/verify/index.d.mts +5 -0
  540. package/dist/services/verify/index.mjs +6 -0
  541. package/dist/services/verify/structure-verifier.d.mts +12 -0
  542. package/dist/services/verify/structure-verifier.d.mts.map +1 -0
  543. package/dist/services/verify/structure-verifier.mjs +196 -0
  544. package/dist/services/verify/structure-verifier.mjs.map +1 -0
  545. package/dist/services/verify/types.d.mts +137 -0
  546. package/dist/services/verify/types.d.mts.map +1 -0
  547. package/dist/services/verify/verify-service.d.mts +60 -0
  548. package/dist/services/verify/verify-service.d.mts.map +1 -0
  549. package/dist/services/verify/verify-service.mjs +204 -0
  550. package/dist/services/verify/verify-service.mjs.map +1 -0
  551. package/dist/services/versioning/changelog-formatter.d.mts +24 -0
  552. package/dist/services/versioning/changelog-formatter.d.mts.map +1 -0
  553. package/dist/services/versioning/changelog-formatter.mjs +155 -0
  554. package/dist/services/versioning/changelog-formatter.mjs.map +1 -0
  555. package/dist/services/versioning/conventional-commits.d.mts +95 -0
  556. package/dist/services/versioning/conventional-commits.d.mts.map +1 -0
  557. package/dist/services/versioning/conventional-commits.mjs +184 -0
  558. package/dist/services/versioning/conventional-commits.mjs.map +1 -0
  559. package/dist/services/versioning/index.d.mts +12 -0
  560. package/dist/services/versioning/index.d.mts.map +1 -0
  561. package/dist/services/versioning/index.mjs +28 -0
  562. package/dist/services/versioning/index.mjs.map +1 -0
  563. package/dist/services/versioning/types.d.mts +135 -0
  564. package/dist/services/versioning/types.d.mts.map +1 -0
  565. package/dist/services/versioning/versioning-service.d.mts +74 -0
  566. package/dist/services/versioning/versioning-service.d.mts.map +1 -0
  567. package/dist/services/versioning/versioning-service.mjs +501 -0
  568. package/dist/services/versioning/versioning-service.mjs.map +1 -0
  569. package/dist/services/vibe/config.d.mts +12 -0
  570. package/dist/services/vibe/config.d.mts.map +1 -0
  571. package/dist/services/vibe/config.mjs +43 -0
  572. package/dist/services/vibe/config.mjs.map +1 -0
  573. package/dist/services/vibe/context.d.mts +19 -0
  574. package/dist/services/vibe/context.d.mts.map +1 -0
  575. package/dist/services/vibe/context.mjs +92 -0
  576. package/dist/services/vibe/context.mjs.map +1 -0
  577. package/dist/services/vibe/definitions.d.mts +8 -0
  578. package/dist/services/vibe/definitions.d.mts.map +1 -0
  579. package/dist/services/vibe/definitions.mjs +129 -0
  580. package/dist/services/vibe/definitions.mjs.map +1 -0
  581. package/dist/services/vibe/engine.d.mts +44 -0
  582. package/dist/services/vibe/engine.d.mts.map +1 -0
  583. package/dist/services/vibe/engine.mjs +147 -0
  584. package/dist/services/vibe/engine.mjs.map +1 -0
  585. package/dist/services/vibe/index.d.mts +15 -0
  586. package/dist/services/vibe/index.d.mts.map +1 -0
  587. package/dist/services/vibe/index.mjs +26 -0
  588. package/dist/services/vibe/index.mjs.map +1 -0
  589. package/dist/services/vibe/loader.d.mts +15 -0
  590. package/dist/services/vibe/loader.d.mts.map +1 -0
  591. package/dist/services/vibe/loader.mjs +48 -0
  592. package/dist/services/vibe/loader.mjs.map +1 -0
  593. package/dist/services/vibe/pack.d.mts +19 -0
  594. package/dist/services/vibe/pack.d.mts.map +1 -0
  595. package/dist/services/vibe/pack.mjs +66 -0
  596. package/dist/services/vibe/pack.mjs.map +1 -0
  597. package/dist/services/vibe/types.d.mts +59 -0
  598. package/dist/services/vibe/types.d.mts.map +1 -0
  599. package/dist/services/vibe/types.mjs +12 -0
  600. package/dist/services/vibe/types.mjs.map +1 -0
  601. package/dist/services/view/index.d.mts +11 -0
  602. package/dist/services/view/index.d.mts.map +1 -0
  603. package/dist/services/view/index.mjs +119 -0
  604. package/dist/services/view/index.mjs.map +1 -0
  605. package/dist/services/watch.d.mts +25 -0
  606. package/dist/services/watch.d.mts.map +1 -0
  607. package/dist/services/watch.mjs +33 -0
  608. package/dist/services/watch.mjs.map +1 -0
  609. package/dist/services/workspace-info.d.mts +62 -0
  610. package/dist/services/workspace-info.d.mts.map +1 -0
  611. package/dist/services/workspace-info.mjs +103 -0
  612. package/dist/services/workspace-info.mjs.map +1 -0
  613. package/dist/templates/app-config.template.d.mts +7 -0
  614. package/dist/templates/app-config.template.d.mts.map +1 -0
  615. package/dist/templates/app-config.template.mjs +107 -0
  616. package/dist/templates/app-config.template.mjs.map +1 -0
  617. package/dist/templates/data-view.template.d.mts +7 -0
  618. package/dist/templates/data-view.template.d.mts.map +1 -0
  619. package/dist/templates/data-view.template.mjs +70 -0
  620. package/dist/templates/data-view.template.mjs.map +1 -0
  621. package/dist/templates/event.template.d.mts +11 -0
  622. package/dist/templates/event.template.d.mts.map +1 -0
  623. package/dist/templates/event.template.mjs +42 -0
  624. package/dist/templates/event.template.mjs.map +1 -0
  625. package/dist/templates/experiment.template.d.mts +7 -0
  626. package/dist/templates/experiment.template.d.mts.map +1 -0
  627. package/dist/templates/experiment.template.mjs +89 -0
  628. package/dist/templates/experiment.template.mjs.map +1 -0
  629. package/dist/templates/feature.template.d.mts +33 -0
  630. package/dist/templates/feature.template.d.mts.map +1 -0
  631. package/dist/templates/feature.template.mjs +52 -0
  632. package/dist/templates/feature.template.mjs.map +1 -0
  633. package/dist/templates/fix/skeleton-capability.mjs +49 -0
  634. package/dist/templates/fix/skeleton-capability.mjs.map +1 -0
  635. package/dist/templates/fix/skeleton-event.mjs +56 -0
  636. package/dist/templates/fix/skeleton-event.mjs.map +1 -0
  637. package/dist/templates/fix/skeleton-operation.mjs +122 -0
  638. package/dist/templates/fix/skeleton-operation.mjs.map +1 -0
  639. package/dist/templates/fix/skeleton-presentation.mjs +65 -0
  640. package/dist/templates/fix/skeleton-presentation.mjs.map +1 -0
  641. package/dist/templates/fix/utils.mjs +34 -0
  642. package/dist/templates/fix/utils.mjs.map +1 -0
  643. package/dist/templates/handler.template.d.mts +16 -0
  644. package/dist/templates/handler.template.d.mts.map +1 -0
  645. package/dist/templates/handler.template.mjs +100 -0
  646. package/dist/templates/handler.template.mjs.map +1 -0
  647. package/dist/templates/index.d.mts +22 -0
  648. package/dist/templates/index.d.mts.map +1 -0
  649. package/dist/templates/index.mjs +39 -0
  650. package/dist/templates/index.mjs.map +1 -0
  651. package/dist/templates/integration.template.d.mts +7 -0
  652. package/dist/templates/integration.template.d.mts.map +1 -0
  653. package/dist/templates/integration.template.mjs +160 -0
  654. package/dist/templates/integration.template.mjs.map +1 -0
  655. package/dist/templates/knowledge.template.d.mts +7 -0
  656. package/dist/templates/knowledge.template.d.mts.map +1 -0
  657. package/dist/templates/knowledge.template.mjs +75 -0
  658. package/dist/templates/knowledge.template.mjs.map +1 -0
  659. package/dist/templates/migration.template.d.mts +7 -0
  660. package/dist/templates/migration.template.d.mts.map +1 -0
  661. package/dist/templates/migration.template.mjs +62 -0
  662. package/dist/templates/migration.template.mjs.map +1 -0
  663. package/dist/templates/operation.template.d.mts +11 -0
  664. package/dist/templates/operation.template.d.mts.map +1 -0
  665. package/dist/templates/operation.template.mjs +107 -0
  666. package/dist/templates/operation.template.mjs.map +1 -0
  667. package/dist/templates/presentation.template.d.mts +11 -0
  668. package/dist/templates/presentation.template.d.mts.map +1 -0
  669. package/dist/templates/presentation.template.mjs +80 -0
  670. package/dist/templates/presentation.template.mjs.map +1 -0
  671. package/dist/templates/telemetry.template.d.mts +7 -0
  672. package/dist/templates/telemetry.template.d.mts.map +1 -0
  673. package/dist/templates/telemetry.template.mjs +91 -0
  674. package/dist/templates/telemetry.template.mjs.map +1 -0
  675. package/dist/templates/workflow-runner.template.d.mts +16 -0
  676. package/dist/templates/workflow-runner.template.d.mts.map +1 -0
  677. package/dist/templates/workflow-runner.template.mjs +50 -0
  678. package/dist/templates/workflow-runner.template.mjs.map +1 -0
  679. package/dist/templates/workflow.template.d.mts +7 -0
  680. package/dist/templates/workflow.template.d.mts.map +1 -0
  681. package/dist/templates/workflow.template.mjs +69 -0
  682. package/dist/templates/workflow.template.mjs.map +1 -0
  683. package/dist/types/config.d.mts +34 -0
  684. package/dist/types/config.d.mts.map +1 -0
  685. package/dist/types.d.mts +324 -0
  686. package/dist/types.d.mts.map +1 -0
  687. package/dist/utils/filter.d.mts +16 -0
  688. package/dist/utils/filter.d.mts.map +1 -0
  689. package/dist/utils/filter.mjs +22 -0
  690. package/dist/utils/filter.mjs.map +1 -0
  691. package/dist/utils/index.d.mts +11 -0
  692. package/dist/utils/index.d.mts.map +1 -0
  693. package/dist/utils/index.mjs +20 -0
  694. package/dist/utils/index.mjs.map +1 -0
  695. package/dist/utils/module-loader.d.mts +5 -0
  696. package/dist/utils/module-loader.d.mts.map +1 -0
  697. package/dist/utils/module-loader.mjs +41 -0
  698. package/dist/utils/module-loader.mjs.map +1 -0
  699. package/dist/utils/validation.d.mts +37 -0
  700. package/dist/utils/validation.d.mts.map +1 -0
  701. package/dist/utils/validation.mjs +43 -0
  702. package/dist/utils/validation.mjs.map +1 -0
  703. package/package.json +76 -0
@@ -0,0 +1,66 @@
1
+ import { findWorkspaceRoot } from "../../adapters/workspace.mjs";
2
+ import { copyFile, mkdir, readdir, stat } from "node:fs/promises";
3
+ import { join, resolve } from "node:path";
4
+ import { existsSync } from "node:fs";
5
+
6
+ //#region src/services/vibe/pack.ts
7
+ /**
8
+ * Pack installation service.
9
+ *
10
+ * Install vibe packs from local paths or registry.
11
+ */
12
+ /**
13
+ * Install a vibe pack from a local path.
14
+ */
15
+ async function installPack(packPath, cwd) {
16
+ const workingDir = cwd ?? process.cwd();
17
+ const root = findWorkspaceRoot(workingDir) ?? workingDir;
18
+ if (packPath.startsWith("registry:")) return {
19
+ success: false,
20
+ workflowsInstalled: 0,
21
+ templatesInstalled: 0,
22
+ error: "Registry pack install not yet implemented. Use local path."
23
+ };
24
+ const absPackPath = resolve(workingDir, packPath);
25
+ if (!existsSync(absPackPath)) return {
26
+ success: false,
27
+ workflowsInstalled: 0,
28
+ templatesInstalled: 0,
29
+ error: `Pack path not found: ${absPackPath}`
30
+ };
31
+ let workflowsCount = 0;
32
+ let templatesCount = 0;
33
+ const workflowsSrc = join(absPackPath, "workflows");
34
+ if (existsSync(workflowsSrc)) {
35
+ const workflowsDest = join(root, ".contractspec", "vibe", "workflows");
36
+ await mkdir(workflowsDest, { recursive: true });
37
+ const files = await readdir(workflowsSrc);
38
+ for (const file of files) if (file.endsWith(".json") || file.endsWith(".yaml") || file.endsWith(".yml")) {
39
+ await copyFile(join(workflowsSrc, file), join(workflowsDest, file));
40
+ workflowsCount++;
41
+ }
42
+ }
43
+ const templatesSrc = join(absPackPath, "templates");
44
+ if (existsSync(templatesSrc)) {
45
+ const templatesDest = join(root, ".contractspec", "vibe", "templates");
46
+ await mkdir(templatesDest, { recursive: true });
47
+ const files = await readdir(templatesSrc);
48
+ for (const file of files) {
49
+ const srcFile = join(templatesSrc, file);
50
+ const destFile = join(templatesDest, file);
51
+ if ((await stat(srcFile)).isFile()) {
52
+ await copyFile(srcFile, destFile);
53
+ templatesCount++;
54
+ }
55
+ }
56
+ }
57
+ return {
58
+ success: true,
59
+ workflowsInstalled: workflowsCount,
60
+ templatesInstalled: templatesCount
61
+ };
62
+ }
63
+
64
+ //#endregion
65
+ export { installPack };
66
+ //# sourceMappingURL=pack.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.mjs","names":[],"sources":["../../../src/services/vibe/pack.ts"],"sourcesContent":["/**\n * Pack installation service.\n *\n * Install vibe packs from local paths or registry.\n */\n\nimport { mkdir, copyFile, readdir, stat } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { findWorkspaceRoot } from '../../adapters/workspace';\n\nexport interface PackInstallResult {\n success: boolean;\n workflowsInstalled: number;\n templatesInstalled: number;\n error?: string;\n}\n\n/**\n * Install a vibe pack from a local path.\n */\nexport async function installPack(\n packPath: string,\n cwd?: string\n): Promise<PackInstallResult> {\n const workingDir = cwd ?? process.cwd();\n const root = findWorkspaceRoot(workingDir) ?? workingDir;\n\n // Handle registry packs (future)\n if (packPath.startsWith('registry:')) {\n return {\n success: false,\n workflowsInstalled: 0,\n templatesInstalled: 0,\n error: 'Registry pack install not yet implemented. Use local path.',\n };\n }\n\n const absPackPath = resolve(workingDir, packPath);\n if (!existsSync(absPackPath)) {\n return {\n success: false,\n workflowsInstalled: 0,\n templatesInstalled: 0,\n error: `Pack path not found: ${absPackPath}`,\n };\n }\n\n let workflowsCount = 0;\n let templatesCount = 0;\n\n // Install workflows\n const workflowsSrc = join(absPackPath, 'workflows');\n if (existsSync(workflowsSrc)) {\n const workflowsDest = join(root, '.contractspec', 'vibe', 'workflows');\n await mkdir(workflowsDest, { recursive: true });\n\n const files = await readdir(workflowsSrc);\n for (const file of files) {\n if (\n file.endsWith('.json') ||\n file.endsWith('.yaml') ||\n file.endsWith('.yml')\n ) {\n await copyFile(join(workflowsSrc, file), join(workflowsDest, file));\n workflowsCount++;\n }\n }\n }\n\n // Install templates\n const templatesSrc = join(absPackPath, 'templates');\n if (existsSync(templatesSrc)) {\n const templatesDest = join(root, '.contractspec', 'vibe', 'templates');\n await mkdir(templatesDest, { recursive: true });\n\n const files = await readdir(templatesSrc);\n for (const file of files) {\n const srcFile = join(templatesSrc, file);\n const destFile = join(templatesDest, file);\n const stats = await stat(srcFile);\n if (stats.isFile()) {\n await copyFile(srcFile, destFile);\n templatesCount++;\n }\n }\n }\n\n return {\n success: true,\n workflowsInstalled: workflowsCount,\n templatesInstalled: templatesCount,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,eAAsB,YACpB,UACA,KAC4B;CAC5B,MAAM,aAAa,OAAO,QAAQ,KAAK;CACvC,MAAM,OAAO,kBAAkB,WAAW,IAAI;AAG9C,KAAI,SAAS,WAAW,YAAY,CAClC,QAAO;EACL,SAAS;EACT,oBAAoB;EACpB,oBAAoB;EACpB,OAAO;EACR;CAGH,MAAM,cAAc,QAAQ,YAAY,SAAS;AACjD,KAAI,CAAC,WAAW,YAAY,CAC1B,QAAO;EACL,SAAS;EACT,oBAAoB;EACpB,oBAAoB;EACpB,OAAO,wBAAwB;EAChC;CAGH,IAAI,iBAAiB;CACrB,IAAI,iBAAiB;CAGrB,MAAM,eAAe,KAAK,aAAa,YAAY;AACnD,KAAI,WAAW,aAAa,EAAE;EAC5B,MAAM,gBAAgB,KAAK,MAAM,iBAAiB,QAAQ,YAAY;AACtE,QAAM,MAAM,eAAe,EAAE,WAAW,MAAM,CAAC;EAE/C,MAAM,QAAQ,MAAM,QAAQ,aAAa;AACzC,OAAK,MAAM,QAAQ,MACjB,KACE,KAAK,SAAS,QAAQ,IACtB,KAAK,SAAS,QAAQ,IACtB,KAAK,SAAS,OAAO,EACrB;AACA,SAAM,SAAS,KAAK,cAAc,KAAK,EAAE,KAAK,eAAe,KAAK,CAAC;AACnE;;;CAMN,MAAM,eAAe,KAAK,aAAa,YAAY;AACnD,KAAI,WAAW,aAAa,EAAE;EAC5B,MAAM,gBAAgB,KAAK,MAAM,iBAAiB,QAAQ,YAAY;AACtE,QAAM,MAAM,eAAe,EAAE,WAAW,MAAM,CAAC;EAE/C,MAAM,QAAQ,MAAM,QAAQ,aAAa;AACzC,OAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,UAAU,KAAK,cAAc,KAAK;GACxC,MAAM,WAAW,KAAK,eAAe,KAAK;AAE1C,QADc,MAAM,KAAK,QAAQ,EACvB,QAAQ,EAAE;AAClB,UAAM,SAAS,SAAS,SAAS;AACjC;;;;AAKN,QAAO;EACL,SAAS;EACT,oBAAoB;EACpB,oBAAoB;EACrB"}
@@ -0,0 +1,59 @@
1
+ //#region src/services/vibe/types.d.ts
2
+ /**
3
+ * Vibe workflow types.
4
+ *
5
+ * Platform-agnostic types for workflow execution.
6
+ */
7
+ type Track = 'quick' | 'product' | 'regulated';
8
+ interface WorkflowContext {
9
+ root: string;
10
+ config: Record<string, unknown>;
11
+ dryRun: boolean;
12
+ track: Track;
13
+ json: boolean;
14
+ [key: string]: unknown;
15
+ }
16
+ interface WorkflowStep {
17
+ id: string;
18
+ label: string;
19
+ command?: string;
20
+ args?: string[];
21
+ manualCheckpoint?: boolean;
22
+ manualMessage?: string;
23
+ condition?: (ctx: WorkflowContext) => boolean | Promise<boolean>;
24
+ execute?: (ctx: WorkflowContext) => Promise<void>;
25
+ tracks?: Track[];
26
+ }
27
+ interface WorkflowStepResult {
28
+ id: string;
29
+ name: string;
30
+ status: 'pass' | 'fail' | 'skip';
31
+ command?: string;
32
+ artifactsTouched?: string[];
33
+ error?: string;
34
+ }
35
+ interface Workflow {
36
+ id: string;
37
+ name: string;
38
+ description: string;
39
+ steps: WorkflowStep[];
40
+ }
41
+ interface WorkflowResult {
42
+ success: boolean;
43
+ steps: WorkflowStepResult[];
44
+ stepsExecuted: string[];
45
+ artifactsTouched: string[];
46
+ error?: Error;
47
+ }
48
+ interface VibeConfig {
49
+ canonicalRoot: string;
50
+ workRoot: string;
51
+ generatedRoot: string;
52
+ alwaysInjectFiles: string[];
53
+ contextExportAllowlist: string[];
54
+ [key: string]: unknown;
55
+ }
56
+ declare const DEFAULT_VIBE_CONFIG: VibeConfig;
57
+ //#endregion
58
+ export { DEFAULT_VIBE_CONFIG, Track, VibeConfig, Workflow, WorkflowContext, WorkflowResult, WorkflowStep, WorkflowStepResult };
59
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/services/vibe/types.ts"],"sourcesContent":[],"mappings":";;AAMA;AAEA;AASA;;AAOkD,KAlBtC,KAAA,GAkBsC,OAAA,GAAA,SAAA,GAAA,WAAA;AAChC,UAjBD,eAAA,CAiBC;EAAoB,IAAA,EAAA,MAAA;EAC3B,MAAA,EAhBD,MAgBC,CAAA,MAAA,EAAA,OAAA,CAAA;EAAK,MAAA,EAAA,OAAA;EAGC,KAAA,EAjBR,KAiBQ;EASA,IAAA,EAAA,OAAQ;EAOR,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAc;AAQ/B;AASa,UA7CI,YAAA,CAmDhB;;;;;;;oBA5CmB,8BAA8B;kBAChC,oBAAoB;WAC3B;;UAGM,kBAAA;;;;;;;;UASA,QAAA;;;;SAIR;;UAGQ,cAAA;;SAER;;;UAGC;;UAGO,UAAA;;;;;;;;cASJ,qBAAqB"}
@@ -0,0 +1,12 @@
1
+ //#region src/services/vibe/types.ts
2
+ const DEFAULT_VIBE_CONFIG = {
3
+ canonicalRoot: "contracts",
4
+ workRoot: ".contractspec/work",
5
+ generatedRoot: "src/generated",
6
+ alwaysInjectFiles: [],
7
+ contextExportAllowlist: []
8
+ };
9
+
10
+ //#endregion
11
+ export { DEFAULT_VIBE_CONFIG };
12
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","names":[],"sources":["../../../src/services/vibe/types.ts"],"sourcesContent":["/**\n * Vibe workflow types.\n *\n * Platform-agnostic types for workflow execution.\n */\n\nexport type Track = 'quick' | 'product' | 'regulated';\n\nexport interface WorkflowContext {\n root: string;\n config: Record<string, unknown>;\n dryRun: boolean;\n track: Track;\n json: boolean;\n [key: string]: unknown;\n}\n\nexport interface WorkflowStep {\n id: string;\n label: string;\n command?: string;\n args?: string[];\n manualCheckpoint?: boolean;\n manualMessage?: string;\n condition?: (ctx: WorkflowContext) => boolean | Promise<boolean>;\n execute?: (ctx: WorkflowContext) => Promise<void>;\n tracks?: Track[];\n}\n\nexport interface WorkflowStepResult {\n id: string;\n name: string;\n status: 'pass' | 'fail' | 'skip';\n command?: string;\n artifactsTouched?: string[];\n error?: string;\n}\n\nexport interface Workflow {\n id: string;\n name: string;\n description: string;\n steps: WorkflowStep[];\n}\n\nexport interface WorkflowResult {\n success: boolean;\n steps: WorkflowStepResult[];\n stepsExecuted: string[];\n artifactsTouched: string[];\n error?: Error;\n}\n\nexport interface VibeConfig {\n canonicalRoot: string;\n workRoot: string;\n generatedRoot: string;\n alwaysInjectFiles: string[];\n contextExportAllowlist: string[];\n [key: string]: unknown;\n}\n\nexport const DEFAULT_VIBE_CONFIG: VibeConfig = {\n canonicalRoot: 'contracts',\n workRoot: '.contractspec/work',\n generatedRoot: 'src/generated',\n alwaysInjectFiles: [],\n contextExportAllowlist: [],\n};\n"],"mappings":";AA8DA,MAAa,sBAAkC;CAC7C,eAAe;CACf,UAAU;CACV,eAAe;CACf,mBAAmB,EAAE;CACrB,wBAAwB,EAAE;CAC3B"}
@@ -0,0 +1,11 @@
1
+ import { WorkspaceAdapters } from "../../ports/logger.mjs";
2
+
3
+ //#region src/services/view/index.d.ts
4
+ type ViewAudience = 'product' | 'eng' | 'qa';
5
+ /**
6
+ * Generate an audience-specific view of a spec file.
7
+ */
8
+ declare function generateView(specFile: string, audience: ViewAudience, adapters: WorkspaceAdapters): Promise<string>;
9
+ //#endregion
10
+ export { ViewAudience, generateView };
11
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/view/index.ts"],"sourcesContent":[],"mappings":";;;KAMY,YAAA;;AAAZ;AAKA;AAEY,iBAFU,YAAA,CAEV,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EACA,iBADA,CAAA,EAET,OAFS,CAAA,MAAA,CAAA"}
@@ -0,0 +1,119 @@
1
+ import { loadSpecFromSource } from "@contractspec/module.workspace";
2
+
3
+ //#region src/services/view/index.ts
4
+ /**
5
+ * Generate an audience-specific view of a spec file.
6
+ */
7
+ async function generateView(specFile, audience, adapters) {
8
+ if (!await adapters.fs.exists(specFile)) throw new Error(`File not found: ${specFile}`);
9
+ const specs = await loadSpecFromSource(specFile);
10
+ if (specs.length === 0) return `No specs found in ${specFile} (Parse result empty)`;
11
+ return specs.map((spec) => formatSpecForAudience(spec, audience)).join("\n\n---\n\n");
12
+ }
13
+ function formatSpecForAudience(spec, audience) {
14
+ const lines = [];
15
+ switch (audience) {
16
+ case "product":
17
+ formatProductView(spec, lines);
18
+ break;
19
+ case "eng":
20
+ formatEngView(spec, lines);
21
+ break;
22
+ case "qa":
23
+ formatQaView(spec, lines);
24
+ break;
25
+ }
26
+ return lines.join("\n");
27
+ }
28
+ function formatProductView(spec, lines) {
29
+ lines.push(`# ${spec.meta.key}`);
30
+ lines.push("**View**: Product (User Flow & Capabilities)");
31
+ lines.push("");
32
+ if (spec.meta.goal) lines.push(`### Goal\n${spec.meta.goal}\n`);
33
+ if (spec.meta.context) lines.push(`### Context\n${spec.meta.context}\n`);
34
+ if (spec.specType === "feature") {
35
+ if (spec.operations?.length) {
36
+ lines.push("### Capabilities (Operations)");
37
+ spec.operations.forEach((op) => lines.push(`- **${op.name}**`));
38
+ lines.push("");
39
+ }
40
+ if (spec.presentations?.length) {
41
+ lines.push("### User Interfaces (Presentations)");
42
+ spec.presentations.forEach((p) => lines.push(`- **${p.name}**`));
43
+ lines.push("");
44
+ }
45
+ } else if (spec.specType === "operation") {
46
+ lines.push("### Behavior");
47
+ if (spec.hasPolicy) lines.push("- ✅ Enforces Business Policies");
48
+ if (spec.hasIo) lines.push("- ✅ Validates Inputs/Outputs");
49
+ if (spec.emittedEvents?.length) {
50
+ lines.push("### Triggers");
51
+ spec.emittedEvents.forEach((ev) => lines.push(`- **${ev.name}** (Event)`));
52
+ }
53
+ } else lines.push(`Type: ${spec.specType}`);
54
+ }
55
+ function formatEngView(spec, lines) {
56
+ lines.push(`# ${spec.meta.key}`);
57
+ lines.push("**View**: Engineering (API, Schemas, Constraints)");
58
+ lines.push("");
59
+ lines.push(`- **Type**: \`${spec.specType}\``);
60
+ lines.push(`- **Version**: \`${spec.meta.version}\``);
61
+ if (spec.meta.stability) lines.push(`- **Stability**: \`${spec.meta.stability}\``);
62
+ lines.push("");
63
+ if (spec.specType === "operation") {
64
+ lines.push("### Contract Details");
65
+ lines.push(`- **I/O Schema**: ${spec.hasIo ? "✅ Defined" : "❌ Missing"}`);
66
+ lines.push(`- **Policy Config**: ${spec.hasPolicy ? "✅ Defined" : "❌ None"}`);
67
+ lines.push("");
68
+ if (spec.emittedEvents?.length) {
69
+ lines.push("### Emitted Events");
70
+ spec.emittedEvents.forEach((ev) => lines.push(`- \`${ev.name}\``));
71
+ lines.push("");
72
+ }
73
+ } else if (spec.specType === "feature") {
74
+ if (spec.operations?.length) {
75
+ lines.push("### Operations");
76
+ spec.operations.forEach((op) => lines.push(`- \`${op.name}\``));
77
+ lines.push("");
78
+ }
79
+ if (spec.events?.length) {
80
+ lines.push("### Events");
81
+ spec.events.forEach((ev) => lines.push(`- \`${ev.name}\``));
82
+ lines.push("");
83
+ }
84
+ }
85
+ if (spec.sourceBlock) {
86
+ lines.push("### Source Signature");
87
+ lines.push("```typescript");
88
+ lines.push(spec.sourceBlock);
89
+ lines.push("```");
90
+ }
91
+ }
92
+ function formatQaView(spec, lines) {
93
+ lines.push(`# ${spec.meta.key}`);
94
+ lines.push("**View**: QA (Scenarios, Test Coverage)");
95
+ lines.push("");
96
+ if (spec.meta.goal) lines.push(`**Goal**: ${spec.meta.goal}\n`);
97
+ if (spec.testRefs?.length) {
98
+ lines.push("### Linked Scenarios");
99
+ spec.testRefs.forEach((test) => lines.push(`- 🧪 \`${test.name}\``));
100
+ lines.push("");
101
+ } else {
102
+ lines.push("### Linked Scenarios");
103
+ lines.push("_(No explicit test refs found)_");
104
+ lines.push("");
105
+ }
106
+ lines.push("### Verification Checklist");
107
+ if (spec.specType === "operation") {
108
+ lines.push(`- [ ] Verify input validation for \`${spec.meta.key}\` (Success/Fail cases)`);
109
+ if (spec.hasPolicy) lines.push(`- [ ] Verify policy enforcement rules`);
110
+ if (spec.emittedEvents?.length) spec.emittedEvents.forEach((ev) => lines.push(`- [ ] Verify event \`${ev.name}\` is emitted`));
111
+ } else if (spec.specType === "feature") {
112
+ if (spec.operations?.length) spec.operations.forEach((op) => lines.push(`- [ ] Test Operation flow: \`${op.name}\``));
113
+ if (spec.presentations?.length) spec.presentations.forEach((p) => lines.push(`- [ ] Test UI Component: \`${p.name}\``));
114
+ }
115
+ }
116
+
117
+ //#endregion
118
+ export { generateView };
119
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/view/index.ts"],"sourcesContent":["import {\n loadSpecFromSource,\n type ParsedSpec,\n} from '@contractspec/module.workspace';\nimport type { WorkspaceAdapters } from '../../ports/logger';\n\nexport type ViewAudience = 'product' | 'eng' | 'qa';\n\n/**\n * Generate an audience-specific view of a spec file.\n */\nexport async function generateView(\n specFile: string,\n audience: ViewAudience,\n adapters: WorkspaceAdapters\n): Promise<string> {\n // Using the module's static analysis, which uses node:fs internally\n // We check existence first using adapters for better error handling\n if (!(await adapters.fs.exists(specFile))) {\n throw new Error(`File not found: ${specFile}`);\n }\n\n const specs = await loadSpecFromSource(specFile);\n\n if (specs.length === 0) {\n return `No specs found in ${specFile} (Parse result empty)`;\n }\n\n return specs\n .map((spec) => formatSpecForAudience(spec, audience))\n .join('\\n\\n---\\n\\n');\n}\n\nfunction formatSpecForAudience(\n spec: ParsedSpec,\n audience: ViewAudience\n): string {\n const lines: string[] = [];\n\n switch (audience) {\n case 'product':\n formatProductView(spec, lines);\n break;\n case 'eng':\n formatEngView(spec, lines);\n break;\n case 'qa':\n formatQaView(spec, lines);\n break;\n }\n\n return lines.join('\\n');\n}\n\nfunction formatProductView(spec: ParsedSpec, lines: string[]) {\n lines.push(`# ${spec.meta.key}`);\n lines.push('**View**: Product (User Flow & Capabilities)');\n lines.push('');\n\n if (spec.meta.goal) {\n lines.push(`### Goal\\n${spec.meta.goal}\\n`);\n }\n if (spec.meta.context) {\n lines.push(`### Context\\n${spec.meta.context}\\n`);\n }\n\n if (spec.specType === 'feature') {\n if (spec.operations?.length) {\n lines.push('### Capabilities (Operations)');\n spec.operations.forEach((op) => lines.push(`- **${op.name}**`));\n lines.push('');\n }\n if (spec.presentations?.length) {\n lines.push('### User Interfaces (Presentations)');\n spec.presentations.forEach((p) => lines.push(`- **${p.name}**`));\n lines.push('');\n }\n } else if (spec.specType === 'operation') {\n lines.push('### Behavior');\n if (spec.hasPolicy) lines.push('- ✅ Enforces Business Policies');\n if (spec.hasIo) lines.push('- ✅ Validates Inputs/Outputs');\n if (spec.emittedEvents?.length) {\n lines.push('### Triggers');\n spec.emittedEvents.forEach((ev) =>\n lines.push(`- **${ev.name}** (Event)`)\n );\n }\n } else {\n lines.push(`Type: ${spec.specType}`);\n }\n}\n\nfunction formatEngView(spec: ParsedSpec, lines: string[]) {\n lines.push(`# ${spec.meta.key}`);\n lines.push('**View**: Engineering (API, Schemas, Constraints)');\n lines.push('');\n\n lines.push(`- **Type**: \\`${spec.specType}\\``);\n lines.push(`- **Version**: \\`${spec.meta.version}\\``);\n if (spec.meta.stability)\n lines.push(`- **Stability**: \\`${spec.meta.stability}\\``);\n lines.push('');\n\n if (spec.specType === 'operation') {\n lines.push('### Contract Details');\n lines.push(`- **I/O Schema**: ${spec.hasIo ? '✅ Defined' : '❌ Missing'}`);\n lines.push(\n `- **Policy Config**: ${spec.hasPolicy ? '✅ Defined' : '❌ None'}`\n );\n lines.push('');\n\n if (spec.emittedEvents?.length) {\n lines.push('### Emitted Events');\n spec.emittedEvents.forEach((ev) => lines.push(`- \\`${ev.name}\\``));\n lines.push('');\n }\n } else if (spec.specType === 'feature') {\n if (spec.operations?.length) {\n lines.push('### Operations');\n spec.operations.forEach((op) => lines.push(`- \\`${op.name}\\``));\n lines.push('');\n }\n if (spec.events?.length) {\n lines.push('### Events');\n spec.events.forEach((ev) => lines.push(`- \\`${ev.name}\\``));\n lines.push('');\n }\n }\n\n if (spec.sourceBlock) {\n lines.push('### Source Signature');\n lines.push('```typescript');\n lines.push(spec.sourceBlock);\n lines.push('```');\n }\n}\n\nfunction formatQaView(spec: ParsedSpec, lines: string[]) {\n lines.push(`# ${spec.meta.key}`);\n lines.push('**View**: QA (Scenarios, Test Coverage)');\n lines.push('');\n\n if (spec.meta.goal) {\n lines.push(`**Goal**: ${spec.meta.goal}\\n`);\n }\n\n if (spec.testRefs?.length) {\n lines.push('### Linked Scenarios');\n spec.testRefs.forEach((test) => lines.push(`- 🧪 \\`${test.name}\\``));\n lines.push('');\n } else {\n lines.push('### Linked Scenarios');\n lines.push('_(No explicit test refs found)_');\n lines.push('');\n }\n\n lines.push('### Verification Checklist');\n if (spec.specType === 'operation') {\n lines.push(\n `- [ ] Verify input validation for \\`${spec.meta.key}\\` (Success/Fail cases)`\n );\n if (spec.hasPolicy) lines.push(`- [ ] Verify policy enforcement rules`);\n if (spec.emittedEvents?.length) {\n spec.emittedEvents.forEach((ev) =>\n lines.push(`- [ ] Verify event \\`${ev.name}\\` is emitted`)\n );\n }\n } else if (spec.specType === 'feature') {\n if (spec.operations?.length) {\n spec.operations.forEach((op) =>\n lines.push(`- [ ] Test Operation flow: \\`${op.name}\\``)\n );\n }\n if (spec.presentations?.length) {\n spec.presentations.forEach((p) =>\n lines.push(`- [ ] Test UI Component: \\`${p.name}\\``)\n );\n }\n }\n}\n"],"mappings":";;;;;;AAWA,eAAsB,aACpB,UACA,UACA,UACiB;AAGjB,KAAI,CAAE,MAAM,SAAS,GAAG,OAAO,SAAS,CACtC,OAAM,IAAI,MAAM,mBAAmB,WAAW;CAGhD,MAAM,QAAQ,MAAM,mBAAmB,SAAS;AAEhD,KAAI,MAAM,WAAW,EACnB,QAAO,qBAAqB,SAAS;AAGvC,QAAO,MACJ,KAAK,SAAS,sBAAsB,MAAM,SAAS,CAAC,CACpD,KAAK,cAAc;;AAGxB,SAAS,sBACP,MACA,UACQ;CACR,MAAM,QAAkB,EAAE;AAE1B,SAAQ,UAAR;EACE,KAAK;AACH,qBAAkB,MAAM,MAAM;AAC9B;EACF,KAAK;AACH,iBAAc,MAAM,MAAM;AAC1B;EACF,KAAK;AACH,gBAAa,MAAM,MAAM;AACzB;;AAGJ,QAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,kBAAkB,MAAkB,OAAiB;AAC5D,OAAM,KAAK,KAAK,KAAK,KAAK,MAAM;AAChC,OAAM,KAAK,+CAA+C;AAC1D,OAAM,KAAK,GAAG;AAEd,KAAI,KAAK,KAAK,KACZ,OAAM,KAAK,aAAa,KAAK,KAAK,KAAK,IAAI;AAE7C,KAAI,KAAK,KAAK,QACZ,OAAM,KAAK,gBAAgB,KAAK,KAAK,QAAQ,IAAI;AAGnD,KAAI,KAAK,aAAa,WAAW;AAC/B,MAAI,KAAK,YAAY,QAAQ;AAC3B,SAAM,KAAK,gCAAgC;AAC3C,QAAK,WAAW,SAAS,OAAO,MAAM,KAAK,OAAO,GAAG,KAAK,IAAI,CAAC;AAC/D,SAAM,KAAK,GAAG;;AAEhB,MAAI,KAAK,eAAe,QAAQ;AAC9B,SAAM,KAAK,sCAAsC;AACjD,QAAK,cAAc,SAAS,MAAM,MAAM,KAAK,OAAO,EAAE,KAAK,IAAI,CAAC;AAChE,SAAM,KAAK,GAAG;;YAEP,KAAK,aAAa,aAAa;AACxC,QAAM,KAAK,eAAe;AAC1B,MAAI,KAAK,UAAW,OAAM,KAAK,iCAAiC;AAChE,MAAI,KAAK,MAAO,OAAM,KAAK,+BAA+B;AAC1D,MAAI,KAAK,eAAe,QAAQ;AAC9B,SAAM,KAAK,eAAe;AAC1B,QAAK,cAAc,SAAS,OAC1B,MAAM,KAAK,OAAO,GAAG,KAAK,YAAY,CACvC;;OAGH,OAAM,KAAK,SAAS,KAAK,WAAW;;AAIxC,SAAS,cAAc,MAAkB,OAAiB;AACxD,OAAM,KAAK,KAAK,KAAK,KAAK,MAAM;AAChC,OAAM,KAAK,oDAAoD;AAC/D,OAAM,KAAK,GAAG;AAEd,OAAM,KAAK,iBAAiB,KAAK,SAAS,IAAI;AAC9C,OAAM,KAAK,oBAAoB,KAAK,KAAK,QAAQ,IAAI;AACrD,KAAI,KAAK,KAAK,UACZ,OAAM,KAAK,sBAAsB,KAAK,KAAK,UAAU,IAAI;AAC3D,OAAM,KAAK,GAAG;AAEd,KAAI,KAAK,aAAa,aAAa;AACjC,QAAM,KAAK,uBAAuB;AAClC,QAAM,KAAK,qBAAqB,KAAK,QAAQ,cAAc,cAAc;AACzE,QAAM,KACJ,wBAAwB,KAAK,YAAY,cAAc,WACxD;AACD,QAAM,KAAK,GAAG;AAEd,MAAI,KAAK,eAAe,QAAQ;AAC9B,SAAM,KAAK,qBAAqB;AAChC,QAAK,cAAc,SAAS,OAAO,MAAM,KAAK,OAAO,GAAG,KAAK,IAAI,CAAC;AAClE,SAAM,KAAK,GAAG;;YAEP,KAAK,aAAa,WAAW;AACtC,MAAI,KAAK,YAAY,QAAQ;AAC3B,SAAM,KAAK,iBAAiB;AAC5B,QAAK,WAAW,SAAS,OAAO,MAAM,KAAK,OAAO,GAAG,KAAK,IAAI,CAAC;AAC/D,SAAM,KAAK,GAAG;;AAEhB,MAAI,KAAK,QAAQ,QAAQ;AACvB,SAAM,KAAK,aAAa;AACxB,QAAK,OAAO,SAAS,OAAO,MAAM,KAAK,OAAO,GAAG,KAAK,IAAI,CAAC;AAC3D,SAAM,KAAK,GAAG;;;AAIlB,KAAI,KAAK,aAAa;AACpB,QAAM,KAAK,uBAAuB;AAClC,QAAM,KAAK,gBAAgB;AAC3B,QAAM,KAAK,KAAK,YAAY;AAC5B,QAAM,KAAK,MAAM;;;AAIrB,SAAS,aAAa,MAAkB,OAAiB;AACvD,OAAM,KAAK,KAAK,KAAK,KAAK,MAAM;AAChC,OAAM,KAAK,0CAA0C;AACrD,OAAM,KAAK,GAAG;AAEd,KAAI,KAAK,KAAK,KACZ,OAAM,KAAK,aAAa,KAAK,KAAK,KAAK,IAAI;AAG7C,KAAI,KAAK,UAAU,QAAQ;AACzB,QAAM,KAAK,uBAAuB;AAClC,OAAK,SAAS,SAAS,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,IAAI,CAAC;AACpE,QAAM,KAAK,GAAG;QACT;AACL,QAAM,KAAK,uBAAuB;AAClC,QAAM,KAAK,kCAAkC;AAC7C,QAAM,KAAK,GAAG;;AAGhB,OAAM,KAAK,6BAA6B;AACxC,KAAI,KAAK,aAAa,aAAa;AACjC,QAAM,KACJ,uCAAuC,KAAK,KAAK,IAAI,yBACtD;AACD,MAAI,KAAK,UAAW,OAAM,KAAK,wCAAwC;AACvE,MAAI,KAAK,eAAe,OACtB,MAAK,cAAc,SAAS,OAC1B,MAAM,KAAK,wBAAwB,GAAG,KAAK,eAAe,CAC3D;YAEM,KAAK,aAAa,WAAW;AACtC,MAAI,KAAK,YAAY,OACnB,MAAK,WAAW,SAAS,OACvB,MAAM,KAAK,gCAAgC,GAAG,KAAK,IAAI,CACxD;AAEH,MAAI,KAAK,eAAe,OACtB,MAAK,cAAc,SAAS,MAC1B,MAAM,KAAK,8BAA8B,EAAE,KAAK,IAAI,CACrD"}
@@ -0,0 +1,25 @@
1
+ import { FsAdapter } from "../ports/fs.mjs";
2
+ import { WatchOptions, Watcher, WatcherAdapter } from "../ports/watcher.mjs";
3
+ import { LoggerAdapter } from "../ports/logger.mjs";
4
+ import { WorkspaceConfig } from "@contractspec/module.workspace";
5
+
6
+ //#region src/services/watch.d.ts
7
+
8
+ interface WatchSpecsOptions extends WatchOptions {
9
+ runValidate?: boolean;
10
+ runBuild?: boolean;
11
+ dryRun?: boolean;
12
+ }
13
+ type WatchBuildFn = (specPath: string) => Promise<void>;
14
+ type WatchValidateFn = (specPath: string) => Promise<void>;
15
+ declare function watchSpecs(adapters: {
16
+ watcher: WatcherAdapter;
17
+ fs: FsAdapter;
18
+ logger: LoggerAdapter;
19
+ }, config: WorkspaceConfig, options: WatchSpecsOptions, overrides?: {
20
+ validate?: WatchValidateFn;
21
+ build?: WatchBuildFn;
22
+ }): Watcher;
23
+ //#endregion
24
+ export { WatchBuildFn, WatchSpecsOptions, WatchValidateFn, watchSpecs };
25
+ //# sourceMappingURL=watch.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.mts","names":[],"sources":["../../src/services/watch.ts"],"sourcesContent":[],"mappings":";;;;;;;AAsBgB,UATC,iBAAA,SAA0B,YASjB,CAAA;EACH,WAAA,CAAA,EAAA,OAAA;EAAoB,QAAA,CAAA,EAAA,OAAA;EAAmB,MAAA,CAAA,EAAA,OAAA;;AAEnD,KANC,YAAA,GAMD,CAAA,QAAA,EAAA,MAAA,EAAA,GANsC,OAMtC,CAAA,IAAA,CAAA;AAEI,KAPH,eAAA,GAOG,CAAA,QAAA,EAAA,MAAA,EAAA,GAPqC,OAOrC,CAAA,IAAA,CAAA;AACH,iBANI,UAAA,CAMJ,QAAA,EAAA;EAET,OAAA,EAPoB,cAOpB;EAAO,EAAA,EAPiC,SAOjC;UAPoD;WACpD,0BACC;aAEI;UACH;IAET"}
@@ -0,0 +1,33 @@
1
+ import { validateSpec } from "./validate/spec-validator.mjs";
2
+ import "./validate/index.mjs";
3
+ import { buildSpec } from "./build.mjs";
4
+
5
+ //#region src/services/watch.ts
6
+ function watchSpecs(adapters, config, options, overrides) {
7
+ const { watcher, fs, logger } = adapters;
8
+ const w = watcher.watch(options);
9
+ const validateFn = overrides?.validate ?? (async (specPath) => {
10
+ await validateSpec(specPath, {
11
+ fs,
12
+ logger
13
+ });
14
+ });
15
+ const buildFn = overrides?.build ?? (async (specPath) => {
16
+ await buildSpec(specPath, {
17
+ fs,
18
+ logger
19
+ }, config);
20
+ });
21
+ w.on(async (event) => {
22
+ if (event.type !== "change") return;
23
+ logger.info("watchSpecs.changed", { path: event.path });
24
+ if (options.runValidate) await validateFn(event.path);
25
+ if (options.runBuild) if (options.dryRun) logger.info("[dry-run] watchSpecs skipped build", { path: event.path });
26
+ else await buildFn(event.path);
27
+ });
28
+ return w;
29
+ }
30
+
31
+ //#endregion
32
+ export { watchSpecs };
33
+ //# sourceMappingURL=watch.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.mjs","names":[],"sources":["../../src/services/watch.ts"],"sourcesContent":["/**\n * Watch service.\n *\n * Provides a reusable watcher that can trigger validate/build on spec changes.\n */\n\nimport type { WorkspaceConfig } from '@contractspec/module.workspace';\nimport type { LoggerAdapter } from '../ports/logger';\nimport type { Watcher, WatcherAdapter, WatchOptions } from '../ports/watcher';\nimport type { FsAdapter } from '../ports/fs';\nimport { buildSpec } from './build';\nimport { validateSpec } from './validate';\n\nexport interface WatchSpecsOptions extends WatchOptions {\n runValidate?: boolean;\n runBuild?: boolean;\n dryRun?: boolean;\n}\n\nexport type WatchBuildFn = (specPath: string) => Promise<void>;\nexport type WatchValidateFn = (specPath: string) => Promise<void>;\n\nexport function watchSpecs(\n adapters: { watcher: WatcherAdapter; fs: FsAdapter; logger: LoggerAdapter },\n config: WorkspaceConfig,\n options: WatchSpecsOptions,\n overrides?: {\n validate?: WatchValidateFn;\n build?: WatchBuildFn;\n }\n): Watcher {\n const { watcher, fs, logger } = adapters;\n const w = watcher.watch(options);\n\n const validateFn: WatchValidateFn =\n overrides?.validate ??\n (async (specPath) => {\n await validateSpec(specPath, { fs, logger });\n });\n\n const buildFn: WatchBuildFn =\n overrides?.build ??\n (async (specPath) => {\n await buildSpec(specPath, { fs, logger }, config);\n });\n\n w.on(async (event) => {\n if (event.type !== 'change') return;\n\n logger.info('watchSpecs.changed', { path: event.path });\n\n if (options.runValidate) {\n await validateFn(event.path);\n }\n\n if (options.runBuild) {\n if (options.dryRun) {\n logger.info('[dry-run] watchSpecs skipped build', { path: event.path });\n } else {\n await buildFn(event.path);\n }\n }\n });\n\n return w;\n}\n"],"mappings":";;;;;AAsBA,SAAgB,WACd,UACA,QACA,SACA,WAIS;CACT,MAAM,EAAE,SAAS,IAAI,WAAW;CAChC,MAAM,IAAI,QAAQ,MAAM,QAAQ;CAEhC,MAAM,aACJ,WAAW,aACV,OAAO,aAAa;AACnB,QAAM,aAAa,UAAU;GAAE;GAAI;GAAQ,CAAC;;CAGhD,MAAM,UACJ,WAAW,UACV,OAAO,aAAa;AACnB,QAAM,UAAU,UAAU;GAAE;GAAI;GAAQ,EAAE,OAAO;;AAGrD,GAAE,GAAG,OAAO,UAAU;AACpB,MAAI,MAAM,SAAS,SAAU;AAE7B,SAAO,KAAK,sBAAsB,EAAE,MAAM,MAAM,MAAM,CAAC;AAEvD,MAAI,QAAQ,YACV,OAAM,WAAW,MAAM,KAAK;AAG9B,MAAI,QAAQ,SACV,KAAI,QAAQ,OACV,QAAO,KAAK,sCAAsC,EAAE,MAAM,MAAM,MAAM,CAAC;MAEvE,OAAM,QAAQ,MAAM,KAAK;GAG7B;AAEF,QAAO"}
@@ -0,0 +1,62 @@
1
+ import { FsAdapter } from "../ports/fs.mjs";
2
+ import { PackageManager, WorkspaceInfo, detectPackageManager, findPackageRoot, findWorkspaceRoot, getWorkspaceInfo } from "../adapters/workspace.mjs";
3
+
4
+ //#region src/services/workspace-info.d.ts
5
+
6
+ /**
7
+ * Monorepo configuration options.
8
+ */
9
+ interface MonorepoConfig {
10
+ /**
11
+ * Package patterns to include (glob).
12
+ */
13
+ packages?: string[];
14
+ /**
15
+ * Package patterns to exclude (glob).
16
+ */
17
+ excludePackages?: string[];
18
+ /**
19
+ * Whether to search recursively in all packages.
20
+ */
21
+ recursive?: boolean;
22
+ }
23
+ /**
24
+ * Extended workspace info with configuration.
25
+ */
26
+ interface ExtendedWorkspaceInfo extends WorkspaceInfo {
27
+ /**
28
+ * Monorepo-specific configuration.
29
+ */
30
+ monorepoConfig?: MonorepoConfig;
31
+ /**
32
+ * Path to workspace .contractsrc.json (if exists).
33
+ */
34
+ workspaceConfigPath?: string;
35
+ /**
36
+ * Path to package .contractsrc.json (if exists).
37
+ */
38
+ packageConfigPath?: string;
39
+ }
40
+ /**
41
+ * Get extended workspace information including config paths.
42
+ */
43
+ declare function getExtendedWorkspaceInfo(fs: FsAdapter, startDir?: string): Promise<ExtendedWorkspaceInfo>;
44
+ /**
45
+ * Find all .contractsrc.json files in a monorepo.
46
+ *
47
+ * Returns paths in order of priority (workspace first, then packages).
48
+ */
49
+ declare function findAllConfigFiles(fs: FsAdapter, workspaceRoot: string): Promise<string[]>;
50
+ /**
51
+ * Merge workspace and package configurations.
52
+ *
53
+ * Package config overrides workspace config.
54
+ */
55
+ declare function mergeMonorepoConfigs(fs: FsAdapter, workspaceConfigPath: string | undefined, packageConfigPath: string | undefined): Promise<Record<string, unknown>>;
56
+ /**
57
+ * Format workspace info for display.
58
+ */
59
+ declare function formatWorkspaceInfo(info: ExtendedWorkspaceInfo): string;
60
+ //#endregion
61
+ export { ExtendedWorkspaceInfo, MonorepoConfig, findAllConfigFiles, formatWorkspaceInfo, getExtendedWorkspaceInfo, mergeMonorepoConfigs };
62
+ //# sourceMappingURL=workspace-info.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-info.d.mts","names":[],"sources":["../../src/services/workspace-info.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA+GsB,UA3FL,cAAA,CA2FuB;EAgClB;;;EAInB,QAAA,CAAA,EAAA,MAAA,EAAA;EAAO;AAiEV;;;;;;;;;;;UA5KiB,qBAAA,SAA8B;;;;mBAI5B;;;;;;;;;;;;;iBAgBG,wBAAA,KAChB,+BAEH,QAAQ;;;;;;iBAgDW,kBAAA,KAChB,mCAEH;;;;;;iBA6BmB,oBAAA,KAChB,4FAGH,QAAQ;;;;iBAiEK,mBAAA,OAA0B"}
@@ -0,0 +1,103 @@
1
+ import { detectPackageManager, findPackageRoot, findWorkspaceRoot, getWorkspaceInfo } from "../adapters/workspace.mjs";
2
+
3
+ //#region src/services/workspace-info.ts
4
+ /**
5
+ * Workspace info service.
6
+ *
7
+ * Provides workspace detection and configuration loading
8
+ * with support for monorepos.
9
+ */
10
+ /**
11
+ * Get extended workspace information including config paths.
12
+ */
13
+ async function getExtendedWorkspaceInfo(fs, startDir) {
14
+ const baseInfo = getWorkspaceInfo(startDir);
15
+ const workspaceConfigPath = fs.join(baseInfo.workspaceRoot, ".contractsrc.json");
16
+ const packageConfigPath = fs.join(baseInfo.packageRoot, ".contractsrc.json");
17
+ const hasWorkspaceConfig = await fs.exists(workspaceConfigPath);
18
+ const hasPackageConfig = baseInfo.workspaceRoot !== baseInfo.packageRoot ? await fs.exists(packageConfigPath) : false;
19
+ let monorepoConfig;
20
+ if (hasWorkspaceConfig) try {
21
+ const content = await fs.readFile(workspaceConfigPath);
22
+ const config = JSON.parse(content);
23
+ if (config.packages || config.excludePackages || config.recursive) monorepoConfig = {
24
+ packages: config.packages,
25
+ excludePackages: config.excludePackages,
26
+ recursive: config.recursive
27
+ };
28
+ } catch {}
29
+ return {
30
+ ...baseInfo,
31
+ monorepoConfig,
32
+ workspaceConfigPath: hasWorkspaceConfig ? workspaceConfigPath : void 0,
33
+ packageConfigPath: hasPackageConfig ? packageConfigPath : void 0
34
+ };
35
+ }
36
+ /**
37
+ * Find all .contractsrc.json files in a monorepo.
38
+ *
39
+ * Returns paths in order of priority (workspace first, then packages).
40
+ */
41
+ async function findAllConfigFiles(fs, workspaceRoot) {
42
+ const configFiles = [];
43
+ const rootConfig = fs.join(workspaceRoot, ".contractsrc.json");
44
+ if (await fs.exists(rootConfig)) configFiles.push(rootConfig);
45
+ const packageConfigs = await fs.glob({
46
+ pattern: "**/.contractsrc.json",
47
+ ignore: ["node_modules/**", ".git/**"]
48
+ });
49
+ for (const config of packageConfigs) if (config !== rootConfig) configFiles.push(config);
50
+ return configFiles;
51
+ }
52
+ /**
53
+ * Merge workspace and package configurations.
54
+ *
55
+ * Package config overrides workspace config.
56
+ */
57
+ async function mergeMonorepoConfigs(fs, workspaceConfigPath, packageConfigPath) {
58
+ let merged = {};
59
+ if (workspaceConfigPath && await fs.exists(workspaceConfigPath)) try {
60
+ const content = await fs.readFile(workspaceConfigPath);
61
+ merged = JSON.parse(content);
62
+ } catch {}
63
+ if (packageConfigPath && await fs.exists(packageConfigPath)) try {
64
+ const content = await fs.readFile(packageConfigPath);
65
+ const packageConfig = JSON.parse(content);
66
+ merged = deepMerge(merged, packageConfig);
67
+ } catch {}
68
+ return merged;
69
+ }
70
+ /**
71
+ * Deep merge two objects.
72
+ */
73
+ function deepMerge(base, override) {
74
+ const result = { ...base };
75
+ for (const key of Object.keys(override)) {
76
+ const baseValue = base[key];
77
+ const overrideValue = override[key];
78
+ if (typeof baseValue === "object" && baseValue !== null && !Array.isArray(baseValue) && typeof overrideValue === "object" && overrideValue !== null && !Array.isArray(overrideValue)) result[key] = deepMerge(baseValue, overrideValue);
79
+ else result[key] = overrideValue;
80
+ }
81
+ return result;
82
+ }
83
+ /**
84
+ * Format workspace info for display.
85
+ */
86
+ function formatWorkspaceInfo(info) {
87
+ const lines = [];
88
+ lines.push(`Package Manager: ${info.packageManager}`);
89
+ lines.push(`Workspace Root: ${info.workspaceRoot}`);
90
+ if (info.isMonorepo) {
91
+ lines.push(`Monorepo: Yes`);
92
+ lines.push(`Package Root: ${info.packageRoot}`);
93
+ if (info.packageName) lines.push(`Current Package: ${info.packageName}`);
94
+ if (info.packages && info.packages.length > 0) lines.push(`Package Patterns: ${info.packages.join(", ")}`);
95
+ } else lines.push(`Monorepo: No`);
96
+ if (info.workspaceConfigPath) lines.push(`Workspace Config: ${info.workspaceConfigPath}`);
97
+ if (info.packageConfigPath) lines.push(`Package Config: ${info.packageConfigPath}`);
98
+ return lines.join("\n");
99
+ }
100
+
101
+ //#endregion
102
+ export { findAllConfigFiles, formatWorkspaceInfo, getExtendedWorkspaceInfo, mergeMonorepoConfigs };
103
+ //# sourceMappingURL=workspace-info.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-info.mjs","names":[],"sources":["../../src/services/workspace-info.ts"],"sourcesContent":["/**\n * Workspace info service.\n *\n * Provides workspace detection and configuration loading\n * with support for monorepos.\n */\n\nimport {\n getWorkspaceInfo,\n findWorkspaceRoot,\n findPackageRoot,\n detectPackageManager,\n type WorkspaceInfo,\n type PackageManager,\n} from '../adapters/workspace';\nimport type { FsAdapter } from '../ports/fs';\n\n/**\n * Monorepo configuration options.\n */\nexport interface MonorepoConfig {\n /**\n * Package patterns to include (glob).\n */\n packages?: string[];\n\n /**\n * Package patterns to exclude (glob).\n */\n excludePackages?: string[];\n\n /**\n * Whether to search recursively in all packages.\n */\n recursive?: boolean;\n}\n\n/**\n * Extended workspace info with configuration.\n */\nexport interface ExtendedWorkspaceInfo extends WorkspaceInfo {\n /**\n * Monorepo-specific configuration.\n */\n monorepoConfig?: MonorepoConfig;\n\n /**\n * Path to workspace .contractsrc.json (if exists).\n */\n workspaceConfigPath?: string;\n\n /**\n * Path to package .contractsrc.json (if exists).\n */\n packageConfigPath?: string;\n}\n\n/**\n * Get extended workspace information including config paths.\n */\nexport async function getExtendedWorkspaceInfo(\n fs: FsAdapter,\n startDir?: string\n): Promise<ExtendedWorkspaceInfo> {\n const baseInfo = getWorkspaceInfo(startDir);\n\n // Check for config files\n const workspaceConfigPath = fs.join(\n baseInfo.workspaceRoot,\n '.contractsrc.json'\n );\n const packageConfigPath = fs.join(baseInfo.packageRoot, '.contractsrc.json');\n\n const hasWorkspaceConfig = await fs.exists(workspaceConfigPath);\n const hasPackageConfig =\n baseInfo.workspaceRoot !== baseInfo.packageRoot\n ? await fs.exists(packageConfigPath)\n : false;\n\n // Load monorepo config from workspace config if exists\n let monorepoConfig: MonorepoConfig | undefined;\n\n if (hasWorkspaceConfig) {\n try {\n const content = await fs.readFile(workspaceConfigPath);\n const config = JSON.parse(content);\n if (config.packages || config.excludePackages || config.recursive) {\n monorepoConfig = {\n packages: config.packages,\n excludePackages: config.excludePackages,\n recursive: config.recursive,\n };\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n return {\n ...baseInfo,\n monorepoConfig,\n workspaceConfigPath: hasWorkspaceConfig ? workspaceConfigPath : undefined,\n packageConfigPath: hasPackageConfig ? packageConfigPath : undefined,\n };\n}\n\n/**\n * Find all .contractsrc.json files in a monorepo.\n *\n * Returns paths in order of priority (workspace first, then packages).\n */\nexport async function findAllConfigFiles(\n fs: FsAdapter,\n workspaceRoot: string\n): Promise<string[]> {\n const configFiles: string[] = [];\n\n // Workspace root config (highest priority for defaults)\n const rootConfig = fs.join(workspaceRoot, '.contractsrc.json');\n if (await fs.exists(rootConfig)) {\n configFiles.push(rootConfig);\n }\n\n // Find configs in packages\n const packageConfigs = await fs.glob({\n pattern: '**/.contractsrc.json',\n ignore: ['node_modules/**', '.git/**'],\n });\n\n for (const config of packageConfigs) {\n if (config !== rootConfig) {\n configFiles.push(config);\n }\n }\n\n return configFiles;\n}\n\n/**\n * Merge workspace and package configurations.\n *\n * Package config overrides workspace config.\n */\nexport async function mergeMonorepoConfigs(\n fs: FsAdapter,\n workspaceConfigPath: string | undefined,\n packageConfigPath: string | undefined\n): Promise<Record<string, unknown>> {\n let merged: Record<string, unknown> = {};\n\n // Load workspace config as base\n if (workspaceConfigPath && (await fs.exists(workspaceConfigPath))) {\n try {\n const content = await fs.readFile(workspaceConfigPath);\n merged = JSON.parse(content);\n } catch {\n // Ignore parse errors\n }\n }\n\n // Overlay package config\n if (packageConfigPath && (await fs.exists(packageConfigPath))) {\n try {\n const content = await fs.readFile(packageConfigPath);\n const packageConfig = JSON.parse(content);\n\n // Deep merge (package overrides workspace)\n merged = deepMerge(merged, packageConfig);\n } catch {\n // Ignore parse errors\n }\n }\n\n return merged;\n}\n\n/**\n * Deep merge two objects.\n */\nfunction deepMerge(\n base: Record<string, unknown>,\n override: Record<string, unknown>\n): Record<string, unknown> {\n const result = { ...base };\n\n for (const key of Object.keys(override)) {\n const baseValue = base[key];\n const overrideValue = override[key];\n\n if (\n typeof baseValue === 'object' &&\n baseValue !== null &&\n !Array.isArray(baseValue) &&\n typeof overrideValue === 'object' &&\n overrideValue !== null &&\n !Array.isArray(overrideValue)\n ) {\n result[key] = deepMerge(\n baseValue as Record<string, unknown>,\n overrideValue as Record<string, unknown>\n );\n } else {\n result[key] = overrideValue;\n }\n }\n\n return result;\n}\n\n/**\n * Format workspace info for display.\n */\nexport function formatWorkspaceInfo(info: ExtendedWorkspaceInfo): string {\n const lines: string[] = [];\n\n lines.push(`Package Manager: ${info.packageManager}`);\n lines.push(`Workspace Root: ${info.workspaceRoot}`);\n\n if (info.isMonorepo) {\n lines.push(`Monorepo: Yes`);\n lines.push(`Package Root: ${info.packageRoot}`);\n\n if (info.packageName) {\n lines.push(`Current Package: ${info.packageName}`);\n }\n\n if (info.packages && info.packages.length > 0) {\n lines.push(`Package Patterns: ${info.packages.join(', ')}`);\n }\n } else {\n lines.push(`Monorepo: No`);\n }\n\n if (info.workspaceConfigPath) {\n lines.push(`Workspace Config: ${info.workspaceConfigPath}`);\n }\n\n if (info.packageConfigPath) {\n lines.push(`Package Config: ${info.packageConfigPath}`);\n }\n\n return lines.join('\\n');\n}\n\n// Re-export types and utilities\nexport {\n getWorkspaceInfo,\n findWorkspaceRoot,\n findPackageRoot,\n detectPackageManager,\n type WorkspaceInfo,\n type PackageManager,\n};\n"],"mappings":";;;;;;;;;;;;AA4DA,eAAsB,yBACpB,IACA,UACgC;CAChC,MAAM,WAAW,iBAAiB,SAAS;CAG3C,MAAM,sBAAsB,GAAG,KAC7B,SAAS,eACT,oBACD;CACD,MAAM,oBAAoB,GAAG,KAAK,SAAS,aAAa,oBAAoB;CAE5E,MAAM,qBAAqB,MAAM,GAAG,OAAO,oBAAoB;CAC/D,MAAM,mBACJ,SAAS,kBAAkB,SAAS,cAChC,MAAM,GAAG,OAAO,kBAAkB,GAClC;CAGN,IAAI;AAEJ,KAAI,mBACF,KAAI;EACF,MAAM,UAAU,MAAM,GAAG,SAAS,oBAAoB;EACtD,MAAM,SAAS,KAAK,MAAM,QAAQ;AAClC,MAAI,OAAO,YAAY,OAAO,mBAAmB,OAAO,UACtD,kBAAiB;GACf,UAAU,OAAO;GACjB,iBAAiB,OAAO;GACxB,WAAW,OAAO;GACnB;SAEG;AAKV,QAAO;EACL,GAAG;EACH;EACA,qBAAqB,qBAAqB,sBAAsB;EAChE,mBAAmB,mBAAmB,oBAAoB;EAC3D;;;;;;;AAQH,eAAsB,mBACpB,IACA,eACmB;CACnB,MAAM,cAAwB,EAAE;CAGhC,MAAM,aAAa,GAAG,KAAK,eAAe,oBAAoB;AAC9D,KAAI,MAAM,GAAG,OAAO,WAAW,CAC7B,aAAY,KAAK,WAAW;CAI9B,MAAM,iBAAiB,MAAM,GAAG,KAAK;EACnC,SAAS;EACT,QAAQ,CAAC,mBAAmB,UAAU;EACvC,CAAC;AAEF,MAAK,MAAM,UAAU,eACnB,KAAI,WAAW,WACb,aAAY,KAAK,OAAO;AAI5B,QAAO;;;;;;;AAQT,eAAsB,qBACpB,IACA,qBACA,mBACkC;CAClC,IAAI,SAAkC,EAAE;AAGxC,KAAI,uBAAwB,MAAM,GAAG,OAAO,oBAAoB,CAC9D,KAAI;EACF,MAAM,UAAU,MAAM,GAAG,SAAS,oBAAoB;AACtD,WAAS,KAAK,MAAM,QAAQ;SACtB;AAMV,KAAI,qBAAsB,MAAM,GAAG,OAAO,kBAAkB,CAC1D,KAAI;EACF,MAAM,UAAU,MAAM,GAAG,SAAS,kBAAkB;EACpD,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AAGzC,WAAS,UAAU,QAAQ,cAAc;SACnC;AAKV,QAAO;;;;;AAMT,SAAS,UACP,MACA,UACyB;CACzB,MAAM,SAAS,EAAE,GAAG,MAAM;AAE1B,MAAK,MAAM,OAAO,OAAO,KAAK,SAAS,EAAE;EACvC,MAAM,YAAY,KAAK;EACvB,MAAM,gBAAgB,SAAS;AAE/B,MACE,OAAO,cAAc,YACrB,cAAc,QACd,CAAC,MAAM,QAAQ,UAAU,IACzB,OAAO,kBAAkB,YACzB,kBAAkB,QAClB,CAAC,MAAM,QAAQ,cAAc,CAE7B,QAAO,OAAO,UACZ,WACA,cACD;MAED,QAAO,OAAO;;AAIlB,QAAO;;;;;AAMT,SAAgB,oBAAoB,MAAqC;CACvE,MAAM,QAAkB,EAAE;AAE1B,OAAM,KAAK,oBAAoB,KAAK,iBAAiB;AACrD,OAAM,KAAK,mBAAmB,KAAK,gBAAgB;AAEnD,KAAI,KAAK,YAAY;AACnB,QAAM,KAAK,gBAAgB;AAC3B,QAAM,KAAK,iBAAiB,KAAK,cAAc;AAE/C,MAAI,KAAK,YACP,OAAM,KAAK,oBAAoB,KAAK,cAAc;AAGpD,MAAI,KAAK,YAAY,KAAK,SAAS,SAAS,EAC1C,OAAM,KAAK,qBAAqB,KAAK,SAAS,KAAK,KAAK,GAAG;OAG7D,OAAM,KAAK,eAAe;AAG5B,KAAI,KAAK,oBACP,OAAM,KAAK,qBAAqB,KAAK,sBAAsB;AAG7D,KAAI,KAAK,kBACP,OAAM,KAAK,mBAAmB,KAAK,oBAAoB;AAGzD,QAAO,MAAM,KAAK,KAAK"}
@@ -0,0 +1,7 @@
1
+ import { AppBlueprintSpecData } from "../types.mjs";
2
+
3
+ //#region src/templates/app-config.template.d.ts
4
+ declare function generateAppBlueprintSpec(data: AppBlueprintSpecData): string;
5
+ //#endregion
6
+ export { generateAppBlueprintSpec };
7
+ //# sourceMappingURL=app-config.template.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-config.template.d.mts","names":[],"sources":["../../src/templates/app-config.template.ts"],"sourcesContent":[],"mappings":";;;iBAEgB,wBAAA,OAA+B"}