@aifabrix/builder 2.52.0 → 2.53.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 (310) hide show
  1. package/lib/api/datasources-extended.api.js +8 -8
  2. package/lib/api/keycloak.api.js +92 -0
  3. package/lib/api/token-providers.api.js +77 -0
  4. package/lib/api/types/keycloak.types.js +23 -0
  5. package/lib/api/types/token-providers.types.js +65 -0
  6. package/lib/app/deploy-config.js +3 -2
  7. package/lib/app/down.js +16 -1
  8. package/lib/channels/add-channel.js +134 -57
  9. package/lib/channels/approval-guides/chatgpt.js +1 -1
  10. package/lib/channels/approval-guides/index.js +3 -0
  11. package/lib/channels/approval-guides/microsoft-copilot.js +27 -14
  12. package/lib/channels/channel-add-ensure.js +128 -0
  13. package/lib/channels/channel-add-existing.js +72 -0
  14. package/lib/channels/channel-artifact-generator.js +11 -1
  15. package/lib/channels/channel-branding.js +94 -0
  16. package/lib/channels/channel-credential.js +8 -0
  17. package/lib/channels/channel-discovery.js +330 -0
  18. package/lib/channels/channel-external-system.js +1 -1
  19. package/lib/channels/channel-runtime-resolver.js +107 -14
  20. package/lib/channels/channel-status-display.js +36 -3
  21. package/lib/channels/microsoft-copilot-channel-add.js +138 -0
  22. package/lib/channels/microsoft-copilot-entra-sso-form.js +251 -0
  23. package/lib/channels/microsoft-copilot-entra-sso.js +285 -0
  24. package/lib/channels/microsoft-copilot-icons.js +74 -0
  25. package/lib/channels/microsoft-copilot-limits.js +103 -0
  26. package/lib/channels/microsoft-copilot-package.js +178 -52
  27. package/lib/channels/microsoft-copilot-validate.js +227 -0
  28. package/lib/cli/attach-default-help-examples.js +102 -0
  29. package/lib/cli/index.js +4 -0
  30. package/lib/cli/infra-guided.js +13 -6
  31. package/lib/cli/setup-credential-deployment.js +7 -5
  32. package/lib/cli/setup-infra.js +31 -4
  33. package/lib/cli/setup-utility-validate.js +1 -0
  34. package/lib/commands/channel-add-setup.js +28 -9
  35. package/lib/commands/channel.js +14 -10
  36. package/lib/commands/credential-push.js +37 -5
  37. package/lib/commands/integration-definition.js +158 -0
  38. package/lib/commands/package-score.js +72 -0
  39. package/lib/commands/repair-auth-apply.js +19 -5
  40. package/lib/commands/repair-datasource-sync-operations.js +4 -1
  41. package/lib/commands/role-assistant-test-output.js +200 -0
  42. package/lib/commands/role-assistant.js +163 -166
  43. package/lib/datasource/capability/capability-resolve.js +15 -5
  44. package/lib/datasource/capability/copy-operations.js +14 -4
  45. package/lib/deployment/deployer-poll-run.js +2 -2
  46. package/lib/deployment/deployer.js +1 -1
  47. package/lib/deployment/environment.js +2 -2
  48. package/lib/external-system/deploy.js +11 -21
  49. package/lib/infrastructure/index.js +19 -4
  50. package/lib/integration-definition/apply.js +476 -0
  51. package/lib/integration-definition/canonical-json.js +51 -0
  52. package/lib/integration-definition/emit-suite-bid.js +94 -0
  53. package/lib/integration-definition/enrich-crm-field-mappings.js +240 -0
  54. package/lib/integration-definition/enrich-openapi-operations.js +433 -0
  55. package/lib/integration-definition/from-discovery.js +339 -0
  56. package/lib/integration-definition/hash.js +37 -0
  57. package/lib/integration-definition/index.js +37 -0
  58. package/lib/integration-definition/resource-type-catalog.js +59 -0
  59. package/lib/integration-definition/system-kind-enum.js +40 -0
  60. package/lib/integration-definition/validate.js +148 -0
  61. package/lib/lab/package-parity-score.js +417 -0
  62. package/lib/programmatic/builder-api-request.js +5 -1
  63. package/lib/programmatic/builder-help-governance.js +3 -2
  64. package/lib/programmatic/capability-registry.js +20 -0
  65. package/lib/programmatic/help-content/channel-onboarding.md +35 -0
  66. package/lib/programmatic/help-content/cip-overview.md +27 -0
  67. package/lib/programmatic/help-content/connected-system-ui.md +70 -0
  68. package/lib/programmatic/help-content/dimensions-guide.md +23 -0
  69. package/lib/programmatic/help-content/enterprise-sync-fabrix.md +123 -0
  70. package/lib/programmatic/help-content/overview.md +25 -0
  71. package/lib/programmatic/help-content/subscription-guide.md +27 -0
  72. package/lib/programmatic/help-content/workflow.md +50 -0
  73. package/lib/programmatic/openapi-component-schemas.js +7 -1
  74. package/lib/programmatic/openapi-descriptions.js +46 -0
  75. package/lib/programmatic/openapi-envelope-examples.js +280 -0
  76. package/lib/programmatic/openapi-operation-bindings.js +50 -0
  77. package/lib/programmatic/openapi-request-schemas.js +40 -0
  78. package/lib/programmatic/openapi-result-schemas-overflow.js +101 -0
  79. package/lib/programmatic/openapi-result-schemas.js +76 -99
  80. package/lib/programmatic/openapi-schema-descriptions-core.js +25 -4
  81. package/lib/programmatic/openapi-schema-descriptions-help.js +1 -1
  82. package/lib/programmatic/openapi-schema-descriptions-operations.js +43 -0
  83. package/lib/programmatic/openapi-schema-helpers.js +9 -9
  84. package/lib/programmatic/openapi-spec.js +11 -1
  85. package/lib/programmatic/orchestration-openapi-meta.js +10 -0
  86. package/lib/programmatic/persist-supplied-openapi.js +180 -0
  87. package/lib/programmatic/route-handler-map.js +35 -1
  88. package/lib/programmatic/run-channel-package.js +236 -0
  89. package/lib/programmatic/run-integration-definition.js +77 -0
  90. package/lib/role-assistant/evidence-sync.js +55 -7
  91. package/lib/role-assistant/knowledge-sync-logging.js +58 -0
  92. package/lib/role-assistant/knowledge-sync.js +88 -93
  93. package/lib/role-assistant/test-cases-bid.js +155 -0
  94. package/lib/role-assistant/test-cases-evaluate.js +9 -1
  95. package/lib/role-assistant/test-cases-honesty.js +24 -10
  96. package/lib/role-assistant/test-cases.js +28 -0
  97. package/lib/role-assistant/test-runner-attachments.js +118 -0
  98. package/lib/role-assistant/test-runner-bid-apply.js +201 -0
  99. package/lib/role-assistant/test-runner-bid-document.js +278 -0
  100. package/lib/role-assistant/test-runner-start-payload.js +96 -0
  101. package/lib/role-assistant/test-runner-workhub-answers.js +249 -20
  102. package/lib/role-assistant/test-runner-workhub-helpers.js +100 -0
  103. package/lib/role-assistant/test-runner-workhub-soft.js +86 -0
  104. package/lib/role-assistant/test-runner-workhub.js +152 -107
  105. package/lib/role-assistant/test-runner.js +5 -63
  106. package/lib/role-assistant/test-suite.js +112 -0
  107. package/lib/schema/application-schema.json +56 -6
  108. package/lib/schema/external-datasource.schema.json +103 -17
  109. package/lib/schema/external-system.schema.json +54 -3
  110. package/lib/schema/integration-definition.schema.json +195 -0
  111. package/lib/utils/authentication-shape.js +6 -0
  112. package/lib/utils/compose-generator.js +10 -1
  113. package/lib/utils/compose-traefik-extra-routes.js +107 -0
  114. package/lib/utils/docker-build.js +2 -2
  115. package/lib/utils/help-builder.js +3 -1
  116. package/lib/utils/promote-dev-docker-image.js +102 -18
  117. package/lib/utils/transient-developer-id.js +28 -0
  118. package/package.json +14 -16
  119. package/templates/README.md +12 -1
  120. package/templates/applications/dataplane/application.yaml +10 -2
  121. package/templates/applications/dataplane/env.template +7 -6
  122. package/templates/applications/miso-controller/application.yaml +23 -8
  123. package/templates/applications/miso-controller/env.template +8 -2
  124. package/templates/applications/miso-controller/rbac.yaml +1 -0
  125. package/templates/channels/README.md +11 -1
  126. package/templates/channels/brand/color-192.png +0 -0
  127. package/templates/channels/brand/dark/128.png +0 -0
  128. package/templates/channels/brand/dark/192.png +0 -0
  129. package/templates/channels/brand/dark/256.png +0 -0
  130. package/templates/channels/brand/dark/32.png +0 -0
  131. package/templates/channels/brand/dark/512.png +0 -0
  132. package/templates/channels/brand/dark/64.png +0 -0
  133. package/templates/channels/brand/light/128.png +0 -0
  134. package/templates/channels/brand/light/192.png +0 -0
  135. package/templates/channels/brand/light/256.png +0 -0
  136. package/templates/channels/brand/light/32.png +0 -0
  137. package/templates/channels/brand/light/512.png +0 -0
  138. package/templates/channels/brand/light/64.png +0 -0
  139. package/templates/channels/brand/mono-white/128.png +0 -0
  140. package/templates/channels/brand/mono-white/192.png +0 -0
  141. package/templates/channels/brand/mono-white/256.png +0 -0
  142. package/templates/channels/brand/mono-white/32.png +0 -0
  143. package/templates/channels/brand/mono-white/512.png +0 -0
  144. package/templates/channels/brand/mono-white/64.png +0 -0
  145. package/templates/channels/brand/outline-32.png +0 -0
  146. package/templates/channels/chatgpt/install.template.md.hbs +6 -4
  147. package/templates/channels/chatgpt/integration/README.md +4 -5
  148. package/templates/channels/chatgpt/integration/chatgpt-system.json +1 -16
  149. package/templates/channels/microsoft-copilot/ai-plugin.template.json.hbs +14 -16
  150. package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +5 -3
  151. package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +30 -0
  152. package/templates/channels/microsoft-copilot/fi-fi.template.json.hbs +7 -0
  153. package/templates/channels/microsoft-copilot/install.template.md.hbs +93 -22
  154. package/templates/channels/microsoft-copilot/integration/README.md +2 -3
  155. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +1 -22
  156. package/templates/channels/microsoft-copilot/manifest.template.json.hbs +34 -19
  157. package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +15 -0
  158. package/templates/channels/slack/integration/README.md +2 -4
  159. package/templates/channels/teams-bot/install.template.md.hbs +4 -0
  160. package/templates/channels/teams-bot/integration/README.md +3 -5
  161. package/templates/channels/web-embed/integration/web-embed-system.json +1 -16
  162. package/templates/python/docker-compose.hbs +36 -0
  163. package/templates/typescript/docker-compose.hbs +36 -0
  164. package/.cursor/plans/Done/157.1-security-quality-violations-by-type.csv +0 -374
  165. package/.cursor/process/README.md +0 -9
  166. package/.cursor/rules/anchor-docs.mdc +0 -15
  167. package/.cursor/rules/assistant-driven-integration-build.mdc +0 -40
  168. package/.cursor/rules/cli-layout.mdc +0 -81
  169. package/.cursor/rules/cli-product-neutral.mdc +0 -43
  170. package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +0 -49
  171. package/.cursor/rules/docs-rules.mdc +0 -32
  172. package/.cursor/rules/plan-rules/application-lifecycle.mdc +0 -30
  173. package/.cursor/rules/plan-rules/plan-frontmatter.mdc +0 -35
  174. package/.cursor/rules/plan-rules/plan-lifecycle.mdc +0 -31
  175. package/.cursor/rules/plan-rules/plan-validation-gate.mdc +0 -34
  176. package/.cursor/rules/project-rules.mdc +0 -913
  177. package/.cursor/skills/README.md +0 -15
  178. package/.dockerignore +0 -52
  179. package/.eslintignore +0 -22
  180. package/.markdownlint.json +0 -14
  181. package/anchor-docs/README.md +0 -10
  182. package/anchor-docs/_TEMPLATE +0 -24
  183. package/babel.config.js +0 -6
  184. package/bin/builder-api-cleanup.js +0 -26
  185. package/bin/builder-api-nest.js +0 -10
  186. package/bin/builder-api-spike.js +0 -19
  187. package/enterprise-knowledge/README.md +0 -50
  188. package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +0 -22
  189. package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +0 -15
  190. package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +0 -69
  191. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +0 -52
  192. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +0 -29
  193. package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +0 -2
  194. package/integration/README.md +0 -81
  195. package/integration/github/README.md +0 -53
  196. package/integration/github/application.json +0 -21
  197. package/integration/github/deploy.js +0 -72
  198. package/integration/github/env.template +0 -11
  199. package/integration/github/github-datasource-issue-comments.json +0 -239
  200. package/integration/github/github-datasource-issues.json +0 -399
  201. package/integration/github/github-datasource-repository.json +0 -354
  202. package/integration/github/github-deploy.json +0 -1202
  203. package/integration/github/github-system.json +0 -82
  204. package/integration/hubspot-test/README.md +0 -159
  205. package/integration/hubspot-test/application.json +0 -54
  206. package/integration/hubspot-test/companies.json +0 -2048
  207. package/integration/hubspot-test/create-hubspot.js +0 -523
  208. package/integration/hubspot-test/env.template +0 -4
  209. package/integration/hubspot-test/hubspot-test-datasource-company.json +0 -138
  210. package/integration/hubspot-test/hubspot-test-datasource-contact.json +0 -146
  211. package/integration/hubspot-test/hubspot-test-datasource-deal.json +0 -146
  212. package/integration/hubspot-test/hubspot-test-datasource-users.json +0 -76
  213. package/integration/hubspot-test/hubspot-test-deploy.json +0 -2160
  214. package/integration/hubspot-test/hubspot-test-system.json +0 -74
  215. package/integration/hubspot-test/rbac.json +0 -166
  216. package/integration/hubspot-test/test-artifacts/wizard-hubspot-credential-real.yaml +0 -20
  217. package/integration/hubspot-test/test-artifacts/wizard-hubspot-env-vars.yaml +0 -9
  218. package/integration/hubspot-test/test-artifacts/wizard-invalid-add-datasource.yaml +0 -5
  219. package/integration/hubspot-test/test-artifacts/wizard-invalid-app-name.yaml +0 -5
  220. package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-create.yaml +0 -7
  221. package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-select.yaml +0 -7
  222. package/integration/hubspot-test/test-artifacts/wizard-invalid-known-platform.yaml +0 -4
  223. package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-app.yaml +0 -4
  224. package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-source.yaml +0 -2
  225. package/integration/hubspot-test/test-artifacts/wizard-invalid-mode.yaml +0 -5
  226. package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-file.yaml +0 -5
  227. package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-url.yaml +0 -4
  228. package/integration/hubspot-test/test-artifacts/wizard-invalid-source.yaml +0 -4
  229. package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-array-test.yaml +0 -5
  230. package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-key-test.yaml +0 -5
  231. package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-path-test.yaml +0 -5
  232. package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-test.yaml +0 -5
  233. package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-test.yaml +0 -5
  234. package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-yaml-test.yaml +0 -5
  235. package/integration/hubspot-test/test-dataplane-down-helpers.js +0 -249
  236. package/integration/hubspot-test/test-dataplane-down-tests.js +0 -386
  237. package/integration/hubspot-test/test-dataplane-down.js +0 -209
  238. package/integration/hubspot-test/test.js +0 -1588
  239. package/integration/hubspot-test/wizard-hubspot-e2e.yaml +0 -16
  240. package/integration/hubspot-test/wizard-hubspot-platform.yaml +0 -8
  241. package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +0 -23
  242. package/integration/roundtrip-test-local/README.md +0 -143
  243. package/integration/roundtrip-test-local/application.yaml +0 -13
  244. package/integration/roundtrip-test-local/env.template +0 -15
  245. package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +0 -14
  246. package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +0 -61
  247. package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +0 -25
  248. package/integration/roundtrip-test-local2/README.md +0 -143
  249. package/integration/roundtrip-test-local2/application.yaml +0 -13
  250. package/integration/roundtrip-test-local2/env.template +0 -15
  251. package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +0 -31
  252. package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +0 -86
  253. package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +0 -25
  254. package/integration/test/wizard.yaml +0 -8
  255. package/jest.config.coverage.js +0 -37
  256. package/jest.config.default.js +0 -11
  257. package/jest.config.integration.fixtures.js +0 -22
  258. package/jest.config.integration.js +0 -33
  259. package/jest.config.isolated.js +0 -11
  260. package/jest.config.manual.js +0 -30
  261. package/jest.global-live-fabrix-hooks.js +0 -36
  262. package/jest.isolated-projects.js +0 -260
  263. package/jest.projects.js +0 -76
  264. package/packages/builder-api/README.md +0 -120
  265. package/packages/builder-api/package.json +0 -30
  266. package/packages/builder-api/src/app.module.ts +0 -7
  267. package/packages/builder-api/src/auth/auth.module.ts +0 -5
  268. package/packages/builder-api/src/external-system/external-system.module.ts +0 -5
  269. package/packages/builder-api/src/main.ts +0 -16
  270. package/packages/builder-api/tsconfig.json +0 -15
  271. package/scripts/check-builder-api-architecture-grep.js +0 -79
  272. package/scripts/check-datasource-test-run-schema-sync.js +0 -34
  273. package/scripts/ci-fix.sh +0 -19
  274. package/scripts/ci-simulate.sh +0 -19
  275. package/scripts/diagnose-cli.js +0 -150
  276. package/scripts/docker_image_content_gate.js +0 -47
  277. package/scripts/docker_image_content_gate.sh +0 -5
  278. package/scripts/export-builder-api-evidence.js +0 -262
  279. package/scripts/install-local.js +0 -490
  280. package/scripts/lib/builder-api-docker-staging-copy.js +0 -60
  281. package/scripts/lib/builder-api-docker-staging-core.js +0 -183
  282. package/scripts/lib/docker-image-content-gate-core.js +0 -166
  283. package/scripts/lib/plan-actor.js +0 -109
  284. package/scripts/lib/plan-config.js +0 -20
  285. package/scripts/lib/plan-gates.js +0 -154
  286. package/scripts/lib/plan-meta.js +0 -104
  287. package/scripts/lib/plan-parse.js +0 -162
  288. package/scripts/lib/plan-prevalidate-gates.js +0 -337
  289. package/scripts/lib/plan-run-core.js +0 -125
  290. package/scripts/lib/plan-run-report.js +0 -119
  291. package/scripts/plan-approve.js +0 -24
  292. package/scripts/plan-archive.js +0 -49
  293. package/scripts/plan-run.js +0 -13
  294. package/scripts/plan-set-actor.js +0 -21
  295. package/scripts/plan-validate.js +0 -80
  296. package/scripts/pnpm/af.mjs +0 -110
  297. package/scripts/pnpm/check-quiet.mjs +0 -32
  298. package/scripts/pnpm/dev-install.mjs +0 -29
  299. package/scripts/pnpm/dev-reload.mjs +0 -18
  300. package/scripts/pnpm/help.mjs +0 -55
  301. package/scripts/pnpm/lib/dev-reload-core.mjs +0 -189
  302. package/scripts/pnpm/lib/dev-reload-log-capture.mjs +0 -67
  303. package/scripts/pnpm/lib/dev-reload-log-utils.mjs +0 -32
  304. package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +0 -124
  305. package/scripts/pnpm/lib/resolve-app-url.mjs +0 -183
  306. package/scripts/pnpm/lib/spinner.mjs +0 -42
  307. package/scripts/pnpm-global-remove.js +0 -48
  308. package/scripts/stage_builder_api_for_docker.js +0 -65
  309. package/scripts/sync-builder-api-template.js +0 -44
  310. package/scripts/test-dataplane-bootstrap.js +0 -331
