@contractspec/bundle.workspace 1.56.0 → 1.57.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 (330) hide show
  1. package/dist/_virtual/{rolldown_runtime.mjs → _rolldown/runtime.mjs} +3 -3
  2. package/dist/adapters/ai.d.mts +0 -1
  3. package/dist/adapters/ai.d.mts.map +1 -1
  4. package/dist/adapters/factory.d.mts +0 -1
  5. package/dist/adapters/factory.d.mts.map +1 -1
  6. package/dist/adapters/fs.bun.d.mts +0 -1
  7. package/dist/adapters/fs.bun.d.mts.map +1 -1
  8. package/dist/adapters/fs.bun.mjs +18 -18
  9. package/dist/adapters/fs.bun.mjs.map +1 -1
  10. package/dist/adapters/fs.d.mts.map +1 -1
  11. package/dist/adapters/fs.node.d.mts +0 -1
  12. package/dist/adapters/fs.node.d.mts.map +1 -1
  13. package/dist/adapters/fs.node.mjs +18 -18
  14. package/dist/adapters/fs.node.mjs.map +1 -1
  15. package/dist/adapters/git.d.mts +0 -1
  16. package/dist/adapters/git.d.mts.map +1 -1
  17. package/dist/adapters/git.mjs +2 -2
  18. package/dist/adapters/git.mjs.map +1 -1
  19. package/dist/adapters/logger.d.mts +0 -1
  20. package/dist/adapters/logger.d.mts.map +1 -1
  21. package/dist/adapters/watcher.d.mts +0 -1
  22. package/dist/adapters/watcher.d.mts.map +1 -1
  23. package/dist/adapters/workspace.d.mts.map +1 -1
  24. package/dist/adapters/workspace.mjs +4 -4
  25. package/dist/adapters/workspace.mjs.map +1 -1
  26. package/dist/ai/agents/claude-code-agent.d.mts +0 -1
  27. package/dist/ai/agents/claude-code-agent.d.mts.map +1 -1
  28. package/dist/ai/agents/cursor-agent.d.mts +0 -1
  29. package/dist/ai/agents/cursor-agent.d.mts.map +1 -1
  30. package/dist/ai/agents/cursor-agent.mjs +5 -5
  31. package/dist/ai/agents/cursor-agent.mjs.map +1 -1
  32. package/dist/ai/agents/openai-codex-agent.d.mts +0 -1
  33. package/dist/ai/agents/openai-codex-agent.d.mts.map +1 -1
  34. package/dist/ai/agents/orchestrator.d.mts +0 -1
  35. package/dist/ai/agents/orchestrator.d.mts.map +1 -1
  36. package/dist/ai/agents/simple-agent.d.mts +0 -1
  37. package/dist/ai/agents/simple-agent.d.mts.map +1 -1
  38. package/dist/ai/agents/types.d.mts +0 -1
  39. package/dist/ai/agents/types.d.mts.map +1 -1
  40. package/dist/ai/prompts/code-generation.d.mts.map +1 -1
  41. package/dist/ai/prompts/code-generation.mjs +1 -1
  42. package/dist/ai/prompts/index.d.mts.map +1 -1
  43. package/dist/ai/prompts/index.mjs +1 -1
  44. package/dist/ai/prompts/spec-creation.d.mts.map +1 -1
  45. package/dist/ai/prompts/spec-creation.mjs +1 -1
  46. package/dist/ai/providers.d.mts +0 -1
  47. package/dist/ai/providers.d.mts.map +1 -1
  48. package/dist/formatters/index.d.mts.map +1 -1
  49. package/dist/formatters/index.mjs +1 -1
  50. package/dist/formatters/json.d.mts +0 -1
  51. package/dist/formatters/json.d.mts.map +1 -1
  52. package/dist/formatters/sarif.d.mts +0 -1
  53. package/dist/formatters/sarif.d.mts.map +1 -1
  54. package/dist/formatters/text.d.mts +0 -1
  55. package/dist/formatters/text.d.mts.map +1 -1
  56. package/dist/ports/ai.d.mts +0 -1
  57. package/dist/ports/ai.d.mts.map +1 -1
  58. package/dist/ports/fs.d.mts.map +1 -1
  59. package/dist/ports/git.d.mts.map +1 -1
  60. package/dist/ports/logger.d.mts.map +1 -1
  61. package/dist/ports/rulesync.d.mts +0 -1
  62. package/dist/ports/rulesync.d.mts.map +1 -1
  63. package/dist/ports/watcher.d.mts.map +1 -1
  64. package/dist/registry.d.mts +0 -1
  65. package/dist/registry.d.mts.map +1 -1
  66. package/dist/services/action-drift/service.d.mts.map +1 -1
  67. package/dist/services/action-drift/types.d.mts.map +1 -1
  68. package/dist/services/action-pr/service.d.mts.map +1 -1
  69. package/dist/services/action-pr/service.mjs +1 -1
  70. package/dist/services/action-pr/service.mjs.map +1 -1
  71. package/dist/services/action-pr/types.d.mts.map +1 -1
  72. package/dist/services/agent-guide/adapters/claude-code.d.mts +0 -1
  73. package/dist/services/agent-guide/adapters/claude-code.d.mts.map +1 -1
  74. package/dist/services/agent-guide/adapters/cursor-cli.d.mts +0 -1
  75. package/dist/services/agent-guide/adapters/cursor-cli.d.mts.map +1 -1
  76. package/dist/services/agent-guide/adapters/generic-mcp.d.mts +0 -1
  77. package/dist/services/agent-guide/adapters/generic-mcp.d.mts.map +1 -1
  78. package/dist/services/agent-guide/adapters/index.d.mts +0 -1
  79. package/dist/services/agent-guide/adapters/index.d.mts.map +1 -1
  80. package/dist/services/agent-guide/agent-guide-service.d.mts +0 -1
  81. package/dist/services/agent-guide/agent-guide-service.d.mts.map +1 -1
  82. package/dist/services/agent-guide/types.d.mts +0 -1
  83. package/dist/services/agent-guide/types.d.mts.map +1 -1
  84. package/dist/services/build.d.mts +0 -1
  85. package/dist/services/build.d.mts.map +1 -1
  86. package/dist/services/ci-check/ci-check-service.d.mts +0 -1
  87. package/dist/services/ci-check/ci-check-service.d.mts.map +1 -1
  88. package/dist/services/ci-check/types.d.mts +3 -8
  89. package/dist/services/ci-check/types.d.mts.map +1 -1
  90. package/dist/services/clean.d.mts +0 -1
  91. package/dist/services/clean.d.mts.map +1 -1
  92. package/dist/services/config.d.mts +0 -1
  93. package/dist/services/config.d.mts.map +1 -1
  94. package/dist/services/create/ai-generator.d.mts +0 -1
  95. package/dist/services/create/ai-generator.d.mts.map +1 -1
  96. package/dist/services/create/index.d.mts.map +1 -1
  97. package/dist/services/create/templates.d.mts.map +1 -1
  98. package/dist/services/create/templates.mjs +1 -1
  99. package/dist/services/deps.d.mts +0 -1
  100. package/dist/services/deps.d.mts.map +1 -1
  101. package/dist/services/diff.d.mts +0 -1
  102. package/dist/services/diff.d.mts.map +1 -1
  103. package/dist/services/docs/docs-service.d.mts.map +1 -1
  104. package/dist/services/doctor/doctor-service.d.mts +0 -1
  105. package/dist/services/doctor/doctor-service.d.mts.map +1 -1
  106. package/dist/services/doctor/types.d.mts.map +1 -1
  107. package/dist/services/extract.d.mts.map +1 -1
  108. package/dist/services/features/completion.d.mts +0 -1
  109. package/dist/services/features/completion.d.mts.map +1 -1
  110. package/dist/services/features/completion.mjs +1 -1
  111. package/dist/services/features/completion.mjs.map +1 -1
  112. package/dist/services/features/feature-editor.d.mts.map +1 -1
  113. package/dist/services/features/index.d.mts.map +1 -1
  114. package/dist/services/features/index.mjs +1 -1
  115. package/dist/services/features/validation.d.mts +0 -1
  116. package/dist/services/features/validation.d.mts.map +1 -1
  117. package/dist/services/fix/fix-link-formatter.d.mts +0 -1
  118. package/dist/services/fix/fix-link-formatter.d.mts.map +1 -1
  119. package/dist/services/fix/fix-service.d.mts +0 -1
  120. package/dist/services/fix/fix-service.d.mts.map +1 -1
  121. package/dist/services/fix/index.d.mts.map +1 -1
  122. package/dist/services/fix/index.mjs +1 -1
  123. package/dist/services/fix/schemas.d.mts +0 -1
  124. package/dist/services/fix/schemas.d.mts.map +1 -1
  125. package/dist/services/fix/strategies/implement-ai.d.mts +0 -1
  126. package/dist/services/fix/strategies/implement-ai.d.mts.map +1 -1
  127. package/dist/services/fix/strategies/implement-skeleton.d.mts +0 -1
  128. package/dist/services/fix/strategies/implement-skeleton.d.mts.map +1 -1
  129. package/dist/services/fix/strategies/remove-reference.d.mts +0 -1
  130. package/dist/services/fix/strategies/remove-reference.d.mts.map +1 -1
  131. package/dist/services/fix/types.d.mts +0 -1
  132. package/dist/services/fix/types.d.mts.map +1 -1
  133. package/dist/services/formatter.d.mts.map +1 -1
  134. package/dist/services/gap.d.mts.map +1 -1
  135. package/dist/services/generate-artifacts.d.mts.map +1 -1
  136. package/dist/services/hooks/hooks-service.d.mts +0 -1
  137. package/dist/services/hooks/hooks-service.d.mts.map +1 -1
  138. package/dist/services/hooks/index.d.mts.map +1 -1
  139. package/dist/services/hooks/index.mjs +1 -1
  140. package/dist/services/hooks/types.d.mts.map +1 -1
  141. package/dist/services/impact/formatters.d.mts +0 -1
  142. package/dist/services/impact/formatters.d.mts.map +1 -1
  143. package/dist/services/impact/impact-detection-service.d.mts +0 -1
  144. package/dist/services/impact/impact-detection-service.d.mts.map +1 -1
  145. package/dist/services/impact/index.d.mts.map +1 -1
  146. package/dist/services/impact/index.mjs +1 -1
  147. package/dist/services/impact/types.d.mts +0 -1
  148. package/dist/services/impact/types.d.mts.map +1 -1
  149. package/dist/services/implementation/discovery.d.mts +0 -1
  150. package/dist/services/implementation/discovery.d.mts.map +1 -1
  151. package/dist/services/implementation/resolver/conventions.d.mts +0 -1
  152. package/dist/services/implementation/resolver/conventions.d.mts.map +1 -1
  153. package/dist/services/implementation/resolver/index.d.mts +0 -1
  154. package/dist/services/implementation/resolver/index.d.mts.map +1 -1
  155. package/dist/services/implementation/resolver/index.mjs +7 -7
  156. package/dist/services/implementation/resolver/index.mjs.map +1 -1
  157. package/dist/services/implementation/resolver/parsers.d.mts +0 -1
  158. package/dist/services/implementation/resolver/parsers.d.mts.map +1 -1
  159. package/dist/services/implementation/resolver/parsers.mjs +6 -6
  160. package/dist/services/implementation/resolver/parsers.mjs.map +1 -1
  161. package/dist/services/implementation/resolver/status.d.mts +0 -1
  162. package/dist/services/implementation/resolver/status.d.mts.map +1 -1
  163. package/dist/services/implementation/types.d.mts +0 -1
  164. package/dist/services/implementation/types.d.mts.map +1 -1
  165. package/dist/services/import/import-service.d.mts +0 -1
  166. package/dist/services/import/import-service.d.mts.map +1 -1
  167. package/dist/services/import/import-service.mjs +3 -3
  168. package/dist/services/import/import-service.mjs.map +1 -1
  169. package/dist/services/import/report-service.d.mts +0 -1
  170. package/dist/services/import/report-service.d.mts.map +1 -1
  171. package/dist/services/import/verify-service.d.mts +0 -1
  172. package/dist/services/import/verify-service.d.mts.map +1 -1
  173. package/dist/services/integrity-diagram.d.mts +0 -1
  174. package/dist/services/integrity-diagram.d.mts.map +1 -1
  175. package/dist/services/integrity.d.mts +0 -1
  176. package/dist/services/integrity.d.mts.map +1 -1
  177. package/dist/services/layer-discovery.d.mts +0 -1
  178. package/dist/services/layer-discovery.d.mts.map +1 -1
  179. package/dist/services/list.d.mts +0 -1
  180. package/dist/services/list.d.mts.map +1 -1
  181. package/dist/services/llm/index.d.mts +0 -1
  182. package/dist/services/llm/index.d.mts.map +1 -1
  183. package/dist/services/llm/index.mjs +0 -1
  184. package/dist/services/llm/index.mjs.map +1 -1
  185. package/dist/services/llm/verify-static.d.mts +0 -1
  186. package/dist/services/llm/verify-static.d.mts.map +1 -1
  187. package/dist/services/openapi/export-service.d.mts +0 -1
  188. package/dist/services/openapi/export-service.d.mts.map +1 -1
  189. package/dist/services/openapi/import-service.d.mts +0 -1
  190. package/dist/services/openapi/import-service.d.mts.map +1 -1
  191. package/dist/services/openapi/import-service.mjs +1 -1
  192. package/dist/services/openapi/import-service.mjs.map +1 -1
  193. package/dist/services/openapi/sync-service.d.mts +0 -1
  194. package/dist/services/openapi/sync-service.d.mts.map +1 -1
  195. package/dist/services/openapi/sync-service.mjs +1 -1
  196. package/dist/services/openapi/sync-service.mjs.map +1 -1
  197. package/dist/services/openapi/types.d.mts +0 -1
  198. package/dist/services/openapi/types.d.mts.map +1 -1
  199. package/dist/services/openapi/validate-service.d.mts +0 -1
  200. package/dist/services/openapi/validate-service.d.mts.map +1 -1
  201. package/dist/services/openapi/validate-service.mjs +3 -3
  202. package/dist/services/openapi/validate-service.mjs.map +1 -1
  203. package/dist/services/quickstart/dependencies.d.mts +0 -1
  204. package/dist/services/quickstart/dependencies.d.mts.map +1 -1
  205. package/dist/services/quickstart/quickstart-service.d.mts +0 -1
  206. package/dist/services/quickstart/quickstart-service.d.mts.map +1 -1
  207. package/dist/services/quickstart/types.d.mts.map +1 -1
  208. package/dist/services/regenerator.d.mts +0 -1
  209. package/dist/services/regenerator.d.mts.map +1 -1
  210. package/dist/services/registry.d.mts +0 -1
  211. package/dist/services/registry.d.mts.map +1 -1
  212. package/dist/services/rulesync.d.mts +0 -1
  213. package/dist/services/rulesync.d.mts.map +1 -1
  214. package/dist/services/setup/config-generators.d.mts +0 -1
  215. package/dist/services/setup/config-generators.d.mts.map +1 -1
  216. package/dist/services/setup/file-merger.d.mts.map +1 -1
  217. package/dist/services/setup/setup-service.d.mts +0 -1
  218. package/dist/services/setup/setup-service.d.mts.map +1 -1
  219. package/dist/services/setup/types.d.mts.map +1 -1
  220. package/dist/services/sync.d.mts +0 -1
  221. package/dist/services/sync.d.mts.map +1 -1
  222. package/dist/services/test/test-generator-service.d.mts +1 -2
  223. package/dist/services/test/test-generator-service.d.mts.map +1 -1
  224. package/dist/services/test/test-service.d.mts.map +1 -1
  225. package/dist/services/test-link/index.d.mts +0 -1
  226. package/dist/services/test-link/index.d.mts.map +1 -1
  227. package/dist/services/upgrade/index.d.mts.map +1 -1
  228. package/dist/services/upgrade/index.mjs +1 -1
  229. package/dist/services/upgrade/types.d.mts.map +1 -1
  230. package/dist/services/upgrade/upgrade-service.d.mts +0 -1
  231. package/dist/services/upgrade/upgrade-service.d.mts.map +1 -1
  232. package/dist/services/validate/blueprint-validator.d.mts +0 -1
  233. package/dist/services/validate/blueprint-validator.d.mts.map +1 -1
  234. package/dist/services/validate/implementation-agent-validator.d.mts.map +1 -1
  235. package/dist/services/validate/implementation-agent-validator.mjs +2 -2
  236. package/dist/services/validate/implementation-agent-validator.mjs.map +1 -1
  237. package/dist/services/validate/implementation-validator.d.mts +0 -1
  238. package/dist/services/validate/implementation-validator.d.mts.map +1 -1
  239. package/dist/services/validate/implementation-validator.mjs +1 -1
  240. package/dist/services/validate/implementation-validator.mjs.map +1 -1
  241. package/dist/services/validate/spec-validator.d.mts +0 -1
  242. package/dist/services/validate/spec-validator.d.mts.map +1 -1
  243. package/dist/services/validate/tenant-validator.d.mts.map +1 -1
  244. package/dist/services/validate/tenant-validator.mjs +5 -5
  245. package/dist/services/validate/tenant-validator.mjs.map +1 -1
  246. package/dist/services/verification-cache/adapters/filesystem.d.mts +0 -1
  247. package/dist/services/verification-cache/adapters/filesystem.d.mts.map +1 -1
  248. package/dist/services/verification-cache/adapters/in-memory.d.mts +0 -1
  249. package/dist/services/verification-cache/adapters/in-memory.d.mts.map +1 -1
  250. package/dist/services/verification-cache/adapters/workspace-state.d.mts +0 -1
  251. package/dist/services/verification-cache/adapters/workspace-state.d.mts.map +1 -1
  252. package/dist/services/verification-cache/cache-service.d.mts +0 -1
  253. package/dist/services/verification-cache/cache-service.d.mts.map +1 -1
  254. package/dist/services/verification-cache/types.d.mts +0 -1
  255. package/dist/services/verification-cache/types.d.mts.map +1 -1
  256. package/dist/services/verify/ai-verifier.d.mts +0 -1
  257. package/dist/services/verify/ai-verifier.d.mts.map +1 -1
  258. package/dist/services/verify/behavior-verifier.d.mts +0 -1
  259. package/dist/services/verify/behavior-verifier.d.mts.map +1 -1
  260. package/dist/services/verify/structure-verifier.d.mts +0 -1
  261. package/dist/services/verify/structure-verifier.d.mts.map +1 -1
  262. package/dist/services/verify/types.d.mts +0 -1
  263. package/dist/services/verify/types.d.mts.map +1 -1
  264. package/dist/services/verify/verify-service.d.mts +0 -1
  265. package/dist/services/verify/verify-service.d.mts.map +1 -1
  266. package/dist/services/versioning/changelog-formatter.d.mts +0 -1
  267. package/dist/services/versioning/changelog-formatter.d.mts.map +1 -1
  268. package/dist/services/versioning/conventional-commits.d.mts +0 -1
  269. package/dist/services/versioning/conventional-commits.d.mts.map +1 -1
  270. package/dist/services/versioning/index.d.mts.map +1 -1
  271. package/dist/services/versioning/index.mjs +1 -1
  272. package/dist/services/versioning/types.d.mts +0 -1
  273. package/dist/services/versioning/types.d.mts.map +1 -1
  274. package/dist/services/versioning/versioning-service.d.mts +0 -1
  275. package/dist/services/versioning/versioning-service.d.mts.map +1 -1
  276. package/dist/services/versioning/versioning-service.mjs +1 -1
  277. package/dist/services/versioning/versioning-service.mjs.map +1 -1
  278. package/dist/services/vibe/config.d.mts +0 -1
  279. package/dist/services/vibe/config.d.mts.map +1 -1
  280. package/dist/services/vibe/context.d.mts.map +1 -1
  281. package/dist/services/vibe/definitions.d.mts +0 -1
  282. package/dist/services/vibe/definitions.d.mts.map +1 -1
  283. package/dist/services/vibe/engine.d.mts +0 -1
  284. package/dist/services/vibe/engine.d.mts.map +1 -1
  285. package/dist/services/vibe/index.d.mts.map +1 -1
  286. package/dist/services/vibe/index.mjs +1 -1
  287. package/dist/services/vibe/loader.d.mts +0 -1
  288. package/dist/services/vibe/loader.d.mts.map +1 -1
  289. package/dist/services/vibe/pack.d.mts.map +1 -1
  290. package/dist/services/vibe/types.d.mts.map +1 -1
  291. package/dist/services/view/index.d.mts.map +1 -1
  292. package/dist/services/watch.d.mts +0 -1
  293. package/dist/services/watch.d.mts.map +1 -1
  294. package/dist/services/workspace-info.d.mts +0 -1
  295. package/dist/services/workspace-info.d.mts.map +1 -1
  296. package/dist/templates/app-config.template.d.mts.map +1 -1
  297. package/dist/templates/data-view.template.d.mts.map +1 -1
  298. package/dist/templates/event.template.d.mts +0 -1
  299. package/dist/templates/event.template.d.mts.map +1 -1
  300. package/dist/templates/experiment.template.d.mts.map +1 -1
  301. package/dist/templates/feature.template.d.mts.map +1 -1
  302. package/dist/templates/handler.template.d.mts.map +1 -1
  303. package/dist/templates/index.d.mts.map +1 -1
  304. package/dist/templates/index.mjs +1 -1
  305. package/dist/templates/integration.template.d.mts.map +1 -1
  306. package/dist/templates/integration.template.mjs +0 -3
  307. package/dist/templates/integration.template.mjs.map +1 -1
  308. package/dist/templates/knowledge.template.d.mts.map +1 -1
  309. package/dist/templates/knowledge.template.mjs +0 -1
  310. package/dist/templates/knowledge.template.mjs.map +1 -1
  311. package/dist/templates/migration.template.d.mts.map +1 -1
  312. package/dist/templates/migration.template.mjs +0 -1
  313. package/dist/templates/migration.template.mjs.map +1 -1
  314. package/dist/templates/operation.template.d.mts +0 -1
  315. package/dist/templates/operation.template.d.mts.map +1 -1
  316. package/dist/templates/presentation.template.d.mts +0 -1
  317. package/dist/templates/presentation.template.d.mts.map +1 -1
  318. package/dist/templates/telemetry.template.d.mts.map +1 -1
  319. package/dist/templates/workflow-runner.template.d.mts.map +1 -1
  320. package/dist/templates/workflow.template.d.mts.map +1 -1
  321. package/dist/types.d.mts +1 -1
  322. package/dist/types.d.mts.map +1 -1
  323. package/dist/utils/filter.d.mts +0 -1
  324. package/dist/utils/filter.d.mts.map +1 -1
  325. package/dist/utils/index.d.mts.map +1 -1
  326. package/dist/utils/index.mjs +1 -1
  327. package/dist/utils/module-loader.d.mts.map +1 -1
  328. package/dist/utils/validation.d.mts +0 -1
  329. package/dist/utils/validation.d.mts.map +1 -1
  330. package/package.json +16 -16
