@aifabrix/builder 2.52.0 → 2.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/datasources-extended.api.js +8 -8
- package/lib/api/keycloak.api.js +92 -0
- package/lib/api/token-providers.api.js +77 -0
- package/lib/api/types/keycloak.types.js +23 -0
- package/lib/api/types/token-providers.types.js +65 -0
- package/lib/app/deploy-config.js +3 -2
- package/lib/app/down.js +16 -1
- package/lib/channels/add-channel.js +134 -57
- package/lib/channels/approval-guides/chatgpt.js +1 -1
- package/lib/channels/approval-guides/index.js +3 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +27 -14
- package/lib/channels/channel-add-ensure.js +128 -0
- package/lib/channels/channel-add-existing.js +72 -0
- package/lib/channels/channel-artifact-generator.js +11 -1
- package/lib/channels/channel-branding.js +94 -0
- package/lib/channels/channel-credential.js +8 -0
- package/lib/channels/channel-discovery.js +330 -0
- package/lib/channels/channel-external-system.js +1 -1
- package/lib/channels/channel-runtime-resolver.js +107 -14
- package/lib/channels/channel-status-display.js +36 -3
- package/lib/channels/microsoft-copilot-channel-add.js +138 -0
- package/lib/channels/microsoft-copilot-entra-sso-form.js +251 -0
- package/lib/channels/microsoft-copilot-entra-sso.js +285 -0
- package/lib/channels/microsoft-copilot-icons.js +74 -0
- package/lib/channels/microsoft-copilot-limits.js +103 -0
- package/lib/channels/microsoft-copilot-package.js +178 -52
- package/lib/channels/microsoft-copilot-validate.js +227 -0
- package/lib/cli/attach-default-help-examples.js +102 -0
- package/lib/cli/index.js +4 -0
- package/lib/cli/infra-guided.js +13 -6
- package/lib/cli/setup-credential-deployment.js +7 -5
- package/lib/cli/setup-infra.js +31 -4
- package/lib/cli/setup-utility-validate.js +1 -0
- package/lib/commands/channel-add-setup.js +28 -9
- package/lib/commands/channel.js +14 -10
- package/lib/commands/credential-push.js +37 -5
- package/lib/commands/integration-definition.js +158 -0
- package/lib/commands/package-score.js +72 -0
- package/lib/commands/repair-auth-apply.js +19 -5
- package/lib/commands/repair-datasource-sync-operations.js +4 -1
- package/lib/commands/role-assistant-test-output.js +200 -0
- package/lib/commands/role-assistant.js +163 -166
- package/lib/datasource/capability/capability-resolve.js +15 -5
- package/lib/datasource/capability/copy-operations.js +14 -4
- 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/infrastructure/index.js +19 -4
- package/lib/integration-definition/apply.js +476 -0
- package/lib/integration-definition/canonical-json.js +51 -0
- package/lib/integration-definition/emit-suite-bid.js +94 -0
- package/lib/integration-definition/enrich-crm-field-mappings.js +240 -0
- package/lib/integration-definition/enrich-openapi-operations.js +433 -0
- package/lib/integration-definition/from-discovery.js +339 -0
- package/lib/integration-definition/hash.js +37 -0
- package/lib/integration-definition/index.js +37 -0
- package/lib/integration-definition/resource-type-catalog.js +59 -0
- package/lib/integration-definition/system-kind-enum.js +40 -0
- package/lib/integration-definition/validate.js +148 -0
- package/lib/lab/package-parity-score.js +417 -0
- package/lib/programmatic/builder-api-request.js +5 -1
- package/lib/programmatic/builder-help-governance.js +3 -2
- package/lib/programmatic/capability-registry.js +20 -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 +7 -1
- package/lib/programmatic/openapi-descriptions.js +46 -0
- package/lib/programmatic/openapi-envelope-examples.js +280 -0
- package/lib/programmatic/openapi-operation-bindings.js +50 -0
- package/lib/programmatic/openapi-request-schemas.js +40 -0
- package/lib/programmatic/openapi-result-schemas-overflow.js +101 -0
- package/lib/programmatic/openapi-result-schemas.js +76 -99
- package/lib/programmatic/openapi-schema-descriptions-core.js +25 -4
- package/lib/programmatic/openapi-schema-descriptions-help.js +1 -1
- package/lib/programmatic/openapi-schema-descriptions-operations.js +43 -0
- package/lib/programmatic/openapi-schema-helpers.js +9 -9
- package/lib/programmatic/openapi-spec.js +11 -1
- package/lib/programmatic/orchestration-openapi-meta.js +10 -0
- package/lib/programmatic/persist-supplied-openapi.js +180 -0
- package/lib/programmatic/route-handler-map.js +35 -1
- package/lib/programmatic/run-channel-package.js +236 -0
- package/lib/programmatic/run-integration-definition.js +77 -0
- package/lib/role-assistant/evidence-sync.js +55 -7
- package/lib/role-assistant/knowledge-sync-logging.js +58 -0
- package/lib/role-assistant/knowledge-sync.js +88 -93
- package/lib/role-assistant/test-cases-bid.js +155 -0
- package/lib/role-assistant/test-cases-evaluate.js +9 -1
- package/lib/role-assistant/test-cases-honesty.js +24 -10
- package/lib/role-assistant/test-cases.js +28 -0
- package/lib/role-assistant/test-runner-attachments.js +118 -0
- package/lib/role-assistant/test-runner-bid-apply.js +201 -0
- package/lib/role-assistant/test-runner-bid-document.js +278 -0
- package/lib/role-assistant/test-runner-start-payload.js +96 -0
- package/lib/role-assistant/test-runner-workhub-answers.js +249 -20
- 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 +152 -107
- package/lib/role-assistant/test-runner.js +5 -63
- package/lib/role-assistant/test-suite.js +112 -0
- package/lib/schema/application-schema.json +56 -6
- package/lib/schema/external-datasource.schema.json +103 -17
- package/lib/schema/external-system.schema.json +54 -3
- package/lib/schema/integration-definition.schema.json +195 -0
- package/lib/utils/authentication-shape.js +6 -0
- 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 +3 -1
- package/lib/utils/promote-dev-docker-image.js +102 -18
- package/lib/utils/transient-developer-id.js +28 -0
- package/package.json +14 -16
- package/templates/README.md +12 -1
- package/templates/applications/dataplane/application.yaml +10 -2
- package/templates/applications/dataplane/env.template +7 -6
- package/templates/applications/miso-controller/application.yaml +23 -8
- package/templates/applications/miso-controller/env.template +8 -2
- package/templates/applications/miso-controller/rbac.yaml +1 -0
- package/templates/channels/README.md +11 -1
- package/templates/channels/brand/color-192.png +0 -0
- package/templates/channels/brand/dark/128.png +0 -0
- package/templates/channels/brand/dark/192.png +0 -0
- package/templates/channels/brand/dark/256.png +0 -0
- package/templates/channels/brand/dark/32.png +0 -0
- package/templates/channels/brand/dark/512.png +0 -0
- package/templates/channels/brand/dark/64.png +0 -0
- package/templates/channels/brand/light/128.png +0 -0
- package/templates/channels/brand/light/192.png +0 -0
- package/templates/channels/brand/light/256.png +0 -0
- package/templates/channels/brand/light/32.png +0 -0
- package/templates/channels/brand/light/512.png +0 -0
- package/templates/channels/brand/light/64.png +0 -0
- package/templates/channels/brand/mono-white/128.png +0 -0
- package/templates/channels/brand/mono-white/192.png +0 -0
- package/templates/channels/brand/mono-white/256.png +0 -0
- package/templates/channels/brand/mono-white/32.png +0 -0
- package/templates/channels/brand/mono-white/512.png +0 -0
- package/templates/channels/brand/mono-white/64.png +0 -0
- package/templates/channels/brand/outline-32.png +0 -0
- package/templates/channels/chatgpt/install.template.md.hbs +6 -4
- package/templates/channels/chatgpt/integration/README.md +4 -5
- package/templates/channels/chatgpt/integration/chatgpt-system.json +1 -16
- package/templates/channels/microsoft-copilot/ai-plugin.template.json.hbs +14 -16
- package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +5 -3
- package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +30 -0
- package/templates/channels/microsoft-copilot/fi-fi.template.json.hbs +7 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +93 -22
- package/templates/channels/microsoft-copilot/integration/README.md +2 -3
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +1 -22
- package/templates/channels/microsoft-copilot/manifest.template.json.hbs +34 -19
- package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +15 -0
- package/templates/channels/slack/integration/README.md +2 -4
- package/templates/channels/teams-bot/install.template.md.hbs +4 -0
- package/templates/channels/teams-bot/integration/README.md +3 -5
- package/templates/channels/web-embed/integration/web-embed-system.json +1 -16
- package/templates/python/docker-compose.hbs +36 -0
- package/templates/typescript/docker-compose.hbs +36 -0
- package/.cursor/plans/Done/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 -260
- package/jest.projects.js +0 -76
- 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 -110
- 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,81 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Apply when adding or changing aifabrix CLI commands, subcommands, flags, help text, terminal output (chalk), TTY vs JSON/--json, or CLI tests. Ensures layout, glyphs, and output profiles match repo standards.
|
|
3
|
-
alwaysApply: false
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Builder CLI layout rules
|
|
7
|
-
|
|
8
|
-
When you touch **CLI surface** (`bin/aifabrix.js`, `lib/cli.js`, `lib/cli/**`, `lib/commands/**`) or **shared CLI formatters**, you must keep behavior aligned with the canonical docs in this folder.
|
|
9
|
-
|
|
10
|
-
**Product-neutral copy:** User-facing help, errors, and warnings must not reference internal plan IDs or hardcode lab-only integration names in generic code. See [cli-product-neutral.mdc](./cli-product-neutral.mdc).
|
|
11
|
-
|
|
12
|
-
## Sources of truth (read before shipping)
|
|
13
|
-
|
|
14
|
-
| Document | Role |
|
|
15
|
-
| -------- | ---- |
|
|
16
|
-
| [layout.md](./layout.md) | Visual and semantic spec: colors, sections, glyphs, blocking vs warning, non-TTY/CI, helper map to `cli-test-layout-chalk.js`. |
|
|
17
|
-
| [cli-output-command-matrix.md](./cli-output-command-matrix.md) | **One row per leaf command**: expected **output profile** (layout-blocks, tty-summary, stream-logs, json-opt, stdout-only, delegate) and **Manifest roots (141)** (when to emit gray manifest path line — see plan 141). |
|
|
18
|
-
|
|
19
|
-
If implementation and `layout.md` disagree, **fix implementation** or **update docs** in the same change so they stay one story.
|
|
20
|
-
|
|
21
|
-
## Output profiles (from the matrix)
|
|
22
|
-
|
|
23
|
-
Use the matrix row for your command to decide UX:
|
|
24
|
-
|
|
25
|
-
- **layout-blocks** — Structured blocks (header, verdict, lists, failures). Prefer helpers from `lib/utils/cli-test-layout-chalk.js` (or `lib/utils/cli-layout-chalk.js` re-export). Respect **`--json`**: skip TTY-only layout when the command is classified **json-opt** or when JSON mode is documented for that flow.
|
|
26
|
-
- **tty-summary** — Short chalk lines / tables; still use canonical glyphs and semantic colors.
|
|
27
|
-
- **stream-logs** — Tail/stream style; do not force layout-blocks around raw log lines unless product asks for a wrapper.
|
|
28
|
-
- **json-opt** — Human TTY layout when interactive; **machine-oriented** output when `--json` (no decorative layout).
|
|
29
|
-
- **stdout-only** — Stable, script-friendly stdout; minimal chalk; often used for diffs or piping.
|
|
30
|
-
- **delegate** — Output comes from delegated library (wizard, etc.); still avoid forbidden glyphs and spurious decoration in anything you add.
|
|
31
|
-
|
|
32
|
-
**New leaf command:** add a row to [cli-output-command-matrix.md](./cli-output-command-matrix.md) with the correct profile combination and **Manifest roots (141)** code (`141`, `141+`, `int`, `cfg`, `—`).
|
|
33
|
-
|
|
34
|
-
## Manifest path visibility (plan 141)
|
|
35
|
-
|
|
36
|
-
When a command’s matrix cell is **141**, **141+**, or **int** and the implementation reads an `application.yaml` (or integration equivalent), print **one** gray metadata line for humans (e.g. `Manifest: cwd/builder — /abs/path/application.yaml`) using `metadata()` or a small helper from `cli-test-layout-chalk.js`. Do not spam per-substep. Follow [.cursor/plans/141-manifest-location.plan.md](../plans/141-manifest-location.plan.md).
|
|
37
|
-
|
|
38
|
-
**`aifabrix setup`:** destructive / conflict prompts that list folders to be replaced must use **resolved absolute paths** for every directory (plan § Guided setup — not only `builder/<app>/` under an otherwise absolute builder root).
|
|
39
|
-
|
|
40
|
-
From [layout.md](./layout.md) contributor appendix:
|
|
41
|
-
|
|
42
|
-
| Role | Use | Do not use |
|
|
43
|
-
| ---- | --- | ----------- |
|
|
44
|
-
| Success | **✔** | ✓, heavy check, decorative check emoji |
|
|
45
|
-
| Warning | **⚠** | ‼, random emoji |
|
|
46
|
-
| Failure | **✖** | ✗, `x`, decorative X |
|
|
47
|
-
| Skipped | **⏭** | — |
|
|
48
|
-
| In progress | **⏳** | Hourglass as pure decoration |
|
|
49
|
-
|
|
50
|
-
- **Red = blocking only** (hard failure / non-zero exit when that line is the verdict). **Yellow = non-blocking** warnings. Never use red for warnings.
|
|
51
|
-
- **Non-TTY / CI** (`NO_COLOR`, chalk level 0): **same glyphs and line structure**; colors become no-ops. Do not invent a second plain-text vocabulary (e.g. `[OK]` instead of ✔) unless the command is explicitly **stdout-only machine** output.
|
|
52
|
-
|
|
53
|
-
Markdown headings in `layout.md` may use emoji for doc navigation; **user-facing terminal strings** follow the semantic glyph table only.
|
|
54
|
-
|
|
55
|
-
## Implementation
|
|
56
|
-
|
|
57
|
-
- **Canonical helpers:** `lib/utils/cli-test-layout-chalk.js` (see symbol → helper table in [layout.md](./layout.md) § “Implementation map”).
|
|
58
|
-
- **Preferred import alias:** `lib/utils/cli-layout-chalk.js` re-exports the same API when the path should not contain `test`.
|
|
59
|
-
- **Prefer** `formatSuccessLine`, `formatSuccessParagraph`, `formatWarningLine`, `formatBlockingError`, `failureGlyph`, `successGlyph`, and other exported section helpers over ad hoc `` chalk.green(`✔ …`) `` for one-off success/error lines.
|
|
60
|
-
- **Composite / indented lines** (e.g. `successGlyph()` + `chalk.white(…)`, or ` ✔ …` in validate-style output) may stay raw chalk **only** when a single helper would not match the spec; keep glyphs canonical.
|
|
61
|
-
- **Tests:** extend or add tests under `tests/lib/utils/cli-test-layout-chalk.test.js` (and command tests) when behavior or snapshots encode layout.
|
|
62
|
-
|
|
63
|
-
## Code entry points and maintenance
|
|
64
|
-
|
|
65
|
-
- **Shared formatters:** `lib/utils/cli-test-layout-chalk.js` (canonical exports).
|
|
66
|
-
- **Neutral re-export:** `lib/utils/cli-layout-chalk.js` → same module.
|
|
67
|
-
- **Unit tests:** `tests/lib/utils/cli-test-layout-chalk.test.js`.
|
|
68
|
-
|
|
69
|
-
**Optional follow-up:** If you touch centralized command error handling (e.g. `handleCommandError`), consider aligning it with `formatBlockingError` (but preserve `--json` / stdout-only behavior for script modes).
|
|
70
|
-
|
|
71
|
-
## Commander and UX checklist
|
|
72
|
-
|
|
73
|
-
- [ ] **Help**: `.description()` and `.option()` texts clear; default values and env overrides documented when behavior is non-obvious.
|
|
74
|
-
- [ ] **Profile**: Matrix row added/updated for every new **leaf** command path.
|
|
75
|
-
- [ ] **JSON / script**: If the command supports `--json` or machine output, JSON path skips TTY layout and stays stable for scripts.
|
|
76
|
-
- [ ] **Errors**: Blocking failures use **✖** + red via shared helpers where possible; non-blocking issues use **⚠** + yellow.
|
|
77
|
-
- [ ] **Docs**: User-facing CLI documentation lives under `docs/` per [docs-rules.mdc](./docs-rules.mdc) (command-centric; no raw HTTP/API tutorial in user docs unless that doc is explicitly contributor-focused).
|
|
78
|
-
|
|
79
|
-
## Related plans
|
|
80
|
-
|
|
81
|
-
Historical adoption context: `.cursor/plans/Done/129-cli_layout_adoption.plan.md`. Keep **cli-output-command-matrix.md** accurate when profiles or helper adoption change.
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Apply when changing aifabrix CLI code, help text, errors, or user-facing docs under docs/commands. Keeps product output free of internal plans, training labs, and hardcoded integration names.
|
|
3
|
-
alwaysApply: false
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# CLI product-neutral output (Builder)
|
|
7
|
-
|
|
8
|
-
The **aifabrix** CLI is a **product**. User-visible strings must not encode internal engineering artifacts.
|
|
9
|
-
|
|
10
|
-
## Forbidden in product paths
|
|
11
|
-
|
|
12
|
-
Applies to **`lib/cli/**`**, **`lib/commands/**`**, CLI help (Commander `.description()` / `.option()` / `addHelpText`), **`lib/utils/*-error*.js`**, terminal messages from **`lib/utils/cli-*`**, and **`docs/commands/**`** (see [docs-rules.mdc](./docs-rules.mdc)).
|
|
13
|
-
|
|
14
|
-
| Do not use | Use instead |
|
|
15
|
-
| ---------- | ----------- |
|
|
16
|
-
| Internal plan IDs (`Plan 331`, `plan 148`, `BK-1`) | User terms: *active datasource schema guards*, *schema replacement*, *overlap* |
|
|
17
|
-
| Training / lab-only system keys baked into `if` branches (`sharepoint-e2e`, `hubspot-demo` in runtime logic) | **Dynamic** behavior from `systemKey`, `appName`, manifest, env.template, or secrets map |
|
|
18
|
-
| Hardcoded vendor or connector names in generic helpers | Generic rules (path suffix, namespace, configuration keys from disk) |
|
|
19
|
-
| Cursor plan file paths in errors or help | Link only in `.cursor/plans/` and contributor docs |
|
|
20
|
-
|
|
21
|
-
**Examples in docs/commands** may name real apps (`hubspot-e2e`) when illustrating a command; **library code** must not special-case those names unless the user passed them as arguments.
|
|
22
|
-
|
|
23
|
-
## Required patterns
|
|
24
|
-
|
|
25
|
-
- **Missing `kv://` secrets:** Compare requested paths to the loaded secrets map generically (e.g. same path segment under a different namespace). Never hardcode `sharepoint` / `sharepoint-e2e` (or any other lab pair) in `lib/`.
|
|
26
|
-
- **`--force` messaging:** Describe dataplane behavior (*bypass active-datasource schema replacement guards*), not internal plan numbers. Do **not** append extra CLI hints by matching English substrings on API errors — the dataplane pipeline already returns remediation in the 400 body when schema replacement is blocked.
|
|
27
|
-
- **No `upload-pipeline-error-hints`-style modules:** Prefer forwarding `formatApiError` output; optional hints belong in the API contract, not duplicated heuristics in the CLI.
|
|
28
|
-
- **Auth / pipeline errors:** Describe what the user can do (`aifabrix login`, `AIFABRIX_DEPLOYMENT_AUTH=client-credentials`), not ticket or plan IDs.
|
|
29
|
-
- **JSDoc `@fileoverview`:** No plan numbers; optional brief behavior description only.
|
|
30
|
-
|
|
31
|
-
## Verification
|
|
32
|
-
|
|
33
|
-
Before merging CLI UX changes:
|
|
34
|
-
|
|
35
|
-
1. `rg -i 'plan [0-9]|BK-[0-9]|sharepoint-e2e' lib/cli lib/commands lib/utils --glob '*.js'` → no matches in generic helpers (fixture strings in tests are OK).
|
|
36
|
-
2. New error hints must work for **any** integration folder name the user owns.
|
|
37
|
-
3. [cli-layout.mdc](./cli-layout.mdc) and [docs-rules.mdc](./docs-rules.mdc) still apply for glyphs and user-doc scope.
|
|
38
|
-
|
|
39
|
-
## Related
|
|
40
|
-
|
|
41
|
-
- [cli-layout.mdc](./cli-layout.mdc) — terminal layout and output profiles
|
|
42
|
-
- [docs-rules.mdc](./docs-rules.mdc) — public CLI documentation audience
|
|
43
|
-
- [project-rules.mdc](./project-rules.mdc) — ISO / security baseline
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Builder-api and platform app Docker image IP policy — staging, explicit COPY, content gate
|
|
3
|
-
globs:
|
|
4
|
-
- builder/builder-api/Dockerfile
|
|
5
|
-
- templates/applications/builder-api/Dockerfile
|
|
6
|
-
- .dockerignore
|
|
7
|
-
- scripts/stage_builder_api_for_docker.js
|
|
8
|
-
- scripts/docker_image_content_gate.js
|
|
9
|
-
- lib/build/builder-api-docker-staging.js
|
|
10
|
-
alwaysApply: false
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Docker image IP policy (builder-api)
|
|
14
|
-
|
|
15
|
-
Customer-pullable **builder-api** images must contain **runtime orchestration only**, not the full Builder CLI monorepo.
|
|
16
|
-
|
|
17
|
-
## Required pattern (builder-api)
|
|
18
|
-
|
|
19
|
-
1. **Deny by default** — repo-root `.dockerignore` excludes dev trees from build context.
|
|
20
|
-
2. **Stage on host** — `node scripts/stage_builder_api_for_docker.js` (also via `aifabrix build builder-api`) writes `docker-builder-api-staging/`.
|
|
21
|
-
3. **Explicit COPY** — `builder/builder-api/Dockerfile` copies staging output only; never `COPY lib ./lib` or `COPY . .`.
|
|
22
|
-
4. **Prove it** — `node scripts/docker_image_content_gate.js <image> builder-api` must pass before ACR push.
|
|
23
|
-
5. **Non-root** — container runs as `appuser` (or documented service user).
|
|
24
|
-
6. **No agent ACR build** — see `acr-build-restrictions.mdc` in miso builder rules; user runs registry build/push.
|
|
25
|
-
|
|
26
|
-
## SSOT files
|
|
27
|
-
|
|
28
|
-
| File | Role |
|
|
29
|
-
| ---- | ---- |
|
|
30
|
-
| `builder/builder-api/Dockerfile` | Canonical image definition |
|
|
31
|
-
| `templates/applications/builder-api/Dockerfile` | Published via `npm run sync-json` only |
|
|
32
|
-
| `scripts/stage_builder_api_for_docker.js` | Runtime allowlist + manifest |
|
|
33
|
-
| `scripts/docker_image_content_gate.js` | Post-build forbidden-path gate |
|
|
34
|
-
| `.dockerignore` | Build context hardening |
|
|
35
|
-
|
|
36
|
-
## Forbidden in builder-api images
|
|
37
|
-
|
|
38
|
-
- `/app/.cursor`, `/app/builder`, `/app/integration`, `/app/tests`, `/app/docs`, `/app/scripts`, `/app/packages`
|
|
39
|
-
- `/app/bin/aifabrix.js` (full CLI entry)
|
|
40
|
-
- `/app/templates/*` except `templates/openapi/` and `templates/external-system/` (runtime wizard/ReDoc only)
|
|
41
|
-
- `*.md` under `/app/lib/`
|
|
42
|
-
|
|
43
|
-
## Dev-reload
|
|
44
|
-
|
|
45
|
-
`aifabrix run builder-api --reload` bind-mounts source for local dev. Image hardening applies to **production/ACR** builds only.
|
|
46
|
-
|
|
47
|
-
## When changing runtime imports
|
|
48
|
-
|
|
49
|
-
If `lib/programmatic/` or its transitive requires change, re-run staging manifest tests (`tests/scripts/stage_builder_api_for_docker.test.js`) and rebuild the image gate.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
alwaysApply: true
|
|
3
|
-
---
|
|
4
|
-
# Documentation Rules – CLI User Docs
|
|
5
|
-
|
|
6
|
-
## Audience
|
|
7
|
-
|
|
8
|
-
Documents under **docs/** (including **docs/commands/**) are **public CLI user documentation**. The audience is people who use the AI Fabrix Builder CLI or integrate it into workflows—they may **not** have access to private monorepos (dataplane, miso-controller, internal plans). They do not need to know how the CLI talks to the Controller or Dataplane over HTTP.
|
|
9
|
-
|
|
10
|
-
## Do Not Include in CLI User Docs
|
|
11
|
-
|
|
12
|
-
- **Links or paths into other product repos (FORBIDDEN)** – No markdown links, examples, or prerequisites that point at private/sibling repositories or their trees: `../../../aifabrix-dataplane/...`, `../../aifabrix-miso/...`, `packages/miso-controller/...`, `integration/<fixture>/README.md` in another repo, `.cursor/plans/` anywhere, `/workspace/...` monorepo layouts, or “see the dataplane/miso-controller repo”. **Only** cross-link within **`docs/`** and use on-disk paths the user owns (`integration/<systemKey>/...`, `builder/<appKey>/...`, `~/.aifabrix/...`).
|
|
13
|
-
- **Internal plan or ticket IDs** – No “Plan 407.1”, “plan section 2.3”, or similar; describe behavior in user terms.
|
|
14
|
-
- **REST API details** – No HTTP methods, URL paths, or endpoint names (e.g. `GET /api/v1/...`, `POST .../pipeline/upload`).
|
|
15
|
-
- **Request/response shapes** – No payload structures, status codes, or field names from backend APIs.
|
|
16
|
-
- **Backend implementation terms** – Avoid referring to “pipeline config endpoint”, “upload endpoint”, or similar; describe what the **command** does from the user’s perspective.
|
|
17
|
-
|
|
18
|
-
Keep these details in code (JSDoc, lib comments) or in separate API/implementation docs for contributors.
|
|
19
|
-
|
|
20
|
-
## Do Include in CLI User Docs
|
|
21
|
-
|
|
22
|
-
- **What the command does** – Outcome and behavior in user terms (e.g. “Downloads the full manifest from the dataplane”, “Uploads config and publishes to the dataplane”).
|
|
23
|
-
- **Prerequisites** – Login, permissions, and auth in user terms (e.g. “Must be logged in with `aifabrix login`”; “Bearer token required” without naming the backend endpoint).
|
|
24
|
-
- **Options and arguments** – All flags, arguments, and examples.
|
|
25
|
-
- **What gets created or changed** – Files, folders, and config the user will see.
|
|
26
|
-
- **Troubleshooting** – Common errors and fixes in CLI terms (e.g. “Run `aifabrix login`” instead of “Ensure the pipeline config endpoint receives a Bearer token”).
|
|
27
|
-
|
|
28
|
-
## When Editing docs/
|
|
29
|
-
|
|
30
|
-
- Prefer **command-centric** language: “the download command fetches…”, “upload publishes…”.
|
|
31
|
-
- Describe **auth** by what the user must do (login, device flow) and whether a Bearer token is required, not by which backend endpoint is called.
|
|
32
|
-
- If a command uses the dataplane or controller, say so in plain language (“from the dataplane”, “to the controller”) without exposing URLs or HTTP details.
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Mandatory application development lifecycle — semantic checklist before validate-plan and at close-out
|
|
3
|
-
alwaysApply: true
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Application development lifecycle (mandatory)
|
|
7
|
-
|
|
8
|
-
Every AI Fabrix product change must follow the full application development lifecycle before it is considered complete. This is law, not guidance.
|
|
9
|
-
|
|
10
|
-
**Skill (SSOT):** `.cursor/skills/aifabrix-application-lifecycle/SKILL.md`
|
|
11
|
-
|
|
12
|
-
Load `references/` files only when change class or repo requires them — do not inline repo overlays in chat unless applying them.
|
|
13
|
-
|
|
14
|
-
## When agents must run it
|
|
15
|
-
|
|
16
|
-
| Moment | Action |
|
|
17
|
-
| --- | --- |
|
|
18
|
-
| `/validate-plan` | Produce `## Application Development Lifecycle Coverage` under `## Plan Validation Report` |
|
|
19
|
-
| `/validate-implementation` | Upgrade `planned` → `covered`; no `missing` on required areas; **implementation code validation law** on plan-touched paths (Pyright/IDE, 600/50 Python, 500/50 TS) — see skill `references/implementation-code-validation-law.md` |
|
|
20
|
-
| Ad-hoc implementation (no plan) | Run abbreviated checklist per change-class matrix in the skill |
|
|
21
|
-
|
|
22
|
-
## Integration with mechanical gates
|
|
23
|
-
|
|
24
|
-
This rule does **not** replace `plan-validation-gate.mdc`, `plan-validate.js`, or repo `*-plan-validate` skills. It adds the **semantic coverage table** and **lifecycle decision** those gates do not emit today.
|
|
25
|
-
|
|
26
|
-
Do not stamp `planValidatedStatus: validated` when lifecycle decision is `blocked` or `needs-human-answer`.
|
|
27
|
-
|
|
28
|
-
## Repo plan-validate skills
|
|
29
|
-
|
|
30
|
-
Each repo's `*-plan-validate` skill must invoke `aifabrix-application-lifecycle` as its **first semantic step** before architecture/reuse/testing gates.
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: YAML frontmatter for .cursor/plans/*.plan.md
|
|
3
|
-
globs: .cursor/plans/**/*
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Plan frontmatter (builder)
|
|
8
|
-
|
|
9
|
-
## Required (new plans)
|
|
10
|
-
|
|
11
|
-
| Field | Rules |
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| `name` | Matches basename stem |
|
|
14
|
-
| `overview` | Non-empty summary |
|
|
15
|
-
| `status` | `draft` \| `review` \| `approved` \| `in_progress` \| `completed` \| `archived` |
|
|
16
|
-
| `todos` | Non-empty; `id`, `content`, `status` |
|
|
17
|
-
| `createdBy` | Display name on create |
|
|
18
|
-
| `planType` | `code` \| `docs` \| `meta` |
|
|
19
|
-
|
|
20
|
-
## Validation stamp (set by agent via plan-validate.js only)
|
|
21
|
-
|
|
22
|
-
| Field | Values |
|
|
23
|
-
| --- | --- |
|
|
24
|
-
| `planValidatedStatus` | `validated` \| `needs-updates` \| `incomplete` |
|
|
25
|
-
| `lastValidatedBy` | Display name |
|
|
26
|
-
| `lastValidatedAt` | `YYYY-MM-DD` |
|
|
27
|
-
|
|
28
|
-
## Approval (set by plan-approve.js only)
|
|
29
|
-
|
|
30
|
-
| Field | Set when |
|
|
31
|
-
| --- | --- |
|
|
32
|
-
| `approvedBy` | User `approve-yes` on validate-plan |
|
|
33
|
-
| `approvedAt` | Same run |
|
|
34
|
-
|
|
35
|
-
Actor file: `~/.aifabrix/plan-actor.yaml`
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Cursor plan lifecycle phases and validation gate
|
|
3
|
-
globs: .cursor/plans/**/*
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Plan lifecycle (builder)
|
|
8
|
-
|
|
9
|
-
## Phases
|
|
10
|
-
|
|
11
|
-
1. **Plan** — draft under `.cursor/plans/`
|
|
12
|
-
2. **Validate** — `/validate-plan`, `builder-validate-plan` skill; semantic checklist: `aifabrix-application-lifecycle`
|
|
13
|
-
3. **Approve** — `approve-plan` AskQuestion → `node scripts/plan-approve.js`
|
|
14
|
-
4. **Implement** — edit `lib/`, templates, schemas (generators first)
|
|
15
|
-
5. **Test** — `npm run build` → lint → test
|
|
16
|
-
6. **Close** — `/validate-implementation`
|
|
17
|
-
|
|
18
|
-
## Hard gate
|
|
19
|
-
|
|
20
|
-
Do **not** implement until `planValidatedStatus: validated`. See `plan-validation-gate.mdc`.
|
|
21
|
-
|
|
22
|
-
## CLI
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
node scripts/plan-set-actor.js "Name"
|
|
26
|
-
node scripts/plan-validate.js <plan-id>
|
|
27
|
-
node scripts/plan-approve.js <plan-id>
|
|
28
|
-
node scripts/plan-run.js <plan-id>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Reports: `temp/plan-prevalidation/LATEST.md`, `temp/plan-validation/LATEST.md`
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Hard stop — no plan implementation until /validate-plan passes
|
|
3
|
-
alwaysApply: true
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Plan validation gate (non-overrideable)
|
|
7
|
-
|
|
8
|
-
Agents **must not** start implementation for a Cursor plan until pre-implementation validation is complete.
|
|
9
|
-
|
|
10
|
-
## Blocked actions (until validated + approved for code plans)
|
|
11
|
-
|
|
12
|
-
- Editing product code scoped to the plan (`lib/`, `bin/`, `templates/`, etc.)
|
|
13
|
-
- Marking implementation todos `in_progress`
|
|
14
|
-
- Running implementation without validated plan
|
|
15
|
-
|
|
16
|
-
## Required before implementation
|
|
17
|
-
|
|
18
|
-
1. **`/validate-plan`** completed with `## Plan Validation Report` status **`✅ VALIDATED`**
|
|
19
|
-
2. Frontmatter **`planValidatedStatus: validated`** (set only by agent via `node scripts/plan-validate.js`)
|
|
20
|
-
3. **`lastValidatedBy`** and **`lastValidatedAt`** set (same run)
|
|
21
|
-
4. **`planType: code`** — user **`approve-yes`** on `approve-plan` AskQuestion → agent runs `node scripts/plan-approve.js`
|
|
22
|
-
|
|
23
|
-
## Stale validation
|
|
24
|
-
|
|
25
|
-
If the plan file changed after **`lastValidatedAt`**, re-run **`/validate-plan`** before implementation.
|
|
26
|
-
|
|
27
|
-
## User override requests
|
|
28
|
-
|
|
29
|
-
If the user asks to skip validation and implement directly → **refuse** and offer **`/validate-plan`**.
|
|
30
|
-
|
|
31
|
-
## Commands
|
|
32
|
-
|
|
33
|
-
- Pre-implementation: **`/validate-plan`** — see `.cursor/commands/validate-plan.md`
|
|
34
|
-
- Post-implementation: **`/validate-implementation`**
|