@lssm/bundle.contractspec-workspace 0.0.0-canary-20251217060834 → 0.0.0-canary-20251217072406

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 (269) hide show
  1. package/dist/_virtual/rolldown_runtime.js +22 -1
  2. package/dist/adapters/ai.js +82 -1
  3. package/dist/adapters/factory.js +36 -1
  4. package/dist/adapters/fs.js +118 -1
  5. package/dist/adapters/git.js +54 -1
  6. package/dist/adapters/index.js +7 -1
  7. package/dist/adapters/logger.js +80 -1
  8. package/dist/adapters/watcher.js +69 -1
  9. package/dist/adapters/workspace.js +190 -2
  10. package/dist/ai/agents/claude-code-agent.js +146 -9
  11. package/dist/ai/agents/cursor-agent.js +286 -17
  12. package/dist/ai/agents/index.js +5 -1
  13. package/dist/ai/agents/openai-codex-agent.js +140 -8
  14. package/dist/ai/agents/orchestrator.js +142 -1
  15. package/dist/ai/agents/simple-agent.js +80 -4
  16. package/dist/ai/client.js +162 -1
  17. package/dist/ai/index.js +27 -1
  18. package/dist/ai/prompts/code-generation.js +55 -13
  19. package/dist/ai/prompts/index.js +12 -1
  20. package/dist/ai/prompts/spec-creation.js +61 -20
  21. package/dist/ai/providers.js +40 -1
  22. package/dist/formatters/index.js +18 -1
  23. package/dist/formatters/json.js +71 -1
  24. package/dist/formatters/sarif.js +163 -1
  25. package/dist/formatters/text.js +208 -2
  26. package/dist/index.d.ts +0 -3
  27. package/dist/index.js +81 -1
  28. package/dist/libs/ai-providers/dist/factory.js +154 -0
  29. package/dist/libs/ai-providers/dist/index.js +4 -0
  30. package/dist/libs/ai-providers/dist/legacy.js +72 -0
  31. package/dist/libs/ai-providers/dist/models.js +287 -0
  32. package/dist/libs/ai-providers/dist/validation.js +1 -0
  33. package/dist/libs/contracts/dist/capabilities/openbanking.js +88 -0
  34. package/dist/libs/contracts/dist/client/index.js +5 -0
  35. package/dist/libs/contracts/dist/client/react/feature-render.js +2 -0
  36. package/dist/libs/contracts/dist/client/react/form-render.js +4 -0
  37. package/dist/libs/contracts/dist/client/react/index.js +4 -0
  38. package/dist/libs/contracts/dist/contract-registry/index.js +1 -0
  39. package/dist/libs/contracts/dist/contract-registry/schemas.js +60 -0
  40. package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +16 -0
  41. package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +16 -0
  42. package/dist/libs/contracts/dist/docs/index.js +29 -0
  43. package/dist/libs/contracts/dist/docs/presentations.js +71 -0
  44. package/dist/libs/contracts/dist/docs/registry.js +44 -0
  45. package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +16 -0
  46. package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +16 -0
  47. package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +16 -0
  48. package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +16 -0
  49. package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +16 -0
  50. package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +80 -0
  51. package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +57 -0
  52. package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +16 -0
  53. package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +357 -0
  54. package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +37 -0
  55. package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +16 -0
  56. package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +20 -0
  57. package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +48 -0
  58. package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +79 -0
  59. package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +84 -0
  60. package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +45 -0
  61. package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +67 -0
  62. package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +40 -0
  63. package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +69 -0
  64. package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +47 -0
  65. package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +62 -0
  66. package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +155 -0
  67. package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +20 -0
  68. package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +101 -0
  69. package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +20 -0
  70. package/dist/libs/contracts/dist/events.js +8 -0
  71. package/dist/libs/contracts/dist/experiments/evaluator.js +1 -0
  72. package/dist/libs/contracts/dist/index.js +72 -0
  73. package/dist/libs/contracts/dist/install.js +2 -0
  74. package/dist/libs/contracts/dist/integrations/contracts.js +377 -0
  75. package/dist/libs/contracts/dist/integrations/index.js +18 -0
  76. package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +228 -0
  77. package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +159 -0
  78. package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +3 -0
  79. package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +210 -0
  80. package/dist/libs/contracts/dist/integrations/openbanking/models.js +242 -0
  81. package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +13 -0
  82. package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +52 -0
  83. package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +75 -0
  84. package/dist/libs/contracts/dist/integrations/providers/gmail.js +87 -0
  85. package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +66 -0
  86. package/dist/libs/contracts/dist/integrations/providers/index.js +11 -0
  87. package/dist/libs/contracts/dist/integrations/providers/mistral.js +68 -0
  88. package/dist/libs/contracts/dist/integrations/providers/postmark.js +68 -0
  89. package/dist/libs/contracts/dist/integrations/providers/powens.js +116 -0
  90. package/dist/libs/contracts/dist/integrations/providers/qdrant.js +73 -0
  91. package/dist/libs/contracts/dist/integrations/providers/registry.js +10 -0
  92. package/dist/libs/contracts/dist/integrations/providers/stripe.js +83 -0
  93. package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +61 -0
  94. package/dist/libs/contracts/dist/jsonschema.js +24 -0
  95. package/dist/libs/contracts/dist/knowledge/contracts.js +306 -0
  96. package/dist/libs/contracts/dist/knowledge/index.js +7 -0
  97. package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +34 -0
  98. package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +34 -0
  99. package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +38 -0
  100. package/dist/libs/contracts/dist/knowledge/spaces/index.js +6 -0
  101. package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +34 -0
  102. package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +37 -0
  103. package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +34 -0
  104. package/dist/libs/contracts/dist/llm/exporters.js +352 -0
  105. package/dist/libs/contracts/dist/llm/index.js +2 -0
  106. package/dist/libs/contracts/dist/llm/prompts.js +211 -0
  107. package/dist/libs/contracts/dist/onboarding-base.js +196 -0
  108. package/dist/libs/contracts/dist/openapi.js +75 -0
  109. package/dist/libs/contracts/dist/ownership.js +21 -0
  110. package/dist/libs/contracts/dist/presentations.js +1 -0
  111. package/dist/libs/contracts/dist/presentations.v2.js +11 -0
  112. package/dist/libs/contracts/dist/prompt.js +1 -0
  113. package/dist/libs/contracts/dist/promptRegistry.js +1 -0
  114. package/dist/libs/contracts/dist/regenerator/index.js +2 -0
  115. package/dist/libs/contracts/dist/regenerator/service.js +92 -0
  116. package/dist/libs/contracts/dist/regenerator/utils.js +51 -0
  117. package/dist/libs/contracts/dist/registry.js +208 -0
  118. package/dist/libs/contracts/dist/resources.js +1 -0
  119. package/dist/libs/contracts/dist/schema/dist/EnumType.js +2 -0
  120. package/dist/libs/contracts/dist/schema/dist/FieldType.js +49 -0
  121. package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +236 -0
  122. package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +34 -0
  123. package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +1 -0
  124. package/dist/libs/contracts/dist/schema/dist/entity/index.js +2 -0
  125. package/dist/libs/contracts/dist/schema/dist/entity/types.js +1 -0
  126. package/dist/libs/contracts/dist/schema/dist/index.js +6 -0
  127. package/dist/libs/contracts/dist/server/graphql-pothos.js +6 -0
  128. package/dist/libs/contracts/dist/server/index.js +8 -0
  129. package/dist/libs/contracts/dist/server/mcp/createMcpServer.js +4 -0
  130. package/dist/libs/contracts/dist/server/mcp/registerPresentations.js +2 -0
  131. package/dist/libs/contracts/dist/server/mcp/registerPrompts.js +1 -0
  132. package/dist/libs/contracts/dist/server/mcp/registerResources.js +2 -0
  133. package/dist/libs/contracts/dist/server/mcp/registerTools.js +1 -0
  134. package/dist/libs/contracts/dist/server/provider-mcp.js +1 -0
  135. package/dist/libs/contracts/dist/server/rest-elysia.js +1 -0
  136. package/dist/libs/contracts/dist/server/rest-express.js +1 -0
  137. package/dist/libs/contracts/dist/server/rest-generic.js +1 -0
  138. package/dist/libs/contracts/dist/server/rest-next-app.js +1 -0
  139. package/dist/libs/contracts/dist/server/rest-next-pages.js +1 -0
  140. package/dist/libs/contracts/dist/spec.js +35 -0
  141. package/dist/libs/contracts/dist/telemetry/index.js +1 -0
  142. package/dist/libs/contracts/dist/telemetry/tracker.js +1 -0
  143. package/dist/libs/contracts/dist/tests/index.js +1 -0
  144. package/dist/libs/contracts/dist/tests/runner.js +150 -0
  145. package/dist/libs/contracts/dist/workflow/index.js +1 -0
  146. package/dist/libs/contracts/dist/workflow/runner.js +1 -0
  147. package/dist/libs/contracts-transformers/dist/common/utils.js +47 -0
  148. package/dist/libs/contracts-transformers/dist/openapi/exporter.js +1 -0
  149. package/dist/libs/contracts-transformers/dist/openapi/importer.js +255 -0
  150. package/dist/libs/contracts-transformers/dist/openapi/index.js +4 -0
  151. package/dist/libs/contracts-transformers/dist/openapi/parser.js +231 -0
  152. package/dist/libs/contracts-transformers/dist/openapi/schema-converter.js +201 -0
  153. package/dist/modules/contractspec-workspace/dist/ai/code-generation.js +137 -0
  154. package/dist/modules/contractspec-workspace/dist/ai/spec-creation.js +101 -0
  155. package/dist/modules/contractspec-workspace/dist/analysis/deps/graph.js +84 -0
  156. package/dist/modules/contractspec-workspace/dist/analysis/deps/parse-imports.js +30 -0
  157. package/dist/modules/contractspec-workspace/dist/analysis/diff/semantic.js +96 -0
  158. package/dist/modules/contractspec-workspace/dist/analysis/feature-scan.js +151 -0
  159. package/dist/modules/contractspec-workspace/dist/analysis/spec-scan.js +344 -0
  160. package/dist/modules/contractspec-workspace/dist/analysis/validate/spec-structure.js +122 -0
  161. package/dist/modules/contractspec-workspace/dist/templates/app-config.js +105 -0
  162. package/dist/modules/contractspec-workspace/dist/templates/data-view.js +68 -0
  163. package/dist/modules/contractspec-workspace/dist/templates/event.js +38 -0
  164. package/dist/modules/contractspec-workspace/dist/templates/experiment.js +87 -0
  165. package/dist/modules/contractspec-workspace/dist/templates/handler.js +95 -0
  166. package/dist/modules/contractspec-workspace/dist/templates/integration-utils.js +104 -0
  167. package/dist/modules/contractspec-workspace/dist/templates/integration.js +62 -0
  168. package/dist/modules/contractspec-workspace/dist/templates/knowledge.js +68 -0
  169. package/dist/modules/contractspec-workspace/dist/templates/migration.js +60 -0
  170. package/dist/modules/contractspec-workspace/dist/templates/operation.js +100 -0
  171. package/dist/modules/contractspec-workspace/dist/templates/presentation.js +78 -0
  172. package/dist/modules/contractspec-workspace/dist/templates/telemetry.js +89 -0
  173. package/dist/modules/contractspec-workspace/dist/templates/utils.js +38 -0
  174. package/dist/modules/contractspec-workspace/dist/templates/workflow-runner.js +48 -0
  175. package/dist/modules/contractspec-workspace/dist/templates/workflow.js +67 -0
  176. package/dist/modules/contractspec-workspace/dist/types/generation-types.js +20 -0
  177. package/dist/services/agent-guide/adapters/claude-code.js +144 -3
  178. package/dist/services/agent-guide/adapters/cursor-cli.js +135 -3
  179. package/dist/services/agent-guide/adapters/generic-mcp.js +159 -3
  180. package/dist/services/agent-guide/adapters/index.js +30 -1
  181. package/dist/services/agent-guide/agent-guide-service.js +148 -1
  182. package/dist/services/agent-guide/index.js +5 -1
  183. package/dist/services/build.js +140 -1
  184. package/dist/services/ci-check/ci-check-service.js +393 -1
  185. package/dist/services/ci-check/index.js +2 -1
  186. package/dist/services/ci-check/types.js +28 -1
  187. package/dist/services/clean.js +71 -1
  188. package/dist/services/config.js +76 -1
  189. package/dist/services/deps.js +62 -1
  190. package/dist/services/diff.js +33 -1
  191. package/dist/services/doctor/checks/ai.js +118 -2
  192. package/dist/services/doctor/checks/cli.js +146 -1
  193. package/dist/services/doctor/checks/config.js +170 -1
  194. package/dist/services/doctor/checks/deps.js +180 -1
  195. package/dist/services/doctor/checks/index.js +6 -1
  196. package/dist/services/doctor/checks/mcp.js +144 -1
  197. package/dist/services/doctor/checks/workspace.js +243 -1
  198. package/dist/services/doctor/doctor-service.js +115 -2
  199. package/dist/services/doctor/index.js +2 -1
  200. package/dist/services/doctor/types.js +26 -1
  201. package/dist/services/implementation/discovery.js +143 -2
  202. package/dist/services/implementation/index.js +2 -1
  203. package/dist/services/implementation/resolver.js +223 -1
  204. package/dist/services/index.js +53 -1
  205. package/dist/services/integrity-diagram.js +274 -6
  206. package/dist/services/integrity.js +272 -1
  207. package/dist/services/list.js +35 -1
  208. package/dist/services/openapi/export-service.js +51 -2
  209. package/dist/services/openapi/import-service.js +75 -1
  210. package/dist/services/openapi/index.js +4 -1
  211. package/dist/services/openapi/sync-service.js +121 -1
  212. package/dist/services/openapi/validate-service.js +130 -1
  213. package/dist/services/regenerator.js +23 -1
  214. package/dist/services/registry.js +73 -1
  215. package/dist/services/setup/config-generators.js +113 -26
  216. package/dist/services/setup/file-merger.js +60 -2
  217. package/dist/services/setup/index.js +4 -1
  218. package/dist/services/setup/setup-service.js +95 -1
  219. package/dist/services/setup/targets/agents-md.js +46 -1
  220. package/dist/services/setup/targets/cli-config.js +59 -1
  221. package/dist/services/setup/targets/cursor-rules.js +47 -1
  222. package/dist/services/setup/targets/mcp-claude.js +59 -1
  223. package/dist/services/setup/targets/mcp-cursor.js +58 -1
  224. package/dist/services/setup/targets/vscode-settings.js +62 -1
  225. package/dist/services/setup/types.js +26 -1
  226. package/dist/services/sync.js +62 -1
  227. package/dist/services/test.js +30 -1
  228. package/dist/services/validate-implementation.js +69 -1
  229. package/dist/services/validate.js +47 -1
  230. package/dist/services/verification-cache/adapters/filesystem.js +121 -1
  231. package/dist/services/verification-cache/adapters/in-memory.js +45 -1
  232. package/dist/services/verification-cache/adapters/index.js +3 -1
  233. package/dist/services/verification-cache/adapters/workspace-state.js +90 -1
  234. package/dist/services/verification-cache/cache-service.js +255 -1
  235. package/dist/services/verification-cache/index.js +6 -1
  236. package/dist/services/verification-cache/types.js +15 -1
  237. package/dist/services/verify/ai-verifier.js +336 -9
  238. package/dist/services/verify/behavior-verifier.js +185 -1
  239. package/dist/services/verify/index.js +4 -1
  240. package/dist/services/verify/structure-verifier.js +195 -2
  241. package/dist/services/verify/verify-service.js +203 -3
  242. package/dist/services/watch.js +31 -1
  243. package/dist/services/workspace-info.js +102 -2
  244. package/dist/templates/app-config.template.js +101 -28
  245. package/dist/templates/data-view.template.js +42 -27
  246. package/dist/templates/event.template.js +29 -14
  247. package/dist/templates/experiment.template.js +77 -51
  248. package/dist/templates/handler.template.js +53 -17
  249. package/dist/templates/index.js +36 -1
  250. package/dist/templates/integration.template.js +134 -50
  251. package/dist/templates/knowledge.template.js +62 -21
  252. package/dist/templates/migration.template.js +50 -26
  253. package/dist/templates/operation.template.js +44 -28
  254. package/dist/templates/presentation.template.js +46 -20
  255. package/dist/templates/telemetry.template.js +74 -53
  256. package/dist/templates/workflow-runner.template.js +12 -6
  257. package/dist/templates/workflow.template.js +51 -24
  258. package/package.json +13 -9
  259. package/dist/adapters/index.d.ts +0 -7
  260. package/dist/ports/index.d.ts +0 -5
  261. package/dist/services/agent-guide/index.d.ts +0 -6
  262. package/dist/services/ci-check/index.d.ts +0 -2
  263. package/dist/services/doctor/index.d.ts +0 -2
  264. package/dist/services/implementation/index.d.ts +0 -3
  265. package/dist/services/index.d.ts +0 -56
  266. package/dist/services/openapi/index.d.ts +0 -5
  267. package/dist/services/verification-cache/adapters/index.d.ts +0 -3
  268. package/dist/services/verification-cache/index.d.ts +0 -6
  269. package/dist/services/verify/index.d.ts +0 -5
