@aifabrix/builder 2.49.2 → 2.50.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 (409) hide show
  1. package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
  2. package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
  3. package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
  4. package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
  5. package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
  6. package/.cursor/skills/README.md +1 -0
  7. package/.dockerignore +52 -0
  8. package/.eslintignore +22 -0
  9. package/README.md +2 -0
  10. package/bin/builder-api-cleanup.js +26 -0
  11. package/bin/builder-api-nest.js +10 -0
  12. package/bin/builder-api-spike.js +19 -0
  13. package/enterprise-knowledge/README.md +50 -0
  14. package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
  15. package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
  16. package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
  17. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
  18. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
  19. package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
  20. package/integration/README.md +81 -0
  21. package/integration/github/README.md +53 -0
  22. package/integration/github/application.json +21 -0
  23. package/integration/github/deploy.js +72 -0
  24. package/integration/github/env.template +11 -0
  25. package/integration/github/github-datasource-issue-comments.json +239 -0
  26. package/integration/github/github-datasource-issues.json +399 -0
  27. package/integration/github/github-datasource-repository.json +354 -0
  28. package/integration/github/github-deploy.json +1202 -0
  29. package/integration/github/github-system.json +82 -0
  30. package/integration/hubspot-test/README.md +1 -1
  31. package/jest.isolated-projects.js +31 -1
  32. package/jest.projects.js +87 -1
  33. package/lib/api/dev-server-https.js +1 -1
  34. package/lib/api/enterprise-knowledge.api.js +63 -0
  35. package/lib/api/evidence.api.js +172 -0
  36. package/lib/api/external-systems.api.js +8 -2
  37. package/lib/api/resource-types.api.js +1 -0
  38. package/lib/api/types/enterprise-knowledge.types.js +46 -0
  39. package/lib/api/types/evidence.types.js +67 -0
  40. package/lib/api/types/resource-types.types.js +2 -0
  41. package/lib/app/controller-application-filter.js +36 -0
  42. package/lib/app/deploy.js +1 -1
  43. package/lib/app/list-external-systems.js +130 -0
  44. package/lib/app/list.js +20 -8
  45. package/lib/app/run.js +3 -1
  46. package/lib/app/show-display.js +8 -3
  47. package/lib/app/show-online.js +178 -0
  48. package/lib/app/show.js +37 -88
  49. package/lib/build/builder-api-docker-staging.js +47 -0
  50. package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
  51. package/lib/build/standard-docker-build.js +2 -0
  52. package/lib/certification/post-unified-cert-sync.js +4 -31
  53. package/lib/certification/sync-after-external-command.js +0 -1
  54. package/lib/certification/sync-system-certification.js +0 -3
  55. package/lib/channels/add-channel.js +40 -34
  56. package/lib/channels/approval-guides/chatgpt.js +33 -0
  57. package/lib/channels/approval-guides/credential-portal.js +38 -0
  58. package/lib/channels/approval-guides/index.js +110 -0
  59. package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
  60. package/lib/channels/approval-guides/slack.js +34 -0
  61. package/lib/channels/approval-guides/teams-bot.js +35 -0
  62. package/lib/channels/approval-guides/web-embed.js +32 -0
  63. package/lib/channels/channel-approval-guide.js +11 -0
  64. package/lib/channels/channel-artifact-generator.js +16 -4
  65. package/lib/channels/channel-audit.js +3 -0
  66. package/lib/channels/channel-auth-context.js +1 -1
  67. package/lib/channels/channel-description.js +59 -0
  68. package/lib/channels/channel-integration-generator.js +13 -230
  69. package/lib/channels/channel-integration-template.js +94 -0
  70. package/lib/channels/channel-runtime-resolver.js +43 -3
  71. package/lib/channels/channel-status-display.js +66 -26
  72. package/lib/channels/channel-targets.js +3 -3
  73. package/lib/cli/index.js +27 -3
  74. package/lib/cli/infra-guided.js +5 -1
  75. package/lib/cli/setup-app-external-create.js +111 -0
  76. package/lib/cli/setup-app.help.js +1 -1
  77. package/lib/cli/setup-app.js +38 -125
  78. package/lib/cli/setup-app.test-commands.js +26 -52
  79. package/lib/cli/setup-certification-commands.js +4 -4
  80. package/lib/cli/setup-certification.help.js +9 -9
  81. package/lib/cli/setup-dev.js +7 -2
  82. package/lib/cli/setup-external-system-help.js +4 -6
  83. package/lib/cli/setup-external-system.js +58 -52
  84. package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
  85. package/lib/cli/setup-infra-up-platform-action.js +3 -1
  86. package/lib/cli/setup-infra.js +15 -0
  87. package/lib/cli/setup-list.js +43 -0
  88. package/lib/cli/setup-utility-repair.js +26 -7
  89. package/lib/cli/setup-utility.js +5 -3
  90. package/lib/commands/app.js +15 -43
  91. package/lib/commands/channel-add-setup.js +110 -0
  92. package/lib/commands/channel.js +42 -8
  93. package/lib/commands/datasource-sync-display.js +96 -0
  94. package/lib/commands/datasource-sync-policy.js +210 -0
  95. package/lib/commands/datasource-test-trust-cli.js +6 -6
  96. package/lib/commands/datasource-unified-test-cli.js +2 -1
  97. package/lib/commands/datasource-unified-test-cli.options.js +33 -23
  98. package/lib/commands/deploy-gate-failure-details.js +163 -0
  99. package/lib/commands/deploy-gate-orchestrator.js +322 -0
  100. package/lib/commands/dev-cli-handlers.js +1 -59
  101. package/lib/commands/dev-host-ops-params.js +91 -0
  102. package/lib/commands/dev-host-ops-poll.js +111 -0
  103. package/lib/commands/dev-host-ops.js +107 -94
  104. package/lib/commands/dev-init.js +3 -1
  105. package/lib/commands/enterprise-knowledge.js +284 -0
  106. package/lib/commands/evidence-cli-leaves.js +250 -0
  107. package/lib/commands/evidence.js +51 -0
  108. package/lib/commands/governance-cli-shared.js +2 -2
  109. package/lib/commands/governance-command-action.js +2 -2
  110. package/lib/commands/governance-fixture-subjects.js +85 -0
  111. package/lib/commands/governance.js +1 -1
  112. package/lib/commands/lifecycle-command-action.js +2 -2
  113. package/lib/commands/lifecycle-external.js +3 -3
  114. package/lib/commands/manifest-cli-auth.js +29 -0
  115. package/lib/commands/manifest-cli-commands.js +170 -0
  116. package/lib/commands/manifest-cli-integration-path.js +63 -0
  117. package/lib/commands/manifest.js +21 -0
  118. package/lib/commands/protection-cli-leaves.js +3 -3
  119. package/lib/commands/repair-auth-apply.js +15 -1
  120. package/lib/commands/repair-authentications-454.js +169 -0
  121. package/lib/commands/repair-capability-openapi-warnings.js +126 -0
  122. package/lib/commands/repair-datasource-apply.js +135 -0
  123. package/lib/commands/repair-datasource-auto-rbac.js +62 -1
  124. package/lib/commands/repair-datasource-http-service-contract.js +239 -0
  125. package/lib/commands/repair-datasource-operation-security.js +180 -0
  126. package/lib/commands/repair-datasource-run.js +7 -2
  127. package/lib/commands/repair-datasource-sync-operations.js +177 -0
  128. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
  129. package/lib/commands/repair-datasource.js +12 -68
  130. package/lib/commands/repair-env-template.js +11 -1
  131. package/lib/commands/repair-external-run.js +121 -31
  132. package/lib/commands/repair-internal.js +1 -1
  133. package/lib/commands/repair-openapi-export.js +156 -0
  134. package/lib/commands/repair-openapi-sync.js +19 -2
  135. package/lib/commands/repair-orchestration-datasource-split.js +259 -0
  136. package/lib/commands/repair-persist.js +22 -1
  137. package/lib/commands/repair-rbac-platform-preset.js +204 -0
  138. package/lib/commands/repair-rbac-reader-roles.js +191 -0
  139. package/lib/commands/repair-rbac.js +163 -86
  140. package/lib/commands/repair-steps.js +83 -18
  141. package/lib/commands/repair-system-permissions.js +1 -0
  142. package/lib/commands/repair.js +1 -1
  143. package/lib/commands/resource-type.js +65 -26
  144. package/lib/commands/run-post-publish-data-sync.js +68 -0
  145. package/lib/commands/setup-modes.js +1 -1
  146. package/lib/commands/test-e2e-external.js +21 -8
  147. package/lib/commands/test-governance-cli-options.js +2 -2
  148. package/lib/commands/test-trust-cli-options.js +2 -2
  149. package/lib/commands/up-builder-api-bootstrap.js +71 -0
  150. package/lib/commands/up-builder-api-provision.js +241 -0
  151. package/lib/commands/up-builder-api.js +88 -0
  152. package/lib/commands/up-common.js +25 -1
  153. package/lib/commands/upload-credential-push-log.js +117 -0
  154. package/lib/commands/upload-data-sync-finalize.js +60 -0
  155. package/lib/commands/upload-probe.js +66 -0
  156. package/lib/commands/upload-publish-context.js +4 -1
  157. package/lib/commands/upload-sidecar-followups.js +55 -27
  158. package/lib/commands/upload.js +116 -157
  159. package/lib/commands/verify-governance-combined-external.js +1 -1
  160. package/lib/commands/verify-governance-db.js +2 -2
  161. package/lib/commands/verify-operations-command-action.js +2 -2
  162. package/lib/commands/verify-operations-step-plan.js +2 -2
  163. package/lib/commands/verify-operations-steps.js +2 -2
  164. package/lib/commands/verify-trust-command-action.js +1 -1
  165. package/lib/commands/wizard-core.js +1 -1
  166. package/lib/commands/wizard-headless.js +2 -1
  167. package/lib/core/admin-secrets.js +2 -6
  168. package/lib/core/secrets-env-content.js +10 -4
  169. package/lib/core/secrets-env-write.js +2 -13
  170. package/lib/datasource/agent-trust-run.js +3 -3
  171. package/lib/datasource/deploy.js +3 -1
  172. package/lib/datasource/test-e2e.js +6 -1
  173. package/lib/datasource/unified-validation-run-body.js +4 -1
  174. package/lib/datasource/unified-validation-run.js +1 -1
  175. package/lib/deployment/deploy-poll-ui.js +73 -12
  176. package/lib/deployment/deployer-poll-run.js +113 -0
  177. package/lib/deployment/deployer.js +17 -87
  178. package/lib/evidence/dataplane-context.js +21 -0
  179. package/lib/evidence/evidence-display.js +78 -0
  180. package/lib/evidence/evidence-service.js +392 -0
  181. package/lib/external-system/deploy.js +290 -112
  182. package/lib/external-system/download.js +7 -3
  183. package/lib/external-system/test-execution.js +1 -1
  184. package/lib/external-system/test-system-level.js +8 -10
  185. package/lib/external-system/test.js +12 -6
  186. package/lib/generator/deploy-script.js +73 -0
  187. package/lib/generator/external.js +2 -1
  188. package/lib/generator/index.js +17 -2
  189. package/lib/generator/wizard.js +3 -36
  190. package/lib/internal/fs-real-sync.js +22 -1
  191. package/lib/internal/node-fs.js +2 -0
  192. package/lib/lifecycle/lifecycle-governance-options.js +1 -1
  193. package/lib/lifecycle/verify-step-progress.js +1 -1
  194. package/lib/programmatic/access-log.js +26 -0
  195. package/lib/programmatic/auth-config.js +44 -0
  196. package/lib/programmatic/bearer-auth.js +176 -0
  197. package/lib/programmatic/builder-api-request.js +175 -0
  198. package/lib/programmatic/builder-api-route-dispatch.js +82 -0
  199. package/lib/programmatic/builder-api-runtime-config.js +42 -0
  200. package/lib/programmatic/builder-api-server.js +230 -0
  201. package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
  202. package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
  203. package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
  204. package/lib/programmatic/builder-help-envelope.js +36 -0
  205. package/lib/programmatic/builder-help-fixtures.js +200 -0
  206. package/lib/programmatic/builder-help-governance.js +172 -0
  207. package/lib/programmatic/builder-help-schema-catalog.js +92 -0
  208. package/lib/programmatic/builder-help.js +361 -0
  209. package/lib/programmatic/capability-registry.js +77 -0
  210. package/lib/programmatic/command-options.js +32 -0
  211. package/lib/programmatic/enterprise-mcp-client.js +98 -0
  212. package/lib/programmatic/http-problem-details.js +99 -0
  213. package/lib/programmatic/http-route-match.js +40 -0
  214. package/lib/programmatic/idempotency-cache.js +69 -0
  215. package/lib/programmatic/index.js +53 -0
  216. package/lib/programmatic/integration-path-scope.js +39 -0
  217. package/lib/programmatic/log-redaction.js +66 -0
  218. package/lib/programmatic/manifest-get-section.js +146 -0
  219. package/lib/programmatic/manifest-patch-section.js +252 -0
  220. package/lib/programmatic/manifest-repair.js +122 -0
  221. package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
  222. package/lib/programmatic/manifest-section-io.js +225 -0
  223. package/lib/programmatic/manifest-section-quality.js +171 -0
  224. package/lib/programmatic/manifest-section-registry-data.js +269 -0
  225. package/lib/programmatic/manifest-section-registry.js +205 -0
  226. package/lib/programmatic/nest-http-bridge.js +34 -0
  227. package/lib/programmatic/openapi-component-schemas.js +68 -0
  228. package/lib/programmatic/openapi-description-enricher.js +117 -0
  229. package/lib/programmatic/openapi-descriptions.js +190 -0
  230. package/lib/programmatic/openapi-docs-serving.js +123 -0
  231. package/lib/programmatic/openapi-help-schemas.js +63 -0
  232. package/lib/programmatic/openapi-manifest-schemas.js +141 -0
  233. package/lib/programmatic/openapi-operation-bindings.js +274 -0
  234. package/lib/programmatic/openapi-request-schemas.js +155 -0
  235. package/lib/programmatic/openapi-result-schemas.js +476 -0
  236. package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
  237. package/lib/programmatic/openapi-schema-descriptions-core.js +159 -0
  238. package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
  239. package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
  240. package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
  241. package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
  242. package/lib/programmatic/openapi-schema-helpers.js +93 -0
  243. package/lib/programmatic/openapi-spec.js +203 -0
  244. package/lib/programmatic/orchestration-openapi-meta.js +159 -0
  245. package/lib/programmatic/platform-rbac-catalog.js +90 -0
  246. package/lib/programmatic/request-timeout.js +53 -0
  247. package/lib/programmatic/route-handler-map.js +143 -0
  248. package/lib/programmatic/route-handlers-context.js +29 -0
  249. package/lib/programmatic/route-handlers.js +33 -0
  250. package/lib/programmatic/run-certify.js +57 -0
  251. package/lib/programmatic/run-enterprise-mcp.js +32 -0
  252. package/lib/programmatic/run-lifecycle.js +29 -0
  253. package/lib/programmatic/run-repair.js +41 -0
  254. package/lib/programmatic/run-repository-emcp.js +54 -0
  255. package/lib/programmatic/run-template-workspace.js +61 -0
  256. package/lib/programmatic/run-test.js +49 -0
  257. package/lib/programmatic/run-upload.js +63 -0
  258. package/lib/programmatic/run-validate.js +53 -0
  259. package/lib/programmatic/run-wizard.js +40 -0
  260. package/lib/programmatic/system-key.js +48 -0
  261. package/lib/programmatic/wizard-config-normalize.js +118 -0
  262. package/lib/programmatic/workspace-cleanup.js +128 -0
  263. package/lib/programmatic/workspace-context.js +145 -0
  264. package/lib/programmatic/workspace-lock.js +75 -0
  265. package/lib/programmatic/workspace-meta.js +64 -0
  266. package/lib/programmatic/workspace-ops.js +149 -0
  267. package/lib/protection/run-commands-upload-sync.js +35 -0
  268. package/lib/protection/run-commands.js +2 -20
  269. package/lib/protection/upload-batch.js +11 -7
  270. package/lib/resolvers/resource-type-file.js +22 -0
  271. package/lib/schema/external-datasource.schema.json +161 -1
  272. package/lib/schema/external-system.schema.json +244 -118
  273. package/lib/schema/flag-map-validation-run.json +3 -0
  274. package/lib/schema/type/credential-field-registry.json +2 -2
  275. package/lib/schema/type/document-storage.json +9 -0
  276. package/lib/utils/agent-trust-run-display.js +1 -1
  277. package/lib/utils/app-path-resolve.js +168 -0
  278. package/lib/utils/authentication-env-template.js +222 -0
  279. package/lib/utils/cli-sync-options.js +7 -11
  280. package/lib/utils/cli-utils.js +4 -0
  281. package/lib/utils/cli-workspace-options.js +29 -0
  282. package/lib/utils/compose-generate-docker-compose.js +102 -0
  283. package/lib/utils/configuration-env-resolver.js +203 -27
  284. package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
  285. package/lib/utils/datasource-test-run-certification-debug.js +130 -0
  286. package/lib/utils/datasource-test-run-debug-display.js +2 -0
  287. package/lib/utils/datasource-test-run-debug-slice.js +7 -0
  288. package/lib/utils/datasource-test-run-display.js +2 -1
  289. package/lib/utils/dev-init-ssh-merge.js +165 -23
  290. package/lib/utils/dev-pin-share-instructions.js +110 -0
  291. package/lib/utils/dev-ssh-config-helper.js +177 -33
  292. package/lib/utils/enterprise-knowledge-paths.js +142 -0
  293. package/lib/utils/env-copy.js +2 -1
  294. package/lib/utils/env-dotenv-format.js +103 -0
  295. package/lib/utils/external-env-template.js +4 -1
  296. package/lib/utils/external-system-display.js +5 -1
  297. package/lib/utils/external-system-readiness-compact-blocks.js +221 -0
  298. package/lib/utils/external-system-readiness-compact-display.js +324 -0
  299. package/lib/utils/external-system-readiness-core.js +16 -0
  300. package/lib/utils/external-system-readiness-deploy-display.js +29 -11
  301. package/lib/utils/external-system-readiness-display-internals.js +3 -1
  302. package/lib/utils/external-system-readiness-display.js +20 -30
  303. package/lib/utils/external-system-system-test-tty-certification.js +135 -0
  304. package/lib/utils/external-system-system-test-tty.js +5 -41
  305. package/lib/utils/help-builder.js +6 -1
  306. package/lib/utils/host-ops-job-labels.js +236 -0
  307. package/lib/utils/host-ops-job-result.js +61 -0
  308. package/lib/utils/host-ops-poll-ui.js +163 -0
  309. package/lib/utils/integration-path-resolve.js +112 -0
  310. package/lib/utils/paths-reload-source.js +148 -0
  311. package/lib/utils/paths-system-builder-keys.js +25 -0
  312. package/lib/utils/paths.js +151 -26
  313. package/lib/utils/runtime-configuration-values.js +64 -2
  314. package/lib/utils/secrets-helpers.js +5 -1
  315. package/lib/utils/ssh-known-hosts.js +130 -0
  316. package/lib/utils/test-target-cli-options.js +75 -0
  317. package/lib/utils/upload-sync-options.js +4 -0
  318. package/lib/utils/validation-run-request.js +11 -2
  319. package/lib/validation/external-manifest-validator.js +11 -1
  320. package/lib/validation/openapi-contract-surface-validator.js +426 -0
  321. package/lib/validation/openapi-contract-vendor-validation.js +238 -0
  322. package/lib/validation/validate-external-file.js +160 -0
  323. package/lib/validation/validate.js +6 -117
  324. package/package.json +46 -29
  325. package/packages/builder-api/README.md +120 -0
  326. package/packages/builder-api/package.json +30 -0
  327. package/packages/builder-api/src/app.module.ts +7 -0
  328. package/packages/builder-api/src/auth/auth.module.ts +5 -0
  329. package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
  330. package/packages/builder-api/src/main.ts +16 -0
  331. package/packages/builder-api/tsconfig.json +15 -0
  332. package/scripts/check-builder-api-architecture-grep.js +79 -0
  333. package/scripts/docker_image_content_gate.js +47 -0
  334. package/scripts/docker_image_content_gate.sh +5 -0
  335. package/scripts/export-builder-api-evidence.js +262 -0
  336. package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
  337. package/scripts/lib/builder-api-docker-staging-core.js +183 -0
  338. package/scripts/lib/docker-image-content-gate-core.js +166 -0
  339. package/scripts/lib/plan-actor.js +109 -0
  340. package/scripts/lib/plan-config.js +20 -0
  341. package/scripts/lib/plan-gates.js +154 -0
  342. package/scripts/lib/plan-meta.js +104 -0
  343. package/scripts/lib/plan-parse.js +162 -0
  344. package/scripts/lib/plan-prevalidate-gates.js +326 -0
  345. package/scripts/lib/plan-run-core.js +125 -0
  346. package/scripts/lib/plan-run-report.js +108 -0
  347. package/scripts/plan-approve.js +24 -0
  348. package/scripts/plan-archive.js +49 -0
  349. package/scripts/plan-run.js +13 -0
  350. package/scripts/plan-set-actor.js +21 -0
  351. package/scripts/plan-validate.js +80 -0
  352. package/scripts/pnpm/af.mjs +110 -0
  353. package/scripts/pnpm/check-quiet.mjs +32 -0
  354. package/scripts/pnpm/dev-install.mjs +29 -0
  355. package/scripts/pnpm/dev-reload.mjs +18 -0
  356. package/scripts/pnpm/help.mjs +55 -0
  357. package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
  358. package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
  359. package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
  360. package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
  361. package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
  362. package/scripts/pnpm/lib/spinner.mjs +42 -0
  363. package/scripts/stage_builder_api_for_docker.js +65 -0
  364. package/scripts/sync-builder-api-template.js +44 -0
  365. package/templates/README.md +3 -0
  366. package/templates/applications/builder-api/Dockerfile +38 -0
  367. package/templates/applications/builder-api/application.yaml +75 -0
  368. package/templates/applications/builder-api/env.template +48 -0
  369. package/templates/applications/dataplane/application.yaml +1 -1
  370. package/templates/applications/dataplane/env.template +10 -6
  371. package/templates/applications/dataplane/rbac.yaml +21 -1
  372. package/templates/applications/miso-controller/application.yaml +1 -1
  373. package/templates/applications/miso-controller/env.template +1 -3
  374. package/templates/channels/README.md +18 -0
  375. package/templates/channels/ai-fabrix-icon.jpg +0 -0
  376. package/templates/channels/chatgpt/install.template.md.hbs +21 -24
  377. package/templates/channels/chatgpt/integration/README.md +11 -0
  378. package/templates/channels/chatgpt/integration/application.json +15 -0
  379. package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
  380. package/templates/channels/chatgpt/integration/env.template +4 -0
  381. package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
  382. package/templates/channels/microsoft-copilot/integration/README.md +11 -0
  383. package/templates/channels/microsoft-copilot/integration/application.json +15 -0
  384. package/templates/channels/microsoft-copilot/integration/env.template +6 -0
  385. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
  386. package/templates/channels/slack/install.template.md.hbs +48 -18
  387. package/templates/channels/slack/integration/README.md +38 -0
  388. package/templates/channels/slack/integration/application.json +18 -0
  389. package/templates/channels/slack/integration/env.template +29 -0
  390. package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
  391. package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
  392. package/templates/channels/slack/integration/slack-system.json +86 -0
  393. package/templates/channels/slack/manifest.template.json.hbs +20 -10
  394. package/templates/channels/teams-bot/install.template.md.hbs +31 -17
  395. package/templates/channels/teams-bot/integration/README.md +18 -0
  396. package/templates/channels/teams-bot/integration/application.json +17 -0
  397. package/templates/channels/teams-bot/integration/env.template +5 -0
  398. package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
  399. package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
  400. package/templates/channels/web-embed/install.template.md.hbs +16 -26
  401. package/templates/channels/web-embed/integration/README.md +11 -0
  402. package/templates/channels/web-embed/integration/application.json +15 -0
  403. package/templates/channels/web-embed/integration/env.template +4 -0
  404. package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
  405. package/templates/openapi/redoc_page.html +86 -0
  406. package/templates/python/docker-compose.hbs +11 -0
  407. package/templates/python/requirements.txt +1 -1
  408. package/templates/typescript/docker-compose.hbs +11 -0
  409. package/lib/certification/cli-cert-sync-skip.js +0 -21
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Vendor OpenAPI operation contract checks for serviceContract datasources.
3
+ *
4
+ * @fileoverview Extracted from openapi-contract-surface-validator (max-lines split)
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const MUTATING_METHODS = new Set(['post', 'put', 'patch']);
12
+
13
+ /**
14
+ * @param {Object|undefined} content
15
+ * @returns {boolean}
16
+ */
17
+ function hasJsonSchemaContent(content) {
18
+ if (!content || typeof content !== 'object') {
19
+ return false;
20
+ }
21
+ const json = content['application/json'];
22
+ if (!json || typeof json !== 'object') {
23
+ return false;
24
+ }
25
+ const schema = json.schema;
26
+ return Boolean(schema && typeof schema === 'object' && Object.keys(schema).length > 0);
27
+ }
28
+
29
+ /**
30
+ * @param {Object|undefined} op
31
+ * @returns {boolean}
32
+ */
33
+ function operationHasParameters(op) {
34
+ const params = op?.parameters;
35
+ return Array.isArray(params) && params.length > 0;
36
+ }
37
+
38
+ /**
39
+ * @param {Object|undefined} opCfg
40
+ * @returns {{ requestBody: boolean, responseBody: boolean }}
41
+ */
42
+ function readContractExempt(opCfg) {
43
+ const raw = opCfg?.contractExempt || opCfg?.contractSurfaceExempt;
44
+ if (!raw || typeof raw !== 'object') {
45
+ return { requestBody: false, responseBody: false };
46
+ }
47
+ return {
48
+ requestBody: raw.requestBody === true,
49
+ responseBody: raw.responseBody === true
50
+ };
51
+ }
52
+
53
+ /**
54
+ * @param {Object|undefined} vendorOp
55
+ * @param {Object|undefined} opCfg
56
+ * @param {string} opKey
57
+ * @returns {{ errors: string[], warnings: string[] }}
58
+ */
59
+ function validateVendorOperationContract(vendorOp, opCfg, opKey) {
60
+ const errors = [];
61
+ const warnings = [];
62
+ const exempt = readContractExempt(opCfg);
63
+ const method = String(opCfg?.method || 'get').trim().toLowerCase();
64
+ if (!vendorOp || typeof vendorOp !== 'object') {
65
+ errors.push(
66
+ `openapi.operations.${opKey}: no matching operation in vendor OpenAPI (check path, method, operationId)`
67
+ );
68
+ return { errors, warnings };
69
+ }
70
+ validateRequestSurface(vendorOp, method, opKey, exempt, errors, warnings);
71
+ validateResponseSurface(vendorOp, method, opKey, exempt, errors, warnings);
72
+ return { errors, warnings };
73
+ }
74
+
75
+ /**
76
+ * @param {Object} vendorOp
77
+ * @param {string} method
78
+ * @param {string} opKey
79
+ * @param {{ requestBody: boolean, responseBody: boolean }} exempt
80
+ * @param {string[]} errors
81
+ * @param {string[]} warnings
82
+ */
83
+ function validateRequestSurface(vendorOp, method, opKey, exempt, errors, warnings) {
84
+ if (!MUTATING_METHODS.has(method) || exempt.requestBody) {
85
+ return;
86
+ }
87
+ const hasBody = hasJsonSchemaContent(vendorOp.requestBody?.content);
88
+ const hasParams = operationHasParameters(vendorOp);
89
+ if (hasBody || hasParams) {
90
+ if (!hasBody && hasParams) {
91
+ warnings.push(
92
+ `openapi.operations.${opKey}: POST/PUT/PATCH uses query/path parameters only (no requestBody schema) — allowed for edge cases like eventStart?id=`
93
+ );
94
+ }
95
+ return;
96
+ }
97
+ errors.push(
98
+ `openapi.operations.${opKey}: mutating operation has no requestBody schema and no parameters — agents cannot send inputs`
99
+ );
100
+ }
101
+
102
+ /**
103
+ * @param {Object} vendorOp
104
+ * @param {string} method
105
+ * @param {string} opKey
106
+ * @param {{ requestBody: boolean, responseBody: boolean }} exempt
107
+ * @param {string[]} errors
108
+ * @param {string[]} warnings
109
+ */
110
+ function validateResponseSurface(vendorOp, method, opKey, exempt, errors, warnings) {
111
+ if (exempt.responseBody) {
112
+ return;
113
+ }
114
+ const responses = vendorOp.responses;
115
+ if (!responses || typeof responses !== 'object') {
116
+ pushResponseIssue(method, opKey, errors, warnings);
117
+ return;
118
+ }
119
+ if (responses['204']) {
120
+ return;
121
+ }
122
+ for (const status of ['200', '201', '202']) {
123
+ const response = responses[status];
124
+ if (response && hasJsonSchemaContent(response.content)) {
125
+ return;
126
+ }
127
+ }
128
+ pushResponseIssue(method, opKey, errors, warnings);
129
+ }
130
+
131
+ /**
132
+ * @param {string} method
133
+ * @param {string} opKey
134
+ * @param {string[]} errors
135
+ * @param {string[]} warnings
136
+ */
137
+ function pushResponseIssue(method, opKey, errors, warnings) {
138
+ const msg =
139
+ `openapi.operations.${opKey}: no JSON response schema on 200/201/202 — ` +
140
+ 'MCP outputSchema and live validation will be empty';
141
+ if (MUTATING_METHODS.has(method)) {
142
+ errors.push(msg);
143
+ return;
144
+ }
145
+ warnings.push(msg);
146
+ }
147
+
148
+ /**
149
+ * @param {Object|undefined} paths
150
+ * @param {string} pathKey
151
+ * @param {string} method
152
+ * @returns {Object|null}
153
+ */
154
+ function findVendorOperationByPath(paths, pathKey, method) {
155
+ if (!pathKey || !paths || typeof paths !== 'object') {
156
+ return null;
157
+ }
158
+ const pathItem = paths[pathKey];
159
+ if (!pathItem || typeof pathItem !== 'object') {
160
+ return null;
161
+ }
162
+ return pathItem[method] || null;
163
+ }
164
+
165
+ /**
166
+ * @param {Object|undefined} paths
167
+ * @param {string} operationId
168
+ * @returns {Object|null}
169
+ */
170
+ function findVendorOperationById(paths, operationId) {
171
+ if (!operationId || !paths || typeof paths !== 'object') {
172
+ return null;
173
+ }
174
+ for (const pathItem of Object.values(paths)) {
175
+ if (!pathItem || typeof pathItem !== 'object') {
176
+ continue;
177
+ }
178
+ for (const op of Object.values(pathItem)) {
179
+ if (op && typeof op === 'object' && String(op.operationId || '').trim() === operationId) {
180
+ return op;
181
+ }
182
+ }
183
+ }
184
+ return null;
185
+ }
186
+
187
+ /**
188
+ * @param {Object|undefined} vendorSpec
189
+ * @param {Object|undefined} opCfg
190
+ * @returns {Object|null}
191
+ */
192
+ function findVendorOperation(vendorSpec, opCfg) {
193
+ if (!vendorSpec || typeof vendorSpec !== 'object' || !opCfg || typeof opCfg !== 'object') {
194
+ return null;
195
+ }
196
+ const paths = vendorSpec.paths;
197
+ const pathKey = typeof opCfg.path === 'string' ? opCfg.path.trim() : '';
198
+ const method = String(opCfg.method || 'get').trim().toLowerCase();
199
+ const byPath = findVendorOperationByPath(paths, pathKey, method);
200
+ if (byPath) {
201
+ return byPath;
202
+ }
203
+ const operationId = typeof opCfg.operationId === 'string' ? opCfg.operationId.trim() : '';
204
+ return findVendorOperationById(paths, operationId);
205
+ }
206
+
207
+ /**
208
+ * @param {Object} ds
209
+ * @param {Object|null} vendorSpec
210
+ * @param {string} prefix
211
+ * @returns {{ errors: string[], warnings: string[] }}
212
+ */
213
+ function validateOrchestrationDatasourceContracts(ds, vendorSpec, prefix) {
214
+ const errors = [];
215
+ const warnings = [];
216
+ const openapi = ds.openapi;
217
+ if (!openapi || openapi.enabled !== true) {
218
+ return { errors, warnings };
219
+ }
220
+ const operations = openapi.operations;
221
+ if (!operations || typeof operations !== 'object') {
222
+ errors.push(`${prefix}openapi.enabled but openapi.operations is missing`);
223
+ return { errors, warnings };
224
+ }
225
+ for (const [opKey, opCfg] of Object.entries(operations)) {
226
+ const vendorOp = findVendorOperation(vendorSpec, opCfg);
227
+ const result = validateVendorOperationContract(vendorOp, opCfg, opKey);
228
+ result.errors.forEach((e) => errors.push(`${prefix}${e}`));
229
+ result.warnings.forEach((w) => warnings.push(`${prefix}${w}`));
230
+ }
231
+ return { errors, warnings };
232
+ }
233
+
234
+ module.exports = {
235
+ validateVendorOperationContract,
236
+ findVendorOperation,
237
+ validateOrchestrationDatasourceContracts
238
+ };
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Single external system/datasource file validation.
3
+ *
4
+ * @fileoverview Extracted from validate.js (max-lines split)
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const fs = require('fs');
12
+ const yaml = require('js-yaml');
13
+ const { loadExternalSystemSchema, loadExternalDataSourceSchema } = require('../utils/schema-loader');
14
+ const { formatValidationErrors } = require('../utils/error-formatter');
15
+ const { validateFieldReferences } = require('../datasource/field-reference-validator');
16
+ const { validateAbac } = require('../datasource/abac-validator');
17
+ const {
18
+ validateOAuth2GrantTypeAndAuthorizationUrl,
19
+ validateConfigurationNoStandardAuthVariables
20
+ } = require('./external-system-auth-rules');
21
+
22
+ /**
23
+ * Parses external system/datasource file content (JSON or YAML).
24
+ * @param {string} filePath - File path (.json, .yaml, or .yml)
25
+ * @returns {Object} Parse result with parsed object or error
26
+ */
27
+ function parseJsonFileContent(filePath) {
28
+ const content = fs.readFileSync(filePath, 'utf8');
29
+ const isYaml = /\.(yaml|yml)$/i.test(filePath);
30
+ try {
31
+ const parsed = isYaml ? yaml.load(content) : JSON.parse(content);
32
+ return { parsed: parsed || {}, error: null };
33
+ } catch (error) {
34
+ return {
35
+ parsed: null,
36
+ error: {
37
+ valid: false,
38
+ errors: [isYaml ? `Invalid YAML syntax: ${error.message}` : `Invalid JSON syntax: ${error.message}`],
39
+ warnings: []
40
+ }
41
+ };
42
+ }
43
+ }
44
+
45
+ /**
46
+ * @param {string} normalizedType
47
+ * @returns {Function}
48
+ */
49
+ function getValidatorForType(normalizedType) {
50
+ if (normalizedType === 'system') {
51
+ return loadExternalSystemSchema();
52
+ }
53
+ if (normalizedType === 'datasource') {
54
+ return loadExternalDataSourceSchema();
55
+ }
56
+ throw new Error(`Unknown file type: ${normalizedType}`);
57
+ }
58
+
59
+ /**
60
+ * @param {Object} parsed
61
+ * @param {string[]} errors
62
+ */
63
+ function validateRoleReferences(parsed, errors) {
64
+ if (!parsed.permissions || !Array.isArray(parsed.permissions)) {
65
+ return;
66
+ }
67
+
68
+ const roles = parsed.roles || [];
69
+ const roleValues = new Set(roles.map((r) => r.value));
70
+
71
+ parsed.permissions.forEach((permission, index) => {
72
+ if (permission.roles && Array.isArray(permission.roles)) {
73
+ permission.roles.forEach((roleValue) => {
74
+ if (!roleValues.has(roleValue)) {
75
+ errors.push(
76
+ `Permission "${permission.name}" (index ${index}) references role "${roleValue}" which does not exist in roles array`
77
+ );
78
+ }
79
+ });
80
+ }
81
+ });
82
+ }
83
+
84
+ /**
85
+ * @param {Object} parsed
86
+ * @param {string[]} errors
87
+ */
88
+ function validateSystemFileExtras(parsed, errors) {
89
+ validateRoleReferences(parsed, errors);
90
+ validateOAuth2GrantTypeAndAuthorizationUrl(parsed, errors);
91
+ validateConfigurationNoStandardAuthVariables(parsed, errors);
92
+ }
93
+
94
+ /**
95
+ * @param {Object} parsed
96
+ * @param {string} filePath
97
+ * @returns {{ errors: string[], warnings: string[] }}
98
+ */
99
+ function validateDatasourceFileExtras(parsed, filePath) {
100
+ const { collectExternalDatasourceWarnings } = require('./datasource-warnings');
101
+ const { validateDatasourceFileContractSurface } = require('./openapi-contract-surface-validator');
102
+ const errors = [...validateFieldReferences(parsed), ...validateAbac(parsed)];
103
+ const contractSurface = validateDatasourceFileContractSurface(parsed, filePath);
104
+ errors.push(...contractSurface.errors);
105
+ const warnings = [
106
+ ...collectExternalDatasourceWarnings(parsed),
107
+ ...contractSurface.warnings
108
+ ];
109
+ return { errors, warnings };
110
+ }
111
+
112
+ /**
113
+ * @async
114
+ * @param {string} filePath
115
+ * @param {string} type
116
+ * @returns {Promise<Object>}
117
+ */
118
+ async function validateExternalFile(filePath, type) {
119
+ if (!fs.existsSync(filePath)) {
120
+ throw new Error(`File not found: ${filePath}`);
121
+ }
122
+
123
+ const parseResult = parseJsonFileContent(filePath);
124
+ if (parseResult.error) {
125
+ return parseResult.error;
126
+ }
127
+
128
+ const normalizedType =
129
+ type === 'external-system' ? 'system' : (type === 'external-datasource' ? 'datasource' : type);
130
+ const validate = getValidatorForType(normalizedType);
131
+ const valid = validate(parseResult.parsed);
132
+
133
+ const errors = valid ? [] : formatValidationErrors(validate.errors);
134
+ const warnings = [];
135
+
136
+ if (normalizedType === 'system') {
137
+ validateSystemFileExtras(parseResult.parsed, errors);
138
+ }
139
+
140
+ if (normalizedType === 'datasource') {
141
+ const dsResult = validateDatasourceFileExtras(parseResult.parsed, filePath);
142
+ errors.push(...dsResult.errors);
143
+ warnings.push(...dsResult.warnings);
144
+ }
145
+
146
+ return {
147
+ valid: errors.length === 0,
148
+ errors,
149
+ warnings,
150
+ file: filePath,
151
+ type: type
152
+ };
153
+ }
154
+
155
+ module.exports = {
156
+ parseJsonFileContent,
157
+ getValidatorForType,
158
+ validateRoleReferences,
159
+ validateExternalFile
160
+ };
@@ -10,13 +10,9 @@
10
10
  */
