@aifabrix/builder 2.49.1 → 2.50.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 (413) hide show
  1. package/.cursor/process/README.md +9 -0
  2. package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
  3. package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
  4. package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
  5. package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
  6. package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
  7. package/.cursor/skills/README.md +1 -0
  8. package/.dockerignore +52 -0
  9. package/.eslintignore +22 -0
  10. package/README.md +2 -0
  11. package/bin/builder-api-cleanup.js +26 -0
  12. package/bin/builder-api-nest.js +10 -0
  13. package/bin/builder-api-spike.js +19 -0
  14. package/enterprise-knowledge/README.md +50 -0
  15. package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
  16. package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
  17. package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
  18. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
  19. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
  20. package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
  21. package/integration/README.md +81 -0
  22. package/integration/github/README.md +53 -0
  23. package/integration/github/application.json +21 -0
  24. package/integration/github/deploy.js +72 -0
  25. package/integration/github/env.template +11 -0
  26. package/integration/github/github-datasource-issue-comments.json +239 -0
  27. package/integration/github/github-datasource-issues.json +399 -0
  28. package/integration/github/github-datasource-repository.json +354 -0
  29. package/integration/github/github-deploy.json +1202 -0
  30. package/integration/github/github-system.json +82 -0
  31. package/integration/hubspot-test/README.md +1 -1
  32. package/jest.isolated-projects.js +31 -1
  33. package/jest.projects.js +87 -1
  34. package/lib/api/dev-server-https.js +1 -1
  35. package/lib/api/dev.api.js +1 -0
  36. package/lib/api/enterprise-knowledge.api.js +63 -0
  37. package/lib/api/evidence.api.js +172 -0
  38. package/lib/api/external-systems.api.js +8 -2
  39. package/lib/api/host-ops.api.js +69 -0
  40. package/lib/api/resource-types.api.js +1 -0
  41. package/lib/api/types/enterprise-knowledge.types.js +46 -0
  42. package/lib/api/types/evidence.types.js +67 -0
  43. package/lib/api/types/resource-types.types.js +2 -0
  44. package/lib/app/controller-application-filter.js +36 -0
  45. package/lib/app/deploy.js +1 -1
  46. package/lib/app/list-external-systems.js +130 -0
  47. package/lib/app/list.js +20 -8
  48. package/lib/app/run.js +3 -1
  49. package/lib/app/show-display.js +8 -3
  50. package/lib/app/show-online.js +178 -0
  51. package/lib/app/show.js +37 -88
  52. package/lib/build/builder-api-docker-staging.js +47 -0
  53. package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
  54. package/lib/build/standard-docker-build.js +2 -0
  55. package/lib/certification/post-unified-cert-sync.js +4 -31
  56. package/lib/certification/sync-after-external-command.js +0 -1
  57. package/lib/certification/sync-system-certification.js +0 -3
  58. package/lib/channels/add-channel.js +40 -34
  59. package/lib/channels/approval-guides/chatgpt.js +33 -0
  60. package/lib/channels/approval-guides/credential-portal.js +38 -0
  61. package/lib/channels/approval-guides/index.js +110 -0
  62. package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
  63. package/lib/channels/approval-guides/slack.js +34 -0
  64. package/lib/channels/approval-guides/teams-bot.js +35 -0
  65. package/lib/channels/approval-guides/web-embed.js +32 -0
  66. package/lib/channels/channel-approval-guide.js +11 -0
  67. package/lib/channels/channel-artifact-generator.js +16 -4
  68. package/lib/channels/channel-audit.js +3 -0
  69. package/lib/channels/channel-auth-context.js +1 -1
  70. package/lib/channels/channel-description.js +59 -0
  71. package/lib/channels/channel-integration-generator.js +13 -230
  72. package/lib/channels/channel-integration-template.js +94 -0
  73. package/lib/channels/channel-runtime-resolver.js +43 -3
  74. package/lib/channels/channel-status-display.js +66 -26
  75. package/lib/channels/channel-targets.js +3 -3
  76. package/lib/cli/index.js +27 -3
  77. package/lib/cli/infra-guided.js +5 -1
  78. package/lib/cli/setup-app-external-create.js +111 -0
  79. package/lib/cli/setup-app.help.js +1 -1
  80. package/lib/cli/setup-app.js +38 -125
  81. package/lib/cli/setup-app.test-commands.js +26 -52
  82. package/lib/cli/setup-certification-commands.js +4 -4
  83. package/lib/cli/setup-certification.help.js +9 -9
  84. package/lib/cli/setup-dev-path-commands.js +24 -0
  85. package/lib/cli/setup-dev.js +115 -16
  86. package/lib/cli/setup-external-system-help.js +4 -6
  87. package/lib/cli/setup-external-system.js +58 -52
  88. package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
  89. package/lib/cli/setup-infra-up-platform-action.js +3 -1
  90. package/lib/cli/setup-infra.js +15 -0
  91. package/lib/cli/setup-list.js +43 -0
  92. package/lib/cli/setup-utility-repair.js +26 -7
  93. package/lib/cli/setup-utility.js +5 -3
  94. package/lib/commands/app.js +15 -43
  95. package/lib/commands/channel-add-setup.js +110 -0
  96. package/lib/commands/channel.js +42 -8
  97. package/lib/commands/datasource-sync-display.js +96 -0
  98. package/lib/commands/datasource-sync-policy.js +210 -0
  99. package/lib/commands/datasource-test-trust-cli.js +6 -6
  100. package/lib/commands/datasource-unified-test-cli.js +2 -1
  101. package/lib/commands/datasource-unified-test-cli.options.js +33 -23
  102. package/lib/commands/deploy-gate-failure-details.js +163 -0
  103. package/lib/commands/deploy-gate-orchestrator.js +322 -0
  104. package/lib/commands/dev-cli-handlers.js +64 -61
  105. package/lib/commands/dev-host-ops-params.js +91 -0
  106. package/lib/commands/dev-host-ops-poll.js +111 -0
  107. package/lib/commands/dev-host-ops.js +252 -0
  108. package/lib/commands/dev-init.js +3 -1
  109. package/lib/commands/enterprise-knowledge.js +284 -0
  110. package/lib/commands/evidence-cli-leaves.js +250 -0
  111. package/lib/commands/evidence.js +51 -0
  112. package/lib/commands/governance-cli-shared.js +2 -2
  113. package/lib/commands/governance-command-action.js +2 -2
  114. package/lib/commands/governance-fixture-subjects.js +85 -0
  115. package/lib/commands/governance.js +1 -1
  116. package/lib/commands/lifecycle-command-action.js +2 -2
  117. package/lib/commands/lifecycle-external.js +3 -3
  118. package/lib/commands/manifest-cli-auth.js +29 -0
  119. package/lib/commands/manifest-cli-commands.js +170 -0
  120. package/lib/commands/manifest-cli-integration-path.js +63 -0
  121. package/lib/commands/manifest.js +21 -0
  122. package/lib/commands/protection-cli-leaves.js +3 -3
  123. package/lib/commands/repair-auth-apply.js +15 -1
  124. package/lib/commands/repair-authentications-454.js +169 -0
  125. package/lib/commands/repair-capability-openapi-warnings.js +126 -0
  126. package/lib/commands/repair-datasource-apply.js +135 -0
  127. package/lib/commands/repair-datasource-auto-rbac.js +62 -1
  128. package/lib/commands/repair-datasource-http-service-contract.js +239 -0
  129. package/lib/commands/repair-datasource-operation-security.js +180 -0
  130. package/lib/commands/repair-datasource-run.js +7 -2
  131. package/lib/commands/repair-datasource-sync-operations.js +177 -0
  132. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
  133. package/lib/commands/repair-datasource.js +12 -68
  134. package/lib/commands/repair-env-template.js +11 -1
  135. package/lib/commands/repair-external-run.js +121 -31
  136. package/lib/commands/repair-internal.js +1 -1
  137. package/lib/commands/repair-openapi-export.js +156 -0
  138. package/lib/commands/repair-openapi-sync.js +19 -2
  139. package/lib/commands/repair-orchestration-datasource-split.js +259 -0
  140. package/lib/commands/repair-persist.js +22 -1
  141. package/lib/commands/repair-rbac-platform-preset.js +204 -0
  142. package/lib/commands/repair-rbac-reader-roles.js +191 -0
  143. package/lib/commands/repair-rbac.js +163 -86
  144. package/lib/commands/repair-steps.js +83 -18
  145. package/lib/commands/repair-system-permissions.js +1 -0
  146. package/lib/commands/repair.js +1 -1
  147. package/lib/commands/resource-type.js +65 -26
  148. package/lib/commands/run-post-publish-data-sync.js +68 -0
  149. package/lib/commands/setup-modes.js +1 -1
  150. package/lib/commands/test-e2e-external.js +21 -8
  151. package/lib/commands/test-governance-cli-options.js +2 -2
  152. package/lib/commands/test-trust-cli-options.js +2 -2
  153. package/lib/commands/up-builder-api-bootstrap.js +71 -0
  154. package/lib/commands/up-builder-api-provision.js +241 -0
  155. package/lib/commands/up-builder-api.js +88 -0
  156. package/lib/commands/up-common.js +25 -1
  157. package/lib/commands/upload-credential-push-log.js +117 -0
  158. package/lib/commands/upload-data-sync-finalize.js +60 -0
  159. package/lib/commands/upload-probe.js +66 -0
  160. package/lib/commands/upload-publish-context.js +4 -1
  161. package/lib/commands/upload-sidecar-followups.js +55 -27
  162. package/lib/commands/upload.js +116 -157
  163. package/lib/commands/verify-governance-combined-external.js +1 -1
  164. package/lib/commands/verify-governance-db.js +2 -2
  165. package/lib/commands/verify-operations-command-action.js +2 -2
  166. package/lib/commands/verify-operations-step-plan.js +2 -2
  167. package/lib/commands/verify-operations-steps.js +2 -2
  168. package/lib/commands/verify-trust-command-action.js +1 -1
  169. package/lib/commands/wizard-core.js +1 -1
  170. package/lib/commands/wizard-headless.js +2 -1
  171. package/lib/core/admin-secrets.js +2 -6
  172. package/lib/core/secrets-env-content.js +10 -4
  173. package/lib/core/secrets-env-write.js +2 -13
  174. package/lib/datasource/agent-trust-run.js +3 -3
  175. package/lib/datasource/deploy.js +3 -1
  176. package/lib/datasource/test-e2e.js +6 -1
  177. package/lib/datasource/unified-validation-run-body.js +4 -1
  178. package/lib/datasource/unified-validation-run.js +1 -1
  179. package/lib/deployment/deploy-poll-ui.js +73 -12
  180. package/lib/deployment/deployer-poll-run.js +113 -0
  181. package/lib/deployment/deployer.js +17 -87
  182. package/lib/evidence/dataplane-context.js +21 -0
  183. package/lib/evidence/evidence-display.js +78 -0
  184. package/lib/evidence/evidence-service.js +392 -0
  185. package/lib/external-system/deploy.js +290 -112
  186. package/lib/external-system/download.js +7 -3
  187. package/lib/external-system/test-execution.js +1 -1
  188. package/lib/external-system/test-system-level.js +8 -10
  189. package/lib/external-system/test.js +12 -6
  190. package/lib/generator/deploy-script.js +73 -0
  191. package/lib/generator/external.js +2 -1
  192. package/lib/generator/index.js +17 -2
  193. package/lib/generator/wizard.js +3 -36
  194. package/lib/internal/fs-real-sync.js +22 -1
  195. package/lib/internal/node-fs.js +2 -0
  196. package/lib/lifecycle/lifecycle-governance-options.js +1 -1
  197. package/lib/lifecycle/verify-step-progress.js +1 -1
  198. package/lib/programmatic/access-log.js +26 -0
  199. package/lib/programmatic/auth-config.js +44 -0
  200. package/lib/programmatic/bearer-auth.js +176 -0
  201. package/lib/programmatic/builder-api-request.js +175 -0
  202. package/lib/programmatic/builder-api-route-dispatch.js +82 -0
  203. package/lib/programmatic/builder-api-runtime-config.js +42 -0
  204. package/lib/programmatic/builder-api-server.js +230 -0
  205. package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
  206. package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
  207. package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
  208. package/lib/programmatic/builder-help-envelope.js +36 -0
  209. package/lib/programmatic/builder-help-fixtures.js +200 -0
  210. package/lib/programmatic/builder-help-governance.js +172 -0
  211. package/lib/programmatic/builder-help-schema-catalog.js +92 -0
  212. package/lib/programmatic/builder-help.js +361 -0
  213. package/lib/programmatic/capability-registry.js +77 -0
  214. package/lib/programmatic/command-options.js +32 -0
  215. package/lib/programmatic/enterprise-mcp-client.js +98 -0
  216. package/lib/programmatic/http-problem-details.js +99 -0
  217. package/lib/programmatic/http-route-match.js +40 -0
  218. package/lib/programmatic/idempotency-cache.js +69 -0
  219. package/lib/programmatic/index.js +53 -0
  220. package/lib/programmatic/integration-path-scope.js +39 -0
  221. package/lib/programmatic/log-redaction.js +66 -0
  222. package/lib/programmatic/manifest-get-section.js +146 -0
  223. package/lib/programmatic/manifest-patch-section.js +252 -0
  224. package/lib/programmatic/manifest-repair.js +122 -0
  225. package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
  226. package/lib/programmatic/manifest-section-io.js +225 -0
  227. package/lib/programmatic/manifest-section-quality.js +171 -0
  228. package/lib/programmatic/manifest-section-registry-data.js +269 -0
  229. package/lib/programmatic/manifest-section-registry.js +205 -0
  230. package/lib/programmatic/nest-http-bridge.js +34 -0
  231. package/lib/programmatic/openapi-component-schemas.js +68 -0
  232. package/lib/programmatic/openapi-description-enricher.js +117 -0
  233. package/lib/programmatic/openapi-descriptions.js +190 -0
  234. package/lib/programmatic/openapi-docs-serving.js +123 -0
  235. package/lib/programmatic/openapi-help-schemas.js +63 -0
  236. package/lib/programmatic/openapi-manifest-schemas.js +141 -0
  237. package/lib/programmatic/openapi-operation-bindings.js +274 -0
  238. package/lib/programmatic/openapi-request-schemas.js +155 -0
  239. package/lib/programmatic/openapi-result-schemas.js +476 -0
  240. package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
  241. package/lib/programmatic/openapi-schema-descriptions-core.js +159 -0
  242. package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
  243. package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
  244. package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
  245. package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
  246. package/lib/programmatic/openapi-schema-helpers.js +93 -0
  247. package/lib/programmatic/openapi-spec.js +203 -0
  248. package/lib/programmatic/orchestration-openapi-meta.js +159 -0
  249. package/lib/programmatic/platform-rbac-catalog.js +90 -0
  250. package/lib/programmatic/request-timeout.js +53 -0
  251. package/lib/programmatic/route-handler-map.js +143 -0
  252. package/lib/programmatic/route-handlers-context.js +29 -0
  253. package/lib/programmatic/route-handlers.js +33 -0
  254. package/lib/programmatic/run-certify.js +57 -0
  255. package/lib/programmatic/run-enterprise-mcp.js +32 -0
  256. package/lib/programmatic/run-lifecycle.js +29 -0
  257. package/lib/programmatic/run-repair.js +41 -0
  258. package/lib/programmatic/run-repository-emcp.js +54 -0
  259. package/lib/programmatic/run-template-workspace.js +61 -0
  260. package/lib/programmatic/run-test.js +49 -0
  261. package/lib/programmatic/run-upload.js +63 -0
  262. package/lib/programmatic/run-validate.js +53 -0
  263. package/lib/programmatic/run-wizard.js +40 -0
  264. package/lib/programmatic/system-key.js +48 -0
  265. package/lib/programmatic/wizard-config-normalize.js +118 -0
  266. package/lib/programmatic/workspace-cleanup.js +128 -0
  267. package/lib/programmatic/workspace-context.js +145 -0
  268. package/lib/programmatic/workspace-lock.js +75 -0
  269. package/lib/programmatic/workspace-meta.js +64 -0
  270. package/lib/programmatic/workspace-ops.js +149 -0
  271. package/lib/protection/run-commands-upload-sync.js +35 -0
  272. package/lib/protection/run-commands.js +2 -20
  273. package/lib/protection/upload-batch.js +11 -7
  274. package/lib/resolvers/resource-type-file.js +22 -0
  275. package/lib/schema/external-datasource.schema.json +161 -1
  276. package/lib/schema/external-system.schema.json +242 -4
  277. package/lib/schema/flag-map-validation-run.json +3 -0
  278. package/lib/schema/type/credential-field-registry.json +2 -2
  279. package/lib/schema/type/document-storage.json +9 -0
  280. package/lib/utils/agent-trust-run-display.js +1 -1
  281. package/lib/utils/app-path-resolve.js +168 -0
  282. package/lib/utils/authentication-env-template.js +222 -0
  283. package/lib/utils/cli-sync-options.js +7 -11
  284. package/lib/utils/cli-utils.js +4 -0
  285. package/lib/utils/cli-workspace-options.js +29 -0
  286. package/lib/utils/compose-generate-docker-compose.js +102 -0
  287. package/lib/utils/configuration-env-resolver.js +203 -27
  288. package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
  289. package/lib/utils/datasource-test-run-certification-debug.js +130 -0
  290. package/lib/utils/datasource-test-run-debug-display.js +2 -0
  291. package/lib/utils/datasource-test-run-debug-slice.js +7 -0
  292. package/lib/utils/datasource-test-run-display.js +2 -1
  293. package/lib/utils/dev-init-ssh-merge.js +165 -23
  294. package/lib/utils/dev-pin-share-instructions.js +110 -0
  295. package/lib/utils/dev-ssh-config-helper.js +177 -33
  296. package/lib/utils/enterprise-knowledge-paths.js +142 -0
  297. package/lib/utils/env-copy.js +2 -1
  298. package/lib/utils/env-dotenv-format.js +103 -0
  299. package/lib/utils/external-env-template.js +4 -1
  300. package/lib/utils/external-system-display.js +5 -1
  301. package/lib/utils/external-system-readiness-compact-blocks.js +221 -0
  302. package/lib/utils/external-system-readiness-compact-display.js +324 -0
  303. package/lib/utils/external-system-readiness-core.js +16 -0
  304. package/lib/utils/external-system-readiness-deploy-display.js +29 -11
  305. package/lib/utils/external-system-readiness-display-internals.js +3 -1
  306. package/lib/utils/external-system-readiness-display.js +20 -30
  307. package/lib/utils/external-system-system-test-tty-certification.js +135 -0
  308. package/lib/utils/external-system-system-test-tty.js +5 -41
  309. package/lib/utils/help-builder.js +6 -1
  310. package/lib/utils/host-ops-job-labels.js +236 -0
  311. package/lib/utils/host-ops-job-result.js +61 -0
  312. package/lib/utils/host-ops-poll-ui.js +163 -0
  313. package/lib/utils/integration-path-resolve.js +112 -0
  314. package/lib/utils/paths-reload-source.js +148 -0
  315. package/lib/utils/paths-system-builder-keys.js +25 -0
  316. package/lib/utils/paths.js +151 -26
  317. package/lib/utils/runtime-configuration-values.js +64 -2
  318. package/lib/utils/secrets-helpers.js +5 -1
  319. package/lib/utils/ssh-known-hosts.js +130 -0
  320. package/lib/utils/test-target-cli-options.js +75 -0
  321. package/lib/utils/upload-sync-options.js +4 -0
  322. package/lib/utils/validation-run-request.js +11 -2
  323. package/lib/validation/external-manifest-validator.js +11 -1
  324. package/lib/validation/openapi-contract-surface-validator.js +426 -0
  325. package/lib/validation/openapi-contract-vendor-validation.js +238 -0
  326. package/lib/validation/validate-external-file.js +160 -0
  327. package/lib/validation/validate.js +6 -117
  328. package/package.json +46 -29
  329. package/packages/builder-api/README.md +120 -0
  330. package/packages/builder-api/package.json +30 -0
  331. package/packages/builder-api/src/app.module.ts +7 -0
  332. package/packages/builder-api/src/auth/auth.module.ts +5 -0
  333. package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
  334. package/packages/builder-api/src/main.ts +16 -0
  335. package/packages/builder-api/tsconfig.json +15 -0
  336. package/scripts/check-builder-api-architecture-grep.js +79 -0
  337. package/scripts/docker_image_content_gate.js +47 -0
  338. package/scripts/docker_image_content_gate.sh +5 -0
  339. package/scripts/export-builder-api-evidence.js +262 -0
  340. package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
  341. package/scripts/lib/builder-api-docker-staging-core.js +183 -0
  342. package/scripts/lib/docker-image-content-gate-core.js +166 -0
  343. package/scripts/lib/plan-actor.js +109 -0
  344. package/scripts/lib/plan-config.js +20 -0
  345. package/scripts/lib/plan-gates.js +154 -0
  346. package/scripts/lib/plan-meta.js +104 -0
  347. package/scripts/lib/plan-parse.js +162 -0
  348. package/scripts/lib/plan-prevalidate-gates.js +326 -0
  349. package/scripts/lib/plan-run-core.js +125 -0
  350. package/scripts/lib/plan-run-report.js +108 -0
  351. package/scripts/plan-approve.js +24 -0
  352. package/scripts/plan-archive.js +49 -0
  353. package/scripts/plan-run.js +13 -0
  354. package/scripts/plan-set-actor.js +21 -0
  355. package/scripts/plan-validate.js +80 -0
  356. package/scripts/pnpm/af.mjs +110 -0
  357. package/scripts/pnpm/check-quiet.mjs +32 -0
  358. package/scripts/pnpm/dev-install.mjs +29 -0
  359. package/scripts/pnpm/dev-reload.mjs +18 -0
  360. package/scripts/pnpm/help.mjs +55 -0
  361. package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
  362. package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
  363. package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
  364. package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
  365. package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
  366. package/scripts/pnpm/lib/spinner.mjs +42 -0
  367. package/scripts/stage_builder_api_for_docker.js +65 -0
  368. package/scripts/sync-builder-api-template.js +44 -0
  369. package/templates/README.md +3 -0
  370. package/templates/applications/builder-api/Dockerfile +38 -0
  371. package/templates/applications/builder-api/application.yaml +75 -0
  372. package/templates/applications/builder-api/env.template +48 -0
  373. package/templates/applications/dataplane/application.yaml +1 -1
  374. package/templates/applications/dataplane/env.template +10 -6
  375. package/templates/applications/dataplane/rbac.yaml +21 -1
  376. package/templates/applications/miso-controller/application.yaml +1 -1
  377. package/templates/applications/miso-controller/env.template +1 -3
  378. package/templates/channels/README.md +18 -0
  379. package/templates/channels/ai-fabrix-icon.jpg +0 -0
  380. package/templates/channels/chatgpt/install.template.md.hbs +21 -24
  381. package/templates/channels/chatgpt/integration/README.md +11 -0
  382. package/templates/channels/chatgpt/integration/application.json +15 -0
  383. package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
  384. package/templates/channels/chatgpt/integration/env.template +4 -0
  385. package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
  386. package/templates/channels/microsoft-copilot/integration/README.md +11 -0
  387. package/templates/channels/microsoft-copilot/integration/application.json +15 -0
  388. package/templates/channels/microsoft-copilot/integration/env.template +6 -0
  389. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
  390. package/templates/channels/slack/install.template.md.hbs +48 -18
  391. package/templates/channels/slack/integration/README.md +38 -0
  392. package/templates/channels/slack/integration/application.json +18 -0
  393. package/templates/channels/slack/integration/env.template +29 -0
  394. package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
  395. package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
  396. package/templates/channels/slack/integration/slack-system.json +86 -0
  397. package/templates/channels/slack/manifest.template.json.hbs +20 -10
  398. package/templates/channels/teams-bot/install.template.md.hbs +31 -17
  399. package/templates/channels/teams-bot/integration/README.md +18 -0
  400. package/templates/channels/teams-bot/integration/application.json +17 -0
  401. package/templates/channels/teams-bot/integration/env.template +5 -0
  402. package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
  403. package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
  404. package/templates/channels/web-embed/install.template.md.hbs +16 -26
  405. package/templates/channels/web-embed/integration/README.md +11 -0
  406. package/templates/channels/web-embed/integration/application.json +15 -0
  407. package/templates/channels/web-embed/integration/env.template +4 -0
  408. package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
  409. package/templates/openapi/redoc_page.html +86 -0
  410. package/templates/python/docker-compose.hbs +11 -0
  411. package/templates/python/requirements.txt +1 -1
  412. package/templates/typescript/docker-compose.hbs +11 -0
  413. package/lib/certification/cli-cert-sync-skip.js +0 -21