@@ -1,2 +1,208 @@
1
- function e(e,t={}){let a=[],{verbose:o=!1,showTiming:s=!0,groupByFile:c=!1}=t;if(a.push({text:``,style:`normal`}),a.push({text:`📋 ContractSpec CI Check Results`,style:`bold`}),a.push({text:``,style:`normal`}),e.commitSha||e.branch){let t=[e.branch?`branch: ${e.branch}`:null,e.commitSha?`commit: ${e.commitSha.slice(0,7)}`:null].filter(Boolean).join(`, `);a.push({text:`Git: ${t}`,style:`muted`})}a.push({text:``,style:`normal`}),a.push({text:`Check Results:`,style:`bold`});for(let t of e.categories){let e=t.passed?`✓`:`✗`,r=t.passed?`success`:`error`,i=n(t),o=s?` (${t.durationMs}ms)`:``;a.push({text:` ${e} ${t.label}: ${i}${o}`,style:r})}if(e.issues.length>0)if(a.push({text:``,style:`normal`}),a.push({text:`Issues:`,style:`bold`}),c){let t=i(e.issues);for(let[e,n]of t){a.push({text:``,style:`normal`}),a.push({text:` ${e||`(no file)`}`,style:`bold`,indent:1});for(let e of n)a.push(...r(e,o,2))}}else{let t=e.issues.filter(e=>e.severity===`error`),n=e.issues.filter(e=>e.severity===`warning`),i=e.issues.filter(e=>e.severity===`note`);if(t.length>0){a.push({text:``,style:`normal`}),a.push({text:` Errors:`,style:`error`,indent:1});for(let e of t)a.push(...r(e,o,2))}if(n.length>0){a.push({text:``,style:`normal`}),a.push({text:` Warnings:`,style:`warning`,indent:1});for(let e of n)a.push(...r(e,o,2))}if(i.length>0&&o){a.push({text:``,style:`normal`}),a.push({text:` Notes:`,style:`muted`,indent:1});for(let e of i)a.push(...r(e,o,2))}}a.push({text:``,style:`normal`}),a.push({text:`─`.repeat(50),style:`muted`});let l=[e.totalErrors>0?`${e.totalErrors} error(s)`:null,e.totalWarnings>0?`${e.totalWarnings} warning(s)`:null,e.totalNotes>0&&o?`${e.totalNotes} note(s)`:null].filter(Boolean);return l.length>0&&a.push({text:`Found: ${l.join(`, `)}`,style:e.success?`warning`:`error`}),s&&a.push({text:`Duration: ${e.durationMs}ms`,style:`muted`}),a.push({text:``,style:`normal`}),e.success?a.push({text:`✅ All CI checks passed!`,style:`success`}):a.push({text:`❌ CI checks failed`,style:`error`}),a.push({text:``,style:`normal`}),a}function t(t,n={}){return e(t,n).map(e=>` `.repeat(e.indent??0)+e.text).join(`
2
- `)}function n(e){let t=[];return e.errors>0&&t.push(`${e.errors} error(s)`),e.warnings>0&&t.push(`${e.warnings} warning(s)`),t.length===0?`passed`:t.join(`, `)}function r(e,t,n){let r=[],i=e.severity===`error`?`✗`:e.severity===`warning`?`⚠`:`○`,a=e.severity===`error`?`error`:e.severity===`warning`?`warning`:`muted`,o=`${i} ${e.message}`;if(e.file){let t=e.line?`:${e.line}`:``;o+=` (${e.file}${t})`}if(r.push({text:o,style:a,indent:n}),t&&e.context){let t=JSON.stringify(e.context);t!==`{}`&&r.push({text:`Context: ${t}`,style:`muted`,indent:n+1})}return r}function i(e){let t=new Map;for(let n of e){let e=n.file??``;t.has(e)||t.set(e,[]);let r=t.get(e);r&&r.push(n)}return new Map([...t.entries()].sort(([e],[t])=>e.localeCompare(t)))}export{t as formatAsText,e as formatAsTextLines};
1
+ //#region src/formatters/text.ts
2
+ /**
3
+ * Format CI check results as text lines.
4
+ * Returns structured lines that can be styled by the CLI.
5
+ */
6
+ function formatAsTextLines(result, options = {}) {
7
+ const lines = [];
8
+ const { verbose = false, showTiming = true, groupByFile = false } = options;
9
+ lines.push({
10
+ text: "",
11
+ style: "normal"
12
+ });
13
+ lines.push({
14
+ text: "📋 ContractSpec CI Check Results",
15
+ style: "bold"
16
+ });
17
+ lines.push({
18
+ text: "",
19
+ style: "normal"
20
+ });
21
+ if (result.commitSha || result.branch) {
22
+ const gitInfo = [result.branch ? `branch: ${result.branch}` : null, result.commitSha ? `commit: ${result.commitSha.slice(0, 7)}` : null].filter(Boolean).join(", ");
23
+ lines.push({
24
+ text: `Git: ${gitInfo}`,
25
+ style: "muted"
26
+ });
27
+ }
28
+ lines.push({
29
+ text: "",
30
+ style: "normal"
31
+ });
32
+ lines.push({
33
+ text: "Check Results:",
34
+ style: "bold"
35
+ });
36
+ for (const category of result.categories) {
37
+ const icon = category.passed ? "✓" : "✗";
38
+ const style = category.passed ? "success" : "error";
39
+ const stats = formatCategoryStats(category);
40
+ const timing = showTiming ? ` (${category.durationMs}ms)` : "";
41
+ lines.push({
42
+ text: ` ${icon} ${category.label}: ${stats}${timing}`,
43
+ style
44
+ });
45
+ }
46
+ if (result.issues.length > 0) {
47
+ lines.push({
48
+ text: "",
49
+ style: "normal"
50
+ });
51
+ lines.push({
52
+ text: "Issues:",
53
+ style: "bold"
54
+ });
55
+ if (groupByFile) {
56
+ const byFile = groupIssuesByFile(result.issues);
57
+ for (const [file, issues] of byFile) {
58
+ lines.push({
59
+ text: "",
60
+ style: "normal"
61
+ });
62
+ lines.push({
63
+ text: ` ${file || "(no file)"}`,
64
+ style: "bold",
65
+ indent: 1
66
+ });
67
+ for (const issue of issues) lines.push(...formatIssueLines(issue, verbose, 2));
68
+ }
69
+ } else {
70
+ const errors = result.issues.filter((i) => i.severity === "error");
71
+ const warnings = result.issues.filter((i) => i.severity === "warning");
72
+ const notes = result.issues.filter((i) => i.severity === "note");
73
+ if (errors.length > 0) {
74
+ lines.push({
75
+ text: "",
76
+ style: "normal"
77
+ });
78
+ lines.push({
79
+ text: " Errors:",
80
+ style: "error",
81
+ indent: 1
82
+ });
83
+ for (const issue of errors) lines.push(...formatIssueLines(issue, verbose, 2));
84
+ }
85
+ if (warnings.length > 0) {
86
+ lines.push({
87
+ text: "",
88
+ style: "normal"
89
+ });
90
+ lines.push({
91
+ text: " Warnings:",
92
+ style: "warning",
93
+ indent: 1
94
+ });
95
+ for (const issue of warnings) lines.push(...formatIssueLines(issue, verbose, 2));
96
+ }
97
+ if (notes.length > 0 && verbose) {
98
+ lines.push({
99
+ text: "",
100
+ style: "normal"
101
+ });
102
+ lines.push({
103
+ text: " Notes:",
104
+ style: "muted",
105
+ indent: 1
106
+ });
107
+ for (const issue of notes) lines.push(...formatIssueLines(issue, verbose, 2));
108
+ }
109
+ }
110
+ }
111
+ lines.push({
112
+ text: "",
113
+ style: "normal"
114
+ });
115
+ lines.push({
116
+ text: "─".repeat(50),
117
+ style: "muted"
118
+ });
119
+ const summaryParts = [
120
+ result.totalErrors > 0 ? `${result.totalErrors} error(s)` : null,
121
+ result.totalWarnings > 0 ? `${result.totalWarnings} warning(s)` : null,
122
+ result.totalNotes > 0 && verbose ? `${result.totalNotes} note(s)` : null
123
+ ].filter(Boolean);
124
+ if (summaryParts.length > 0) lines.push({
125
+ text: `Found: ${summaryParts.join(", ")}`,
126
+ style: result.success ? "warning" : "error"
127
+ });
128
+ if (showTiming) lines.push({
129
+ text: `Duration: ${result.durationMs}ms`,
130
+ style: "muted"
131
+ });
132
+ lines.push({
133
+ text: "",
134
+ style: "normal"
135
+ });
136
+ if (result.success) lines.push({
137
+ text: "✅ All CI checks passed!",
138
+ style: "success"
139
+ });
140
+ else lines.push({
141
+ text: "❌ CI checks failed",
142
+ style: "error"
143
+ });
144
+ lines.push({
145
+ text: "",
146
+ style: "normal"
147
+ });
148
+ return lines;
149
+ }
150
+ /**
151
+ * Format CI check results as plain text string.
152
+ */
153
+ function formatAsText(result, options = {}) {
154
+ return formatAsTextLines(result, options).map((line) => " ".repeat(line.indent ?? 0) + line.text).join("\n");
155
+ }
156
+ /**
157
+ * Format category stats.
158
+ */
159
+ function formatCategoryStats(category) {
160
+ const parts = [];
161
+ if (category.errors > 0) parts.push(`${category.errors} error(s)`);
162
+ if (category.warnings > 0) parts.push(`${category.warnings} warning(s)`);
163
+ if (parts.length === 0) return "passed";
164
+ return parts.join(", ");
165
+ }
166
+ /**
167
+ * Format a single issue as text lines.
168
+ */
169
+ function formatIssueLines(issue, verbose, baseIndent) {
170
+ const lines = [];
171
+ const icon = issue.severity === "error" ? "✗" : issue.severity === "warning" ? "⚠" : "○";
172
+ const style = issue.severity === "error" ? "error" : issue.severity === "warning" ? "warning" : "muted";
173
+ let mainLine = `${icon} ${issue.message}`;
174
+ if (issue.file) {
175
+ const location = issue.line ? `:${issue.line}` : "";
176
+ mainLine += ` (${issue.file}${location})`;
177
+ }
178
+ lines.push({
179
+ text: mainLine,
180
+ style,
181
+ indent: baseIndent
182
+ });
183
+ if (verbose && issue.context) {
184
+ const contextStr = JSON.stringify(issue.context);
185
+ if (contextStr !== "{}") lines.push({
186
+ text: `Context: ${contextStr}`,
187
+ style: "muted",
188
+ indent: baseIndent + 1
189
+ });
190
+ }
191
+ return lines;
192
+ }
193
+ /**
194
+ * Group issues by file.
195
+ */
196
+ function groupIssuesByFile(issues) {
197
+ const byFile = /* @__PURE__ */ new Map();
198
+ for (const issue of issues) {
199
+ const file = issue.file ?? "";
200
+ if (!byFile.has(file)) byFile.set(file, []);
201
+ const fileIssues = byFile.get(file);
202
+ if (fileIssues) fileIssues.push(issue);
203
+ }
204
+ return new Map([...byFile.entries()].sort(([a], [b]) => a.localeCompare(b)));
205
+ }
206
+
207
+ //#endregion
208
+ export { formatAsText, formatAsTextLines };
package/dist/index.d.ts CHANGED
@@ -3,7 +3,6 @@ import { GitAdapter, GitCleanOptions } from "./ports/git.js";
3
3
  import { WatchEvent, WatchEventHandler, WatchEventType, WatchOptions, Watcher, WatcherAdapter } from "./ports/watcher.js";