@@ -0,0 +1,123 @@
1
+ # Enterprise Synchronization Fabrix
2
+
3
+ Webhook change signals and syncBridge propagation connect vendor events to governed CIP sync without a separate webhook engine.
4
+
5
+ ## Overview
6
+
7
+ | Concept | Role |
8
+ | --- | --- |
9
+ | **webhook** | Inbound vendor POST trigger only — records WebhookDelivery and may create SyncIntent |
10
+ | **syncBridge** | Resource-type propagation mode (`disabled`, `master`, `bidirectional`) across datasources |
11
+ | **CIP get** | Business data always loaded via existing get operations and fieldMappings |
12
+
13
+ Webhook does not carry full record payloads for sync. The coordinator runs CIP get after a valid trigger.
14
+
15
+ ## authentications[] usage slots
16
+
17
+ Declare multiple authentication slots on the **external system** manifest (`authentications[]`), not on datasource files:
18
+
19
+ | usage | Purpose |
20
+ | --- | --- |
21
+ | `api` | Outbound vendor API calls (default slot) |
22
+ | `webhookInbound` | Validates inbound vendor webhook signatures or API keys |
23
+ | `syncExecution` | Credentials for syncBridge propagation CIP calls |
24
+
25
+ Example structure (YAML):
26
+
27
+ ```yaml
28
+ authentications:
29
+ - key: default
30
+ usage: api
31
+ authType: credential
32
+ credential:
33
+ method: apikey
34
+ security:
35
+ apiKey: kv://my-app/apiKey
36
+ - key: webhookInbound
37
+ usage: webhookInbound
38
+ authType: credential
39
+ credential:
40
+ method: hmac
41
+ security:
42
+ signingSecret: kv://my-app/webhookSigningSecret
43
+ - key: syncExecution
44
+ usage: syncExecution
45
+ authType: credential
46
+ credential:
47
+ method: apikey
48
+ security:
49
+ apiKey: kv://my-app/syncApiKey
50
+ ```
51
+
52
+ Repair helpers:
53
+
54
+ - `aifabrix repair <systemKey>` — normalize legacy `authentication` to `authentications[]`
55
+ - `aifabrix repair <systemKey> --auth apikey` — repair the default **api** slot only
56
+ - `aifabrix repair <systemKey> --auth-webhook` — add webhookInbound slot from template
57
+ - `aifabrix repair <systemKey> --auth-sync` — add syncExecution slot from template
58
+
59
+ ## Datasource webhook block
60
+
61
+ Minimal enabled configuration on a datasource manifest:
62
+
63
+ ```yaml
64
+ webhook:
65
+ enabled: true
66
+ endpointMode: datasource
67
+ events:
68
+ - company.updated
69
+ idPath: $.objectId
70
+ vendorDeliveryIdPath: $.deliveryId
71
+ ```
72
+
73
+ | Field | Notes |
74
+ | --- | --- |
75
+ | `endpointMode` | `system`, `datasource`, or `event` — controls generated POST path |
76
+ | `events` | Vendor event names that create SyncIntent |
77
+ | `idPath` | JSONPath to vendor object id in payload |
78
+ | `eventTypePath` | Required when multiple `events` and mode is not `event` |
79
+ | `vendorDeliveryIdPath` | Payload JSONPath for idempotent dedupe |
80
+
81
+ Generated receiver paths (first-party dataplane API):
82
+
83
+ - System: `POST /api/v1/webhooks/{systemKey}`
84
+ - Datasource: `POST /api/v1/webhooks/{systemKey}/{datasourceKey}`
85
+ - Event: `POST /api/v1/webhooks/{systemKey}/{datasourceKey}/{eventKey}`
86
+
87
+ Signature and API-key **headers** belong on the webhookInbound credential only — not on the datasource webhook block.
88
+
89
+ ## syncBridge modes
90
+
91
+ | Mode | Behavior |
92
+ | --- | --- |
93
+ | `disabled` | Default — no propagation |
94
+ | `master` | Authoritative source for a resourceType; receives webhook triggers |
95
+ | `bidirectional` | Participates in propagation; exactly one master per resourceType |
96
+
97
+ When syncBridge is not `disabled`, ensure `metadataSchema.properties.externalId` exists for routing.
98
+
99
+ ## Activation workflow
100
+
101
+ 1. Edit system + datasource manifests (authentications[], webhook, syncBridge).
102
+ 2. Run `aifabrix validate <app>` and `aifabrix repair <systemKey>` as needed.
103
+ 3. Run `aifabrix upload <app>` to publish.
104
+ 4. Open Connected Systems **Authentication** — add live secrets for each usage slot.
105
+ 5. Open datasource **Sync** tab — use **How to activate webhook** for operator copy/paste URLs.
106
+ 6. Run certification / test-e2e after credentials are live.
107
+
108
+ UI displays webhook and syncBridge config as **read-only**; manifest and API remain SSOT.
109
+
110
+ ## Validate and certification
111
+
112
+ - `aifabrix validate <app>` — schema + cross-field rules for webhook and syncBridge
113
+ - Dataplane certification readiness — webhookInbound auth, idPath, syncBridge master uniqueness
114
+
115
+ ## Logs and troubleshooting
116
+
117
+ After webhook POST, inspect datasource **Logs** tab for CIP execution traces. SyncIntent and coordinator outcomes appear in execution audit — no separate webhook log API.
118
+
119
+ ## Related help topics
120
+
121
+ - `connectedSystemUi` — post-upload Authentication and Sync tab URLs
122
+ - `workflow` — validate → upload → handoff ladder
123
+ - `schemaCatalog` — manifest property reference
@@ -0,0 +1,25 @@
1
+ # Builder manifest editing overview
2
+
3
+ The Builder API exposes governed manifest sections for external integrations. Agents read one section at a time, resolve missing inputs with the user, patch with explicit intent, repair derived sections, then validate and test the workspace draft.
4
+
5
+ ## Purpose
6
+
7
+ Help agents and MCP tools bootstrap without guessing manifest structure. Structured topics describe section keys, dependency order, repair hooks, workflow rules, golden patterns, and evidence expectations.
8
+
9
+ ## Core concepts
10
+
11
+ ### Governed sections
12
+
13
+ Manifests split into section keys for the external system and each datasource. Each section has schema fragments, mutability rules, and optional repair hooks.
14
+
15
+ ### Section quality
16
+
17
+ Every section read returns a quality score, missing-input questions, blocking issues, and recommended next actions. Required missing inputs must be collected from the user before patching.
18
+
19
+ ### Dependency graph
20
+
21
+ Some sections derive from others. After patching metadata or capabilities, run explicit repair hooks so field mappings, exposure, and RBAC stay aligned.
22
+
23
+ ## Getting started
24
+
25
+ Call the help endpoint with topic overview, then workflow, then schemaCatalog or sections. Use topic section with a sectionKey when editing a specific area. Use subscriptionGuide and cipOverview for subscriptions and execution depth. Use enterpriseSyncFabrix for webhook change signals and syncBridge propagation. After upload, use connectedSystemUi for shareable dataplane UI paths and post-upload authentication handoff.
@@ -0,0 +1,27 @@
1
+ # Subscription and role-scoped generation guide
2
+
3
+ Subscriptions on the external system manifest bootstrap platform tasks when records change or after publish. They connect certified datasources to role assistants without a separate workflow engine.
4
+
5
+ ## Where subscriptions live
6
+
7
+ Edit the system.subscriptions section. Each entry has a unique key, optional filter conditions, a task type, and optional runOnPublish flag.
8
+
9
+ Datasource manifests may declare subscriptionFilter to scope which role keys, system kinds, resource types, or datasource keys participate in generation.
10
+
11
+ ## Normalized record events
12
+
13
+ Vendor sync and pipeline execution emit normalized events only: record insert, update, delete, and sync completed. Subscription conditions reference generic field paths such as after.status with operators equals, in, changed, exists, and missing.
14
+
15
+ ## Role and resource scoping
16
+
17
+ Scope resourceTypes to business tokens on the datasource, such as company or deal, not generic placeholders. Match subscription filters to the same resourceType declared on each datasource.
18
+
19
+ For document libraries linked to CRM records, declare foreignKeys on the library datasource and use a business resourceType on that datasource. Exclude generic document resource types from role assistant subscription filters when business libraries exist.
20
+
21
+ ## Editing workflow
22
+
23
+ Read system.subscriptions with topic section before patch. Patch with intent describing the business trigger. Validate after edit; subscriptions do not auto-repair derived sections.
24
+
25
+ ## Related sections
26
+
27
+ system.subscriptions, system.rolesPermissions, datasource.resourceType, datasource.foreignKeys, datasource.governance
@@ -0,0 +1,50 @@
1
+ # Manifest development workflow
2
+
3
+ Follow this loop when editing external integration manifests through the Builder API.
4
+
5
+ ## Normative loop
6
+
7
+ Read a governed section, resolve required missing inputs with the user, patch with intent, repair derived sections, validate, then test.
8
+
9
+ ## Rules
10
+
11
+ ### Read before patch
12
+
13
+ Prefer GET when you need quality scores or `missingInputs`. `sectionReadToken` on PATCH is **optional**: when omitted, the server re-reads the section immediately before write (same race window as CLI `patch-section` without `--token`). If you send a token and it is stale, PATCH returns **409** — GET again and retry.
14
+
15
+ Do not invent primary keys, entity types, or similar values.
16
+
17
+ ### Ask when inputs are missing
18
+
19
+ When quality reports required missingInputs, ask the user. Do not invent primary keys, entity types, or similar values.
20
+
21
+ ### Patch requires intent
22
+
23
+ Every write records audit metadata describing why the change was made.
24
+
25
+ ### Repair is explicit
26
+
27
+ Pass named repair hooks after patches that affect derived sections. The dependency graph defines downstream order.
28
+
29
+ ### No auto-upload
30
+
31
+ Upload and certification are separate steps after validate and test succeed.
32
+
33
+ ### Post-upload authentication (enterprise handoff)
34
+
35
+ Validate, test, test-integration, and upload must not depend on resolved integration secrets in Builder API scope. Upload publishes configuration including `authentication.credential.variables` (non-secrets). The user adds live secrets in the dataplane Connected Systems Authentication UI afterward.
36
+
37
+ After upload succeeds:
38
+
39
+ 1. Read `authentication.authType` and `authentication.credential.method` from the published system manifest (`system.authentication`).
40
+ 2. Confirm non-secret `variables` (baseUrl, headerName, tokenUrl, and similar) were set in the manifest — they are pre-filled in the UI after upload.
41
+ 3. Fetch help topic `connectedSystemUi` with `systemKey`, optional `authType`, and optional `credentialMethod`.
42
+ 4. Ask the user for their dataplane public UI base (origin including `/data`).
43
+ 5. Provide the Authentication URL and tell the user to add **only the required secrets** (for example apiKey token for apikey method).
44
+ 6. User adds secrets in the UI, then re-runs E2E or live verification.
45
+
46
+ Do not instruct the user to paste vendor tokens into Builder API or workspace env files when UI authentication is the intended path.
47
+
48
+ ## Typical sequence
49
+
50
+ Start with datasource metadata for a new entity. Patch with intent describing the vendor payload mapping. Repair fieldMappings, expose, and rbac hooks. Patch openapiOperations when adding write capabilities. Repair again, validate, then test. Upload when ready, then hand off to Connected Systems Authentication per topic `connectedSystemUi`.
@@ -21,13 +21,16 @@ const {
21
21
  OPENAPI_EVIDENCE_REQUEST_SCHEMAS,
22
22
  OPENAPI_EVIDENCE_RESULT_SCHEMAS
23
23
  } = require('./openapi-evidence-schemas');
