@contractspec/bundle.workspace 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +79 -0
  3. package/dist/_virtual/rolldown_runtime.js +36 -0
  4. package/dist/adapters/ai.d.ts +12 -0
  5. package/dist/adapters/ai.d.ts.map +1 -0
  6. package/dist/adapters/ai.js +83 -0
  7. package/dist/adapters/ai.js.map +1 -0
  8. package/dist/adapters/factory.d.ts +29 -0
  9. package/dist/adapters/factory.d.ts.map +1 -0
  10. package/dist/adapters/factory.js +37 -0
  11. package/dist/adapters/factory.js.map +1 -0
  12. package/dist/adapters/fs.d.ts +11 -0
  13. package/dist/adapters/fs.d.ts.map +1 -0
  14. package/dist/adapters/fs.js +131 -0
  15. package/dist/adapters/fs.js.map +1 -0
  16. package/dist/adapters/git.d.ts +11 -0
  17. package/dist/adapters/git.d.ts.map +1 -0
  18. package/dist/adapters/git.js +55 -0
  19. package/dist/adapters/git.js.map +1 -0
  20. package/dist/adapters/index.d.ts +7 -0
  21. package/dist/adapters/index.js +7 -0
  22. package/dist/adapters/logger.d.ts +18 -0
  23. package/dist/adapters/logger.d.ts.map +1 -0
  24. package/dist/adapters/logger.js +81 -0
  25. package/dist/adapters/logger.js.map +1 -0
  26. package/dist/adapters/watcher.d.ts +11 -0
  27. package/dist/adapters/watcher.d.ts.map +1 -0
  28. package/dist/adapters/watcher.js +74 -0
  29. package/dist/adapters/watcher.js.map +1 -0
  30. package/dist/adapters/workspace.d.ts +148 -0
  31. package/dist/adapters/workspace.d.ts.map +1 -0
  32. package/dist/adapters/workspace.js +275 -0
  33. package/dist/adapters/workspace.js.map +1 -0
  34. package/dist/ai/agents/claude-code-agent.d.ts +22 -0
  35. package/dist/ai/agents/claude-code-agent.d.ts.map +1 -0
  36. package/dist/ai/agents/claude-code-agent.js +182 -0
  37. package/dist/ai/agents/claude-code-agent.js.map +1 -0
  38. package/dist/ai/agents/cursor-agent.d.ts +68 -0
  39. package/dist/ai/agents/cursor-agent.d.ts.map +1 -0
  40. package/dist/ai/agents/cursor-agent.js +436 -0
  41. package/dist/ai/agents/cursor-agent.js.map +1 -0
  42. package/dist/ai/agents/index.js +5 -0
  43. package/dist/ai/agents/openai-codex-agent.d.ts +22 -0
  44. package/dist/ai/agents/openai-codex-agent.d.ts.map +1 -0
  45. package/dist/ai/agents/openai-codex-agent.js +167 -0
  46. package/dist/ai/agents/openai-codex-agent.js.map +1 -0
  47. package/dist/ai/agents/orchestrator.d.ts +50 -0
  48. package/dist/ai/agents/orchestrator.d.ts.map +1 -0
  49. package/dist/ai/agents/orchestrator.js +143 -0
  50. package/dist/ai/agents/orchestrator.js.map +1 -0
  51. package/dist/ai/agents/simple-agent.d.ts +17 -0
  52. package/dist/ai/agents/simple-agent.d.ts.map +1 -0
  53. package/dist/ai/agents/simple-agent.js +92 -0
  54. package/dist/ai/agents/simple-agent.js.map +1 -0
  55. package/dist/ai/agents/types.d.ts +36 -0
  56. package/dist/ai/agents/types.d.ts.map +1 -0
  57. package/dist/ai/client.d.ts +83 -0
  58. package/dist/ai/client.d.ts.map +1 -0
  59. package/dist/ai/client.js +163 -0
  60. package/dist/ai/client.js.map +1 -0
  61. package/dist/ai/index.d.ts +17 -0
  62. package/dist/ai/index.d.ts.map +1 -0
  63. package/dist/ai/index.js +28 -0
  64. package/dist/ai/index.js.map +1 -0
  65. package/dist/ai/prompts/code-generation.d.ts +26 -0
  66. package/dist/ai/prompts/code-generation.d.ts.map +1 -0
  67. package/dist/ai/prompts/code-generation.js +143 -0
  68. package/dist/ai/prompts/code-generation.js.map +1 -0
  69. package/dist/ai/prompts/index.d.ts +10 -0
  70. package/dist/ai/prompts/index.d.ts.map +1 -0
  71. package/dist/ai/prompts/index.js +13 -0
  72. package/dist/ai/prompts/index.js.map +1 -0
  73. package/dist/ai/prompts/spec-creation.d.ts +29 -0
  74. package/dist/ai/prompts/spec-creation.d.ts.map +1 -0
  75. package/dist/ai/prompts/spec-creation.js +111 -0
  76. package/dist/ai/prompts/spec-creation.js.map +1 -0
  77. package/dist/ai/providers.d.ts +29 -0
  78. package/dist/ai/providers.d.ts.map +1 -0
  79. package/dist/ai/providers.js +39 -0
  80. package/dist/ai/providers.js.map +1 -0
  81. package/dist/formatters/index.d.ts +11 -0
  82. package/dist/formatters/index.d.ts.map +1 -0
  83. package/dist/formatters/index.js +19 -0
  84. package/dist/formatters/index.js.map +1 -0
  85. package/dist/formatters/json.d.ts +89 -0
  86. package/dist/formatters/json.d.ts.map +1 -0
  87. package/dist/formatters/json.js +72 -0
  88. package/dist/formatters/json.js.map +1 -0
  89. package/dist/formatters/sarif.d.ts +101 -0
  90. package/dist/formatters/sarif.d.ts.map +1 -0
  91. package/dist/formatters/sarif.js +163 -0
  92. package/dist/formatters/sarif.js.map +1 -0
  93. package/dist/formatters/text.d.ts +35 -0
  94. package/dist/formatters/text.d.ts.map +1 -0
  95. package/dist/formatters/text.js +209 -0
  96. package/dist/formatters/text.js.map +1 -0
  97. package/dist/index.d.ts +82 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +204 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/ports/ai.d.ts +59 -0
  102. package/dist/ports/ai.d.ts.map +1 -0
  103. package/dist/ports/fs.d.ts +81 -0
  104. package/dist/ports/fs.d.ts.map +1 -0
  105. package/dist/ports/git.d.ts +33 -0
  106. package/dist/ports/git.d.ts.map +1 -0
  107. package/dist/ports/index.d.ts +5 -0
  108. package/dist/ports/logger.d.ts +88 -0
  109. package/dist/ports/logger.d.ts.map +1 -0
  110. package/dist/ports/watcher.d.ts +52 -0
  111. package/dist/ports/watcher.d.ts.map +1 -0
  112. package/dist/services/agent-guide/adapters/claude-code.d.ts +35 -0
  113. package/dist/services/agent-guide/adapters/claude-code.d.ts.map +1 -0
  114. package/dist/services/agent-guide/adapters/claude-code.js +144 -0
  115. package/dist/services/agent-guide/adapters/claude-code.js.map +1 -0
  116. package/dist/services/agent-guide/adapters/cursor-cli.d.ts +39 -0
  117. package/dist/services/agent-guide/adapters/cursor-cli.d.ts.map +1 -0
  118. package/dist/services/agent-guide/adapters/cursor-cli.js +135 -0
  119. package/dist/services/agent-guide/adapters/cursor-cli.js.map +1 -0
  120. package/dist/services/agent-guide/adapters/generic-mcp.d.ts +53 -0
  121. package/dist/services/agent-guide/adapters/generic-mcp.d.ts.map +1 -0
  122. package/dist/services/agent-guide/adapters/generic-mcp.js +159 -0
  123. package/dist/services/agent-guide/adapters/generic-mcp.js.map +1 -0
  124. package/dist/services/agent-guide/adapters/index.d.ts +23 -0
  125. package/dist/services/agent-guide/adapters/index.d.ts.map +1 -0
  126. package/dist/services/agent-guide/adapters/index.js +31 -0
  127. package/dist/services/agent-guide/adapters/index.js.map +1 -0
  128. package/dist/services/agent-guide/agent-guide-service.d.ts +56 -0
  129. package/dist/services/agent-guide/agent-guide-service.d.ts.map +1 -0
  130. package/dist/services/agent-guide/agent-guide-service.js +147 -0
  131. package/dist/services/agent-guide/agent-guide-service.js.map +1 -0
  132. package/dist/services/agent-guide/index.d.ts +6 -0
  133. package/dist/services/agent-guide/index.js +5 -0
  134. package/dist/services/agent-guide/types.d.ts +58 -0
  135. package/dist/services/agent-guide/types.d.ts.map +1 -0
  136. package/dist/services/build.d.ts +59 -0
  137. package/dist/services/build.d.ts.map +1 -0
  138. package/dist/services/build.js +140 -0
  139. package/dist/services/build.js.map +1 -0
  140. package/dist/services/ci-check/ci-check-service.d.ts +16 -0
  141. package/dist/services/ci-check/ci-check-service.d.ts.map +1 -0
  142. package/dist/services/ci-check/ci-check-service.js +392 -0
  143. package/dist/services/ci-check/ci-check-service.js.map +1 -0
  144. package/dist/services/ci-check/index.d.ts +2 -0
  145. package/dist/services/ci-check/index.js +2 -0
  146. package/dist/services/ci-check/types.d.ts +143 -0
  147. package/dist/services/ci-check/types.d.ts.map +1 -0
  148. package/dist/services/ci-check/types.js +29 -0
  149. package/dist/services/ci-check/types.js.map +1 -0
  150. package/dist/services/clean.d.ts +41 -0
  151. package/dist/services/clean.d.ts.map +1 -0
  152. package/dist/services/clean.js +72 -0
  153. package/dist/services/clean.js.map +1 -0
  154. package/dist/services/config.d.ts +26 -0
  155. package/dist/services/config.d.ts.map +1 -0
  156. package/dist/services/config.js +77 -0
  157. package/dist/services/config.js.map +1 -0
  158. package/dist/services/deps.d.ts +53 -0
  159. package/dist/services/deps.d.ts.map +1 -0
  160. package/dist/services/deps.js +62 -0
  161. package/dist/services/deps.js.map +1 -0
  162. package/dist/services/diff.d.ts +34 -0
  163. package/dist/services/diff.d.ts.map +1 -0
  164. package/dist/services/diff.js +34 -0
  165. package/dist/services/diff.js.map +1 -0
  166. package/dist/services/doctor/checks/ai.js +119 -0
  167. package/dist/services/doctor/checks/ai.js.map +1 -0
  168. package/dist/services/doctor/checks/cli.js +147 -0
  169. package/dist/services/doctor/checks/cli.js.map +1 -0
  170. package/dist/services/doctor/checks/config.js +171 -0
  171. package/dist/services/doctor/checks/config.js.map +1 -0
  172. package/dist/services/doctor/checks/deps.js +247 -0
  173. package/dist/services/doctor/checks/deps.js.map +1 -0
  174. package/dist/services/doctor/checks/index.js +6 -0
  175. package/dist/services/doctor/checks/mcp.js +145 -0
  176. package/dist/services/doctor/checks/mcp.js.map +1 -0
  177. package/dist/services/doctor/checks/workspace.js +244 -0
  178. package/dist/services/doctor/checks/workspace.js.map +1 -0
  179. package/dist/services/doctor/doctor-service.d.ts +24 -0
  180. package/dist/services/doctor/doctor-service.d.ts.map +1 -0
  181. package/dist/services/doctor/doctor-service.js +116 -0
  182. package/dist/services/doctor/doctor-service.js.map +1 -0
  183. package/dist/services/doctor/index.d.ts +2 -0
  184. package/dist/services/doctor/index.js +2 -0
  185. package/dist/services/doctor/types.d.ts +118 -0
  186. package/dist/services/doctor/types.d.ts.map +1 -0
  187. package/dist/services/doctor/types.js +27 -0
  188. package/dist/services/doctor/types.js.map +1 -0
  189. package/dist/services/impact/formatters.d.ts +27 -0
  190. package/dist/services/impact/formatters.d.ts.map +1 -0
  191. package/dist/services/impact/formatters.js +111 -0
  192. package/dist/services/impact/formatters.js.map +1 -0
  193. package/dist/services/impact/impact-detection-service.d.ts +22 -0
  194. package/dist/services/impact/impact-detection-service.d.ts.map +1 -0
  195. package/dist/services/impact/impact-detection-service.js +96 -0
  196. package/dist/services/impact/impact-detection-service.js.map +1 -0
  197. package/dist/services/impact/index.d.ts +11 -0
  198. package/dist/services/impact/index.d.ts.map +1 -0
  199. package/dist/services/impact/index.js +16 -0
  200. package/dist/services/impact/index.js.map +1 -0
  201. package/dist/services/impact/types.d.ts +58 -0
  202. package/dist/services/impact/types.d.ts.map +1 -0
  203. package/dist/services/implementation/discovery.d.ts +30 -0
  204. package/dist/services/implementation/discovery.d.ts.map +1 -0
  205. package/dist/services/implementation/discovery.js +144 -0
  206. package/dist/services/implementation/discovery.js.map +1 -0
  207. package/dist/services/implementation/index.d.ts +3 -0
  208. package/dist/services/implementation/index.js +2 -0
  209. package/dist/services/implementation/resolver.d.ts +44 -0
  210. package/dist/services/implementation/resolver.d.ts.map +1 -0
  211. package/dist/services/implementation/resolver.js +224 -0
  212. package/dist/services/implementation/resolver.js.map +1 -0
  213. package/dist/services/implementation/types.d.ts +79 -0
  214. package/dist/services/implementation/types.d.ts.map +1 -0
  215. package/dist/services/index.d.ts +60 -0
  216. package/dist/services/index.js +57 -0
  217. package/dist/services/integrity-diagram.d.ts +36 -0
  218. package/dist/services/integrity-diagram.d.ts.map +1 -0
  219. package/dist/services/integrity-diagram.js +275 -0
  220. package/dist/services/integrity-diagram.js.map +1 -0
  221. package/dist/services/integrity.d.ts +134 -0
  222. package/dist/services/integrity.d.ts.map +1 -0
  223. package/dist/services/integrity.js +272 -0
  224. package/dist/services/integrity.js.map +1 -0
  225. package/dist/services/list.d.ts +31 -0
  226. package/dist/services/list.d.ts.map +1 -0
  227. package/dist/services/list.js +36 -0
  228. package/dist/services/list.js.map +1 -0
  229. package/dist/services/openapi/export-service.d.ts +53 -0
  230. package/dist/services/openapi/export-service.d.ts.map +1 -0
  231. package/dist/services/openapi/export-service.js +50 -0
  232. package/dist/services/openapi/export-service.js.map +1 -0
  233. package/dist/services/openapi/import-service.d.ts +17 -0
  234. package/dist/services/openapi/import-service.d.ts.map +1 -0
  235. package/dist/services/openapi/import-service.js +74 -0
  236. package/dist/services/openapi/import-service.js.map +1 -0
  237. package/dist/services/openapi/index.d.ts +5 -0
  238. package/dist/services/openapi/index.js +4 -0
  239. package/dist/services/openapi/sync-service.d.ts +17 -0
  240. package/dist/services/openapi/sync-service.d.ts.map +1 -0
  241. package/dist/services/openapi/sync-service.js +120 -0
  242. package/dist/services/openapi/sync-service.js.map +1 -0
  243. package/dist/services/openapi/types.d.ts +162 -0
  244. package/dist/services/openapi/types.d.ts.map +1 -0
  245. package/dist/services/openapi/validate-service.d.ts +16 -0
  246. package/dist/services/openapi/validate-service.d.ts.map +1 -0
  247. package/dist/services/openapi/validate-service.js +130 -0
  248. package/dist/services/openapi/validate-service.js.map +1 -0
  249. package/dist/services/quickstart/dependencies.d.ts +31 -0
  250. package/dist/services/quickstart/dependencies.d.ts.map +1 -0
  251. package/dist/services/quickstart/dependencies.js +57 -0
  252. package/dist/services/quickstart/dependencies.js.map +1 -0
  253. package/dist/services/quickstart/index.js +2 -0
  254. package/dist/services/quickstart/quickstart-service.d.ts +20 -0
  255. package/dist/services/quickstart/quickstart-service.d.ts.map +1 -0
  256. package/dist/services/quickstart/quickstart-service.js +196 -0
  257. package/dist/services/quickstart/quickstart-service.js.map +1 -0
  258. package/dist/services/quickstart/types.d.ts +81 -0
  259. package/dist/services/quickstart/types.d.ts.map +1 -0
  260. package/dist/services/regenerator.d.ts +18 -0
  261. package/dist/services/regenerator.d.ts.map +1 -0
  262. package/dist/services/regenerator.js +23 -0
  263. package/dist/services/regenerator.js.map +1 -0
  264. package/dist/services/registry.d.ts +53 -0
  265. package/dist/services/registry.d.ts.map +1 -0
  266. package/dist/services/registry.js +74 -0
  267. package/dist/services/registry.js.map +1 -0
  268. package/dist/services/setup/config-generators.d.ts +42 -0
  269. package/dist/services/setup/config-generators.d.ts.map +1 -0
  270. package/dist/services/setup/config-generators.js +238 -0
  271. package/dist/services/setup/config-generators.js.map +1 -0
  272. package/dist/services/setup/file-merger.d.ts +27 -0
  273. package/dist/services/setup/file-merger.d.ts.map +1 -0
  274. package/dist/services/setup/file-merger.js +61 -0
  275. package/dist/services/setup/file-merger.js.map +1 -0
  276. package/dist/services/setup/index.js +4 -0
  277. package/dist/services/setup/setup-service.d.ts +12 -0
  278. package/dist/services/setup/setup-service.d.ts.map +1 -0
  279. package/dist/services/setup/setup-service.js +96 -0
  280. package/dist/services/setup/setup-service.js.map +1 -0
  281. package/dist/services/setup/targets/agents-md.js +47 -0
  282. package/dist/services/setup/targets/agents-md.js.map +1 -0
  283. package/dist/services/setup/targets/cli-config.js +60 -0
  284. package/dist/services/setup/targets/cli-config.js.map +1 -0
  285. package/dist/services/setup/targets/cursor-rules.js +48 -0
  286. package/dist/services/setup/targets/cursor-rules.js.map +1 -0
  287. package/dist/services/setup/targets/mcp-claude.js +60 -0
  288. package/dist/services/setup/targets/mcp-claude.js.map +1 -0
  289. package/dist/services/setup/targets/mcp-cursor.js +59 -0
  290. package/dist/services/setup/targets/mcp-cursor.js.map +1 -0
  291. package/dist/services/setup/targets/vscode-settings.js +63 -0
  292. package/dist/services/setup/targets/vscode-settings.js.map +1 -0
  293. package/dist/services/setup/types.d.ts +85 -0
  294. package/dist/services/setup/types.d.ts.map +1 -0
  295. package/dist/services/setup/types.js +27 -0
  296. package/dist/services/setup/types.js.map +1 -0
  297. package/dist/services/sync.d.ts +41 -0
  298. package/dist/services/sync.d.ts.map +1 -0
  299. package/dist/services/sync.js +63 -0
  300. package/dist/services/sync.js.map +1 -0
  301. package/dist/services/test.d.ts +15 -0
  302. package/dist/services/test.d.ts.map +1 -0
  303. package/dist/services/test.js +30 -0
  304. package/dist/services/test.js.map +1 -0
  305. package/dist/services/validate-implementation.d.ts +32 -0
  306. package/dist/services/validate-implementation.d.ts.map +1 -0
  307. package/dist/services/validate-implementation.js +64 -0
  308. package/dist/services/validate-implementation.js.map +1 -0
  309. package/dist/services/validate.d.ts +41 -0
  310. package/dist/services/validate.d.ts.map +1 -0
  311. package/dist/services/validate.js +48 -0
  312. package/dist/services/validate.js.map +1 -0
  313. package/dist/services/verification-cache/adapters/filesystem.d.ts +46 -0
  314. package/dist/services/verification-cache/adapters/filesystem.d.ts.map +1 -0
  315. package/dist/services/verification-cache/adapters/filesystem.js +120 -0
  316. package/dist/services/verification-cache/adapters/filesystem.js.map +1 -0
  317. package/dist/services/verification-cache/adapters/in-memory.d.ts +27 -0
  318. package/dist/services/verification-cache/adapters/in-memory.d.ts.map +1 -0
  319. package/dist/services/verification-cache/adapters/in-memory.js +46 -0
  320. package/dist/services/verification-cache/adapters/in-memory.js.map +1 -0
  321. package/dist/services/verification-cache/adapters/index.d.ts +3 -0
  322. package/dist/services/verification-cache/adapters/index.js +3 -0
  323. package/dist/services/verification-cache/adapters/workspace-state.d.ts +49 -0
  324. package/dist/services/verification-cache/adapters/workspace-state.d.ts.map +1 -0
  325. package/dist/services/verification-cache/adapters/workspace-state.js +91 -0
  326. package/dist/services/verification-cache/adapters/workspace-state.js.map +1 -0
  327. package/dist/services/verification-cache/cache-service.d.ts +70 -0
  328. package/dist/services/verification-cache/cache-service.d.ts.map +1 -0
  329. package/dist/services/verification-cache/cache-service.js +256 -0
  330. package/dist/services/verification-cache/cache-service.js.map +1 -0
  331. package/dist/services/verification-cache/index.d.ts +6 -0
  332. package/dist/services/verification-cache/index.js +6 -0
  333. package/dist/services/verification-cache/types.d.ts +124 -0
  334. package/dist/services/verification-cache/types.d.ts.map +1 -0
  335. package/dist/services/verification-cache/types.js +16 -0
  336. package/dist/services/verification-cache/types.js.map +1 -0
  337. package/dist/services/verify/ai-verifier.d.ts +25 -0
  338. package/dist/services/verify/ai-verifier.d.ts.map +1 -0
  339. package/dist/services/verify/ai-verifier.js +403 -0
  340. package/dist/services/verify/ai-verifier.js.map +1 -0
  341. package/dist/services/verify/behavior-verifier.d.ts +12 -0
  342. package/dist/services/verify/behavior-verifier.d.ts.map +1 -0
  343. package/dist/services/verify/behavior-verifier.js +186 -0
  344. package/dist/services/verify/behavior-verifier.js.map +1 -0
  345. package/dist/services/verify/index.d.ts +5 -0
  346. package/dist/services/verify/index.js +4 -0
  347. package/dist/services/verify/structure-verifier.d.ts +12 -0
  348. package/dist/services/verify/structure-verifier.d.ts.map +1 -0
  349. package/dist/services/verify/structure-verifier.js +196 -0
  350. package/dist/services/verify/structure-verifier.js.map +1 -0
  351. package/dist/services/verify/types.d.ts +137 -0
  352. package/dist/services/verify/types.d.ts.map +1 -0
  353. package/dist/services/verify/verify-service.d.ts +60 -0
  354. package/dist/services/verify/verify-service.d.ts.map +1 -0
  355. package/dist/services/verify/verify-service.js +204 -0
  356. package/dist/services/verify/verify-service.js.map +1 -0
  357. package/dist/services/watch.d.ts +25 -0
  358. package/dist/services/watch.d.ts.map +1 -0
  359. package/dist/services/watch.js +32 -0
  360. package/dist/services/watch.js.map +1 -0
  361. package/dist/services/workspace-info.d.ts +62 -0
  362. package/dist/services/workspace-info.d.ts.map +1 -0
  363. package/dist/services/workspace-info.js +103 -0
  364. package/dist/services/workspace-info.js.map +1 -0
  365. package/dist/templates/app-config.template.d.ts +7 -0
  366. package/dist/templates/app-config.template.d.ts.map +1 -0
  367. package/dist/templates/app-config.template.js +107 -0
  368. package/dist/templates/app-config.template.js.map +1 -0
  369. package/dist/templates/data-view.template.d.ts +7 -0
  370. package/dist/templates/data-view.template.d.ts.map +1 -0
  371. package/dist/templates/data-view.template.js +70 -0
  372. package/dist/templates/data-view.template.js.map +1 -0
  373. package/dist/templates/event.template.d.ts +11 -0
  374. package/dist/templates/event.template.d.ts.map +1 -0
  375. package/dist/templates/event.template.js +40 -0
  376. package/dist/templates/event.template.js.map +1 -0
  377. package/dist/templates/experiment.template.d.ts +7 -0
  378. package/dist/templates/experiment.template.d.ts.map +1 -0
  379. package/dist/templates/experiment.template.js +89 -0
  380. package/dist/templates/experiment.template.js.map +1 -0
  381. package/dist/templates/handler.template.d.ts +16 -0
  382. package/dist/templates/handler.template.d.ts.map +1 -0
  383. package/dist/templates/handler.template.js +100 -0
  384. package/dist/templates/handler.template.js.map +1 -0
  385. package/dist/templates/index.d.ts +21 -0
  386. package/dist/templates/index.d.ts.map +1 -0
  387. package/dist/templates/index.js +37 -0
  388. package/dist/templates/index.js.map +1 -0
  389. package/dist/templates/integration.template.d.ts +7 -0
  390. package/dist/templates/integration.template.d.ts.map +1 -0
  391. package/dist/templates/integration.template.js +160 -0
  392. package/dist/templates/integration.template.js.map +1 -0
  393. package/dist/templates/knowledge.template.d.ts +7 -0
  394. package/dist/templates/knowledge.template.d.ts.map +1 -0
  395. package/dist/templates/knowledge.template.js +75 -0
  396. package/dist/templates/knowledge.template.js.map +1 -0
  397. package/dist/templates/migration.template.d.ts +7 -0
  398. package/dist/templates/migration.template.d.ts.map +1 -0
  399. package/dist/templates/migration.template.js +62 -0
  400. package/dist/templates/migration.template.js.map +1 -0
  401. package/dist/templates/operation.template.d.ts +11 -0
  402. package/dist/templates/operation.template.d.ts.map +1 -0
  403. package/dist/templates/operation.template.js +105 -0
  404. package/dist/templates/operation.template.js.map +1 -0
  405. package/dist/templates/presentation.template.d.ts +11 -0
  406. package/dist/templates/presentation.template.d.ts.map +1 -0
  407. package/dist/templates/presentation.template.js +80 -0
  408. package/dist/templates/presentation.template.js.map +1 -0
  409. package/dist/templates/telemetry.template.d.ts +7 -0
  410. package/dist/templates/telemetry.template.d.ts.map +1 -0
  411. package/dist/templates/telemetry.template.js +91 -0
  412. package/dist/templates/telemetry.template.js.map +1 -0
  413. package/dist/templates/workflow-runner.template.d.ts +16 -0
  414. package/dist/templates/workflow-runner.template.d.ts.map +1 -0
  415. package/dist/templates/workflow-runner.template.js +50 -0
  416. package/dist/templates/workflow-runner.template.js.map +1 -0
  417. package/dist/templates/workflow.template.d.ts +7 -0
  418. package/dist/templates/workflow.template.d.ts.map +1 -0
  419. package/dist/templates/workflow.template.js +69 -0
  420. package/dist/templates/workflow.template.js.map +1 -0
  421. package/dist/types/config.d.ts +34 -0
  422. package/dist/types/config.d.ts.map +1 -0
  423. package/dist/types.d.ts +324 -0
  424. package/dist/types.d.ts.map +1 -0
  425. package/package.json +68 -0