4
4
  import { AiAdapter, AiGenerateOptions, AiGenerateResult, AiGenerateStructuredOptions, AiValidationResult } from "./ports/ai.js";
5
5
  import { LogLevel, LoggerAdapter, ProgressReporter, ProgressUpdate, WorkspaceAdapters } from "./ports/logger.js";
6
- import "./ports/index.js";
7
6
  import { createNodeFsAdapter } from "./adapters/fs.js";
8
7
  import { createNodeGitAdapter } from "./adapters/git.js";
9
8
  import { createNodeWatcherAdapter } from "./adapters/watcher.js";
@@ -11,7 +10,6 @@ import { createNodeAiAdapter } from "./adapters/ai.js";
11
10
  import { createConsoleLoggerAdapter, createNoopLoggerAdapter } from "./adapters/logger.js";
12
11
  import { CreateAdaptersOptions, createNodeAdapters } from "./adapters/factory.js";
13
12
  import { PackageManager, WorkspaceInfo, detectPackageManager, findPackageRoot, findWorkspaceRoot, getExecCommand, getInstallCommand, getPackageName, getRunCommand, getWorkspaceInfo, getWorkspacePackages, isMonorepo } from "./adapters/workspace.js";
14
- import "./adapters/index.js";
15
13
  import { AgentMode, AiProvider, Config } from "./types/config.js";
