@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,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding conversation topics — coach pattern for first-time setup.
|
|
3
|
+
* WP-304: Each topic has goal/behaviour/criteria. LLM judges completion,
|
|
4
|
+
* heuristic signals are backup. Topics auto-skip when content is already covered.
|
|
5
|
+
*/
|
|
6
|
+
import type { ConversationSignals } from './conversation-phases.js';
|
|
7
|
+
/** A conversation topic with coaching directives and completion criteria. */
|
|
8
|
+
export interface OnboardingTopic {
|
|
9
|
+
/** Unique topic identifier. */
|
|
10
|
+
id: string;
|
|
11
|
+
/** What we're trying to learn from this topic. */
|
|
12
|
+
goal: string;
|
|
13
|
+
/** How the LLM should behave during this topic. */
|
|
14
|
+
behaviour: string;
|
|
15
|
+
/** When this topic is complete — the LLM judges this. */
|
|
16
|
+
criteria: string;
|
|
17
|
+
/** Max exchanges before forced advancement. Safety valve. */
|
|
18
|
+
maxExchanges: number;
|
|
19
|
+
/** If this signal is already true, skip this topic entirely. Null = always run. */
|
|
20
|
+
skipIfSignal: keyof ConversationSignals | null;
|
|
21
|
+
/** Heuristic backup: if this signal is true, topic is complete even if LLM disagrees. */
|
|
22
|
+
heuristicSignal: keyof ConversationSignals | null;
|
|
23
|
+
}
|
|
24
|
+
export declare const ONBOARDING_TOPICS: OnboardingTopic[];
|
|
25
|
+
/** Check if user wants to skip the conversation. */
|
|
26
|
+
export declare function userWantsToSkip(text: string): boolean;
|
|
27
|
+
//# sourceMappingURL=onboarding-topics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding-topics.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding-topics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IAEX,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IAEb,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAElB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IAEjB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IAErB,mFAAmF;IACnF,YAAY,EAAE,MAAM,mBAAmB,GAAG,IAAI,CAAC;IAE/C,yFAAyF;IACzF,eAAe,EAAE,MAAM,mBAAmB,GAAG,IAAI,CAAC;CACnD;AAED,eAAO,MAAM,iBAAiB,EAAE,eAAe,EA4C9C,CAAC;AAKF,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding conversation topics — coach pattern for first-time setup.
|
|
3
|
+
* WP-304: Each topic has goal/behaviour/criteria. LLM judges completion,
|
|
4
|
+
* heuristic signals are backup. Topics auto-skip when content is already covered.
|
|
5
|
+
*/
|
|
6
|
+
export const ONBOARDING_TOPICS = [
|
|
7
|
+
{
|
|
8
|
+
id: 'why_here',
|
|
9
|
+
goal: 'Understand what brought this person to Product Brain. Follow wherever they go — product, problem, context, or all three.',
|
|
10
|
+
behaviour: `Open with: "Hey, what brings you to Product Brain?"
|
|
11
|
+
Then follow what's interesting. If they describe a product, get curious about it.
|
|
12
|
+
If they describe a problem, lean in. If they're vague, ask the one thing you'd most want to know.
|
|
13
|
+
Never ask more than one question. Never explain what Product Brain does — they know enough to be here.`,
|
|
14
|
+
criteria: `The user has said something genuine — anything beyond "I don't know" or "just checking it out."
|
|
15
|
+
A complete sentence about their work, their problem, or their situation meets criteria.
|
|
16
|
+
Criteria is NOT met if the user gave only a non-answer (one word, "not sure", "just exploring").`,
|
|
17
|
+
maxExchanges: 3,
|
|
18
|
+
skipIfSignal: null,
|
|
19
|
+
heuristicSignal: 'hasSubstantiveAnswer',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'what_they_build',
|
|
23
|
+
goal: 'Understand concretely what this person is building — specific enough to explain to someone else in one sentence.',
|
|
24
|
+
behaviour: `Pick one concrete noun or verb from their last answer and go one level deeper.
|
|
25
|
+
Ask about who uses it, what it replaces, or how it works today — whichever fits what they said.
|
|
26
|
+
Never name the category back at them ("so an AI tool?").
|
|
27
|
+
Never ask them to "elaborate" or "tell me more."
|
|
28
|
+
One direct question only.`,
|
|
29
|
+
criteria: `The user has described what they're building with enough specificity that you could explain it in one sentence to someone who wasn't in this conversation.
|
|
30
|
+
Vague answers ("a tool", "an app", "something with AI") do NOT meet criteria.
|
|
31
|
+
A described function, a named user group, or a concrete workflow DOES.`,
|
|
32
|
+
maxExchanges: 2,
|
|
33
|
+
skipIfSignal: 'mentionedProduct',
|
|
34
|
+
heuristicSignal: 'mentionedProduct',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'what_is_hard',
|
|
38
|
+
goal: "Understand what's actually hard or broken right now — the friction that brought them here.",
|
|
39
|
+
behaviour: `Pick one specific thing they mentioned building and ask what breaks, what slows them down, or what they're not happy with.
|
|
40
|
+
Be concrete and direct: "What breaks when X?" or "Where does the rework happen?"
|
|
41
|
+
Not: "What challenges do you face?" or "What's the hardest part?" (too generic).
|
|
42
|
+
One question only.`,
|
|
43
|
+
criteria: `The user has described a specific friction, pain, or failure mode in their own words.
|
|
44
|
+
"It's hard" or "there are problems" does NOT meet criteria.
|
|
45
|
+
A named workflow that breaks, a named cost, or a described workaround DOES.`,
|
|
46
|
+
maxExchanges: 2,
|
|
47
|
+
skipIfSignal: 'mentionedChallenge',
|
|
48
|
+
heuristicSignal: 'mentionedChallenge',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
/** User wants to skip — detected by regex on user input. */
|
|
52
|
+
const SKIP_PATTERNS = [/\b(?:skip|done|that'?s it|wrap up|let'?s go|finish|end)\b/i];
|
|
53
|
+
/** Check if user wants to skip the conversation. */
|
|
54
|
+
export function userWantsToSkip(text) {
|
|
55
|
+
return SKIP_PATTERNS.some((p) => p.test(text));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=onboarding-topics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding-topics.js","sourceRoot":"","sources":["../../src/lib/onboarding-topics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,0HAA0H;QAChI,SAAS,EAAE;;;uGAGwF;QACnG,QAAQ,EAAE;;iGAEmF;QAC7F,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,sBAAsB;KACxC;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,kHAAkH;QACxH,SAAS,EAAE;;;;0BAIW;QACtB,QAAQ,EAAE;;uEAEyD;QACnE,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,kBAAkB;QAChC,eAAe,EAAE,kBAAkB;KACpC;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,4FAA4F;QAClG,SAAS,EAAE;;;mBAGI;QACf,QAAQ,EAAE;;4EAE8D;QACxE,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,oBAAoB;QAClC,eAAe,EAAE,oBAAoB;KACtC;CACF,CAAC;AAEF,4DAA4D;AAC5D,MAAM,aAAa,GAAG,CAAC,4DAA4D,CAAC,CAAC;AAErF,oDAAoD;AACpD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding conversation — coach-pattern LLM conversation for new workspaces.
|
|
3
|
+
* WP-304: Topics with goal/behaviour/criteria. LLM judges completion, heuristic backup.
|
|
4
|
+
*
|
|
5
|
+
* Uses @clack/prompts (WP-303 S1) and the MCP gateway to call the
|
|
6
|
+
* Convex onboardingChat action for conversation and extraction,
|
|
7
|
+
* then chain.createEntry for batch-capture.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Run the onboarding conversation: topic-by-topic coach pattern, extraction, and auto-capture.
|
|
11
|
+
*/
|
|
12
|
+
export declare function runOnboardingConversation(workspaceName: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Deterministic fallback when LLM is unavailable.
|
|
15
|
+
*/
|
|
16
|
+
export declare function runFallbackOnboarding(workspaceName: string): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=onboarding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyBH;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsTpF;AAUD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEhF"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding conversation — coach-pattern LLM conversation for new workspaces.
|
|
3
|
+
* WP-304: Topics with goal/behaviour/criteria. LLM judges completion, heuristic backup.
|
|
4
|
+
*
|
|
5
|
+
* Uses @clack/prompts (WP-303 S1) and the MCP gateway to call the
|
|
6
|
+
* Convex onboardingChat action for conversation and extraction,
|
|
7
|
+
* then chain.createEntry for batch-capture.
|
|
8
|
+
*/
|
|
9
|
+
import { kernelCall } from './client.js';
|
|
10
|
+
import { ask, confirm, select } from './prompts.js';
|
|
11
|
+
import { bold, dim, green, icons } from './style.js';
|
|
12
|
+
import { trackEvent } from './telemetry.js';
|
|
13
|
+
import { detectSignals, mergeSignals } from './conversation-signals.js';
|
|
14
|
+
import { evaluateTopic, buildTopicDirective, sanitizeResponse, shouldSkipTopic, isTooSimilar } from './conversation-engine.js';
|
|
15
|
+
import { ONBOARDING_TOPICS, userWantsToSkip } from './onboarding-topics.js';
|
|
16
|
+
import { countWords, validateExtractedEntries, displayEntryExample, showCapturedSummary, batchCaptureEntries, truncate, firstNWords, } from './onboarding-shared.js';
|
|
17
|
+
/** Hard cap on total exchanges across all topics. */
|
|
18
|
+
const MAX_TOTAL_EXCHANGES = 10;
|
|
19
|
+
// ── Main conversation ───────────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* Run the onboarding conversation: topic-by-topic coach pattern, extraction, and auto-capture.
|
|
22
|
+
*/
|
|
23
|
+
export async function runOnboardingConversation(workspaceName) {
|
|
24
|
+
trackEvent('setup_started', { mode: 'llm' });
|
|
25
|
+
// Initialize conversation state
|
|
26
|
+
const state = {
|
|
27
|
+
messages: [],
|
|
28
|
+
userMessageCount: 0,
|
|
29
|
+
totalUserWords: 0,
|
|
30
|
+
topicExchanges: {},
|
|
31
|
+
completedTopics: new Set(),
|
|
32
|
+
currentTopicId: ONBOARDING_TOPICS[0].id,
|
|
33
|
+
completedQA: [],
|
|
34
|
+
// Legacy aliases — kept for type compat during transition
|
|
35
|
+
phaseExchanges: {},
|
|
36
|
+
completedPhases: new Set(),
|
|
37
|
+
currentPhaseId: ONBOARDING_TOPICS[0].id,
|
|
38
|
+
signals: detectSignals([]),
|
|
39
|
+
refusalStreak: 0,
|
|
40
|
+
};
|
|
41
|
+
let totalExchanges = 0;
|
|
42
|
+
let emptyAttempts = 0;
|
|
43
|
+
const recentAssistantMessages = [];
|
|
44
|
+
// Step 1: Get the LLM's opening (topic 1 generates the greeting)
|
|
45
|
+
const firstTopic = ONBOARDING_TOPICS[0];
|
|
46
|
+
const openingDirective = buildTopicDirective(firstTopic, 0, ONBOARDING_TOPICS.length, [], workspaceName);
|
|
47
|
+
let greeting;
|
|
48
|
+
try {
|
|
49
|
+
const result = await kernelCall('onboarding.chat', {
|
|
50
|
+
messages: [],
|
|
51
|
+
workspaceName,
|
|
52
|
+
phaseDirective: openingDirective,
|
|
53
|
+
turnNumber: 1,
|
|
54
|
+
totalUserWords: 0,
|
|
55
|
+
refusalStreak: 0,
|
|
56
|
+
});
|
|
57
|
+
if (!result?.content) {
|
|
58
|
+
await runFallbackOnboarding(workspaceName);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
greeting = sanitizeResponse(result.content);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
await runFallbackOnboarding(workspaceName);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
process.stdout.write(`\n ${greeting}\n\n`);
|
|
68
|
+
state.messages.push({ role: 'assistant', content: greeting });
|
|
69
|
+
recentAssistantMessages.push(greeting);
|
|
70
|
+
// Step 2: Topic-by-topic conversation loop
|
|
71
|
+
let currentTopicIndex = 0;
|
|
72
|
+
while (currentTopicIndex < ONBOARDING_TOPICS.length && totalExchanges < MAX_TOTAL_EXCHANGES) {
|
|
73
|
+
const topic = ONBOARDING_TOPICS[currentTopicIndex];
|
|
74
|
+
state.currentTopicId = topic.id;
|
|
75
|
+
// DEBUG: trace loop state
|
|
76
|
+
if (process.env.PB_DEBUG) {
|
|
77
|
+
console.error(`[DEBUG] topic=${topic.id} idx=${currentTopicIndex} exchanges=${totalExchanges} words=${state.totalUserWords} skip=${shouldSkipTopic(topic, state.signals, state.totalUserWords)}`);
|
|
78
|
+
}
|
|
79
|
+
// Skip check: if the signal for this topic is already present AND we have enough content
|
|
80
|
+
if (shouldSkipTopic(topic, state.signals, state.totalUserWords)) {
|
|
81
|
+
state.completedTopics.add(topic.id);
|
|
82
|
+
currentTopicIndex++;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
// Get user input
|
|
86
|
+
let userInput;
|
|
87
|
+
try {
|
|
88
|
+
userInput = await ask({
|
|
89
|
+
message: 'You',
|
|
90
|
+
placeholder: totalExchanges === 0 ? 'Tell me about your product...' : '',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
process.stdout.write(`\n ${dim('No worries! Run')} ${bold('pb capture')} ${dim('anytime to add knowledge.')}\n\n`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!userInput.trim()) {
|
|
98
|
+
emptyAttempts++;
|
|
99
|
+
if (emptyAttempts >= 2) {
|
|
100
|
+
process.stdout.write(`\n ${dim('No worries — run')} ${bold('pb capture')} ${dim('anytime to teach your AI tools more.')}\n\n`);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
process.stdout.write(` ${dim('Just hit Enter again to skip, or type anything to continue.')}\n\n`);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
emptyAttempts = 0;
|
|
107
|
+
// Check if user wants to skip
|
|
108
|
+
if (userWantsToSkip(userInput) && state.totalUserWords > 10) {
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
// Update state
|
|
112
|
+
state.messages.push({ role: 'user', content: userInput });
|
|
113
|
+
state.userMessageCount++;
|
|
114
|
+
state.totalUserWords += countWords(userInput);
|
|
115
|
+
state.topicExchanges[topic.id] = (state.topicExchanges[topic.id] ?? 0) + 1;
|
|
116
|
+
totalExchanges++;
|
|
117
|
+
// Detect refusals (very short non-answers)
|
|
118
|
+
const wordCount = countWords(userInput);
|
|
119
|
+
if (wordCount <= 2) {
|
|
120
|
+
state.refusalStreak++;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
state.refusalStreak = 0;
|
|
124
|
+
}
|
|
125
|
+
// Update heuristic signals
|
|
126
|
+
state.signals = detectSignals(state.messages);
|
|
127
|
+
// Get LLM response with topic directive
|
|
128
|
+
const topicDirective = buildTopicDirective(topic, currentTopicIndex, ONBOARDING_TOPICS.length, state.completedQA, workspaceName);
|
|
129
|
+
let topicComplete = false;
|
|
130
|
+
try {
|
|
131
|
+
const result = await kernelCall('onboarding.chat', {
|
|
132
|
+
messages: state.messages,
|
|
133
|
+
workspaceName,
|
|
134
|
+
phaseDirective: topicDirective,
|
|
135
|
+
turnNumber: totalExchanges + 1,
|
|
136
|
+
totalUserWords: state.totalUserWords,
|
|
137
|
+
refusalStreak: state.refusalStreak,
|
|
138
|
+
});
|
|
139
|
+
if (result?.content) {
|
|
140
|
+
// Merge LLM-reported signals with heuristic signals
|
|
141
|
+
if (result.signals) {
|
|
142
|
+
state.signals = mergeSignals(state.signals, result.signals);
|
|
143
|
+
}
|
|
144
|
+
// Read LLM's topic completion judgment
|
|
145
|
+
topicComplete = result.topicComplete ?? false;
|
|
146
|
+
// Post-process response
|
|
147
|
+
let displayMessage = sanitizeResponse(result.content);
|
|
148
|
+
// Detect repetition — if too similar, bump refusal streak for next call
|
|
149
|
+
if (isTooSimilar(displayMessage, recentAssistantMessages)) {
|
|
150
|
+
state.refusalStreak++;
|
|
151
|
+
}
|
|
152
|
+
process.stdout.write(`\n ${displayMessage}\n\n`);
|
|
153
|
+
state.messages.push({ role: 'assistant', content: displayMessage });
|
|
154
|
+
recentAssistantMessages.push(displayMessage);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
// LLM call failed — try to continue with what we have
|
|
159
|
+
if (process.env.PB_DEBUG)
|
|
160
|
+
console.error(`[DEBUG] LLM catch, breaking. Error:`, err);
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
// Evaluate topic completion: LLM judgment + heuristic backup + forced advancement
|
|
164
|
+
const evalResult = evaluateTopic(topic, state, topicComplete);
|
|
165
|
+
if (process.env.PB_DEBUG) {
|
|
166
|
+
console.error(`[DEBUG] eval: complete=${evalResult.complete} forced=${evalResult.forced} skip=${evalResult.skip} topicComplete=${topicComplete} topicExchanges=${state.topicExchanges[topic.id]}`);
|
|
167
|
+
}
|
|
168
|
+
if (evalResult.complete) {
|
|
169
|
+
// Accumulate the last Q&A for context in later topics
|
|
170
|
+
const lastAssistant = recentAssistantMessages[recentAssistantMessages.length - 1] ?? '';
|
|
171
|
+
state.completedQA.push({
|
|
172
|
+
topicId: topic.id,
|
|
173
|
+
question: lastAssistant,
|
|
174
|
+
answer: userInput,
|
|
175
|
+
});
|
|
176
|
+
state.completedTopics.add(topic.id);
|
|
177
|
+
currentTopicIndex++;
|
|
178
|
+
}
|
|
179
|
+
// else: stay in current topic, loop again
|
|
180
|
+
}
|
|
181
|
+
// Hard floor: barely any content — offer manual capture
|
|
182
|
+
// Threshold: 3 words means basically no real content. Previous threshold of 10
|
|
183
|
+
// was too aggressive — 3 short answers can be valid (e.g., "a finance app" + "me" = 4 words).
|
|
184
|
+
if (state.totalUserWords < 3 && state.userMessageCount > 0) {
|
|
185
|
+
process.stdout.write(`\n ${dim('No problem — you can add knowledge at your own pace with')} ${bold('pb capture')}\n\n`);
|
|
186
|
+
trackEvent('setup_completed', { capturedCount: 0, reason: 'insufficient_content' });
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
trackEvent('first_capture_prompted', { mode: 'llm', exchanges: totalExchanges });
|
|
190
|
+
// Step 3: Extract structured data from conversation
|
|
191
|
+
if (state.messages.filter((m) => m.role === 'user').length === 0) {
|
|
192
|
+
process.stdout.write(`\n ${dim('No worries! Run')} ${bold('pb capture')} ${dim('anytime to add knowledge.')}\n\n`);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
let entriesToCapture;
|
|
196
|
+
try {
|
|
197
|
+
const result = await kernelCall('onboarding.chat', {
|
|
198
|
+
messages: state.messages,
|
|
199
|
+
workspaceName,
|
|
200
|
+
mode: 'extract',
|
|
201
|
+
});
|
|
202
|
+
if (!result?.entries?.length) {
|
|
203
|
+
process.stdout.write(`\n ${dim("Couldn't organize your answers just yet. Try")} ${bold('pb capture')} ${dim('to add knowledge manually.')}\n\n`);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
entriesToCapture = validateExtractedEntries(result.entries).slice(0, 5);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
process.stdout.write(`\n ${dim("Couldn't organize your answers just yet. Try")} ${bold('pb capture')} ${dim('to add knowledge manually.')}\n\n`);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (entriesToCapture.length === 0) {
|
|
213
|
+
process.stdout.write(`\n ${dim('Nothing to save yet. Try')} ${bold('pb capture')} ${dim('to add knowledge manually.')}\n\n`);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// Step 4: Show ONE example with schema, offer to browse more
|
|
217
|
+
const itemCount = entriesToCapture.length;
|
|
218
|
+
process.stdout.write(`\n From this conversation, I'd remember ${bold(String(itemCount))} item${itemCount === 1 ? '' : 's'}.\n`);
|
|
219
|
+
process.stdout.write(` Here's an example:\n\n`);
|
|
220
|
+
displayEntryExample(entriesToCapture[0]);
|
|
221
|
+
let exampleIndex = 1;
|
|
222
|
+
let shouldSave = false;
|
|
223
|
+
// eslint-disable-next-line no-constant-condition
|
|
224
|
+
while (true) {
|
|
225
|
+
const hasMoreExamples = exampleIndex < entriesToCapture.length;
|
|
226
|
+
const options = [
|
|
227
|
+
{ value: 'save', label: 'Save all to my product brain', hint: `${itemCount} item${itemCount === 1 ? '' : 's'}` },
|
|
228
|
+
];
|
|
229
|
+
if (hasMoreExamples) {
|
|
230
|
+
options.push({ value: 'another', label: 'Show another example' });
|
|
231
|
+
}
|
|
232
|
+
options.push({ value: 'skip', label: 'Not right now' });
|
|
233
|
+
let choice;
|
|
234
|
+
try {
|
|
235
|
+
choice = await select({
|
|
236
|
+
message: '',
|
|
237
|
+
options,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
process.stdout.write(`\n ${dim('No problem — run')} ${bold('pb capture')} ${dim('anytime.')}\n\n`);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (choice === 'skip') {
|
|
245
|
+
process.stdout.write(`\n ${dim('No problem — run')} ${bold('pb capture')} ${dim('anytime to add more.')}\n\n`);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (choice === 'save') {
|
|
249
|
+
shouldSave = true;
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
if (choice === 'another') {
|
|
253
|
+
displayEntryExample(entriesToCapture[exampleIndex]);
|
|
254
|
+
exampleIndex++;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (!shouldSave)
|
|
258
|
+
return;
|
|
259
|
+
// Step 5: Batch-capture entries
|
|
260
|
+
const { capturedCount, errors } = await batchCaptureEntries(entriesToCapture);
|
|
261
|
+
// Step 6: Report results
|
|
262
|
+
if (capturedCount > 0) {
|
|
263
|
+
process.stdout.write(`\n ${green(icons.pass)} Saved ${capturedCount} item${capturedCount === 1 ? '' : 's'} to your product brain.\n`);
|
|
264
|
+
trackEvent('capture_completed', { mode: 'llm', count: capturedCount });
|
|
265
|
+
}
|
|
266
|
+
if (errors.length > 0) {
|
|
267
|
+
process.stdout.write(`\n ${dim(`${errors.length} couldn't be saved.`)}\n`);
|
|
268
|
+
}
|
|
269
|
+
// Step 7: Deterministic proof + closing
|
|
270
|
+
showCapturedSummary(entriesToCapture, capturedCount);
|
|
271
|
+
process.stdout.write(` ${dim('Run')} ${bold('pb capture')} ${dim('anytime to teach your AI tools more.')}\n\n`);
|
|
272
|
+
trackEvent('setup_completed', { capturedCount });
|
|
273
|
+
}
|
|
274
|
+
// ── Deterministic fallback ──────────────────────────────────────────��─────
|
|
275
|
+
const FALLBACK_QUESTIONS = [
|
|
276
|
+
{ message: 'What are you building?', placeholder: 'A tool for...' },
|
|
277
|
+
{ message: 'Who is it for?', placeholder: 'Developers, designers, teams...' },
|
|
278
|
+
{ message: "What's the biggest challenge right now?", placeholder: 'Scaling, onboarding, pricing...' },
|
|
279
|
+
];
|
|
280
|
+
/**
|
|
281
|
+
* Deterministic fallback when LLM is unavailable.
|
|
282
|
+
*/
|
|
283
|
+
export async function runFallbackOnboarding(workspaceName) {
|
|
284
|
+
trackEvent('setup_started', { mode: 'fallback' });
|
|
285
|
+
process.stdout.write(`\n ${bold(`Let me learn about ${workspaceName}.`)} ${dim('(Quick — 3 questions)')}\n\n`);
|
|
286
|
+
const answers = [];
|
|
287
|
+
for (const q of FALLBACK_QUESTIONS) {
|
|
288
|
+
try {
|
|
289
|
+
const answer = await ask({ message: q.message, placeholder: q.placeholder });
|
|
290
|
+
if (answer.trim())
|
|
291
|
+
answers.push(answer.trim());
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (answers.length === 0) {
|
|
298
|
+
process.stdout.write(`\n ${dim('No worries! Add knowledge anytime with')} ${bold('pb capture')}\n\n`);
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
trackEvent('first_capture_prompted', { mode: 'fallback' });
|
|
302
|
+
const entriesToCapture = [];
|
|
303
|
+
if (answers[0]) {
|
|
304
|
+
entriesToCapture.push({
|
|
305
|
+
collection: 'strategy',
|
|
306
|
+
name: 'Product Vision',
|
|
307
|
+
description: answers[0],
|
|
308
|
+
typeLabel: "What you're building",
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
if (answers[1]) {
|
|
312
|
+
entriesToCapture.push({
|
|
313
|
+
collection: 'audiences',
|
|
314
|
+
name: firstNWords(answers[1], 6),
|
|
315
|
+
description: answers[1],
|
|
316
|
+
typeLabel: "Who it's for",
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
if (answers[2]) {
|
|
320
|
+
entriesToCapture.push({
|
|
321
|
+
collection: 'tensions',
|
|
322
|
+
name: truncate(answers[2], 120),
|
|
323
|
+
description: answers[2],
|
|
324
|
+
typeLabel: "A challenge you're facing",
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
// Show extraction
|
|
328
|
+
process.stdout.write('\n');
|
|
329
|
+
for (const entry of entriesToCapture) {
|
|
330
|
+
displayEntryExample(entry);
|
|
331
|
+
}
|
|
332
|
+
let approved;
|
|
333
|
+
try {
|
|
334
|
+
approved = await confirm({ message: 'Ready to save these to your product brain?', initialValue: true });
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
if (!approved)
|
|
340
|
+
return;
|
|
341
|
+
const { capturedCount } = await batchCaptureEntries(entriesToCapture);
|
|
342
|
+
if (capturedCount > 0) {
|
|
343
|
+
process.stdout.write(`\n ${green(icons.pass)} Saved ${capturedCount} item${capturedCount === 1 ? '' : 's'} to your product brain.\n`);
|
|
344
|
+
trackEvent('capture_completed', { mode: 'fallback', count: capturedCount });
|
|
345
|
+
}
|
|
346
|
+
showCapturedSummary(entriesToCapture, capturedCount);
|
|
347
|
+
process.stdout.write(` ${dim('Run')} ${bold('pb capture')} ${dim('anytime to teach your AI tools more.')}\n\n`);
|
|
348
|
+
trackEvent('setup_completed', { mode: 'fallback', capturedCount });
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile storage and resolution — multi-workspace support for the Product Brain CLI.
|
|
3
|
+
* WP-302 Slice 2: Workspace Profiles + Config Refactor.
|
|
4
|
+
*
|
|
5
|
+
* Profile directory: ~/.config/productbrain/profiles/
|
|
6
|
+
* Active profile tracked in: ~/.config/productbrain/active-profile
|
|
7
|
+
* Resolution order: PB_PROFILE env > active-profile file > "default" > legacy .env
|
|
8
|
+
*/
|
|
9
|
+
declare const HOME_CONFIG_DIR: string;
|
|
10
|
+
declare const PROFILES_DIR: string;
|
|
11
|
+
declare const ACTIVE_PROFILE_PATH: string;
|
|
12
|
+
declare const LEGACY_ENV_PATH: string;
|
|
13
|
+
export interface ProfileConfig {
|
|
14
|
+
apiKey: string;
|
|
15
|
+
siteUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
/** List all profile names (sorted). */
|
|
18
|
+
export declare function listProfiles(): string[];
|
|
19
|
+
/** Get the active profile name. */
|
|
20
|
+
export declare function getActiveProfile(): string | null;
|
|
21
|
+
/** Create a new profile. */
|
|
22
|
+
export declare function createProfile(name: string, apiKey: string, siteUrl?: string): void;
|
|
23
|
+
/** Switch the active profile. */
|
|
24
|
+
export declare function useProfile(name: string): void;
|
|
25
|
+
/** Delete a profile. Cannot delete the last profile or the active profile. */
|
|
26
|
+
export declare function deleteProfile(name: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve config from the active profile.
|
|
29
|
+
* Resolution order: PB_PROFILE env > active-profile file > "default" > legacy .env
|
|
30
|
+
* Returns null if no profile or config is available.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveProfileConfig(): ProfileConfig | null;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve config for a specific named profile.
|
|
35
|
+
* Returns null if the profile doesn't exist.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveNamedProfileConfig(name: string): ProfileConfig | null;
|
|
38
|
+
export { PROFILES_DIR, ACTIVE_PROFILE_PATH, LEGACY_ENV_PATH, HOME_CONFIG_DIR };
|
|
39
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/lib/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,QAAA,MAAM,eAAe,QAAgD,CAAC;AACtE,QAAA,MAAM,YAAY,QAAuC,CAAC;AAC1D,QAAA,MAAM,mBAAmB,QAA6C,CAAC;AACvE,QAAA,MAAM,eAAe,QAAmC,CAAC;AAKzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAyDD,uCAAuC;AACvC,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAOvC;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAWhD;AAED,4BAA4B;AAC5B,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAwBlF;AAED,iCAAiC;AACjC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAS7C;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAmBhD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,aAAa,GAAG,IAAI,CAgC3D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAE5E;AAGD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC"}
|