@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.
- package/lib/app/deploy-config.js +3 -2
- package/lib/channels/add-channel.js +11 -41
- package/lib/channels/approval-guides/index.js +3 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +26 -17
- package/lib/channels/channel-add-existing.js +72 -0
- package/lib/channels/channel-runtime-resolver.js +5 -1
- package/lib/channels/channel-status-display.js +30 -3
- package/lib/channels/microsoft-copilot-entra-sso-form.js +73 -2
- package/lib/channels/microsoft-copilot-entra-sso.js +26 -5
- package/lib/channels/microsoft-copilot-limits.js +22 -3
- package/lib/channels/microsoft-copilot-package.js +59 -14
- package/lib/channels/microsoft-copilot-validate.js +40 -10
- package/lib/cli/attach-default-help-examples.js +102 -0
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-credential-deployment.js +7 -5
- package/lib/cli/setup-utility-validate.js +1 -0
- package/lib/commands/credential-push.js +37 -5
- package/lib/commands/package-score.js +72 -0
- package/lib/commands/role-assistant.js +46 -8
- package/lib/deployment/deployer-poll-run.js +2 -2
- package/lib/deployment/deployer.js +1 -1
- package/lib/deployment/environment.js +2 -2
- package/lib/external-system/deploy.js +11 -21
- package/lib/integration-definition/apply.js +12 -14
- package/lib/integration-definition/enrich-openapi-operations.js +9 -10
- package/lib/lab/package-parity-score.js +417 -0
- package/lib/programmatic/capability-registry.js +1 -0
- package/lib/programmatic/help-content/channel-onboarding.md +35 -0
- package/lib/programmatic/help-content/cip-overview.md +27 -0
- package/lib/programmatic/help-content/connected-system-ui.md +70 -0
- package/lib/programmatic/help-content/dimensions-guide.md +23 -0
- package/lib/programmatic/help-content/enterprise-sync-fabrix.md +123 -0
- package/lib/programmatic/help-content/overview.md +25 -0
- package/lib/programmatic/help-content/subscription-guide.md +27 -0
- package/lib/programmatic/help-content/workflow.md +50 -0
- package/lib/programmatic/openapi-component-schemas.js +1 -0
- package/lib/programmatic/openapi-descriptions.js +6 -0
- package/lib/programmatic/openapi-envelope-examples.js +11 -0
- package/lib/programmatic/openapi-operation-bindings.js +5 -0
- package/lib/programmatic/openapi-request-schemas.js +39 -13
- package/lib/programmatic/openapi-result-schemas.js +30 -0
- package/lib/programmatic/openapi-schema-descriptions-core.js +18 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
- package/lib/programmatic/persist-supplied-openapi.js +180 -0
- package/lib/programmatic/route-handler-map.js +6 -0
- package/lib/programmatic/run-integration-definition.js +13 -5
- package/lib/role-assistant/evidence-sync.js +55 -7
- package/lib/role-assistant/test-runner-attachments.js +118 -0
- package/lib/role-assistant/test-runner-bid-apply.js +100 -21
- package/lib/role-assistant/test-runner-bid-document.js +1 -1
- package/lib/role-assistant/test-runner-start-payload.js +96 -0
- package/lib/role-assistant/test-runner-workhub-answers.js +11 -7
- package/lib/role-assistant/test-runner-workhub-helpers.js +100 -0
- package/lib/role-assistant/test-runner-workhub-soft.js +86 -0
- package/lib/role-assistant/test-runner-workhub.js +68 -105
- package/lib/role-assistant/test-runner.js +5 -63
- package/lib/role-assistant/test-suite.js +33 -40
- package/lib/schema/external-datasource.schema.json +13 -4
- package/lib/utils/compose-generator.js +10 -1
- package/lib/utils/compose-traefik-extra-routes.js +107 -0
- package/lib/utils/docker-build.js +2 -2
- package/lib/utils/help-builder.js +2 -1
- package/lib/utils/promote-dev-docker-image.js +15 -10
- package/package.json +14 -16
- package/templates/README.md +12 -1
- package/templates/applications/dataplane/application.yaml +8 -1
- package/templates/applications/dataplane/env.template +1 -1
- package/templates/applications/miso-controller/application.yaml +2 -1
- package/templates/applications/miso-controller/rbac.yaml +1 -0
- package/templates/channels/microsoft-copilot/ai-plugin.template.json.hbs +6 -2
- package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +8 -5
- package/templates/channels/microsoft-copilot/fi-fi.template.json.hbs +7 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +74 -22
- package/templates/channels/microsoft-copilot/manifest.template.json.hbs +29 -14
- package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +6 -2
- package/templates/python/docker-compose.hbs +36 -0
- package/templates/typescript/docker-compose.hbs +36 -0
- package/.cursor/plans/Archive/157.1-security-quality-violations-by-type.csv +0 -374
- package/.cursor/process/README.md +0 -9
- package/.cursor/rules/anchor-docs.mdc +0 -15
- package/.cursor/rules/assistant-driven-integration-build.mdc +0 -40
- package/.cursor/rules/cli-layout.mdc +0 -81
- package/.cursor/rules/cli-product-neutral.mdc +0 -43
- package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +0 -49
- package/.cursor/rules/docs-rules.mdc +0 -32
- package/.cursor/rules/plan-rules/application-lifecycle.mdc +0 -30
- package/.cursor/rules/plan-rules/plan-frontmatter.mdc +0 -35
- package/.cursor/rules/plan-rules/plan-lifecycle.mdc +0 -31
- package/.cursor/rules/plan-rules/plan-validation-gate.mdc +0 -34
- package/.cursor/rules/project-rules.mdc +0 -913
- package/.cursor/skills/README.md +0 -15
- package/.dockerignore +0 -52
- package/.eslintignore +0 -22
- package/.markdownlint.json +0 -14
- package/anchor-docs/README.md +0 -10
- package/anchor-docs/_TEMPLATE +0 -24
- package/babel.config.js +0 -6
- package/bin/builder-api-cleanup.js +0 -26
- package/bin/builder-api-nest.js +0 -10
- package/bin/builder-api-spike.js +0 -19
- package/enterprise-knowledge/README.md +0 -50
- package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +0 -22
- package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +0 -15
- package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +0 -69
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +0 -52
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +0 -29
- package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +0 -2
- package/integration/README.md +0 -81
- package/integration/github/README.md +0 -53
- package/integration/github/application.json +0 -21
- package/integration/github/deploy.js +0 -72
- package/integration/github/env.template +0 -11
- package/integration/github/github-datasource-issue-comments.json +0 -239
- package/integration/github/github-datasource-issues.json +0 -399
- package/integration/github/github-datasource-repository.json +0 -354
- package/integration/github/github-deploy.json +0 -1202
- package/integration/github/github-system.json +0 -82
- package/integration/hubspot-test/README.md +0 -159
- package/integration/hubspot-test/application.json +0 -54
- package/integration/hubspot-test/companies.json +0 -2048
- package/integration/hubspot-test/create-hubspot.js +0 -523
- package/integration/hubspot-test/env.template +0 -4
- package/integration/hubspot-test/hubspot-test-datasource-company.json +0 -138
- package/integration/hubspot-test/hubspot-test-datasource-contact.json +0 -146
- package/integration/hubspot-test/hubspot-test-datasource-deal.json +0 -146
- package/integration/hubspot-test/hubspot-test-datasource-users.json +0 -76
- package/integration/hubspot-test/hubspot-test-deploy.json +0 -2160
- package/integration/hubspot-test/hubspot-test-system.json +0 -74
- package/integration/hubspot-test/rbac.json +0 -166
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-credential-real.yaml +0 -20
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-env-vars.yaml +0 -9
- package/integration/hubspot-test/test-artifacts/wizard-invalid-add-datasource.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-app-name.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-create.yaml +0 -7
- package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-select.yaml +0 -7
- package/integration/hubspot-test/test-artifacts/wizard-invalid-known-platform.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-app.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-source.yaml +0 -2
- package/integration/hubspot-test/test-artifacts/wizard-invalid-mode.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-file.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-url.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-source.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-array-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-key-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-path-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-yaml-test.yaml +0 -5
- package/integration/hubspot-test/test-dataplane-down-helpers.js +0 -249
- package/integration/hubspot-test/test-dataplane-down-tests.js +0 -386
- package/integration/hubspot-test/test-dataplane-down.js +0 -209
- package/integration/hubspot-test/test.js +0 -1588
- package/integration/hubspot-test/wizard-hubspot-e2e.yaml +0 -16
- package/integration/hubspot-test/wizard-hubspot-platform.yaml +0 -8
- package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +0 -23
- package/integration/roundtrip-test-local/README.md +0 -143
- package/integration/roundtrip-test-local/application.yaml +0 -13
- package/integration/roundtrip-test-local/env.template +0 -15
- package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +0 -14
- package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +0 -61
- package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +0 -25
- package/integration/roundtrip-test-local2/README.md +0 -143
- package/integration/roundtrip-test-local2/application.yaml +0 -13
- package/integration/roundtrip-test-local2/env.template +0 -15
- package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +0 -31
- package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +0 -86
- package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +0 -25
- package/integration/test/wizard.yaml +0 -8
- package/jest.config.coverage.js +0 -37
- package/jest.config.default.js +0 -11
- package/jest.config.integration.fixtures.js +0 -22
- package/jest.config.integration.js +0 -33
- package/jest.config.isolated.js +0 -11
- package/jest.config.manual.js +0 -30
- package/jest.global-live-fabrix-hooks.js +0 -36
- package/jest.isolated-projects.js +0 -283
- package/jest.projects.js +0 -79
- package/lib/integration-definition/openapi-enrichment/hubspot-crm-companies.json +0 -205
- package/packages/builder-api/README.md +0 -120
- package/packages/builder-api/package.json +0 -30
- package/packages/builder-api/src/app.module.ts +0 -7
- package/packages/builder-api/src/auth/auth.module.ts +0 -5
- package/packages/builder-api/src/external-system/external-system.module.ts +0 -5
- package/packages/builder-api/src/main.ts +0 -16
- package/packages/builder-api/tsconfig.json +0 -15
- package/scripts/check-builder-api-architecture-grep.js +0 -79
- package/scripts/check-datasource-test-run-schema-sync.js +0 -34
- package/scripts/ci-fix.sh +0 -19
- package/scripts/ci-simulate.sh +0 -19
- package/scripts/diagnose-cli.js +0 -150
- package/scripts/docker_image_content_gate.js +0 -47
- package/scripts/docker_image_content_gate.sh +0 -5
- package/scripts/export-builder-api-evidence.js +0 -262
- package/scripts/install-local.js +0 -490
- package/scripts/lib/builder-api-docker-staging-copy.js +0 -60
- package/scripts/lib/builder-api-docker-staging-core.js +0 -183
- package/scripts/lib/docker-image-content-gate-core.js +0 -166
- package/scripts/lib/plan-actor.js +0 -109
- package/scripts/lib/plan-config.js +0 -20
- package/scripts/lib/plan-gates.js +0 -154
- package/scripts/lib/plan-meta.js +0 -104
- package/scripts/lib/plan-parse.js +0 -162
- package/scripts/lib/plan-prevalidate-gates.js +0 -337
- package/scripts/lib/plan-run-core.js +0 -125
- package/scripts/lib/plan-run-report.js +0 -119
- package/scripts/plan-approve.js +0 -24
- package/scripts/plan-archive.js +0 -49
- package/scripts/plan-run.js +0 -13
- package/scripts/plan-set-actor.js +0 -21
- package/scripts/plan-validate.js +0 -80
- package/scripts/pnpm/af.mjs +0 -125
- package/scripts/pnpm/check-quiet.mjs +0 -32
- package/scripts/pnpm/dev-install.mjs +0 -29
- package/scripts/pnpm/dev-reload.mjs +0 -18
- package/scripts/pnpm/help.mjs +0 -55
- package/scripts/pnpm/lib/dev-reload-core.mjs +0 -189
- package/scripts/pnpm/lib/dev-reload-log-capture.mjs +0 -67
- package/scripts/pnpm/lib/dev-reload-log-utils.mjs +0 -32
- package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +0 -124
- package/scripts/pnpm/lib/resolve-app-url.mjs +0 -183
- package/scripts/pnpm/lib/spinner.mjs +0 -42
- package/scripts/pnpm-global-remove.js +0 -48
- package/scripts/stage_builder_api_for_docker.js +0 -65
- package/scripts/sync-builder-api-template.js +0 -44
- 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,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
|
-
|
package/scripts/ci-simulate.sh
DELETED
|
@@ -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
|
-
|