@lssm/bundle.contractspec-workspace 0.0.0-canary-20251217083314 → 1.41.1

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 (350) 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/services/agent-guide/adapters/claude-code.js +3 -144
  28. package/dist/services/agent-guide/adapters/cursor-cli.js +3 -135
  29. package/dist/services/agent-guide/adapters/generic-mcp.js +3 -159
  30. package/dist/services/agent-guide/adapters/index.js +1 -30
  31. package/dist/services/agent-guide/agent-guide-service.js +1 -148
  32. package/dist/services/agent-guide/index.js +1 -5
  33. package/dist/services/build.js +1 -140
  34. package/dist/services/ci-check/ci-check-service.js +1 -393
  35. package/dist/services/ci-check/index.js +1 -2
  36. package/dist/services/ci-check/types.js +1 -28
  37. package/dist/services/clean.js +1 -71
  38. package/dist/services/config.js +1 -76
  39. package/dist/services/deps.js +1 -62
  40. package/dist/services/diff.js +1 -33
  41. package/dist/services/doctor/checks/ai.js +2 -118
  42. package/dist/services/doctor/checks/cli.js +1 -146
  43. package/dist/services/doctor/checks/config.js +1 -170
  44. package/dist/services/doctor/checks/deps.js +1 -180
  45. package/dist/services/doctor/checks/index.js +1 -6
  46. package/dist/services/doctor/checks/mcp.js +1 -144
  47. package/dist/services/doctor/checks/workspace.js +1 -243
  48. package/dist/services/doctor/doctor-service.js +2 -115
  49. package/dist/services/doctor/index.js +1 -2
  50. package/dist/services/doctor/types.js +1 -26
  51. package/dist/services/implementation/discovery.js +2 -143
  52. package/dist/services/implementation/index.js +1 -2
  53. package/dist/services/implementation/resolver.js +1 -223
  54. package/dist/services/index.js +1 -53
  55. package/dist/services/integrity-diagram.js +6 -274
  56. package/dist/services/integrity.js +1 -272
  57. package/dist/services/list.js +1 -35
  58. package/dist/services/openapi/export-service.js +2 -51
  59. package/dist/services/openapi/import-service.js +1 -75
  60. package/dist/services/openapi/index.js +1 -4
  61. package/dist/services/openapi/sync-service.js +1 -121
  62. package/dist/services/openapi/validate-service.js +1 -130
  63. package/dist/services/regenerator.js +1 -23
  64. package/dist/services/registry.js +1 -73
  65. package/dist/services/setup/config-generators.js +26 -113
  66. package/dist/services/setup/file-merger.js +2 -60
  67. package/dist/services/setup/index.js +1 -4
  68. package/dist/services/setup/setup-service.js +1 -95
  69. package/dist/services/setup/targets/agents-md.js +1 -46
  70. package/dist/services/setup/targets/cli-config.js +1 -59
  71. package/dist/services/setup/targets/cursor-rules.js +1 -47
  72. package/dist/services/setup/targets/mcp-claude.js +1 -59
  73. package/dist/services/setup/targets/mcp-cursor.js +1 -58
  74. package/dist/services/setup/targets/vscode-settings.js +1 -62
  75. package/dist/services/setup/types.js +1 -26
  76. package/dist/services/sync.js +1 -62
  77. package/dist/services/test.js +1 -30
  78. package/dist/services/validate-implementation.js +1 -69
  79. package/dist/services/validate.js +1 -47
  80. package/dist/services/verification-cache/adapters/filesystem.js +1 -121
  81. package/dist/services/verification-cache/adapters/in-memory.js +1 -45
  82. package/dist/services/verification-cache/adapters/index.js +1 -3
  83. package/dist/services/verification-cache/adapters/workspace-state.js +1 -90
  84. package/dist/services/verification-cache/cache-service.js +1 -255
  85. package/dist/services/verification-cache/index.js +1 -6
  86. package/dist/services/verification-cache/types.js +1 -15
  87. package/dist/services/verify/ai-verifier.js +9 -336
  88. package/dist/services/verify/behavior-verifier.js +1 -185
  89. package/dist/services/verify/index.js +1 -4
  90. package/dist/services/verify/structure-verifier.js +2 -195
  91. package/dist/services/verify/verify-service.js +3 -203
  92. package/dist/services/watch.js +1 -31
  93. package/dist/services/workspace-info.js +2 -102
  94. package/dist/templates/app-config.template.js +28 -101
  95. package/dist/templates/data-view.template.js +27 -42
  96. package/dist/templates/event.template.js +14 -29
  97. package/dist/templates/experiment.template.js +51 -77
  98. package/dist/templates/handler.template.js +17 -53
  99. package/dist/templates/index.js +1 -36
  100. package/dist/templates/integration.template.js +50 -134
  101. package/dist/templates/knowledge.template.js +21 -62
  102. package/dist/templates/migration.template.js +26 -50
  103. package/dist/templates/operation.template.js +28 -44
  104. package/dist/templates/presentation.template.js +20 -46
  105. package/dist/templates/telemetry.template.js +53 -74
  106. package/dist/templates/workflow-runner.template.js +6 -12
  107. package/dist/templates/workflow.template.js +24 -51
  108. package/package.json +10 -15
  109. package/dist/adapters/ai.d.ts +0 -11
  110. package/dist/adapters/factory.d.ts +0 -28
  111. package/dist/adapters/fs.d.ts +0 -10
  112. package/dist/adapters/git.d.ts +0 -10
  113. package/dist/adapters/logger.d.ts +0 -17
  114. package/dist/adapters/watcher.d.ts +0 -10
  115. package/dist/adapters/workspace.d.ts +0 -93
  116. package/dist/ai/agents/claude-code-agent.d.ts +0 -21
  117. package/dist/ai/agents/cursor-agent.d.ts +0 -67
  118. package/dist/ai/agents/openai-codex-agent.d.ts +0 -21
  119. package/dist/ai/agents/orchestrator.d.ts +0 -49
  120. package/dist/ai/agents/simple-agent.d.ts +0 -16
  121. package/dist/ai/agents/types.d.ts +0 -35
  122. package/dist/ai/client.d.ts +0 -82
  123. package/dist/ai/index.d.ts +0 -16
  124. package/dist/ai/prompts/code-generation.d.ts +0 -25
  125. package/dist/ai/prompts/index.d.ts +0 -9
  126. package/dist/ai/prompts/spec-creation.d.ts +0 -28
  127. package/dist/ai/providers.d.ts +0 -28
  128. package/dist/formatters/index.d.ts +0 -10
  129. package/dist/formatters/json.d.ts +0 -88
  130. package/dist/formatters/sarif.d.ts +0 -100
  131. package/dist/formatters/text.d.ts +0 -34
  132. package/dist/index.d.ts +0 -66
  133. package/dist/libs/ai-providers/dist/factory.js +0 -154
  134. package/dist/libs/ai-providers/dist/index.js +0 -4
  135. package/dist/libs/ai-providers/dist/legacy.js +0 -72
  136. package/dist/libs/ai-providers/dist/models.js +0 -287
  137. package/dist/libs/ai-providers/dist/validation.js +0 -1
  138. package/dist/libs/contracts/dist/capabilities/openbanking.js +0 -88
  139. package/dist/libs/contracts/dist/client/index.js +0 -5
  140. package/dist/libs/contracts/dist/client/react/feature-render.js +0 -2
  141. package/dist/libs/contracts/dist/client/react/form-render.js +0 -4
  142. package/dist/libs/contracts/dist/client/react/index.js +0 -4
  143. package/dist/libs/contracts/dist/contract-registry/index.js +0 -1
  144. package/dist/libs/contracts/dist/contract-registry/schemas.js +0 -60
  145. package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
  146. package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -16
  147. package/dist/libs/contracts/dist/docs/index.js +0 -29
  148. package/dist/libs/contracts/dist/docs/presentations.js +0 -71
  149. package/dist/libs/contracts/dist/docs/registry.js +0 -44
  150. package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
  151. package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
  152. package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
  153. package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
  154. package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
  155. package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +0 -80
  156. package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +0 -57
  157. package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -16
  158. package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +0 -357
  159. package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -37
  160. package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -16
  161. package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +0 -20
  162. package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -48
  163. package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +0 -79
  164. package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +0 -84
  165. package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -45
  166. package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -67
  167. package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -40
  168. package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +0 -69
  169. package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -47
  170. package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +0 -62
  171. package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +0 -155
  172. package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -20
  173. package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +0 -101
  174. package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -20
  175. package/dist/libs/contracts/dist/events.js +0 -8
  176. package/dist/libs/contracts/dist/experiments/evaluator.js +0 -1
  177. package/dist/libs/contracts/dist/index.js +0 -72
  178. package/dist/libs/contracts/dist/install.js +0 -2
  179. package/dist/libs/contracts/dist/integrations/contracts.js +0 -377
  180. package/dist/libs/contracts/dist/integrations/index.js +0 -18
  181. package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +0 -228
  182. package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +0 -159
  183. package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +0 -3
  184. package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +0 -210
  185. package/dist/libs/contracts/dist/integrations/openbanking/models.js +0 -242
  186. package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +0 -13
  187. package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +0 -52
  188. package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +0 -75
  189. package/dist/libs/contracts/dist/integrations/providers/gmail.js +0 -87
  190. package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +0 -66
  191. package/dist/libs/contracts/dist/integrations/providers/index.js +0 -11
  192. package/dist/libs/contracts/dist/integrations/providers/mistral.js +0 -68
  193. package/dist/libs/contracts/dist/integrations/providers/postmark.js +0 -68
  194. package/dist/libs/contracts/dist/integrations/providers/powens.js +0 -116
  195. package/dist/libs/contracts/dist/integrations/providers/qdrant.js +0 -73
  196. package/dist/libs/contracts/dist/integrations/providers/registry.js +0 -10
  197. package/dist/libs/contracts/dist/integrations/providers/stripe.js +0 -83
  198. package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +0 -61
  199. package/dist/libs/contracts/dist/jsonschema.js +0 -24
  200. package/dist/libs/contracts/dist/knowledge/contracts.js +0 -306
  201. package/dist/libs/contracts/dist/knowledge/index.js +0 -7
  202. package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +0 -34
  203. package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +0 -34
  204. package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +0 -38
  205. package/dist/libs/contracts/dist/knowledge/spaces/index.js +0 -6
  206. package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +0 -34
  207. package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +0 -37
  208. package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +0 -34
  209. package/dist/libs/contracts/dist/llm/exporters.js +0 -352
  210. package/dist/libs/contracts/dist/llm/index.js +0 -2
  211. package/dist/libs/contracts/dist/llm/prompts.js +0 -211
  212. package/dist/libs/contracts/dist/onboarding-base.js +0 -196
  213. package/dist/libs/contracts/dist/openapi.js +0 -75
  214. package/dist/libs/contracts/dist/ownership.js +0 -21
  215. package/dist/libs/contracts/dist/presentations.js +0 -1
  216. package/dist/libs/contracts/dist/presentations.v2.js +0 -11
  217. package/dist/libs/contracts/dist/prompt.js +0 -1
  218. package/dist/libs/contracts/dist/promptRegistry.js +0 -1
  219. package/dist/libs/contracts/dist/regenerator/index.js +0 -2
  220. package/dist/libs/contracts/dist/regenerator/service.js +0 -92
  221. package/dist/libs/contracts/dist/regenerator/utils.js +0 -51
  222. package/dist/libs/contracts/dist/registry.js +0 -208
  223. package/dist/libs/contracts/dist/resources.js +0 -1
  224. package/dist/libs/contracts/dist/schema/dist/EnumType.js +0 -2
  225. package/dist/libs/contracts/dist/schema/dist/FieldType.js +0 -49
  226. package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +0 -236
  227. package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +0 -34
  228. package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +0 -1
  229. package/dist/libs/contracts/dist/schema/dist/entity/index.js +0 -2
  230. package/dist/libs/contracts/dist/schema/dist/entity/types.js +0 -1
  231. package/dist/libs/contracts/dist/schema/dist/index.js +0 -6
  232. package/dist/libs/contracts/dist/server/graphql-pothos.js +0 -6
  233. package/dist/libs/contracts/dist/server/index.js +0 -8
  234. package/dist/libs/contracts/dist/server/mcp/createMcpServer.js +0 -4
  235. package/dist/libs/contracts/dist/server/mcp/registerPresentations.js +0 -2
  236. package/dist/libs/contracts/dist/server/mcp/registerPrompts.js +0 -1
  237. package/dist/libs/contracts/dist/server/mcp/registerResources.js +0 -2
  238. package/dist/libs/contracts/dist/server/mcp/registerTools.js +0 -1
  239. package/dist/libs/contracts/dist/server/provider-mcp.js +0 -1
  240. package/dist/libs/contracts/dist/server/rest-elysia.js +0 -1
  241. package/dist/libs/contracts/dist/server/rest-express.js +0 -1
  242. package/dist/libs/contracts/dist/server/rest-generic.js +0 -1
  243. package/dist/libs/contracts/dist/server/rest-next-app.js +0 -1
  244. package/dist/libs/contracts/dist/server/rest-next-pages.js +0 -1
  245. package/dist/libs/contracts/dist/spec.js +0 -35
  246. package/dist/libs/contracts/dist/telemetry/index.js +0 -1
  247. package/dist/libs/contracts/dist/telemetry/tracker.js +0 -1
  248. package/dist/libs/contracts/dist/tests/index.js +0 -1
  249. package/dist/libs/contracts/dist/tests/runner.js +0 -150
  250. package/dist/libs/contracts/dist/workflow/index.js +0 -1
  251. package/dist/libs/contracts/dist/workflow/runner.js +0 -1
  252. package/dist/libs/contracts-transformers/dist/common/utils.js +0 -47
  253. package/dist/libs/contracts-transformers/dist/openapi/exporter.js +0 -1
  254. package/dist/libs/contracts-transformers/dist/openapi/importer.js +0 -255
  255. package/dist/libs/contracts-transformers/dist/openapi/index.js +0 -4
  256. package/dist/libs/contracts-transformers/dist/openapi/parser.js +0 -231
  257. package/dist/libs/contracts-transformers/dist/openapi/schema-converter.js +0 -201
  258. package/dist/modules/contractspec-workspace/dist/ai/code-generation.js +0 -137
  259. package/dist/modules/contractspec-workspace/dist/ai/spec-creation.js +0 -101
  260. package/dist/modules/contractspec-workspace/dist/analysis/deps/graph.js +0 -84
  261. package/dist/modules/contractspec-workspace/dist/analysis/deps/parse-imports.js +0 -30
  262. package/dist/modules/contractspec-workspace/dist/analysis/diff/semantic.js +0 -96
  263. package/dist/modules/contractspec-workspace/dist/analysis/feature-scan.js +0 -151
  264. package/dist/modules/contractspec-workspace/dist/analysis/spec-scan.js +0 -344
  265. package/dist/modules/contractspec-workspace/dist/analysis/validate/spec-structure.js +0 -122
  266. package/dist/modules/contractspec-workspace/dist/templates/app-config.js +0 -105
  267. package/dist/modules/contractspec-workspace/dist/templates/data-view.js +0 -68
  268. package/dist/modules/contractspec-workspace/dist/templates/event.js +0 -38
  269. package/dist/modules/contractspec-workspace/dist/templates/experiment.js +0 -87
  270. package/dist/modules/contractspec-workspace/dist/templates/handler.js +0 -95
  271. package/dist/modules/contractspec-workspace/dist/templates/integration-utils.js +0 -104
  272. package/dist/modules/contractspec-workspace/dist/templates/integration.js +0 -62
  273. package/dist/modules/contractspec-workspace/dist/templates/knowledge.js +0 -68
  274. package/dist/modules/contractspec-workspace/dist/templates/migration.js +0 -60
  275. package/dist/modules/contractspec-workspace/dist/templates/operation.js +0 -100
  276. package/dist/modules/contractspec-workspace/dist/templates/presentation.js +0 -78
  277. package/dist/modules/contractspec-workspace/dist/templates/telemetry.js +0 -89
  278. package/dist/modules/contractspec-workspace/dist/templates/utils.js +0 -38
  279. package/dist/modules/contractspec-workspace/dist/templates/workflow-runner.js +0 -48
  280. package/dist/modules/contractspec-workspace/dist/templates/workflow.js +0 -67
  281. package/dist/modules/contractspec-workspace/dist/types/generation-types.js +0 -20
  282. package/dist/ports/ai.d.ts +0 -58
  283. package/dist/ports/fs.d.ts +0 -80
  284. package/dist/ports/git.d.ts +0 -32
  285. package/dist/ports/logger.d.ts +0 -87
  286. package/dist/ports/watcher.d.ts +0 -51
  287. package/dist/services/agent-guide/adapters/claude-code.d.ts +0 -34
  288. package/dist/services/agent-guide/adapters/cursor-cli.d.ts +0 -38
  289. package/dist/services/agent-guide/adapters/generic-mcp.d.ts +0 -52
  290. package/dist/services/agent-guide/adapters/index.d.ts +0 -22
  291. package/dist/services/agent-guide/agent-guide-service.d.ts +0 -55
  292. package/dist/services/agent-guide/types.d.ts +0 -57
  293. package/dist/services/build.d.ts +0 -58
  294. package/dist/services/ci-check/ci-check-service.d.ts +0 -15
  295. package/dist/services/ci-check/types.d.ts +0 -142
  296. package/dist/services/clean.d.ts +0 -40
  297. package/dist/services/config.d.ts +0 -25
  298. package/dist/services/deps.d.ts +0 -52
  299. package/dist/services/diff.d.ts +0 -33
  300. package/dist/services/doctor/doctor-service.d.ts +0 -23
  301. package/dist/services/doctor/types.d.ts +0 -117
  302. package/dist/services/implementation/discovery.d.ts +0 -29
  303. package/dist/services/implementation/resolver.d.ts +0 -43
  304. package/dist/services/implementation/types.d.ts +0 -78
  305. package/dist/services/integrity-diagram.d.ts +0 -35
  306. package/dist/services/integrity.d.ts +0 -133
  307. package/dist/services/list.d.ts +0 -30
  308. package/dist/services/openapi/export-service.d.ts +0 -52
  309. package/dist/services/openapi/import-service.d.ts +0 -15
  310. package/dist/services/openapi/sync-service.d.ts +0 -18
  311. package/dist/services/openapi/types.d.ts +0 -184
  312. package/dist/services/openapi/validate-service.d.ts +0 -15
  313. package/dist/services/regenerator.d.ts +0 -17
  314. package/dist/services/registry.d.ts +0 -52
  315. package/dist/services/setup/config-generators.d.ts +0 -41
  316. package/dist/services/setup/file-merger.d.ts +0 -26
  317. package/dist/services/setup/setup-service.d.ts +0 -11
  318. package/dist/services/setup/types.d.ts +0 -84
  319. package/dist/services/sync.d.ts +0 -40
  320. package/dist/services/test.d.ts +0 -14
  321. package/dist/services/validate-implementation.d.ts +0 -31
  322. package/dist/services/validate.d.ts +0 -40
  323. package/dist/services/verification-cache/adapters/filesystem.d.ts +0 -45
  324. package/dist/services/verification-cache/adapters/in-memory.d.ts +0 -26
  325. package/dist/services/verification-cache/adapters/workspace-state.d.ts +0 -48
  326. package/dist/services/verification-cache/cache-service.d.ts +0 -69
  327. package/dist/services/verification-cache/types.d.ts +0 -123
  328. package/dist/services/verify/ai-verifier.d.ts +0 -24
  329. package/dist/services/verify/behavior-verifier.d.ts +0 -11
  330. package/dist/services/verify/structure-verifier.d.ts +0 -11
  331. package/dist/services/verify/types.d.ts +0 -136
  332. package/dist/services/verify/verify-service.d.ts +0 -59
  333. package/dist/services/watch.d.ts +0 -24
  334. package/dist/services/workspace-info.d.ts +0 -61
  335. package/dist/templates/app-config.template.d.ts +0 -6
  336. package/dist/templates/data-view.template.d.ts +0 -6
  337. package/dist/templates/event.template.d.ts +0 -10
  338. package/dist/templates/experiment.template.d.ts +0 -6
  339. package/dist/templates/handler.template.d.ts +0 -15
  340. package/dist/templates/index.d.ts +0 -20
  341. package/dist/templates/integration.template.d.ts +0 -6
  342. package/dist/templates/knowledge.template.d.ts +0 -6
  343. package/dist/templates/migration.template.d.ts +0 -6
  344. package/dist/templates/operation.template.d.ts +0 -10
  345. package/dist/templates/presentation.template.d.ts +0 -10
  346. package/dist/templates/telemetry.template.d.ts +0 -6
  347. package/dist/templates/workflow-runner.template.d.ts +0 -15
  348. package/dist/templates/workflow.template.d.ts +0 -6
  349. package/dist/types/config.d.ts +0 -33
  350. package/dist/types.d.ts +0 -323
