@lssm/bundle.contractspec-workspace 0.0.0-canary-20251217083314 → 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,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};