@productbrain/cli 0.1.0-beta.91 → 0.1.0-beta.914
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/dist/__tests__/audit.test.js +5 -0
- package/dist/__tests__/audit.test.js.map +1 -1
- 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__/canonicalRefs.vocab.test.d.ts +2 -0
- package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
- package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
- package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +1 -1
- package/dist/__tests__/config.test.js +410 -10
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/constants.test.js +6 -1
- package/dist/__tests__/constants.test.js.map +1 -1
- 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 +152 -0
- package/dist/__tests__/envelope-contract.test.js.map +1 -0
- package/dist/__tests__/errors.test.js +1 -0
- package/dist/__tests__/errors.test.js.map +1 -1
- package/dist/__tests__/handshake-augment.test.d.ts +2 -0
- package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-augment.test.js +423 -0
- package/dist/__tests__/handshake-augment.test.js.map +1 -0
- package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
- package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-dormancy.test.js +207 -0
- package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
- package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
- package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-formatter.test.js +67 -0
- package/dist/__tests__/handshake-formatter.test.js.map +1 -0
- package/dist/__tests__/handshake-preview.test.js +688 -3
- package/dist/__tests__/handshake-preview.test.js.map +1 -1
- package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
- package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/handshake.e2e.test.js +1252 -0
- package/dist/__tests__/handshake.e2e.test.js.map +1 -0
- package/dist/__tests__/handshake.test.js +611 -2
- package/dist/__tests__/handshake.test.js.map +1 -1
- package/dist/__tests__/manifest.test.js +118 -1
- package/dist/__tests__/manifest.test.js.map +1 -1
- package/dist/__tests__/onboarding-path-b.test.js +4 -4
- package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
- package/dist/__tests__/orient.test.js +135 -8
- package/dist/__tests__/orient.test.js.map +1 -1
- package/dist/__tests__/perimeter.test.d.ts +2 -0
- package/dist/__tests__/perimeter.test.d.ts.map +1 -0
- package/dist/__tests__/perimeter.test.js +165 -0
- package/dist/__tests__/perimeter.test.js.map +1 -0
- package/dist/__tests__/personal-layer.test.d.ts +1 -2
- package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
- package/dist/__tests__/personal-layer.test.js +12 -48
- package/dist/__tests__/personal-layer.test.js.map +1 -1
- package/dist/__tests__/profiles.test.js +153 -5
- package/dist/__tests__/profiles.test.js.map +1 -1
- package/dist/__tests__/promote.test.js +71 -2
- package/dist/__tests__/promote.test.js.map +1 -1
- package/dist/__tests__/session-state-machine.test.js +45 -1
- package/dist/__tests__/session-state-machine.test.js.map +1 -1
- package/dist/__tests__/session-switch.test.d.ts +2 -0
- package/dist/__tests__/session-switch.test.d.ts.map +1 -0
- package/dist/__tests__/session-switch.test.js +129 -0
- package/dist/__tests__/session-switch.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 +71 -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__/skill-vocabulary.test.d.ts +21 -0
- package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
- package/dist/__tests__/skill-vocabulary.test.js +187 -0
- package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
- package/dist/__tests__/update-check.test.d.ts +2 -0
- package/dist/__tests__/update-check.test.d.ts.map +1 -0
- package/dist/__tests__/update-check.test.js +56 -0
- package/dist/__tests__/update-check.test.js.map +1 -0
- package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
- package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
- package/dist/__tests__/upgrade-runner.test.js +42 -0
- package/dist/__tests__/upgrade-runner.test.js.map +1 -0
- package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
- package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
- package/dist/__tests__/vocabulary-leak.test.js +534 -0
- package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
- package/dist/__tests__/workspace.test.js +32 -12
- package/dist/__tests__/workspace.test.js.map +1 -1
- package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
- package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
- package/dist/commands/__tests__/connect-handoff.test.js +111 -0
- package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
- package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
- package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
- package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
- package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
- package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
- package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
- package/dist/commands/__tests__/setup-state.test.js +194 -0
- package/dist/commands/__tests__/setup-state.test.js.map +1 -0
- package/dist/commands/admin/seed.d.ts +46 -2
- package/dist/commands/admin/seed.d.ts.map +1 -1
- package/dist/commands/admin/seed.js +475 -33
- package/dist/commands/admin/seed.js.map +1 -1
- package/dist/commands/admin/seed.test.d.ts +5 -0
- package/dist/commands/admin/seed.test.d.ts.map +1 -1
- package/dist/commands/admin/seed.test.js +67 -2
- package/dist/commands/admin/seed.test.js.map +1 -1
- package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
- package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
- package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
- package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
- package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
- package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
- package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
- package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +30 -3
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/authority-domains.d.ts +146 -0
- package/dist/commands/authority-domains.d.ts.map +1 -0
- package/dist/commands/authority-domains.js +282 -0
- package/dist/commands/authority-domains.js.map +1 -0
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +3 -2
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/codex-prep.d.ts +1 -0
- package/dist/commands/codex-prep.d.ts.map +1 -1
- package/dist/commands/codex-prep.js +10 -7
- package/dist/commands/codex-prep.js.map +1 -1
- package/dist/commands/connect-config.test.d.ts +2 -0
- package/dist/commands/connect-config.test.d.ts.map +1 -0
- package/dist/commands/connect-config.test.js +44 -0
- package/dist/commands/connect-config.test.js.map +1 -0
- package/dist/commands/connect-context.d.ts +45 -0
- package/dist/commands/connect-context.d.ts.map +1 -0
- package/dist/commands/connect-context.js +64 -0
- package/dist/commands/connect-context.js.map +1 -0
- package/dist/commands/connect-context.test.d.ts +2 -0
- package/dist/commands/connect-context.test.d.ts.map +1 -0
- package/dist/commands/connect-context.test.js +110 -0
- package/dist/commands/connect-context.test.js.map +1 -0
- package/dist/commands/connect-handoff.d.ts +51 -0
- package/dist/commands/connect-handoff.d.ts.map +1 -0
- package/dist/commands/connect-handoff.js +70 -0
- package/dist/commands/connect-handoff.js.map +1 -0
- package/dist/commands/connect-integration.test.js +29 -12
- package/dist/commands/connect-integration.test.js.map +1 -1
- package/dist/commands/connect-screens.d.ts +6 -4
- package/dist/commands/connect-screens.d.ts.map +1 -1
- package/dist/commands/connect-screens.js +30 -19
- package/dist/commands/connect-screens.js.map +1 -1
- package/dist/commands/connect.d.ts +21 -6
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +78 -51
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connect.test.js +64 -1
- package/dist/commands/connect.test.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +68 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.js +131 -0
- package/dist/commands/doctor.test.js.map +1 -1
- package/dist/commands/handshake.d.ts +194 -2
- package/dist/commands/handshake.d.ts.map +1 -1
- package/dist/commands/handshake.js +1738 -44
- package/dist/commands/handshake.js.map +1 -1
- package/dist/commands/method.d.ts.map +1 -1
- package/dist/commands/method.js +3 -0
- package/dist/commands/method.js.map +1 -1
- 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 +15 -2
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +86 -4
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/profile.d.ts +11 -1
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +109 -26
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/promote.d.ts.map +1 -1
- package/dist/commands/promote.js +25 -2
- package/dist/commands/promote.js.map +1 -1
- package/dist/commands/relate.d.ts.map +1 -1
- package/dist/commands/relate.js +13 -0
- package/dist/commands/relate.js.map +1 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +55 -18
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/setup-audit.d.ts +59 -0
- package/dist/commands/setup-audit.d.ts.map +1 -0
- package/dist/commands/setup-audit.js +250 -0
- package/dist/commands/setup-audit.js.map +1 -0
- package/dist/commands/setup-detect-surfaces.d.ts +38 -0
- package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
- package/dist/commands/setup-detect-surfaces.js +76 -0
- package/dist/commands/setup-detect-surfaces.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 +226 -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-state.d.ts +42 -0
- package/dist/commands/setup-state.d.ts.map +1 -0
- package/dist/commands/setup-state.js +93 -0
- package/dist/commands/setup-state.js.map +1 -0
- package/dist/commands/setup.d.ts +17 -9
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +52 -131
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/upgrade.d.ts +5 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +89 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/whoami.d.ts +12 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +70 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/commands/whoami.test.d.ts +2 -0
- package/dist/commands/whoami.test.d.ts.map +1 -0
- package/dist/commands/whoami.test.js +50 -0
- package/dist/commands/whoami.test.js.map +1 -0
- package/dist/commands/workspace.d.ts +74 -2
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +26 -2
- package/dist/commands/workspace.js.map +1 -1
- package/dist/formatters/audit.d.ts +6 -0
- package/dist/formatters/audit.d.ts.map +1 -1
- package/dist/formatters/audit.js.map +1 -1
- package/dist/formatters/handshake.d.ts +19 -3
- package/dist/formatters/handshake.d.ts.map +1 -1
- package/dist/formatters/handshake.js +48 -13
- package/dist/formatters/handshake.js.map +1 -1
- package/dist/formatters/orient.d.ts +50 -4
- package/dist/formatters/orient.d.ts.map +1 -1
- package/dist/formatters/orient.js +64 -16
- package/dist/formatters/orient.js.map +1 -1
- package/dist/formatters/session.js +1 -1
- package/dist/formatters/session.js.map +1 -1
- package/dist/generators/adapters.js +2 -2
- 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/context-md.js +6 -6
- package/dist/generators/context-md.js.map +1 -1
- package/dist/generators/manifest.d.ts +78 -0
- package/dist/generators/manifest.d.ts.map +1 -1
- package/dist/generators/manifest.js +125 -14
- package/dist/generators/manifest.js.map +1 -1
- package/dist/generators/portable-knowledge.d.ts +6 -12
- package/dist/generators/portable-knowledge.d.ts.map +1 -1
- package/dist/generators/portable-knowledge.js +2 -19
- package/dist/generators/portable-knowledge.js.map +1 -1
- package/dist/generators/region-projections.d.ts +18 -0
- package/dist/generators/region-projections.d.ts.map +1 -0
- package/dist/generators/region-projections.js +49 -0
- package/dist/generators/region-projections.js.map +1 -0
- package/dist/generators/region-projections.test.d.ts +2 -0
- package/dist/generators/region-projections.test.d.ts.map +1 -0
- package/dist/generators/region-projections.test.js +63 -0
- package/dist/generators/region-projections.test.js.map +1 -0
- package/dist/generators/region.d.ts +24 -0
- package/dist/generators/region.d.ts.map +1 -0
- package/dist/generators/region.js +87 -0
- package/dist/generators/region.js.map +1 -0
- package/dist/generators/region.test.d.ts +2 -0
- package/dist/generators/region.test.d.ts.map +1 -0
- package/dist/generators/region.test.js +126 -0
- package/dist/generators/region.test.js.map +1 -0
- package/dist/generators/surface-profiles.d.ts +1 -2
- package/dist/generators/surface-profiles.d.ts.map +1 -1
- package/dist/generators/surface-profiles.js.map +1 -1
- package/dist/index.js +242 -26
- package/dist/index.js.map +1 -1
- package/dist/lib/activation.d.ts.map +1 -1
- package/dist/lib/activation.js +3 -3
- package/dist/lib/activation.js.map +1 -1
- package/dist/lib/activation.test.js +3 -3
- package/dist/lib/activation.test.js.map +1 -1
- package/dist/lib/canonicalRefs.d.ts +141 -0
- package/dist/lib/canonicalRefs.d.ts.map +1 -0
- package/dist/lib/canonicalRefs.js +150 -0
- package/dist/lib/canonicalRefs.js.map +1 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +27 -17
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +98 -9
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +231 -44
- 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 +2 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +2 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/errors.d.ts +3 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +3 -0
- package/dist/lib/errors.js.map +1 -1
- 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.map +1 -1
- package/dist/lib/onboarding-path-b.js +0 -1
- package/dist/lib/onboarding-path-b.js.map +1 -1
- package/dist/lib/onboarding-shared.d.ts +0 -1
- package/dist/lib/onboarding-shared.d.ts.map +1 -1
- package/dist/lib/onboarding-shared.js +1 -17
- package/dist/lib/onboarding-shared.js.map +1 -1
- package/dist/lib/profiles.d.ts +3 -1
- package/dist/lib/profiles.d.ts.map +1 -1
- package/dist/lib/profiles.js +9 -6
- package/dist/lib/profiles.js.map +1 -1
- package/dist/lib/session.d.ts +10 -0
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +14 -0
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/update-check.d.ts +20 -0
- package/dist/lib/update-check.d.ts.map +1 -1
- package/dist/lib/update-check.js +122 -21
- package/dist/lib/update-check.js.map +1 -1
- package/dist/lib/upgrade-runner.d.ts +21 -0
- package/dist/lib/upgrade-runner.d.ts.map +1 -0
- package/dist/lib/upgrade-runner.js +109 -0
- package/dist/lib/upgrade-runner.js.map +1 -0
- package/dist/lib/workspaceVocabCache.d.ts +60 -0
- package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
- package/dist/lib/workspaceVocabCache.js +98 -0
- package/dist/lib/workspaceVocabCache.js.map +1 -0
- package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
- package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
- package/dist/setup/__tests__/coach-traces.test.js +189 -0
- package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
- package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
- package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
- package/dist/setup/__tests__/setup-commands.test.js +177 -0
- package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
- package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
- package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
- package/dist/setup/__tests__/state-machine.test.js +341 -0
- package/dist/setup/__tests__/state-machine.test.js.map +1 -0
- package/dist/setup/detect-surfaces.d.ts +21 -0
- package/dist/setup/detect-surfaces.d.ts.map +1 -0
- package/dist/setup/detect-surfaces.js +39 -0
- package/dist/setup/detect-surfaces.js.map +1 -0
- package/dist/setup/manifest-writer.d.ts +17 -0
- package/dist/setup/manifest-writer.d.ts.map +1 -0
- package/dist/setup/manifest-writer.js +153 -0
- package/dist/setup/manifest-writer.js.map +1 -0
- package/dist/setup/perimeter.d.ts +72 -0
- package/dist/setup/perimeter.d.ts.map +1 -0
- package/dist/setup/perimeter.js +128 -0
- package/dist/setup/perimeter.js.map +1 -0
- package/dist/setup/state-machine.d.ts +67 -0
- package/dist/setup/state-machine.d.ts.map +1 -0
- package/dist/setup/state-machine.js +124 -0
- package/dist/setup/state-machine.js.map +1 -0
- package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
- package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
- package/dist/surfaces/__tests__/adapter.test.js +90 -0
- package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
- package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
- package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
- package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
- package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
- package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
- package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
- package/dist/surfaces/__tests__/telemetry.test.js +55 -0
- package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
- package/dist/surfaces/adapter.d.ts +70 -0
- package/dist/surfaces/adapter.d.ts.map +1 -0
- package/dist/surfaces/adapter.js +2 -0
- package/dist/surfaces/adapter.js.map +1 -0
- package/dist/surfaces/adapters/claude.d.ts +3 -0
- package/dist/surfaces/adapters/claude.d.ts.map +1 -0
- package/dist/surfaces/adapters/claude.js +67 -0
- package/dist/surfaces/adapters/claude.js.map +1 -0
- package/dist/surfaces/adapters/codex.d.ts +3 -0
- package/dist/surfaces/adapters/codex.d.ts.map +1 -0
- package/dist/surfaces/adapters/codex.js +61 -0
- package/dist/surfaces/adapters/codex.js.map +1 -0
- package/dist/surfaces/adapters/copilot.d.ts +3 -0
- package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
- package/dist/surfaces/adapters/copilot.js +59 -0
- package/dist/surfaces/adapters/copilot.js.map +1 -0
- package/dist/surfaces/adapters/cursor.d.ts +3 -0
- package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
- package/dist/surfaces/adapters/cursor.js +78 -0
- package/dist/surfaces/adapters/cursor.js.map +1 -0
- package/dist/surfaces/registry.d.ts +58 -2
- package/dist/surfaces/registry.d.ts.map +1 -1
- package/dist/surfaces/registry.js +82 -7
- package/dist/surfaces/registry.js.map +1 -1
- package/dist/surfaces/telemetry.d.ts +17 -0
- package/dist/surfaces/telemetry.d.ts.map +1 -0
- package/dist/surfaces/telemetry.js +31 -0
- package/dist/surfaces/telemetry.js.map +1 -0
- package/package.json +2 -1
- package/dist/__tests__/setup.test.d.ts +0 -2
- package/dist/__tests__/setup.test.d.ts.map +0 -1
- package/dist/__tests__/setup.test.js +0 -141
- package/dist/__tests__/setup.test.js.map +0 -1
- package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
- package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
- package/dist/generators/__tests__/surface-profiles.test.js +0 -89
- package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
- package/dist/lib/onboarding-phases.d.ts +0 -9
- package/dist/lib/onboarding-phases.d.ts.map +0 -1
- package/dist/lib/onboarding-phases.js +0 -120
- package/dist/lib/onboarding-phases.js.map +0 -1
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb migrate:setup — Migrate .productbrain/skills|rules|hooks/*.md into the DB as SSOT.
|
|
3
|
+
*
|
|
4
|
+
* WP-345 S0b: FS→DB migration command. Reads frontmatter from each .md file under
|
|
5
|
+
* .productbrain/skills/, .productbrain/rules/, and .productbrain/hooks/, then upserts
|
|
6
|
+
* each asset into the workspace's setup-assets collection via setup.ingestSetupAsset.
|
|
7
|
+
*
|
|
8
|
+
* Idempotent: re-running produces created/updated/unchanged counts, never duplicates.
|
|
9
|
+
* The stable entryId per file: SETUP-{KIND}-{SCREAMING_SNAKE_CASE_FILENAME}
|
|
10
|
+
*
|
|
11
|
+
* Chain: WP-345, TEN-1459 (handshake reads FS — this fixes it).
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
14
|
+
import { join, basename } from 'node:path';
|
|
15
|
+
import { kernelCall } from '../lib/client.js';
|
|
16
|
+
import { readSession } from '../lib/session.js';
|
|
17
|
+
import { isJsonMode } from '../lib/runner.js';
|
|
18
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
19
|
+
import { trackEvent } from '../lib/telemetry.js';
|
|
20
|
+
/**
|
|
21
|
+
* Parse minimal frontmatter from a .md file.
|
|
22
|
+
* Supports YAML-style --- fences. Fields: name, description.
|
|
23
|
+
* Array fields: triggers, semanticRefs (comma-separated or YAML list).
|
|
24
|
+
*/
|
|
25
|
+
function parseFrontmatter(raw) {
|
|
26
|
+
const fmMatch = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
27
|
+
if (!fmMatch) {
|
|
28
|
+
// No frontmatter — derive name from H1, empty description
|
|
29
|
+
const h1 = raw.match(/^# (.+)$/m);
|
|
30
|
+
return { name: h1?.[1] ?? '', description: '', triggers: [], semanticRefs: [], body: raw };
|
|
31
|
+
}
|
|
32
|
+
const fmBlock = fmMatch[1];
|
|
33
|
+
const body = fmMatch[2];
|
|
34
|
+
const fields = new Map();
|
|
35
|
+
const arrayFields = new Map();
|
|
36
|
+
// Parse simple key: value and key:\n - item YAML arrays
|
|
37
|
+
const lines = fmBlock.split('\n');
|
|
38
|
+
let currentArrayKey = null;
|
|
39
|
+
let currentArrayValues = [];
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
const arrayItemMatch = line.match(/^\s+-\s+(.+)$/);
|
|
42
|
+
const keyValueMatch = line.match(/^(\w+):\s*(.*)$/);
|
|
43
|
+
if (arrayItemMatch && currentArrayKey) {
|
|
44
|
+
currentArrayValues.push(arrayItemMatch[1].trim());
|
|
45
|
+
}
|
|
46
|
+
else if (keyValueMatch) {
|
|
47
|
+
if (currentArrayKey) {
|
|
48
|
+
arrayFields.set(currentArrayKey, currentArrayValues);
|
|
49
|
+
currentArrayKey = null;
|
|
50
|
+
currentArrayValues = [];
|
|
51
|
+
}
|
|
52
|
+
const [, key, value] = keyValueMatch;
|
|
53
|
+
if (value.trim() === '') {
|
|
54
|
+
// Start of array block
|
|
55
|
+
currentArrayKey = key;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
fields.set(key, value.trim().replace(/^['"]|['"]$/g, ''));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (currentArrayKey) {
|
|
63
|
+
arrayFields.set(currentArrayKey, currentArrayValues);
|
|
64
|
+
}
|
|
65
|
+
const name = fields.get('name') ?? body.match(/^# (.+)$/m)?.[1] ?? '';
|
|
66
|
+
const description = fields.get('description') ?? '';
|
|
67
|
+
const triggers = arrayFields.get('triggers') ?? [];
|
|
68
|
+
const semanticRefs = arrayFields.get('semanticRefs') ?? [];
|
|
69
|
+
return { name, description, triggers, semanticRefs, body };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Derive a stable entryId from the filename and assetKind.
|
|
73
|
+
* Example: skills/triage.md, kind=skill → SETUP-SKILL-TRIAGE
|
|
74
|
+
*/
|
|
75
|
+
function deriveEntryId(filename, kind) {
|
|
76
|
+
const base = basename(filename, '.md');
|
|
77
|
+
const snakeCase = base.toUpperCase().replace(/[^A-Z0-9]+/g, '_');
|
|
78
|
+
return `SETUP-${kind.toUpperCase()}-${snakeCase}`;
|
|
79
|
+
}
|
|
80
|
+
export async function runMigrateSetup(opts = {}) {
|
|
81
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
82
|
+
const dryRun = opts.dryRun ?? false;
|
|
83
|
+
const json = isJsonMode();
|
|
84
|
+
const session = readSession();
|
|
85
|
+
if (!session?.workspaceId) {
|
|
86
|
+
throw new CLIError('No active session found. Run `pb session start` first.', { code: ErrorCode.SESSION_REQUIRED, category: 'session' });
|
|
87
|
+
}
|
|
88
|
+
const workspaceId = session.workspaceId;
|
|
89
|
+
const pbDir = join(cwd, '.productbrain');
|
|
90
|
+
if (!existsSync(pbDir)) {
|
|
91
|
+
throw new CLIError('.productbrain directory not found. Run from a repo root containing a .productbrain directory.', { code: ErrorCode.VALIDATION_FAILED, category: 'validation' });
|
|
92
|
+
}
|
|
93
|
+
// Collect all .md files per kind
|
|
94
|
+
const kinds = [
|
|
95
|
+
{ dir: join(pbDir, 'skills'), kind: 'skill' },
|
|
96
|
+
{ dir: join(pbDir, 'rules'), kind: 'rule' },
|
|
97
|
+
{ dir: join(pbDir, 'hooks'), kind: 'hook' },
|
|
98
|
+
];
|
|
99
|
+
const assets = [];
|
|
100
|
+
for (const { dir, kind } of kinds) {
|
|
101
|
+
if (!existsSync(dir))
|
|
102
|
+
continue;
|
|
103
|
+
const files = readdirSync(dir).filter((f) => f.endsWith('.md'));
|
|
104
|
+
for (const file of files) {
|
|
105
|
+
const filePath = join(dir, file);
|
|
106
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
107
|
+
const { name, description, body, triggers, semanticRefs } = parseFrontmatter(raw);
|
|
108
|
+
const entryId = deriveEntryId(file, kind);
|
|
109
|
+
assets.push({
|
|
110
|
+
entryId,
|
|
111
|
+
name: name || basename(file, '.md'),
|
|
112
|
+
description,
|
|
113
|
+
body,
|
|
114
|
+
assetKind: kind,
|
|
115
|
+
triggers,
|
|
116
|
+
semanticRefs,
|
|
117
|
+
filename: file,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (assets.length === 0) {
|
|
122
|
+
const msg = 'No .md files found in .productbrain/skills/, rules/, or hooks/. Nothing to migrate.';
|
|
123
|
+
if (json) {
|
|
124
|
+
process.stdout.write(JSON.stringify({ ok: true, message: msg, created: 0, updated: 0, unchanged: 0 }) + '\n');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
process.stdout.write(msg + '\n');
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (dryRun) {
|
|
132
|
+
const msg = `[dry-run] Would migrate ${assets.length} assets. Use without --dry-run to apply.`;
|
|
133
|
+
if (json) {
|
|
134
|
+
process.stdout.write(JSON.stringify({ ok: true, dryRun: true, total: assets.length, assets: assets.map((a) => ({ entryId: a.entryId, name: a.name, assetKind: a.assetKind })) }) + '\n');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
process.stdout.write(msg + '\n');
|
|
138
|
+
for (const a of assets) {
|
|
139
|
+
process.stdout.write(` ${a.entryId} ${a.name} (${a.assetKind})\n`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Upsert each asset via setup.ingestSetupAsset
|
|
145
|
+
let created = 0;
|
|
146
|
+
let updated = 0;
|
|
147
|
+
let unchanged = 0;
|
|
148
|
+
const errors = [];
|
|
149
|
+
for (const asset of assets) {
|
|
150
|
+
try {
|
|
151
|
+
const result = await kernelCall('setup.ingestSetupAsset', {
|
|
152
|
+
workspaceId,
|
|
153
|
+
entryId: asset.entryId,
|
|
154
|
+
name: asset.name,
|
|
155
|
+
description: asset.description,
|
|
156
|
+
body: asset.body,
|
|
157
|
+
assetKind: asset.assetKind,
|
|
158
|
+
triggers: asset.triggers,
|
|
159
|
+
semanticRefs: asset.semanticRefs,
|
|
160
|
+
});
|
|
161
|
+
if (result.action === 'created')
|
|
162
|
+
created++;
|
|
163
|
+
else if (result.action === 'updated')
|
|
164
|
+
updated++;
|
|
165
|
+
else
|
|
166
|
+
unchanged++;
|
|
167
|
+
if (!json) {
|
|
168
|
+
const icon = result.action === 'created' ? '+' : result.action === 'updated' ? '~' : '=';
|
|
169
|
+
process.stdout.write(` [${icon}] ${asset.entryId} (${result.action})\n`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
174
|
+
errors.push({ entryId: asset.entryId, error: msg });
|
|
175
|
+
if (!json) {
|
|
176
|
+
process.stderr.write(` [!] ${asset.entryId} ERROR: ${msg}\n`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (json) {
|
|
181
|
+
process.stdout.write(JSON.stringify({ ok: errors.length === 0, created, updated, unchanged, errors }) + '\n');
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
process.stdout.write(`\nMigration complete: ${created} created, ${updated} updated, ${unchanged} unchanged.\n`);
|
|
185
|
+
if (errors.length > 0) {
|
|
186
|
+
process.stderr.write(`${errors.length} error(s) — check output above.\n`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// NG11: emit observability event caller-side (WP-345)
|
|
190
|
+
trackEvent('setup.migration.completed', { created, updated, unchanged, errorCount: errors.length });
|
|
191
|
+
if (errors.length > 0) {
|
|
192
|
+
throw new CLIError(`migrate:setup completed with ${errors.length} error(s).`, {
|
|
193
|
+
code: ErrorCode.INTERNAL,
|
|
194
|
+
category: 'internal',
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=migrate-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-setup.js","sourceRoot":"","sources":["../../src/commands/migrate-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAgBjD;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACzE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,0DAA0D;QAC1D,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7F,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEhD,yDAAyD;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,kBAAkB,GAAa,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEpD,IAAI,cAAc,IAAI,eAAe,EAAE,CAAC;YACtC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,IAAI,eAAe,EAAE,CAAC;gBACpB,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;gBACrD,eAAe,GAAG,IAAI,CAAC;gBACvB,kBAAkB,GAAG,EAAE,CAAC;YAC1B,CAAC;YACD,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC;YACrC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACxB,uBAAuB;gBACvB,eAAe,GAAG,GAAG,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAE3D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,QAAgB,EAAE,IAAe;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACjE,OAAO,SAAS,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS,EAAE,CAAC;AACpD,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA4B,EAAE;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAE1B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAChB,wDAAwD,EACxD,EAAE,IAAI,EAAE,SAAS,CAAC,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAC1D,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAEzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAChB,+FAA+F,EAC/F,EAAE,IAAI,EAAE,SAAS,CAAC,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,CAC9D,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,MAAM,KAAK,GAA4C;QACrD,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;QAC7C,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;QAC3C,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;KAC5C,CAAC;IAaF,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAClF,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE1C,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO;gBACP,IAAI,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;gBACnC,WAAW;gBACX,IAAI;gBACJ,SAAS,EAAE,IAAI;gBACf,QAAQ;gBACR,YAAY;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,qFAAqF,CAAC;QAClG,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAChH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,2BAA2B,MAAM,CAAC,MAAM,0CAA0C,CAAC;QAC/F,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3L,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAED,+CAA+C;IAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,MAAM,GAA8C,EAAE,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAe,wBAAwB,EAAE;gBACtE,WAAW;gBACX,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,YAAY,EAAE,KAAK,CAAC,YAAY;aACjC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;iBACtC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;;gBAC3C,SAAS,EAAE,CAAC;YAEjB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,KAAK,CAAC,OAAO,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,OAAO,YAAY,GAAG,IAAI,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAChH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,aAAa,OAAO,aAAa,SAAS,eAAe,CAAC,CAAC;QAChH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,mCAAmC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,UAAU,CAAC,2BAA2B,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEpG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,gCAAgC,MAAM,CAAC,MAAM,YAAY,EAAE;YAC5E,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -8,12 +8,14 @@ export interface OrientViewFromApi {
|
|
|
8
8
|
vision: string | null;
|
|
9
9
|
purpose: string | null;
|
|
10
10
|
activeBetCount: number;
|
|
11
|
-
|
|
11
|
+
/** WP-436 S4: canonical field — legacy currentBet dropped. */
|
|
12
|
+
currentWorkPackage: string | null;
|
|
12
13
|
activeTensionCount: number;
|
|
13
14
|
productAreas: string[];
|
|
14
15
|
productAreaCount: number;
|
|
15
16
|
};
|
|
16
|
-
|
|
17
|
+
/** WP-436 S4: canonical field — legacy activeBets dropped. */
|
|
18
|
+
activeWorkPackages: Array<{
|
|
17
19
|
entryId: string | null;
|
|
18
20
|
name: string;
|
|
19
21
|
collectionSlug: string | null;
|
|
@@ -197,10 +199,21 @@ export interface OrientViewFromApi {
|
|
|
197
199
|
collectionSlug: string;
|
|
198
200
|
hint: string;
|
|
199
201
|
}>;
|
|
202
|
+
/** WP-376 α.0: orient view sets this when any input scan hit its limit. */
|
|
203
|
+
_truncated?: boolean;
|
|
204
|
+
_budget?: {
|
|
205
|
+
bytes: number;
|
|
206
|
+
truncated: boolean;
|
|
207
|
+
truncationReasons: string[];
|
|
208
|
+
overflowed: boolean;
|
|
209
|
+
};
|
|
210
|
+
/** WP-377: schema version for orient response. */
|
|
211
|
+
_schemaVersion?: 1;
|
|
200
212
|
}
|
|
201
213
|
export declare function runOrient(options?: {
|
|
202
214
|
brief?: boolean;
|
|
203
215
|
task?: string;
|
|
204
216
|
scope?: string;
|
|
217
|
+
full?: boolean;
|
|
205
218
|
}): Promise<void>;
|
|
206
219
|
//# sourceMappingURL=orient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orient.d.ts","sourceRoot":"","sources":["../../src/commands/orient.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"orient.d.ts","sourceRoot":"","sources":["../../src/commands/orient.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/orient.js
CHANGED
|
@@ -2,10 +2,53 @@
|
|
|
2
2
|
* pb orient — prints workspace stage and all orient sections per ARCH-25.
|
|
3
3
|
* BET-181 Slice 0: routes through runCliCommand for JSON-default output.
|
|
4
4
|
*/
|
|
5
|
-
import { getConfigOrGuide } from '../lib/config.js';
|
|
5
|
+
import { getConfig, getConfigOrGuide } from '../lib/config.js';
|
|
6
6
|
import { kernelCall } from '../lib/client.js';
|
|
7
|
-
import { runCliCommand } from '../lib/runner.js';
|
|
7
|
+
import { runCliCommand, isJsonMode } from '../lib/runner.js';
|
|
8
|
+
import { stripConvexInternals } from '../lib/strip.js';
|
|
8
9
|
import { formatOrient, formatOrientBrief } from '../formatters/orient.js';
|
|
10
|
+
import { getOrFetchVocabCtx } from '../lib/workspaceVocabCache.js';
|
|
11
|
+
/**
|
|
12
|
+
* WP-376 α.3: fire-and-forget orient byte report from the CLI surface.
|
|
13
|
+
*
|
|
14
|
+
* Inlined raw fetch (vs `kernelCall`) for three reasons:
|
|
15
|
+
* 1. No spinner — observability must not show user-visible progress
|
|
16
|
+
* indicators after the orient render completes.
|
|
17
|
+
* 2. Truly fire-and-forget — never block returning to the shell on a
|
|
18
|
+
* slow gateway, never propagate errors to the user.
|
|
19
|
+
* 3. Avoids the post-write session-touch heartbeat (kernelCallWithSession)
|
|
20
|
+
* — orient byte report is itself a heartbeat-equivalent observability
|
|
21
|
+
* write, so a follow-up agent.touchSession is redundant (parallel to
|
|
22
|
+
* MCP's TOUCH_EXCLUDED exemption in client.ts).
|
|
23
|
+
*
|
|
24
|
+
* The gateway's `injectSessionAuth` (BR-18) resolves workspaceId / apiKeyId /
|
|
25
|
+
* clerkUserId from the bearer token, so the surface only sends payload bytes
|
|
26
|
+
* + truncation flag. Auth and identity stay server-side.
|
|
27
|
+
*/
|
|
28
|
+
function reportOrientCliBytes(bytes, truncated) {
|
|
29
|
+
let apiKey;
|
|
30
|
+
let siteUrl;
|
|
31
|
+
try {
|
|
32
|
+
({ apiKey, siteUrl } = getConfig());
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// No config — best-effort observability never fails the command.
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
void fetch(`${siteUrl}/api/aki`, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: {
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
Authorization: `Bearer ${apiKey}`,
|
|
43
|
+
},
|
|
44
|
+
body: JSON.stringify({
|
|
45
|
+
fn: 'agent.reportOrientMetric',
|
|
46
|
+
args: { bytes, truncated },
|
|
47
|
+
}),
|
|
48
|
+
}).catch(() => {
|
|
49
|
+
// Best-effort — silently swallow.
|
|
50
|
+
});
|
|
51
|
+
}
|
|
9
52
|
function normalizeView(raw) {
|
|
10
53
|
return {
|
|
11
54
|
...raw,
|
|
@@ -37,6 +80,23 @@ export async function runOrient(options = {}) {
|
|
|
37
80
|
const config = await getConfigOrGuide(() => runOrient(options));
|
|
38
81
|
if (!config)
|
|
39
82
|
return;
|
|
83
|
+
// WP-436 S2: resolve workspace vocabulary context (Axis 2, PAT-230, DEC-1021).
|
|
84
|
+
// Uses the API key as the cache key (1:1 with workspace at CLI layer).
|
|
85
|
+
// Fail-open: if chain.getVocabulary is unreachable, resolver falls back to canonicalKey literal.
|
|
86
|
+
const vocabCtx = await getOrFetchVocabCtx(config.apiKey, async () => {
|
|
87
|
+
const vocab = await kernelCall('chain.getVocabulary', {});
|
|
88
|
+
if (vocab?.collectionLabels || vocab?.collectionDefaults) {
|
|
89
|
+
return {
|
|
90
|
+
...(vocab.collectionLabels ? { collectionLabels: vocab.collectionLabels } : {}),
|
|
91
|
+
...(vocab.collectionDefaults ? { collectionDefaults: vocab.collectionDefaults } : {}),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
});
|
|
96
|
+
// WP-376 α.3: capture the view + raw flag from the closure so we can
|
|
97
|
+
// measure client-side rendered bytes after runCliCommand finishes.
|
|
98
|
+
let capturedView = null;
|
|
99
|
+
let capturedTruncated = false;
|
|
40
100
|
await runCliCommand({
|
|
41
101
|
fn: async () => {
|
|
42
102
|
const callArgs = {};
|
|
@@ -44,14 +104,36 @@ export async function runOrient(options = {}) {
|
|
|
44
104
|
callArgs.task = options.task;
|
|
45
105
|
if (options.scope)
|
|
46
106
|
callArgs.scope = options.scope;
|
|
107
|
+
callArgs.tier = options.full ? 'full' : 'standard';
|
|
47
108
|
const raw = await kernelCall('chain.getOrientView', Object.keys(callArgs).length > 0 ? callArgs : {});
|
|
48
109
|
// Normalize before output in any mode — ensures JSON keys are stable
|
|
49
110
|
// for agent consumers (optional sections become empty arrays, not absent).
|
|
50
|
-
|
|
111
|
+
const view = normalizeView(raw);
|
|
112
|
+
capturedView = view;
|
|
113
|
+
capturedTruncated = raw._truncated === true;
|
|
114
|
+
return view;
|
|
51
115
|
},
|
|
52
116
|
formatPretty: (view) => {
|
|
53
|
-
return options.brief ? formatOrientBrief(view) : formatOrient(view);
|
|
117
|
+
return options.brief ? formatOrientBrief(view, vocabCtx) : formatOrient(view, vocabCtx);
|
|
54
118
|
},
|
|
55
119
|
});
|
|
120
|
+
// WP-376 α.3: fire-and-forget byte report. Match what the user actually saw —
|
|
121
|
+
// JSON-stringified data for piped/JSON mode, formatted text for TTY.
|
|
122
|
+
if (capturedView != null) {
|
|
123
|
+
try {
|
|
124
|
+
let rendered;
|
|
125
|
+
if (isJsonMode()) {
|
|
126
|
+
rendered = JSON.stringify(stripConvexInternals(capturedView));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
rendered = options.brief ? formatOrientBrief(capturedView, vocabCtx) : formatOrient(capturedView, vocabCtx);
|
|
130
|
+
}
|
|
131
|
+
const bytes = Buffer.byteLength(rendered, 'utf8');
|
|
132
|
+
reportOrientCliBytes(bytes, capturedTruncated);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Best-effort observability — never fail the command on measurement.
|
|
136
|
+
}
|
|
137
|
+
}
|
|
56
138
|
}
|
|
57
139
|
//# sourceMappingURL=orient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orient.js","sourceRoot":"","sources":["../../src/commands/orient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"orient.js","sourceRoot":"","sources":["../../src/commands/orient.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
* Uses runCliCommand pattern from runner.ts for JSON/pretty output.
|
|
6
6
|
* Uses CLIError from errors.ts for structured error reporting.
|
|
7
7
|
*/
|
|
8
|
+
type ProfileListResult = {
|
|
9
|
+
profiles: string[];
|
|
10
|
+
active: string | null;
|
|
11
|
+
globalActive: string | null;
|
|
12
|
+
localActive: string | null;
|
|
13
|
+
activeSource: 'local' | 'global' | 'none';
|
|
14
|
+
};
|
|
15
|
+
export declare function resolveProfileListState(): ProfileListResult;
|
|
8
16
|
/** pb profile list — show all profiles, mark active one. */
|
|
9
17
|
export declare function runProfileList(): Promise<void>;
|
|
10
18
|
/** pb profile create <name> --api-key <key> [--url <url>] */
|
|
@@ -13,12 +21,14 @@ export declare function runProfileCreate(opts: {
|
|
|
13
21
|
apiKey: string;
|
|
14
22
|
url?: string;
|
|
15
23
|
}): Promise<void>;
|
|
16
|
-
/** pb profile use <name> — switch active profile, close any active session. */
|
|
17
24
|
export declare function runProfileUse(opts: {
|
|
18
25
|
name: string;
|
|
26
|
+
local?: boolean;
|
|
27
|
+
global?: boolean;
|
|
19
28
|
}): Promise<void>;
|
|
20
29
|
/** pb profile delete <name> */
|
|
21
30
|
export declare function runProfileDelete(opts: {
|
|
22
31
|
name: string;
|
|
23
32
|
}): Promise<void>;
|
|
33
|
+
export {};
|
|
24
34
|
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC3C,CAAC;AAEF,wBAAgB,uBAAuB,IAAI,iBAAiB,CAQ3D;AAED,4DAA4D;AAC5D,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBpD;AAED,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAaD,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F5G;AAUD,+BAA+B;AAC/B,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5E"}
|
package/dist/commands/profile.js
CHANGED
|
@@ -7,24 +7,39 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { runCliCommand } from '../lib/runner.js';
|
|
9
9
|
import { listProfiles, getActiveProfile, createProfile, useProfile, deleteProfile, } from '../lib/profiles.js';
|
|
10
|
-
import { readSession,
|
|
11
|
-
import { resetConfigCache } from '../lib/config.js';
|
|
10
|
+
import { readSession, discardSession, sessionFileExists } from '../lib/session.js';
|
|
11
|
+
import { resetConfigCache, findProjectRoot, readLocalProjectConfig, setLocalProfilePin } from '../lib/config.js';
|
|
12
|
+
import { probeWorkspace } from '../lib/workspace-probe.js';
|
|
13
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
14
|
+
export function resolveProfileListState() {
|
|
15
|
+
const profiles = listProfiles();
|
|
16
|
+
const globalActive = getActiveProfile();
|
|
17
|
+
const localActive = readLocalProjectConfig()?.profile ?? null;
|
|
18
|
+
const active = localActive ?? globalActive;
|
|
19
|
+
const activeSource = localActive ? 'local' : globalActive ? 'global' : 'none';
|
|
20
|
+
return { profiles, active, globalActive, localActive, activeSource };
|
|
21
|
+
}
|
|
12
22
|
/** pb profile list — show all profiles, mark active one. */
|
|
13
23
|
export async function runProfileList() {
|
|
14
24
|
await runCliCommand({
|
|
15
25
|
fn: async () => {
|
|
16
|
-
|
|
17
|
-
const active = getActiveProfile();
|
|
18
|
-
return { profiles, active };
|
|
26
|
+
return resolveProfileListState();
|
|
19
27
|
},
|
|
20
28
|
formatPretty: (data) => {
|
|
21
29
|
if (data.profiles.length === 0) {
|
|
22
30
|
return 'No profiles configured. Run: pb profile create <name> --api-key <key>';
|
|
23
31
|
}
|
|
24
32
|
const lines = data.profiles.map((name) => {
|
|
25
|
-
const marker = name === data.active
|
|
33
|
+
const marker = name === data.active
|
|
34
|
+
? data.activeSource === 'local' ? ' (active, local)' : ' (active)'
|
|
35
|
+
: '';
|
|
26
36
|
return ` ${name}${marker}`;
|
|
27
37
|
});
|
|
38
|
+
if (data.localActive && data.globalActive && data.localActive !== data.globalActive) {
|
|
39
|
+
lines.push('');
|
|
40
|
+
lines.push(`Repo local profile: ${data.localActive}`);
|
|
41
|
+
lines.push(`Global profile: ${data.globalActive}`);
|
|
42
|
+
}
|
|
28
43
|
return `Profiles:\n${lines.join('\n')}`;
|
|
29
44
|
},
|
|
30
45
|
});
|
|
@@ -39,36 +54,104 @@ export async function runProfileCreate(opts) {
|
|
|
39
54
|
formatPretty: (data) => `Profile "${data.name}" created.`,
|
|
40
55
|
});
|
|
41
56
|
}
|
|
42
|
-
/** pb profile use <name> — switch active profile, close any active session. */
|
|
43
57
|
export async function runProfileUse(opts) {
|
|
58
|
+
if (opts.local && opts.global) {
|
|
59
|
+
throw new CLIError('Cannot use both --local and --global.', {
|
|
60
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
61
|
+
category: 'validation',
|
|
62
|
+
guidance: 'Pick one: --local (repo pin only), --global (global only), or neither (reconcile both).',
|
|
63
|
+
});
|
|
64
|
+
}
|
|
44
65
|
await runCliCommand({
|
|
45
66
|
fn: async () => {
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
67
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
68
|
+
const localPin = readLocalProjectConfig()?.profile ?? null;
|
|
69
|
+
// PB_PROFILE always wins resolution (by design). If it's set, ANY profile write
|
|
70
|
+
// here is shadowed — surface that instead of failing silently (the TEN-2163 trap).
|
|
71
|
+
const PB_PROFILE = process.env.PB_PROFILE?.trim() || null;
|
|
72
|
+
const resetEnv = () => {
|
|
73
|
+
resetConfigCache();
|
|
74
|
+
delete process.env.PRODUCTBRAIN_API_KEY;
|
|
75
|
+
delete process.env.CONVEX_SITE_URL;
|
|
76
|
+
};
|
|
77
|
+
// Discard ANY session file (active OR stale closed marker) — a closed marker would
|
|
78
|
+
// let the 2h auto-resume re-pin the old workspace. Report only an ACTIVE session
|
|
79
|
+
// in the print line.
|
|
80
|
+
const discardSessionState = () => {
|
|
81
|
+
const hadActive = readSession() !== null;
|
|
82
|
+
if (sessionFileExists())
|
|
83
|
+
discardSession();
|
|
84
|
+
return hadActive;
|
|
85
|
+
};
|
|
86
|
+
// --- --local: repo pin only ---
|
|
87
|
+
if (opts.local) {
|
|
88
|
+
if (!projectRoot) {
|
|
89
|
+
throw new CLIError('No .productbrain/ directory found in this directory tree. Run `pb connect` first or use `pb use <name> --global` to switch globally.', { code: ErrorCode.CONFIG_INVALID, category: 'config',
|
|
90
|
+
guidance: 'Run `pb connect <token>` to set up a project workspace, or use --global.' });
|
|
91
|
+
}
|
|
92
|
+
setLocalProfilePin(projectRoot, opts.name);
|
|
93
|
+
const sessionCleared = discardSessionState();
|
|
94
|
+
resetEnv();
|
|
95
|
+
return { name: opts.name, scope: 'local', reconciledLocalPin: false,
|
|
96
|
+
sessionCleared, workspace: await safeProbe(), pinnedElsewhere: null, 'PB_PROFILE': PB_PROFILE };
|
|
50
97
|
}
|
|
98
|
+
// --- --global: global only (does not change a locally-pinned repo) ---
|
|
99
|
+
if (opts.global) {
|
|
100
|
+
useProfile(opts.name);
|
|
101
|
+
const pinnedElsewhere = localPin && localPin !== opts.name ? localPin : null;
|
|
102
|
+
// The repo's effective workspace only changes when it is NOT pinned elsewhere.
|
|
103
|
+
const sessionCleared = pinnedElsewhere ? false : discardSessionState();
|
|
104
|
+
resetEnv();
|
|
105
|
+
const workspace = pinnedElsewhere ? null : await safeProbe();
|
|
106
|
+
return { name: opts.name, scope: 'global', reconciledLocalPin: false,
|
|
107
|
+
sessionCleared, workspace, pinnedElsewhere, 'PB_PROFILE': PB_PROFILE };
|
|
108
|
+
}
|
|
109
|
+
// --- default: flip global AND reconcile the repo pin if one exists ---
|
|
51
110
|
useProfile(opts.name);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
};
|
|
111
|
+
let reconciledLocalPin = false;
|
|
112
|
+
if (projectRoot && localPin) {
|
|
113
|
+
setLocalProfilePin(projectRoot, opts.name);
|
|
114
|
+
reconciledLocalPin = true;
|
|
115
|
+
}
|
|
116
|
+
const sessionCleared = discardSessionState();
|
|
117
|
+
resetEnv();
|
|
118
|
+
return { name: opts.name, scope: 'reconcile', reconciledLocalPin,
|
|
119
|
+
sessionCleared, workspace: await safeProbe(), pinnedElsewhere: null, 'PB_PROFILE': PB_PROFILE };
|
|
62
120
|
},
|
|
63
|
-
formatPretty: (
|
|
64
|
-
|
|
65
|
-
if (
|
|
66
|
-
|
|
121
|
+
formatPretty: (d) => {
|
|
122
|
+
const lines = [];
|
|
123
|
+
if (d.scope === 'global') {
|
|
124
|
+
const arrow = d.workspace ? ` → ${d.workspace}` : '';
|
|
125
|
+
lines.push(`Switched global profile to "${d.name}"${arrow}.`);
|
|
126
|
+
if (d.pinnedElsewhere) {
|
|
127
|
+
lines.push(`Note: this repo is pinned to "${d.pinnedElsewhere}" via config.local.json — the global switch won't change it here.`);
|
|
128
|
+
lines.push(`Run \`pb use ${d.name}\` (no flag) to switch this repo too.`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const arrow = d.workspace ? ` → ${d.workspace}` : '';
|
|
133
|
+
const where = d.scope === 'local' ? ' (repo-local)' : '';
|
|
134
|
+
lines.push(`Now using "${d.name}"${where}${arrow}`);
|
|
135
|
+
if (d.reconciledLocalPin)
|
|
136
|
+
lines.push('(updated repo-local pin in .productbrain/config.local.json)');
|
|
137
|
+
}
|
|
138
|
+
if (d.sessionCleared)
|
|
139
|
+
lines.push('(previous session closed)');
|
|
140
|
+
if (d['PB_PROFILE']) {
|
|
141
|
+
lines.push(`⚠ PB_PROFILE is set to "${d['PB_PROFILE']}" in your environment and overrides profile resolution.`);
|
|
142
|
+
lines.push(` This switch won't take effect until you unset it: \`unset PB_PROFILE\`.`);
|
|
67
143
|
}
|
|
68
|
-
return
|
|
144
|
+
return lines.join('\n');
|
|
69
145
|
},
|
|
70
146
|
});
|
|
71
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Best-effort workspace name after a profile switch; null on any failure.
|
|
150
|
+
* probeWorkspace() already swallows network/auth errors and returns null, so this is offline-safe.
|
|
151
|
+
*/
|
|
152
|
+
async function safeProbe() {
|
|
153
|
+
return (await probeWorkspace())?.name ?? null;
|
|
154
|
+
}
|
|
72
155
|
/** pb profile delete <name> */
|
|
73
156
|
export async function runProfileDelete(opts) {
|
|
74
157
|
await runCliCommand({
|