@@ -0,0 +1,86 @@
1
+ {
2
+ "key": "slack",
3
+ "displayName": "Slack communication channel",
4
+ "description": "Slack communication channel — Role Assistants (workforce) and document approval workflows",
5
+ "type": "custom",
6
+ "systemKind": "communication",
7
+ "enabled": true,
8
+ "authentication": {
9
+ "authType": "credential",
10
+ "credential": {
11
+ "credentialKey": "slack-app",
12
+ "displayName": "Slack App",
13
+ "method": "hmac",
14
+ "writeOnce": true,
15
+ "variables": {
16
+ "algorithm": "sha256",
17
+ "signatureHeader": "X-Slack-Signature",
18
+ "timestampHeader": "X-Slack-Request-Timestamp",
19
+ "signaturePrefix": "v0=",
20
+ "timestampMaxAge": "300"
21
+ },
22
+ "security": {
23
+ "signingSecret": "kv://slack/signingSecret",
24
+ "botToken": "kv://slack/botToken",
25
+ "clientSecret": "kv://slack/clientSecret"
26
+ },
27
+ "formFields": [
28
+ { "name": "signingSecret", "required": true },
29
+ {
30
+ "name": "botToken",
31
+ "required": true,
32
+ "label": "Bot User OAuth Token (xoxb-)",
33
+ "placeholder": "xoxb-…"
34
+ },
35
+ { "name": "clientSecret", "required": false }
36
+ ]
37
+ }
38
+ },
39
+ "configuration": [],
40
+ "dataSources": ["slack-messages", "slack-conversations"],
41
+ "endpoints": [
42
+ {
43
+ "type": "commands",
44
+ "path": "/commands",
45
+ "router": "slack_commands_router",
46
+ "description": "Slack slash commands endpoint",
47
+ "active": true
48
+ },
49
+ {
50
+ "type": "events",
51
+ "path": "/events",
52
+ "router": "slack_events_router",
53
+ "description": "Slack Events API endpoint",
54
+ "active": true
55
+ },
56
+ {
57
+ "type": "interactive",
58
+ "path": "/interactive",
59
+ "router": "slack_interactive_router",
60
+ "description": "Slack interactive components endpoint",
61
+ "active": true
62
+ },
63
+ {
64
+ "type": "notifications",
65
+ "path": "/notifications",
66
+ "router": "slack_notifications_router",
67
+ "description": "Proactive notification endpoint",
68
+ "active": true
69
+ },
70
+ {
71
+ "type": "config",
72
+ "path": "/bot-config",
73
+ "router": "slack_config_router",
74
+ "description": "Slack bot configuration endpoint",
75
+ "active": true
76
+ },
77
+ {
78
+ "type": "documents",
79
+ "path": "/documents",
80
+ "router": "slack_documents_router",
81
+ "description": "Slack document review endpoint",
82
+ "active": true
83
+ }
84
+ ],
85
+ "endpointsActive": true
86
+ }
@@ -7,7 +7,7 @@
7
7
  "features": {
8
8
  "app_home": {
9
9
  "home_tab_enabled": true,
10
- "messages_tab_enabled": false,
10
+ "messages_tab_enabled": true,
11
11
  "messages_tab_read_only_enabled": false
12
12
  },
13
13
  "bot_user": {
@@ -16,24 +16,34 @@
16
16
  },
17
17
  "slash_commands": [
18
18
  {
19
- "command": "/aifabrix",
19
+ "command": "/{{commandPrefix}}-help",
20
20
  "url": "{{commandUrl}}",
21
- "description": "Chat with your assistants",
22
- "usage_hint": "[assistant or message]",
21
+ "description": "Guide to Role Assistants, work, and document review links",
23
22
  "should_escape": false
24
23
  },
25
24
  {
26
- "command": "/assistants",
25
+ "command": "/{{commandPrefix}}-assistants",
27
26
  "url": "{{commandUrl}}",
28
- "description": "Show available assistants",
27
+ "description": "See your Role Assistants and chat in DM",
28
+ "should_escape": false
29
+ },
30
+ {
31
+ "command": "/{{commandPrefix}}-tasks",
32
+ "url": "{{commandUrl}}",
33
+ "description": "Tasks waiting for you — View opens the Work hub",
34
+ "should_escape": false
35
+ },
36
+ {
37
+ "command": "/{{commandPrefix}}-documents",
38
+ "url": "{{commandUrl}}",
39
+ "description": "Documents waiting for review — Open in portal for full review",
40
+ "usage_hint": "[status] [count]",
29
41
  "should_escape": false
30
42
  }
31
43
  ]
32
44
  },
