@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Chaman Ventures, SASU
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # @contractspec/bundle.workspace
2
+
3
+ Website: https://contractspec.io/
4
+
5
+
6
+ Reusable use-cases and services for ContractSpec workspace operations.
7
+
8
+ ## Purpose
9
+
10
+ This bundle provides platform-agnostic services that can be used by:
11
+
12
+ - CLI tools (`@contractspec/app.cli-contractspec`)
13
+ - Web applications
14
+ - VS Code extensions
15
+ - API servers
16
+
17
+ ## Architecture
18
+
19
+ ```
20
+ bundle.contractspec-workspace
21
+ ├── services/ # Use-case implementations
22
+ │ ├── build.ts # Build deterministic artifacts from specs (templates-first)
23
+ │ ├── validate.ts # Validate spec structure (and, later, implementation checks)
24
+ │ ├── diff.ts # Compare specs (semantic diff)
25
+ │ ├── deps.ts # Analyze dependencies
26
+ │ ├── list.ts # Discover specs by glob
27
+ │ └── config.ts # Load + merge workspace config (.contractsrc.json)
28
+ │ ├── sync.ts # Sync all specs (validate/build across a workspace)
29
+ │ ├── watch.ts # Watch specs and trigger validate/build
30
+ │ ├── clean.ts # Safe-by-default cleanup of generated artifacts
31
+ │ ├── test.ts # Run TestSpec scenarios (pure runner wrapper)
32
+ │ └── regenerator.ts # Regenerator service wrapper (no module loading)
33
+ ├── adapters/ # Runtime adapters (Node defaults)
34
+ │ ├── fs.ts # Filesystem operations
35
+ │ ├── git.ts # Git operations
36
+ │ ├── watcher.ts # File watching
37
+ │ ├── ai.ts # AI providers
38
+ │ └── logger.ts # Logging/progress
39
+ └── ports/ # Adapter interfaces
40
+ └── index.ts # Port type definitions
41
+ ```
42
+
43
+ ## Design Principles
44
+
45
+ - **Adapter pattern**: All I/O goes through explicit ports/adapters
46
+ - **Testable**: Services can be tested with mock adapters
47
+ - **Reusable**: Same services work across CLI, web, and extensions
48
+ - **No CLI dependencies**: No `chalk`, `ora`, `commander`, or `inquirer`
49
+
50
+ ## Usage
51
+
52
+ ```typescript
53
+ import {
54
+ createNodeAdapters,
55
+ loadWorkspaceConfig,
56
+ buildSpec,
57
+ } from '@contractspec/bundle.workspace';
58
+
59
+ // Create adapters for Node.js runtime
60
+ const adapters = createNodeAdapters();
61
+
62
+ // Load workspace config (or use defaults)
63
+ const config = await loadWorkspaceConfig(adapters.fs);
64
+
65
+ // Build deterministic artifacts from a spec (templates-first)
66
+ const result = await buildSpec(
67
+ './my-spec.operation.ts',
68
+ { fs: adapters.fs, logger: adapters.logger },
69
+ config
70
+ );
71
+ ```
72
+
73
+ ## Notes
74
+
75
+ - `sync` / `watch` accept optional overrides so CLI (or an extension) can inject
76
+ richer build/validate behavior while reusing the deterministic orchestration.
77
+ - `test` and `regenerator` deliberately avoid TypeScript module loading; callers
78
+ pass already-loaded specs/contexts/rules/sinks.
79
+
@@ -0,0 +1,36 @@
1
+ //#region rolldown:runtime
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __exportAll = (all, symbols) => {
7
+ let target = {};
8
+ for (var name in all) {
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true
12
+ });
13
+ }
14
+ if (symbols) {
15
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
16
+ }
17
+ return target;
18
+ };
19
+ var __copyProps = (to, from, except, desc) => {
20
+ if (from && typeof from === "object" || typeof from === "function") {
21
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
22
+ key = keys[i];
23
+ if (!__hasOwnProp.call(to, key) && key !== except) {
24
+ __defProp(to, key, {
25
+ get: ((k) => from[k]).bind(null, key),
26
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
27
+ });
28
+ }
29
+ }
30
+ }
31
+ return to;
32
+ };
33
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
34
+
35
+ //#endregion
36
+ export { __exportAll, __reExport };
@@ -0,0 +1,12 @@
1
+ import { AiAdapter } from "../ports/ai.js";
2
+ import { WorkspaceConfig } from "@contractspec/module.workspace";
3
+
4
+ //#region src/adapters/ai.d.ts
5
+
6
+ /**
7
+ * Create a Node.js AI adapter using Vercel AI SDK.
8
+ */
9
+ declare function createNodeAiAdapter(config: WorkspaceConfig): AiAdapter;
10
+ //#endregion
11
+ export { createNodeAiAdapter };
12
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","names":[],"sources":["../../src/adapters/ai.ts"],"sourcesContent":[],"mappings":";;;;;;;;iBAqBgB,mBAAA,SAA4B,kBAAkB"}
@@ -0,0 +1,83 @@
1
+ import { anthropic } from "@ai-sdk/anthropic";
2
+ import { openai } from "@ai-sdk/openai";
3
+ import { ollama } from "ollama-ai-provider";
4
+ import { generateObject, generateText, streamText } from "ai";
5
+
6
+ //#region src/adapters/ai.ts
7
+ /**
8
+ * Node.js AI adapter implementation using Vercel AI SDK.
9
+ */
10
+ /**
11
+ * Create a Node.js AI adapter using Vercel AI SDK.
12
+ */
13
+ function createNodeAiAdapter(config) {
14
+ return {
15
+ async validateProvider(providerConfig) {
16
+ try {
17
+ const { aiProvider } = providerConfig;
18
+ if (aiProvider === "ollama") return { success: true };
19
+ if (aiProvider === "claude" && !process.env["ANTHROPIC_API_KEY"]) return {
20
+ success: false,
21
+ error: "ANTHROPIC_API_KEY environment variable not set"
22
+ };
23
+ if (aiProvider === "openai" && !process.env["OPENAI_API_KEY"]) return {
24
+ success: false,
25
+ error: "OPENAI_API_KEY environment variable not set"
26
+ };
27
+ return { success: true };
28
+ } catch (error) {
29
+ return {
30
+ success: false,
31
+ error: error instanceof Error ? error.message : String(error)
32
+ };
33
+ }
34
+ },
35
+ async generateText(options) {
36
+ return { text: (await generateText({
37
+ model: getAIProvider(config),
38
+ prompt: options.prompt,
39
+ system: options.systemPrompt
40
+ })).text };
41
+ },
42
+ async generateStructured(options) {
43
+ return { object: (await generateObject({
44
+ model: getAIProvider(config),
45
+ schema: options.schema,
46
+ prompt: options.prompt,
47
+ system: options.systemPrompt
48
+ })).object };
49
+ },
50
+ async streamText(options, onChunk) {
51
+ const result = await streamText({
52
+ model: getAIProvider(config),
53
+ prompt: options.prompt,
54
+ system: options.systemPrompt
55
+ });
56
+ let fullText = "";
57
+ for await (const chunk of result.textStream) {
58
+ fullText += chunk;
59
+ onChunk(chunk);
60
+ }
61
+ return fullText;
62
+ }
63
+ };
64
+ }
65
+ /**
66
+ * Get AI provider based on configuration.
67
+ */
68
+ function getAIProvider(config) {
69
+ const { aiProvider, aiModel, customEndpoint } = config;
70
+ switch (aiProvider) {
71
+ case "claude": return anthropic(aiModel ?? "claude-3-5-sonnet-20241022");
72
+ case "openai": return openai(aiModel ?? "gpt-4o");
73
+ case "ollama": return ollama(aiModel ?? "codellama");
74
+ case "custom":
75
+ if (!customEndpoint) throw new Error("Custom endpoint required. Set customEndpoint in config or CONTRACTSPEC_LLM_ENDPOINT env var");
76
+ return openai(aiModel ?? "default");
77
+ default: throw new Error(`Unknown AI provider: ${aiProvider}`);
78
+ }
79
+ }
80
+
81
+ //#endregion
82
+ export { createNodeAiAdapter };
83
+ //# sourceMappingURL=ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","names":[],"sources":["../../src/adapters/ai.ts"],"sourcesContent":["/**\n * Node.js AI adapter implementation using Vercel AI SDK.\n */\n\nimport { anthropic } from '@ai-sdk/anthropic';\nimport { openai } from '@ai-sdk/openai';\nimport { ollama } from 'ollama-ai-provider';\nimport type { LanguageModel } from 'ai';\nimport { generateObject, generateText, streamText } from 'ai';\nimport type { WorkspaceConfig } from '@contractspec/module.workspace';\nimport type {\n AiAdapter,\n AiGenerateOptions,\n AiGenerateResult,\n AiGenerateStructuredOptions,\n AiValidationResult,\n} from '../ports/ai';\n\n/**\n * Create a Node.js AI adapter using Vercel AI SDK.\n */\nexport function createNodeAiAdapter(config: WorkspaceConfig): AiAdapter {\n return {\n async validateProvider(\n providerConfig: WorkspaceConfig\n ): Promise<AiValidationResult> {\n try {\n const { aiProvider } = providerConfig;\n\n // For Ollama, we can't easily validate without making a request\n if (aiProvider === 'ollama') {\n return { success: true };\n }\n\n // For cloud providers, check API key exists\n if (aiProvider === 'claude' && !process.env['ANTHROPIC_API_KEY']) {\n return {\n success: false,\n error: 'ANTHROPIC_API_KEY environment variable not set',\n };\n }\n\n if (aiProvider === 'openai' && !process.env['OPENAI_API_KEY']) {\n return {\n success: false,\n error: 'OPENAI_API_KEY environment variable not set',\n };\n }\n\n return { success: true };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n\n async generateText(options: AiGenerateOptions): Promise<AiGenerateResult> {\n const model = getAIProvider(config);\n\n const result = await generateText({\n model,\n prompt: options.prompt,\n system: options.systemPrompt,\n });\n\n return { text: result.text };\n },\n\n async generateStructured<T>(\n options: AiGenerateStructuredOptions<T>\n ): Promise<{ object: T }> {\n const model = getAIProvider(config);\n\n // Use generateObject with schema cast to expected type\n const generateObjectOptions = {\n model,\n schema: options.schema,\n prompt: options.prompt,\n system: options.systemPrompt,\n };\n\n const result = await generateObject(\n generateObjectOptions as Parameters<typeof generateObject>[0]\n );\n\n return { object: result.object as T };\n },\n\n async streamText(\n options: AiGenerateOptions,\n onChunk: (text: string) => void\n ): Promise<string> {\n const model = getAIProvider(config);\n\n const result = await streamText({\n model,\n prompt: options.prompt,\n system: options.systemPrompt,\n });\n\n let fullText = '';\n\n for await (const chunk of result.textStream) {\n fullText += chunk;\n onChunk(chunk);\n }\n\n return fullText;\n },\n };\n}\n\n/**\n * Get AI provider based on configuration.\n */\nfunction getAIProvider(config: WorkspaceConfig): LanguageModel {\n const { aiProvider, aiModel, customEndpoint } = config;\n\n switch (aiProvider) {\n case 'claude': {\n const model = aiModel ?? 'claude-3-5-sonnet-20241022';\n return anthropic(model);\n }\n\n case 'openai': {\n const model = aiModel ?? 'gpt-4o';\n return openai(model);\n }\n\n case 'ollama': {\n const model = aiModel ?? 'codellama';\n // ollama-ai-provider returns LanguageModelV1, wrap it to satisfy LanguageModel interface\n const ollamaModel = ollama(model);\n // Return as unknown then LanguageModel to bypass strict type checking\n // This is safe because ollama models are compatible at runtime\n return ollamaModel as unknown as LanguageModel;\n }\n\n case 'custom': {\n if (!customEndpoint) {\n throw new Error(\n 'Custom endpoint required. Set customEndpoint in config or CONTRACTSPEC_LLM_ENDPOINT env var'\n );\n }\n\n const model = aiModel ?? 'default';\n // For custom endpoints, use openai with environment variable for baseURL\n return openai(model);\n }\n\n default:\n throw new Error(`Unknown AI provider: ${aiProvider}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAgB,oBAAoB,QAAoC;AACtE,QAAO;EACL,MAAM,iBACJ,gBAC6B;AAC7B,OAAI;IACF,MAAM,EAAE,eAAe;AAGvB,QAAI,eAAe,SACjB,QAAO,EAAE,SAAS,MAAM;AAI1B,QAAI,eAAe,YAAY,CAAC,QAAQ,IAAI,qBAC1C,QAAO;KACL,SAAS;KACT,OAAO;KACR;AAGH,QAAI,eAAe,YAAY,CAAC,QAAQ,IAAI,kBAC1C,QAAO;KACL,SAAS;KACT,OAAO;KACR;AAGH,WAAO,EAAE,SAAS,MAAM;YACjB,OAAO;AACd,WAAO;KACL,SAAS;KACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;KAC9D;;;EAIL,MAAM,aAAa,SAAuD;AASxE,UAAO,EAAE,OANM,MAAM,aAAa;IAChC,OAHY,cAAc,OAAO;IAIjC,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IACjB,CAAC,EAEoB,MAAM;;EAG9B,MAAM,mBACJ,SACwB;AAexB,UAAO,EAAE,SAJM,MAAM,eAPS;IAC5B,OAJY,cAAc,OAAO;IAKjC,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IACjB,CAIA,EAEuB,QAAa;;EAGvC,MAAM,WACJ,SACA,SACiB;GAGjB,MAAM,SAAS,MAAM,WAAW;IAC9B,OAHY,cAAc,OAAO;IAIjC,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IACjB,CAAC;GAEF,IAAI,WAAW;AAEf,cAAW,MAAM,SAAS,OAAO,YAAY;AAC3C,gBAAY;AACZ,YAAQ,MAAM;;AAGhB,UAAO;;EAEV;;;;;AAMH,SAAS,cAAc,QAAwC;CAC7D,MAAM,EAAE,YAAY,SAAS,mBAAmB;AAEhD,SAAQ,YAAR;EACE,KAAK,SAEH,QAAO,UADO,WAAW,6BACF;EAGzB,KAAK,SAEH,QAAO,OADO,WAAW,SACL;EAGtB,KAAK,SAMH,QAHoB,OAFN,WAAW,YAEQ;EAMnC,KAAK;AACH,OAAI,CAAC,eACH,OAAM,IAAI,MACR,8FACD;AAKH,UAAO,OAFO,WAAW,UAEL;EAGtB,QACE,OAAM,IAAI,MAAM,wBAAwB,aAAa"}
@@ -0,0 +1,29 @@
1
+ import { WorkspaceAdapters } from "../ports/logger.js";
2
+ import { WorkspaceConfig } from "@contractspec/module.workspace";
3
+
4
+ //#region src/adapters/factory.d.ts
5
+
6
+ /**
7
+ * Options for creating adapters.
8
+ */
9
+ interface CreateAdaptersOptions {
10
+ /**
11
+ * Working directory for file operations.
12
+ */
13
+ cwd?: string;
14
+ /**
15
+ * Workspace configuration for AI.
16
+ */
17
+ config?: WorkspaceConfig;
18
+ /**
19
+ * Use no-op logger (for testing).
20
+ */
21
+ silent?: boolean;
22
+ }
23
+ /**
24
+ * Create all Node.js adapters with default configuration.
25
+ */
26
+ declare function createNodeAdapters(options?: CreateAdaptersOptions): WorkspaceAdapters;
27
+ //#endregion
28
+ export { CreateAdaptersOptions, createNodeAdapters };
29
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","names":[],"sources":["../../src/adapters/factory.ts"],"sourcesContent":[],"mappings":";;;;;AAmCA;;;UApBiB,qBAAA;;;;;;;;WASN;;;;;;;;;iBAWK,kBAAA,WACL,wBACR"}
@@ -0,0 +1,37 @@
1
+ import { createNodeFsAdapter } from "./fs.js";
2
+ import { createNodeGitAdapter } from "./git.js";
3
+ import { createNodeWatcherAdapter } from "./watcher.js";
4
+ import { createNodeAiAdapter } from "./ai.js";
5
+ import { createConsoleLoggerAdapter, createNoopLoggerAdapter } from "./logger.js";
6
+
7
+ //#region src/adapters/factory.ts
8
+ /**
9
+ * Create all Node.js adapters with default configuration.
10
+ */
11
+ function createNodeAdapters(options = {}) {
12
+ const { cwd, config, silent } = options;
13
+ const workspaceConfig = config ?? {
14
+ aiProvider: "claude",
15
+ agentMode: "simple",
16
+ outputDir: "./src",
17
+ conventions: {
18
+ operations: "interactions/commands|queries",
19
+ events: "events",
20
+ presentations: "presentations",
21
+ forms: "forms"
22
+ },
23
+ defaultOwners: [],
24
+ defaultTags: []
25
+ };
26
+ return {
27
+ fs: createNodeFsAdapter(cwd),
28
+ git: createNodeGitAdapter(cwd),
29
+ watcher: createNodeWatcherAdapter(cwd),
30
+ ai: createNodeAiAdapter(workspaceConfig),
31
+ logger: silent ? createNoopLoggerAdapter() : createConsoleLoggerAdapter()
32
+ };
33
+ }
34
+
35
+ //#endregion
36
+ export { createNodeAdapters };
37
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","names":["workspaceConfig: WorkspaceConfig"],"sources":["../../src/adapters/factory.ts"],"sourcesContent":["/**\n * Factory for creating workspace adapters.\n */\n\nimport type { WorkspaceConfig } from '@contractspec/module.workspace';\nimport type { WorkspaceAdapters } from '../ports/logger';\nimport { createNodeFsAdapter } from './fs';\nimport { createNodeGitAdapter } from './git';\nimport { createNodeWatcherAdapter } from './watcher';\nimport { createNodeAiAdapter } from './ai';\nimport { createConsoleLoggerAdapter, createNoopLoggerAdapter } from './logger';\n\n/**\n * Options for creating adapters.\n */\nexport interface CreateAdaptersOptions {\n /**\n * Working directory for file operations.\n */\n cwd?: string;\n\n /**\n * Workspace configuration for AI.\n */\n config?: WorkspaceConfig;\n\n /**\n * Use no-op logger (for testing).\n */\n silent?: boolean;\n}\n\n/**\n * Create all Node.js adapters with default configuration.\n */\nexport function createNodeAdapters(\n options: CreateAdaptersOptions = {}\n): WorkspaceAdapters {\n const { cwd, config, silent } = options;\n\n // Use default config if not provided\n const workspaceConfig: WorkspaceConfig = config ?? {\n aiProvider: 'claude',\n agentMode: 'simple',\n outputDir: './src',\n conventions: {\n operations: 'interactions/commands|queries',\n events: 'events',\n presentations: 'presentations',\n forms: 'forms',\n },\n defaultOwners: [],\n defaultTags: [],\n };\n\n return {\n fs: createNodeFsAdapter(cwd),\n git: createNodeGitAdapter(cwd),\n watcher: createNodeWatcherAdapter(cwd),\n ai: createNodeAiAdapter(workspaceConfig),\n logger: silent ? createNoopLoggerAdapter() : createConsoleLoggerAdapter(),\n };\n}\n"],"mappings":";;;;;;;;;;AAmCA,SAAgB,mBACd,UAAiC,EAAE,EAChB;CACnB,MAAM,EAAE,KAAK,QAAQ,WAAW;CAGhC,MAAMA,kBAAmC,UAAU;EACjD,YAAY;EACZ,WAAW;EACX,WAAW;EACX,aAAa;GACX,YAAY;GACZ,QAAQ;GACR,eAAe;GACf,OAAO;GACR;EACD,eAAe,EAAE;EACjB,aAAa,EAAE;EAChB;AAED,QAAO;EACL,IAAI,oBAAoB,IAAI;EAC5B,KAAK,qBAAqB,IAAI;EAC9B,SAAS,yBAAyB,IAAI;EACtC,IAAI,oBAAoB,gBAAgB;EACxC,QAAQ,SAAS,yBAAyB,GAAG,4BAA4B;EAC1E"}
@@ -0,0 +1,11 @@
1
+ import { FsAdapter } from "../ports/fs.js";
2
+
3
+ //#region src/adapters/fs.d.ts
4
+
5
+ /**
6
+ * Create a Node.js filesystem adapter.
7
+ */
8
+ declare function createNodeFsAdapter(cwd?: string): FsAdapter;
9
+ //#endregion
10
+ export { createNodeFsAdapter };
11
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","names":[],"sources":["../../src/adapters/fs.ts"],"sourcesContent":[],"mappings":";;;;;;;iBA2EgB,mBAAA,gBAAmC"}
@@ -0,0 +1,131 @@
1
+ import { access, mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
2
+ import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
3
+ import { glob } from "glob";
4
+
5
+ //#region src/adapters/fs.ts
6
+ /**
7
+ * Node.js filesystem adapter implementation.
8
+ */
9
+ const DEFAULT_SPEC_PATTERNS = [
10
+ "**/*.operation.ts",
11
+ "**/*.operations.ts",
12
+ "**/*.event.ts",
13
+ "**/*.presentation.ts",
14
+ "**/*.feature.ts",
15
+ "**/*.capability.ts",
16
+ "**/*.workflow.ts",
17
+ "**/*.data-view.ts",
18
+ "**/*.form.ts",
19
+ "**/*.migration.ts",
20
+ "**/*.telemetry.ts",
21
+ "**/*.experiment.ts",
22
+ "**/*.app-config.ts",
23
+ "**/*.integration.ts",
24
+ "**/*.knowledge.ts",
25
+ "**/*.policy.ts",
26
+ "**/*.test-spec.ts",
27
+ "**/contracts/*.ts",
28
+ "**/contracts/index.ts",
29
+ "**/operations/*.ts",
30
+ "**/operations/index.ts",
31
+ "**/operations.ts",
32
+ "**/events.ts",
33
+ "**/presentations.ts",
34
+ "**/events/index.ts",
35
+ "**/presentations/index.ts"
36
+ ];
37
+ const DEFAULT_IGNORES = [
38
+ "**/node_modules/**",
39
+ "**/dist/**",
40
+ "**/.turbo/**",
41
+ "**/.next/**",
42
+ "**/build/**",
43
+ "**/coverage/**",
44
+ "**/*.d.ts",
45
+ "**/importer/**",
46
+ "**/exporter/**",
47
+ "**/docs/**/*.docblock.ts",
48
+ "**/docs/presentations.ts"
49
+ ];
50
+ /**
51
+ * Create a Node.js filesystem adapter.
52
+ */
53
+ function createNodeFsAdapter(cwd) {
54
+ const baseCwd = cwd ?? process.cwd();
55
+ return {
56
+ async exists(path) {
57
+ try {
58
+ await access(resolvePath(path));
59
+ return true;
60
+ } catch {
61
+ return false;
62
+ }
63
+ },
64
+ async readFile(path) {
65
+ return readFile(resolvePath(path), "utf-8");
66
+ },
67
+ async writeFile(path, content) {
68
+ const fullPath = resolvePath(path);
69
+ await mkdir(dirname(fullPath), { recursive: true });
70
+ await writeFile(fullPath, content, "utf-8");
71
+ },
72
+ async remove(path) {
73
+ await rm(resolvePath(path), {
74
+ recursive: true,
75
+ force: true
76
+ });
77
+ },
78
+ async stat(path) {
79
+ const stats = await stat(resolvePath(path));
80
+ return {
81
+ size: stats.size,
82
+ isFile: stats.isFile(),
83
+ isDirectory: stats.isDirectory(),
84
+ mtime: stats.mtime
85
+ };
86
+ },
87
+ async mkdir(path) {
88
+ await mkdir(resolvePath(path), { recursive: true });
89
+ },
90
+ async glob(options) {
91
+ const patterns = options.patterns ?? (options.pattern ? [options.pattern] : DEFAULT_SPEC_PATTERNS);
92
+ const ignore = options.ignore ?? DEFAULT_IGNORES;
93
+ const globCwd = options.cwd ?? baseCwd;
94
+ const absolute = options.absolute ?? true;
95
+ const all = [];
96
+ for (const pattern of patterns) {
97
+ const matches = await glob(pattern, {
98
+ cwd: globCwd,
99
+ ignore,
100
+ absolute
101
+ });
102
+ all.push(...matches);
103
+ }
104
+ return Array.from(new Set(all)).sort((a, b) => a.localeCompare(b));
105
+ },
106
+ resolve(...paths) {
107
+ const [first, ...rest] = paths;
108
+ if (!first) return baseCwd;
109
+ return resolve(baseCwd, first, ...rest);
110
+ },
111
+ dirname(path) {
112
+ return dirname(path);
113
+ },
114
+ basename(path) {
115
+ return basename(path);
116
+ },
117
+ join(...paths) {
118
+ return join(...paths);
119
+ },
120
+ relative(from, to) {
121
+ return relative(from, to);
122
+ }
123
+ };
124
+ function resolvePath(path) {
125
+ return isAbsolute(path) ? path : resolve(baseCwd, path);
126
+ }
127
+ }
128
+
129
+ //#endregion
130
+ export { createNodeFsAdapter };
131
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","names":["fsStat","all: string[]","globFn"],"sources":["../../src/adapters/fs.ts"],"sourcesContent":["/**\n * Node.js filesystem adapter implementation.\n */\n\nimport {\n access,\n mkdir,\n readFile,\n rm,\n stat as fsStat,\n writeFile,\n} from 'node:fs/promises';\nimport {\n basename,\n dirname,\n isAbsolute,\n join,\n relative,\n resolve,\n} from 'node:path';\nimport { glob as globFn } from 'glob';\nimport type { DiscoverOptions, FileStat, FsAdapter } from '../ports/fs';\n\nconst DEFAULT_SPEC_PATTERNS = [\n // Standard dot-prefixed naming convention\n '**/*.operation.ts',\n '**/*.operations.ts',\n '**/*.event.ts',\n '**/*.presentation.ts',\n '**/*.feature.ts',\n '**/*.capability.ts',\n '**/*.workflow.ts',\n '**/*.data-view.ts',\n '**/*.form.ts',\n '**/*.migration.ts',\n '**/*.telemetry.ts',\n '**/*.experiment.ts',\n '**/*.app-config.ts',\n '**/*.integration.ts',\n '**/*.knowledge.ts',\n '**/*.policy.ts',\n '**/*.test-spec.ts',\n // Directory-based patterns (contracts/ and operations/ directories)\n '**/contracts/*.ts',\n '**/contracts/index.ts',\n '**/operations/*.ts',\n '**/operations/index.ts',\n // Standalone file patterns (events.ts, presentations.ts)\n '**/operations.ts',\n '**/events.ts',\n '**/presentations.ts',\n // Directory index patterns (/events/index.ts, /presentations/index.ts)\n '**/events/index.ts',\n '**/presentations/index.ts',\n];\n\nconst DEFAULT_IGNORES = [\n '**/node_modules/**',\n '**/dist/**',\n '**/.turbo/**',\n '**/.next/**',\n '**/build/**',\n '**/coverage/**',\n '**/*.d.ts',\n // Code generators and transformers (not actual specs)\n '**/importer/**',\n '**/exporter/**',\n // Documentation blocks (treated separately)\n '**/docs/**/*.docblock.ts',\n '**/docs/presentations.ts',\n];\n\n/**\n * Create a Node.js filesystem adapter.\n */\nexport function createNodeFsAdapter(cwd?: string): FsAdapter {\n const baseCwd = cwd ?? process.cwd();\n\n return {\n async exists(path: string): Promise<boolean> {\n try {\n await access(resolvePath(path));\n return true;\n } catch {\n return false;\n }\n },\n\n async readFile(path: string): Promise<string> {\n return readFile(resolvePath(path), 'utf-8');\n },\n\n async writeFile(path: string, content: string): Promise<void> {\n const fullPath = resolvePath(path);\n const dir = dirname(fullPath);\n await mkdir(dir, { recursive: true });\n await writeFile(fullPath, content, 'utf-8');\n },\n\n async remove(path: string): Promise<void> {\n await rm(resolvePath(path), { recursive: true, force: true });\n },\n\n async stat(path: string): Promise<FileStat> {\n const stats = await fsStat(resolvePath(path));\n return {\n size: stats.size,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n mtime: stats.mtime,\n };\n },\n\n async mkdir(path: string): Promise<void> {\n await mkdir(resolvePath(path), { recursive: true });\n },\n\n async glob(options: DiscoverOptions): Promise<string[]> {\n const patterns =\n options.patterns ??\n (options.pattern ? [options.pattern] : DEFAULT_SPEC_PATTERNS);\n const ignore = options.ignore ?? DEFAULT_IGNORES;\n // Use provided cwd or fall back to adapter's baseCwd\n const globCwd = options.cwd ?? baseCwd;\n // Default to absolute paths for safer file operations\n const absolute = options.absolute ?? true;\n\n const all: string[] = [];\n for (const pattern of patterns) {\n const matches = await globFn(pattern, {\n cwd: globCwd,\n ignore,\n absolute,\n });\n all.push(...matches);\n }\n\n return Array.from(new Set(all)).sort((a, b) => a.localeCompare(b));\n },\n\n resolve(...paths: string[]): string {\n const [first, ...rest] = paths;\n if (!first) return baseCwd;\n return resolve(baseCwd, first, ...rest);\n },\n\n dirname(path: string): string {\n return dirname(path);\n },\n\n basename(path: string): string {\n return basename(path);\n },\n\n join(...paths: string[]): string {\n return join(...paths);\n },\n\n relative(from: string, to: string): string {\n return relative(from, to);\n },\n };\n\n function resolvePath(path: string): string {\n return isAbsolute(path) ? path : resolve(baseCwd, path);\n }\n}\n"],"mappings":";;;;;;;;AAuBA,MAAM,wBAAwB;CAE5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CAEA;CACA;CACA;CAEA;CACA;CACD;AAED,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACD;;;;AAKD,SAAgB,oBAAoB,KAAyB;CAC3D,MAAM,UAAU,OAAO,QAAQ,KAAK;AAEpC,QAAO;EACL,MAAM,OAAO,MAAgC;AAC3C,OAAI;AACF,UAAM,OAAO,YAAY,KAAK,CAAC;AAC/B,WAAO;WACD;AACN,WAAO;;;EAIX,MAAM,SAAS,MAA+B;AAC5C,UAAO,SAAS,YAAY,KAAK,EAAE,QAAQ;;EAG7C,MAAM,UAAU,MAAc,SAAgC;GAC5D,MAAM,WAAW,YAAY,KAAK;AAElC,SAAM,MADM,QAAQ,SAAS,EACZ,EAAE,WAAW,MAAM,CAAC;AACrC,SAAM,UAAU,UAAU,SAAS,QAAQ;;EAG7C,MAAM,OAAO,MAA6B;AACxC,SAAM,GAAG,YAAY,KAAK,EAAE;IAAE,WAAW;IAAM,OAAO;IAAM,CAAC;;EAG/D,MAAM,KAAK,MAAiC;GAC1C,MAAM,QAAQ,MAAMA,KAAO,YAAY,KAAK,CAAC;AAC7C,UAAO;IACL,MAAM,MAAM;IACZ,QAAQ,MAAM,QAAQ;IACtB,aAAa,MAAM,aAAa;IAChC,OAAO,MAAM;IACd;;EAGH,MAAM,MAAM,MAA6B;AACvC,SAAM,MAAM,YAAY,KAAK,EAAE,EAAE,WAAW,MAAM,CAAC;;EAGrD,MAAM,KAAK,SAA6C;GACtD,MAAM,WACJ,QAAQ,aACP,QAAQ,UAAU,CAAC,QAAQ,QAAQ,GAAG;GACzC,MAAM,SAAS,QAAQ,UAAU;GAEjC,MAAM,UAAU,QAAQ,OAAO;GAE/B,MAAM,WAAW,QAAQ,YAAY;GAErC,MAAMC,MAAgB,EAAE;AACxB,QAAK,MAAM,WAAW,UAAU;IAC9B,MAAM,UAAU,MAAMC,KAAO,SAAS;KACpC,KAAK;KACL;KACA;KACD,CAAC;AACF,QAAI,KAAK,GAAG,QAAQ;;AAGtB,UAAO,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,EAAE,CAAC;;EAGpE,QAAQ,GAAG,OAAyB;GAClC,MAAM,CAAC,OAAO,GAAG,QAAQ;AACzB,OAAI,CAAC,MAAO,QAAO;AACnB,UAAO,QAAQ,SAAS,OAAO,GAAG,KAAK;;EAGzC,QAAQ,MAAsB;AAC5B,UAAO,QAAQ,KAAK;;EAGtB,SAAS,MAAsB;AAC7B,UAAO,SAAS,KAAK;;EAGvB,KAAK,GAAG,OAAyB;AAC/B,UAAO,KAAK,GAAG,MAAM;;EAGvB,SAAS,MAAc,IAAoB;AACzC,UAAO,SAAS,MAAM,GAAG;;EAE5B;CAED,SAAS,YAAY,MAAsB;AACzC,SAAO,WAAW,KAAK,GAAG,OAAO,QAAQ,SAAS,KAAK"}
@@ -0,0 +1,11 @@
1
+ import { GitAdapter } from "../ports/git.js";
2
+
3
+ //#region src/adapters/git.d.ts
4
+
5
+ /**
6
+ * Create a Node.js git adapter.
7
+ */
8
+ declare function createNodeGitAdapter(cwd?: string): GitAdapter;
9
+ //#endregion
10
+ export { createNodeGitAdapter };
11
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","names":[],"sources":["../../src/adapters/git.ts"],"sourcesContent":[],"mappings":";;;;;;;iBAYgB,oBAAA,gBAAoC"}
@@ -0,0 +1,55 @@
1
+ import { access } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { execSync } from "node:child_process";
4
+
5
+ //#region src/adapters/git.ts
6
+ /**
7
+ * Node.js git adapter implementation.
8
+ */
9
+ /**
10
+ * Create a Node.js git adapter.
11
+ */
12
+ function createNodeGitAdapter(cwd) {
13
+ const baseCwd = cwd ?? process.cwd();
14
+ return {
15
+ async showFile(ref, filePath) {
16
+ try {
17
+ return execSync(`git show ${ref}:${filePath}`, {
18
+ cwd: baseCwd,
19
+ encoding: "utf-8",
20
+ stdio: [
21
+ "ignore",
22
+ "pipe",
23
+ "pipe"
24
+ ]
25
+ });
26
+ } catch (error) {
27
+ throw new Error(`Could not load ${filePath} at ref ${ref}: ${error instanceof Error ? error.message : String(error)}`);
28
+ }
29
+ },
30
+ async clean(options) {
31
+ const flags = [];
32
+ if (options?.force) flags.push("-f");
33
+ if (options?.directories) flags.push("-d");
34
+ if (options?.ignored) flags.push("-x");
35
+ if (options?.dryRun) flags.push("--dry-run");
36
+ execSync(`git clean ${flags.join(" ")}`, {
37
+ cwd: baseCwd,
38
+ stdio: "inherit"
39
+ });
40
+ },
41
+ async isGitRepo(path) {
42
+ const targetPath = path ? resolve(baseCwd, path) : baseCwd;
43
+ try {
44
+ await access(resolve(targetPath, ".git"));
45
+ return true;
46
+ } catch {
47
+ return false;
48
+ }
49
+ }
50
+ };
51
+ }
52
+
53
+ //#endregion
54
+ export { createNodeGitAdapter };
55
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","names":["flags: string[]"],"sources":["../../src/adapters/git.ts"],"sourcesContent":["/**\n * Node.js git adapter implementation.\n */\n\nimport { execSync } from 'node:child_process';\nimport { access } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport type { GitAdapter, GitCleanOptions } from '../ports/git';\n\n/**\n * Create a Node.js git adapter.\n */\nexport function createNodeGitAdapter(cwd?: string): GitAdapter {\n const baseCwd = cwd ?? process.cwd();\n\n return {\n async showFile(ref: string, filePath: string): Promise<string> {\n try {\n return execSync(`git show ${ref}:${filePath}`, {\n cwd: baseCwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n } catch (error) {\n throw new Error(\n `Could not load ${filePath} at ref ${ref}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n },\n\n async clean(options?: GitCleanOptions): Promise<void> {\n const flags: string[] = [];\n if (options?.force) flags.push('-f');\n if (options?.directories) flags.push('-d');\n if (options?.ignored) flags.push('-x');\n if (options?.dryRun) flags.push('--dry-run');\n\n execSync(`git clean ${flags.join(' ')}`, {\n cwd: baseCwd,\n stdio: 'inherit',\n });\n },\n\n async isGitRepo(path?: string): Promise<boolean> {\n const targetPath = path ? resolve(baseCwd, path) : baseCwd;\n try {\n await access(resolve(targetPath, '.git'));\n return true;\n } catch {\n return false;\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAgB,qBAAqB,KAA0B;CAC7D,MAAM,UAAU,OAAO,QAAQ,KAAK;AAEpC,QAAO;EACL,MAAM,SAAS,KAAa,UAAmC;AAC7D,OAAI;AACF,WAAO,SAAS,YAAY,IAAI,GAAG,YAAY;KAC7C,KAAK;KACL,UAAU;KACV,OAAO;MAAC;MAAU;MAAQ;MAAO;KAClC,CAAC;YACK,OAAO;AACd,UAAM,IAAI,MACR,kBAAkB,SAAS,UAAU,IAAI,IACvC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAEzD;;;EAIL,MAAM,MAAM,SAA0C;GACpD,MAAMA,QAAkB,EAAE;AAC1B,OAAI,SAAS,MAAO,OAAM,KAAK,KAAK;AACpC,OAAI,SAAS,YAAa,OAAM,KAAK,KAAK;AAC1C,OAAI,SAAS,QAAS,OAAM,KAAK,KAAK;AACtC,OAAI,SAAS,OAAQ,OAAM,KAAK,YAAY;AAE5C,YAAS,aAAa,MAAM,KAAK,IAAI,IAAI;IACvC,KAAK;IACL,OAAO;IACR,CAAC;;EAGJ,MAAM,UAAU,MAAiC;GAC/C,MAAM,aAAa,OAAO,QAAQ,SAAS,KAAK,GAAG;AACnD,OAAI;AACF,UAAM,OAAO,QAAQ,YAAY,OAAO,CAAC;AACzC,WAAO;WACD;AACN,WAAO;;;EAGZ"}
@@ -0,0 +1,7 @@
1
+ import { createNodeFsAdapter } from "./fs.js";
2
+ import { createNodeGitAdapter } from "./git.js";
3
+ import { createNodeWatcherAdapter } from "./watcher.js";
4
+ import { createNodeAiAdapter } from "./ai.js";
5
+ import { createConsoleLoggerAdapter, createNoopLoggerAdapter } from "./logger.js";
6
+ import { CreateAdaptersOptions, createNodeAdapters } from "./factory.js";
7
+ import { MetaRepoInfo, PackageManager, RepositoryType, SubmoduleInfo, WorkspaceInfo, detectPackageManager, detectRepositoryType, findMetaRepoRoot, findPackageRoot, findWorkspaceRoot, getExecCommand, getInstallCommand, getMetaRepoInfo, getPackageName, getRunCommand, getWorkspaceInfo, getWorkspacePackages, isMonorepo, parseGitModules } from "./workspace.js";
@@ -0,0 +1,7 @@
1
+ import { createNodeFsAdapter } from "./fs.js";
2
+ import { createNodeGitAdapter } from "./git.js";
3
+ import { createNodeWatcherAdapter } from "./watcher.js";
4
+ import { createNodeAiAdapter } from "./ai.js";
5
+ import { createConsoleLoggerAdapter, createNoopLoggerAdapter } from "./logger.js";
6
+ import { createNodeAdapters } from "./factory.js";
7
+ import { detectPackageManager, detectRepositoryType, findMetaRepoRoot, findPackageRoot, findWorkspaceRoot, getExecCommand, getInstallCommand, getMetaRepoInfo, getPackageName, getRunCommand, getWorkspaceInfo, getWorkspacePackages, isMonorepo, parseGitModules } from "./workspace.js";
@@ -0,0 +1,18 @@
1
+ import { LoggerAdapter } from "../ports/logger.js";
2
+
3
+ //#region src/adapters/logger.d.ts
4
+
5
+ /**
6
+ * Create a console-based logger adapter.
7
+ * This is a basic implementation - CLI apps should inject their own
8
+ * logger with chalk/ora for better terminal output.
9
+ */
10
+ declare function createConsoleLoggerAdapter(): LoggerAdapter;
11
+ /**
12
+ * Create a no-op logger adapter.
13
+ * Useful for testing or when logging is not desired.
14
+ */
15
+ declare function createNoopLoggerAdapter(): LoggerAdapter;
16
+ //#endregion
17
+ export { createConsoleLoggerAdapter, createNoopLoggerAdapter };
18
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","names":[],"sources":["../../src/adapters/logger.ts"],"sourcesContent":[],"mappings":";;;;;;;;;iBAagB,0BAAA,CAAA,GAA8B;;;;;iBA8B9B,uBAAA,CAAA,GAA2B"}