@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
@@ -7,12 +7,12 @@
7
7
  "key": "external-system-schema",
8
8
  "name": "External System Configuration Schema",
9
9
  "description": "JSON schema for validating ExternalSystem configuration files",
10
- "version": "1.9.0",
10
+ "version": "1.13.1",
11
11
  "type": "schema",
12
12
  "category": "integration",
13
13
  "author": "AI Fabrix Team",
14
14
  "createdAt": "2024-01-01T00:00:00Z",
15
- "updatedAt": "2026-06-15T00:00:00Z",
15
+ "updatedAt": "2026-07-22T00:00:00Z",
16
16
  "compatibility": {
17
17
  "minVersion": "1.4.0",
18
18
  "maxVersion": "2.0.0",
@@ -27,6 +27,46 @@
27
27
  ],
28
28
  "dependencies": [],
29
29
  "changelog": [
30
+ {
31
+ "version": "1.13.1",
32
+ "date": "2026-07-22T00:00:00Z",
33
+ "changes": [
34
+ "Added optional configuration[].category for portal UI grouping labels (parity with application-schema)."
35
+ ],
36
+ "breaking": false
37
+ },
38
+ {
39
+ "version": "1.13.0",
40
+ "date": "2026-07-02T00:00:00Z",
41
+ "changes": [
42
+ "Added authentications[] with usage enum (api, webhookInbound, syncExecution, messageInbound, messageOutbound, callback, provisioning). Legacy authentication retained with deprecation."
43
+ ],
44
+ "breaking": false
45
+ },
46
+ {
47
+ "version": "1.12.0",
48
+ "date": "2026-06-30T00:00:00Z",
49
+ "changes": [
50
+ "authentication.credential.formFields accepts array (allowlist) or object with defaults { visible, required, locked } and fields[] for allowlist/denylist projection."
51
+ ],
52
+ "breaking": false
53
+ },
54
+ {
55
+ "version": "1.11.0",
56
+ "date": "2026-06-30T00:00:00Z",
57
+ "changes": [
58
+ "authentication.credential.formFields[] items may set optional label and placeholder overrides per field."
59
+ ],
60
+ "breaking": false
61
+ },
62
+ {
63
+ "version": "1.10.0",
64
+ "date": "2026-06-30T00:00:00Z",
65
+ "changes": [
66
+ "Added optional authentication.credential.formFields[] for per-system Authentication tab field projection."
67
+ ],
68
+ "breaking": false
69
+ },
30
70
  {
31
71
  "version": "1.9.0",
32
72
  "date": "2026-06-15T00:00:00Z",
@@ -212,8 +252,7 @@
212
252
  "compileCom",
213
253
  "generateEnterpriseDatasources",
214
254
  "generateRestContracts",
215
- "generateMcpContracts",
216
- "runDigitalWorkerTask"
255
+ "generateMcpContracts"
217
256
  ],
218
257
  "description": "Platform task type executed when the subscription fires."
219
258
  },
@@ -222,104 +261,6 @@
222
261
  "minimum": 1,
223
262
  "default": 1,
224
263
  "description": "Task definition version snapshot for audit."
