@aifabrix/builder 2.52.1 → 2.53.1

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 (225) hide show
  1. package/lib/app/deploy-config.js +3 -2
  2. package/lib/channels/add-channel.js +11 -41
  3. package/lib/channels/approval-guides/index.js +3 -0
  4. package/lib/channels/approval-guides/microsoft-copilot.js +26 -17
  5. package/lib/channels/channel-add-existing.js +72 -0
  6. package/lib/channels/channel-runtime-resolver.js +5 -1
  7. package/lib/channels/channel-status-display.js +30 -3
  8. package/lib/channels/microsoft-copilot-entra-sso-form.js +73 -2
  9. package/lib/channels/microsoft-copilot-entra-sso.js +26 -5
  10. package/lib/channels/microsoft-copilot-limits.js +22 -3
  11. package/lib/channels/microsoft-copilot-package.js +59 -14
  12. package/lib/channels/microsoft-copilot-validate.js +40 -10
  13. package/lib/cli/attach-default-help-examples.js +102 -0
  14. package/lib/cli/index.js +2 -0
  15. package/lib/cli/setup-credential-deployment.js +7 -5
  16. package/lib/cli/setup-utility-validate.js +1 -0
  17. package/lib/commands/credential-push.js +37 -5
  18. package/lib/commands/package-score.js +72 -0
  19. package/lib/commands/role-assistant.js +46 -8
  20. package/lib/deployment/deployer-poll-run.js +2 -2
  21. package/lib/deployment/deployer.js +1 -1
  22. package/lib/deployment/environment.js +2 -2
  23. package/lib/external-system/deploy.js +11 -21
  24. package/lib/integration-definition/apply.js +12 -14
  25. package/lib/integration-definition/enrich-openapi-operations.js +9 -10
  26. package/lib/lab/package-parity-score.js +417 -0
  27. package/lib/programmatic/capability-registry.js +1 -0
  28. package/lib/programmatic/help-content/channel-onboarding.md +35 -0
  29. package/lib/programmatic/help-content/cip-overview.md +27 -0
  30. package/lib/programmatic/help-content/connected-system-ui.md +70 -0
  31. package/lib/programmatic/help-content/dimensions-guide.md +23 -0
  32. package/lib/programmatic/help-content/enterprise-sync-fabrix.md +123 -0
  33. package/lib/programmatic/help-content/overview.md +25 -0
  34. package/lib/programmatic/help-content/subscription-guide.md +27 -0
  35. package/lib/programmatic/help-content/workflow.md +50 -0
  36. package/lib/programmatic/openapi-component-schemas.js +1 -0
  37. package/lib/programmatic/openapi-descriptions.js +6 -0
  38. package/lib/programmatic/openapi-envelope-examples.js +11 -0
  39. package/lib/programmatic/openapi-operation-bindings.js +5 -0
  40. package/lib/programmatic/openapi-request-schemas.js +39 -13
  41. package/lib/programmatic/openapi-result-schemas.js +30 -0
  42. package/lib/programmatic/openapi-schema-descriptions-core.js +18 -0
  43. package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
  44. package/lib/programmatic/persist-supplied-openapi.js +180 -0
  45. package/lib/programmatic/route-handler-map.js +6 -0
  46. package/lib/programmatic/run-integration-definition.js +13 -5
  47. package/lib/role-assistant/evidence-sync.js +55 -7
  48. package/lib/role-assistant/test-runner-attachments.js +118 -0
  49. package/lib/role-assistant/test-runner-bid-apply.js +100 -21
  50. package/lib/role-assistant/test-runner-bid-document.js +1 -1
  51. package/lib/role-assistant/test-runner-start-payload.js +96 -0
  52. package/lib/role-assistant/test-runner-workhub-answers.js +11 -7
  53. package/lib/role-assistant/test-runner-workhub-helpers.js +100 -0
  54. package/lib/role-assistant/test-runner-workhub-soft.js +86 -0
  55. package/lib/role-assistant/test-runner-workhub.js +68 -105
  56. package/lib/role-assistant/test-runner.js +5 -63
  57. package/lib/role-assistant/test-suite.js +33 -40
  58. package/lib/schema/external-datasource.schema.json +13 -4
  59. package/lib/utils/compose-generator.js +10 -1
  60. package/lib/utils/compose-traefik-extra-routes.js +107 -0
  61. package/lib/utils/docker-build.js +2 -2
  62. package/lib/utils/help-builder.js +2 -1
  63. package/lib/utils/promote-dev-docker-image.js +15 -10
  64. package/package.json +14 -16
  65. package/templates/README.md +12 -1
  66. package/templates/applications/dataplane/application.yaml +8 -1
  67. package/templates/applications/dataplane/env.template +1 -1
  68. package/templates/applications/miso-controller/application.yaml +2 -1
  69. package/templates/applications/miso-controller/rbac.yaml +1 -0
  70. package/templates/channels/microsoft-copilot/ai-plugin.template.json.hbs +6 -2
  71. package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +8 -5
  72. package/templates/channels/microsoft-copilot/fi-fi.template.json.hbs +7 -0
  73. package/templates/channels/microsoft-copilot/install.template.md.hbs +74 -22
  74. package/templates/channels/microsoft-copilot/manifest.template.json.hbs +29 -14
  75. package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +6 -2
  76. package/templates/python/docker-compose.hbs +36 -0
  77. package/templates/typescript/docker-compose.hbs +36 -0
  78. package/.cursor/plans/Archive/157.1-security-quality-violations-by-type.csv +0 -374
  79. package/.cursor/process/README.md +0 -9
  80. package/.cursor/rules/anchor-docs.mdc +0 -15
  81. package/.cursor/rules/assistant-driven-integration-build.mdc +0 -40
  82. package/.cursor/rules/cli-layout.mdc +0 -81
  83. package/.cursor/rules/cli-product-neutral.mdc +0 -43
  84. package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +0 -49
  85. package/.cursor/rules/docs-rules.mdc +0 -32
  86. package/.cursor/rules/plan-rules/application-lifecycle.mdc +0 -30
  87. package/.cursor/rules/plan-rules/plan-frontmatter.mdc +0 -35
  88. package/.cursor/rules/plan-rules/plan-lifecycle.mdc +0 -31
  89. package/.cursor/rules/plan-rules/plan-validation-gate.mdc +0 -34
  90. package/.cursor/rules/project-rules.mdc +0 -913
  91. package/.cursor/skills/README.md +0 -15
  92. package/.dockerignore +0 -52
  93. package/.eslintignore +0 -22
  94. package/.markdownlint.json +0 -14
  95. package/anchor-docs/README.md +0 -10
  96. package/anchor-docs/_TEMPLATE +0 -24
  97. package/babel.config.js +0 -6
  98. package/bin/builder-api-cleanup.js +0 -26
  99. package/bin/builder-api-nest.js +0 -10
  100. package/bin/builder-api-spike.js +0 -19
  101. package/enterprise-knowledge/README.md +0 -50
  102. package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +0 -22
  103. package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +0 -15
  104. package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +0 -69
  105. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +0 -52
  106. package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +0 -29
  107. package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +0 -2
  108. package/integration/README.md +0 -81
  109. package/integration/github/README.md +0 -53
  110. package/integration/github/application.json +0 -21
  111. package/integration/github/deploy.js +0 -72
  112. package/integration/github/env.template +0 -11
  113. package/integration/github/github-datasource-issue-comments.json +0 -239
  114. package/integration/github/github-datasource-issues.json +0 -399
  115. package/integration/github/github-datasource-repository.json +0 -354
  116. package/integration/github/github-deploy.json +0 -1202
  117. package/integration/github/github-system.json +0 -82
  118. package/integration/hubspot-test/README.md +0 -159
  119. package/integration/hubspot-test/application.json +0 -54
  120. package/integration/hubspot-test/companies.json +0 -2048
  121. package/integration/hubspot-test/create-hubspot.js +0 -523
  122. package/integration/hubspot-test/env.template +0 -4
  123. package/integration/hubspot-test/hubspot-test-datasource-company.json +0 -138
  124. package/integration/hubspot-test/hubspot-test-datasource-contact.json +0 -146
  125. package/integration/hubspot-test/hubspot-test-datasource-deal.json +0 -146
  126. package/integration/hubspot-test/hubspot-test-datasource-users.json +0 -76
  127. package/integration/hubspot-test/hubspot-test-deploy.json +0 -2160
  128. package/integration/hubspot-test/hubspot-test-system.json +0 -74
  129. package/integration/hubspot-test/rbac.json +0 -166
  130. package/integration/hubspot-test/test-artifacts/wizard-hubspot-credential-real.yaml +0 -20
  131. package/integration/hubspot-test/test-artifacts/wizard-hubspot-env-vars.yaml +0 -9
  132. package/integration/hubspot-test/test-artifacts/wizard-invalid-add-datasource.yaml +0 -5
  133. package/integration/hubspot-test/test-artifacts/wizard-invalid-app-name.yaml +0 -5
  134. package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-create.yaml +0 -7
  135. package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-select.yaml +0 -7
  136. package/integration/hubspot-test/test-artifacts/wizard-invalid-known-platform.yaml +0 -4
  137. package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-app.yaml +0 -4
  138. package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-source.yaml +0 -2
  139. package/integration/hubspot-test/test-artifacts/wizard-invalid-mode.yaml +0 -5
  140. package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-file.yaml +0 -5
  141. package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-url.yaml +0 -4
  142. package/integration/hubspot-test/test-artifacts/wizard-invalid-source.yaml +0 -4
  143. package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-array-test.yaml +0 -5
  144. package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-key-test.yaml +0 -5
  145. package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-path-test.yaml +0 -5
  146. package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-test.yaml +0 -5
  147. package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-test.yaml +0 -5
  148. package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-yaml-test.yaml +0 -5
  149. package/integration/hubspot-test/test-dataplane-down-helpers.js +0 -249
  150. package/integration/hubspot-test/test-dataplane-down-tests.js +0 -386
  151. package/integration/hubspot-test/test-dataplane-down.js +0 -209
  152. package/integration/hubspot-test/test.js +0 -1588
  153. package/integration/hubspot-test/wizard-hubspot-e2e.yaml +0 -16
  154. package/integration/hubspot-test/wizard-hubspot-platform.yaml +0 -8
  155. package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +0 -23
  156. package/integration/roundtrip-test-local/README.md +0 -143
  157. package/integration/roundtrip-test-local/application.yaml +0 -13
  158. package/integration/roundtrip-test-local/env.template +0 -15
  159. package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +0 -14
  160. package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +0 -61
  161. package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +0 -25
  162. package/integration/roundtrip-test-local2/README.md +0 -143
  163. package/integration/roundtrip-test-local2/application.yaml +0 -13
  164. package/integration/roundtrip-test-local2/env.template +0 -15
  165. package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +0 -31
  166. package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +0 -86
  167. package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +0 -25
  168. package/integration/test/wizard.yaml +0 -8
  169. package/jest.config.coverage.js +0 -37
  170. package/jest.config.default.js +0 -11
  171. package/jest.config.integration.fixtures.js +0 -22
  172. package/jest.config.integration.js +0 -33
  173. package/jest.config.isolated.js +0 -11
  174. package/jest.config.manual.js +0 -30
  175. package/jest.global-live-fabrix-hooks.js +0 -36
  176. package/jest.isolated-projects.js +0 -283
  177. package/jest.projects.js +0 -79
  178. package/lib/integration-definition/openapi-enrichment/hubspot-crm-companies.json +0 -205
  179. package/packages/builder-api/README.md +0 -120
  180. package/packages/builder-api/package.json +0 -30
  181. package/packages/builder-api/src/app.module.ts +0 -7
  182. package/packages/builder-api/src/auth/auth.module.ts +0 -5
  183. package/packages/builder-api/src/external-system/external-system.module.ts +0 -5
  184. package/packages/builder-api/src/main.ts +0 -16
  185. package/packages/builder-api/tsconfig.json +0 -15
  186. package/scripts/check-builder-api-architecture-grep.js +0 -79
  187. package/scripts/check-datasource-test-run-schema-sync.js +0 -34
  188. package/scripts/ci-fix.sh +0 -19
  189. package/scripts/ci-simulate.sh +0 -19
  190. package/scripts/diagnose-cli.js +0 -150
  191. package/scripts/docker_image_content_gate.js +0 -47
  192. package/scripts/docker_image_content_gate.sh +0 -5
  193. package/scripts/export-builder-api-evidence.js +0 -262
  194. package/scripts/install-local.js +0 -490
  195. package/scripts/lib/builder-api-docker-staging-copy.js +0 -60
  196. package/scripts/lib/builder-api-docker-staging-core.js +0 -183
  197. package/scripts/lib/docker-image-content-gate-core.js +0 -166
  198. package/scripts/lib/plan-actor.js +0 -109
  199. package/scripts/lib/plan-config.js +0 -20
  200. package/scripts/lib/plan-gates.js +0 -154
  201. package/scripts/lib/plan-meta.js +0 -104
  202. package/scripts/lib/plan-parse.js +0 -162
  203. package/scripts/lib/plan-prevalidate-gates.js +0 -337
  204. package/scripts/lib/plan-run-core.js +0 -125
  205. package/scripts/lib/plan-run-report.js +0 -119
  206. package/scripts/plan-approve.js +0 -24
  207. package/scripts/plan-archive.js +0 -49
  208. package/scripts/plan-run.js +0 -13
  209. package/scripts/plan-set-actor.js +0 -21
  210. package/scripts/plan-validate.js +0 -80
  211. package/scripts/pnpm/af.mjs +0 -125
  212. package/scripts/pnpm/check-quiet.mjs +0 -32
  213. package/scripts/pnpm/dev-install.mjs +0 -29
  214. package/scripts/pnpm/dev-reload.mjs +0 -18
  215. package/scripts/pnpm/help.mjs +0 -55
  216. package/scripts/pnpm/lib/dev-reload-core.mjs +0 -189
  217. package/scripts/pnpm/lib/dev-reload-log-capture.mjs +0 -67
  218. package/scripts/pnpm/lib/dev-reload-log-utils.mjs +0 -32
  219. package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +0 -124
  220. package/scripts/pnpm/lib/resolve-app-url.mjs +0 -183
  221. package/scripts/pnpm/lib/spinner.mjs +0 -42
  222. package/scripts/pnpm-global-remove.js +0 -48
  223. package/scripts/stage_builder_api_for_docker.js +0 -65
  224. package/scripts/sync-builder-api-template.js +0 -44
  225. package/scripts/test-dataplane-bootstrap.js +0 -331
