@aifabrix/builder 2.49.2 → 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 (409) hide show
  1. package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
  2. package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
  3. package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
  4. package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
  5. package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
  6. package/.cursor/skills/README.md +1 -0
  7. package/.dockerignore +52 -0
  8. package/.eslintignore +22 -0
  9. package/README.md +2 -0
  10. package/bin/builder-api-cleanup.js +26 -0
  11. package/bin/builder-api-nest.js +10 -0
  12. package/bin/builder-api-spike.js +19 -0
  13. package/enterprise-knowledge/README.md +50 -0
  14. package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
  15. package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
  16. package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
  17. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
  18. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
  19. package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
  20. package/integration/README.md +81 -0
  21. package/integration/github/README.md +53 -0
  22. package/integration/github/application.json +21 -0
  23. package/integration/github/deploy.js +72 -0
  24. package/integration/github/env.template +11 -0
  25. package/integration/github/github-datasource-issue-comments.json +239 -0
  26. package/integration/github/github-datasource-issues.json +399 -0
  27. package/integration/github/github-datasource-repository.json +354 -0
  28. package/integration/github/github-deploy.json +1202 -0
  29. package/integration/github/github-system.json +82 -0
  30. package/integration/hubspot-test/README.md +1 -1
  31. package/jest.isolated-projects.js +31 -1
  32. package/jest.projects.js +87 -1
  33. package/lib/api/dev-server-https.js +1 -1
  34. package/lib/api/enterprise-knowledge.api.js +63 -0
  35. package/lib/api/evidence.api.js +172 -0
  36. package/lib/api/external-systems.api.js +8 -2
  37. package/lib/api/resource-types.api.js +1 -0
  38. package/lib/api/types/enterprise-knowledge.types.js +46 -0
  39. package/lib/api/types/evidence.types.js +67 -0
  40. package/lib/api/types/resource-types.types.js +2 -0
  41. package/lib/app/controller-application-filter.js +36 -0
  42. package/lib/app/deploy.js +1 -1
  43. package/lib/app/list-external-systems.js +130 -0
  44. package/lib/app/list.js +20 -8
  45. package/lib/app/run.js +3 -1
  46. package/lib/app/show-display.js +8 -3
  47. package/lib/app/show-online.js +178 -0
  48. package/lib/app/show.js +37 -88
  49. package/lib/build/builder-api-docker-staging.js +47 -0
  50. package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
  51. package/lib/build/standard-docker-build.js +2 -0
  52. package/lib/certification/post-unified-cert-sync.js +4 -31
  53. package/lib/certification/sync-after-external-command.js +0 -1
  54. package/lib/certification/sync-system-certification.js +0 -3
  55. package/lib/channels/add-channel.js +40 -34
  56. package/lib/channels/approval-guides/chatgpt.js +33 -0
  57. package/lib/channels/approval-guides/credential-portal.js +38 -0
  58. package/lib/channels/approval-guides/index.js +110 -0
  59. package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
  60. package/lib/channels/approval-guides/slack.js +34 -0
  61. package/lib/channels/approval-guides/teams-bot.js +35 -0
  62. package/lib/channels/approval-guides/web-embed.js +32 -0
  63. package/lib/channels/channel-approval-guide.js +11 -0
  64. package/lib/channels/channel-artifact-generator.js +16 -4
  65. package/lib/channels/channel-audit.js +3 -0
  66. package/lib/channels/channel-auth-context.js +1 -1
  67. package/lib/channels/channel-description.js +59 -0
  68. package/lib/channels/channel-integration-generator.js +13 -230
  69. package/lib/channels/channel-integration-template.js +94 -0
  70. package/lib/channels/channel-runtime-resolver.js +43 -3
  71. package/lib/channels/channel-status-display.js +66 -26
  72. package/lib/channels/channel-targets.js +3 -3
  73. package/lib/cli/index.js +27 -3
  74. package/lib/cli/infra-guided.js +5 -1
  75. package/lib/cli/setup-app-external-create.js +111 -0
  76. package/lib/cli/setup-app.help.js +1 -1
  77. package/lib/cli/setup-app.js +38 -125
  78. package/lib/cli/setup-app.test-commands.js +26 -52
  79. package/lib/cli/setup-certification-commands.js +4 -4
  80. package/lib/cli/setup-certification.help.js +9 -9
  81. package/lib/cli/setup-dev.js +7 -2
  82. package/lib/cli/setup-external-system-help.js +4 -6
  83. package/lib/cli/setup-external-system.js +58 -52
  84. package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
  85. package/lib/cli/setup-infra-up-platform-action.js +3 -1
  86. package/lib/cli/setup-infra.js +15 -0
  87. package/lib/cli/setup-list.js +43 -0
  88. package/lib/cli/setup-utility-repair.js +26 -7
  89. package/lib/cli/setup-utility.js +5 -3
  90. package/lib/commands/app.js +15 -43
  91. package/lib/commands/channel-add-setup.js +110 -0
  92. package/lib/commands/channel.js +42 -8
  93. package/lib/commands/datasource-sync-display.js +96 -0
  94. package/lib/commands/datasource-sync-policy.js +210 -0
  95. package/lib/commands/datasource-test-trust-cli.js +6 -6
  96. package/lib/commands/datasource-unified-test-cli.js +2 -1
  97. package/lib/commands/datasource-unified-test-cli.options.js +33 -23
  98. package/lib/commands/deploy-gate-failure-details.js +163 -0
  99. package/lib/commands/deploy-gate-orchestrator.js +322 -0
  100. package/lib/commands/dev-cli-handlers.js +1 -59
  101. package/lib/commands/dev-host-ops-params.js +91 -0
  102. package/lib/commands/dev-host-ops-poll.js +111 -0
  103. package/lib/commands/dev-host-ops.js +107 -94
  104. package/lib/commands/dev-init.js +3 -1
  105. package/lib/commands/enterprise-knowledge.js +284 -0
  106. package/lib/commands/evidence-cli-leaves.js +250 -0
  107. package/lib/commands/evidence.js +51 -0
  108. package/lib/commands/governance-cli-shared.js +2 -2
  109. package/lib/commands/governance-command-action.js +2 -2
  110. package/lib/commands/governance-fixture-subjects.js +85 -0
  111. package/lib/commands/governance.js +1 -1
  112. package/lib/commands/lifecycle-command-action.js +2 -2
  113. package/lib/commands/lifecycle-external.js +3 -3
  114. package/lib/commands/manifest-cli-auth.js +29 -0
  115. package/lib/commands/manifest-cli-commands.js +170 -0
  116. package/lib/commands/manifest-cli-integration-path.js +63 -0
  117. package/lib/commands/manifest.js +21 -0
  118. package/lib/commands/protection-cli-leaves.js +3 -3
  119. package/lib/commands/repair-auth-apply.js +15 -1
  120. package/lib/commands/repair-authentications-454.js +169 -0
  121. package/lib/commands/repair-capability-openapi-warnings.js +126 -0
  122. package/lib/commands/repair-datasource-apply.js +135 -0
  123. package/lib/commands/repair-datasource-auto-rbac.js +62 -1
  124. package/lib/commands/repair-datasource-http-service-contract.js +239 -0
  125. package/lib/commands/repair-datasource-operation-security.js +180 -0
  126. package/lib/commands/repair-datasource-run.js +7 -2
  127. package/lib/commands/repair-datasource-sync-operations.js +177 -0
  128. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
  129. package/lib/commands/repair-datasource.js +12 -68
  130. package/lib/commands/repair-env-template.js +11 -1
  131. package/lib/commands/repair-external-run.js +121 -31
  132. package/lib/commands/repair-internal.js +1 -1
  133. package/lib/commands/repair-openapi-export.js +156 -0
  134. package/lib/commands/repair-openapi-sync.js +19 -2
  135. package/lib/commands/repair-orchestration-datasource-split.js +259 -0
  136. package/lib/commands/repair-persist.js +22 -1
  137. package/lib/commands/repair-rbac-platform-preset.js +204 -0
  138. package/lib/commands/repair-rbac-reader-roles.js +191 -0
  139. package/lib/commands/repair-rbac.js +163 -86
  140. package/lib/commands/repair-steps.js +83 -18
  141. package/lib/commands/repair-system-permissions.js +1 -0
  142. package/lib/commands/repair.js +1 -1
  143. package/lib/commands/resource-type.js +65 -26
  144. package/lib/commands/run-post-publish-data-sync.js +68 -0
  145. package/lib/commands/setup-modes.js +1 -1
  146. package/lib/commands/test-e2e-external.js +21 -8
  147. package/lib/commands/test-governance-cli-options.js +2 -2
  148. package/lib/commands/test-trust-cli-options.js +2 -2
  149. package/lib/commands/up-builder-api-bootstrap.js +71 -0
  150. package/lib/commands/up-builder-api-provision.js +241 -0
  151. package/lib/commands/up-builder-api.js +88 -0
  152. package/lib/commands/up-common.js +25 -1
  153. package/lib/commands/upload-credential-push-log.js +117 -0
  154. package/lib/commands/upload-data-sync-finalize.js +60 -0
  155. package/lib/commands/upload-probe.js +66 -0
  156. package/lib/commands/upload-publish-context.js +4 -1
  157. package/lib/commands/upload-sidecar-followups.js +55 -27
  158. package/lib/commands/upload.js +116 -157
  159. package/lib/commands/verify-governance-combined-external.js +1 -1
  160. package/lib/commands/verify-governance-db.js +2 -2
  161. package/lib/commands/verify-operations-command-action.js +2 -2
  162. package/lib/commands/verify-operations-step-plan.js +2 -2
  163. package/lib/commands/verify-operations-steps.js +2 -2
  164. package/lib/commands/verify-trust-command-action.js +1 -1
  165. package/lib/commands/wizard-core.js +1 -1
  166. package/lib/commands/wizard-headless.js +2 -1
  167. package/lib/core/admin-secrets.js +2 -6
  168. package/lib/core/secrets-env-content.js +10 -4
  169. package/lib/core/secrets-env-write.js +2 -13
  170. package/lib/datasource/agent-trust-run.js +3 -3
  171. package/lib/datasource/deploy.js +3 -1
  172. package/lib/datasource/test-e2e.js +6 -1
  173. package/lib/datasource/unified-validation-run-body.js +4 -1
  174. package/lib/datasource/unified-validation-run.js +1 -1
  175. package/lib/deployment/deploy-poll-ui.js +73 -12
  176. package/lib/deployment/deployer-poll-run.js +113 -0
  177. package/lib/deployment/deployer.js +17 -87
  178. package/lib/evidence/dataplane-context.js +21 -0
  179. package/lib/evidence/evidence-display.js +78 -0
  180. package/lib/evidence/evidence-service.js +392 -0
  181. package/lib/external-system/deploy.js +290 -112
  182. package/lib/external-system/download.js +7 -3
  183. package/lib/external-system/test-execution.js +1 -1
  184. package/lib/external-system/test-system-level.js +8 -10
  185. package/lib/external-system/test.js +12 -6
  186. package/lib/generator/deploy-script.js +73 -0
  187. package/lib/generator/external.js +2 -1
  188. package/lib/generator/index.js +17 -2
  189. package/lib/generator/wizard.js +3 -36
  190. package/lib/internal/fs-real-sync.js +22 -1
  191. package/lib/internal/node-fs.js +2 -0
  192. package/lib/lifecycle/lifecycle-governance-options.js +1 -1
  193. package/lib/lifecycle/verify-step-progress.js +1 -1
  194. package/lib/programmatic/access-log.js +26 -0
  195. package/lib/programmatic/auth-config.js +44 -0
  196. package/lib/programmatic/bearer-auth.js +176 -0
  197. package/lib/programmatic/builder-api-request.js +175 -0
  198. package/lib/programmatic/builder-api-route-dispatch.js +82 -0
  199. package/lib/programmatic/builder-api-runtime-config.js +42 -0
  200. package/lib/programmatic/builder-api-server.js +230 -0
  201. package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
  202. package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
  203. package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
  204. package/lib/programmatic/builder-help-envelope.js +36 -0
  205. package/lib/programmatic/builder-help-fixtures.js +200 -0
  206. package/lib/programmatic/builder-help-governance.js +172 -0
  207. package/lib/programmatic/builder-help-schema-catalog.js +92 -0
  208. package/lib/programmatic/builder-help.js +361 -0
  209. package/lib/programmatic/capability-registry.js +77 -0
  210. package/lib/programmatic/command-options.js +32 -0
  211. package/lib/programmatic/enterprise-mcp-client.js +98 -0
  212. package/lib/programmatic/http-problem-details.js +99 -0
  213. package/lib/programmatic/http-route-match.js +40 -0
  214. package/lib/programmatic/idempotency-cache.js +69 -0
  215. package/lib/programmatic/index.js +53 -0
  216. package/lib/programmatic/integration-path-scope.js +39 -0
  217. package/lib/programmatic/log-redaction.js +66 -0
  218. package/lib/programmatic/manifest-get-section.js +146 -0
  219. package/lib/programmatic/manifest-patch-section.js +252 -0
  220. package/lib/programmatic/manifest-repair.js +122 -0
  221. package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
  222. package/lib/programmatic/manifest-section-io.js +225 -0
  223. package/lib/programmatic/manifest-section-quality.js +171 -0
  224. package/lib/programmatic/manifest-section-registry-data.js +269 -0
  225. package/lib/programmatic/manifest-section-registry.js +205 -0
  226. package/lib/programmatic/nest-http-bridge.js +34 -0
  227. package/lib/programmatic/openapi-component-schemas.js +68 -0
  228. package/lib/programmatic/openapi-description-enricher.js +117 -0
  229. package/lib/programmatic/openapi-descriptions.js +190 -0
  230. package/lib/programmatic/openapi-docs-serving.js +123 -0
  231. package/lib/programmatic/openapi-help-schemas.js +63 -0
  232. package/lib/programmatic/openapi-manifest-schemas.js +141 -0
  233. package/lib/programmatic/openapi-operation-bindings.js +274 -0
  234. package/lib/programmatic/openapi-request-schemas.js +155 -0
  235. package/lib/programmatic/openapi-result-schemas.js +476 -0
  236. package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
  237. package/lib/programmatic/openapi-schema-descriptions-core.js +159 -0
  238. package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
  239. package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
  240. package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
  241. package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
  242. package/lib/programmatic/openapi-schema-helpers.js +93 -0
  243. package/lib/programmatic/openapi-spec.js +203 -0
  244. package/lib/programmatic/orchestration-openapi-meta.js +159 -0
  245. package/lib/programmatic/platform-rbac-catalog.js +90 -0
  246. package/lib/programmatic/request-timeout.js +53 -0
  247. package/lib/programmatic/route-handler-map.js +143 -0
  248. package/lib/programmatic/route-handlers-context.js +29 -0
  249. package/lib/programmatic/route-handlers.js +33 -0
  250. package/lib/programmatic/run-certify.js +57 -0
  251. package/lib/programmatic/run-enterprise-mcp.js +32 -0
  252. package/lib/programmatic/run-lifecycle.js +29 -0
  253. package/lib/programmatic/run-repair.js +41 -0
  254. package/lib/programmatic/run-repository-emcp.js +54 -0
  255. package/lib/programmatic/run-template-workspace.js +61 -0
  256. package/lib/programmatic/run-test.js +49 -0
  257. package/lib/programmatic/run-upload.js +63 -0
  258. package/lib/programmatic/run-validate.js +53 -0
  259. package/lib/programmatic/run-wizard.js +40 -0
  260. package/lib/programmatic/system-key.js +48 -0
  261. package/lib/programmatic/wizard-config-normalize.js +118 -0
  262. package/lib/programmatic/workspace-cleanup.js +128 -0
  263. package/lib/programmatic/workspace-context.js +145 -0
  264. package/lib/programmatic/workspace-lock.js +75 -0
  265. package/lib/programmatic/workspace-meta.js +64 -0
  266. package/lib/programmatic/workspace-ops.js +149 -0
  267. package/lib/protection/run-commands-upload-sync.js +35 -0
  268. package/lib/protection/run-commands.js +2 -20
  269. package/lib/protection/upload-batch.js +11 -7
  270. package/lib/resolvers/resource-type-file.js +22 -0
  271. package/lib/schema/external-datasource.schema.json +161 -1
  272. package/lib/schema/external-system.schema.json +244 -118
  273. package/lib/schema/flag-map-validation-run.json +3 -0
  274. package/lib/schema/type/credential-field-registry.json +2 -2
  275. package/lib/schema/type/document-storage.json +9 -0
  276. package/lib/utils/agent-trust-run-display.js +1 -1
  277. package/lib/utils/app-path-resolve.js +168 -0
  278. package/lib/utils/authentication-env-template.js +222 -0
  279. package/lib/utils/cli-sync-options.js +7 -11
  280. package/lib/utils/cli-utils.js +4 -0
  281. package/lib/utils/cli-workspace-options.js +29 -0
  282. package/lib/utils/compose-generate-docker-compose.js +102 -0
  283. package/lib/utils/configuration-env-resolver.js +203 -27
  284. package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
  285. package/lib/utils/datasource-test-run-certification-debug.js +130 -0
  286. package/lib/utils/datasource-test-run-debug-display.js +2 -0
  287. package/lib/utils/datasource-test-run-debug-slice.js +7 -0
  288. package/lib/utils/datasource-test-run-display.js +2 -1
  289. package/lib/utils/dev-init-ssh-merge.js +165 -23
  290. package/lib/utils/dev-pin-share-instructions.js +110 -0
  291. package/lib/utils/dev-ssh-config-helper.js +177 -33
  292. package/lib/utils/enterprise-knowledge-paths.js +142 -0
  293. package/lib/utils/env-copy.js +2 -1
  294. package/lib/utils/env-dotenv-format.js +103 -0
  295. package/lib/utils/external-env-template.js +4 -1
  296. package/lib/utils/external-system-display.js +5 -1
  297. package/lib/utils/external-system-readiness-compact-blocks.js +221 -0
  298. package/lib/utils/external-system-readiness-compact-display.js +324 -0
  299. package/lib/utils/external-system-readiness-core.js +16 -0
  300. package/lib/utils/external-system-readiness-deploy-display.js +29 -11
  301. package/lib/utils/external-system-readiness-display-internals.js +3 -1
  302. package/lib/utils/external-system-readiness-display.js +20 -30
  303. package/lib/utils/external-system-system-test-tty-certification.js +135 -0
  304. package/lib/utils/external-system-system-test-tty.js +5 -41
  305. package/lib/utils/help-builder.js +6 -1
  306. package/lib/utils/host-ops-job-labels.js +236 -0
  307. package/lib/utils/host-ops-job-result.js +61 -0
  308. package/lib/utils/host-ops-poll-ui.js +163 -0
  309. package/lib/utils/integration-path-resolve.js +112 -0
  310. package/lib/utils/paths-reload-source.js +148 -0
  311. package/lib/utils/paths-system-builder-keys.js +25 -0
  312. package/lib/utils/paths.js +151 -26
  313. package/lib/utils/runtime-configuration-values.js +64 -2
  314. package/lib/utils/secrets-helpers.js +5 -1
  315. package/lib/utils/ssh-known-hosts.js +130 -0
  316. package/lib/utils/test-target-cli-options.js +75 -0
  317. package/lib/utils/upload-sync-options.js +4 -0
  318. package/lib/utils/validation-run-request.js +11 -2
  319. package/lib/validation/external-manifest-validator.js +11 -1
  320. package/lib/validation/openapi-contract-surface-validator.js +426 -0
  321. package/lib/validation/openapi-contract-vendor-validation.js +238 -0
  322. package/lib/validation/validate-external-file.js +160 -0
  323. package/lib/validation/validate.js +6 -117
  324. package/package.json +46 -29
  325. package/packages/builder-api/README.md +120 -0
  326. package/packages/builder-api/package.json +30 -0
  327. package/packages/builder-api/src/app.module.ts +7 -0
  328. package/packages/builder-api/src/auth/auth.module.ts +5 -0
  329. package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
  330. package/packages/builder-api/src/main.ts +16 -0
  331. package/packages/builder-api/tsconfig.json +15 -0
  332. package/scripts/check-builder-api-architecture-grep.js +79 -0
  333. package/scripts/docker_image_content_gate.js +47 -0
  334. package/scripts/docker_image_content_gate.sh +5 -0
  335. package/scripts/export-builder-api-evidence.js +262 -0
  336. package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
  337. package/scripts/lib/builder-api-docker-staging-core.js +183 -0
  338. package/scripts/lib/docker-image-content-gate-core.js +166 -0
  339. package/scripts/lib/plan-actor.js +109 -0
  340. package/scripts/lib/plan-config.js +20 -0
  341. package/scripts/lib/plan-gates.js +154 -0
  342. package/scripts/lib/plan-meta.js +104 -0
  343. package/scripts/lib/plan-parse.js +162 -0
  344. package/scripts/lib/plan-prevalidate-gates.js +326 -0
  345. package/scripts/lib/plan-run-core.js +125 -0
  346. package/scripts/lib/plan-run-report.js +108 -0
  347. package/scripts/plan-approve.js +24 -0
  348. package/scripts/plan-archive.js +49 -0
  349. package/scripts/plan-run.js +13 -0
  350. package/scripts/plan-set-actor.js +21 -0
  351. package/scripts/plan-validate.js +80 -0
  352. package/scripts/pnpm/af.mjs +110 -0
  353. package/scripts/pnpm/check-quiet.mjs +32 -0
  354. package/scripts/pnpm/dev-install.mjs +29 -0
  355. package/scripts/pnpm/dev-reload.mjs +18 -0
  356. package/scripts/pnpm/help.mjs +55 -0
  357. package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
  358. package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
  359. package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
  360. package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
  361. package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
  362. package/scripts/pnpm/lib/spinner.mjs +42 -0
  363. package/scripts/stage_builder_api_for_docker.js +65 -0
  364. package/scripts/sync-builder-api-template.js +44 -0
  365. package/templates/README.md +3 -0
  366. package/templates/applications/builder-api/Dockerfile +38 -0
  367. package/templates/applications/builder-api/application.yaml +75 -0
  368. package/templates/applications/builder-api/env.template +48 -0
  369. package/templates/applications/dataplane/application.yaml +1 -1
  370. package/templates/applications/dataplane/env.template +10 -6
  371. package/templates/applications/dataplane/rbac.yaml +21 -1
  372. package/templates/applications/miso-controller/application.yaml +1 -1
  373. package/templates/applications/miso-controller/env.template +1 -3
  374. package/templates/channels/README.md +18 -0
  375. package/templates/channels/ai-fabrix-icon.jpg +0 -0
  376. package/templates/channels/chatgpt/install.template.md.hbs +21 -24
  377. package/templates/channels/chatgpt/integration/README.md +11 -0
  378. package/templates/channels/chatgpt/integration/application.json +15 -0
  379. package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
  380. package/templates/channels/chatgpt/integration/env.template +4 -0
  381. package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
  382. package/templates/channels/microsoft-copilot/integration/README.md +11 -0
  383. package/templates/channels/microsoft-copilot/integration/application.json +15 -0
  384. package/templates/channels/microsoft-copilot/integration/env.template +6 -0
  385. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
  386. package/templates/channels/slack/install.template.md.hbs +48 -18
  387. package/templates/channels/slack/integration/README.md +38 -0
  388. package/templates/channels/slack/integration/application.json +18 -0
  389. package/templates/channels/slack/integration/env.template +29 -0
  390. package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
  391. package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
  392. package/templates/channels/slack/integration/slack-system.json +86 -0
  393. package/templates/channels/slack/manifest.template.json.hbs +20 -10
  394. package/templates/channels/teams-bot/install.template.md.hbs +31 -17
  395. package/templates/channels/teams-bot/integration/README.md +18 -0
  396. package/templates/channels/teams-bot/integration/application.json +17 -0
  397. package/templates/channels/teams-bot/integration/env.template +5 -0
  398. package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
  399. package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
  400. package/templates/channels/web-embed/install.template.md.hbs +16 -26
  401. package/templates/channels/web-embed/integration/README.md +11 -0
  402. package/templates/channels/web-embed/integration/application.json +15 -0
  403. package/templates/channels/web-embed/integration/env.template +4 -0
  404. package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
  405. package/templates/openapi/redoc_page.html +86 -0
  406. package/templates/python/docker-compose.hbs +11 -0
  407. package/templates/python/requirements.txt +1 -1
  408. package/templates/typescript/docker-compose.hbs +11 -0
  409. package/lib/certification/cli-cert-sync-skip.js +0 -21
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Section registry extract/inject for governed manifest editing (plan 154.4).
3
+ *
4
+ * @fileoverview sectionKey enum, subtree IO, schema fragments
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const fs = require('fs');
12
+ const path = require('path');
13
+ const {
14
+ loadExternalSystemSchema,
15
+ loadExternalDataSourceSchema
16
+ } = require('../utils/schema-loader');
17
+ const { SECTION_DEFINITIONS } = require('./manifest-section-registry-data');
18
+
19
+ const SCHEMA_DIR = path.join(__dirname, '..', 'schema');
20
+
21
+ /** @type {Object|null} */
22
+ let systemSchemaDoc = null;
23
+ /** @type {Object|null} */
24
+ let datasourceSchemaDoc = null;
25
+
26
+ function getSystemSchemaDoc() {
27
+ if (!systemSchemaDoc) {
28
+ systemSchemaDoc = JSON.parse(fs.readFileSync(path.join(SCHEMA_DIR, 'external-system.schema.json'), 'utf8'));
29
+ }
30
+ return systemSchemaDoc;
31
+ }
32
+
33
+ function getDatasourceSchemaDoc() {
34
+ if (!datasourceSchemaDoc) {
35
+ datasourceSchemaDoc = JSON.parse(
36
+ fs.readFileSync(path.join(SCHEMA_DIR, 'external-datasource.schema.json'), 'utf8')
37
+ );
38
+ }
39
+ return datasourceSchemaDoc;
40
+ }
41
+
42
+ /**
43
+ * @param {string} sectionKey
44
+ * @returns {import('./manifest-section-registry-data').SectionDefinition}
45
+ */
46
+ function getSectionDefinition(sectionKey) {
47
+ const def = SECTION_DEFINITIONS[sectionKey];
48
+ if (!def) {
49
+ const err = new Error(`Unknown sectionKey: ${sectionKey}`);
50
+ err.statusCode = 404;
51
+ throw err;
52
+ }
53
+ return def;
54
+ }
55
+
56
+ /**
57
+ * @param {string} [targetFilter]
58
+ * @returns {string[]}
59
+ */
60
+ function listSectionKeys(targetFilter) {
61
+ return Object.keys(SECTION_DEFINITIONS).filter((key) => {
62
+ if (!targetFilter) {
63
+ return true;
64
+ }
65
+ return SECTION_DEFINITIONS[key].target === targetFilter;
66
+ });
67
+ }
68
+
69
+ /**
70
+ * @param {Object} doc
71
+ * @param {string} dottedPath
72
+ * @returns {*}
73
+ */
74
+ function getPathValue(doc, dottedPath) {
75
+ const parts = dottedPath.split('.');
76
+ let current = doc;
77
+ for (const part of parts) {
78
+ if (current === null || current === undefined || typeof current !== 'object') {
79
+ return undefined;
80
+ }
81
+ current = current[part];
82
+ }
83
+ return current;
84
+ }
85
+
86
+ /**
87
+ * @param {Object} doc
88
+ * @param {string} dottedPath
89
+ * @param {*} value
90
+ */
91
+ function setPathValue(doc, dottedPath, value) {
92
+ const parts = dottedPath.split('.');
93
+ let current = doc;
94
+ for (let i = 0; i < parts.length - 1; i += 1) {
95
+ const part = parts[i];
96
+ if (current[part] === null || current[part] === undefined || typeof current[part] !== 'object') {
97
+ current[part] = {};
98
+ }
99
+ current = current[part];
100
+ }
101
+ current[parts[parts.length - 1]] = value;
102
+ }
103
+
104
+ /**
105
+ * @param {Object} doc
106
+ * @param {import('./manifest-section-registry-data').SectionDefinition} def
107
+ * @returns {Object}
108
+ */
109
+ function extractSectionValue(doc, def) {
110
+ if (def.paths.length === 1) {
111
+ const value = getPathValue(doc, def.paths[0]);
112
+ return value === undefined ? {} : value;
113
+ }
114
+ /** @type {Record<string, *>} */
115
+ const result = {};
116
+ for (const pathKey of def.paths) {
117
+ const leaf = pathKey.includes('.') ? pathKey.split('.').pop() : pathKey;
118
+ const value = getPathValue(doc, pathKey);
119
+ if (value !== undefined) {
120
+ result[leaf] = value;
121
+ }
122
+ }
123
+ return result;
124
+ }
125
+
126
+ /**
127
+ * @param {Object} doc
128
+ * @param {import('./manifest-section-registry-data').SectionDefinition} def
129
+ * @param {Object} sectionValue
130
+ * @param {'merge' | 'replace'} mode
131
+ */
132
+ function injectSectionValue(doc, def, sectionValue, mode) {
133
+ if (def.paths.length === 1) {
134
+ const pathKey = def.paths[0];
135
+ if (mode === 'replace') {
136
+ setPathValue(doc, pathKey, sectionValue);
137
+ return;
138
+ }
139
+ const existing = getPathValue(doc, pathKey);
140
+ const merged =
141
+ existing && typeof existing === 'object' && !Array.isArray(existing)
142
+ ? { ...existing, ...sectionValue }
143
+ : sectionValue;
144
+ setPathValue(doc, pathKey, merged);
145
+ return;
146
+ }
147
+ for (const pathKey of def.paths) {
148
+ const leaf = pathKey.includes('.') ? pathKey.split('.').pop() : pathKey;
149
+ if (!(leaf in sectionValue)) {
150
+ continue;
151
+ }
152
+ if (mode === 'replace') {
153
+ setPathValue(doc, pathKey, sectionValue[leaf]);
154
+ } else {
155
+ const existing = getPathValue(doc, pathKey);
156
+ const incoming = sectionValue[leaf];
157
+ const merged =
158
+ existing && typeof existing === 'object' && !Array.isArray(existing) && typeof incoming === 'object'
159
+ ? { ...existing, ...incoming }
160
+ : incoming;
161
+ setPathValue(doc, pathKey, merged);
162
+ }
163
+ }
164
+ }
165
+
166
+ /**
167
+ * @param {import('./manifest-section-registry-data').ManifestTarget} target
168
+ * @param {string} pathKey
169
+ * @returns {Object}
170
+ */
171
+ function buildSchemaFragment(target, pathKey) {
172
+ const root = target === 'system' ? getSystemSchemaDoc() : getDatasourceSchemaDoc();
173
+ const topKey = pathKey.split('.')[0];
174
+ const prop = root.properties && root.properties[topKey];
175
+ if (!prop) {
176
+ return { type: 'object' };
177
+ }
178
+ if (pathKey.includes('.')) {
179
+ return { type: 'object' };
180
+ }
181
+ return JSON.parse(JSON.stringify(prop));
182
+ }
183
+
184
+ /**
185
+ * @param {import('./manifest-section-registry-data').ManifestTarget} target
186
+ * @param {Object} doc
187
+ * @returns {{ valid: boolean, errors: Object[] }}
188
+ */
189
+ function validateManifestDocument(target, doc) {
190
+ const validate = target === 'system' ? loadExternalSystemSchema() : loadExternalDataSourceSchema();
191
+ const valid = validate(doc);
192
+ return { valid: !!valid, errors: validate.errors || [] };
193
+ }
194
+
195
+ module.exports = {
196
+ SECTION_DEFINITIONS,
197
+ getSectionDefinition,
198
+ listSectionKeys,
199
+ extractSectionValue,
200
+ injectSectionValue,
201
+ buildSchemaFragment,
202
+ validateManifestDocument,
203
+ getPathValue,
204
+ setPathValue
205
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Mount builder-api Node router on an Express instance (Nest adapter).
3
+ *
4
+ * @fileoverview Shared HTTP bridge for spike server and Nest bootstrap
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const { handleRequest, BASE } = require('./builder-api-server');
12
+
13
+ /**
14
+ * @param {import('express').Express} expressApp
15
+ */
16
+ function wireBuilderApiHttpBridge(expressApp) {
17
+ expressApp.use((req, res, next) => {
18
+ const pathname = (req.url || '/').split('?')[0];
19
+ if (pathname !== BASE && !pathname.startsWith(`${BASE}/`)) {
20
+ next();
21
+ return;
22
+ }
23
+ handleRequest(req, res).catch((err) => {
24
+ res.statusCode = 500;
25
+ res.setHeader('Content-Type', 'application/json');
26
+ res.end(JSON.stringify({ error: err.message || 'Internal error' }));
27
+ });
28
+ });
29
+ }
30
+
31
+ module.exports = {
32
+ wireBuilderApiHttpBridge,
33
+ BASE
34
+ };
@@ -0,0 +1,68 @@
1
+ /**
2
+ * OpenAPI component schemas for builder-api (frozen models + response envelopes).
3
+ *
4
+ * @fileoverview Merges request/result schemas; no additionalProperties: true
5
+ * @author AI Fabrix Team
6
+ * @version 1.1.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const { enrichOpenApiComponentSchemas } = require('./openapi-description-enricher');
12
+ const { buildSuccessEnvelopeSchema } = require('./openapi-schema-helpers');
13
+ const { OPENAPI_REQUEST_SCHEMAS } = require('./openapi-request-schemas');
14
+ const { OPENAPI_RESULT_SCHEMAS } = require('./openapi-result-schemas');
15
+ const {
16
+ OPENAPI_MANIFEST_REQUEST_SCHEMAS,
17
+ OPENAPI_MANIFEST_RESULT_SCHEMAS
18
+ } = require('./openapi-manifest-schemas');
19
+
20
+ const RESPONSE_ENVELOPES = [
21
+ ['ListSystemsResponse', 'ListSystemsData'],
22
+ ['CreateSystemResponse', 'CreateSystemData'],
23
+ ['SystemManifestResponse', 'SystemManifestData'],
24
+ ['DeleteSystemResponse', 'DeleteSystemData'],
25
+ ['WizardRunResponse', 'WizardRunData'],
26
+ ['RepairResultResponse', 'RepairResultData'],
27
+ ['ValidateResultResponse', 'ValidateResultData'],
28
+ ['PreviewUploadResponse', 'PreviewUploadData'],
29
+ ['UploadResultResponse', 'UploadResultData'],
30
+ ['TestResultResponse', 'TestResultData'],
31
+ ['CertifyResultResponse', 'CertifyResultData'],
32
+ ['LifecycleReportResponse', 'LifecycleReportData'],
33
+ ['EnterpriseMcpInvocationResponse', 'EnterpriseMcpInvocationData'],
34
+ ['WorkspaceStatusResponse', 'WorkspaceStatusData'],
35
+ ['RepositoryStatusResponse', 'RepositoryStatusData'],
36
+ ['HealthResponse', 'HealthData'],
37
+ ['ReadyResponse', 'ReadyData'],
38
+ ['EmptyResultResponse', 'EmptyResultData'],
39
+ ['ManifestSectionViewResponse', 'ManifestSectionViewData'],
40
+ ['ManifestPatchResultResponse', 'ManifestPatchResultData'],
41
+ ['ManifestSectionsListResponse', 'ManifestSectionsListData'],
42
+ ['ManifestRepairResultResponse', 'ManifestRepairResultData']
43
+ ];
44
+
45
+ /**
46
+ * @returns {Record<string, Object>}
47
+ */
48
+ function buildOpenApiComponentSchemas() {
49
+ const envelopes = {};
50
+ for (const [responseName, dataName] of RESPONSE_ENVELOPES) {
51
+ envelopes[responseName] = buildSuccessEnvelopeSchema(dataName);
52
+ }
53
+ return enrichOpenApiComponentSchemas({
54
+ ...OPENAPI_REQUEST_SCHEMAS,
55
+ ...OPENAPI_MANIFEST_REQUEST_SCHEMAS,
56
+ ...OPENAPI_RESULT_SCHEMAS,
57
+ ...OPENAPI_MANIFEST_RESULT_SCHEMAS,
58
+ EmptyResultData: { type: 'object', properties: {}, additionalProperties: false },
59
+ ...envelopes
60
+ });
61
+ }
62
+
63
+ module.exports = {
64
+ buildOpenApiComponentSchemas,
65
+ buildSuccessEnvelopeSchema,
66
+ OPENAPI_REQUEST_SCHEMAS,
67
+ OPENAPI_RESULT_SCHEMAS
68
+ };
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Apply MCP-friendly descriptions to frozen OpenAPI component schemas.
3
+ *
4
+ * @fileoverview Merges description catalogs and wraps $ref props for OAS 3.0
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const { CORE_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-core');
12
+ const { OPERATIONS_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-operations');
13
+ const { CERTIFY_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-certify');
14
+ const { MANIFEST_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-manifest');
15
+ const { MCP_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-mcp');
16
+ const { HELP_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-help');
17
+
18
+ /** @type {Record<string, Object>} */
19
+ const MERGED_SCHEMA_DESCRIPTIONS = {
20
+ ...CORE_SCHEMA_DESCRIPTIONS,
21
+ ...OPERATIONS_SCHEMA_DESCRIPTIONS,
22
+ ...CERTIFY_SCHEMA_DESCRIPTIONS,
23
+ ...MANIFEST_SCHEMA_DESCRIPTIONS,
24
+ ...MCP_SCHEMA_DESCRIPTIONS,
25
+ ...HELP_SCHEMA_DESCRIPTIONS
26
+ };
27
+
28
+ /**
29
+ * @param {Object} propSchema
30
+ * @param {string} description
31
+ * @returns {Object}
32
+ */
33
+ function withPropertyDescription(propSchema, description) {
34
+ if (!description) {
35
+ return propSchema;
36
+ }
37
+ if (propSchema.$ref) {
38
+ return { description, allOf: [propSchema] };
39
+ }
40
+ return { ...propSchema, description };
41
+ }
42
+
43
+ /**
44
+ * @param {Object} propSchema
45
+ * @param {Object} propDesc
46
+ */
47
+ function enrichArrayProperty(propSchema, propDesc) {
48
+ if (typeof propDesc._schema === 'string') {
49
+ propSchema.description = propDesc._schema;
50
+ }
51
+ enrichSchemaNode(propSchema.items, propDesc._arrayItems);
52
+ }
53
+
54
+ /**
55
+ * @param {Object} schema
56
+ * @param {string} prop
57
+ * @param {string|Object} propDesc
58
+ */
59
+ function enrichSchemaProperty(schema, prop, propDesc) {
60
+ const propSchema = schema.properties[prop];
61
+ if (!propSchema) {
62
+ return;
63
+ }
64
+ if (typeof propDesc === 'string') {
65
+ schema.properties[prop] = withPropertyDescription(propSchema, propDesc);
66
+ return;
67
+ }
68
+ if (typeof propDesc !== 'object') {
69
+ return;
70
+ }
71
+ if (propDesc._arrayItems && propSchema.type === 'array' && propSchema.items) {
72
+ enrichArrayProperty(propSchema, propDesc);
73
+ return;
74
+ }
75
+ enrichSchemaNode(propSchema, propDesc);
76
+ }
77
+
78
+ /**
79
+ * @param {Object} schema
80
+ * @param {Object} descNode
81
+ */
82
+ function enrichSchemaNode(schema, descNode) {
83
+ if (!schema || !descNode || typeof descNode !== 'object') {
84
+ return;
85
+ }
86
+ if (typeof descNode._schema === 'string') {
87
+ schema.description = descNode._schema;
88
+ }
89
+ if (!schema.properties) {
90
+ return;
91
+ }
92
+ for (const [prop, propDesc] of Object.entries(descNode)) {
93
+ if (prop === '_schema') {
94
+ continue;
95
+ }
96
+ enrichSchemaProperty(schema, prop, propDesc);
97
+ }
98
+ }
99
+
100
+ /**
101
+ * @param {Record<string, Object>} schemas
102
+ * @returns {Record<string, Object>}
103
+ */
104
+ function enrichOpenApiComponentSchemas(schemas) {
105
+ for (const [name, descNode] of Object.entries(MERGED_SCHEMA_DESCRIPTIONS)) {
106
+ if (schemas[name]) {
107
+ enrichSchemaNode(schemas[name], descNode);
108
+ }
109
+ }
110
+ return schemas;
111
+ }
112
+
113
+ module.exports = {
114
+ enrichOpenApiComponentSchemas,
115
+ MERGED_SCHEMA_DESCRIPTIONS,
116
+ withPropertyDescription
117
+ };
@@ -0,0 +1,190 @@
1
+ /**
2
+ * MCP-friendly OpenAPI operation text for builder-api routes (plan 154.0 §6).
3
+ *
4
+ * @fileoverview One capability per route; imperative descriptions
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ /** @type {Record<string, { summary: string, description: string, tags: string[] }>} */
12
+ const OPERATION_DESCRIPTIONS = Object.freeze({
13
+ listSystems: {
14
+ summary: 'List workspace external systems',
15
+ description:
16
+ 'List integration system keys under the authenticated user workspace. Read-only; does not call Dataplane.',
17
+ tags: ['workspace']
18
+ },
19
+ createSystem: {
20
+ summary: 'Create workspace system folder',
21
+ description:
22
+ 'Create an empty integration workspace for a systemKey. Mutating; requires Idempotency-Key on retries.',
23
+ tags: ['workspace']
24
+ },
25
+ getSystemManifest: {
26
+ summary: 'Read workspace manifest summary',
27
+ description: 'Return local workspace metadata and file manifest for one systemKey. Read-only.',
28
+ tags: ['workspace']
29
+ },
30
+ deleteSystem: {
31
+ summary: 'Delete workspace system folder',
32
+ description:
33
+ 'Remove the local integration workspace for a systemKey. Mutating; does not delete Dataplane config.',
34
+ tags: ['workspace']
35
+ },
36
+ runWizard: {
37
+ summary: 'Generate integration files from OpenAPI or wizard config',
38
+ description:
39
+ '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
+ tags: ['build']
41
+ },
42
+ runRepair: {
43
+ summary: 'Repair workspace manifest drift',
44
+ description:
45
+ 'Align application manifest, env.template, and datasource metadata with on-disk JSON. Mutating.',
46
+ tags: ['build']
47
+ },
48
+ listManifestSections: {
49
+ summary: 'List governed manifest sections',
50
+ description: 'Return sectionKey catalog and datasource keys for MCP section editing. Read-only.',
51
+ tags: ['manifest']
52
+ },
53
+ getManifestSection: {
54
+ summary: 'Read one system manifest section',
55
+ description:
56
+ 'Return section value, schema fragment, quality, dependency graph, and sectionReadToken. MUST call before patchSection.',
57
+ tags: ['manifest']
58
+ },
59
+ patchManifestSection: {
60
+ summary: 'Patch one system manifest section',
61
+ description:
62
+ 'Apply governed merge/replace to a system section. Requires intent and sectionReadToken from GET. Mutating.',
63
+ tags: ['manifest']
64
+ },
65
+ getDatasourceManifestSection: {
66
+ summary: 'Read one datasource manifest section',
67
+ description:
68
+ 'Return datasource section value, quality, missingInputs, and sectionReadToken. MUST call before patchSection.',
69
+ tags: ['manifest']
70
+ },
71
+ patchDatasourceManifestSection: {
72
+ summary: 'Patch one datasource manifest section',
73
+ description:
74
+ 'Apply governed merge/replace to a datasource section. Requires intent and sectionReadToken. Mutating.',
75
+ tags: ['manifest']
76
+ },
77
+ runManifestRepair: {
78
+ summary: 'Repair manifest sections with explicit hooks',
79
+ description:
80
+ 'Run named repair hooks in dependency-graph order after section patches. Mutating; does not auto-upload.',
81
+ tags: ['manifest']
82
+ },
83
+ runValidate: {
84
+ summary: 'Validate local integration manifests',
85
+ description:
86
+ 'Run AJV validation on workspace files. Optionally include pipeline validate-only against Dataplane (read-only).',
87
+ tags: ['validate']
88
+ },
89
+ runPreviewUpload: {
90
+ summary: 'Preview dev upload payload without publishing',
91
+ description:
92
+ 'Build and validate the deploy payload locally. MUST NOT push credentials or mutate Dataplane. Use before POST /upload.',
93
+ tags: ['validate']
94
+ },
95
+ runTest: {
96
+ summary: 'Run unit, integration, or e2e tests',
97
+ description:
98
+ 'Execute test ladder for the workspace. Mutating when syncing to Dataplane. e2e may take up to MAX_TEST_E2E_TIMEOUT_MS.',
99
+ tags: ['test']
100
+ },
101
+ runCertifyPillar: {
102
+ summary: 'Run certification pillar checks',
103
+ description:
104
+ 'Run verify-operations, verify-trust, verify-governance, or lifecycle-run against Dataplane. Mutating when sync is enabled.',
105
+ tags: ['certify']
106
+ },
107
+ getLifecycleReport: {
108
+ summary: 'Read lifecycle certification report',
109
+ description: 'Fetch lifecycle report from Dataplane for the workspace system. Read-only proxy.',
110
+ tags: ['certify']
111
+ },
112
+ runUpload: {
113
+ summary: 'Upload integration to dev Dataplane',
114
+ description:
115
+ 'Full dev publish: validate, sync deploy JSON, push credentials, pipeline upload. Requires external-system:publish in dev. Mutating; use Idempotency-Key; may take up to MAX_UPLOAD_TIMEOUT_MS.',
116
+ tags: ['apply']
117
+ },
118
+ materializeTemplate: {
119
+ summary: 'Materialize workspace from template',
120
+ description:
121
+ 'Invoke Enterprise MCP template.materializeWorkspace for the integration systemKey. Provider-neutral; mutating.',
122
+ tags: ['template']
123
+ },
124
+ getWorkspaceStatus: {
125
+ summary: 'Read workspace status',
126
+ description: 'Combine local workspace manifest with Enterprise MCP workspace.status when available.',
127
+ tags: ['workspace']
128
+ },
129
+ runWorkspaceDiff: {
130
+ summary: 'Diff workspace draft',
131
+ description: 'Invoke Enterprise MCP workspace.diff for local draft vs remote/template baseline.',
132
+ tags: ['workspace']
133
+ },
134
+ resetWorkspaceFromTemplate: {
135
+ summary: 'Reset workspace from template',
136
+ description:
137
+ 'Invoke Enterprise MCP workspace.resetFromTemplate. Use Dataplane lifecycle / verify-trust before mutating when required.',
138
+ tags: ['template']
139
+ },
140
+ runRepositorySync: {
141
+ summary: 'Sync workspace with remote repository',
142
+ description:
143
+ 'Invoke Enterprise MCP repository.sync (pull or push via body params). Provider-neutral; mutating.',
144
+ tags: ['repository']
145
+ },
146
+ runRepositoryCreateReview: {
147
+ summary: 'Create or update repository review',
148
+ description: 'Invoke Enterprise MCP repository.createReview (PR or provider-equivalent). Mutating.',
149
+ tags: ['repository']
150
+ },
151
+ getRepositoryStatus: {
152
+ summary: 'Read repository sync status',
153
+ description: 'Invoke Enterprise MCP repository.status. Read-only proxy.',
154
+ tags: ['repository']
155
+ },
156
+ runRepositoryDispatchPipeline: {
157
+ summary: 'Dispatch repository pipeline',
158
+ description: 'Invoke Enterprise MCP repository.dispatchPipeline for CI/CD dispatch. Mutating.',
159
+ tags: ['repository']
160
+ },
161
+ health: {
162
+ summary: 'Liveness probe',
163
+ description: 'Returns ok when the builder-api process is running. No authentication.',
164
+ tags: ['infra']
165
+ },
166
+ ready: {
167
+ summary: 'Readiness probe',
168
+ description: 'Returns ready with configured dataplaneUrl. Does not verify Dataplane connectivity in V1.',
169
+ tags: ['infra']
170
+ }
171
+ });
172
+
173
+ /**
174
+ * @param {string} handlerId
175
+ * @returns {{ summary: string, description: string, tags: string[] }}
176
+ */
177
+ function getOperationDescription(handlerId) {
178
+ return (
179
+ OPERATION_DESCRIPTIONS[handlerId] || {
180
+ summary: handlerId,
181
+ description: handlerId,
182
+ tags: ['builder']
183
+ }
184
+ );
185
+ }
186
+
187
+ module.exports = {
188
+ OPERATION_DESCRIPTIONS,
189
+ getOperationDescription
190
+ };