225
- },
226
- "digitalWorkerKey": {
227
- "type": "string",
228
- "minLength": 1,
229
- "description": "Target digital worker system key (runDigitalWorkerTask)."
230
- },
231
- "taskType": {
232
- "type": "string",
233
- "minLength": 1,
234
- "description": "Worker task type label (runDigitalWorkerTask)."
235
- },
236
- "objectiveTemplate": {
237
- "type": "string",
238
- "description": "Objective template with {{recordId}} placeholders."
239
- },
240
- "requiresApproval": {
241
- "type": "boolean",
242
- "default": false
243
- },
244
- "owner": {
245
- "$ref": "#/$defs/subscriptionTaskOwner"
246
- }
247
- },
248
- "additionalProperties": false
249
- },
250
- "subscriptionCondition": {
251
- "type": "object",
252
- "required": [
253
- "field",
254
- "operator"
255
- ],
256
- "properties": {
257
- "field": {
258
- "type": "string",
259
- "minLength": 1,
260
- "description": "Path against afterSummary (default) or before.* prefix."
261
- },
262
- "operator": {
263
- "type": "string",
264
- "enum": [
265
- "equals",
266
- "notEquals",
267
- "in",
268
- "notIn",
269
- "exists",
270
- "missing",
271
- "changed",
272
- "greaterThan",
273
- "lessThan"
274
- ]
275
- },
276
- "value": {}
277
- },
278
- "additionalProperties": false
279
- },
280
- "subscriptionTriggerPolicy": {
281
- "type": "object",
282
- "required": [
283
- "mode"
284
- ],
285
- "properties": {
286
- "mode": {
287
- "type": "string",
288
- "enum": [
289
- "immediate",
290
- "debounce",
291
- "scheduled"
292
- ]
293
- },
294
- "windowSeconds": {
295
- "type": "integer",
296
- "minimum": 1,
297
- "description": "Required when mode is debounce."
298
- }
299
- },
300
- "additionalProperties": false
301
- },
302
- "subscriptionTaskOwner": {
303
- "type": "object",
304
- "required": [
305
- "mode"
306
- ],
307
- "properties": {
308
- "mode": {
309
- "type": "string",
310
- "enum": [
311
- "explicit",
312
- "recordField"
313
- ]
314
- },
315
- "userId": {
316
- "type": "string",
317
- "minLength": 1
318
- },
319
- "field": {
320
- "type": "string",
321
- "minLength": 1,
322
- "description": "Record summary field for recordField mode."
323
264
  }
324
265
  },
325
266
  "additionalProperties": false
@@ -350,24 +291,11 @@
350
291
  "event": {
351
292
  "type": "string",
352
293
  "minLength": 1,
353
- "description": "V1 event namespace (platform.*, schedule.*, or record.*)."
294
+ "description": "V1 event namespace (platform.* or schedule.*)."
354
295
  },
355
296
  "filter": {
356
297
  "$ref": "#/$defs/subscriptionFilter"
357
298
  },
358
- "conditions": {
359
- "type": "array",
360
- "items": {
361
- "$ref": "#/$defs/subscriptionCondition"
362
- }
363
- },
364
- "triggerPolicy": {
365
- "$ref": "#/$defs/subscriptionTriggerPolicy"
366
- },
367
- "deduplicationKeyTemplate": {
368
- "type": "string",
369
- "description": "Default: {{subscriptionId}}:{{resourceType}}:{{recordId}}:{{task.taskType}}"
370
- },
371
299
  "task": {
372
300
  "$ref": "#/$defs/subscriptionTask"
373
301
  },
@@ -587,7 +515,7 @@
587
515
  },
588
516
  {
589
517
  "key": "clientId",
590
- "required": true
518
+ "required": false
591
519
  },
592
520
  {
593
521
  "key": "expectedIssuer",
@@ -611,7 +539,12 @@
611
539
  "description": "Optional URL used when testing the credential (GET). Full URL or path. For OIDC, discovery URL is typically used if testEndpoint omitted."
612
540
  }
613
541
  ],
614
- "security": []
542
+ "security": [
543
+ {
544
+ "key": "clientSecret",
545
+ "required": false
546
+ }
547
+ ]
615
548
  },
616
549
  "hmac": {
617
550
  "variables": [
@@ -645,6 +578,14 @@
645
578
  {
646
579
  "key": "signingSecret",
647
580
  "required": true
581
+ },
582
+ {
583
+ "key": "botToken",
584
+ "required": false
585
+ },
586
+ {
587
+ "key": "clientSecret",
588
+ "required": false
648
589
  }
649
590
  ]
650
591
  },
@@ -703,6 +644,117 @@
703
644
  "type": "boolean",
704
645
  "description": "Template is immutable after first deploy.",
705
646
  "default": true
