@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,168 @@
1
+ /**
2
+ * Resolve Connected Systems vs Enterprise Knowledge authoring trees (456.5).
3
+ *
4
+ * @fileoverview Workspace resolution from systemKind and CLI --workspace
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const path = require('path');
12
+ const fs = require('../internal/fs-real-sync');
13
+ const {
14
+ WORKSPACE_ENTERPRISE_KNOWLEDGE,
15
+ SYSTEM_KIND_ENTERPRISE_KNOWLEDGE,
16
+ getEnterpriseKnowledgePath
17
+ } = require('./enterprise-knowledge-paths');
18
+
19
+ const WORKSPACE_INTEGRATION = 'integration';
20
+
21
+ /**
22
+ * Reads systemKind from <app>-system.json when present.
23
+ * @param {string} appPath - Anchor directory
24
+ * @param {string} appName - Anchor key
25
+ * @returns {string|null}
26
+ */
27
+ function readSystemKindFromAppDir(appPath, appName) {
28
+ if (!appPath || !appName) {
29
+ return null;
30
+ }
31
+ const systemFile = path.join(appPath, `${appName}-system.json`);
32
+ if (!fs.existsSync(systemFile)) {
33
+ return null;
34
+ }
35
+ try {
36
+ const raw = JSON.parse(fs.readFileSync(systemFile, 'utf8'));
37
+ const kind = raw && (raw.systemKind || raw.systemKindKey);
38
+ return typeof kind === 'string' && kind.trim() ? kind.trim() : null;
39
+ } catch {
40
+ return null;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * @param {string} dirPath
46
+ * @returns {boolean}
47
+ */
48
+ function isExistingDirectory(dirPath) {
49
+ try {
50
+ return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();
51
+ } catch {
52
+ return false;
53
+ }
54
+ }
55
+
56
+ /**
57
+ * @param {string|undefined|null} raw
58
+ * @returns {string|null}
59
+ */
60
+ function normalizeWorkspaceOverride(raw) {
61
+ if (raw === undefined || raw === null || raw === '') {
62
+ return null;
63
+ }
64
+ const v = String(raw).trim().toLowerCase();
65
+ if (v === WORKSPACE_INTEGRATION || v === WORKSPACE_ENTERPRISE_KNOWLEDGE) {
66
+ return v;
67
+ }
68
+ throw new Error(`Unknown workspace "${raw}". Use integration or enterprise-knowledge.`);
69
+ }
70
+
71
+ function workspacePair(appPath, baseDir) {
72
+ return { appPath, baseDir };
73
+ }
74
+
75
+ function resolveFromWorkspaceOverride(workspaceOverride, appName, getIntegrationPath) {
76
+ if (workspaceOverride === WORKSPACE_ENTERPRISE_KNOWLEDGE) {
77
+ return workspacePair(getEnterpriseKnowledgePath(appName), WORKSPACE_ENTERPRISE_KNOWLEDGE);
78
+ }
79
+ if (workspaceOverride === WORKSPACE_INTEGRATION) {
80
+ return workspacePair(getIntegrationPath(appName), WORKSPACE_INTEGRATION);
81
+ }
82
+ return null;
83
+ }
84
+
85
+ function resolveAmbiguousWorkspace(ekPath, intPath, explicitKind, appName) {
86
+ const kind =
87
+ explicitKind ||
88
+ readSystemKindFromAppDir(ekPath, appName) ||
89
+ readSystemKindFromAppDir(intPath, appName);
90
+ if (kind === SYSTEM_KIND_ENTERPRISE_KNOWLEDGE) {
91
+ return workspacePair(ekPath, WORKSPACE_ENTERPRISE_KNOWLEDGE);
92
+ }
93
+ return workspacePair(intPath, WORKSPACE_INTEGRATION);
94
+ }
95
+
96
+ function resolveFromExistingPaths(ekPath, intPath, ekExists, intExists, explicitKind, appName) {
97
+ if (ekExists && !intExists) {
98
+ return workspacePair(ekPath, WORKSPACE_ENTERPRISE_KNOWLEDGE);
99
+ }
100
+ if (intExists && !ekExists) {
101
+ return workspacePair(intPath, WORKSPACE_INTEGRATION);
102
+ }
103
+ if (ekExists && intExists) {
104
+ return resolveAmbiguousWorkspace(ekPath, intPath, explicitKind, appName);
105
+ }
106
+ const kind = explicitKind || readSystemKindFromAppDir(intPath, appName);
107
+ if (kind === SYSTEM_KIND_ENTERPRISE_KNOWLEDGE) {
108
+ return workspacePair(ekPath, WORKSPACE_ENTERPRISE_KNOWLEDGE);
109
+ }
110
+ return workspacePair(intPath, WORKSPACE_INTEGRATION);
111
+ }
112
+
113
+ /**
114
+ * Resolves authoring tree for an external system or Enterprise Knowledge anchor.
115
+ * @param {string} appName - App or anchor key
116
+ * @param {Object} [options]
117
+ * @param {string} [options.workspace] - integration | enterprise-knowledge
118
+ * @param {string} [options.systemKind] - Explicit systemKind override
119
+ * @returns {{ appPath: string, baseDir: 'integration' | 'enterprise-knowledge' }}
120
+ */
121
+ function resolveAppWorkspace(appName, options = {}) {
122
+ if (!appName || typeof appName !== 'string') {
123
+ throw new Error('App name is required and must be a string');
124
+ }
125
+ const { getIntegrationPath } = require('./paths');
126
+ const workspaceOverride = normalizeWorkspaceOverride(options.workspace);
127
+ const explicitKind = typeof options.systemKind === 'string' ? options.systemKind.trim() : '';
128
+
129
+ const fromOverride = resolveFromWorkspaceOverride(
130
+ workspaceOverride,
131
+ appName,
132
+ getIntegrationPath
133
+ );
134
+ if (fromOverride) {
135
+ return fromOverride;
136
+ }
137
+
138
+ const ekPath = getEnterpriseKnowledgePath(appName);
139
+ const intPath = getIntegrationPath(appName);
140
+ return resolveFromExistingPaths(
141
+ ekPath,
142
+ intPath,
143
+ isExistingDirectory(ekPath),
144
+ isExistingDirectory(intPath),
145
+ explicitKind,
146
+ appName
147
+ );
148
+ }
149
+
150
+ /**
151
+ * Absolute path for external / Enterprise Knowledge anchor files.
152
+ * @param {string} appName
153
+ * @param {Object} [options]
154
+ * @returns {string}
155
+ */
156
+ function resolveExternalSystemPath(appName, options = {}) {
157
+ return resolveAppWorkspace(appName, options).appPath;
158
+ }
159
+
160
+ module.exports = {
161
+ WORKSPACE_INTEGRATION,
162
+ WORKSPACE_ENTERPRISE_KNOWLEDGE,
163
+ SYSTEM_KIND_ENTERPRISE_KNOWLEDGE,
164
+ readSystemKindFromAppDir,
165
+ normalizeWorkspaceOverride,
166
+ resolveAppWorkspace,
167
+ resolveExternalSystemPath
168
+ };
@@ -228,11 +228,11 @@ async function extractExternalAppConfiguration(appKey, variables, appKeyFromFile
228
228
  * @returns {Object} Webapp configuration
229
229
  */
230
230
  function extractWebappConfiguration(variables, appKeyFromFile, displayName, description, options) {
231
- const appType = variables.build?.language === 'typescript' ? 'webapp' : 'service';
231
+ const appType = variables.app?.type || 'webapp';
232
232
  const registryMode = variables.image?.registryMode || 'external';
233
233
  const port = options.port ?? getContainerPort(variables);
234
234
  const localPort = port;
235
- const language = variables.build?.language || 'typescript';
235
+ const language = variables.build?.language || variables.app?.language || 'typescript';
236
236
  const image = buildImageReference(variables, appKeyFromFile);
237
237
  const url = variables.app?.url || variables.deployment?.dataplaneUrl || variables.deployment?.appUrl || null;
238
238
 
@@ -252,7 +252,8 @@ function extractWebappConfiguration(variables, appKeyFromFile, displayName, desc
252
252
 
253
253
  async function extractAppConfiguration(variables, appKey, options) {
254
254
  const appKeyFromFile = variables.app?.key || appKey;
255
- const displayName = variables.app?.name || options.name || appKey;
255
+ const displayName =
256
+ variables.app?.displayName || variables.app?.name || options.name || appKey;
256
257
  const description = variables.app?.description || '';
257
258
 
258
259
  if (variables.app?.type === 'external') {
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Multi-slot authentications[] helpers for env.template repair (454.11).
3
+ *
4
+ * @fileoverview KV env names and paths per authentication usage slot
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const { getAuthCredentialTemplate } = require('./authentication-shape');
10
+ const { isPlatformCatalogKvRef, isLegacyKvValue } = require('./platform-kv-ref');
11
+ const {
12
+ kvEnvKeyToPath,
13
+ securityKeyToVar,
14
+ systemKeyToKvPrefix
15
+ } = require('./credential-secrets-env');
16
+ const { getKvPathSegmentForSecurityKey } = require('./credential-secrets-env-kv');
17
+
18
+ /**
19
+ * @param {string} slotKey
20
+ * @returns {string}
21
+ */
22
+ function slotKeyToEnvSegment(slotKey) {
23
+ if (!slotKey || slotKey === 'default') {
24
+ return '';
25
+ }
26
+ return `_${String(slotKey).replace(/-/g, '_').toUpperCase()}`;
27
+ }
28
+
29
+ /**
30
+ * @param {string} prefix
31
+ * @param {string} slotKey
32
+ * @param {string} securityKey
33
+ * @returns {string}
34
+ */
35
+ function buildSlotEnvName(prefix, slotKey, securityKey) {
36
+ return `KV_${prefix}${slotKeyToEnvSegment(slotKey)}_${securityKeyToVar(securityKey)}`;
37
+ }
38
+
39
+ /**
40
+ * @param {string} systemKey
41
+ * @param {string} slotKey
42
+ * @param {string} securityKey
43
+ * @returns {string|null}
44
+ */
45
+ function buildSlotKvPath(systemKey, slotKey, securityKey) {
46
+ const segment = getKvPathSegmentForSecurityKey(securityKey);
47
+ if (!segment) {
48
+ return null;
49
+ }
50
+ if (slotKey && slotKey !== 'default') {
51
+ return `kv://${systemKey}/${slotKey}/${segment}`;
52
+ }
53
+ return `kv://${systemKey}/${segment}`;
54
+ }
55
+
56
+ /**
57
+ * @param {Array} effective
58
+ * @param {Set<string>} seenNames
59
+ * @param {string} systemKey
60
+ * @param {string} prefix
61
+ * @param {object} authBlock
62
+ * @param {string} slotKey
63
+ */
64
+ function addSecurityKeysFromAuthBlock(
65
+ effective,
66
+ seenNames,
67
+ systemKey,
68
+ prefix,
69
+ authBlock,
70
+ slotKey
71
+ ) {
72
+ const credential = getAuthCredentialTemplate(authBlock);
73
+ const security = credential?.security ?? authBlock?.security;
74
+ if (!security || typeof security !== 'object') {
75
+ return;
76
+ }
77
+ for (const key of Object.keys(security)) {
78
+ const securityVal = security[key];
79
+ if (typeof securityVal === 'string' && isPlatformCatalogKvRef(securityVal)) {
80
+ continue;
81
+ }
82
+ const envName = buildSlotEnvName(prefix, slotKey, key);
83
+ if (seenNames.has(envName)) {
84
+ continue;
85
+ }
86
+ const pathVal =
87
+ kvEnvKeyToPath(envName, systemKey) || buildSlotKvPath(systemKey, slotKey, key);
88
+ if (!pathVal) {
89
+ continue;
90
+ }
91
+ effective.push({
92
+ name: envName,
93
+ value: pathVal.replace(/^kv:\/\//, ''),
94
+ location: 'keyvault'
95
+ });
96
+ seenNames.add(envName);
97
+ }
98
+ }
99
+
100
+ /**
101
+ * @param {Array} effective
102
+ * @param {object} systemParsed
103
+ * @param {string} prefix
104
+ * @param {Set<string>} seenNames
105
+ * @param {string} systemKey
106
+ */
107
+ function addFromAuthenticationsArray(effective, systemParsed, prefix, seenNames, systemKey) {
108
+ const rows = systemParsed.authentications;
109
+ if (!Array.isArray(rows) || rows.length === 0) {
110
+ return;
111
+ }
112
+ for (const row of rows) {
113
+ if (!row || typeof row !== 'object') {
114
+ continue;
115
+ }
116
+ const slotKey = typeof row.key === 'string' && row.key.trim() ? row.key.trim() : 'default';
117
+ addSecurityKeysFromAuthBlock(effective, seenNames, systemKey, prefix, row, slotKey);
118
+ }
119
+ }
120
+
121
+ /**
122
+ * @param {object} system
123
+ * @returns {Array<{name: string, value: string, usage?: string}>}
124
+ */
125
+ function buildAuthSecureVarsFromAllSlots(system) {
126
+ const systemKey = system?.key || 'external-system';
127
+ const prefix = systemKeyToKvPrefix(systemKey);
128
+ if (!prefix) {
129
+ return [];
130
+ }
131
+ const effective = [];
132
+ const seenNames = new Set();
133
+ addFromAuthenticationsArray(effective, system, prefix, seenNames, systemKey);
134
+ if (effective.length > 0) {
135
+ const rows = Array.isArray(system.authentications) ? system.authentications : [];
136
+ return effective.map((entry) => {
137
+ const suffix = entry.name.slice(`KV_${prefix}`.length);
138
+ const slot = rows.find((row) => {
139
+ const seg = slotKeyToEnvSegment(row?.key || 'default');
140
+ return seg && suffix.startsWith(`${seg}_`);
141
+ });
142
+ let value = entry.value;
143
+ if (entry.location === 'keyvault' && value && !String(value).startsWith('kv://')) {
144
+ value = `kv://${value}`;
145
+ }
146
+ return {
147
+ ...entry,
148
+ value,
149
+ usage: slot?.usage || 'api'
150
+ };
151
+ });
152
+ }
153
+ return [];
154
+ }
155
+
156
+ /**
157
+ * @param {object} security
158
+ * @param {string} prefix
159
+ * @param {string} systemKey
160
+ * @param {string} slotKey
161
+ * @param {string[]} changes
162
+ * @returns {boolean}
163
+ */
164
+ function normalizeAuthSlotSecurity(security, prefix, systemKey, slotKey, changes) {
165
+ let updated = false;
166
+ for (const key of Object.keys(security)) {
167
+ const val = security[key];
168
+ if (typeof val !== 'string' || !isLegacyKvValue(val)) {
169
+ continue;
170
+ }
171
+ const envName = buildSlotEnvName(prefix, slotKey, key);
172
+ const pathVal = kvEnvKeyToPath(envName, systemKey) || buildSlotKvPath(systemKey, slotKey, key);
173
+ if (pathVal) {
174
+ security[key] = pathVal;
175
+ changes.push(
176
+ `authentications[${slotKey}].security.${key}: normalized to path-style ${pathVal}`
177
+ );
178
+ updated = true;
179
+ }
180
+ }
181
+ return updated;
182
+ }
183
+
184
+ /**
185
+ * @param {object} systemParsed
186
+ * @param {string} systemKey
187
+ * @param {string[]} changes
188
+ * @returns {boolean}
189
+ */
190
+ function normalizeAuthenticationsSecurity(systemParsed, systemKey, changes) {
191
+ const prefix = systemKeyToKvPrefix(systemKey);
192
+ if (!prefix) {
193
+ return false;
194
+ }
195
+ const rows = systemParsed.authentications;
196
+ if (!Array.isArray(rows) || rows.length === 0) {
197
+ return false;
198
+ }
199
+ let updated = false;
200
+ for (const row of rows) {
201
+ if (!row || typeof row !== 'object') {
202
+ continue;
203
+ }
204
+ const slotKey = typeof row.key === 'string' && row.key.trim() ? row.key.trim() : 'default';
205
+ const credential = getAuthCredentialTemplate(row);
206
+ const security = credential?.security ?? row.security;
207
+ if (security && typeof security === 'object') {
208
+ updated =
209
+ normalizeAuthSlotSecurity(security, prefix, systemKey, slotKey, changes) || updated;
210
+ }
211
+ }
212
+ return updated;
213
+ }
214
+
215
+ module.exports = {
216
+ addFromAuthenticationsArray,
217
+ buildAuthSecureVarsFromAllSlots,
218
+ buildSlotEnvName,
219
+ buildSlotKvPath,
220
+ normalizeAuthenticationsSecurity,
221
+ slotKeyToEnvSegment
222
+ };
@@ -1,33 +1,85 @@
1
1
  /**
2
- * @fileoverview Detect skip-sync from Commander options and raw argv (--no-sync → sync: false).
2
+ * @fileoverview Detect skip-manifest-publish from Commander options (--no-publish).
3
3
  * @author AI Fabrix Team
4
- * @version 1.0.0
4
+ * @version 2.0.0
5
5
  */
6
6
 
7
7
  'use strict';
8
8
 
9
9
  /**
10
- * True when the user passed `--no-sync` or Commander set `sync: false` / `noSync: true`.
11
- * Do not use for `protection upload --no-sync` (post-upload datasource sync only).
10
+ * True when `node` looks like a Commander command (or a test double), not a plain opts bag.
11
+ *
12
+ * @param {*} node
13
+ * @returns {boolean}
14
+ */
15
+ function isCommanderLike(node) {
16
+ if (!node || typeof node !== 'object') {
17
+ return false;
18
+ }
19
+ return (
20
+ Array.isArray(node.rawArgs) ||
21
+ typeof node.opts === 'function' ||
22
+ (Object.prototype.hasOwnProperty.call(node, 'parent') &&
23
+ (node.parent === null ||
24
+ node.parent === undefined ||
25
+ typeof node.parent === 'object'))
26
+ );
27
+ }
28
+
29
+ /**
30
+ * Collect argv-like arrays from a Commander command and its parents.
31
+ * Subcommand `rawArgs` is often empty; the flag lives on the root command.
32
+ * Safely no-ops for null/undefined or plain options objects (not Command-like).
33
+ *
34
+ * @param {import('commander').Command|null|undefined} cmd
35
+ * @returns {string[]}
36
+ */
37
+ function collectCommanderRawArgs(cmd) {
38
+ if (!isCommanderLike(cmd)) {
39
+ return [];
40
+ }
41
+ const chunks = [];
42
+ const seen = new Set();
43
+ let current = cmd;
44
+ while (isCommanderLike(current)) {
45
+ if (seen.has(current)) {
46
+ break;
47
+ }
48
+ seen.add(current);
49
+ if (Array.isArray(current.rawArgs) && current.rawArgs.length > 0) {
50
+ chunks.push(...current.rawArgs);
51
+ }
52
+ current = current.parent;
53
+ }
54
+ return chunks;
55
+ }
56
+
57
+ /**
58
+ * True when the user passed `--no-publish` or set `noPublish: true` (programmatic).
59
+ *
60
+ * Commander maps `.option('--no-publish', …)` to `publish: false` (default `true`),
61
+ * not `noPublish: true`. Detect that shape as well as programmatic `noPublish`.
12
62
  *
13
63
  * @param {Object|null|undefined} options - Commander-parsed options
14
64
  * @param {import('commander').Command} [cmd] - Commander command (for rawArgs fallback)
15
65
  * @returns {boolean}
16
66
  */
17
- function cliOptsSkipSync(options, cmd) {
67
+ function cliOptsSkipPublish(options, cmd) {
18
68
  if (!options || typeof options !== 'object') {
19
69
  return false;
20
70
  }
21
- if (options.noSync === true) {
71
+ if (options.noPublish === true) {
22
72
  return true;
23
73
  }
24
- if (options.sync === false) {
74
+ // Commander `--no-X` → property `X` defaults true; flag sets it false
75
+ if (options.publish === false) {
25
76
  return true;
26
77
  }
27
- const raw = cmd && Array.isArray(cmd.rawArgs) ? cmd.rawArgs : [];
28
- return raw.includes('--no-sync');
78
+ return collectCommanderRawArgs(cmd).includes('--no-publish');
29
79
  }
30
80
 
31
81
  module.exports = {
32
- cliOptsSkipSync
82
+ cliOptsSkipPublish,
83
+ collectCommanderRawArgs,
84
+ isCommanderLike
33
85
  };
@@ -219,9 +219,14 @@ function formatAzureError(errorMsg) {
219
219
  if (errorMsg.includes('Docker build failed') || errorMsg.includes('Build failed: Docker')) {
220
220
  return null;
221
221
  }
222
- // Only match ACR-specific authentication errors, not general authentication failures
223
- if (errorMsg.includes('ACR') || errorMsg.includes('azurecr.io') ||
224
- (errorMsg.includes('authenticate') && (errorMsg.includes('registry') || errorMsg.includes('container')))) {
222
+ const lowerMsg = String(errorMsg || '').toLowerCase();
223
+ const hasAcrDomain = /\b[a-z0-9.-]+\.azurecr\.io\b/i.test(errorMsg);
224
+ const hasAcrKeyword = /\bacr\b/.test(lowerMsg);
225
+ const hasAuthAndRegistryContext =
226
+ /\bauthenticate\b/.test(lowerMsg) &&
227
+ (/\bregistry\b/.test(lowerMsg) || /\bcontainer\b/.test(lowerMsg));
228
+ // Only match ACR-specific authentication errors, not general authentication failures.
229
+ if (hasAcrKeyword || hasAcrDomain || hasAuthAndRegistryContext) {
225
230
  return [
226
231
  ' Azure Container Registry authentication failed.',
227
232
  ' Run: az acr login --name <registry-name>',
@@ -336,6 +341,10 @@ function tryFormatErrorWithFormatters(errorMsg) {
336
341
  }
337
342
 
338
343
  function formatError(error) {
344
+ if (error && error.gateFailure === true) {
345
+ return [` ${error.message || 'Deploy gate failed'}`];
346
+ }
347
+
339
348
  // If error has formatted message (from API error handler), use it directly
340
349
  if (error.formatted) {
341
350
  return formatFormattedError(error.formatted);
@@ -410,6 +419,9 @@ function isAuthenticationError(error) {
410
419
  * @param {string} command - Command that failed
411
420
  */
412
421
  function handleCommandError(error, command) {
422
+ if (error && error.compactGateAbortLogged === true) {
423
+ return;
424
+ }
413
425
  const errorMessages = formatError(error);
414
426
  const skipDoctor = isMissingSecretsErrorMessage(error && error.message);
415
427
  logError(command, errorMessages, { skipDoctor });
@@ -0,0 +1,29 @@
1
+ /**
2
+ * CLI workspace helpers (456.5) — auto-detect only; `--workspace` flag removed in 155.0.
3
+ *
4
+ * @fileoverview Path options for external / Enterprise Knowledge anchors
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ /**
12
+ * @param {Object} [_cliOptions]
13
+ * @returns {{}}
14
+ */
15
+ function workspaceDetectionOptions(_cliOptions = {}) {
16
+ return {};
17
+ }
18
+
19
+ /**
20
+ * @returns {null}
21
+ */
22
+ function workspaceOptionDefinition() {
23
+ return null;
24
+ }
25
+
26
+ module.exports = {
27
+ workspaceDetectionOptions,
28
+ workspaceOptionDefinition
29
+ };