16
14
  import { ValidateSpecOptions, ValidateSpecResult, validateSpec, validateSpecs } from "./services/validate.js";
17
15
  import { ValidateImplementationOptions, ValidateImplementationResult, validateImplementationFiles } from "./services/validate-implementation.js";
@@ -61,7 +59,6 @@ import { VerificationCacheService, cacheKeyToString, computeContentHash, createV
61
59
  import { InMemoryCacheStorage, createInMemoryCacheStorage } from "./services/verification-cache/adapters/in-memory.js";
62
60
  import { FileSystemCacheStorage, createFileSystemCacheStorage } from "./services/verification-cache/adapters/filesystem.js";
63
61
  import { KeyValueStore, WorkspaceStateCacheStorage, createWorkspaceStateCacheStorage } from "./services/verification-cache/adapters/workspace-state.js";
64
- import "./services/index.js";
65
62
  import { index_d_exports as index_d_exports$1 } from "./formatters/index.js";
66
63
  import { index_d_exports as index_d_exports$2 } from "./templates/index.js";
67
64
  import { index_d_exports } from "./ai/index.js";
package/dist/index.js CHANGED
@@ -1 +1,81 @@
1
- import{createNodeFsAdapter as e}from"./adapters/fs.js";import{createNodeGitAdapter as t}from"./adapters/git.js";import{createNodeWatcherAdapter as n}from"./adapters/watcher.js";import{createNodeAiAdapter as r}from"./adapters/ai.js";import{createConsoleLoggerAdapter as i,createNoopLoggerAdapter as a}from"./adapters/logger.js";import{createNodeAdapters as o}from"./adapters/factory.js";import{detectPackageManager as s,findPackageRoot as c,findWorkspaceRoot as l,getExecCommand as u,getInstallCommand as d,getPackageName as f,getRunCommand as p,getWorkspaceInfo as m,getWorkspacePackages as h,isMonorepo as g}from"./adapters/workspace.js";import"./adapters/index.js";import{validateSpec as _,validateSpecs as v}from"./services/validate.js";import{validateImplementationFiles as y}from"./services/validate-implementation.js";import{compareSpecs as b}from"./services/diff.js";import{analyzeDeps as x,exportGraphAsDot as S,getContractNode as C,getGraphStats as w}from"./services/deps.js";import{groupSpecsByType as T,listSpecs as E}from"./services/list.js";import{getApiKey as D,loadWorkspaceConfig as O,mergeWorkspaceConfig as k}from"./services/config.js";import{buildSpec as A}from"./services/build.js";import{importFromOpenApiService as j}from"./services/openapi/import-service.js";import{syncWithOpenApiService as M}from"./services/openapi/sync-service.js";import{validateAgainstOpenApiService as N}from"./services/openapi/validate-service.js";import{exportOpenApi as P}from"./services/openapi/export-service.js";import{RegistryClient as F,addToRegistry as I,listFromRegistry as L,resolveRegistryUrl as R,searchRegistry as z}from"./services/registry.js";import{syncSpecs as B}from"./services/sync.js";import{watchSpecs as V}from"./services/watch.js";import{cleanArtifacts as H}from"./services/clean.js";import{runTests as U}from"./services/test.js";import{createRegeneratorService as W}from"./services/regenerator.js";import{findAllConfigFiles as G,formatWorkspaceInfo as K,getExtendedWorkspaceInfo as q,mergeMonorepoConfigs as J}from"./services/workspace-info.js";import{analyzeIntegrity as Y,filterIssuesBySeverity as X,filterIssuesByType as Z,getAllSpecs as Q}from"./services/integrity.js";import{generateMermaidDiagram as $}from"./services/integrity-diagram.js";import{ALL_SETUP_TARGETS as ee,SETUP_TARGET_LABELS as te}from"./services/setup/types.js";import{generateAgentsMd as ne,generateClaudeMcpConfig as re,generateContractsrcConfig as ie,generateCursorMcpConfig as ae,generateCursorRules as oe,generateVscodeSettings as se,getClaudeDesktopConfigPath as ce}from"./services/setup/config-generators.js";import{deepMergeOverwrite as le,deepMergePreserve as ue,formatJson as de,safeParseJson as fe}from"./services/setup/file-merger.js";import{runSetup as pe}from"./services/setup/setup-service.js";import{ALL_CHECK_CATEGORIES as me,CHECK_CATEGORY_LABELS as he}from"./services/doctor/types.js";import{formatCheckResult as ge,formatDoctorSummary as _e,runDoctor as ve}from"./services/doctor/doctor-service.js";import{ALL_CI_CHECK_CATEGORIES as ye,CI_CHECK_CATEGORY_LABELS as be}from"./services/ci-check/types.js";import{discoverAllImplementations as xe,discoverImplementationsForSpec as Se,extractSpecReferences as Ce,inferImplementationType as we}from"./services/implementation/discovery.js";import{getImplementationSummary as Te,resolveAllImplementations as Ee,resolveImplementations as De}from"./services/implementation/resolver.js";import{DEFAULT_CACHE_CONFIG as Oe}from"./services/verification-cache/types.js";import{VerificationCacheService as ke,cacheKeyToString as Ae,computeContentHash as je,createVerificationCacheService as Me,stringToCacheKey as Ne}from"./services/verification-cache/cache-service.js";import{InMemoryCacheStorage as Pe,createInMemoryCacheStorage as Fe}from"./services/verification-cache/adapters/in-memory.js";import{FileSystemCacheStorage as Ie,createFileSystemCacheStorage as Le}from"./services/verification-cache/adapters/filesystem.js";import{WorkspaceStateCacheStorage as Re,createWorkspaceStateCacheStorage as ze}from"./services/verification-cache/adapters/workspace-state.js";import{runCIChecks as Be}from"./services/ci-check/ci-check-service.js";import{ClaudeCodeAdapter as Ve,claudeCodeAdapter as He}from"./services/agent-guide/adapters/claude-code.js";import{CursorCLIAdapter as Ue,cursorCLIAdapter as We}from"./services/agent-guide/adapters/cursor-cli.js";import{GenericMCPAdapter as Ge,genericMCPAdapter as Ke}from"./services/agent-guide/adapters/generic-mcp.js";import{agentAdapters as qe,getAgentAdapter as Je,listAgentTypes as Ye}from"./services/agent-guide/adapters/index.js";import{AgentGuideService as Xe,agentGuideService as Ze,createAgentGuideService as Qe}from"./services/agent-guide/agent-guide-service.js";import{verifyStructure as $e}from"./services/verify/structure-verifier.js";import{verifyBehavior as et}from"./services/verify/behavior-verifier.js";import{createQuickAIReview as tt,verifySemanticFields as nt,verifyWithAI as rt,verifyWithAIEnhanced as it}from"./services/verify/ai-verifier.js";import{VerifyService as at,createVerifyService as ot,verifyService as st}from"./services/verify/verify-service.js";import"./services/index.js";import{formatters_exports as ct}from"./formatters/index.js";import{templates_exports as lt}from"./templates/index.js";import{ai_exports as ut}from"./ai/index.js";export*from"@lssm/module.contractspec-workspace";export{me as ALL_CHECK_CATEGORIES,ye as ALL_CI_CHECK_CATEGORIES,ee as ALL_SETUP_TARGETS,Xe as AgentGuideService,he as CHECK_CATEGORY_LABELS,be as CI_CHECK_CATEGORY_LABELS,Ve as ClaudeCodeAdapter,Ue as CursorCLIAdapter,Oe as DEFAULT_CACHE_CONFIG,Ie as FileSystemCacheStorage,Ge as GenericMCPAdapter,Pe as InMemoryCacheStorage,F as RegistryClient,te as SETUP_TARGET_LABELS,ke as VerificationCacheService,at as VerifyService,Re as WorkspaceStateCacheStorage,I as addToRegistry,qe as agentAdapters,Ze as agentGuideService,ut as ai,x as analyzeDeps,Y as analyzeIntegrity,A as buildSpec,Ae as cacheKeyToString,He as claudeCodeAdapter,H as cleanArtifacts,b as compareSpecs,je as computeContentHash,Qe as createAgentGuideService,i as createConsoleLoggerAdapter,Le as createFileSystemCacheStorage,Fe as createInMemoryCacheStorage,o as createNodeAdapters,r as createNodeAiAdapter,e as createNodeFsAdapter,t as createNodeGitAdapter,n as createNodeWatcherAdapter,a as createNoopLoggerAdapter,tt as createQuickAIReview,W as createRegeneratorService,Me as createVerificationCacheService,ot as createVerifyService,ze as createWorkspaceStateCacheStorage,We as cursorCLIAdapter,le as deepMergeOverwrite,ue as deepMergePreserve,s as detectPackageManager,xe as discoverAllImplementations,Se as discoverImplementationsForSpec,S as exportGraphAsDot,P as exportOpenApi,Ce as extractSpecReferences,X as filterIssuesBySeverity,Z as filterIssuesByType,G as findAllConfigFiles,c as findPackageRoot,l as findWorkspaceRoot,ge as formatCheckResult,_e as formatDoctorSummary,de as formatJson,K as formatWorkspaceInfo,ct as formatters,ne as generateAgentsMd,re as generateClaudeMcpConfig,ie as generateContractsrcConfig,ae as generateCursorMcpConfig,oe as generateCursorRules,$ as generateMermaidDiagram,se as generateVscodeSettings,Ke as genericMCPAdapter,Je as getAgentAdapter,Q as getAllSpecs,D as getApiKey,ce as getClaudeDesktopConfigPath,C as getContractNode,u as getExecCommand,q as getExtendedWorkspaceInfo,w as getGraphStats,Te as getImplementationSummary,d as getInstallCommand,f as getPackageName,p as getRunCommand,m as getWorkspaceInfo,h as getWorkspacePackages,T as groupSpecsByType,j as importFromOpenApiService,we as inferImplementationType,g as isMonorepo,Ye as listAgentTypes,L as listFromRegistry,E as listSpecs,O as loadWorkspaceConfig,J as mergeMonorepoConfigs,k as mergeWorkspaceConfig,Ee as resolveAllImplementations,De as resolveImplementations,R as resolveRegistryUrl,Be as runCIChecks,ve as runDoctor,pe as runSetup,U as runTests,fe as safeParseJson,z as searchRegistry,Ne as stringToCacheKey,B as syncSpecs,M as syncWithOpenApiService,lt as templates,N as validateAgainstOpenApiService,y as validateImplementationFiles,_ as validateSpec,v as validateSpecs,et as verifyBehavior,nt as verifySemanticFields,st as verifyService,$e as verifyStructure,rt as verifyWithAI,it as verifyWithAIEnhanced,V as watchSpecs};
1
+ import { DEFAULT_WORKSPACE_CONFIG } from "./modules/contractspec-workspace/dist/types/generation-types.js";
2
+ import { extractEmittedEvents, extractPolicyRefs, extractTestRefs, inferSpecTypeFromFilePath, scanAllSpecsFromSource, scanSpecSource } from "./modules/contractspec-workspace/dist/analysis/spec-scan.js";
3
+ import { isFeatureFile, scanFeatureSource } from "./modules/contractspec-workspace/dist/analysis/feature-scan.js";
4
+ import { computeSemanticDiff } from "./modules/contractspec-workspace/dist/analysis/diff/semantic.js";
5
+ import { addContractNode, buildReverseEdges, createContractGraph, detectCycles, findMissingDependencies, toDot } from "./modules/contractspec-workspace/dist/analysis/deps/graph.js";
6
+ import { parseImportedSpecNames } from "./modules/contractspec-workspace/dist/analysis/deps/parse-imports.js";
7
+ import { validateSpecStructure } from "./modules/contractspec-workspace/dist/analysis/validate/spec-structure.js";
8
+ import { capitalize, escapeString, toCamelCase, toKebabCase, toPascalCase } from "./modules/contractspec-workspace/dist/templates/utils.js";
9
+ import { generateOperationSpec } from "./modules/contractspec-workspace/dist/templates/operation.js";
10
+ import { generateEventSpec } from "./modules/contractspec-workspace/dist/templates/event.js";
11
+ import { generatePresentationSpec } from "./modules/contractspec-workspace/dist/templates/presentation.js";
12
+ import { generateWorkflowSpec } from "./modules/contractspec-workspace/dist/templates/workflow.js";
13
+ import { generateWorkflowRunnerTemplate } from "./modules/contractspec-workspace/dist/templates/workflow-runner.js";
14
+ import { generateDataViewSpec } from "./modules/contractspec-workspace/dist/templates/data-view.js";
15
+ import { generateTelemetrySpec } from "./modules/contractspec-workspace/dist/templates/telemetry.js";
16
+ import { generateExperimentSpec } from "./modules/contractspec-workspace/dist/templates/experiment.js";
17
+ import { generateAppBlueprintSpec } from "./modules/contractspec-workspace/dist/templates/app-config.js";
18
+ import { generateMigrationSpec } from "./modules/contractspec-workspace/dist/templates/migration.js";
19
+ import { generateIntegrationSpec } from "./modules/contractspec-workspace/dist/templates/integration.js";
20
+ import { generateKnowledgeSpaceSpec } from "./modules/contractspec-workspace/dist/templates/knowledge.js";
21
+ import { generateComponentTemplate, generateHandlerTemplate, generateTestTemplate } from "./modules/contractspec-workspace/dist/templates/handler.js";
22
+ import { addExampleContext, buildEventSpecPrompt, buildOperationSpecPrompt, buildPresentationSpecPrompt, getSystemPrompt } from "./modules/contractspec-workspace/dist/ai/spec-creation.js";
23
+ import { buildComponentPrompt, buildFormPrompt, buildHandlerPrompt, buildTestPrompt, getCodeGenSystemPrompt } from "./modules/contractspec-workspace/dist/ai/code-generation.js";
24
+ import { createNodeFsAdapter } from "./adapters/fs.js";
25
+ import { createNodeGitAdapter } from "./adapters/git.js";
26
+ import { createNodeWatcherAdapter } from "./adapters/watcher.js";
27
+ import { createNodeAiAdapter } from "./adapters/ai.js";
28
+ import { createConsoleLoggerAdapter, createNoopLoggerAdapter } from "./adapters/logger.js";
29
+ import { createNodeAdapters } from "./adapters/factory.js";
30
+ import { detectPackageManager, findPackageRoot, findWorkspaceRoot, getExecCommand, getInstallCommand, getPackageName, getRunCommand, getWorkspaceInfo, getWorkspacePackages, isMonorepo } from "./adapters/workspace.js";
31
+ import "./adapters/index.js";
32
+ import { validateSpec, validateSpecs } from "./services/validate.js";
33
+ import { validateImplementationFiles } from "./services/validate-implementation.js";
34
+ import { compareSpecs } from "./services/diff.js";
35
+ import { analyzeDeps, exportGraphAsDot, getContractNode, getGraphStats } from "./services/deps.js";
36
+ import { groupSpecsByType, listSpecs } from "./services/list.js";
37
+ import { getApiKey, loadWorkspaceConfig, mergeWorkspaceConfig } from "./services/config.js";
38
+ import { buildSpec } from "./services/build.js";
39
+ import { importFromOpenApiService } from "./services/openapi/import-service.js";
40
+ import { syncWithOpenApiService } from "./services/openapi/sync-service.js";
41
+ import { validateAgainstOpenApiService } from "./services/openapi/validate-service.js";
42
+ import { exportOpenApi } from "./services/openapi/export-service.js";
43
+ import { RegistryClient, addToRegistry, listFromRegistry, resolveRegistryUrl, searchRegistry } from "./services/registry.js";
44
+ import { syncSpecs } from "./services/sync.js";
45
+ import { watchSpecs } from "./services/watch.js";
46
+ import { cleanArtifacts } from "./services/clean.js";
47
+ import { runTests } from "./services/test.js";
48
+ import { createRegeneratorService } from "./services/regenerator.js";
49
+ import { findAllConfigFiles, formatWorkspaceInfo, getExtendedWorkspaceInfo, mergeMonorepoConfigs } from "./services/workspace-info.js";
50
+ import { analyzeIntegrity, filterIssuesBySeverity, filterIssuesByType, getAllSpecs } from "./services/integrity.js";
51
+ import { generateMermaidDiagram } from "./services/integrity-diagram.js";
52
+ import { ALL_SETUP_TARGETS, SETUP_TARGET_LABELS } from "./services/setup/types.js";
53
+ import { generateAgentsMd, generateClaudeMcpConfig, generateContractsrcConfig, generateCursorMcpConfig, generateCursorRules, generateVscodeSettings, getClaudeDesktopConfigPath } from "./services/setup/config-generators.js";
54
+ import { deepMergeOverwrite, deepMergePreserve, formatJson, safeParseJson } from "./services/setup/file-merger.js";
55
+ import { runSetup } from "./services/setup/setup-service.js";
56
+ import { ALL_CHECK_CATEGORIES, CHECK_CATEGORY_LABELS } from "./services/doctor/types.js";
57
+ import { formatCheckResult, formatDoctorSummary, runDoctor } from "./services/doctor/doctor-service.js";
58
+ import { ALL_CI_CHECK_CATEGORIES, CI_CHECK_CATEGORY_LABELS } from "./services/ci-check/types.js";
59
+ import { discoverAllImplementations, discoverImplementationsForSpec, extractSpecReferences, inferImplementationType } from "./services/implementation/discovery.js";
60
+ import { getImplementationSummary, resolveAllImplementations, resolveImplementations } from "./services/implementation/resolver.js";
61
+ import { DEFAULT_CACHE_CONFIG } from "./services/verification-cache/types.js";
62
+ import { VerificationCacheService, cacheKeyToString, computeContentHash, createVerificationCacheService, stringToCacheKey } from "./services/verification-cache/cache-service.js";
63
+ import { InMemoryCacheStorage, createInMemoryCacheStorage } from "./services/verification-cache/adapters/in-memory.js";
64
+ import { FileSystemCacheStorage, createFileSystemCacheStorage } from "./services/verification-cache/adapters/filesystem.js";
65
+ import { WorkspaceStateCacheStorage, createWorkspaceStateCacheStorage } from "./services/verification-cache/adapters/workspace-state.js";
66
+ import { runCIChecks } from "./services/ci-check/ci-check-service.js";
67
+ import { ClaudeCodeAdapter, claudeCodeAdapter } from "./services/agent-guide/adapters/claude-code.js";
68
+ import { CursorCLIAdapter, cursorCLIAdapter } from "./services/agent-guide/adapters/cursor-cli.js";
69
+ import { GenericMCPAdapter, genericMCPAdapter } from "./services/agent-guide/adapters/generic-mcp.js";
70
+ import { agentAdapters, getAgentAdapter, listAgentTypes } from "./services/agent-guide/adapters/index.js";
71
+ import { AgentGuideService, agentGuideService, createAgentGuideService } from "./services/agent-guide/agent-guide-service.js";
72
+ import { verifyStructure } from "./services/verify/structure-verifier.js";
73
+ import { verifyBehavior } from "./services/verify/behavior-verifier.js";
74
+ import { createQuickAIReview, verifySemanticFields, verifyWithAI, verifyWithAIEnhanced } from "./services/verify/ai-verifier.js";
75
+ import { VerifyService, createVerifyService, verifyService } from "./services/verify/verify-service.js";
76
+ import "./services/index.js";
77
+ import { formatters_exports } from "./formatters/index.js";
78
+ import { templates_exports } from "./templates/index.js";
79
+ import { ai_exports } from "./ai/index.js";
80
+
81
+ export { ALL_CHECK_CATEGORIES, ALL_CI_CHECK_CATEGORIES, ALL_SETUP_TARGETS, AgentGuideService, CHECK_CATEGORY_LABELS, CI_CHECK_CATEGORY_LABELS, ClaudeCodeAdapter, CursorCLIAdapter, DEFAULT_CACHE_CONFIG, DEFAULT_WORKSPACE_CONFIG, FileSystemCacheStorage, GenericMCPAdapter, InMemoryCacheStorage, RegistryClient, SETUP_TARGET_LABELS, VerificationCacheService, VerifyService, WorkspaceStateCacheStorage, addContractNode, addExampleContext, addToRegistry, agentAdapters, agentGuideService, ai_exports as ai, analyzeDeps, analyzeIntegrity, buildComponentPrompt, buildEventSpecPrompt, buildFormPrompt, buildHandlerPrompt, buildOperationSpecPrompt, buildPresentationSpecPrompt, buildReverseEdges, buildSpec, buildTestPrompt, cacheKeyToString, capitalize, claudeCodeAdapter, cleanArtifacts, compareSpecs, computeContentHash, computeSemanticDiff, createAgentGuideService, createConsoleLoggerAdapter, createContractGraph, createFileSystemCacheStorage, createInMemoryCacheStorage, createNodeAdapters, createNodeAiAdapter, createNodeFsAdapter, createNodeGitAdapter, createNodeWatcherAdapter, createNoopLoggerAdapter, createQuickAIReview, createRegeneratorService, createVerificationCacheService, createVerifyService, createWorkspaceStateCacheStorage, cursorCLIAdapter, deepMergeOverwrite, deepMergePreserve, detectCycles, detectPackageManager, discoverAllImplementations, discoverImplementationsForSpec, escapeString, exportGraphAsDot, exportOpenApi, extractEmittedEvents, extractPolicyRefs, extractSpecReferences, extractTestRefs, filterIssuesBySeverity, filterIssuesByType, findAllConfigFiles, findMissingDependencies, findPackageRoot, findWorkspaceRoot, formatCheckResult, formatDoctorSummary, formatJson, formatWorkspaceInfo, formatters_exports as formatters, generateAgentsMd, generateAppBlueprintSpec, generateClaudeMcpConfig, generateComponentTemplate, generateContractsrcConfig, generateCursorMcpConfig, generateCursorRules, generateDataViewSpec, generateEventSpec, generateExperimentSpec, generateHandlerTemplate, generateIntegrationSpec, generateKnowledgeSpaceSpec, generateMermaidDiagram, generateMigrationSpec, generateOperationSpec, generatePresentationSpec, generateTelemetrySpec, generateTestTemplate, generateVscodeSettings, generateWorkflowRunnerTemplate, generateWorkflowSpec, genericMCPAdapter, getAgentAdapter, getAllSpecs, getApiKey, getClaudeDesktopConfigPath, getCodeGenSystemPrompt, getContractNode, getExecCommand, getExtendedWorkspaceInfo, getGraphStats, getImplementationSummary, getInstallCommand, getPackageName, getRunCommand, getSystemPrompt, getWorkspaceInfo, getWorkspacePackages, groupSpecsByType, importFromOpenApiService, inferImplementationType, inferSpecTypeFromFilePath, isFeatureFile, isMonorepo, listAgentTypes, listFromRegistry, listSpecs, loadWorkspaceConfig, mergeMonorepoConfigs, mergeWorkspaceConfig, parseImportedSpecNames, resolveAllImplementations, resolveImplementations, resolveRegistryUrl, runCIChecks, runDoctor, runSetup, runTests, safeParseJson, scanAllSpecsFromSource, scanFeatureSource, scanSpecSource, searchRegistry, stringToCacheKey, syncSpecs, syncWithOpenApiService, templates_exports as templates, toCamelCase, toDot, toKebabCase, toPascalCase, validateAgainstOpenApiService, validateImplementationFiles, validateSpec, validateSpecStructure, validateSpecs, verifyBehavior, verifySemanticFields, verifyService, verifyStructure, verifyWithAI, verifyWithAIEnhanced, watchSpecs };
@@ -0,0 +1,154 @@
1
+ import { DEFAULT_MODELS, getModelsForProvider } from "./models.js";
2
+ import { anthropic } from "@ai-sdk/anthropic";
3
+ import { openai } from "@ai-sdk/openai";
4
+ import { ollama } from "ollama-ai-provider";
5
+ import { google } from "@ai-sdk/google";
6
+ import { mistral } from "@ai-sdk/mistral";
7
+
8
+ //#region ../../libs/ai-providers/dist/factory.js
9
+ /**
10
+ * Base provider implementation
11
+ */
12
+ var BaseProvider = class {
13
+ name;
14
+ model;
15
+ mode;
16
+ config;
17
+ cachedModel = null;
18
+ constructor(config) {
19
+ this.name = config.provider;
20
+ this.model = config.model ?? DEFAULT_MODELS[config.provider];
21
+ this.mode = this.determineMode(config);
22
+ this.config = config;
23
+ }
24
+ determineMode(config) {
25
+ if (config.provider === "ollama") return "local";
26
+ if (config.apiKey) return "byok";
27
+ return "managed";
28
+ }
29
+ getModel() {
30
+ if (!this.cachedModel) this.cachedModel = this.createModel();
31
+ return this.cachedModel;
32
+ }
33
+ createModel() {
34
+ const { apiKey, baseUrl, proxyUrl, organizationId } = this.config;
35
+ switch (this.name) {
36
+ case "ollama": {
37
+ const originalBaseUrl = process.env.OLLAMA_BASE_URL;
38
+ if (baseUrl && baseUrl !== "http://localhost:11434") process.env.OLLAMA_BASE_URL = baseUrl;
39
+ const ollamaModel = ollama(this.model);
40
+ if (originalBaseUrl !== void 0) process.env.OLLAMA_BASE_URL = originalBaseUrl;
41
+ else if (baseUrl && baseUrl !== "http://localhost:11434") delete process.env.OLLAMA_BASE_URL;
42
+ return ollamaModel;
43
+ }
44
+ case "openai":
45
+ if (this.mode === "managed") {
46
+ const originalBaseUrl = process.env.OPENAI_BASE_URL;
47
+ if (proxyUrl) process.env.OPENAI_BASE_URL = proxyUrl;
48
+ const model = openai(this.model);
49
+ if (originalBaseUrl !== void 0) process.env.OPENAI_BASE_URL = originalBaseUrl;
50
+ else if (proxyUrl) delete process.env.OPENAI_BASE_URL;
51
+ return model;
52
+ }
53
+ return openai(this.model);
54
+ case "anthropic":
55
+ if (this.mode === "managed") {
56
+ const originalBaseUrl = process.env.OPENAI_BASE_URL;
57
+ if (proxyUrl) process.env.OPENAI_BASE_URL = proxyUrl;
58
+ const model = openai(this.model);
59
+ if (originalBaseUrl !== void 0) process.env.OPENAI_BASE_URL = originalBaseUrl;
60
+ else if (proxyUrl) delete process.env.OPENAI_BASE_URL;
61
+ return model;
62
+ }
63
+ return anthropic(this.model);
64
+ case "mistral":
65
+ if (this.mode === "managed") {
66
+ const originalBaseUrl = process.env.OPENAI_BASE_URL;
67
+ if (proxyUrl) process.env.OPENAI_BASE_URL = proxyUrl;
68
+ const model = openai(this.model);
69
+ if (originalBaseUrl !== void 0) process.env.OPENAI_BASE_URL = originalBaseUrl;
70
+ else if (proxyUrl) delete process.env.OPENAI_BASE_URL;
71
+ return model;
72
+ }
73
+ return mistral(this.model);
74
+ case "gemini":
75
+ if (this.mode === "managed") {
76
+ const originalBaseUrl = process.env.OPENAI_BASE_URL;
77
+ if (proxyUrl) process.env.OPENAI_BASE_URL = proxyUrl;
78
+ const model = openai(this.model);
79
+ if (originalBaseUrl !== void 0) process.env.OPENAI_BASE_URL = originalBaseUrl;
80
+ else if (proxyUrl) delete process.env.OPENAI_BASE_URL;
81
+ return model;
82
+ }
83
+ return google(this.model);
84
+ default: throw new Error(`Unknown provider: ${this.name}`);
85
+ }
86
+ }
87
+ async listModels() {
88
+ if (this.name === "ollama") return this.listOllamaModels();
89
+ return getModelsForProvider(this.name);
90
+ }
91
+ async listOllamaModels() {
92
+ try {
93
+ const baseUrl = this.config.baseUrl ?? "http://localhost:11434";
94
+ const response = await fetch(`${baseUrl}/api/tags`);
95
+ if (!response.ok) return getModelsForProvider("ollama");
96
+ return ((await response.json()).models ?? []).map((m) => ({
97
+ id: m.name,
98
+ name: m.name,
99
+ provider: "ollama",
100
+ contextWindow: 8e3,
101
+ capabilities: {
102
+ vision: false,
103
+ tools: false,
104
+ reasoning: false,
105
+ streaming: true
106
+ }
107
+ }));
108
+ } catch {
109
+ return getModelsForProvider("ollama");
110
+ }
111
+ }
112
+ async validate() {
113
+ if (this.name === "ollama") return this.validateOllama();
114
+ if (this.mode === "byok" && !this.config.apiKey) return {
115
+ valid: false,
116
+ error: `API key required for ${this.name}`
117
+ };
118
+ if (this.mode === "managed" && !this.config.proxyUrl && !this.config.organizationId) return {
119
+ valid: false,
120
+ error: "Managed mode requires proxyUrl or organizationId"
121
+ };
122
+ return { valid: true };
123
+ }
124
+ async validateOllama() {
125
+ try {
126
+ const baseUrl = this.config.baseUrl ?? "http://localhost:11434";
127
+ const response = await fetch(`${baseUrl}/api/tags`);
128
+ if (!response.ok) return {
129
+ valid: false,
130
+ error: `Ollama server returned ${response.status}`
131
+ };
132
+ const models = (await response.json()).models ?? [];
133
+ if (!models.some((m) => m.name === this.model)) return {
134
+ valid: false,
135
+ error: `Model "${this.model}" not found. Available: ${models.map((m) => m.name).join(", ")}`
136
+ };
137
+ return { valid: true };
138
+ } catch (error) {
139
+ return {
140
+ valid: false,
141
+ error: `Cannot connect to Ollama at ${this.config.baseUrl ?? "http://localhost:11434"}: ${error instanceof Error ? error.message : String(error)}`
142
+ };
143
+ }
144
+ }
145
+ };
146
+ /**
147
+ * Create a provider from configuration
148
+ */
149
+ function createProvider(config) {
150
+ return new BaseProvider(config);
151
+ }
152
+
153
+ //#endregion
154
+ export { createProvider };
@@ -0,0 +1,4 @@
1
+ import { DEFAULT_MODELS, MODELS, getModelsForProvider, getRecommendedModels } from "./models.js";
2
+ import { createProvider } from "./factory.js";
3
+ import "./validation.js";
4
+ import { getAIProvider, validateProvider } from "./legacy.js";
@@ -0,0 +1,72 @@
1
+ import { getRecommendedModels } from "./models.js";
2
+ import { createProvider } from "./factory.js";
3
+
4
+ //#region ../../libs/ai-providers/dist/legacy.js
5
+ /**
6
+ * Map legacy provider names to new ones
7
+ */
8
+ function mapLegacyProvider(legacy) {
9
+ switch (legacy) {
10
+ case "claude": return "anthropic";
11
+ case "custom": return "openai";
12
+ default: return legacy;
13
+ }
14
+ }
15
+ /**
16
+ * Get AI provider from legacy Config type
17
+ *
18
+ * @deprecated Use createProvider() instead
19
+ */
20
+ function getAIProvider(config) {
21
+ const provider = mapLegacyProvider(config.aiProvider);
22
+ let apiKey;
23
+ switch (provider) {
24
+ case "openai":
25
+ apiKey = process.env.OPENAI_API_KEY;
26
+ break;
27
+ case "anthropic":
28
+ apiKey = process.env.ANTHROPIC_API_KEY;
29
+ break;
30
+ case "mistral":
31
+ apiKey = process.env.MISTRAL_API_KEY;
32
+ break;
33
+ case "gemini":
34
+ apiKey = process.env.GOOGLE_API_KEY ?? process.env.GEMINI_API_KEY;
35
+ break;
36
+ }
37
+ return createProvider({
38
+ provider,
39
+ model: config.aiModel,
40
+ apiKey,
41
+ baseUrl: config.customEndpoint
42
+ }).getModel();
43
+ }
44
+ /**
45
+ * Validate provider from legacy Config type
46
+ *
47
+ * @deprecated Use validateProvider() from './validation' instead
48
+ */
49
+ async function validateProvider(config) {
50
+ const provider = mapLegacyProvider(config.aiProvider);
51
+ if (provider === "ollama") return { success: true };
52
+ if (provider === "anthropic" && !process.env.ANTHROPIC_API_KEY) return {
53
+ success: false,
54
+ error: "ANTHROPIC_API_KEY environment variable not set"
55
+ };
56
+ if (provider === "openai" && !process.env.OPENAI_API_KEY) return {
57
+ success: false,
58
+ error: "OPENAI_API_KEY environment variable not set"
59
+ };
60
+ if (provider === "mistral" && !process.env.MISTRAL_API_KEY) return {
61
+ success: false,
62
+ error: "MISTRAL_API_KEY environment variable not set"
63
+ };
64
+ if (provider === "gemini" && !process.env.GOOGLE_API_KEY && !process.env.GEMINI_API_KEY) return {
65
+ success: false,
66
+ error: "GOOGLE_API_KEY or GEMINI_API_KEY environment variable not set"
67
+ };
68
+ return { success: true };
69
+ }
70
+
71
+ //#endregion
72
+ export { getAIProvider, validateProvider };