@lssm/bundle.contractspec-workspace 1.41.1 → 1.42.2

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 +5 -2
  3. package/dist/_virtual/rolldown_runtime.js +36 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -2
  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 +147 -9
  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 +285 -17
  41. package/dist/ai/agents/cursor-agent.js.map +1 -0
  42. package/dist/ai/agents/index.js +5 -1
  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 +141 -8
  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 -1
  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 +81 -4
  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 -1
  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 -1
  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 +56 -13
  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 -1
  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 +62 -20
  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 -1
  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 -1
  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 -1
  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 -1
  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 -2
  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 -1
  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 -3
  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 -3
  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 -3
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  165. package/dist/services/diff.js.map +1 -0
  166. package/dist/services/doctor/checks/ai.js +119 -2
  167. package/dist/services/doctor/checks/ai.js.map +1 -0
  168. package/dist/services/doctor/checks/cli.js +147 -1
  169. package/dist/services/doctor/checks/cli.js.map +1 -0
  170. package/dist/services/doctor/checks/config.js +171 -1
  171. package/dist/services/doctor/checks/config.js.map +1 -0
  172. package/dist/services/doctor/checks/deps.js +247 -1
  173. package/dist/services/doctor/checks/deps.js.map +1 -0
  174. package/dist/services/doctor/checks/index.js +6 -1
  175. package/dist/services/doctor/checks/mcp.js +145 -1
  176. package/dist/services/doctor/checks/mcp.js.map +1 -0
  177. package/dist/services/doctor/checks/workspace.js +244 -1
  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 -2
  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 -1
  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 -1
  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 -2
  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 -1
  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 -1
  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 -1
  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 -6
  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 -1
  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 -1
  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 -2
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 +114 -26
  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 -2
  275. package/dist/services/setup/file-merger.js.map +1 -0
  276. package/dist/services/setup/index.js +4 -1
  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 -1
  280. package/dist/services/setup/setup-service.js.map +1 -0
  281. package/dist/services/setup/targets/agents-md.js +47 -1
  282. package/dist/services/setup/targets/agents-md.js.map +1 -0
  283. package/dist/services/setup/targets/cli-config.js +60 -1
  284. package/dist/services/setup/targets/cli-config.js.map +1 -0
  285. package/dist/services/setup/targets/cursor-rules.js +48 -1
  286. package/dist/services/setup/targets/cursor-rules.js.map +1 -0
  287. package/dist/services/setup/targets/mcp-claude.js +60 -1
  288. package/dist/services/setup/targets/mcp-claude.js.map +1 -0
  289. package/dist/services/setup/targets/mcp-cursor.js +59 -1
  290. package/dist/services/setup/targets/mcp-cursor.js.map +1 -0
  291. package/dist/services/setup/targets/vscode-settings.js +63 -1
  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 -1
  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 -1
  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 -1
  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 +70 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 -1
  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 +336 -9
  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 -1
  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 -1
  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 -2
  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 -3
  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 -1
  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 -2
  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 +102 -28
  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 +43 -27
  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 +30 -14
  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 +78 -51
  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 +54 -17
  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 -1
  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 +135 -50
  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 +63 -21
  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 +51 -26
  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 +45 -28
  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 +47 -20
  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 +75 -53
  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 +13 -6
  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 +52 -24
  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 +27 -15
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 CHANGED
@@ -1,12 +1,15 @@
1
1
  # @lssm/bundle.contractspec-workspace
2
2
 
3
+ Website: https://contractspec.lssm.tech/
4
+
5
+
3
6
  Reusable use-cases and services for ContractSpec workspace operations.
4
7
 
5
8
  ## Purpose
6
9
 
7
10
  This bundle provides platform-agnostic services that can be used by:
8
11
 
9
- - CLI tools (`@lssm/app.cli-contracts`)
12
+ - CLI tools (`@lssm/app.cli-contractspec`)
10
13
  - Web applications
11
14
  - VS Code extensions
12
15
  - API servers
