@productbrain/cli 0.1.0-beta.1 → 0.1.0-beta.102
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/README.md +127 -0
- package/dist/__tests__/adapters.test.d.ts +2 -0
- package/dist/__tests__/adapters.test.d.ts.map +1 -0
- package/dist/__tests__/adapters.test.js +417 -0
- package/dist/__tests__/adapters.test.js.map +1 -0
- package/dist/__tests__/audit.test.d.ts +2 -0
- package/dist/__tests__/audit.test.d.ts.map +1 -0
- package/dist/__tests__/audit.test.js +394 -0
- package/dist/__tests__/audit.test.js.map +1 -0
- package/dist/__tests__/authority-domains.test.d.ts +2 -0
- package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
- package/dist/__tests__/authority-domains.test.js +48 -0
- package/dist/__tests__/authority-domains.test.js.map +1 -0
- package/dist/__tests__/batch-transformations.test.d.ts +2 -0
- package/dist/__tests__/batch-transformations.test.d.ts.map +1 -0
- package/dist/__tests__/batch-transformations.test.js +263 -0
- package/dist/__tests__/batch-transformations.test.js.map +1 -0
- package/dist/__tests__/capture.test.d.ts +2 -0
- package/dist/__tests__/capture.test.d.ts.map +1 -0
- package/dist/__tests__/capture.test.js +377 -0
- package/dist/__tests__/capture.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +8 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +296 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/constants.test.d.ts +2 -0
- package/dist/__tests__/constants.test.d.ts.map +1 -0
- package/dist/__tests__/constants.test.js +141 -0
- package/dist/__tests__/constants.test.js.map +1 -0
- package/dist/__tests__/constellation.test.d.ts +2 -0
- package/dist/__tests__/constellation.test.d.ts.map +1 -0
- package/dist/__tests__/constellation.test.js +254 -0
- package/dist/__tests__/constellation.test.js.map +1 -0
- package/dist/__tests__/context-strategy.test.d.ts +2 -0
- package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
- package/dist/__tests__/context-strategy.test.js +79 -0
- package/dist/__tests__/context-strategy.test.js.map +1 -0
- package/dist/__tests__/envelope-contract.test.d.ts +15 -0
- package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
- package/dist/__tests__/envelope-contract.test.js +126 -0
- package/dist/__tests__/envelope-contract.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +117 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/experiment.test.d.ts +6 -0
- package/dist/__tests__/experiment.test.d.ts.map +1 -0
- package/dist/__tests__/experiment.test.js +69 -0
- package/dist/__tests__/experiment.test.js.map +1 -0
- package/dist/__tests__/fields.test.d.ts +2 -0
- package/dist/__tests__/fields.test.d.ts.map +1 -0
- package/dist/__tests__/fields.test.js +238 -0
- package/dist/__tests__/fields.test.js.map +1 -0
- package/dist/__tests__/glossary.test.d.ts +2 -0
- package/dist/__tests__/glossary.test.d.ts.map +1 -0
- package/dist/__tests__/glossary.test.js +32 -0
- package/dist/__tests__/glossary.test.js.map +1 -0
- package/dist/__tests__/handshake-preview.test.d.ts +2 -0
- package/dist/__tests__/handshake-preview.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-preview.test.js +279 -0
- package/dist/__tests__/handshake-preview.test.js.map +1 -0
- package/dist/__tests__/handshake.test.d.ts +2 -0
- package/dist/__tests__/handshake.test.d.ts.map +1 -0
- package/dist/__tests__/handshake.test.js +555 -0
- package/dist/__tests__/handshake.test.js.map +1 -0
- package/dist/__tests__/hook-intents.test.d.ts +2 -0
- package/dist/__tests__/hook-intents.test.d.ts.map +1 -0
- package/dist/__tests__/hook-intents.test.js +184 -0
- package/dist/__tests__/hook-intents.test.js.map +1 -0
- package/dist/__tests__/ingest.test.d.ts +2 -0
- package/dist/__tests__/ingest.test.d.ts.map +1 -0
- package/dist/__tests__/ingest.test.js +185 -0
- package/dist/__tests__/ingest.test.js.map +1 -0
- package/dist/__tests__/init.test.d.ts +7 -0
- package/dist/__tests__/init.test.d.ts.map +1 -0
- package/dist/__tests__/init.test.js +146 -0
- package/dist/__tests__/init.test.js.map +1 -0
- package/dist/__tests__/login.test.d.ts +2 -0
- package/dist/__tests__/login.test.d.ts.map +1 -0
- package/dist/__tests__/login.test.js +167 -0
- package/dist/__tests__/login.test.js.map +1 -0
- package/dist/__tests__/manifest.test.d.ts +6 -0
- package/dist/__tests__/manifest.test.d.ts.map +1 -0
- package/dist/__tests__/manifest.test.js +138 -0
- package/dist/__tests__/manifest.test.js.map +1 -0
- package/dist/__tests__/method-registry.integration.test.d.ts +6 -0
- package/dist/__tests__/method-registry.integration.test.d.ts.map +1 -0
- package/dist/__tests__/method-registry.integration.test.js +18 -0
- package/dist/__tests__/method-registry.integration.test.js.map +1 -0
- package/dist/__tests__/method-registry.test.d.ts +14 -0
- package/dist/__tests__/method-registry.test.d.ts.map +1 -0
- package/dist/__tests__/method-registry.test.js +134 -0
- package/dist/__tests__/method-registry.test.js.map +1 -0
- package/dist/__tests__/onboarding-path-b.test.d.ts +2 -0
- package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
- package/dist/__tests__/onboarding-path-b.test.js +46 -0
- package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
- package/dist/__tests__/onboarding.test.d.ts +6 -0
- package/dist/__tests__/onboarding.test.d.ts.map +1 -0
- package/dist/__tests__/onboarding.test.js +347 -0
- package/dist/__tests__/onboarding.test.js.map +1 -0
- package/dist/__tests__/orient.test.d.ts +2 -0
- package/dist/__tests__/orient.test.d.ts.map +1 -0
- package/dist/__tests__/orient.test.js +196 -0
- package/dist/__tests__/orient.test.js.map +1 -0
- package/dist/__tests__/personal-layer.test.d.ts +12 -0
- package/dist/__tests__/personal-layer.test.d.ts.map +1 -0
- package/dist/__tests__/personal-layer.test.js +304 -0
- package/dist/__tests__/personal-layer.test.js.map +1 -0
- package/dist/__tests__/profiles.test.d.ts +2 -0
- package/dist/__tests__/profiles.test.d.ts.map +1 -0
- package/dist/__tests__/profiles.test.js +212 -0
- package/dist/__tests__/profiles.test.js.map +1 -0
- package/dist/__tests__/promote.test.d.ts +2 -0
- package/dist/__tests__/promote.test.d.ts.map +1 -0
- package/dist/__tests__/promote.test.js +230 -0
- package/dist/__tests__/promote.test.js.map +1 -0
- package/dist/__tests__/prompts.test.d.ts +6 -0
- package/dist/__tests__/prompts.test.d.ts.map +1 -0
- package/dist/__tests__/prompts.test.js +146 -0
- package/dist/__tests__/prompts.test.js.map +1 -0
- package/dist/__tests__/proposals.test.d.ts +2 -0
- package/dist/__tests__/proposals.test.d.ts.map +1 -0
- package/dist/__tests__/proposals.test.js +167 -0
- package/dist/__tests__/proposals.test.js.map +1 -0
- package/dist/__tests__/relate.test.d.ts +2 -0
- package/dist/__tests__/relate.test.d.ts.map +1 -0
- package/dist/__tests__/relate.test.js +103 -0
- package/dist/__tests__/relate.test.js.map +1 -0
- package/dist/__tests__/repo-detect.test.d.ts +2 -0
- package/dist/__tests__/repo-detect.test.d.ts.map +1 -0
- package/dist/__tests__/repo-detect.test.js +215 -0
- package/dist/__tests__/repo-detect.test.js.map +1 -0
- package/dist/__tests__/runner.test.d.ts +2 -0
- package/dist/__tests__/runner.test.d.ts.map +1 -0
- package/dist/__tests__/runner.test.js +219 -0
- package/dist/__tests__/runner.test.js.map +1 -0
- package/dist/__tests__/session-state-machine.test.d.ts +2 -0
- package/dist/__tests__/session-state-machine.test.d.ts.map +1 -0
- package/dist/__tests__/session-state-machine.test.js +154 -0
- package/dist/__tests__/session-state-machine.test.js.map +1 -0
- package/dist/__tests__/session-touch.test.d.ts +2 -0
- package/dist/__tests__/session-touch.test.d.ts.map +1 -0
- package/dist/__tests__/session-touch.test.js +134 -0
- package/dist/__tests__/session-touch.test.js.map +1 -0
- package/dist/__tests__/session.test.d.ts +2 -0
- package/dist/__tests__/session.test.d.ts.map +1 -0
- package/dist/__tests__/session.test.js +46 -0
- package/dist/__tests__/session.test.js.map +1 -0
- package/dist/__tests__/setup-ingest.test.d.ts +2 -0
- package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
- package/dist/__tests__/setup-ingest.test.js +55 -0
- package/dist/__tests__/setup-ingest.test.js.map +1 -0
- package/dist/__tests__/setup-resolver.test.d.ts +14 -0
- package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/setup-resolver.test.js +228 -0
- package/dist/__tests__/setup-resolver.test.js.map +1 -0
- package/dist/__tests__/setup.test.d.ts +2 -0
- package/dist/__tests__/setup.test.d.ts.map +1 -0
- package/dist/__tests__/setup.test.js +141 -0
- package/dist/__tests__/setup.test.js.map +1 -0
- package/dist/__tests__/spinner-labels.test.d.ts +2 -0
- package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
- package/dist/__tests__/spinner-labels.test.js +23 -0
- package/dist/__tests__/spinner-labels.test.js.map +1 -0
- package/dist/__tests__/state.test.d.ts +6 -0
- package/dist/__tests__/state.test.d.ts.map +1 -0
- package/dist/__tests__/state.test.js +97 -0
- package/dist/__tests__/state.test.js.map +1 -0
- package/dist/__tests__/strip.test.d.ts +2 -0
- package/dist/__tests__/strip.test.d.ts.map +1 -0
- package/dist/__tests__/strip.test.js +136 -0
- package/dist/__tests__/strip.test.js.map +1 -0
- package/dist/__tests__/surface-profiles.test.d.ts +2 -0
- package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
- package/dist/__tests__/surface-profiles.test.js +233 -0
- package/dist/__tests__/surface-profiles.test.js.map +1 -0
- package/dist/__tests__/surfaces.test.d.ts +2 -0
- package/dist/__tests__/surfaces.test.d.ts.map +1 -0
- package/dist/__tests__/surfaces.test.js +46 -0
- package/dist/__tests__/surfaces.test.js.map +1 -0
- package/dist/__tests__/update.test.d.ts +2 -0
- package/dist/__tests__/update.test.d.ts.map +1 -0
- package/dist/__tests__/update.test.js +228 -0
- package/dist/__tests__/update.test.js.map +1 -0
- package/dist/__tests__/workspace.test.d.ts +2 -0
- package/dist/__tests__/workspace.test.d.ts.map +1 -0
- package/dist/__tests__/workspace.test.js +328 -0
- package/dist/__tests__/workspace.test.js.map +1 -0
- package/dist/commands/accept.d.ts +18 -0
- package/dist/commands/accept.d.ts.map +1 -0
- package/dist/commands/accept.js +76 -0
- package/dist/commands/accept.js.map +1 -0
- package/dist/commands/admin/cockpit.d.ts +90 -0
- package/dist/commands/admin/cockpit.d.ts.map +1 -0
- package/dist/commands/admin/cockpit.js +618 -0
- package/dist/commands/admin/cockpit.js.map +1 -0
- package/dist/commands/admin/index.d.ts +21 -0
- package/dist/commands/admin/index.d.ts.map +1 -0
- package/dist/commands/admin/index.js +256 -0
- package/dist/commands/admin/index.js.map +1 -0
- package/dist/commands/admin/inspect.d.ts +30 -0
- package/dist/commands/admin/inspect.d.ts.map +1 -0
- package/dist/commands/admin/inspect.js +555 -0
- package/dist/commands/admin/inspect.js.map +1 -0
- package/dist/commands/admin/inspect.test.d.ts +7 -0
- package/dist/commands/admin/inspect.test.d.ts.map +1 -0
- package/dist/commands/admin/inspect.test.js +90 -0
- package/dist/commands/admin/inspect.test.js.map +1 -0
- package/dist/commands/admin/manage.d.ts +8 -0
- package/dist/commands/admin/manage.d.ts.map +1 -0
- package/dist/commands/admin/manage.js +76 -0
- package/dist/commands/admin/manage.js.map +1 -0
- package/dist/commands/admin/seed.d.ts +46 -0
- package/dist/commands/admin/seed.d.ts.map +1 -0
- package/dist/commands/admin/seed.js +729 -0
- package/dist/commands/admin/seed.js.map +1 -0
- package/dist/commands/admin/seed.test.d.ts +11 -0
- package/dist/commands/admin/seed.test.d.ts.map +1 -0
- package/dist/commands/admin/seed.test.js +123 -0
- package/dist/commands/admin/seed.test.js.map +1 -0
- package/dist/commands/audit.d.ts +25 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +188 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/authority-domains.d.ts +140 -0
- package/dist/commands/authority-domains.d.ts.map +1 -0
- package/dist/commands/authority-domains.js +268 -0
- package/dist/commands/authority-domains.js.map +1 -0
- package/dist/commands/brand-pack.d.ts +2 -0
- package/dist/commands/brand-pack.d.ts.map +1 -0
- package/dist/commands/brand-pack.js +25 -0
- package/dist/commands/brand-pack.js.map +1 -0
- package/dist/commands/brief.d.ts +28 -0
- package/dist/commands/brief.d.ts.map +1 -0
- package/dist/commands/brief.js +75 -0
- package/dist/commands/brief.js.map +1 -0
- package/dist/commands/capture.d.ts +30 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +339 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/chain-walk.d.ts +14 -0
- package/dist/commands/chain-walk.d.ts.map +1 -0
- package/dist/commands/chain-walk.js +38 -0
- package/dist/commands/chain-walk.js.map +1 -0
- package/dist/commands/changes.d.ts +11 -0
- package/dist/commands/changes.d.ts.map +1 -0
- package/dist/commands/changes.js +46 -0
- package/dist/commands/changes.js.map +1 -0
- package/dist/commands/codex-prep.d.ts +12 -0
- package/dist/commands/codex-prep.d.ts.map +1 -0
- package/dist/commands/codex-prep.js +122 -0
- package/dist/commands/codex-prep.js.map +1 -0
- package/dist/commands/collections.d.ts +22 -0
- package/dist/commands/collections.d.ts.map +1 -0
- package/dist/commands/collections.js +77 -0
- package/dist/commands/collections.js.map +1 -0
- package/dist/commands/connect-integration.test.d.ts +7 -0
- package/dist/commands/connect-integration.test.d.ts.map +1 -0
- package/dist/commands/connect-integration.test.js +211 -0
- package/dist/commands/connect-integration.test.js.map +1 -0
- package/dist/commands/connect-screens.d.ts +24 -0
- package/dist/commands/connect-screens.d.ts.map +1 -0
- package/dist/commands/connect-screens.js +97 -0
- package/dist/commands/connect-screens.js.map +1 -0
- package/dist/commands/connect.d.ts +23 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +289 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/connect.test.d.ts +6 -0
- package/dist/commands/connect.test.d.ts.map +1 -0
- package/dist/commands/connect.test.js +297 -0
- package/dist/commands/connect.test.js.map +1 -0
- package/dist/commands/constellation.d.ts +11 -0
- package/dist/commands/constellation.d.ts.map +1 -0
- package/dist/commands/constellation.js +33 -0
- package/dist/commands/constellation.js.map +1 -0
- package/dist/commands/context.d.ts +2 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +25 -10
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/cross-cut.d.ts +11 -0
- package/dist/commands/cross-cut.d.ts.map +1 -0
- package/dist/commands/cross-cut.js +23 -0
- package/dist/commands/cross-cut.js.map +1 -0
- package/dist/commands/doctor.d.ts +18 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +232 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/doctor.test.d.ts +8 -0
- package/dist/commands/doctor.test.d.ts.map +1 -0
- package/dist/commands/doctor.test.js +311 -0
- package/dist/commands/doctor.test.js.map +1 -0
- package/dist/commands/fields.d.ts +9 -0
- package/dist/commands/fields.d.ts.map +1 -0
- package/dist/commands/fields.js +30 -0
- package/dist/commands/fields.js.map +1 -0
- package/dist/commands/get.d.ts +8 -1
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +65 -8
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/handshake.d.ts +142 -0
- package/dist/commands/handshake.d.ts.map +1 -0
- package/dist/commands/handshake.js +1349 -0
- package/dist/commands/handshake.js.map +1 -0
- package/dist/commands/ingest.d.ts +14 -0
- package/dist/commands/ingest.d.ts.map +1 -0
- package/dist/commands/ingest.js +189 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +109 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +9 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +116 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/method.d.ts +99 -0
- package/dist/commands/method.d.ts.map +1 -0
- package/dist/commands/method.js +781 -0
- package/dist/commands/method.js.map +1 -0
- package/dist/commands/migrate-setup.d.ts +18 -0
- package/dist/commands/migrate-setup.d.ts.map +1 -0
- package/dist/commands/migrate-setup.js +198 -0
- package/dist/commands/migrate-setup.js.map +1 -0
- package/dist/commands/orient.d.ts +109 -1
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +94 -7
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/profile.d.ts +47 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +148 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/promote.d.ts +12 -0
- package/dist/commands/promote.d.ts.map +1 -0
- package/dist/commands/promote.js +113 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/proposals.d.ts +9 -0
- package/dist/commands/proposals.d.ts.map +1 -0
- package/dist/commands/proposals.js +24 -0
- package/dist/commands/proposals.js.map +1 -0
- package/dist/commands/reject.d.ts +14 -0
- package/dist/commands/reject.d.ts.map +1 -0
- package/dist/commands/reject.js +43 -0
- package/dist/commands/reject.js.map +1 -0
- package/dist/commands/relate.d.ts +16 -0
- package/dist/commands/relate.d.ts.map +1 -0
- package/dist/commands/relate.js +111 -0
- package/dist/commands/relate.js.map +1 -0
- package/dist/commands/search.d.ts +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +10 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session.d.ts +20 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +203 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup-ingest.d.ts +17 -0
- package/dist/commands/setup-ingest.d.ts.map +1 -0
- package/dist/commands/setup-ingest.js +224 -0
- package/dist/commands/setup-ingest.js.map +1 -0
- package/dist/commands/setup-resolver.d.ts +58 -0
- package/dist/commands/setup-resolver.d.ts.map +1 -0
- package/dist/commands/setup-resolver.js +150 -0
- package/dist/commands/setup-resolver.js.map +1 -0
- package/dist/commands/setup.d.ts +15 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +148 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/update.d.ts +17 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +178 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/usage.d.ts +40 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +232 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/verify.d.ts +13 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +49 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/welcome.d.ts +21 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +50 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/commands/workspace.d.ts +113 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +263 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/formatters/audit.d.ts +46 -0
- package/dist/formatters/audit.d.ts.map +1 -0
- package/dist/formatters/audit.js +81 -0
- package/dist/formatters/audit.js.map +1 -0
- package/dist/formatters/brief.d.ts +112 -0
- package/dist/formatters/brief.d.ts.map +1 -0
- package/dist/formatters/brief.js +179 -0
- package/dist/formatters/brief.js.map +1 -0
- package/dist/formatters/capture.d.ts +48 -0
- package/dist/formatters/capture.d.ts.map +1 -0
- package/dist/formatters/capture.js +77 -0
- package/dist/formatters/capture.js.map +1 -0
- package/dist/formatters/chain-walk.d.ts +33 -0
- package/dist/formatters/chain-walk.d.ts.map +1 -0
- package/dist/formatters/chain-walk.js +54 -0
- package/dist/formatters/chain-walk.js.map +1 -0
- package/dist/formatters/changes.d.ts +25 -0
- package/dist/formatters/changes.d.ts.map +1 -0
- package/dist/formatters/changes.js +60 -0
- package/dist/formatters/changes.js.map +1 -0
- package/dist/formatters/collections.d.ts +40 -0
- package/dist/formatters/collections.d.ts.map +1 -0
- package/dist/formatters/collections.js +93 -0
- package/dist/formatters/collections.js.map +1 -0
- package/dist/formatters/constellation.d.ts +34 -0
- package/dist/formatters/constellation.d.ts.map +1 -0
- package/dist/formatters/constellation.js +38 -0
- package/dist/formatters/constellation.js.map +1 -0
- package/dist/formatters/cross-cut.d.ts +21 -0
- package/dist/formatters/cross-cut.d.ts.map +1 -0
- package/dist/formatters/cross-cut.js +32 -0
- package/dist/formatters/cross-cut.js.map +1 -0
- package/dist/formatters/entry.d.ts +11 -4
- package/dist/formatters/entry.d.ts.map +1 -1
- package/dist/formatters/entry.js +24 -8
- package/dist/formatters/entry.js.map +1 -1
- package/dist/formatters/fields.d.ts +32 -0
- package/dist/formatters/fields.d.ts.map +1 -0
- package/dist/formatters/fields.js +49 -0
- package/dist/formatters/fields.js.map +1 -0
- package/dist/formatters/handshake.d.ts +46 -0
- package/dist/formatters/handshake.d.ts.map +1 -0
- package/dist/formatters/handshake.js +163 -0
- package/dist/formatters/handshake.js.map +1 -0
- package/dist/formatters/orient.d.ts +129 -1
- package/dist/formatters/orient.d.ts.map +1 -1
- package/dist/formatters/orient.js +156 -17
- package/dist/formatters/orient.js.map +1 -1
- package/dist/formatters/promote.d.ts +30 -0
- package/dist/formatters/promote.d.ts.map +1 -0
- package/dist/formatters/promote.js +39 -0
- package/dist/formatters/promote.js.map +1 -0
- package/dist/formatters/proposals.d.ts +45 -0
- package/dist/formatters/proposals.d.ts.map +1 -0
- package/dist/formatters/proposals.js +62 -0
- package/dist/formatters/proposals.js.map +1 -0
- package/dist/formatters/relate.d.ts +14 -0
- package/dist/formatters/relate.d.ts.map +1 -0
- package/dist/formatters/relate.js +16 -0
- package/dist/formatters/relate.js.map +1 -0
- package/dist/formatters/search.d.ts +0 -4
- package/dist/formatters/search.d.ts.map +1 -1
- package/dist/formatters/search.js +4 -1
- package/dist/formatters/search.js.map +1 -1
- package/dist/formatters/session.d.ts +11 -0
- package/dist/formatters/session.d.ts.map +1 -0
- package/dist/formatters/session.js +53 -0
- package/dist/formatters/session.js.map +1 -0
- package/dist/formatters/update.d.ts +17 -0
- package/dist/formatters/update.d.ts.map +1 -0
- package/dist/formatters/update.js +45 -0
- package/dist/formatters/update.js.map +1 -0
- package/dist/formatters/verify.d.ts +11 -0
- package/dist/formatters/verify.d.ts.map +1 -0
- package/dist/formatters/verify.js +11 -0
- package/dist/formatters/verify.js.map +1 -0
- package/dist/generators/__tests__/surface-profiles.test.d.ts +2 -0
- package/dist/generators/__tests__/surface-profiles.test.d.ts.map +1 -0
- package/dist/generators/__tests__/surface-profiles.test.js +89 -0
- package/dist/generators/__tests__/surface-profiles.test.js.map +1 -0
- package/dist/generators/adapters.d.ts +44 -0
- package/dist/generators/adapters.d.ts.map +1 -0
- package/dist/generators/adapters.js +290 -0
- package/dist/generators/adapters.js.map +1 -0
- package/dist/generators/adapters.test.d.ts +2 -0
- package/dist/generators/adapters.test.d.ts.map +1 -0
- package/dist/generators/adapters.test.js +27 -0
- package/dist/generators/adapters.test.js.map +1 -0
- package/dist/generators/archetypes.d.ts +52 -0
- package/dist/generators/archetypes.d.ts.map +1 -0
- package/dist/generators/archetypes.js +153 -0
- package/dist/generators/archetypes.js.map +1 -0
- package/dist/generators/archetypes.test.d.ts +2 -0
- package/dist/generators/archetypes.test.d.ts.map +1 -0
- package/dist/generators/archetypes.test.js +237 -0
- package/dist/generators/archetypes.test.js.map +1 -0
- package/dist/generators/boundary-manifest.d.ts +29 -0
- package/dist/generators/boundary-manifest.d.ts.map +1 -0
- package/dist/generators/boundary-manifest.js +183 -0
- package/dist/generators/boundary-manifest.js.map +1 -0
- package/dist/generators/boundary-manifest.test.d.ts +2 -0
- package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
- package/dist/generators/boundary-manifest.test.js +91 -0
- package/dist/generators/boundary-manifest.test.js.map +1 -0
- package/dist/generators/briefing-md.d.ts +8 -0
- package/dist/generators/briefing-md.d.ts.map +1 -0
- package/dist/generators/briefing-md.js +51 -0
- package/dist/generators/briefing-md.js.map +1 -0
- package/dist/generators/chain-classifier.d.ts +49 -0
- package/dist/generators/chain-classifier.d.ts.map +1 -0
- package/dist/generators/chain-classifier.js +180 -0
- package/dist/generators/chain-classifier.js.map +1 -0
- package/dist/generators/chain-classifier.test.d.ts +2 -0
- package/dist/generators/chain-classifier.test.d.ts.map +1 -0
- package/dist/generators/chain-classifier.test.js +257 -0
- package/dist/generators/chain-classifier.test.js.map +1 -0
- package/dist/generators/chain-rules.d.ts +42 -0
- package/dist/generators/chain-rules.d.ts.map +1 -0
- package/dist/generators/chain-rules.js +144 -0
- package/dist/generators/chain-rules.js.map +1 -0
- package/dist/generators/chain-rules.test.d.ts +2 -0
- package/dist/generators/chain-rules.test.d.ts.map +1 -0
- package/dist/generators/chain-rules.test.js +179 -0
- package/dist/generators/chain-rules.test.js.map +1 -0
- package/dist/generators/context-md.d.ts +8 -0
- package/dist/generators/context-md.d.ts.map +1 -0
- package/dist/generators/context-md.js +134 -0
- package/dist/generators/context-md.js.map +1 -0
- package/dist/generators/handshake-diff.d.ts +67 -0
- package/dist/generators/handshake-diff.d.ts.map +1 -0
- package/dist/generators/handshake-diff.js +183 -0
- package/dist/generators/handshake-diff.js.map +1 -0
- package/dist/generators/handshake-diff.test.d.ts +2 -0
- package/dist/generators/handshake-diff.test.d.ts.map +1 -0
- package/dist/generators/handshake-diff.test.js +264 -0
- package/dist/generators/handshake-diff.test.js.map +1 -0
- package/dist/generators/manifest.d.ts +39 -0
- package/dist/generators/manifest.d.ts.map +1 -0
- package/dist/generators/manifest.js +166 -0
- package/dist/generators/manifest.js.map +1 -0
- package/dist/generators/portable-knowledge.d.ts +165 -0
- package/dist/generators/portable-knowledge.d.ts.map +1 -0
- package/dist/generators/portable-knowledge.js +613 -0
- package/dist/generators/portable-knowledge.js.map +1 -0
- package/dist/generators/portable-knowledge.test.d.ts +2 -0
- package/dist/generators/portable-knowledge.test.d.ts.map +1 -0
- package/dist/generators/portable-knowledge.test.js +927 -0
- package/dist/generators/portable-knowledge.test.js.map +1 -0
- package/dist/generators/surface-profiles.d.ts +49 -0
- package/dist/generators/surface-profiles.d.ts.map +1 -0
- package/dist/generators/surface-profiles.js +98 -0
- package/dist/generators/surface-profiles.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +858 -32
- package/dist/index.js.map +1 -1
- package/dist/lib/activation.d.ts +28 -0
- package/dist/lib/activation.d.ts.map +1 -0
- package/dist/lib/activation.js +57 -0
- package/dist/lib/activation.js.map +1 -0
- package/dist/lib/activation.test.d.ts +6 -0
- package/dist/lib/activation.test.d.ts.map +1 -0
- package/dist/lib/activation.test.js +121 -0
- package/dist/lib/activation.test.js.map +1 -0
- package/dist/lib/canonicalRefs.d.ts +69 -0
- package/dist/lib/canonicalRefs.d.ts.map +1 -0
- package/dist/lib/canonicalRefs.js +83 -0
- package/dist/lib/canonicalRefs.js.map +1 -0
- package/dist/lib/client.d.ts +62 -1
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +259 -13
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/collectionRegistry.d.ts +38 -0
- package/dist/lib/collectionRegistry.d.ts.map +1 -0
- package/dist/lib/collectionRegistry.js +112 -0
- package/dist/lib/collectionRegistry.js.map +1 -0
- package/dist/lib/config.d.ts +122 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +426 -18
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/connectKeyLabel.d.ts +9 -0
- package/dist/lib/connectKeyLabel.d.ts.map +1 -0
- package/dist/lib/connectKeyLabel.js +12 -0
- package/dist/lib/connectKeyLabel.js.map +1 -0
- package/dist/lib/constants.d.ts +42 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +76 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/conversation-engine.d.ts +45 -0
- package/dist/lib/conversation-engine.d.ts.map +1 -0
- package/dist/lib/conversation-engine.js +112 -0
- package/dist/lib/conversation-engine.js.map +1 -0
- package/dist/lib/conversation-phases.d.ts +59 -0
- package/dist/lib/conversation-phases.d.ts.map +1 -0
- package/dist/lib/conversation-phases.js +11 -0
- package/dist/lib/conversation-phases.js.map +1 -0
- package/dist/lib/conversation-signals.d.ts +30 -0
- package/dist/lib/conversation-signals.d.ts.map +1 -0
- package/dist/lib/conversation-signals.js +64 -0
- package/dist/lib/conversation-signals.js.map +1 -0
- package/dist/lib/deployment.d.ts +23 -0
- package/dist/lib/deployment.d.ts.map +1 -0
- package/dist/lib/deployment.js +78 -0
- package/dist/lib/deployment.js.map +1 -0
- package/dist/lib/deployment.test.d.ts +5 -0
- package/dist/lib/deployment.test.d.ts.map +1 -0
- package/dist/lib/deployment.test.js +54 -0
- package/dist/lib/deployment.test.js.map +1 -0
- package/dist/lib/errors.d.ts +60 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +69 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/experiment.d.ts +18 -0
- package/dist/lib/experiment.d.ts.map +1 -0
- package/dist/lib/experiment.js +28 -0
- package/dist/lib/experiment.js.map +1 -0
- package/dist/lib/format.d.ts +10 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +27 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/glossary.d.ts +19 -0
- package/dist/lib/glossary.d.ts.map +1 -0
- package/dist/lib/glossary.js +53 -0
- package/dist/lib/glossary.js.map +1 -0
- package/dist/lib/hook-intents.d.ts +51 -0
- package/dist/lib/hook-intents.d.ts.map +1 -0
- package/dist/lib/hook-intents.js +85 -0
- package/dist/lib/hook-intents.js.map +1 -0
- package/dist/lib/inferSourceDate.d.ts +12 -0
- package/dist/lib/inferSourceDate.d.ts.map +1 -0
- package/dist/lib/inferSourceDate.js +44 -0
- package/dist/lib/inferSourceDate.js.map +1 -0
- package/dist/lib/method-registry.d.ts +32 -0
- package/dist/lib/method-registry.d.ts.map +1 -0
- package/dist/lib/method-registry.js +53 -0
- package/dist/lib/method-registry.js.map +1 -0
- package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
- package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
- package/dist/lib/normalizeMaterializedFilename.js +56 -0
- package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
- package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
- package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
- package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
- package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
- package/dist/lib/onboarding-path-b.d.ts +10 -0
- package/dist/lib/onboarding-path-b.d.ts.map +1 -0
- package/dist/lib/onboarding-path-b.js +214 -0
- package/dist/lib/onboarding-path-b.js.map +1 -0
- package/dist/lib/onboarding-phases.d.ts +9 -0
- package/dist/lib/onboarding-phases.d.ts.map +1 -0
- package/dist/lib/onboarding-phases.js +120 -0
- package/dist/lib/onboarding-phases.js.map +1 -0
- package/dist/lib/onboarding-shared.d.ts +81 -0
- package/dist/lib/onboarding-shared.d.ts.map +1 -0
- package/dist/lib/onboarding-shared.js +190 -0
- package/dist/lib/onboarding-shared.js.map +1 -0
- package/dist/lib/onboarding-topics.d.ts +27 -0
- package/dist/lib/onboarding-topics.d.ts.map +1 -0
- package/dist/lib/onboarding-topics.js +57 -0
- package/dist/lib/onboarding-topics.js.map +1 -0
- package/dist/lib/onboarding.d.ts +17 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +350 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/profiles.d.ts +39 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +185 -0
- package/dist/lib/profiles.js.map +1 -0
- package/dist/lib/prompts.d.ts +65 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +132 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/repo-detect.d.ts +33 -0
- package/dist/lib/repo-detect.d.ts.map +1 -0
- package/dist/lib/repo-detect.js +83 -0
- package/dist/lib/repo-detect.js.map +1 -0
- package/dist/lib/runner.d.ts +33 -0
- package/dist/lib/runner.d.ts.map +1 -0
- package/dist/lib/runner.js +79 -0
- package/dist/lib/runner.js.map +1 -0
- package/dist/lib/session.d.ts +42 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +109 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/spinner.d.ts +27 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +76 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/spinner.test.d.ts +2 -0
- package/dist/lib/spinner.test.d.ts.map +1 -0
- package/dist/lib/spinner.test.js +39 -0
- package/dist/lib/spinner.test.js.map +1 -0
- package/dist/lib/state.d.ts +51 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +90 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/strip.d.ts +12 -0
- package/dist/lib/strip.d.ts.map +1 -0
- package/dist/lib/strip.js +41 -0
- package/dist/lib/strip.js.map +1 -0
- package/dist/lib/style.d.ts +96 -0
- package/dist/lib/style.d.ts.map +1 -0
- package/dist/lib/style.js +169 -0
- package/dist/lib/style.js.map +1 -0
- package/dist/lib/style.test.d.ts +7 -0
- package/dist/lib/style.test.d.ts.map +1 -0
- package/dist/lib/style.test.js +263 -0
- package/dist/lib/style.test.js.map +1 -0
- package/dist/lib/telemetry.d.ts +15 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +47 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/tokenConstants.d.ts +17 -0
- package/dist/lib/tokenConstants.d.ts.map +1 -0
- package/dist/lib/tokenConstants.js +17 -0
- package/dist/lib/tokenConstants.js.map +1 -0
- package/dist/lib/update-check.d.ts +21 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +145 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/wizard-surfaces.d.ts +47 -0
- package/dist/lib/wizard-surfaces.d.ts.map +1 -0
- package/dist/lib/wizard-surfaces.js +176 -0
- package/dist/lib/wizard-surfaces.js.map +1 -0
- package/dist/lib/wizard-surfaces.test.d.ts +2 -0
- package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
- package/dist/lib/wizard-surfaces.test.js +127 -0
- package/dist/lib/wizard-surfaces.test.js.map +1 -0
- package/dist/lib/wizard-trust.d.ts +31 -0
- package/dist/lib/wizard-trust.d.ts.map +1 -0
- package/dist/lib/wizard-trust.js +66 -0
- package/dist/lib/wizard-trust.js.map +1 -0
- package/dist/lib/wizard-trust.test.d.ts +2 -0
- package/dist/lib/wizard-trust.test.d.ts.map +1 -0
- package/dist/lib/wizard-trust.test.js +32 -0
- package/dist/lib/wizard-trust.test.js.map +1 -0
- package/dist/lib/workspace-probe.d.ts +19 -0
- package/dist/lib/workspace-probe.d.ts.map +1 -0
- package/dist/lib/workspace-probe.js +27 -0
- package/dist/lib/workspace-probe.js.map +1 -0
- package/dist/surfaces/registry.d.ts +20 -0
- package/dist/surfaces/registry.d.ts.map +1 -0
- package/dist/surfaces/registry.js +42 -0
- package/dist/surfaces/registry.js.map +1 -0
- package/package.json +15 -5
- package/templates/archetypes/boundary.md +23 -0
- package/templates/archetypes/constraint.md +23 -0
- package/templates/archetypes/convention.md +23 -0
- package/templates/archetypes/policy.md +23 -0
- package/templates/archetypes/quality-gate.md +23 -0
- package/templates/archetypes/workflow.md +23 -0
- package/templates/general/code-integrity.md +11 -0
- package/templates/general/getting-started.md +12 -0
- package/templates/method-registry.json +16 -0
- package/templates/node-ts/code-integrity.md +13 -0
- package/templates/node-ts/testing.md +12 -0
- package/templates/python/code-integrity.md +13 -0
- package/templates/python/testing.md +12 -0
|
@@ -0,0 +1,729 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb admin seed — workspace and platform seed operations (WP-312 S3, FEAT-970).
|
|
3
|
+
*
|
|
4
|
+
* Seed metadata is duplicated from `convex/admin/commandManifest.ts` for CLI help
|
|
5
|
+
* and ordering only — behavior is enforced server-side (STD-101).
|
|
6
|
+
*/
|
|
7
|
+
import * as clack from '@clack/prompts';
|
|
8
|
+
import { adminCall } from '../../lib/client.js';
|
|
9
|
+
import { resolveAdminConfig } from '../../lib/config.js';
|
|
10
|
+
import { CLIError, ErrorCode } from '../../lib/errors.js';
|
|
11
|
+
import { ask, confirm, intro, isInteractive, log, multiselect, note, outro } from '../../lib/prompts.js';
|
|
12
|
+
import { readSession } from '../../lib/session.js';
|
|
13
|
+
import { isJsonMode } from '../../lib/runner.js';
|
|
14
|
+
import { confirmRiskNoteTitle, requiresAdminDestructiveConfirmation, seedAllConfirmMessage, seedMultiselectConfirmMessage, seedRunConfirmMessage, } from '../../lib/deployment.js';
|
|
15
|
+
import { withSpinner } from '../../lib/spinner.js';
|
|
16
|
+
import { adminBanner, bold, confirmProdAction, cyan, dim, green, heading, hint, icons, red, } from '../../lib/style.js';
|
|
17
|
+
/**
|
|
18
|
+
* Order matches `ADMIN_COMMANDS` seed block in commandManifest.ts — dependency order for `seed all`.
|
|
19
|
+
*/
|
|
20
|
+
export const SEED_COMMAND_ENTRIES = [
|
|
21
|
+
{
|
|
22
|
+
name: 'seed:artifacts',
|
|
23
|
+
description: 'Seed Artifacts collection and related glossary entries (chainId, format, audience)',
|
|
24
|
+
requiresWorkspaceId: true,
|
|
25
|
+
dryRunSupported: false,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'seed:chain-native-bet-constellation',
|
|
29
|
+
description: 'Seed the chain-native bet constellation for a workspace',
|
|
30
|
+
requiresWorkspaceId: false,
|
|
31
|
+
dryRunSupported: false,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'seed:definitions-chain',
|
|
35
|
+
description: 'Seed the definitions chain collection',
|
|
36
|
+
requiresWorkspaceId: true,
|
|
37
|
+
dryRunSupported: false,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'seed:domain-teams',
|
|
41
|
+
description: 'Seed domain teams collection entries',
|
|
42
|
+
requiresWorkspaceId: true,
|
|
43
|
+
dryRunSupported: true,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'seed:features',
|
|
47
|
+
description: 'Seed Features collection and initial trust-audit entries',
|
|
48
|
+
requiresWorkspaceId: true,
|
|
49
|
+
dryRunSupported: false,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'seed:hierarchy-tier1',
|
|
53
|
+
description: 'Apply Tier 1 hierarchy migrations (landscape thinkingLayer, key-results fields)',
|
|
54
|
+
requiresWorkspaceId: false,
|
|
55
|
+
dryRunSupported: true,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'seed:id-prefixes',
|
|
59
|
+
description: 'Seed collection ID prefixes for a workspace',
|
|
60
|
+
requiresWorkspaceId: true,
|
|
61
|
+
dryRunSupported: false,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'seed:knowledge',
|
|
65
|
+
description: 'Seed initial knowledge base (Standards, Features collections + labels)',
|
|
66
|
+
requiresWorkspaceId: true,
|
|
67
|
+
dryRunSupported: false,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'seed:methodology-preset',
|
|
71
|
+
description: 'Install a methodology preset (e.g. cagan-tt) into a workspace — requires --preset-id',
|
|
72
|
+
requiresWorkspaceId: true,
|
|
73
|
+
dryRunSupported: false,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'seed:process-templates',
|
|
77
|
+
description: 'Seed process templates collection for a workspace',
|
|
78
|
+
requiresWorkspaceId: true,
|
|
79
|
+
dryRunSupported: false,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'seed:proposals',
|
|
83
|
+
description: 'Seed governance proposals collection',
|
|
84
|
+
requiresWorkspaceId: true,
|
|
85
|
+
dryRunSupported: false,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'seed:readiness-config',
|
|
89
|
+
description: 'Migrate readiness config (readinessFloor, readinessWeight, readinessLayer) on all collections',
|
|
90
|
+
requiresWorkspaceId: false,
|
|
91
|
+
dryRunSupported: true,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'seed:semantic-types-all',
|
|
95
|
+
description: 'Seed semantic types into all workspaces (cross-workspace action)',
|
|
96
|
+
requiresWorkspaceId: false,
|
|
97
|
+
dryRunSupported: false,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'seed:migrate-scope-required-fields',
|
|
101
|
+
description: 'Fix scope semantic type: update requiredFields from description to purpose across all workspaces (TEN-346)',
|
|
102
|
+
requiresWorkspaceId: false,
|
|
103
|
+
dryRunSupported: true,
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'seed:writing-guidance',
|
|
107
|
+
description: 'Seed writing guidance entries for a workspace',
|
|
108
|
+
requiresWorkspaceId: true,
|
|
109
|
+
dryRunSupported: true,
|
|
110
|
+
},
|
|
111
|
+
// ─── WP-379 S5a: Starter Setup seed operations ─────────────────────────────
|
|
112
|
+
{
|
|
113
|
+
name: 'seed:show-starter',
|
|
114
|
+
description: 'List 18 Starter Setup assets for a workspace with body previews, lockLevel, and gate summary',
|
|
115
|
+
requiresWorkspaceId: true,
|
|
116
|
+
dryRunSupported: false,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'seed:backfill-starter',
|
|
120
|
+
description: 'Idempotent bulk seed of Starter Setup bundle across workspaces. Defaults to dry-run.',
|
|
121
|
+
requiresWorkspaceId: false,
|
|
122
|
+
dryRunSupported: true,
|
|
123
|
+
dangerous: true,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'seed:migrate-starter-fields',
|
|
127
|
+
description: 'STUB (WP-379 S5b): backfill explicit lockLevel + gate columns on existing setup-assets entries.',
|
|
128
|
+
requiresWorkspaceId: true,
|
|
129
|
+
dryRunSupported: true,
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
const SEED_BY_NAME = new Map(SEED_COMMAND_ENTRIES.map((e) => [e.name, e]));
|
|
133
|
+
/** Manifest order for `pb admin seed all`. */
|
|
134
|
+
export const SEED_MANIFEST_ORDER = SEED_COMMAND_ENTRIES.map((e) => e.name);
|
|
135
|
+
function shortLabel(manifestName) {
|
|
136
|
+
return manifestName.startsWith('seed:') ? manifestName.slice('seed:'.length) : manifestName;
|
|
137
|
+
}
|
|
138
|
+
/** Accept `knowledge` or `seed:knowledge`. */
|
|
139
|
+
export function normalizeSeedCommandName(input) {
|
|
140
|
+
const t = input.trim();
|
|
141
|
+
if (!t) {
|
|
142
|
+
throw new CLIError('Seed operation name is required.', {
|
|
143
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
144
|
+
category: 'validation',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const full = t.startsWith('seed:') ? t : `seed:${t}`;
|
|
148
|
+
if (!SEED_BY_NAME.has(full)) {
|
|
149
|
+
const known = SEED_MANIFEST_ORDER.map((n) => shortLabel(n)).join(', ');
|
|
150
|
+
throw new CLIError(`Unknown seed operation "${input}". Known short names: ${known}`, {
|
|
151
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
152
|
+
category: 'validation',
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return full;
|
|
156
|
+
}
|
|
157
|
+
// ─── WP-379 S5a: Starter-specific arg builders ───────────────────────────────
|
|
158
|
+
/**
|
|
159
|
+
* Build args for seed:backfill-starter with CLI-side validation.
|
|
160
|
+
*
|
|
161
|
+
* Rules:
|
|
162
|
+
* - confirm:true requires workspaceScope to be explicitly provided
|
|
163
|
+
* - dryRun defaults to true when confirm is false
|
|
164
|
+
*
|
|
165
|
+
* Exported for testing.
|
|
166
|
+
*/
|
|
167
|
+
export function buildBackfillStarterArgs(opts) {
|
|
168
|
+
const confirm = opts.confirm ?? false;
|
|
169
|
+
const dryRun = opts.dryRun ?? !confirm;
|
|
170
|
+
if (confirm && !opts.workspaceScope) {
|
|
171
|
+
throw new CLIError('backfill-starter: --workspace-scope (dev|prod|all) is required when --confirm is passed. ' +
|
|
172
|
+
'Specify which deployment scope to seed to prevent accidental cross-scope writes.', { code: ErrorCode.VALIDATION_FAILED, category: 'validation' });
|
|
173
|
+
}
|
|
174
|
+
const validScopes = ['dev', 'prod', 'all'];
|
|
175
|
+
if (opts.workspaceScope && !validScopes.includes(opts.workspaceScope)) {
|
|
176
|
+
throw new CLIError(`backfill-starter: --workspace-scope must be one of: ${validScopes.join(', ')}. Got: "${opts.workspaceScope}"`, { code: ErrorCode.VALIDATION_FAILED, category: 'validation' });
|
|
177
|
+
}
|
|
178
|
+
const args = { dryRun, confirm };
|
|
179
|
+
if (opts.workspaceScope)
|
|
180
|
+
args.workspaceScope = opts.workspaceScope;
|
|
181
|
+
return args;
|
|
182
|
+
}
|
|
183
|
+
function resolveWorkspaceId(explicit) {
|
|
184
|
+
if (explicit)
|
|
185
|
+
return explicit;
|
|
186
|
+
return readSession()?.workspaceId;
|
|
187
|
+
}
|
|
188
|
+
function requireWorkspaceId(explicit) {
|
|
189
|
+
const id = resolveWorkspaceId(explicit);
|
|
190
|
+
if (!id) {
|
|
191
|
+
throw new CLIError('Workspace id required — pass --workspace-id or run `pb session start` in this project.', { code: ErrorCode.VALIDATION_FAILED, category: 'validation' });
|
|
192
|
+
}
|
|
193
|
+
return id;
|
|
194
|
+
}
|
|
195
|
+
export function buildSeedArgs(manifestName, opts) {
|
|
196
|
+
const def = SEED_BY_NAME.get(manifestName);
|
|
197
|
+
if (!def) {
|
|
198
|
+
throw new CLIError(`Unknown seed command: ${manifestName}`, {
|
|
199
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
200
|
+
category: 'validation',
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
const args = {};
|
|
204
|
+
if (manifestName === 'seed:methodology-preset') {
|
|
205
|
+
const ws = requireWorkspaceId(opts.workspaceId);
|
|
206
|
+
if (!opts.presetId) {
|
|
207
|
+
throw new CLIError('seed:methodology-preset requires --preset-id <id>.', {
|
|
208
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
209
|
+
category: 'validation',
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
args.workspaceId = ws;
|
|
213
|
+
args.presetId = opts.presetId;
|
|
214
|
+
return args;
|
|
215
|
+
}
|
|
216
|
+
if (def.requiresWorkspaceId) {
|
|
217
|
+
args.workspaceId = requireWorkspaceId(opts.workspaceId);
|
|
218
|
+
}
|
|
219
|
+
else if (opts.workspaceId && manifestName === 'seed:chain-native-bet-constellation') {
|
|
220
|
+
args.workspaceId = opts.workspaceId;
|
|
221
|
+
}
|
|
222
|
+
if (def.dryRunSupported && opts.dryRun) {
|
|
223
|
+
args.dryRun = true;
|
|
224
|
+
}
|
|
225
|
+
return args;
|
|
226
|
+
}
|
|
227
|
+
function printSeedList() {
|
|
228
|
+
const rows = SEED_COMMAND_ENTRIES.map((e) => ({
|
|
229
|
+
name: shortLabel(e.name),
|
|
230
|
+
description: e.description,
|
|
231
|
+
workspace: e.requiresWorkspaceId ? 'yes' : 'no',
|
|
232
|
+
dryRun: e.dryRunSupported ? 'yes' : '—',
|
|
233
|
+
}));
|
|
234
|
+
if (isJsonMode()) {
|
|
235
|
+
process.stdout.write(JSON.stringify({ commands: rows }, null, 2) + '\n');
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
adminBanner(resolveAdminConfig().siteUrl);
|
|
240
|
+
}
|
|
241
|
+
catch { /* not configured */ }
|
|
242
|
+
const wName = Math.max(8, ...rows.map((r) => r.name.length));
|
|
243
|
+
const wWs = 9;
|
|
244
|
+
const wDr = 7;
|
|
245
|
+
process.stdout.write(`${bold('Name'.padEnd(wName))} ${bold('Workspace'.padEnd(wWs))} ${bold('Dry-run'.padEnd(wDr))} ${bold('Description')}\n`);
|
|
246
|
+
process.stdout.write(dim('─'.repeat(wName + wWs + wDr + 40)) + '\n');
|
|
247
|
+
for (const r of rows) {
|
|
248
|
+
const dryRunStr = r.dryRun === 'yes' ? green(r.dryRun.padEnd(wDr)) : dim(r.dryRun.padEnd(wDr));
|
|
249
|
+
process.stdout.write(`${cyan(r.name.padEnd(wName))} ${r.workspace.padEnd(wWs)} ${dryRunStr} ${dim(r.description)}\n`);
|
|
250
|
+
}
|
|
251
|
+
process.stdout.write('\n');
|
|
252
|
+
hint(`${SEED_COMMAND_ENTRIES.length} operations — behavior enforced server-side (commandManifest.ts)`);
|
|
253
|
+
hint('pb admin seed run <name> Run one operation');
|
|
254
|
+
hint('pb admin seed all Run all in manifest order');
|
|
255
|
+
}
|
|
256
|
+
async function printSeedStatus(workspaceIdOpt) {
|
|
257
|
+
const readiness = await adminCall('inspect:readiness-config', {});
|
|
258
|
+
let collection = null;
|
|
259
|
+
const wsId = resolveWorkspaceId(workspaceIdOpt);
|
|
260
|
+
if (wsId) {
|
|
261
|
+
collection = await adminCall('inspect:collection', { workspaceId: wsId });
|
|
262
|
+
}
|
|
263
|
+
const statusNote = 'Per-seed run history is not tracked server-side yet — use workspace totals and readiness diagnose as signals.';
|
|
264
|
+
if (isJsonMode()) {
|
|
265
|
+
process.stdout.write(JSON.stringify({
|
|
266
|
+
note: statusNote,
|
|
267
|
+
readinessConfig: readiness,
|
|
268
|
+
workspaceCollections: collection,
|
|
269
|
+
workspaceId: wsId ?? null,
|
|
270
|
+
}, null, 2) + '\n');
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
process.stdout.write(`${bold('Seed status')}\n\n`);
|
|
274
|
+
process.stdout.write(` ${dim(statusNote)}\n\n`);
|
|
275
|
+
process.stdout.write(`${bold('Readiness config migration (inspect:readiness-config)')}\n`);
|
|
276
|
+
process.stdout.write(` ${dim(JSON.stringify(readiness, null, 2).split('\n').join('\n '))}\n\n`);
|
|
277
|
+
if (collection && typeof collection === 'object' && collection !== null && 'workspace' in collection) {
|
|
278
|
+
const c = collection;
|
|
279
|
+
process.stdout.write(`${bold('Workspace')}\n`);
|
|
280
|
+
process.stdout.write(` ${c.workspace.name} (${c.workspace.slug})\n`);
|
|
281
|
+
process.stdout.write(` Collections: ${c.totalCollections} — Entries: ${c.totalEntries}\n\n`);
|
|
282
|
+
}
|
|
283
|
+
else if (!wsId) {
|
|
284
|
+
process.stdout.write(`${dim('No workspace id — pass --workspace-id or use an active session for collection breakdown.')}\n\n`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
async function runSeedOperation(manifestName, opts) {
|
|
288
|
+
const args = buildSeedArgs(manifestName, opts);
|
|
289
|
+
return adminCall(manifestName, args);
|
|
290
|
+
}
|
|
291
|
+
/** Attach seed subcommands to the `seed` Commander node. */
|
|
292
|
+
export function attachSeedCommands(seed) {
|
|
293
|
+
// Default action when `pb admin seed` is invoked with no subcommand.
|
|
294
|
+
seed.action(async () => {
|
|
295
|
+
if (isJsonMode()) {
|
|
296
|
+
process.stdout.write(JSON.stringify({
|
|
297
|
+
operations: SEED_COMMAND_ENTRIES.map((e) => ({
|
|
298
|
+
name: shortLabel(e.name),
|
|
299
|
+
requiresWorkspaceId: e.requiresWorkspaceId,
|
|
300
|
+
dryRunSupported: e.dryRunSupported,
|
|
301
|
+
description: e.description,
|
|
302
|
+
})),
|
|
303
|
+
}, null, 2) + '\n');
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
let siteUrl = '';
|
|
307
|
+
try {
|
|
308
|
+
siteUrl = resolveAdminConfig().siteUrl;
|
|
309
|
+
}
|
|
310
|
+
catch { /* not configured */ }
|
|
311
|
+
if (siteUrl)
|
|
312
|
+
adminBanner(siteUrl);
|
|
313
|
+
if (isInteractive()) {
|
|
314
|
+
intro('Seed Operations');
|
|
315
|
+
// methodology-preset needs --preset-id, not suitable for interactive menu
|
|
316
|
+
const menuEntries = SEED_COMMAND_ENTRIES.filter((e) => e.name !== 'seed:methodology-preset');
|
|
317
|
+
const selected = await multiselect({
|
|
318
|
+
message: 'Select operations to run (space to toggle, enter to confirm):',
|
|
319
|
+
options: menuEntries.map((e) => ({
|
|
320
|
+
value: e.name,
|
|
321
|
+
label: shortLabel(e.name),
|
|
322
|
+
hint: [
|
|
323
|
+
e.requiresWorkspaceId ? 'needs workspace' : 'platform-wide',
|
|
324
|
+
e.dryRunSupported ? 'dry-run ✓' : '',
|
|
325
|
+
].filter(Boolean).join(' · '),
|
|
326
|
+
})),
|
|
327
|
+
required: false,
|
|
328
|
+
});
|
|
329
|
+
if (!Array.isArray(selected) || selected.length === 0) {
|
|
330
|
+
outro('Nothing selected — use pb admin seed run <name> for individual operations');
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
// Resolve workspace-id upfront for any selected ops that need it
|
|
334
|
+
const needsWs = selected.some((name) => SEED_BY_NAME.get(name)?.requiresWorkspaceId);
|
|
335
|
+
let workspaceId;
|
|
336
|
+
if (needsWs) {
|
|
337
|
+
const sessionWsId = readSession()?.workspaceId;
|
|
338
|
+
if (sessionWsId) {
|
|
339
|
+
workspaceId = sessionWsId;
|
|
340
|
+
log.info(`Using session workspace: ${dim(sessionWsId)}`);
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
workspaceId = await ask({
|
|
344
|
+
message: 'Workspace ID (required for selected operations):',
|
|
345
|
+
validate: (v) => v.trim() ? undefined : 'Workspace ID is required',
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
const needsConfirm = requiresAdminDestructiveConfirmation(siteUrl);
|
|
350
|
+
if (needsConfirm) {
|
|
351
|
+
const ok = await confirm({
|
|
352
|
+
message: seedMultiselectConfirmMessage(siteUrl, selected.length),
|
|
353
|
+
initialValue: false,
|
|
354
|
+
});
|
|
355
|
+
if (!ok) {
|
|
356
|
+
outro('Cancelled');
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// Run selected operations in order, stop on first failure (same policy as seed all)
|
|
361
|
+
const results = [];
|
|
362
|
+
for (const name of selected) {
|
|
363
|
+
try {
|
|
364
|
+
await withSpinner(`Running ${shortLabel(name)}`, async () => {
|
|
365
|
+
const args = buildSeedArgs(name, { workspaceId });
|
|
366
|
+
await adminCall(name, args);
|
|
367
|
+
});
|
|
368
|
+
results.push({ name, ok: true });
|
|
369
|
+
}
|
|
370
|
+
catch (e) {
|
|
371
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
372
|
+
results.push({ name, ok: false, error: msg });
|
|
373
|
+
break;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
const passed = results.filter((r) => r.ok).length;
|
|
377
|
+
const failed = results.filter((r) => !r.ok).length;
|
|
378
|
+
const summaryLines = results
|
|
379
|
+
.map((r) => r.ok ? `✓ ${shortLabel(r.name)}` : `✗ ${shortLabel(r.name)} — ${r.error}`)
|
|
380
|
+
.join('\n');
|
|
381
|
+
note(summaryLines, `${passed}/${selected.length} complete`);
|
|
382
|
+
if (failed > 0) {
|
|
383
|
+
process.exitCode = 1;
|
|
384
|
+
outro('Some operations failed — see above');
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
outro(`${passed} operation(s) complete`);
|
|
388
|
+
}
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
// Non-interactive (non-JSON) fallback — existing static preview
|
|
392
|
+
process.stdout.write(`${heading('Seed operations')} ${dim(`(${SEED_COMMAND_ENTRIES.length})`)}\n\n`);
|
|
393
|
+
// Show first 6 entries as a preview
|
|
394
|
+
const preview = SEED_COMMAND_ENTRIES.slice(0, 6);
|
|
395
|
+
const wName = Math.max(...preview.map((e) => shortLabel(e.name).length));
|
|
396
|
+
for (const e of preview) {
|
|
397
|
+
const label = shortLabel(e.name);
|
|
398
|
+
const flags = e.dryRunSupported ? dim(' dry-run ✓') : '';
|
|
399
|
+
process.stdout.write(` ${cyan(label.padEnd(wName))} ${dim(e.description)}${flags}\n`);
|
|
400
|
+
}
|
|
401
|
+
if (SEED_COMMAND_ENTRIES.length > 6) {
|
|
402
|
+
process.stdout.write(` ${dim(`... ${SEED_COMMAND_ENTRIES.length - 6} more — run pb admin seed list`)}\n`);
|
|
403
|
+
}
|
|
404
|
+
process.stdout.write('\n');
|
|
405
|
+
process.stdout.write(` ${cyan('pb admin seed list')} ${dim('Full list with workspace + dry-run flags')}\n`);
|
|
406
|
+
process.stdout.write(` ${cyan('pb admin seed run <name>')} ${dim('Run one operation')}\n`);
|
|
407
|
+
process.stdout.write(` ${cyan('pb admin seed all')} ${dim('Run all in manifest order')}\n`);
|
|
408
|
+
process.stdout.write(` ${cyan('pb admin seed status')} ${dim('Workspace readiness signals')}\n`);
|
|
409
|
+
process.stdout.write('\n');
|
|
410
|
+
});
|
|
411
|
+
seed
|
|
412
|
+
.command('list')
|
|
413
|
+
.description('List registered seed operations (names match server manifest)')
|
|
414
|
+
.action(() => {
|
|
415
|
+
printSeedList();
|
|
416
|
+
});
|
|
417
|
+
seed
|
|
418
|
+
.command('status')
|
|
419
|
+
.description('Readiness + workspace collection signals (no per-seed run log yet)')
|
|
420
|
+
.option('--workspace-id <id>', 'Workspace id (defaults to session workspace when set)')
|
|
421
|
+
.action(async (options) => {
|
|
422
|
+
if (!isJsonMode()) {
|
|
423
|
+
try {
|
|
424
|
+
adminBanner(resolveAdminConfig().siteUrl);
|
|
425
|
+
}
|
|
426
|
+
catch { /* not configured */ }
|
|
427
|
+
intro('Seed: status');
|
|
428
|
+
}
|
|
429
|
+
await printSeedStatus(options.workspaceId);
|
|
430
|
+
if (!isJsonMode()) {
|
|
431
|
+
outro('Read-only status check complete');
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
seed
|
|
435
|
+
.command('run')
|
|
436
|
+
.description('Run one seed operation by short or full manifest name')
|
|
437
|
+
.argument('<name>', 'e.g. knowledge or seed:knowledge')
|
|
438
|
+
.option('--dry-run', 'Pass dryRun when supported', false)
|
|
439
|
+
.option('--workspace-id <id>', 'Workspace id for workspace-scoped seeds')
|
|
440
|
+
.option('--preset-id <id>', 'Required for methodology-preset')
|
|
441
|
+
.option('--confirm', 'Non-interactive prod acknowledgment for dangerous ops', false)
|
|
442
|
+
.action(async (name, options) => {
|
|
443
|
+
const { siteUrl } = resolveAdminConfig();
|
|
444
|
+
const manifestName = normalizeSeedCommandName(name);
|
|
445
|
+
const meta = SEED_BY_NAME.get(manifestName);
|
|
446
|
+
const needsConfirm = requiresAdminDestructiveConfirmation(siteUrl);
|
|
447
|
+
// Remote / prod deployments require confirmation — not local or known dev-cloud.
|
|
448
|
+
if (needsConfirm) {
|
|
449
|
+
const ok = await confirmProdAction({
|
|
450
|
+
confirm: options.confirm,
|
|
451
|
+
isProduction: true,
|
|
452
|
+
message: seedRunConfirmMessage(siteUrl, manifestName),
|
|
453
|
+
noteTitle: confirmRiskNoteTitle(siteUrl),
|
|
454
|
+
});
|
|
455
|
+
if (!ok) {
|
|
456
|
+
process.stderr.write('Cancelled.\n');
|
|
457
|
+
process.exitCode = 1;
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
if (!isJsonMode()) {
|
|
462
|
+
adminBanner(siteUrl);
|
|
463
|
+
intro(`seed:${shortLabel(manifestName)}`);
|
|
464
|
+
}
|
|
465
|
+
const data = await withSpinner(`Running ${manifestName}`, () => runSeedOperation(manifestName, {
|
|
466
|
+
workspaceId: options.workspaceId,
|
|
467
|
+
dryRun: options.dryRun,
|
|
468
|
+
presetId: options.presetId,
|
|
469
|
+
}));
|
|
470
|
+
if (isJsonMode()) {
|
|
471
|
+
process.stdout.write(JSON.stringify({ command: manifestName, data }, null, 2) + '\n');
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
const summaryLines = data && typeof data === 'object'
|
|
475
|
+
? Object.entries(data)
|
|
476
|
+
.map(([k, v]) => `${k}: ${typeof v === 'object' ? JSON.stringify(v) : String(v)}`)
|
|
477
|
+
.slice(0, 8)
|
|
478
|
+
.join('\n')
|
|
479
|
+
: String(data ?? 'No response data');
|
|
480
|
+
note(summaryLines || 'No response data', manifestName);
|
|
481
|
+
outro('Complete');
|
|
482
|
+
});
|
|
483
|
+
// ─── WP-379 S5a: Starter Setup subcommands ─────────────────────────────────
|
|
484
|
+
seed
|
|
485
|
+
.command('show-starter')
|
|
486
|
+
.description('List 18 Starter Setup assets for a workspace with body previews, lockLevel, and gate summary')
|
|
487
|
+
.option('--workspace-id <id>', 'Workspace id (required; defaults to session workspace when set)')
|
|
488
|
+
.action(async (options) => {
|
|
489
|
+
const wsId = requireWorkspaceId(options.workspaceId);
|
|
490
|
+
const { siteUrl } = resolveAdminConfig();
|
|
491
|
+
if (!isJsonMode()) {
|
|
492
|
+
adminBanner(siteUrl);
|
|
493
|
+
intro('seed:show-starter');
|
|
494
|
+
}
|
|
495
|
+
const data = await withSpinner('Fetching starter assets', () => adminCall('seed:show-starter', { workspaceId: wsId }));
|
|
496
|
+
if (isJsonMode()) {
|
|
497
|
+
process.stdout.write(JSON.stringify(data, null, 2) + '\n');
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
const assets = Array.isArray(data?.assets) ? data.assets : [];
|
|
501
|
+
if (assets.length === 0) {
|
|
502
|
+
note('No platform-seeded assets found. Run: pb admin seed run backfill-starter', 'show-starter');
|
|
503
|
+
outro('Done');
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
const wIdx = assets.length.toString().length + 2;
|
|
507
|
+
const wId = Math.max(10, ...assets.map((a) => a.entryId.length));
|
|
508
|
+
const wLock = 10;
|
|
509
|
+
const wGate = 24;
|
|
510
|
+
process.stdout.write(`${bold(`${'#'.padEnd(wIdx)}${' '}${'Entry ID'.padEnd(wId)} ${'Lock'.padEnd(wLock)} ${'Gate'.padEnd(wGate)} Name / Preview`)}\n`);
|
|
511
|
+
process.stdout.write(dim('─'.repeat(wIdx + wId + wLock + wGate + 40)) + '\n');
|
|
512
|
+
assets.forEach((asset, i) => {
|
|
513
|
+
const idx = `${i + 1}.`.padEnd(wIdx);
|
|
514
|
+
const entryId = cyan(asset.entryId.padEnd(wId));
|
|
515
|
+
const lock = dim((asset.lockLevel ?? '—').padEnd(wLock));
|
|
516
|
+
const gateStr = asset.gate
|
|
517
|
+
? asset.gate.kind === 'always'
|
|
518
|
+
? 'always'
|
|
519
|
+
: `readiness[${asset.gate.min ?? '0'}–${asset.gate.max ?? '100'}]`
|
|
520
|
+
: '—';
|
|
521
|
+
const gate = dim(gateStr.padEnd(wGate));
|
|
522
|
+
const preview = dim(asset.bodyPreview.slice(0, 60));
|
|
523
|
+
process.stdout.write(`${idx} ${entryId} ${lock} ${gate} ${bold(asset.name)} ${preview}\n`);
|
|
524
|
+
});
|
|
525
|
+
process.stdout.write('\n');
|
|
526
|
+
note(`${assets.length} / 18 starter assets seeded`, 'show-starter');
|
|
527
|
+
outro('Done');
|
|
528
|
+
});
|
|
529
|
+
seed
|
|
530
|
+
.command('backfill-starter')
|
|
531
|
+
.description('Idempotent bulk seed of Starter Setup bundle across workspaces (dry-run by default)')
|
|
532
|
+
.option('--all', 'Required: acknowledge you intend to act on all workspaces in scope', false)
|
|
533
|
+
.option('--dry-run', 'Preview what would be seeded without writing anything (default behavior)', false)
|
|
534
|
+
.option('--workspace-scope <scope>', 'Required when --confirm is passed: dev | prod | all')
|
|
535
|
+
.option('--confirm', 'Execute seeds (requires --all and --workspace-scope)', false)
|
|
536
|
+
.action(async (options) => {
|
|
537
|
+
const { siteUrl } = resolveAdminConfig();
|
|
538
|
+
// CLI-side guard: --confirm requires --all
|
|
539
|
+
if (options.confirm && !options.all) {
|
|
540
|
+
process.stderr.write(red('Error: --confirm requires --all. Pass --all to acknowledge you intend to act on all workspaces in scope.\n'));
|
|
541
|
+
process.exitCode = 1;
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
// Validate args and enforce scope gate via shared helper (also used by tests)
|
|
545
|
+
let callArgs;
|
|
546
|
+
try {
|
|
547
|
+
callArgs = buildBackfillStarterArgs({
|
|
548
|
+
confirm: options.confirm,
|
|
549
|
+
dryRun: options.dryRun,
|
|
550
|
+
workspaceScope: options.workspaceScope,
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
catch (e) {
|
|
554
|
+
process.stderr.write(red(`Error: ${e instanceof Error ? e.message : String(e)}\n`));
|
|
555
|
+
process.exitCode = 1;
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
const isConfirm = options.confirm;
|
|
559
|
+
const isDryRun = callArgs.dryRun;
|
|
560
|
+
// Production acknowledgment for destructive confirm path
|
|
561
|
+
const needsConfirm = requiresAdminDestructiveConfirmation(siteUrl);
|
|
562
|
+
if (isConfirm && needsConfirm) {
|
|
563
|
+
const ok = await confirmProdAction({
|
|
564
|
+
confirm: options.confirm,
|
|
565
|
+
isProduction: true,
|
|
566
|
+
message: `Seed Starter Setup across ALL workspaces (scope: ${options.workspaceScope ?? 'all'}) on ${siteUrl}`,
|
|
567
|
+
noteTitle: confirmRiskNoteTitle(siteUrl),
|
|
568
|
+
});
|
|
569
|
+
if (!ok) {
|
|
570
|
+
process.stderr.write('Cancelled.\n');
|
|
571
|
+
process.exitCode = 1;
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
if (!isJsonMode()) {
|
|
576
|
+
adminBanner(siteUrl);
|
|
577
|
+
intro(`seed:backfill-starter (${isDryRun ? 'DRY RUN' : 'EXECUTE'})`);
|
|
578
|
+
}
|
|
579
|
+
const result = await withSpinner(isDryRun ? 'Running dry-run scan' : 'Seeding workspaces', () => adminCall('seed:backfill-starter', callArgs));
|
|
580
|
+
if (isJsonMode()) {
|
|
581
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
582
|
+
return;
|
|
583
|
+
}
|
|
584
|
+
// Per-workspace progress
|
|
585
|
+
const rows = Array.isArray(result?.rows) ? result.rows : [];
|
|
586
|
+
for (const row of rows) {
|
|
587
|
+
const statusIcon = row.status === 'seeded' ? green(icons.pass) :
|
|
588
|
+
row.status === 'already-seeded' ? dim(icons.dot) :
|
|
589
|
+
row.status === 'errored' ? red(icons.fail) :
|
|
590
|
+
dim(icons.dot);
|
|
591
|
+
const detail = row.detail ? dim(` ${row.detail}`) : '';
|
|
592
|
+
process.stdout.write(` ${statusIcon} ${bold(row.workspaceName)}${detail}\n`);
|
|
593
|
+
}
|
|
594
|
+
// Summary
|
|
595
|
+
const summaryLines = [
|
|
596
|
+
`Total workspaces: ${result.totalWorkspaces}`,
|
|
597
|
+
result.seededCount > 0 ? `${green(icons.pass)} Seeded: ${result.seededCount}` : null,
|
|
598
|
+
result.alreadySeededCount > 0 ? `${dim(icons.dot)} Already seeded: ${result.alreadySeededCount}` : null,
|
|
599
|
+
result.skippedCount > 0 ? `${dim(icons.dot)} Skipped (dry-run): ${result.skippedCount}` : null,
|
|
600
|
+
`Scope: ${result.workspaceScope}`,
|
|
601
|
+
result.dryRun ? dim('(dry-run — no writes performed)') : green('(writes executed)'),
|
|
602
|
+
].filter(Boolean).join('\n');
|
|
603
|
+
note(summaryLines, 'backfill-starter');
|
|
604
|
+
outro('Done');
|
|
605
|
+
});
|
|
606
|
+
seed
|
|
607
|
+
.command('migrate-starter-fields')
|
|
608
|
+
.description('STUB (WP-379 S5b): backfill explicit lockLevel + gate columns on existing setup-assets entries')
|
|
609
|
+
.option('--workspace-id <id>', 'Workspace id (required; defaults to session workspace when set)')
|
|
610
|
+
.option('--dry-run', 'Preview changes without writing (default in stub)', false)
|
|
611
|
+
.action(async (options) => {
|
|
612
|
+
const wsId = requireWorkspaceId(options.workspaceId);
|
|
613
|
+
const { siteUrl } = resolveAdminConfig();
|
|
614
|
+
if (!isJsonMode()) {
|
|
615
|
+
adminBanner(siteUrl);
|
|
616
|
+
intro('seed:migrate-starter-fields');
|
|
617
|
+
}
|
|
618
|
+
const result = await withSpinner('Calling migrate-starter-fields', () => adminCall('seed:migrate-starter-fields', { workspaceId: wsId, dryRun: options.dryRun }));
|
|
619
|
+
if (isJsonMode()) {
|
|
620
|
+
process.stdout.write(JSON.stringify({ command: 'seed:migrate-starter-fields', data: result }, null, 2) + '\n');
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
const summaryLines = [
|
|
624
|
+
`Migrated: ${result.migrated}`,
|
|
625
|
+
`Skipped: ${result.skipped}`,
|
|
626
|
+
`Dry-run: ${result.dryRun}`,
|
|
627
|
+
result.note ? dim(result.note) : null,
|
|
628
|
+
].filter(Boolean).join('\n');
|
|
629
|
+
note(summaryLines, 'migrate-starter-fields');
|
|
630
|
+
outro('Done');
|
|
631
|
+
});
|
|
632
|
+
// ─── End WP-379 S5a Starter Setup subcommands ───────────────────────────────
|
|
633
|
+
seed
|
|
634
|
+
.command('all')
|
|
635
|
+
.description('Run all seed operations in manifest order (skips methodology-preset unless --preset-id)')
|
|
636
|
+
.option('--workspace-id <id>', 'Workspace id for workspace-scoped seeds')
|
|
637
|
+
.option('--preset-id <id>', 'If set, runs seed:methodology-preset with this preset')
|
|
638
|
+
.option('--dry-run', 'Pass dryRun to operations that support it', false)
|
|
639
|
+
.option('--confirm', 'Required in production (non-interactive)', false)
|
|
640
|
+
.action(async (options) => {
|
|
641
|
+
const { siteUrl } = resolveAdminConfig();
|
|
642
|
+
const needsConfirm = requiresAdminDestructiveConfirmation(siteUrl);
|
|
643
|
+
if (needsConfirm) {
|
|
644
|
+
const ok = await confirmProdAction({
|
|
645
|
+
confirm: options.confirm,
|
|
646
|
+
isProduction: true,
|
|
647
|
+
message: seedAllConfirmMessage(siteUrl),
|
|
648
|
+
noteTitle: confirmRiskNoteTitle(siteUrl),
|
|
649
|
+
});
|
|
650
|
+
if (!ok) {
|
|
651
|
+
process.stderr.write('Cancelled.\n');
|
|
652
|
+
process.exitCode = 1;
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
const results = [];
|
|
657
|
+
// ── JSON mode: silent execution, structured output ────────────────────
|
|
658
|
+
if (isJsonMode()) {
|
|
659
|
+
for (const cmd of SEED_MANIFEST_ORDER) {
|
|
660
|
+
if (cmd === 'seed:methodology-preset' && !options.presetId) {
|
|
661
|
+
results.push({ command: cmd, ok: true, skipped: true, note: 'pass --preset-id to include methodology preset' });
|
|
662
|
+
continue;
|
|
663
|
+
}
|
|
664
|
+
try {
|
|
665
|
+
const args = buildSeedArgs(cmd, { workspaceId: options.workspaceId, dryRun: options.dryRun, presetId: options.presetId });
|
|
666
|
+
await adminCall(cmd, args);
|
|
667
|
+
results.push({ command: cmd, ok: true });
|
|
668
|
+
}
|
|
669
|
+
catch (e) {
|
|
670
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
671
|
+
results.push({ command: cmd, ok: false, error: msg });
|
|
672
|
+
break;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
if (results.some((r) => !r.ok))
|
|
676
|
+
process.exitCode = 1;
|
|
677
|
+
process.stdout.write(JSON.stringify({ results }, null, 2) + '\n');
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
// ── Human mode: spinner per operation + finale summary panel ─────────
|
|
681
|
+
adminBanner(siteUrl);
|
|
682
|
+
intro('Seed All Operations');
|
|
683
|
+
const total = SEED_MANIFEST_ORDER.length;
|
|
684
|
+
let current = 0;
|
|
685
|
+
const startMs = Date.now();
|
|
686
|
+
const s = clack.spinner();
|
|
687
|
+
for (const cmd of SEED_MANIFEST_ORDER) {
|
|
688
|
+
current++;
|
|
689
|
+
const label = shortLabel(cmd);
|
|
690
|
+
if (cmd === 'seed:methodology-preset' && !options.presetId) {
|
|
691
|
+
results.push({ command: cmd, ok: true, skipped: true, note: 'pass --preset-id to include methodology preset' });
|
|
692
|
+
log.step(`${current}/${total} ${label} — skipped (no --preset-id)`);
|
|
693
|
+
continue;
|
|
694
|
+
}
|
|
695
|
+
s.start(`${current}/${total} ${label}`);
|
|
696
|
+
try {
|
|
697
|
+
const args = buildSeedArgs(cmd, { workspaceId: options.workspaceId, dryRun: options.dryRun, presetId: options.presetId });
|
|
698
|
+
await adminCall(cmd, args);
|
|
699
|
+
s.stop(`${green(icons.pass)} ${label}`);
|
|
700
|
+
results.push({ command: cmd, ok: true });
|
|
701
|
+
}
|
|
702
|
+
catch (e) {
|
|
703
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
704
|
+
s.stop(`${red(icons.fail)} ${label} — ${msg}`);
|
|
705
|
+
results.push({ command: cmd, ok: false, error: msg });
|
|
706
|
+
break;
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
const elapsed = ((Date.now() - startMs) / 1000).toFixed(1);
|
|
710
|
+
const passed = results.filter((r) => r.ok && !r.skipped).length;
|
|
711
|
+
const skippedCount = results.filter((r) => r.skipped).length;
|
|
712
|
+
const failed = results.filter((r) => !r.ok).length;
|
|
713
|
+
const summaryLines = [
|
|
714
|
+
`${green(icons.pass)} ${passed} succeeded`,
|
|
715
|
+
skippedCount > 0 ? `${dim(icons.dot)} ${skippedCount} skipped` : null,
|
|
716
|
+
failed > 0 ? `${red(icons.fail)} ${failed} failed` : null,
|
|
717
|
+
`${dim(`elapsed: ${elapsed}s`)}`,
|
|
718
|
+
].filter(Boolean).join('\n');
|
|
719
|
+
note(summaryLines, `${passed + skippedCount}/${total} complete`);
|
|
720
|
+
if (failed > 0) {
|
|
721
|
+
process.exitCode = 1;
|
|
722
|
+
outro('Some operations failed — fix errors and re-run affected seeds individually');
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
outro(`All ${passed} operations complete in ${elapsed}s`);
|
|
726
|
+
}
|
|
727
|
+
});
|
|
728
|
+
}
|
|
729
|
+
//# sourceMappingURL=seed.js.map
|