@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,92 @@
1
+ import { findWorkspaceRoot } from "../../adapters/workspace.mjs";
2
+ import { loadVibeConfig } from "./config.mjs";
3
+ import { copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
4
+ import { dirname, join } from "node:path";
5
+ import { glob } from "glob";
6
+ import { existsSync } from "node:fs";
7
+
8
+ //#region src/services/vibe/context.ts
9
+ /**
10
+ * Context export service.
11
+ *
12
+ * Exports a safe context bundle for AI agents.
13
+ */
14
+ const DEFAULT_IGNORES = [
15
+ "**/node_modules/**",
16
+ "**/dist/**",
17
+ "**/.git/**",
18
+ "**/.env*",
19
+ "**/id_rsa",
20
+ "**/*.pem",
21
+ "**/*.key",
22
+ "**/secrets.*"
23
+ ];
24
+ /**
25
+ * Export a context bundle for AI agents.
26
+ */
27
+ async function exportContext(cwd) {
28
+ const workingDir = cwd ?? process.cwd();
29
+ const root = findWorkspaceRoot(workingDir) ?? workingDir;
30
+ const config = await loadVibeConfig(workingDir);
31
+ const contextDir = join(root, ".contractspec", "context");
32
+ const contextFilesDir = join(contextDir, "files");
33
+ let ignorePatterns = [...DEFAULT_IGNORES];
34
+ const gitignorePath = join(root, ".gitignore");
35
+ if (existsSync(gitignorePath)) {
36
+ const gitIgnores = (await readFile(gitignorePath, "utf-8")).split("\n").map((l) => l.trim()).filter((l) => l && !l.startsWith("#"));
37
+ ignorePatterns = [...ignorePatterns, ...gitIgnores];
38
+ }
39
+ const allowlist = config.contextExportAllowlist.length > 0 ? config.contextExportAllowlist : [
40
+ "README.md",
41
+ "package.json",
42
+ "contracts/**/*.ts"
43
+ ];
44
+ const files = [];
45
+ for (const pattern of allowlist) {
46
+ const matches = await glob(pattern, {
47
+ cwd: root,
48
+ ignore: ignorePatterns,
49
+ nodir: true,
50
+ dot: true
51
+ });
52
+ files.push(...matches);
53
+ }
54
+ const uniqueFiles = Array.from(new Set(files)).sort();
55
+ if (uniqueFiles.length === 0) return {
56
+ success: false,
57
+ files: [],
58
+ indexPath: "",
59
+ error: "No files matched the allowlist. Check your config."
60
+ };
61
+ await mkdir(contextFilesDir, { recursive: true });
62
+ const exportedFiles = [];
63
+ for (const file of uniqueFiles) {
64
+ const absSource = join(root, file);
65
+ const absDest = join(contextFilesDir, file);
66
+ await mkdir(dirname(absDest), { recursive: true });
67
+ await copyFile(absSource, absDest);
68
+ exportedFiles.push({
69
+ path: file,
70
+ size: 0
71
+ });
72
+ }
73
+ const indexPath = join(contextDir, "index.json");
74
+ const index = {
75
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
76
+ files: exportedFiles.map((f) => f.path),
77
+ config: {
78
+ allowlist: config.contextExportAllowlist,
79
+ ignores: ignorePatterns.length
80
+ }
81
+ };
82
+ await writeFile(indexPath, JSON.stringify(index, null, 2));
83
+ return {
84
+ success: true,
85
+ files: uniqueFiles,
86
+ indexPath
87
+ };
88
+ }
89
+
90
+ //#endregion
91
+ export { exportContext };
92
+ //# sourceMappingURL=context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.mjs","names":[],"sources":["../../../src/services/vibe/context.ts"],"sourcesContent":["/**\n * Context export service.\n *\n * Exports a safe context bundle for AI agents.\n */\n\nimport { mkdir, readFile, writeFile, copyFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { glob } from 'glob';\nimport { findWorkspaceRoot } from '../../adapters/workspace';\nimport { loadVibeConfig } from './config';\n\nconst DEFAULT_IGNORES = [\n '**/node_modules/**',\n '**/dist/**',\n '**/.git/**',\n '**/.env*',\n '**/id_rsa',\n '**/*.pem',\n '**/*.key',\n '**/secrets.*',\n];\n\nexport interface ContextExportResult {\n success: boolean;\n files: string[];\n indexPath: string;\n error?: string;\n}\n\n/**\n * Export a context bundle for AI agents.\n */\nexport async function exportContext(\n cwd?: string\n): Promise<ContextExportResult> {\n const workingDir = cwd ?? process.cwd();\n const root = findWorkspaceRoot(workingDir) ?? workingDir;\n const config = await loadVibeConfig(workingDir);\n\n const contextDir = join(root, '.contractspec', 'context');\n const contextFilesDir = join(contextDir, 'files');\n\n // Prepare ignore list\n let ignorePatterns = [...DEFAULT_IGNORES];\n\n // Read .gitignore\n const gitignorePath = join(root, '.gitignore');\n if (existsSync(gitignorePath)) {\n const gitignoreContent = await readFile(gitignorePath, 'utf-8');\n const gitIgnores = gitignoreContent\n .split('\\n')\n .map((l) => l.trim())\n .filter((l) => l && !l.startsWith('#'));\n ignorePatterns = [...ignorePatterns, ...gitIgnores];\n }\n\n // Resolve allowlist\n const allowlist =\n config.contextExportAllowlist.length > 0\n ? config.contextExportAllowlist\n : ['README.md', 'package.json', 'contracts/**/*.ts'];\n\n const files: string[] = [];\n\n for (const pattern of allowlist) {\n const matches = await glob(pattern, {\n cwd: root,\n ignore: ignorePatterns,\n nodir: true,\n dot: true,\n });\n files.push(...matches);\n }\n\n // Deduplicate\n const uniqueFiles = Array.from(new Set(files)).sort();\n\n if (uniqueFiles.length === 0) {\n return {\n success: false,\n files: [],\n indexPath: '',\n error: 'No files matched the allowlist. Check your config.',\n };\n }\n\n await mkdir(contextFilesDir, { recursive: true });\n\n // Copy files\n const exportedFiles: { path: string; size: number }[] = [];\n\n for (const file of uniqueFiles) {\n const absSource = join(root, file);\n const absDest = join(contextFilesDir, file);\n\n await mkdir(dirname(absDest), { recursive: true });\n await copyFile(absSource, absDest);\n\n exportedFiles.push({ path: file, size: 0 });\n }\n\n // Create index.json\n const indexPath = join(contextDir, 'index.json');\n const index = {\n generatedAt: new Date().toISOString(),\n files: exportedFiles.map((f) => f.path),\n config: {\n allowlist: config.contextExportAllowlist,\n ignores: ignorePatterns.length,\n },\n };\n\n await writeFile(indexPath, JSON.stringify(index, null, 2));\n\n return {\n success: true,\n files: uniqueFiles,\n indexPath,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;AAYD,eAAsB,cACpB,KAC8B;CAC9B,MAAM,aAAa,OAAO,QAAQ,KAAK;CACvC,MAAM,OAAO,kBAAkB,WAAW,IAAI;CAC9C,MAAM,SAAS,MAAM,eAAe,WAAW;CAE/C,MAAM,aAAa,KAAK,MAAM,iBAAiB,UAAU;CACzD,MAAM,kBAAkB,KAAK,YAAY,QAAQ;CAGjD,IAAI,iBAAiB,CAAC,GAAG,gBAAgB;CAGzC,MAAM,gBAAgB,KAAK,MAAM,aAAa;AAC9C,KAAI,WAAW,cAAc,EAAE;EAE7B,MAAM,cADmB,MAAM,SAAS,eAAe,QAAQ,EAE5D,MAAM,KAAK,CACX,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,QAAQ,MAAM,KAAK,CAAC,EAAE,WAAW,IAAI,CAAC;AACzC,mBAAiB,CAAC,GAAG,gBAAgB,GAAG,WAAW;;CAIrD,MAAM,YACJ,OAAO,uBAAuB,SAAS,IACnC,OAAO,yBACP;EAAC;EAAa;EAAgB;EAAoB;CAExD,MAAM,QAAkB,EAAE;AAE1B,MAAK,MAAM,WAAW,WAAW;EAC/B,MAAM,UAAU,MAAM,KAAK,SAAS;GAClC,KAAK;GACL,QAAQ;GACR,OAAO;GACP,KAAK;GACN,CAAC;AACF,QAAM,KAAK,GAAG,QAAQ;;CAIxB,MAAM,cAAc,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,MAAM;AAErD,KAAI,YAAY,WAAW,EACzB,QAAO;EACL,SAAS;EACT,OAAO,EAAE;EACT,WAAW;EACX,OAAO;EACR;AAGH,OAAM,MAAM,iBAAiB,EAAE,WAAW,MAAM,CAAC;CAGjD,MAAM,gBAAkD,EAAE;AAE1D,MAAK,MAAM,QAAQ,aAAa;EAC9B,MAAM,YAAY,KAAK,MAAM,KAAK;EAClC,MAAM,UAAU,KAAK,iBAAiB,KAAK;AAE3C,QAAM,MAAM,QAAQ,QAAQ,EAAE,EAAE,WAAW,MAAM,CAAC;AAClD,QAAM,SAAS,WAAW,QAAQ;AAElC,gBAAc,KAAK;GAAE,MAAM;GAAM,MAAM;GAAG,CAAC;;CAI7C,MAAM,YAAY,KAAK,YAAY,aAAa;CAChD,MAAM,QAAQ;EACZ,8BAAa,IAAI,MAAM,EAAC,aAAa;EACrC,OAAO,cAAc,KAAK,MAAM,EAAE,KAAK;EACvC,QAAQ;GACN,WAAW,OAAO;GAClB,SAAS,eAAe;GACzB;EACF;AAED,OAAM,UAAU,WAAW,KAAK,UAAU,OAAO,MAAM,EAAE,CAAC;AAE1D,QAAO;EACL,SAAS;EACT,OAAO;EACP;EACD"}
@@ -0,0 +1,8 @@
1
+ import { Workflow } from "./types.mjs";
2
+
3
+ //#region src/services/vibe/definitions.d.ts
4
+
5
+ declare const builtinWorkflows: Workflow[];
6
+ //#endregion
7
+ export { builtinWorkflows };
8
+ //# sourceMappingURL=definitions.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.d.mts","names":[],"sources":["../../../src/services/vibe/definitions.ts"],"sourcesContent":[],"mappings":";;;;cAQa,kBAAkB"}
@@ -0,0 +1,129 @@
1
+ //#region src/services/vibe/definitions.ts
2
+ const builtinWorkflows = [
3
+ {
4
+ id: "brownfield.openapi-import",
5
+ name: "Brownfield: OpenAPI Import",
6
+ description: "Import OpenAPI into draft contracts, review, and apply.",
7
+ steps: [
8
+ {
9
+ id: "extract",
10
+ label: "Extract Drafts",
11
+ command: "contractspec extract --from openapi --out .contractspec/work/openapi-import"
12
+ },
13
+ {
14
+ id: "review",
15
+ label: "Review Drafts",
16
+ manualCheckpoint: true,
17
+ manualMessage: "Drafts extracted to .contractspec/work/openapi-import.\nPlease review them and move selected files to contracts/ directory.\nContinue when done."
18
+ },
19
+ {
20
+ id: "gap",
21
+ label: "Analyze Gaps",
22
+ command: "contractspec gap"
23
+ },
24
+ {
25
+ id: "apply",
26
+ label: "Apply Changes (Generate)",
27
+ command: "contractspec apply"
28
+ },
29
+ {
30
+ id: "impact",
31
+ label: "Check Impact",
32
+ command: "contractspec impact"
33
+ },
34
+ {
35
+ id: "ci",
36
+ label: "Run CI Checks",
37
+ command: "contractspec ci"
38
+ },
39
+ {
40
+ id: "clean",
41
+ label: "Clean Scaffolding",
42
+ command: "contractspec clean --work"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ id: "change.feature",
48
+ name: "Change: Feature Development",
49
+ description: "Routine workflow for contract edits.",
50
+ steps: [
51
+ {
52
+ id: "impact",
53
+ label: "Check Impact",
54
+ command: "contractspec impact"
55
+ },
56
+ {
57
+ id: "apply",
58
+ label: "Apply Changes",
59
+ command: "contractspec apply"
60
+ },
61
+ {
62
+ id: "ci",
63
+ label: "Run CI Checks",
64
+ command: "contractspec ci"
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ id: "release",
70
+ name: "Release: Version & Publish",
71
+ description: "Prepare and publish a new contract version.",
72
+ steps: [
73
+ {
74
+ id: "impact",
75
+ label: "Verify Impact",
76
+ command: "contractspec impact"
77
+ },
78
+ {
79
+ id: "ci",
80
+ label: "CI Check",
81
+ command: "contractspec ci --fail-on-warnings"
82
+ },
83
+ {
84
+ id: "bump",
85
+ label: "Bump Version",
86
+ command: "contractspec version bump",
87
+ manualCheckpoint: true,
88
+ manualMessage: "Review version bump. Continue to publish?"
89
+ },
90
+ {
91
+ id: "changelog",
92
+ label: "Generate Changelog",
93
+ command: "contractspec changelog"
94
+ },
95
+ {
96
+ id: "publish",
97
+ label: "Publish to Registry",
98
+ command: "echo \"Publishing...\" && contractspec registry publish",
99
+ tracks: ["product", "regulated"]
100
+ }
101
+ ]
102
+ },
103
+ {
104
+ id: "migration",
105
+ name: "Migration: Upgrades",
106
+ description: "Run migration scripts and verify integrity.",
107
+ steps: [
108
+ {
109
+ id: "upgrade",
110
+ label: "Upgrade Dependencies",
111
+ command: "contractspec upgrade"
112
+ },
113
+ {
114
+ id: "regenerate",
115
+ label: "Regenerate Artifacts",
116
+ command: "contractspec apply"
117
+ },
118
+ {
119
+ id: "verify",
120
+ label: "Verify Integrity",
121
+ command: "contractspec ci"
122
+ }
123
+ ]
124
+ }
125
+ ];
126
+
127
+ //#endregion
128
+ export { builtinWorkflows };
129
+ //# sourceMappingURL=definitions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.mjs","names":[],"sources":["../../../src/services/vibe/definitions.ts"],"sourcesContent":["/**\n * Built-in workflow definitions.\n *\n * These workflows are available by default in all ContractSpec projects.\n */\n\nimport type { Workflow } from './types';\n\nexport const builtinWorkflows: Workflow[] = [\n {\n id: 'brownfield.openapi-import',\n name: 'Brownfield: OpenAPI Import',\n description: 'Import OpenAPI into draft contracts, review, and apply.',\n steps: [\n {\n id: 'extract',\n label: 'Extract Drafts',\n command:\n 'contractspec extract --from openapi --out .contractspec/work/openapi-import',\n },\n {\n id: 'review',\n label: 'Review Drafts',\n manualCheckpoint: true,\n manualMessage:\n 'Drafts extracted to .contractspec/work/openapi-import.\\nPlease review them and move selected files to contracts/ directory.\\nContinue when done.',\n },\n {\n id: 'gap',\n label: 'Analyze Gaps',\n command: 'contractspec gap',\n },\n {\n id: 'apply',\n label: 'Apply Changes (Generate)',\n command: 'contractspec apply',\n },\n {\n id: 'impact',\n label: 'Check Impact',\n command: 'contractspec impact',\n },\n {\n id: 'ci',\n label: 'Run CI Checks',\n command: 'contractspec ci',\n },\n {\n id: 'clean',\n label: 'Clean Scaffolding',\n command: 'contractspec clean --work',\n },\n ],\n },\n {\n id: 'change.feature',\n name: 'Change: Feature Development',\n description: 'Routine workflow for contract edits.',\n steps: [\n {\n id: 'impact',\n label: 'Check Impact',\n command: 'contractspec impact',\n },\n {\n id: 'apply',\n label: 'Apply Changes',\n command: 'contractspec apply',\n },\n {\n id: 'ci',\n label: 'Run CI Checks',\n command: 'contractspec ci',\n },\n ],\n },\n {\n id: 'release',\n name: 'Release: Version & Publish',\n description: 'Prepare and publish a new contract version.',\n steps: [\n {\n id: 'impact',\n label: 'Verify Impact',\n command: 'contractspec impact',\n },\n {\n id: 'ci',\n label: 'CI Check',\n command: 'contractspec ci --fail-on-warnings',\n },\n {\n id: 'bump',\n label: 'Bump Version',\n command: 'contractspec version bump',\n manualCheckpoint: true,\n manualMessage: 'Review version bump. Continue to publish?',\n },\n {\n id: 'changelog',\n label: 'Generate Changelog',\n command: 'contractspec changelog',\n },\n {\n id: 'publish',\n label: 'Publish to Registry',\n command: 'echo \"Publishing...\" && contractspec registry publish',\n tracks: ['product', 'regulated'],\n },\n ],\n },\n {\n id: 'migration',\n name: 'Migration: Upgrades',\n description: 'Run migration scripts and verify integrity.',\n steps: [\n {\n id: 'upgrade',\n label: 'Upgrade Dependencies',\n command: 'contractspec upgrade',\n },\n {\n id: 'regenerate',\n label: 'Regenerate Artifacts',\n command: 'contractspec apply',\n },\n {\n id: 'verify',\n label: 'Verify Integrity',\n command: 'contractspec ci',\n },\n ],\n },\n];\n"],"mappings":";AAQA,MAAa,mBAA+B;CAC1C;EACE,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,SACE;IACH;GACD;IACE,IAAI;IACJ,OAAO;IACP,kBAAkB;IAClB,eACE;IACH;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACF;EACF;CACD;EACE,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACF;EACF;CACD;EACE,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACT,kBAAkB;IAClB,eAAe;IAChB;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACT,QAAQ,CAAC,WAAW,YAAY;IACjC;GACF;EACF;CACD;EACE,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACD;IACE,IAAI;IACJ,OAAO;IACP,SAAS;IACV;GACF;EACF;CACF"}
@@ -0,0 +1,44 @@
1
+ import { Workflow, WorkflowContext, WorkflowResult } from "./types.mjs";
2
+
3
+ //#region src/services/vibe/engine.d.ts
4
+
5
+ /**
6
+ * Console output adapter for workflow execution.
7
+ * Allows customization of output (e.g., silent mode, JSON mode).
8
+ */
9
+ interface WorkflowLogger {
10
+ log: (message: string) => void;
11
+ warn: (message: string) => void;
12
+ error: (message: string) => void;
13
+ }
14
+ /**
15
+ * Prompt adapter for manual checkpoints.
16
+ */
17
+ interface WorkflowPrompter {
18
+ select: (options: {
19
+ message: string;
20
+ choices: {
21
+ name: string;
22
+ value: string;
23
+ description?: string;
24
+ }[];
25
+ }) => Promise<string>;
26
+ }
27
+ /**
28
+ * No-op logger for silent execution.
29
+ */
30
+ declare const silentLogger: WorkflowLogger;
31
+ /**
32
+ * Console logger for CLI output.
33
+ */
34
+ declare const consoleLogger: WorkflowLogger;
35
+ /**
36
+ * Run a workflow with the given context.
37
+ */
38
+ declare function runWorkflow(workflow: Workflow, context: WorkflowContext, options?: {
39
+ logger?: WorkflowLogger;
40
+ prompter?: WorkflowPrompter;
41
+ }): Promise<WorkflowResult>;
42
+ //#endregion
43
+ export { WorkflowLogger, WorkflowPrompter, consoleLogger, runWorkflow, silentLogger };
44
+ //# sourceMappingURL=engine.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.mts","names":[],"sources":["../../../src/services/vibe/engine.ts"],"sourcesContent":[],"mappings":";;;;AAoDA;AASA;;;AAIa,UA/CI,cAAA,CA+CJ;EACE,GAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAEJ,IAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAR,KAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;;;;UAzCc,gBAAA;;;;;;;;QAIT;;;;;cAMK,cAAc;;;;cAed,eAAe;;;;iBASN,WAAA,WACV,mBACD;WAEE;aACE;IAEZ,QAAQ"}
@@ -0,0 +1,147 @@
1
+ import { spawn } from "node:child_process";
2
+
3
+ //#region src/services/vibe/engine.ts
4
+ /**
5
+ * Vibe workflow execution engine.
6
+ *
7
+ * Executes workflow steps with track filtering, conditions, and manual checkpoints.
8
+ */
9
+ /**
10
+ * No-op logger for silent execution.
11
+ */
12
+ const silentLogger = {
13
+ log: () => {},
14
+ warn: () => {},
15
+ error: () => {}
16
+ };
17
+ /**
18
+ * Console logger for CLI output.
19
+ */
20
+ const consoleLogger = {
21
+ log: (msg) => console.log(msg),
22
+ warn: (msg) => console.warn(msg),
23
+ error: (msg) => console.error(msg)
24
+ };
25
+ /**
26
+ * Run a workflow with the given context.
27
+ */
28
+ async function runWorkflow(workflow, context, options) {
29
+ const logger = options?.logger ?? consoleLogger;
30
+ const prompter = options?.prompter;
31
+ logger.log(`\nRunning Workflow: ${workflow.name}`);
32
+ if (workflow.description) logger.log(workflow.description);
33
+ logger.log(`Track: ${context.track}`);
34
+ if (context.dryRun) logger.warn("🚧 DRY RUN MODE: No changes will be made.\n");
35
+ const results = {
36
+ success: true,
37
+ steps: [],
38
+ stepsExecuted: [],
39
+ artifactsTouched: []
40
+ };
41
+ for (const step of workflow.steps) {
42
+ const stepResult = {
43
+ id: step.id,
44
+ name: step.label,
45
+ status: "skip",
46
+ command: step.command
47
+ };
48
+ if (step.tracks && !step.tracks.includes(context.track)) {
49
+ results.steps.push(stepResult);
50
+ continue;
51
+ }
52
+ if (step.condition) {
53
+ if (!await step.condition(context)) {
54
+ results.steps.push(stepResult);
55
+ continue;
56
+ }
57
+ }
58
+ logger.log(`\n👉 Step: ${step.label}`);
59
+ if (context.dryRun && step.command) logger.log(` Command: ${step.command}`);
60
+ if (step.manualCheckpoint) {
61
+ if (context.dryRun) logger.warn(" [Manual Checkpoint] Would pause here for user input.");
62
+ else if (prompter) {
63
+ if (step.manualMessage) logger.log(step.manualMessage);
64
+ const choice = await prompter.select({
65
+ message: "Checkpoint action:",
66
+ choices: [
67
+ {
68
+ name: "Proceed",
69
+ value: "proceed",
70
+ description: "Run this step"
71
+ },
72
+ {
73
+ name: "Skip Step",
74
+ value: "skip",
75
+ description: "Skip this step and continue"
76
+ },
77
+ {
78
+ name: "Abort Workflow",
79
+ value: "abort",
80
+ description: "Exit workflow"
81
+ }
82
+ ]
83
+ });
84
+ if (choice === "abort") {
85
+ logger.warn("Workflow aborted by user.");
86
+ results.success = false;
87
+ results.steps.push({
88
+ ...stepResult,
89
+ status: "skip",
90
+ error: "Aborted by user"
91
+ });
92
+ return results;
93
+ }
94
+ if (choice === "skip") {
95
+ logger.warn(" → Skipped by user.");
96
+ results.steps.push(stepResult);
97
+ continue;
98
+ }
99
+ }
100
+ }
101
+ if (!context.dryRun) try {
102
+ if (step.execute) await step.execute(context);
103
+ else if (step.command) await runShellCommand(step.command, context.root);
104
+ stepResult.status = "pass";
105
+ results.stepsExecuted.push(step.id);
106
+ results.steps.push(stepResult);
107
+ logger.log(" ✓ Completed");
108
+ } catch (error) {
109
+ const errorMsg = error instanceof Error ? error.message : String(error);
110
+ logger.error(` ❌ Failed: ${errorMsg}`);
111
+ results.success = false;
112
+ results.error = error instanceof Error ? error : new Error(String(error));
113
+ stepResult.status = "fail";
114
+ stepResult.error = errorMsg;
115
+ results.stepsExecuted.push(step.id);
116
+ results.steps.push(stepResult);
117
+ return results;
118
+ }
119
+ else results.steps.push(stepResult);
120
+ }
121
+ return results;
122
+ }
123
+ /**
124
+ * Execute a shell command.
125
+ */
126
+ async function runShellCommand(command, cwd) {
127
+ const parts = command.split(" ");
128
+ const cmd = parts[0];
129
+ const args = parts.slice(1);
130
+ if (!cmd) throw new Error("Invalid command");
131
+ return new Promise((resolve, reject) => {
132
+ const child = spawn(cmd, args, {
133
+ cwd,
134
+ stdio: "inherit",
135
+ shell: true
136
+ });
137
+ child.on("error", reject);
138
+ child.on("exit", (code) => {
139
+ if (code === 0) resolve();
140
+ else reject(/* @__PURE__ */ new Error(`Command exited with code ${code}`));
141
+ });
142
+ });
143
+ }
144
+
145
+ //#endregion
146
+ export { consoleLogger, runWorkflow, silentLogger };
147
+ //# sourceMappingURL=engine.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.mjs","names":[],"sources":["../../../src/services/vibe/engine.ts"],"sourcesContent":["/**\n * Vibe workflow execution engine.\n *\n * Executes workflow steps with track filtering, conditions, and manual checkpoints.\n */\n\nimport { spawn } from 'node:child_process';\nimport type {\n Workflow,\n WorkflowContext,\n WorkflowResult,\n WorkflowStepResult,\n} from './types';\n\n/**\n * Console output adapter for workflow execution.\n * Allows customization of output (e.g., silent mode, JSON mode).\n */\nexport interface WorkflowLogger {\n log: (message: string) => void;\n warn: (message: string) => void;\n error: (message: string) => void;\n}\n\n/**\n * Prompt adapter for manual checkpoints.\n */\nexport interface WorkflowPrompter {\n select: (options: {\n message: string;\n choices: { name: string; value: string; description?: string }[];\n }) => Promise<string>;\n}\n\n/**\n * No-op logger for silent execution.\n */\nexport const silentLogger: WorkflowLogger = {\n log: () => {\n /* noop */\n },\n warn: () => {\n /* noop */\n },\n error: () => {\n /* noop */\n },\n};\n\n/**\n * Console logger for CLI output.\n */\nexport const consoleLogger: WorkflowLogger = {\n log: (msg) => console.log(msg),\n warn: (msg) => console.warn(msg),\n error: (msg) => console.error(msg),\n};\n\n/**\n * Run a workflow with the given context.\n */\nexport async function runWorkflow(\n workflow: Workflow,\n context: WorkflowContext,\n options?: {\n logger?: WorkflowLogger;\n prompter?: WorkflowPrompter;\n }\n): Promise<WorkflowResult> {\n const logger = options?.logger ?? consoleLogger;\n const prompter = options?.prompter;\n\n logger.log(`\\nRunning Workflow: ${workflow.name}`);\n if (workflow.description) {\n logger.log(workflow.description);\n }\n logger.log(`Track: ${context.track}`);\n if (context.dryRun) {\n logger.warn('🚧 DRY RUN MODE: No changes will be made.\\n');\n }\n\n const results: WorkflowResult = {\n success: true,\n steps: [],\n stepsExecuted: [],\n artifactsTouched: [],\n };\n\n for (const step of workflow.steps) {\n const stepResult: WorkflowStepResult = {\n id: step.id,\n name: step.label,\n status: 'skip',\n command: step.command,\n };\n\n // 1. Check tracks\n if (step.tracks && !step.tracks.includes(context.track)) {\n results.steps.push(stepResult);\n continue;\n }\n\n // 2. Check condition\n if (step.condition) {\n const shouldRun = await step.condition(context);\n if (!shouldRun) {\n results.steps.push(stepResult);\n continue;\n }\n }\n\n // 3. Print step header\n logger.log(`\\n👉 Step: ${step.label}`);\n if (context.dryRun && step.command) {\n logger.log(` Command: ${step.command}`);\n }\n\n // 4. Manual Checkpoint\n if (step.manualCheckpoint) {\n if (context.dryRun) {\n logger.warn(' [Manual Checkpoint] Would pause here for user input.');\n } else if (prompter) {\n if (step.manualMessage) {\n logger.log(step.manualMessage);\n }\n\n const choice = await prompter.select({\n message: 'Checkpoint action:',\n choices: [\n { name: 'Proceed', value: 'proceed', description: 'Run this step' },\n {\n name: 'Skip Step',\n value: 'skip',\n description: 'Skip this step and continue',\n },\n {\n name: 'Abort Workflow',\n value: 'abort',\n description: 'Exit workflow',\n },\n ],\n });\n\n if (choice === 'abort') {\n logger.warn('Workflow aborted by user.');\n results.success = false;\n results.steps.push({\n ...stepResult,\n status: 'skip',\n error: 'Aborted by user',\n });\n return results;\n }\n\n if (choice === 'skip') {\n logger.warn(' → Skipped by user.');\n results.steps.push(stepResult);\n continue;\n }\n }\n }\n\n // 5. Execution\n if (!context.dryRun) {\n try {\n if (step.execute) {\n await step.execute(context);\n } else if (step.command) {\n await runShellCommand(step.command, context.root);\n }\n stepResult.status = 'pass';\n results.stepsExecuted.push(step.id);\n results.steps.push(stepResult);\n logger.log(' ✓ Completed');\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n logger.error(` ❌ Failed: ${errorMsg}`);\n results.success = false;\n results.error =\n error instanceof Error ? error : new Error(String(error));\n stepResult.status = 'fail';\n stepResult.error = errorMsg;\n results.stepsExecuted.push(step.id);\n results.steps.push(stepResult);\n return results;\n }\n } else {\n results.steps.push(stepResult);\n }\n }\n\n return results;\n}\n\n/**\n * Execute a shell command.\n */\nasync function runShellCommand(command: string, cwd: string): Promise<void> {\n const parts = command.split(' ');\n const cmd = parts[0];\n const args = parts.slice(1);\n\n if (!cmd) throw new Error('Invalid command');\n\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd,\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('error', reject);\n child.on('exit', (code: number | null) => {\n if (code === 0) resolve();\n else reject(new Error(`Command exited with code ${code}`));\n });\n });\n}\n"],"mappings":";;;;;;;;;;;AAqCA,MAAa,eAA+B;CAC1C,WAAW;CAGX,YAAY;CAGZ,aAAa;CAGd;;;;AAKD,MAAa,gBAAgC;CAC3C,MAAM,QAAQ,QAAQ,IAAI,IAAI;CAC9B,OAAO,QAAQ,QAAQ,KAAK,IAAI;CAChC,QAAQ,QAAQ,QAAQ,MAAM,IAAI;CACnC;;;;AAKD,eAAsB,YACpB,UACA,SACA,SAIyB;CACzB,MAAM,SAAS,SAAS,UAAU;CAClC,MAAM,WAAW,SAAS;AAE1B,QAAO,IAAI,uBAAuB,SAAS,OAAO;AAClD,KAAI,SAAS,YACX,QAAO,IAAI,SAAS,YAAY;AAElC,QAAO,IAAI,UAAU,QAAQ,QAAQ;AACrC,KAAI,QAAQ,OACV,QAAO,KAAK,8CAA8C;CAG5D,MAAM,UAA0B;EAC9B,SAAS;EACT,OAAO,EAAE;EACT,eAAe,EAAE;EACjB,kBAAkB,EAAE;EACrB;AAED,MAAK,MAAM,QAAQ,SAAS,OAAO;EACjC,MAAM,aAAiC;GACrC,IAAI,KAAK;GACT,MAAM,KAAK;GACX,QAAQ;GACR,SAAS,KAAK;GACf;AAGD,MAAI,KAAK,UAAU,CAAC,KAAK,OAAO,SAAS,QAAQ,MAAM,EAAE;AACvD,WAAQ,MAAM,KAAK,WAAW;AAC9B;;AAIF,MAAI,KAAK,WAEP;OAAI,CADc,MAAM,KAAK,UAAU,QAAQ,EAC/B;AACd,YAAQ,MAAM,KAAK,WAAW;AAC9B;;;AAKJ,SAAO,IAAI,cAAc,KAAK,QAAQ;AACtC,MAAI,QAAQ,UAAU,KAAK,QACzB,QAAO,IAAI,eAAe,KAAK,UAAU;AAI3C,MAAI,KAAK,kBACP;OAAI,QAAQ,OACV,QAAO,KAAK,0DAA0D;YAC7D,UAAU;AACnB,QAAI,KAAK,cACP,QAAO,IAAI,KAAK,cAAc;IAGhC,MAAM,SAAS,MAAM,SAAS,OAAO;KACnC,SAAS;KACT,SAAS;MACP;OAAE,MAAM;OAAW,OAAO;OAAW,aAAa;OAAiB;MACnE;OACE,MAAM;OACN,OAAO;OACP,aAAa;OACd;MACD;OACE,MAAM;OACN,OAAO;OACP,aAAa;OACd;MACF;KACF,CAAC;AAEF,QAAI,WAAW,SAAS;AACtB,YAAO,KAAK,4BAA4B;AACxC,aAAQ,UAAU;AAClB,aAAQ,MAAM,KAAK;MACjB,GAAG;MACH,QAAQ;MACR,OAAO;MACR,CAAC;AACF,YAAO;;AAGT,QAAI,WAAW,QAAQ;AACrB,YAAO,KAAK,wBAAwB;AACpC,aAAQ,MAAM,KAAK,WAAW;AAC9B;;;;AAMN,MAAI,CAAC,QAAQ,OACX,KAAI;AACF,OAAI,KAAK,QACP,OAAM,KAAK,QAAQ,QAAQ;YAClB,KAAK,QACd,OAAM,gBAAgB,KAAK,SAAS,QAAQ,KAAK;AAEnD,cAAW,SAAS;AACpB,WAAQ,cAAc,KAAK,KAAK,GAAG;AACnC,WAAQ,MAAM,KAAK,WAAW;AAC9B,UAAO,IAAI,iBAAiB;WACrB,OAAO;GACd,MAAM,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACvE,UAAO,MAAM,gBAAgB,WAAW;AACxC,WAAQ,UAAU;AAClB,WAAQ,QACN,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC;AAC3D,cAAW,SAAS;AACpB,cAAW,QAAQ;AACnB,WAAQ,cAAc,KAAK,KAAK,GAAG;AACnC,WAAQ,MAAM,KAAK,WAAW;AAC9B,UAAO;;MAGT,SAAQ,MAAM,KAAK,WAAW;;AAIlC,QAAO;;;;;AAMT,eAAe,gBAAgB,SAAiB,KAA4B;CAC1E,MAAM,QAAQ,QAAQ,MAAM,IAAI;CAChC,MAAM,MAAM,MAAM;CAClB,MAAM,OAAO,MAAM,MAAM,EAAE;AAE3B,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,kBAAkB;AAE5C,QAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,QAAQ,MAAM,KAAK,MAAM;GAC7B;GACA,OAAO;GACP,OAAO;GACR,CAAC;AAEF,QAAM,GAAG,SAAS,OAAO;AACzB,QAAM,GAAG,SAAS,SAAwB;AACxC,OAAI,SAAS,EAAG,UAAS;OACpB,wBAAO,IAAI,MAAM,4BAA4B,OAAO,CAAC;IAC1D;GACF"}
@@ -0,0 +1,15 @@
1
+ import { DEFAULT_VIBE_CONFIG, Track, VibeConfig, Workflow, WorkflowContext, WorkflowResult, WorkflowStep, WorkflowStepResult } from "./types.mjs";
2
+ import { loadVibeConfig } from "./config.mjs";
3
+ import { WorkflowLogger, WorkflowPrompter, consoleLogger, runWorkflow, silentLogger } from "./engine.mjs";
4
+ import { getWorkflow, loadWorkflows } from "./loader.mjs";
5
+ import { builtinWorkflows } from "./definitions.mjs";
6
+ import { ContextExportResult, exportContext } from "./context.mjs";
7
+ import { PackInstallResult, installPack } from "./pack.mjs";
8
+
9
+ //#region src/services/vibe/index.d.ts
10
+ declare namespace index_d_exports {
11
+ export { ContextExportResult, DEFAULT_VIBE_CONFIG, PackInstallResult, Track, VibeConfig, Workflow, WorkflowContext, WorkflowLogger, WorkflowPrompter, WorkflowResult, WorkflowStep, WorkflowStepResult, builtinWorkflows, consoleLogger, exportContext, getWorkflow, installPack, loadVibeConfig, loadWorkflows, runWorkflow, silentLogger };
12
+ }
13
+ //#endregion
14
+ export { index_d_exports };
15
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/vibe/index.ts"],"sourcesContent":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { __exportAll } from "../../_virtual/rolldown_runtime.mjs";
2
+ import { DEFAULT_VIBE_CONFIG } from "./types.mjs";
3
+ import { loadVibeConfig } from "./config.mjs";
4
+ import { consoleLogger, runWorkflow, silentLogger } from "./engine.mjs";
5
+ import { builtinWorkflows } from "./definitions.mjs";
6
+ import { getWorkflow, loadWorkflows } from "./loader.mjs";
7
+ import { exportContext } from "./context.mjs";
8
+ import { installPack } from "./pack.mjs";
9
+
10
+ //#region src/services/vibe/index.ts
11
+ var vibe_exports = /* @__PURE__ */ __exportAll({
12
+ DEFAULT_VIBE_CONFIG: () => DEFAULT_VIBE_CONFIG,
13
+ builtinWorkflows: () => builtinWorkflows,
14
+ consoleLogger: () => consoleLogger,
15
+ exportContext: () => exportContext,
16
+ getWorkflow: () => getWorkflow,
17
+ installPack: () => installPack,
18
+ loadVibeConfig: () => loadVibeConfig,
19
+ loadWorkflows: () => loadWorkflows,
20
+ runWorkflow: () => runWorkflow,
21
+ silentLogger: () => silentLogger
22
+ });
23
+
24
+ //#endregion
25
+ export { vibe_exports };
26
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/vibe/index.ts"],"sourcesContent":["/**\n * Vibe workflow service.\n *\n * Platform-agnostic workflow engine for managing ContractSpec workflows.\n */\n\n// Types\nexport type {\n Track,\n WorkflowContext,\n WorkflowStep,\n WorkflowStepResult,\n Workflow,\n WorkflowResult,\n VibeConfig,\n} from './types';\nexport { DEFAULT_VIBE_CONFIG } from './types';\n\n// Config\nexport { loadVibeConfig } from './config';\n\n// Engine\nexport {\n runWorkflow,\n type WorkflowLogger,\n type WorkflowPrompter,\n silentLogger,\n consoleLogger,\n} from './engine';\n\n// Loader\nexport { loadWorkflows, getWorkflow } from './loader';\n\n// Definitions\nexport { builtinWorkflows } from './definitions';\n\n// Context\nexport { exportContext, type ContextExportResult } from './context';\n\n// Pack\nexport { installPack, type PackInstallResult } from './pack';\n"],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { Workflow } from "./types.mjs";
2
+
3
+ //#region src/services/vibe/loader.d.ts
4
+
5
+ /**
6
+ * Load all workflows (built-in + user-defined).
7
+ */
8
+ declare function loadWorkflows(cwd?: string): Promise<Workflow[]>;
9
+ /**
10
+ * Get a workflow by ID.
11
+ */
12
+ declare function getWorkflow(id: string, cwd?: string): Promise<Workflow | undefined>;
13
+ //#endregion
14
+ export { getWorkflow, loadWorkflows };
15
+ //# sourceMappingURL=loader.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.mts","names":[],"sources":["../../../src/services/vibe/loader.ts"],"sourcesContent":[],"mappings":";;;;;;;iBAiBsB,aAAA,gBAA6B,QAAQ;;;;iBA4CrC,WAAA,4BAGnB,QAAQ"}
@@ -0,0 +1,48 @@
1
+ import { findWorkspaceRoot } from "../../adapters/workspace.mjs";
2
+ import { builtinWorkflows } from "./definitions.mjs";
3
+ import { readFile, readdir } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { existsSync } from "node:fs";
6
+ import yaml from "js-yaml";
7
+
8
+ //#region src/services/vibe/loader.ts
9
+ /**
10
+ * Workflow loader.
11
+ *
12
+ * Loads built-in and user-defined workflows.
13
+ */
14
+ /**
15
+ * Load all workflows (built-in + user-defined).
16
+ */
17
+ async function loadWorkflows(cwd) {
18
+ const allWorkflows = [...builtinWorkflows];
19
+ const workingDir = cwd ?? process.cwd();
20
+ const userWorkflowsDir = join(findWorkspaceRoot(workingDir) ?? workingDir, ".contractspec", "vibe", "workflows");
21
+ if (existsSync(userWorkflowsDir)) try {
22
+ const files = await readdir(userWorkflowsDir);
23
+ for (const file of files) if (file.endsWith(".json") || file.endsWith(".yaml") || file.endsWith(".yml")) {
24
+ const content = await readFile(join(userWorkflowsDir, file), "utf-8");
25
+ try {
26
+ let wf;
27
+ if (file.endsWith(".json")) wf = JSON.parse(content);
28
+ else wf = yaml.load(content);
29
+ if (wf.id && wf.steps) allWorkflows.push(wf);
30
+ } catch (e) {
31
+ console.warn(`Failed to parse workflow ${file}:`, e);
32
+ }
33
+ }
34
+ } catch (e) {
35
+ console.warn("Error loading user workflows:", e);
36
+ }
37
+ return allWorkflows;
38
+ }
39
+ /**
40
+ * Get a workflow by ID.
41
+ */
42
+ async function getWorkflow(id, cwd) {
43
+ return (await loadWorkflows(cwd)).find((w) => w.id === id);
44
+ }
45
+
46
+ //#endregion
47
+ export { getWorkflow, loadWorkflows };
48
+ //# sourceMappingURL=loader.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.mjs","names":[],"sources":["../../../src/services/vibe/loader.ts"],"sourcesContent":["/**\n * Workflow loader.\n *\n * Loads built-in and user-defined workflows.\n */\n\nimport { readFile, readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport yaml from 'js-yaml';\nimport { builtinWorkflows } from './definitions';\nimport type { Workflow } from './types';\nimport { findWorkspaceRoot } from '../../adapters/workspace';\n\n/**\n * Load all workflows (built-in + user-defined).\n */\nexport async function loadWorkflows(cwd?: string): Promise<Workflow[]> {\n const allWorkflows = [...builtinWorkflows];\n\n const workingDir = cwd ?? process.cwd();\n const root = findWorkspaceRoot(workingDir) ?? workingDir;\n const userWorkflowsDir = join(root, '.contractspec', 'vibe', 'workflows');\n\n if (existsSync(userWorkflowsDir)) {\n try {\n const files = await readdir(userWorkflowsDir);\n for (const file of files) {\n if (\n file.endsWith('.json') ||\n file.endsWith('.yaml') ||\n file.endsWith('.yml')\n ) {\n const content = await readFile(join(userWorkflowsDir, file), 'utf-8');\n try {\n let wf: Workflow;\n if (file.endsWith('.json')) {\n wf = JSON.parse(content) as Workflow;\n } else {\n wf = yaml.load(content) as Workflow;\n }\n\n if (wf.id && wf.steps) {\n allWorkflows.push(wf);\n }\n } catch (e) {\n console.warn(`Failed to parse workflow ${file}:`, e);\n }\n }\n }\n } catch (e) {\n console.warn('Error loading user workflows:', e);\n }\n }\n\n return allWorkflows;\n}\n\n/**\n * Get a workflow by ID.\n */\nexport async function getWorkflow(\n id: string,\n cwd?: string\n): Promise<Workflow | undefined> {\n const all = await loadWorkflows(cwd);\n return all.find((w) => w.id === id);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAiBA,eAAsB,cAAc,KAAmC;CACrE,MAAM,eAAe,CAAC,GAAG,iBAAiB;CAE1C,MAAM,aAAa,OAAO,QAAQ,KAAK;CAEvC,MAAM,mBAAmB,KADZ,kBAAkB,WAAW,IAAI,YACV,iBAAiB,QAAQ,YAAY;AAEzE,KAAI,WAAW,iBAAiB,CAC9B,KAAI;EACF,MAAM,QAAQ,MAAM,QAAQ,iBAAiB;AAC7C,OAAK,MAAM,QAAQ,MACjB,KACE,KAAK,SAAS,QAAQ,IACtB,KAAK,SAAS,QAAQ,IACtB,KAAK,SAAS,OAAO,EACrB;GACA,MAAM,UAAU,MAAM,SAAS,KAAK,kBAAkB,KAAK,EAAE,QAAQ;AACrE,OAAI;IACF,IAAI;AACJ,QAAI,KAAK,SAAS,QAAQ,CACxB,MAAK,KAAK,MAAM,QAAQ;QAExB,MAAK,KAAK,KAAK,QAAQ;AAGzB,QAAI,GAAG,MAAM,GAAG,MACd,cAAa,KAAK,GAAG;YAEhB,GAAG;AACV,YAAQ,KAAK,4BAA4B,KAAK,IAAI,EAAE;;;UAInD,GAAG;AACV,UAAQ,KAAK,iCAAiC,EAAE;;AAIpD,QAAO;;;;;AAMT,eAAsB,YACpB,IACA,KAC+B;AAE/B,SADY,MAAM,cAAc,IAAI,EACzB,MAAM,MAAM,EAAE,OAAO,GAAG"}
@@ -0,0 +1,19 @@
1
+ //#region src/services/vibe/pack.d.ts
2
+ /**
3
+ * Pack installation service.
4
+ *
5
+ * Install vibe packs from local paths or registry.
6
+ */
7
+ interface PackInstallResult {
8
+ success: boolean;
9
+ workflowsInstalled: number;
10
+ templatesInstalled: number;
11
+ error?: string;
12
+ }
13
+ /**
14
+ * Install a vibe pack from a local path.
15
+ */
16
+ declare function installPack(packPath: string, cwd?: string): Promise<PackInstallResult>;
17
+ //#endregion
18
+ export { PackInstallResult, installPack };
19
+ //# sourceMappingURL=pack.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.mts","names":[],"sources":["../../../src/services/vibe/pack.ts"],"sourcesContent":[],"mappings":";;AAWA;AAUA;;;UAViB,iBAAA;;;;;;;;;iBAUK,WAAA,kCAGnB,QAAQ"}