@@ -1,8 +1,8 @@
1
1
  import { createRequire } from "node:module";
2
2
 
3
- //#region rolldown:runtime
3
+ //#region \0rolldown/runtime.js
4
4
  var __defProp = Object.defineProperty;
5
- var __exportAll = (all, symbols) => {
5
+ var __exportAll = (all, no_symbols) => {
6
6
  let target = {};
7
7
  for (var name in all) {
8
8
  __defProp(target, name, {
@@ -10,7 +10,7 @@ var __exportAll = (all, symbols) => {
10
10
  enumerable: true
11
11
  });
12
12
  }
13
- if (symbols) {
13
+ if (!no_symbols) {
14
14
  __defProp(target, Symbol.toStringTag, { value: "Module" });
15
15
  }
16
16
  return target;
@@ -2,7 +2,6 @@ import { AiAdapter } from "../ports/ai.mjs";
2
2
  import { ResolvedContractsrcConfig } from "@contractspec/lib.contracts";
3
3
 
4
4
  //#region src/adapters/ai.d.ts
5
-
6
5
  /**
7
6
  * Create a Node.js AI adapter using Vercel AI SDK.
8
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.mts","names":[],"sources":["../../src/adapters/ai.ts"],"sourcesContent":[],"mappings":";;;;;;;;iBAqBgB,mBAAA,SACN,4BACP"}
1
+ {"version":3,"file":"ai.d.mts","names":[],"sources":["../../src/adapters/ai.ts"],"mappings":";;;;;;;iBAqBgB,mBAAA,CACd,MAAA,EAAQ,yBAAA,GACP,SAAA"}
@@ -2,7 +2,6 @@ import { WorkspaceAdapters } from "../ports/logger.mjs";
2
2
  import { ResolvedContractsrcConfig } from "@contractspec/lib.contracts";
3
3
 
4
4
  //#region src/adapters/factory.d.ts
5
-
6
5
  /**
7
6
  * Options for creating adapters.
8
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.mts","names":[],"sources":["../../src/adapters/factory.ts"],"sourcesContent":[],"mappings":";;;;;AAsCA;;;UApBiB,qBAAA;;;;;;;;WASN;;;;;;;;;iBAWK,kBAAA,WACL,wBACR"}
1
+ {"version":3,"file":"factory.d.mts","names":[],"sources":["../../src/adapters/factory.ts"],"mappings":";;;;;;;UAkBiB,qBAAA;EASf;;;EALA,GAAA;EAUM;AAMR;;EAXE,MAAA,GAAS,yBAAA;EAaS;;;EARlB,MAAA;AAAA;;;;iBAMc,kBAAA,CACd,OAAA,GAAS,qBAAA,GACR,iBAAA"}
@@ -1,7 +1,6 @@
1
1
  import { FsAdapter } from "../ports/fs.mjs";
2
2
 
3
3
  //#region src/adapters/fs.bun.d.ts
4
-
5
4
  /**
6
5
  * Create a Bun filesystem adapter.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"fs.bun.d.mts","names":[],"sources":["../../src/adapters/fs.bun.ts"],"sourcesContent":[],"mappings":";;;;;;;iBAoBgB,kBAAA,gBAAkC"}
1
+ {"version":3,"file":"fs.bun.d.mts","names":[],"sources":["../../src/adapters/fs.bun.ts"],"mappings":";;;;;;iBAoBgB,kBAAA,CAAmB,GAAA,YAAe,SAAA"}
@@ -13,8 +13,8 @@ import { glob } from "glob";
13
13
  function createBunFsAdapter(cwd) {
14
14
  const baseCwd = cwd ?? process.cwd();
15
15
  return {
16
- async exists(path$1) {
17
- const file = Bun.file(resolvePath(path$1));
16
+ async exists(path) {
17
+ const file = Bun.file(resolvePath(path));
18
18
  try {
19
19
  await file.exists();
20
20
  return true;
@@ -22,18 +22,18 @@ function createBunFsAdapter(cwd) {
22
22
  return false;
23
23
  }
24
24
  },
25
- async readFile(path$1) {
26
- return Bun.file(resolvePath(path$1)).text();
25
+ async readFile(path) {
26
+ return Bun.file(resolvePath(path)).text();
27
27
  },
28
- async writeFile(path$1, content) {
29
- const fullPath = resolvePath(path$1);
28
+ async writeFile(path, content) {
29
+ const fullPath = resolvePath(path);
30
30
  await Bun.write(fullPath, content);
31
31
  },
32
- async remove(path$1) {
33
- await Bun.file(resolvePath(path$1)).delete();
32
+ async remove(path) {
33
+ await Bun.file(resolvePath(path)).delete();
34
34
  },
35
- async stat(path$1) {
36
- const stats = await stat(resolvePath(path$1));
35
+ async stat(path) {
36
+ const stats = await stat(resolvePath(path));
37
37
  return {
38
38
  size: stats.size,
39
39
  isFile: stats.isFile(),
@@ -41,8 +41,8 @@ function createBunFsAdapter(cwd) {
41
41
  mtime: stats.mtime
42
42
  };
43
43
  },
44
- async mkdir(path$1) {
45
- await mkdir(resolvePath(path$1), { recursive: true });
44
+ async mkdir(path) {
45
+ await mkdir(resolvePath(path), { recursive: true });
46
46
  },
47
47
  async glob(options) {
48
48
  const patterns = options.patterns ?? (options.pattern ? [options.pattern] : DEFAULT_SPEC_PATTERNS);
@@ -58,11 +58,11 @@ function createBunFsAdapter(cwd) {
58
58
  if (!first) return baseCwd;
59
59
  return resolve(baseCwd, first, ...rest);
60
60
  },
61
- dirname(path$1) {
62
- return dirname(path$1);
61
+ dirname(path) {
62
+ return dirname(path);
63
63
  },
64
- basename(path$1) {
65
- return basename(path$1);
64
+ basename(path) {
65
+ return basename(path);
66
66
  },
67
67
  join(...paths) {
68
68
  return join(...paths);
@@ -71,8 +71,8 @@ function createBunFsAdapter(cwd) {
71
71
  return relative(from, to);
72
72
  }
73
73
  };
74
- function resolvePath(path$1) {
75
- return isAbsolute(path$1) ? path$1 : resolve(baseCwd, path$1);
74
+ function resolvePath(path) {
75
+ return isAbsolute(path) ? path : resolve(baseCwd, path);
76
76
  }
77
77
  }
78
78
 
@@ -1 +1 @@
1
- {"version":3,"file":"fs.bun.mjs","names":["path","fsStat","globFn"],"sources":["../../src/adapters/fs.bun.ts"],"sourcesContent":["/**\n * Node.js filesystem adapter implementation.\n */\n\nimport { mkdir, stat as fsStat } from 'node:fs/promises';\nimport {\n basename,\n dirname,\n isAbsolute,\n join,\n relative,\n resolve,\n} from 'node:path';\nimport type { DiscoverOptions, FileStat, FsAdapter } from '../ports/fs';\nimport { DEFAULT_FS_IGNORES, DEFAULT_SPEC_PATTERNS } from './fs';\nimport { glob as globFn } from 'glob';\n\n/**\n * Create a Bun filesystem adapter.\n */\nexport function createBunFsAdapter(cwd?: string): FsAdapter {\n const baseCwd = cwd ?? process.cwd();\n\n return {\n async exists(path: string): Promise<boolean> {\n const file = Bun.file(resolvePath(path));\n try {\n await file.exists();\n return true;\n } catch {\n return false;\n }\n },\n\n async readFile(path: string): Promise<string> {\n const file = Bun.file(resolvePath(path));\n return file.text();\n },\n\n async writeFile(path: string, content: string): Promise<void> {\n const fullPath = resolvePath(path);\n await Bun.write(fullPath, content);\n },\n\n async remove(path: string): Promise<void> {\n const file = Bun.file(resolvePath(path));\n await file.delete();\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_FS_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 matches = await globFn(patterns, {\n cwd: globCwd,\n ignore,\n absolute,\n });\n\n return matches;\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":";;;;;;;;;;;;AAoBA,SAAgB,mBAAmB,KAAyB;CAC1D,MAAM,UAAU,OAAO,QAAQ,KAAK;AAEpC,QAAO;EACL,MAAM,OAAO,QAAgC;GAC3C,MAAM,OAAO,IAAI,KAAK,YAAYA,OAAK,CAAC;AACxC,OAAI;AACF,UAAM,KAAK,QAAQ;AACnB,WAAO;WACD;AACN,WAAO;;;EAIX,MAAM,SAAS,QAA+B;AAE5C,UADa,IAAI,KAAK,YAAYA,OAAK,CAAC,CAC5B,MAAM;;EAGpB,MAAM,UAAU,QAAc,SAAgC;GAC5D,MAAM,WAAW,YAAYA,OAAK;AAClC,SAAM,IAAI,MAAM,UAAU,QAAQ;;EAGpC,MAAM,OAAO,QAA6B;AAExC,SADa,IAAI,KAAK,YAAYA,OAAK,CAAC,CAC7B,QAAQ;;EAGrB,MAAM,KAAK,QAAiC;GAC1C,MAAM,QAAQ,MAAMC,KAAO,YAAYD,OAAK,CAAC;AAC7C,UAAO;IACL,MAAM,MAAM;IACZ,QAAQ,MAAM,QAAQ;IACtB,aAAa,MAAM,aAAa;IAChC,OAAO,MAAM;IACd;;EAGH,MAAM,MAAM,QAA6B;AACvC,SAAM,MAAM,YAAYA,OAAK,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;AAYjC,UANgB,MAAME,KAAO,UAAU;IACrC,KALc,QAAQ,OAAO;IAM7B;IACA,UALe,QAAQ,YAAY;IAMpC,CAAC;;EAKJ,QAAQ,GAAG,OAAyB;GAClC,MAAM,CAAC,OAAO,GAAG,QAAQ;AACzB,OAAI,CAAC,MAAO,QAAO;AACnB,UAAO,QAAQ,SAAS,OAAO,GAAG,KAAK;;EAGzC,QAAQ,QAAsB;AAC5B,UAAO,QAAQF,OAAK;;EAGtB,SAAS,QAAsB;AAC7B,UAAO,SAASA,OAAK;;EAGvB,KAAK,GAAG,OAAyB;AAC/B,UAAO,KAAK,GAAG,MAAM;;EAGvB,SAAS,MAAc,IAAoB;AACzC,UAAO,SAAS,MAAM,GAAG;;EAE5B;CAED,SAAS,YAAY,QAAsB;AACzC,SAAO,WAAWA,OAAK,GAAGA,SAAO,QAAQ,SAASA,OAAK"}
1
+ {"version":3,"file":"fs.bun.mjs","names":["fsStat","globFn"],"sources":["../../src/adapters/fs.bun.ts"],"sourcesContent":["/**\n * Node.js filesystem adapter implementation.\n */\n\nimport { mkdir, stat as fsStat } from 'node:fs/promises';\nimport {\n basename,\n dirname,\n isAbsolute,\n join,\n relative,\n resolve,\n} from 'node:path';\nimport type { DiscoverOptions, FileStat, FsAdapter } from '../ports/fs';\nimport { DEFAULT_FS_IGNORES, DEFAULT_SPEC_PATTERNS } from './fs';\nimport { glob as globFn } from 'glob';\n\n/**\n * Create a Bun filesystem adapter.\n */\nexport function createBunFsAdapter(cwd?: string): FsAdapter {\n const baseCwd = cwd ?? process.cwd();\n\n return {\n async exists(path: string): Promise<boolean> {\n const file = Bun.file(resolvePath(path));\n try {\n await file.exists();\n return true;\n } catch {\n return false;\n }\n },\n\n async readFile(path: string): Promise<string> {\n const file = Bun.file(resolvePath(path));\n return file.text();\n },\n\n async writeFile(path: string, content: string): Promise<void> {\n const fullPath = resolvePath(path);\n await Bun.write(fullPath, content);\n },\n\n async remove(path: string): Promise<void> {\n const file = Bun.file(resolvePath(path));\n await file.delete();\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_FS_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 matches = await globFn(patterns, {\n cwd: globCwd,\n ignore,\n absolute,\n });\n\n return matches;\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":";;;;;;;;;;;;AAoBA,SAAgB,mBAAmB,KAAyB;CAC1D,MAAM,UAAU,OAAO,QAAQ,KAAK;AAEpC,QAAO;EACL,MAAM,OAAO,MAAgC;GAC3C,MAAM,OAAO,IAAI,KAAK,YAAY,KAAK,CAAC;AACxC,OAAI;AACF,UAAM,KAAK,QAAQ;AACnB,WAAO;WACD;AACN,WAAO;;;EAIX,MAAM,SAAS,MAA+B;AAE5C,UADa,IAAI,KAAK,YAAY,KAAK,CAAC,CAC5B,MAAM;;EAGpB,MAAM,UAAU,MAAc,SAAgC;GAC5D,MAAM,WAAW,YAAY,KAAK;AAClC,SAAM,IAAI,MAAM,UAAU,QAAQ;;EAGpC,MAAM,OAAO,MAA6B;AAExC,SADa,IAAI,KAAK,YAAY,KAAK,CAAC,CAC7B,QAAQ;;EAGrB,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;AAYjC,UANgB,MAAMC,KAAO,UAAU;IACrC,KALc,QAAQ,OAAO;IAM7B;IACA,UALe,QAAQ,YAAY;IAMpC,CAAC;;EAKJ,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.mts","names":[],"sources":["../../src/adapters/fs.ts"],"sourcesContent":[],"mappings":";cAAa;AAAA,cAoCA,kBAFZ,EAAA,MAAA,EAAA"}
1
+ {"version":3,"file":"fs.d.mts","names":[],"sources":["../../src/adapters/fs.ts"],"mappings":";cAAa,qBAAA;AAAA,cAoCA,kBAAA"}
@@ -1,7 +1,6 @@
1
1
  import { FsAdapter } from "../ports/fs.mjs";
2
2
 
3
3
  //#region src/adapters/fs.node.d.ts
4
-
5
4
  /**
6
5
  * Create a Node.js filesystem adapter.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"fs.node.d.mts","names":[],"sources":["../../src/adapters/fs.node.ts"],"sourcesContent":[],"mappings":";;;;;;;iBA2BgB,mBAAA,gBAAmC"}
1
+ {"version":3,"file":"fs.node.d.mts","names":[],"sources":["../../src/adapters/fs.node.ts"],"mappings":";;;;;;iBA2BgB,mBAAA,CAAoB,GAAA,YAAe,SAAA"}
@@ -13,30 +13,30 @@ import { glob } from "glob";
13
13
  function createNodeFsAdapter(cwd) {
14
14
  const baseCwd = cwd ?? process.cwd();
15
15
  return {
16
- async exists(path$1) {
16
+ async exists(path) {
17
17
  try {
18
- await access(resolvePath(path$1));
18
+ await access(resolvePath(path));
19
19
  return true;
20
20
  } catch {
21
21
  return false;
22
22
  }
23
23
  },
24
- async readFile(path$1) {
25
- return readFile(resolvePath(path$1), "utf-8");
24
+ async readFile(path) {
25
+ return readFile(resolvePath(path), "utf-8");
26
26
  },
27
- async writeFile(path$1, content) {
28
- const fullPath = resolvePath(path$1);
27
+ async writeFile(path, content) {
28
+ const fullPath = resolvePath(path);
29
29
  await mkdir(dirname(fullPath), { recursive: true });
30
30
  await writeFile(fullPath, content, "utf-8");
31
31
  },
32
- async remove(path$1) {
33
- await rm(resolvePath(path$1), {
32
+ async remove(path) {
33
+ await rm(resolvePath(path), {
34
34
  recursive: true,
35
35
  force: true
36
36
  });
37
37
  },
38
- async stat(path$1) {
39
- const stats = await stat(resolvePath(path$1));
38
+ async stat(path) {
39
+ const stats = await stat(resolvePath(path));
40
40
  return {
41
41
  size: stats.size,
42
42
  isFile: stats.isFile(),
@@ -44,8 +44,8 @@ function createNodeFsAdapter(cwd) {
44
44
  mtime: stats.mtime
45
45
  };
46
46
  },
47
- async mkdir(path$1) {
48
- await mkdir(resolvePath(path$1), { recursive: true });
47
+ async mkdir(path) {
48
+ await mkdir(resolvePath(path), { recursive: true });
49
49
  },
50
50
  async glob(options) {
51
51
  const patterns = options.patterns ?? (options.pattern ? [options.pattern] : DEFAULT_SPEC_PATTERNS);
@@ -61,11 +61,11 @@ function createNodeFsAdapter(cwd) {
61
61
  if (!first) return baseCwd;
62
62
  return resolve(baseCwd, first, ...rest);
63
63
  },
64
- dirname(path$1) {
65
- return dirname(path$1);
64
+ dirname(path) {
65
+ return dirname(path);
66
66
  },
67
- basename(path$1) {
68
- return basename(path$1);
67
+ basename(path) {
68
+ return basename(path);
69
69
  },
70
70
  join(...paths) {
71
71
  return join(...paths);
@@ -74,8 +74,8 @@ function createNodeFsAdapter(cwd) {
74
74
  return relative(from, to);
75
75
  }
76
76
  };
77
- function resolvePath(path$1) {
78
- return isAbsolute(path$1) ? path$1 : resolve(baseCwd, path$1);
77
+ function resolvePath(path) {
78
+ return isAbsolute(path) ? path : resolve(baseCwd, path);
79
79
  }
80
80
  }
81
81
 
@@ -1 +1 @@
1
- {"version":3,"file":"fs.node.mjs","names":["path","fsStat","globFn"],"sources":["../../src/adapters/fs.node.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';\nimport { DEFAULT_FS_IGNORES, DEFAULT_SPEC_PATTERNS } from './fs';\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_FS_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 matches = await globFn(patterns, {\n cwd: globCwd,\n ignore,\n absolute,\n });\n\n return matches;\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":";;;;;;;;;;;;AA2BA,SAAgB,oBAAoB,KAAyB;CAC3D,MAAM,UAAU,OAAO,QAAQ,KAAK;AAEpC,QAAO;EACL,MAAM,OAAO,QAAgC;AAC3C,OAAI;AACF,UAAM,OAAO,YAAYA,OAAK,CAAC;AAC/B,WAAO;WACD;AACN,WAAO;;;EAIX,MAAM,SAAS,QAA+B;AAC5C,UAAO,SAAS,YAAYA,OAAK,EAAE,QAAQ;;EAG7C,MAAM,UAAU,QAAc,SAAgC;GAC5D,MAAM,WAAW,YAAYA,OAAK;AAElC,SAAM,MADM,QAAQ,SAAS,EACZ,EAAE,WAAW,MAAM,CAAC;AACrC,SAAM,UAAU,UAAU,SAAS,QAAQ;;EAG7C,MAAM,OAAO,QAA6B;AACxC,SAAM,GAAG,YAAYA,OAAK,EAAE;IAAE,WAAW;IAAM,OAAO;IAAM,CAAC;;EAG/D,MAAM,KAAK,QAAiC;GAC1C,MAAM,QAAQ,MAAMC,KAAO,YAAYD,OAAK,CAAC;AAC7C,UAAO;IACL,MAAM,MAAM;IACZ,QAAQ,MAAM,QAAQ;IACtB,aAAa,MAAM,aAAa;IAChC,OAAO,MAAM;IACd;;EAGH,MAAM,MAAM,QAA6B;AACvC,SAAM,MAAM,YAAYA,OAAK,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;AAYjC,UANgB,MAAME,KAAO,UAAU;IACrC,KALc,QAAQ,OAAO;IAM7B;IACA,UALe,QAAQ,YAAY;IAMpC,CAAC;;EAKJ,QAAQ,GAAG,OAAyB;GAClC,MAAM,CAAC,OAAO,GAAG,QAAQ;AACzB,OAAI,CAAC,MAAO,QAAO;AACnB,UAAO,QAAQ,SAAS,OAAO,GAAG,KAAK;;EAGzC,QAAQ,QAAsB;AAC5B,UAAO,QAAQF,OAAK;;EAGtB,SAAS,QAAsB;AAC7B,UAAO,SAASA,OAAK;;EAGvB,KAAK,GAAG,OAAyB;AAC/B,UAAO,KAAK,GAAG,MAAM;;EAGvB,SAAS,MAAc,IAAoB;AACzC,UAAO,SAAS,MAAM,GAAG;;EAE5B;CAED,SAAS,YAAY,QAAsB;AACzC,SAAO,WAAWA,OAAK,GAAGA,SAAO,QAAQ,SAASA,OAAK"}
1
+ {"version":3,"file":"fs.node.mjs","names":["fsStat","globFn"],"sources":["../../src/adapters/fs.node.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';\nimport { DEFAULT_FS_IGNORES, DEFAULT_SPEC_PATTERNS } from './fs';\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_FS_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 matches = await globFn(patterns, {\n cwd: globCwd,\n ignore,\n absolute,\n });\n\n return matches;\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":";;;;;;;;;;;;AA2BA,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;AAYjC,UANgB,MAAMC,KAAO,UAAU;IACrC,KALc,QAAQ,OAAO;IAM7B;IACA,UALe,QAAQ,YAAY;IAMpC,CAAC;;EAKJ,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"}
@@ -1,7 +1,6 @@
1
1
  import { GitAdapter } from "../ports/git.mjs";
2
2
 
3
3
  //#region src/adapters/git.d.ts
4
-
5
4
  /**
6
5
  * Create a Node.js git adapter.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.mts","names":[],"sources":["../../src/adapters/git.ts"],"sourcesContent":[],"mappings":";;;;;;;iBAYgB,oBAAA,gBAAoC"}
1
+ {"version":3,"file":"git.d.mts","names":[],"sources":["../../src/adapters/git.ts"],"mappings":";;;;;;iBAYgB,oBAAA,CAAqB,GAAA,YAAe,UAAA"}
@@ -38,8 +38,8 @@ function createNodeGitAdapter(cwd) {
38
38
  stdio: "inherit"
39
39
  });
40
40
  },
41
- async isGitRepo(path$1) {
42
- const targetPath = path$1 ? resolve(baseCwd, path$1) : baseCwd;
41
+ async isGitRepo(path) {
42
+ const targetPath = path ? resolve(baseCwd, path) : baseCwd;
43
43
  try {
44
44
  await access(resolve(targetPath, ".git"));
45
45
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"git.mjs","names":["path"],"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, GitLogEntry } 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 async log(baseline?: string): Promise<GitLogEntry[]> {\n const ref = baseline ?? 'HEAD~10';\n const format = '--format=%H|||%s|||%an|||%aI';\n\n try {\n const output = execSync(`git log ${ref}..HEAD ${format}`, {\n cwd: baseCwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n const entries: GitLogEntry[] = [];\n\n for (const line of output.trim().split('\\n')) {\n if (!line) continue;\n const [hash, message, author, date] = line.split('|||');\n if (hash && message) {\n entries.push({ hash, message, author, date });\n }\n }\n\n return entries;\n } catch {\n // Return empty if git log fails (e.g., not enough commits)\n return [];\n }\n },\n\n async diffFiles(baseline: string, patterns?: string[]): Promise<string[]> {\n try {\n const pathSpecs =\n patterns && patterns.length > 0\n ? `-- ${patterns.map((p) => `'${p}'`).join(' ')}`\n : '';\n\n const output = execSync(\n `git diff --name-only ${baseline}...HEAD ${pathSpecs}`,\n {\n cwd: baseCwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n }\n );\n\n return output.trim().split('\\n').filter(Boolean);\n } catch {\n // Return empty array if diff fails (e.g., baseline doesn't exist)\n return [];\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,MAAM,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,QAAiC;GAC/C,MAAM,aAAaA,SAAO,QAAQ,SAASA,OAAK,GAAG;AACnD,OAAI;AACF,UAAM,OAAO,QAAQ,YAAY,OAAO,CAAC;AACzC,WAAO;WACD;AACN,WAAO;;;EAIX,MAAM,IAAI,UAA2C;GACnD,MAAM,MAAM,YAAY;GACxB,MAAM,SAAS;AAEf,OAAI;IACF,MAAM,SAAS,SAAS,WAAW,IAAI,SAAS,UAAU;KACxD,KAAK;KACL,UAAU;KACV,OAAO;MAAC;MAAU;MAAQ;MAAO;KAClC,CAAC;IAEF,MAAM,UAAyB,EAAE;AAEjC,SAAK,MAAM,QAAQ,OAAO,MAAM,CAAC,MAAM,KAAK,EAAE;AAC5C,SAAI,CAAC,KAAM;KACX,MAAM,CAAC,MAAM,SAAS,QAAQ,QAAQ,KAAK,MAAM,MAAM;AACvD,SAAI,QAAQ,QACV,SAAQ,KAAK;MAAE;MAAM;MAAS;MAAQ;MAAM,CAAC;;AAIjD,WAAO;WACD;AAEN,WAAO,EAAE;;;EAIb,MAAM,UAAU,UAAkB,UAAwC;AACxE,OAAI;AAeF,WATe,SACb,wBAAwB,SAAS,UALjC,YAAY,SAAS,SAAS,IAC1B,MAAM,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,KAC7C,MAIJ;KACE,KAAK;KACL,UAAU;KACV,OAAO;MAAC;MAAU;MAAQ;MAAO;KAClC,CACF,CAEa,MAAM,CAAC,MAAM,KAAK,CAAC,OAAO,QAAQ;WAC1C;AAEN,WAAO,EAAE;;;EAGd"}
1
+ {"version":3,"file":"git.mjs","names":[],"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, GitLogEntry } 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 async log(baseline?: string): Promise<GitLogEntry[]> {\n const ref = baseline ?? 'HEAD~10';\n const format = '--format=%H|||%s|||%an|||%aI';\n\n try {\n const output = execSync(`git log ${ref}..HEAD ${format}`, {\n cwd: baseCwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n const entries: GitLogEntry[] = [];\n\n for (const line of output.trim().split('\\n')) {\n if (!line) continue;\n const [hash, message, author, date] = line.split('|||');\n if (hash && message) {\n entries.push({ hash, message, author, date });\n }\n }\n\n return entries;\n } catch {\n // Return empty if git log fails (e.g., not enough commits)\n return [];\n }\n },\n\n async diffFiles(baseline: string, patterns?: string[]): Promise<string[]> {\n try {\n const pathSpecs =\n patterns && patterns.length > 0\n ? `-- ${patterns.map((p) => `'${p}'`).join(' ')}`\n : '';\n\n const output = execSync(\n `git diff --name-only ${baseline}...HEAD ${pathSpecs}`,\n {\n cwd: baseCwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n }\n );\n\n return output.trim().split('\\n').filter(Boolean);\n } catch {\n // Return empty array if diff fails (e.g., baseline doesn't exist)\n return [];\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,MAAM,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;;;EAIX,MAAM,IAAI,UAA2C;GACnD,MAAM,MAAM,YAAY;GACxB,MAAM,SAAS;AAEf,OAAI;IACF,MAAM,SAAS,SAAS,WAAW,IAAI,SAAS,UAAU;KACxD,KAAK;KACL,UAAU;KACV,OAAO;MAAC;MAAU;MAAQ;MAAO;KAClC,CAAC;IAEF,MAAM,UAAyB,EAAE;AAEjC,SAAK,MAAM,QAAQ,OAAO,MAAM,CAAC,MAAM,KAAK,EAAE;AAC5C,SAAI,CAAC,KAAM;KACX,MAAM,CAAC,MAAM,SAAS,QAAQ,QAAQ,KAAK,MAAM,MAAM;AACvD,SAAI,QAAQ,QACV,SAAQ,KAAK;MAAE;MAAM;MAAS;MAAQ;MAAM,CAAC;;AAIjD,WAAO;WACD;AAEN,WAAO,EAAE;;;EAIb,MAAM,UAAU,UAAkB,UAAwC;AACxE,OAAI;AAeF,WATe,SACb,wBAAwB,SAAS,UALjC,YAAY,SAAS,SAAS,IAC1B,MAAM,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,KAC7C,MAIJ;KACE,KAAK;KACL,UAAU;KACV,OAAO;MAAC;MAAU;MAAQ;MAAO;KAClC,CACF,CAEa,MAAM,CAAC,MAAM,KAAK,CAAC,OAAO,QAAQ;WAC1C;AAEN,WAAO,EAAE;;;EAGd"}
@@ -1,7 +1,6 @@
1
1
  import { LoggerAdapter } from "../ports/logger.mjs";
2
2
 
3
3
  //#region src/adapters/logger.d.ts
4
-
5
4
  /**
6
5
  * Create a console-based logger adapter.
7
6
  * This is a basic implementation - CLI apps should inject their own
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.mts","names":[],"sources":["../../src/adapters/logger.ts"],"sourcesContent":[],"mappings":";;;;;;;;;iBAagB,0BAAA,CAAA,GAA8B;;;;;iBA8B9B,uBAAA,CAAA,GAA2B"}
1
+ {"version":3,"file":"logger.d.mts","names":[],"sources":["../../src/adapters/logger.ts"],"mappings":";;;;;AA2CA;;;iBA9BgB,0BAAA,CAAA,GAA8B,aAAA;;;;;iBA8B9B,uBAAA,CAAA,GAA2B,aAAA"}
@@ -1,7 +1,6 @@
1
1
  import { WatcherAdapter } from "../ports/watcher.mjs";
2
2
 
3
3
  //#region src/adapters/watcher.d.ts
4
-
5
4
  /**
6
5
  * Create a Node.js file watcher adapter using chokidar.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.mts","names":[],"sources":["../../src/adapters/watcher.ts"],"sourcesContent":[],"mappings":";;;;;;;iBA0BgB,wBAAA,gBAAwC"}
1
+ {"version":3,"file":"watcher.d.mts","names":[],"sources":["../../src/adapters/watcher.ts"],"mappings":";;;;;;iBA0BgB,wBAAA,CAAyB,GAAA,YAAe,cAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.mts","names":[],"sources":["../../src/adapters/workspace.ts"],"sourcesContent":[],"mappings":";;AAaA;AAKA;AAKA;AAgBA;AAYA;;;;AAuCyB,KA7Eb,cAAA,GA6Ea,KAAA,GAAA,MAAA,GAAA,MAAA,GAAA,KAAA;AA4BzB;AA6BA;AAwDA;AAiDgB,KA1OJ,cAAA,GA0Oc,SAAA,GAAA,UAAA,GAAA,WAAA;AA2B1B;AA8CA;AAgBA;AAwDgB,UAtXC,aAAA,CAsXe;EAqBhB;EA2BA,IAAA,EAAA,MAAA;EAsBA;EA8BA,IAAA,EAAA,MAAA;EAmBA;EAmBA,GAAA,EAAA,MAAA;;;;;;;;;UAhfC,YAAA;;;;cAIH;;oBAEM;;;;;UAMH,aAAA;;;;kBAIC;;;;;;;;;;;;;;;;;;;;;;;;kBA8BA;;;;aAKL;;;;;iBA4BG,eAAA;;;;;;;;;iBA6BA,iBAAA;;;;;;;;;;iBAwDA,oBAAA,0BAEb;;;;iBA+Ca,UAAA;;;;iBA2BA,oBAAA;;;;iBA8CA,cAAA;;;;iBAgBA,eAAA,wBAAuC;;;;iBAwDvC,gBAAA;;;;iBAqBA,eAAA,oBAAmC;;;;iBA2BnC,oBAAA,6CAGb;;;;iBAmBa,gBAAA,qBAEb;;;;iBA4Ba,aAAA,iBACE;;;;iBAkBF,cAAA,iBACE;;;;iBAkBF,iBAAA,iBACE"}
1
+ {"version":3,"file":"workspace.d.mts","names":[],"sources":["../../src/adapters/workspace.ts"],"mappings":";;AAaA;;;;;AAKA;;;AAAA,KALY,cAAA;;AAUZ;;KALY,cAAA;;;;UAKK,aAAA;EAQf;EANA,IAAA;EAQa;EANb,IAAA;EAYe;EAVf,GAAA;;EAEA,YAAA;EAUA;EARA,aAAA;AAAA;;;;UAMe,YAAA;EAYA;EAVf,IAAA;;EAEA,UAAA,EAAY,aAAA;EA0CI;EAxChB,eAAA,GAAkB,aAAA;AAAA;;;;UAMH,aAAA;EAcf;;;EAVA,cAAA,EAAgB,cAAA;EA8BhB;;;EAzBA,aAAA;EA8BuB;;AA4BzB;EArDE,WAAA;;;;EAKA,UAAA;EA6E+B;;;EAxE/B,QAAA;EAgIc;;;EA3Hd,WAAA;EA6He;AA+CjB;;EAvKE,cAAA,EAAgB,cAAA;EAuKS;;AA2B3B;EA7LE,QAAA,GAAW,YAAA;AAAA;;;AA2Ob;iBA/MgB,eAAA,CAAgB,QAAA;;;;AA+NhC;;;;;iBAlMgB,iBAAA,CAAkB,QAAA;;;;;AA+QlC;;;;;iBAvNgB,oBAAA,CACd,aAAA,YACC,cAAA;;;;iBA+Ca,UAAA,CAAW,aAAA;;;;iBA2BX,oBAAA,CACd,aAAA;AA2LF;;;AAAA,iBA9IgB,cAAA,CAAe,WAAA;;AA4K/B;;iBA5JgB,eAAA,CAAgB,YAAA,WAAuB,aAAA;;;;iBAwDvC,gBAAA,CAAiB,QAAA;;;AAuHjC;iBAlGgB,eAAA,CAAgB,QAAA,WAAmB,YAAA;;;;iBA2BnC,oBAAA,CACd,QAAA,UACA,cAAA,YACC,cAAA;;;;iBAmBa,gBAAA,CACd,QAAA,YACC,aAAA;;;;iBA4Ba,aAAA,CACd,cAAA,EAAgB,cAAA,EAChB,MAAA;;;;iBAiBc,cAAA,CACd,cAAA,EAAgB,cAAA,EAChB,OAAA;;;;iBAiBc,iBAAA,CACd,cAAA,EAAgB,cAAA,EAChB,KAAA"}
@@ -146,13 +146,13 @@ function parseGitModules(metaRepoRoot) {
146
146
  const submoduleRegex = /\[submodule\s+"([^"]+)"\]\s*\n\s*path\s*=\s*(\S+)\s*\n\s*url\s*=\s*(\S+)/g;
147
147
  let match;
148
148
  while ((match = submoduleRegex.exec(content)) !== null) {
149
- const [, name, path$1, url] = match;
150
- if (name && path$1 && url) {
151
- const absolutePath = join(metaRepoRoot, path$1);
149
+ const [, name, path, url] = match;
150
+ if (name && path && url) {
151
+ const absolutePath = join(metaRepoRoot, path);
152
152
  const hasWorkspaces = existsSync(join(absolutePath, "package.json")) && checkHasWorkspaces(absolutePath);
153
153
  submodules.push({
154
154
  name,
155
- path: path$1,
155
+ path,
156
156
  url,
157
157
  absolutePath,
158
158
  hasWorkspaces
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.mjs","names":["path"],"sources":["../../src/adapters/workspace.ts"],"sourcesContent":["/**\n * Workspace and monorepo detection utilities.\n *\n * Provides utilities for detecting workspace roots, package managers,\n * and monorepo configurations across Bun, pnpm, Yarn, and npm.\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\n\n/**\n * Supported package managers.\n */\nexport type PackageManager = 'bun' | 'pnpm' | 'yarn' | 'npm';\n\n/**\n * Repository structure type.\n */\nexport type RepositoryType = 'classic' | 'monorepo' | 'meta-repo';\n\n/**\n * Git submodule information.\n */\nexport interface SubmoduleInfo {\n /** Submodule name (from .gitmodules) */\n name: string;\n /** Relative path from meta-repo root */\n path: string;\n /** Git remote URL */\n url: string;\n /** Absolute path to submodule root */\n absolutePath: string;\n /** Whether submodule has its own workspaces */\n hasWorkspaces: boolean;\n}\n\n/**\n * Meta-repo information.\n */\nexport interface MetaRepoInfo {\n /** Absolute path to meta-repo root (containing .gitmodules) */\n root: string;\n /** All detected git submodules */\n submodules: SubmoduleInfo[];\n /** Currently active submodule (if in a submodule context) */\n activeSubmodule?: SubmoduleInfo;\n}\n\n/**\n * Workspace detection result.\n */\nexport interface WorkspaceInfo {\n /**\n * The detected package manager.\n */\n packageManager: PackageManager;\n\n /**\n * Root of the workspace (monorepo root or single package root).\n */\n workspaceRoot: string;\n\n /**\n * Root of the current package (may differ from workspaceRoot in monorepos).\n */\n packageRoot: string;\n\n /**\n * Whether this is a monorepo.\n */\n isMonorepo: boolean;\n\n /**\n * List of package paths in monorepo (relative to workspaceRoot).\n */\n packages?: string[];\n\n /**\n * Name of the current package (from package.json).\n */\n packageName?: string;\n\n /**\n * Repository structure type.\n */\n repositoryType: RepositoryType;\n\n /**\n * Meta-repo information (if in a meta-repo context).\n */\n metaRepo?: MetaRepoInfo;\n}\n\n/**\n * Lock files and their corresponding package managers.\n */\nconst LOCK_FILES: Record<string, PackageManager> = {\n 'bun.lockb': 'bun',\n 'bun.lock': 'bun',\n 'pnpm-lock.yaml': 'pnpm',\n 'yarn.lock': 'yarn',\n 'package-lock.json': 'npm',\n};\n\n/**\n * Monorepo indicator files.\n */\nconst MONOREPO_FILES = [\n 'pnpm-workspace.yaml',\n 'lerna.json',\n 'nx.json',\n 'turbo.json',\n 'rush.json',\n];\n\n/**\n * Find the nearest directory containing a package.json.\n */\nexport function findPackageRoot(startDir: string = process.cwd()): string {\n let current = resolve(startDir);\n\n while (true) {\n if (existsSync(join(current, 'package.json'))) {\n return current;\n }\n\n // Move up to parent\n const parent = dirname(current);\n if (parent === current) {\n // Reached filesystem root\n break;\n }\n current = parent;\n }\n\n // Fallback to start directory\n return startDir;\n}\n\n/**\n * Find the workspace root (monorepo root or single package root).\n *\n * Walks up the directory tree looking for:\n * 1. pnpm-workspace.yaml (pnpm monorepo)\n * 2. package.json with \"workspaces\" field (yarn/npm/bun monorepo)\n * 3. Lock files (bun.lockb, pnpm-lock.yaml, yarn.lock, package-lock.json)\n */\nexport function findWorkspaceRoot(startDir: string = process.cwd()): string {\n let current = resolve(startDir);\n let lastPackageJson: string | null = null;\n\n while (true) {\n // Check for monorepo indicators\n for (const file of MONOREPO_FILES) {\n if (existsSync(join(current, file))) {\n return current;\n }\n }\n\n // Check for package.json with workspaces\n const pkgPath = join(current, 'package.json');\n if (existsSync(pkgPath)) {\n lastPackageJson = current;\n\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (pkg.workspaces) {\n return current;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Check for lock files at this level\n for (const lockFile of Object.keys(LOCK_FILES)) {\n if (existsSync(join(current, lockFile))) {\n return current;\n }\n }\n\n // Move up to parent\n const parent = dirname(current);\n if (parent === current) {\n // Reached filesystem root\n break;\n }\n current = parent;\n }\n\n // Return last found package.json location, or start dir\n return lastPackageJson ?? startDir;\n}\n\n/**\n * Detect the package manager in use.\n *\n * Priority:\n * 1. Lock file presence (most reliable)\n * 2. packageManager field in package.json\n * 3. COREPACK_ROOT environment variable\n * 4. Default to npm\n */\nexport function detectPackageManager(\n workspaceRoot: string = process.cwd()\n): PackageManager {\n // Check for lock files (in priority order)\n const lockFilePriority: PackageManager[] = ['bun', 'pnpm', 'yarn', 'npm'];\n\n for (const pm of lockFilePriority) {\n const lockFiles = Object.entries(LOCK_FILES).filter(\n ([, manager]) => manager === pm\n );\n for (const [lockFile] of lockFiles) {\n if (existsSync(join(workspaceRoot, lockFile))) {\n return pm;\n }\n }\n }\n\n // Check package.json for packageManager field\n const pkgPath = join(workspaceRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (pkg.packageManager) {\n const match = pkg.packageManager.match(/^(bun|pnpm|yarn|npm)@/);\n if (match) {\n return match[1] as PackageManager;\n }\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Check environment\n if (\n process.env.BUN_INSTALL ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (globalThis as any).Bun !== 'undefined'\n ) {\n return 'bun';\n }\n\n // Default to npm\n return 'npm';\n}\n\n/**\n * Check if the workspace is a monorepo.\n */\nexport function isMonorepo(workspaceRoot: string = process.cwd()): boolean {\n // Check for monorepo indicator files\n for (const file of MONOREPO_FILES) {\n if (existsSync(join(workspaceRoot, file))) {\n return true;\n }\n }\n\n // Check package.json for workspaces\n const pkgPath = join(workspaceRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (pkg.workspaces) {\n return true;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n return false;\n}\n\n/**\n * Get workspace package patterns from package.json or pnpm-workspace.yaml.\n */\nexport function getWorkspacePackages(\n workspaceRoot: string\n): string[] | undefined {\n // Check pnpm-workspace.yaml\n const pnpmWorkspacePath = join(workspaceRoot, 'pnpm-workspace.yaml');\n if (existsSync(pnpmWorkspacePath)) {\n try {\n const content = readFileSync(pnpmWorkspacePath, 'utf-8');\n // Simple YAML parsing for packages array\n const match = content.match(\n /packages:\\s*\\n((?:\\s+-\\s+['\"]?[^\\n]+['\"]?\\n?)+)/\n );\n if (match?.[1]) {\n const packages = match[1]\n .split('\\n')\n .map((line) => line.replace(/^\\s+-\\s+['\"]?|['\"]?\\s*$/g, ''))\n .filter(Boolean);\n return packages;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Check package.json workspaces\n const pkgPath = join(workspaceRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (Array.isArray(pkg.workspaces)) {\n return pkg.workspaces;\n }\n if (pkg.workspaces?.packages && Array.isArray(pkg.workspaces.packages)) {\n return pkg.workspaces.packages;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n return undefined;\n}\n\n/**\n * Get package name from package.json.\n */\nexport function getPackageName(packageRoot: string): string | undefined {\n const pkgPath = join(packageRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return pkg.name;\n } catch {\n // Ignore parse errors\n }\n }\n return undefined;\n}\n\n/**\n * Parse .gitmodules file to extract submodule information.\n */\nexport function parseGitModules(metaRepoRoot: string): SubmoduleInfo[] {\n const gitmodulesPath = join(metaRepoRoot, '.gitmodules');\n if (!existsSync(gitmodulesPath)) {\n return [];\n }\n\n try {\n const content = readFileSync(gitmodulesPath, 'utf-8');\n const submodules: SubmoduleInfo[] = [];\n const submoduleRegex =\n /\\[submodule\\s+\"([^\"]+)\"\\]\\s*\\n\\s*path\\s*=\\s*(\\S+)\\s*\\n\\s*url\\s*=\\s*(\\S+)/g;\n\n let match: RegExpExecArray | null;\n while ((match = submoduleRegex.exec(content)) !== null) {\n const [, name, path, url] = match;\n if (name && path && url) {\n const absolutePath = join(metaRepoRoot, path);\n const hasWorkspaces =\n existsSync(join(absolutePath, 'package.json')) &&\n checkHasWorkspaces(absolutePath);\n\n submodules.push({\n name,\n path,\n url,\n absolutePath,\n hasWorkspaces,\n });\n }\n }\n\n return submodules;\n } catch {\n return [];\n }\n}\n\n/**\n * Check if a directory has workspace configuration.\n */\nfunction checkHasWorkspaces(dir: string): boolean {\n const pkgPath = join(dir, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return Boolean(pkg.workspaces);\n } catch {\n // Ignore\n }\n }\n return existsSync(join(dir, 'pnpm-workspace.yaml'));\n}\n\n/**\n * Find the meta-repo root by looking for .gitmodules.\n */\nexport function findMetaRepoRoot(startDir: string): string | undefined {\n let current = resolve(startDir);\n\n while (true) {\n if (existsSync(join(current, '.gitmodules'))) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n return undefined;\n}\n\n/**\n * Get meta-repo information if in a meta-repo context.\n */\nexport function getMetaRepoInfo(startDir: string): MetaRepoInfo | undefined {\n const metaRoot = findMetaRepoRoot(startDir);\n if (!metaRoot) {\n return undefined;\n }\n\n const submodules = parseGitModules(metaRoot);\n if (submodules.length === 0) {\n return undefined;\n }\n\n // Determine active submodule based on current directory\n const resolvedStart = resolve(startDir);\n const activeSubmodule = submodules.find((sub) =>\n resolvedStart.startsWith(sub.absolutePath)\n );\n\n return {\n root: metaRoot,\n submodules,\n activeSubmodule,\n };\n}\n\n/**\n * Detect the repository structure type.\n */\nexport function detectRepositoryType(\n startDir: string,\n isMonorepoFlag: boolean\n): RepositoryType {\n const metaRoot = findMetaRepoRoot(startDir);\n if (metaRoot) {\n const submodules = parseGitModules(metaRoot);\n if (submodules.length > 0) {\n return 'meta-repo';\n }\n }\n\n if (isMonorepoFlag) {\n return 'monorepo';\n }\n\n return 'classic';\n}\n\n/**\n * Get complete workspace information.\n */\nexport function getWorkspaceInfo(\n startDir: string = process.cwd()\n): WorkspaceInfo {\n const packageRoot = findPackageRoot(startDir);\n const workspaceRoot = findWorkspaceRoot(startDir);\n const packageManager = detectPackageManager(workspaceRoot);\n const isMonorepoWorkspace = isMonorepo(workspaceRoot);\n const packages = isMonorepoWorkspace\n ? getWorkspacePackages(workspaceRoot)\n : undefined;\n const packageName = getPackageName(packageRoot);\n const repositoryType = detectRepositoryType(startDir, isMonorepoWorkspace);\n const metaRepo =\n repositoryType === 'meta-repo' ? getMetaRepoInfo(startDir) : undefined;\n\n return {\n packageManager,\n workspaceRoot,\n packageRoot,\n isMonorepo: isMonorepoWorkspace,\n packages,\n packageName,\n repositoryType,\n metaRepo,\n };\n}\n\n/**\n * Get the run command for the detected package manager.\n */\nexport function getRunCommand(\n packageManager: PackageManager,\n script: string\n): string {\n switch (packageManager) {\n case 'bun':\n return `bun run ${script}`;\n case 'pnpm':\n return `pnpm run ${script}`;\n case 'yarn':\n return `yarn ${script}`;\n case 'npm':\n return `npm run ${script}`;\n }\n}\n\n/**\n * Get the exec command for the detected package manager.\n */\nexport function getExecCommand(\n packageManager: PackageManager,\n command: string\n): string {\n switch (packageManager) {\n case 'bun':\n return `bunx ${command}`;\n case 'pnpm':\n return `pnpm exec ${command}`;\n case 'yarn':\n return `yarn ${command}`;\n case 'npm':\n return `npx ${command}`;\n }\n}\n\n/**\n * Get the install command for the detected package manager.\n */\nexport function getInstallCommand(\n packageManager: PackageManager,\n isDev = false\n): string {\n const devFlag = isDev ? (packageManager === 'npm' ? '--save-dev' : '-D') : '';\n\n switch (packageManager) {\n case 'bun':\n return `bun add ${devFlag}`.trim();\n case 'pnpm':\n return `pnpm add ${devFlag}`.trim();\n case 'yarn':\n return `yarn add ${devFlag}`.trim();\n case 'npm':\n return `npm install ${devFlag}`.trim();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"workspace.mjs","names":[],"sources":["../../src/adapters/workspace.ts"],"sourcesContent":["/**\n * Workspace and monorepo detection utilities.\n *\n * Provides utilities for detecting workspace roots, package managers,\n * and monorepo configurations across Bun, pnpm, Yarn, and npm.\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\n\n/**\n * Supported package managers.\n */\nexport type PackageManager = 'bun' | 'pnpm' | 'yarn' | 'npm';\n\n/**\n * Repository structure type.\n */\nexport type RepositoryType = 'classic' | 'monorepo' | 'meta-repo';\n\n/**\n * Git submodule information.\n */\nexport interface SubmoduleInfo {\n /** Submodule name (from .gitmodules) */\n name: string;\n /** Relative path from meta-repo root */\n path: string;\n /** Git remote URL */\n url: string;\n /** Absolute path to submodule root */\n absolutePath: string;\n /** Whether submodule has its own workspaces */\n hasWorkspaces: boolean;\n}\n\n/**\n * Meta-repo information.\n */\nexport interface MetaRepoInfo {\n /** Absolute path to meta-repo root (containing .gitmodules) */\n root: string;\n /** All detected git submodules */\n submodules: SubmoduleInfo[];\n /** Currently active submodule (if in a submodule context) */\n activeSubmodule?: SubmoduleInfo;\n}\n\n/**\n * Workspace detection result.\n */\nexport interface WorkspaceInfo {\n /**\n * The detected package manager.\n */\n packageManager: PackageManager;\n\n /**\n * Root of the workspace (monorepo root or single package root).\n */\n workspaceRoot: string;\n\n /**\n * Root of the current package (may differ from workspaceRoot in monorepos).\n */\n packageRoot: string;\n\n /**\n * Whether this is a monorepo.\n */\n isMonorepo: boolean;\n\n /**\n * List of package paths in monorepo (relative to workspaceRoot).\n */\n packages?: string[];\n\n /**\n * Name of the current package (from package.json).\n */\n packageName?: string;\n\n /**\n * Repository structure type.\n */\n repositoryType: RepositoryType;\n\n /**\n * Meta-repo information (if in a meta-repo context).\n */\n metaRepo?: MetaRepoInfo;\n}\n\n/**\n * Lock files and their corresponding package managers.\n */\nconst LOCK_FILES: Record<string, PackageManager> = {\n 'bun.lockb': 'bun',\n 'bun.lock': 'bun',\n 'pnpm-lock.yaml': 'pnpm',\n 'yarn.lock': 'yarn',\n 'package-lock.json': 'npm',\n};\n\n/**\n * Monorepo indicator files.\n */\nconst MONOREPO_FILES = [\n 'pnpm-workspace.yaml',\n 'lerna.json',\n 'nx.json',\n 'turbo.json',\n 'rush.json',\n];\n\n/**\n * Find the nearest directory containing a package.json.\n */\nexport function findPackageRoot(startDir: string = process.cwd()): string {\n let current = resolve(startDir);\n\n while (true) {\n if (existsSync(join(current, 'package.json'))) {\n return current;\n }\n\n // Move up to parent\n const parent = dirname(current);\n if (parent === current) {\n // Reached filesystem root\n break;\n }\n current = parent;\n }\n\n // Fallback to start directory\n return startDir;\n}\n\n/**\n * Find the workspace root (monorepo root or single package root).\n *\n * Walks up the directory tree looking for:\n * 1. pnpm-workspace.yaml (pnpm monorepo)\n * 2. package.json with \"workspaces\" field (yarn/npm/bun monorepo)\n * 3. Lock files (bun.lockb, pnpm-lock.yaml, yarn.lock, package-lock.json)\n */\nexport function findWorkspaceRoot(startDir: string = process.cwd()): string {\n let current = resolve(startDir);\n let lastPackageJson: string | null = null;\n\n while (true) {\n // Check for monorepo indicators\n for (const file of MONOREPO_FILES) {\n if (existsSync(join(current, file))) {\n return current;\n }\n }\n\n // Check for package.json with workspaces\n const pkgPath = join(current, 'package.json');\n if (existsSync(pkgPath)) {\n lastPackageJson = current;\n\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (pkg.workspaces) {\n return current;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Check for lock files at this level\n for (const lockFile of Object.keys(LOCK_FILES)) {\n if (existsSync(join(current, lockFile))) {\n return current;\n }\n }\n\n // Move up to parent\n const parent = dirname(current);\n if (parent === current) {\n // Reached filesystem root\n break;\n }\n current = parent;\n }\n\n // Return last found package.json location, or start dir\n return lastPackageJson ?? startDir;\n}\n\n/**\n * Detect the package manager in use.\n *\n * Priority:\n * 1. Lock file presence (most reliable)\n * 2. packageManager field in package.json\n * 3. COREPACK_ROOT environment variable\n * 4. Default to npm\n */\nexport function detectPackageManager(\n workspaceRoot: string = process.cwd()\n): PackageManager {\n // Check for lock files (in priority order)\n const lockFilePriority: PackageManager[] = ['bun', 'pnpm', 'yarn', 'npm'];\n\n for (const pm of lockFilePriority) {\n const lockFiles = Object.entries(LOCK_FILES).filter(\n ([, manager]) => manager === pm\n );\n for (const [lockFile] of lockFiles) {\n if (existsSync(join(workspaceRoot, lockFile))) {\n return pm;\n }\n }\n }\n\n // Check package.json for packageManager field\n const pkgPath = join(workspaceRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (pkg.packageManager) {\n const match = pkg.packageManager.match(/^(bun|pnpm|yarn|npm)@/);\n if (match) {\n return match[1] as PackageManager;\n }\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Check environment\n if (\n process.env.BUN_INSTALL ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (globalThis as any).Bun !== 'undefined'\n ) {\n return 'bun';\n }\n\n // Default to npm\n return 'npm';\n}\n\n/**\n * Check if the workspace is a monorepo.\n */\nexport function isMonorepo(workspaceRoot: string = process.cwd()): boolean {\n // Check for monorepo indicator files\n for (const file of MONOREPO_FILES) {\n if (existsSync(join(workspaceRoot, file))) {\n return true;\n }\n }\n\n // Check package.json for workspaces\n const pkgPath = join(workspaceRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (pkg.workspaces) {\n return true;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n return false;\n}\n\n/**\n * Get workspace package patterns from package.json or pnpm-workspace.yaml.\n */\nexport function getWorkspacePackages(\n workspaceRoot: string\n): string[] | undefined {\n // Check pnpm-workspace.yaml\n const pnpmWorkspacePath = join(workspaceRoot, 'pnpm-workspace.yaml');\n if (existsSync(pnpmWorkspacePath)) {\n try {\n const content = readFileSync(pnpmWorkspacePath, 'utf-8');\n // Simple YAML parsing for packages array\n const match = content.match(\n /packages:\\s*\\n((?:\\s+-\\s+['\"]?[^\\n]+['\"]?\\n?)+)/\n );\n if (match?.[1]) {\n const packages = match[1]\n .split('\\n')\n .map((line) => line.replace(/^\\s+-\\s+['\"]?|['\"]?\\s*$/g, ''))\n .filter(Boolean);\n return packages;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Check package.json workspaces\n const pkgPath = join(workspaceRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (Array.isArray(pkg.workspaces)) {\n return pkg.workspaces;\n }\n if (pkg.workspaces?.packages && Array.isArray(pkg.workspaces.packages)) {\n return pkg.workspaces.packages;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n return undefined;\n}\n\n/**\n * Get package name from package.json.\n */\nexport function getPackageName(packageRoot: string): string | undefined {\n const pkgPath = join(packageRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return pkg.name;\n } catch {\n // Ignore parse errors\n }\n }\n return undefined;\n}\n\n/**\n * Parse .gitmodules file to extract submodule information.\n */\nexport function parseGitModules(metaRepoRoot: string): SubmoduleInfo[] {\n const gitmodulesPath = join(metaRepoRoot, '.gitmodules');\n if (!existsSync(gitmodulesPath)) {\n return [];\n }\n\n try {\n const content = readFileSync(gitmodulesPath, 'utf-8');\n const submodules: SubmoduleInfo[] = [];\n const submoduleRegex =\n /\\[submodule\\s+\"([^\"]+)\"\\]\\s*\\n\\s*path\\s*=\\s*(\\S+)\\s*\\n\\s*url\\s*=\\s*(\\S+)/g;\n\n let match: RegExpExecArray | null;\n while ((match = submoduleRegex.exec(content)) !== null) {\n const [, name, path, url] = match;\n if (name && path && url) {\n const absolutePath = join(metaRepoRoot, path);\n const hasWorkspaces =\n existsSync(join(absolutePath, 'package.json')) &&\n checkHasWorkspaces(absolutePath);\n\n submodules.push({\n name,\n path,\n url,\n absolutePath,\n hasWorkspaces,\n });\n }\n }\n\n return submodules;\n } catch {\n return [];\n }\n}\n\n/**\n * Check if a directory has workspace configuration.\n */\nfunction checkHasWorkspaces(dir: string): boolean {\n const pkgPath = join(dir, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return Boolean(pkg.workspaces);\n } catch {\n // Ignore\n }\n }\n return existsSync(join(dir, 'pnpm-workspace.yaml'));\n}\n\n/**\n * Find the meta-repo root by looking for .gitmodules.\n */\nexport function findMetaRepoRoot(startDir: string): string | undefined {\n let current = resolve(startDir);\n\n while (true) {\n if (existsSync(join(current, '.gitmodules'))) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n return undefined;\n}\n\n/**\n * Get meta-repo information if in a meta-repo context.\n */\nexport function getMetaRepoInfo(startDir: string): MetaRepoInfo | undefined {\n const metaRoot = findMetaRepoRoot(startDir);\n if (!metaRoot) {\n return undefined;\n }\n\n const submodules = parseGitModules(metaRoot);\n if (submodules.length === 0) {\n return undefined;\n }\n\n // Determine active submodule based on current directory\n const resolvedStart = resolve(startDir);\n const activeSubmodule = submodules.find((sub) =>\n resolvedStart.startsWith(sub.absolutePath)\n );\n\n return {\n root: metaRoot,\n submodules,\n activeSubmodule,\n };\n}\n\n/**\n * Detect the repository structure type.\n */\nexport function detectRepositoryType(\n startDir: string,\n isMonorepoFlag: boolean\n): RepositoryType {\n const metaRoot = findMetaRepoRoot(startDir);\n if (metaRoot) {\n const submodules = parseGitModules(metaRoot);\n if (submodules.length > 0) {\n return 'meta-repo';\n }\n }\n\n if (isMonorepoFlag) {\n return 'monorepo';\n }\n\n return 'classic';\n}\n\n/**\n * Get complete workspace information.\n */\nexport function getWorkspaceInfo(\n startDir: string = process.cwd()\n): WorkspaceInfo {\n const packageRoot = findPackageRoot(startDir);\n const workspaceRoot = findWorkspaceRoot(startDir);\n const packageManager = detectPackageManager(workspaceRoot);\n const isMonorepoWorkspace = isMonorepo(workspaceRoot);\n const packages = isMonorepoWorkspace\n ? getWorkspacePackages(workspaceRoot)\n : undefined;\n const packageName = getPackageName(packageRoot);\n const repositoryType = detectRepositoryType(startDir, isMonorepoWorkspace);\n const metaRepo =\n repositoryType === 'meta-repo' ? getMetaRepoInfo(startDir) : undefined;\n\n return {\n packageManager,\n workspaceRoot,\n packageRoot,\n isMonorepo: isMonorepoWorkspace,\n packages,\n packageName,\n repositoryType,\n metaRepo,\n };\n}\n\n/**\n * Get the run command for the detected package manager.\n */\nexport function getRunCommand(\n packageManager: PackageManager,\n script: string\n): string {\n switch (packageManager) {\n case 'bun':\n return `bun run ${script}`;\n case 'pnpm':\n return `pnpm run ${script}`;\n case 'yarn':\n return `yarn ${script}`;\n case 'npm':\n return `npm run ${script}`;\n }\n}\n\n/**\n * Get the exec command for the detected package manager.\n */\nexport function getExecCommand(\n packageManager: PackageManager,\n command: string\n): string {\n switch (packageManager) {\n case 'bun':\n return `bunx ${command}`;\n case 'pnpm':\n return `pnpm exec ${command}`;\n case 'yarn':\n return `yarn ${command}`;\n case 'npm':\n return `npx ${command}`;\n }\n}\n\n/**\n * Get the install command for the detected package manager.\n */\nexport function getInstallCommand(\n packageManager: PackageManager,\n isDev = false\n): string {\n const devFlag = isDev ? (packageManager === 'npm' ? '--save-dev' : '-D') : '';\n\n switch (packageManager) {\n case 'bun':\n return `bun add ${devFlag}`.trim();\n case 'pnpm':\n return `pnpm add ${devFlag}`.trim();\n case 'yarn':\n return `yarn add ${devFlag}`.trim();\n case 'npm':\n return `npm install ${devFlag}`.trim();\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { AgentProvider, AgentResult, AgentTask } from "./types.mjs";
2
2
 
3
3
  //#region src/ai/agents/claude-code-agent.d.ts
4
-
5
4
  declare class ClaudeCodeAgent implements AgentProvider {
6
5
  name: "claude-code";
7
6
  private apiKey;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-agent.d.mts","names":[],"sources":["../../../src/ai/agents/claude-code-agent.ts"],"sourcesContent":[],"mappings":";;;;AAqBuB,cAZV,eAAA,YAA2B,aAYjB,CAAA;EAAoB,IAAA,EAAA,aAAA;EAAR,QAAA,MAAA;EA4CZ,WAAA,CAAA;EAAoB,SAAA,CAAA,KAAA,EAhDxB,SAgDwB,CAAA,EAAA,OAAA;EAAR,QAAA,CAAA,IAAA,EA5CZ,SA4CY,CAAA,EA5CA,OA4CA,CA5CQ,WA4CR,CAAA;EAxDK,QAAA,CAAA,IAAA,EAwDjB,SAxDiB,CAAA,EAwDL,OAxDK,CAwDG,WAxDH,CAAA;EAAa,QAAA,iBAAA"}
1
+ {"version":3,"file":"claude-code-agent.d.mts","names":[],"sources":["../../../src/ai/agents/claude-code-agent.ts"],"mappings":";;;cASa,eAAA,YAA2B,aAAA;EACtC,IAAA;EAAA,QACQ,MAAA;;EAMR,SAAA,CAAU,KAAA,EAAO,SAAA;EAIX,QAAA,CAAS,IAAA,EAAM,SAAA,GAAY,OAAA,CAAQ,WAAA;EA4CnC,QAAA,CAAS,IAAA,EAAM,SAAA,GAAY,OAAA,CAAQ,WAAA;EAAA,QAwEjC,iBAAA;EAAA,QAsBA,eAAA;EAAA,QAWA,WAAA;EAAA,QAWA,YAAA;EAAA,QAiBA,aAAA;EAAA,QAmBA,eAAA;EAAA,QAkBA,kBAAA;AAAA"}
@@ -1,7 +1,6 @@
1
1
  import { AgentProvider, AgentResult, AgentTask } from "./types.mjs";
2
2
 
3
3
  //#region src/ai/agents/cursor-agent.d.ts
4
-
5
4
  declare class CursorAgent implements AgentProvider {
6
5
  name: "cursor";
7
6
  private cursorPath;
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-agent.d.mts","names":[],"sources":["../../../src/ai/agents/cursor-agent.ts"],"sourcesContent":[],"mappings":";;;;AA2BuB,cAfV,WAAA,YAAuB,aAeb,CAAA;EAAoB,IAAA,EAAA,QAAA;EAAR,QAAA,UAAA;EAmBZ,QAAA,UAAA;EAAoB,QAAA,YAAA;EAAR,WAAA,CAAA;EAlCC,SAAA,CAAA,KAAA,EAWjB,SAXiB,CAAA,EAAA,OAAA;EAAa,QAAA,CAAA,IAAA,EAe1B,SAf0B,CAAA,EAed,OAfc,CAeN,WAfM,CAAA;iBAkC1B,YAAY,QAAQ"}
1
+ {"version":3,"file":"cursor-agent.d.mts","names":[],"sources":["../../../src/ai/agents/cursor-agent.ts"],"mappings":";;;cAYa,WAAA,YAAuB,aAAA;EAClC,IAAA;EAAA,QACQ,UAAA;EAAA,QACA,UAAA;EAAA,QACA,YAAA;;EAOR,SAAA,CAAU,KAAA,EAAO,SAAA;EAIX,QAAA,CAAS,IAAA,EAAM,SAAA,GAAY,OAAA,CAAQ,WAAA;EAmBnC,QAAA,CAAS,IAAA,EAAM,SAAA,GAAY,OAAA,CAAQ,WAAA;EAlCM;;;EAAA,QAiEvC,iBAAA;EA/DA;;;EAAA,QAiHM,qBAAA;EAxGd;;;EAIM;;;EAA2B;;;EAAA,QA0PnB,YAAA;EAvOC;;;EAAA,QA0TD,oBAAA;EAzOA;;;EAAA,QA+RA,wBAAA;EAkBA;;;EAAA,QAAA,kBAAA;EA+MA;;;EAAA,QA/LN,mBAAA;EA8Mc;;;EAAA,QAxFd,qBAAA;;;;UAoDA,gBAAA;;;;UAqBM,cAAA;EAAA,QAQN,iBAAA;;;;UAOA,cAAA;AAAA"}
@@ -68,9 +68,9 @@ var CursorAgent = class {
68
68
  "cursor",
69
69
  "windsurf"
70
70
  ];
71
- for (const path$1 of possiblePaths) if (path$1.includes("cursor") || path$1.includes("Cursor") || path$1.includes("windsurf") || path$1.includes("Windsurf")) try {
72
- if (existsSync(path$1)) {
73
- this.cursorPath = path$1;
71
+ for (const path of possiblePaths) if (path.includes("cursor") || path.includes("Cursor") || path.includes("windsurf") || path.includes("Windsurf")) try {
72
+ if (existsSync(path)) {
73
+ this.cursorPath = path;
74
74
  break;
75
75
  }
76
76
  } catch {
@@ -126,7 +126,7 @@ var CursorAgent = class {
126
126
  await writeFile(specPath, task.specCode);
127
127
  await writeFile(instructionsPath, this.buildDetailedPrompt(task));
128
128
  if (task.existingCode) await writeFile(join(workDir, "existing.ts"), task.existingCode);
129
- return new Promise((resolve$1, reject) => {
129
+ return new Promise((resolve, reject) => {
130
130
  const args = [
131
131
  "--wait",
132
132
  "--new-window",
@@ -150,7 +150,7 @@ var CursorAgent = class {
150
150
  });
151
151
  cursor.on("close", async (code) => {
152
152
  if (existsSync(outputPath)) try {
153
- resolve$1({
153
+ resolve({
154
154
  success: true,
155
155
  code: await readFile(outputPath, "utf-8"),
156
156
  metadata: {