@productbrain/cli 0.1.0-beta.9 → 0.1.0-beta.90
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
|
@@ -21,12 +21,14 @@ export function formatUpdateReceipt(data) {
|
|
|
21
21
|
lines.push(` Fields: ${changes.join(', ')}`);
|
|
22
22
|
}
|
|
23
23
|
// BET-192 / FEAT-575: Surface normalization warnings — fields that were rejected/dropped.
|
|
24
|
+
// BET-271 S1: Include `pb fields` suggestion for rejected field warnings.
|
|
24
25
|
if (data.normalizationWarnings && data.normalizationWarnings.length > 0) {
|
|
25
26
|
lines.push('');
|
|
26
27
|
lines.push(' ⚠ Normalization warnings:');
|
|
27
28
|
for (const warning of data.normalizationWarnings) {
|
|
28
29
|
lines.push(` - ${warning}`);
|
|
29
30
|
}
|
|
31
|
+
lines.push(` Run \`pb fields\` to see valid fields for this entry.`);
|
|
30
32
|
}
|
|
31
33
|
// BET-192 / FEAT-575: Surface validation warnings — missing required fields, etc.
|
|
32
34
|
if (data.validationWarnings && data.validationWarnings.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/formatters/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,eAAe;IACf,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACpC,IAAI,GAAG;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhF,SAAS;IACT,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,0FAA0F;IAC1F,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;QACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/formatters/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,eAAe;IACf,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACpC,IAAI,GAAG;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhF,SAAS;IACT,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,0FAA0F;IAC1F,0EAA0E;IAC1E,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC1E,CAAC;IAED,kFAAkF;IAClF,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAE7C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify receipt formatter — terminal output for pb verify.
|
|
3
|
+
* BET-240 E1: Verification status for chain entries.
|
|
4
|
+
*/
|
|
5
|
+
export interface VerifyReceiptData {
|
|
6
|
+
entryId: string;
|
|
7
|
+
verificationStatus: 'verified';
|
|
8
|
+
alreadyVerified: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function formatVerifyReceipt(data: VerifyReceiptData): string;
|
|
11
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/formatters/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,UAAU,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAKnE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify receipt formatter — terminal output for pb verify.
|
|
3
|
+
* BET-240 E1: Verification status for chain entries.
|
|
4
|
+
*/
|
|
5
|
+
export function formatVerifyReceipt(data) {
|
|
6
|
+
if (data.alreadyVerified) {
|
|
7
|
+
return `${data.entryId} is already verified.`;
|
|
8
|
+
}
|
|
9
|
+
return `Verified ${data.entryId}. Status: verified.`;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/formatters/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,CAAC,OAAO,uBAAuB,CAAC;IAChD,CAAC;IACD,OAAO,YAAY,IAAI,CAAC,OAAO,qBAAqB,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-profiles.test.d.ts","sourceRoot":"","sources":["../../../src/generators/__tests__/surface-profiles.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* surface-profiles — unit tests.
|
|
3
|
+
* BET-270 Slice 0: type system + registry.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, expect, it } from 'vitest';
|
|
6
|
+
import { SURFACE_PROFILES, resolveSurfaceProfile } from '../surface-profiles.js';
|
|
7
|
+
// ── Helper ─────────────────────────────────────────────────────────────
|
|
8
|
+
function isValidProfile(profile) {
|
|
9
|
+
if (!profile || typeof profile !== 'object')
|
|
10
|
+
return false;
|
|
11
|
+
const p = profile;
|
|
12
|
+
return (['batch', 'interactive', 'passive'].includes(p.executionModel) &&
|
|
13
|
+
['multi-file', 'single-file'].includes(p.format) &&
|
|
14
|
+
['stateless', 'conversational', 'autonomous'].includes(p.sessionModel) &&
|
|
15
|
+
typeof p.tokenBudget === 'number' &&
|
|
16
|
+
p.tokenBudget > 0 &&
|
|
17
|
+
['orchestrated', 'direct', 'guided'].includes(p.workflowStyle));
|
|
18
|
+
}
|
|
19
|
+
// ── Registry ───────────────────────────────────────────────────────────
|
|
20
|
+
describe('SURFACE_PROFILES registry', () => {
|
|
21
|
+
it('defines all 4 known targets', () => {
|
|
22
|
+
expect(Object.keys(SURFACE_PROFILES).sort()).toEqual(['claude', 'codex', 'copilot', 'cursor']);
|
|
23
|
+
});
|
|
24
|
+
it.each(['claude', 'cursor', 'codex', 'copilot'])('%s profile has all required fields with correct types', (target) => {
|
|
25
|
+
expect(isValidProfile(SURFACE_PROFILES[target])).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('claude profile has correct values', () => {
|
|
28
|
+
const p = SURFACE_PROFILES.claude;
|
|
29
|
+
expect(p.executionModel).toBe('interactive');
|
|
30
|
+
expect(p.format).toBe('multi-file');
|
|
31
|
+
expect(p.sessionModel).toBe('conversational');
|
|
32
|
+
expect(p.tokenBudget).toBe(50000);
|
|
33
|
+
expect(p.workflowStyle).toBe('orchestrated');
|
|
34
|
+
});
|
|
35
|
+
it('cursor profile has correct values', () => {
|
|
36
|
+
const p = SURFACE_PROFILES.cursor;
|
|
37
|
+
expect(p.executionModel).toBe('interactive');
|
|
38
|
+
expect(p.format).toBe('multi-file');
|
|
39
|
+
expect(p.sessionModel).toBe('conversational');
|
|
40
|
+
expect(p.tokenBudget).toBe(50000);
|
|
41
|
+
expect(p.workflowStyle).toBe('orchestrated');
|
|
42
|
+
});
|
|
43
|
+
it('codex profile has correct values', () => {
|
|
44
|
+
const p = SURFACE_PROFILES.codex;
|
|
45
|
+
expect(p.executionModel).toBe('batch');
|
|
46
|
+
expect(p.format).toBe('multi-file');
|
|
47
|
+
expect(p.sessionModel).toBe('autonomous');
|
|
48
|
+
expect(p.tokenBudget).toBe(100000);
|
|
49
|
+
expect(p.workflowStyle).toBe('direct');
|
|
50
|
+
});
|
|
51
|
+
it('copilot profile has correct values', () => {
|
|
52
|
+
const p = SURFACE_PROFILES.copilot;
|
|
53
|
+
expect(p.executionModel).toBe('passive');
|
|
54
|
+
expect(p.format).toBe('single-file');
|
|
55
|
+
expect(p.sessionModel).toBe('stateless');
|
|
56
|
+
expect(p.tokenBudget).toBe(30000);
|
|
57
|
+
expect(p.workflowStyle).toBe('guided');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
// ── Resolver ──────────────────────────────────────────────────────────
|
|
61
|
+
describe('resolveSurfaceProfile', () => {
|
|
62
|
+
it.each(['claude', 'cursor', 'codex', 'copilot'])('resolves known target "%s" to a valid profile', (target) => {
|
|
63
|
+
const profile = resolveSurfaceProfile(target);
|
|
64
|
+
expect(isValidProfile(profile)).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it('resolves "claude" to the claude profile', () => {
|
|
67
|
+
expect(resolveSurfaceProfile('claude')).toBe(SURFACE_PROFILES.claude);
|
|
68
|
+
});
|
|
69
|
+
it('resolves "cursor" to the cursor profile', () => {
|
|
70
|
+
expect(resolveSurfaceProfile('cursor')).toBe(SURFACE_PROFILES.cursor);
|
|
71
|
+
});
|
|
72
|
+
it('resolves "codex" to the codex profile', () => {
|
|
73
|
+
expect(resolveSurfaceProfile('codex')).toBe(SURFACE_PROFILES.codex);
|
|
74
|
+
});
|
|
75
|
+
it('resolves "copilot" to the copilot profile', () => {
|
|
76
|
+
expect(resolveSurfaceProfile('copilot')).toBe(SURFACE_PROFILES.copilot);
|
|
77
|
+
});
|
|
78
|
+
it('returns codex profile as fallback for unknown targets', () => {
|
|
79
|
+
expect(resolveSurfaceProfile('unknown-tool')).toBe(SURFACE_PROFILES.codex);
|
|
80
|
+
});
|
|
81
|
+
it('returns codex profile for empty string', () => {
|
|
82
|
+
expect(resolveSurfaceProfile('')).toBe(SURFACE_PROFILES.codex);
|
|
83
|
+
});
|
|
84
|
+
it('fallback profile is a valid profile', () => {
|
|
85
|
+
const fallback = resolveSurfaceProfile('completely-unknown-surface');
|
|
86
|
+
expect(isValidProfile(fallback)).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=surface-profiles.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-profiles.test.js","sourceRoot":"","sources":["../../../src/generators/__tests__/surface-profiles.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,43 @@
|
|
|
2
2
|
* Adapter file generators — thin pointers for each AI tool.
|
|
3
3
|
* Each function returns the file content as a string.
|
|
4
4
|
*/
|
|
5
|
+
import type { SurfaceProfile } from './surface-profiles.js';
|
|
5
6
|
declare const MARKER = "auto-generated by pb handshake";
|
|
6
7
|
export { MARKER };
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
export interface AgentsMdOptions {
|
|
9
|
+
profile?: SurfaceProfile;
|
|
10
|
+
workspaceContext?: {
|
|
11
|
+
stage?: string;
|
|
12
|
+
focus?: string;
|
|
13
|
+
governanceMode?: string;
|
|
14
|
+
totalEntries?: number;
|
|
15
|
+
};
|
|
16
|
+
skills?: Array<{
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
triggers?: string[];
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export declare function generateAgentsMd(timestamp: string, options?: AgentsMdOptions): string;
|
|
23
|
+
export declare function generateClaudeMd(timestamp: string, profile?: SurfaceProfile): string;
|
|
24
|
+
export declare function generateCursorMdc(timestamp: string, profile?: SurfaceProfile): string;
|
|
25
|
+
export interface CopilotMdOptions {
|
|
26
|
+
profile?: SurfaceProfile;
|
|
27
|
+
workspaceContext?: {
|
|
28
|
+
stage?: string;
|
|
29
|
+
focus?: string;
|
|
30
|
+
governanceMode?: string;
|
|
31
|
+
totalEntries?: number;
|
|
32
|
+
};
|
|
33
|
+
skills?: Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
triggers?: string[];
|
|
37
|
+
}>;
|
|
38
|
+
rules?: Array<{
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
export declare function generateCopilotMd(timestamp: string, options?: CopilotMdOptions): string;
|
|
10
44
|
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/generators/adapters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,QAAA,MAAM,MAAM,mCAAmC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/generators/adapters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,QAAA,MAAM,MAAM,mCAAmC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAgFrF;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAsCpF;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAkCrF;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC3E,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CA0IvF"}
|
|
@@ -4,7 +4,89 @@
|
|
|
4
4
|
*/
|
|
5
5
|
const MARKER = 'auto-generated by pb handshake';
|
|
6
6
|
export { MARKER };
|
|
7
|
-
export function
|
|
7
|
+
export function generateAgentsMd(timestamp, options) {
|
|
8
|
+
const { workspaceContext, skills } = options ?? {};
|
|
9
|
+
// Workspace context section (only when data is available)
|
|
10
|
+
let workspaceSection = '';
|
|
11
|
+
if (workspaceContext && Object.values(workspaceContext).some((v) => v !== undefined)) {
|
|
12
|
+
const rows = [];
|
|
13
|
+
if (workspaceContext.stage !== undefined)
|
|
14
|
+
rows.push(`| Stage | \`${workspaceContext.stage}\` |`);
|
|
15
|
+
if (workspaceContext.focus !== undefined)
|
|
16
|
+
rows.push(`| Current focus | ${workspaceContext.focus} |`);
|
|
17
|
+
if (workspaceContext.governanceMode !== undefined)
|
|
18
|
+
rows.push(`| Governance mode | \`${workspaceContext.governanceMode}\` |`);
|
|
19
|
+
if (workspaceContext.totalEntries !== undefined)
|
|
20
|
+
rows.push(`| Chain entries | ${workspaceContext.totalEntries} |`);
|
|
21
|
+
workspaceSection = `
|
|
22
|
+
## Workspace Context
|
|
23
|
+
|
|
24
|
+
| Field | Value |
|
|
25
|
+
|-------|-------|
|
|
26
|
+
${rows.join('\n')}
|
|
27
|
+
`;
|
|
28
|
+
}
|
|
29
|
+
// Skill directory section (only when skills provided and non-empty)
|
|
30
|
+
let skillsSection = '';
|
|
31
|
+
if (skills && skills.length > 0) {
|
|
32
|
+
const rows = skills.map((s) => {
|
|
33
|
+
const triggers = s.triggers && s.triggers.length > 0 ? s.triggers.slice(0, 3).join(', ') : '—';
|
|
34
|
+
return `| \`${s.name}\` | ${s.description} | ${triggers} |`;
|
|
35
|
+
});
|
|
36
|
+
skillsSection = `
|
|
37
|
+
## Skill Directory
|
|
38
|
+
|
|
39
|
+
| Skill | Description | Triggers |
|
|
40
|
+
|-------|-------------|----------|
|
|
41
|
+
${rows.join('\n')}
|
|
42
|
+
`;
|
|
43
|
+
}
|
|
44
|
+
return `<!-- ${MARKER} — ${timestamp} -->
|
|
45
|
+
<!-- Re-run \`pb handshake\` to refresh. Do not edit manually. -->
|
|
46
|
+
|
|
47
|
+
# Product Brain Context
|
|
48
|
+
|
|
49
|
+
Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
|
|
50
|
+
Read \`.productbrain/briefing.md\` for entries matched to this repo.
|
|
51
|
+
Read \`.productbrain/soul.md\` when identity, working style, or collaboration preferences matter.
|
|
52
|
+
${workspaceSection}
|
|
53
|
+
## The Chain is the SSOT. Use \`pb\` before everything.
|
|
54
|
+
|
|
55
|
+
| Command | Purpose |
|
|
56
|
+
|---------|---------|
|
|
57
|
+
| \`pb orient -b\` | Current workspace focus |
|
|
58
|
+
| \`pb orient --task "<task>"\` | Task-shaped governance and context before implementation, review, or diagnosis |
|
|
59
|
+
| \`pb get <ID>\` | Full entry (BET, DEC, STD, BR, TEN, ARCH) |
|
|
60
|
+
| \`pb context <ID>\` | Constellation context for an entry |
|
|
61
|
+
| \`pb search <query>\` | Find entries across the Chain |
|
|
62
|
+
| \`pb handshake\` | Refresh these context files |
|
|
63
|
+
|
|
64
|
+
**Before implementing any feature, ticket, or fix:** run \`pb get <ID>\` to read the actual spec, exclusions, acceptance criteria, and governance relations. Never assume you know the spec from the conversation alone.
|
|
65
|
+
**Before substantive implementation, review, diagnosis, or security-sensitive reasoning:** run \`pb orient --task "<what you're doing>"\` so task-relevant governance becomes active before you propose a solution. Treat \`pb orient -b\` as workspace orientation, not sufficient task grounding.
|
|
66
|
+
|
|
67
|
+
## Session lifecycle — close the loop
|
|
68
|
+
|
|
69
|
+
Start every write-heavy session with \`pb session start\`. This opens a tracked write session and refreshes context.
|
|
70
|
+
|
|
71
|
+
For reusable Product Brain workflows in Codex, read \`.codex/skills/README.md\` first, then open the matching skill file under \`.codex/skills/\`.
|
|
72
|
+
|
|
73
|
+
When you make a decision, discover a tension, or learn something during work:
|
|
74
|
+
\`\`\`
|
|
75
|
+
pb capture "TEN: description of the tension"
|
|
76
|
+
pb capture "DEC: decided X because Y"
|
|
77
|
+
pb capture "INS: learned that X"
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
Close with \`pb session close\` — reviews what was captured, refreshes context for the next session.
|
|
81
|
+
|
|
82
|
+
All captures are drafts. The human reviews and commits in Product Brain Studio.
|
|
83
|
+
${skillsSection}
|
|
84
|
+
## Governance Summary
|
|
85
|
+
|
|
86
|
+
This workspace uses Product Brain governance. Decisions, standards, and tensions are tracked on the Chain. Use \`pb orient -b\` for current focus.
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
export function generateClaudeMd(timestamp, profile) {
|
|
8
90
|
return `<!-- ${MARKER} — ${timestamp} -->
|
|
9
91
|
<!-- Re-run \`pb handshake\` to refresh. Do not edit manually. -->
|
|
10
92
|
|
|
@@ -18,12 +100,14 @@ Read \`.productbrain/briefing.md\` for entries matched to this repo.
|
|
|
18
100
|
| Command | Purpose |
|
|
19
101
|
|---------|---------|
|
|
20
102
|
| \`pb orient -b\` | Current workspace focus |
|
|
103
|
+
| \`pb orient --task "<task>"\` | Task-shaped governance and context before implementation, review, or diagnosis |
|
|
21
104
|
| \`pb get <ID>\` | Full entry (BET, DEC, STD, BR, TEN, ARCH) |
|
|
22
105
|
| \`pb context <ID>\` | Constellation context for an entry |
|
|
23
106
|
| \`pb search <query>\` | Find entries across the Chain |
|
|
24
107
|
| \`pb handshake\` | Refresh these context files |
|
|
25
108
|
|
|
26
109
|
**Before implementing any feature, ticket, or fix:** run \`pb get <ID>\` to read the actual spec, exclusions, acceptance criteria, and governance relations. Never assume you know the spec from the conversation alone.
|
|
110
|
+
**Before substantive implementation, review, diagnosis, or security-sensitive reasoning:** run \`pb orient --task "<what you're doing>"\` so task-relevant governance becomes active before you propose a solution. Treat \`pb orient -b\` as workspace orientation, not sufficient task grounding.
|
|
27
111
|
|
|
28
112
|
## Session lifecycle — close the loop
|
|
29
113
|
|
|
@@ -41,7 +125,7 @@ Close with \`pb session close\` — reviews what was captured, refreshes context
|
|
|
41
125
|
All captures are drafts. The human reviews and commits in Product Brain Studio.
|
|
42
126
|
`;
|
|
43
127
|
}
|
|
44
|
-
export function generateCursorMdc(timestamp) {
|
|
128
|
+
export function generateCursorMdc(timestamp, profile) {
|
|
45
129
|
return `---
|
|
46
130
|
description: Product Brain Chain context — workspace knowledge for AI-assisted development
|
|
47
131
|
globs:
|
|
@@ -56,12 +140,14 @@ Read \`.productbrain/briefing.md\` for entries matched to this repo.
|
|
|
56
140
|
## The Chain is the SSOT. Use \`pb\` before everything.
|
|
57
141
|
|
|
58
142
|
- \`pb orient -b\` — Current workspace focus
|
|
143
|
+
- \`pb orient --task "<task>"\` — Task-shaped governance and context before implementation, review, or diagnosis
|
|
59
144
|
- \`pb get <ID>\` — Full entry (BET, DEC, STD, BR, TEN, ARCH)
|
|
60
145
|
- \`pb context <ID>\` — Constellation context for an entry
|
|
61
146
|
- \`pb search <query>\` — Find entries across the Chain
|
|
62
147
|
- \`pb handshake\` — Refresh these context files
|
|
63
148
|
|
|
64
149
|
Before implementing any feature, ticket, or fix: run \`pb get <ID>\` to read the actual spec, exclusions, acceptance criteria, and governance relations. Never assume you know the spec from the conversation alone.
|
|
150
|
+
Before substantive implementation, review, diagnosis, or security-sensitive reasoning: run \`pb orient --task "<what you're doing>"\` so task-relevant governance becomes active before you propose a solution. Treat \`pb orient -b\` as workspace orientation, not sufficient task grounding.
|
|
65
151
|
|
|
66
152
|
## Session lifecycle — close the loop
|
|
67
153
|
|
|
@@ -74,29 +160,131 @@ Close with \`pb session close\`. All captures are drafts — human reviews and c
|
|
|
74
160
|
<!-- ${MARKER} — ${timestamp} -->
|
|
75
161
|
`;
|
|
76
162
|
}
|
|
77
|
-
export function generateCopilotMd(timestamp) {
|
|
78
|
-
|
|
163
|
+
export function generateCopilotMd(timestamp, options) {
|
|
164
|
+
const { profile, workspaceContext, skills, rules } = options ?? {};
|
|
165
|
+
const budget = profile?.tokenBudget ?? 30000;
|
|
166
|
+
// Workspace context section (only when data is available)
|
|
167
|
+
let workspaceSection = '';
|
|
168
|
+
if (workspaceContext && Object.values(workspaceContext).some((v) => v !== undefined)) {
|
|
169
|
+
const rows = [];
|
|
170
|
+
if (workspaceContext.stage !== undefined)
|
|
171
|
+
rows.push(`| Stage | \`${workspaceContext.stage}\` |`);
|
|
172
|
+
if (workspaceContext.focus !== undefined)
|
|
173
|
+
rows.push(`| Current focus | ${workspaceContext.focus} |`);
|
|
174
|
+
if (workspaceContext.governanceMode !== undefined)
|
|
175
|
+
rows.push(`| Governance mode | \`${workspaceContext.governanceMode}\` |`);
|
|
176
|
+
if (workspaceContext.totalEntries !== undefined)
|
|
177
|
+
rows.push(`| Chain entries | ${workspaceContext.totalEntries} |`);
|
|
178
|
+
workspaceSection = `
|
|
179
|
+
## Workspace Context
|
|
180
|
+
|
|
181
|
+
| Field | Value |
|
|
182
|
+
|-------|-------|
|
|
183
|
+
${rows.join('\n')}
|
|
184
|
+
`;
|
|
185
|
+
}
|
|
186
|
+
// Build the invariant base (header + workspace + command ref + session lifecycle)
|
|
187
|
+
const base = `<!-- ${MARKER} — ${timestamp} -->
|
|
79
188
|
<!-- Re-run \`pb handshake\` to refresh. Do not edit manually. -->
|
|
80
189
|
|
|
81
190
|
# Product Brain Context
|
|
82
191
|
|
|
83
192
|
Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
|
|
84
193
|
Read \`.productbrain/briefing.md\` for entries matched to this repo.
|
|
85
|
-
|
|
194
|
+
${workspaceSection}
|
|
86
195
|
## The Chain is the SSOT. Use \`pb\` before everything.
|
|
87
196
|
|
|
88
197
|
- \`pb orient -b\` — Current workspace focus
|
|
198
|
+
- \`pb orient --task "<task>"\` — Task-shaped governance and context before implementation, review, or diagnosis
|
|
89
199
|
- \`pb get <ID>\` — Full entry (BET, DEC, STD, BR, TEN, ARCH)
|
|
90
200
|
- \`pb context <ID>\` — Constellation context for an entry
|
|
91
201
|
- \`pb search <query>\` — Find entries across the Chain
|
|
92
202
|
- \`pb handshake\` — Refresh these context files
|
|
93
203
|
|
|
94
204
|
Before implementing any feature, ticket, or fix: run \`pb get <ID>\` to read the actual spec, exclusions, acceptance criteria, and governance relations. Never assume you know the spec from the conversation alone.
|
|
205
|
+
Before substantive implementation, review, diagnosis, or security-sensitive reasoning: run \`pb orient --task "<what you're doing>"\` so task-relevant governance becomes active before you propose a solution. Treat \`pb orient -b\` as workspace orientation, not sufficient task grounding.
|
|
95
206
|
|
|
96
207
|
## Session lifecycle — close the loop
|
|
97
208
|
|
|
98
209
|
Start with \`pb session start\`. Capture knowledge during work with \`pb capture "text"\`.
|
|
99
210
|
Close with \`pb session close\`. All captures are drafts — human reviews and commits.
|
|
100
211
|
`;
|
|
212
|
+
// When no enrichment options provided, return base for backward compat
|
|
213
|
+
if (!skills?.length && !rules?.length) {
|
|
214
|
+
return base;
|
|
215
|
+
}
|
|
216
|
+
// Build skill summaries and rule summaries as independent chunks
|
|
217
|
+
// so we can truncate from the end if needed
|
|
218
|
+
const skillChunks = [];
|
|
219
|
+
if (skills && skills.length > 0) {
|
|
220
|
+
skillChunks.push('\n## Skills\n');
|
|
221
|
+
for (const s of skills) {
|
|
222
|
+
let chunk = `\n### ${s.name}\n${s.description}\n`;
|
|
223
|
+
if (s.triggers && s.triggers.length > 0) {
|
|
224
|
+
chunk += `Triggers: ${s.triggers.slice(0, 3).join(', ')}\n`;
|
|
225
|
+
}
|
|
226
|
+
skillChunks.push(chunk);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const ruleChunks = [];
|
|
230
|
+
if (rules && rules.length > 0) {
|
|
231
|
+
ruleChunks.push('\n## Rules\n');
|
|
232
|
+
for (const r of rules) {
|
|
233
|
+
ruleChunks.push(`\n### ${r.name}\n${r.description}\n`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// All appendable chunks: skill section header + individual skills, then rule section header + individual rules
|
|
237
|
+
const allChunks = [...skillChunks, ...ruleChunks];
|
|
238
|
+
// Greedily append chunks while staying within budget
|
|
239
|
+
let result = base;
|
|
240
|
+
let omittedCount = 0;
|
|
241
|
+
const truncationNote = (n) => `\n<!-- Truncated: ${n} skills/rules omitted to stay within token budget -->\n`;
|
|
242
|
+
// Check if base already exceeds budget (rare, but handle gracefully)
|
|
243
|
+
if (base.length >= budget) {
|
|
244
|
+
return base;
|
|
245
|
+
}
|
|
246
|
+
// We need to find how many chunks fit. Reserve space for a truncation note if needed.
|
|
247
|
+
const allChunksText = allChunks.join('');
|
|
248
|
+
if (base.length + allChunksText.length <= budget) {
|
|
249
|
+
// Everything fits — no truncation needed
|
|
250
|
+
return base + allChunksText;
|
|
251
|
+
}
|
|
252
|
+
// Need to truncate. Greedy approach: keep adding chunks while they fit,
|
|
253
|
+
// always reserving space for the worst-case truncation note.
|
|
254
|
+
const isHeader = (c) => c.trimStart().startsWith('## ');
|
|
255
|
+
const itemCount = allChunks.filter((c) => !isHeader(c)).length;
|
|
256
|
+
// Worst-case note reserves for the maximum possible omission count
|
|
257
|
+
const worstCaseNoteLen = truncationNote(itemCount).length;
|
|
258
|
+
let accumulated = base;
|
|
259
|
+
let fittedItemCount = 0;
|
|
260
|
+
for (let i = 0; i < allChunks.length; i++) {
|
|
261
|
+
const chunk = allChunks[i];
|
|
262
|
+
const remaining = allChunks.slice(i + 1).join('');
|
|
263
|
+
// If everything from here fits without any note, append and done
|
|
264
|
+
if (accumulated.length + chunk.length + remaining.length <= budget) {
|
|
265
|
+
accumulated += allChunks.slice(i).join('');
|
|
266
|
+
fittedItemCount = itemCount;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
// Does this chunk fit if we reserve space for the worst-case note?
|
|
270
|
+
if (accumulated.length + chunk.length + worstCaseNoteLen <= budget) {
|
|
271
|
+
accumulated += chunk;
|
|
272
|
+
if (!isHeader(chunk))
|
|
273
|
+
fittedItemCount++;
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
omittedCount = itemCount - fittedItemCount;
|
|
280
|
+
if (omittedCount > 0) {
|
|
281
|
+
const note = truncationNote(omittedCount);
|
|
282
|
+
// Only append the note if it fits within budget; if the base alone
|
|
283
|
+
// nearly fills the budget, omit the note to honour the hard cap.
|
|
284
|
+
if (accumulated.length + note.length <= budget) {
|
|
285
|
+
accumulated += note;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return accumulated;
|
|
101
289
|
}
|
|
102
290
|
//# sourceMappingURL=adapters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/generators/adapters.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/generators/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.test.d.ts","sourceRoot":"","sources":["../../src/generators/adapters.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { generateAgentsMd, generateClaudeMd, generateCopilotMd, generateCursorMdc } from './adapters.js';
|
|
3
|
+
describe('generateAgentsMd', () => {
|
|
4
|
+
it('includes Product Brain bootstrap guidance for Codex-style agents', () => {
|
|
5
|
+
const output = generateAgentsMd('2026-04-02T00:00:00.000Z');
|
|
6
|
+
expect(output).toContain('auto-generated by pb handshake');
|
|
7
|
+
expect(output).toContain('Read `.productbrain/context.md`');
|
|
8
|
+
expect(output).toContain('Read `.productbrain/briefing.md`');
|
|
9
|
+
expect(output).toContain('Read `.productbrain/soul.md`');
|
|
10
|
+
expect(output).toContain('`.codex/skills/README.md`');
|
|
11
|
+
expect(output).toContain('pb orient -b');
|
|
12
|
+
expect(output).toContain('pb orient --task');
|
|
13
|
+
expect(output).toContain('pb session start');
|
|
14
|
+
expect(output).toContain('not sufficient task grounding');
|
|
15
|
+
expect(output).toContain('pb capture "TEN: description of the tension"');
|
|
16
|
+
expect(output).toContain('pb session close');
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe('adapter variants', () => {
|
|
20
|
+
it('propagates task-shaped startup guidance across generated adapters', () => {
|
|
21
|
+
const timestamp = '2026-04-02T00:00:00.000Z';
|
|
22
|
+
expect(generateClaudeMd(timestamp)).toContain('pb orient --task');
|
|
23
|
+
expect(generateCursorMdc(timestamp)).toContain('pb orient --task');
|
|
24
|
+
expect(generateCopilotMd(timestamp)).toContain('pb orient --task');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=adapters.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.test.js","sourceRoot":"","sources":["../../src/generators/adapters.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEzG,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,MAAM,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,SAAS,GAAG,0BAA0B,CAAC;QAE7C,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAClE,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACnE,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archetype loader and resolver — BET-286 Slice 2
|
|
3
|
+
*
|
|
4
|
+
* Loads archetype templates from packages/cli/templates/archetypes/ and
|
|
5
|
+
* resolves their {{slot}} placeholders using ClassifiedGovernance entries.
|
|
6
|
+
* Each resolved archetype produces a CanonicalRule ready to merge into
|
|
7
|
+
* the canonical rules array.
|
|
8
|
+
*
|
|
9
|
+
* Chain: BET-286 (Chain-Derived Agent Configuration), FEAT-894 (chain:// convention)
|
|
10
|
+
*/
|
|
11
|
+
import type { CanonicalRule } from './portable-knowledge.js';
|
|
12
|
+
import type { ClassifiedGovernance, GovernanceFunction } from './chain-classifier.js';
|
|
13
|
+
/** Parsed archetype template, ready for slot resolution. */
|
|
14
|
+
interface ArchetypeTemplate {
|
|
15
|
+
functionKey: GovernanceFunction;
|
|
16
|
+
/** Frontmatter fields */
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
autoApply: boolean;
|
|
20
|
+
level: string;
|
|
21
|
+
/** Template body with {{slot}} placeholders */
|
|
22
|
+
body: string;
|
|
23
|
+
}
|
|
24
|
+
/** Result of resolving an archetype against classified governance entries. */
|
|
25
|
+
export interface ResolvedArchetype {
|
|
26
|
+
/** Ready to merge into the canonical rules array */
|
|
27
|
+
rule: CanonicalRule;
|
|
28
|
+
functionKey: GovernanceFunction;
|
|
29
|
+
/** Which entry IDs contributed to this rule */
|
|
30
|
+
resolvedEntryIds: string[];
|
|
31
|
+
}
|
|
32
|
+
/** Discriminated reason when resolveArchetype returns null. */
|
|
33
|
+
export type ArchetypeSkipReason = 'no-template' | 'manual-suppression' | 'zero-entries';
|
|
34
|
+
/**
|
|
35
|
+
* Load the archetype template for a governance function.
|
|
36
|
+
* Returns null if the function is 'unclassified' or no template file exists.
|
|
37
|
+
*/
|
|
38
|
+
export declare function loadArchetype(functionKey: GovernanceFunction): ArchetypeTemplate | null;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve an archetype's slots using classified governance entries.
|
|
41
|
+
*
|
|
42
|
+
* Returns a discriminated result:
|
|
43
|
+
* - `{ resolved: ResolvedArchetype }` on success
|
|
44
|
+
* - `{ skipped: ArchetypeSkipReason }` when the archetype cannot be produced
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveArchetype(functionKey: GovernanceFunction, classified: ClassifiedGovernance[], manualRuleNames: Set<string>): {
|
|
47
|
+
resolved: ResolvedArchetype;
|
|
48
|
+
} | {
|
|
49
|
+
skipped: ArchetypeSkipReason;
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=archetypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../../src/generators/archetypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAItF,4DAA4D;AAC5D,UAAU,iBAAiB;IACzB,WAAW,EAAE,kBAAkB,CAAC;IAChC,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,kBAAkB,CAAC;IAChC,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,oBAAoB,GAAG,cAAc,CAAC;AAwCxF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAkBvF;AA4CD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,oBAAoB,EAAE,EAClC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B;IAAE,QAAQ,EAAE,iBAAiB,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,CAsDpE"}
|