11
11
 
12
12
  const fs = require('fs');
13
- const yaml = require('js-yaml');
14
13
  const validator = require('./validator');
15
14
  const { resolveExternalFiles } = require('../utils/schema-resolver');
16
- const { loadExternalSystemSchema, loadExternalDataSourceSchema, detectSchemaType } = require('../utils/schema-loader');
17
- const { formatValidationErrors } = require('../utils/error-formatter');
18
- const { validateFieldReferences } = require('../datasource/field-reference-validator');
19
- const { validateAbac } = require('../datasource/abac-validator');
15
+ const { detectSchemaType } = require('../utils/schema-loader');
20
16
  const { detectAppType } = require('../utils/paths');
21
17
  const batch = require('./validate-batch');
22
18
  const { logOfflinePathWhenType } = require('../utils/cli-utils');
@@ -24,11 +20,8 @@ const { resolveApplicationConfigPath } = require('../utils/app-config-resolver')
24
20
  const { displayValidationResults, displayBatchValidationResults } = require('./validate-display');
25
21
  const { generateControllerManifest } = require('../generator/external-controller-manifest');
26
22
  const { validateControllerManifest } = require('./external-manifest-validator');
27
- const {
28
- validateOAuth2GrantTypeAndAuthorizationUrl,
29
- validateConfigurationNoStandardAuthVariables
30
- } = require('./external-system-auth-rules');
31
23
  const { runExternalValidateWithOptionalCertSync } = require('./validate-external-cert-sync');
