@lssm/bundle.contractspec-workspace 0.0.0-canary-20251217080011 → 1.41.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 (378) hide show
  1. package/dist/_virtual/rolldown_runtime.js +1 -22
  2. package/dist/adapters/ai.js +1 -82
  3. package/dist/adapters/factory.js +1 -36
  4. package/dist/adapters/fs.js +1 -118
  5. package/dist/adapters/git.js +1 -54
  6. package/dist/adapters/index.js +1 -7
  7. package/dist/adapters/logger.js +1 -80
  8. package/dist/adapters/watcher.js +1 -69
  9. package/dist/adapters/workspace.js +2 -190
  10. package/dist/ai/agents/claude-code-agent.js +9 -146
  11. package/dist/ai/agents/cursor-agent.js +17 -286
  12. package/dist/ai/agents/index.js +1 -5
  13. package/dist/ai/agents/openai-codex-agent.js +8 -140
  14. package/dist/ai/agents/orchestrator.js +1 -142
  15. package/dist/ai/agents/simple-agent.js +4 -80
  16. package/dist/ai/client.js +1 -162
  17. package/dist/ai/index.js +1 -27
  18. package/dist/ai/prompts/code-generation.js +13 -55
  19. package/dist/ai/prompts/index.js +1 -12
  20. package/dist/ai/prompts/spec-creation.js +20 -61
  21. package/dist/ai/providers.js +1 -40
  22. package/dist/formatters/index.js +1 -18
  23. package/dist/formatters/json.js +1 -71
  24. package/dist/formatters/sarif.js +1 -163
  25. package/dist/formatters/text.js +2 -208
  26. package/dist/index.js +1 -81
  27. package/dist/node_modules/@ai-sdk/anthropic/dist/index.js +1 -0
  28. package/dist/node_modules/@ai-sdk/openai/dist/index.js +11 -0
  29. package/dist/node_modules/@ai-sdk/provider/dist/index.js +3 -0
  30. package/dist/node_modules/@ai-sdk/provider-utils/dist/index.js +5 -0
  31. package/dist/node_modules/chalk/source/index.js +2 -0
  32. package/dist/node_modules/chalk/source/utilities.js +4 -0
  33. package/dist/node_modules/chalk/source/vendor/ansi-styles/index.js +1 -0
  34. package/dist/node_modules/chalk/source/vendor/supports-color/browser.js +1 -0
  35. package/dist/node_modules/cli-cursor/index.js +1 -0
  36. package/dist/node_modules/cli-spinners/index.js +1 -0
  37. package/dist/node_modules/cli-spinners/spinners.js +1 -0
  38. package/dist/node_modules/eventsource-parser/dist/index.js +5 -0
  39. package/dist/node_modules/eventsource-parser/dist/stream.js +1 -0
  40. package/dist/node_modules/get-east-asian-width/index.js +1 -0
  41. package/dist/node_modules/get-east-asian-width/lookup.js +1 -0
  42. package/dist/node_modules/is-interactive/index.js +1 -0
  43. package/dist/node_modules/is-unicode-supported/index.js +1 -0
  44. package/dist/node_modules/log-symbols/browser-symbols.js +1 -0
  45. package/dist/node_modules/mimic-function/index.js +1 -0
  46. package/dist/node_modules/onetime/index.js +1 -0
  47. package/dist/node_modules/ora/index.js +6 -0
  48. package/dist/node_modules/restore-cursor/index.js +1 -0
  49. package/dist/node_modules/signal-exit/dist/mjs/index.js +1 -0
  50. package/dist/node_modules/signal-exit/dist/mjs/signals.js +1 -0
  51. package/dist/node_modules/stdin-discarder/index.js +1 -0
  52. package/dist/node_modules/string-width/index.js +1 -0
  53. package/dist/node_modules/strip-ansi/index.js +1 -0
  54. package/dist/node_modules/strip-ansi/node_modules/ansi-regex/index.js +1 -0
  55. package/dist/services/agent-guide/adapters/claude-code.js +3 -144
  56. package/dist/services/agent-guide/adapters/cursor-cli.js +3 -135
  57. package/dist/services/agent-guide/adapters/generic-mcp.js +3 -159
  58. package/dist/services/agent-guide/adapters/index.js +1 -30
  59. package/dist/services/agent-guide/agent-guide-service.js +1 -148
  60. package/dist/services/agent-guide/index.js +1 -5
  61. package/dist/services/build.js +1 -140
  62. package/dist/services/ci-check/ci-check-service.js +1 -393
  63. package/dist/services/ci-check/index.js +1 -2
  64. package/dist/services/ci-check/types.js +1 -28
  65. package/dist/services/clean.js +1 -71
  66. package/dist/services/config.js +1 -76
  67. package/dist/services/deps.js +1 -62
  68. package/dist/services/diff.js +1 -33
  69. package/dist/services/doctor/checks/ai.js +2 -118
  70. package/dist/services/doctor/checks/cli.js +1 -146
  71. package/dist/services/doctor/checks/config.js +1 -170
  72. package/dist/services/doctor/checks/deps.js +1 -180
  73. package/dist/services/doctor/checks/index.js +1 -6
  74. package/dist/services/doctor/checks/mcp.js +1 -144
  75. package/dist/services/doctor/checks/workspace.js +1 -243
  76. package/dist/services/doctor/doctor-service.js +2 -115
  77. package/dist/services/doctor/index.js +1 -2
  78. package/dist/services/doctor/types.js +1 -26
  79. package/dist/services/implementation/discovery.js +2 -143
  80. package/dist/services/implementation/index.js +1 -2
  81. package/dist/services/implementation/resolver.js +1 -223
  82. package/dist/services/index.js +1 -53
  83. package/dist/services/integrity-diagram.js +6 -274
  84. package/dist/services/integrity.js +1 -272
  85. package/dist/services/list.js +1 -35
  86. package/dist/services/openapi/export-service.js +2 -51
  87. package/dist/services/openapi/import-service.js +1 -75
  88. package/dist/services/openapi/index.js +1 -4
  89. package/dist/services/openapi/sync-service.js +1 -121
  90. package/dist/services/openapi/validate-service.js +1 -130
  91. package/dist/services/regenerator.js +1 -23
  92. package/dist/services/registry.js +1 -73
  93. package/dist/services/setup/config-generators.js +26 -113
  94. package/dist/services/setup/file-merger.js +2 -60
  95. package/dist/services/setup/index.js +1 -4
  96. package/dist/services/setup/setup-service.js +1 -95
  97. package/dist/services/setup/targets/agents-md.js +1 -46
  98. package/dist/services/setup/targets/cli-config.js +1 -59
  99. package/dist/services/setup/targets/cursor-rules.js +1 -47
  100. package/dist/services/setup/targets/mcp-claude.js +1 -59
  101. package/dist/services/setup/targets/mcp-cursor.js +1 -58
  102. package/dist/services/setup/targets/vscode-settings.js +1 -62
  103. package/dist/services/setup/types.js +1 -26
  104. package/dist/services/sync.js +1 -62
  105. package/dist/services/test.js +1 -30
  106. package/dist/services/validate-implementation.js +1 -69
  107. package/dist/services/validate.js +1 -47
  108. package/dist/services/verification-cache/adapters/filesystem.js +1 -121
  109. package/dist/services/verification-cache/adapters/in-memory.js +1 -45
  110. package/dist/services/verification-cache/adapters/index.js +1 -3
  111. package/dist/services/verification-cache/adapters/workspace-state.js +1 -90
  112. package/dist/services/verification-cache/cache-service.js +1 -255
  113. package/dist/services/verification-cache/index.js +1 -6
  114. package/dist/services/verification-cache/types.js +1 -15
  115. package/dist/services/verify/ai-verifier.js +9 -336
  116. package/dist/services/verify/behavior-verifier.js +1 -185
  117. package/dist/services/verify/index.js +1 -4
  118. package/dist/services/verify/structure-verifier.js +2 -195
  119. package/dist/services/verify/verify-service.js +3 -203
  120. package/dist/services/watch.js +1 -31
  121. package/dist/services/workspace-info.js +2 -102
  122. package/dist/templates/app-config.template.js +28 -101
  123. package/dist/templates/data-view.template.js +27 -42
  124. package/dist/templates/event.template.js +14 -29
  125. package/dist/templates/experiment.template.js +51 -77
  126. package/dist/templates/handler.template.js +17 -53
  127. package/dist/templates/index.js +1 -36
  128. package/dist/templates/integration.template.js +50 -134
  129. package/dist/templates/knowledge.template.js +21 -62
  130. package/dist/templates/migration.template.js +26 -50
  131. package/dist/templates/operation.template.js +28 -44
  132. package/dist/templates/presentation.template.js +20 -46
  133. package/dist/templates/telemetry.template.js +53 -74
  134. package/dist/templates/workflow-runner.template.js +6 -12
  135. package/dist/templates/workflow.template.js +24 -51
  136. package/package.json +10 -16
  137. package/dist/adapters/ai.d.ts +0 -11
  138. package/dist/adapters/factory.d.ts +0 -28
  139. package/dist/adapters/fs.d.ts +0 -10
  140. package/dist/adapters/git.d.ts +0 -10
  141. package/dist/adapters/logger.d.ts +0 -17
  142. package/dist/adapters/watcher.d.ts +0 -10
  143. package/dist/adapters/workspace.d.ts +0 -93
  144. package/dist/ai/agents/claude-code-agent.d.ts +0 -21
  145. package/dist/ai/agents/cursor-agent.d.ts +0 -67
  146. package/dist/ai/agents/openai-codex-agent.d.ts +0 -21
  147. package/dist/ai/agents/orchestrator.d.ts +0 -49
  148. package/dist/ai/agents/simple-agent.d.ts +0 -16
  149. package/dist/ai/agents/types.d.ts +0 -35
  150. package/dist/ai/client.d.ts +0 -82
  151. package/dist/ai/index.d.ts +0 -16
  152. package/dist/ai/prompts/code-generation.d.ts +0 -25
  153. package/dist/ai/prompts/index.d.ts +0 -9
  154. package/dist/ai/prompts/spec-creation.d.ts +0 -28
  155. package/dist/ai/providers.d.ts +0 -28
  156. package/dist/formatters/index.d.ts +0 -10
  157. package/dist/formatters/json.d.ts +0 -88
  158. package/dist/formatters/sarif.d.ts +0 -100
  159. package/dist/formatters/text.d.ts +0 -34
  160. package/dist/index.d.ts +0 -66
  161. package/dist/libs/ai-providers/dist/factory.js +0 -154
  162. package/dist/libs/ai-providers/dist/index.js +0 -4
  163. package/dist/libs/ai-providers/dist/legacy.js +0 -72
  164. package/dist/libs/ai-providers/dist/models.js +0 -287
  165. package/dist/libs/ai-providers/dist/validation.js +0 -1
  166. package/dist/libs/contracts/dist/capabilities/openbanking.js +0 -88
  167. package/dist/libs/contracts/dist/client/index.js +0 -5
  168. package/dist/libs/contracts/dist/client/react/feature-render.js +0 -2
  169. package/dist/libs/contracts/dist/client/react/form-render.js +0 -4
  170. package/dist/libs/contracts/dist/client/react/index.js +0 -4
  171. package/dist/libs/contracts/dist/contract-registry/index.js +0 -1
  172. package/dist/libs/contracts/dist/contract-registry/schemas.js +0 -60
  173. package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
  174. package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -16
  175. package/dist/libs/contracts/dist/docs/index.js +0 -29
  176. package/dist/libs/contracts/dist/docs/presentations.js +0 -71
  177. package/dist/libs/contracts/dist/docs/registry.js +0 -44
  178. package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
  179. package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
  180. package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
  181. package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
  182. package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
  183. package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +0 -80
  184. package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +0 -57
  185. package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -16
  186. package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +0 -357
  187. package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -37
  188. package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -16
  189. package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +0 -20
  190. package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -48
  191. package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +0 -79
  192. package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +0 -84
  193. package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -45
  194. package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -67
  195. package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -40
  196. package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +0 -69
  197. package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -47
  198. package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +0 -62
  199. package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +0 -155
  200. package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -20
  201. package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +0 -101
  202. package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -20
  203. package/dist/libs/contracts/dist/events.js +0 -8
  204. package/dist/libs/contracts/dist/experiments/evaluator.js +0 -1
  205. package/dist/libs/contracts/dist/index.js +0 -72
  206. package/dist/libs/contracts/dist/install.js +0 -2
  207. package/dist/libs/contracts/dist/integrations/contracts.js +0 -377
  208. package/dist/libs/contracts/dist/integrations/index.js +0 -18
  209. package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +0 -228
  210. package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +0 -159
  211. package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +0 -3
  212. package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +0 -210
  213. package/dist/libs/contracts/dist/integrations/openbanking/models.js +0 -242
  214. package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +0 -13
  215. package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +0 -52
  216. package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +0 -75
  217. package/dist/libs/contracts/dist/integrations/providers/gmail.js +0 -87
  218. package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +0 -66
  219. package/dist/libs/contracts/dist/integrations/providers/index.js +0 -11
  220. package/dist/libs/contracts/dist/integrations/providers/mistral.js +0 -68
  221. package/dist/libs/contracts/dist/integrations/providers/postmark.js +0 -68
  222. package/dist/libs/contracts/dist/integrations/providers/powens.js +0 -116
  223. package/dist/libs/contracts/dist/integrations/providers/qdrant.js +0 -73
  224. package/dist/libs/contracts/dist/integrations/providers/registry.js +0 -10
  225. package/dist/libs/contracts/dist/integrations/providers/stripe.js +0 -83
  226. package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +0 -61
  227. package/dist/libs/contracts/dist/jsonschema.js +0 -24
  228. package/dist/libs/contracts/dist/knowledge/contracts.js +0 -306
  229. package/dist/libs/contracts/dist/knowledge/index.js +0 -7
  230. package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +0 -34
  231. package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +0 -34
  232. package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +0 -38
  233. package/dist/libs/contracts/dist/knowledge/spaces/index.js +0 -6
  234. package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +0 -34
  235. package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +0 -37
  236. package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +0 -34
  237. package/dist/libs/contracts/dist/llm/exporters.js +0 -352
  238. package/dist/libs/contracts/dist/llm/index.js +0 -2
  239. package/dist/libs/contracts/dist/llm/prompts.js +0 -211
  240. package/dist/libs/contracts/dist/onboarding-base.js +0 -196
  241. package/dist/libs/contracts/dist/openapi.js +0 -75
  242. package/dist/libs/contracts/dist/ownership.js +0 -21
  243. package/dist/libs/contracts/dist/presentations.js +0 -1
  244. package/dist/libs/contracts/dist/presentations.v2.js +0 -11
  245. package/dist/libs/contracts/dist/prompt.js +0 -1
  246. package/dist/libs/contracts/dist/promptRegistry.js +0 -1
  247. package/dist/libs/contracts/dist/regenerator/index.js +0 -2
  248. package/dist/libs/contracts/dist/regenerator/service.js +0 -92
  249. package/dist/libs/contracts/dist/regenerator/utils.js +0 -51
  250. package/dist/libs/contracts/dist/registry.js +0 -208
  251. package/dist/libs/contracts/dist/resources.js +0 -1
  252. package/dist/libs/contracts/dist/schema/dist/EnumType.js +0 -2
  253. package/dist/libs/contracts/dist/schema/dist/FieldType.js +0 -49
  254. package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +0 -236
  255. package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +0 -34
  256. package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +0 -1
  257. package/dist/libs/contracts/dist/schema/dist/entity/index.js +0 -2
  258. package/dist/libs/contracts/dist/schema/dist/entity/types.js +0 -1
  259. package/dist/libs/contracts/dist/schema/dist/index.js +0 -6
  260. package/dist/libs/contracts/dist/server/graphql-pothos.js +0 -6
  261. package/dist/libs/contracts/dist/server/index.js +0 -8
  262. package/dist/libs/contracts/dist/server/mcp/createMcpServer.js +0 -4
  263. package/dist/libs/contracts/dist/server/mcp/registerPresentations.js +0 -2
  264. package/dist/libs/contracts/dist/server/mcp/registerPrompts.js +0 -1
  265. package/dist/libs/contracts/dist/server/mcp/registerResources.js +0 -2
  266. package/dist/libs/contracts/dist/server/mcp/registerTools.js +0 -1
  267. package/dist/libs/contracts/dist/server/provider-mcp.js +0 -1
  268. package/dist/libs/contracts/dist/server/rest-elysia.js +0 -1
  269. package/dist/libs/contracts/dist/server/rest-express.js +0 -1
  270. package/dist/libs/contracts/dist/server/rest-generic.js +0 -1
  271. package/dist/libs/contracts/dist/server/rest-next-app.js +0 -1
  272. package/dist/libs/contracts/dist/server/rest-next-pages.js +0 -1
  273. package/dist/libs/contracts/dist/spec.js +0 -35
  274. package/dist/libs/contracts/dist/telemetry/index.js +0 -1
  275. package/dist/libs/contracts/dist/telemetry/tracker.js +0 -1
  276. package/dist/libs/contracts/dist/tests/index.js +0 -1
  277. package/dist/libs/contracts/dist/tests/runner.js +0 -150
  278. package/dist/libs/contracts/dist/workflow/index.js +0 -1
  279. package/dist/libs/contracts/dist/workflow/runner.js +0 -1
  280. package/dist/libs/contracts-transformers/dist/common/utils.js +0 -47
  281. package/dist/libs/contracts-transformers/dist/openapi/exporter.js +0 -1
  282. package/dist/libs/contracts-transformers/dist/openapi/importer.js +0 -255
  283. package/dist/libs/contracts-transformers/dist/openapi/index.js +0 -4
  284. package/dist/libs/contracts-transformers/dist/openapi/parser.js +0 -231
  285. package/dist/libs/contracts-transformers/dist/openapi/schema-converter.js +0 -201
  286. package/dist/modules/contractspec-workspace/dist/ai/code-generation.js +0 -137
  287. package/dist/modules/contractspec-workspace/dist/ai/spec-creation.js +0 -101
  288. package/dist/modules/contractspec-workspace/dist/analysis/deps/graph.js +0 -84
  289. package/dist/modules/contractspec-workspace/dist/analysis/deps/parse-imports.js +0 -30
  290. package/dist/modules/contractspec-workspace/dist/analysis/diff/semantic.js +0 -96
  291. package/dist/modules/contractspec-workspace/dist/analysis/feature-scan.js +0 -151
  292. package/dist/modules/contractspec-workspace/dist/analysis/spec-scan.js +0 -344
  293. package/dist/modules/contractspec-workspace/dist/analysis/validate/spec-structure.js +0 -122
  294. package/dist/modules/contractspec-workspace/dist/templates/app-config.js +0 -105
  295. package/dist/modules/contractspec-workspace/dist/templates/data-view.js +0 -68
  296. package/dist/modules/contractspec-workspace/dist/templates/event.js +0 -38
  297. package/dist/modules/contractspec-workspace/dist/templates/experiment.js +0 -87
  298. package/dist/modules/contractspec-workspace/dist/templates/handler.js +0 -95
  299. package/dist/modules/contractspec-workspace/dist/templates/integration-utils.js +0 -104
  300. package/dist/modules/contractspec-workspace/dist/templates/integration.js +0 -62
  301. package/dist/modules/contractspec-workspace/dist/templates/knowledge.js +0 -68
  302. package/dist/modules/contractspec-workspace/dist/templates/migration.js +0 -60
  303. package/dist/modules/contractspec-workspace/dist/templates/operation.js +0 -100
  304. package/dist/modules/contractspec-workspace/dist/templates/presentation.js +0 -78
  305. package/dist/modules/contractspec-workspace/dist/templates/telemetry.js +0 -89
  306. package/dist/modules/contractspec-workspace/dist/templates/utils.js +0 -38
  307. package/dist/modules/contractspec-workspace/dist/templates/workflow-runner.js +0 -48
  308. package/dist/modules/contractspec-workspace/dist/templates/workflow.js +0 -67
  309. package/dist/modules/contractspec-workspace/dist/types/generation-types.js +0 -20
  310. package/dist/ports/ai.d.ts +0 -58
  311. package/dist/ports/fs.d.ts +0 -80
  312. package/dist/ports/git.d.ts +0 -32
  313. package/dist/ports/logger.d.ts +0 -87
  314. package/dist/ports/watcher.d.ts +0 -51
  315. package/dist/services/agent-guide/adapters/claude-code.d.ts +0 -34
  316. package/dist/services/agent-guide/adapters/cursor-cli.d.ts +0 -38
  317. package/dist/services/agent-guide/adapters/generic-mcp.d.ts +0 -52
  318. package/dist/services/agent-guide/adapters/index.d.ts +0 -22
  319. package/dist/services/agent-guide/agent-guide-service.d.ts +0 -55
  320. package/dist/services/agent-guide/types.d.ts +0 -57
  321. package/dist/services/build.d.ts +0 -58
  322. package/dist/services/ci-check/ci-check-service.d.ts +0 -15
  323. package/dist/services/ci-check/types.d.ts +0 -142
  324. package/dist/services/clean.d.ts +0 -40
  325. package/dist/services/config.d.ts +0 -25
  326. package/dist/services/deps.d.ts +0 -52
  327. package/dist/services/diff.d.ts +0 -33
  328. package/dist/services/doctor/doctor-service.d.ts +0 -23
  329. package/dist/services/doctor/types.d.ts +0 -117
  330. package/dist/services/implementation/discovery.d.ts +0 -29
  331. package/dist/services/implementation/resolver.d.ts +0 -43
  332. package/dist/services/implementation/types.d.ts +0 -78
  333. package/dist/services/integrity-diagram.d.ts +0 -35
  334. package/dist/services/integrity.d.ts +0 -133
  335. package/dist/services/list.d.ts +0 -30
  336. package/dist/services/openapi/export-service.d.ts +0 -52
  337. package/dist/services/openapi/import-service.d.ts +0 -15
  338. package/dist/services/openapi/sync-service.d.ts +0 -18
  339. package/dist/services/openapi/types.d.ts +0 -184
  340. package/dist/services/openapi/validate-service.d.ts +0 -15
  341. package/dist/services/regenerator.d.ts +0 -17
  342. package/dist/services/registry.d.ts +0 -52
  343. package/dist/services/setup/config-generators.d.ts +0 -41
  344. package/dist/services/setup/file-merger.d.ts +0 -26
  345. package/dist/services/setup/setup-service.d.ts +0 -11
  346. package/dist/services/setup/types.d.ts +0 -84
  347. package/dist/services/sync.d.ts +0 -40
  348. package/dist/services/test.d.ts +0 -14
  349. package/dist/services/validate-implementation.d.ts +0 -31
  350. package/dist/services/validate.d.ts +0 -40
  351. package/dist/services/verification-cache/adapters/filesystem.d.ts +0 -45
  352. package/dist/services/verification-cache/adapters/in-memory.d.ts +0 -26
  353. package/dist/services/verification-cache/adapters/workspace-state.d.ts +0 -48
  354. package/dist/services/verification-cache/cache-service.d.ts +0 -69
  355. package/dist/services/verification-cache/types.d.ts +0 -123
  356. package/dist/services/verify/ai-verifier.d.ts +0 -24
  357. package/dist/services/verify/behavior-verifier.d.ts +0 -11
  358. package/dist/services/verify/structure-verifier.d.ts +0 -11
  359. package/dist/services/verify/types.d.ts +0 -136
  360. package/dist/services/verify/verify-service.d.ts +0 -59
  361. package/dist/services/watch.d.ts +0 -24
  362. package/dist/services/workspace-info.d.ts +0 -61
  363. package/dist/templates/app-config.template.d.ts +0 -6
  364. package/dist/templates/data-view.template.d.ts +0 -6
  365. package/dist/templates/event.template.d.ts +0 -10
  366. package/dist/templates/experiment.template.d.ts +0 -6
  367. package/dist/templates/handler.template.d.ts +0 -15
  368. package/dist/templates/index.d.ts +0 -20
  369. package/dist/templates/integration.template.d.ts +0 -6
  370. package/dist/templates/knowledge.template.d.ts +0 -6
  371. package/dist/templates/migration.template.d.ts +0 -6
  372. package/dist/templates/operation.template.d.ts +0 -10
  373. package/dist/templates/presentation.template.d.ts +0 -10
  374. package/dist/templates/telemetry.template.d.ts +0 -6
  375. package/dist/templates/workflow-runner.template.d.ts +0 -15
  376. package/dist/templates/workflow.template.d.ts +0 -6
  377. package/dist/types/config.d.ts +0 -33
  378. package/dist/types.d.ts +0 -323
