@aifabrix/builder 2.49.2 → 2.51.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 (459) hide show
  1. package/.cursor/plans/157.1-security-quality-violations-by-type.csv +374 -0
  2. package/.cursor/rules/assistant-driven-integration-build.mdc +40 -0
  3. package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
  4. package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
  5. package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
  6. package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
  7. package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
  8. package/.cursor/skills/README.md +1 -0
  9. package/.dockerignore +52 -0
  10. package/.eslintignore +22 -0
  11. package/README.md +2 -0
  12. package/bin/builder-api-cleanup.js +26 -0
  13. package/bin/builder-api-nest.js +10 -0
  14. package/bin/builder-api-spike.js +19 -0
  15. package/enterprise-knowledge/README.md +50 -0
  16. package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
  17. package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
  18. package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
  19. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
  20. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
  21. package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
  22. package/integration/README.md +81 -0
  23. package/integration/github/README.md +53 -0
  24. package/integration/github/application.json +21 -0
  25. package/integration/github/deploy.js +72 -0
  26. package/integration/github/env.template +11 -0
  27. package/integration/github/github-datasource-issue-comments.json +239 -0
  28. package/integration/github/github-datasource-issues.json +399 -0
  29. package/integration/github/github-datasource-repository.json +354 -0
  30. package/integration/github/github-deploy.json +1202 -0
  31. package/integration/github/github-system.json +82 -0
  32. package/integration/hubspot-test/README.md +1 -1
  33. package/integration/hubspot-test/create-hubspot.js +1 -16
  34. package/jest.isolated-projects.js +31 -1
  35. package/jest.projects.js +87 -1
  36. package/lib/api/dev-server-https.js +1 -1
  37. package/lib/api/enterprise-knowledge.api.js +63 -0
  38. package/lib/api/evidence-kinds.api.js +128 -0
  39. package/lib/api/evidence.api.js +172 -0
  40. package/lib/api/external-systems.api.js +8 -2
  41. package/lib/api/pipeline.api.js +5 -1
  42. package/lib/api/resource-types.api.js +5 -4
  43. package/lib/api/roles.api.js +121 -0
  44. package/lib/api/types/enterprise-knowledge.types.js +46 -0
  45. package/lib/api/types/evidence-kinds.types.js +42 -0
  46. package/lib/api/types/evidence.types.js +67 -0
  47. package/lib/api/types/resource-types.types.js +2 -0
  48. package/lib/api/types/roles.types.js +36 -0
  49. package/lib/app/certification-verify-rows.js +1 -1
  50. package/lib/app/controller-application-filter.js +36 -0
  51. package/lib/app/deploy.js +1 -1
  52. package/lib/app/list-external-systems.js +130 -0
  53. package/lib/app/list.js +20 -8
  54. package/lib/app/run.js +3 -1
  55. package/lib/app/show-display.js +8 -3
  56. package/lib/app/show-online.js +178 -0
  57. package/lib/app/show.js +39 -90
  58. package/lib/build/builder-api-docker-staging.js +47 -0
  59. package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
  60. package/lib/build/standard-docker-build.js +2 -0
  61. package/lib/certification/merge-certification-from-artifact.js +1 -1
  62. package/lib/certification/post-unified-cert-sync.js +4 -31
  63. package/lib/certification/sync-after-external-command.js +0 -1
  64. package/lib/certification/sync-system-certification.js +0 -3
  65. package/lib/channels/add-channel.js +40 -34
  66. package/lib/channels/approval-guides/chatgpt.js +33 -0
  67. package/lib/channels/approval-guides/credential-portal.js +38 -0
  68. package/lib/channels/approval-guides/index.js +110 -0
  69. package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
  70. package/lib/channels/approval-guides/slack.js +34 -0
  71. package/lib/channels/approval-guides/teams-bot.js +35 -0
  72. package/lib/channels/approval-guides/web-embed.js +32 -0
  73. package/lib/channels/channel-approval-guide.js +11 -0
  74. package/lib/channels/channel-artifact-generator.js +18 -5
  75. package/lib/channels/channel-audit.js +3 -0
  76. package/lib/channels/channel-auth-context.js +1 -1
  77. package/lib/channels/channel-description.js +59 -0
  78. package/lib/channels/channel-integration-generator.js +13 -230
  79. package/lib/channels/channel-integration-template.js +94 -0
  80. package/lib/channels/channel-runtime-resolver.js +43 -3
  81. package/lib/channels/channel-status-display.js +66 -26
  82. package/lib/channels/channel-targets.js +3 -3
  83. package/lib/cli/index.js +31 -3
  84. package/lib/cli/infra-guided.js +5 -1
  85. package/lib/cli/setup-app-external-create.js +111 -0
  86. package/lib/cli/setup-app.help.js +1 -1
  87. package/lib/cli/setup-app.js +60 -130
  88. package/lib/cli/setup-app.test-commands.js +26 -52
  89. package/lib/cli/setup-certification-commands.js +4 -4
  90. package/lib/cli/setup-certification.help.js +9 -9
  91. package/lib/cli/setup-dev.js +30 -9
  92. package/lib/cli/setup-external-system-help.js +4 -6
  93. package/lib/cli/setup-external-system.js +58 -52
  94. package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
  95. package/lib/cli/setup-infra-up-platform-action.js +3 -1
  96. package/lib/cli/setup-infra.js +15 -0
  97. package/lib/cli/setup-list.js +43 -0
  98. package/lib/cli/setup-utility-help-after.js +12 -0
  99. package/lib/cli/setup-utility-repair.js +26 -7
  100. package/lib/cli/setup-utility-validate.js +41 -2
  101. package/lib/cli/setup-utility.js +5 -3
  102. package/lib/commands/app.js +15 -43
  103. package/lib/commands/channel-add-setup.js +110 -0
  104. package/lib/commands/channel.js +42 -8
  105. package/lib/commands/datasource-sync-display.js +96 -0
  106. package/lib/commands/datasource-sync-policy.js +210 -0
  107. package/lib/commands/datasource-test-trust-cli.js +6 -6
  108. package/lib/commands/datasource-unified-test-cli.js +2 -1
  109. package/lib/commands/datasource-unified-test-cli.options.js +33 -23
  110. package/lib/commands/deploy-gate-failure-details.js +184 -0
  111. package/lib/commands/deploy-gate-orchestrator.js +368 -0
  112. package/lib/commands/dev-cli-handlers.js +7 -62
  113. package/lib/commands/dev-host-ops-params.js +91 -0
  114. package/lib/commands/dev-host-ops-poll.js +111 -0
  115. package/lib/commands/dev-host-ops.js +107 -94
  116. package/lib/commands/dev-init.js +6 -106
  117. package/lib/commands/dev-refresh.js +197 -0
  118. package/lib/commands/enterprise-knowledge.js +284 -0
  119. package/lib/commands/evidence-cli-leaves.js +250 -0
  120. package/lib/commands/evidence-kind.js +428 -0
  121. package/lib/commands/evidence.js +51 -0
  122. package/lib/commands/governance-cli-shared.js +2 -2
  123. package/lib/commands/governance-command-action.js +5 -3
  124. package/lib/commands/governance-fixture-subjects.js +85 -0
  125. package/lib/commands/governance.js +1 -1
  126. package/lib/commands/lifecycle-command-action.js +2 -2
  127. package/lib/commands/lifecycle-external.js +3 -3
  128. package/lib/commands/manifest-cli-auth.js +29 -0
  129. package/lib/commands/manifest-cli-commands.js +170 -0
  130. package/lib/commands/manifest-cli-integration-path.js +63 -0
  131. package/lib/commands/manifest.js +21 -0
  132. package/lib/commands/protection-cli-leaves.js +3 -3
  133. package/lib/commands/repair-auth-apply.js +15 -1
  134. package/lib/commands/repair-authentications-454.js +169 -0
  135. package/lib/commands/repair-capability-openapi-warnings.js +126 -0
  136. package/lib/commands/repair-datasource-apply.js +135 -0
  137. package/lib/commands/repair-datasource-auto-rbac.js +62 -1
  138. package/lib/commands/repair-datasource-http-service-contract.js +239 -0
  139. package/lib/commands/repair-datasource-operation-security.js +180 -0
  140. package/lib/commands/repair-datasource-run.js +7 -2
  141. package/lib/commands/repair-datasource-sync-operations.js +177 -0
  142. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
  143. package/lib/commands/repair-datasource.js +12 -68
  144. package/lib/commands/repair-env-template.js +11 -1
  145. package/lib/commands/repair-external-run.js +121 -31
  146. package/lib/commands/repair-internal.js +1 -1
  147. package/lib/commands/repair-openapi-export.js +156 -0
  148. package/lib/commands/repair-openapi-sync.js +33 -8
  149. package/lib/commands/repair-orchestration-datasource-split.js +259 -0
  150. package/lib/commands/repair-persist.js +22 -1
  151. package/lib/commands/repair-rbac-platform-preset.js +204 -0
  152. package/lib/commands/repair-rbac-reader-roles.js +191 -0
  153. package/lib/commands/repair-rbac.js +163 -86
  154. package/lib/commands/repair-steps.js +83 -18
  155. package/lib/commands/repair-system-permissions.js +1 -0
  156. package/lib/commands/repair.js +1 -1
  157. package/lib/commands/resource-type.js +166 -44
  158. package/lib/commands/role.js +452 -0
  159. package/lib/commands/run-post-publish-data-sync.js +68 -0
  160. package/lib/commands/setup-modes.js +1 -1
  161. package/lib/commands/setup.js +1 -1
  162. package/lib/commands/test-e2e-external.js +21 -8
  163. package/lib/commands/test-governance-cli-options.js +2 -2
  164. package/lib/commands/test-trust-cli-options.js +2 -2
  165. package/lib/commands/up-builder-api-bootstrap.js +71 -0
  166. package/lib/commands/up-builder-api-provision.js +241 -0
  167. package/lib/commands/up-builder-api.js +88 -0
  168. package/lib/commands/up-common.js +25 -1
  169. package/lib/commands/upload-credential-push-log.js +117 -0
  170. package/lib/commands/upload-data-sync-finalize.js +60 -0
  171. package/lib/commands/upload-probe.js +66 -0
  172. package/lib/commands/upload-publish-context.js +4 -1
  173. package/lib/commands/upload-sidecar-followups.js +55 -27
  174. package/lib/commands/upload.js +116 -157
  175. package/lib/commands/validate-json.js +230 -0
  176. package/lib/commands/verify-governance-combined-external.js +1 -1
  177. package/lib/commands/verify-governance-db.js +2 -2
  178. package/lib/commands/verify-operations-command-action.js +2 -2
  179. package/lib/commands/verify-operations-step-plan.js +79 -41
  180. package/lib/commands/verify-operations-steps.js +2 -2
  181. package/lib/commands/verify-trust-command-action.js +1 -1
  182. package/lib/commands/wizard-core.js +1 -1
  183. package/lib/commands/wizard-headless.js +2 -1
  184. package/lib/core/admin-secrets.js +2 -6
  185. package/lib/core/audit-logger.js +1 -1
  186. package/lib/core/secrets-env-content.js +10 -4
  187. package/lib/core/secrets-env-write.js +2 -13
  188. package/lib/core/secrets-load.js +1 -3
  189. package/lib/datasource/agent-trust-run.js +3 -3
  190. package/lib/datasource/capability/relate-operations.js +1 -1
  191. package/lib/datasource/deploy.js +3 -1
  192. package/lib/datasource/test-e2e.js +6 -1
  193. package/lib/datasource/unified-validation-run-body.js +4 -1
  194. package/lib/datasource/unified-validation-run.js +1 -1
  195. package/lib/deployment/deploy-poll-ui.js +73 -12
  196. package/lib/deployment/deployer-poll-run.js +113 -0
  197. package/lib/deployment/deployer.js +17 -87
  198. package/lib/evidence/dataplane-context.js +21 -0
  199. package/lib/evidence/evidence-display.js +78 -0
  200. package/lib/evidence/evidence-service.js +392 -0
  201. package/lib/external-system/deploy.js +290 -112
  202. package/lib/external-system/download.js +7 -3
  203. package/lib/external-system/test-execution.js +1 -1
  204. package/lib/external-system/test-system-level.js +8 -10
  205. package/lib/external-system/test.js +12 -6
  206. package/lib/generator/deploy-script.js +73 -0
  207. package/lib/generator/external.js +2 -1
  208. package/lib/generator/helpers.js +13 -5
  209. package/lib/generator/index.js +17 -2
  210. package/lib/generator/split-variables.js +9 -3
  211. package/lib/generator/wizard.js +3 -36
  212. package/lib/infrastructure/helpers-docker-check.js +6 -0
  213. package/lib/infrastructure/helpers.js +1 -1
  214. package/lib/internal/fs-real-sync.js +22 -1
  215. package/lib/internal/node-fs.js +2 -0
  216. package/lib/lifecycle/lifecycle-governance-options.js +1 -1
  217. package/lib/lifecycle/verify-step-progress.js +1 -1
  218. package/lib/programmatic/access-log.js +26 -0
  219. package/lib/programmatic/auth-config.js +45 -0
  220. package/lib/programmatic/bearer-auth.js +176 -0
  221. package/lib/programmatic/builder-api-request.js +175 -0
  222. package/lib/programmatic/builder-api-route-dispatch.js +82 -0
  223. package/lib/programmatic/builder-api-runtime-config.js +42 -0
  224. package/lib/programmatic/builder-api-server.js +230 -0
  225. package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
  226. package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
  227. package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
  228. package/lib/programmatic/builder-help-envelope.js +36 -0
  229. package/lib/programmatic/builder-help-fixtures.js +200 -0
  230. package/lib/programmatic/builder-help-governance.js +172 -0
  231. package/lib/programmatic/builder-help-schema-catalog.js +92 -0
  232. package/lib/programmatic/builder-help.js +361 -0
  233. package/lib/programmatic/capability-registry.js +77 -0
  234. package/lib/programmatic/command-options.js +32 -0
  235. package/lib/programmatic/enterprise-mcp-client.js +114 -0
  236. package/lib/programmatic/http-problem-details.js +99 -0
  237. package/lib/programmatic/http-route-match.js +40 -0
  238. package/lib/programmatic/idempotency-cache.js +69 -0
  239. package/lib/programmatic/index.js +53 -0
  240. package/lib/programmatic/integration-path-scope.js +39 -0
  241. package/lib/programmatic/log-redaction.js +66 -0
  242. package/lib/programmatic/manifest-get-section.js +146 -0
  243. package/lib/programmatic/manifest-patch-section.js +252 -0
  244. package/lib/programmatic/manifest-repair.js +122 -0
  245. package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
  246. package/lib/programmatic/manifest-section-io.js +225 -0
  247. package/lib/programmatic/manifest-section-quality.js +171 -0
  248. package/lib/programmatic/manifest-section-registry-data.js +269 -0
  249. package/lib/programmatic/manifest-section-registry.js +222 -0
  250. package/lib/programmatic/nest-http-bridge.js +34 -0
  251. package/lib/programmatic/openapi-component-schemas.js +68 -0
  252. package/lib/programmatic/openapi-description-enricher.js +117 -0
  253. package/lib/programmatic/openapi-descriptions.js +190 -0
  254. package/lib/programmatic/openapi-docs-serving.js +123 -0
  255. package/lib/programmatic/openapi-help-schemas.js +63 -0
  256. package/lib/programmatic/openapi-manifest-schemas.js +141 -0
  257. package/lib/programmatic/openapi-operation-bindings.js +274 -0
  258. package/lib/programmatic/openapi-request-schemas.js +155 -0
  259. package/lib/programmatic/openapi-result-schemas.js +493 -0
  260. package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
  261. package/lib/programmatic/openapi-schema-descriptions-core.js +162 -0
  262. package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
  263. package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
  264. package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
  265. package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
  266. package/lib/programmatic/openapi-schema-helpers.js +108 -0
  267. package/lib/programmatic/openapi-spec.js +203 -0
  268. package/lib/programmatic/orchestration-openapi-meta.js +159 -0
  269. package/lib/programmatic/platform-rbac-catalog.js +90 -0
  270. package/lib/programmatic/request-timeout.js +53 -0
  271. package/lib/programmatic/route-handler-map.js +143 -0
  272. package/lib/programmatic/route-handlers-context.js +29 -0
  273. package/lib/programmatic/route-handlers.js +33 -0
  274. package/lib/programmatic/run-certify.js +57 -0
  275. package/lib/programmatic/run-enterprise-mcp.js +32 -0
  276. package/lib/programmatic/run-lifecycle.js +29 -0
  277. package/lib/programmatic/run-repair.js +41 -0
  278. package/lib/programmatic/run-repository-emcp.js +62 -0
  279. package/lib/programmatic/run-template-workspace.js +74 -0
  280. package/lib/programmatic/run-test.js +49 -0
  281. package/lib/programmatic/run-upload.js +63 -0
  282. package/lib/programmatic/run-validate.js +53 -0
  283. package/lib/programmatic/run-wizard.js +40 -0
  284. package/lib/programmatic/system-key.js +48 -0
  285. package/lib/programmatic/wizard-config-normalize.js +118 -0
  286. package/lib/programmatic/workspace-cleanup.js +128 -0
  287. package/lib/programmatic/workspace-context.js +145 -0
  288. package/lib/programmatic/workspace-lock.js +75 -0
  289. package/lib/programmatic/workspace-meta.js +64 -0
  290. package/lib/programmatic/workspace-ops.js +149 -0
  291. package/lib/protection/run-commands-upload-sync.js +35 -0
  292. package/lib/protection/run-commands.js +2 -20
  293. package/lib/protection/upload-batch.js +11 -7
  294. package/lib/resolvers/evidence-kind-file.js +230 -0
  295. package/lib/resolvers/resource-type-file.js +58 -1
  296. package/lib/resolvers/role-file.js +227 -0
  297. package/lib/schema/application-schema.json +22 -2
  298. package/lib/schema/external-datasource.schema.json +245 -2
  299. package/lib/schema/external-system.schema.json +259 -119
  300. package/lib/schema/flag-map-validation-run.json +3 -0
  301. package/lib/schema/infra.parameter.yaml +25 -1
  302. package/lib/schema/type/credential-field-registry.json +21 -5
  303. package/lib/schema/type/document-storage.json +9 -0
  304. package/lib/utils/agent-trust-run-display.js +1 -1
  305. package/lib/utils/api.js +8 -2
  306. package/lib/utils/app-path-resolve.js +168 -0
  307. package/lib/utils/app-register-config.js +4 -3
  308. package/lib/utils/authentication-env-template.js +222 -0
  309. package/lib/utils/cli-sync-options.js +62 -10
  310. package/lib/utils/cli-utils.js +15 -3
  311. package/lib/utils/cli-workspace-options.js +29 -0
  312. package/lib/utils/compose-generate-docker-compose.js +102 -0
  313. package/lib/utils/configuration-env-resolver.js +203 -27
  314. package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
  315. package/lib/utils/datasource-test-run-certification-debug.js +130 -0
  316. package/lib/utils/datasource-test-run-debug-display.js +2 -0
  317. package/lib/utils/datasource-test-run-debug-slice.js +7 -0
  318. package/lib/utils/datasource-test-run-display.js +2 -1
  319. package/lib/utils/dev-ca-install.js +5 -6
  320. package/lib/utils/dev-config.js +2 -2
  321. package/lib/utils/dev-init-ssh-merge.js +165 -23
  322. package/lib/utils/dev-list-sort.js +145 -0
  323. package/lib/utils/dev-pin-share-instructions.js +110 -0
  324. package/lib/utils/dev-platform-tls.js +0 -63
  325. package/lib/utils/dev-ssh-config-helper.js +177 -33
  326. package/lib/utils/docker-build.js +46 -27
  327. package/lib/utils/docker-daemon-tls-ca.js +1 -1
  328. package/lib/utils/docker-exec.js +91 -6
  329. package/lib/utils/enterprise-knowledge-paths.js +142 -0
  330. package/lib/utils/env-copy.js +3 -4
  331. package/lib/utils/env-dotenv-format.js +103 -0
  332. package/lib/utils/error-formatters/error-parser.js +0 -3
  333. package/lib/utils/external-env-template.js +5 -2
  334. package/lib/utils/external-system-display.js +5 -1
  335. package/lib/utils/external-system-readiness-compact-blocks.js +248 -0
  336. package/lib/utils/external-system-readiness-compact-display.js +324 -0
  337. package/lib/utils/external-system-readiness-core.js +16 -0
  338. package/lib/utils/external-system-readiness-deploy-display.js +29 -11
  339. package/lib/utils/external-system-readiness-display-internals.js +3 -1
  340. package/lib/utils/external-system-readiness-display.js +20 -30
  341. package/lib/utils/external-system-system-test-tty-certification.js +135 -0
  342. package/lib/utils/external-system-system-test-tty.js +5 -41
  343. package/lib/utils/health-check-request.js +2 -3
  344. package/lib/utils/help-builder.js +9 -1
  345. package/lib/utils/host-ops-job-labels.js +236 -0
  346. package/lib/utils/host-ops-job-result.js +61 -0
  347. package/lib/utils/host-ops-poll-ui.js +163 -0
  348. package/lib/utils/image-name.js +22 -4
  349. package/lib/utils/integration-path-resolve.js +112 -0
  350. package/lib/utils/logger.js +37 -4
  351. package/lib/utils/manifest-source-emit.js +1 -1
  352. package/lib/utils/paths-reload-source.js +148 -0
  353. package/lib/utils/paths-system-builder-keys.js +25 -0
  354. package/lib/utils/paths.js +183 -30
  355. package/lib/utils/pipeline-upload-auth-retry.js +4 -0
  356. package/lib/utils/postgres-platform-bootstrap.js +24 -17
  357. package/lib/utils/postgres-wipe.js +5 -2
  358. package/lib/utils/remote-dev-auth.js +39 -4
  359. package/lib/utils/resolve-docker-image-ref.js +36 -6
  360. package/lib/utils/runtime-configuration-values.js +64 -2
  361. package/lib/utils/secrets-helpers.js +5 -1
  362. package/lib/utils/ssh-known-hosts.js +130 -0
  363. package/lib/utils/test-target-cli-options.js +75 -0
  364. package/lib/utils/token-manager.js +16 -0
  365. package/lib/utils/upload-sync-options.js +20 -2
  366. package/lib/utils/validation-run-request.js +11 -2
  367. package/lib/validation/external-manifest-validator.js +11 -1
  368. package/lib/validation/openapi-contract-surface-validator.js +430 -0
  369. package/lib/validation/openapi-contract-vendor-validation.js +238 -0
  370. package/lib/validation/validate-external-file.js +160 -0
  371. package/lib/validation/validate.js +6 -117
  372. package/lib/validation/validator.js +6 -5
  373. package/package.json +76 -37
  374. package/packages/builder-api/README.md +120 -0
  375. package/packages/builder-api/package.json +30 -0
  376. package/packages/builder-api/src/app.module.ts +7 -0
  377. package/packages/builder-api/src/auth/auth.module.ts +5 -0
  378. package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
  379. package/packages/builder-api/src/main.ts +16 -0
  380. package/packages/builder-api/tsconfig.json +15 -0
  381. package/scripts/check-builder-api-architecture-grep.js +79 -0
  382. package/scripts/docker_image_content_gate.js +47 -0
  383. package/scripts/docker_image_content_gate.sh +5 -0
  384. package/scripts/export-builder-api-evidence.js +262 -0
  385. package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
  386. package/scripts/lib/builder-api-docker-staging-core.js +183 -0
  387. package/scripts/lib/docker-image-content-gate-core.js +166 -0
  388. package/scripts/lib/plan-actor.js +109 -0
  389. package/scripts/lib/plan-config.js +20 -0
  390. package/scripts/lib/plan-gates.js +154 -0
  391. package/scripts/lib/plan-meta.js +104 -0
  392. package/scripts/lib/plan-parse.js +162 -0
  393. package/scripts/lib/plan-prevalidate-gates.js +337 -0
  394. package/scripts/lib/plan-run-core.js +125 -0
  395. package/scripts/lib/plan-run-report.js +119 -0
  396. package/scripts/plan-approve.js +24 -0
  397. package/scripts/plan-archive.js +49 -0
  398. package/scripts/plan-run.js +13 -0
  399. package/scripts/plan-set-actor.js +21 -0
  400. package/scripts/plan-validate.js +80 -0
  401. package/scripts/pnpm/af.mjs +110 -0
  402. package/scripts/pnpm/check-quiet.mjs +32 -0
  403. package/scripts/pnpm/dev-install.mjs +29 -0
  404. package/scripts/pnpm/dev-reload.mjs +18 -0
  405. package/scripts/pnpm/help.mjs +55 -0
  406. package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
  407. package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
  408. package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
  409. package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
  410. package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
  411. package/scripts/pnpm/lib/spinner.mjs +42 -0
  412. package/scripts/stage_builder_api_for_docker.js +65 -0
  413. package/scripts/sync-builder-api-template.js +44 -0
  414. package/templates/README.md +3 -0
  415. package/templates/applications/builder-api/Dockerfile +38 -0
  416. package/templates/applications/builder-api/application.yaml +75 -0
  417. package/templates/applications/builder-api/env.template +48 -0
  418. package/templates/applications/dataplane/application.yaml +27 -5
  419. package/templates/applications/dataplane/env.template +38 -15
  420. package/templates/applications/dataplane/rbac.yaml +85 -3
  421. package/templates/applications/miso-controller/application.yaml +10 -1
  422. package/templates/applications/miso-controller/env.template +11 -10
  423. package/templates/applications/miso-controller/rbac.yaml +72 -0
  424. package/templates/channels/README.md +18 -0
  425. package/templates/channels/ai-fabrix-icon.jpg +0 -0
  426. package/templates/channels/chatgpt/install.template.md.hbs +21 -24
  427. package/templates/channels/chatgpt/integration/README.md +11 -0
  428. package/templates/channels/chatgpt/integration/application.json +15 -0
  429. package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
  430. package/templates/channels/chatgpt/integration/env.template +4 -0
  431. package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
  432. package/templates/channels/microsoft-copilot/integration/README.md +11 -0
  433. package/templates/channels/microsoft-copilot/integration/application.json +15 -0
  434. package/templates/channels/microsoft-copilot/integration/env.template +6 -0
  435. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
  436. package/templates/channels/slack/install.template.md.hbs +48 -18
  437. package/templates/channels/slack/integration/README.md +38 -0
  438. package/templates/channels/slack/integration/application.json +18 -0
  439. package/templates/channels/slack/integration/env.template +29 -0
  440. package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
  441. package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
  442. package/templates/channels/slack/integration/slack-system.json +144 -0
  443. package/templates/channels/slack/manifest.template.json.hbs +20 -10
  444. package/templates/channels/teams-bot/install.template.md.hbs +31 -17
  445. package/templates/channels/teams-bot/integration/README.md +18 -0
  446. package/templates/channels/teams-bot/integration/application.json +17 -0
  447. package/templates/channels/teams-bot/integration/env.template +5 -0
  448. package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
  449. package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
  450. package/templates/channels/web-embed/install.template.md.hbs +16 -26
  451. package/templates/channels/web-embed/integration/README.md +11 -0
  452. package/templates/channels/web-embed/integration/application.json +15 -0
  453. package/templates/channels/web-embed/integration/env.template +4 -0
  454. package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
  455. package/templates/openapi/redoc_page.html +86 -0
  456. package/templates/python/docker-compose.hbs +11 -0
  457. package/templates/python/requirements.txt +2 -2
  458. package/templates/typescript/docker-compose.hbs +11 -0
  459. package/lib/certification/cli-cert-sync-skip.js +0 -21
