@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,204 @@
1
+ import { verifyStructure } from "./structure-verifier.js";
2
+ import { verifyBehavior } from "./behavior-verifier.js";
3
+ import { createQuickAIReview, verifyWithAI } from "./ai-verifier.js";
4
+
5
+ //#region src/services/verify/verify-service.ts
6
+ const DEFAULT_CONFIG = { verbose: false };
7
+ const TIER_ORDER = [
8
+ "structure",
9
+ "behavior",
10
+ "ai_review"
11
+ ];
12
+ /**
13
+ * Verification Service
14
+ *
15
+ * Main service for verifying implementations against specs.
16
+ */
17
+ var VerifyService = class {
18
+ config;
19
+ constructor(config = {}) {
20
+ this.config = {
21
+ ...DEFAULT_CONFIG,
22
+ ...config
23
+ };
24
+ }
25
+ /**
26
+ * Run verification on an implementation.
27
+ */
28
+ async verify(spec, implementationCode, options = {}) {
29
+ const startTime = Date.now();
30
+ const reports = /* @__PURE__ */ new Map();
31
+ const allIssues = [];
32
+ const input = {
33
+ spec,
34
+ implementationCode
35
+ };
36
+ const tiersToRun = options.tiers ?? ["structure", "behavior"];
37
+ for (const tier of TIER_ORDER) {
38
+ if (!tiersToRun.includes(tier)) continue;
39
+ let report;
40
+ switch (tier) {
41
+ case "structure":
42
+ report = verifyStructure(input);
43
+ break;
44
+ case "behavior":
45
+ report = verifyBehavior(input);
46
+ break;
47
+ case "ai_review":
48
+ if (this.config.aiApiKey) report = await verifyWithAI(input, this.config);
49
+ else report = createQuickAIReview(input);
50
+ break;
51
+ default: continue;
52
+ }
53
+ reports.set(tier, report);
54
+ allIssues.push(...report.issues);
55
+ if (options.failFast && !report.passed) break;
56
+ }
57
+ const reportsArray = Array.from(reports.values());
58
+ return {
59
+ passed: reportsArray.every((r) => r.passed),
60
+ score: reportsArray.length > 0 ? Math.round(reportsArray.reduce((sum, r) => sum + r.score, 0) / reportsArray.length) : 100,
61
+ reports,
62
+ allIssues,
63
+ summary: this.generateSummary(reportsArray, allIssues),
64
+ duration: Date.now() - startTime
65
+ };
66
+ }
67
+ /**
68
+ * Run only structure verification (Tier 1).
69
+ */
70
+ verifyStructure(spec, implementationCode, implementationPath) {
71
+ return verifyStructure({
72
+ spec,
73
+ implementationCode,
74
+ implementationPath
75
+ });
76
+ }
77
+ /**
78
+ * Run only behavior verification (Tier 2).
79
+ */
80
+ verifyBehavior(spec, implementationCode, implementationPath) {
81
+ return verifyBehavior({
82
+ spec,
83
+ implementationCode,
84
+ implementationPath
85
+ });
86
+ }
87
+ /**
88
+ * Run only AI verification (Tier 3).
89
+ */
90
+ async verifyAI(spec, implementationCode, implementationPath) {
91
+ const input = {
92
+ spec,
93
+ implementationCode,
94
+ implementationPath
95
+ };
96
+ if (this.config.aiApiKey) return verifyWithAI(input, this.config);
97
+ return createQuickAIReview(input);
98
+ }
99
+ /**
100
+ * Quick verification (structure only, fast).
101
+ */
102
+ quickVerify(spec, implementationCode) {
103
+ return verifyStructure({
104
+ spec,
105
+ implementationCode
106
+ });
107
+ }
108
+ /**
109
+ * Format verification result as markdown.
110
+ */
111
+ formatAsMarkdown(result) {
112
+ const lines = [];
113
+ lines.push(`# Verification Report`);
114
+ lines.push("");
115
+ lines.push(`**Status:** ${result.passed ? "✓ Passed" : "✗ Failed"}`);
116
+ lines.push(`**Score:** ${result.score}/100`);
117
+ lines.push(`**Duration:** ${result.duration}ms`);
118
+ lines.push("");
119
+ for (const [tier, report] of result.reports) {
120
+ lines.push(`## ${this.formatTierName(tier)}`);
121
+ lines.push("");
122
+ lines.push(`**Status:** ${report.passed ? "✓ Passed" : "✗ Failed"}`);
123
+ lines.push(`**Score:** ${report.score}/100`);
124
+ lines.push("");
125
+ if (report.issues.length > 0) {
126
+ lines.push("### Issues");
127
+ lines.push("");
128
+ for (const issue of report.issues) {
129
+ const icon = issue.severity === "error" ? "❌" : issue.severity === "warning" ? "⚠️" : "ℹ️";
130
+ lines.push(`${icon} **${issue.category}**: ${issue.message}`);
131
+ if (issue.suggestion) lines.push(` - Suggestion: ${issue.suggestion}`);
132
+ }
133
+ lines.push("");
134
+ }
135
+ if (report.coverage.scenarios.total > 0) lines.push(`**Scenarios:** ${report.coverage.scenarios.covered}/${report.coverage.scenarios.total}`);
136
+ if (report.coverage.errors.total > 0) lines.push(`**Errors handled:** ${report.coverage.errors.handled}/${report.coverage.errors.total}`);
137
+ lines.push("");
138
+ }
139
+ const allSuggestions = Array.from(result.reports.values()).flatMap((r) => r.suggestions);
140
+ if (allSuggestions.length > 0) {
141
+ lines.push("## Suggestions");
142
+ lines.push("");
143
+ for (const suggestion of allSuggestions.slice(0, 10)) lines.push(`- ${suggestion}`);
144
+ if (allSuggestions.length > 10) lines.push(`- ... and ${allSuggestions.length - 10} more`);
145
+ lines.push("");
146
+ }
147
+ return lines.join("\n");
148
+ }
149
+ /**
150
+ * Update configuration.
151
+ */
152
+ configure(config) {
153
+ this.config = {
154
+ ...this.config,
155
+ ...config
156
+ };
157
+ }
158
+ /**
159
+ * Generate a human-readable summary of verification results.
160
+ */
161
+ generateSummary(reports, allIssues) {
162
+ const parts = [];
163
+ const passed = reports.every((r) => r.passed);
164
+ const avgScore = reports.length > 0 ? Math.round(reports.reduce((sum, r) => sum + r.score, 0) / reports.length) : 100;
165
+ parts.push(passed ? "✓ Verification passed" : "✗ Verification failed");
166
+ parts.push(`Score: ${avgScore}/100`);
167
+ parts.push("");
168
+ for (const report of reports) {
169
+ const icon = report.passed ? "✓" : "✗";
170
+ parts.push(`${icon} ${report.tier}: ${report.score}/100`);
171
+ }
172
+ parts.push("");
173
+ const errors = allIssues.filter((i) => i.severity === "error");
174
+ const warnings = allIssues.filter((i) => i.severity === "warning");
175
+ const infos = allIssues.filter((i) => i.severity === "info");
176
+ if (errors.length > 0) parts.push(`Errors: ${errors.length}`);
177
+ if (warnings.length > 0) parts.push(`Warnings: ${warnings.length}`);
178
+ if (infos.length > 0) parts.push(`Info: ${infos.length}`);
179
+ return parts.join("\n");
180
+ }
181
+ /**
182
+ * Format tier name for display.
183
+ */
184
+ formatTierName(tier) {
185
+ switch (tier) {
186
+ case "structure": return "Tier 1: Structure";
187
+ case "behavior": return "Tier 2: Behavior";
188
+ case "ai_review": return "Tier 3: AI Review";
189
+ default: return tier;
190
+ }
191
+ }
192
+ };
193
+ /**
194
+ * Create a new VerifyService instance.
195
+ */
196
+ function createVerifyService(config) {
197
+ return new VerifyService(config);
198
+ }
199
+ /** Default singleton instance */
200
+ const verifyService = new VerifyService();
201
+
202
+ //#endregion
203
+ export { VerifyService, createVerifyService, verifyService };
204
+ //# sourceMappingURL=verify-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-service.js","names":["DEFAULT_CONFIG: VerifyConfig","TIER_ORDER: VerificationTier[]","allIssues: VerificationIssue[]","input: VerifyInput","report: VerificationReport","lines: string[]","parts: string[]"],"sources":["../../../src/services/verify/verify-service.ts"],"sourcesContent":["/**\n * Verification Service\n *\n * Orchestrates tiered verification of implementations against specs.\n * Supports three tiers: structure, behavior, and AI review.\n */\n\nimport type { AnyOperationSpec } from '@contractspec/lib.contracts';\nimport type {\n VerificationIssue,\n VerificationReport,\n VerificationTier,\n} from '@contractspec/lib.contracts/llm';\nimport { verifyStructure } from './structure-verifier';\nimport { verifyBehavior } from './behavior-verifier';\nimport { createQuickAIReview, verifyWithAI } from './ai-verifier';\nimport type {\n VerifyConfig,\n VerifyInput,\n VerifyOptions,\n VerifyResult,\n} from './types';\n\nconst DEFAULT_CONFIG: VerifyConfig = {\n verbose: false,\n};\n\nconst TIER_ORDER: VerificationTier[] = ['structure', 'behavior', 'ai_review'];\n\n/**\n * Verification Service\n *\n * Main service for verifying implementations against specs.\n */\nexport class VerifyService {\n private config: VerifyConfig;\n\n constructor(config: Partial<VerifyConfig> = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n /**\n * Run verification on an implementation.\n */\n async verify(\n spec: AnyOperationSpec,\n implementationCode: string,\n options: VerifyOptions = {}\n ): Promise<VerifyResult> {\n const startTime = Date.now();\n const reports = new Map<VerificationTier, VerificationReport>();\n const allIssues: VerificationIssue[] = [];\n\n const input: VerifyInput = {\n spec,\n implementationCode,\n };\n\n // Determine which tiers to run\n const tiersToRun = options.tiers ?? ['structure', 'behavior'];\n\n for (const tier of TIER_ORDER) {\n if (!tiersToRun.includes(tier)) continue;\n\n let report: VerificationReport;\n\n switch (tier) {\n case 'structure':\n report = verifyStructure(input);\n break;\n case 'behavior':\n report = verifyBehavior(input);\n break;\n case 'ai_review':\n if (this.config.aiApiKey) {\n report = await verifyWithAI(input, this.config);\n } else {\n report = createQuickAIReview(input);\n }\n break;\n default:\n continue;\n }\n\n reports.set(tier, report);\n allIssues.push(...report.issues);\n\n // Stop on first failure if failFast is enabled\n if (options.failFast && !report.passed) {\n break;\n }\n }\n\n // Calculate combined results\n const reportsArray = Array.from(reports.values());\n const passed = reportsArray.every((r) => r.passed);\n const score =\n reportsArray.length > 0\n ? Math.round(\n reportsArray.reduce((sum, r) => sum + r.score, 0) /\n reportsArray.length\n )\n : 100;\n\n // Generate summary\n const summary = this.generateSummary(reportsArray, allIssues);\n\n return {\n passed,\n score,\n reports,\n allIssues,\n summary,\n duration: Date.now() - startTime,\n };\n }\n\n /**\n * Run only structure verification (Tier 1).\n */\n verifyStructure(\n spec: AnyOperationSpec,\n implementationCode: string,\n implementationPath?: string\n ): VerificationReport {\n return verifyStructure({\n spec,\n implementationCode,\n implementationPath,\n });\n }\n\n /**\n * Run only behavior verification (Tier 2).\n */\n verifyBehavior(\n spec: AnyOperationSpec,\n implementationCode: string,\n implementationPath?: string\n ): VerificationReport {\n return verifyBehavior({\n spec,\n implementationCode,\n implementationPath,\n });\n }\n\n /**\n * Run only AI verification (Tier 3).\n */\n async verifyAI(\n spec: AnyOperationSpec,\n implementationCode: string,\n implementationPath?: string\n ): Promise<VerificationReport> {\n const input: VerifyInput = {\n spec,\n implementationCode,\n implementationPath,\n };\n\n if (this.config.aiApiKey) {\n return verifyWithAI(input, this.config);\n }\n return createQuickAIReview(input);\n }\n\n /**\n * Quick verification (structure only, fast).\n */\n quickVerify(\n spec: AnyOperationSpec,\n implementationCode: string\n ): VerificationReport {\n return verifyStructure({ spec, implementationCode });\n }\n\n /**\n * Format verification result as markdown.\n */\n formatAsMarkdown(result: VerifyResult): string {\n const lines: string[] = [];\n\n // Header\n lines.push(`# Verification Report`);\n lines.push('');\n lines.push(`**Status:** ${result.passed ? '✓ Passed' : '✗ Failed'}`);\n lines.push(`**Score:** ${result.score}/100`);\n lines.push(`**Duration:** ${result.duration}ms`);\n lines.push('');\n\n // Per-tier details\n for (const [tier, report] of result.reports) {\n lines.push(`## ${this.formatTierName(tier)}`);\n lines.push('');\n lines.push(`**Status:** ${report.passed ? '✓ Passed' : '✗ Failed'}`);\n lines.push(`**Score:** ${report.score}/100`);\n lines.push('');\n\n if (report.issues.length > 0) {\n lines.push('### Issues');\n lines.push('');\n for (const issue of report.issues) {\n const icon =\n issue.severity === 'error'\n ? '❌'\n : issue.severity === 'warning'\n ? '⚠️'\n : 'ℹ️';\n lines.push(`${icon} **${issue.category}**: ${issue.message}`);\n if (issue.suggestion) {\n lines.push(` - Suggestion: ${issue.suggestion}`);\n }\n }\n lines.push('');\n }\n\n if (report.coverage.scenarios.total > 0) {\n lines.push(\n `**Scenarios:** ${report.coverage.scenarios.covered}/${report.coverage.scenarios.total}`\n );\n }\n if (report.coverage.errors.total > 0) {\n lines.push(\n `**Errors handled:** ${report.coverage.errors.handled}/${report.coverage.errors.total}`\n );\n }\n lines.push('');\n }\n\n // Suggestions\n const allSuggestions = Array.from(result.reports.values()).flatMap(\n (r) => r.suggestions\n );\n\n if (allSuggestions.length > 0) {\n lines.push('## Suggestions');\n lines.push('');\n for (const suggestion of allSuggestions.slice(0, 10)) {\n lines.push(`- ${suggestion}`);\n }\n if (allSuggestions.length > 10) {\n lines.push(`- ... and ${allSuggestions.length - 10} more`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Update configuration.\n */\n configure(config: Partial<VerifyConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Generate a human-readable summary of verification results.\n */\n private generateSummary(\n reports: VerificationReport[],\n allIssues: VerificationIssue[]\n ): string {\n const parts: string[] = [];\n\n // Overall status\n const passed = reports.every((r) => r.passed);\n const avgScore =\n reports.length > 0\n ? Math.round(\n reports.reduce((sum, r) => sum + r.score, 0) / reports.length\n )\n : 100;\n\n parts.push(passed ? '✓ Verification passed' : '✗ Verification failed');\n parts.push(`Score: ${avgScore}/100`);\n parts.push('');\n\n // Per-tier summary\n for (const report of reports) {\n const icon = report.passed ? '✓' : '✗';\n parts.push(`${icon} ${report.tier}: ${report.score}/100`);\n }\n parts.push('');\n\n // Issue summary\n const errors = allIssues.filter((i) => i.severity === 'error');\n const warnings = allIssues.filter((i) => i.severity === 'warning');\n const infos = allIssues.filter((i) => i.severity === 'info');\n\n if (errors.length > 0) {\n parts.push(`Errors: ${errors.length}`);\n }\n if (warnings.length > 0) {\n parts.push(`Warnings: ${warnings.length}`);\n }\n if (infos.length > 0) {\n parts.push(`Info: ${infos.length}`);\n }\n\n return parts.join('\\n');\n }\n\n /**\n * Format tier name for display.\n */\n private formatTierName(tier: VerificationTier): string {\n switch (tier) {\n case 'structure':\n return 'Tier 1: Structure';\n case 'behavior':\n return 'Tier 2: Behavior';\n case 'ai_review':\n return 'Tier 3: AI Review';\n default:\n return tier;\n }\n }\n}\n\n/**\n * Create a new VerifyService instance.\n */\nexport function createVerifyService(\n config?: Partial<VerifyConfig>\n): VerifyService {\n return new VerifyService(config);\n}\n\n/** Default singleton instance */\nexport const verifyService = new VerifyService();\n"],"mappings":";;;;;AAuBA,MAAMA,iBAA+B,EACnC,SAAS,OACV;AAED,MAAMC,aAAiC;CAAC;CAAa;CAAY;CAAY;;;;;;AAO7E,IAAa,gBAAb,MAA2B;CACzB,AAAQ;CAER,YAAY,SAAgC,EAAE,EAAE;AAC9C,OAAK,SAAS;GAAE,GAAG;GAAgB,GAAG;GAAQ;;;;;CAMhD,MAAM,OACJ,MACA,oBACA,UAAyB,EAAE,EACJ;EACvB,MAAM,YAAY,KAAK,KAAK;EAC5B,MAAM,0BAAU,IAAI,KAA2C;EAC/D,MAAMC,YAAiC,EAAE;EAEzC,MAAMC,QAAqB;GACzB;GACA;GACD;EAGD,MAAM,aAAa,QAAQ,SAAS,CAAC,aAAa,WAAW;AAE7D,OAAK,MAAM,QAAQ,YAAY;AAC7B,OAAI,CAAC,WAAW,SAAS,KAAK,CAAE;GAEhC,IAAIC;AAEJ,WAAQ,MAAR;IACE,KAAK;AACH,cAAS,gBAAgB,MAAM;AAC/B;IACF,KAAK;AACH,cAAS,eAAe,MAAM;AAC9B;IACF,KAAK;AACH,SAAI,KAAK,OAAO,SACd,UAAS,MAAM,aAAa,OAAO,KAAK,OAAO;SAE/C,UAAS,oBAAoB,MAAM;AAErC;IACF,QACE;;AAGJ,WAAQ,IAAI,MAAM,OAAO;AACzB,aAAU,KAAK,GAAG,OAAO,OAAO;AAGhC,OAAI,QAAQ,YAAY,CAAC,OAAO,OAC9B;;EAKJ,MAAM,eAAe,MAAM,KAAK,QAAQ,QAAQ,CAAC;AAajD,SAAO;GACL,QAba,aAAa,OAAO,MAAM,EAAE,OAAO;GAchD,OAZA,aAAa,SAAS,IAClB,KAAK,MACH,aAAa,QAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,EAAE,GAC/C,aAAa,OAChB,GACD;GAQJ;GACA;GACA,SAPc,KAAK,gBAAgB,cAAc,UAAU;GAQ3D,UAAU,KAAK,KAAK,GAAG;GACxB;;;;;CAMH,gBACE,MACA,oBACA,oBACoB;AACpB,SAAO,gBAAgB;GACrB;GACA;GACA;GACD,CAAC;;;;;CAMJ,eACE,MACA,oBACA,oBACoB;AACpB,SAAO,eAAe;GACpB;GACA;GACA;GACD,CAAC;;;;;CAMJ,MAAM,SACJ,MACA,oBACA,oBAC6B;EAC7B,MAAMD,QAAqB;GACzB;GACA;GACA;GACD;AAED,MAAI,KAAK,OAAO,SACd,QAAO,aAAa,OAAO,KAAK,OAAO;AAEzC,SAAO,oBAAoB,MAAM;;;;;CAMnC,YACE,MACA,oBACoB;AACpB,SAAO,gBAAgB;GAAE;GAAM;GAAoB,CAAC;;;;;CAMtD,iBAAiB,QAA8B;EAC7C,MAAME,QAAkB,EAAE;AAG1B,QAAM,KAAK,wBAAwB;AACnC,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,eAAe,OAAO,SAAS,aAAa,aAAa;AACpE,QAAM,KAAK,cAAc,OAAO,MAAM,MAAM;AAC5C,QAAM,KAAK,iBAAiB,OAAO,SAAS,IAAI;AAChD,QAAM,KAAK,GAAG;AAGd,OAAK,MAAM,CAAC,MAAM,WAAW,OAAO,SAAS;AAC3C,SAAM,KAAK,MAAM,KAAK,eAAe,KAAK,GAAG;AAC7C,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,eAAe,OAAO,SAAS,aAAa,aAAa;AACpE,SAAM,KAAK,cAAc,OAAO,MAAM,MAAM;AAC5C,SAAM,KAAK,GAAG;AAEd,OAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,UAAM,KAAK,aAAa;AACxB,UAAM,KAAK,GAAG;AACd,SAAK,MAAM,SAAS,OAAO,QAAQ;KACjC,MAAM,OACJ,MAAM,aAAa,UACf,MACA,MAAM,aAAa,YACjB,OACA;AACR,WAAM,KAAK,GAAG,KAAK,KAAK,MAAM,SAAS,MAAM,MAAM,UAAU;AAC7D,SAAI,MAAM,WACR,OAAM,KAAK,mBAAmB,MAAM,aAAa;;AAGrD,UAAM,KAAK,GAAG;;AAGhB,OAAI,OAAO,SAAS,UAAU,QAAQ,EACpC,OAAM,KACJ,kBAAkB,OAAO,SAAS,UAAU,QAAQ,GAAG,OAAO,SAAS,UAAU,QAClF;AAEH,OAAI,OAAO,SAAS,OAAO,QAAQ,EACjC,OAAM,KACJ,uBAAuB,OAAO,SAAS,OAAO,QAAQ,GAAG,OAAO,SAAS,OAAO,QACjF;AAEH,SAAM,KAAK,GAAG;;EAIhB,MAAM,iBAAiB,MAAM,KAAK,OAAO,QAAQ,QAAQ,CAAC,CAAC,SACxD,MAAM,EAAE,YACV;AAED,MAAI,eAAe,SAAS,GAAG;AAC7B,SAAM,KAAK,iBAAiB;AAC5B,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,cAAc,eAAe,MAAM,GAAG,GAAG,CAClD,OAAM,KAAK,KAAK,aAAa;AAE/B,OAAI,eAAe,SAAS,GAC1B,OAAM,KAAK,aAAa,eAAe,SAAS,GAAG,OAAO;AAE5D,SAAM,KAAK,GAAG;;AAGhB,SAAO,MAAM,KAAK,KAAK;;;;;CAMzB,UAAU,QAAqC;AAC7C,OAAK,SAAS;GAAE,GAAG,KAAK;GAAQ,GAAG;GAAQ;;;;;CAM7C,AAAQ,gBACN,SACA,WACQ;EACR,MAAMC,QAAkB,EAAE;EAG1B,MAAM,SAAS,QAAQ,OAAO,MAAM,EAAE,OAAO;EAC7C,MAAM,WACJ,QAAQ,SAAS,IACb,KAAK,MACH,QAAQ,QAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,OACxD,GACD;AAEN,QAAM,KAAK,SAAS,0BAA0B,wBAAwB;AACtE,QAAM,KAAK,UAAU,SAAS,MAAM;AACpC,QAAM,KAAK,GAAG;AAGd,OAAK,MAAM,UAAU,SAAS;GAC5B,MAAM,OAAO,OAAO,SAAS,MAAM;AACnC,SAAM,KAAK,GAAG,KAAK,GAAG,OAAO,KAAK,IAAI,OAAO,MAAM,MAAM;;AAE3D,QAAM,KAAK,GAAG;EAGd,MAAM,SAAS,UAAU,QAAQ,MAAM,EAAE,aAAa,QAAQ;EAC9D,MAAM,WAAW,UAAU,QAAQ,MAAM,EAAE,aAAa,UAAU;EAClE,MAAM,QAAQ,UAAU,QAAQ,MAAM,EAAE,aAAa,OAAO;AAE5D,MAAI,OAAO,SAAS,EAClB,OAAM,KAAK,WAAW,OAAO,SAAS;AAExC,MAAI,SAAS,SAAS,EACpB,OAAM,KAAK,aAAa,SAAS,SAAS;AAE5C,MAAI,MAAM,SAAS,EACjB,OAAM,KAAK,SAAS,MAAM,SAAS;AAGrC,SAAO,MAAM,KAAK,KAAK;;;;;CAMzB,AAAQ,eAAe,MAAgC;AACrD,UAAQ,MAAR;GACE,KAAK,YACH,QAAO;GACT,KAAK,WACH,QAAO;GACT,KAAK,YACH,QAAO;GACT,QACE,QAAO;;;;;;;AAQf,SAAgB,oBACd,QACe;AACf,QAAO,IAAI,cAAc,OAAO;;;AAIlC,MAAa,gBAAgB,IAAI,eAAe"}
@@ -0,0 +1,25 @@
1
+ import { FsAdapter } from "../ports/fs.js";
2
+ import { WatchOptions, Watcher, WatcherAdapter } from "../ports/watcher.js";
3
+ import { LoggerAdapter } from "../ports/logger.js";
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.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","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,32 @@
1
+ import { validateSpec } from "./validate.js";
2
+ import { buildSpec } from "./build.js";
3
+
4
+ //#region src/services/watch.ts
5
+ function watchSpecs(adapters, config, options, overrides) {
6
+ const { watcher, fs, logger } = adapters;
7
+ const w = watcher.watch(options);
8
+ const validateFn = overrides?.validate ?? (async (specPath) => {
9
+ await validateSpec(specPath, {
10
+ fs,
11
+ logger
12
+ });
13
+ });
14
+ const buildFn = overrides?.build ?? (async (specPath) => {
15
+ await buildSpec(specPath, {
16
+ fs,
17
+ logger
18
+ }, config);
19
+ });
20
+ w.on(async (event) => {
21
+ if (event.type !== "change") return;
22
+ logger.info("watchSpecs.changed", { path: event.path });
23
+ if (options.runValidate) await validateFn(event.path);
24
+ if (options.runBuild) if (options.dryRun) logger.info("[dry-run] watchSpecs skipped build", { path: event.path });
25
+ else await buildFn(event.path);
26
+ });
27
+ return w;
28
+ }
29
+
30
+ //#endregion
31
+ export { watchSpecs };
32
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","names":["validateFn: WatchValidateFn","buildFn: WatchBuildFn"],"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,MAAMA,aACJ,WAAW,aACV,OAAO,aAAa;AACnB,QAAM,aAAa,UAAU;GAAE;GAAI;GAAQ,CAAC;;CAGhD,MAAMC,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.js";
2
+ import { PackageManager, WorkspaceInfo, detectPackageManager, findPackageRoot, findWorkspaceRoot, getWorkspaceInfo } from "../adapters/workspace.js";
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.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-info.d.ts","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.js";
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.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-info.js","names":["monorepoConfig: MonorepoConfig | undefined","configFiles: string[]","merged: Record<string, unknown>","lines: string[]"],"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,IAAIA;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,MAAMC,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,IAAIC,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,MAAMC,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.js";
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.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-config.template.d.ts","names":[],"sources":["../../src/templates/app-config.template.ts"],"sourcesContent":[],"mappings":";;;iBAEgB,wBAAA,OAA+B"}
@@ -0,0 +1,107 @@
1
+ //#region src/templates/app-config.template.ts
2
+ function generateAppBlueprintSpec(data) {
3
+ const exportName = toPascalCase(data.name.split(".").pop() ?? "App") + "AppConfig";
4
+ const capabilitiesSection = buildCapabilitiesSection(data);
5
+ const featuresSection = buildFeaturesSection(data);
6
+ const dataViewsSection = buildMappingSection("dataViews", data.dataViews);
7
+ const workflowsSection = buildMappingSection("workflows", data.workflows);
8
+ const policiesSection = buildPolicySection(data);
9
+ const themeSection = buildThemeSection(data);
10
+ const telemetrySection = buildTelemetrySection(data);
11
+ const experimentsSection = buildExperimentsSection(data);
12
+ const flagsSection = buildFeatureFlagsSection(data);
13
+ const routesSection = buildRoutesSection(data);
14
+ const notesSection = data.notes ? ` notes: '${escapeString(data.notes)}',\n` : "";
15
+ return `import type { AppBlueprintSpec } from '@contractspec/lib.contracts/app-config';
16
+
17
+ export const ${exportName}: AppBlueprintSpec = {
18
+ meta: {
19
+ key: '${escapeString(data.name)}',
20
+ version: ${data.version},
21
+ title: '${escapeString(data.title)}',
22
+ description: '${escapeString(data.description)}',
23
+ domain: '${escapeString(data.domain)}',
24
+ owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(", ")}],
25
+ tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(", ")}],
26
+ stability: '${data.stability}',
27
+ appId: '${escapeString(data.appId)}',
28
+ },
29
+ ${capabilitiesSection}${featuresSection}${dataViewsSection}${workflowsSection}${policiesSection}${themeSection}${telemetrySection}${experimentsSection}${flagsSection}${routesSection}${notesSection}};\n`;
30
+ }
31
+ function buildCapabilitiesSection(data) {
32
+ if (data.capabilitiesEnabled.length === 0 && data.capabilitiesDisabled.length === 0) return "";
33
+ return ` capabilities: {\n${data.capabilitiesEnabled.length > 0 ? ` enabled: [${data.capabilitiesEnabled.map((key) => formatCapabilityRef(key)).join(", ")}],\n` : ""}${data.capabilitiesDisabled.length > 0 ? ` disabled: [${data.capabilitiesDisabled.map((key) => formatCapabilityRef(key)).join(", ")}],\n` : ""} },\n`;
34
+ }
35
+ function buildFeaturesSection(data) {
36
+ if (data.featureIncludes.length === 0 && data.featureExcludes.length === 0) return "";
37
+ return ` features: {\n${data.featureIncludes.length > 0 ? ` include: [${data.featureIncludes.map((key) => `{ key: '${escapeString(key)}' }`).join(", ")}],\n` : ""}${data.featureExcludes.length > 0 ? ` exclude: [${data.featureExcludes.map((key) => `{ key: '${escapeString(key)}' }`).join(", ")}],\n` : ""} },\n`;
38
+ }
39
+ function buildMappingSection(prop, mappings) {
40
+ if (mappings.length === 0) return "";
41
+ return ` ${prop}: {\n${mappings.map((mapping) => ` ${mapping.slot}: {
42
+ name: '${escapeString(mapping.name)}',
43
+ ${typeof mapping.version === "number" ? `version: ${mapping.version},` : ""}
44
+ }`).join(",\n")}\n },\n`;
45
+ }
46
+ function buildPolicySection(data) {
47
+ if (data.policyRefs.length === 0) return "";
48
+ return ` policies: [\n${data.policyRefs.map((policy) => ` {
49
+ name: '${escapeString(policy.name)}'${typeof policy.version === "number" ? `,\n version: ${policy.version}` : ""}
50
+ }`).join(",\n")}\n ],\n`;
51
+ }
52
+ function buildThemeSection(data) {
53
+ if (!data.theme) return "";
54
+ return ` theme: {\n${` primary: { name: '${escapeString(data.theme.name)}', version: ${data.theme.version} },\n`}${data.themeFallbacks.length > 0 ? ` fallbacks: [${data.themeFallbacks.map((theme) => `{ name: '${escapeString(theme.name)}', version: ${theme.version} }`).join(", ")}],\n` : ""} },\n`;
55
+ }
56
+ function buildTelemetrySection(data) {
57
+ if (!data.telemetry) return "";
58
+ return ` telemetry: {
59
+ spec: {
60
+ name: '${escapeString(data.telemetry.name)}'${typeof data.telemetry.version === "number" ? `,\n version: ${data.telemetry.version}` : ""}
61
+ },
62
+ },\n`;
63
+ }
64
+ function buildExperimentsSection(data) {
65
+ if (data.activeExperiments.length === 0 && data.pausedExperiments.length === 0) return "";
66
+ return ` experiments: {\n${data.activeExperiments.length > 0 ? ` active: [${data.activeExperiments.map((exp) => formatExperimentRef(exp)).join(", ")}],\n` : ""}${data.pausedExperiments.length > 0 ? ` paused: [${data.pausedExperiments.map((exp) => formatExperimentRef(exp)).join(", ")}],\n` : ""} },\n`;
67
+ }
68
+ function buildFeatureFlagsSection(data) {
69
+ if (data.featureFlags.length === 0) return "";
70
+ return ` featureFlags: [\n${data.featureFlags.map((flag) => ` {
71
+ key: '${escapeString(flag.key)}',
72
+ enabled: ${flag.enabled},
73
+ ${flag.variant ? `variant: '${escapeString(flag.variant)}',` : ""}
74
+ ${flag.description ? `description: '${escapeString(flag.description)}',` : ""}
75
+ }`).join(",\n")}\n ],\n`;
76
+ }
77
+ function buildRoutesSection(data) {
78
+ if (data.routes.length === 0) return "";
79
+ return ` routes: [\n${data.routes.map((route) => {
80
+ return ` { ${[
81
+ `path: '${escapeString(route.path)}'`,
82
+ route.label ? `label: '${escapeString(route.label)}'` : null,
83
+ route.dataView ? `dataView: '${escapeString(route.dataView)}'` : null,
84
+ route.workflow ? `workflow: '${escapeString(route.workflow)}'` : null,
85
+ route.guardName ? `guard: { name: '${escapeString(route.guardName)}'${typeof route.guardVersion === "number" ? `, version: ${route.guardVersion}` : ""} }` : null,
86
+ route.featureFlag ? `featureFlag: '${escapeString(route.featureFlag)}'` : null,
87
+ route.experimentName ? `experiment: { name: '${escapeString(route.experimentName)}'${typeof route.experimentVersion === "number" ? `, version: ${route.experimentVersion}` : ""} }` : null
88
+ ].filter(Boolean).join(", ")} }`;
89
+ }).join(",\n")}\n ],\n`;
90
+ }
91
+ function formatCapabilityRef(key) {
92
+ return `{ key: '${escapeString(key)}' }`;
93
+ }
94
+ function formatExperimentRef(exp) {
95
+ const version = typeof exp.version === "number" ? `, version: ${exp.version}` : "";
96
+ return `{ name: '${escapeString(exp.name)}'${version} }`;
97
+ }
98
+ function toPascalCase(value) {
99
+ return value.split(/[-_.]/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
100
+ }
101
+ function escapeString(value) {
102
+ return value.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
103
+ }
104
+
105
+ //#endregion
106
+ export { generateAppBlueprintSpec };
107
+ //# sourceMappingURL=app-config.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-config.template.js","names":[],"sources":["../../src/templates/app-config.template.ts"],"sourcesContent":["import type { AppBlueprintSpecData } from '../types';\n\nexport function generateAppBlueprintSpec(data: AppBlueprintSpecData): string {\n const exportName =\n toPascalCase(data.name.split('.').pop() ?? 'App') + 'AppConfig';\n\n const capabilitiesSection = buildCapabilitiesSection(data);\n const featuresSection = buildFeaturesSection(data);\n const dataViewsSection = buildMappingSection('dataViews', data.dataViews);\n const workflowsSection = buildMappingSection('workflows', data.workflows);\n const policiesSection = buildPolicySection(data);\n const themeSection = buildThemeSection(data);\n const telemetrySection = buildTelemetrySection(data);\n const experimentsSection = buildExperimentsSection(data);\n const flagsSection = buildFeatureFlagsSection(data);\n const routesSection = buildRoutesSection(data);\n const notesSection = data.notes\n ? ` notes: '${escapeString(data.notes)}',\\n`\n : '';\n\n return `import type { AppBlueprintSpec } from '@contractspec/lib.contracts/app-config';\n\nexport const ${exportName}: AppBlueprintSpec = {\n meta: {\n key: '${escapeString(data.name)}',\n version: ${data.version},\n title: '${escapeString(data.title)}',\n description: '${escapeString(data.description)}',\n domain: '${escapeString(data.domain)}',\n owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(', ')}],\n stability: '${data.stability}',\n appId: '${escapeString(data.appId)}',\n },\n${capabilitiesSection}${featuresSection}${dataViewsSection}${workflowsSection}${policiesSection}${themeSection}${telemetrySection}${experimentsSection}${flagsSection}${routesSection}${notesSection}};\\n`;\n}\n\nfunction buildCapabilitiesSection(data: AppBlueprintSpecData): string {\n if (\n data.capabilitiesEnabled.length === 0 &&\n data.capabilitiesDisabled.length === 0\n ) {\n return '';\n }\n const enabled =\n data.capabilitiesEnabled.length > 0\n ? ` enabled: [${data.capabilitiesEnabled\n .map((key) => formatCapabilityRef(key))\n .join(', ')}],\\n`\n : '';\n const disabled =\n data.capabilitiesDisabled.length > 0\n ? ` disabled: [${data.capabilitiesDisabled\n .map((key) => formatCapabilityRef(key))\n .join(', ')}],\\n`\n : '';\n return ` capabilities: {\\n${enabled}${disabled} },\\n`;\n}\n\nfunction buildFeaturesSection(data: AppBlueprintSpecData): string {\n if (data.featureIncludes.length === 0 && data.featureExcludes.length === 0) {\n return '';\n }\n const include =\n data.featureIncludes.length > 0\n ? ` include: [${data.featureIncludes\n .map((key) => `{ key: '${escapeString(key)}' }`)\n .join(', ')}],\\n`\n : '';\n const exclude =\n data.featureExcludes.length > 0\n ? ` exclude: [${data.featureExcludes\n .map((key) => `{ key: '${escapeString(key)}' }`)\n .join(', ')}],\\n`\n : '';\n return ` features: {\\n${include}${exclude} },\\n`;\n}\n\nfunction buildMappingSection(\n prop: 'dataViews' | 'workflows',\n mappings: AppBlueprintSpecData['dataViews']\n): string {\n if (mappings.length === 0) return '';\n const body = mappings\n .map(\n (mapping) => ` ${mapping.slot}: {\n name: '${escapeString(mapping.name)}',\n ${typeof mapping.version === 'number' ? `version: ${mapping.version},` : ''}\n }`\n )\n .join(',\\n');\n return ` ${prop}: {\\n${body}\\n },\\n`;\n}\n\nfunction buildPolicySection(data: AppBlueprintSpecData): string {\n if (data.policyRefs.length === 0) return '';\n const entries = data.policyRefs\n .map(\n (policy) => ` {\n name: '${escapeString(policy.name)}'${typeof policy.version === 'number' ? `,\\n version: ${policy.version}` : ''}\n }`\n )\n .join(',\\n');\n return ` policies: [\\n${entries}\\n ],\\n`;\n}\n\nfunction buildThemeSection(data: AppBlueprintSpecData): string {\n if (!data.theme) return '';\n const primary = ` primary: { name: '${escapeString(data.theme.name)}', version: ${data.theme.version} },\\n`;\n const fallbacks =\n data.themeFallbacks.length > 0\n ? ` fallbacks: [${data.themeFallbacks\n .map(\n (theme) =>\n `{ name: '${escapeString(theme.name)}', version: ${theme.version} }`\n )\n .join(', ')}],\\n`\n : '';\n return ` theme: {\\n${primary}${fallbacks} },\\n`;\n}\n\nfunction buildTelemetrySection(data: AppBlueprintSpecData): string {\n if (!data.telemetry) return '';\n return ` telemetry: {\n spec: {\n name: '${escapeString(data.telemetry.name)}'${\n typeof data.telemetry.version === 'number'\n ? `,\\n version: ${data.telemetry.version}`\n : ''\n }\n },\n },\\n`;\n}\n\nfunction buildExperimentsSection(data: AppBlueprintSpecData): string {\n if (\n data.activeExperiments.length === 0 &&\n data.pausedExperiments.length === 0\n ) {\n return '';\n }\n const active =\n data.activeExperiments.length > 0\n ? ` active: [${data.activeExperiments\n .map((exp) => formatExperimentRef(exp))\n .join(', ')}],\\n`\n : '';\n const paused =\n data.pausedExperiments.length > 0\n ? ` paused: [${data.pausedExperiments\n .map((exp) => formatExperimentRef(exp))\n .join(', ')}],\\n`\n : '';\n return ` experiments: {\\n${active}${paused} },\\n`;\n}\n\nfunction buildFeatureFlagsSection(data: AppBlueprintSpecData): string {\n if (data.featureFlags.length === 0) return '';\n const flags = data.featureFlags\n .map(\n (flag) => ` {\n key: '${escapeString(flag.key)}',\n enabled: ${flag.enabled},\n ${flag.variant ? `variant: '${escapeString(flag.variant)}',` : ''}\n ${flag.description ? `description: '${escapeString(flag.description)}',` : ''}\n }`\n )\n .join(',\\n');\n return ` featureFlags: [\\n${flags}\\n ],\\n`;\n}\n\nfunction buildRoutesSection(data: AppBlueprintSpecData): string {\n if (data.routes.length === 0) return '';\n const routes = data.routes\n .map((route) => {\n const entries = [\n `path: '${escapeString(route.path)}'`,\n route.label ? `label: '${escapeString(route.label)}'` : null,\n route.dataView ? `dataView: '${escapeString(route.dataView)}'` : null,\n route.workflow ? `workflow: '${escapeString(route.workflow)}'` : null,\n route.guardName\n ? `guard: { name: '${escapeString(route.guardName)}'${\n typeof route.guardVersion === 'number'\n ? `, version: ${route.guardVersion}`\n : ''\n } }`\n : null,\n route.featureFlag\n ? `featureFlag: '${escapeString(route.featureFlag)}'`\n : null,\n route.experimentName\n ? `experiment: { name: '${escapeString(route.experimentName)}'${\n typeof route.experimentVersion === 'number'\n ? `, version: ${route.experimentVersion}`\n : ''\n } }`\n : null,\n ].filter(Boolean);\n return ` { ${entries.join(', ')} }`;\n })\n .join(',\\n');\n return ` routes: [\\n${routes}\\n ],\\n`;\n}\n\nfunction formatCapabilityRef(key: string): string {\n return `{ key: '${escapeString(key)}' }`;\n}\n\nfunction formatExperimentRef(exp: { name: string; version?: number }): string {\n const version =\n typeof exp.version === 'number' ? `, version: ${exp.version}` : '';\n return `{ name: '${escapeString(exp.name)}'${version} }`;\n}\n\nfunction toPascalCase(value: string): string {\n return value\n .split(/[-_.]/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\nfunction escapeString(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { DataViewSpecData } from "../types.js";
2
+
3
+ //#region src/templates/data-view.template.d.ts
4
+ declare function generateDataViewSpec(data: DataViewSpecData): string;
5
+ //#endregion
6
+ export { generateDataViewSpec };
7
+ //# sourceMappingURL=data-view.template.d.ts.map