@@ -1,75 +1 @@
1
- import { parseOpenApi } from "../../libs/contracts-transformers/dist/openapi/parser.js";
2
- import { importFromOpenApi } from "../../libs/contracts-transformers/dist/openapi/importer.js";
3
- import "../../libs/contracts-transformers/dist/openapi/index.js";
4
- import { dirname, join } from "path";
5
-
6
- //#region src/services/openapi/import-service.ts
7
- /**
8
- * OpenAPI import service - imports specs from OpenAPI documents.
9
- */
10
- /**
11
- * Import ContractSpec specs from an OpenAPI document.
12
- */
13
- async function importFromOpenApiService(options, adapters) {
14
- const { fs, logger } = adapters;
15
- const { source, outputDir, prefix, tags, exclude, defaultStability, defaultOwners, defaultAuth, dryRun = false } = options;
16
- logger.info(`Importing from OpenAPI: ${source}`);
17
- const parseResult = await parseOpenApi(source, {
18
- fetch: globalThis.fetch,
19
- readFile: (path) => fs.readFile(path)
20
- });
21
- if (parseResult.warnings.length > 0) for (const warning of parseResult.warnings) logger.warn(`Parse warning: ${warning}`);
22
- logger.info(`Parsed ${parseResult.operations.length} operations from ${parseResult.info.title} v${parseResult.info.version}`);
23
- const importResult = importFromOpenApi(parseResult, {
24
- prefix,
25
- tags,
26
- exclude,
27
- defaultStability,
28
- defaultOwners,
29
- defaultAuth
30
- });
31
- logger.info(`Import result: ${importResult.summary.imported} imported, ${importResult.summary.skipped} skipped, ${importResult.summary.errors} errors`);
32
- const files = [];
33
- const skippedOperations = [];
34
- const errorMessages = [];
35
- for (const spec of importResult.specs) {
36
- const filePath = join(outputDir, spec.fileName);
37
- if (dryRun) logger.info(`[DRY RUN] Would create: ${filePath}`);
38
- else {
39
- const dir = dirname(filePath);
40
- await fs.mkdir(dir);
41
- await fs.writeFile(filePath, spec.code);
42
- logger.info(`Created: ${filePath}`);
43
- }
44
- files.push({
45
- path: filePath,
46
- operationId: spec.source.sourceId,
47
- specName: spec.fileName.replace(".ts", "")
48
- });
49
- }
50
- for (const skipped of importResult.skipped) {
51
- skippedOperations.push({
52
- operationId: skipped.sourceId,
53
- reason: skipped.reason
54
- });
55
- logger.debug(`Skipped: ${skipped.sourceId} - ${skipped.reason}`);
56
- }
57
- for (const error of importResult.errors) {
58
- errorMessages.push({
59
- operationId: error.sourceId,
60
- error: error.error
61
- });
62
- logger.error(`Error: ${error.sourceId} - ${error.error}`);
63
- }
64
- return {
65
- imported: importResult.summary.imported,
66
- skipped: importResult.summary.skipped,
67
- errors: importResult.summary.errors,
68
- files,
69
- skippedOperations,
70
- errorMessages
71
- };
72
- }
73
-
74
- //#endregion
75
- export { importFromOpenApiService };
1
+ import{importFromOpenApi as e,parseOpenApi as t}from"@lssm/lib.contracts-transformers/openapi";import{dirname as n,join as r}from"path";async function i(i,a){let{fs:o,logger:s}=a,{source:c,outputDir:l,prefix:u,tags:d,exclude:f,defaultStability:p,defaultOwners:m,defaultAuth:h,dryRun:g=!1}=i;s.info(`Importing from OpenAPI: ${c}`);let _=await t(c,{fetch:globalThis.fetch,readFile:e=>o.readFile(e)});if(_.warnings.length>0)for(let e of _.warnings)s.warn(`Parse warning: ${e}`);s.info(`Parsed ${_.operations.length} operations from ${_.info.title} v${_.info.version}`);let v=e(_,{prefix:u,tags:d,exclude:f,defaultStability:p,defaultOwners:m,defaultAuth:h});s.info(`Import result: ${v.summary.imported} imported, ${v.summary.skipped} skipped, ${v.summary.errors} errors`);let y=[],b=[],x=[];for(let e of v.specs){let t=r(l,e.fileName);if(g)s.info(`[DRY RUN] Would create: ${t}`);else{let r=n(t);await o.mkdir(r),await o.writeFile(t,e.code),s.info(`Created: ${t}`)}y.push({path:t,operationId:e.source.sourceId,specName:e.fileName.replace(`.ts`,``)})}for(let e of v.skipped)b.push({operationId:e.sourceId,reason:e.reason}),s.debug(`Skipped: ${e.sourceId} - ${e.reason}`);for(let e of v.errors)x.push({operationId:e.sourceId,error:e.error}),s.error(`Error: ${e.sourceId} - ${e.error}`);return{imported:v.summary.imported,skipped:v.summary.skipped,errors:v.summary.errors,files:y,skippedOperations:b,errorMessages:x}}export{i as importFromOpenApiService};
@@ -1,4 +1 @@
1
- import { importFromOpenApiService } from "./import-service.js";
2
- import { syncWithOpenApiService } from "./sync-service.js";
3
- import { validateAgainstOpenApiService } from "./validate-service.js";
4
- import { exportOpenApi } from "./export-service.js";
1
+ import{importFromOpenApiService as e}from"./import-service.js";import{syncWithOpenApiService as t}from"./sync-service.js";import{validateAgainstOpenApiService as n}from"./validate-service.js";import{exportOpenApi as r}from"./export-service.js";
@@ -1,121 +1 @@
1
- import { parseOpenApi } from "../../libs/contracts-transformers/dist/openapi/parser.js";
2
- import { importFromOpenApi } from "../../libs/contracts-transformers/dist/openapi/importer.js";
3
- import "../../libs/contracts-transformers/dist/openapi/index.js";
4
- import { dirname, join } from "path";
5
-
6
- //#region src/services/openapi/sync-service.ts
7
- /**
8
- * OpenAPI sync service - syncs specs with OpenAPI sources.
9
- */
10
- /**
11
- * Sync ContractSpec specs with OpenAPI sources.
12
- */
13
- async function syncWithOpenApiService(options, config, adapters) {
14
- const { fs, logger } = adapters;
15
- const { sources: optSources, sourceName, interactive, force, dryRun } = options;
16
- const { sources: configSources, outputDir } = config;
17
- let sourcesToSync = optSources ?? configSources ?? [];
18
- if (sourceName) {
19
- sourcesToSync = sourcesToSync.filter((s) => s.name === sourceName);
20
- if (sourcesToSync.length === 0) throw new Error(`Source not found: ${sourceName}`);
21
- }
22
- if (sourcesToSync.length === 0) {
23
- logger.warn("No OpenAPI sources configured. Add sources to .contractsrc.json");
24
- return {
25
- added: 0,
26
- updated: 0,
27
- unchanged: 0,
28
- conflicts: 0,
29
- changes: []
30
- };
31
- }
32
- const result = {
33
- added: 0,
34
- updated: 0,
35
- unchanged: 0,
36
- conflicts: 0,
37
- changes: []
38
- };
39
- for (const source of sourcesToSync) {
40
- logger.info(`Syncing with source: ${source.name}`);
41
- const sourceLocation = source.url ?? source.file;
42
- if (!sourceLocation) {
43
- logger.warn(`Source ${source.name} has no url or file configured`);
44
- continue;
45
- }
46
- const parseResult = await parseOpenApi(sourceLocation, {
47
- fetch: globalThis.fetch,
48
- readFile: (path) => fs.readFile(path)
49
- });
50
- logger.info(`Parsed ${parseResult.operations.length} operations from ${source.name}`);
51
- const importResult = importFromOpenApi(parseResult, {
52
- prefix: source.prefix,
53
- tags: source.tags,
54
- exclude: source.exclude,
55
- defaultStability: source.defaultStability,
56
- defaultAuth: source.defaultAuth
57
- });
58
- for (const imported of importResult.specs) {
59
- const filePath = join(outputDir, imported.fileName);
60
- if (!await fs.exists(filePath)) {
61
- if (!dryRun) {
62
- const dir = dirname(filePath);
63
- await fs.mkdir(dir);
64
- await fs.writeFile(filePath, imported.code);
65
- }
66
- result.added++;
67
- result.changes.push({
68
- operationId: imported.source.sourceId,
69
- action: "added",
70
- path: filePath
71
- });
72
- logger.info(`Added: ${imported.source.sourceId}`);
73
- } else if (await fs.readFile(filePath) === imported.code) {
74
- result.unchanged++;
75
- result.changes.push({
76
- operationId: imported.source.sourceId,
77
- action: "unchanged",
78
- path: filePath
79
- });
80
- } else if (force === "openapi") {
81
- if (!dryRun) await fs.writeFile(filePath, imported.code);
82
- result.updated++;
83
- result.changes.push({
84
- operationId: imported.source.sourceId,
85
- action: "updated",
86
- path: filePath
87
- });
88
- logger.info(`Updated: ${imported.source.sourceId}`);
89
- } else if (force === "contractspec") {
90
- result.unchanged++;
91
- result.changes.push({
92
- operationId: imported.source.sourceId,
93
- action: "unchanged",
94
- path: filePath
95
- });
96
- logger.info(`Kept: ${imported.source.sourceId}`);
97
- } else if (interactive) {
98
- result.conflicts++;
99
- result.changes.push({
100
- operationId: imported.source.sourceId,
101
- action: "conflict",
102
- path: filePath
103
- });
104
- logger.warn(`Conflict: ${imported.source.sourceId} - needs resolution`);
105
- } else {
106
- result.conflicts++;
107
- result.changes.push({
108
- operationId: imported.source.sourceId,
109
- action: "conflict",
110
- path: filePath
111
- });
112
- logger.warn(`Conflict: ${imported.source.sourceId}`);
113
- }
114
- }
115
- }
116
- logger.info(`Sync complete: ${result.added} added, ${result.updated} updated, ${result.unchanged} unchanged, ${result.conflicts} conflicts`);
117
- return result;
118
- }
119
-
120
- //#endregion
121
- export { syncWithOpenApiService };
1
+ import{importFromOpenApi as e,parseOpenApi as t}from"@lssm/lib.contracts-transformers/openapi";import{dirname as n,join as r}from"path";async function i(i,a,o){let{fs:s,logger:c}=o,{sources:l,sourceName:u,interactive:d,force:f,dryRun:p}=i,{sources:m,outputDir:h}=a,g=l??m??[];if(u&&(g=g.filter(e=>e.name===u),g.length===0))throw Error(`Source not found: ${u}`);if(g.length===0)return c.warn(`No OpenAPI sources configured. Add sources to .contractsrc.json`),{added:0,updated:0,unchanged:0,conflicts:0,changes:[]};let _={added:0,updated:0,unchanged:0,conflicts:0,changes:[]};for(let i of g){c.info(`Syncing with source: ${i.name}`);let a=i.url??i.file;if(!a){c.warn(`Source ${i.name} has no url or file configured`);continue}let o=await t(a,{fetch:globalThis.fetch,readFile:e=>s.readFile(e)});c.info(`Parsed ${o.operations.length} operations from ${i.name}`);let l=e(o,{prefix:i.prefix,tags:i.tags,exclude:i.exclude,defaultStability:i.defaultStability,defaultAuth:i.defaultAuth});for(let e of l.specs){let t=r(h,e.fileName);if(await s.exists(t))await s.readFile(t)===e.code?(_.unchanged++,_.changes.push({operationId:e.source.sourceId,action:`unchanged`,path:t})):f===`openapi`?(p||await s.writeFile(t,e.code),_.updated++,_.changes.push({operationId:e.source.sourceId,action:`updated`,path:t}),c.info(`Updated: ${e.source.sourceId}`)):f===`contractspec`?(_.unchanged++,_.changes.push({operationId:e.source.sourceId,action:`unchanged`,path:t}),c.info(`Kept: ${e.source.sourceId}`)):d?(_.conflicts++,_.changes.push({operationId:e.source.sourceId,action:`conflict`,path:t}),c.warn(`Conflict: ${e.source.sourceId} - needs resolution`)):(_.conflicts++,_.changes.push({operationId:e.source.sourceId,action:`conflict`,path:t}),c.warn(`Conflict: ${e.source.sourceId}`));else{if(!p){let r=n(t);await s.mkdir(r),await s.writeFile(t,e.code)}_.added++,_.changes.push({operationId:e.source.sourceId,action:`added`,path:t}),c.info(`Added: ${e.source.sourceId}`)}}}return c.info(`Sync complete: ${_.added} added, ${_.updated} updated, ${_.unchanged} unchanged, ${_.conflicts} conflicts`),_}export{i as syncWithOpenApiService};
@@ -1,130 +1 @@
1
- import { parseOpenApi } from "../../libs/contracts-transformers/dist/openapi/parser.js";
2
- import "../../libs/contracts-transformers/dist/openapi/index.js";
3
-
4
- //#region src/services/openapi/validate-service.ts
5
- /**
6
- * OpenAPI validation service - validates specs against OpenAPI sources.
7
- */
8
- /**
9
- * Validate ContractSpec specs against an OpenAPI source.
10
- */
11
- async function validateAgainstOpenApiService(options, adapters) {
12
- const { fs, logger } = adapters;
13
- const { specPath, openApiSource, ignoreDescriptions, ignoreTags, ignoreTransport } = options;
14
- logger.info(`Validating specs against OpenAPI: ${openApiSource}`);
15
- const parseResult = await parseOpenApi(openApiSource, {
16
- fetch: globalThis.fetch,
17
- readFile: (path) => fs.readFile(path)
18
- });
19
- logger.info(`Parsed ${parseResult.operations.length} operations from ${parseResult.info.title}`);
20
- const operationsMap = /* @__PURE__ */ new Map();
21
- for (const op of parseResult.operations) operationsMap.set(op.operationId, op);
22
- const results = [];
23
- let specsValidated = 0;
24
- let specsWithDiffs = 0;
25
- const stat = await fs.stat(specPath);
26
- const specFiles = [];
27
- if (stat.isDirectory) {
28
- const files = await fs.glob({
29
- pattern: "**/*.ts",
30
- cwd: specPath,
31
- ignore: [
32
- "node_modules/**",
33
- "dist/**",
34
- "*.test.ts",
35
- "*.spec.ts"
36
- ],
37
- absolute: true
38
- });
39
- specFiles.push(...files);
40
- } else specFiles.push(specPath);
41
- logger.info(`Found ${specFiles.length} spec files to validate`);
42
- for (const file of specFiles) try {
43
- const content = await fs.readFile(file);
44
- const operationIdMatch = content.match(/operationId:\s*['"]([^'"]+)['"]/) || content.match(/name:\s*['"]([^'"]+)['"]/) || content.match(/export\s+const\s+(\w+)Spec\s*=/);
45
- if (!operationIdMatch || !operationIdMatch[1]) {
46
- logger.debug(`Could not extract operationId from ${file}`);
47
- continue;
48
- }
49
- const specName = operationIdMatch[1];
50
- specsValidated++;
51
- let matchingOp;
52
- matchingOp = operationsMap.get(specName);
53
- if (!matchingOp) {
54
- const snakeName = specName.replace(/([A-Z])/g, "_$1").toLowerCase();
55
- matchingOp = operationsMap.get(snakeName);
56
- }
57
- if (!matchingOp) {
58
- for (const [opId, op] of operationsMap) if (opId.toLowerCase().includes(specName.toLowerCase()) || specName.toLowerCase().includes(opId.toLowerCase())) {
59
- matchingOp = op;
60
- break;
61
- }
62
- }
63
- if (!matchingOp) {
64
- results.push({
65
- specPath: file,
66
- valid: false,
67
- diffs: [{
68
- path: "",
69
- type: "removed",
70
- description: `No matching operation found in OpenAPI for spec: ${specName}`
71
- }]
72
- });
73
- specsWithDiffs++;
74
- continue;
75
- }
76
- const diffs = [];
77
- if (matchingOp.deprecated && !content.includes("deprecated")) diffs.push({
78
- path: "meta.stability",
79
- type: "modified",
80
- description: "OpenAPI operation is deprecated but spec does not indicate deprecation"
81
- });
82
- if (!ignoreTransport) {
83
- const pathMatch = content.match(/path:\s*['"]([^'"]+)['"]/);
84
- if (pathMatch && pathMatch[1] !== matchingOp.path) diffs.push({
85
- path: "transport.rest.path",
86
- type: "modified",
87
- description: `Path mismatch: spec has "${pathMatch[1]}", OpenAPI has "${matchingOp.path}"`
88
- });
89
- }
90
- if (!ignoreTransport) {
91
- const methodMatch = content.match(/method:\s*['"]([^'"]+)['"]/);
92
- if (methodMatch?.[1] && methodMatch[1].toLowerCase() !== matchingOp.method.toLowerCase()) diffs.push({
93
- path: "transport.rest.method",
94
- type: "modified",
95
- description: `Method mismatch: spec has "${methodMatch[1]}", OpenAPI has "${matchingOp.method.toUpperCase()}"`
96
- });
97
- }
98
- const valid$1 = diffs.length === 0;
99
- if (!valid$1) specsWithDiffs++;
100
- results.push({
101
- specPath: file,
102
- operationId: matchingOp.operationId,
103
- valid: valid$1,
104
- diffs
105
- });
106
- } catch (error) {
107
- logger.error(`Error validating ${file}: ${error}`);
108
- results.push({
109
- specPath: file,
110
- valid: false,
111
- diffs: [{
112
- path: "",
113
- type: "modified",
114
- description: `Error: ${error instanceof Error ? error.message : String(error)}`
115
- }]
116
- });
117
- specsWithDiffs++;
118
- }
119
- const valid = specsWithDiffs === 0;
120
- logger.info(`Validation ${valid ? "passed" : "failed"}: ${specsValidated} specs checked, ${specsWithDiffs} with differences`);
121
- return {
122
- valid,
123
- specsValidated,
124
- specsWithDiffs,
125
- results
126
- };
127
- }
128
-
129
- //#endregion
130
- export { validateAgainstOpenApiService };
1
+ import{parseOpenApi as e}from"@lssm/lib.contracts-transformers/openapi";async function t(t,n){let{fs:r,logger:i}=n,{specPath:a,openApiSource:o,ignoreDescriptions:s,ignoreTags:c,ignoreTransport:l}=t;i.info(`Validating specs against OpenAPI: ${o}`);let u=await e(o,{fetch:globalThis.fetch,readFile:e=>r.readFile(e)});i.info(`Parsed ${u.operations.length} operations from ${u.info.title}`);let d=new Map;for(let e of u.operations)d.set(e.operationId,e);let f=[],p=0,m=0,h=await r.stat(a),g=[];if(h.isDirectory){let e=await r.glob({pattern:`**/*.ts`,cwd:a,ignore:[`node_modules/**`,`dist/**`,`*.test.ts`,`*.spec.ts`],absolute:!0});g.push(...e)}else g.push(a);i.info(`Found ${g.length} spec files to validate`);for(let e of g)try{let t=await r.readFile(e),n=t.match(/operationId:\s*['"]([^'"]+)['"]/)||t.match(/name:\s*['"]([^'"]+)['"]/)||t.match(/export\s+const\s+(\w+)Spec\s*=/);if(!n||!n[1]){i.debug(`Could not extract operationId from ${e}`);continue}let a=n[1];p++;let o;if(o=d.get(a),!o){let e=a.replace(/([A-Z])/g,`_$1`).toLowerCase();o=d.get(e)}if(!o){for(let[e,t]of d)if(e.toLowerCase().includes(a.toLowerCase())||a.toLowerCase().includes(e.toLowerCase())){o=t;break}}if(!o){f.push({specPath:e,valid:!1,diffs:[{path:``,type:`removed`,description:`No matching operation found in OpenAPI for spec: ${a}`}]}),m++;continue}let s=[];if(o.deprecated&&!t.includes(`deprecated`)&&s.push({path:`meta.stability`,type:`modified`,description:`OpenAPI operation is deprecated but spec does not indicate deprecation`}),!l){let e=t.match(/path:\s*['"]([^'"]+)['"]/);e&&e[1]!==o.path&&s.push({path:`transport.rest.path`,type:`modified`,description:`Path mismatch: spec has "${e[1]}", OpenAPI has "${o.path}"`})}if(!l){let e=t.match(/method:\s*['"]([^'"]+)['"]/);e?.[1]&&e[1].toLowerCase()!==o.method.toLowerCase()&&s.push({path:`transport.rest.method`,type:`modified`,description:`Method mismatch: spec has "${e[1]}", OpenAPI has "${o.method.toUpperCase()}"`})}let c=s.length===0;c||m++,f.push({specPath:e,operationId:o.operationId,valid:c,diffs:s})}catch(t){i.error(`Error validating ${e}: ${t}`),f.push({specPath:e,valid:!1,diffs:[{path:``,type:`modified`,description:`Error: ${t instanceof Error?t.message:String(t)}`}]}),m++}let _=m===0;return i.info(`Validation ${_?`passed`:`failed`}: ${p} specs checked, ${m} with differences`),{valid:_,specsValidated:p,specsWithDiffs:m,results:f}}export{t as validateAgainstOpenApiService};
@@ -1,23 +1 @@
1
- import { RegeneratorService } from "../libs/contracts/dist/regenerator/service.js";
2
- import "../libs/contracts/dist/regenerator/index.js";
3
-
4
- //#region src/services/regenerator.ts
5
- /**
6
- * Regenerator service.
7
- *
8
- * Thin wrapper around `@lssm/lib.contracts/regenerator` for reuse across CLI/VSCode/web.
9
- * This service does not perform module loading; callers provide resolved contexts/rules/sink.
10
- */
11
- function createRegeneratorService(options) {
12
- return new RegeneratorService({
13
- contexts: options.contexts,
14
- adapters: options.adapters ?? {},
15
- rules: options.rules,
16
- sink: options.sink,
17
- pollIntervalMs: options.pollIntervalMs,
18
- batchDurationMs: options.batchDurationMs
19
- });
20
- }
21
-
22
- //#endregion
23
- export { createRegeneratorService };
1
+ import{RegeneratorService as e}from"@lssm/lib.contracts/regenerator";function t(t){return new e({contexts:t.contexts,adapters:t.adapters??{},rules:t.rules,sink:t.sink,pollIntervalMs:t.pollIntervalMs,batchDurationMs:t.batchDurationMs})}export{t as createRegeneratorService};
@@ -1,73 +1 @@
1
- //#region src/services/registry.ts
2
- /**
3
- * Registry client for interacting with ContractSpec registry.
4
- */
5
- var RegistryClient = class {
6
- registryUrl;
7
- constructor(opts) {
8
- this.registryUrl = opts.registryUrl.replace(/\/+$/, "");
9
- }
10
- /**
11
- * Make GET request to registry.
12
- */
13
- async getJson(path) {
14
- const url = `${this.registryUrl}${path.startsWith("/") ? "" : "/"}${path}`;
15
- let res;
16
- try {
17
- res = await fetch(url, {
18
- method: "GET",
19
- headers: { Accept: "application/json" }
20
- });
21
- } catch (error) {
22
- throw new Error(`Registry request failed: ${url} (${error instanceof Error ? error.message : String(error)})`);
23
- }
24
- if (!res.ok) {
25
- const text = await res.text().catch(() => "");
26
- throw new Error(`Registry request failed: ${res.status} ${res.statusText} ${text}`);
27
- }
28
- return await res.json();
29
- }
30
- };
31
- /**
32
- * Resolve registry URL from options or environment.
33
- */
34
- function resolveRegistryUrl(cliRegistryUrl) {
35
- return cliRegistryUrl || process.env.CONTRACTSPEC_REGISTRY_URL || "http://localhost:8090";
36
- }
37
- /**
38
- * Add spec to registry.
39
- */
40
- async function addToRegistry(specPath, options, adapters) {
41
- const { logger } = adapters;
42
- const registryUrl = resolveRegistryUrl(options.registryUrl);
43
- logger.info(`Adding spec to registry: ${specPath}`, { registryUrl });
44
- await new RegistryClient({ registryUrl }).getJson(`/specs/add?path=${encodeURIComponent(specPath)}`);
45
- logger.info("Spec added to registry successfully");
46
- }
47
- /**
48
- * List specs from registry.
49
- */
50
- async function listFromRegistry(options, adapters) {
51
- const { logger } = adapters;
52
- const registryUrl = resolveRegistryUrl(options.registryUrl);
53
- logger.info("Listing specs from registry", { registryUrl });
54
- const client = new RegistryClient({ registryUrl });
55
- const filter = options.filter ? `?filter=${encodeURIComponent(options.filter)}` : "";
56
- const specs = await client.getJson(`/specs${filter}`);
57
- logger.info(`Found ${specs.length} specs`);
58
- return specs;
59
- }
60
- /**
61
- * Search registry for specs.
62
- */
63
- async function searchRegistry(query, options, adapters) {
64
- const { logger } = adapters;
65
- const registryUrl = resolveRegistryUrl(options.registryUrl);
66
- logger.info(`Searching registry: ${query}`, { registryUrl });
67
- const results = await new RegistryClient({ registryUrl }).getJson(`/specs/search?q=${encodeURIComponent(query)}`);
68
- logger.info(`Found ${results.length} results`);
69
- return results;
70
- }
71
-
72
- //#endregion
73
- export { RegistryClient, addToRegistry, listFromRegistry, resolveRegistryUrl, searchRegistry };
1
+ var e=class{registryUrl;constructor(e){this.registryUrl=e.registryUrl.replace(/\/+$/,``)}async getJson(e){let t=`${this.registryUrl}${e.startsWith(`/`)?``:`/`}${e}`,n;try{n=await fetch(t,{method:`GET`,headers:{Accept:`application/json`}})}catch(e){throw Error(`Registry request failed: ${t} (${e instanceof Error?e.message:String(e)})`)}if(!n.ok){let e=await n.text().catch(()=>``);throw Error(`Registry request failed: ${n.status} ${n.statusText} ${e}`)}return await n.json()}};function t(e){return e||process.env.CONTRACTSPEC_REGISTRY_URL||`http://localhost:8090`}async function n(n,r,i){let{logger:a}=i,o=t(r.registryUrl);a.info(`Adding spec to registry: ${n}`,{registryUrl:o}),await new e({registryUrl:o}).getJson(`/specs/add?path=${encodeURIComponent(n)}`),a.info(`Spec added to registry successfully`)}async function r(n,r){let{logger:i}=r,a=t(n.registryUrl);i.info(`Listing specs from registry`,{registryUrl:a});let o=new e({registryUrl:a}),s=n.filter?`?filter=${encodeURIComponent(n.filter)}`:``,c=await o.getJson(`/specs${s}`);return i.info(`Found ${c.length} specs`),c}async function i(n,r,i){let{logger:a}=i,o=t(r.registryUrl);a.info(`Searching registry: ${n}`,{registryUrl:o});let s=await new e({registryUrl:o}).getJson(`/specs/search?q=${encodeURIComponent(n)}`);return a.info(`Found ${s.length} results`),s}export{e as RegistryClient,n as addToRegistry,r as listFromRegistry,t as resolveRegistryUrl,i as searchRegistry};
@@ -1,72 +1,4 @@
1
- //#region src/services/setup/config-generators.ts
2
- /**
3
- * Generate .contractsrc.json content.
4
- *
5
- * Adapts defaults based on monorepo scope.
6
- */
7
- function generateContractsrcConfig(options) {
8
- const isPackageLevel = options.isMonorepo && options.scope === "package";
9
- return {
10
- $schema: "https://contractspec.dev/schemas/contractsrc.json",
11
- aiProvider: "claude",
12
- aiModel: "claude-sonnet-4-20250514",
13
- agentMode: "claude-code",
14
- outputDir: "./src",
15
- conventions: {
16
- operations: "contracts/operations",
17
- events: "contracts/events",
18
- presentations: "contracts/presentations",
19
- forms: "contracts/forms",
20
- features: "contracts/features"
21
- },
22
- defaultOwners: options.defaultOwners ?? ["@team"],
23
- defaultTags: [],
24
- ...isPackageLevel && options.packageName ? { package: options.packageName } : {}
25
- };
26
- }
27
- /**
28
- * Generate .vscode/settings.json ContractSpec settings.
29
- */
30
- function generateVscodeSettings() {
31
- return {
32
- "contractspec.validation.enabled": true,
33
- "contractspec.validation.validateOnSave": true,
34
- "contractspec.validation.validateOnOpen": true,
35
- "contractspec.codeLens.enabled": true,
36
- "contractspec.diagnostics.showWarnings": true,
37
- "contractspec.diagnostics.showHints": true,
38
- "contractspec.integrity.enabled": true,
39
- "contractspec.integrity.checkOnSave": true
40
- };
41
- }
42
- /**
43
- * Generate .cursor/mcp.json content.
44
- */
45
- function generateCursorMcpConfig() {
46
- return { mcpServers: { "contractspec-local": {
47
- command: "bunx",
48
- args: ["contractspec-mcp"]
49
- } } };
50
- }
51
- /**
52
- * Generate Claude Desktop MCP config.
53
- * Returns the mcpServers section to merge into claude_desktop_config.json.
54
- */
55
- function generateClaudeMcpConfig() {
56
- return { mcpServers: { "contractspec-local": {
57
- command: "bunx",
58
- args: ["contractspec-mcp"]
59
- } } };
60
- }
61
- /**
62
- * Generate .cursor/rules/contractspec.mdc content.
63
- *
64
- * Adapts paths based on monorepo scope.
65
- */
66
- function generateCursorRules(options) {
67
- const projectName = options.projectName ?? "this project";
68
- const basePath = options.isMonorepo && options.scope === "package" && options.packageRoot ? `${options.packageRoot.split("/").slice(-2).join("/")}/src/contracts` : "src/contracts";
69
- return `# ContractSpec Development Rules
1
+ function e(e){let t=e.isMonorepo&&e.scope===`package`;return{$schema:`https://contractspec.dev/schemas/contractsrc.json`,aiProvider:`claude`,aiModel:`claude-sonnet-4-20250514`,agentMode:`claude-code`,outputDir:`./src`,conventions:{operations:`contracts/operations`,events:`contracts/events`,presentations:`contracts/presentations`,forms:`contracts/forms`,features:`contracts/features`},defaultOwners:e.defaultOwners??[`@team`],defaultTags:[],...t&&e.packageName?{package:e.packageName}:{}}}function t(){return{"contractspec.validation.enabled":!0,"contractspec.validation.validateOnSave":!0,"contractspec.validation.validateOnOpen":!0,"contractspec.codeLens.enabled":!0,"contractspec.diagnostics.showWarnings":!0,"contractspec.diagnostics.showHints":!0,"contractspec.integrity.enabled":!0,"contractspec.integrity.checkOnSave":!0}}function n(){return{mcpServers:{"contractspec-local":{command:`bunx`,args:[`contractspec-mcp`]}}}}function r(){return{mcpServers:{"contractspec-local":{command:`bunx`,args:[`contractspec-mcp`]}}}}function i(e){let t=e.projectName??`this project`,n=e.isMonorepo&&e.scope===`package`&&e.packageRoot?`${e.packageRoot.split(`/`).slice(-2).join(`/`)}/src/contracts`:`src/contracts`;return`# ContractSpec Development Rules
70
2
 
71
3
  This project uses ContractSpec for spec-first development. Follow these guidelines when working with AI agents.
72
4
 
@@ -75,14 +7,22 @@ This project uses ContractSpec for spec-first development. Follow these guidelin
75
7
  - **Always update contracts first** before changing implementation code.
76
8
  - Contracts are the source of truth for operations, events, and presentations.
77
9
  - Implementation code should be generated or derived from contracts.
78
- ${options.isMonorepo ? `\n## Monorepo Structure\n\nThis is a monorepo. Contracts may exist at:\n- Package level: \`packages/*/src/contracts/\`\n- Workspace level: \`src/contracts/\`\n\nCheck the appropriate level based on the feature scope.\n` : ""}
10
+ ${e.isMonorepo?`
11
+ ## Monorepo Structure
12
+
13
+ This is a monorepo. Contracts may exist at:
14
+ - Package level: \`packages/*/src/contracts/\`
15
+ - Workspace level: \`src/contracts/\`
16
+
17
+ Check the appropriate level based on the feature scope.
18
+ `:``}
79
19
  ## Contract Locations
80
20
 
81
21
  Contracts are located in:
82
- - \`${basePath}/operations/\` - Command and query specs
83
- - \`${basePath}/events/\` - Event specs
84
- - \`${basePath}/presentations/\` - UI presentation specs
85
- - \`${basePath}/features/\` - Feature module specs
22
+ - \`${n}/operations/\` - Command and query specs
23
+ - \`${n}/events/\` - Event specs
24
+ - \`${n}/presentations/\` - UI presentation specs
25
+ - \`${n}/features/\` - Feature module specs
86
26
 
87
27
  ## When Making Changes
88
28
 
@@ -110,28 +50,17 @@ defineCommand({
110
50
  });
111
51
  \`\`\`
112
52
 
113
- ## Rules for ${projectName}
53
+ ## Rules for ${t}
114
54
 
115
55
  - All API endpoints must have a corresponding operation contract.
116
56
  - Events must be declared in contracts before being emitted.
117
57
  - UI components should reference presentation contracts.
118
58
  - Feature flags should be defined in feature modules.
119
- `;
120
- }
121
- /**
122
- * Generate AGENTS.md content.
123
- *
124
- * Adapts paths and instructions based on monorepo scope.
125
- */
126
- function generateAgentsMd(options) {
127
- const projectName = options.projectName ?? "This Project";
128
- const isPackageLevel = options.isMonorepo && options.scope === "package";
129
- const contractPath = "src/contracts/";
130
- return `# AI Agent Guide
59
+ `}function a(e){let t=e.projectName??`This Project`,n=e.isMonorepo&&e.scope===`package`,r=`src/contracts/`;return`# AI Agent Guide
131
60
 
132
61
  This repository uses **ContractSpec** for spec-first development. AI agents should follow these guidelines.
133
62
 
134
- ## Project: ${projectName}
63
+ ## Project: ${t}
135
64
 
136
65
  ## ContractSpec Overview
137
66
 
@@ -142,7 +71,7 @@ ContractSpec is a deterministic, spec-first compiler that keeps AI-written softw
142
71
  1. **Contracts are the source of truth** - Always check/update contracts before modifying implementation.
143
72
  2. **Safe regeneration** - Code can be regenerated from specs without breaking invariants.
144
73
  3. **Multi-surface consistency** - API, events, and UI stay in sync via shared contracts.
145
- ${options.isMonorepo ? `
74
+ ${e.isMonorepo?`
146
75
  ## Monorepo Structure
147
76
 
148
77
  This is a monorepo. Contracts can exist at multiple levels:
@@ -158,13 +87,13 @@ When adding a contract, consider:
158
87
 
159
88
  ### Current Scope
160
89
 
161
- ${isPackageLevel ? `You are working at the **package level**: \`${options.packageName ?? options.packageRoot}\`` : "You are working at the **workspace level**."}
162
- ` : ""}
90
+ ${n?`You are working at the **package level**: \`${e.packageName??e.packageRoot}\``:`You are working at the **workspace level**.`}
91
+ `:``}
163
92
  ## Working in This Repository
164
93
 
165
94
  ### Before Making Changes
166
95
 
167
- 1. Check for existing contracts in \`${contractPath}\`
96
+ 1. Check for existing contracts in \`${r}\`
168
97
  2. If a contract exists, update it first
169
98
  3. Regenerate implementation with \`contractspec build\`
170
99
  4. Validate with \`contractspec validate\`
@@ -180,10 +109,10 @@ ${isPackageLevel ? `You are working at the **package level**: \`${options.packag
180
109
 
181
110
  | Type | Location |
182
111
  |------|----------|
183
- | Operations | \`${contractPath}operations/\` |
184
- | Events | \`${contractPath}events/\` |
185
- | Presentations | \`${contractPath}presentations/\` |
186
- | Features | \`${contractPath}features/\` |
112
+ | Operations | \`${r}operations/\` |
113
+ | Events | \`${r}events/\` |
114
+ | Presentations | \`${r}presentations/\` |
115
+ | Features | \`${r}features/\` |
187
116
 
188
117
  ## MCP Tools Available
189
118
 
@@ -218,20 +147,4 @@ contractspec integrity
218
147
  ## Nested AGENTS.md
219
148
 
220
149
  More specific instructions may exist in subdirectories. Check for \`AGENTS.md\` files in the relevant package or module.
221
- `;
222
- }
223
- /**
224
- * Get the file path for Claude Desktop config based on platform.
225
- */
226
- function getClaudeDesktopConfigPath() {
227
- const platform = process.platform;
228
- const homeDir = process.env["HOME"] ?? process.env["USERPROFILE"] ?? "";
229
- switch (platform) {
230
- case "darwin": return `${homeDir}/Library/Application Support/Claude/claude_desktop_config.json`;
231
- case "win32": return `${process.env["APPDATA"] ?? homeDir}/Claude/claude_desktop_config.json`;
232
- default: return `${homeDir}/.config/claude/claude_desktop_config.json`;
233
- }
234
- }
235
-
236
- //#endregion
237
- export { generateAgentsMd, generateClaudeMcpConfig, generateContractsrcConfig, generateCursorMcpConfig, generateCursorRules, generateVscodeSettings, getClaudeDesktopConfigPath };
150
+ `}function o(){let e=process.platform,t=process.env.HOME??process.env.USERPROFILE??``;switch(e){case`darwin`:return`${t}/Library/Application Support/Claude/claude_desktop_config.json`;case`win32`:return`${process.env.APPDATA??t}/Claude/claude_desktop_config.json`;default:return`${t}/.config/claude/claude_desktop_config.json`}}export{a as generateAgentsMd,r as generateClaudeMcpConfig,e as generateContractsrcConfig,n as generateCursorMcpConfig,i as generateCursorRules,t as generateVscodeSettings,o as getClaudeDesktopConfigPath};