33
45
  "oauth_config": {
34
- "redirect_urls": [
35
- "{{oauthCallbackUrl}}"
36
- ],
46
+ "redirect_urls": {{{slackRedirectUrlsJson}}},
37
47
  "scopes": {
38
48
  "bot": [
39
49
  "app_mentions:read",
@@ -60,7 +70,7 @@
60
70
  },
61
71
  "org_deploy_enabled": true,
62
72
  "socket_mode_enabled": false,
63
- "token_rotation_enabled": true,
73
+ "token_rotation_enabled": {{slackTokenRotationEnabled}},
64
74
  "is_mcp_enabled": false
65
75
  }
66
76
  }
@@ -1,25 +1,26 @@
1
- # {{appName}} — assistant channel install
1
+ # {{appName}} — Microsoft Teams communication channel install
2
2
 
3
3
  {{appDescription}}
4
4
 
5
5
  Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
6
6
 
7
+ One Teams bot delivers **Role Assistant** chat **and** **document approval** (plan 455.2).
8
+
9
+ ## Register the Teams bot (tenant admin)
10
+
11
+ 1. Open the [Teams Developer Portal](https://dev.teams.microsoft.com/) as a Teams tenant admin.
12
+ 2. Create a new app or **Import an existing app** using the Bot Framework manifest JSON from `dist/channels/teams-bot/channel-teams-bot.json` (same folder as this file).
13
+ 3. Set the **Bot messaging endpoint** to the **Bot messages** URL below (your dataplane `/messages` route).
14
+ 4. In [Azure Portal](https://portal.azure.com/), register or open the **Azure Bot** resource and copy the **Microsoft App ID**.
15
+ 5. In Microsoft Entra, create a **client secret** (or upload a certificate) for the bot app registration.
16
+ 6. Enable the **Microsoft Teams** channel on the Azure Bot resource.
17
+ 7. Save the **Microsoft App ID** and **client secret** in AI Fabrix: [Authentication settings]({{credentialPortalUrl}})
18
+ 8. Publish the app to your organization (or sideload for lab) and complete tenant admin approval if prompted.
19
+
7
20
  ## Platform callback URLs
8
21
 
9
- Configure these in your Slack app, Teams bot registration, or platform admin console. Do not embed secrets in generated files — use AI Fabrix credential storage only.
22
+ Configure these on the Azure Bot / Teams app registration. Do not embed secrets in generated files — use AI Fabrix credential storage only.
10
23
 
11
- {{#if eventsUrl}}
12
- - **Events:** {{eventsUrl}}
13
- {{/if}}
14
- {{#if interactionUrl}}
15
- - **Interactivity:** {{interactionUrl}}
16
- {{/if}}
17
- {{#if commandUrl}}
18
- - **Slash commands:** {{commandUrl}}
19
- {{/if}}
20
- {{#if oauthCallbackUrl}}
21
- - **OAuth redirect:** {{oauthCallbackUrl}}
22
- {{/if}}
23
24
  {{#if messagesUrl}}
24
25
  - **Bot messages:** {{messagesUrl}}
25
26
  {{/if}}
@@ -30,20 +31,33 @@ Configure these in your Slack app, Teams bot registration, or platform admin con
30
31
  - **Bot config:** {{botConfigUrl}}
31
32
  {{/if}}
32
33
 
34
+ ## Document approval bot commands
35
+
36
+ Users message the bot with:
37
+
38
+ | Command | Purpose |
39
+ | --- | --- |
40
+ | `documents [status] [count]` | List documents (default: pending, 10 max) |
41
+ | `document <documentId>` | Open review Adaptive Card |
42
+ | `approve <documentId> [notes]` | Quick-approve |
43
+ | `help` | Command help |
44
+
45
+ Review cards use **Approve**, **Reject**, and **Edit metadata** actions on the **Bot messages** endpoint. Proactive review notifications use the **Notifications** URL.
46
+
33
47
  ## Assistant catalog
34
48
 
35
49
  Runtime lists **assistants** available to each user from:
36
50
 
37
51
  {{assistantCatalogUrl}}
38
52
 
39
- ## After admin approval
53
+ ## After Teams admin approval
40
54
 
41
55
  ```bash
42
- aifabrix app add-channel {{channelTarget}} --name "{{baseName}}"
56
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}"
43
57
  ```
44
58
 
45
59
  Optional validation:
46
60
 
47
61
  ```bash
48
- aifabrix app add-channel {{channelTarget}} --name "{{baseName}}" --probe
62
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}" --probe
49
63
  ```
@@ -0,0 +1,18 @@
1
+ # teams-bot communication channel (lab fixture)
2
+
3
+ SSOT for Teams Bot Framework communication channel — **Role Assistants** and **document approval** on one bot (plan 455.2). Published to builder via `make sync-json`.
4
+
5
+ ## Surfaces
6
+
7
+ - **Workforce:** DMs, activation cards, task offers (Bot Framework `/messages`)
8
+ - **Document approval:** `documents`, `document`, `approve`, `help` bot commands; review Adaptive Cards; proactive `/notifications`
9
+
10
+ ```bash
11
+ cd aifabrix-dataplane
12
+ aifabrix validate teams-bot
13
+ aifabrix upload teams-bot --probe
14
+ aifabrix deploy teams-bot
15
+ aifabrix channel add teams-bot --name "Your Assistant"
16
+ ```
17
+
18
+ Authentication: oidc — prefilled discovery settings; operators add Microsoft App ID + client secret on Connected Systems → Authentication.
@@ -0,0 +1,17 @@
1
+ {
2
+ "app": {
3
+ "key": "teams-bot",
4
+ "displayName": "teams-bot assistant channel",
5
+ "description": "Assistant communication channel — upload then channel add",
6
+ "type": "external"
7
+ },
8
+ "externalIntegration": {
9
+ "schemaBasePath": "./",
10
+ "systems": [
11
+ "teams-bot-system.json"
12
+ ],
13
+ "dataSources": [],
14
+ "autopublish": true,
15
+ "version": "1.0.0"
16
+ }
17
+ }
@@ -0,0 +1,5 @@
1
+ # teams-bot assistant channel — lab fixture secrets
2
+ # Microsoft App ID (JWT audience / Bot Framework app registration)
3
+ # aifabrix secret set teams-bot/botAppId "<app-id>" --shared
4
+
5
+ KV_TEAMS_BOT_BOTAPPID=kv://teams-bot/botAppId
@@ -0,0 +1,55 @@
1
+ {
2
+ "key": "teams-bot",
3
+ "displayName": "Microsoft Teams communication channel",
4
+ "description": "Teams communication channel — Role Assistants (workforce) and document approval workflows",
5
+ "type": "custom",
6
+ "systemKind": "communication",
7
+ "enabled": true,
8
+ "authentication": {
9
+ "authType": "credential",
10
+ "credential": {
11
+ "credentialKey": "teams-bot",
12
+ "displayName": "Microsoft Teams assistant bot",
13
+ "method": "oidc",
14
+ "writeOnce": true,
15
+ "variables": {
16
+ "openIdConfigUrl": "https://login.botframework.com/v1/.well-known/openid_configuration",
17
+ "expectedIssuer": "https://api.botframework.com",
18
+ "algorithms": "RS256",
19
+ "validateSignature": "true"
20
+ },
21
+ "security": {
22
+ "clientId": "kv://teams-bot/botAppId"
23
+ },
24
+ "formFields": [
25
+ { "name": "clientId", "required": true }
26
+ ]
27
+ }
28
+ },
29
+ "configuration": [],
30
+ "dataSources": [],
31
+ "endpoints": [
32
+ {
33
+ "type": "messages",
34
+ "path": "/messages",
35
+ "router": "teams_bot_router",
36
+ "description": "Bot Framework messaging endpoint",
37
+ "active": true
38
+ },
39
+ {
40
+ "type": "notifications",
41
+ "path": "/notifications",
42
+ "router": "teams_notifications_router",
43
+ "description": "Proactive notification endpoint",
44
+ "active": true
45
+ },
46
+ {
47
+ "type": "config",
48
+ "path": "/bot-config",
49
+ "router": "teams_config_router",
50
+ "description": "Bot configuration endpoint",
51
+ "active": true
52
+ }
53
+ ],
54
+ "endpointsActive": true
55
+ }
@@ -9,5 +9,32 @@
9
9
  "notificationsUrl": "{{notificationsUrl}}",
10
10
  "botConfigUrl": "{{botConfigUrl}}",
11
11
  "assistantCatalogUrl": "{{assistantCatalogUrl}}"
12
+ },
13
+ "botCommands": [
14
+ {
15
+ "title": "documents",
16
+ "description": "List pending documents (usage: documents [status] [count])"
17
+ },
18
+ {
19
+ "title": "document",
20
+ "description": "View document details (usage: document <documentId>)"
21
+ },
22
+ {
23
+ "title": "approve",
24
+ "description": "Approve a document (usage: approve <documentId> [notes])"
25
+ },
26
+ {
27
+ "title": "help",
28
+ "description": "Show available commands"
29
+ }
30
+ ],
31
+ "surfaces": {
32
+ "workforce": {
33
+ "description": "Role Assistant DMs, activation cards, task offers (Bot Framework messages + Adaptive Cards)"
34
+ },
35
+ "documentApproval": {
36
+ "description": "Document review cards, approve/reject actions, proactive notifications",
37
+ "notificationsUrl": "{{notificationsUrl}}"
38
+ }
12
39
  }
13
40
  }
@@ -1,33 +1,23 @@
1
- # {{appName}} — assistant channel install
1
+ # {{appName}} — Web embed assistant channel install
2
2
 
3
3
  {{appDescription}}
4
4
 
5
5
  Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
6
6
 
7
- ## Platform callback URLs
7
+ > **Experimental** — confirm product requirement before production use. No Slack/Teams-style platform admin approval.
8
8
 
9
- Configure these in your Slack app, Teams bot registration, or platform admin console. Do not embed secrets in generated files — use AI Fabrix credential storage only.
9
+ ## Embed on your site
10
10
 
11
- {{#if eventsUrl}}
12
- - **Events:** {{eventsUrl}}
13
- {{/if}}
14
- {{#if interactionUrl}}
15
- - **Interactivity:** {{interactionUrl}}
16
- {{/if}}
17
- {{#if commandUrl}}
18
- - **Slash commands:** {{commandUrl}}
19
- {{/if}}
20
- {{#if oauthCallbackUrl}}
21
- - **OAuth redirect:** {{oauthCallbackUrl}}
22
- {{/if}}
23
- {{#if messagesUrl}}
24
- - **Bot messages:** {{messagesUrl}}
25
- {{/if}}
26
- {{#if notificationsUrl}}
27
- - **Notifications:** {{notificationsUrl}}
28
- {{/if}}
29
- {{#if botConfigUrl}}
30
- - **Bot config:** {{botConfigUrl}}
11
+ 1. Review the generated embed configuration JSON from `dist/channels/web-embed/channel-web-embed.json` (same folder as this file).
12
+ 2. Confirm **allowed origins** and the **embed config URL** below match your customer web application.
13
+ 3. Save the **embed API key** in AI Fabrix: [Authentication settings]({{credentialPortalUrl}})
14
+ 4. Add the embed snippet or widget loader to your web application (use values from the config artifact).
15
+ 5. Validate in a browser that the widget loads and lists assistants for signed-in users.
16
+
17
+ ## Platform endpoints
18
+
19
+ {{#if configUrl}}
20
+ - **Embed config:** {{configUrl}}
31
21
  {{/if}}
32
22
 
33
23
  ## Assistant catalog
@@ -36,14 +26,14 @@ Runtime lists **assistants** available to each user from:
36
26
 
37
27
  {{assistantCatalogUrl}}
38
28
 
39
- ## After admin approval
29
+ ## After embed is live
40
30
 
41
31
  ```bash
42
- aifabrix app add-channel {{channelTarget}} --name "{{baseName}}"
32
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}"
43
33
  ```
44
34
 
45
35
  Optional validation:
46
36
 
47
37
  ```bash
48
- aifabrix app add-channel {{channelTarget}} --name "{{baseName}}" --probe
38
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}" --probe
49
39
  ```
@@ -0,0 +1,11 @@
1
+ # Web embed assistant channel (lab fixture, experimental)
2
+
3
+ SSOT for `aifabrix channel scaffold web-embed --allow-experimental` templates (`make sync-json` → builder).
4
+
5
+ ```bash
6
+ cd aifabrix-dataplane
7
+ aifabrix validate web-embed
8
+ aifabrix upload web-embed --probe
9
+ aifabrix deploy web-embed
10
+ aifabrix app add-channel web-embed --name "Your Assistant" --allow-experimental
11
+ ```
@@ -0,0 +1,15 @@
1
+ {
2
+ "app": {
3
+ "key": "web-embed",
4
+ "displayName": "Web embed assistant channel",
5
+ "description": "Assistant communication channel — deploy then app add-channel",
6
+ "type": "external"
7
+ },
8
+ "externalIntegration": {
9
+ "schemaBasePath": "./",
10
+ "systems": ["web-embed-system.json"],
11
+ "dataSources": [],
12
+ "autopublish": true,
13
+ "version": "1.0.0"
14
+ }
15
+ }
@@ -0,0 +1,4 @@
1
+ # Web embed assistant channel — lab fixture secrets (experimental channel target)
2
+ # aifabrix secret set web-embed/apiKey "<value>" --shared
3
+
4
+ KV_WEB_EMBED_APIKEY=kv://web-embed/apiKey
@@ -0,0 +1,29 @@
1
+ {
2
+ "key": "web-embed",
3
+ "displayName": "Web embed assistant channel",
4
+ "description": "Communication external system for embeddable web assistant channel install",
5
+ "type": "custom",
6
+ "systemKind": "communication",
7
+ "enabled": true,
8
+ "authentication": {
9
+ "authType": "credential",
10
+ "credential": {
11
+ "credentialKey": "web-embed-channel",
12
+ "displayName": "Web embed assistant channel",
13
+ "method": "apikey",
14
+ "writeOnce": true,
15
+ "variables": {
16
+ "baseUrl": "https://embed.aifabrix.dev"
17
+ },
18
+ "security": {
19
+ "apiKey": "kv://web-embed/apiKey"
20
+ },
21
+ "formFields": [
22
+ { "name": "apiKey", "required": true }
23
+ ]
24
+ }
25
+ },
26
+ "configuration": [],
27
+ "dataSources": [],
28
+ "endpointsActive": false
29
+ }
@@ -0,0 +1,86 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>@@TITLE@@</title>
5
+ <meta charset="utf-8"/>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
8
+ <style>
9
+ body { margin: 0; padding: 0; }
10
+ .download-buttons {
11
+ position: fixed;
12
+ top: 10px;
13
+ right: 10px;
14
+ z-index: 1000;
15
+ display: flex;
16
+ gap: 10px;
17
+ flex-wrap: wrap;
18
+ transition: opacity 0.2s ease, visibility 0.2s ease;
19
+ }
20
+ .download-buttons.download-buttons--pending {
21
+ visibility: hidden;
22
+ opacity: 0;
23
+ pointer-events: none;
24
+ }
25
+ .download-btn {
26
+ background-color: rgb(24, 111, 175);
27
+ color: white;
28
+ border: none;
29
+ padding: 3px 10px;
30
+ text-align: center;
31
+ text-decoration: none;
32
+ display: inline-block;
33
+ font-size: 12px;
34
+ font-weight: 500;
35
+ border-radius: 4px;
36
+ cursor: pointer;
37
+ transition: background-color 0.3s;
38
+ font-family: 'Roboto', sans-serif;
39
+ }
40
+ .download-btn:hover { background-color: #0b7dda; }
41
+ </style>
42
+ </head>
43
+ <body>
44
+ <noscript>
45
+ ReDoc requires Javascript to function. Please enable it to browse the documentation.
46
+ </noscript>
47
+ <div class="download-buttons download-buttons--pending">
48
+ <a href="@@JSON_DOWNLOAD_URL@@" download="@@JSON_DOWNLOAD_NAME@@" class="download-btn">Download OpenAPI (JSON)</a>
49
+ </div>
50
+ <div id="redoc-root" data-spec-url="@@SPEC_URL@@"></div>
51
+ <script src="@@REDOC_JS_URL@@"></script>
52
+ <script>
53
+ (function () {
54
+ var root = document.getElementById('redoc-root');
55
+ var bar = document.querySelector('.download-buttons');
56
+ var specUrl = root && root.getAttribute('data-spec-url');
57
+
58
+ function revealDownloads() {
59
+ if (bar) {
60
+ bar.classList.remove('download-buttons--pending');
61
+ }
62
+ }
63
+
64
+ if (!root || !specUrl) {
65
+ revealDownloads();
66
+ return;
67
+ }
68
+
69
+ if (typeof Redoc === 'undefined' || typeof Redoc.init !== 'function') {
70
+ revealDownloads();
71
+ return;
72
+ }
73
+
74
+ try {
75
+ Redoc.init(specUrl, {}, root, function () {
76
+ revealDownloads();
77
+ });
78
+ } catch (_e) {
79
+ revealDownloads();
80
+ }
81
+
82
+ window.setTimeout(revealDownloads, 60000);
83
+ })();
84
+ </script>
85
+ </body>
86
+ </html>
@@ -64,13 +64,24 @@ services:
64
64
  volumes:
65
65
  - {{devMountPath}}:/app
66
66
  {{#if requiresStorage}}
67
+ {{#if localDataMountPath}}
68
+ - {{localDataMountPath}}:/mnt/data
69
+ {{else}}
67
70
  - {{#if (eq devId 0)}}aifabrix_{{app.key}}_data{{else}}aifabrix_dev{{devId}}_{{app.key}}_data{{/if}}:/mnt/data
68
71
  {{/if}}
72
+ {{/if}}
69
73
  user: "${AIFABRIX_UID:-1000}:${AIFABRIX_GID:-1000}"
70
74
  {{else}}
71
75
  {{#if requiresStorage}}
72
76
  volumes:
77
+ {{#if localDataMountPath}}
78
+ - {{localDataMountPath}}:/mnt/data
79
+ {{else}}
73
80
  - {{#if (eq devId 0)}}aifabrix_{{app.key}}_data{{else}}aifabrix_dev{{devId}}_{{app.key}}_data{{/if}}:/mnt/data
81
+ {{/if}}
82
+ {{#if localDataMountPath}}
83
+ user: "${AIFABRIX_UID:-1000}:${AIFABRIX_GID:-1000}"
84
+ {{/if}}
74
85
  {{/if}}
75
86
  {{/if}}
76
87
  healthcheck:
@@ -1,4 +1,4 @@
1
- Flask==3.0.0
1
+ Flask==3.1.3
2
2
  gunicorn==21.2.0
3
3
  psycopg2-binary==2.9.9
4
4
 
@@ -64,13 +64,24 @@ services:
64
64
  volumes:
65
65
  - {{devMountPath}}:/app
66
66
  {{#if requiresStorage}}
67
+ {{#if localDataMountPath}}
68
+ - {{localDataMountPath}}:/mnt/data
69
+ {{else}}
67
70
  - {{#if (eq devId 0)}}aifabrix_{{app.key}}_data{{else}}aifabrix_dev{{devId}}_{{app.key}}_data{{/if}}:/mnt/data
68
71
  {{/if}}
72
+ {{/if}}
69
73
  user: "${AIFABRIX_UID:-1000}:${AIFABRIX_GID:-1000}"
70
74
  {{else}}
71
75
  {{#if requiresStorage}}
72
76
  volumes:
77
+ {{#if localDataMountPath}}
78
+ - {{localDataMountPath}}:/mnt/data
79
+ {{else}}
73
80
  - {{#if (eq devId 0)}}aifabrix_{{app.key}}_data{{else}}aifabrix_dev{{devId}}_{{app.key}}_data{{/if}}:/mnt/data
81
+ {{/if}}
82
+ {{#if localDataMountPath}}
83
+ user: "${AIFABRIX_UID:-1000}:${AIFABRIX_GID:-1000}"
84
+ {{/if}}
74
85
  {{/if}}
75
86
  {{/if}}
76
87
  healthcheck:
@@ -1,21 +0,0 @@
1
- /**
2
- * @fileoverview Detect skip-cert-sync from Commander + legacy option shapes.
3
- * Commander registers `--no-cert-sync` as `certSync` defaulting to true; `--no-cert-sync` sets `certSync: false`.
4
- * @author AI Fabrix Team
5
- * @version 2.0.0
6
- */
7
-
8
- 'use strict';
9
-
10
- /**
11
- * @param {Object|null|undefined} options
12
- * @returns {boolean}
13
- */
14
- function cliOptsSkipCertSync(options) {
15
- if (!options || typeof options !== 'object') return false;
16
- if (options.noCertSync === true) return true;
17
- if (options.certSync === false) return true;
18
- return false;
19
- }
20
-
21
- module.exports = { cliOptsSkipCertSync };