@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,172 @@
1
+ /**
2
+ * @fileoverview Evidence Fabrix v2 API (dataplane /api/v1/evidence/*).
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const { createDataplaneApiClient } = require('./index');
10
+ const { unwrapApiData } = require('../utils/external-system-readiness-core');
11
+
12
+ const BASE = '/api/v1/evidence';
13
+
14
+ /**
15
+ * @param {*} res
16
+ * @returns {*}
17
+ */
18
+ function unwrapBody(res) {
19
+ return unwrapApiData(res) ?? res;
20
+ }
21
+
22
+ /**
23
+ * @param {*} res
24
+ * @param {string} action
25
+ * @returns {*}
26
+ */
27
+ function assertApiSuccess(res, action) {
28
+ if (res && res.success === false) {
29
+ const message = res.formattedError || res.error || `${action} failed`;
30
+ const err = new Error(message);
31
+ err.status = res.status;
32
+ err.errorData = res.errorData;
33
+ throw err;
34
+ }
35
+ return res;
36
+ }
37
+
38
+ /**
39
+ * @param {string} dataplaneUrl
40
+ * @param {Object} authConfig
41
+ * @param {Object} [options]
42
+ * @param {string} [options.controllerUrl]
43
+ * @returns {import('./index').ApiClient}
44
+ */
45
+ function createEvidenceClient(dataplaneUrl, authConfig, options = {}) {
46
+ return createDataplaneApiClient(dataplaneUrl, authConfig, {
47
+ controllerUrl: options.controllerUrl || null
48
+ });
49
+ }
50
+
51
+ /**
52
+ * @param {string} dataplaneUrl
53
+ * @param {Object} authConfig
54
+ * @param {import('./types/evidence.types').EvidenceListParams} [params]
55
+ * @param {Object} [options]
56
+ * @returns {Promise<import('./types/evidence.types').EvidenceRow[]>}
57
+ */
58
+ async function listEvidence(dataplaneUrl, authConfig, params = {}, options = {}) {
59
+ const client = createEvidenceClient(dataplaneUrl, authConfig, options);
60
+ const query = {};
61
+ if (params.resourceType) query.resourceType = params.resourceType;
62
+ if (params.roleKey) query.roleKey = params.roleKey;
63
+ if (params.genericOnly === true) query.genericOnly = true;
64
+ if (params.status) query.status = params.status;
65
+ const res = assertApiSuccess(
66
+ await client.get(BASE, { params: query }),
67
+ 'List evidence'
68
+ );
69
+ const body = unwrapBody(res);
70
+ return Array.isArray(body?.data) ? body.data : [];
71
+ }
72
+
73
+ /**
74
+ * @param {string} dataplaneUrl
75
+ * @param {Object} authConfig
76
+ * @param {string} evidenceId
77
+ * @param {Object} [options]
78
+ * @returns {Promise<import('./types/evidence.types').EvidenceRow>}
79
+ */
80
+ async function getEvidence(dataplaneUrl, authConfig, evidenceId, options = {}) {
81
+ const client = createEvidenceClient(dataplaneUrl, authConfig, options);
82
+ const res = assertApiSuccess(
83
+ await client.get(`${BASE}/${encodeURIComponent(evidenceId)}`),
84
+ 'Get evidence'
85
+ );
86
+ return unwrapBody(res);
87
+ }
88
+
89
+ /**
90
+ * @param {string} dataplaneUrl
91
+ * @param {Object} authConfig
92
+ * @param {import('./types/evidence.types').EvidenceCreatePayload} payload
93
+ * @param {Object} [options]
94
+ * @returns {Promise<import('./types/evidence.types').EvidenceRow>}
95
+ */
96
+ async function insertEvidence(dataplaneUrl, authConfig, payload, options = {}) {
97
+ const client = createEvidenceClient(dataplaneUrl, authConfig, options);
98
+ const res = assertApiSuccess(
99
+ await client.post(BASE, { body: payload }),
100
+ 'Insert evidence'
101
+ );
102
+ return unwrapBody(res);
103
+ }
104
+
105
+ /**
106
+ * @param {string} dataplaneUrl
107
+ * @param {Object} authConfig
108
+ * @param {string} evidenceId
109
+ * @param {import('./types/evidence.types').EvidenceUpdatePayload} payload
110
+ * @param {Object} [options]
111
+ * @returns {Promise<import('./types/evidence.types').EvidenceRow>}
112
+ */
113
+ async function updateEvidence(dataplaneUrl, authConfig, evidenceId, payload, options = {}) {
114
+ const client = createEvidenceClient(dataplaneUrl, authConfig, options);
115
+ const res = assertApiSuccess(
116
+ await client.patch(`${BASE}/${encodeURIComponent(evidenceId)}`, { body: payload }),
117
+ 'Update evidence'
118
+ );
119
+ return unwrapBody(res);
120
+ }
121
+
122
+ /**
123
+ * @param {string} dataplaneUrl
124
+ * @param {Object} authConfig
125
+ * @param {string} evidenceId
126
+ * @param {Object} [options]
127
+ * @returns {Promise<void>}
128
+ */
129
+ async function deleteEvidence(dataplaneUrl, authConfig, evidenceId, options = {}) {
130
+ const client = createEvidenceClient(dataplaneUrl, authConfig, options);
131
+ assertApiSuccess(
132
+ await client.delete(`${BASE}/${encodeURIComponent(evidenceId)}`),
133
+ 'Delete evidence'
134
+ );
135
+ }
136
+
137
+ /**
138
+ * @param {string} dataplaneUrl
139
+ * @param {Object} authConfig
140
+ * @param {Object[]} rows
141
+ * @param {Object} [options]
142
+ * @param {string} [options.controllerUrl]
143
+ * @param {boolean} [options.dryRun]
144
+ * @returns {Promise<{ inserted: number, updated: number, dryRun: boolean, data: import('./types/evidence.types').EvidenceRow[] }>}
145
+ */
146
+ async function loadEvidenceBulk(dataplaneUrl, authConfig, rows, options = {}) {
147
+ const client = createEvidenceClient(dataplaneUrl, authConfig, options);
148
+ const params = {};
149
+ if (options.dryRun === true) {
150
+ params.dryRun = true;
151
+ }
152
+ const res = assertApiSuccess(
153
+ await client.post(`${BASE}/load`, { body: { data: rows }, params }),
154
+ 'Load evidence'
155
+ );
156
+ const body = unwrapBody(res);
157
+ return {
158
+ inserted: Number(body?.inserted || 0),
159
+ updated: Number(body?.updated || 0),
160
+ dryRun: Boolean(body?.dryRun),
161
+ data: Array.isArray(body?.data) ? body.data : []
162
+ };
163
+ }
164
+
165
+ module.exports = {
166
+ listEvidence,
167
+ getEvidence,
168
+ insertEvidence,
169
+ updateEvidence,
170
+ deleteEvidence,
171
+ loadEvidenceBulk
172
+ };
@@ -116,12 +116,18 @@ async function deleteExternalSystem(dataplaneUrl, systemIdOrKey, authConfig) {
116
116
  * @param {string} dataplaneUrl - Dataplane base URL
117
117
  * @param {string} systemIdOrKey - System ID or key
118
118
  * @param {Object} authConfig - Authentication configuration
119
+ * @param {Object} [requestOptions] - Optional query params
120
+ * @param {string} [requestOptions.versionTarget] - running | latest | explicit version id
119
121
  * @returns {Promise<Object>} Config response with application schema and dataSources
120
122
  * @throws {Error} If request fails
121
123
  */
122
- async function getExternalSystemConfig(dataplaneUrl, systemIdOrKey, authConfig) {
124
+ async function getExternalSystemConfig(dataplaneUrl, systemIdOrKey, authConfig, requestOptions = {}) {
123
125
  const client = createDataplaneApiClient(dataplaneUrl, authConfig);
124
- return await client.get(`/api/v1/external/systems/${systemIdOrKey}/config`);
126
+ const query = {};
127
+ if (requestOptions.versionTarget) {
128
+ query.versionTarget = String(requestOptions.versionTarget);
129
+ }
130
+ return await client.get(`/api/v1/external/systems/${systemIdOrKey}/config`, { query });
125
131
  }
126
132
 
127
133
  /**
@@ -247,11 +247,15 @@ async function testDatasourceViaPipeline({ dataplaneUrl, systemKey, datasourceKe
247
247
  * @returns {Promise<Object>} API envelope `{ success, data }` where `data` is PublicationResult (uploadId, system, datasources, generateMcpContract, …)
248
248
  * @throws {Error} If upload fails
249
249
  */
250
+ /** Multi-datasource publish often exceeds the default 30s HTTP timeout. */
251
+ const PIPELINE_UPLOAD_TIMEOUT_MS = 300000;
252
+
250
253
  async function uploadApplicationViaPipeline(dataplaneUrl, authConfig, payload) {
251
254
  const body = { ...payload, status: payload.status ?? 'draft' };
252
255
  const client = createDataplaneApiClient(dataplaneUrl, authConfig);
253
256
  return await client.post('/api/v1/pipeline/upload', {
254
- body
257
+ body,
258
+ timeoutMs: PIPELINE_UPLOAD_TIMEOUT_MS
255
259
  });
256
260
  }
257
261
 
@@ -12,7 +12,7 @@ const BASE = '/api/v1/resource-types';
12
12
 
13
13
  /**
14
14
  * List resource types (paginated)
15
- * @requiresPermission {Controller} resourceTypes:read
15
+ * @requiresPermission {Controller} resource-types:read
16
16
  * @async
17
17
  * @function listResourceTypes
18
18
  * @param {string} controllerUrl
@@ -34,7 +34,7 @@ async function listResourceTypes(controllerUrl, authConfig, options = {}) {
34
34
 
35
35
  /**
36
36
  * Get a resource type by id or key
37
- * @requiresPermission {Controller} resourceTypes:read
37
+ * @requiresPermission {Controller} resource-types:read
38
38
  * @async
39
39
  * @function getResourceType
40
40
  * @param {string} controllerUrl
@@ -49,7 +49,7 @@ async function getResourceType(controllerUrl, authConfig, resourceTypeIdOrKey) {
49
49
 
50
50
  /**
51
51
  * Create a resource type
52
- * @requiresPermission {Controller} resourceTypes:create
52
+ * @requiresPermission {Controller} resource-types:create
53
53
  * @async
54
54
  * @function createResourceType
55
55
  * @param {string} controllerUrl
@@ -69,12 +69,13 @@ async function createResourceType(controllerUrl, authConfig, body) {
69
69
  if (body.category) payload.category = body.category;
70
70
  if (body.defaultRiskLevel) payload.defaultRiskLevel = body.defaultRiskLevel;
71
71
  if (body.status) payload.status = body.status;
72
+ if (body.domain) payload.domain = body.domain;
72
73
  return await client.post(BASE, { body: payload });
73
74
  }
74
75
 
75
76
  /**
76
77
  * Create-if-missing (idempotent): if a resource type already exists for the key, return success.
77
- * @requiresPermission {Controller} resourceTypes:read + resourceTypes:create
78
+ * @requiresPermission {Controller} resource-types:read + resource-types:create
78
79
  * @async
79
80
  * @function createResourceTypeIdempotent
80
81
  * @param {string} controllerUrl
@@ -0,0 +1,121 @@
1
+ /**
2
+ * @fileoverview Business roles API (Controller /api/v1/roles)
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const { ApiClient } = require('./index');
10
+
11
+ const BASE = '/api/v1/roles';
12
+
13
+ /**
14
+ * List business roles (paginated)
15
+ * @requiresPermission {Controller} roles:read
16
+ * @async
17
+ * @param {string} controllerUrl
18
+ * @param {Object} authConfig
19
+ * @param {Object} [options]
20
+ * @returns {Promise<Object>}
21
+ */
22
+ async function listRoles(controllerUrl, authConfig, options = {}) {
23
+ const client = new ApiClient(controllerUrl, authConfig);
24
+ return await client.get(BASE, { params: options });
25
+ }
26
+
27
+ /**
28
+ * Get a business role by id or key
29
+ * @requiresPermission {Controller} roles:read
30
+ * @async
31
+ * @param {string} controllerUrl
32
+ * @param {Object} authConfig
33
+ * @param {string} roleIdOrKey
34
+ * @returns {Promise<Object>}
35
+ */
36
+ async function getRole(controllerUrl, authConfig, roleIdOrKey) {
37
+ const client = new ApiClient(controllerUrl, authConfig);
38
+ return await client.get(`${BASE}/${encodeURIComponent(roleIdOrKey)}`);
39
+ }
40
+
41
+ /**
42
+ * @param {Object} payload
43
+ * @param {string} key
44
+ * @param {*} value
45
+ * @returns {void}
46
+ */
47
+ function assignOptionalString(payload, key, value) {
48
+ if (value !== undefined && value !== null && value !== '') {
49
+ payload[key] = value;
50
+ }
51
+ }
52
+
53
+ /**
54
+ * @param {import('./types/roles.types').CreateBusinessRoleRequest} body
55
+ * @returns {Object}
56
+ */
57
+ function buildCreateRoleBody(body) {
58
+ const payload = {
59
+ key: body.key,
60
+ domainKey: body.domainKey,
61
+ displayName: body.displayName
62
+ };
63
+ assignOptionalString(payload, 'description', body.description);
64
+ assignOptionalString(payload, 'purpose', body.purpose);
65
+ assignOptionalString(payload, 'businessOutcome', body.businessOutcome);
66
+ assignOptionalString(payload, 'source', body.source);
67
+ if (body.isActive !== undefined && body.isActive !== null) {
68
+ payload.isActive = Boolean(body.isActive);
69
+ }
70
+ if (body.metadata && typeof body.metadata === 'object') {
71
+ payload.metadata = body.metadata;
72
+ }
73
+ return payload;
74
+ }
75
+
76
+ /**
77
+ * Create a business role
78
+ * @requiresPermission {Controller} roles:create
79
+ * @async
80
+ * @param {string} controllerUrl
81
+ * @param {Object} authConfig
82
+ * @param {import('./types/roles.types').CreateBusinessRoleRequest} body
83
+ * @returns {Promise<Object>}
84
+ */
85
+ async function createRole(controllerUrl, authConfig, body) {
86
+ const client = new ApiClient(controllerUrl, authConfig);
87
+ return await client.post(BASE, { body: buildCreateRoleBody(body) });
88
+ }
89
+
90
+ /**
91
+ * Create-if-missing (idempotent): if a role already exists for the key, return success.
92
+ * @requiresPermission {Controller} roles:read + roles:create
93
+ * @async
94
+ * @param {string} controllerUrl
95
+ * @param {Object} authConfig
96
+ * @param {import('./types/roles.types').CreateBusinessRoleRequest} body
97
+ * @returns {Promise<{ created: boolean, response: Object }>}
98
+ */
99
+ async function createRoleIdempotent(controllerUrl, authConfig, body) {
100
+ const key = String(body?.key || '').trim();
101
+ if (!key) {
102
+ throw new Error('Role key is required');
103
+ }
104
+ const getRes = await getRole(controllerUrl, authConfig, key);
105
+ if (getRes && getRes.success === true) {
106
+ return { created: false, response: getRes };
107
+ }
108
+ const createRes = await createRole(controllerUrl, authConfig, body);
109
+ if (createRes && createRes.success === true) {
110
+ return { created: true, response: createRes };
111
+ }
112
+ const msg = createRes?.error || createRes?.formattedError || 'Failed to create role';
113
+ throw new Error(msg);
114
+ }
115
+
116
+ module.exports = {
117
+ listRoles,
118
+ getRole,
119
+ createRole,
120
+ createRoleIdempotent
121
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview Enterprise Knowledge API type definitions
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ /**
8
+ * @typedef {Object} GenerateManifestSubscription
9
+ * @property {string} key
10
+ * @property {string} [event]
11
+ * @property {Object<string, *>} [filter]
12
+ * @property {Object<string, *>} [task]
13
+ */
14
+
15
+ /**
16
+ * @typedef {Object} GenerateManifestRequest
17
+ * @property {string} domain
18
+ * @property {string} ownerSystemKey
19
+ * @property {string} [displayName]
20
+ * @property {string} [description]
21
+ * @property {GenerateManifestSubscription[]} [subscriptions]
22
+ * @property {string[]} [sourceSystemKeys]
23
+ * @property {string} [version]
24
+ */
25
+
26
+ /**
27
+ * @typedef {Object} GenerateManifestFinding
28
+ * @property {string} code
29
+ * @property {string} severity
30
+ * @property {string} message
31
+ * @property {Object<string, *>} [context]
32
+ */
33
+
34
+ /**
35
+ * @typedef {Object} GenerateManifestResponse
36
+ * @property {boolean} previewOnly
37
+ * @property {string} ownerSystemKey
38
+ * @property {Object<string, *>} externalSystem
39
+ * @property {Object<string, *>[]} externalDataSources
40
+ * @property {string} version
41
+ * @property {GenerateManifestFinding[]} compilerFindings
42
+ * @property {GenerateManifestFinding[]} trustFindings
43
+ * @property {string} message
44
+ */
45
+
46
+ module.exports = {};
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @fileoverview Evidence kind API type definitions (Controller /api/v1/evidence-kinds)
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ /**
8
+ * Create evidence kind request body (API shape uses domainKey)
9
+ * @typedef {Object} CreateEvidenceKindRequest
10
+ * @property {string} key - Catalog key (lowercase, digits, underscores)
11
+ * @property {string} domainKey - Enterprise domain key
12
+ * @property {string} displayName - Human-readable name
13
+ * @property {string} purpose - Purpose (required by Controller)
14
+ * @property {string} [description] - Optional description
15
+ * @property {string} [expectedUse] - Expected use guidance
16
+ * @property {string} [defaultSeverity] - low | medium | high | critical
17
+ * @property {boolean} [requiresApproval] - Approval flag
18
+ * @property {boolean} [isActive] - Active flag
19
+ * @property {number} [sortOrder] - Sort order
20
+ * @property {string} [source] - Provenance source
21
+ * @property {Object} [metadata] - Extensions
22
+ */
23
+
24
+ /**
25
+ * Evidence kind record
26
+ * @typedef {Object} EvidenceKindRecord
27
+ * @property {string} id - Controller id
28
+ * @property {string} key - Catalog key
29
+ * @property {string} domainKey - Enterprise domain key
30
+ * @property {string} displayName - Display name
31
+ * @property {string} purpose - Purpose
32
+ * @property {string} [description] - Description
33
+ * @property {string} [expectedUse] - Expected use
34
+ * @property {string} [defaultSeverity] - Default severity
35
+ * @property {boolean} requiresApproval - Approval flag
36
+ * @property {boolean} isActive - Active flag
37
+ * @property {number} sortOrder - Sort order
38
+ * @property {string} [source] - Source
39
+ * @property {Object} [metadata] - Metadata
40
+ */
41
+
42
+ module.exports = {};
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @fileoverview JSDoc types for Evidence Fabrix dataplane API.
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ /**
8
+ * @typedef {'active' | 'disabled'} EvidenceStatus
9
+ */
10
+
11
+ /**
12
+ * @typedef {'self' | 'role' | 'roleExceptSelf'} EvidenceApprover
13
+ */
14
+
15
+ /**
16
+ * @typedef {Object} EvidenceApprovalPolicy
17
+ * @property {boolean} required
18
+ * @property {EvidenceApprover} approver
19
+ * @property {string|null} [roleKey]
20
+ */
21
+
22
+ /**
23
+ * @typedef {Object} EvidenceRow
24
+ * @property {string} id
25
+ * @property {string} resourceType
26
+ * @property {string|null} [roleKey]
27
+ * @property {string} title
28
+ * @property {string|null} [description]
29
+ * @property {string} when
30
+ * @property {string} expectedBehavior
31
+ * @property {number} order
32
+ * @property {EvidenceStatus} status
33
+ * @property {number|null} [generationConfidence]
34
+ * @property {string|null} [suggestionExplanation]
35
+ * @property {EvidenceApprovalPolicy} approval
36
+ * @property {'human' | 'assistant'} createdByType
37
+ * @property {string} createdById
38
+ * @property {string} createdAt
39
+ * @property {string} updatedAt
40
+ */
41
+
42
+ /**
43
+ * @typedef {Object} EvidenceCreatePayload
44
+ * @property {string} resourceType
45
+ * @property {string|null} [roleKey]
46
+ * @property {string} title
47
+ * @property {string|null} [description]
48
+ * @property {string} when
49
+ * @property {string} expectedBehavior
50
+ * @property {number|null} [order]
51
+ * @property {EvidenceStatus} [status]
52
+ * @property {EvidenceApprovalPolicy} [approval]
53
+ */
54
+
55
+ /**
56
+ * @typedef {Partial<EvidenceCreatePayload>} EvidenceUpdatePayload
57
+ */
58
+
59
+ /**
60
+ * @typedef {Object} EvidenceListParams
61
+ * @property {string} [resourceType]
62
+ * @property {string} [roleKey]
63
+ * @property {boolean} [genericOnly]
64
+ * @property {EvidenceStatus} [status]
65
+ */
66
+
67
+ module.exports = {};
@@ -28,6 +28,7 @@
28
28
  * @property {ResourceTypeCategory} [category] - Catalog category
29
29
  * @property {ResourceTypeRiskLevel} [defaultRiskLevel] - Default risk level
30
30
  * @property {ResourceTypeStatus} [status] - Lifecycle status
31
+ * @property {string} domain - Enterprise domain (static dimension catalog)
31
32
  */
32
33
 
33
34
  /**
@@ -40,6 +41,7 @@
40
41
  * @property {ResourceTypeCategory} category - Category
41
42
  * @property {ResourceTypeRiskLevel} defaultRiskLevel - Default risk
42
43
  * @property {ResourceTypeStatus} status - Status
44
+ * @property {string} domain - Enterprise domain
43
45
  */
44
46
 
45
47
  module.exports = {};
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @fileoverview Business role API type definitions (Controller /api/v1/roles)
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ /**
8
+ * Create business role request body (API shape uses domainKey)
9
+ * @typedef {Object} CreateBusinessRoleRequest
10
+ * @property {string} key - Catalog key (lowercase, hyphens)
11
+ * @property {string} domainKey - Enterprise domain key
12
+ * @property {string} displayName - Human-readable name
13
+ * @property {string} [description] - Optional description
14
+ * @property {string} [purpose] - Role purpose
15
+ * @property {string} [businessOutcome] - Business outcome
16
+ * @property {boolean} [isActive] - Active flag
17
+ * @property {string} [source] - Provenance source
18
+ * @property {Object} [metadata] - Compiler fields and extensions
19
+ */
20
+
21
+ /**
22
+ * Business role record
23
+ * @typedef {Object} BusinessRoleRecord
24
+ * @property {string} id - Controller id
25
+ * @property {string} key - Catalog key
26
+ * @property {string} domainKey - Enterprise domain key
27
+ * @property {string} displayName - Display name
28
+ * @property {string} [description] - Description
29
+ * @property {string} [purpose] - Purpose
30
+ * @property {string} [businessOutcome] - Business outcome
31
+ * @property {boolean} isActive - Active flag
32
+ * @property {string} [source] - Source
33
+ * @property {Object} [metadata] - Metadata
34
+ */
35
+
36
+ module.exports = {};
@@ -16,7 +16,7 @@ const { getActiveIntegrationCertificate, verifyIntegrationCertificate } = requir
16
16
  function certificateIdString(id) {
17
17
  if (id === undefined || id === null) return null;
18
18
  if (typeof id === 'string') return id.trim() || null;
19
- if (typeof id === 'object' && id !== null && typeof id.id === 'string') return id.id.trim() || null;
19
+ if (typeof id === 'object' && typeof id.id === 'string') return id.id.trim() || null;
20
20
  return null;
21
21
  }
22
22
 
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Distinguish controller pipeline applications from connected-system (external) registry rows.
3
+ *
4
+ * @fileoverview Filter helpers for aifabrix app list vs connected systems list
5
+ * @author AI Fabrix Team
6
+ * @version 2.0.0
7
+ */
8
+
9
+ /**
10
+ * @param {Object} app - Controller application row
11
+ * @returns {boolean} True when the row represents a connected system, not a runnable app
12
+ */
13
+ function isControllerExternalApplication(app) {
14
+ if (!app || typeof app !== 'object') return false;
15
+ const cfg = app.configuration && typeof app.configuration === 'object' ? app.configuration : {};
16
+ const appType = app.type ?? cfg.type;
17
+ return String(appType || '').toLowerCase() === 'external';
18
+ }
19
+
20
+ /**
21
+ * @param {Array<Object>} applications - Controller application rows
22
+ * @returns {{ applications: Array<Object>, excludedCount: number }}
23
+ */
24
+ function filterControllerApplications(applications) {
25
+ const list = Array.isArray(applications) ? applications : [];
26
+ const excludedCount = list.filter(isControllerExternalApplication).length;
27
+ return {
28
+ applications: list.filter((app) => !isControllerExternalApplication(app)),
29
+ excludedCount
30
+ };
31
+ }
32
+
33
+ module.exports = {
34
+ isControllerExternalApplication,
35
+ filterControllerApplications
36
+ };
package/lib/app/deploy.js CHANGED
@@ -255,7 +255,7 @@ function displayDeploymentResults(result) {
255
255
  * @returns {Promise<Object|null>} Deployment result if external, null otherwise
256
256
  */
257
257
  async function handleExternalDeployment(appName, options) {
258
- const { isExternal } = await detectAppType(appName);
258
+ const { isExternal } = await detectAppType(appName, options);
259
259
  if (isExternal) {
260
260
  const externalDeploy = require('../external-system/deploy');
261
261
  await externalDeploy.deployExternalSystem(appName, options);