@contractspec/bundle.workspace 0.0.0-canary-20260113162409

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (703) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/_virtual/rolldown_runtime.mjs +20 -0
  4. package/dist/adapters/ai.d.mts +12 -0
  5. package/dist/adapters/ai.d.mts.map +1 -0
  6. package/dist/adapters/ai.mjs +83 -0
  7. package/dist/adapters/ai.mjs.map +1 -0
  8. package/dist/adapters/factory.d.mts +29 -0
  9. package/dist/adapters/factory.d.mts.map +1 -0
  10. package/dist/adapters/factory.mjs +37 -0
  11. package/dist/adapters/factory.mjs.map +1 -0
  12. package/dist/adapters/fs.d.mts +12 -0
  13. package/dist/adapters/fs.d.mts.map +1 -0
  14. package/dist/adapters/fs.mjs +133 -0
  15. package/dist/adapters/fs.mjs.map +1 -0
  16. package/dist/adapters/git.d.mts +11 -0
  17. package/dist/adapters/git.d.mts.map +1 -0
  18. package/dist/adapters/git.mjs +84 -0
  19. package/dist/adapters/git.mjs.map +1 -0
  20. package/dist/adapters/index.d.mts +7 -0
  21. package/dist/adapters/index.mjs +9 -0
  22. package/dist/adapters/logger.d.mts +18 -0
  23. package/dist/adapters/logger.d.mts.map +1 -0
  24. package/dist/adapters/logger.mjs +81 -0
  25. package/dist/adapters/logger.mjs.map +1 -0
  26. package/dist/adapters/watcher.d.mts +11 -0
  27. package/dist/adapters/watcher.d.mts.map +1 -0
  28. package/dist/adapters/watcher.mjs +74 -0
  29. package/dist/adapters/watcher.mjs.map +1 -0
  30. package/dist/adapters/workspace.d.mts +148 -0
  31. package/dist/adapters/workspace.d.mts.map +1 -0
  32. package/dist/adapters/workspace.mjs +275 -0
  33. package/dist/adapters/workspace.mjs.map +1 -0
  34. package/dist/ai/agents/claude-code-agent.d.mts +22 -0
  35. package/dist/ai/agents/claude-code-agent.d.mts.map +1 -0
  36. package/dist/ai/agents/claude-code-agent.mjs +182 -0
  37. package/dist/ai/agents/claude-code-agent.mjs.map +1 -0
  38. package/dist/ai/agents/cursor-agent.d.mts +68 -0
  39. package/dist/ai/agents/cursor-agent.d.mts.map +1 -0
  40. package/dist/ai/agents/cursor-agent.mjs +436 -0
  41. package/dist/ai/agents/cursor-agent.mjs.map +1 -0
  42. package/dist/ai/agents/index.mjs +7 -0
  43. package/dist/ai/agents/openai-codex-agent.d.mts +22 -0
  44. package/dist/ai/agents/openai-codex-agent.d.mts.map +1 -0
  45. package/dist/ai/agents/openai-codex-agent.mjs +167 -0
  46. package/dist/ai/agents/openai-codex-agent.mjs.map +1 -0
  47. package/dist/ai/agents/orchestrator.d.mts +50 -0
  48. package/dist/ai/agents/orchestrator.d.mts.map +1 -0
  49. package/dist/ai/agents/orchestrator.mjs +143 -0
  50. package/dist/ai/agents/orchestrator.mjs.map +1 -0
  51. package/dist/ai/agents/simple-agent.d.mts +17 -0
  52. package/dist/ai/agents/simple-agent.d.mts.map +1 -0
  53. package/dist/ai/agents/simple-agent.mjs +92 -0
  54. package/dist/ai/agents/simple-agent.mjs.map +1 -0
  55. package/dist/ai/agents/types.d.mts +36 -0
  56. package/dist/ai/agents/types.d.mts.map +1 -0
  57. package/dist/ai/client.d.mts +97 -0
  58. package/dist/ai/client.d.mts.map +1 -0
  59. package/dist/ai/client.mjs +189 -0
  60. package/dist/ai/client.mjs.map +1 -0
  61. package/dist/ai/index.d.mts +9 -0
  62. package/dist/ai/index.mjs +11 -0
  63. package/dist/ai/prompts/code-generation.d.mts +26 -0
  64. package/dist/ai/prompts/code-generation.d.mts.map +1 -0
  65. package/dist/ai/prompts/code-generation.mjs +143 -0
  66. package/dist/ai/prompts/code-generation.mjs.map +1 -0
  67. package/dist/ai/prompts/index.d.mts +10 -0
  68. package/dist/ai/prompts/index.d.mts.map +1 -0
  69. package/dist/ai/prompts/index.mjs +13 -0
  70. package/dist/ai/prompts/index.mjs.map +1 -0
  71. package/dist/ai/prompts/spec-creation.d.mts +29 -0
  72. package/dist/ai/prompts/spec-creation.d.mts.map +1 -0
  73. package/dist/ai/prompts/spec-creation.mjs +111 -0
  74. package/dist/ai/prompts/spec-creation.mjs.map +1 -0
  75. package/dist/ai/providers.d.mts +29 -0
  76. package/dist/ai/providers.d.mts.map +1 -0
  77. package/dist/ai/providers.mjs +39 -0
  78. package/dist/ai/providers.mjs.map +1 -0
  79. package/dist/formatters/index.d.mts +11 -0
  80. package/dist/formatters/index.d.mts.map +1 -0
  81. package/dist/formatters/index.mjs +17 -0
  82. package/dist/formatters/index.mjs.map +1 -0
  83. package/dist/formatters/json.d.mts +56 -0
  84. package/dist/formatters/json.d.mts.map +1 -0
  85. package/dist/formatters/json.mjs +43 -0
  86. package/dist/formatters/json.mjs.map +1 -0
  87. package/dist/formatters/sarif.d.mts +101 -0
  88. package/dist/formatters/sarif.d.mts.map +1 -0
  89. package/dist/formatters/sarif.mjs +163 -0
  90. package/dist/formatters/sarif.mjs.map +1 -0
  91. package/dist/formatters/text.d.mts +35 -0
  92. package/dist/formatters/text.d.mts.map +1 -0
  93. package/dist/formatters/text.mjs +209 -0
  94. package/dist/formatters/text.mjs.map +1 -0
  95. package/dist/index.d.mts +125 -0
  96. package/dist/index.mjs +110 -0
  97. package/dist/ports/ai.d.mts +59 -0
  98. package/dist/ports/ai.d.mts.map +1 -0
  99. package/dist/ports/fs.d.mts +81 -0
  100. package/dist/ports/fs.d.mts.map +1 -0
  101. package/dist/ports/git.d.mts +46 -0
  102. package/dist/ports/git.d.mts.map +1 -0
  103. package/dist/ports/index.d.mts +6 -0
  104. package/dist/ports/logger.d.mts +88 -0
  105. package/dist/ports/logger.d.mts.map +1 -0
  106. package/dist/ports/rulesync.d.mts +38 -0
  107. package/dist/ports/rulesync.d.mts.map +1 -0
  108. package/dist/ports/watcher.d.mts +52 -0
  109. package/dist/ports/watcher.d.mts.map +1 -0
  110. package/dist/services/agent-guide/adapters/claude-code.d.mts +35 -0
  111. package/dist/services/agent-guide/adapters/claude-code.d.mts.map +1 -0
  112. package/dist/services/agent-guide/adapters/claude-code.mjs +144 -0
  113. package/dist/services/agent-guide/adapters/claude-code.mjs.map +1 -0
  114. package/dist/services/agent-guide/adapters/cursor-cli.d.mts +39 -0
  115. package/dist/services/agent-guide/adapters/cursor-cli.d.mts.map +1 -0
  116. package/dist/services/agent-guide/adapters/cursor-cli.mjs +135 -0
  117. package/dist/services/agent-guide/adapters/cursor-cli.mjs.map +1 -0
  118. package/dist/services/agent-guide/adapters/generic-mcp.d.mts +53 -0
  119. package/dist/services/agent-guide/adapters/generic-mcp.d.mts.map +1 -0
  120. package/dist/services/agent-guide/adapters/generic-mcp.mjs +159 -0
  121. package/dist/services/agent-guide/adapters/generic-mcp.mjs.map +1 -0
  122. package/dist/services/agent-guide/adapters/index.d.mts +23 -0
  123. package/dist/services/agent-guide/adapters/index.d.mts.map +1 -0
  124. package/dist/services/agent-guide/adapters/index.mjs +31 -0
  125. package/dist/services/agent-guide/adapters/index.mjs.map +1 -0
  126. package/dist/services/agent-guide/agent-guide-service.d.mts +56 -0
  127. package/dist/services/agent-guide/agent-guide-service.d.mts.map +1 -0
  128. package/dist/services/agent-guide/agent-guide-service.mjs +147 -0
  129. package/dist/services/agent-guide/agent-guide-service.mjs.map +1 -0
  130. package/dist/services/agent-guide/index.d.mts +6 -0
  131. package/dist/services/agent-guide/index.mjs +7 -0
  132. package/dist/services/agent-guide/types.d.mts +58 -0
  133. package/dist/services/agent-guide/types.d.mts.map +1 -0
  134. package/dist/services/build.d.mts +61 -0
  135. package/dist/services/build.d.mts.map +1 -0
  136. package/dist/services/build.mjs +151 -0
  137. package/dist/services/build.mjs.map +1 -0
  138. package/dist/services/ci-check/checks/coverage.mjs +77 -0
  139. package/dist/services/ci-check/checks/coverage.mjs.map +1 -0
  140. package/dist/services/ci-check/checks/deps.mjs +32 -0
  141. package/dist/services/ci-check/checks/deps.mjs.map +1 -0
  142. package/dist/services/ci-check/checks/doctor.mjs +38 -0
  143. package/dist/services/ci-check/checks/doctor.mjs.map +1 -0
  144. package/dist/services/ci-check/checks/drift.mjs +40 -0
  145. package/dist/services/ci-check/checks/drift.mjs.map +1 -0
  146. package/dist/services/ci-check/checks/handlers.mjs +38 -0
  147. package/dist/services/ci-check/checks/handlers.mjs.map +1 -0
  148. package/dist/services/ci-check/checks/implementation.mjs +73 -0
  149. package/dist/services/ci-check/checks/implementation.mjs.map +1 -0
  150. package/dist/services/ci-check/checks/index.mjs +13 -0
  151. package/dist/services/ci-check/checks/integrity.mjs +31 -0
  152. package/dist/services/ci-check/checks/integrity.mjs.map +1 -0
  153. package/dist/services/ci-check/checks/layers.mjs +66 -0
  154. package/dist/services/ci-check/checks/layers.mjs.map +1 -0
  155. package/dist/services/ci-check/checks/structure.mjs +35 -0
  156. package/dist/services/ci-check/checks/structure.mjs.map +1 -0
  157. package/dist/services/ci-check/checks/test-refs.mjs +63 -0
  158. package/dist/services/ci-check/checks/test-refs.mjs.map +1 -0
  159. package/dist/services/ci-check/checks/tests.mjs +38 -0
  160. package/dist/services/ci-check/checks/tests.mjs.map +1 -0
  161. package/dist/services/ci-check/ci-check-service.d.mts +16 -0
  162. package/dist/services/ci-check/ci-check-service.d.mts.map +1 -0
  163. package/dist/services/ci-check/ci-check-service.mjs +129 -0
  164. package/dist/services/ci-check/ci-check-service.mjs.map +1 -0
  165. package/dist/services/ci-check/index.d.mts +2 -0
  166. package/dist/services/ci-check/index.mjs +4 -0
  167. package/dist/services/ci-check/types.d.mts +147 -0
  168. package/dist/services/ci-check/types.d.mts.map +1 -0
  169. package/dist/services/ci-check/types.mjs +37 -0
  170. package/dist/services/ci-check/types.mjs.map +1 -0
  171. package/dist/services/ci-check/utils.mjs +76 -0
  172. package/dist/services/ci-check/utils.mjs.map +1 -0
  173. package/dist/services/clean.d.mts +41 -0
  174. package/dist/services/clean.d.mts.map +1 -0
  175. package/dist/services/clean.mjs +72 -0
  176. package/dist/services/clean.mjs.map +1 -0
  177. package/dist/services/config.d.mts +16 -0
  178. package/dist/services/config.d.mts.map +1 -0
  179. package/dist/services/config.mjs +63 -0
  180. package/dist/services/config.mjs.map +1 -0
  181. package/dist/services/coverage/parsers/index.mjs +34 -0
  182. package/dist/services/coverage/parsers/index.mjs.map +1 -0
  183. package/dist/services/coverage/parsers/istanbul-parser.mjs +108 -0
  184. package/dist/services/coverage/parsers/istanbul-parser.mjs.map +1 -0
  185. package/dist/services/coverage/validator.mjs +55 -0
  186. package/dist/services/coverage/validator.mjs.map +1 -0
  187. package/dist/services/create/ai-generator.d.mts +84 -0
  188. package/dist/services/create/ai-generator.d.mts.map +1 -0
  189. package/dist/services/create/ai-generator.mjs +178 -0
  190. package/dist/services/create/ai-generator.mjs.map +1 -0
  191. package/dist/services/create/index.d.mts +28 -0
  192. package/dist/services/create/index.d.mts.map +1 -0
  193. package/dist/services/create/index.mjs +37 -0
  194. package/dist/services/create/index.mjs.map +1 -0
  195. package/dist/services/create/templates.d.mts +22 -0
  196. package/dist/services/create/templates.d.mts.map +1 -0
  197. package/dist/services/create/templates.mjs +39 -0
  198. package/dist/services/create/templates.mjs.map +1 -0
  199. package/dist/services/deps.d.mts +53 -0
  200. package/dist/services/deps.d.mts.map +1 -0
  201. package/dist/services/deps.mjs +62 -0
  202. package/dist/services/deps.mjs.map +1 -0
  203. package/dist/services/diff.d.mts +34 -0
  204. package/dist/services/diff.d.mts.map +1 -0
  205. package/dist/services/diff.mjs +34 -0
  206. package/dist/services/diff.mjs.map +1 -0
  207. package/dist/services/docs/docs-service.d.mts +20 -0
  208. package/dist/services/docs/docs-service.d.mts.map +1 -0
  209. package/dist/services/docs/docs-service.mjs +59 -0
  210. package/dist/services/docs/docs-service.mjs.map +1 -0
  211. package/dist/services/docs/index.d.mts +1 -0
  212. package/dist/services/docs/index.mjs +3 -0
  213. package/dist/services/doctor/checks/ai.mjs +119 -0
  214. package/dist/services/doctor/checks/ai.mjs.map +1 -0
  215. package/dist/services/doctor/checks/cli.mjs +156 -0
  216. package/dist/services/doctor/checks/cli.mjs.map +1 -0
  217. package/dist/services/doctor/checks/config.mjs +303 -0
  218. package/dist/services/doctor/checks/config.mjs.map +1 -0
  219. package/dist/services/doctor/checks/deps.mjs +267 -0
  220. package/dist/services/doctor/checks/deps.mjs.map +1 -0
  221. package/dist/services/doctor/checks/index.mjs +9 -0
  222. package/dist/services/doctor/checks/layers.mjs +139 -0
  223. package/dist/services/doctor/checks/layers.mjs.map +1 -0
  224. package/dist/services/doctor/checks/mcp.mjs +145 -0
  225. package/dist/services/doctor/checks/mcp.mjs.map +1 -0
  226. package/dist/services/doctor/checks/workspace.mjs +263 -0
  227. package/dist/services/doctor/checks/workspace.mjs.map +1 -0
  228. package/dist/services/doctor/doctor-service.d.mts +24 -0
  229. package/dist/services/doctor/doctor-service.d.mts.map +1 -0
  230. package/dist/services/doctor/doctor-service.mjs +118 -0
  231. package/dist/services/doctor/doctor-service.mjs.map +1 -0
  232. package/dist/services/doctor/index.d.mts +2 -0
  233. package/dist/services/doctor/index.mjs +4 -0
  234. package/dist/services/doctor/types.d.mts +118 -0
  235. package/dist/services/doctor/types.d.mts.map +1 -0
  236. package/dist/services/doctor/types.mjs +29 -0
  237. package/dist/services/doctor/types.mjs.map +1 -0
  238. package/dist/services/drift.mjs +73 -0
  239. package/dist/services/drift.mjs.map +1 -0
  240. package/dist/services/extract.d.mts +12 -0
  241. package/dist/services/extract.d.mts.map +1 -0
  242. package/dist/services/extract.mjs +33 -0
  243. package/dist/services/extract.mjs.map +1 -0
  244. package/dist/services/features/completion.d.mts +21 -0
  245. package/dist/services/features/completion.d.mts.map +1 -0
  246. package/dist/services/features/completion.mjs +70 -0
  247. package/dist/services/features/completion.mjs.map +1 -0
  248. package/dist/services/features/feature-editor.d.mts +27 -0
  249. package/dist/services/features/feature-editor.d.mts.map +1 -0
  250. package/dist/services/features/feature-editor.mjs +37 -0
  251. package/dist/services/features/feature-editor.mjs.map +1 -0
  252. package/dist/services/features/index.d.mts +11 -0
  253. package/dist/services/features/index.d.mts.map +1 -0
  254. package/dist/services/features/index.mjs +16 -0
  255. package/dist/services/features/index.mjs.map +1 -0
  256. package/dist/services/features/validation.d.mts +21 -0
  257. package/dist/services/features/validation.d.mts.map +1 -0
  258. package/dist/services/features/validation.mjs +27 -0
  259. package/dist/services/features/validation.mjs.map +1 -0
  260. package/dist/services/fix/fix-link-formatter.d.mts +12 -0
  261. package/dist/services/fix/fix-link-formatter.d.mts.map +1 -0
  262. package/dist/services/fix/fix-link-formatter.mjs +38 -0
  263. package/dist/services/fix/fix-link-formatter.mjs.map +1 -0
  264. package/dist/services/fix/fix-service.d.mts +74 -0
  265. package/dist/services/fix/fix-service.d.mts.map +1 -0
  266. package/dist/services/fix/fix-service.mjs +169 -0
  267. package/dist/services/fix/fix-service.mjs.map +1 -0
  268. package/dist/services/fix/index.d.mts +16 -0
  269. package/dist/services/fix/index.d.mts.map +1 -0
  270. package/dist/services/fix/index.mjs +24 -0
  271. package/dist/services/fix/index.mjs.map +1 -0
  272. package/dist/services/fix/path-resolver.mjs +83 -0
  273. package/dist/services/fix/path-resolver.mjs.map +1 -0
  274. package/dist/services/fix/schemas.d.mts +17 -0
  275. package/dist/services/fix/schemas.d.mts.map +1 -0
  276. package/dist/services/fix/schemas.mjs +12 -0
  277. package/dist/services/fix/schemas.mjs.map +1 -0
  278. package/dist/services/fix/strategies/implement-ai.d.mts +18 -0
  279. package/dist/services/fix/strategies/implement-ai.d.mts.map +1 -0
  280. package/dist/services/fix/strategies/implement-ai.mjs +139 -0
  281. package/dist/services/fix/strategies/implement-ai.mjs.map +1 -0
  282. package/dist/services/fix/strategies/implement-skeleton.d.mts +14 -0
  283. package/dist/services/fix/strategies/implement-skeleton.d.mts.map +1 -0
  284. package/dist/services/fix/strategies/implement-skeleton.mjs +77 -0
  285. package/dist/services/fix/strategies/implement-skeleton.mjs.map +1 -0
  286. package/dist/services/fix/strategies/index.d.mts +3 -0
  287. package/dist/services/fix/strategies/remove-reference.d.mts +17 -0
  288. package/dist/services/fix/strategies/remove-reference.d.mts.map +1 -0
  289. package/dist/services/fix/strategies/remove-reference.mjs +98 -0
  290. package/dist/services/fix/strategies/remove-reference.mjs.map +1 -0
  291. package/dist/services/fix/types.d.mts +207 -0
  292. package/dist/services/fix/types.d.mts.map +1 -0
  293. package/dist/services/fix/types.mjs +20 -0
  294. package/dist/services/fix/types.mjs.map +1 -0
  295. package/dist/services/formatter.d.mts +15 -0
  296. package/dist/services/formatter.d.mts.map +1 -0
  297. package/dist/services/formatter.mjs +26 -0
  298. package/dist/services/formatter.mjs.map +1 -0
  299. package/dist/services/gap.d.mts +18 -0
  300. package/dist/services/gap.d.mts.map +1 -0
  301. package/dist/services/gap.mjs +44 -0
  302. package/dist/services/gap.mjs.map +1 -0
  303. package/dist/services/generate-artifacts.d.mts +11 -0
  304. package/dist/services/generate-artifacts.d.mts.map +1 -0
  305. package/dist/services/generate-artifacts.mjs +27 -0
  306. package/dist/services/generate-artifacts.mjs.map +1 -0
  307. package/dist/services/hooks/hooks-service.d.mts +24 -0
  308. package/dist/services/hooks/hooks-service.d.mts.map +1 -0
  309. package/dist/services/hooks/hooks-service.mjs +126 -0
  310. package/dist/services/hooks/hooks-service.mjs.map +1 -0
  311. package/dist/services/hooks/index.d.mts +10 -0
  312. package/dist/services/hooks/index.d.mts.map +1 -0
  313. package/dist/services/hooks/index.mjs +12 -0
  314. package/dist/services/hooks/index.mjs.map +1 -0
  315. package/dist/services/hooks/types.d.mts +56 -0
  316. package/dist/services/hooks/types.d.mts.map +1 -0
  317. package/dist/services/impact/formatters.d.mts +27 -0
  318. package/dist/services/impact/formatters.d.mts.map +1 -0
  319. package/dist/services/impact/formatters.mjs +139 -0
  320. package/dist/services/impact/formatters.mjs.map +1 -0
  321. package/dist/services/impact/impact-detection-service.d.mts +22 -0
  322. package/dist/services/impact/impact-detection-service.d.mts.map +1 -0
  323. package/dist/services/impact/impact-detection-service.mjs +96 -0
  324. package/dist/services/impact/impact-detection-service.mjs.map +1 -0
  325. package/dist/services/impact/index.d.mts +11 -0
  326. package/dist/services/impact/index.d.mts.map +1 -0
  327. package/dist/services/impact/index.mjs +16 -0
  328. package/dist/services/impact/index.mjs.map +1 -0
  329. package/dist/services/impact/types.d.mts +63 -0
  330. package/dist/services/impact/types.d.mts.map +1 -0
  331. package/dist/services/implementation/discovery.d.mts +30 -0
  332. package/dist/services/implementation/discovery.d.mts.map +1 -0
  333. package/dist/services/implementation/discovery.mjs +144 -0
  334. package/dist/services/implementation/discovery.mjs.map +1 -0
  335. package/dist/services/implementation/index.d.mts +6 -0
  336. package/dist/services/implementation/index.mjs +7 -0
  337. package/dist/services/implementation/resolver/conventions.d.mts +18 -0
  338. package/dist/services/implementation/resolver/conventions.d.mts.map +1 -0
  339. package/dist/services/implementation/resolver/conventions.mjs +59 -0
  340. package/dist/services/implementation/resolver/conventions.mjs.map +1 -0
  341. package/dist/services/implementation/resolver/index.d.mts +24 -0
  342. package/dist/services/implementation/resolver/index.d.mts.map +1 -0
  343. package/dist/services/implementation/resolver/index.mjs +111 -0
  344. package/dist/services/implementation/resolver/index.mjs.map +1 -0
  345. package/dist/services/implementation/resolver/parsers.d.mts +16 -0
  346. package/dist/services/implementation/resolver/parsers.d.mts.map +1 -0
  347. package/dist/services/implementation/resolver/parsers.mjs +100 -0
  348. package/dist/services/implementation/resolver/parsers.mjs.map +1 -0
  349. package/dist/services/implementation/resolver/status.d.mts +21 -0
  350. package/dist/services/implementation/resolver/status.d.mts.map +1 -0
  351. package/dist/services/implementation/resolver/status.mjs +31 -0
  352. package/dist/services/implementation/resolver/status.mjs.map +1 -0
  353. package/dist/services/implementation/types.d.mts +89 -0
  354. package/dist/services/implementation/types.d.mts.map +1 -0
  355. package/dist/services/index.d.mts +103 -0
  356. package/dist/services/index.mjs +100 -0
  357. package/dist/services/integrity-diagram.d.mts +36 -0
  358. package/dist/services/integrity-diagram.d.mts.map +1 -0
  359. package/dist/services/integrity-diagram.mjs +275 -0
  360. package/dist/services/integrity-diagram.mjs.map +1 -0
  361. package/dist/services/integrity.d.mts +152 -0
  362. package/dist/services/integrity.d.mts.map +1 -0
  363. package/dist/services/integrity.mjs +361 -0
  364. package/dist/services/integrity.mjs.map +1 -0
  365. package/dist/services/layer-discovery.d.mts +77 -0
  366. package/dist/services/layer-discovery.d.mts.map +1 -0
  367. package/dist/services/layer-discovery.mjs +121 -0
  368. package/dist/services/layer-discovery.mjs.map +1 -0
  369. package/dist/services/list.d.mts +37 -0
  370. package/dist/services/list.d.mts.map +1 -0
  371. package/dist/services/list.mjs +46 -0
  372. package/dist/services/list.mjs.map +1 -0
  373. package/dist/services/llm/index.d.mts +28 -0
  374. package/dist/services/llm/index.d.mts.map +1 -0
  375. package/dist/services/llm/index.mjs +187 -0
  376. package/dist/services/llm/index.mjs.map +1 -0
  377. package/dist/services/llm/verify-static.d.mts +26 -0
  378. package/dist/services/llm/verify-static.d.mts.map +1 -0
  379. package/dist/services/llm/verify-static.mjs +82 -0
  380. package/dist/services/llm/verify-static.mjs.map +1 -0
  381. package/dist/services/modules/module-resolver.mjs +61 -0
  382. package/dist/services/modules/module-resolver.mjs.map +1 -0
  383. package/dist/services/openapi/export-service.d.mts +53 -0
  384. package/dist/services/openapi/export-service.d.mts.map +1 -0
  385. package/dist/services/openapi/export-service.mjs +50 -0
  386. package/dist/services/openapi/export-service.mjs.map +1 -0
  387. package/dist/services/openapi/import-service.d.mts +17 -0
  388. package/dist/services/openapi/import-service.d.mts.map +1 -0
  389. package/dist/services/openapi/import-service.mjs +168 -0
  390. package/dist/services/openapi/import-service.mjs.map +1 -0
  391. package/dist/services/openapi/index.d.mts +5 -0
  392. package/dist/services/openapi/index.mjs +6 -0
  393. package/dist/services/openapi/sync-service.d.mts +17 -0
  394. package/dist/services/openapi/sync-service.d.mts.map +1 -0
  395. package/dist/services/openapi/sync-service.mjs +120 -0
  396. package/dist/services/openapi/sync-service.mjs.map +1 -0
  397. package/dist/services/openapi/types.d.mts +162 -0
  398. package/dist/services/openapi/types.d.mts.map +1 -0
  399. package/dist/services/openapi/validate-service.d.mts +16 -0
  400. package/dist/services/openapi/validate-service.d.mts.map +1 -0
  401. package/dist/services/openapi/validate-service.mjs +130 -0
  402. package/dist/services/openapi/validate-service.mjs.map +1 -0
  403. package/dist/services/quickstart/dependencies.d.mts +31 -0
  404. package/dist/services/quickstart/dependencies.d.mts.map +1 -0
  405. package/dist/services/quickstart/dependencies.mjs +57 -0
  406. package/dist/services/quickstart/dependencies.mjs.map +1 -0
  407. package/dist/services/quickstart/index.mjs +4 -0
  408. package/dist/services/quickstart/quickstart-service.d.mts +20 -0
  409. package/dist/services/quickstart/quickstart-service.d.mts.map +1 -0
  410. package/dist/services/quickstart/quickstart-service.mjs +196 -0
  411. package/dist/services/quickstart/quickstart-service.mjs.map +1 -0
  412. package/dist/services/quickstart/types.d.mts +81 -0
  413. package/dist/services/quickstart/types.d.mts.map +1 -0
  414. package/dist/services/regenerator.d.mts +18 -0
  415. package/dist/services/regenerator.d.mts.map +1 -0
  416. package/dist/services/regenerator.mjs +23 -0
  417. package/dist/services/regenerator.mjs.map +1 -0
  418. package/dist/services/registry.d.mts +53 -0
  419. package/dist/services/registry.d.mts.map +1 -0
  420. package/dist/services/registry.mjs +74 -0
  421. package/dist/services/registry.mjs.map +1 -0
  422. package/dist/services/rulesync.d.mts +17 -0
  423. package/dist/services/rulesync.d.mts.map +1 -0
  424. package/dist/services/rulesync.mjs +71 -0
  425. package/dist/services/rulesync.mjs.map +1 -0
  426. package/dist/services/setup/config-generators.d.mts +42 -0
  427. package/dist/services/setup/config-generators.d.mts.map +1 -0
  428. package/dist/services/setup/config-generators.mjs +252 -0
  429. package/dist/services/setup/config-generators.mjs.map +1 -0
  430. package/dist/services/setup/file-merger.d.mts +27 -0
  431. package/dist/services/setup/file-merger.d.mts.map +1 -0
  432. package/dist/services/setup/file-merger.mjs +61 -0
  433. package/dist/services/setup/file-merger.mjs.map +1 -0
  434. package/dist/services/setup/setup-service.d.mts +12 -0
  435. package/dist/services/setup/setup-service.d.mts.map +1 -0
  436. package/dist/services/setup/setup-service.mjs +96 -0
  437. package/dist/services/setup/setup-service.mjs.map +1 -0
  438. package/dist/services/setup/targets/agents-md.mjs +47 -0
  439. package/dist/services/setup/targets/agents-md.mjs.map +1 -0
  440. package/dist/services/setup/targets/cli-config.mjs +60 -0
  441. package/dist/services/setup/targets/cli-config.mjs.map +1 -0
  442. package/dist/services/setup/targets/cursor-rules.mjs +48 -0
  443. package/dist/services/setup/targets/cursor-rules.mjs.map +1 -0
  444. package/dist/services/setup/targets/mcp-claude.mjs +60 -0
  445. package/dist/services/setup/targets/mcp-claude.mjs.map +1 -0
  446. package/dist/services/setup/targets/mcp-cursor.mjs +59 -0
  447. package/dist/services/setup/targets/mcp-cursor.mjs.map +1 -0
  448. package/dist/services/setup/targets/vscode-settings.mjs +63 -0
  449. package/dist/services/setup/targets/vscode-settings.mjs.map +1 -0
  450. package/dist/services/setup/types.d.mts +85 -0
  451. package/dist/services/setup/types.d.mts.map +1 -0
  452. package/dist/services/setup/types.mjs +27 -0
  453. package/dist/services/setup/types.mjs.map +1 -0
  454. package/dist/services/sync.d.mts +42 -0
  455. package/dist/services/sync.d.mts.map +1 -0
  456. package/dist/services/sync.mjs +64 -0
  457. package/dist/services/sync.mjs.map +1 -0
  458. package/dist/services/test/index.d.mts +2 -0
  459. package/dist/services/test/index.mjs +4 -0
  460. package/dist/services/test/test-generator-service.d.mts +24 -0
  461. package/dist/services/test/test-generator-service.d.mts.map +1 -0
  462. package/dist/services/test/test-generator-service.mjs +92 -0
  463. package/dist/services/test/test-generator-service.mjs.map +1 -0
  464. package/dist/services/test/test-service.d.mts +27 -0
  465. package/dist/services/test/test-service.d.mts.map +1 -0
  466. package/dist/services/test/test-service.mjs +94 -0
  467. package/dist/services/test/test-service.mjs.map +1 -0
  468. package/dist/services/test-link/index.d.mts +18 -0
  469. package/dist/services/test-link/index.d.mts.map +1 -0
  470. package/dist/services/test-link/index.mjs +60 -0
  471. package/dist/services/test-link/index.mjs.map +1 -0
  472. package/dist/services/test-link/test-ref-validator.d.mts +2 -0
  473. package/dist/services/test-link/test-ref-validator.mjs +50 -0
  474. package/dist/services/test-link/test-ref-validator.mjs.map +1 -0
  475. package/dist/services/upgrade/index.d.mts +10 -0
  476. package/dist/services/upgrade/index.d.mts.map +1 -0
  477. package/dist/services/upgrade/index.mjs +15 -0
  478. package/dist/services/upgrade/index.mjs.map +1 -0
  479. package/dist/services/upgrade/types.d.mts +78 -0
  480. package/dist/services/upgrade/types.d.mts.map +1 -0
  481. package/dist/services/upgrade/upgrade-service.d.mts +38 -0
  482. package/dist/services/upgrade/upgrade-service.d.mts.map +1 -0
  483. package/dist/services/upgrade/upgrade-service.mjs +201 -0
  484. package/dist/services/upgrade/upgrade-service.mjs.map +1 -0
  485. package/dist/services/validate/blueprint-validator.d.mts +23 -0
  486. package/dist/services/validate/blueprint-validator.d.mts.map +1 -0
  487. package/dist/services/validate/blueprint-validator.mjs +50 -0
  488. package/dist/services/validate/blueprint-validator.mjs.map +1 -0
  489. package/dist/services/validate/implementation-agent-validator.d.mts +20 -0
  490. package/dist/services/validate/implementation-agent-validator.d.mts.map +1 -0
  491. package/dist/services/validate/implementation-agent-validator.mjs +42 -0
  492. package/dist/services/validate/implementation-agent-validator.mjs.map +1 -0
  493. package/dist/services/validate/implementation-validator.d.mts +32 -0
  494. package/dist/services/validate/implementation-validator.d.mts.map +1 -0
  495. package/dist/services/validate/implementation-validator.mjs +64 -0
  496. package/dist/services/validate/implementation-validator.mjs.map +1 -0
  497. package/dist/services/validate/index.d.mts +5 -0
  498. package/dist/services/validate/index.mjs +7 -0
  499. package/dist/services/validate/spec-validator.d.mts +42 -0
  500. package/dist/services/validate/spec-validator.d.mts.map +1 -0
  501. package/dist/services/validate/spec-validator.mjs +49 -0
  502. package/dist/services/validate/spec-validator.mjs.map +1 -0
  503. package/dist/services/validate/tenant-validator.d.mts +21 -0
  504. package/dist/services/validate/tenant-validator.d.mts.map +1 -0
  505. package/dist/services/validate/tenant-validator.mjs +165 -0
  506. package/dist/services/validate/tenant-validator.mjs.map +1 -0
  507. package/dist/services/verification-cache/adapters/filesystem.d.mts +46 -0
  508. package/dist/services/verification-cache/adapters/filesystem.d.mts.map +1 -0
  509. package/dist/services/verification-cache/adapters/filesystem.mjs +120 -0
  510. package/dist/services/verification-cache/adapters/filesystem.mjs.map +1 -0
  511. package/dist/services/verification-cache/adapters/in-memory.d.mts +27 -0
  512. package/dist/services/verification-cache/adapters/in-memory.d.mts.map +1 -0
  513. package/dist/services/verification-cache/adapters/in-memory.mjs +46 -0
  514. package/dist/services/verification-cache/adapters/in-memory.mjs.map +1 -0
  515. package/dist/services/verification-cache/adapters/index.d.mts +3 -0
  516. package/dist/services/verification-cache/adapters/index.mjs +5 -0
  517. package/dist/services/verification-cache/adapters/workspace-state.d.mts +49 -0
  518. package/dist/services/verification-cache/adapters/workspace-state.d.mts.map +1 -0
  519. package/dist/services/verification-cache/adapters/workspace-state.mjs +91 -0
  520. package/dist/services/verification-cache/adapters/workspace-state.mjs.map +1 -0
  521. package/dist/services/verification-cache/cache-service.d.mts +70 -0
  522. package/dist/services/verification-cache/cache-service.d.mts.map +1 -0
  523. package/dist/services/verification-cache/cache-service.mjs +256 -0
  524. package/dist/services/verification-cache/cache-service.mjs.map +1 -0
  525. package/dist/services/verification-cache/index.d.mts +6 -0
  526. package/dist/services/verification-cache/index.mjs +8 -0
  527. package/dist/services/verification-cache/types.d.mts +124 -0
  528. package/dist/services/verification-cache/types.d.mts.map +1 -0
  529. package/dist/services/verification-cache/types.mjs +16 -0
  530. package/dist/services/verification-cache/types.mjs.map +1 -0
  531. package/dist/services/verify/ai-verifier.d.mts +25 -0
  532. package/dist/services/verify/ai-verifier.d.mts.map +1 -0
  533. package/dist/services/verify/ai-verifier.mjs +403 -0
  534. package/dist/services/verify/ai-verifier.mjs.map +1 -0
  535. package/dist/services/verify/behavior-verifier.d.mts +12 -0
  536. package/dist/services/verify/behavior-verifier.d.mts.map +1 -0
  537. package/dist/services/verify/behavior-verifier.mjs +186 -0
  538. package/dist/services/verify/behavior-verifier.mjs.map +1 -0
  539. package/dist/services/verify/index.d.mts +5 -0
  540. package/dist/services/verify/index.mjs +6 -0
  541. package/dist/services/verify/structure-verifier.d.mts +12 -0
  542. package/dist/services/verify/structure-verifier.d.mts.map +1 -0
  543. package/dist/services/verify/structure-verifier.mjs +196 -0
  544. package/dist/services/verify/structure-verifier.mjs.map +1 -0
  545. package/dist/services/verify/types.d.mts +137 -0
  546. package/dist/services/verify/types.d.mts.map +1 -0
  547. package/dist/services/verify/verify-service.d.mts +60 -0
  548. package/dist/services/verify/verify-service.d.mts.map +1 -0
  549. package/dist/services/verify/verify-service.mjs +204 -0
  550. package/dist/services/verify/verify-service.mjs.map +1 -0
  551. package/dist/services/versioning/changelog-formatter.d.mts +24 -0
  552. package/dist/services/versioning/changelog-formatter.d.mts.map +1 -0
  553. package/dist/services/versioning/changelog-formatter.mjs +155 -0
  554. package/dist/services/versioning/changelog-formatter.mjs.map +1 -0
  555. package/dist/services/versioning/conventional-commits.d.mts +95 -0
  556. package/dist/services/versioning/conventional-commits.d.mts.map +1 -0
  557. package/dist/services/versioning/conventional-commits.mjs +184 -0
  558. package/dist/services/versioning/conventional-commits.mjs.map +1 -0
  559. package/dist/services/versioning/index.d.mts +12 -0
  560. package/dist/services/versioning/index.d.mts.map +1 -0
  561. package/dist/services/versioning/index.mjs +28 -0
  562. package/dist/services/versioning/index.mjs.map +1 -0
  563. package/dist/services/versioning/types.d.mts +135 -0
  564. package/dist/services/versioning/types.d.mts.map +1 -0
  565. package/dist/services/versioning/versioning-service.d.mts +74 -0
  566. package/dist/services/versioning/versioning-service.d.mts.map +1 -0
  567. package/dist/services/versioning/versioning-service.mjs +501 -0
  568. package/dist/services/versioning/versioning-service.mjs.map +1 -0
  569. package/dist/services/vibe/config.d.mts +12 -0
  570. package/dist/services/vibe/config.d.mts.map +1 -0
  571. package/dist/services/vibe/config.mjs +43 -0
  572. package/dist/services/vibe/config.mjs.map +1 -0
  573. package/dist/services/vibe/context.d.mts +19 -0
  574. package/dist/services/vibe/context.d.mts.map +1 -0
  575. package/dist/services/vibe/context.mjs +92 -0
  576. package/dist/services/vibe/context.mjs.map +1 -0
  577. package/dist/services/vibe/definitions.d.mts +8 -0
  578. package/dist/services/vibe/definitions.d.mts.map +1 -0
  579. package/dist/services/vibe/definitions.mjs +129 -0
  580. package/dist/services/vibe/definitions.mjs.map +1 -0
  581. package/dist/services/vibe/engine.d.mts +44 -0
  582. package/dist/services/vibe/engine.d.mts.map +1 -0
  583. package/dist/services/vibe/engine.mjs +147 -0
  584. package/dist/services/vibe/engine.mjs.map +1 -0
  585. package/dist/services/vibe/index.d.mts +15 -0
  586. package/dist/services/vibe/index.d.mts.map +1 -0
  587. package/dist/services/vibe/index.mjs +26 -0
  588. package/dist/services/vibe/index.mjs.map +1 -0
  589. package/dist/services/vibe/loader.d.mts +15 -0
  590. package/dist/services/vibe/loader.d.mts.map +1 -0
  591. package/dist/services/vibe/loader.mjs +48 -0
  592. package/dist/services/vibe/loader.mjs.map +1 -0
  593. package/dist/services/vibe/pack.d.mts +19 -0
  594. package/dist/services/vibe/pack.d.mts.map +1 -0
  595. package/dist/services/vibe/pack.mjs +66 -0
  596. package/dist/services/vibe/pack.mjs.map +1 -0
  597. package/dist/services/vibe/types.d.mts +59 -0
  598. package/dist/services/vibe/types.d.mts.map +1 -0
  599. package/dist/services/vibe/types.mjs +12 -0
  600. package/dist/services/vibe/types.mjs.map +1 -0
  601. package/dist/services/view/index.d.mts +11 -0
  602. package/dist/services/view/index.d.mts.map +1 -0
  603. package/dist/services/view/index.mjs +119 -0
  604. package/dist/services/view/index.mjs.map +1 -0
  605. package/dist/services/watch.d.mts +25 -0
  606. package/dist/services/watch.d.mts.map +1 -0
  607. package/dist/services/watch.mjs +33 -0
  608. package/dist/services/watch.mjs.map +1 -0
  609. package/dist/services/workspace-info.d.mts +62 -0
  610. package/dist/services/workspace-info.d.mts.map +1 -0
  611. package/dist/services/workspace-info.mjs +103 -0
  612. package/dist/services/workspace-info.mjs.map +1 -0
  613. package/dist/templates/app-config.template.d.mts +7 -0
  614. package/dist/templates/app-config.template.d.mts.map +1 -0
  615. package/dist/templates/app-config.template.mjs +107 -0
  616. package/dist/templates/app-config.template.mjs.map +1 -0
  617. package/dist/templates/data-view.template.d.mts +7 -0
  618. package/dist/templates/data-view.template.d.mts.map +1 -0
  619. package/dist/templates/data-view.template.mjs +70 -0
  620. package/dist/templates/data-view.template.mjs.map +1 -0
  621. package/dist/templates/event.template.d.mts +11 -0
  622. package/dist/templates/event.template.d.mts.map +1 -0
  623. package/dist/templates/event.template.mjs +42 -0
  624. package/dist/templates/event.template.mjs.map +1 -0
  625. package/dist/templates/experiment.template.d.mts +7 -0
  626. package/dist/templates/experiment.template.d.mts.map +1 -0
  627. package/dist/templates/experiment.template.mjs +89 -0
  628. package/dist/templates/experiment.template.mjs.map +1 -0
  629. package/dist/templates/feature.template.d.mts +33 -0
  630. package/dist/templates/feature.template.d.mts.map +1 -0
  631. package/dist/templates/feature.template.mjs +52 -0
  632. package/dist/templates/feature.template.mjs.map +1 -0
  633. package/dist/templates/fix/skeleton-capability.mjs +49 -0
  634. package/dist/templates/fix/skeleton-capability.mjs.map +1 -0
  635. package/dist/templates/fix/skeleton-event.mjs +56 -0
  636. package/dist/templates/fix/skeleton-event.mjs.map +1 -0
  637. package/dist/templates/fix/skeleton-operation.mjs +122 -0
  638. package/dist/templates/fix/skeleton-operation.mjs.map +1 -0
  639. package/dist/templates/fix/skeleton-presentation.mjs +65 -0
  640. package/dist/templates/fix/skeleton-presentation.mjs.map +1 -0
  641. package/dist/templates/fix/utils.mjs +34 -0
  642. package/dist/templates/fix/utils.mjs.map +1 -0
  643. package/dist/templates/handler.template.d.mts +16 -0
  644. package/dist/templates/handler.template.d.mts.map +1 -0
  645. package/dist/templates/handler.template.mjs +100 -0
  646. package/dist/templates/handler.template.mjs.map +1 -0
  647. package/dist/templates/index.d.mts +22 -0
  648. package/dist/templates/index.d.mts.map +1 -0
  649. package/dist/templates/index.mjs +39 -0
  650. package/dist/templates/index.mjs.map +1 -0
  651. package/dist/templates/integration.template.d.mts +7 -0
  652. package/dist/templates/integration.template.d.mts.map +1 -0
  653. package/dist/templates/integration.template.mjs +160 -0
  654. package/dist/templates/integration.template.mjs.map +1 -0
  655. package/dist/templates/knowledge.template.d.mts +7 -0
  656. package/dist/templates/knowledge.template.d.mts.map +1 -0
  657. package/dist/templates/knowledge.template.mjs +75 -0
  658. package/dist/templates/knowledge.template.mjs.map +1 -0
  659. package/dist/templates/migration.template.d.mts +7 -0
  660. package/dist/templates/migration.template.d.mts.map +1 -0
  661. package/dist/templates/migration.template.mjs +62 -0
  662. package/dist/templates/migration.template.mjs.map +1 -0
  663. package/dist/templates/operation.template.d.mts +11 -0
  664. package/dist/templates/operation.template.d.mts.map +1 -0
  665. package/dist/templates/operation.template.mjs +107 -0
  666. package/dist/templates/operation.template.mjs.map +1 -0
  667. package/dist/templates/presentation.template.d.mts +11 -0
  668. package/dist/templates/presentation.template.d.mts.map +1 -0
  669. package/dist/templates/presentation.template.mjs +80 -0
  670. package/dist/templates/presentation.template.mjs.map +1 -0
  671. package/dist/templates/telemetry.template.d.mts +7 -0
  672. package/dist/templates/telemetry.template.d.mts.map +1 -0
  673. package/dist/templates/telemetry.template.mjs +91 -0
  674. package/dist/templates/telemetry.template.mjs.map +1 -0
  675. package/dist/templates/workflow-runner.template.d.mts +16 -0
  676. package/dist/templates/workflow-runner.template.d.mts.map +1 -0
  677. package/dist/templates/workflow-runner.template.mjs +50 -0
  678. package/dist/templates/workflow-runner.template.mjs.map +1 -0
  679. package/dist/templates/workflow.template.d.mts +7 -0
  680. package/dist/templates/workflow.template.d.mts.map +1 -0
  681. package/dist/templates/workflow.template.mjs +69 -0
  682. package/dist/templates/workflow.template.mjs.map +1 -0
  683. package/dist/types/config.d.mts +34 -0
  684. package/dist/types/config.d.mts.map +1 -0
  685. package/dist/types.d.mts +324 -0
  686. package/dist/types.d.mts.map +1 -0
  687. package/dist/utils/filter.d.mts +16 -0
  688. package/dist/utils/filter.d.mts.map +1 -0
  689. package/dist/utils/filter.mjs +22 -0
  690. package/dist/utils/filter.mjs.map +1 -0
  691. package/dist/utils/index.d.mts +11 -0
  692. package/dist/utils/index.d.mts.map +1 -0
  693. package/dist/utils/index.mjs +20 -0
  694. package/dist/utils/index.mjs.map +1 -0
  695. package/dist/utils/module-loader.d.mts +5 -0
  696. package/dist/utils/module-loader.d.mts.map +1 -0
  697. package/dist/utils/module-loader.mjs +41 -0
  698. package/dist/utils/module-loader.mjs.map +1 -0
  699. package/dist/utils/validation.d.mts +37 -0
  700. package/dist/utils/validation.d.mts.map +1 -0
  701. package/dist/utils/validation.mjs +43 -0
  702. package/dist/utils/validation.mjs.map +1 -0
  703. package/package.json +76 -0