@@ -20,7 +20,7 @@ function setupVerifyOperationsCommand(program) {
20
20
  .option('-e, --env <env>', 'Environment: dev, tst, or pro', 'dev')
21
21
  .option('-v, --verbose', 'Readiness breakdown and verification step checklist')
22
22
  .option('-d, --debug', 'Write debug logs under integration/<systemKey>/logs/')
23
- .option('--no-sync', 'Skip publishing local integration files before dataplane steps')
23
+ .option('--no-publish', 'Skip publishing local integration files before dataplane steps')
24
24
  .option(
25
25
  '--force',
26
26
  'With default sync, pass force to upload (same as aifabrix upload --force)'
@@ -39,7 +39,7 @@ function setupVerifyTrustCommand(program) {
39
39
  .option('-e, --env <env>', 'Environment: dev, tst, or pro', 'dev')
40
40
  .option('-v, --verbose', 'Per-datasource breakdown')
41
41
  .option('-d, --debug', 'Write debug log under integration/<systemKey>/logs/')
42
- .option('--no-sync', 'Skip publishing local integration files before validate')
42
+ .option('--no-publish', 'Skip publishing local integration files before validate')
43
43
  .option(
44
44
  '--force',
45
45
  'With default sync, pass force to upload (same as aifabrix upload --force)'
@@ -61,7 +61,7 @@ function setupVerifyGovernanceCommand(program) {
61
61
  .option('-e, --env <env>', 'Environment: dev, tst, or pro', 'dev')
62
62
  .option('-v, --verbose', 'Per-datasource breakdown and pipeline detail')
63
63
  .option('-d, --debug', 'Write debug logs under integration/<systemKey>/logs/')
64
- .option('--no-sync', 'Skip publishing local integration files before dataplane steps')
64
+ .option('--no-publish', 'Skip publishing local integration files before dataplane steps')
65
65
  .option(
66
66
  '--force',
67
67
  'With default sync, pass force to upload (same as aifabrix upload --force)'
@@ -108,7 +108,7 @@ function setupLifecycleCommand(program) {
108
108
  .option('-v, --verbose', 'Per-datasource breakdown in the report')
109
109
  .option('-d, --debug', 'Write debug logs under integration/<systemKey>/logs/ when --run')
110
110
  .option('--run', 'Run missing verify steps, then print certification report')
111
- .option('--no-sync', 'With --run, skip publishing local integration files before verify')
111
+ .option('--no-publish', 'With --run, skip publishing local integration files before verify')
112
112
  .option(
113
113
  '--force',
114
114
  'With default sync on --run, pass force to upload (same as aifabrix upload --force)'
@@ -8,7 +8,7 @@ const VERIFY_OPERATIONS_HELP_AFTER = `
8
8
  Examples:
9
9
  $ aifabrix verify-operations hubspot
10
10
  $ aifabrix verify-operations hubspot -v
11
- $ aifabrix verify-operations hubspot --no-sync
11
+ $ aifabrix verify-operations hubspot --no-publish
12
12
 
13
13
  Notes:
14
14
  - Orchestrates validate → test → test-integration → test-e2e for the system.
@@ -23,12 +23,12 @@ const VERIFY_TRUST_HELP_AFTER = `
23
23
  Examples:
24
24
  $ aifabrix verify-trust hubspot
25
25
  $ aifabrix verify-trust hubspot -v --revalidate
26
- $ aifabrix verify-trust hubspot --no-sync --json
26
+ $ aifabrix verify-trust hubspot --no-publish --json
27
27
 
28
28
  Notes:
29
29
  - For one datasource: aifabrix datasource verify-trust <datasourceKey>
30
30
  - Does not call external vendor APIs (use verify-operations / test-e2e for connectivity).
31
- - Local integration files are published before run unless --no-sync.
31
+ - Local integration files are published before run unless --no-publish.
32
32
  `;
33
33
 
34
34
  const VERIFY_GOVERNANCE_HELP_AFTER = `
@@ -38,7 +38,7 @@ Examples:
38
38
  $ aifabrix verify-governance hubspot-e2e --certification-profile gold --json
39
39
 
40
40
  Notes:
41
- - All-in-one: publishes local integration (unless --no-sync), generates packs on the dataplane,
41
+ - All-in-one: publishes local integration (unless --no-publish), generates packs on the dataplane,
42
42
  then runs governance verification (dataplane-first; no local YAML upload).
43
43
  - Requires at least one --subject-user-id or --subject-email (repeatable or comma-separated).
44
44
  - Prefer this over separate generate + verify when certifying an integration.
@@ -50,12 +50,12 @@ const GOVERNANCE_GENERATE_HELP_AFTER = `
50
50
  Examples:
51
51
  $ aifabrix governance generate hubspot-e2e --subject-email us.sales@example.com
52
52
  $ aifabrix governance generate hubspot-e2e --subject-user-id user-a --subject-user-id user-b -v
53
- $ aifabrix governance generate hubspot-e2e --certification-profile gold --no-sync
53
+ $ aifabrix governance generate hubspot-e2e --certification-profile gold --no-publish
54
54
 
55
55
  Notes:
56
56
  - Dataplane generates keys, coverage, and generationState; the CLI never authors partitions locally.
57
57
  - Requires at least one --subject-user-id or --subject-email per datasource fan-out.
58
- - Publishes local integration files before generate unless --no-sync.
58
+ - Publishes local integration files before generate unless --no-publish.
59
59
  `;
60
60
 
61
61
  const GOVERNANCE_VERIFY_HELP_AFTER = `
@@ -74,7 +74,7 @@ Notes:
74
74
  const GOVERNANCE_UPLOAD_HELP_AFTER = `
75
75
  Examples:
76
76
  $ aifabrix governance upload hubspot-e2e
77
- $ aifabrix governance upload hubspot-e2e --no-sync
77
+ $ aifabrix governance upload hubspot-e2e --no-publish
78
78
 
79
79
  Notes:
80
80
  - Expert path: pushes integration/<systemKey>/scenarios/*.yaml to the dataplane.
@@ -98,13 +98,13 @@ Examples:
98
98
  $ aifabrix lifecycle hubspot
99
99
  $ aifabrix lifecycle hubspot -v
100
100
  $ aifabrix lifecycle hubspot --run
101
- $ aifabrix lifecycle hubspot --run --no-sync
101
+ $ aifabrix lifecycle hubspot --run --no-publish
102
102
  $ aifabrix lifecycle hubspot-e2e --run --subject-email us.sales@example.com
103
103
  $ aifabrix lifecycle hubspot-e2e --run --subject-email a@x.com,b@y.com -v
104
104
 
105
105
  Notes:
106
106
  - Default: certification report only (GET persisted pillar results from dataplane).
107
- - --run executes missing verify steps, then prints the report (publishes local files first unless --no-sync).
107
+ - --run executes missing verify steps, then prints the report (publishes local files first unless --no-publish).
108
108
  - With --run, --subject-email / --subject-user-id generate and verify governance packs (same as verify-governance).
109
109
  - Repeat the flag or use comma-separated values: --subject-email a@x.com,b@y.com
110
110
  - One-shot cert path: lifecycle <systemKey> --run --subject-email <email>
@@ -12,7 +12,8 @@ const config = require('../core/config');
12
12
  const logger = require('../utils/logger');
13
13
  const { handleCommandError } = require('../utils/cli-utils');
14
14
  const { setupDevPathAndFormatCommands } = require('./setup-dev-path-commands');
15
- const { runDevInit, runDevRefresh } = require('../commands/dev-init');
15
+ const { runDevInit } = require('../commands/dev-init');
16
+ const { runDevRefresh, ensureDevCertFreshIfDue } = require('../commands/dev-refresh');
16
17
  const { displayDevConfig } = require('../commands/dev-show-display');
17
18
  const {
18
19
  handleDevList,
@@ -49,11 +50,21 @@ Examples:
49
50
  Requires a configured remote Builder Server and an admin client certificate (same machine setup as dev list / dev pin). After add, run dev pin <id> once to create a PIN for aifabrix dev init.
50
51
  `;
51
52
 
53
+ /** Appended to `dev list --help` (sort examples). */
54
+ const DEV_LIST_HELP_AFTER = `
55
+ Examples:
56
+ $ aifabrix dev list
57
+ $ aifabrix dev list --sort id
58
+ $ aifabrix dev list --sort -until
59
+
60
+ Sort fields: id, name, email, until. Prefix - for descending (default: name ascending).
61
+ `;
62
+
52
63
  /** Appended to `aifabrix dev --help` (overview; keep subcommand .description lines short). */
53
64
  const DEV_GROUP_HELP_AFTER = `
54
65
  Categories:
55
66
  Local config show, set-id, set-scoped-resources, set-env-config, set-home, set-work, set-format, print-home, print-work
56
- Onboarding init (PIN onboarding), refresh (sync settings / renew cert)
67
+ Onboarding init (PIN onboarding), refresh (sync settings / renew cert); show auto-renews when due
57
68
  Remote admin list, add, update, pin, delete, platform-install, platform-update, platform-install-cli (need remote-server + client cert in ~/.aifabrix)
58
69
  Sync / stop down (Mutagen; optional --apps for containers)
59
70
 
@@ -84,8 +95,8 @@ Examples:
84
95
  $ aifabrix dev pin 02 --hosts-ip 192.168.1.25
85
96
  $ aifabrix dev pin (uses developer-id from config)
86
97
 
87
- Prints copy-paste commands for the developer: full dev init, hosts-file variant, and dev init --pin
88
- when their config already has remote-server + developer-id.
98
+ Prints a shareable block for the developer: Node.js + Builder CLI install (Windows / Linux & macOS),
99
+ then copy-paste dev init commands (standard, hosts-file variant, and dev init --pin when config exists).
89
100
  `;
90
101
 
91
102
  /** Appended to `dev delete --help`. */
@@ -168,9 +179,10 @@ async function handleSetScopedResources(value) {
168
179
  function setupDevShowAndSetId(dev) {
169
180
  dev
170
181
  .command('show')
171
- .description('Show dev ports and ~/.aifabrix config')
182
+ .description('Show dev ports and ~/.aifabrix config (auto-renews cert when due)')
172
183
  .action(async() => {
173
184
  try {
185
+ await ensureDevCertFreshIfDue();
174
186
  const devId = await config.getDeveloperId();
175
187
  await displayDevConfig(devId);
176
188
  } catch (error) {
@@ -286,9 +298,14 @@ function setupDevListAddCommands(dev) {
286
298
  dev
287
299
  .command('list')
288
300
  .description('List developers (remote Builder Server)')
289
- .action(async() => {
301
+ .option(
302
+ '--sort <field>',
303
+ 'Sort field/direction (id|name|email|until; prefix - for descending; default name)'
304
+ )
305
+ .addHelpText('after', DEV_LIST_HELP_AFTER)
306
+ .action(async(options) => {
290
307
  try {
291
- await handleDevList();
308
+ await handleDevList(options);
292
309
  } catch (error) {
293
310
  handleCommandError(error, 'dev list');
294
311
  process.exit(1);
@@ -311,6 +328,8 @@ function setupDevListAddCommands(dev) {
311
328
  .option('--skip-cert', 'Skip certificate step in provision job')
312
329
  .option('--skip-platform', 'Skip platform install in provision job')
313
330
  .option('--skip-cli', 'Skip Builder CLI install in provision job')
331
+ .option('--wait', 'Poll until provision job completes', true)
332
+ .option('--no-wait', 'Return after provision job is queued')
314
333
  .addHelpText('after', DEV_ADD_HELP_AFTER)
315
334
  .action(async(options) => {
316
335
  try {
@@ -384,6 +403,9 @@ function setupDevUpdatePinDeleteCommands(dev) {
384
403
  .description('Remove developer from host and server (admin)')
385
404
  .option('--db-only', 'Remove from server database only (legacy behaviour)')
386
405
  .option('-y, --yes', 'Skip confirmation prompt')
406
+ .option('--wait', 'Poll until removal completes on the host', true)
407
+ .option('--no-wait', 'Return after removal job is queued')
408
+ .option('--json', 'JSON output (includes job result when --wait)')
387
409
  .addHelpText('after', DEV_DELETE_HELP_AFTER)
388
410
  .action(async(developerId, options) => {
389
411
  try {
@@ -393,8 +415,6 @@ function setupDevUpdatePinDeleteCommands(dev) {
393
415
  process.exit(1);
394
416
  }
395
417
  });
396
-
397
- setupDevDownCommand(dev);
398
418
  }
399
419
 
400
420
  /**
@@ -452,6 +472,7 @@ function setupDevPlatformCommands(dev) {
452
472
  function setupDevUserCommands(dev) {
453
473
  setupDevListAddCommands(dev);
454
474
  setupDevUpdatePinDeleteCommands(dev);
475
+ setupDevDownCommand(dev);
455
476
  setupDevPlatformCommands(dev);
456
477
  }
457
478
 
@@ -8,24 +8,22 @@ const UPLOAD_HELP_AFTER = `
8
8
  Examples:
9
9
  # Publish integration/<systemKey>/ to the dataplane (typical lab flow after validate + resolve)
10
10
  $ aifabrix upload hubspot-demo
11
- $ aifabrix upload hubspot-demo --verbose
11
+ $ aifabrix upload hubspot-demo -v
12
12
  $ aifabrix upload hubspot-demo --probe
13
13
 
14
14
  # Build and validate payload only (no API calls)
15
15
  $ aifabrix upload hubspot-demo --dry-run
16
16
 
17
- # Short summary after publish
18
- $ aifabrix upload hubspot-demo --minimal
19
-
20
17
  # Protection manifests (integration/.protection/ at repo root)
21
18
  $ aifabrix upload .protection
22
- $ aifabrix upload .protection --warnings-as-errors --no-sync
19
+ $ aifabrix upload .protection --warnings-as-errors
23
20
 
24
21
  Notes:
25
22
  - Requires login (aifabrix auth status).
26
23
  - Reads files under integration/<systemKey>/ (system JSON, datasources, credentials).
24
+ - Default output is a compact readiness summary; use -v for expanded detail and server-side validate warnings.
27
25
  - --probe runs dataplane runtime checks after publish (slower; common in Session 1).
28
- - test-e2e and test-integration publish local files first by default; use --no-sync on those commands to skip.
26
+ - test-e2e and test-integration publish local files first by default; use --no-publish on those commands to skip.
29
27
  - After dimension/FK edits on active datasources, use --force (or test-e2e / test-integration / datasource test-* with --sync --force).
30
28
  - For one datasource only: aifabrix datasource upload <datasourceKey>
31
29
  `;
@@ -15,8 +15,7 @@
15
15
  */
16
16
 
17
17
  const { handleCommandError } = require('../utils/cli-utils');
18
- const { cliOptsSkipSync } = require('../utils/cli-sync-options');
19
- const { cliOptsSkipCertSync } = require('../certification/cli-cert-sync-skip');
18
+ const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
20
19
  const { TEST_INTEGRATION_HELP_AFTER } = require('./setup-app.help');
21
20
  const {
22
21
  UPLOAD_HELP_AFTER,
@@ -24,6 +23,39 @@ const {
24
23
  DELETE_HELP_AFTER
25
24
  } = require('./setup-external-system-help');
26
25
 
26
+ async function handleUploadCommandAction(systemKey, options) {
27
+ const { isProtectionScope } = require('../protection/scope');
28
+ if (isProtectionScope(systemKey)) {
29
+ const { uploadProtectionBatchCommand } = require('../protection/upload-batch');
30
+ const logger = require('../utils/logger');
31
+ const code = await uploadProtectionBatchCommand(
32
+ {
33
+ env: options.env,
34
+ dryRun: options.dryRun === true,
35
+ sync: options.sync === true,
36
+ json: options.json === true,
37
+ verbose: options.verbose === true,
38
+ warningsAsErrors: options.warningsAsErrors === true
39
+ },
40
+ logger
41
+ );
42
+ if (code !== 0) {
43
+ process.exit(code);
44
+ }
45
+ return;
46
+ }
47
+ const upload = require('../commands/upload');
48
+ const probeTimeout =
49
+ options.probeTimeout === undefined || options.probeTimeout === null
50
+ ? 120000
51
+ : Number(options.probeTimeout);
52
+ await upload.uploadExternalSystem(systemKey, {
53
+ ...options,
54
+ probeTimeout: Number.isFinite(probeTimeout) ? probeTimeout : 120000,
55
+ pathOptions: {}
56
+ });
57
+ }
58
+
27
59
  function setupDownloadCommand(program) {
28
60
  program.command('download <systemKey>')
29
61
  .description('Pull external system from dataplane into integration/<key>/')
@@ -31,6 +63,11 @@ function setupDownloadCommand(program) {
31
63
  .option('--format <format>', 'Output format: json | yaml (default: yaml or config format)')
32
64
  .option('--dry-run', 'Show what would be downloaded without actually downloading')
33
65
  .option('--force', 'Overwrite existing README.md without prompting')
66
+ .option(
67
+ '--version <target>',
68
+ 'Manifest version to download (running default; latest or explicit id when supported)',
69
+ 'running'
70
+ )
34
71
  .action(async(systemKey, options) => {
35
72
  try {
36
73
  const config = require('../core/config');
@@ -52,53 +89,22 @@ function setupUploadCommand(program) {
52
89
  .description('Validate, publish to dataplane, and register with controller (draft application); or upload .protection batch')
53
90
  .addHelpText('after', UPLOAD_HELP_AFTER)
54
91
  .option('--dry-run', 'Validate and build payload only; no API calls')
55
- .option('--no-sync', 'For .protection: skip datasource sync after upload')
92
+ .option(
93
+ '--sync',
94
+ 'After publish, run full datasource data sync for every datasource on the system (default: bootstrap-if-empty only)'
95
+ )
56
96
  .option('--json', 'For .protection: JSON output')
57
97
  .option('--warnings-as-errors', 'For .protection: pass strict=true to dataplane validate')
58
- .option('-v, --verbose', 'Run server-side pipeline validate and print warnings before publish')
98
+ .option('-v, --verbose', 'Expanded upload summary and server-side pipeline validate warnings before publish')
59
99
  .option('--probe', 'After publish, run dataplane runtime checks (validation/run); slower')
60
- .option('--minimal', 'Print only a short readiness summary after upload')
61
100
  .option('--probe-timeout <ms>', 'Timeout for --probe (default: 120000)', '120000')
62
- .option(
63
- '--no-cert-sync',
64
- 'Skip updating the system file certification block from the dataplane active certificate after publish'
65
- )
66
101
  .option(
67
102
  '--force',
68
103
  'Bypass schema guards on active datasources during publish (dangerous; shows a warning)'
69
104
  )
70
105
  .action(async(systemKey, options) => {
71
106
  try {
72
- const { isProtectionScope } = require('../protection/scope');
73
- if (isProtectionScope(systemKey)) {
74
- const { uploadProtectionBatchCommand } = require('../protection/upload-batch');
75
- const logger = require('../utils/logger');
76
- const code = await uploadProtectionBatchCommand(
77
- {
78
- env: options.env,
79
- dryRun: options.dryRun === true,
80
- noSync: options.noSync === true,
81
- json: options.json === true,
82
- verbose: options.verbose === true,
83
- warningsAsErrors: options.warningsAsErrors === true
84
- },
85
- logger
86
- );
87
- if (code !== 0) {
88
- process.exit(code);
89
- }
90
- return;
91
- }
92
- const upload = require('../commands/upload');
93
- const probeTimeout =
94
- options.probeTimeout === undefined || options.probeTimeout === null
95
- ? 120000
96
- : Number(options.probeTimeout);
97
- await upload.uploadExternalSystem(systemKey, {
98
- ...options,
99
- noCertSync: cliOptsSkipCertSync(options),
100
- probeTimeout: Number.isFinite(probeTimeout) ? probeTimeout : 120000
101
- });
107
+ await handleUploadCommandAction(systemKey, options);
102
108
  } catch (error) {
103
109
  handleCommandError(error, 'upload');
104
110
  process.exit(1);
@@ -181,7 +187,7 @@ async function runExternalSystemTestIntegration(appName, options) {
181
187
  environment: options.env || options.environment,
182
188
  debug: options.debug,
183
189
  perDatasource: options.perDatasource,
184
- noSync: cliOptsSkipSync(options)
190
+ noPublish: cliOptsSkipPublish(options)
185
191
  };
186
192
  const results = await test.testExternalSystemIntegration(appName, opts);
187
193
  test.displayIntegrationTestResults(results, options.verbose, { debug: options.debug, runType: 'integration' });
@@ -192,9 +198,6 @@ async function runExternalSystemTestIntegration(appName, options) {
192
198
  requireCert: options.requireCert === true
193
199
  });
194
200
  if (exitCode !== 0) process.exit(exitCode);
195
- if (cliOptsSkipCertSync(options)) return;
196
- const { trySyncCertificationFromDataplaneForExternalApp } = require('../certification/sync-after-external-command');
197
- await trySyncCertificationFromDataplaneForExternalApp(appName, 'test-integration');
198
201
  }
199
202
 
200
203
  /**
@@ -238,10 +241,7 @@ function setupExternalSystemTestCommands(program) {
238
241
  .option('-e, --env <env>', 'Environment: dev, tst, or pro (builder: dev/tst for container)', 'dev')
239
242
  .option('-v, --verbose', 'Show detailed test output')
240
243
  .option('-d, --debug', 'Include debug output and write log to integration/<systemKey>/logs/')
241
- .option(
242
- '--no-sync',
243
- 'Skip publishing local integration files; use system config already on the dataplane'
244
- )
244
+ .option('--no-publish', 'Skip publishing local integration files before tests')
245
245
  .option(
246
246
  '--sync',
247
247
  'Publish local system and datasource files before tests (default for external integration; same as upload)'
@@ -250,12 +250,18 @@ function setupExternalSystemTestCommands(program) {
250
250
  '--force',
251
251
  'With --sync, pass force to upload (bypass active-datasource schema replacement guards; same as aifabrix upload --force)'
252
252
  )
253
- .option('--warnings-as-errors', 'Treat aggregate warn as failure (exit 1)')
254
- .option('--require-cert', 'Require certification passed on every datasource (exit 2 if not)')
255
253
  .option(
256
- '--no-cert-sync',
257
- 'Skip updating the system file certification block from the dataplane after a successful run'
254
+ '--version <target>',
255
+ 'Manifest version for test (latest, running, or explicit version id)',
256
+ 'latest'
258
257
  )
258
+ .option(
259
+ '--sync-mode <mode>',
260
+ 'Sync policy during test: auto (default), never, or force. Distinct from --sync (publish local files).',
261
+ 'auto'
262
+ )
263
+ .option('--warnings-as-errors', 'Treat aggregate warn as failure (exit 1)')
264
+ .option('--require-cert', 'Require certification passed on every datasource (exit 2 if not)')
259
265
  .addHelpText('after', TEST_INTEGRATION_HELP_AFTER)
260
266
  .action(async(appName, options, cmd) => {
261
267
  try {
@@ -264,7 +270,7 @@ function setupExternalSystemTestCommands(program) {
264
270
  const opts = {
265
271
  ...options,
266
272
  env: envExplicit ? options.env : undefined,
267
- noSync: cliOptsSkipSync(options, cmd)
273
+ noPublish: cliOptsSkipPublish(options, cmd)
268
274
  };
269
275
  await runTestIntegrationCommand(appName, opts);
270
276
  } catch (error) {
@@ -0,0 +1,64 @@
1
+ /**
2
+ * `aifabrix up-builder-api` action body.
3
+ *
4
+ * @fileoverview up-builder-api CLI action
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const { handleCommandError } = require('../utils/cli-utils');
12
+ const { handleUpBuilderApi } = require('../commands/up-builder-api');
13
+ const { cleanBuilderAppDirs, BUILDER_API_APP_KEYS } = require('../commands/up-common');
14
+ const { recordInfraInstallationCommand } = require('./installation-log-command');
15
+
16
+ /**
17
+ * @param {Object} options
18
+ * @returns {Promise<string[]>}
19
+ */
20
+ async function runUpBuilderApiWork(options) {
21
+ let cleanedAppKeys = [];
22
+ if (options.force) {
23
+ const cleaned = await cleanBuilderAppDirs([...BUILDER_API_APP_KEYS]);
24
+ cleanedAppKeys = Array.isArray(cleaned) ? cleaned : [];
25
+ }
26
+ await handleUpBuilderApi(options);
27
+ return cleanedAppKeys;
28
+ }
29
+
30
+ /**
31
+ * @param {Object} options
32
+ * @returns {Promise<void>}
33
+ */
34
+ async function handleUpBuilderApiCliAction(options) {
35
+ const startedAt = new Date();
36
+ let cleanedAppKeys = [];
37
+ try {
38
+ cleanedAppKeys = await runUpBuilderApiWork(options);
39
+ await recordInfraInstallationCommand({
40
+ command: 'up-builder-api',
41
+ options,
42
+ startedAt,
43
+ outcome: 'success',
44
+ platformAppList: ['builder-api'],
45
+ cleanup: cleanedAppKeys.length > 0 ? { cleanedAppKeys } : undefined
46
+ });
47
+ } catch (error) {
48
+ await recordInfraInstallationCommand({
49
+ command: 'up-builder-api',
50
+ options,
51
+ startedAt,
52
+ outcome: 'failure',
53
+ error,
54
+ platformAppList: ['builder-api'],
55
+ cleanup: cleanedAppKeys.length > 0 ? { cleanedAppKeys } : undefined
56
+ });
57
+ handleCommandError(error, 'up-builder-api');
58
+ process.exit(1);
59
+ }
60
+ }
61
+
62
+ module.exports = {
63
+ handleUpBuilderApiCliAction
64
+ };
@@ -16,6 +16,7 @@ const { resolveControllerUrl } = require('../utils/controller-url');
16
16
  const { handleLogin } = require('../commands/login');
17
17
  const { handleUpMiso } = require('../commands/up-miso');
18
18
  const { handleUpDataplane } = require('../commands/up-dataplane');
19
+ const { handleUpBuilderApi } = require('../commands/up-builder-api');
19
20
  const {
20
21
  applyUpPlatformForceConfig,
21
22
  cleanBuilderAppDirs,
@@ -25,7 +26,7 @@ const {
25
26
  const { runGuidedUpPlatform } = require('./infra-guided');
26
27
  const { recordInfraInstallationCommand } = require('./installation-log-command');
27
28
 
28
- const PLATFORM_APPS = ['keycloak', 'miso-controller', 'dataplane'];
29
+ const PLATFORM_APPS = ['keycloak', 'miso-controller', 'dataplane', 'builder-api'];
29
30
 
30
31
  /**
31
32
  * @param {Object} options
@@ -57,6 +58,7 @@ async function runUpPlatformWork(options) {
57
58
  await prepareUrlsLocalRegistryForUpPlatform();
58
59
  await handleUpMiso(options);
59
60
  await handleUpDataplane(options);
61
+ await handleUpBuilderApi({ ...options, platformInstall: true });
60
62
  }
61
63
  return cleanedAppKeys;
62
64
  }
@@ -285,6 +285,20 @@ function setupUpDataplaneCommand(program) {
285
285
  });
286
286
  }
287
287
 
288
+ function setupUpBuilderApiCommand(program) {
289
+ program.command('up-builder-api')
290
+ .description('Materialize and run builder-api locally (dev env; needs up-infra; dataplane recommended)')
291
+ .option('-r, --registry <url>', 'Override registry for builder-api image')
292
+ .option('--registry-mode <mode>', 'Override registry mode (acr|external)')
293
+ .option('-i, --image <ref>', 'Override builder-api image reference')
294
+ .option('-f, --force', 'Clean builder/builder-api and re-fetch from templates')
295
+ .option('--verbose', 'Show full orchestration output')
296
+ .action((options) => {
297
+ const { handleUpBuilderApiCliAction } = require('./setup-infra-up-builder-api-action');
298
+ return handleUpBuilderApiCliAction(options);
299
+ });
300
+ }
301
+
288
302
  function setupDownInfraCommand(program) {
289
303
  program.command('down-infra [service|app]')
290
304
  .description('Stop all infra, or stop one app; use -v to remove volumes')
@@ -418,6 +432,7 @@ function setupInfraCommands(program) {
418
432
  setupUpPlatformCommand(program);
419
433
  setupUpMisoCommand(program);
420
434
  setupUpDataplaneCommand(program);
435
+ setupUpBuilderApiCommand(program);
421
436
  setupDownInfraCommand(program);
422
437
  setupDoctorCommand(program);
423
438
  setupStatusCommand(program);
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Top-level connected-system list command.
3
+ *
4
+ * @fileoverview aifabrix list — dataplane external systems
5
+ * @author AI Fabrix Team
6
+ * @version 2.0.0
7
+ */
8
+
9
+ const chalk = require('chalk');
10
+ const logger = require('../utils/logger');
11
+ const { listExternalSystemsOnDataplane } = require('../app/list-external-systems');
12
+
13
+ const LIST_HELP_AFTER = `
14
+ Lists connected systems published on the dataplane (not controller pipeline applications).
15
+
16
+ Examples:
17
+ aifabrix list
18
+ aifabrix list --json
19
+
20
+ Controller applications only: aifabrix app list
21
+ Show one system: aifabrix show <systemKey> --online
22
+ `;
23
+
24
+ /**
25
+ * @param {import('commander').Command} program
26
+ */
27
+ function setupListCommand(program) {
28
+ program
29
+ .command('list')
30
+ .description('List connected systems on the dataplane')
31
+ .option('--json', 'Output as JSON')
32
+ .addHelpText('after', LIST_HELP_AFTER)
33
+ .action(async(options) => {
34
+ try {
35
+ await listExternalSystemsOnDataplane({ json: options.json === true });
36
+ } catch (error) {
37
+ logger.error(chalk.red(`Error: ${error.message}`));
38
+ process.exit(1);
39
+ }
40
+ });
41
+ }
42
+
43
+ module.exports = { setupListCommand };
@@ -18,6 +18,17 @@ Examples:
18
18
  $ aifabrix validate --builder
19
19
  `;
20
20
 
21
+ const VALIDATE_JSON_HELP_AFTER = `
22
+ Examples:
23
+ $ aifabrix validate-json myapp
24
+ $ aifabrix validate-json my-system
25
+ $ aifabrix validate-json --integration
26
+ $ aifabrix validate-json --builder
27
+ $ aifabrix validate-json --integration --builder --format json
28
+
29
+ Runs full local validation first; writes *-deploy.json only when validation succeeds (offline).
30
+ `;
31
+
21
32
  const REPAIR_HELP_AFTER = `
22
33
  Examples:
23
34
  $ aifabrix repair hubspot-demo
@@ -63,6 +74,7 @@ Examples:
63
74
  module.exports = {
64
75
  JSON_HELP_AFTER,
65
76
  VALIDATE_HELP_AFTER,
77
+ VALIDATE_JSON_HELP_AFTER,
66
78
  REPAIR_HELP_AFTER,
67
79
  RESOLVE_HELP_AFTER
68
80
  };