@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,44 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Publish builder/builder-api/ SSOT → templates/applications/builder-api/
4
+ * (manifest files only — no README; use builder/builder-api/README.md and packages/builder-api/README.md)
5
+ *
6
+ * @fileoverview sync-json for builder-api platform app (plan 154.2)
7
+ * @author AI Fabrix Team
8
+ * @version 1.0.0
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ const fs = require('fs');
14
+ const path = require('path');
15
+
16
+ const REPO_ROOT = path.resolve(__dirname, '..');
17
+ const SSOT_DIR = path.join(REPO_ROOT, 'builder', 'builder-api');
18
+ const TEMPLATE_DIR = path.join(REPO_ROOT, 'templates', 'applications', 'builder-api');
19
+
20
+ const SYNC_FILES = ['application.yaml', 'Dockerfile', 'env.template'];
21
+
22
+ /**
23
+ * Publish builder/builder-api/ SSOT → templates/applications/builder-api/
24
+ * @returns {void}
25
+ */
26
+ function main() {
27
+ if (!fs.existsSync(SSOT_DIR)) {
28
+ console.error(`Missing SSOT directory: ${SSOT_DIR}`);
29
+ process.exit(1);
30
+ }
31
+ fs.mkdirSync(TEMPLATE_DIR, { recursive: true });
32
+ for (const name of SYNC_FILES) {
33
+ const src = path.join(SSOT_DIR, name);
34
+ const dest = path.join(TEMPLATE_DIR, name);
35
+ if (!fs.existsSync(src)) {
36
+ console.error(`Missing SSOT file: ${src}`);
37
+ process.exit(1);
38
+ }
39
+ fs.copyFileSync(src, dest);
40
+ console.log(`sync-json: ${path.relative(REPO_ROOT, src)} → ${path.relative(REPO_ROOT, dest)}`);
41
+ }
42
+ }
43
+
44
+ main();
@@ -13,6 +13,9 @@ Application templates are folder-based and located under `templates/applications
13
13
  **Example:**
14
14
  - `templates/applications/miso-controller/` - Miso Controller application template
15
15
  - `templates/applications/keycloak/` - Keycloak application template
16
+ - `templates/applications/builder-api/` - Builder API platform webapp (published from `builder/builder-api/` via `npm run sync-json`)
17
+
18
+ **Platform SSOT (builder-api, plan 154.2):** Edit `builder/builder-api/` in the aifabrix-builder repo, then run `npm run sync-json` to publish `application.yaml`, `Dockerfile`, and `env.template` into `templates/applications/builder-api/`. Install with `aifabrix up-platform` or `aifabrix up-builder-api` — not hand-editing the template copy.
16
19
 
17
20
  **Template Validation:**
18
21
  - Template folder must exist in `templates/applications/<name>/`
@@ -0,0 +1,38 @@
1
+ # Builder API production image — explicit runtime COPY only (plan 154.3).
2
+ # SSOT: builder/builder-api/Dockerfile — publish with `npm run sync-json`
3
+ # Staging: node scripts/stage_builder_api_for_docker.js (also runs via `aifabrix build builder-api`)
4
+ # Build context: repo root (application.yaml build.context ../..). .dockerignore is second line of defense.
5
+ # Never ship: .cursor/, integration/, tests/, templates/applications|github|infra|*, bin/aifabrix.js, packages/.
6
+ # Allowed templates in image: templates/openapi/, templates/external-system/ (via staging manifest only).
7
+
8
+ FROM node:20-bookworm-slim
9
+
10
+ ENV NODE_ENV=production \
11
+ PORT=3005
12
+
13
+ WORKDIR /app
14
+
15
+ RUN apt-get update \
16
+ && apt-get install -y --no-install-recommends dumb-init \
17
+ && rm -rf /var/lib/apt/lists/*
18
+
19
+ COPY package.json package-lock.json ./
20
+ RUN npm ci --omit=dev && npm cache clean --force
21
+
22
+ COPY docker-builder-api-staging/lib ./lib
23
+ COPY docker-builder-api-staging/bin/builder-api-spike.js ./bin/builder-api-spike.js
24
+ COPY docker-builder-api-staging/bin/builder-api-cleanup.js ./bin/builder-api-cleanup.js
25
+ COPY docker-builder-api-staging/templates ./templates
26
+
27
+ RUN addgroup --system appgroup \
28
+ && adduser --system --ingroup appgroup --home /app appuser \
29
+ && chown -R appuser:appgroup /app
30
+ USER appuser
31
+
32
+ EXPOSE 3005
33
+
34
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \
35
+ CMD node -e "require('http').get('http://127.0.0.1:'+(process.env.PORT||3005)+'/api/v1/builder/health',(r)=>process.exit(r.statusCode===200?0:1)).on('error',()=>process.exit(1))"
36
+
37
+ ENTRYPOINT ["dumb-init", "--"]
38
+ CMD ["node", "bin/builder-api-spike.js"]
@@ -0,0 +1,75 @@
1
+ # Application Metadata
2
+ app:
3
+ key: builder-api
4
+ displayName: 'AI Fabrix Builder API'
5
+ description: 'Stateless HTTP orchestration for external-system workspace lifecycle. Provider-neutral integration flows via Dataplane Enterprise MCP and governance APIs (154.0 / 154.1).'
6
+ type: webapp
7
+ language: typescript
8
+ version: 1.0.0
9
+
10
+ # Image Configuration
11
+ image:
12
+ name: aifabrix/builder-api
13
+ tag: latest
14
+ registry: aifabrixdevacr.azurecr.io
15
+ registryMode: acr
16
+
17
+ # Port Configuration (container port; host port = port + developer_id * 100)
18
+ port: 3005
19
+
20
+ frontDoorRouting:
21
+ enabled: false
22
+
23
+ requires:
24
+ database: false
25
+ redis: false
26
+ storage: true
27
+
28
+ healthCheck:
29
+ path: /api/v1/builder/health
30
+ interval: 30
31
+ bashProbe: true
32
+ probePath: /api/v1/builder/health
33
+ probeRequestType: GET
34
+ probeProtocol: Https
35
+ probeIntervalInSeconds: 120
36
+
37
+ authentication:
38
+ enableSSO: false
39
+
40
+ build:
41
+ context: ../..
42
+ dockerfile: builder/builder-api/Dockerfile
43
+ # Image policy (154.3): host staging → docker-builder-api-staging/; explicit COPY in Dockerfile;
44
+ # .dockerignore deny-by-default; verify with scripts/docker_image_content_gate.js builder-api.
45
+ envOutputPath: ../../.env
46
+ language: typescript
47
+ reloadStart: node bin/builder-api-spike.js
48
+ imageRun: exec node bin/builder-api-spike.js
49
+
50
+ repository:
51
+ enabled: true
52
+ repositoryUrl: https://github.com/esystemsdev/aifabrix-builder
53
+
54
+ configuration:
55
+ - name: LOG_LEVEL
56
+ portalInput:
57
+ field: select
58
+ label: 'Log Level'
59
+ options:
60
+ - debug
61
+ - info
62
+ - warn
63
+ - error
64
+
65
+ - name: WORKSPACE_DRAFT_TTL_DAYS
66
+ portalInput:
67
+ field: text
68
+ label: 'Draft workspace TTL (days)'
69
+ placeholder: '30'
70
+
71
+ - name: WORKSPACE_INACTIVE_MAX_DAYS
72
+ portalInput:
73
+ field: text
74
+ label: 'Inactive workspace purge threshold (days)'
75
+ placeholder: '90'
@@ -0,0 +1,48 @@
1
+ # Environment Variables Template — builder-api
2
+ # SSOT: builder/builder-api/env.template — publish with `npm run sync-json`
3
+
4
+ # =============================================================================
5
+ # APPLICATION
6
+ # =============================================================================
7
+
8
+ PORT=${PORT}
9
+ NODE_ENV=production
10
+ LOG_LEVEL=info
11
+
12
+ # Multi-user workspace root (persist via /mnt/data volume in Docker)
13
+ WORKSPACE_ROOT=/mnt/data/builder-workspaces
14
+
15
+ WORKSPACE_DRAFT_TTL_DAYS=30
16
+ WORKSPACE_INACTIVE_MAX_DAYS=90
17
+
18
+ MAX_BODY_BYTES=10485760
19
+ MAX_UPLOAD_TIMEOUT_MS=300000
20
+
21
+ # =============================================================================
22
+ # PLATFORM URLS
23
+ # =============================================================================
24
+ # url:// resolves after kv:// at resolve time (see docs/configuration/resolve-running-urls.md)
25
+
26
+ # Registered OAuth client (populated by aifabrix app register / bootstrap — same as dataplane)
27
+ MISO_CLIENTID=kv://builder-api-client-idKeyVault
28
+ MISO_CLIENTSECRET=kv://builder-api-client-secretKeyVault
29
+
30
+ # Internal: controller API for token validation (supports all miso-controller auth modes)
31
+ MISO_CONTROLLER_URL=url://miso-controller-internal
32
+
33
+ # Internal: server-to-dataplane API (MCP execute, upload, governance)
34
+ DATAPLANE_URL=url://dataplane-internal
35
+
36
+ DEFAULT_ENVIRONMENT=dev
37
+
38
+ # COM-generated Enterprise MCP owner system (normal MCP execute — no dataplane adapter)
39
+ ENTERPRISE_MCP_SYSTEM_KEY=enterprise-integration-lifecycle
40
+
41
+ # =============================================================================
42
+ # RUNTIME CONFIG (Docker dev-reload)
43
+ # =============================================================================
44
+ # Resolves kv:// for workspace upload/validate. On the host, symlink or copy under
45
+ # mount/aifabrix/ (bind-mounted at /mnt/data): config.yaml, secrets.local.yaml, certs/
46
+ # from ~/.aifabrix. Symlinks to host paths work because the kernel resolves them on the host.
47
+
48
+ AIFABRIX_CONFIG=/mnt/data/aifabrix/config.yaml
@@ -145,7 +145,7 @@ configuration:
145
145
  - name: TRUST_RUNTIME_GATE_ENABLED
146
146
  portalInput:
147
147
  field: select
148
- label: "Enforce trust gate on CIP execution (runtime scope)"
148
+ label: "Enforce trust gate on CIP execution and workforce generation inputs (runtime scope)"
149
149
  options:
150
150
  - "false"
151
151
  - "true"
@@ -79,8 +79,9 @@ VECTOR_DATABASE_URL=kv://databases-dataplane-1-urlKeyVault
79
79
  DB_1_PASSWORD=kv://databases-dataplane-1-passwordKeyVault
80
80
 
81
81
  # Base path for document binary storage (used when datasource config has no processing.fileStoragePath).
82
- # Dataplane creates subdirs per datasource key (e.g. DOCUMENT_STORAGE_BASE_PATH/test-e2e-sharepoint-documents).
83
- # Production: use a writable path (e.g. /data/documents) and mount a volume. Local/Docker: use /tmp/documents or /app/data/documents.
82
+ # Dataplane creates subdirs per datasource key (e.g. DOCUMENT_STORAGE_BASE_PATH/test-e2e-sharepoint-deals).
83
+ # Container (--reload): /mnt/data/documents with repo mount/ bind-mounted to /mnt/data.
84
+ # Host root .env: aifabrix resolve substitutes /mnt/data → <repo>/mount (e.g. mount/documents).
84
85
  DOCUMENT_STORAGE_BASE_PATH=/mnt/data/documents
85
86
 
86
87
  # Logs Database Configuration (for execution, audit, ABAC traces)
@@ -234,10 +235,10 @@ DATAPLANE_PUBLIC_KEY_ID=
234
235
  # engine uses RS256. When unset and LOCAL_MODE=true, a process-local ephemeral RSA keypair is used
235
236
  # (still RS256, with publicKey + publicKeyFingerprint on issued certs). Non-local requires PEM keys.
236
237
  # PEM values are often multi-line; resolve via secret store / deploy pipeline (kv://) or inject as env.
237
- CERTIFICATE_PRIVATE_KEY=
238
- CERTIFICATE_PUBLIC_KEY=
238
+ CERTIFICATE_PRIVATE_KEY=kv://secrets-certificatePrivateKeyVault
239
+ CERTIFICATE_PUBLIC_KEY=kv://secrets-certificatePublicKeyVault
239
240
  # Optional public key identifier for issued certificates; default if unset: dataplane-signing-key
240
- CERTIFICATE_PUBLIC_KEY_ID=
241
+ CERTIFICATE_PUBLIC_KEY_ID=dev01-dataplane-signing
241
242
 
242
243
  # =============================================================================
243
244
  # VALIDATION ENGINE — YAML CONTRACTS
@@ -296,11 +297,14 @@ TRUST_CUSTOMER_POLICY_LEVEL=standard
296
297
  #
297
298
  # Opt-in gates (default false). When true, trust is evaluated at the call site;
298
299
  # DENY/REVIEW can block the operation (e.g. datasource publish returns 403).
300
+ # Enterprise Knowledge COM compile and Digital Worker capability generation reuse
301
+ # these gates via app/services/workforce/enterprise_binding_eligibility.py when
302
+ # collecting generation bindings (published + trust-ready datasources only).
299
303
  # Datasource publish — scope publish; runs before marking the datasource published
300
304
  TRUST_PUBLISH_GATE_ENABLED=false
301
305
  # External system publish — scope promote; evaluated per active datasource first
302
306
  TRUST_PROMOTE_GATE_ENABLED=false
303
- # CIP operation execution — scope runtime; evaluation uses live/runtime checks
307
+ # CIP operation execution — scope runtime; also filters workforce/EK generation inputs
304
308
  TRUST_RUNTIME_GATE_ENABLED=false
305
309
  # Document-storage AI system prompt generation — scope aiExposure; before LLM call
306
310
  TRUST_AI_EXPOSURE_GATE_ENABLED=false
@@ -27,7 +27,7 @@ roles:
27
27
 
28
28
  - name: "AI Fabrix Developer"
29
29
  value: "aifabrix-developer"
30
- description: "Developer access to deploy applications via GitHub Actions"
30
+ description: "Developer access to deploy applications via CI pipelines"
31
31
  groups: ["AI-Fabrix-Developers"]
32
32
 
33
33
  - name: "AI Fabrix Observer"
@@ -391,6 +391,26 @@ permissions:
391
391
  ]
392
392
  description: "Read manager-scoped workforce impact aggregates (no task detail)"
393
393
 
394
+ # Evidence Fabrix v2 operator + runtime retrieval (453.1 / 453.2)
395
+ - name: "evidence:read"
396
+ roles:
397
+ [
398
+ "aifabrix-platform-admin",
399
+ "aifabrix-security-admin",
400
+ "aifabrix-developer",
401
+ "aifabrix-ai-trust-operator",
402
+ ]
403
+ description: "List, get, and retrieve Evidence Fabrix v2 rows for planning"
404
+
405
+ - name: "evidence:manage"
406
+ roles:
407
+ [
408
+ "aifabrix-platform-admin",
409
+ "aifabrix-developer",
410
+ "aifabrix-ai-trust-operator",
411
+ ]
412
+ description: "Create, update, delete, and reorder Evidence Fabrix v2 rows"
413
+
394
414
  # Workforce subscriptions (436.11 / 438.6)
395
415
  - name: "subscription:read"
396
416
  roles:
@@ -4,7 +4,7 @@ app:
4
4
  displayName: 'Miso Controller'
5
5
  description: 'Miso is the AI Fabrix in-tenant controller and portal layer for securely operating enterprise AI apps inside a customer’s Azure tenant. It provides Entra ID SSO, RBAC, audit logs, environment/app configuration via schemas, and safe secret handling via Key Vault references—ensuring governance, traceability, and predictable UX across portal, SDK, and CLI.'
6
6
  type: webapp
7
- version: '1.9.5'
7
+ version: '2.0.0'
8
8
 
9
9
  # Image Configuration
10
10
  # Set tag to match your build (e.g. aifabrix build miso-controller -t 1.0.0 then tag: 1.0.0)
@@ -157,8 +157,6 @@ WAIT_FOR_KEYCLOAK=true
157
157
  # For production: use public domain (e.g., https://miso.example.com)
158
158
  # url://public includes front-door path from application.yaml (e.g. /controller).
159
159
  MISO_WEB_SERVER_URL=url://public
160
- # Provider-grant OAuth redirect_uri base (Azure/start-dev also set this explicitly; code falls back to MISO_WEB_SERVER_URL)
161
- CONTROLLER_BASE_URL=url://public
162
160
  MISO_CONTROLLER_URL=url://internal
163
161
  MISO_RELATIVE_PATH=url://vdir-public
164
162
  ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private,url://dataplane-host-public,url://dataplane-host-private
@@ -244,7 +242,7 @@ DEPLOYMENT=database
244
242
  ENCRYPTION_KEY=kv://miso-controller-secrets-encryptionKeyVault
245
243
 
246
244
  # Comma-separated application keys allowed for POST .../applications/bootstrap (install-time only)
247
- BOOTSTRAP_APPKEYS=dataplane
245
+ BOOTSTRAP_APPKEYS=dataplane,builder-api
248
246
 
249
247
  # Key Vault Integration (for security parameter encryption)
250
248
  # Set to true to enable Azure Key Vault for storing security parameters
@@ -0,0 +1,18 @@
1
+ # Channel integration templates
2
+
3
+ Published copies of communication external-system manifests for `aifabrix channel scaffold <target>`.
4
+
5
+ ## SSOT
6
+
7
+ | Channel | Master location | Publish |
8
+ | --- | --- | --- |
9
+ | **All channel targets** | `aifabrix-dataplane/integration/<target>/` | `make sync-json` in dataplane (copies manifests; **no** `*-deploy.json`) |
10
+ | Targets | `slack`, `teams-bot`, `microsoft-copilot`, `chatgpt`, `web-embed` | See `CHANNEL_INTEGRATION_TARGETS` in dataplane `make/config.mk` |
11
+
12
+ `channel scaffold` copies files from `integration/` subfolder here into the user's `integration/<target>/`, then generates **only** `<target>-deploy.json` via `aifabrix json`.
13
+
14
+ Do **not** hardcode manifests in `lib/channels/*.js`.
15
+
16
+ ## Slack App manifest (install)
17
+
18
+ `manifest.template.json.hbs` and `install.template.md.hbs` are for `aifabrix channel add slack` (Slack developer portal), separate from the external-system integration tree above.
@@ -1,33 +1,30 @@
1
- # {{appName}} — assistant channel install
1
+ # {{appName}} — ChatGPT assistant channel install
2
2
 
3
3
  {{appDescription}}
4
4
 
5
5
  Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
6
6
 
7
- ## Platform callback URLs
7
+ ## Connect ChatGPT workspace (admin)
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
+ 1. Sign in to [OpenAI Platform](https://platform.openai.com/) or your **ChatGPT Enterprise** workspace admin console.
10
+ 2. Create a custom GPT, workspace connector, or MCP integration using the generated manifest from `dist/channels/chatgpt/channel-chatgpt.json`.
11
+ 3. Configure the **OpenAPI specification URL** and **MCP endpoint** from **Platform endpoints** below.
12
+ 4. Complete OAuth or API key setup as required by your ChatGPT deployment model.
13
+ 5. Save the **API key** or **OAuth client credentials** in AI Fabrix: [Authentication settings]({{credentialPortalUrl}})
14
+ 6. Publish the connector to your workspace and complete admin approval if your organization requires it.
10
15
 
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}}
16
+ ## Platform endpoints
17
+
18
+ Configure these on the ChatGPT connector / custom GPT. Do not embed secrets in generated files — use AI Fabrix credential storage only.
19
+
20
+ {{#if openapiUrl}}
21
+ - **OpenAPI spec:** {{openapiUrl}}
25
22
  {{/if}}
26
- {{#if notificationsUrl}}
27
- - **Notifications:** {{notificationsUrl}}
23
+ {{#if mcpUrl}}
24
+ - **MCP:** {{mcpUrl}}
28
25
  {{/if}}
29
- {{#if botConfigUrl}}
30
- - **Bot config:** {{botConfigUrl}}
26
+ {{#if actionsBaseUrl}}
27
+ - **Actions base:** {{actionsBaseUrl}}
31
28
  {{/if}}
32
29
 
33
30
  ## Assistant catalog
@@ -36,14 +33,14 @@ Runtime lists **assistants** available to each user from:
36
33
 
37
34
  {{assistantCatalogUrl}}
38
35
 
39
- ## After admin approval
36
+ ## After workspace approval
40
37
 
41
38
  ```bash
42
- aifabrix app add-channel {{channelTarget}} --name "{{baseName}}"
39
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}"
43
40
  ```
44
41
 
45
42
  Optional validation:
46
43
 
47
44
  ```bash
48
- aifabrix app add-channel {{channelTarget}} --name "{{baseName}}" --probe
45
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}" --probe
49
46
  ```
@@ -0,0 +1,11 @@
1
+ # ChatGPT assistant channel (lab fixture)
2
+
3
+ SSOT for `aifabrix channel scaffold chatgpt` templates (`make sync-json` → builder).
4
+
5
+ ```bash
6
+ cd aifabrix-dataplane
7
+ aifabrix validate chatgpt
8
+ aifabrix upload chatgpt --probe
9
+ aifabrix deploy chatgpt
10
+ aifabrix app add-channel chatgpt --name "Your Assistant"
11
+ ```
@@ -0,0 +1,15 @@
1
+ {
2
+ "app": {
3
+ "key": "chatgpt",
4
+ "displayName": "ChatGPT assistant channel",
5
+ "description": "Assistant communication channel — deploy then app add-channel",
6
+ "type": "external"
7
+ },
8
+ "externalIntegration": {
9
+ "schemaBasePath": "./",
10
+ "systems": ["chatgpt-system.json"],
11
+ "dataSources": [],
12
+ "autopublish": true,
13
+ "version": "1.0.0"
14
+ }
15
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "key": "chatgpt",
3
+ "displayName": "ChatGPT assistant channel",
4
+ "description": "Communication external system for ChatGPT assistant channel install",
5
+ "type": "custom",
6
+ "systemKind": "communication",
7
+ "enabled": true,
8
+ "authentication": {
9
+ "authType": "credential",
10
+ "credential": {
11
+ "credentialKey": "chatgpt-channel",
12
+ "displayName": "ChatGPT assistant channel",
13
+ "method": "apikey",
14
+ "writeOnce": true,
15
+ "variables": {
16
+ "baseUrl": "https://api.openai.com/v1"
17
+ },
18
+ "security": {
19
+ "apiKey": "kv://chatgpt/apiKey"
20
+ },
21
+ "formFields": [
22
+ { "name": "apiKey", "required": true }
23
+ ]
24
+ }
25
+ },
26
+ "configuration": [],
27
+ "dataSources": [],
28
+ "endpointsActive": false
29
+ }
@@ -0,0 +1,4 @@
1
+ # ChatGPT assistant channel — lab fixture secrets
2
+ # aifabrix secret set chatgpt/apiKey "<value>" --shared
3
+
4
+ KV_CHATGPT_APIKEY=kv://chatgpt/apiKey
@@ -1,33 +1,28 @@
1
- # {{appName}} — assistant channel install
1
+ # {{appName}} — Microsoft Copilot assistant channel install
2
2
 
3
3
  {{appDescription}}
4
4
 
5
5
  Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
6
6
 
7
- ## Platform callback URLs
7
+ ## Publish the Copilot extension (M365 admin)
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
+ 1. Sign in to [Microsoft 365 admin](https://admin.cloud.microsoft.com/) or **Copilot Studio** as a tenant admin.
10
+ 2. Create or open a Copilot extensibility project (declarative agent or API plugin).
11
+ 3. Import or configure using the generated manifest JSON from `dist/channels/microsoft-copilot/channel-microsoft-copilot.json`.
12
+ 4. Point the **OpenAPI** and **action** endpoints to the URLs in **Platform endpoints** below.
13
+ 5. Register OAuth client credentials for the API provider connection when the platform prompts for them.
14
+ 6. Save the **OAuth client ID** and **client secret** in AI Fabrix: [Authentication settings]({{credentialPortalUrl}})
15
+ 7. Submit for M365 admin approval and publish to your organization when review completes.
10
16
 
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}}
17
+ ## Platform endpoints
18
+
19
+ Configure these on the Copilot connector / API plugin. Do not embed secrets in generated files — use AI Fabrix credential storage only.
20
+
21
+ {{#if openapiUrl}}
22
+ - **OpenAPI spec:** {{openapiUrl}}
28
23
  {{/if}}
29
- {{#if botConfigUrl}}
30
- - **Bot config:** {{botConfigUrl}}
24
+ {{#if actionsBaseUrl}}
25
+ - **Actions base:** {{actionsBaseUrl}}
31
26
  {{/if}}
32
27
 
33
28
  ## Assistant catalog
@@ -36,14 +31,14 @@ Runtime lists **assistants** available to each user from:
36
31
 
37
32
  {{assistantCatalogUrl}}
38
33
 
39
- ## After admin approval
34
+ ## After M365 admin approval
40
35
 
41
36
  ```bash
42
- aifabrix app add-channel {{channelTarget}} --name "{{baseName}}"
37
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}"
43
38
  ```
44
39
 
45
40
  Optional validation:
46
41
 
47
42
  ```bash
48
- aifabrix app add-channel {{channelTarget}} --name "{{baseName}}" --probe
43
+ aifabrix channel add {{channelTarget}} --name "{{baseName}}" --probe
49
44
  ```
@@ -0,0 +1,11 @@
1
+ # Microsoft Copilot assistant channel (lab fixture)
2
+
3
+ SSOT for `aifabrix channel scaffold microsoft-copilot` templates (`make sync-json` → builder).
4
+
5
+ ```bash
6
+ cd aifabrix-dataplane
7
+ aifabrix validate microsoft-copilot
8
+ aifabrix upload microsoft-copilot --probe
9
+ aifabrix deploy microsoft-copilot
10
+ aifabrix app add-channel microsoft-copilot --name "Your Assistant"
11
+ ```
@@ -0,0 +1,15 @@
1
+ {
2
+ "app": {
3
+ "key": "microsoft-copilot",
4
+ "displayName": "Microsoft Copilot assistant channel",
5
+ "description": "Assistant communication channel — deploy then app add-channel",
6
+ "type": "external"
7
+ },
8
+ "externalIntegration": {
9
+ "schemaBasePath": "./",
10
+ "systems": ["microsoft-copilot-system.json"],
11
+ "dataSources": [],
12
+ "autopublish": true,
13
+ "version": "1.0.0"
14
+ }
15
+ }
@@ -0,0 +1,6 @@
1
+ # Microsoft Copilot assistant channel — lab fixture secrets
2
+ # aifabrix secret set microsoft-copilot/clientId "<value>" --shared
3
+ # aifabrix secret set microsoft-copilot/clientSecret "<value>" --shared
4
+
5
+ KV_MICROSOFT_COPILOT_CLIENTID=kv://microsoft-copilot/clientId
6
+ KV_MICROSOFT_COPILOT_CLIENTSECRET=kv://microsoft-copilot/clientSecret
@@ -0,0 +1,34 @@
1
+ {
2
+ "key": "microsoft-copilot",
3
+ "displayName": "Microsoft Copilot assistant channel",
4
+ "description": "Communication external system for Microsoft Copilot assistant channel install",
5
+ "type": "custom",
6
+ "systemKind": "communication",
7
+ "enabled": true,
8
+ "authentication": {
9
+ "authType": "credential",
10
+ "credential": {
11
+ "credentialKey": "microsoft-copilot-channel",
12
+ "displayName": "Microsoft Copilot assistant channel",
13
+ "method": "oauth2",
14
+ "writeOnce": true,
15
+ "variables": {
16
+ "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
17
+ "grantType": "client_credentials",
18
+ "scope": "https://graph.microsoft.com/.default",
19
+ "baseUrl": "https://graph.microsoft.com/v1.0"
20
+ },
21
+ "security": {
22
+ "clientId": "kv://microsoft-copilot/clientId",
23
+ "clientSecret": "kv://microsoft-copilot/clientSecret"
24
+ },
25
+ "formFields": [
26
+ { "name": "clientId", "required": true },
27
+ { "name": "clientSecret", "required": true }
28
+ ]
29
+ }
30
+ },
31
+ "configuration": [],
32
+ "dataSources": [],
33
+ "endpointsActive": false
34
+ }