@productbrain/cli 0.1.0-beta.94 → 0.1.0-beta.943
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.js +29 -3
- package/dist/__tests__/envelope-contract.test.js.map +1 -1
- 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__/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 +1724 -45
- 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-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 +14 -4
- 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 +3 -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 @@
|
|
|
1
|
+
{"version":3,"file":"connect-config.test.d.ts","sourceRoot":"","sources":["../../src/commands/connect-config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import { mkdirSync, writeFileSync, readFileSync, rmSync } from 'fs';
|
|
3
|
+
import { resolve } from 'path';
|
|
4
|
+
import { tmpdir } from 'os';
|
|
5
|
+
// connect.js imports the Ink screens + handoff helpers; mock them so importing connect.js stays
|
|
6
|
+
// side-effect-free (matches connect.test.ts / connect-integration.test.ts). We deliberately do
|
|
7
|
+
// NOT mock `fs` — saveProjectConfig is real-filesystem logic and these tests assert on real files.
|
|
8
|
+
vi.mock('./connect-screens.js', () => ({ runConnectScreens: vi.fn(async () => { }) }));
|
|
9
|
+
vi.mock('./connect-handoff.js', () => ({
|
|
10
|
+
detectHandoffMarkers: vi.fn(() => ({})),
|
|
11
|
+
resolveHandoff: vi.fn(() => null),
|
|
12
|
+
printHandoff: vi.fn(),
|
|
13
|
+
}));
|
|
14
|
+
import { saveProjectConfig } from './connect.js';
|
|
15
|
+
describe('saveProjectConfig redirect detection (real fs)', () => {
|
|
16
|
+
let repo;
|
|
17
|
+
const prevCwd = process.cwd();
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
repo = resolve(tmpdir(), `pb-connect-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
20
|
+
mkdirSync(resolve(repo, '.productbrain'), { recursive: true });
|
|
21
|
+
process.chdir(repo);
|
|
22
|
+
});
|
|
23
|
+
afterEach(() => {
|
|
24
|
+
process.chdir(prevCwd);
|
|
25
|
+
rmSync(repo, { recursive: true, force: true });
|
|
26
|
+
});
|
|
27
|
+
it('returns previousProfile=null on first connect', () => {
|
|
28
|
+
const r = saveProjectConfig('https://x.convex.site', 'workspace-a');
|
|
29
|
+
expect(r.previousProfile).toBeNull();
|
|
30
|
+
expect(JSON.parse(readFileSync(resolve(repo, '.productbrain', 'config.local.json'), 'utf8')).profile).toBe('workspace-a');
|
|
31
|
+
});
|
|
32
|
+
it('reports the prior profile when redirecting to a different workspace', () => {
|
|
33
|
+
writeFileSync(resolve(repo, '.productbrain', 'config.local.json'), JSON.stringify({ profile: 'workspace-a' }));
|
|
34
|
+
const r = saveProjectConfig('https://y.convex.site', 'workspace-b');
|
|
35
|
+
expect(r.previousProfile).toBe('workspace-a');
|
|
36
|
+
expect(JSON.parse(readFileSync(resolve(repo, '.productbrain', 'config.local.json'), 'utf8')).profile).toBe('workspace-b');
|
|
37
|
+
});
|
|
38
|
+
it('reports null when re-connecting the same workspace', () => {
|
|
39
|
+
writeFileSync(resolve(repo, '.productbrain', 'config.local.json'), JSON.stringify({ profile: 'workspace-a' }));
|
|
40
|
+
const r = saveProjectConfig('https://x.convex.site', 'workspace-a');
|
|
41
|
+
expect(r.previousProfile).toBeNull();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=connect-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-config.test.js","sourceRoot":"","sources":["../../src/commands/connect-config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* connect-context — non-UI orchestration for the post-connect wizard.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from connect-screens.tsx so the seed-readiness poll + context
|
|
5
|
+
* handshake can be tested without rendering Ink. The screens render purely from
|
|
6
|
+
* the result of prepareConnectContext().
|
|
7
|
+
*
|
|
8
|
+
* Chain: WP-433 (pb connect handoff), WP-439 S4 (strict-by-default handshake),
|
|
9
|
+
* WP-379 S3b (async seed polling).
|
|
10
|
+
*/
|
|
11
|
+
import { type HealthGap } from './handshake.js';
|
|
12
|
+
export interface ConnectContext {
|
|
13
|
+
/** True when the context handshake threw (context files may be incomplete). */
|
|
14
|
+
handshakeFailed: boolean;
|
|
15
|
+
/** Handshake error message, when handshakeFailed. */
|
|
16
|
+
handshakeError?: string;
|
|
17
|
+
/** Non-empty when starter-setup seeds were still pending after the poll. */
|
|
18
|
+
seedGaps?: ReadonlyArray<HealthGap>;
|
|
19
|
+
/**
|
|
20
|
+
* Adapter files PB left untouched because they already existed without its
|
|
21
|
+
* auto-gen marker (you authored them). The screen relays these so a user with
|
|
22
|
+
* a pre-existing CLAUDE.md is not falsely told it was synced (TEN-2107).
|
|
23
|
+
* Undefined = nothing skipped.
|
|
24
|
+
*/
|
|
25
|
+
skippedFiles?: ReadonlyArray<string>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Prepare the workspace context after `pb connect` redeems a token:
|
|
29
|
+
*
|
|
30
|
+
* 1. Poll until starter-setup seeds are ready FIRST. The handshake fetches
|
|
31
|
+
* seeded setup-asset bodies (skills/rules); on a fresh workspace those seeds
|
|
32
|
+
* land asynchronously (WP-379 S3b), so running the handshake before they are
|
|
33
|
+
* ready makes its body fetch fail.
|
|
34
|
+
* 2. Run the handshake LENIENT. This is an automatic onboarding handshake — it
|
|
35
|
+
* follows the precedent set for the automatic refresh at session close
|
|
36
|
+
* (session.ts, WP-439 S4): automatic runs must not hard-fail on a body-fetch
|
|
37
|
+
* error; orphaned assets are surfaced when the user runs `pb handshake`
|
|
38
|
+
* directly. Strict-by-default is for that direct command, not for the silent
|
|
39
|
+
* post-connect refresh.
|
|
40
|
+
*
|
|
41
|
+
* Never throws — failures are captured in the returned object for the screen to
|
|
42
|
+
* render.
|
|
43
|
+
*/
|
|
44
|
+
export declare function prepareConnectContext(): Promise<ConnectContext>;
|
|
45
|
+
//# sourceMappingURL=connect-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-context.d.ts","sourceRoot":"","sources":["../../src/commands/connect-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,eAAe,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACpC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC,CAkCrE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* connect-context — non-UI orchestration for the post-connect wizard.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from connect-screens.tsx so the seed-readiness poll + context
|
|
5
|
+
* handshake can be tested without rendering Ink. The screens render purely from
|
|
6
|
+
* the result of prepareConnectContext().
|
|
7
|
+
*
|
|
8
|
+
* Chain: WP-433 (pb connect handoff), WP-439 S4 (strict-by-default handshake),
|
|
9
|
+
* WP-379 S3b (async seed polling).
|
|
10
|
+
*/
|
|
11
|
+
import { runHandshake, pollUntilSeedsReady } from './handshake.js';
|
|
12
|
+
/**
|
|
13
|
+
* Prepare the workspace context after `pb connect` redeems a token:
|
|
14
|
+
*
|
|
15
|
+
* 1. Poll until starter-setup seeds are ready FIRST. The handshake fetches
|
|
16
|
+
* seeded setup-asset bodies (skills/rules); on a fresh workspace those seeds
|
|
17
|
+
* land asynchronously (WP-379 S3b), so running the handshake before they are
|
|
18
|
+
* ready makes its body fetch fail.
|
|
19
|
+
* 2. Run the handshake LENIENT. This is an automatic onboarding handshake — it
|
|
20
|
+
* follows the precedent set for the automatic refresh at session close
|
|
21
|
+
* (session.ts, WP-439 S4): automatic runs must not hard-fail on a body-fetch
|
|
22
|
+
* error; orphaned assets are surfaced when the user runs `pb handshake`
|
|
23
|
+
* directly. Strict-by-default is for that direct command, not for the silent
|
|
24
|
+
* post-connect refresh.
|
|
25
|
+
*
|
|
26
|
+
* Never throws — failures are captured in the returned object for the screen to
|
|
27
|
+
* render.
|
|
28
|
+
*/
|
|
29
|
+
export async function prepareConnectContext() {
|
|
30
|
+
// 1. Wait for seeds to be ready before the handshake consumes them.
|
|
31
|
+
// probe-failed (network/auth) is non-blocking — no seeds warning when the
|
|
32
|
+
// health endpoint is simply unreachable.
|
|
33
|
+
let seedGaps;
|
|
34
|
+
try {
|
|
35
|
+
const seedResult = await pollUntilSeedsReady();
|
|
36
|
+
if (seedResult.status === 'seeds-pending') {
|
|
37
|
+
seedGaps = seedResult.gaps;
|
|
38
|
+
}
|
|
39
|
+
// seeds-ready and probe-failed both leave seedGaps undefined (no warning).
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Future-proofing: pollUntilSeedsReady does not throw today (its probe
|
|
43
|
+
// catches everything into 'probe-failed'); this guards that contract drifting.
|
|
44
|
+
}
|
|
45
|
+
// 2. Run handshake lenient — capture failure for display rather than aborting.
|
|
46
|
+
let handshakeFailed = false;
|
|
47
|
+
let handshakeError;
|
|
48
|
+
let skippedFiles;
|
|
49
|
+
try {
|
|
50
|
+
const report = await runHandshake({ force: false, apply: true, quiet: true, lenient: true });
|
|
51
|
+
// userOwnedSkipped = adapter files that already existed without PB's auto-gen
|
|
52
|
+
// marker, so the handshake left them untouched. Relay them so the screen does
|
|
53
|
+
// not falsely report them as synced (TEN-2107). These are NOT drift (TEN-2150).
|
|
54
|
+
if (report?.userOwnedSkipped && report.userOwnedSkipped.length > 0) {
|
|
55
|
+
skippedFiles = report.userOwnedSkipped;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
handshakeFailed = true;
|
|
60
|
+
handshakeError = err instanceof Error ? err.message : String(err);
|
|
61
|
+
}
|
|
62
|
+
return { handshakeFailed, handshakeError, seedGaps, skippedFiles };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=connect-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-context.js","sourceRoot":"","sources":["../../src/commands/connect-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAkB,MAAM,gBAAgB,CAAC;AAkBnF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,oEAAoE;IACpE,0EAA0E;IAC1E,yCAAyC;IACzC,IAAI,QAA8C,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAC1C,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,CAAC;QACD,2EAA2E;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,+EAA+E;IACjF,CAAC;IAED,+EAA+E;IAC/E,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,cAAkC,CAAC;IACvC,IAAI,YAA+C,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,8EAA8E;QAC9E,8EAA8E;QAC9E,gFAAgF;QAChF,IAAI,MAAM,EAAE,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,GAAG,IAAI,CAAC;QACvB,cAAc,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-context.test.d.ts","sourceRoot":"","sources":["../../src/commands/connect-context.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for prepareConnectContext — the non-UI orchestration behind the
|
|
3
|
+
* post-connect wizard (seed-readiness poll + context handshake).
|
|
4
|
+
*
|
|
5
|
+
* Root cause (P1): `pb connect`'s automatic handshake ran STRICT and BEFORE the
|
|
6
|
+
* seed-readiness poll. On a fresh workspace (seeds still landing async) or with
|
|
7
|
+
* an orphan setup-asset body, the handshake's body fetch failed and — being
|
|
8
|
+
* strict (WP-439 S4) — threw, surfacing only a dim "⚠ Context sync skipped" and
|
|
9
|
+
* leaving CLAUDE.md / rules unwritten. WP-439 S4 made the automatic refresh at
|
|
10
|
+
* session close LENIENT (session.ts) for exactly this reason; connect's automatic
|
|
11
|
+
* refresh follows that same precedent.
|
|
12
|
+
*
|
|
13
|
+
* Fix: poll seeds ready FIRST, then run the handshake LENIENT.
|
|
14
|
+
*/
|
|
15
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
16
|
+
vi.mock('./handshake.js', () => ({
|
|
17
|
+
runHandshake: vi.fn(async () => { }),
|
|
18
|
+
pollUntilSeedsReady: vi.fn(async () => ({ status: 'seeds-ready' })),
|
|
19
|
+
}));
|
|
20
|
+
import * as handshake from './handshake.js';
|
|
21
|
+
import { prepareConnectContext } from './connect-context.js';
|
|
22
|
+
const runHandshake = vi.mocked(handshake.runHandshake);
|
|
23
|
+
const pollUntilSeedsReady = vi.mocked(handshake.pollUntilSeedsReady);
|
|
24
|
+
const PENDING_GAPS = [
|
|
25
|
+
{ kind: 'starter-setup-missing', severity: 'warn', message: 'Starter setup seeds are still running.' },
|
|
26
|
+
];
|
|
27
|
+
describe('prepareConnectContext', () => {
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
vi.clearAllMocks();
|
|
30
|
+
pollUntilSeedsReady.mockResolvedValue({ status: 'seeds-ready' });
|
|
31
|
+
runHandshake.mockResolvedValue(undefined);
|
|
32
|
+
});
|
|
33
|
+
it('runs the handshake in lenient mode (matches session.ts automatic-handshake policy)', async () => {
|
|
34
|
+
await prepareConnectContext();
|
|
35
|
+
expect(runHandshake).toHaveBeenCalledTimes(1);
|
|
36
|
+
expect(runHandshake).toHaveBeenCalledWith(expect.objectContaining({ force: false, apply: true, quiet: true, lenient: true }));
|
|
37
|
+
});
|
|
38
|
+
it('waits for seeds to be ready BEFORE running the handshake', async () => {
|
|
39
|
+
const order = [];
|
|
40
|
+
pollUntilSeedsReady.mockImplementation(async () => {
|
|
41
|
+
order.push('poll');
|
|
42
|
+
return { status: 'seeds-ready' };
|
|
43
|
+
});
|
|
44
|
+
runHandshake.mockImplementation(async () => {
|
|
45
|
+
order.push('handshake');
|
|
46
|
+
return undefined;
|
|
47
|
+
});
|
|
48
|
+
await prepareConnectContext();
|
|
49
|
+
expect(order).toEqual(['poll', 'handshake']);
|
|
50
|
+
});
|
|
51
|
+
it('surfaces seed gaps when starter setup is still pending', async () => {
|
|
52
|
+
pollUntilSeedsReady.mockResolvedValue({ status: 'seeds-pending', gaps: PENDING_GAPS });
|
|
53
|
+
const result = await prepareConnectContext();
|
|
54
|
+
expect(result.seedGaps).toEqual(PENDING_GAPS);
|
|
55
|
+
expect(result.handshakeFailed).toBe(false);
|
|
56
|
+
});
|
|
57
|
+
it('reports no seed gaps when seeds are ready', async () => {
|
|
58
|
+
pollUntilSeedsReady.mockResolvedValue({ status: 'seeds-ready' });
|
|
59
|
+
const result = await prepareConnectContext();
|
|
60
|
+
expect(result.seedGaps).toBeUndefined();
|
|
61
|
+
});
|
|
62
|
+
it('reports no seed gaps when the health probe fails (non-blocking)', async () => {
|
|
63
|
+
pollUntilSeedsReady.mockResolvedValue({ status: 'probe-failed', error: 'network down' });
|
|
64
|
+
const result = await prepareConnectContext();
|
|
65
|
+
expect(result.seedGaps).toBeUndefined();
|
|
66
|
+
});
|
|
67
|
+
it('captures a handshake failure without throwing', async () => {
|
|
68
|
+
runHandshake.mockRejectedValue(new Error('boom'));
|
|
69
|
+
const result = await prepareConnectContext();
|
|
70
|
+
expect(result.handshakeFailed).toBe(true);
|
|
71
|
+
expect(result.handshakeError).toBe('boom');
|
|
72
|
+
});
|
|
73
|
+
it('surfaces seed gaps AND a handshake failure together (fresh-workspace worst case)', async () => {
|
|
74
|
+
// Seeds time out, then the lenient handshake still throws on a genuinely
|
|
75
|
+
// orphaned body — both signals must surface independently.
|
|
76
|
+
pollUntilSeedsReady.mockResolvedValue({ status: 'seeds-pending', gaps: PENDING_GAPS });
|
|
77
|
+
runHandshake.mockRejectedValue(new Error('orphan body'));
|
|
78
|
+
const result = await prepareConnectContext();
|
|
79
|
+
expect(result.seedGaps).toEqual(PENDING_GAPS);
|
|
80
|
+
expect(result.handshakeFailed).toBe(true);
|
|
81
|
+
expect(result.handshakeError).toBe('orphan body');
|
|
82
|
+
});
|
|
83
|
+
it('reports success when the handshake completes', async () => {
|
|
84
|
+
const result = await prepareConnectContext();
|
|
85
|
+
expect(result.handshakeFailed).toBe(false);
|
|
86
|
+
expect(result.handshakeError).toBeUndefined();
|
|
87
|
+
});
|
|
88
|
+
it('surfaces files PB left untouched (user-owned files without the auto-gen marker)', async () => {
|
|
89
|
+
// TEN-2107: the handshake skips files the user authored (no auto-gen marker)
|
|
90
|
+
// and reports them as userOwnedSkipped. The connect screen must relay these so
|
|
91
|
+
// a user with a pre-existing CLAUDE.md is not falsely told "synced". These are
|
|
92
|
+
// never treated as drift (TEN-2150).
|
|
93
|
+
runHandshake.mockResolvedValue({
|
|
94
|
+
filesWritten: ['AGENTS.md'],
|
|
95
|
+
filesSkipped: [
|
|
96
|
+
{ path: 'CLAUDE.md', reason: 'user-owned — left untouched (pb won\'t overwrite your file)' },
|
|
97
|
+
],
|
|
98
|
+
userOwnedSkipped: ['CLAUDE.md'],
|
|
99
|
+
});
|
|
100
|
+
const result = await prepareConnectContext();
|
|
101
|
+
expect(result.skippedFiles).toEqual(['CLAUDE.md']);
|
|
102
|
+
expect(result.handshakeFailed).toBe(false);
|
|
103
|
+
});
|
|
104
|
+
it('reports no skipped files when PB wrote (or refreshed) everything', async () => {
|
|
105
|
+
// Default mock resolves an empty/undefined report → nothing left untouched.
|
|
106
|
+
const result = await prepareConnectContext();
|
|
107
|
+
expect(result.skippedFiles).toBeUndefined();
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=connect-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-context.test.js","sourceRoot":"","sources":["../../src/commands/connect-context.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WP-433 S4 — FEAT-1291: pb connect chat handoff + locked agent-detection heuristic.
|
|
3
|
+
*
|
|
4
|
+
* Provides pure detection + resolution of the post-connect handoff message.
|
|
5
|
+
* No I/O side effects except `printHandoff` (which takes a stream).
|
|
6
|
+
*
|
|
7
|
+
* Locked detection heuristic (IMP-12 acceptance: ≤200 chars, user in chat ≤5 sec):
|
|
8
|
+
* .claude/=Y, .cursor/=Y → claude-or-cursor
|
|
9
|
+
* .claude/=Y, .cursor/=N → claude
|
|
10
|
+
* .claude/=N, .cursor/=Y → cursor
|
|
11
|
+
* .claude/=N, .cursor/=N, AGENTS.md=Y → codex
|
|
12
|
+
* .claude/=N, .cursor/=N, AGENTS.md=N → bare-repo (docs link)
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
export type HandoffMarkers = {
|
|
16
|
+
hasClaude: boolean;
|
|
17
|
+
hasCursor: boolean;
|
|
18
|
+
hasCodexFile: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type HandoffAgent = 'claude' | 'cursor' | 'claude-or-cursor' | 'codex' | 'bare-repo';
|
|
21
|
+
export type HandoffResult = {
|
|
22
|
+
agent: HandoffAgent;
|
|
23
|
+
message: string;
|
|
24
|
+
};
|
|
25
|
+
export declare const HANDOFF_MESSAGE_CLAUDE_OR_CURSOR = "Open Claude Code or Cursor in this project and type in chat: Start Product Brain";
|
|
26
|
+
export declare const HANDOFF_MESSAGE_CLAUDE = "Open Claude Code in this project and type in chat: Start Product Brain";
|
|
27
|
+
export declare const HANDOFF_MESSAGE_CURSOR = "Open Cursor in this project and type in chat: Start Product Brain";
|
|
28
|
+
export declare const HANDOFF_MESSAGE_CODEX = "Open Codex CLI in this project and type in chat: Start Product Brain";
|
|
29
|
+
export declare const HANDOFF_MESSAGE_BARE_REPO = "No AI tool detected in this project. Visit productbrain.io/docs to set one up.";
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the handoff agent + message from the detected markers.
|
|
32
|
+
* Implements the locked heuristic table verbatim.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveHandoff(markers: HandoffMarkers): HandoffResult;
|
|
35
|
+
/**
|
|
36
|
+
* Detect handoff markers by probing the filesystem at `cwd`.
|
|
37
|
+
* Thin adapter over the surface adapters' detect predicates — keeps this
|
|
38
|
+
* module decoupled from detectSurfaces() while staying grounded in the same
|
|
39
|
+
* filesystem facts.
|
|
40
|
+
*
|
|
41
|
+
* `.claude/` → hasClaude
|
|
42
|
+
* `.cursor/` → hasCursor
|
|
43
|
+
* `AGENTS.md` or `.codex/` → hasCodexFile (mirrors codexAdapter.detect)
|
|
44
|
+
*/
|
|
45
|
+
export declare function detectHandoffMarkers(cwd: string): HandoffMarkers;
|
|
46
|
+
/**
|
|
47
|
+
* Write the handoff message to `stdout` followed by a trailing newline.
|
|
48
|
+
* No extra prose, no boxes, no spinners.
|
|
49
|
+
*/
|
|
50
|
+
export declare function printHandoff(stdout: NodeJS.WritableStream, result: HandoffResult): void;
|
|
51
|
+
//# sourceMappingURL=connect-handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-handoff.d.ts","sourceRoot":"","sources":["../../src/commands/connect-handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,QAAQ,GACR,kBAAkB,GAClB,OAAO,GACP,WAAW,CAAC;AAEhB,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,eAAO,MAAM,gCAAgC,qFACuC,CAAC;AAErF,eAAO,MAAM,sBAAsB,2EACuC,CAAC;AAE3E,eAAO,MAAM,sBAAsB,sEACkC,CAAC;AAEtE,eAAO,MAAM,qBAAqB,yEACsC,CAAC;AAEzE,eAAO,MAAM,yBAAyB,mFAC4C,CAAC;AAInF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAgBrE;AAID;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAMhE;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAEvF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WP-433 S4 — FEAT-1291: pb connect chat handoff + locked agent-detection heuristic.
|
|
3
|
+
*
|
|
4
|
+
* Provides pure detection + resolution of the post-connect handoff message.
|
|
5
|
+
* No I/O side effects except `printHandoff` (which takes a stream).
|
|
6
|
+
*
|
|
7
|
+
* Locked detection heuristic (IMP-12 acceptance: ≤200 chars, user in chat ≤5 sec):
|
|
8
|
+
* .claude/=Y, .cursor/=Y → claude-or-cursor
|
|
9
|
+
* .claude/=Y, .cursor/=N → claude
|
|
10
|
+
* .claude/=N, .cursor/=Y → cursor
|
|
11
|
+
* .claude/=N, .cursor/=N, AGENTS.md=Y → codex
|
|
12
|
+
* .claude/=N, .cursor/=N, AGENTS.md=N → bare-repo (docs link)
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync } from 'fs';
|
|
16
|
+
import { join } from 'path';
|
|
17
|
+
// ── Locked message strings (IMP-12: ≤200 chars each) ─────────────────────────
|
|
18
|
+
export const HANDOFF_MESSAGE_CLAUDE_OR_CURSOR = 'Open Claude Code or Cursor in this project and type in chat: Start Product Brain';
|
|
19
|
+
export const HANDOFF_MESSAGE_CLAUDE = 'Open Claude Code in this project and type in chat: Start Product Brain';
|
|
20
|
+
export const HANDOFF_MESSAGE_CURSOR = 'Open Cursor in this project and type in chat: Start Product Brain';
|
|
21
|
+
export const HANDOFF_MESSAGE_CODEX = 'Open Codex CLI in this project and type in chat: Start Product Brain';
|
|
22
|
+
export const HANDOFF_MESSAGE_BARE_REPO = 'No AI tool detected in this project. Visit productbrain.io/docs to set one up.';
|
|
23
|
+
// ── Resolution ───────────────────────────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the handoff agent + message from the detected markers.
|
|
26
|
+
* Implements the locked heuristic table verbatim.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveHandoff(markers) {
|
|
29
|
+
const { hasClaude, hasCursor, hasCodexFile } = markers;
|
|
30
|
+
if (hasClaude && hasCursor) {
|
|
31
|
+
return { agent: 'claude-or-cursor', message: HANDOFF_MESSAGE_CLAUDE_OR_CURSOR };
|
|
32
|
+
}
|
|
33
|
+
if (hasClaude) {
|
|
34
|
+
return { agent: 'claude', message: HANDOFF_MESSAGE_CLAUDE };
|
|
35
|
+
}
|
|
36
|
+
if (hasCursor) {
|
|
37
|
+
return { agent: 'cursor', message: HANDOFF_MESSAGE_CURSOR };
|
|
38
|
+
}
|
|
39
|
+
if (hasCodexFile) {
|
|
40
|
+
return { agent: 'codex', message: HANDOFF_MESSAGE_CODEX };
|
|
41
|
+
}
|
|
42
|
+
return { agent: 'bare-repo', message: HANDOFF_MESSAGE_BARE_REPO };
|
|
43
|
+
}
|
|
44
|
+
// ── Detection ────────────────────────────────────────────────────────────────
|
|
45
|
+
/**
|
|
46
|
+
* Detect handoff markers by probing the filesystem at `cwd`.
|
|
47
|
+
* Thin adapter over the surface adapters' detect predicates — keeps this
|
|
48
|
+
* module decoupled from detectSurfaces() while staying grounded in the same
|
|
49
|
+
* filesystem facts.
|
|
50
|
+
*
|
|
51
|
+
* `.claude/` → hasClaude
|
|
52
|
+
* `.cursor/` → hasCursor
|
|
53
|
+
* `AGENTS.md` or `.codex/` → hasCodexFile (mirrors codexAdapter.detect)
|
|
54
|
+
*/
|
|
55
|
+
export function detectHandoffMarkers(cwd) {
|
|
56
|
+
return {
|
|
57
|
+
hasClaude: existsSync(join(cwd, '.claude')),
|
|
58
|
+
hasCursor: existsSync(join(cwd, '.cursor')),
|
|
59
|
+
hasCodexFile: existsSync(join(cwd, 'AGENTS.md')) || existsSync(join(cwd, '.codex')),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// ── Output ───────────────────────────────────────────────────────────────────
|
|
63
|
+
/**
|
|
64
|
+
* Write the handoff message to `stdout` followed by a trailing newline.
|
|
65
|
+
* No extra prose, no boxes, no spinners.
|
|
66
|
+
*/
|
|
67
|
+
export function printHandoff(stdout, result) {
|
|
68
|
+
stdout.write(result.message + '\n');
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=connect-handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-handoff.js","sourceRoot":"","sources":["../../src/commands/connect-handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsB5B,gFAAgF;AAEhF,MAAM,CAAC,MAAM,gCAAgC,GAC3C,kFAAkF,CAAC;AAErF,MAAM,CAAC,MAAM,sBAAsB,GACjC,wEAAwE,CAAC;AAE3E,MAAM,CAAC,MAAM,sBAAsB,GACjC,mEAAmE,CAAC;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAChC,sEAAsE,CAAC;AAEzE,MAAM,CAAC,MAAM,yBAAyB,GACpC,gFAAgF,CAAC;AAEnF,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEvD,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;AACpE,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO;QACL,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC3C,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC3C,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KACpF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAA6B,EAAE,MAAqB;IAC/E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -37,9 +37,10 @@ vi.mock('../lib/spinner.js', () => ({
|
|
|
37
37
|
withSpinner: async (_msg, fn) => fn(),
|
|
38
38
|
}));
|
|
39
39
|
vi.mock('@clack/prompts', () => ({
|
|
40
|
-
//
|
|
40
|
+
// Post-S4: no clack.select remains in the handoff path; earlier Ink screens handle prior steps.
|
|
41
41
|
select: vi.fn(async () => 'start'),
|
|
42
42
|
isCancel: vi.fn(() => false),
|
|
43
|
+
text: vi.fn(async () => ''),
|
|
43
44
|
}));
|
|
44
45
|
vi.mock('../lib/profiles.js', () => ({
|
|
45
46
|
createProfile: (...args) => mockCreateProfile(...args),
|
|
@@ -99,8 +100,11 @@ describe('pb connect — integration', () => {
|
|
|
99
100
|
expect(writeFileSync).toHaveBeenCalled();
|
|
100
101
|
// Ink wizard was called with workspace name and profile name
|
|
101
102
|
expect(mockRunConnectScreens).toHaveBeenCalledWith('Test WS', 'test-ws');
|
|
102
|
-
//
|
|
103
|
-
expect(clack.select).toHaveBeenCalled();
|
|
103
|
+
// FEAT-1291: post-connect handoff no longer uses clack.select (TEN-1992 fix)
|
|
104
|
+
expect(clack.select).not.toHaveBeenCalled();
|
|
105
|
+
// FEAT-1291: printHandoff writes the tailored handoff message to process.stdout.
|
|
106
|
+
// existsSync is mocked to always-false → bare-repo path fires.
|
|
107
|
+
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('No AI tool detected in this project'));
|
|
104
108
|
});
|
|
105
109
|
it('token rejection stops flow — wizard and handshake not called', async () => {
|
|
106
110
|
const token = 'pb_ct_' + 'a'.repeat(40);
|
|
@@ -139,22 +143,20 @@ describe('pb connect — integration', () => {
|
|
|
139
143
|
// runConnectScreens was called with workspace and profile name
|
|
140
144
|
expect(mockRunConnectScreens).toHaveBeenCalledWith('WS Two', 'ws-two');
|
|
141
145
|
});
|
|
142
|
-
it('
|
|
146
|
+
it('FEAT-1291: post-connect flow completes without clack.select (no exit-on-cancel path)', async () => {
|
|
147
|
+
// TEN-1992 fix: the old clack.select "What's next?" menu exited on cancel.
|
|
148
|
+
// Now runConnect always succeeds after the screens — no cancel path possible.
|
|
143
149
|
const token = 'pb_ct_' + 'a'.repeat(40);
|
|
144
150
|
mockFetch.mockResolvedValueOnce({
|
|
145
151
|
ok: true,
|
|
146
152
|
json: async () => ({
|
|
147
|
-
apiKey: '
|
|
153
|
+
apiKey: 'pb_sk_nocancel',
|
|
148
154
|
workspaceId: 'ws3',
|
|
149
|
-
workspaceName: 'Cancel WS',
|
|
155
|
+
workspaceName: 'No Cancel WS',
|
|
150
156
|
}),
|
|
151
157
|
});
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit'); });
|
|
155
|
-
await expect(runConnect(token)).rejects.toThrow('process.exit');
|
|
156
|
-
expect(exitSpy).toHaveBeenCalledWith(130);
|
|
157
|
-
exitSpy.mockRestore();
|
|
158
|
+
await expect(runConnect(token)).resolves.toBeUndefined();
|
|
159
|
+
expect(clack.select).not.toHaveBeenCalled();
|
|
158
160
|
});
|
|
159
161
|
it('includes deployment hint in error when token is invalid', async () => {
|
|
160
162
|
const token = 'pb_ct_' + 'a'.repeat(40);
|
|
@@ -191,5 +193,20 @@ describe('pb connect — integration', () => {
|
|
|
191
193
|
await runConnect(token);
|
|
192
194
|
expect(mockFetch).toHaveBeenCalledWith('https://my-dev.convex.site/auth/redeem-connect-token', expect.objectContaining({ method: 'POST' }));
|
|
193
195
|
});
|
|
196
|
+
it('passes --name to redeem body in non-interactive flow', async () => {
|
|
197
|
+
const token = 'pb_ct_' + 'a'.repeat(40);
|
|
198
|
+
mockFetch.mockResolvedValueOnce({
|
|
199
|
+
ok: true,
|
|
200
|
+
json: async () => ({
|
|
201
|
+
apiKey: 'pb_sk_ci',
|
|
202
|
+
workspaceId: 'ws-ci',
|
|
203
|
+
workspaceName: 'CI WS',
|
|
204
|
+
}),
|
|
205
|
+
});
|
|
206
|
+
await runConnect(token, { name: 'GitHub Actions' });
|
|
207
|
+
expect(mockFetch).toHaveBeenCalledWith('https://test.convex.site/auth/redeem-connect-token', expect.objectContaining({
|
|
208
|
+
body: JSON.stringify({ token, name: 'GitHub Actions' }),
|
|
209
|
+
}));
|
|
210
|
+
});
|
|
194
211
|
});
|
|
195
212
|
//# sourceMappingURL=connect-integration.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect-integration.test.js","sourceRoot":"","sources":["../../src/commands/connect-integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEzE,8BAA8B;AAC9B,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;AAEzB,MAAM,iBAAiB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAClC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAC;AAErD,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACnB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;IACtB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IAC9B,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,aAAa,EAAE,GAAG,EAAE,CAAC,0BAA0B;IAC/C,cAAc,EAAE,GAAG,EAAE,CAAC,iCAAiC;IACvD,gBAAgB,EAAE,iCAAiC;IACnD,uBAAuB,EAAE,CAAC,GAAY,EAAE,EAAE;QACxC,IAAI,GAAG,EAAE,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC;QAC3D,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;QACvD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,iCAAiC,CAAC;IAC3C,CAAC;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,WAAW,EAAE,KAAK,EAAE,IAAY,EAAE,EAA0B,EAAE,EAAE,CAAC,EAAE,EAAE;CACtE,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,
|
|
1
|
+
{"version":3,"file":"connect-integration.test.js","sourceRoot":"","sources":["../../src/commands/connect-integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,17 +5,19 @@
|
|
|
5
5
|
* Screen 2 — ProfileScreen: shows profile name + multi-workspace hint.
|
|
6
6
|
*
|
|
7
7
|
* Each screen waits for "any key" via useInput before resolving.
|
|
8
|
-
* After both screens complete, the caller
|
|
8
|
+
* After both screens complete, the caller prints the tailored handoff message (WP-433 FEAT-1291).
|
|
9
9
|
*
|
|
10
|
-
* Chain: WP-325 S3, FEAT-1031
|
|
10
|
+
* Chain: WP-325 S3, FEAT-1031, WP-379 S3b (seed polling)
|
|
11
11
|
*/
|
|
12
12
|
/**
|
|
13
13
|
* Runs the post-connect Ink wizard:
|
|
14
|
-
* 1.
|
|
14
|
+
* 1. Prepares workspace context — waits for starter-setup seeds to be ready,
|
|
15
|
+
* then runs a lenient handshake (see prepareConnectContext). Seeds must be
|
|
16
|
+
* ready before the handshake fetches their bodies (WP-379 S3b, WP-439 S4).
|
|
15
17
|
* 2. Renders ConnectedScreen, waits for keypress.
|
|
16
18
|
* 3. Renders ProfileScreen, waits for keypress.
|
|
17
19
|
*
|
|
18
|
-
* After this resolves, the caller
|
|
20
|
+
* After this resolves, the caller prints the tailored handoff message (WP-433 FEAT-1291).
|
|
19
21
|
*/
|
|
20
22
|
export declare function runConnectScreens(workspaceName: string, profileName: string): Promise<void>;
|
|
21
23
|
//# sourceMappingURL=connect-screens.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect-screens.d.ts","sourceRoot":"","sources":["../../src/commands/connect-screens.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"connect-screens.d.ts","sourceRoot":"","sources":["../../src/commands/connect-screens.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkLH;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCjG"}
|