647
+ },
648
+ "formFields": {
649
+ "description": "Optional Authentication tab field projection. Omitted: security keys only; variables hidden. Array: allowlist. Object: defaults.visible false = allowlist on fields[]; defaults.visible true = registry denylist.",
650
+ "oneOf": [
651
+ {
652
+ "type": "array",
653
+ "items": {
654
+ "type": "object",
655
+ "required": [
656
+ "name"
657
+ ],
658
+ "properties": {
659
+ "name": {
660
+ "type": "string",
661
+ "minLength": 1,
662
+ "description": "Registry field name for authentication.credential.method."
663
+ },
664
+ "required": {
665
+ "type": "boolean",
666
+ "description": "Override registry required flag for this field."
667
+ },
668
+ "visible": {
669
+ "type": "boolean",
670
+ "description": "When false, exclude this field from the projected form."
671
+ },
672
+ "locked": {
673
+ "type": "boolean",
674
+ "description": "When true, show read-only (prefilled from variables or stored config)."
675
+ },
676
+ "label": {
677
+ "type": "string",
678
+ "minLength": 1,
679
+ "description": "Override registry display label for this field on the Authentication tab."
680
+ },
681
+ "placeholder": {
682
+ "type": "string",
683
+ "description": "Override registry placeholder for this field on the Authentication tab."
684
+ }
685
+ },
686
+ "additionalProperties": false
687
+ }
688
+ },
689
+ {
690
+ "type": "object",
691
+ "required": [
692
+ "fields"
693
+ ],
694
+ "properties": {
695
+ "defaults": {
696
+ "type": "object",
697
+ "properties": {
698
+ "visible": {
699
+ "type": "boolean"
700
+ },
701
+ "required": {
702
+ "type": "boolean"
703
+ },
704
+ "locked": {
705
+ "type": "boolean"
706
+ }
707
+ },
708
+ "additionalProperties": false
709
+ },
710
+ "visible": {
711
+ "type": "boolean",
712
+ "description": "Default visible flag for entries in fields[] (false = allowlist mode)."
713
+ },
714
+ "required": {
715
+ "type": "boolean",
716
+ "description": "Default required flag for entries in fields[]."
717
+ },
718
+ "locked": {
719
+ "type": "boolean",
720
+ "description": "Default locked flag for entries in fields[]."
721
+ },
722
+ "fields": {
723
+ "type": "array",
724
+ "items": {
725
+ "type": "object",
726
+ "required": [
727
+ "name"
728
+ ],
729
+ "properties": {
730
+ "name": {
731
+ "type": "string",
732
+ "minLength": 1
733
+ },
734
+ "required": {
735
+ "type": "boolean"
736
+ },
737
+ "visible": {
738
+ "type": "boolean"
739
+ },
740
+ "locked": {
741
+ "type": "boolean"
742
+ },
743
+ "label": {
744
+ "type": "string",
745
+ "minLength": 1
746
+ },
747
+ "placeholder": {
748
+ "type": "string"
749
+ }
750
+ },
751
+ "additionalProperties": false
752
+ }
753
+ }
754
+ },
755
+ "additionalProperties": false
756
+ }
757
+ ]
706
758
  }
707
759
  },
708
760
  "additionalProperties": false
@@ -721,6 +773,80 @@
721
773
  }
722
774
  },
723
775
  "additionalProperties": false
776
+ },
777
+ "authenticationUsageEntry": {
778
+ "type": "object",
779
+ "description": "Authentication slot with usage separation. Reuses authType branches from legacy authentication.",
780
+ "required": [
781
+ "key",
782
+ "usage",
783
+ "authType"
784
+ ],
785
+ "properties": {
786
+ "key": {
787
+ "type": "string",
788
+ "pattern": "^[a-zA-Z0-9_-]+$",
789
+ "minLength": 1,
790
+ "maxLength": 64
791
+ },
792
+ "usage": {
793
+ "type": "string",
794
+ "enum": [
795
+ "api",
796
+ "webhookInbound",
797
+ "syncExecution",
798
+ "messageInbound",
799
+ "messageOutbound",
800
+ "callback",
801
+ "provisioning"
802
+ ]
803
+ },
804
+ "authType": {
805
+ "type": "string",
806
+ "enum": [
807
+ "credential",
808
+ "apiProvider",
809
+ "none"
810
+ ]
811
+ },
812
+ "credential": {
813
+ "$ref": "#/$defs/credentialTemplate"
814
+ },
815
+ "apiProvider": {
816
+ "$ref": "#/$defs/apiProviderReference"
817
+ }
818
+ },
819
+ "additionalProperties": false,
820
+ "allOf": [
821
+ {
822
+ "if": {
823
+ "properties": {
824
+ "authType": {
825
+ "const": "credential"
826
+ }
827
+ }
828
+ },
829
+ "then": {
830
+ "required": [
831
+ "credential"
832
+ ]
833
+ }
834
+ },
835
+ {
836
+ "if": {
837
+ "properties": {
838
+ "authType": {
839
+ "const": "apiProvider"
840
+ }
841
+ }
842
+ },
843
+ "then": {
844
+ "required": [
845
+ "apiProvider"
846
+ ]
847
+ }
848
+ }
849
+ ]
724
850
  }
725
851
  },
726
852
  "x-systemKindCatalog": {
@@ -913,7 +1039,7 @@
913
1039
  "default": false
914
1040
  },
915
1041
  "authentication": {
916
- "description": "Nested authentication: authType credential (local template), apiProvider (Miso delegated), or none.",
1042
+ "description": "Nested authentication: authType credential (local template), apiProvider (Miso delegated), or none. Deprecated — prefer authentications[] with usage.",
917
1043
  "oneOf": [
918
1044
  {
919
1045
  "type": "object",
@@ -961,6 +1087,14 @@
961
1087
  }
962
1088
  ]
963
1089
  },