@@ -61,7 +64,7 @@ const config = await loadWorkspaceConfig(adapters.fs);
61
64
 
62
65
  // Build deterministic artifacts from a spec (templates-first)
63
66
  const result = await buildSpec(
64
- './my-spec.contracts.ts',
67
+ './my-spec.operation.ts',
65
68
  { fs: adapters.fs, logger: adapters.logger },
66
69
  config
67
70
  );
@@ -1 +1,36 @@
1
- var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n&&e(r,Symbol.toStringTag,{value:`Module`}),r},n=(e=>typeof require<`u`?require:typeof Proxy<`u`?new Proxy(e,{get:(e,t)=>(typeof require<`u`?require:e)[t]}):e)(function(e){if(typeof require<`u`)return require.apply(this,arguments);throw Error('Calling `require` for "'+e+"\" in an environment that doesn't expose the `require` function.")});export{t as __export,n as __require};
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 "@lssm/module.contractspec-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"}
@@ -1 +1,83 @@
1
- import{anthropic as e}from"../node_modules/@ai-sdk/anthropic/dist/index.js";import{openai as t}from"../node_modules/@ai-sdk/openai/dist/index.js";import{ollama as n}from"ollama-ai-provider";import{generateObject as r,generateText as i,streamText as a}from"ai";function o(e){return{async validateProvider(e){try{let{aiProvider:t}=e;return t===`ollama`?{success:!0}:t===`claude`&&!process.env.ANTHROPIC_API_KEY?{success:!1,error:`ANTHROPIC_API_KEY environment variable not set`}:t===`openai`&&!process.env.OPENAI_API_KEY?{success:!1,error:`OPENAI_API_KEY environment variable not set`}:{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}},async generateText(t){return{text:(await i({model:s(e),prompt:t.prompt,system:t.systemPrompt})).text}},async generateStructured(t){return{object:(await r({model:s(e),schema:t.schema,prompt:t.prompt,system:t.systemPrompt})).object}},async streamText(t,n){let r=await a({model:s(e),prompt:t.prompt,system:t.systemPrompt}),i=``;for await(let e of r.textStream)i+=e,n(e);return i}}}function s(r){let{aiProvider:i,aiModel:a,customEndpoint:o}=r;switch(i){case`claude`:return e(a??`claude-3-5-sonnet-20241022`);case`openai`:return t(a??`gpt-4o`);case`ollama`:return n(a??`codellama`);case`custom`:if(!o)throw Error(`Custom endpoint required. Set customEndpoint in config or CONTRACTSPEC_LLM_ENDPOINT env var`);return t(a??`default`);default:throw Error(`Unknown AI provider: ${i}`)}}export{o as createNodeAiAdapter};
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 { generateText, generateObject, streamText } from 'ai';\nimport type { LanguageModel } from 'ai';\nimport type { WorkspaceConfig } from '@lssm/module.contractspec-workspace';\nimport type {\n AiAdapter,\n AiValidationResult,\n AiGenerateOptions,\n AiGenerateResult,\n AiGenerateStructuredOptions,\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 "@lssm/module.contractspec-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"}
@@ -1 +1,37 @@
1
- import{createNodeFsAdapter as e}from"./fs.js";import{createNodeGitAdapter as t}from"./git.js";import{createNodeWatcherAdapter as n}from"./watcher.js";import{createNodeAiAdapter as r}from"./ai.js";import{createConsoleLoggerAdapter as i,createNoopLoggerAdapter as a}from"./logger.js";function o(o={}){let{cwd:s,config:c,silent:l}=o,u=c??{aiProvider:`claude`,agentMode:`simple`,outputDir:`./src`,conventions:{operations:`interactions/commands|queries`,events:`events`,presentations:`presentations`,forms:`forms`},defaultOwners:[],defaultTags:[]};return{fs:e(s),git:t(s),watcher:n(s),ai:r(u),logger:l?a():i()}}export{o as createNodeAdapters};
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 '@lssm/module.contractspec-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"}
@@ -1 +1,131 @@
1
- import{access as e,mkdir as t,readFile as n,rm as r,stat as i,writeFile as a}from"node:fs/promises";import{basename as o,dirname as s,isAbsolute as c,join as l,relative as u,resolve as d}from"node:path";import{glob as f}from"glob";const p=[`**/*.contracts.ts`,`**/*.event.ts`,`**/*.presentation.ts`,`**/*.feature.ts`,`**/*.capability.ts`,`**/*.workflow.ts`,`**/*.data-view.ts`,`**/*.form.ts`,`**/*.migration.ts`,`**/*.telemetry.ts`,`**/*.experiment.ts`,`**/*.app-config.ts`,`**/*.integration.ts`,`**/*.knowledge.ts`,`**/*.policy.ts`,`**/*.test-spec.ts`,`**/contracts/*.ts`,`**/contracts/index.ts`,`**/events.ts`,`**/presentations.ts`,`**/events/index.ts`,`**/presentations/index.ts`],m=[`node_modules/**`,`dist/**`,`.turbo/**`];function h(h){let g=h??process.cwd();return{async exists(t){try{return await e(_(t)),!0}catch{return!1}},async readFile(e){return n(_(e),`utf-8`)},async writeFile(e,n){let r=_(e);await t(s(r),{recursive:!0}),await a(r,n,`utf-8`)},async remove(e){await r(_(e),{recursive:!0,force:!0})},async stat(e){let t=await i(_(e));return{size:t.size,isFile:t.isFile(),isDirectory:t.isDirectory(),mtime:t.mtime}},async mkdir(e){await t(_(e),{recursive:!0})},async glob(e){let t=e.patterns??(e.pattern?[e.pattern]:p),n=e.ignore??m,r=e.cwd??g,i=e.absolute??!0,a=[];for(let e of t){let t=await f(e,{cwd:r,ignore:n,absolute:i});a.push(...t)}return Array.from(new Set(a)).sort((e,t)=>e.localeCompare(t))},resolve(...e){let[t,...n]=e;return t?d(g,t,...n):g},dirname(e){return s(e)},basename(e){return o(e)},join(...e){return l(...e)},relative(e,t){return u(e,t)}};function _(e){return c(e)?e:d(g,e)}}export{h as createNodeFsAdapter};
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"}
@@ -1 +1,55 @@
1
- import{access as e}from"node:fs/promises";import{resolve as t}from"node:path";import{execSync as n}from"node:child_process";function r(r){let i=r??process.cwd();return{async showFile(e,t){try{return n(`git show ${e}:${t}`,{cwd:i,encoding:`utf-8`,stdio:[`ignore`,`pipe`,`pipe`]})}catch(n){throw Error(`Could not load ${t} at ref ${e}: ${n instanceof Error?n.message:String(n)}`)}},async clean(e){let t=[];e?.force&&t.push(`-f`),e?.directories&&t.push(`-d`),e?.ignored&&t.push(`-x`),e?.dryRun&&t.push(`--dry-run`),n(`git clean ${t.join(` `)}`,{cwd:i,stdio:`inherit`})},async isGitRepo(n){let r=n?t(i,n):i;try{return await e(t(r,`.git`)),!0}catch{return!1}}}}export{r as createNodeGitAdapter};
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";
@@ -1 +1,7 @@
1
- import{createNodeFsAdapter as e}from"./fs.js";import{createNodeGitAdapter as t}from"./git.js";import{createNodeWatcherAdapter as n}from"./watcher.js";import{createNodeAiAdapter as r}from"./ai.js";import{createConsoleLoggerAdapter as i,createNoopLoggerAdapter as a}from"./logger.js";import{createNodeAdapters as o}from"./factory.js";import{detectPackageManager as s,findPackageRoot as c,findWorkspaceRoot as l,getExecCommand as u,getInstallCommand as d,getPackageName as f,getRunCommand as p,getWorkspaceInfo as m,getWorkspacePackages as h,isMonorepo as g}from"./workspace.js";
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"}