@@ -1,60 +1,2 @@
1
- //#region src/services/setup/file-merger.ts
2
- /**
3
- * File merger utilities.
4
- *
5
- * Deep-merges JSON files without losing user settings.
6
- */
7
- /**
8
- * Deep merge two objects, preserving existing user values.
9
- * New keys are added, but existing keys are NOT overwritten.
10
- */
11
- function deepMergePreserve(existing, defaults) {
12
- const result = { ...existing };
13
- for (const key of Object.keys(defaults)) {
14
- const existingValue = existing[key];
15
- const defaultValue = defaults[key];
16
- if (existingValue === void 0) result[key] = defaultValue;
17
- else if (isPlainObject(existingValue) && isPlainObject(defaultValue)) result[key] = deepMergePreserve(existingValue, defaultValue);
18
- }
19
- return result;
20
- }
21
- /**
22
- * Deep merge two objects, with new values taking precedence.
23
- * Used when we want to update existing configs.
24
- */
25
- function deepMergeOverwrite(existing, updates) {
26
- const result = { ...existing };
27
- for (const key of Object.keys(updates)) {
28
- const existingValue = existing[key];
29
- const updateValue = updates[key];
30
- if (updateValue === void 0) continue;
31
- if (isPlainObject(existingValue) && isPlainObject(updateValue)) result[key] = deepMergeOverwrite(existingValue, updateValue);
32
- else result[key] = updateValue;
33
- }
34
- return result;
35
- }
36
- /**
37
- * Check if a value is a plain object (not array, null, or other).
38
- */
39
- function isPlainObject(value) {
40
- return typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
41
- }
42
- /**
43
- * Parse JSON safely, returning null on failure.
44
- */
45
- function safeParseJson(content) {
46
- try {
47
- return JSON.parse(content);
48
- } catch {
49
- return null;
50
- }
51
- }
52
- /**
53
- * Format JSON with consistent indentation.
54
- */
55
- function formatJson(obj) {
56
- return JSON.stringify(obj, null, 2) + "\n";
57
- }
58
-
59
- //#endregion
60
- export { deepMergeOverwrite, deepMergePreserve, formatJson, safeParseJson };
1
+ function e(t,r){let i={...t};for(let a of Object.keys(r)){let o=t[a],s=r[a];o===void 0?i[a]=s:n(o)&&n(s)&&(i[a]=e(o,s))}return i}function t(e,r){let i={...e};for(let a of Object.keys(r)){let o=e[a],s=r[a];s!==void 0&&(n(o)&&n(s)?i[a]=t(o,s):i[a]=s)}return i}function n(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function r(e){try{return JSON.parse(e)}catch{return null}}function i(e){return JSON.stringify(e,null,2)+`
2
+ `}export{t as deepMergeOverwrite,e as deepMergePreserve,i as formatJson,r as safeParseJson};
@@ -1,4 +1 @@
1
- import { ALL_SETUP_TARGETS, SETUP_TARGET_LABELS } from "./types.js";
2
- import { generateAgentsMd, generateClaudeMcpConfig, generateContractsrcConfig, generateCursorMcpConfig, generateCursorRules, generateVscodeSettings, getClaudeDesktopConfigPath } from "./config-generators.js";
3
- import { deepMergeOverwrite, deepMergePreserve, formatJson, safeParseJson } from "./file-merger.js";
4
- import { runSetup } from "./setup-service.js";
1
+ import{ALL_SETUP_TARGETS as e,SETUP_TARGET_LABELS as t}from"./types.js";import{generateAgentsMd as n,generateClaudeMcpConfig as r,generateContractsrcConfig as i,generateCursorMcpConfig as a,generateCursorRules as o,generateVscodeSettings as s,getClaudeDesktopConfigPath as c}from"./config-generators.js";import{deepMergeOverwrite as l,deepMergePreserve as u,formatJson as d,safeParseJson as f}from"./file-merger.js";import{runSetup as p}from"./setup-service.js";
@@ -1,95 +1 @@
1
- import { findPackageRoot, findWorkspaceRoot, getPackageName, isMonorepo } from "../../adapters/workspace.js";
2
- import { ALL_SETUP_TARGETS, SETUP_TARGET_LABELS } from "./types.js";
3
- import { setupCliConfig } from "./targets/cli-config.js";
4
- import { setupVscodeSettings } from "./targets/vscode-settings.js";
5
- import { setupMcpCursor } from "./targets/mcp-cursor.js";
6
- import { setupMcpClaude } from "./targets/mcp-claude.js";
7
- import { setupCursorRules } from "./targets/cursor-rules.js";
8
- import { setupAgentsMd } from "./targets/agents-md.js";
9
-
10
- //#region src/services/setup/setup-service.ts
11
- /**
12
- * Default prompt callbacks that always accept defaults.
13
- */
14
- const defaultPrompts = {
15
- confirm: async () => true,
16
- multiSelect: async (_msg, options) => options.filter((o) => o.selected !== false).map((o) => o.value),
17
- input: async (_msg, defaultValue) => defaultValue ?? ""
18
- };
19
- /**
20
- * Run the ContractSpec setup.
21
- */
22
- async function runSetup(fs, options, prompts = defaultPrompts) {
23
- const results = [];
24
- const targets = options.targets.length > 0 ? options.targets : ALL_SETUP_TARGETS;
25
- const workspaceRoot = options.workspaceRoot;
26
- const detectedWorkspaceRoot = findWorkspaceRoot(workspaceRoot);
27
- const packageRoot = options.packageRoot ?? findPackageRoot(workspaceRoot);
28
- const monorepo = options.isMonorepo ?? isMonorepo(detectedWorkspaceRoot);
29
- const packageName = options.packageName ?? (monorepo ? getPackageName(packageRoot) : void 0);
30
- let scope = options.scope ?? "workspace";
31
- const isDifferentRoots = packageRoot !== detectedWorkspaceRoot;
32
- if (monorepo && options.interactive && isDifferentRoots) scope = (await prompts.multiSelect(`Monorepo detected. Configure at which level?`, [{
33
- value: "package",
34
- label: `Package level (${packageName ?? packageRoot})`,
35
- selected: true
36
- }, {
37
- value: "workspace",
38
- label: `Workspace level (${detectedWorkspaceRoot})`
39
- }]))[0] ?? "package";
40
- let selectedTargets = targets;
41
- if (options.interactive) selectedTargets = await prompts.multiSelect("Select components to configure:", ALL_SETUP_TARGETS.map((t) => ({
42
- value: t,
43
- label: SETUP_TARGET_LABELS[t],
44
- selected: targets.includes(t)
45
- })));
46
- let projectName = options.projectName;
47
- if (options.interactive && !projectName) {
48
- const defaultName = scope === "package" && packageName ? packageName : workspaceRoot.split("/").pop() ?? "my-project";
49
- projectName = await prompts.input("Project name:", defaultName);
50
- }
51
- const setupOptions = {
52
- ...options,
53
- workspaceRoot: detectedWorkspaceRoot,
54
- packageRoot,
55
- isMonorepo: monorepo,
56
- scope,
57
- packageName,
58
- projectName,
59
- targets: selectedTargets
60
- };
61
- for (const target of selectedTargets) {
62
- const result = await setupTarget(fs, target, setupOptions, prompts);
63
- results.push(result);
64
- }
65
- const succeeded = results.filter((r) => r.action !== "error").length;
66
- const failed = results.filter((r) => r.action === "error").length;
67
- const scopeInfo = monorepo ? ` (${scope} level)` : "";
68
- return {
69
- success: failed === 0,
70
- files: results,
71
- summary: `Setup complete${scopeInfo}: ${succeeded} configured, ${failed} failed.`
72
- };
73
- }
74
- /**
75
- * Setup a single target.
76
- */
77
- async function setupTarget(fs, target, options, prompts) {
78
- switch (target) {
79
- case "cli-config": return setupCliConfig(fs, options, prompts);
80
- case "vscode-settings": return setupVscodeSettings(fs, options, prompts);
81
- case "mcp-cursor": return setupMcpCursor(fs, options, prompts);
82
- case "mcp-claude": return setupMcpClaude(fs, options, prompts);
83
- case "cursor-rules": return setupCursorRules(fs, options, prompts);
84
- case "agents-md": return setupAgentsMd(fs, options, prompts);
85
- default: return {
86
- target,
87
- filePath: "",
88
- action: "error",
89
- message: `Unknown target: ${target}`
90
- };
91
- }
92
- }
93
-
94
- //#endregion
95
- export { runSetup };
1
+ import{findPackageRoot as e,findWorkspaceRoot as t,getPackageName as n,isMonorepo as r}from"../../adapters/workspace.js";import{ALL_SETUP_TARGETS as i,SETUP_TARGET_LABELS as a}from"./types.js";import{setupCliConfig as o}from"./targets/cli-config.js";import{setupVscodeSettings as s}from"./targets/vscode-settings.js";import{setupMcpCursor as c}from"./targets/mcp-cursor.js";import{setupMcpClaude as l}from"./targets/mcp-claude.js";import{setupCursorRules as u}from"./targets/cursor-rules.js";import{setupAgentsMd as d}from"./targets/agents-md.js";const f={confirm:async()=>!0,multiSelect:async(e,t)=>t.filter(e=>e.selected!==!1).map(e=>e.value),input:async(e,t)=>t??``};async function p(o,s,c=f){let l=[],u=s.targets.length>0?s.targets:i,d=s.workspaceRoot,p=t(d),h=s.packageRoot??e(d),g=s.isMonorepo??r(p),_=s.packageName??(g?n(h):void 0),v=s.scope??`workspace`,y=h!==p;g&&s.interactive&&y&&(v=(await c.multiSelect(`Monorepo detected. Configure at which level?`,[{value:`package`,label:`Package level (${_??h})`,selected:!0},{value:`workspace`,label:`Workspace level (${p})`}]))[0]??`package`);let b=u;s.interactive&&(b=await c.multiSelect(`Select components to configure:`,i.map(e=>({value:e,label:a[e],selected:u.includes(e)}))));let x=s.projectName;if(s.interactive&&!x){let e=v===`package`&&_?_:d.split(`/`).pop()??`my-project`;x=await c.input(`Project name:`,e)}let S={...s,workspaceRoot:p,packageRoot:h,isMonorepo:g,scope:v,packageName:_,projectName:x,targets:b};for(let e of b){let t=await m(o,e,S,c);l.push(t)}let C=l.filter(e=>e.action!==`error`).length,w=l.filter(e=>e.action===`error`).length,T=g?` (${v} level)`:``;return{success:w===0,files:l,summary:`Setup complete${T}: ${C} configured, ${w} failed.`}}async function m(e,t,n,r){switch(t){case`cli-config`:return o(e,n,r);case`vscode-settings`:return s(e,n,r);case`mcp-cursor`:return c(e,n,r);case`mcp-claude`:return l(e,n,r);case`cursor-rules`:return u(e,n,r);case`agents-md`:return d(e,n,r);default:return{target:t,filePath:``,action:`error`,message:`Unknown target: ${t}`}}}export{p as runSetup};
@@ -1,46 +1 @@
1
- import { generateAgentsMd } from "../config-generators.js";
2
-
3
- //#region src/services/setup/targets/agents-md.ts
4
- /**
5
- * Setup AGENTS.md
6
- *
7
- * In monorepo with package scope, creates AGENTS.md at package root.
8
- */
9
- async function setupAgentsMd(fs, options, prompts) {
10
- const targetRoot = options.isMonorepo && options.scope === "package" ? options.packageRoot ?? options.workspaceRoot : options.workspaceRoot;
11
- const filePath = fs.join(targetRoot, "AGENTS.md");
12
- try {
13
- const exists = await fs.exists(filePath);
14
- const content = generateAgentsMd(options);
15
- if (exists) if (options.interactive) {
16
- if (!await prompts.confirm(`${filePath} exists. Overwrite?`)) return {
17
- target: "agents-md",
18
- filePath,
19
- action: "skipped",
20
- message: "User kept existing AGENTS.md"
21
- };
22
- } else return {
23
- target: "agents-md",
24
- filePath,
25
- action: "skipped",
26
- message: "File already exists"
27
- };
28
- await fs.writeFile(filePath, content);
29
- return {
30
- target: "agents-md",
31
- filePath,
32
- action: exists ? "merged" : "created",
33
- message: exists ? "Updated AGENTS.md" : "Created AGENTS.md"
34
- };
35
- } catch (error) {
36
- return {
37
- target: "agents-md",
38
- filePath,
39
- action: "error",
40
- message: error instanceof Error ? error.message : "Unknown error"
41
- };
42
- }
43
- }
44
-
45
- //#endregion
46
- export { setupAgentsMd };
1
+ import{generateAgentsMd as e}from"../config-generators.js";async function t(t,n,r){let i=n.isMonorepo&&n.scope===`package`?n.packageRoot??n.workspaceRoot:n.workspaceRoot,a=t.join(i,`AGENTS.md`);try{let i=await t.exists(a),o=e(n);if(i)if(n.interactive){if(!await r.confirm(`${a} exists. Overwrite?`))return{target:`agents-md`,filePath:a,action:`skipped`,message:`User kept existing AGENTS.md`}}else return{target:`agents-md`,filePath:a,action:`skipped`,message:`File already exists`};return await t.writeFile(a,o),{target:`agents-md`,filePath:a,action:i?`merged`:`created`,message:i?`Updated AGENTS.md`:`Created AGENTS.md`}}catch(e){return{target:`agents-md`,filePath:a,action:`error`,message:e instanceof Error?e.message:`Unknown error`}}}export{t as setupAgentsMd};
@@ -1,59 +1 @@
1
- import { generateContractsrcConfig } from "../config-generators.js";
2
- import { deepMergePreserve, formatJson, safeParseJson } from "../file-merger.js";
3
-
4
- //#region src/services/setup/targets/cli-config.ts
5
- /**
6
- * Setup .contractsrc.json
7
- *
8
- * In monorepo with package scope, creates config at package root.
9
- */
10
- async function setupCliConfig(fs, options, prompts) {
11
- const targetRoot = options.isMonorepo && options.scope === "package" ? options.packageRoot ?? options.workspaceRoot : options.workspaceRoot;
12
- const filePath = fs.join(targetRoot, ".contractsrc.json");
13
- try {
14
- const exists = await fs.exists(filePath);
15
- const defaults = generateContractsrcConfig(options);
16
- if (exists) {
17
- const existing = safeParseJson(await fs.readFile(filePath));
18
- if (!existing) return {
19
- target: "cli-config",
20
- filePath,
21
- action: "error",
22
- message: "Existing file is not valid JSON"
23
- };
24
- if (options.interactive) {
25
- if (!await prompts.confirm(`${filePath} exists. Merge ContractSpec defaults?`)) return {
26
- target: "cli-config",
27
- filePath,
28
- action: "skipped",
29
- message: "User skipped merge"
30
- };
31
- }
32
- const merged = deepMergePreserve(existing, defaults);
33
- await fs.writeFile(filePath, formatJson(merged));
34
- return {
35
- target: "cli-config",
36
- filePath,
37
- action: "merged",
38
- message: "Merged with existing configuration"
39
- };
40
- }
41
- await fs.writeFile(filePath, formatJson(defaults));
42
- return {
43
- target: "cli-config",
44
- filePath,
45
- action: "created",
46
- message: "Created CLI configuration"
47
- };
48
- } catch (error) {
49
- return {
50
- target: "cli-config",
51
- filePath,
52
- action: "error",
53
- message: error instanceof Error ? error.message : "Unknown error"
54
- };
55
- }
56
- }
57
-
58
- //#endregion
59
- export { setupCliConfig };
1
+ import{generateContractsrcConfig as e}from"../config-generators.js";import{deepMergePreserve as t,formatJson as n,safeParseJson as r}from"../file-merger.js";async function i(i,a,o){let s=a.isMonorepo&&a.scope===`package`?a.packageRoot??a.workspaceRoot:a.workspaceRoot,c=i.join(s,`.contractsrc.json`);try{let s=await i.exists(c),l=e(a);if(s){let e=r(await i.readFile(c));if(!e)return{target:`cli-config`,filePath:c,action:`error`,message:`Existing file is not valid JSON`};if(a.interactive&&!await o.confirm(`${c} exists. Merge ContractSpec defaults?`))return{target:`cli-config`,filePath:c,action:`skipped`,message:`User skipped merge`};let s=t(e,l);return await i.writeFile(c,n(s)),{target:`cli-config`,filePath:c,action:`merged`,message:`Merged with existing configuration`}}return await i.writeFile(c,n(l)),{target:`cli-config`,filePath:c,action:`created`,message:`Created CLI configuration`}}catch(e){return{target:`cli-config`,filePath:c,action:`error`,message:e instanceof Error?e.message:`Unknown error`}}}export{i as setupCliConfig};
@@ -1,47 +1 @@
1
- import { generateCursorRules } from "../config-generators.js";
2
-
3
- //#region src/services/setup/targets/cursor-rules.ts
4
- /**
5
- * Setup .cursor/rules/contractspec.mdc
6
- */
7
- async function setupCursorRules(fs, options, prompts) {
8
- const rulesDir = fs.join(options.workspaceRoot, ".cursor", "rules");
9
- const filePath = fs.join(rulesDir, "contractspec.mdc");
10
- try {
11
- const cursorDir = fs.join(options.workspaceRoot, ".cursor");
12
- if (!await fs.exists(cursorDir)) await fs.mkdir(cursorDir);
13
- if (!await fs.exists(rulesDir)) await fs.mkdir(rulesDir);
14
- const exists = await fs.exists(filePath);
15
- const content = generateCursorRules(options);
16
- if (exists) if (options.interactive) {
17
- if (!await prompts.confirm(`${filePath} exists. Overwrite with latest rules?`)) return {
18
- target: "cursor-rules",
19
- filePath,
20
- action: "skipped",
21
- message: "User kept existing rules"
22
- };
23
- } else return {
24
- target: "cursor-rules",
25
- filePath,
26
- action: "skipped",
27
- message: "File already exists"
28
- };
29
- await fs.writeFile(filePath, content);
30
- return {
31
- target: "cursor-rules",
32
- filePath,
33
- action: exists ? "merged" : "created",
34
- message: exists ? "Updated Cursor rules" : "Created Cursor rules"
35
- };
36
- } catch (error) {
37
- return {
38
- target: "cursor-rules",
39
- filePath,
40
- action: "error",
41
- message: error instanceof Error ? error.message : "Unknown error"
42
- };
43
- }
44
- }
45
-
46
- //#endregion
47
- export { setupCursorRules };
1
+ import{generateCursorRules as e}from"../config-generators.js";async function t(t,n,r){let i=t.join(n.workspaceRoot,`.cursor`,`rules`),a=t.join(i,`contractspec.mdc`);try{let o=t.join(n.workspaceRoot,`.cursor`);await t.exists(o)||await t.mkdir(o),await t.exists(i)||await t.mkdir(i);let s=await t.exists(a),c=e(n);if(s)if(n.interactive){if(!await r.confirm(`${a} exists. Overwrite with latest rules?`))return{target:`cursor-rules`,filePath:a,action:`skipped`,message:`User kept existing rules`}}else return{target:`cursor-rules`,filePath:a,action:`skipped`,message:`File already exists`};return await t.writeFile(a,c),{target:`cursor-rules`,filePath:a,action:s?`merged`:`created`,message:s?`Updated Cursor rules`:`Created Cursor rules`}}catch(e){return{target:`cursor-rules`,filePath:a,action:`error`,message:e instanceof Error?e.message:`Unknown error`}}}export{t as setupCursorRules};
@@ -1,59 +1 @@
1
- import { generateClaudeMcpConfig, getClaudeDesktopConfigPath } from "../config-generators.js";
2
- import { deepMergePreserve, formatJson, safeParseJson } from "../file-merger.js";
3
-
4
- //#region src/services/setup/targets/mcp-claude.ts
5
- /**
6
- * Setup Claude Desktop MCP config.
7
- * This modifies the user's global Claude config, so we're extra careful.
8
- */
9
- async function setupMcpClaude(fs, options, prompts) {
10
- const filePath = getClaudeDesktopConfigPath();
11
- try {
12
- const exists = await fs.exists(filePath);
13
- const defaults = generateClaudeMcpConfig();
14
- if (options.interactive) {
15
- if (!await prompts.confirm(`Configure Claude Desktop at ${filePath}?`)) return {
16
- target: "mcp-claude",
17
- filePath,
18
- action: "skipped",
19
- message: "User skipped Claude Desktop configuration"
20
- };
21
- }
22
- if (exists) {
23
- const existing = safeParseJson(await fs.readFile(filePath));
24
- if (!existing) return {
25
- target: "mcp-claude",
26
- filePath,
27
- action: "error",
28
- message: "Existing file is not valid JSON"
29
- };
30
- const merged = deepMergePreserve(existing, defaults);
31
- await fs.writeFile(filePath, formatJson(merged));
32
- return {
33
- target: "mcp-claude",
34
- filePath,
35
- action: "merged",
36
- message: "Added ContractSpec to Claude Desktop"
37
- };
38
- }
39
- const parentDir = filePath.substring(0, filePath.lastIndexOf("/"));
40
- if (!await fs.exists(parentDir)) await fs.mkdir(parentDir);
41
- await fs.writeFile(filePath, formatJson(defaults));
42
- return {
43
- target: "mcp-claude",
44
- filePath,
45
- action: "created",
46
- message: "Created Claude Desktop configuration"
47
- };
48
- } catch (error) {
49
- return {
50
- target: "mcp-claude",
51
- filePath,
52
- action: "error",
53
- message: error instanceof Error ? error.message : "Unknown error"
54
- };
55
- }
56
- }
57
-
58
- //#endregion
59
- export { setupMcpClaude };
1
+ import{generateClaudeMcpConfig as e,getClaudeDesktopConfigPath as t}from"../config-generators.js";import{deepMergePreserve as n,formatJson as r,safeParseJson as i}from"../file-merger.js";async function a(a,o,s){let c=t();try{let t=await a.exists(c),l=e();if(o.interactive&&!await s.confirm(`Configure Claude Desktop at ${c}?`))return{target:`mcp-claude`,filePath:c,action:`skipped`,message:`User skipped Claude Desktop configuration`};if(t){let e=i(await a.readFile(c));if(!e)return{target:`mcp-claude`,filePath:c,action:`error`,message:`Existing file is not valid JSON`};let t=n(e,l);return await a.writeFile(c,r(t)),{target:`mcp-claude`,filePath:c,action:`merged`,message:`Added ContractSpec to Claude Desktop`}}let u=c.substring(0,c.lastIndexOf(`/`));return await a.exists(u)||await a.mkdir(u),await a.writeFile(c,r(l)),{target:`mcp-claude`,filePath:c,action:`created`,message:`Created Claude Desktop configuration`}}catch(e){return{target:`mcp-claude`,filePath:c,action:`error`,message:e instanceof Error?e.message:`Unknown error`}}}export{a as setupMcpClaude};
@@ -1,58 +1 @@
1
- import { generateCursorMcpConfig } from "../config-generators.js";
2
- import { deepMergePreserve, formatJson, safeParseJson } from "../file-merger.js";
3
-
4
- //#region src/services/setup/targets/mcp-cursor.ts
5
- /**
6
- * Setup .cursor/mcp.json
7
- */
8
- async function setupMcpCursor(fs, options, prompts) {
9
- const dirPath = fs.join(options.workspaceRoot, ".cursor");
10
- const filePath = fs.join(dirPath, "mcp.json");
11
- try {
12
- if (!await fs.exists(dirPath)) await fs.mkdir(dirPath);
13
- const exists = await fs.exists(filePath);
14
- const defaults = generateCursorMcpConfig();
15
- if (exists) {
16
- const existing = safeParseJson(await fs.readFile(filePath));
17
- if (!existing) return {
18
- target: "mcp-cursor",
19
- filePath,
20
- action: "error",
21
- message: "Existing file is not valid JSON"
22
- };
23
- if (options.interactive) {
24
- if (!await prompts.confirm(`${filePath} exists. Add ContractSpec MCP server?`)) return {
25
- target: "mcp-cursor",
26
- filePath,
27
- action: "skipped",
28
- message: "User skipped merge"
29
- };
30
- }
31
- const merged = deepMergePreserve(existing, defaults);
32
- await fs.writeFile(filePath, formatJson(merged));
33
- return {
34
- target: "mcp-cursor",
35
- filePath,
36
- action: "merged",
37
- message: "Added ContractSpec MCP server"
38
- };
39
- }
40
- await fs.writeFile(filePath, formatJson(defaults));
41
- return {
42
- target: "mcp-cursor",
43
- filePath,
44
- action: "created",
45
- message: "Created Cursor MCP configuration"
46
- };
47
- } catch (error) {
48
- return {
49
- target: "mcp-cursor",
50
- filePath,
51
- action: "error",
52
- message: error instanceof Error ? error.message : "Unknown error"
53
- };
54
- }
55
- }
56
-
57
- //#endregion
58
- export { setupMcpCursor };
1
+ import{generateCursorMcpConfig as e}from"../config-generators.js";import{deepMergePreserve as t,formatJson as n,safeParseJson as r}from"../file-merger.js";async function i(i,a,o){let s=i.join(a.workspaceRoot,`.cursor`),c=i.join(s,`mcp.json`);try{await i.exists(s)||await i.mkdir(s);let l=await i.exists(c),u=e();if(l){let e=r(await i.readFile(c));if(!e)return{target:`mcp-cursor`,filePath:c,action:`error`,message:`Existing file is not valid JSON`};if(a.interactive&&!await o.confirm(`${c} exists. Add ContractSpec MCP server?`))return{target:`mcp-cursor`,filePath:c,action:`skipped`,message:`User skipped merge`};let s=t(e,u);return await i.writeFile(c,n(s)),{target:`mcp-cursor`,filePath:c,action:`merged`,message:`Added ContractSpec MCP server`}}return await i.writeFile(c,n(u)),{target:`mcp-cursor`,filePath:c,action:`created`,message:`Created Cursor MCP configuration`}}catch(e){return{target:`mcp-cursor`,filePath:c,action:`error`,message:e instanceof Error?e.message:`Unknown error`}}}export{i as setupMcpCursor};
@@ -1,62 +1 @@
1
- import { generateVscodeSettings } from "../config-generators.js";
2
- import { deepMergePreserve, formatJson, safeParseJson } from "../file-merger.js";
3
-
4
- //#region src/services/setup/targets/vscode-settings.ts
5
- /**
6
- * Setup .vscode/settings.json
7
- *
8
- * VS Code settings are typically at workspace root, but in monorepo
9
- * with package scope, can be at package root.
10
- */
11
- async function setupVscodeSettings(fs, options, prompts) {
12
- const targetRoot = options.isMonorepo && options.scope === "package" ? options.packageRoot ?? options.workspaceRoot : options.workspaceRoot;
13
- const dirPath = fs.join(targetRoot, ".vscode");
14
- const filePath = fs.join(dirPath, "settings.json");
15
- try {
16
- if (!await fs.exists(dirPath)) await fs.mkdir(dirPath);
17
- const exists = await fs.exists(filePath);
18
- const defaults = generateVscodeSettings();
19
- if (exists) {
20
- const existing = safeParseJson(await fs.readFile(filePath));
21
- if (!existing) return {
22
- target: "vscode-settings",
23
- filePath,
24
- action: "error",
25
- message: "Existing file is not valid JSON"
26
- };
27
- if (options.interactive) {
28
- if (!await prompts.confirm(`${filePath} exists. Add ContractSpec settings?`)) return {
29
- target: "vscode-settings",
30
- filePath,
31
- action: "skipped",
32
- message: "User skipped merge"
33
- };
34
- }
35
- const merged = deepMergePreserve(existing, defaults);
36
- await fs.writeFile(filePath, formatJson(merged));
37
- return {
38
- target: "vscode-settings",
39
- filePath,
40
- action: "merged",
41
- message: "Added ContractSpec settings"
42
- };
43
- }
44
- await fs.writeFile(filePath, formatJson(defaults));
45
- return {
46
- target: "vscode-settings",
47
- filePath,
48
- action: "created",
49
- message: "Created VS Code settings"
50
- };
51
- } catch (error) {
52
- return {
53
- target: "vscode-settings",
54
- filePath,
55
- action: "error",
56
- message: error instanceof Error ? error.message : "Unknown error"
57
- };
58
- }
59
- }
60
-
61
- //#endregion
62
- export { setupVscodeSettings };
1
+ import{generateVscodeSettings as e}from"../config-generators.js";import{deepMergePreserve as t,formatJson as n,safeParseJson as r}from"../file-merger.js";async function i(i,a,o){let s=a.isMonorepo&&a.scope===`package`?a.packageRoot??a.workspaceRoot:a.workspaceRoot,c=i.join(s,`.vscode`),l=i.join(c,`settings.json`);try{await i.exists(c)||await i.mkdir(c);let s=await i.exists(l),u=e();if(s){let e=r(await i.readFile(l));if(!e)return{target:`vscode-settings`,filePath:l,action:`error`,message:`Existing file is not valid JSON`};if(a.interactive&&!await o.confirm(`${l} exists. Add ContractSpec settings?`))return{target:`vscode-settings`,filePath:l,action:`skipped`,message:`User skipped merge`};let s=t(e,u);return await i.writeFile(l,n(s)),{target:`vscode-settings`,filePath:l,action:`merged`,message:`Added ContractSpec settings`}}return await i.writeFile(l,n(u)),{target:`vscode-settings`,filePath:l,action:`created`,message:`Created VS Code settings`}}catch(e){return{target:`vscode-settings`,filePath:l,action:`error`,message:e instanceof Error?e.message:`Unknown error`}}}export{i as setupVscodeSettings};
@@ -1,26 +1 @@
1
- //#region src/services/setup/types.ts
2
- /**
3
- * All available setup targets.
4
- */
5
- const ALL_SETUP_TARGETS = [
6
- "cli-config",
7
- "vscode-settings",
8
- "mcp-cursor",
9
- "mcp-claude",
10
- "cursor-rules",
11
- "agents-md"
12
- ];
13
- /**
14
- * Human-readable labels for setup targets.
15
- */
16
- const SETUP_TARGET_LABELS = {
17
- "cli-config": "CLI Configuration (.contractsrc.json)",
18
- "vscode-settings": "VS Code Settings (.vscode/settings.json)",
19
- "mcp-cursor": "MCP for Cursor (.cursor/mcp.json)",
20
- "mcp-claude": "MCP for Claude Desktop",
21
- "cursor-rules": "Cursor AI Rules (.cursor/rules/)",
22
- "agents-md": "Project AI Guide (AGENTS.md)"
23
- };
24
-
25
- //#endregion
26
- export { ALL_SETUP_TARGETS, SETUP_TARGET_LABELS };
1
+ const e=[`cli-config`,`vscode-settings`,`mcp-cursor`,`mcp-claude`,`cursor-rules`,`agents-md`],t={"cli-config":`CLI Configuration (.contractsrc.json)`,"vscode-settings":`VS Code Settings (.vscode/settings.json)`,"mcp-cursor":`MCP for Cursor (.cursor/mcp.json)`,"mcp-claude":`MCP for Claude Desktop`,"cursor-rules":`Cursor AI Rules (.cursor/rules/)`,"agents-md":`Project AI Guide (AGENTS.md)`};export{e as ALL_SETUP_TARGETS,t as SETUP_TARGET_LABELS};
@@ -1,62 +1 @@
1
- import { validateSpec } from "./validate.js";
2
- import { buildSpec } from "./build.js";
3
-
4
- //#region src/services/sync.ts
5
- async function syncSpecs(adapters, config, options = {}, overrides) {
6
- const { fs, logger } = adapters;
7
- const specs = await fs.glob({ pattern: options.pattern });
8
- const outputDirs = options.outputDirs?.length ? options.outputDirs : [void 0];
9
- const runs = [];
10
- const validateFn = overrides?.validate ?? ((specPath) => validateSpec(specPath, {
11
- fs,
12
- logger
13
- }));
14
- const buildFn = overrides?.build ?? ((specPath, outputDir) => buildSpec(specPath, {
15
- fs,
16
- logger
17
- }, outputDir ? {
18
- ...config,
19
- outputDir
20
- } : config, {
21
- ...options.buildOptions ?? {},
22
- outputDir
23
- }));
24
- for (const specPath of specs) for (const outputDir of outputDirs) {
25
- const run = {
26
- specPath,
27
- outputDir
28
- };
29
- if (options.validate) try {
30
- run.validation = await validateFn(specPath);
31
- } catch (error) {
32
- run.error = {
33
- phase: "validate",
34
- message: error instanceof Error ? error.message : String(error)
35
- };
36
- runs.push(run);
37
- continue;
38
- }
39
- if (!options.dryRun) try {
40
- run.build = await buildFn(specPath, outputDir);
41
- } catch (error) {
42
- run.error = {
43
- phase: "build",
44
- message: error instanceof Error ? error.message : String(error)
45
- };
46
- runs.push(run);
47
- continue;
48
- }
49
- else logger.info("[dry-run] syncSpecs skipped build", {
50
- specPath,
51
- outputDir
52
- });
53
- runs.push(run);
54
- }
55
- return {
56
- specs,
57
- runs
58
- };
59
- }
60
-
61
- //#endregion
62
- export { syncSpecs };
1
+ import{validateSpec as e}from"./validate.js";import{buildSpec as t}from"./build.js";async function n(n,r,i={},a){let{fs:o,logger:s}=n,c=await o.glob({pattern:i.pattern}),l=i.outputDirs?.length?i.outputDirs:[void 0],u=[],d=a?.validate??(t=>e(t,{fs:o,logger:s})),f=a?.build??((e,n)=>t(e,{fs:o,logger:s},n?{...r,outputDir:n}:r,{...i.buildOptions??{},outputDir:n}));for(let e of c)for(let t of l){let n={specPath:e,outputDir:t};if(i.validate)try{n.validation=await d(e)}catch(e){n.error={phase:`validate`,message:e instanceof Error?e.message:String(e)},u.push(n);continue}if(i.dryRun)s.info(`[dry-run] syncSpecs skipped build`,{specPath:e,outputDir:t});else try{n.build=await f(e,t)}catch(e){n.error={phase:`build`,message:e instanceof Error?e.message:String(e)},u.push(n);continue}u.push(n)}return{specs:c,runs:u}}export{n as syncSpecs};
@@ -1,30 +1 @@
1
- import { TestRunner } from "../libs/contracts/dist/tests/runner.js";
2
- import "../libs/contracts/dist/tests/index.js";
3
-
4
- //#region src/services/test.ts
5
- /**
6
- * Test service.
7
- *
8
- * Pure runner wrapper that executes TestSpec scenarios against a SpecRegistry.
9
- * Loading/compiling spec modules (TS/ESM) is intentionally left to the caller.
10
- */
11
- async function runTests(specs, registry) {
12
- const runner = new TestRunner({ registry });
13
- const results = [];
14
- let passed = 0;
15
- let failed = 0;
16
- for (const spec of specs) {
17
- const result = await runner.run(spec);
18
- results.push(result);
19
- passed += result.passed;
20
- failed += result.failed;
21
- }
22
- return {
23
- results,
24
- passed,
25
- failed
26
- };
27
- }
28
-
29
- //#endregion
30
- export { runTests };
1
+ import{TestRunner as e}from"@lssm/lib.contracts/tests";async function t(t,n){let r=new e({registry:n}),i=[],a=0,o=0;for(let e of t){let t=await r.run(e);i.push(t),a+=t.passed,o+=t.failed}return{results:i,passed:a,failed:o}}export{t as runTests};