1090
+ "authentications": {
1091
+ "type": "array",
1092
+ "description": "Multi-slot authentication with usage separation. One authentication normalizes to [{key:default, usage:api, ...}].",
1093
+ "items": {
1094
+ "$ref": "#/$defs/authenticationUsageEntry"
1095
+ },
1096
+ "uniqueItems": true
1097
+ },
964
1098
  "openapi": {
965
1099
  "type": "object",
966
1100
  "description": "System-level connectivity and bootstrap hints for OpenAPI-backed systems (e.g. default specUrl for discovery, documentKey alignment with shared registry entries). Not the authoritative per-datasource vendor OpenAPI contract; that is declared on the datasource via externalSpec and validated against imported material.",
@@ -1037,6 +1171,12 @@
1037
1171
  "required": {
1038
1172
  "type": "boolean"
1039
1173
  },
1174
+ "category": {
1175
+ "type": "string",
1176
+ "description": "Optional UI grouping label for portal/deployment wizard Configuration tab",
1177
+ "minLength": 1,
1178
+ "maxLength": 100
1179
+ },
1040
1180
  "portalInput": {
1041
1181
  "type": "object",
1042
1182
  "required": [
@@ -9,6 +9,9 @@
9
9
  { "cliFlag": "-e, --env <env>", "requestField": null, "note": "Controller/dataplane URL and token selection" },
10
10
  { "cliFlag": "-p, --payload <file>", "requestField": "payloadTemplate", "note": "Loaded object merged into request when integration-style test" },
11
11
  { "cliFlag": "--timeout <ms>", "requestField": null, "note": "Client aggregate HTTP budget (POST + polls)" },
12
+ { "cliFlag": "--version <target>", "requestField": "e2eOptions.versionTarget", "runType": "e2e", "default": "latest", "values": ["latest", "running", "<versionId>"] },
13
+ { "cliFlag": "--sync-mode <mode>", "requestField": "e2eOptions.syncMode", "runType": "e2e", "default": "auto", "values": ["auto", "never", "force"], "note": "Distinct from --sync (publish local files before test)" },
14
+ { "cliFlag": "--sync", "requestField": null, "note": "Publish local integration files before test (upload); not the same as --sync-mode" },
12
15
  { "cliFlag": "--debug [level]", "requestField": "includeDebug", "default": false, "note": "summary|full|raw affects TTY appendix only; any presence sets includeDebug" },
13
16
  { "cliFlag": "--no-async", "requestField": "asyncRun", "note": "When true on CLI, omit asyncRun or set false; sync-only POST" },
14
17
  { "cliFlag": "--no-run-scenarios", "requestField": "e2eOptions.runScenarios", "runType": "e2e" },
@@ -204,6 +204,19 @@ parameters:
204
204
  notes: >-
205
205
  JWT signing secret; generated on first ensure. Azure Bicep typically uses `${prefix}-secrets-jwtKeyVault`.
206
206
 
207
+ # LICENSE_JWT=kv://miso-controller-jwt-licenseKeyVault — local default skips Mori/JWT license checks.
208
+ # Controller ignores DEVELOPMENT when DEPLOYMENT=azure.
209
+ - key: miso-controller-jwt-licenseKeyVault
210
+ scope: app
211
+ generator:
212
+ type: literal
213
+ value: 'DEVELOPMENT'
214
+ ensureOn: [upInfra, resolveApp]
215
+ azure:
216
+ notes: >-
217
+ Local/dev default DEVELOPMENT disables license validation (no Mori/JWT required).
218
+ Ignored when DEPLOYMENT=azure. Override with a real offline license JWT (or empty for Mori) in non-dev.
219
+
207
220
  # Exact entry so this is not caught by *KeyVault → randomBytes32 (invalid email).
208
221
  - key: miso-controller-admin-emailKeyVault
209
222
  scope: app
@@ -327,7 +340,18 @@ parameters:
327
340
  vaultSecretName: dataplane-client-secretKeyVault
328
341
  notes: Per-app OAuth client secret for dataplane; generated on first ensure.
329
342
 
330
- # Mori / telemetry: optional locally (LICENSE_JWT=DEVELOPMENT skips Mori); empty until integrated.
343
+ # Mori / telemetry: optional locally (LICENSE_JWT via miso-controller-jwt-licenseKeyVault=DEVELOPMENT skips Mori).
344
+ # MORI_AUTH_METHOD=kv://mori-controller-auth-methodKeyVault — local default apiKey.
345
+ - key: mori-controller-auth-methodKeyVault
346
+ scope: infra
347
+ generator:
348
+ type: literal
349
+ value: 'apiKey'
350
+ ensureOn: [upInfra, resolveApp]
351
+ azure:
352
+ notes: >-
353
+ Local/dev default apiKey. Override when using Mori basic auth or other methods.
354
+
331
355
  - key: mori-controller-api-keyKeyVault
332
356
  scope: infra
333
357
  generator:
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": 6,
2
+ "version": 8,
3
3
  "semantics": {
4
4
  "visibility.show": "When false, the field name is omitted from default portal field lists, embedded credential form field lists, and from public API credentialConfig read models (GET/list with decrypt=false), in addition to any omission driven by encrypted. GET with decrypt=true returns the full decrypted config for authorized callers and does not apply this visibility filter.",
5
5
  "visibility.showValue": "UI-only: whether stored values may be shown versus placeholders in form flows that honor this flag. Does not control encryption at rest or public API stripping.",
@@ -114,10 +114,12 @@
114
114
  "display": {
115
115
  "label": "Tenant ID",
116
116
  "control": "text",
117
- "enabled": true
117
+ "enabled": true,
118
+ "placeholder": "Azure AD directory (tenant) ID",
119
+ "description": "Used for Microsoft identity platforms. May also appear in tokenUrl as {{tenantId}}."
118
120
  },
119
121
  "visibility": {
120
- "show": false,
122
+ "show": true,
121
123
  "showValue": true
122
124
  },
123
125
  "encrypted": false
@@ -149,6 +151,20 @@
149
151
  "showValue": false
150
152
  },
151
153
  "encrypted": true
154
+ },
155
+ {
156
+ "name": "accessTokenExpiresAt",
157
+ "required": false,
158
+ "display": {
159
+ "label": "Access Token Expires At",
160
+ "control": "text",
161
+ "enabled": false
162
+ },
163
+ "visibility": {
164
+ "show": false,
165
+ "showValue": false
166
+ },
167
+ "encrypted": false
152
168
  }
153
169
  ]
154
170
  },