@@ -0,0 +1,89 @@
1
+ import { CICheckResult } from "../services/ci-check/types.js";
2
+
3
+ //#region src/formatters/json.d.ts
4
+
5
+ /**
6
+ * Options for JSON formatting.
7
+ */
8
+ interface JsonFormatOptions {
9
+ /** Pretty print with indentation. */
10
+ pretty?: boolean;
11
+ /** Include full issue details. */
12
+ includeDetails?: boolean;
13
+ /** Include category summaries. */
14
+ includeSummaries?: boolean;
15
+ }
16
+ /**
17
+ * Compact JSON output structure.
18
+ */
19
+ interface JsonCompactOutput {
20
+ success: boolean;
21
+ errors: number;
22
+ warnings: number;
23
+ duration: number;
24
+ timestamp: string;
25
+ commit?: string;
26
+ branch?: string;
27
+ issues: JsonIssueCompact[];
28
+ }
29
+ /**
30
+ * Compact issue representation.
31
+ */
32
+ interface JsonIssueCompact {
33
+ rule: string;
34
+ severity: string;
35
+ message: string;
36
+ file?: string;
37
+ line?: number;
38
+ }
39
+ /**
40
+ * Full JSON output structure.
41
+ */
42
+ interface JsonFullOutput {
43
+ success: boolean;
44
+ summary: {
45
+ totalErrors: number;
46
+ totalWarnings: number;
47
+ totalNotes: number;
48
+ durationMs: number;
49
+ timestamp: string;
50
+ commitSha?: string;
51
+ branch?: string;
52
+ };
53
+ categories: {
54
+ category: string;
55
+ label: string;
56
+ passed: boolean;
57
+ errors: number;
58
+ warnings: number;
59
+ notes: number;
60
+ durationMs: number;
61
+ }[];
62
+ issues: {
63
+ ruleId: string;
64
+ severity: string;
65
+ message: string;
66
+ category: string;
67
+ file?: string;
68
+ line?: number;
69
+ column?: number;
70
+ endLine?: number;
71
+ endColumn?: number;
72
+ context?: Record<string, unknown>;
73
+ }[];
74
+ }
75
+ /**
76
+ * Format CI check results as compact JSON.
77
+ */
78
+ declare function formatAsJsonCompact(result: CICheckResult): JsonCompactOutput;
79
+ /**
80
+ * Format CI check results as full JSON with all details.
81
+ */
82
+ declare function formatAsJsonFull(result: CICheckResult): JsonFullOutput;
83
+ /**
84
+ * Format CI check results as JSON.
85
+ */
86
+ declare function formatAsJson(result: CICheckResult, options?: JsonFormatOptions): string;
87
+ //#endregion
88
+ export { JsonCompactOutput, JsonFormatOptions, JsonFullOutput, JsonIssueCompact, formatAsJson, formatAsJsonCompact, formatAsJsonFull };
89
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","names":[],"sources":["../../src/formatters/json.ts"],"sourcesContent":[],"mappings":";;;;AAsFA;AAsBA;AAuCA;UAvIiB,iBAAA;;;;;;;;;;;UAYA,iBAAA;;;;;;;;UAQP;;;;;UAMO,gBAAA;;;;;;;;;;UAWA,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8BH;;;;;;iBAOE,mBAAA,SAA4B,gBAAgB;;;;iBAsB5C,gBAAA,SAAyB,gBAAgB;;;;iBAuCzC,YAAA,SACN,yBACC"}
@@ -0,0 +1,72 @@
1
+ //#region src/formatters/json.ts
2
+ /**
3
+ * Format CI check results as compact JSON.
4
+ */
5
+ function formatAsJsonCompact(result) {
6
+ return {
7
+ success: result.success,
8
+ errors: result.totalErrors,
9
+ warnings: result.totalWarnings,
10
+ duration: result.durationMs,
11
+ timestamp: result.timestamp,
12
+ commit: result.commitSha,
13
+ branch: result.branch,
14
+ issues: result.issues.map((issue) => ({
15
+ rule: issue.ruleId,
16
+ severity: issue.severity,
17
+ message: issue.message,
18
+ file: issue.file,
19
+ line: issue.line
20
+ }))
21
+ };
22
+ }
23
+ /**
24
+ * Format CI check results as full JSON with all details.
25
+ */
26
+ function formatAsJsonFull(result) {
27
+ return {
28
+ success: result.success,
29
+ summary: {
30
+ totalErrors: result.totalErrors,
31
+ totalWarnings: result.totalWarnings,
32
+ totalNotes: result.totalNotes,
33
+ durationMs: result.durationMs,
34
+ timestamp: result.timestamp,
35
+ commitSha: result.commitSha,
36
+ branch: result.branch
37
+ },
38
+ categories: result.categories.map((cat) => ({
39
+ category: cat.category,
40
+ label: cat.label,
41
+ passed: cat.passed,
42
+ errors: cat.errors,
43
+ warnings: cat.warnings,
44
+ notes: cat.notes,
45
+ durationMs: cat.durationMs
46
+ })),
47
+ issues: result.issues.map((issue) => ({
48
+ ruleId: issue.ruleId,
49
+ severity: issue.severity,
50
+ message: issue.message,
51
+ category: issue.category,
52
+ file: issue.file,
53
+ line: issue.line,
54
+ column: issue.column,
55
+ endLine: issue.endLine,
56
+ endColumn: issue.endColumn,
57
+ context: issue.context
58
+ }))
59
+ };
60
+ }
61
+ /**
62
+ * Format CI check results as JSON.
63
+ */
64
+ function formatAsJson(result, options = {}) {
65
+ const { pretty = true, includeDetails = true } = options;
66
+ const output = includeDetails ? formatAsJsonFull(result) : formatAsJsonCompact(result);
67
+ return pretty ? JSON.stringify(output, null, 2) : JSON.stringify(output);
68
+ }
69
+
70
+ //#endregion
71
+ export { formatAsJson, formatAsJsonCompact, formatAsJsonFull };
72
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","names":[],"sources":["../../src/formatters/json.ts"],"sourcesContent":["/**\n * JSON output formatter.\n *\n * Formats CI check results as machine-readable JSON\n * for parsing in CI/CD scripts and integrations.\n */\n\nimport type { CICheckResult } from '../services/ci-check/types';\n\n/**\n * Options for JSON formatting.\n */\nexport interface JsonFormatOptions {\n /** Pretty print with indentation. */\n pretty?: boolean;\n /** Include full issue details. */\n includeDetails?: boolean;\n /** Include category summaries. */\n includeSummaries?: boolean;\n}\n\n/**\n * Compact JSON output structure.\n */\nexport interface JsonCompactOutput {\n success: boolean;\n errors: number;\n warnings: number;\n duration: number;\n timestamp: string;\n commit?: string;\n branch?: string;\n issues: JsonIssueCompact[];\n}\n\n/**\n * Compact issue representation.\n */\nexport interface JsonIssueCompact {\n rule: string;\n severity: string;\n message: string;\n file?: string;\n line?: number;\n}\n\n/**\n * Full JSON output structure.\n */\nexport interface JsonFullOutput {\n success: boolean;\n summary: {\n totalErrors: number;\n totalWarnings: number;\n totalNotes: number;\n durationMs: number;\n timestamp: string;\n commitSha?: string;\n branch?: string;\n };\n categories: {\n category: string;\n label: string;\n passed: boolean;\n errors: number;\n warnings: number;\n notes: number;\n durationMs: number;\n }[];\n issues: {\n ruleId: string;\n severity: string;\n message: string;\n category: string;\n file?: string;\n line?: number;\n column?: number;\n endLine?: number;\n endColumn?: number;\n context?: Record<string, unknown>;\n }[];\n}\n\n/**\n * Format CI check results as compact JSON.\n */\nexport function formatAsJsonCompact(result: CICheckResult): JsonCompactOutput {\n return {\n success: result.success,\n errors: result.totalErrors,\n warnings: result.totalWarnings,\n duration: result.durationMs,\n timestamp: result.timestamp,\n commit: result.commitSha,\n branch: result.branch,\n issues: result.issues.map((issue) => ({\n rule: issue.ruleId,\n severity: issue.severity,\n message: issue.message,\n file: issue.file,\n line: issue.line,\n })),\n };\n}\n\n/**\n * Format CI check results as full JSON with all details.\n */\nexport function formatAsJsonFull(result: CICheckResult): JsonFullOutput {\n return {\n success: result.success,\n summary: {\n totalErrors: result.totalErrors,\n totalWarnings: result.totalWarnings,\n totalNotes: result.totalNotes,\n durationMs: result.durationMs,\n timestamp: result.timestamp,\n commitSha: result.commitSha,\n branch: result.branch,\n },\n categories: result.categories.map((cat) => ({\n category: cat.category,\n label: cat.label,\n passed: cat.passed,\n errors: cat.errors,\n warnings: cat.warnings,\n notes: cat.notes,\n durationMs: cat.durationMs,\n })),\n issues: result.issues.map((issue) => ({\n ruleId: issue.ruleId,\n severity: issue.severity,\n message: issue.message,\n category: issue.category,\n file: issue.file,\n line: issue.line,\n column: issue.column,\n endLine: issue.endLine,\n endColumn: issue.endColumn,\n context: issue.context,\n })),\n };\n}\n\n/**\n * Format CI check results as JSON.\n */\nexport function formatAsJson(\n result: CICheckResult,\n options: JsonFormatOptions = {}\n): string {\n const { pretty = true, includeDetails = true } = options;\n\n const output = includeDetails\n ? formatAsJsonFull(result)\n : formatAsJsonCompact(result);\n\n return pretty ? JSON.stringify(output, null, 2) : JSON.stringify(output);\n}\n"],"mappings":";;;;AAsFA,SAAgB,oBAAoB,QAA0C;AAC5E,QAAO;EACL,SAAS,OAAO;EAChB,QAAQ,OAAO;EACf,UAAU,OAAO;EACjB,UAAU,OAAO;EACjB,WAAW,OAAO;EAClB,QAAQ,OAAO;EACf,QAAQ,OAAO;EACf,QAAQ,OAAO,OAAO,KAAK,WAAW;GACpC,MAAM,MAAM;GACZ,UAAU,MAAM;GAChB,SAAS,MAAM;GACf,MAAM,MAAM;GACZ,MAAM,MAAM;GACb,EAAE;EACJ;;;;;AAMH,SAAgB,iBAAiB,QAAuC;AACtE,QAAO;EACL,SAAS,OAAO;EAChB,SAAS;GACP,aAAa,OAAO;GACpB,eAAe,OAAO;GACtB,YAAY,OAAO;GACnB,YAAY,OAAO;GACnB,WAAW,OAAO;GAClB,WAAW,OAAO;GAClB,QAAQ,OAAO;GAChB;EACD,YAAY,OAAO,WAAW,KAAK,SAAS;GAC1C,UAAU,IAAI;GACd,OAAO,IAAI;GACX,QAAQ,IAAI;GACZ,QAAQ,IAAI;GACZ,UAAU,IAAI;GACd,OAAO,IAAI;GACX,YAAY,IAAI;GACjB,EAAE;EACH,QAAQ,OAAO,OAAO,KAAK,WAAW;GACpC,QAAQ,MAAM;GACd,UAAU,MAAM;GAChB,SAAS,MAAM;GACf,UAAU,MAAM;GAChB,MAAM,MAAM;GACZ,MAAM,MAAM;GACZ,QAAQ,MAAM;GACd,SAAS,MAAM;GACf,WAAW,MAAM;GACjB,SAAS,MAAM;GAChB,EAAE;EACJ;;;;;AAMH,SAAgB,aACd,QACA,UAA6B,EAAE,EACvB;CACR,MAAM,EAAE,SAAS,MAAM,iBAAiB,SAAS;CAEjD,MAAM,SAAS,iBACX,iBAAiB,OAAO,GACxB,oBAAoB,OAAO;AAE/B,QAAO,SAAS,KAAK,UAAU,QAAQ,MAAM,EAAE,GAAG,KAAK,UAAU,OAAO"}
@@ -0,0 +1,101 @@
1
+ import { CICheckResult } from "../services/ci-check/types.js";
2
+
3
+ //#region src/formatters/sarif.d.ts
4
+
5
+ /**
6
+ * SARIF v2.1.0 output structure.
7
+ */
8
+ interface SarifOutput {
9
+ $schema: string;
10
+ version: string;
11
+ runs: SarifRun[];
12
+ }
13
+ interface SarifRun {
14
+ tool: {
15
+ driver: {
16
+ name: string;
17
+ version: string;
18
+ informationUri: string;
19
+ rules: SarifRule[];
20
+ };
21
+ };
22
+ results: SarifResult[];
23
+ invocations: SarifInvocation[];
24
+ versionControlProvenance?: SarifVersionControl[];
25
+ }
26
+ interface SarifRule {
27
+ id: string;
28
+ name: string;
29
+ shortDescription: {
30
+ text: string;
31
+ };
32
+ fullDescription?: {
33
+ text: string;
34
+ };
35
+ defaultConfiguration: {
36
+ level: 'error' | 'warning' | 'note' | 'none';
37
+ };
38
+ helpUri?: string;
39
+ }
40
+ interface SarifResult {
41
+ ruleId: string;
42
+ ruleIndex: number;
43
+ level: 'error' | 'warning' | 'note' | 'none';
44
+ message: {
45
+ text: string;
46
+ };
47
+ locations?: SarifLocation[];
48
+ partialFingerprints?: Record<string, string>;
49
+ }
50
+ interface SarifLocation {
51
+ physicalLocation: {
52
+ artifactLocation: {
53
+ uri: string;
54
+ uriBaseId?: string;
55
+ };
56
+ region?: {
57
+ startLine?: number;
58
+ startColumn?: number;
59
+ endLine?: number;
60
+ endColumn?: number;
61
+ };
62
+ };
63
+ }
64
+ interface SarifInvocation {
65
+ executionSuccessful: boolean;
66
+ endTimeUtc: string;
67
+ workingDirectory?: {
68
+ uri: string;
69
+ };
70
+ }
71
+ interface SarifVersionControl {
72
+ repositoryUri?: string;
73
+ revisionId?: string;
74
+ branch?: string;
75
+ }
76
+ /**
77
+ * Options for SARIF formatting.
78
+ */
79
+ interface SarifFormatOptions {
80
+ /** Tool name. */
81
+ toolName?: string;
82
+ /** Tool version. */
83
+ toolVersion?: string;
84
+ /** Tool information URI. */
85
+ toolUri?: string;
86
+ /** Repository URI for version control provenance. */
87
+ repositoryUri?: string;
88
+ /** Working directory. */
89
+ workingDirectory?: string;
90
+ }
91
+ /**
92
+ * Format CI check results as SARIF.
93
+ */
94
+ declare function formatAsSarif(result: CICheckResult, options?: SarifFormatOptions): SarifOutput;
95
+ /**
96
+ * Serialize SARIF output to JSON string.
97
+ */
98
+ declare function sarifToJson(sarif: SarifOutput): string;
99
+ //#endregion
100
+ export { SarifFormatOptions, SarifOutput, formatAsSarif, sarifToJson };
101
+ //# sourceMappingURL=sarif.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.d.ts","names":[],"sources":["../../src/formatters/sarif.ts"],"sourcesContent":[],"mappings":";;;;;AAmCgD;AAG7B;AAoBT,UAxCO,WAAA,CAwCM;EAeb,OAAA,EAAA,MAAA;EAMA,OAAA,EAAA,MAAA;EASO,IAAA,EAnET,QAmES,EAAA;AA0EjB;UA1IU,QAAA,CA2IA;EACC,IAAA,EAAA;IACR,MAAA,EAAA;MAAW,IAAA,EAAA,MAAA;MAgKE,OAAW,EAAA,MAAA;;aAvSd;;;WAGF;eACI;6BACc;;UAGnB,SAAA;;;;;;;;;;;;;;UAWA,WAAA;;;;;;;cAKI;wBACU;;UAGd,aAAA;;;;;;;;;;;;;;UAeA,eAAA;;;;;;;UAMA,mBAAA;;;;;;;;UASO,kBAAA;;;;;;;;;;;;;;;iBA0ED,aAAA,SACN,yBACC,qBACR;;;;iBAgKa,WAAA,QAAmB"}
@@ -0,0 +1,163 @@
1
+ //#region src/formatters/sarif.ts
2
+ /**
3
+ * Map of rule IDs to their metadata.
4
+ */
5
+ const RULE_METADATA = {
6
+ "spec-structure-error": {
7
+ name: "Spec Structure Error",
8
+ description: "Contract specification is missing required structure elements"
9
+ },
10
+ "spec-structure-warning": {
11
+ name: "Spec Structure Warning",
12
+ description: "Contract specification has recommended but missing elements"
13
+ },
14
+ "integrity-orphaned": {
15
+ name: "Orphaned Spec",
16
+ description: "Contract specification is not linked to any feature"
17
+ },
18
+ "integrity-unresolved-ref": {
19
+ name: "Unresolved Reference",
20
+ description: "Contract specification references a non-existent spec"
21
+ },
22
+ "integrity-missing-feature": {
23
+ name: "Missing Feature",
24
+ description: "Feature referenced by spec does not exist"
25
+ },
26
+ "integrity-broken-link": {
27
+ name: "Broken Link",
28
+ description: "Link between specs is broken"
29
+ },
30
+ "deps-circular": {
31
+ name: "Circular Dependency",
32
+ description: "Circular dependency detected between contracts"
33
+ },
34
+ "deps-missing": {
35
+ name: "Missing Dependency",
36
+ description: "Contract depends on a non-existent contract"
37
+ },
38
+ "handler-missing": {
39
+ name: "Missing Handler",
40
+ description: "Handler implementation file does not exist for this contract"
41
+ },
42
+ "handler-warning": {
43
+ name: "Handler Warning",
44
+ description: "Handler implementation has potential issues"
45
+ },
46
+ "test-missing": {
47
+ name: "Missing Test",
48
+ description: "Test file does not exist for this contract"
49
+ },
50
+ "test-warning": {
51
+ name: "Test Warning",
52
+ description: "Test implementation has potential issues"
53
+ }
54
+ };
55
+ /**
56
+ * Format CI check results as SARIF.
57
+ */
58
+ function formatAsSarif(result, options = {}) {
59
+ const { toolName = "ContractSpec", toolVersion = "1.0.0", toolUri = "https://contractspec.io", repositoryUri, workingDirectory } = options;
60
+ const ruleMap = /* @__PURE__ */ new Map();
61
+ const ruleIndexMap = /* @__PURE__ */ new Map();
62
+ const issuesWithFiles = result.issues.filter((issue) => issue.file);
63
+ for (const issue of issuesWithFiles) if (!ruleMap.has(issue.ruleId)) {
64
+ const metadata = RULE_METADATA[issue.ruleId] ?? {
65
+ name: issue.ruleId,
66
+ description: `Rule: ${issue.ruleId}`
67
+ };
68
+ const rule = {
69
+ id: issue.ruleId,
70
+ name: metadata.name,
71
+ shortDescription: { text: metadata.description },
72
+ defaultConfiguration: { level: mapSeverityToLevel(issue.severity) }
73
+ };
74
+ if (metadata.helpUri) rule.helpUri = metadata.helpUri;
75
+ ruleIndexMap.set(issue.ruleId, ruleMap.size);
76
+ ruleMap.set(issue.ruleId, rule);
77
+ }
78
+ const results = issuesWithFiles.map((issue) => {
79
+ const sarifResult = {
80
+ ruleId: issue.ruleId,
81
+ ruleIndex: ruleIndexMap.get(issue.ruleId) ?? 0,
82
+ level: mapSeverityToLevel(issue.severity),
83
+ message: { text: issue.message }
84
+ };
85
+ const location = { physicalLocation: { artifactLocation: {
86
+ uri: normalizeUri(issue.file),
87
+ uriBaseId: "%SRCROOT%"
88
+ } } };
89
+ if (issue.line !== void 0) location.physicalLocation.region = {
90
+ startLine: issue.line,
91
+ startColumn: issue.column ?? 1,
92
+ endLine: issue.endLine ?? issue.line,
93
+ endColumn: issue.endColumn
94
+ };
95
+ sarifResult.locations = [location];
96
+ sarifResult.partialFingerprints = { primaryLocationLineHash: createFingerprint(issue) };
97
+ return sarifResult;
98
+ });
99
+ const versionControlProvenance = [];
100
+ if (repositoryUri) versionControlProvenance.push({
101
+ repositoryUri,
102
+ revisionId: result.commitSha,
103
+ branch: result.branch
104
+ });
105
+ const run = {
106
+ tool: { driver: {
107
+ name: toolName,
108
+ version: toolVersion,
109
+ informationUri: toolUri,
110
+ rules: Array.from(ruleMap.values())
111
+ } },
112
+ results,
113
+ invocations: [{
114
+ executionSuccessful: result.success,
115
+ endTimeUtc: result.timestamp,
116
+ ...workingDirectory && { workingDirectory: { uri: workingDirectory } }
117
+ }]
118
+ };
119
+ if (versionControlProvenance.length > 0) run.versionControlProvenance = versionControlProvenance;
120
+ return {
121
+ $schema: "https://json.schemastore.org/sarif-2.1.0.json",
122
+ version: "2.1.0",
123
+ runs: [run]
124
+ };
125
+ }
126
+ /**
127
+ * Map CI severity to SARIF level.
128
+ */
129
+ function mapSeverityToLevel(severity) {
130
+ switch (severity) {
131
+ case "error": return "error";
132
+ case "warning": return "warning";
133
+ case "note": return "note";
134
+ default: return "warning";
135
+ }
136
+ }
137
+ /**
138
+ * Normalize file path to SARIF URI format.
139
+ */
140
+ function normalizeUri(filePath) {
141
+ return filePath.replace(/^\.\//, "").replace(/\\/g, "/");
142
+ }
143
+ /**
144
+ * Create a fingerprint for issue deduplication.
145
+ */
146
+ function createFingerprint(issue) {
147
+ const parts = [
148
+ issue.ruleId,
149
+ issue.file ?? "",
150
+ issue.message
151
+ ];
152
+ return Buffer.from(parts.join("|")).toString("base64").slice(0, 16);
153
+ }
154
+ /**
155
+ * Serialize SARIF output to JSON string.
156
+ */
157
+ function sarifToJson(sarif) {
158
+ return JSON.stringify(sarif, null, 2);
159
+ }
160
+
161
+ //#endregion
162
+ export { formatAsSarif, sarifToJson };
163
+ //# sourceMappingURL=sarif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.js","names":["RULE_METADATA: Record<\n string,\n { name: string; description: string; helpUri?: string }\n>","rule: SarifRule","results: SarifResult[]","sarifResult: SarifResult","location: SarifLocation","versionControlProvenance: SarifVersionControl[]","run: SarifRun"],"sources":["../../src/formatters/sarif.ts"],"sourcesContent":["/**\n * SARIF output formatter.\n *\n * Formats CI check results as SARIF (Static Analysis Results Interchange Format)\n * for integration with GitHub Code Scanning and other security tools.\n *\n * SARIF Specification: https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html\n */\n\nimport type {\n CICheckResult,\n CIIssue,\n CIIssueSeverity,\n} from '../services/ci-check/types';\n\n/**\n * SARIF v2.1.0 output structure.\n */\nexport interface SarifOutput {\n $schema: string;\n version: string;\n runs: SarifRun[];\n}\n\ninterface SarifRun {\n tool: {\n driver: {\n name: string;\n version: string;\n informationUri: string;\n rules: SarifRule[];\n };\n };\n results: SarifResult[];\n invocations: SarifInvocation[];\n versionControlProvenance?: SarifVersionControl[];\n}\n\ninterface SarifRule {\n id: string;\n name: string;\n shortDescription: { text: string };\n fullDescription?: { text: string };\n defaultConfiguration: {\n level: 'error' | 'warning' | 'note' | 'none';\n };\n helpUri?: string;\n}\n\ninterface SarifResult {\n ruleId: string;\n ruleIndex: number;\n level: 'error' | 'warning' | 'note' | 'none';\n message: { text: string };\n locations?: SarifLocation[];\n partialFingerprints?: Record<string, string>;\n}\n\ninterface SarifLocation {\n physicalLocation: {\n artifactLocation: {\n uri: string;\n uriBaseId?: string;\n };\n region?: {\n startLine?: number;\n startColumn?: number;\n endLine?: number;\n endColumn?: number;\n };\n };\n}\n\ninterface SarifInvocation {\n executionSuccessful: boolean;\n endTimeUtc: string;\n workingDirectory?: { uri: string };\n}\n\ninterface SarifVersionControl {\n repositoryUri?: string;\n revisionId?: string;\n branch?: string;\n}\n\n/**\n * Options for SARIF formatting.\n */\nexport interface SarifFormatOptions {\n /** Tool name. */\n toolName?: string;\n /** Tool version. */\n toolVersion?: string;\n /** Tool information URI. */\n toolUri?: string;\n /** Repository URI for version control provenance. */\n repositoryUri?: string;\n /** Working directory. */\n workingDirectory?: string;\n}\n\n/**\n * Map of rule IDs to their metadata.\n */\nconst RULE_METADATA: Record<\n string,\n { name: string; description: string; helpUri?: string }\n> = {\n 'spec-structure-error': {\n name: 'Spec Structure Error',\n description:\n 'Contract specification is missing required structure elements',\n },\n 'spec-structure-warning': {\n name: 'Spec Structure Warning',\n description: 'Contract specification has recommended but missing elements',\n },\n 'integrity-orphaned': {\n name: 'Orphaned Spec',\n description: 'Contract specification is not linked to any feature',\n },\n 'integrity-unresolved-ref': {\n name: 'Unresolved Reference',\n description: 'Contract specification references a non-existent spec',\n },\n 'integrity-missing-feature': {\n name: 'Missing Feature',\n description: 'Feature referenced by spec does not exist',\n },\n 'integrity-broken-link': {\n name: 'Broken Link',\n description: 'Link between specs is broken',\n },\n 'deps-circular': {\n name: 'Circular Dependency',\n description: 'Circular dependency detected between contracts',\n },\n 'deps-missing': {\n name: 'Missing Dependency',\n description: 'Contract depends on a non-existent contract',\n },\n 'handler-missing': {\n name: 'Missing Handler',\n description: 'Handler implementation file does not exist for this contract',\n },\n 'handler-warning': {\n name: 'Handler Warning',\n description: 'Handler implementation has potential issues',\n },\n 'test-missing': {\n name: 'Missing Test',\n description: 'Test file does not exist for this contract',\n },\n 'test-warning': {\n name: 'Test Warning',\n description: 'Test implementation has potential issues',\n },\n};\n\n/**\n * Format CI check results as SARIF.\n */\nexport function formatAsSarif(\n result: CICheckResult,\n options: SarifFormatOptions = {}\n): SarifOutput {\n const {\n toolName = 'ContractSpec',\n toolVersion = '1.0.0',\n toolUri = 'https://contractspec.io',\n repositoryUri,\n workingDirectory,\n } = options;\n\n // Collect unique rules from issues (only from issues with files)\n const ruleMap = new Map<string, SarifRule>();\n const ruleIndexMap = new Map<string, number>();\n\n // Only collect rules from issues that have files (these are the ones that will be in results)\n const issuesWithFiles = result.issues.filter((issue) => issue.file);\n\n for (const issue of issuesWithFiles) {\n if (!ruleMap.has(issue.ruleId)) {\n const metadata = RULE_METADATA[issue.ruleId] ?? {\n name: issue.ruleId,\n description: `Rule: ${issue.ruleId}`,\n };\n\n const rule: SarifRule = {\n id: issue.ruleId,\n name: metadata.name,\n shortDescription: { text: metadata.description },\n defaultConfiguration: {\n level: mapSeverityToLevel(issue.severity),\n },\n };\n\n if (metadata.helpUri) {\n rule.helpUri = metadata.helpUri;\n }\n\n ruleIndexMap.set(issue.ruleId, ruleMap.size);\n ruleMap.set(issue.ruleId, rule);\n }\n }\n\n // Convert issues to SARIF results (only issues with file locations)\n // GitHub Code Scanning requires every result to have at least one location\n const results: SarifResult[] = issuesWithFiles.map((issue) => {\n const sarifResult: SarifResult = {\n ruleId: issue.ruleId,\n ruleIndex: ruleIndexMap.get(issue.ruleId) ?? 0,\n level: mapSeverityToLevel(issue.severity),\n message: { text: issue.message },\n };\n\n // issue.file is guaranteed to be defined due to the filter above\n const location: SarifLocation = {\n physicalLocation: {\n artifactLocation: {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n uri: normalizeUri(issue.file!),\n uriBaseId: '%SRCROOT%',\n },\n },\n };\n\n if (issue.line !== undefined) {\n location.physicalLocation.region = {\n startLine: issue.line,\n startColumn: issue.column ?? 1,\n endLine: issue.endLine ?? issue.line,\n endColumn: issue.endColumn,\n };\n }\n\n sarifResult.locations = [location];\n\n // Add fingerprint for deduplication\n sarifResult.partialFingerprints = {\n primaryLocationLineHash: createFingerprint(issue),\n };\n\n return sarifResult;\n });\n\n // Build version control provenance (only if repositoryUri is provided, as it's required by SARIF schema)\n const versionControlProvenance: SarifVersionControl[] = [];\n if (repositoryUri) {\n versionControlProvenance.push({\n repositoryUri,\n revisionId: result.commitSha,\n branch: result.branch,\n });\n }\n\n const run: SarifRun = {\n tool: {\n driver: {\n name: toolName,\n version: toolVersion,\n informationUri: toolUri,\n rules: Array.from(ruleMap.values()),\n },\n },\n results,\n invocations: [\n {\n executionSuccessful: result.success,\n endTimeUtc: result.timestamp,\n ...(workingDirectory && {\n workingDirectory: { uri: workingDirectory },\n }),\n },\n ],\n };\n\n if (versionControlProvenance.length > 0) {\n run.versionControlProvenance = versionControlProvenance;\n }\n\n return {\n $schema: 'https://json.schemastore.org/sarif-2.1.0.json',\n version: '2.1.0',\n runs: [run],\n };\n}\n\n/**\n * Map CI severity to SARIF level.\n */\nfunction mapSeverityToLevel(\n severity: CIIssueSeverity\n): 'error' | 'warning' | 'note' {\n switch (severity) {\n case 'error':\n return 'error';\n case 'warning':\n return 'warning';\n case 'note':\n return 'note';\n default:\n return 'warning';\n }\n}\n\n/**\n * Normalize file path to SARIF URI format.\n */\nfunction normalizeUri(filePath: string): string {\n // Remove leading ./ and normalize path separators\n return filePath.replace(/^\\.\\//, '').replace(/\\\\/g, '/');\n}\n\n/**\n * Create a fingerprint for issue deduplication.\n */\nfunction createFingerprint(issue: CIIssue): string {\n const parts = [issue.ruleId, issue.file ?? '', issue.message];\n return Buffer.from(parts.join('|')).toString('base64').slice(0, 16);\n}\n\n/**\n * Serialize SARIF output to JSON string.\n */\nexport function sarifToJson(sarif: SarifOutput): string {\n return JSON.stringify(sarif, null, 2);\n}\n"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { CICheckResult } from "../services/ci-check/types.js";
2
+
3
+ //#region src/formatters/text.d.ts
4
+
5
+ /**
6
+ * Options for text formatting.
7
+ */
8
+ interface TextFormatOptions {
9
+ /** Show verbose output with all details. */
10
+ verbose?: boolean;
11
+ /** Include timing information. */
12
+ showTiming?: boolean;
13
+ /** Group issues by file. */
14
+ groupByFile?: boolean;
15
+ }
16
+ /**
17
+ * Text output lines with optional styling hints.
18
+ */
19
+ interface TextLine {
20
+ text: string;
21
+ style?: 'normal' | 'bold' | 'error' | 'warning' | 'success' | 'muted';
22
+ indent?: number;
23
+ }
24
+ /**
25
+ * Format CI check results as text lines.
26
+ * Returns structured lines that can be styled by the CLI.
27
+ */
28
+ declare function formatAsTextLines(result: CICheckResult, options?: TextFormatOptions): TextLine[];
29
+ /**
30
+ * Format CI check results as plain text string.
31
+ */
32
+ declare function formatAsText(result: CICheckResult, options?: TextFormatOptions): string;
33
+ //#endregion
34
+ export { TextFormatOptions, TextLine, formatAsText, formatAsTextLines };
35
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","names":[],"sources":["../../src/formatters/text.ts"],"sourcesContent":[],"mappings":";;;;;;;AAqKgB,UArJC,iBAAA,CAsJP;;;;;;;;;;;UA1IO,QAAA;;;;;;;;;iBAUD,iBAAA,SACN,yBACC,oBACR;;;;iBA4Ha,YAAA,SACN,yBACC"}