@@ -0,0 +1,126 @@
1
+ import { findWorkspaceRoot } from "../../adapters/workspace.mjs";
2
+ import { exec } from "node:child_process";
3
+ import { promisify } from "node:util";
4
+
5
+ //#region src/services/hooks/hooks-service.ts
6
+ /**
7
+ * Hooks service.
8
+ *
9
+ * Runs git hook checks configured in .contractsrc.json.
10
+ * This service is platform-agnostic and can be used by CLI, VSCode, or other apps.
11
+ *
12
+ * @module services/hooks
13
+ */
14
+ const execAsync = promisify(exec);
15
+ /**
16
+ * Run a configured git hook.
17
+ *
18
+ * Note: Uses node:child_process for compatibility with VSCode (Node.js) and CLI (Bun).
19
+ * Although Bun shell ($) is preferred for scripts, this shared bundle must support both runtimes.
20
+ */
21
+ async function runHook(adapters, options) {
22
+ const { fs, logger } = adapters;
23
+ const { hookName, dryRun = false } = options;
24
+ const workspaceRoot = findWorkspaceRoot(options.workspaceRoot);
25
+ logger.info(`Running hook: ${hookName}`, {
26
+ workspaceRoot,
27
+ dryRun
28
+ });
29
+ const hooksConfig = await loadHooksConfig(fs, workspaceRoot);
30
+ if (!hooksConfig) return {
31
+ hookName,
32
+ success: false,
33
+ commandResults: [],
34
+ totalCommands: 0,
35
+ successfulCommands: 0,
36
+ summary: "No hooks configuration found in .contractsrc.json"
37
+ };
38
+ const commands = hooksConfig[hookName];
39
+ if (!commands || commands.length === 0) return {
40
+ hookName,
41
+ success: true,
42
+ commandResults: [],
43
+ totalCommands: 0,
44
+ successfulCommands: 0,
45
+ summary: `No commands configured for hook: ${hookName}`
46
+ };
47
+ logger.info(`Found ${commands.length} command(s) for ${hookName}`);
48
+ const commandResults = [];
49
+ let allSuccess = true;
50
+ for (const command of commands) {
51
+ if (dryRun) {
52
+ logger.info(`[DRY RUN] Would execute: ${command}`);
53
+ commandResults.push({
54
+ command,
55
+ success: true,
56
+ exitCode: 0,
57
+ stdout: "",
58
+ stderr: ""
59
+ });
60
+ continue;
61
+ }
62
+ logger.info(`Executing: ${command}`);
63
+ try {
64
+ const { stdout, stderr } = await execAsync(command, {
65
+ cwd: workspaceRoot,
66
+ timeout: 3e5
67
+ });
68
+ commandResults.push({
69
+ command,
70
+ success: true,
71
+ exitCode: 0,
72
+ stdout,
73
+ stderr
74
+ });
75
+ logger.info(`✓ ${command}`);
76
+ } catch (error) {
77
+ allSuccess = false;
78
+ const execError = error;
79
+ commandResults.push({
80
+ command,
81
+ success: false,
82
+ exitCode: execError.code ?? 1,
83
+ stdout: execError.stdout ?? "",
84
+ stderr: execError.stderr ?? execError.message ?? String(error)
85
+ });
86
+ logger.error(`✗ ${command}`, {
87
+ exitCode: execError.code,
88
+ stderr: execError.stderr
89
+ });
90
+ break;
91
+ }
92
+ }
93
+ const successfulCommands = commandResults.filter((r) => r.success).length;
94
+ return {
95
+ hookName,
96
+ success: allSuccess,
97
+ commandResults,
98
+ totalCommands: commands.length,
99
+ successfulCommands,
100
+ summary: allSuccess ? `✓ All ${commands.length} command(s) passed` : `✗ ${successfulCommands}/${commands.length} command(s) passed`
101
+ };
102
+ }
103
+ /**
104
+ * Get available hooks from configuration.
105
+ */
106
+ async function getAvailableHooks(adapters, workspaceRoot) {
107
+ const hooksConfig = await loadHooksConfig(adapters.fs, workspaceRoot);
108
+ return hooksConfig ? Object.keys(hooksConfig) : [];
109
+ }
110
+ /**
111
+ * Load hooks configuration from .contractsrc.json.
112
+ */
113
+ async function loadHooksConfig(fs, workspaceRoot) {
114
+ const configPath = fs.join(workspaceRoot, ".contractsrc.json");
115
+ if (!await fs.exists(configPath)) return null;
116
+ try {
117
+ const content = await fs.readFile(configPath);
118
+ return JSON.parse(content).hooks ?? null;
119
+ } catch {
120
+ return null;
121
+ }
122
+ }
123
+
124
+ //#endregion
125
+ export { getAvailableHooks, runHook };
126
+ //# sourceMappingURL=hooks-service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-service.mjs","names":[],"sources":["../../../src/services/hooks/hooks-service.ts"],"sourcesContent":["/**\n * Hooks service.\n *\n * Runs git hook checks configured in .contractsrc.json.\n * This service is platform-agnostic and can be used by CLI, VSCode, or other apps.\n *\n * @module services/hooks\n */\n\nimport { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { FsAdapter } from '../../ports/fs';\nimport type { LoggerAdapter } from '../../ports/logger';\nimport { findWorkspaceRoot } from '../../adapters/workspace';\nimport type {\n HookRunOptions,\n HookRunResult,\n HookCommandResult,\n HooksConfig,\n} from './types';\n\nconst execAsync = promisify(exec);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Adapters Type\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface ServiceAdapters {\n fs: FsAdapter;\n logger: LoggerAdapter;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Run Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Run a configured git hook.\n *\n * Note: Uses node:child_process for compatibility with VSCode (Node.js) and CLI (Bun).\n * Although Bun shell ($) is preferred for scripts, this shared bundle must support both runtimes.\n */\nexport async function runHook(\n adapters: ServiceAdapters,\n options: HookRunOptions\n): Promise<HookRunResult> {\n const { fs, logger } = adapters;\n const { hookName, dryRun = false } = options;\n const workspaceRoot = findWorkspaceRoot(options.workspaceRoot);\n\n logger.info(`Running hook: ${hookName}`, { workspaceRoot, dryRun });\n\n // Load hooks config\n const hooksConfig = await loadHooksConfig(fs, workspaceRoot);\n\n if (!hooksConfig) {\n return {\n hookName,\n success: false,\n commandResults: [],\n totalCommands: 0,\n successfulCommands: 0,\n summary: 'No hooks configuration found in .contractsrc.json',\n };\n }\n\n const commands = hooksConfig[hookName];\n\n if (!commands || commands.length === 0) {\n return {\n hookName,\n success: true,\n commandResults: [],\n totalCommands: 0,\n successfulCommands: 0,\n summary: `No commands configured for hook: ${hookName}`,\n };\n }\n\n logger.info(`Found ${commands.length} command(s) for ${hookName}`);\n\n const commandResults: HookCommandResult[] = [];\n let allSuccess = true;\n\n for (const command of commands) {\n if (dryRun) {\n logger.info(`[DRY RUN] Would execute: ${command}`);\n commandResults.push({\n command,\n success: true,\n exitCode: 0,\n stdout: '',\n stderr: '',\n });\n continue;\n }\n\n logger.info(`Executing: ${command}`);\n\n try {\n const { stdout, stderr } = await execAsync(command, {\n cwd: workspaceRoot,\n timeout: 300_000, // 5 minute timeout\n });\n\n commandResults.push({\n command,\n success: true,\n exitCode: 0,\n stdout,\n stderr,\n });\n\n logger.info(`✓ ${command}`);\n } catch (error) {\n allSuccess = false;\n\n const execError = error as {\n code?: number;\n stdout?: string;\n stderr?: string;\n message?: string;\n };\n\n commandResults.push({\n command,\n success: false,\n exitCode: execError.code ?? 1,\n stdout: execError.stdout ?? '',\n stderr: execError.stderr ?? execError.message ?? String(error),\n });\n\n logger.error(`✗ ${command}`, {\n exitCode: execError.code,\n stderr: execError.stderr,\n });\n\n // Stop on first failure\n break;\n }\n }\n\n const successfulCommands = commandResults.filter((r) => r.success).length;\n\n return {\n hookName,\n success: allSuccess,\n commandResults,\n totalCommands: commands.length,\n successfulCommands,\n summary: allSuccess\n ? `✓ All ${commands.length} command(s) passed`\n : `✗ ${successfulCommands}/${commands.length} command(s) passed`,\n };\n}\n\n/**\n * Get available hooks from configuration.\n */\nexport async function getAvailableHooks(\n adapters: ServiceAdapters,\n workspaceRoot: string\n): Promise<string[]> {\n const hooksConfig = await loadHooksConfig(adapters.fs, workspaceRoot);\n return hooksConfig ? Object.keys(hooksConfig) : [];\n}\n\n/**\n * Load hooks configuration from .contractsrc.json.\n */\nasync function loadHooksConfig(\n fs: FsAdapter,\n workspaceRoot: string\n): Promise<HooksConfig | null> {\n const configPath = fs.join(workspaceRoot, '.contractsrc.json');\n\n if (!(await fs.exists(configPath))) {\n return null;\n }\n\n try {\n const content = await fs.readFile(configPath);\n const config = JSON.parse(content) as { hooks?: HooksConfig };\n return config.hooks ?? null;\n } catch {\n return null;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAqBA,MAAM,YAAY,UAAU,KAAK;;;;;;;AAqBjC,eAAsB,QACpB,UACA,SACwB;CACxB,MAAM,EAAE,IAAI,WAAW;CACvB,MAAM,EAAE,UAAU,SAAS,UAAU;CACrC,MAAM,gBAAgB,kBAAkB,QAAQ,cAAc;AAE9D,QAAO,KAAK,iBAAiB,YAAY;EAAE;EAAe;EAAQ,CAAC;CAGnE,MAAM,cAAc,MAAM,gBAAgB,IAAI,cAAc;AAE5D,KAAI,CAAC,YACH,QAAO;EACL;EACA,SAAS;EACT,gBAAgB,EAAE;EAClB,eAAe;EACf,oBAAoB;EACpB,SAAS;EACV;CAGH,MAAM,WAAW,YAAY;AAE7B,KAAI,CAAC,YAAY,SAAS,WAAW,EACnC,QAAO;EACL;EACA,SAAS;EACT,gBAAgB,EAAE;EAClB,eAAe;EACf,oBAAoB;EACpB,SAAS,oCAAoC;EAC9C;AAGH,QAAO,KAAK,SAAS,SAAS,OAAO,kBAAkB,WAAW;CAElE,MAAM,iBAAsC,EAAE;CAC9C,IAAI,aAAa;AAEjB,MAAK,MAAM,WAAW,UAAU;AAC9B,MAAI,QAAQ;AACV,UAAO,KAAK,4BAA4B,UAAU;AAClD,kBAAe,KAAK;IAClB;IACA,SAAS;IACT,UAAU;IACV,QAAQ;IACR,QAAQ;IACT,CAAC;AACF;;AAGF,SAAO,KAAK,cAAc,UAAU;AAEpC,MAAI;GACF,MAAM,EAAE,QAAQ,WAAW,MAAM,UAAU,SAAS;IAClD,KAAK;IACL,SAAS;IACV,CAAC;AAEF,kBAAe,KAAK;IAClB;IACA,SAAS;IACT,UAAU;IACV;IACA;IACD,CAAC;AAEF,UAAO,KAAK,KAAK,UAAU;WACpB,OAAO;AACd,gBAAa;GAEb,MAAM,YAAY;AAOlB,kBAAe,KAAK;IAClB;IACA,SAAS;IACT,UAAU,UAAU,QAAQ;IAC5B,QAAQ,UAAU,UAAU;IAC5B,QAAQ,UAAU,UAAU,UAAU,WAAW,OAAO,MAAM;IAC/D,CAAC;AAEF,UAAO,MAAM,KAAK,WAAW;IAC3B,UAAU,UAAU;IACpB,QAAQ,UAAU;IACnB,CAAC;AAGF;;;CAIJ,MAAM,qBAAqB,eAAe,QAAQ,MAAM,EAAE,QAAQ,CAAC;AAEnE,QAAO;EACL;EACA,SAAS;EACT;EACA,eAAe,SAAS;EACxB;EACA,SAAS,aACL,SAAS,SAAS,OAAO,sBACzB,KAAK,mBAAmB,GAAG,SAAS,OAAO;EAChD;;;;;AAMH,eAAsB,kBACpB,UACA,eACmB;CACnB,MAAM,cAAc,MAAM,gBAAgB,SAAS,IAAI,cAAc;AACrE,QAAO,cAAc,OAAO,KAAK,YAAY,GAAG,EAAE;;;;;AAMpD,eAAe,gBACb,IACA,eAC6B;CAC7B,MAAM,aAAa,GAAG,KAAK,eAAe,oBAAoB;AAE9D,KAAI,CAAE,MAAM,GAAG,OAAO,WAAW,CAC/B,QAAO;AAGT,KAAI;EACF,MAAM,UAAU,MAAM,GAAG,SAAS,WAAW;AAE7C,SADe,KAAK,MAAM,QAAQ,CACpB,SAAS;SACjB;AACN,SAAO"}
@@ -0,0 +1,10 @@
1
+ import { HookCommandResult, HookRunOptions, HookRunResult, HooksConfig } from "./types.mjs";
2
+ import { getAvailableHooks, runHook } from "./hooks-service.mjs";
3
+
4
+ //#region src/services/hooks/index.d.ts
5
+ declare namespace index_d_exports {
6
+ export { HookCommandResult, HookRunOptions, HookRunResult, HooksConfig, getAvailableHooks, runHook };
7
+ }
8
+ //#endregion
9
+ export { index_d_exports };
10
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/hooks/index.ts"],"sourcesContent":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { __exportAll } from "../../_virtual/rolldown_runtime.mjs";
2
+ import { getAvailableHooks, runHook } from "./hooks-service.mjs";
3
+
4
+ //#region src/services/hooks/index.ts
5
+ var hooks_exports = /* @__PURE__ */ __exportAll({
6
+ getAvailableHooks: () => getAvailableHooks,
7
+ runHook: () => runHook
8
+ });
9
+
10
+ //#endregion
11
+ export { hooks_exports };
12
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/hooks/index.ts"],"sourcesContent":["/**\n * Hooks service module.\n *\n * Provides hook execution for git hooks configured in .contractsrc.json.\n */\n\nexport * from './types';\nexport { runHook, getAvailableHooks } from './hooks-service';\n"],"mappings":""}
@@ -0,0 +1,56 @@
1
+ //#region src/services/hooks/types.d.ts
2
+ /**
3
+ * Hooks service types.
4
+ *
5
+ * Types for running git hook checks configured in .contractsrc.json.
6
+ */
7
+ /**
8
+ * Options for running hooks.
9
+ */
10
+ interface HookRunOptions {
11
+ /** Name of the hook to run (e.g., 'pre-commit'). */
12
+ hookName: string;
13
+ /** Workspace root directory. */
14
+ workspaceRoot: string;
15
+ /** If true, show commands without executing. */
16
+ dryRun?: boolean;
17
+ }
18
+ /**
19
+ * Result of a single command execution.
20
+ */
21
+ interface HookCommandResult {
22
+ /** The command that was executed. */
23
+ command: string;
24
+ /** Whether the command succeeded. */
25
+ success: boolean;
26
+ /** Exit code. */
27
+ exitCode: number;
28
+ /** stdout output. */
29
+ stdout: string;
30
+ /** stderr output. */
31
+ stderr: string;
32
+ }
33
+ /**
34
+ * Result of running a hook.
35
+ */
36
+ interface HookRunResult {
37
+ /** Hook name that was run. */
38
+ hookName: string;
39
+ /** Whether all commands succeeded. */
40
+ success: boolean;
41
+ /** Results for each command. */
42
+ commandResults: HookCommandResult[];
43
+ /** Total commands executed. */
44
+ totalCommands: number;
45
+ /** Number of successful commands. */
46
+ successfulCommands: number;
47
+ /** Summary message. */
48
+ summary: string;
49
+ }
50
+ /**
51
+ * Hooks configuration from .contractsrc.json.
52
+ */
53
+ type HooksConfig = Record<string, string[]>;
54
+ //#endregion
55
+ export { HookCommandResult, HookRunOptions, HookRunResult, HooksConfig };
56
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/services/hooks/types.ts"],"sourcesContent":[],"mappings":";;AASA;AAYA;AAgBA;AAkBA;;;;UA9CiB,cAAA;;;;;;;;;;;UAYA,iBAAA;;;;;;;;;;;;;;;UAgBA,aAAA;;;;;;kBAMC;;;;;;;;;;;KAYN,WAAA,GAAc"}
@@ -0,0 +1,27 @@
1
+ import { CheckRunPayload, PrCommentOptions } from "./types.mjs";
2
+ import { ImpactResult } from "@contractspec/module.workspace";
3
+
4
+ //#region src/services/impact/formatters.d.ts
5
+
6
+ /**
7
+ * Format impact result as a PR comment (markdown).
8
+ */
9
+ declare function formatPrComment(result: ImpactResult, options?: PrCommentOptions): string;
10
+ /**
11
+ * Format impact result for minimal PR comment.
12
+ */
13
+ declare function formatMinimalComment(result: ImpactResult): string;
14
+ /**
15
+ * Format impact result as GitHub check run payload.
16
+ */
17
+ declare function formatCheckRun(result: ImpactResult, headSha: string, options?: {
18
+ key?: string;
19
+ failOnBreaking?: boolean;
20
+ }): CheckRunPayload;
21
+ /**
22
+ * Format impact result as JSON (v1.0).
23
+ */
24
+ declare function formatJson(result: ImpactResult): string;
25
+ //#endregion
26
+ export { formatCheckRun, formatJson, formatMinimalComment, formatPrComment };
27
+ //# sourceMappingURL=formatters.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.mts","names":[],"sources":["../../../src/services/impact/formatters.ts"],"sourcesContent":[],"mappings":";;;;;;;;iBAegB,eAAA,SACN,wBACC;;;;iBA8HK,oBAAA,SAA6B;;;;iBAa7B,cAAA,SACN;;;IAGP;;;;iBA8Da,UAAA,SAAmB"}
@@ -0,0 +1,139 @@
1
+ //#region src/services/impact/formatters.ts
2
+ /**
3
+ * Format impact result as a PR comment (markdown).
4
+ */
5
+ function formatPrComment(result, options = { template: "detailed" }) {
6
+ const lines = [];
7
+ lines.push("## 📋 ContractSpec Impact Analysis");
8
+ lines.push("");
9
+ if (result.hasBreaking) lines.push("❌ **Breaking changes detected**");
10
+ else if (result.hasNonBreaking) lines.push("⚠️ **Contract changed (non-breaking)**");
11
+ else lines.push("✅ **No contract impact**");
12
+ lines.push("");
13
+ if (result.summary.breaking > 0 || result.summary.nonBreaking > 0 || result.summary.info > 0) {
14
+ lines.push("### Summary");
15
+ lines.push("");
16
+ lines.push(`| Type | Count |`);
17
+ lines.push(`|------|-------|`);
18
+ if (result.summary.breaking > 0) lines.push(`| 🔴 Breaking | ${result.summary.breaking} |`);
19
+ if (result.summary.nonBreaking > 0) lines.push(`| 🟡 Non-breaking | ${result.summary.nonBreaking} |`);
20
+ if (result.summary.info > 0) lines.push(`| 🔵 Info | ${result.summary.info} |`);
21
+ if (result.summary.added > 0) lines.push(`| ➕ Added | ${result.summary.added} |`);
22
+ if (result.summary.removed > 0) lines.push(`| ➖ Removed | ${result.summary.removed} |`);
23
+ lines.push("");
24
+ }
25
+ if (options.template === "detailed" && result.deltas.length > 0) {
26
+ lines.push("### Changes");
27
+ lines.push("");
28
+ const breaking = result.deltas.filter((d) => d.severity === "breaking");
29
+ const nonBreaking = result.deltas.filter((d) => d.severity === "non_breaking");
30
+ if (breaking.length > 0) {
31
+ lines.push("#### 🔴 Breaking Changes");
32
+ lines.push("");
33
+ for (const delta of breaking) lines.push(`- **${delta.specKey}**: ${delta.description}`);
34
+ lines.push("");
35
+ }
36
+ if (nonBreaking.length > 0) {
37
+ lines.push("#### 🟡 Non-breaking Changes");
38
+ lines.push("");
39
+ for (const delta of nonBreaking) lines.push(`- **${delta.specKey}**: ${delta.description}`);
40
+ lines.push("");
41
+ }
42
+ }
43
+ if (result.addedSpecs.length > 0) {
44
+ lines.push("### Added Specs");
45
+ lines.push("");
46
+ for (const spec of result.addedSpecs) lines.push(`- \`${spec.key}\` v${spec.version} (${spec.type})`);
47
+ lines.push("");
48
+ }
49
+ if (result.removedSpecs.length > 0) {
50
+ lines.push("### Removed Specs");
51
+ lines.push("");
52
+ for (const spec of result.removedSpecs) lines.push(`- \`${spec.key}\` v${spec.version} (${spec.type})`);
53
+ lines.push("");
54
+ }
55
+ if (options.drift) if (options.drift.hasDrift) {
56
+ lines.push("### ⚠️ Drift Detected");
57
+ lines.push("");
58
+ lines.push("The following generated files are out of sync with their specs:");
59
+ lines.push("");
60
+ for (const file of options.drift.files) lines.push(`- \`${file}\``);
61
+ lines.push("");
62
+ lines.push("Run `contractspec generate` to regenerate artifacts.");
63
+ lines.push("");
64
+ } else {
65
+ lines.push("### ✅ No Drift Detected");
66
+ lines.push("");
67
+ }
68
+ lines.push("---");
69
+ lines.push(`*Generated by ContractSpec at ${result.timestamp}*`);
70
+ return lines.join("\n");
71
+ }
72
+ /**
73
+ * Format impact result for minimal PR comment.
74
+ */
75
+ function formatMinimalComment(result) {
76
+ if (result.hasBreaking) return `❌ **Breaking changes detected** (${result.summary.breaking} breaking, ${result.summary.nonBreaking} non-breaking)`;
77
+ if (result.hasNonBreaking) return `⚠️ **Contract changed** (${result.summary.nonBreaking} non-breaking changes)`;
78
+ return "✅ **No contract impact**";
79
+ }
80
+ /**
81
+ * Format impact result as GitHub check run payload.
82
+ */
83
+ function formatCheckRun(result, headSha, options = {}) {
84
+ const name = options.key ?? "ContractSpec Impact";
85
+ const failOnBreaking = options.failOnBreaking ?? true;
86
+ let conclusion;
87
+ let title;
88
+ if (result.hasBreaking) {
89
+ conclusion = failOnBreaking ? "failure" : "neutral";
90
+ title = `Breaking changes detected (${result.summary.breaking})`;
91
+ } else if (result.hasNonBreaking) {
92
+ conclusion = "success";
93
+ title = `Non-breaking changes (${result.summary.nonBreaking})`;
94
+ } else {
95
+ conclusion = "success";
96
+ title = "No contract impact";
97
+ }
98
+ const summary = formatMinimalComment(result);
99
+ return {
100
+ name,
101
+ headSha,
102
+ conclusion,
103
+ title,
104
+ summary,
105
+ annotations: result.deltas.filter((d) => d.severity === "breaking").slice(0, 50).map((d) => ({
106
+ path: d.path,
107
+ startLine: 1,
108
+ endLine: 1,
109
+ annotationLevel: "failure",
110
+ message: d.description,
111
+ title: `Breaking: ${d.rule}`
112
+ }))
113
+ };
114
+ }
115
+ /**
116
+ * Format impact result as JSON (v1.0).
117
+ */
118
+ function formatJson(result) {
119
+ const output = {
120
+ schemaVersion: "1.0",
121
+ breaking: result.hasBreaking,
122
+ changes: result.deltas.map((delta) => ({
123
+ type: delta.rule,
124
+ path: delta.specKey,
125
+ summary: delta.description,
126
+ severity: delta.severity === "breaking" ? "breaking" : delta.severity === "non_breaking" ? "medium" : "low"
127
+ })),
128
+ summary: {
129
+ breaking: result.summary.breaking,
130
+ nonBreaking: result.summary.nonBreaking,
131
+ total: result.deltas.length
132
+ }
133
+ };
134
+ return JSON.stringify(output, null, 2);
135
+ }
136
+
137
+ //#endregion
138
+ export { formatCheckRun, formatJson, formatMinimalComment, formatPrComment };
139
+ //# sourceMappingURL=formatters.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.mjs","names":[],"sources":["../../../src/services/impact/formatters.ts"],"sourcesContent":["/**\n * Impact result formatters.\n *\n * Formats impact detection results for various outputs:\n * - PR comments (markdown)\n * - GitHub check runs\n * - JSON output\n */\n\nimport type { ImpactResult } from '@contractspec/module.workspace';\nimport type { CheckRunPayload, PrCommentOptions } from './types';\n\n/**\n * Format impact result as a PR comment (markdown).\n */\nexport function formatPrComment(\n result: ImpactResult,\n options: PrCommentOptions = { template: 'detailed' }\n): string {\n const lines: string[] = [];\n\n // Header with status\n lines.push('## 📋 ContractSpec Impact Analysis');\n lines.push('');\n\n // Status badge\n if (result.hasBreaking) {\n lines.push('❌ **Breaking changes detected**');\n } else if (result.hasNonBreaking) {\n lines.push('⚠️ **Contract changed (non-breaking)**');\n } else {\n lines.push('✅ **No contract impact**');\n }\n lines.push('');\n\n // Summary\n if (\n result.summary.breaking > 0 ||\n result.summary.nonBreaking > 0 ||\n result.summary.info > 0\n ) {\n lines.push('### Summary');\n lines.push('');\n lines.push(`| Type | Count |`);\n lines.push(`|------|-------|`);\n if (result.summary.breaking > 0) {\n lines.push(`| 🔴 Breaking | ${result.summary.breaking} |`);\n }\n if (result.summary.nonBreaking > 0) {\n lines.push(`| 🟡 Non-breaking | ${result.summary.nonBreaking} |`);\n }\n if (result.summary.info > 0) {\n lines.push(`| 🔵 Info | ${result.summary.info} |`);\n }\n if (result.summary.added > 0) {\n lines.push(`| ➕ Added | ${result.summary.added} |`);\n }\n if (result.summary.removed > 0) {\n lines.push(`| ➖ Removed | ${result.summary.removed} |`);\n }\n lines.push('');\n }\n\n // Detailed changes (if detailed template)\n if (options.template === 'detailed' && result.deltas.length > 0) {\n lines.push('### Changes');\n lines.push('');\n\n // Group by severity\n const breaking = result.deltas.filter((d) => d.severity === 'breaking');\n const nonBreaking = result.deltas.filter(\n (d) => d.severity === 'non_breaking'\n );\n\n if (breaking.length > 0) {\n lines.push('#### 🔴 Breaking Changes');\n lines.push('');\n for (const delta of breaking) {\n lines.push(`- **${delta.specKey}**: ${delta.description}`);\n }\n lines.push('');\n }\n\n if (nonBreaking.length > 0) {\n lines.push('#### 🟡 Non-breaking Changes');\n lines.push('');\n for (const delta of nonBreaking) {\n lines.push(`- **${delta.specKey}**: ${delta.description}`);\n }\n lines.push('');\n }\n }\n\n // Added/removed specs\n if (result.addedSpecs.length > 0) {\n lines.push('### Added Specs');\n lines.push('');\n for (const spec of result.addedSpecs) {\n lines.push(`- \\`${spec.key}\\` v${spec.version} (${spec.type})`);\n }\n lines.push('');\n }\n\n if (result.removedSpecs.length > 0) {\n lines.push('### Removed Specs');\n lines.push('');\n for (const spec of result.removedSpecs) {\n lines.push(`- \\`${spec.key}\\` v${spec.version} (${spec.type})`);\n }\n lines.push('');\n }\n\n // Drift status (if provided)\n if (options.drift) {\n if (options.drift.hasDrift) {\n lines.push('### ⚠️ Drift Detected');\n lines.push('');\n lines.push(\n 'The following generated files are out of sync with their specs:'\n );\n lines.push('');\n for (const file of options.drift.files) {\n lines.push(`- \\`${file}\\``);\n }\n lines.push('');\n lines.push('Run `contractspec generate` to regenerate artifacts.');\n lines.push('');\n } else {\n lines.push('### ✅ No Drift Detected');\n lines.push('');\n }\n }\n\n // Footer\n lines.push('---');\n lines.push(`*Generated by ContractSpec at ${result.timestamp}*`);\n\n return lines.join('\\n');\n}\n\n/**\n * Format impact result for minimal PR comment.\n */\nexport function formatMinimalComment(result: ImpactResult): string {\n if (result.hasBreaking) {\n return `❌ **Breaking changes detected** (${result.summary.breaking} breaking, ${result.summary.nonBreaking} non-breaking)`;\n }\n if (result.hasNonBreaking) {\n return `⚠️ **Contract changed** (${result.summary.nonBreaking} non-breaking changes)`;\n }\n return '✅ **No contract impact**';\n}\n\n/**\n * Format impact result as GitHub check run payload.\n */\nexport function formatCheckRun(\n result: ImpactResult,\n headSha: string,\n options: { key?: string; failOnBreaking?: boolean } = {}\n): CheckRunPayload {\n const name = options.key ?? 'ContractSpec Impact';\n const failOnBreaking = options.failOnBreaking ?? true;\n\n let conclusion: 'success' | 'failure' | 'neutral';\n let title: string;\n\n if (result.hasBreaking) {\n conclusion = failOnBreaking ? 'failure' : 'neutral';\n title = `Breaking changes detected (${result.summary.breaking})`;\n } else if (result.hasNonBreaking) {\n conclusion = 'success';\n title = `Non-breaking changes (${result.summary.nonBreaking})`;\n } else {\n conclusion = 'success';\n title = 'No contract impact';\n }\n\n const summary = formatMinimalComment(result);\n\n return {\n name,\n headSha,\n conclusion,\n title,\n summary,\n annotations: result.deltas\n .filter((d) => d.severity === 'breaking')\n .slice(0, 50) // GitHub limit\n .map((d) => ({\n path: d.path,\n startLine: 1,\n endLine: 1,\n annotationLevel: 'failure' as const,\n message: d.description,\n title: `Breaking: ${d.rule}`,\n })),\n };\n}\n\n/**\n * Impact JSON output structure (v1.0).\n */\nexport interface ImpactJsonOutput {\n schemaVersion: string;\n breaking: boolean;\n changes: {\n type: string;\n path: string;\n summary: string;\n severity: 'low' | 'medium' | 'high' | 'breaking';\n }[];\n summary: {\n breaking: number;\n nonBreaking: number;\n total: number;\n };\n}\n\n/**\n * Format impact result as JSON (v1.0).\n */\nexport function formatJson(result: ImpactResult): string {\n const output: ImpactJsonOutput = {\n schemaVersion: '1.0',\n breaking: result.hasBreaking,\n changes: result.deltas.map((delta) => ({\n type: delta.rule,\n path: delta.specKey, // map specKey to path or keep specKey as path\n summary: delta.description,\n severity:\n delta.severity === 'breaking'\n ? 'breaking'\n : delta.severity === 'non_breaking'\n ? 'medium'\n : 'low',\n })),\n summary: {\n breaking: result.summary.breaking,\n nonBreaking: result.summary.nonBreaking,\n total: result.deltas.length,\n },\n };\n return JSON.stringify(output, null, 2);\n}\n"],"mappings":";;;;AAeA,SAAgB,gBACd,QACA,UAA4B,EAAE,UAAU,YAAY,EAC5C;CACR,MAAM,QAAkB,EAAE;AAG1B,OAAM,KAAK,qCAAqC;AAChD,OAAM,KAAK,GAAG;AAGd,KAAI,OAAO,YACT,OAAM,KAAK,kCAAkC;UACpC,OAAO,eAChB,OAAM,KAAK,yCAAyC;KAEpD,OAAM,KAAK,2BAA2B;AAExC,OAAM,KAAK,GAAG;AAGd,KACE,OAAO,QAAQ,WAAW,KAC1B,OAAO,QAAQ,cAAc,KAC7B,OAAO,QAAQ,OAAO,GACtB;AACA,QAAM,KAAK,cAAc;AACzB,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,mBAAmB;AAC9B,QAAM,KAAK,mBAAmB;AAC9B,MAAI,OAAO,QAAQ,WAAW,EAC5B,OAAM,KAAK,mBAAmB,OAAO,QAAQ,SAAS,IAAI;AAE5D,MAAI,OAAO,QAAQ,cAAc,EAC/B,OAAM,KAAK,uBAAuB,OAAO,QAAQ,YAAY,IAAI;AAEnE,MAAI,OAAO,QAAQ,OAAO,EACxB,OAAM,KAAK,eAAe,OAAO,QAAQ,KAAK,IAAI;AAEpD,MAAI,OAAO,QAAQ,QAAQ,EACzB,OAAM,KAAK,eAAe,OAAO,QAAQ,MAAM,IAAI;AAErD,MAAI,OAAO,QAAQ,UAAU,EAC3B,OAAM,KAAK,iBAAiB,OAAO,QAAQ,QAAQ,IAAI;AAEzD,QAAM,KAAK,GAAG;;AAIhB,KAAI,QAAQ,aAAa,cAAc,OAAO,OAAO,SAAS,GAAG;AAC/D,QAAM,KAAK,cAAc;AACzB,QAAM,KAAK,GAAG;EAGd,MAAM,WAAW,OAAO,OAAO,QAAQ,MAAM,EAAE,aAAa,WAAW;EACvE,MAAM,cAAc,OAAO,OAAO,QAC/B,MAAM,EAAE,aAAa,eACvB;AAED,MAAI,SAAS,SAAS,GAAG;AACvB,SAAM,KAAK,2BAA2B;AACtC,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,SAAS,SAClB,OAAM,KAAK,OAAO,MAAM,QAAQ,MAAM,MAAM,cAAc;AAE5D,SAAM,KAAK,GAAG;;AAGhB,MAAI,YAAY,SAAS,GAAG;AAC1B,SAAM,KAAK,+BAA+B;AAC1C,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,SAAS,YAClB,OAAM,KAAK,OAAO,MAAM,QAAQ,MAAM,MAAM,cAAc;AAE5D,SAAM,KAAK,GAAG;;;AAKlB,KAAI,OAAO,WAAW,SAAS,GAAG;AAChC,QAAM,KAAK,kBAAkB;AAC7B,QAAM,KAAK,GAAG;AACd,OAAK,MAAM,QAAQ,OAAO,WACxB,OAAM,KAAK,OAAO,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,GAAG;AAEjE,QAAM,KAAK,GAAG;;AAGhB,KAAI,OAAO,aAAa,SAAS,GAAG;AAClC,QAAM,KAAK,oBAAoB;AAC/B,QAAM,KAAK,GAAG;AACd,OAAK,MAAM,QAAQ,OAAO,aACxB,OAAM,KAAK,OAAO,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,GAAG;AAEjE,QAAM,KAAK,GAAG;;AAIhB,KAAI,QAAQ,MACV,KAAI,QAAQ,MAAM,UAAU;AAC1B,QAAM,KAAK,wBAAwB;AACnC,QAAM,KAAK,GAAG;AACd,QAAM,KACJ,kEACD;AACD,QAAM,KAAK,GAAG;AACd,OAAK,MAAM,QAAQ,QAAQ,MAAM,MAC/B,OAAM,KAAK,OAAO,KAAK,IAAI;AAE7B,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,uDAAuD;AAClE,QAAM,KAAK,GAAG;QACT;AACL,QAAM,KAAK,0BAA0B;AACrC,QAAM,KAAK,GAAG;;AAKlB,OAAM,KAAK,MAAM;AACjB,OAAM,KAAK,iCAAiC,OAAO,UAAU,GAAG;AAEhE,QAAO,MAAM,KAAK,KAAK;;;;;AAMzB,SAAgB,qBAAqB,QAA8B;AACjE,KAAI,OAAO,YACT,QAAO,oCAAoC,OAAO,QAAQ,SAAS,aAAa,OAAO,QAAQ,YAAY;AAE7G,KAAI,OAAO,eACT,QAAO,4BAA4B,OAAO,QAAQ,YAAY;AAEhE,QAAO;;;;;AAMT,SAAgB,eACd,QACA,SACA,UAAsD,EAAE,EACvC;CACjB,MAAM,OAAO,QAAQ,OAAO;CAC5B,MAAM,iBAAiB,QAAQ,kBAAkB;CAEjD,IAAI;CACJ,IAAI;AAEJ,KAAI,OAAO,aAAa;AACtB,eAAa,iBAAiB,YAAY;AAC1C,UAAQ,8BAA8B,OAAO,QAAQ,SAAS;YACrD,OAAO,gBAAgB;AAChC,eAAa;AACb,UAAQ,yBAAyB,OAAO,QAAQ,YAAY;QACvD;AACL,eAAa;AACb,UAAQ;;CAGV,MAAM,UAAU,qBAAqB,OAAO;AAE5C,QAAO;EACL;EACA;EACA;EACA;EACA;EACA,aAAa,OAAO,OACjB,QAAQ,MAAM,EAAE,aAAa,WAAW,CACxC,MAAM,GAAG,GAAG,CACZ,KAAK,OAAO;GACX,MAAM,EAAE;GACR,WAAW;GACX,SAAS;GACT,iBAAiB;GACjB,SAAS,EAAE;GACX,OAAO,aAAa,EAAE;GACvB,EAAE;EACN;;;;;AAyBH,SAAgB,WAAW,QAA8B;CACvD,MAAM,SAA2B;EAC/B,eAAe;EACf,UAAU,OAAO;EACjB,SAAS,OAAO,OAAO,KAAK,WAAW;GACrC,MAAM,MAAM;GACZ,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,UACE,MAAM,aAAa,aACf,aACA,MAAM,aAAa,iBACjB,WACA;GACT,EAAE;EACH,SAAS;GACP,UAAU,OAAO,QAAQ;GACzB,aAAa,OAAO,QAAQ;GAC5B,OAAO,OAAO,OAAO;GACtB;EACF;AACD,QAAO,KAAK,UAAU,QAAQ,MAAM,EAAE"}
@@ -0,0 +1,22 @@
1
+ import { FsAdapter } from "../../ports/fs.mjs";
2
+ import { GitAdapter } from "../../ports/git.mjs";
3
+ import { LoggerAdapter } from "../../ports/logger.mjs";
4
+ import { ImpactDetectionOptions, ImpactDetectionResult } from "./types.mjs";
5
+
6
+ //#region src/services/impact/impact-detection-service.d.ts
7
+
8
+ /**
9
+ * Detect the impact of contract changes between baseline and current state.
10
+ *
11
+ * @param adapters - Required adapters (fs, git, logger)
12
+ * @param options - Detection options
13
+ * @returns Impact detection result
14
+ */
15
+ declare function detectImpact(adapters: {
16
+ fs: FsAdapter;
17
+ git: GitAdapter;
18
+ logger: LoggerAdapter;
19
+ }, options?: ImpactDetectionOptions): Promise<ImpactDetectionResult>;
20
+ //#endregion
21
+ export { detectImpact };
22
+ //# sourceMappingURL=impact-detection-service.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact-detection-service.d.mts","names":[],"sources":["../../../src/services/impact/impact-detection-service.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;iBA2BsB,YAAA;MACJ;OAAgB;UAAoB;aAC3C,yBACR,QAAQ"}
@@ -0,0 +1,96 @@
1
+ import { classifyImpact, computeIoDiff, generateSnapshot } from "@contractspec/module.workspace";
2
+
3
+ //#region src/services/impact/impact-detection-service.ts
4
+ /**
5
+ * Impact detection service.
6
+ *
7
+ * Orchestrates contract snapshot generation, diff computation,
8
+ * and impact classification for CI/CD pipelines.
9
+ */
10
+ /**
11
+ * Detect the impact of contract changes between baseline and current state.
12
+ *
13
+ * @param adapters - Required adapters (fs, git, logger)
14
+ * @param options - Detection options
15
+ * @returns Impact detection result
16
+ */
17
+ async function detectImpact(adapters, options = {}) {
18
+ const { fs, git, logger } = adapters;
19
+ const workspaceRoot = options.workspaceRoot ?? process.cwd();
20
+ logger.info("Starting impact detection...", { baseline: options.baseline });
21
+ const specFiles = (await fs.glob({
22
+ pattern: options.pattern ?? "**/*.{operation,event}.ts",
23
+ cwd: workspaceRoot
24
+ })).filter((f) => !f.includes(".test.") && !f.includes(".spec.") && !f.includes("node_modules"));
25
+ logger.debug(`Found ${specFiles.length} spec files`);
26
+ const headSnapshot = generateSnapshot(await loadSpecs(fs, specFiles, workspaceRoot));
27
+ let baseSnapshot;
28
+ if (options.baseline) baseSnapshot = generateSnapshot(await loadBaselineSpecs(fs, git, specFiles, options.baseline, workspaceRoot));
29
+ else baseSnapshot = {
30
+ version: "1.0.0",
31
+ generatedAt: "",
32
+ specs: [],
33
+ hash: ""
34
+ };
35
+ const diffs = computeSnapshotDiffs(baseSnapshot.specs, headSnapshot.specs);
36
+ const impactResult = classifyImpact(baseSnapshot.specs, headSnapshot.specs, diffs);
37
+ logger.info("Impact detection complete", {
38
+ status: impactResult.status,
39
+ breaking: impactResult.summary.breaking,
40
+ nonBreaking: impactResult.summary.nonBreaking
41
+ });
42
+ return {
43
+ ...impactResult,
44
+ workspaceRoot,
45
+ specsAnalyzed: specFiles.length,
46
+ baseRef: options.baseline
47
+ };
48
+ }
49
+ /**
50
+ * Load specs from current filesystem.
51
+ */
52
+ async function loadSpecs(fs, files, _workspaceRoot) {
53
+ const specs = [];
54
+ for (const file of files) {
55
+ const content = await fs.readFile(file);
56
+ specs.push({
57
+ path: file,
58
+ content
59
+ });
60
+ }
61
+ return specs;
62
+ }
63
+ /**
64
+ * Load specs from git baseline.
65
+ */
66
+ async function loadBaselineSpecs(_fs, git, files, baseline, _workspaceRoot) {
67
+ const specs = [];
68
+ for (const file of files) try {
69
+ const content = await git.showFile(baseline, file);
70
+ specs.push({
71
+ path: file,
72
+ content
73
+ });
74
+ } catch {}
75
+ return specs;
76
+ }
77
+ /**
78
+ * Compute diffs between two sets of spec snapshots.
79
+ */
80
+ function computeSnapshotDiffs(baseSpecs, headSpecs) {
81
+ const diffs = [];
82
+ const baseMap = new Map(baseSpecs.map((s) => [`${s.key}@${s.version}`, s]));
83
+ const headMap = new Map(headSpecs.map((s) => [`${s.key}@${s.version}`, s]));
84
+ for (const [key, headSpec] of headMap) {
85
+ const baseSpec = baseMap.get(key);
86
+ if (baseSpec && headSpec.type === "operation" && baseSpec.type === "operation") {
87
+ const ioDiffs = computeIoDiff(baseSpec.io, headSpec.io);
88
+ diffs.push(...ioDiffs);
89
+ }
90
+ }
91
+ return diffs;
92
+ }
93
+
94
+ //#endregion
95
+ export { detectImpact };
96
+ //# sourceMappingURL=impact-detection-service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact-detection-service.mjs","names":[],"sources":["../../../src/services/impact/impact-detection-service.ts"],"sourcesContent":["/**\n * Impact detection service.\n *\n * Orchestrates contract snapshot generation, diff computation,\n * and impact classification for CI/CD pipelines.\n */\n\n// Note: Using internal imports from the bundle which re-exports from module\nimport {\n classifyImpact,\n computeIoDiff,\n generateSnapshot,\n type ContractSnapshot,\n type SpecSnapshot,\n} from '@contractspec/module.workspace';\nimport type { FsAdapter } from '../../ports/fs';\nimport type { GitAdapter } from '../../ports/git';\nimport type { LoggerAdapter } from '../../ports/logger';\nimport type { ImpactDetectionOptions, ImpactDetectionResult } from './types';\n\n/**\n * Detect the impact of contract changes between baseline and current state.\n *\n * @param adapters - Required adapters (fs, git, logger)\n * @param options - Detection options\n * @returns Impact detection result\n */\nexport async function detectImpact(\n adapters: { fs: FsAdapter; git: GitAdapter; logger: LoggerAdapter },\n options: ImpactDetectionOptions = {}\n): Promise<ImpactDetectionResult> {\n const { fs, git, logger } = adapters;\n const workspaceRoot = options.workspaceRoot ?? process.cwd();\n\n logger.info('Starting impact detection...', { baseline: options.baseline });\n\n // Discover spec files\n const files = await fs.glob({\n pattern: options.pattern ?? '**/*.{operation,event}.ts',\n cwd: workspaceRoot,\n });\n\n const specFiles = files.filter(\n (f) =>\n !f.includes('.test.') &&\n !f.includes('.spec.') &&\n !f.includes('node_modules')\n );\n\n logger.debug(`Found ${specFiles.length} spec files`);\n\n // Load current (head) specs\n const headSpecs = await loadSpecs(fs, specFiles, workspaceRoot);\n const headSnapshot = generateSnapshot(headSpecs);\n\n // Load baseline specs if specified\n let baseSnapshot: ContractSnapshot;\n if (options.baseline) {\n const baseSpecs = await loadBaselineSpecs(\n fs,\n git,\n specFiles,\n options.baseline,\n workspaceRoot\n );\n baseSnapshot = generateSnapshot(baseSpecs);\n } else {\n // No baseline means all specs are \"new\"\n baseSnapshot = { version: '1.0.0', generatedAt: '', specs: [], hash: '' };\n }\n\n // Compute diffs between snapshots\n const diffs = computeSnapshotDiffs(baseSnapshot.specs, headSnapshot.specs);\n\n // Classify the impact\n const impactResult = classifyImpact(\n baseSnapshot.specs,\n headSnapshot.specs,\n diffs\n );\n\n logger.info('Impact detection complete', {\n status: impactResult.status,\n breaking: impactResult.summary.breaking,\n nonBreaking: impactResult.summary.nonBreaking,\n });\n\n return {\n ...impactResult,\n workspaceRoot,\n specsAnalyzed: specFiles.length,\n baseRef: options.baseline,\n };\n}\n\n/**\n * Load specs from current filesystem.\n */\nasync function loadSpecs(\n fs: FsAdapter,\n files: string[],\n _workspaceRoot: string\n): Promise<{ path: string; content: string }[]> {\n const specs: { path: string; content: string }[] = [];\n\n for (const file of files) {\n const content = await fs.readFile(file);\n specs.push({ path: file, content });\n }\n\n return specs;\n}\n\n/**\n * Load specs from git baseline.\n */\nasync function loadBaselineSpecs(\n _fs: FsAdapter,\n git: GitAdapter,\n files: string[],\n baseline: string,\n _workspaceRoot: string\n): Promise<{ path: string; content: string }[]> {\n const specs: { path: string; content: string }[] = [];\n\n for (const file of files) {\n try {\n const content = await git.showFile(baseline, file);\n specs.push({ path: file, content });\n } catch {\n // File doesn't exist in baseline - skip (it's new)\n }\n }\n\n return specs;\n}\n\n/**\n * Compute diffs between two sets of spec snapshots.\n */\nfunction computeSnapshotDiffs(\n baseSpecs: SpecSnapshot[],\n headSpecs: SpecSnapshot[]\n): ReturnType<typeof computeIoDiff> {\n const diffs: ReturnType<typeof computeIoDiff> = [];\n\n const baseMap = new Map(baseSpecs.map((s) => [`${s.key}@${s.version}`, s]));\n const headMap = new Map(headSpecs.map((s) => [`${s.key}@${s.version}`, s]));\n\n // Compare specs that exist in both\n for (const [key, headSpec] of headMap) {\n const baseSpec = baseMap.get(key);\n if (\n baseSpec &&\n headSpec.type === 'operation' &&\n baseSpec.type === 'operation'\n ) {\n const ioDiffs = computeIoDiff(baseSpec.io, headSpec.io);\n diffs.push(...ioDiffs);\n }\n }\n\n return diffs;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2BA,eAAsB,aACpB,UACA,UAAkC,EAAE,EACJ;CAChC,MAAM,EAAE,IAAI,KAAK,WAAW;CAC5B,MAAM,gBAAgB,QAAQ,iBAAiB,QAAQ,KAAK;AAE5D,QAAO,KAAK,gCAAgC,EAAE,UAAU,QAAQ,UAAU,CAAC;CAQ3E,MAAM,aALQ,MAAM,GAAG,KAAK;EAC1B,SAAS,QAAQ,WAAW;EAC5B,KAAK;EACN,CAAC,EAEsB,QACrB,MACC,CAAC,EAAE,SAAS,SAAS,IACrB,CAAC,EAAE,SAAS,SAAS,IACrB,CAAC,EAAE,SAAS,eAAe,CAC9B;AAED,QAAO,MAAM,SAAS,UAAU,OAAO,aAAa;CAIpD,MAAM,eAAe,iBADH,MAAM,UAAU,IAAI,WAAW,cAAc,CACf;CAGhD,IAAI;AACJ,KAAI,QAAQ,SAQV,gBAAe,iBAPG,MAAM,kBACtB,IACA,KACA,WACA,QAAQ,UACR,cACD,CACyC;KAG1C,gBAAe;EAAE,SAAS;EAAS,aAAa;EAAI,OAAO,EAAE;EAAE,MAAM;EAAI;CAI3E,MAAM,QAAQ,qBAAqB,aAAa,OAAO,aAAa,MAAM;CAG1E,MAAM,eAAe,eACnB,aAAa,OACb,aAAa,OACb,MACD;AAED,QAAO,KAAK,6BAA6B;EACvC,QAAQ,aAAa;EACrB,UAAU,aAAa,QAAQ;EAC/B,aAAa,aAAa,QAAQ;EACnC,CAAC;AAEF,QAAO;EACL,GAAG;EACH;EACA,eAAe,UAAU;EACzB,SAAS,QAAQ;EAClB;;;;;AAMH,eAAe,UACb,IACA,OACA,gBAC8C;CAC9C,MAAM,QAA6C,EAAE;AAErD,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,UAAU,MAAM,GAAG,SAAS,KAAK;AACvC,QAAM,KAAK;GAAE,MAAM;GAAM;GAAS,CAAC;;AAGrC,QAAO;;;;;AAMT,eAAe,kBACb,KACA,KACA,OACA,UACA,gBAC8C;CAC9C,MAAM,QAA6C,EAAE;AAErD,MAAK,MAAM,QAAQ,MACjB,KAAI;EACF,MAAM,UAAU,MAAM,IAAI,SAAS,UAAU,KAAK;AAClD,QAAM,KAAK;GAAE,MAAM;GAAM;GAAS,CAAC;SAC7B;AAKV,QAAO;;;;;AAMT,SAAS,qBACP,WACA,WACkC;CAClC,MAAM,QAA0C,EAAE;CAElD,MAAM,UAAU,IAAI,IAAI,UAAU,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;CAC3E,MAAM,UAAU,IAAI,IAAI,UAAU,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;AAG3E,MAAK,MAAM,CAAC,KAAK,aAAa,SAAS;EACrC,MAAM,WAAW,QAAQ,IAAI,IAAI;AACjC,MACE,YACA,SAAS,SAAS,eAClB,SAAS,SAAS,aAClB;GACA,MAAM,UAAU,cAAc,SAAS,IAAI,SAAS,GAAG;AACvD,SAAM,KAAK,GAAG,QAAQ;;;AAI1B,QAAO"}
@@ -0,0 +1,11 @@
1
+ import { CheckRunAnnotation, CheckRunPayload, ImpactDetectionOptions, ImpactDetectionResult, ImpactResult, PrCommentOptions } from "./types.mjs";
2
+ import { detectImpact } from "./impact-detection-service.mjs";
3
+ import { formatCheckRun, formatJson, formatMinimalComment, formatPrComment } from "./formatters.mjs";
4
+
5
+ //#region src/services/impact/index.d.ts
6
+ declare namespace index_d_exports {
7
+ export { CheckRunAnnotation, CheckRunPayload, ImpactDetectionOptions, ImpactDetectionResult, ImpactResult, PrCommentOptions, detectImpact, formatCheckRun, formatJson, formatMinimalComment, formatPrComment };
8
+ }
9
+ //#endregion
10
+ export { index_d_exports };
11
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/impact/index.ts"],"sourcesContent":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { __exportAll } from "../../_virtual/rolldown_runtime.mjs";
2
+ import { detectImpact } from "./impact-detection-service.mjs";
3
+ import { formatCheckRun, formatJson, formatMinimalComment, formatPrComment } from "./formatters.mjs";
4
+
5
+ //#region src/services/impact/index.ts
6
+ var impact_exports = /* @__PURE__ */ __exportAll({
7
+ detectImpact: () => detectImpact,
8
+ formatCheckRun: () => formatCheckRun,
9
+ formatJson: () => formatJson,
10
+ formatMinimalComment: () => formatMinimalComment,
11
+ formatPrComment: () => formatPrComment
12
+ });
13
+
14
+ //#endregion
15
+ export { impact_exports };
16
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/impact/index.ts"],"sourcesContent":["/**\n * Impact detection service module.\n */\n\nexport * from './types';\nexport { detectImpact } from './impact-detection-service';\nexport {\n formatPrComment,\n formatMinimalComment,\n formatCheckRun,\n formatJson,\n} from './formatters';\n"],"mappings":""}