@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
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @fileoverview Optional upload-time runtime probe (--probe).
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const chalk = require('chalk');
10
+ const { testSystemViaPipeline } = require('../api/pipeline.api');
11
+ const { unwrapApiData } = require('../utils/external-system-readiness-core');
12
+ const { logProbeRuntimeBlock, SEP } = require('../utils/external-system-readiness-display');
13
+ const { formatProgress, sectionTitle } = require('../utils/cli-test-layout-chalk');
14
+ const logger = require('../utils/logger');
15
+
16
+ /** Omit payloadTemplate so POST /validation/run uses the validation-engine path. */
17
+ const UPLOAD_PROBE_TEST_DATA = {};
18
+
19
+ /**
20
+ * @param {string} dataplaneUrl
21
+ * @param {string} systemKey
22
+ * @param {Object} authConfig
23
+ * @param {number|undefined} probeTimeoutMs
24
+ * @param {{ compact?: boolean }} [opts]
25
+ * @returns {Promise<Object|null>}
26
+ */
27
+ async function maybeRunUploadProbe(dataplaneUrl, systemKey, authConfig, probeTimeoutMs, opts = {}) {
28
+ const compact = opts.compact === true;
29
+ if (!compact) {
30
+ logger.log('');
31
+ logger.log(sectionTitle('Runtime checks (--probe)'));
32
+ logger.log(SEP);
33
+ logger.log(formatProgress('Running runtime checks...'));
34
+ }
35
+ const timeoutMs = probeTimeoutMs === undefined || probeTimeoutMs === null ? 120000 : probeTimeoutMs;
36
+ try {
37
+ const pr = await testSystemViaPipeline(
38
+ dataplaneUrl,
39
+ systemKey,
40
+ authConfig,
41
+ UPLOAD_PROBE_TEST_DATA,
42
+ { timeout: timeoutMs }
43
+ );
44
+ if (pr.success === false) {
45
+ if (!compact) {
46
+ logger.log(chalk.yellow(`⚠ Probe request failed: ${pr.formattedError || pr.error || 'unknown error'}`));
47
+ }
48
+ return null;
49
+ }
50
+ const probeData = unwrapApiData(pr);
51
+ if (!compact) {
52
+ logProbeRuntimeBlock(probeData, systemKey);
53
+ }
54
+ return probeData;
55
+ } catch (e) {
56
+ if (!compact) {
57
+ logger.log(chalk.yellow(`⚠ Probe failed: ${e.message}`));
58
+ }
59
+ return null;
60
+ }
61
+ }
62
+
63
+ module.exports = {
64
+ maybeRunUploadProbe,
65
+ UPLOAD_PROBE_TEST_DATA
66
+ };
@@ -51,7 +51,10 @@ async function resolveUploadPublishContext(
51
51
  payload
52
52
  ) {
53
53
  const resolved = await resolveDataplaneAndAuth(systemKey, {
54
- silent: options.silentResolve === true
54
+ silent: options.silentResolve === true,
55
+ authConfig: options.authConfig,
56
+ dataplaneUrl: options.dataplaneUrl,
57
+ environment: options.environment
55
58
  });
56
59
  requireBearerForDataplanePipeline(resolved.authConfig);
57
60
  if (options.force === true) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @fileoverview Upload sidecar follow-ups (governance packs, certification sync).
2
+ * @fileoverview Upload sidecar follow-ups (governance scenario packs).
3
3
  * @author AI Fabrix Team
4
4
  * @version 1.0.0
5
5
  */
@@ -10,19 +10,16 @@ const logger = require('../utils/logger');
10
10
  const { formatWarningLine } = require('../utils/cli-test-layout-chalk');
11
11
  const { unwrapPublicationResult, isPublicationUnchanged } = require('../utils/external-system-readiness-core');
12
12
  const { logUploadReadinessSummary } = require('../utils/external-system-readiness-display');
13
- const { maybeSyncSystemCertificationFromDataplane } = require('../certification/sync-system-certification');
14
- const { cliOptsSkipCertSync } = require('../certification/cli-cert-sync-skip');
15
13
  const { isQuietMinimalSync } = require('../utils/upload-sync-options');
16
14
 
17
15
  /**
18
- * Sidecar follow-ups that are independent of pipeline publish hash (scenario packs, cert sync).
16
+ * Sidecar follow-ups that are independent of pipeline publish hash (scenario packs).
19
17
  * @param {Object} ctx
20
18
  * @returns {Promise<void>}
21
19
  */
22
20
  async function runUploadSidecarFollowups(ctx) {
23
- const { systemKey, options, payload, dataplaneUrl, authConfig } = ctx;
21
+ const { systemKey, options, dataplaneUrl, authConfig } = ctx;
24
22
  const quietSidecar = isQuietMinimalSync(options);
25
- const dsKeys = (payload.dataSources || []).map((ds) => ds && ds.key).filter(Boolean);
26
23
  try {
27
24
  const { uploadGovernanceScenarioPacks } = require('../lifecycle/scenario-upload');
28
25
  await uploadGovernanceScenarioPacks(systemKey, dataplaneUrl, authConfig, { silent: quietSidecar });
@@ -31,15 +28,30 @@ async function runUploadSidecarFollowups(ctx) {
31
28
  logger.log(formatWarningLine(`Governance scenario upload skipped: ${err.message}`));
32
29
  }
33
30
  }
34
- await maybeSyncSystemCertificationFromDataplane({
35
- label: 'upload',
36
- noCertSync: cliOptsSkipCertSync(options),
37
- systemKey,
38
- dataplaneUrl,
39
- authConfig,
40
- datasourceKeys: dsKeys,
41
- silent: quietSidecar
42
- });
31
+ }
32
+
33
+ /**
34
+ * @param {Object} ctx
35
+ * @param {Function} maybeRunUploadProbeFn
36
+ * @returns {Promise<{ probeData: Object|null, compact: boolean }>}
37
+ */
38
+ async function resolveUploadProbeData(ctx, maybeRunUploadProbeFn) {
39
+ const { systemKey, options, dataplaneUrl, authConfig } = ctx;
40
+ const compact = !!options.minimal && options.verbose !== true;
41
+ if (!options.probe) {
42
+ return { probeData: null, compact };
43
+ }
44
+ if (compact) {
45
+ const probeData = await maybeRunUploadProbeFn(
46
+ dataplaneUrl,
47
+ systemKey,
48
+ authConfig,
49
+ options.probeTimeout,
50
+ { compact: true }
51
+ );
52
+ return { probeData, compact };
53
+ }
54
+ return { probeData: null, compact };
43
55
  }
44
56
 
45
57
  /**
@@ -56,7 +68,9 @@ async function handlePublicationAndFollowups(ctx, maybeRunUploadProbe) {
56
68
  environment,
57
69
  dataplaneUrl,
58
70
  authConfig,
59
- rawRes
71
+ rawRes,
72
+ credentialPush,
73
+ configPush
60
74
  } = ctx;
61
75
  const publication = unwrapPublicationResult(rawRes);
62
76
  if (!publication) {
@@ -68,18 +82,32 @@ async function handlePublicationAndFollowups(ctx, maybeRunUploadProbe) {
68
82
  await runUploadSidecarFollowups({ systemKey, options, payload, dataplaneUrl, authConfig });
69
83
  return;
70
84
  }
71
- logUploadReadinessSummary({
72
- environment,
73
- dataplaneUrl,
74
- systemKey,
75
- publication,
76
- manifest,
77
- minimal: !!options.minimal,
78
- willProbe: !!options.probe
79
- });
80
- if (options.probe) {
81
- await maybeRunUploadProbe(dataplaneUrl, systemKey, authConfig, options.probeTimeout);
85
+
86
+ const suppressSummary = options.suppressSummary === true;
87
+ const { probeData, compact } = await resolveUploadProbeData(ctx, maybeRunUploadProbe);
88
+
89
+ if (!suppressSummary) {
90
+ logUploadReadinessSummary({
91
+ environment,
92
+ dataplaneUrl,
93
+ systemKey,
94
+ publication,
95
+ manifest,
96
+ minimal: !!options.minimal,
97
+ willProbe: false,
98
+ credentialPush,
99
+ configPush,
100
+ forcePublish: options.force === true,
101
+ probeData
102
+ });
82
103
  }
104
+
105
+ if (options.probe && !compact) {
106
+ await maybeRunUploadProbe(dataplaneUrl, systemKey, authConfig, options.probeTimeout, {
107
+ compact: false
108
+ });
109
+ }
110
+
83
111
  await runUploadSidecarFollowups({ systemKey, options, payload, dataplaneUrl, authConfig });
84
112
  }
85
113
 
@@ -1,7 +1,6 @@
1
1
  const {
2
2
  formatSuccessLine,
3
3
  formatWarningLine,
4
- formatProgress,
5
4
  sectionTitle,
6
5
  headerKeyValue,
7
6
  metadata
@@ -15,7 +14,6 @@ const {
15
14
  * @version 2.0.0
16
15
  */
17
16
 
18
- const path = require('path');
19
17
  const chalk = require('chalk');
20
18
  const logger = require('../utils/logger');
21
19
 
@@ -23,38 +21,32 @@ const SEP = chalk.gray('──────────────────
23
21
  const { resolveControllerUrl } = require('../utils/controller-url');
24
22
  const { getDeploymentAuth } = require('../utils/token-manager');
25
23
  const { resolveDataplaneUrl } = require('../utils/dataplane-resolver');
26
- const { getIntegrationPath } = require('../utils/paths');
27
- const { pushCredentialSecrets } = require('../utils/credential-secrets-env');
28
- const { runWithCredentialPushSpinner } = require('../utils/credential-push-ui');
24
+ const { resolveExternalSystemPath } = require('../utils/app-path-resolve');
29
25
  const { runWithUploadPipelineSpinner } = require('../utils/upload-pipeline-ui');
30
26
  const {
31
27
  buildResolvedEnvMapForIntegration,
32
- resolveConfigurationValues,
33
- collectResolvedVariableConfigurationNames
28
+ resolveConfigurationValues
34
29
  } = require('../utils/configuration-env-resolver');
35
- const { pushRuntimeConfigurationValues } = require('../utils/runtime-configuration-values');
36
30
  const { validateExternalSystemComplete } = require('../validation/validate');
37
31
  const { displayValidationResults } = require('../validation/validate-display');
38
32
  const { generateControllerManifest } = require('../generator/external-controller-manifest');
39
33
  const {
40
- validatePipelineConfig,
41
- testSystemViaPipeline
34
+ validatePipelineConfig
42
35
  } = require('../api/pipeline.api');
43
36
  const { uploadApplicationViaPipelineWithAuthRetry } = require('../utils/pipeline-upload-auth-retry');
44
37
  const { formatApiError } = require('../utils/api-error-handler');
45
38
  const { unwrapPublicationResult, unwrapApiData, isPublicationUnchanged } = require('../utils/external-system-readiness-core');
46
39
  const {
47
- logServerValidationWarnings,
48
- logProbeRuntimeBlock
40
+ logServerValidationWarnings
49
41
  } = require('../utils/external-system-readiness-display');
42
+ const { maybeRunUploadProbe } = require('./upload-probe');
50
43
  const { maybeSyncOpenApiFilesForMcp } = require('./repair-openapi-sync');
44
+ const { exportProgrammaticOpenApiForRepair } = require('./repair-openapi-export');
51
45
  const { resolveUploadPublishContext } = require('./upload-publish-context');
52
46
  const { syncDeployJsonFromSources } = require('../external-system/sync-deploy-manifest');
53
- const { isQuietMinimalSync } = require('../utils/upload-sync-options');
54
- const {
55
- runUploadSidecarFollowups,
56
- handlePublicationAndFollowups
57
- } = require('./upload-sidecar-followups');
47
+ const { handlePublicationAndFollowups } = require('./upload-sidecar-followups');
48
+ const { finalizeUploadPublishResult, finishUnchangedUploadPublication } = require('./upload-data-sync-finalize');
49
+ const { pushAndLogCredentialSecrets } = require('./upload-credential-push-log');
58
50
 
59
51
  /**
60
52
  * Validates system-key format (same as download).
@@ -72,21 +64,22 @@ function validateSystemKeyFormat(systemKey) {
72
64
 
73
65
  /**
74
66
  * Builds pipeline upload payload from controller manifest.
75
- * Payload: { version, application, dataSources, status }; Builder always uses status "draft".
67
+ * Payload: { version, application, dataSources, status }; upload uses "draft", deploy preflight uses "published".
76
68
  * @param {Object} manifest - Controller manifest from generateControllerManifest
77
- * @returns {Object} { version, application, dataSources, status: "draft" }
69
+ * @returns {Object} { version, application, dataSources, status }
78
70
  */
79
71
  /**
80
72
  * @param {Object} manifest - Controller manifest from generateControllerManifest
81
- * @param {{ force?: boolean }} [opts]
73
+ * @param {{ force?: boolean, status?: 'draft'|'published' }} [opts]
82
74
  * @returns {Object}
83
75
  */
84
76
  function buildUploadPayload(manifest, opts = {}) {
77
+ const lifecycleStatus = opts.status === 'published' ? 'published' : 'draft';
85
78
  const payload = {
86
79
  version: manifest.version || '1.0.0',
87
80
  application: manifest.system,
88
81
  dataSources: manifest.dataSources || [],
89
- status: 'draft'
82
+ status: lifecycleStatus
90
83
  };
91
84
  if (opts.force === true) {
92
85
  payload.force = true;
@@ -101,6 +94,13 @@ function buildUploadPayload(manifest, opts = {}) {
101
94
  * @returns {Promise<{ dataplaneUrl: string, authConfig: Object, environment: string }>}
102
95
  */
103
96
  async function resolveDataplaneAndAuth(systemKey, opts = {}) {
97
+ if (opts.authConfig && opts.dataplaneUrl && opts.environment) {
98
+ return {
99
+ dataplaneUrl: opts.dataplaneUrl,
100
+ authConfig: opts.authConfig,
101
+ environment: opts.environment
102
+ };
103
+ }
104
104
  const silent = opts.silent === true;
105
105
  const { resolveEnvironment } = require('../core/config');
106
106
  const environment = await resolveEnvironment();
@@ -170,8 +170,11 @@ function throwIfValidationFailed(validationResult) {
170
170
  * @param {string} systemKey - System key
171
171
  * @param {Object} payload - Upload payload (mutated)
172
172
  */
173
- async function resolvePayloadConfiguration(systemKey, payload) {
174
- const { envMap, secrets } = await buildResolvedEnvMapForIntegration(systemKey);
173
+ async function resolvePayloadConfiguration(systemKey, payload, pathOptions = {}) {
174
+ const { envMap, secrets } = await buildResolvedEnvMapForIntegration(systemKey, {
175
+ dataplaneRuntime: true,
176
+ ...pathOptions
177
+ });
175
178
  if (Array.isArray(payload.application?.configuration) && payload.application.configuration.length > 0) {
176
179
  resolveConfigurationValues(payload.application.configuration, envMap, secrets, systemKey);
177
180
  }
@@ -182,64 +185,6 @@ async function resolvePayloadConfiguration(systemKey, payload) {
182
185
  }
183
186
  }
184
187
 
185
- /**
186
- * Pushes credential secrets from .env and payload to dataplane; logs result or warning.
187
- * @param {string} dataplaneUrl - Dataplane URL
188
- * @param {Object} authConfig - Auth config
189
- * @param {string} systemKey - System key
190
- * @param {Object} payload - Upload payload
191
- */
192
- async function pushAndLogCredentialSecrets(dataplaneUrl, authConfig, systemKey, payload, uiOpts = {}) {
193
- const envFilePath = path.join(getIntegrationPath(systemKey), '.env');
194
- const pushResult = await runWithCredentialPushSpinner(
195
- () =>
196
- pushCredentialSecrets(dataplaneUrl, authConfig, {
197
- envFilePath,
198
- appName: systemKey,
199
- payload
200
- }),
201
- { systemKey, json: uiOpts.json === true }
202
- );
203
- if (pushResult.pushed > 0) {
204
- const keyList = pushResult.keys?.length ? ` (${pushResult.keys.join(', ')})` : '';
205
- logger.log(
206
- formatSuccessLine(`Pushed ${pushResult.pushed} credential secret(s) to dataplane${keyList}.`)
207
- );
208
- } else {
209
- logger.log(chalk.yellow('Secret push skipped'));
210
- }
211
- const resolvedParamNames = collectResolvedVariableConfigurationNames(payload);
212
- if (resolvedParamNames.length > 0) {
213
- const nameList = ` (${resolvedParamNames.join(', ')})`;
214
- logger.log(
215
- formatSuccessLine(
216
- `Resolved ${resolvedParamNames.length} integration parameter(s) from .env for publish${nameList}.`
217
- )
218
- );
219
- }
220
- if (pushResult.warning) {
221
- logger.log(chalk.yellow(`Warning: ${pushResult.warning}`));
222
- }
223
- try {
224
- const configPush = await pushRuntimeConfigurationValues(
225
- dataplaneUrl,
226
- authConfig,
227
- systemKey,
228
- payload
229
- );
230
- if (configPush.pushed > 0) {
231
- const nameList = configPush.names.length ? ` (${configPush.names.join(', ')})` : '';
232
- logger.log(
233
- formatSuccessLine(
234
- `Stored ${configPush.pushed} runtime configuration value(s) in dataplane${nameList}.`
235
- )
236
- );
237
- }
238
- } catch (err) {
239
- logger.log(chalk.yellow(`Warning: runtime configuration store skipped: ${err.message}`));
240
- }
241
- }
242
-
243
188
  /**
244
189
  * Optional server-side pipeline validate when --verbose.
245
190
  * @param {string} dataplaneUrl
@@ -261,46 +206,6 @@ async function maybeRunVerboseServerValidation(dataplaneUrl, authConfig, payload
261
206
  logServerValidationWarnings(body);
262
207
  }
263
208
 
264
- /**
265
- * Omit payloadTemplate so POST /validation/run uses the **validation-engine** path
266
- * (same as deploy --probe). Needed for certification and dataplane auto-issue of integration
267
- * certificates after a successful run. If RBAC/live checks fail right after upload until the
268
- * controller syncs permissions, skip --probe or retry once permissions are visible.
269
- */
270
- const UPLOAD_PROBE_TEST_DATA = {};
271
-
272
- /**
273
- * Optional POST validation/run after successful upload.
274
- * @param {string} dataplaneUrl
275
- * @param {string} systemKey
276
- * @param {Object} authConfig
277
- * @param {number|undefined} probeTimeoutMs
278
- */
279
- async function maybeRunUploadProbe(dataplaneUrl, systemKey, authConfig, probeTimeoutMs) {
280
- logger.log('');
281
- logger.log(sectionTitle('Runtime checks (--probe)'));
282
- logger.log(SEP);
283
- logger.log(formatProgress('Running runtime checks...'));
284
- const timeoutMs = probeTimeoutMs === undefined || probeTimeoutMs === null ? 120000 : probeTimeoutMs;
285
- try {
286
- const pr = await testSystemViaPipeline(
287
- dataplaneUrl,
288
- systemKey,
289
- authConfig,
290
- UPLOAD_PROBE_TEST_DATA,
291
- { timeout: timeoutMs }
292
- );
293
- if (pr.success === false) {
294
- logger.log(chalk.yellow(`⚠ Probe request failed: ${pr.formattedError || pr.error || 'unknown error'}`));
295
- return;
296
- }
297
- const probeData = unwrapApiData(pr);
298
- logProbeRuntimeBlock(probeData, systemKey);
299
- } catch (e) {
300
- logger.log(chalk.yellow(`⚠ Probe failed: ${e.message}`));
301
- }
302
- }
303
-
304
209
  /**
305
210
  * Local validation, manifest, payload, and configuration resolution.
306
211
  * Regenerates integration/<systemKey>/<systemKey>-deploy.json from sources (same as `aifabrix json`).
@@ -311,15 +216,22 @@ async function maybeRunUploadProbe(dataplaneUrl, systemKey, authConfig, probeTim
311
216
  */
312
217
  async function buildValidatedUploadManifestPayload(systemKey, opts = {}) {
313
218
  const quiet = opts.minimal === true || opts.quiet === true;
314
- const validationResult = await validateExternalSystemComplete(systemKey, { type: 'external' });
219
+ const pathOptions = opts.pathOptions || {};
220
+ const validationResult = await validateExternalSystemComplete(systemKey, {
221
+ type: 'external',
222
+ ...pathOptions
223
+ });
315
224
  throwIfValidationFailed(validationResult);
316
225
  if (!quiet) {
317
226
  logger.log(formatSuccessLine('Local validation passed'));
318
227
  }
319
- await syncDeployJsonFromSources(systemKey, { quiet });
320
- const manifest = await generateControllerManifest(systemKey, { type: 'external' });
321
- const payload = buildUploadPayload(manifest, { force: opts.force === true });
322
- await resolvePayloadConfiguration(systemKey, payload);
228
+ await syncDeployJsonFromSources(systemKey, { quiet, ...pathOptions });
229
+ const manifest = await generateControllerManifest(systemKey, { type: 'external', ...pathOptions });
230
+ const payload = buildUploadPayload(manifest, {
231
+ force: opts.force === true,
232
+ status: opts.uploadStatus === 'published' ? 'published' : 'draft'
233
+ });
234
+ await resolvePayloadConfiguration(systemKey, payload, pathOptions);
323
235
  return { manifest, payload };
324
236
  }
325
237
 
@@ -334,9 +246,17 @@ async function buildValidatedUploadManifestPayload(systemKey, opts = {}) {
334
246
  * @returns {Promise<void>}
335
247
  */
336
248
  async function logAndSyncLocalOpenApiForUpload(systemKey, manifest, uploadContext = {}) {
337
- const appPath = getIntegrationPath(systemKey);
249
+ const pathOptions = uploadContext.pathOptions || {};
250
+ const appPath = resolveExternalSystemPath(systemKey, pathOptions);
338
251
  const ei = manifest && manifest.externalIntegration;
339
252
  const datasourceFiles = ei && Array.isArray(ei.dataSources) ? ei.dataSources : [];
253
+ await exportProgrammaticOpenApiForRepair({
254
+ appPath,
255
+ systemKey,
256
+ datasourceFiles,
257
+ dryRun: false,
258
+ backupCtx: { dryRun: false, changedFiles: [] }
259
+ });
340
260
  const openapiSyncLines = await maybeSyncOpenApiFilesForMcp({
341
261
  enabled: true,
342
262
  dryRun: false,
@@ -346,11 +266,55 @@ async function logAndSyncLocalOpenApiForUpload(systemKey, manifest, uploadContex
346
266
  dataplaneUrl: uploadContext.dataplaneUrl,
347
267
  authConfig: uploadContext.authConfig
348
268
  });
349
- for (const line of openapiSyncLines) {
350
- logger.log(line.startsWith('Skipped') ? formatWarningLine(line) : formatSuccessLine(line));
269
+ if (!uploadContext.quiet) {
270
+ for (const line of openapiSyncLines) {
271
+ logger.log(line.startsWith('Skipped') ? formatWarningLine(line) : formatSuccessLine(line));
272
+ }
351
273
  }
352
274
  }
353
275
 
276
+ /**
277
+ * @param {string} systemKey
278
+ * @param {Object} options
279
+ * @param {Object} manifest
280
+ * @param {Object} payload
281
+ * @param {{ dataplaneUrl: string, authConfig: Object, environment: string, rawRes: Object }} ctx
282
+ */
283
+ async function completeUploadAfterPublish(systemKey, options, manifest, payload, ctx) {
284
+ const quietCompact = options.minimal === true && options.verbose !== true;
285
+ const pushMeta = await pushAndLogCredentialSecrets(ctx.dataplaneUrl, ctx.authConfig, systemKey, payload, {
286
+ json: options.json === true,
287
+ pathOptions: options.pathOptions,
288
+ suppressCredentialLog: quietCompact
289
+ });
290
+ await logAndSyncLocalOpenApiForUpload(systemKey, manifest, {
291
+ dataplaneUrl: ctx.dataplaneUrl,
292
+ authConfig: ctx.authConfig,
293
+ pathOptions: options.pathOptions,
294
+ quiet: quietCompact
295
+ });
296
+ await handlePublicationAndFollowups(
297
+ {
298
+ systemKey,
299
+ options,
300
+ manifest,
301
+ payload,
302
+ environment: ctx.environment,
303
+ dataplaneUrl: ctx.dataplaneUrl,
304
+ authConfig: ctx.authConfig,
305
+ rawRes: ctx.rawRes,
306
+ credentialPush: pushMeta.credentialPush,
307
+ configPush: pushMeta.configPush
308
+ },
309
+ maybeRunUploadProbe
310
+ );
311
+ return finalizeUploadPublishResult(
312
+ { dataplaneUrl: ctx.dataplaneUrl, authConfig: ctx.authConfig, environment: ctx.environment, uploadSkipped: false },
313
+ payload,
314
+ options
315
+ );
316
+ }
317
+
354
318
  /**
355
319
  * Upload path after dry-run check.
356
320
  * @param {string} systemKey
@@ -377,37 +341,22 @@ async function runUploadPublishAndSummary(systemKey, options, manifest, payload)
377
341
  );
378
342
  const publication = unwrapPublicationResult(rawRes);
379
343
  if (isPublicationUnchanged(publication)) {
380
- if (!isQuietMinimalSync(options)) {
381
- logger.log(formatSuccessLine('Config unchanged on dataplane — upload skipped.'));
382
- }
383
- await runUploadSidecarFollowups({
344
+ return finishUnchangedUploadPublication({
384
345
  systemKey,
385
346
  options,
386
347
  payload,
387
348
  dataplaneUrl,
388
- authConfig
349
+ authConfig,
350
+ environment
389
351
  });
390
- return { dataplaneUrl, authConfig, environment, uploadSkipped: true };
391
352
  }
392
353
 
393
- await pushAndLogCredentialSecrets(dataplaneUrl, authConfig, systemKey, payload, {
394
- json: options.json === true
354
+ return completeUploadAfterPublish(systemKey, options, manifest, payload, {
355
+ dataplaneUrl,
356
+ authConfig,
357
+ environment,
358
+ rawRes
395
359
  });
396
- await logAndSyncLocalOpenApiForUpload(systemKey, manifest, { dataplaneUrl, authConfig });
397
- await handlePublicationAndFollowups(
398
- {
399
- systemKey,
400
- options,
401
- manifest,
402
- payload,
403
- environment,
404
- dataplaneUrl,
405
- authConfig,
406
- rawRes
407
- },
408
- maybeRunUploadProbe
409
- );
410
- return { dataplaneUrl, authConfig, environment, uploadSkipped: false };
411
360
  }
412
361
 
413
362
  /**
@@ -415,16 +364,23 @@ async function runUploadPublishAndSummary(systemKey, options, manifest, payload)
415
364
  * @param {string} systemKey - External system key (integration/<systemKey>/)
416
365
  * @param {Object} [options] - Options
417
366
  * @param {boolean} [options.dryRun] - Validate and build payload only; no API calls
418
- * @param {boolean} [options.verbose] - POST pipeline/validate for server warnings
367
+ * @param {boolean} [options.verbose] - Expanded summary and server-side pipeline validate warnings
419
368
  * @param {boolean} [options.probe] - POST validation/run after publish
420
369
  * @param {number} [options.probeTimeout] - Probe timeout ms (default 120000)
421
- * @param {boolean} [options.minimal] - Short summary only
370
+ * @param {boolean} [options.minimal] - Short summary (default: compact unless --verbose)
422
371
  * @returns {Promise<{ dataplaneUrl: string, authConfig: Object, environment: string }|void>}
423
372
  * @throws {Error} If validation or API calls fail
424
373
  */
425
374
  async function uploadExternalSystem(systemKey, options = {}) {
426
375
  validateSystemKeyFormat(systemKey);
427
- const minimal = options.minimal === true;
376
+ const pathOptions = options.pathOptions || {};
377
+ const minimal =
378
+ options.minimal === true
379
+ ? true
380
+ : options.minimal === false
381
+ ? false
382
+ : options.verbose !== true;
383
+ const uploadOptions = { ...options, minimal };
428
384
  if (!minimal) {
429
385
  logger.log('');
430
386
  logger.log(sectionTitle('Upload external system'));
@@ -434,7 +390,9 @@ async function uploadExternalSystem(systemKey, options = {}) {
434
390
  const { manifest, payload } = await buildValidatedUploadManifestPayload(systemKey, {
435
391
  dryRun: !!options.dryRun,
436
392
  force: options.force === true,
437
- minimal
393
+ minimal,
394
+ pathOptions,
395
+ uploadStatus: options.uploadStatus
438
396
  });
439
397
  if (options.dryRun) {
440
398
  logger.log(chalk.yellow('Dry run: would upload payload (no API calls).'));
@@ -443,11 +401,12 @@ async function uploadExternalSystem(systemKey, options = {}) {
443
401
  );
444
402
  return undefined;
445
403
  }
446
- return runUploadPublishAndSummary(systemKey, options, manifest, payload);
404
+ return runUploadPublishAndSummary(systemKey, uploadOptions, manifest, payload);
447
405
  }
448
406
 
449
407
  module.exports = {
450
408
  uploadExternalSystem,
409
+ buildValidatedUploadManifestPayload,
451
410
  buildUploadPayload,
452
411
  resolveDataplaneAndAuth,
453
412
  runUploadValidatePublish,