@@ -1,205 +0,0 @@
1
- {
2
- "openapi": "3.0.1",
3
- "info": {
4
- "title": "CRM Companies (enrichment fixture)",
5
- "version": "1.0.0"
6
- },
7
- "paths": {
8
- "/crm/v3/objects/companies": {
9
- "get": {
10
- "operationId": "get-/crm/v3/objects/companies",
11
- "summary": "List companies",
12
- "parameters": [
13
- {
14
- "name": "limit",
15
- "in": "query",
16
- "schema": { "type": "integer" }
17
- },
18
- {
19
- "name": "after",
20
- "in": "query",
21
- "schema": { "type": "string" }
22
- },
23
- {
24
- "name": "properties",
25
- "in": "query",
26
- "schema": { "type": "string" }
27
- },
28
- {
29
- "name": "associations",
30
- "in": "query",
31
- "schema": { "type": "string" }
32
- }
33
- ],
34
- "responses": {
35
- "200": {
36
- "description": "Results use paging.next.after as the cursor for the next page.",
37
- "content": {
38
- "application/json": {
39
- "schema": {
40
- "type": "object",
41
- "properties": {
42
- "results": {
43
- "type": "array",
44
- "items": { "$ref": "#/components/schemas/Company" }
45
- },
46
- "paging": {
47
- "type": "object",
48
- "properties": {
49
- "next": {
50
- "type": "object",
51
- "properties": {
52
- "after": { "type": "string" }
53
- }
54
- }
55
- }
56
- }
57
- }
58
- }
59
- }
60
- }
61
- }
62
- }
63
- },
64
- "post": {
65
- "operationId": "post-/crm/v3/objects/companies",
66
- "summary": "Create company",
67
- "requestBody": {
68
- "required": true,
69
- "content": {
70
- "application/json": {
71
- "schema": {
72
- "type": "object",
73
- "properties": {
74
- "properties": {
75
- "type": "object",
76
- "additionalProperties": { "type": "string" }
77
- }
78
- }
79
- }
80
- }
81
- }
82
- },
83
- "responses": {
84
- "201": {
85
- "description": "Created",
86
- "content": {
87
- "application/json": {
88
- "schema": { "$ref": "#/components/schemas/Company" }
89
- }
90
- }
91
- }
92
- }
93
- }
94
- },
95
- "/crm/v3/objects/companies/{companyId}": {
96
- "get": {
97
- "operationId": "get-/crm/v3/objects/companies/{companyId}",
98
- "summary": "Get company",
99
- "parameters": [
100
- {
101
- "name": "companyId",
102
- "in": "path",
103
- "required": true,
104
- "schema": { "type": "string" }
105
- },
106
- {
107
- "name": "properties",
108
- "in": "query",
109
- "schema": { "type": "string" }
110
- },
111
- {
112
- "name": "associations",
113
- "in": "query",
114
- "schema": { "type": "string" }
115
- }
116
- ],
117
- "responses": {
118
- "200": {
119
- "description": "OK",
120
- "content": {
121
- "application/json": {
122
- "schema": { "$ref": "#/components/schemas/Company" }
123
- }
124
- }
125
- }
126
- }
127
- },
128
- "patch": {
129
- "operationId": "patch-/crm/v3/objects/companies/{companyId}",
130
- "summary": "Update company",
131
- "parameters": [
132
- {
133
- "name": "companyId",
134
- "in": "path",
135
- "required": true,
136
- "schema": { "type": "string" }
137
- }
138
- ],
139
- "requestBody": {
140
- "required": true,
141
- "content": {
142
- "application/json": {
143
- "schema": {
144
- "type": "object",
145
- "properties": {
146
- "properties": {
147
- "type": "object",
148
- "additionalProperties": { "type": "string" }
149
- }
150
- }
151
- }
152
- }
153
- }
154
- },
155
- "responses": {
156
- "200": {
157
- "description": "OK",
158
- "content": {
159
- "application/json": {
160
- "schema": { "$ref": "#/components/schemas/Company" }
161
- }
162
- }
163
- }
164
- }
165
- },
166
- "delete": {
167
- "operationId": "delete-/crm/v3/objects/companies/{companyId}",
168
- "summary": "Delete company",
169
- "parameters": [
170
- {
171
- "name": "companyId",
172
- "in": "path",
173
- "required": true,
174
- "schema": { "type": "string" }
175
- }
176
- ],
177
- "responses": {
178
- "204": { "description": "No Content" }
179
- }
180
- }
181
- }
182
- },
183
- "components": {
184
- "schemas": {
185
- "Company": {
186
- "type": "object",
187
- "properties": {
188
- "id": { "type": "string" },
189
- "properties": {
190
- "type": "object",
191
- "properties": {
192
- "name": { "type": "string" },
193
- "country": { "type": "string" }
194
- },
195
- "additionalProperties": { "type": "string" }
196
- },
197
- "associations": {
198
- "type": "object",
199
- "additionalProperties": true
200
- }
201
- }
202
- }
203
- }
204
- }
205
- }
@@ -1,120 +0,0 @@
1
- # @aifabrix/builder-api (154.0)
2
-
3
- HTTP orchestration layer for external-system workspace lifecycle. V1 uses the shared
4
- `lib/programmatic/` adapter over existing Builder CLI libraries (no duplicate facades).
5
-
6
- ## Run with Builder CLI (recommended)
7
-
8
- From the **aifabrix-builder** repository root:
9
-
10
- ```bash
11
- # From aifabrix-builder repo root
12
- aifabrix auth status
13
- aifabrix up-platform # full stack (includes builder-api)
14
- # or incremental when miso + dataplane already run:
15
- aifabrix up-builder-api
16
- aifabrix resolve builder-api # refresh .env from env.template
17
- aifabrix run builder-api --reload
18
- ```
19
-
20
- Hot reload (bind-mount repo root, same pattern as dataplane / miso-controller):
21
-
22
- ```bash
23
- pnpm run dev-reload
24
- # or: aifabrix run builder-api --reload
25
- ```
26
-
27
- Logs, stop, and lifecycle match other Builder-managed apps:
28
-
29
- ```bash
30
- aifabrix logs builder-api
31
- aifabrix down-app builder-api
32
- ```
33
-
34
- Health (adjust port for your `developer-id`): `GET http://localhost:3105/api/v1/builder/health` (dev 1 → `3005 + 100`).
35
-
36
- ReDoc (same as dataplane / miso-controller): `GET http://localhost:3105/api/docs`
37
- OpenAPI JSON: `GET /api/v1/builder/api-docs/openapi.json`
38
-
39
- Platform integration SSOT lives under `integration/` in the builder repo. Publish Enterprise MCP anchor and repository provider integrations before workspace flows:
40
-
41
- ```bash
42
- aifabrix upload enterprise-integration-lifecycle --probe
43
- aifabrix upload <repository-provider-systemKey> --probe
44
- pnpm run dev-reload # builder-api container
45
- ```
46
-
47
- See `integration/README.md` in the builder repo.
48
-
49
- ## Run on host (development / tests only)
50
-
51
- For Jest e2e and quick iteration without Docker, resolve from `builder/builder-api/env.template` (uses `url://` tokens like miso-controller/dataplane) or set localhost URLs manually:
52
-
53
- ```bash
54
- aifabrix resolve builder-api # preferred — expands url://miso-controller-internal, url://dataplane-internal, url://keycloak-*
55
-
56
- # or manual host overrides:
57
- export WORKSPACE_ROOT=/tmp/builder-workspaces
58
- export MISO_CLIENTID=miso-controller-dev-builder-api
59
- export MISO_CLIENTSECRET=<from aifabrix app register builder-api>
60
- export MISO_CONTROLLER_URL=http://localhost:3100/miso
61
- export DATAPLANE_URL=http://localhost:3101/data
62
- export DEFAULT_ENVIRONMENT=dev
63
-
64
- pnpm run dev
65
- # or Nest bootstrap: npm run builder-api:nest
66
- ```
67
-
68
- ## Workspace cleanup
69
-
70
- Scheduled purge of stale draft workspaces (env `WORKSPACE_DRAFT_TTL_DAYS`, `WORKSPACE_INACTIVE_MAX_DAYS`):
71
-
72
- ```bash
73
- npm run builder-api:cleanup
74
- npm run builder-api:cleanup -- --dry-run
75
- ```
76
-
77
- In Docker, schedule via platform cron or sidecar invoking `node bin/builder-api-cleanup.js`.
78
-
79
- ## Package layout
80
-
81
- ```text
82
- builder/builder-api/ # SSOT (edit here; npm run sync-json → template)
83
- templates/applications/builder-api/ # Shipped template copy
84
- packages/builder-api/
85
- src/main.ts # Nest bootstrap → nest-http-bridge
86
- src/app.module.ts
87
- MANUAL-CHECKLIST.md
88
- lib/programmatic/ # Shared HTTP handlers + Enterprise MCP client
89
- ```
90
-
91
- Compile TypeScript: `npm run builder-api:build` (output in `packages/builder-api/dist/`).
92
-
93
- ## 154.1 routes (Enterprise MCP client)
94
-
95
- Provider-neutral HTTP orchestration — remote repository/template via Dataplane Enterprise MCP:
96
-
97
- - `POST /systems/{systemKey}/template/materialize`
98
- - `GET /systems/{systemKey}/workspace/status`
99
- - `POST /systems/{systemKey}/workspace/diff` / `workspace/reset`
100
- - `POST /systems/{systemKey}/repository/sync` / `create-review` / `dispatch-pipeline`
101
- - `GET /systems/{systemKey}/repository/status`
102
-
103
- Governance gates use existing Dataplane lifecycle / verify-trust APIs (no can-execute proxy in builder-api V1).
104
-
105
- Architecture CI: `npm run check:builder-api-arch`
106
-
107
- All other routes require `Authorization: Bearer <token from aifabrix login>`.
108
-
109
- See `MANUAL-CHECKLIST.md` for manual verification, `docs/external-systems.md` and `docs/wizard.md` for integration workflow context.
110
-
111
- ## Nest migration
112
-
113
- This package currently reuses the Node HTTP server in `lib/programmatic/builder-api-server.js`.
114
- NestJS scaffold wraps the same `route-handlers` module via `nest-http-bridge.js`.
115
-
116
- ## Not builder-server
117
-
118
- This service is **not** the dev onboarding `builder-server`. It is stateless multi-user workspace
119
- orchestration with Dataplane as governance authority. Do **not** use ad hoc `docker compose` under
120
- `packages/builder-api/` — use `aifabrix run builder-api` for the full application lifecycle.
@@ -1,30 +0,0 @@
1
- {
2
- "name": "@aifabrix/builder-api",
3
- "version": "0.1.0",
4
- "description": "AI Fabrix Builder API — HTTP orchestration for external system lifecycle (plan 154.0)",
5
- "private": true,
6
- "main": "../../lib/programmatic/builder-api-server.js",
7
- "bin": {
8
- "builder-api": "../../bin/builder-api-spike.js",
9
- "builder-api-nest": "../../bin/builder-api-nest.js"
10
- },
11
- "scripts": {
12
- "build": "tsc -p tsconfig.json",
13
- "start": "node ../../bin/builder-api-spike.js",
14
- "start:nest": "node ../../bin/builder-api-nest.js",
15
- "cleanup": "node ../../bin/builder-api-cleanup.js"
16
- },
17
- "engines": {
18
- "node": ">=18.0.0"
19
- },
20
- "dependencies": {
21
- "@aifabrix/miso-client": "4.19.0"
22
- },
23
- "peerDependencies": {
24
- "@nestjs/common": "^10.0.0",
25
- "@nestjs/core": "^10.0.0",
26
- "@nestjs/platform-express": "^10.0.0",
27
- "reflect-metadata": "^0.2.0",
28
- "rxjs": "^7.8.0"
29
- }
30
- }
@@ -1,7 +0,0 @@
1
- import { Module } from '@nestjs/common';
2
-
3
- /**
4
- * Root Nest module — HTTP routing is delegated to lib/programmatic via nest-http-bridge.
5
- */
6
- @Module({})
7
- export class AppModule {}
@@ -1,5 +0,0 @@
1
- import { Module } from '@nestjs/common';
2
-
3
- /** Placeholder for future BearerAuthGuard wiring (V1 auth runs in lib/programmatic). */
4
- @Module({})
5
- export class AuthModule {}
@@ -1,5 +0,0 @@
1
- import { Module } from '@nestjs/common';
2
-
3
- /** Placeholder for route-group modules; handlers live in lib/programmatic today. */
4
- @Module({})
5
- export class ExternalSystemModule {}
@@ -1,16 +0,0 @@
1
- import 'reflect-metadata';
2
- import { NestFactory } from '@nestjs/core';
3
- import { AppModule } from './app.module';
4
-
5
- async function bootstrap() {
6
- const app = await NestFactory.create(AppModule, { bodyParser: false });
7
- // eslint-disable-next-line @typescript-eslint/no-require-imports
8
- const { wireBuilderApiHttpBridge, BASE } = require('../../../lib/programmatic/nest-http-bridge');
9
- wireBuilderApiHttpBridge(app.getHttpAdapter().getInstance());
10
- const port = Number(process.env.PORT || 3005);
11
- await app.listen(port);
12
- // eslint-disable-next-line no-console
13
- console.log(`builder-api (Nest) listening on http://localhost:${port}${BASE}/health`);
14
- }
15
-
16
- bootstrap();
@@ -1,15 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "module": "commonjs",
4
- "target": "ES2020",
5
- "outDir": "dist",
6
- "rootDir": "src",
7
- "strict": true,
8
- "esModuleInterop": true,
9
- "experimentalDecorators": true,
10
- "emitDecoratorMetadata": true,
11
- "skipLibCheck": true,
12
- "declaration": false
13
- },
14
- "include": ["src/**/*.ts"]
15
- }
@@ -1,79 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Architecture grep gate for builder-api (plan 154.1).
4
- *
5
- * Fails when provider-specific strings appear under lib/programmatic or packages/builder-api.
6
- */
7
-
8
- 'use strict';
9
-
10
- const fs = require('fs');
11
- const path = require('path');
12
-
13
- const ROOT = path.join(__dirname, '..');
14
- const SCAN_DIRS = ['lib/programmatic', 'packages/builder-api'];
15
- const FORBIDDEN = /\b(github|gitlab|bitbucket|octokit|azuredevops|azure devops|git clone)\b/i;
16
- const ALLOWLIST = new Set([
17
- path.normalize('lib/programmatic/openapi-descriptions.js'),
18
- path.normalize('lib/programmatic/openapi-spec.js'),
19
- path.normalize('packages/builder-api/MANUAL-CHECKLIST.md')
20
- ]);
21
-
22
- /**
23
- * Recursively collect scannable files under a directory.
24
- * @param {string} dir - Directory path to scan
25
- * @param {string[]} files - Output file list
26
- * @returns {void}
27
- */
28
- function walk(dir, files) {
29
- if (!fs.existsSync(dir)) {
30
- return;
31
- }
32
- for (const name of fs.readdirSync(dir)) {
33
- const full = path.join(dir, name);
34
- const stat = fs.statSync(full);
35
- if (stat.isDirectory()) {
36
- walk(full, files);
37
- continue;
38
- }
39
- if (!/\.(js|ts|md|json|yml|yaml)$/.test(name)) {
40
- continue;
41
- }
42
- files.push(full);
43
- }
44
- }
45
-
46
- /** @type {string[]} */
47
- const files = [];
48
- for (const rel of SCAN_DIRS) {
49
- walk(path.join(ROOT, rel), files);
50
- }
51
-
52
- /** @type {Array<{ file: string, line: number, text: string }>} */
53
- const violations = [];
54
-
55
- for (const file of files) {
56
- const rel = path.normalize(path.relative(ROOT, file));
57
- if (ALLOWLIST.has(rel)) {
58
- continue;
59
- }
60
- const content = fs.readFileSync(file, 'utf8');
61
- content.split('\n').forEach((line, index) => {
62
- if (FORBIDDEN.test(line)) {
63
- violations.push({ file: rel, line: index + 1, text: line.trim() });
64
- }
65
- });
66
- }
67
-
68
- if (violations.length > 0) {
69
- // eslint-disable-next-line no-console
70
- console.error('builder-api architecture grep failed:');
71
- for (const row of violations) {
72
- // eslint-disable-next-line no-console
73
- console.error(` ${row.file}:${row.line}: ${row.text}`);
74
- }
75
- process.exit(1);
76
- }
77
-
78
- // eslint-disable-next-line no-console
79
- console.log('builder-api architecture grep passed');
@@ -1,34 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * CI helper: fail when Builder lib/schema/datasource-test-run.schema.json drifts from Dataplane copy.
4
- * @fileoverview Schema sync gate (plan §8.1)
5
- */
6
- /* eslint-disable no-console -- CLI script */
7
-
8
- const path = require('path');
9
- const { assertDatasourceTestRunSchemasInSync } = require('../lib/utils/datasource-test-run-schema-sync');
10
-
11
- const root = path.join(__dirname, '..');
12
- const builderSchema = path.join(root, 'lib/schema/datasource-test-run.schema.json');
13
- const dpRoot = process.env.AIFABRIX_DATAPLANE_ROOT || path.join(root, '..', 'aifabrix-dataplane');
14
- const dataplaneSchema = path.join(dpRoot, 'app/schemas/json/datasource-test-run.schema.json');
15
-
16
- const strict = process.env.AIFABRIX_SCHEMA_SYNC_STRICT === '1';
17
-
18
- try {
19
- const result = assertDatasourceTestRunSchemasInSync(builderSchema, dataplaneSchema);
20
- if (result.skipped) {
21
- const msg = result.reason || 'Dataplane schema path missing';
22
- if (strict) {
23
- console.error(`Schema sync failed (strict): ${msg}`);
24
- process.exit(1);
25
- }
26
- console.warn(`Schema sync skipped: ${msg}`);
27
- process.exit(0);
28
- }
29
- console.log(`DatasourceTestRun schema OK (sha256 ${result.builderSha})`);
30
- process.exit(0);
31
- } catch (e) {
32
- console.error(e.message || String(e));
33
- process.exit(1);
34
- }
package/scripts/ci-fix.sh DELETED
@@ -1,19 +0,0 @@
1
- #!/bin/bash
2
- # CI Fix Script Wrapper
3
- # This script is a wrapper that calls the actual CI fix script
4
- # located in tests/scripts/ci-fix.sh
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- ACTUAL_SCRIPT="$SCRIPT_DIR/../tests/scripts/ci-fix.sh"
8
-
9
- if [ ! -f "$ACTUAL_SCRIPT" ]; then
10
- echo "Error: CI fix script not found at $ACTUAL_SCRIPT" >&2
11
- exit 1
12
- fi
13
-
14
- # Make sure the script is executable
15
- chmod +x "$ACTUAL_SCRIPT" 2>/dev/null || true
16
-
17
- # Execute the actual script
18
- exec "$ACTUAL_SCRIPT" "$@"
19
-
@@ -1,19 +0,0 @@
1
- #!/bin/bash
2
- # CI Simulation Script Wrapper
3
- # This script is a wrapper that calls the actual CI simulation script
4
- # located in tests/scripts/ci-simulate.sh
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- ACTUAL_SCRIPT="$SCRIPT_DIR/../tests/scripts/ci-simulate.sh"
8
-
9
- if [ ! -f "$ACTUAL_SCRIPT" ]; then
10
- echo "Error: CI simulation script not found at $ACTUAL_SCRIPT" >&2
11
- exit 1
12
- fi
13
-
14
- # Make sure the script is executable
15
- chmod +x "$ACTUAL_SCRIPT" 2>/dev/null || true
16
-
17
- # Execute the actual script
18
- exec "$ACTUAL_SCRIPT" "$@"
19
-