@@ -394,7 +410,7 @@
394
410
  ]
395
411
  },
396
412
  "oidc": {
397
- "active": false,
413
+ "active": true,
398
414
  "display": {
399
415
  "label": "OIDC",
400
416
  "order": 5
@@ -485,7 +501,7 @@
485
501
  ]
486
502
  },
487
503
  "hmac": {
488
- "active": false,
504
+ "active": true,
489
505
  "display": {
490
506
  "label": "HMAC",
491
507
  "order": 6
@@ -279,6 +279,15 @@
279
279
  }
280
280
  },
281
281
  "additionalProperties": false
282
+ },
283
+ "fieldHints": {
284
+ "type": "object",
285
+ "description": "Optional per-field extraction hints for governed FK review (plan 441.1).",
286
+ "additionalProperties": {
287
+ "type": "string",
288
+ "minLength": 1,
289
+ "maxLength": 512
290
+ }
282
291
  }
283
292
  },
284
293
  "additionalProperties": false
@@ -90,7 +90,7 @@ function logTrustWarningsAndFindings(run, opts) {
90
90
  function logTrustFooter(run, opts) {
91
91
  logger.log('');
92
92
  logger.log(metaGray(' ── Integration reality (informative) ──'));
93
- logger.log(metaGray(` Local manifest: ${opts.noSync ? 'not uploaded (--no-sync)' : 'uploaded before run'}`));
93
+ logger.log(metaGray(` Local manifest: ${opts.noPublish ? 'not uploaded (--no-publish)' : 'uploaded before run'}`));
94
94
  logger.log(metaGray(` Publish gate: ${publishGateLine(run.trustDecision, opts.strict === true)}`));
95
95
  logger.log(SEP);
96
96
  }
package/lib/utils/api.js CHANGED
@@ -426,8 +426,14 @@ async function authenticatedApiCall(url, options = {}, tokenOrAuthConfig) {
426
426
  headers
427
427
  });
428
428
 
429
- // Only attempt device token refresh on 401 when user Bearer token was used (not for client-token)
430
- if (!response.success && response.status === 401 && authType !== 'client-token') {
429
+ // Only attempt device token refresh on 401 when user Bearer token was used (not for client-token).
430
+ // Token-forward (builder-api): never refresh from mount device store — keep the caller JWT.
431
+ if (
432
+ !response.success &&
433
+ response.status === 401 &&
434
+ authType !== 'client-token' &&
435
+ !(typeof tokenOrAuthConfig === 'object' && tokenOrAuthConfig?.preserveBearer)
436
+ ) {
431
437
  try {
432
438
  const { forceRefreshDeviceToken } = require('./token-manager');
433
439
  const refreshedToken = await forceRefreshDeviceToken(authControllerUrl || extractControllerUrl(url));