24
+ const { validateExternalFile } = require('./validate-external-file');
32
25
 
33
26
  /**
34
27
  * Validates a file path (detects type and validates)
@@ -106,112 +99,7 @@ function aggregateValidationResults(appValidation, externalValidations, rbacVali
106
99
  }
107
100
 
108
101
  /**
109
- * Parses external system/datasource file content (JSON or YAML).
110
- * @function parseJsonFileContent
111
- * @param {string} filePath - File path (.json, .yaml, or .yml)
112
- * @returns {Object} Parse result with parsed object or error
113
- */
114
- function parseJsonFileContent(filePath) {
115
- const content = fs.readFileSync(filePath, 'utf8');
116
- const isYaml = /\.(yaml|yml)$/i.test(filePath);
117
- try {
118
- const parsed = isYaml ? yaml.load(content) : JSON.parse(content);
119
- return { parsed: parsed || {}, error: null };
120
- } catch (error) {
121
- return {
122
- parsed: null,
123
- error: {
124
- valid: false,
125
- errors: [isYaml ? `Invalid YAML syntax: ${error.message}` : `Invalid JSON syntax: ${error.message}`],
126
- warnings: []
127
- }
128
- };
129
- }
130
- }
131
-
132
- /**
133
- * Gets validator function for file type
134
- * @function getValidatorForType
135
- * @param {string} normalizedType - Normalized file type
136
- * @returns {Function} Validator function
137
- * @throws {Error} If type is unknown
138
- */
139
- function getValidatorForType(normalizedType) {
140
- if (normalizedType === 'system') {
141
- return loadExternalSystemSchema();
142
- }
143
- if (normalizedType === 'datasource') {
144
- return loadExternalDataSourceSchema();
145
- }
146
- throw new Error(`Unknown file type: ${normalizedType}`);
147
- }
148
-
149
- /**
150
- * Validates role references in permissions
151
- * @function validateRoleReferences
152
- * @param {Object} parsed - Parsed JSON object
153
- * @param {string[]} errors - Errors array to append to
154
- */
155
- function validateRoleReferences(parsed, errors) {
156
- if (!parsed.permissions || !Array.isArray(parsed.permissions)) {
157
- return;
158
- }
159
-
160
- const roles = parsed.roles || [];
161
- const roleValues = new Set(roles.map(r => r.value));
162
-
163
- parsed.permissions.forEach((permission, index) => {
164
- if (permission.roles && Array.isArray(permission.roles)) {
165
- permission.roles.forEach(roleValue => {
166
- if (!roleValues.has(roleValue)) {
167
- errors.push(`Permission "${permission.name}" (index ${index}) references role "${roleValue}" which does not exist in roles array`);
168
- }
169
- });
170
- }
171
- });
172
- }
173
-
174
- /** @async */
175
- async function validateExternalFile(filePath, type) {
176
- if (!fs.existsSync(filePath)) {
177
- throw new Error(`File not found: ${filePath}`);
178
- }
179
-
180
- const parseResult = parseJsonFileContent(filePath);
181
- if (parseResult.error) {
182
- return parseResult.error;
183
- }
184
-
185
- const normalizedType = type === 'external-system' ? 'system' : (type === 'external-datasource' ? 'datasource' : type);
186
- const validate = getValidatorForType(normalizedType);
187
- const valid = validate(parseResult.parsed);
188
-
189
- const errors = valid ? [] : formatValidationErrors(validate.errors);
190
- const warnings = [];
191
-
192
- if (normalizedType === 'system') {
193
- validateRoleReferences(parseResult.parsed, errors);
194
- validateOAuth2GrantTypeAndAuthorizationUrl(parseResult.parsed, errors);
195
- validateConfigurationNoStandardAuthVariables(parseResult.parsed, errors);
196
- }
197
-
198
- if (normalizedType === 'datasource') {
199
- const { collectExternalDatasourceWarnings } = require('./datasource-warnings');
200
- errors.push(...validateFieldReferences(parseResult.parsed), ...validateAbac(parseResult.parsed));
201
- warnings.push(...collectExternalDatasourceWarnings(parseResult.parsed));
202
- }
203
-
204
- return {
205
- valid: errors.length === 0,
206
- errors,
207
- warnings,
208
- file: filePath,
209
- type: type
210
- };
211
- }
212
-
213
- /**
214
- * Validates application or external integration file
102
+ * Validates a file path (detects type and validates)
215
103
  * Detects if input is app name or file path and validates accordingly
216
104
  *
217
105
  * @async
@@ -371,8 +259,9 @@ async function validateComponentsStep(appName, options = {}) {
371
259
  */