24
+ const { OPENAPI_HELP_RESULT_SCHEMAS } = require('./openapi-help-schemas');
24
25
 
25
26
  const RESPONSE_ENVELOPES = [
26
27
  ['ListSystemsResponse', 'ListSystemsData'],
27
28
  ['CreateSystemResponse', 'CreateSystemData'],
29
+ ['PersistSuppliedOpenApiResponse', 'PersistSuppliedOpenApiData'],
28
30
  ['SystemManifestResponse', 'SystemManifestData'],
29
31
  ['DeleteSystemResponse', 'DeleteSystemData'],
30
32
  ['WizardRunResponse', 'WizardRunData'],
33
+ ['IntegrationDefinitionApplyResponse', 'IntegrationDefinitionApplyData'],
31
34
  ['RepairResultResponse', 'RepairResultData'],
32
35
  ['ValidateResultResponse', 'ValidateResultData'],
33
36
  ['PreviewUploadResponse', 'PreviewUploadData'],
@@ -51,7 +54,8 @@ const RESPONSE_ENVELOPES = [
51
54
  ['EvidenceAuthoringMetadataResponse', 'EvidenceAuthoringMetadataData'],
52
55
  ['EvidenceDownloadResponse', 'EvidenceDownloadData'],
53
56
  ['EvidenceUploadResponse', 'EvidenceUploadData'],
54
- ['EvidenceActivateResponse', 'EvidenceActivateData']
57
+ ['EvidenceActivateResponse', 'EvidenceActivateData'],
58
+ ['BuilderHelpResponse', 'BuilderHelpData']
55
59
  ];
56
60
 
57
61
  /**
@@ -70,6 +74,7 @@ function buildOpenApiComponentSchemas() {
70
74
  ...OPENAPI_APPLY_RESULT_SCHEMAS,
71
75
  ...OPENAPI_MANIFEST_RESULT_SCHEMAS,
72
76
  ...OPENAPI_EVIDENCE_RESULT_SCHEMAS,
77
+ ...OPENAPI_HELP_RESULT_SCHEMAS,
73
78
  EmptyResultData: { type: 'object', properties: {}, additionalProperties: false },
74
79
  ...envelopes
75
80
  });
@@ -78,6 +83,7 @@ function buildOpenApiComponentSchemas() {
78
83
  module.exports = {
79
84
  buildOpenApiComponentSchemas,
80
85
  buildSuccessEnvelopeSchema,
86
+ RESPONSE_ENVELOPES,
81
87
  OPENAPI_REQUEST_SCHEMAS,
82
88
  OPENAPI_RESULT_SCHEMAS
83
89
  };
@@ -22,6 +22,12 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
22
22
  'Create an empty integration workspace for a systemKey. Mutating; requires Idempotency-Key on retries.',
23
23
  tags: ['workspace']
24
24
  },
25
+ persistSuppliedOpenApi: {
26
+ summary: 'Persist supplied OpenAPI documents to workspace',
27
+ description:
28
+ 'Validate Runtime-authorized OpenAPI documents and write them under integration/<systemKey>/openapi/. Does not run wizard or BID apply. Mutating.',
29
+ tags: ['workspace']
30
+ },
25
31
  getSystemManifest: {
26
32
  summary: 'Read workspace manifest summary',
27
33
  description: 'Return local workspace metadata and file manifest for one systemKey. Read-only.',
@@ -39,6 +45,12 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
39
45
  'Run headless wizard to materialize system and datasource JSON under the workspace. Mutating; may take up to MAX_REQUEST_TIMEOUT_MS. Retry with the same Idempotency-Key.',
40
46
  tags: ['build']
41
47
  },
48
+ applyIntegrationDefinition: {
49
+ summary: 'Apply Builder Integration Definition (BID) into workspace',
50
+ description:
51
+ 'Materialize system and datasource package files from an aifabrix.builder.integrationDefinition document. Prefer this over wizard when OpenAPI is not yet available. Mutating; retry with the same Idempotency-Key.',
52
+ tags: ['build']
53
+ },
42
54
  runRepair: {
43
55
  summary: 'Repair workspace manifest drift',
44
56
  description:
@@ -194,6 +206,12 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
194
206
  description: 'Returns ready with configured dataplaneUrl. Does not verify Dataplane connectivity in V1.',
195
207
  tags: ['infra']
196
208
  },
209
+ getBuilderHelp: {
210
+ summary: 'LLM help topics',
211
+ description:
212
+ 'Deterministic product help for agents (no tenant data). Required topic enum includes resourceTypeCatalog for BID resourceType keys. No authentication.',
213
+ tags: ['help']
214
+ },
197
215
  getEvidenceMetadata: {
198
216
  summary: 'Evidence authoring metadata',
199
217
  description:
@@ -217,6 +235,34 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
217
235
  description:
218
236
  'Activate one or many human-approved certified Evidence ids. Organizational gate after technical certification. Mutating; use Idempotency-Key.',
219
237
  tags: ['evidence']
238
+ },
239
+ buildChannelPackage: {
240
+ summary: 'Build channel package',
241
+ description:
242
+ 'Build vendor channel package from External AI Discovery plus optional workspace branding. Returns summary, README/ZIP links, and installReady. Mutating.',
243
+ tags: ['channel']
244
+ },
245
+ getChannelPackageSummary: {
246
+ summary: 'Get channel package summary',
247
+ description: 'Return last built channel package summary and README/ZIP links. Read-only.',
248
+ tags: ['channel']
249
+ },
250
+ getChannelPackageZip: {
251
+ summary: 'Download channel package ZIP',
252
+ description:
253
+ 'Return the built app package as zipBase64 (application/zip). Build package first. Read-only.',
254
+ tags: ['channel']
255
+ },
256
+ getChannelBranding: {
257
+ summary: 'Get channel branding',
258
+ description: 'Return optional workspace branding (displayName, description, icon paths). Read-only.',
259
+ tags: ['channel']
260
+ },
261
+ patchChannelBranding: {
262
+ summary: 'Patch channel branding',
263
+ description:
264
+ 'Update optional package branding overrides stored in the Builder API workspace. Mutating.',
265
+ tags: ['channel']
220
266
  }
221
267
  });
222
268
 
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Minimal valid `data` examples for builder-api success envelopes (OAPI-136).
3
+ *
4
+ * @fileoverview Envelope data examples keyed by data schema name
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const SAMPLE_SYSTEM_KEY = 'hubspot-demo';
12
+ const SAMPLE_DATASOURCE_KEY = 'hubspot-demo-companies';
13
+ const SAMPLE_UUID = '00000000-0000-4000-8000-000000000010';
14
+ const SAMPLE_ISO = '2026-01-15T12:00:00.000Z';
15
+
16
+ const SAMPLE_META = {
17
+ ownerUserId: 'user-demo',
18
+ systemKey: SAMPLE_SYSTEM_KEY,
19
+ createdAt: SAMPLE_ISO,
20
+ lastModifiedAt: SAMPLE_ISO,
21
+ lastOperation: 'validate'
22
+ };
23
+
24
+ const SAMPLE_QUALITY = {
25
+ score: 100,
26
+ blockingIssues: [],
27
+ warnings: [],
28
+ missingInputs: [],
29
+ assumptions: []
30
+ };
31
+
32
+ const SAMPLE_MCP_RESULT = {
33
+ success: true,
34
+ status: 'ok',
35
+ message: 'completed'
36
+ };
37
+
38
+ const SAMPLE_SYSTEM_MANIFEST = {
39
+ systemKey: SAMPLE_SYSTEM_KEY,
40
+ meta: SAMPLE_META,
41
+ files: [{ path: 'application.json', isDirectory: false, sizeBytes: 128, redacted: false }]
42
+ };
43
+
44
+ const SAMPLE_VALIDATION_STEP = {
45
+ valid: true,
46
+ errors: [],
47
+ warnings: []
48
+ };
49
+
50
+ /** @type {Record<string, Object>} */
51
+ const OPENAPI_ENVELOPE_DATA_EXAMPLES = {
52
+ HealthData: { status: 'ok' },
53
+ ReadyData: { status: 'ready', dataplaneUrl: 'http://localhost:3601' },
54
+ BuilderHelpData: {
55
+ version: '1.0.0',
56
+ schemaVersion: '1.0.0',
57
+ topic: 'resourceTypeCatalog',
58
+ key: 'all',
59
+ title: 'Resource type catalog',
60
+ summary: 'Taxonomy-only catalog keys for datasource.resourceType.',
61
+ data: {
62
+ schemaVersion: '1.0.0',
63
+ minimumSystemKeys: ['customer'],
64
+ resourceTypes: [
65
+ {
66
+ key: 'customer',
67
+ displayName: 'Customer',
68
+ description: 'Customer organization.',
69
+ category: 'business',
70
+ defaultRiskLevel: 'medium',
71
+ status: 'active'
72
+ }
73
+ ]
74
+ },
75
+ related: ['schemaCatalog'],
76
+ recommendedNext: ['topic=section&sectionKey=datasource.resourceType']
77
+ },
78
+ EmptyResultData: {},
79
+ ListSystemsData: { systems: [{ systemKey: SAMPLE_SYSTEM_KEY, meta: SAMPLE_META }] },
80
+ CreateSystemData: { systemKey: SAMPLE_SYSTEM_KEY, meta: SAMPLE_META },
81
+ PersistSuppliedOpenApiData: {
82
+ accepted: [
83
+ {
84
+ filename: 'companies.json',
85
+ path: `integration/${SAMPLE_SYSTEM_KEY}/openapi/companies.json`,
86
+ digest: 'sha256:demo'
87
+ }
88
+ ],
89
+ rejected: [],
90
+ workspaceRoot: '/workspace/integration'
91
+ },
92
+ SystemManifestData: SAMPLE_SYSTEM_MANIFEST,
93
+ DeleteSystemData: { systemKey: SAMPLE_SYSTEM_KEY, deleted: true },
94
+ WizardRunData: { systemKey: SAMPLE_SYSTEM_KEY, status: 'completed' },
95
+ IntegrationDefinitionApplyData: {
96
+ status: 'updated',
97
+ systemKey: SAMPLE_SYSTEM_KEY,
98
+ outputDir: `/workspace/integration/${SAMPLE_SYSTEM_KEY}`,
99
+ definitionId: 'bid-demo',
100
+ definitionHash: 'sha256:demo',
101
+ packageVersion: '1.0.0',
102
+ files: ['application.json']
103
+ },
104
+ RepairResultData: {
105
+ updated: true,
106
+ changes: ['synced dataSources'],
107
+ warnings: [],
108
+ changedFiles: ['application.json']
109
+ },
110
+ ValidateResultData: {
111
+ validationResult: {
112
+ valid: true,
113
+ errors: [],
114
+ warnings: [],
115
+ steps: {
116
+ application: SAMPLE_VALIDATION_STEP,
117
+ components: SAMPLE_VALIDATION_STEP,
118
+ manifest: SAMPLE_VALIDATION_STEP
119
+ }
120
+ },
121
+ pipelineValidation: null
122
+ },
123
+ PreviewUploadData: {
124
+ manifest: { key: SAMPLE_SYSTEM_KEY, version: '1.0.0', type: 'external' },
125
+ payload: {
126
+ version: '1.0.0',
127
+ application: { key: SAMPLE_SYSTEM_KEY, displayName: 'Demo', type: 'external' },
128
+ dataSources: [{ key: SAMPLE_DATASOURCE_KEY }]
129
+ }
130
+ },
131
+ UploadResultData: {
132
+ dataplaneUrl: 'http://localhost:3601',
133
+ environment: 'dev',
134
+ uploadSkipped: false
135
+ },
136
+ DeployResultData: {
137
+ deployed: true,
138
+ deploymentId: SAMPLE_UUID,
139
+ environment: 'dev',
140
+ systemKey: SAMPLE_SYSTEM_KEY
141
+ },
142
+ ProtectionUploadData: {
143
+ datasourceKey: SAMPLE_DATASOURCE_KEY,
144
+ uploaded: true,
145
+ dryRun: false
146
+ },
147
+ ProtectionCreateData: {
148
+ datasourceKey: SAMPLE_DATASOURCE_KEY,
149
+ created: true,
150
+ dryRun: false
151
+ },
152
+ TestResultData: {
153
+ runType: 'unit',
154
+ valid: true,
155
+ errors: [],
156
+ warnings: [],
157
+ systemResults: [{ file: 'hubspot-demo-system.json', valid: true, errors: [] }],
158
+ datasourceResults: [
159
+ {
160
+ key: SAMPLE_DATASOURCE_KEY,
161
+ file: 'hubspot-demo-datasource-companies.json',
162
+ valid: true,
163
+ errors: [],
164
+ warnings: []
165
+ }
166
+ ],
167
+ systemKey: SAMPLE_SYSTEM_KEY,
168
+ appName: SAMPLE_SYSTEM_KEY
169
+ },
170
+ CertifyResultData: {
171
+ command: 'verify-operations',
172
+ systemKey: SAMPLE_SYSTEM_KEY,
173
+ verdict: 'VERIFIED',
174
+ operationalReadinessPercent: 100,
175
+ certification: { level: 'SILVER', status: 'AI_READY' },
176
+ warnings: [],
177
+ details: [],
178
+ stepResults: []
179
+ },
180
+ LifecycleReportData: {
181
+ systemKey: SAMPLE_SYSTEM_KEY,
182
+ certification: { level: 'SILVER', status: 'AI_READY' },
183
+ operationalReadinessPercent: 100,
184
+ summary: true,
185
+ details: false
186
+ },
187
+ EnterpriseMcpInvocationData: {
188
+ capabilityKey: 'repository.status',
189
+ result: SAMPLE_MCP_RESULT
190
+ },
191
+ WorkspaceStatusData: {
192
+ local: SAMPLE_SYSTEM_MANIFEST,
193
+ remote: null
194
+ },
195
+ RepositoryStatusData: {
196
+ capabilityKey: 'repository.status',
197
+ result: SAMPLE_MCP_RESULT
198
+ },
199
+ ManifestSectionViewData: {
200
+ sectionKey: 'system.authentication',
201
+ target: 'system',
202
+ datasourceKey: null,
203
+ currentValue: {},
204
+ schemaFragment: {},
205
+ required: true,
206
+ mutable: true,
207
+ sourceOfTruth: true,
208
+ dependencyGraph: { downstreamFromThis: [] },
209
+ repairHooks: [],
210
+ recommendedNextActions: [],
211
+ sectionReadToken: SAMPLE_UUID,
212
+ quality: SAMPLE_QUALITY
213
+ },
214
+ ManifestPatchResultData: {
215
+ sectionKey: 'system.authentication',
216
+ datasourceKey: null,
217
+ intent: 'align auth method',
218
+ changedPaths: ['authentication.method'],
219
+ beforeHash: 'sha256:before',
220
+ afterHash: 'sha256:after',
221
+ derivedSectionsAffected: [],
222
+ repairRecommended: false,
223
+ repairHooks: [],
224
+ validationPreview: {},
225
+ riskHints: [],
226
+ nextActions: [],
227
+ dryRun: false,
228
+ quality: SAMPLE_QUALITY
229
+ },
230
+ ManifestSectionsListData: {
231
+ systemKey: SAMPLE_SYSTEM_KEY,
232
+ sections: [{ sectionKey: 'system.authentication', target: 'system' }],
233
+ datasourceKeys: [SAMPLE_DATASOURCE_KEY]
234
+ },
235
+ ManifestRepairResultData: {
236
+ hooksRun: ['sync-datasources'],
237
+ derivedSectionsUpdated: [],
238
+ repairResult: {},
239
+ dryRun: false,
240
+ quality: SAMPLE_QUALITY
241
+ },
242
+ EvidenceAuthoringMetadataData: {
243
+ roleKey: 'aifabrix-business-transformation',
244
+ evidenceKinds: [],
245
+ aspects: [],
246
+ resourceTypes: [],
247
+ assistantCapabilities: [],
248
+ writableFields: [],
249
+ requiredFields: [],
250
+ constraints: {
251
+ certification: {},
252
+ activation: { requiresCertified: true, requiresAuthority: false }
253
+ }
254
+ },
255
+ EvidenceDownloadData: {
256
+ roleKey: 'aifabrix-business-transformation',
257
+ count: 0,
258
+ data: []
259
+ },
260
+ EvidenceUploadData: {
261
+ roleKey: 'aifabrix-business-transformation',
262
+ inserted: 0,
263
+ updated: 0,
264
+ accepted: [],
265
+ rejected: [],
266
+ warnings: [],
267
+ certified: [],
268
+ readyToActivate: false
269
+ },
270
+ EvidenceActivateData: {
271
+ requested: 0,
272
+ activated: [],
273
+ failed: [],
274
+ success: true
275
+ }
276
+ };
277
+
278
+ module.exports = {
279
+ OPENAPI_ENVELOPE_DATA_EXAMPLES
280
+ };
@@ -81,6 +81,11 @@ const OPERATION_BINDINGS = Object.freeze({
81
81
  requestBody: jsonRequestBody('CreateSystemRequest', true),
82
82
  successResponse: 'CreateSystemResponse'
83
83
  },
84
+ persistSuppliedOpenApi: {
85
+ parameters: [SYSTEM_KEY_PARAM],
86
+ requestBody: jsonRequestBody('PersistSuppliedOpenApiRequest', true),
87
+ successResponse: 'PersistSuppliedOpenApiResponse'
88
+ },
84
89
  getSystemManifest: {
85
90
  parameters: [SYSTEM_KEY_PARAM],
86
91
  successResponse: 'SystemManifestResponse'
@@ -103,6 +108,11 @@ const OPERATION_BINDINGS = Object.freeze({
103
108
  requestBody: jsonRequestBody('WizardConfigRequest', true),
104
109
  successResponse: 'WizardRunResponse'
105
110
  },
111
+ applyIntegrationDefinition: {
112
+ parameters: [SYSTEM_KEY_PARAM],
113
+ requestBody: jsonRequestBody('IntegrationDefinitionApplyRequest', true),
114
+ successResponse: 'IntegrationDefinitionApplyResponse'
115
+ },
106
116
  runRepair: {
107
117
  parameters: [SYSTEM_KEY_PARAM],
108
118
  queryParameters: [
@@ -275,6 +285,46 @@ const OPERATION_BINDINGS = Object.freeze({
275
285
  ready: {
276
286
  successResponse: 'ReadyResponse'
277
287
  },
288
+ getBuilderHelp: {
289
+ queryParameters: [
290
+ {
291
+ name: 'topic',
292
+ in: 'query',
293
+ required: true,
294
+ schema: { $ref: '#/components/schemas/BuilderHelpTopic' },
295
+ description: 'Help topic. Use resourceTypeCatalog for taxonomy keys agents may set on BID datasources.'
296
+ },
297
+ {
298
+ name: 'sectionKey',
299
+ in: 'query',
300
+ required: false,
301
+ schema: { type: 'string' },
302
+ description: 'Required when topic=section.'
303
+ },
304
+ {
305
+ name: 'exampleKey',
306
+ in: 'query',
307
+ required: false,
308
+ schema: { type: 'string' },
309
+ description: 'Required when topic=goldenExample.'
310
+ },
311
+ {
312
+ name: 'category',
313
+ in: 'query',
314
+ required: false,
315
+ schema: { type: 'string' },
316
+ description: 'Optional filter for topic=resourceTypeCatalog.'
317
+ },
318
+ {
319
+ name: 'resourceType',
320
+ in: 'query',
321
+ required: false,
322
+ schema: { type: 'string' },
323
+ description: 'Optional key filter for resourceTypeCatalog or schemaCatalog target.'
324
+ }
325
+ ],
326
+ successResponse: 'BuilderHelpResponse'
327
+ },
278
328
  getEvidenceMetadata: {
279
329
  parameters: [ROLE_KEY_PARAM],
280
330
  successResponse: 'EvidenceAuthoringMetadataResponse'