@productbrain/cli 0.1.0-beta.9 → 0.1.0-beta.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -92
- package/dist/__tests__/adapters.test.d.ts +2 -0
- package/dist/__tests__/adapters.test.d.ts.map +1 -0
- package/dist/__tests__/adapters.test.js +417 -0
- package/dist/__tests__/adapters.test.js.map +1 -0
- package/dist/__tests__/audit.test.d.ts +2 -0
- package/dist/__tests__/audit.test.d.ts.map +1 -0
- package/dist/__tests__/audit.test.js +394 -0
- package/dist/__tests__/audit.test.js.map +1 -0
- package/dist/__tests__/batch-transformations.test.d.ts +2 -0
- package/dist/__tests__/batch-transformations.test.d.ts.map +1 -0
- package/dist/__tests__/batch-transformations.test.js +263 -0
- package/dist/__tests__/batch-transformations.test.js.map +1 -0
- package/dist/__tests__/capture.test.js +309 -18
- package/dist/__tests__/capture.test.js.map +1 -1
- package/dist/__tests__/config.test.d.ts +8 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +166 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/constants.test.d.ts +2 -0
- package/dist/__tests__/constants.test.d.ts.map +1 -0
- package/dist/__tests__/constants.test.js +141 -0
- package/dist/__tests__/constants.test.js.map +1 -0
- package/dist/__tests__/constellation.test.js +20 -26
- package/dist/__tests__/constellation.test.js.map +1 -1
- package/dist/__tests__/context-strategy.test.d.ts +2 -0
- package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
- package/dist/__tests__/context-strategy.test.js +79 -0
- package/dist/__tests__/context-strategy.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +117 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/experiment.test.d.ts +6 -0
- package/dist/__tests__/experiment.test.d.ts.map +1 -0
- package/dist/__tests__/experiment.test.js +69 -0
- package/dist/__tests__/experiment.test.js.map +1 -0
- package/dist/__tests__/fields.test.js +68 -68
- package/dist/__tests__/fields.test.js.map +1 -1
- package/dist/__tests__/glossary.test.d.ts +2 -0
- package/dist/__tests__/glossary.test.d.ts.map +1 -0
- package/dist/__tests__/glossary.test.js +32 -0
- package/dist/__tests__/glossary.test.js.map +1 -0
- package/dist/__tests__/handshake-preview.test.d.ts +2 -0
- package/dist/__tests__/handshake-preview.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-preview.test.js +156 -0
- package/dist/__tests__/handshake-preview.test.js.map +1 -0
- package/dist/__tests__/handshake.test.js +27 -18
- package/dist/__tests__/handshake.test.js.map +1 -1
- package/dist/__tests__/hook-intents.test.d.ts +2 -0
- package/dist/__tests__/hook-intents.test.d.ts.map +1 -0
- package/dist/__tests__/hook-intents.test.js +184 -0
- package/dist/__tests__/hook-intents.test.js.map +1 -0
- package/dist/__tests__/ingest.test.js +110 -12
- package/dist/__tests__/ingest.test.js.map +1 -1
- package/dist/__tests__/init.test.d.ts +7 -0
- package/dist/__tests__/init.test.d.ts.map +1 -0
- package/dist/__tests__/init.test.js +146 -0
- package/dist/__tests__/init.test.js.map +1 -0
- package/dist/__tests__/login.test.d.ts +2 -0
- package/dist/__tests__/login.test.d.ts.map +1 -0
- package/dist/__tests__/login.test.js +167 -0
- package/dist/__tests__/login.test.js.map +1 -0
- package/dist/__tests__/manifest.test.d.ts +6 -0
- package/dist/__tests__/manifest.test.d.ts.map +1 -0
- package/dist/__tests__/manifest.test.js +138 -0
- package/dist/__tests__/manifest.test.js.map +1 -0
- package/dist/__tests__/method-registry.integration.test.d.ts +6 -0
- package/dist/__tests__/method-registry.integration.test.d.ts.map +1 -0
- package/dist/__tests__/method-registry.integration.test.js +18 -0
- package/dist/__tests__/method-registry.integration.test.js.map +1 -0
- package/dist/__tests__/method-registry.test.d.ts +14 -0
- package/dist/__tests__/method-registry.test.d.ts.map +1 -0
- package/dist/__tests__/method-registry.test.js +134 -0
- package/dist/__tests__/method-registry.test.js.map +1 -0
- package/dist/__tests__/onboarding-path-b.test.d.ts +2 -0
- package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
- package/dist/__tests__/onboarding-path-b.test.js +46 -0
- package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
- package/dist/__tests__/onboarding.test.d.ts +6 -0
- package/dist/__tests__/onboarding.test.d.ts.map +1 -0
- package/dist/__tests__/onboarding.test.js +347 -0
- package/dist/__tests__/onboarding.test.js.map +1 -0
- package/dist/__tests__/orient.test.d.ts +2 -0
- package/dist/__tests__/orient.test.d.ts.map +1 -0
- package/dist/__tests__/orient.test.js +143 -0
- package/dist/__tests__/orient.test.js.map +1 -0
- package/dist/__tests__/personal-layer.test.d.ts +12 -0
- package/dist/__tests__/personal-layer.test.d.ts.map +1 -0
- package/dist/__tests__/personal-layer.test.js +304 -0
- package/dist/__tests__/personal-layer.test.js.map +1 -0
- package/dist/__tests__/profiles.test.d.ts +2 -0
- package/dist/__tests__/profiles.test.d.ts.map +1 -0
- package/dist/__tests__/profiles.test.js +168 -0
- package/dist/__tests__/profiles.test.js.map +1 -0
- package/dist/__tests__/promote.test.d.ts +2 -0
- package/dist/__tests__/promote.test.d.ts.map +1 -0
- package/dist/__tests__/promote.test.js +161 -0
- package/dist/__tests__/promote.test.js.map +1 -0
- package/dist/__tests__/prompts.test.d.ts +6 -0
- package/dist/__tests__/prompts.test.d.ts.map +1 -0
- package/dist/__tests__/prompts.test.js +146 -0
- package/dist/__tests__/prompts.test.js.map +1 -0
- package/dist/__tests__/proposals.test.d.ts +2 -0
- package/dist/__tests__/proposals.test.d.ts.map +1 -0
- package/dist/__tests__/proposals.test.js +167 -0
- package/dist/__tests__/proposals.test.js.map +1 -0
- package/dist/__tests__/relate.test.js +57 -33
- package/dist/__tests__/relate.test.js.map +1 -1
- package/dist/__tests__/repo-detect.test.js +97 -1
- package/dist/__tests__/repo-detect.test.js.map +1 -1
- package/dist/__tests__/runner.test.js +19 -15
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/__tests__/session-state-machine.test.d.ts +2 -0
- package/dist/__tests__/session-state-machine.test.d.ts.map +1 -0
- package/dist/__tests__/session-state-machine.test.js +154 -0
- package/dist/__tests__/session-state-machine.test.js.map +1 -0
- package/dist/__tests__/session-touch.test.js +11 -11
- package/dist/__tests__/session-touch.test.js.map +1 -1
- package/dist/__tests__/session.test.js +4 -10
- package/dist/__tests__/session.test.js.map +1 -1
- package/dist/__tests__/setup.test.d.ts +2 -0
- package/dist/__tests__/setup.test.d.ts.map +1 -0
- package/dist/__tests__/setup.test.js +141 -0
- package/dist/__tests__/setup.test.js.map +1 -0
- package/dist/__tests__/spinner-labels.test.d.ts +2 -0
- package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
- package/dist/__tests__/spinner-labels.test.js +23 -0
- package/dist/__tests__/spinner-labels.test.js.map +1 -0
- package/dist/__tests__/state.test.d.ts +6 -0
- package/dist/__tests__/state.test.d.ts.map +1 -0
- package/dist/__tests__/state.test.js +97 -0
- package/dist/__tests__/state.test.js.map +1 -0
- package/dist/__tests__/strip.test.js +2 -2
- package/dist/__tests__/strip.test.js.map +1 -1
- package/dist/__tests__/surface-profiles.test.d.ts +2 -0
- package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
- package/dist/__tests__/surface-profiles.test.js +233 -0
- package/dist/__tests__/surface-profiles.test.js.map +1 -0
- package/dist/__tests__/surfaces.test.d.ts +2 -0
- package/dist/__tests__/surfaces.test.d.ts.map +1 -0
- package/dist/__tests__/surfaces.test.js +46 -0
- package/dist/__tests__/surfaces.test.js.map +1 -0
- package/dist/__tests__/update.test.js +123 -43
- package/dist/__tests__/update.test.js.map +1 -1
- package/dist/__tests__/workspace.test.d.ts +2 -0
- package/dist/__tests__/workspace.test.d.ts.map +1 -0
- package/dist/__tests__/workspace.test.js +308 -0
- package/dist/__tests__/workspace.test.js.map +1 -0
- package/dist/commands/accept.d.ts +18 -0
- package/dist/commands/accept.d.ts.map +1 -0
- package/dist/commands/accept.js +76 -0
- package/dist/commands/accept.js.map +1 -0
- package/dist/commands/admin/cockpit.d.ts +90 -0
- package/dist/commands/admin/cockpit.d.ts.map +1 -0
- package/dist/commands/admin/cockpit.js +618 -0
- package/dist/commands/admin/cockpit.js.map +1 -0
- package/dist/commands/admin/index.d.ts +21 -0
- package/dist/commands/admin/index.d.ts.map +1 -0
- package/dist/commands/admin/index.js +256 -0
- package/dist/commands/admin/index.js.map +1 -0
- package/dist/commands/admin/inspect.d.ts +30 -0
- package/dist/commands/admin/inspect.d.ts.map +1 -0
- package/dist/commands/admin/inspect.js +555 -0
- package/dist/commands/admin/inspect.js.map +1 -0
- package/dist/commands/admin/inspect.test.d.ts +7 -0
- package/dist/commands/admin/inspect.test.d.ts.map +1 -0
- package/dist/commands/admin/inspect.test.js +90 -0
- package/dist/commands/admin/inspect.test.js.map +1 -0
- package/dist/commands/admin/manage.d.ts +8 -0
- package/dist/commands/admin/manage.d.ts.map +1 -0
- package/dist/commands/admin/manage.js +76 -0
- package/dist/commands/admin/manage.js.map +1 -0
- package/dist/commands/admin/seed.d.ts +32 -0
- package/dist/commands/admin/seed.d.ts.map +1 -0
- package/dist/commands/admin/seed.js +533 -0
- package/dist/commands/admin/seed.js.map +1 -0
- package/dist/commands/admin/seed.test.d.ts +6 -0
- package/dist/commands/admin/seed.test.d.ts.map +1 -0
- package/dist/commands/admin/seed.test.js +65 -0
- package/dist/commands/admin/seed.test.js.map +1 -0
- package/dist/commands/audit.d.ts +25 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +188 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/brand-pack.d.ts +2 -0
- package/dist/commands/brand-pack.d.ts.map +1 -0
- package/dist/commands/brand-pack.js +25 -0
- package/dist/commands/brand-pack.js.map +1 -0
- package/dist/commands/brief.d.ts +28 -0
- package/dist/commands/brief.d.ts.map +1 -0
- package/dist/commands/brief.js +75 -0
- package/dist/commands/brief.js.map +1 -0
- package/dist/commands/capture.d.ts +9 -0
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +256 -17
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/chain-walk.d.ts +14 -0
- package/dist/commands/chain-walk.d.ts.map +1 -0
- package/dist/commands/chain-walk.js +38 -0
- package/dist/commands/chain-walk.js.map +1 -0
- package/dist/commands/changes.d.ts +11 -0
- package/dist/commands/changes.d.ts.map +1 -0
- package/dist/commands/changes.js +46 -0
- package/dist/commands/changes.js.map +1 -0
- package/dist/commands/codex-prep.d.ts +12 -0
- package/dist/commands/codex-prep.d.ts.map +1 -0
- package/dist/commands/codex-prep.js +122 -0
- package/dist/commands/codex-prep.js.map +1 -0
- package/dist/commands/collections.d.ts +22 -0
- package/dist/commands/collections.d.ts.map +1 -0
- package/dist/commands/collections.js +77 -0
- package/dist/commands/collections.js.map +1 -0
- package/dist/commands/connect-integration.test.d.ts +7 -0
- package/dist/commands/connect-integration.test.d.ts.map +1 -0
- package/dist/commands/connect-integration.test.js +195 -0
- package/dist/commands/connect-integration.test.js.map +1 -0
- package/dist/commands/connect-screens.d.ts +21 -0
- package/dist/commands/connect-screens.d.ts.map +1 -0
- package/dist/commands/connect-screens.js +79 -0
- package/dist/commands/connect-screens.js.map +1 -0
- package/dist/commands/connect.d.ts +21 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +237 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/connect.test.d.ts +6 -0
- package/dist/commands/connect.test.d.ts.map +1 -0
- package/dist/commands/connect.test.js +234 -0
- package/dist/commands/connect.test.js.map +1 -0
- package/dist/commands/constellation.d.ts.map +1 -1
- package/dist/commands/constellation.js +8 -3
- package/dist/commands/constellation.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +8 -3
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/cross-cut.d.ts +11 -0
- package/dist/commands/cross-cut.d.ts.map +1 -0
- package/dist/commands/cross-cut.js +23 -0
- package/dist/commands/cross-cut.js.map +1 -0
- package/dist/commands/doctor.d.ts +18 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +232 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/doctor.test.d.ts +8 -0
- package/dist/commands/doctor.test.d.ts.map +1 -0
- package/dist/commands/doctor.test.js +311 -0
- package/dist/commands/doctor.test.js.map +1 -0
- package/dist/commands/fields.d.ts.map +1 -1
- package/dist/commands/fields.js +8 -4
- package/dist/commands/fields.js.map +1 -1
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +14 -6
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/handshake.d.ts +12 -0
- package/dist/commands/handshake.d.ts.map +1 -1
- package/dist/commands/handshake.js +422 -74
- package/dist/commands/handshake.js.map +1 -1
- package/dist/commands/ingest.d.ts +7 -2
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +137 -31
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +109 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +101 -38
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/method.d.ts +99 -0
- package/dist/commands/method.d.ts.map +1 -0
- package/dist/commands/method.js +781 -0
- package/dist/commands/method.js.map +1 -0
- package/dist/commands/orient.d.ts +106 -1
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +13 -2
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/profile.d.ts +24 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +82 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/promote.d.ts +12 -0
- package/dist/commands/promote.d.ts.map +1 -0
- package/dist/commands/promote.js +90 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/proposals.d.ts +9 -0
- package/dist/commands/proposals.d.ts.map +1 -0
- package/dist/commands/proposals.js +24 -0
- package/dist/commands/proposals.js.map +1 -0
- package/dist/commands/reject.d.ts +14 -0
- package/dist/commands/reject.d.ts.map +1 -0
- package/dist/commands/reject.js +43 -0
- package/dist/commands/reject.js.map +1 -0
- package/dist/commands/relate.d.ts +1 -0
- package/dist/commands/relate.d.ts.map +1 -1
- package/dist/commands/relate.js +41 -15
- package/dist/commands/relate.js.map +1 -1
- package/dist/commands/search.js +2 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +85 -16
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/setup.d.ts +15 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +148 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/update.d.ts +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +102 -13
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/usage.d.ts +40 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +232 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/verify.d.ts +13 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +49 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/welcome.d.ts +21 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +50 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/commands/workspace.d.ts +41 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +239 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/formatters/audit.d.ts +46 -0
- package/dist/formatters/audit.d.ts.map +1 -0
- package/dist/formatters/audit.js +81 -0
- package/dist/formatters/audit.js.map +1 -0
- package/dist/formatters/brief.d.ts +112 -0
- package/dist/formatters/brief.d.ts.map +1 -0
- package/dist/formatters/brief.js +179 -0
- package/dist/formatters/brief.js.map +1 -0
- package/dist/formatters/capture.d.ts +21 -3
- package/dist/formatters/capture.d.ts.map +1 -1
- package/dist/formatters/capture.js +20 -1
- package/dist/formatters/capture.js.map +1 -1
- package/dist/formatters/chain-walk.d.ts +33 -0
- package/dist/formatters/chain-walk.d.ts.map +1 -0
- package/dist/formatters/chain-walk.js +54 -0
- package/dist/formatters/chain-walk.js.map +1 -0
- package/dist/formatters/changes.d.ts +25 -0
- package/dist/formatters/changes.d.ts.map +1 -0
- package/dist/formatters/changes.js +60 -0
- package/dist/formatters/changes.js.map +1 -0
- package/dist/formatters/collections.d.ts +40 -0
- package/dist/formatters/collections.d.ts.map +1 -0
- package/dist/formatters/collections.js +93 -0
- package/dist/formatters/collections.js.map +1 -0
- package/dist/formatters/cross-cut.d.ts +21 -0
- package/dist/formatters/cross-cut.d.ts.map +1 -0
- package/dist/formatters/cross-cut.js +32 -0
- package/dist/formatters/cross-cut.js.map +1 -0
- package/dist/formatters/entry.d.ts +11 -4
- package/dist/formatters/entry.d.ts.map +1 -1
- package/dist/formatters/entry.js +24 -8
- package/dist/formatters/entry.js.map +1 -1
- package/dist/formatters/handshake.d.ts +29 -0
- package/dist/formatters/handshake.d.ts.map +1 -1
- package/dist/formatters/handshake.js +115 -3
- package/dist/formatters/handshake.js.map +1 -1
- package/dist/formatters/orient.d.ts +104 -1
- package/dist/formatters/orient.d.ts.map +1 -1
- package/dist/formatters/orient.js +140 -17
- package/dist/formatters/orient.js.map +1 -1
- package/dist/formatters/promote.d.ts +30 -0
- package/dist/formatters/promote.d.ts.map +1 -0
- package/dist/formatters/promote.js +39 -0
- package/dist/formatters/promote.js.map +1 -0
- package/dist/formatters/proposals.d.ts +45 -0
- package/dist/formatters/proposals.d.ts.map +1 -0
- package/dist/formatters/proposals.js +62 -0
- package/dist/formatters/proposals.js.map +1 -0
- package/dist/formatters/relate.d.ts +3 -0
- package/dist/formatters/relate.d.ts.map +1 -1
- package/dist/formatters/relate.js +6 -0
- package/dist/formatters/relate.js.map +1 -1
- package/dist/formatters/search.d.ts +0 -4
- package/dist/formatters/search.d.ts.map +1 -1
- package/dist/formatters/search.js +4 -1
- package/dist/formatters/search.js.map +1 -1
- package/dist/formatters/session.d.ts +1 -1
- package/dist/formatters/session.d.ts.map +1 -1
- package/dist/formatters/session.js +3 -1
- package/dist/formatters/session.js.map +1 -1
- package/dist/formatters/update.d.ts.map +1 -1
- package/dist/formatters/update.js +2 -0
- package/dist/formatters/update.js.map +1 -1
- package/dist/formatters/verify.d.ts +11 -0
- package/dist/formatters/verify.d.ts.map +1 -0
- package/dist/formatters/verify.js +11 -0
- package/dist/formatters/verify.js.map +1 -0
- package/dist/generators/__tests__/surface-profiles.test.d.ts +2 -0
- package/dist/generators/__tests__/surface-profiles.test.d.ts.map +1 -0
- package/dist/generators/__tests__/surface-profiles.test.js +89 -0
- package/dist/generators/__tests__/surface-profiles.test.js.map +1 -0
- package/dist/generators/adapters.d.ts +37 -3
- package/dist/generators/adapters.d.ts.map +1 -1
- package/dist/generators/adapters.js +193 -5
- package/dist/generators/adapters.js.map +1 -1
- package/dist/generators/adapters.test.d.ts +2 -0
- package/dist/generators/adapters.test.d.ts.map +1 -0
- package/dist/generators/adapters.test.js +27 -0
- package/dist/generators/adapters.test.js.map +1 -0
- package/dist/generators/archetypes.d.ts +52 -0
- package/dist/generators/archetypes.d.ts.map +1 -0
- package/dist/generators/archetypes.js +153 -0
- package/dist/generators/archetypes.js.map +1 -0
- package/dist/generators/archetypes.test.d.ts +2 -0
- package/dist/generators/archetypes.test.d.ts.map +1 -0
- package/dist/generators/archetypes.test.js +237 -0
- package/dist/generators/archetypes.test.js.map +1 -0
- package/dist/generators/chain-classifier.d.ts +49 -0
- package/dist/generators/chain-classifier.d.ts.map +1 -0
- package/dist/generators/chain-classifier.js +180 -0
- package/dist/generators/chain-classifier.js.map +1 -0
- package/dist/generators/chain-classifier.test.d.ts +2 -0
- package/dist/generators/chain-classifier.test.d.ts.map +1 -0
- package/dist/generators/chain-classifier.test.js +257 -0
- package/dist/generators/chain-classifier.test.js.map +1 -0
- package/dist/generators/chain-rules.d.ts +42 -0
- package/dist/generators/chain-rules.d.ts.map +1 -0
- package/dist/generators/chain-rules.js +144 -0
- package/dist/generators/chain-rules.js.map +1 -0
- package/dist/generators/chain-rules.test.d.ts +2 -0
- package/dist/generators/chain-rules.test.d.ts.map +1 -0
- package/dist/generators/chain-rules.test.js +179 -0
- package/dist/generators/chain-rules.test.js.map +1 -0
- package/dist/generators/context-md.d.ts +1 -1
- package/dist/generators/context-md.d.ts.map +1 -1
- package/dist/generators/context-md.js +12 -1
- package/dist/generators/context-md.js.map +1 -1
- package/dist/generators/handshake-diff.d.ts +67 -0
- package/dist/generators/handshake-diff.d.ts.map +1 -0
- package/dist/generators/handshake-diff.js +183 -0
- package/dist/generators/handshake-diff.js.map +1 -0
- package/dist/generators/handshake-diff.test.d.ts +2 -0
- package/dist/generators/handshake-diff.test.d.ts.map +1 -0
- package/dist/generators/handshake-diff.test.js +264 -0
- package/dist/generators/handshake-diff.test.js.map +1 -0
- package/dist/generators/manifest.d.ts +37 -0
- package/dist/generators/manifest.d.ts.map +1 -0
- package/dist/generators/manifest.js +166 -0
- package/dist/generators/manifest.js.map +1 -0
- package/dist/generators/portable-knowledge.d.ts +102 -9
- package/dist/generators/portable-knowledge.d.ts.map +1 -1
- package/dist/generators/portable-knowledge.js +384 -17
- package/dist/generators/portable-knowledge.js.map +1 -1
- package/dist/generators/portable-knowledge.test.js +529 -1
- package/dist/generators/portable-knowledge.test.js.map +1 -1
- package/dist/generators/surface-profiles.d.ts +49 -0
- package/dist/generators/surface-profiles.d.ts.map +1 -0
- package/dist/generators/surface-profiles.js +98 -0
- package/dist/generators/surface-profiles.js.map +1 -0
- package/dist/index.js +618 -138
- package/dist/index.js.map +1 -1
- package/dist/lib/activation.d.ts +28 -0
- package/dist/lib/activation.d.ts.map +1 -0
- package/dist/lib/activation.js +57 -0
- package/dist/lib/activation.js.map +1 -0
- package/dist/lib/activation.test.d.ts +6 -0
- package/dist/lib/activation.test.d.ts.map +1 -0
- package/dist/lib/activation.test.js +121 -0
- package/dist/lib/activation.test.js.map +1 -0
- package/dist/lib/client.d.ts +45 -3
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +188 -36
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/collectionRegistry.d.ts +38 -0
- package/dist/lib/collectionRegistry.d.ts.map +1 -0
- package/dist/lib/collectionRegistry.js +112 -0
- package/dist/lib/collectionRegistry.js.map +1 -0
- package/dist/lib/config.d.ts +84 -4
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +322 -42
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +42 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +76 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/conversation-engine.d.ts +45 -0
- package/dist/lib/conversation-engine.d.ts.map +1 -0
- package/dist/lib/conversation-engine.js +112 -0
- package/dist/lib/conversation-engine.js.map +1 -0
- package/dist/lib/conversation-phases.d.ts +59 -0
- package/dist/lib/conversation-phases.d.ts.map +1 -0
- package/dist/lib/conversation-phases.js +11 -0
- package/dist/lib/conversation-phases.js.map +1 -0
- package/dist/lib/conversation-signals.d.ts +30 -0
- package/dist/lib/conversation-signals.d.ts.map +1 -0
- package/dist/lib/conversation-signals.js +64 -0
- package/dist/lib/conversation-signals.js.map +1 -0
- package/dist/lib/deployment.d.ts +23 -0
- package/dist/lib/deployment.d.ts.map +1 -0
- package/dist/lib/deployment.js +78 -0
- package/dist/lib/deployment.js.map +1 -0
- package/dist/lib/deployment.test.d.ts +5 -0
- package/dist/lib/deployment.test.d.ts.map +1 -0
- package/dist/lib/deployment.test.js +54 -0
- package/dist/lib/deployment.test.js.map +1 -0
- package/dist/lib/errors.d.ts +58 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +67 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/experiment.d.ts +18 -0
- package/dist/lib/experiment.d.ts.map +1 -0
- package/dist/lib/experiment.js +28 -0
- package/dist/lib/experiment.js.map +1 -0
- package/dist/lib/format.d.ts +10 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +27 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/glossary.d.ts +19 -0
- package/dist/lib/glossary.d.ts.map +1 -0
- package/dist/lib/glossary.js +53 -0
- package/dist/lib/glossary.js.map +1 -0
- package/dist/lib/hook-intents.d.ts +51 -0
- package/dist/lib/hook-intents.d.ts.map +1 -0
- package/dist/lib/hook-intents.js +85 -0
- package/dist/lib/hook-intents.js.map +1 -0
- package/dist/lib/inferSourceDate.d.ts +12 -0
- package/dist/lib/inferSourceDate.d.ts.map +1 -0
- package/dist/lib/inferSourceDate.js +44 -0
- package/dist/lib/inferSourceDate.js.map +1 -0
- package/dist/lib/method-registry.d.ts +32 -0
- package/dist/lib/method-registry.d.ts.map +1 -0
- package/dist/lib/method-registry.js +53 -0
- package/dist/lib/method-registry.js.map +1 -0
- package/dist/lib/onboarding-path-b.d.ts +10 -0
- package/dist/lib/onboarding-path-b.d.ts.map +1 -0
- package/dist/lib/onboarding-path-b.js +214 -0
- package/dist/lib/onboarding-path-b.js.map +1 -0
- package/dist/lib/onboarding-phases.d.ts +9 -0
- package/dist/lib/onboarding-phases.d.ts.map +1 -0
- package/dist/lib/onboarding-phases.js +120 -0
- package/dist/lib/onboarding-phases.js.map +1 -0
- package/dist/lib/onboarding-shared.d.ts +81 -0
- package/dist/lib/onboarding-shared.d.ts.map +1 -0
- package/dist/lib/onboarding-shared.js +190 -0
- package/dist/lib/onboarding-shared.js.map +1 -0
- package/dist/lib/onboarding-topics.d.ts +27 -0
- package/dist/lib/onboarding-topics.d.ts.map +1 -0
- package/dist/lib/onboarding-topics.js +57 -0
- package/dist/lib/onboarding-topics.js.map +1 -0
- package/dist/lib/onboarding.d.ts +17 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +350 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/profiles.d.ts +39 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +185 -0
- package/dist/lib/profiles.js.map +1 -0
- package/dist/lib/prompts.d.ts +65 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +132 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/repo-detect.d.ts +19 -0
- package/dist/lib/repo-detect.d.ts.map +1 -1
- package/dist/lib/repo-detect.js +25 -0
- package/dist/lib/repo-detect.js.map +1 -1
- package/dist/lib/runner.d.ts +2 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +21 -7
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/session.d.ts +25 -0
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +70 -4
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/spinner.d.ts +27 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +76 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/spinner.test.d.ts +2 -0
- package/dist/lib/spinner.test.d.ts.map +1 -0
- package/dist/lib/spinner.test.js +39 -0
- package/dist/lib/spinner.test.js.map +1 -0
- package/dist/lib/state.d.ts +51 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +90 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/strip.d.ts +1 -0
- package/dist/lib/strip.d.ts.map +1 -1
- package/dist/lib/strip.js +15 -0
- package/dist/lib/strip.js.map +1 -1
- package/dist/lib/style.d.ts +96 -0
- package/dist/lib/style.d.ts.map +1 -0
- package/dist/lib/style.js +169 -0
- package/dist/lib/style.js.map +1 -0
- package/dist/lib/style.test.d.ts +7 -0
- package/dist/lib/style.test.d.ts.map +1 -0
- package/dist/lib/style.test.js +263 -0
- package/dist/lib/style.test.js.map +1 -0
- package/dist/lib/telemetry.d.ts +15 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +47 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/tokenConstants.d.ts +17 -0
- package/dist/lib/tokenConstants.d.ts.map +1 -0
- package/dist/lib/tokenConstants.js +17 -0
- package/dist/lib/tokenConstants.js.map +1 -0
- package/dist/lib/update-check.d.ts +21 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +145 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/wizard-surfaces.d.ts +47 -0
- package/dist/lib/wizard-surfaces.d.ts.map +1 -0
- package/dist/lib/wizard-surfaces.js +176 -0
- package/dist/lib/wizard-surfaces.js.map +1 -0
- package/dist/lib/wizard-surfaces.test.d.ts +2 -0
- package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
- package/dist/lib/wizard-surfaces.test.js +127 -0
- package/dist/lib/wizard-surfaces.test.js.map +1 -0
- package/dist/lib/wizard-trust.d.ts +31 -0
- package/dist/lib/wizard-trust.d.ts.map +1 -0
- package/dist/lib/wizard-trust.js +66 -0
- package/dist/lib/wizard-trust.js.map +1 -0
- package/dist/lib/wizard-trust.test.d.ts +2 -0
- package/dist/lib/wizard-trust.test.d.ts.map +1 -0
- package/dist/lib/wizard-trust.test.js +32 -0
- package/dist/lib/wizard-trust.test.js.map +1 -0
- package/dist/lib/workspace-probe.d.ts +19 -0
- package/dist/lib/workspace-probe.d.ts.map +1 -0
- package/dist/lib/workspace-probe.js +27 -0
- package/dist/lib/workspace-probe.js.map +1 -0
- package/dist/surfaces/registry.d.ts +20 -0
- package/dist/surfaces/registry.d.ts.map +1 -0
- package/dist/surfaces/registry.js +42 -0
- package/dist/surfaces/registry.js.map +1 -0
- package/package.json +9 -3
- package/templates/archetypes/boundary.md +23 -0
- package/templates/archetypes/constraint.md +23 -0
- package/templates/archetypes/convention.md +23 -0
- package/templates/archetypes/policy.md +23 -0
- package/templates/archetypes/quality-gate.md +23 -0
- package/templates/archetypes/workflow.md +23 -0
- package/templates/general/code-integrity.md +11 -0
- package/templates/general/getting-started.md +12 -0
- package/templates/method-registry.json +16 -0
- package/templates/node-ts/code-integrity.md +13 -0
- package/templates/node-ts/testing.md +12 -0
- package/templates/python/code-integrity.md +13 -0
- package/templates/python/testing.md +12 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation engine — topic evaluation, XML directive builder, post-processing.
|
|
3
|
+
* WP-304: Coach pattern — LLM judges topic completion, heuristic backup.
|
|
4
|
+
*
|
|
5
|
+
* The engine evaluates topic completion and builds XML directives.
|
|
6
|
+
* It does NOT generate content — that's the LLM's job.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Minimum user words before topic skipping is allowed.
|
|
10
|
+
* Below this threshold, the conversation is too thin for quality extraction —
|
|
11
|
+
* keep asking even if LLM signals say the topic is covered.
|
|
12
|
+
*/
|
|
13
|
+
const MIN_WORDS_FOR_SKIP = 20;
|
|
14
|
+
/**
|
|
15
|
+
* Check if a topic should be skipped because its signal is already present.
|
|
16
|
+
* Only skips if we have enough content for quality extraction (>= 20 words).
|
|
17
|
+
*/
|
|
18
|
+
export function shouldSkipTopic(topic, signals, totalUserWords) {
|
|
19
|
+
if (topic.skipIfSignal === null)
|
|
20
|
+
return false;
|
|
21
|
+
if (totalUserWords < MIN_WORDS_FOR_SKIP)
|
|
22
|
+
return false;
|
|
23
|
+
return signals[topic.skipIfSignal] === true;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Evaluate whether the current topic is complete.
|
|
27
|
+
* Priority: skip > LLM judgment > heuristic backup > forced > continue.
|
|
28
|
+
*/
|
|
29
|
+
export function evaluateTopic(topic, state, llmSaidComplete) {
|
|
30
|
+
// 1. Skip: signal already present from earlier topics (only if enough content)
|
|
31
|
+
if (shouldSkipTopic(topic, state.signals, state.totalUserWords)) {
|
|
32
|
+
return { complete: true, forced: false, skip: true };
|
|
33
|
+
}
|
|
34
|
+
const exchanges = state.topicExchanges[topic.id] ?? 0;
|
|
35
|
+
// 2. LLM says complete (require at least 1 exchange to prevent premature completion)
|
|
36
|
+
if (llmSaidComplete && exchanges >= 1) {
|
|
37
|
+
return { complete: true, forced: false, skip: false };
|
|
38
|
+
}
|
|
39
|
+
// 3. Heuristic backup: signal detected even if LLM didn't say complete
|
|
40
|
+
if (topic.heuristicSignal && state.signals[topic.heuristicSignal] === true && exchanges >= 1) {
|
|
41
|
+
return { complete: true, forced: false, skip: false };
|
|
42
|
+
}
|
|
43
|
+
// 4. Forced: max exchanges hit
|
|
44
|
+
if (exchanges >= topic.maxExchanges) {
|
|
45
|
+
return { complete: true, forced: true, skip: false };
|
|
46
|
+
}
|
|
47
|
+
// 5. Continue
|
|
48
|
+
return { complete: false, forced: false, skip: false };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Build the XML topic directive to inject into the system prompt.
|
|
52
|
+
* Renders <topic> with goal/behaviour/criteria, plus <accumulated_context>
|
|
53
|
+
* with completed Q&A pairs from earlier topics.
|
|
54
|
+
*/
|
|
55
|
+
export function buildTopicDirective(topic, topicIndex, totalTopics, completedQA, workspaceName) {
|
|
56
|
+
let xml = `
|
|
57
|
+
<topic id="${topic.id}" index="${topicIndex + 1}" of="${totalTopics}">
|
|
58
|
+
<goal>${topic.goal}</goal>
|
|
59
|
+
<behaviour>${topic.behaviour}</behaviour>
|
|
60
|
+
<criteria>${topic.criteria}</criteria>
|
|
61
|
+
</topic>`;
|
|
62
|
+
if (completedQA.length > 0) {
|
|
63
|
+
xml += '\n\n<accumulated_context>';
|
|
64
|
+
for (const qa of completedQA) {
|
|
65
|
+
xml += `\n <topic_qa id="${qa.topicId}">`;
|
|
66
|
+
xml += `\n <question>${qa.question}</question>`;
|
|
67
|
+
xml += `\n <answer>${qa.answer}</answer>`;
|
|
68
|
+
xml += '\n </topic_qa>';
|
|
69
|
+
}
|
|
70
|
+
xml += '\n</accumulated_context>';
|
|
71
|
+
}
|
|
72
|
+
return xml;
|
|
73
|
+
}
|
|
74
|
+
// ── Post-processing ─────────────────────────────────────────────────────────
|
|
75
|
+
const BANNED_PATTERNS = [
|
|
76
|
+
/\bsounds like\b/gi,
|
|
77
|
+
/\bit sounds like\b/gi,
|
|
78
|
+
/\bsounds\s+(?:ambitious|exciting|fascinating|impressive|intriguing|interesting|amazing|complex|like)\b/gi,
|
|
79
|
+
/\bintriguing\b/gi,
|
|
80
|
+
// Anti-paraphrase: strip "When you say X," and "You mentioned X," prefixes
|
|
81
|
+
/^when you (?:say|mention|talk about)\b[^.?!]{0,60}[,]\s*/i,
|
|
82
|
+
/^you mentioned\b[^.?!]{0,60}[,]\s*/i,
|
|
83
|
+
];
|
|
84
|
+
/**
|
|
85
|
+
* Strip banned patterns the LLM produces despite prompt instructions.
|
|
86
|
+
* Safety net — Gemini Flash at temp 0.3 still produces these ~15% of the time.
|
|
87
|
+
*/
|
|
88
|
+
export function sanitizeResponse(text) {
|
|
89
|
+
let cleaned = text;
|
|
90
|
+
for (const pattern of BANNED_PATTERNS) {
|
|
91
|
+
cleaned = cleaned.replace(pattern, '');
|
|
92
|
+
}
|
|
93
|
+
// Clean up double spaces and leading punctuation from removals
|
|
94
|
+
return cleaned.replace(/\s{2,}/g, ' ').replace(/^\s*[.,]\s*/, '').trim();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Detect if a response is too similar to recent ones (refusal loop).
|
|
98
|
+
* Uses Jaccard similarity on word sets.
|
|
99
|
+
*/
|
|
100
|
+
export function isTooSimilar(newMsg, recentMsgs, threshold = 0.6) {
|
|
101
|
+
const newWords = new Set(newMsg.toLowerCase().split(/\s+/));
|
|
102
|
+
for (const prev of recentMsgs.slice(-2)) {
|
|
103
|
+
const prevWords = new Set(prev.toLowerCase().split(/\s+/));
|
|
104
|
+
const intersection = new Set([...newWords].filter((w) => prevWords.has(w)));
|
|
105
|
+
const union = new Set([...newWords, ...prevWords]);
|
|
106
|
+
if (union.size > 0 && intersection.size / union.size > threshold) {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=conversation-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-engine.js","sourceRoot":"","sources":["../../src/lib/conversation-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation types — state and signal types for coach-pattern conversations.
|
|
3
|
+
* WP-304: LLM owns content, CLI owns flow.
|
|
4
|
+
*
|
|
5
|
+
* Pattern: Deterministic Shell, Stochastic Core.
|
|
6
|
+
* - CLI defines topics with goal/behaviour/criteria (deterministic)
|
|
7
|
+
* - LLM generates conversation content and judges criteria (stochastic)
|
|
8
|
+
* - CLI evaluates with heuristic backup and decides when to advance
|
|
9
|
+
*/
|
|
10
|
+
/** A completed topic's question-answer pair, accumulated as context for later topics. */
|
|
11
|
+
export interface TopicQA {
|
|
12
|
+
topicId: string;
|
|
13
|
+
question: string;
|
|
14
|
+
answer: string;
|
|
15
|
+
}
|
|
16
|
+
/** Conversation state — the CLI's accumulated view of the conversation. */
|
|
17
|
+
export interface ConversationState {
|
|
18
|
+
/** All messages so far. */
|
|
19
|
+
messages: Array<{
|
|
20
|
+
role: 'user' | 'assistant';
|
|
21
|
+
content: string;
|
|
22
|
+
}>;
|
|
23
|
+
/** Number of user messages total. */
|
|
24
|
+
userMessageCount: number;
|
|
25
|
+
/** Total user words total. */
|
|
26
|
+
totalUserWords: number;
|
|
27
|
+
/** Exchange count per topic (coach pattern) or phase (legacy). */
|
|
28
|
+
topicExchanges: Record<string, number>;
|
|
29
|
+
/** @deprecated Alias for topicExchanges — used by legacy phase engine until Slice 3. */
|
|
30
|
+
phaseExchanges: Record<string, number>;
|
|
31
|
+
/** Which topics have been completed. */
|
|
32
|
+
completedTopics: Set<string>;
|
|
33
|
+
/** @deprecated Alias for completedTopics — used by legacy phase engine until Slice 3. */
|
|
34
|
+
completedPhases: Set<string>;
|
|
35
|
+
/** Current topic ID. */
|
|
36
|
+
currentTopicId: string;
|
|
37
|
+
/** @deprecated Alias for currentTopicId — used by legacy phase engine until Slice 3. */
|
|
38
|
+
currentPhaseId: string;
|
|
39
|
+
/** Completed topic Q&A pairs — accumulated context for later topics. */
|
|
40
|
+
completedQA: TopicQA[];
|
|
41
|
+
/** Heuristic signals detected from user messages. */
|
|
42
|
+
signals: ConversationSignals;
|
|
43
|
+
/** Count of consecutive refusals/non-answers. */
|
|
44
|
+
refusalStreak: number;
|
|
45
|
+
}
|
|
46
|
+
/** Signals detected from user messages — heuristic + LLM-reported. */
|
|
47
|
+
export interface ConversationSignals {
|
|
48
|
+
/** User described what they're building. */
|
|
49
|
+
mentionedProduct: boolean;
|
|
50
|
+
/** User described a problem, pain point, or challenge. */
|
|
51
|
+
mentionedChallenge: boolean;
|
|
52
|
+
/** User mentioned why they're trying Product Brain. */
|
|
53
|
+
mentionedWhyPB: boolean;
|
|
54
|
+
/** User gave at least one substantive answer (>= 15 words). */
|
|
55
|
+
hasSubstantiveAnswer: boolean;
|
|
56
|
+
/** Number of user messages with >= 8 words. */
|
|
57
|
+
substantiveMessageCount: number;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=conversation-phases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-phases.d.ts","sourceRoot":"","sources":["../../src/lib/conversation-phases.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,yFAAyF;AACzF,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEjE,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IAEvB,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,wFAAwF;IACxF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,wCAAwC;IACxC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,yFAAyF;IACzF,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE7B,wBAAwB;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,cAAc,EAAE,MAAM,CAAC;IAEvB,wEAAwE;IACxE,WAAW,EAAE,OAAO,EAAE,CAAC;IAEvB,qDAAqD;IACrD,OAAO,EAAE,mBAAmB,CAAC;IAE7B,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,sEAAsE;AACtE,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,gBAAgB,EAAE,OAAO,CAAC;IAE1B,0DAA0D;IAC1D,kBAAkB,EAAE,OAAO,CAAC;IAE5B,uDAAuD;IACvD,cAAc,EAAE,OAAO,CAAC;IAExB,+DAA+D;IAC/D,oBAAoB,EAAE,OAAO,CAAC;IAE9B,+CAA+C;IAC/C,uBAAuB,EAAE,MAAM,CAAC;CACjC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation types — state and signal types for coach-pattern conversations.
|
|
3
|
+
* WP-304: LLM owns content, CLI owns flow.
|
|
4
|
+
*
|
|
5
|
+
* Pattern: Deterministic Shell, Stochastic Core.
|
|
6
|
+
* - CLI defines topics with goal/behaviour/criteria (deterministic)
|
|
7
|
+
* - LLM generates conversation content and judges criteria (stochastic)
|
|
8
|
+
* - CLI evaluates with heuristic backup and decides when to advance
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=conversation-phases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-phases.js","sourceRoot":"","sources":["../../src/lib/conversation-phases.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation signal detection — heuristic pattern matching on user text.
|
|
3
|
+
* WP-304: CLI-side signal detection as backup/validation for LLM-reported signals.
|
|
4
|
+
*
|
|
5
|
+
* These are intentionally loose. False positives advance the conversation
|
|
6
|
+
* (fine — user gave a relevant answer). False negatives mean one more turn
|
|
7
|
+
* in the phase (also fine — maxExchanges caps prevent loops).
|
|
8
|
+
*/
|
|
9
|
+
import type { ConversationSignals } from './conversation-phases.js';
|
|
10
|
+
/**
|
|
11
|
+
* Detect signals from user messages using regex heuristics.
|
|
12
|
+
* Returns accumulated signals across all user messages.
|
|
13
|
+
*
|
|
14
|
+
* Thresholds are intentionally strict — we'd rather ask one more question
|
|
15
|
+
* than advance on a vague answer. maxExchanges is the safety valve.
|
|
16
|
+
*/
|
|
17
|
+
export declare function detectSignals(messages: Array<{
|
|
18
|
+
role: string;
|
|
19
|
+
content: string;
|
|
20
|
+
}>): ConversationSignals;
|
|
21
|
+
/**
|
|
22
|
+
* Merge LLM-reported signals into heuristic signals.
|
|
23
|
+
* LLM signals are additive — once true, always true.
|
|
24
|
+
*/
|
|
25
|
+
export declare function mergeSignals(heuristic: ConversationSignals, llmSignals: {
|
|
26
|
+
describedProduct?: boolean;
|
|
27
|
+
describedProblem?: boolean;
|
|
28
|
+
answeredWhyPB?: boolean;
|
|
29
|
+
}): ConversationSignals;
|
|
30
|
+
//# sourceMappingURL=conversation-signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-signals.d.ts","sourceRoot":"","sources":["../../src/lib/conversation-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AA4BpE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,mBAAmB,CAgBrG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9F,mBAAmB,CAOrB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation signal detection — heuristic pattern matching on user text.
|
|
3
|
+
* WP-304: CLI-side signal detection as backup/validation for LLM-reported signals.
|
|
4
|
+
*
|
|
5
|
+
* These are intentionally loose. False positives advance the conversation
|
|
6
|
+
* (fine — user gave a relevant answer). False negatives mean one more turn
|
|
7
|
+
* in the phase (also fine — maxExchanges caps prevent loops).
|
|
8
|
+
*/
|
|
9
|
+
const PRODUCT_PATTERNS = [
|
|
10
|
+
/\b(?:building|making|creating|working on|developing)\b/i,
|
|
11
|
+
/\b(?:app|platform|tool|product|service|saas|api|system|software)\b/i,
|
|
12
|
+
];
|
|
13
|
+
const CHALLENGE_PATTERNS = [
|
|
14
|
+
/\b(?:hard|hardest|difficult|challeng|struggling?|pain|problem|frustrat|broken|mess)\b/i,
|
|
15
|
+
/\b(?:don'?t know|can'?t figure|losing track|forget|lost context|outdated|rot)\b/i,
|
|
16
|
+
/\b(?:hate|annoying|waste|slow|manual|tedious)\b/i,
|
|
17
|
+
];
|
|
18
|
+
const WHY_PB_PATTERNS = [
|
|
19
|
+
/\b(?:product brain|brain)\b/i,
|
|
20
|
+
/\b(?:context|memory|decisions?|knowledge|source of truth|ssot)\b/i,
|
|
21
|
+
/\b(?:ai|llm|claude|cursor|copilot|agent)\b.*\b(?:context|remember|forget|know)\b/i,
|
|
22
|
+
/\b(?:remember|forget|consistent|prompt)\b.*\b(?:ai|llm|agent|tool)\b/i,
|
|
23
|
+
// Broader: user describes the problem PB solves without naming PB
|
|
24
|
+
/\b(?:re-?explain|repeat myself|start from (?:zero|scratch)|re-?tell)\b/i,
|
|
25
|
+
/\b(?:docs?|documentation|md files?)\b.*\b(?:outdated|stale|rot|drift|wrong|maintain)\b/i,
|
|
26
|
+
/\b(?:cost|waste|spend)\b.*\b(?:tokens?|context|time)\b.*\b(?:re-?explain|repeat|maintain)\b/i,
|
|
27
|
+
];
|
|
28
|
+
function countWords(text) {
|
|
29
|
+
return text.trim().split(/\s+/).filter(Boolean).length;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Detect signals from user messages using regex heuristics.
|
|
33
|
+
* Returns accumulated signals across all user messages.
|
|
34
|
+
*
|
|
35
|
+
* Thresholds are intentionally strict — we'd rather ask one more question
|
|
36
|
+
* than advance on a vague answer. maxExchanges is the safety valve.
|
|
37
|
+
*/
|
|
38
|
+
export function detectSignals(messages) {
|
|
39
|
+
const userMessages = messages.filter((m) => m.role === 'user');
|
|
40
|
+
return {
|
|
41
|
+
// Product mention requires BOTH a pattern match AND enough words to be meaningful.
|
|
42
|
+
// "a cool app" matches the pattern but isn't substantive — need at least 10 words.
|
|
43
|
+
mentionedProduct: userMessages.some((m) => PRODUCT_PATTERNS.some((p) => p.test(m.content)) && countWords(m.content) >= 10),
|
|
44
|
+
mentionedChallenge: userMessages.some((m) => CHALLENGE_PATTERNS.some((p) => p.test(m.content))),
|
|
45
|
+
mentionedWhyPB: userMessages.some((m) => WHY_PB_PATTERNS.some((p) => p.test(m.content))),
|
|
46
|
+
// Substantive = enough detail to extract something meaningful from
|
|
47
|
+
hasSubstantiveAnswer: userMessages.some((m) => countWords(m.content) >= 15),
|
|
48
|
+
// Count messages with real content (not just "me" or "yes")
|
|
49
|
+
substantiveMessageCount: userMessages.filter((m) => countWords(m.content) >= 8).length,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Merge LLM-reported signals into heuristic signals.
|
|
54
|
+
* LLM signals are additive — once true, always true.
|
|
55
|
+
*/
|
|
56
|
+
export function mergeSignals(heuristic, llmSignals) {
|
|
57
|
+
return {
|
|
58
|
+
...heuristic,
|
|
59
|
+
mentionedProduct: heuristic.mentionedProduct || (llmSignals.describedProduct ?? false),
|
|
60
|
+
mentionedChallenge: heuristic.mentionedChallenge || (llmSignals.describedProblem ?? false),
|
|
61
|
+
mentionedWhyPB: heuristic.mentionedWhyPB || (llmSignals.answeredWhyPB ?? false),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=conversation-signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-signals.js","sourceRoot":"","sources":["../../src/lib/conversation-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,gBAAgB,GAAG;IACvB,yDAAyD;IACzD,qEAAqE;CACtE,CAAC;AAEF,MAAM,kBAAkB,GAAG;IACzB,wFAAwF;IACxF,kFAAkF;IAClF,kDAAkD;CACnD,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,8BAA8B;IAC9B,mEAAmE;IACnE,mFAAmF;IACnF,uEAAuE;IACvE,kEAAkE;IAClE,yEAAyE;IACzE,yFAAyF;IACzF,8FAA8F;CAC/F,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACzD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkD;IAC9E,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAE/D,OAAO;QACL,mFAAmF;QACnF,mFAAmF;QACnF,gBAAgB,EAAE,YAAY,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CACtF;QACD,kBAAkB,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/F,cAAc,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACxF,mEAAmE;QACnE,oBAAoB,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3E,4DAA4D;QAC5D,uBAAuB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;KACvF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,SAA8B,EAC9B,UAA+F;IAE/F,OAAO;QACL,GAAG,SAAS;QACZ,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,gBAAgB,IAAI,KAAK,CAAC;QACtF,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,gBAAgB,IAAI,KAAK,CAAC;QAC1F,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,KAAK,CAAC;KAChF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convex / gateway deployment classification for CLI banners and admin seed gates.
|
|
3
|
+
*
|
|
4
|
+
* Convex uses "Development (Cloud)" vs "Production" for deployments; the CLI must not
|
|
5
|
+
* treat every non-localhost URL as "production" (WP-312 follow-up).
|
|
6
|
+
*
|
|
7
|
+
* Extend PRODUCTION_HOSTS / DEV_CLOUD_HOSTS when new team deployments are provisioned.
|
|
8
|
+
*/
|
|
9
|
+
/** Loopback — local Convex dev UI / tunnel only. */
|
|
10
|
+
export type DeploymentTier = 'local' | 'prod' | 'dev-cloud' | 'cloud';
|
|
11
|
+
export declare function parseHostname(siteUrl: string): string;
|
|
12
|
+
export declare function classifyDeployment(siteUrl: string): DeploymentTier;
|
|
13
|
+
/**
|
|
14
|
+
* Whether admin seed destructive paths should show confirmation + `--confirm` in CI.
|
|
15
|
+
* False for loopback and known dev-cloud Convex deployments only.
|
|
16
|
+
*/
|
|
17
|
+
export declare function requiresAdminDestructiveConfirmation(siteUrl: string): boolean;
|
|
18
|
+
/** Title for clack `note()` before confirm (prod vs unknown remote). */
|
|
19
|
+
export declare function confirmRiskNoteTitle(siteUrl: string): string;
|
|
20
|
+
export declare function seedRunConfirmMessage(siteUrl: string, manifestName: string): string;
|
|
21
|
+
export declare function seedAllConfirmMessage(siteUrl: string): string;
|
|
22
|
+
export declare function seedMultiselectConfirmMessage(siteUrl: string, count: number): string;
|
|
23
|
+
//# sourceMappingURL=deployment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;AAwBtE,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAMlE;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG7E;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAInF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convex / gateway deployment classification for CLI banners and admin seed gates.
|
|
3
|
+
*
|
|
4
|
+
* Convex uses "Development (Cloud)" vs "Production" for deployments; the CLI must not
|
|
5
|
+
* treat every non-localhost URL as "production" (WP-312 follow-up).
|
|
6
|
+
*
|
|
7
|
+
* Extend PRODUCTION_HOSTS / DEV_CLOUD_HOSTS when new team deployments are provisioned.
|
|
8
|
+
*/
|
|
9
|
+
const LOCAL_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]']);
|
|
10
|
+
/**
|
|
11
|
+
* Customer / team production hosts (gateway, prod Convex deployment, public API).
|
|
12
|
+
* Destructive admin seeds use production-style confirmation + red [PROD] banner.
|
|
13
|
+
*/
|
|
14
|
+
const PRODUCTION_HOSTS = new Set([
|
|
15
|
+
'gateway.productbrain.io',
|
|
16
|
+
'data.productbrain.io',
|
|
17
|
+
'api.productbrain.io',
|
|
18
|
+
/** Convex Production deployment (dashboard label). */
|
|
19
|
+
'terrific-penguin-60.convex.site',
|
|
20
|
+
]);
|
|
21
|
+
/**
|
|
22
|
+
* Convex **Development (Cloud)** deployments — real cloud DB, not customer prod.
|
|
23
|
+
* No prod-style gate; banner shows [DEV·CLOUD].
|
|
24
|
+
*/
|
|
25
|
+
const DEV_CLOUD_HOSTS = new Set([
|
|
26
|
+
'trustworthy-kangaroo-277.convex.site',
|
|
27
|
+
]);
|
|
28
|
+
export function parseHostname(siteUrl) {
|
|
29
|
+
try {
|
|
30
|
+
return new URL(siteUrl).hostname;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return siteUrl;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function classifyDeployment(siteUrl) {
|
|
37
|
+
const host = parseHostname(siteUrl);
|
|
38
|
+
if (LOCAL_HOSTS.has(host))
|
|
39
|
+
return 'local';
|
|
40
|
+
if (PRODUCTION_HOSTS.has(host))
|
|
41
|
+
return 'prod';
|
|
42
|
+
if (DEV_CLOUD_HOSTS.has(host))
|
|
43
|
+
return 'dev-cloud';
|
|
44
|
+
return 'cloud';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Whether admin seed destructive paths should show confirmation + `--confirm` in CI.
|
|
48
|
+
* False for loopback and known dev-cloud Convex deployments only.
|
|
49
|
+
*/
|
|
50
|
+
export function requiresAdminDestructiveConfirmation(siteUrl) {
|
|
51
|
+
const t = classifyDeployment(siteUrl);
|
|
52
|
+
return t !== 'local' && t !== 'dev-cloud';
|
|
53
|
+
}
|
|
54
|
+
/** Title for clack `note()` before confirm (prod vs unknown remote). */
|
|
55
|
+
export function confirmRiskNoteTitle(siteUrl) {
|
|
56
|
+
const t = classifyDeployment(siteUrl);
|
|
57
|
+
if (t === 'prod')
|
|
58
|
+
return '⚠ Production';
|
|
59
|
+
if (t === 'cloud')
|
|
60
|
+
return '⚠ Remote deployment';
|
|
61
|
+
return '⚠ Confirm';
|
|
62
|
+
}
|
|
63
|
+
export function seedRunConfirmMessage(siteUrl, manifestName) {
|
|
64
|
+
return classifyDeployment(siteUrl) === 'prod'
|
|
65
|
+
? `Run ${manifestName} on production?`
|
|
66
|
+
: `Run ${manifestName} on this remote deployment?`;
|
|
67
|
+
}
|
|
68
|
+
export function seedAllConfirmMessage(siteUrl) {
|
|
69
|
+
return classifyDeployment(siteUrl) === 'prod'
|
|
70
|
+
? 'Run ALL seed operations on production?'
|
|
71
|
+
: 'Run ALL seed operations on this remote deployment?';
|
|
72
|
+
}
|
|
73
|
+
export function seedMultiselectConfirmMessage(siteUrl, count) {
|
|
74
|
+
return classifyDeployment(siteUrl) === 'prod'
|
|
75
|
+
? `Run ${count} operation(s) on PRODUCTION?`
|
|
76
|
+
: `Run ${count} operation(s) on this remote deployment?`;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=deployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjE;;;GAGG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS;IACvC,yBAAyB;IACzB,sBAAsB;IACtB,qBAAqB;IACrB,sDAAsD;IACtD,iCAAiC;CAClC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAS;IACtC,sCAAsC;CACvC,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC;IAClD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oCAAoC,CAAC,OAAe;IAClE,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,WAAW,CAAC;AAC5C,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC;IACzC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,sBAAsB,CAAC;IACjD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,YAAoB;IACzE,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,MAAM;QAC3C,CAAC,CAAC,OAAO,YAAY,iBAAiB;QACtC,CAAC,CAAC,OAAO,YAAY,6BAA6B,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,MAAM;QAC3C,CAAC,CAAC,wCAAwC;QAC1C,CAAC,CAAC,oDAAoD,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAe,EAAE,KAAa;IAC1E,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,MAAM;QAC3C,CAAC,CAAC,OAAO,KAAK,8BAA8B;QAC5C,CAAC,CAAC,OAAO,KAAK,0CAA0C,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.test.d.ts","sourceRoot":"","sources":["../../src/lib/deployment.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment classification — banners and admin seed gates.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from 'vitest';
|
|
5
|
+
import { classifyDeployment, confirmRiskNoteTitle, parseHostname, requiresAdminDestructiveConfirmation, seedAllConfirmMessage, seedRunConfirmMessage, } from './deployment.js';
|
|
6
|
+
describe('parseHostname', () => {
|
|
7
|
+
it('parses hostname from https URL', () => {
|
|
8
|
+
expect(parseHostname('https://trustworthy-kangaroo-277.convex.site')).toBe('trustworthy-kangaroo-277.convex.site');
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
describe('classifyDeployment', () => {
|
|
12
|
+
it('classifies loopback as local', () => {
|
|
13
|
+
expect(classifyDeployment('http://localhost:5176')).toBe('local');
|
|
14
|
+
expect(classifyDeployment('http://127.0.0.1:3000')).toBe('local');
|
|
15
|
+
expect(classifyDeployment('http://[::1]:3000')).toBe('local');
|
|
16
|
+
});
|
|
17
|
+
it('classifies known dev-cloud Convex deployment', () => {
|
|
18
|
+
expect(classifyDeployment('https://trustworthy-kangaroo-277.convex.site')).toBe('dev-cloud');
|
|
19
|
+
});
|
|
20
|
+
it('classifies gateway and prod Convex as prod', () => {
|
|
21
|
+
expect(classifyDeployment('https://gateway.productbrain.io')).toBe('prod');
|
|
22
|
+
expect(classifyDeployment('https://terrific-penguin-60.convex.site')).toBe('prod');
|
|
23
|
+
expect(classifyDeployment('https://api.productbrain.io')).toBe('prod');
|
|
24
|
+
});
|
|
25
|
+
it('classifies unknown remote as cloud', () => {
|
|
26
|
+
expect(classifyDeployment('https://other-team-xyz.convex.site')).toBe('cloud');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('requiresAdminDestructiveConfirmation', () => {
|
|
30
|
+
it('is false for local and dev-cloud only', () => {
|
|
31
|
+
expect(requiresAdminDestructiveConfirmation('http://localhost:3000')).toBe(false);
|
|
32
|
+
expect(requiresAdminDestructiveConfirmation('https://trustworthy-kangaroo-277.convex.site')).toBe(false);
|
|
33
|
+
expect(requiresAdminDestructiveConfirmation('https://gateway.productbrain.io')).toBe(true);
|
|
34
|
+
expect(requiresAdminDestructiveConfirmation('https://unknown.convex.site')).toBe(true);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('confirmRiskNoteTitle', () => {
|
|
38
|
+
it('matches tier', () => {
|
|
39
|
+
expect(confirmRiskNoteTitle('https://gateway.productbrain.io')).toContain('Production');
|
|
40
|
+
expect(confirmRiskNoteTitle('https://other.convex.site')).toContain('Remote');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('seed confirm copy', () => {
|
|
44
|
+
it('uses production wording only for prod tier', () => {
|
|
45
|
+
expect(seedRunConfirmMessage('https://gateway.productbrain.io', 'seed:knowledge')).toContain('production');
|
|
46
|
+
expect(seedRunConfirmMessage('https://trustworthy-kangaroo-277.convex.site', 'seed:knowledge')).toContain('remote deployment');
|
|
47
|
+
expect(seedRunConfirmMessage('https://unknown.convex.site', 'seed:knowledge')).toContain('remote deployment');
|
|
48
|
+
});
|
|
49
|
+
it('seed all message follows tier', () => {
|
|
50
|
+
expect(seedAllConfirmMessage('https://gateway.productbrain.io')).toContain('production');
|
|
51
|
+
expect(seedAllConfirmMessage('https://unknown.convex.site')).toContain('remote deployment');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=deployment.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.test.js","sourceRoot":"","sources":["../../src/lib/deployment.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLIError — structured error taxonomy for the Product Brain CLI.
|
|
3
|
+
*
|
|
4
|
+
* WP-302 Slice 0: Error Taxonomy + Commander Migration.
|
|
5
|
+
* WP-302 Slice 2: Profile error codes added.
|
|
6
|
+
* Every CLI error carries a machine-readable code, category, and actionable guidance.
|
|
7
|
+
* The global error handler in index.ts formats these for JSON or human output.
|
|
8
|
+
*/
|
|
9
|
+
/** Error categories — groups of related failure modes. */
|
|
10
|
+
export type ErrorCategory = 'auth' | 'network' | 'config' | 'validation' | 'session' | 'profile' | 'internal';
|
|
11
|
+
/** Known error codes — extend as new failure modes are discovered. */
|
|
12
|
+
export declare const ErrorCode: {
|
|
13
|
+
readonly AUTH_MISSING: "AUTH_MISSING";
|
|
14
|
+
readonly AUTH_INVALID: "AUTH_INVALID";
|
|
15
|
+
readonly AUTH_DENIED: "AUTH_DENIED";
|
|
16
|
+
readonly NETWORK_UNREACHABLE: "NETWORK_UNREACHABLE";
|
|
17
|
+
readonly NETWORK_TIMEOUT: "NETWORK_TIMEOUT";
|
|
18
|
+
readonly CONFIG_MISSING: "CONFIG_MISSING";
|
|
19
|
+
readonly CONFIG_INVALID: "CONFIG_INVALID";
|
|
20
|
+
readonly SESSION_REQUIRED: "SESSION_REQUIRED";
|
|
21
|
+
readonly VALIDATION_FAILED: "VALIDATION_FAILED";
|
|
22
|
+
readonly PROFILE_NOT_FOUND: "PROFILE_NOT_FOUND";
|
|
23
|
+
readonly PROFILE_ALREADY_EXISTS: "PROFILE_ALREADY_EXISTS";
|
|
24
|
+
readonly PROFILE_IS_ACTIVE: "PROFILE_IS_ACTIVE";
|
|
25
|
+
readonly PROFILE_IS_LAST: "PROFILE_IS_LAST";
|
|
26
|
+
readonly PROFILE_NAME_INVALID: "PROFILE_NAME_INVALID";
|
|
27
|
+
readonly NON_INTERACTIVE: "NON_INTERACTIVE";
|
|
28
|
+
readonly INTERNAL: "INTERNAL";
|
|
29
|
+
};
|
|
30
|
+
export type ErrorCodeValue = (typeof ErrorCode)[keyof typeof ErrorCode];
|
|
31
|
+
/**
|
|
32
|
+
* Structured CLI error with machine-readable fields.
|
|
33
|
+
*
|
|
34
|
+
* Usage:
|
|
35
|
+
* throw new CLIError('No API key configured', {
|
|
36
|
+
* code: ErrorCode.AUTH_MISSING,
|
|
37
|
+
* category: 'auth',
|
|
38
|
+
* guidance: 'Run `pb login` to configure your API key.',
|
|
39
|
+
* });
|
|
40
|
+
*/
|
|
41
|
+
export declare class CLIError extends Error {
|
|
42
|
+
readonly code: ErrorCodeValue;
|
|
43
|
+
readonly category: ErrorCategory;
|
|
44
|
+
readonly guidance?: string;
|
|
45
|
+
constructor(message: string, options?: {
|
|
46
|
+
code?: ErrorCodeValue;
|
|
47
|
+
category?: ErrorCategory;
|
|
48
|
+
guidance?: string;
|
|
49
|
+
});
|
|
50
|
+
/** Serialize for JSON error output. */
|
|
51
|
+
toJSON(): {
|
|
52
|
+
error: string;
|
|
53
|
+
code: string;
|
|
54
|
+
category: string;
|
|
55
|
+
guidance?: string;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE9G,sEAAsE;AACtE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;CAyBZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAExE;;;;;;;;;GASG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAGzB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,cAAc,CAAC;QACtB,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IASH,uCAAuC;IACvC,MAAM,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;CAQ/E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLIError — structured error taxonomy for the Product Brain CLI.
|
|
3
|
+
*
|
|
4
|
+
* WP-302 Slice 0: Error Taxonomy + Commander Migration.
|
|
5
|
+
* WP-302 Slice 2: Profile error codes added.
|
|
6
|
+
* Every CLI error carries a machine-readable code, category, and actionable guidance.
|
|
7
|
+
* The global error handler in index.ts formats these for JSON or human output.
|
|
8
|
+
*/
|
|
9
|
+
/** Known error codes — extend as new failure modes are discovered. */
|
|
10
|
+
export const ErrorCode = {
|
|
11
|
+
// Auth
|
|
12
|
+
AUTH_MISSING: 'AUTH_MISSING',
|
|
13
|
+
AUTH_INVALID: 'AUTH_INVALID',
|
|
14
|
+
AUTH_DENIED: 'AUTH_DENIED',
|
|
15
|
+
// Network
|
|
16
|
+
NETWORK_UNREACHABLE: 'NETWORK_UNREACHABLE',
|
|
17
|
+
NETWORK_TIMEOUT: 'NETWORK_TIMEOUT',
|
|
18
|
+
// Config
|
|
19
|
+
CONFIG_MISSING: 'CONFIG_MISSING',
|
|
20
|
+
CONFIG_INVALID: 'CONFIG_INVALID',
|
|
21
|
+
// Session
|
|
22
|
+
SESSION_REQUIRED: 'SESSION_REQUIRED',
|
|
23
|
+
// Validation
|
|
24
|
+
VALIDATION_FAILED: 'VALIDATION_FAILED',
|
|
25
|
+
// Profile (WP-302 S2)
|
|
26
|
+
PROFILE_NOT_FOUND: 'PROFILE_NOT_FOUND',
|
|
27
|
+
PROFILE_ALREADY_EXISTS: 'PROFILE_ALREADY_EXISTS',
|
|
28
|
+
PROFILE_IS_ACTIVE: 'PROFILE_IS_ACTIVE',
|
|
29
|
+
PROFILE_IS_LAST: 'PROFILE_IS_LAST',
|
|
30
|
+
PROFILE_NAME_INVALID: 'PROFILE_NAME_INVALID',
|
|
31
|
+
// Interactive
|
|
32
|
+
NON_INTERACTIVE: 'NON_INTERACTIVE',
|
|
33
|
+
// Internal
|
|
34
|
+
INTERNAL: 'INTERNAL',
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Structured CLI error with machine-readable fields.
|
|
38
|
+
*
|
|
39
|
+
* Usage:
|
|
40
|
+
* throw new CLIError('No API key configured', {
|
|
41
|
+
* code: ErrorCode.AUTH_MISSING,
|
|
42
|
+
* category: 'auth',
|
|
43
|
+
* guidance: 'Run `pb login` to configure your API key.',
|
|
44
|
+
* });
|
|
45
|
+
*/
|
|
46
|
+
export class CLIError extends Error {
|
|
47
|
+
code;
|
|
48
|
+
category;
|
|
49
|
+
guidance;
|
|
50
|
+
constructor(message, options) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.name = 'CLIError';
|
|
53
|
+
this.code = options?.code ?? ErrorCode.INTERNAL;
|
|
54
|
+
this.category = options?.category ?? 'internal';
|
|
55
|
+
this.guidance = options?.guidance;
|
|
56
|
+
}
|
|
57
|
+
/** Serialize for JSON error output. */
|
|
58
|
+
toJSON() {
|
|
59
|
+
return {
|
|
60
|
+
error: this.message,
|
|
61
|
+
code: this.code,
|
|
62
|
+
category: this.category,
|
|
63
|
+
...(this.guidance ? { guidance: this.guidance } : {}),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,sEAAsE;AACtE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO;IACP,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;IAC1B,UAAU;IACV,mBAAmB,EAAE,qBAAqB;IAC1C,eAAe,EAAE,iBAAiB;IAClC,SAAS;IACT,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,UAAU;IACV,gBAAgB,EAAE,kBAAkB;IACpC,aAAa;IACb,iBAAiB,EAAE,mBAAmB;IACtC,sBAAsB;IACtB,iBAAiB,EAAE,mBAAmB;IACtC,sBAAsB,EAAE,wBAAwB;IAChD,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,oBAAoB,EAAE,sBAAsB;IAC5C,cAAc;IACd,eAAe,EAAE,iBAAiB;IAClC,WAAW;IACX,QAAQ,EAAE,UAAU;CACZ,CAAC;AAIX;;;;;;;;;GASG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAiB;IACrB,QAAQ,CAAgB;IACxB,QAAQ,CAAU;IAE3B,YACE,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,UAAU,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACpC,CAAC;IAED,uCAAuC;IACvC,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC;IACJ,CAAC;CACF"}
|