372
260
  async function validateManifestStep(appName, options = {}) {
373
261
  try {
262
+ const appPath = options.appPath || (await detectAppType(appName, options)).appPath;
374
263
  const manifest = await generateControllerManifest(appName, options);
375
- const manifestValidation = await validateControllerManifest(manifest);
264
+ const manifestValidation = await validateControllerManifest(manifest, { appPath });
376
265
  return {
377
266
  valid: manifestValidation.valid,
378
267
  errors: manifestValidation.errors || [],
@@ -434,7 +323,7 @@ async function validateExternalSystemComplete(appName, options = {}) {
434
323
  }
435
324
 
436
325
  // Step 3 & 4: Generate and Validate Full Manifest (only if Step 2 passes)
437
- steps.manifest = await validateManifestStep(appName, externalOptions);
326
+ steps.manifest = await validateManifestStep(appName, { ...externalOptions, appPath });
438
327
 
439
328
  // Aggregate Results
440
329
  const allErrors = [...steps.application.errors, ...steps.components.errors, ...steps.manifest.errors];
package/package.json CHANGED
@@ -1,46 +1,55 @@
1
1
  {
2
2
  "name": "@aifabrix/builder",
3
- "version": "2.49.2",
4
- "description": "AI Fabrix Local Fabric & Deployment SDK",
3
+ "version": "2.50.0",
4
+ "description": "AI Fabrix Builder — CLI and developer scripts (pnpm + af)",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
7
7
  "aifabrix": "bin/aifabrix.js",
8
8
  "af": "bin/aifabrix.js"
9
9
  },
10
10
  "scripts": {
11
- "all": "npm run precommit && npm run test:manual && npm run test:integration:fixtures && npm run test:hubspot-wizard",
12
- "test": "node tests/scripts/test-wrapper.js",
13
- "test:ci": "bash tests/scripts/ci-simulate.sh",
14
- "test:same-as-github": "npm run build:ci",
15
- "test:coverage": "cross-env RUN_COVERAGE=1 node tests/scripts/test-wrapper.js",
16
- "test:coverage:nyc": "nyc --reporter=text --reporter=lcov --reporter=html jest --config jest.config.coverage.js --runInBand",
17
- "test:watch": "jest --watch",
18
- "test:integration": "jest --config jest.config.integration.js --runInBand",
19
- "test:integration:fixtures": "jest --config jest.config.integration.fixtures.js --runInBand",
20
- "test:integration:python": "cross-env TEST_LANGUAGE=python jest --config jest.config.integration.js --runInBand",
21
- "test:integration:typescript": "cross-env TEST_LANGUAGE=typescript jest --config jest.config.integration.js --runInBand",
22
- "test:hubspot-wizard": "node integration/hubspot-test/test.js",
23
- "test:hubspot-wizard:negative": "node integration/hubspot-test/test.js --type negative",
24
- "test:hubspot-wizard:positive": "node integration/hubspot-test/test.js --type positive",
25
- "test:hubspot-dataplane-down": "node integration/hubspot-test/test-dataplane-down.js",
26
- "test:manual": "jest --config jest.config.manual.js --runInBand",
11
+ "help": "node scripts/pnpm/help.mjs",
12
+ "dev-install": "node scripts/pnpm/dev-install.mjs",
13
+ "dev": "node bin/builder-api-spike.js",
14
+ "dev-reload": "node scripts/pnpm/dev-reload.mjs",
15
+ "dev-build": "node scripts/pnpm/af.mjs dev-build",
16
+ "dev-promote": "node scripts/pnpm/af.mjs dev-promote",
17
+ "af": "node scripts/pnpm/af.mjs",
18
+ "check-quiet": "node scripts/pnpm/check-quiet.mjs",
19
+ "check": "npm run lint && npm run test",
27
20
  "lint": "eslint . --ext .js",
28
21
  "lint:fix": "eslint . --ext .js --fix",
29
- "lint:ci": "eslint . --ext .js --format json --output-file eslint-report.json",
30
- "dev": "node bin/aifabrix.js",
22
+ "test": "node tests/scripts/test-wrapper.js",
31
23
  "build": "npm run lint && npm run test",
32
24
  "build:ci": "npm run lint && npm run check:schema-sync && npm run check:flags && npm run test:ci",
33
- "pack": "npm run build && npm pack",
34
- "validate": "npm run build",
35
- "prepublishOnly": "npm run validate",
36
- "precommit": "npm run lint:fix && npm run test",
25
+ "test:ci": "bash tests/scripts/ci-simulate.sh",
37
26
  "install:local": "node scripts/install-local.js && which aifabrix && which af",
38
27
  "uninstall:local": "node scripts/install-local.js uninstall && which aifabrix && which af",
28
+ "sync-json": "node scripts/sync-builder-api-template.js",
29
+ "builder-api:build": "tsc -p packages/builder-api/tsconfig.json",
30
+ "builder-api:nest": "node bin/builder-api-nest.js",
31
+ "builder-api:cleanup": "node bin/builder-api-cleanup.js",
32
+ "check:builder-api-arch": "node scripts/check-builder-api-architecture-grep.js",
33
+ "check:schema-sync": "node scripts/check-datasource-test-run-schema-sync.js",
34
+ "check:flags": "jest tests/lib/schema/flag-map-validation-run.test.js --runInBand --config jest.config.default.js",
35
+ "test:154": "npm run check:builder-api-arch && jest --runInBand tests/lib/programmatic/ tests/packages/builder-api/ tests/lib/commands/up-builder-api.test.js tests/lib/commands/up-common.test.js tests/lib/commands/repair-deploy-script.test.js tests/lib/generator/deploy-script.test.js tests/lib/generator/wizard-generator.test.js tests/lib/scripts/sync-builder-api-template.test.js tests/lib/platform-integrations-manifest.test.js",
36
+ "test:154-docker-ip": "jest --runInBand tests/scripts/stage_builder_api_for_docker.test.js tests/scripts/docker_image_content_gate.test.js",
37
+ "stage-builder-api-docker": "node scripts/stage_builder_api_for_docker.js",
38
+ "docker-image-build-builder-api": "npm run stage-builder-api-docker && docker build -f builder/builder-api/Dockerfile -t builder-api:gate .",
39
+ "docker-image-gate-builder-api": "npm run docker-image-build-builder-api && node scripts/docker_image_content_gate.js builder-api:gate builder-api",
40
+ "test:manual": "jest --config jest.config.manual.js --runInBand",
41
+ "test:integration": "jest --config jest.config.integration.js --runInBand",
42
+ "test:integration:fixtures": "jest --config jest.config.integration.fixtures.js --runInBand",
43
+ "test:hubspot-wizard": "node integration/hubspot-test/test.js",
44
+ "test:hubspot-dataplane-down": "node integration/hubspot-test/test-dataplane-down.js",
45
+ "test:coverage": "cross-env RUN_COVERAGE=1 node tests/scripts/test-wrapper.js",
46
+ "test:watch": "jest --watch",
47
+ "diagnose:cli": "node scripts/diagnose-cli.js",
39
48
  "install:global": "npm install -g . --force && which aifabrix && which af && aifabrix --version",
40
49
  "uninstall:global": "npm uninstall -g @aifabrix/builder",
41
- "diagnose:cli": "node scripts/diagnose-cli.js",
42
- "check:schema-sync": "node scripts/check-datasource-test-run-schema-sync.js",
43
- "check:flags": "jest tests/lib/schema/flag-map-validation-run.test.js --runInBand --config jest.config.default.js"
50
+ "pack": "npm run build && npm pack",
51
+ "validate": "npm run build",
52
+ "prepublishOnly": "npm run validate"
44
53
  },
45
54
  "keywords": [
46
55
  "aifabrix",
@@ -82,6 +91,7 @@
82
91
  }
83
92
  },
84
93
  "dependencies": {
94
+ "@aifabrix/miso-client": "^4.19.0",
85
95
  "ajv": "^8.12.0",
86
96
  "ajv-formats": "^3.0.1",
87
97
  "axios": "^1.6.0",
@@ -98,12 +108,19 @@
98
108
  "@babel/plugin-syntax-optional-chaining": "^7.8.3",
99
109
  "@babel/preset-env": "^7.29.0",
100
110
  "@bcoe/v8-coverage": "^1.0.2",
111
+ "@nestjs/common": "^10.4.15",
112
+ "@nestjs/core": "^10.4.15",
113
+ "@nestjs/platform-express": "^10.4.15",
101
114
  "@types/node": "^20.10.0",
102
115
  "cross-env": "^10.1.0",
103
116
  "eslint": "^8.55.0",
104
117
  "jest": "^30.2.0",
105
- "markdownlint-cli": "^0.47.0",
106
- "nyc": "^17.1.0"
118
+ "markdownlint-cli": "^0.49.0",
119
+ "nyc": "^18.0.0",
120
+ "reflect-metadata": "^0.2.2",
121
+ "rxjs": "^7.8.1",
122
+ "ts-node": "^10.9.2",
123
+ "typescript": "^5.7.2"
107
124
  },
108
125
  "repository": {
109
126
  "type": "git",