@productbrain/cli 0.1.0-beta.7 → 0.1.0-beta.70
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 +98 -30
- 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.d.ts +2 -0
- package/dist/__tests__/capture.test.d.ts.map +1 -0
- package/dist/__tests__/capture.test.js +377 -0
- package/dist/__tests__/capture.test.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/__tests__/constellation.test.d.ts.map +1 -0
- package/dist/__tests__/constellation.test.js +254 -0
- package/dist/__tests__/constellation.test.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/__tests__/fields.test.d.ts.map +1 -0
- package/dist/__tests__/fields.test.js +238 -0
- package/dist/__tests__/fields.test.js.map +1 -0
- 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.test.d.ts +2 -0
- package/dist/__tests__/handshake.test.d.ts.map +1 -0
- package/dist/__tests__/handshake.test.js +196 -0
- package/dist/__tests__/handshake.test.js.map +1 -0
- package/dist/__tests__/ingest.test.js +98 -0
- 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__/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__/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.d.ts +2 -0
- package/dist/__tests__/relate.test.d.ts.map +1 -0
- package/dist/__tests__/relate.test.js +103 -0
- package/dist/__tests__/relate.test.js.map +1 -0
- package/dist/__tests__/repo-detect.test.d.ts +2 -0
- package/dist/__tests__/repo-detect.test.d.ts.map +1 -0
- package/dist/__tests__/repo-detect.test.js +215 -0
- package/dist/__tests__/repo-detect.test.js.map +1 -0
- package/dist/__tests__/runner.test.d.ts +2 -0
- package/dist/__tests__/runner.test.d.ts.map +1 -0
- package/dist/__tests__/runner.test.js +219 -0
- package/dist/__tests__/runner.test.js.map +1 -0
- package/dist/__tests__/session-touch.test.d.ts +2 -0
- package/dist/__tests__/session-touch.test.d.ts.map +1 -0
- package/dist/__tests__/session-touch.test.js +134 -0
- package/dist/__tests__/session-touch.test.js.map +1 -0
- package/dist/__tests__/session.test.d.ts +2 -0
- package/dist/__tests__/session.test.d.ts.map +1 -0
- package/dist/__tests__/session.test.js +46 -0
- package/dist/__tests__/session.test.js.map +1 -0
- 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__/strip.test.d.ts +2 -0
- package/dist/__tests__/strip.test.d.ts.map +1 -0
- package/dist/__tests__/strip.test.js +136 -0
- package/dist/__tests__/strip.test.js.map +1 -0
- 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__/update.test.d.ts +2 -0
- package/dist/__tests__/update.test.d.ts.map +1 -0
- package/dist/__tests__/update.test.js +228 -0
- package/dist/__tests__/update.test.js.map +1 -0
- 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 +88 -0
- package/dist/commands/admin/cockpit.d.ts.map +1 -0
- package/dist/commands/admin/cockpit.js +409 -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 +254 -0
- package/dist/commands/admin/index.js.map +1 -0
- package/dist/commands/admin/inspect.d.ts +21 -0
- package/dist/commands/admin/inspect.d.ts.map +1 -0
- package/dist/commands/admin/inspect.js +536 -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 +71 -0
- package/dist/commands/admin/inspect.test.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 +527 -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 +30 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +385 -0
- package/dist/commands/capture.js.map +1 -0
- 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 +200 -0
- package/dist/commands/connect-integration.test.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 +279 -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 +230 -0
- package/dist/commands/connect.test.js.map +1 -0
- package/dist/commands/constellation.d.ts +11 -0
- package/dist/commands/constellation.d.ts.map +1 -0
- package/dist/commands/constellation.js +33 -0
- package/dist/commands/constellation.js.map +1 -0
- package/dist/commands/context.d.ts +2 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +20 -9
- 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 +9 -0
- package/dist/commands/fields.d.ts.map +1 -0
- package/dist/commands/fields.js +30 -0
- package/dist/commands/fields.js.map +1 -0
- package/dist/commands/get.d.ts +8 -1
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +60 -7
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/handshake.d.ts +28 -0
- package/dist/commands/handshake.d.ts.map +1 -0
- package/dist/commands/handshake.js +617 -0
- package/dist/commands/handshake.js.map +1 -0
- package/dist/commands/ingest.d.ts +8 -2
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +148 -25
- 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 +117 -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/orient.d.ts +107 -1
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +24 -8
- 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 +16 -0
- package/dist/commands/relate.d.ts.map +1 -0
- package/dist/commands/relate.js +98 -0
- package/dist/commands/relate.js.map +1 -0
- package/dist/commands/search.d.ts +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +5 -3
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session.d.ts +20 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +148 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +15 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +168 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/update.d.ts +17 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +178 -0
- package/dist/commands/update.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/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 +48 -0
- package/dist/formatters/capture.d.ts.map +1 -0
- package/dist/formatters/capture.js +77 -0
- package/dist/formatters/capture.js.map +1 -0
- 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/constellation.d.ts +34 -0
- package/dist/formatters/constellation.d.ts.map +1 -0
- package/dist/formatters/constellation.js +38 -0
- package/dist/formatters/constellation.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/fields.d.ts +32 -0
- package/dist/formatters/fields.d.ts.map +1 -0
- package/dist/formatters/fields.js +49 -0
- package/dist/formatters/fields.js.map +1 -0
- package/dist/formatters/handshake.d.ts +24 -0
- package/dist/formatters/handshake.d.ts.map +1 -0
- package/dist/formatters/handshake.js +69 -0
- package/dist/formatters/handshake.js.map +1 -0
- 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 +14 -0
- package/dist/formatters/relate.d.ts.map +1 -0
- package/dist/formatters/relate.js +16 -0
- package/dist/formatters/relate.js.map +1 -0
- 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 +11 -0
- package/dist/formatters/session.d.ts.map +1 -0
- package/dist/formatters/session.js +53 -0
- package/dist/formatters/session.js.map +1 -0
- package/dist/formatters/update.d.ts +17 -0
- package/dist/formatters/update.d.ts.map +1 -0
- package/dist/formatters/update.js +45 -0
- package/dist/formatters/update.js.map +1 -0
- 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 +44 -0
- package/dist/generators/adapters.d.ts.map +1 -0
- package/dist/generators/adapters.js +290 -0
- package/dist/generators/adapters.js.map +1 -0
- 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/briefing-md.d.ts +8 -0
- package/dist/generators/briefing-md.d.ts.map +1 -0
- package/dist/generators/briefing-md.js +51 -0
- package/dist/generators/briefing-md.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 +8 -0
- package/dist/generators/context-md.d.ts.map +1 -0
- package/dist/generators/context-md.js +134 -0
- package/dist/generators/context-md.js.map +1 -0
- 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/portable-knowledge.d.ts +143 -0
- package/dist/generators/portable-knowledge.d.ts.map +1 -0
- package/dist/generators/portable-knowledge.js +504 -0
- package/dist/generators/portable-knowledge.js.map +1 -0
- package/dist/generators/portable-knowledge.test.d.ts +2 -0
- package/dist/generators/portable-knowledge.test.d.ts.map +1 -0
- package/dist/generators/portable-knowledge.test.js +927 -0
- package/dist/generators/portable-knowledge.test.js.map +1 -0
- 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.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +642 -37
- 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 +61 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +258 -12
- package/dist/lib/client.js.map +1 -1
- 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/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 +33 -0
- package/dist/lib/repo-detect.d.ts.map +1 -0
- package/dist/lib/repo-detect.js +83 -0
- package/dist/lib/repo-detect.js.map +1 -0
- package/dist/lib/runner.d.ts +33 -0
- package/dist/lib/runner.d.ts.map +1 -0
- package/dist/lib/runner.js +79 -0
- package/dist/lib/runner.js.map +1 -0
- package/dist/lib/session.d.ts +17 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +43 -0
- package/dist/lib/session.js.map +1 -0
- 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/strip.d.ts +12 -0
- package/dist/lib/strip.d.ts.map +1 -0
- package/dist/lib/strip.js +41 -0
- package/dist/lib/strip.js.map +1 -0
- package/dist/lib/style.d.ts +94 -0
- package/dist/lib/style.d.ts.map +1 -0
- package/dist/lib/style.js +167 -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/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 +16 -0
- package/dist/lib/workspace-probe.d.ts.map +1 -0
- package/dist/lib/workspace-probe.js +33 -0
- package/dist/lib/workspace-probe.js.map +1 -0
- package/package.json +13 -4
- 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/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,504 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portable knowledge — reads canonical skills/rules from .productbrain/
|
|
3
|
+
* and generates tool-specific copies for Cursor, Claude Code, etc.
|
|
4
|
+
*/
|
|
5
|
+
import { readdirSync, readFileSync, existsSync } from 'fs';
|
|
6
|
+
import { join, basename } from 'path';
|
|
7
|
+
import { MARKER } from './adapters.js';
|
|
8
|
+
/** Returns true if the entry should be emitted to the given target. */
|
|
9
|
+
export function shouldEmitToTarget(entry, target) {
|
|
10
|
+
if (!entry.targets)
|
|
11
|
+
return true;
|
|
12
|
+
return entry.targets.includes(target);
|
|
13
|
+
}
|
|
14
|
+
const LEVEL_HIERARCHY = {
|
|
15
|
+
beginner: ['core'],
|
|
16
|
+
intermediate: ['core', 'intermediate'],
|
|
17
|
+
expert: ['core', 'intermediate', 'expert'],
|
|
18
|
+
};
|
|
19
|
+
const VALID_LEVELS = new Set(Object.keys(LEVEL_HIERARCHY));
|
|
20
|
+
/**
|
|
21
|
+
* Maps workspace stage to the maximum allowed HandshakeLevel.
|
|
22
|
+
* Stages not listed here apply no cap (fail-open for unknown stages).
|
|
23
|
+
* Note: 'beginner' level allows only 'core' items; 'intermediate' allows core + intermediate.
|
|
24
|
+
*/
|
|
25
|
+
export const STAGE_TO_MAX_LEVEL = {
|
|
26
|
+
blank: 'beginner',
|
|
27
|
+
seed: 'intermediate',
|
|
28
|
+
grounded: 'expert',
|
|
29
|
+
connected: 'expert',
|
|
30
|
+
critical: 'expert',
|
|
31
|
+
};
|
|
32
|
+
/** Level ordering used to pick the more restrictive of two levels. */
|
|
33
|
+
export const LEVEL_ORDER = ['beginner', 'intermediate', 'expert'];
|
|
34
|
+
/**
|
|
35
|
+
* Pick the more restrictive of two levels.
|
|
36
|
+
* If either is undefined, returns the other (or undefined if both are).
|
|
37
|
+
*/
|
|
38
|
+
function capLevel(requested, cap) {
|
|
39
|
+
if (!requested && !cap)
|
|
40
|
+
return undefined;
|
|
41
|
+
if (!requested)
|
|
42
|
+
return cap;
|
|
43
|
+
if (!cap)
|
|
44
|
+
return requested;
|
|
45
|
+
const requestedIdx = LEVEL_ORDER.indexOf(requested);
|
|
46
|
+
const capIdx = LEVEL_ORDER.indexOf(cap);
|
|
47
|
+
return LEVEL_ORDER[Math.min(requestedIdx, capIdx)];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Filter items by graduated level, with optional workspace stage-gating.
|
|
51
|
+
* - If requestedLevel is undefined/null AND stage provides no cap: return ALL items (backward compat).
|
|
52
|
+
* - Items with no `level` field: always included (backward compat).
|
|
53
|
+
* - Stage caps the effective level: blank→beginner, seed→intermediate, grounded/connected/critical→expert.
|
|
54
|
+
* - If stage is unknown or null: no cap applied (fail-open).
|
|
55
|
+
* - The effective level is min(requestedLevel, stageCap) — most restrictive wins.
|
|
56
|
+
*/
|
|
57
|
+
export function filterByLevel(items, requestedLevel, stage) {
|
|
58
|
+
// Resolve stage cap (fail-open for unknown/undefined stage)
|
|
59
|
+
const stageCap = stage ? STAGE_TO_MAX_LEVEL[stage] : undefined;
|
|
60
|
+
// Resolve requested level as typed enum (validate if provided)
|
|
61
|
+
let typedRequested;
|
|
62
|
+
if (requestedLevel) {
|
|
63
|
+
if (!VALID_LEVELS.has(requestedLevel)) {
|
|
64
|
+
throw new Error(`Unknown level "${requestedLevel}". Valid levels: ${[...VALID_LEVELS].join(', ')}`);
|
|
65
|
+
}
|
|
66
|
+
typedRequested = requestedLevel;
|
|
67
|
+
}
|
|
68
|
+
// Determine effective level (most restrictive)
|
|
69
|
+
const effectiveLevel = capLevel(typedRequested, stageCap);
|
|
70
|
+
// No effective level — return all items (backward compat)
|
|
71
|
+
if (!effectiveLevel)
|
|
72
|
+
return items;
|
|
73
|
+
const allowedLevels = LEVEL_HIERARCHY[effectiveLevel];
|
|
74
|
+
return items.filter((item) => !item.level || allowedLevels.includes(item.level));
|
|
75
|
+
}
|
|
76
|
+
// ── Stage ordering ────────────────────────────────────────────────────
|
|
77
|
+
const STAGE_ORDER = ['blank', 'seed', 'grounded', 'connected', 'critical'];
|
|
78
|
+
/**
|
|
79
|
+
* Evaluate when_* conditions against the workspace profile and repo context.
|
|
80
|
+
* Returns { included, reasons }.
|
|
81
|
+
*
|
|
82
|
+
* Fail-open: if profile is null and profile-dependent conditions are present,
|
|
83
|
+
* the item is included (preserves current behavior when Chain is unavailable).
|
|
84
|
+
*/
|
|
85
|
+
export function evaluateConditions(conditions, profile, repoContext) {
|
|
86
|
+
const hasProfileConditions = conditions.when_minStage !== undefined || conditions.when_minGovernance !== undefined;
|
|
87
|
+
const hasStackCondition = conditions.when_stack !== undefined;
|
|
88
|
+
// No when_* keys at all — always include
|
|
89
|
+
if (!hasProfileConditions && !hasStackCondition) {
|
|
90
|
+
return { included: true, reasons: ['no conditions'] };
|
|
91
|
+
}
|
|
92
|
+
// Fail-open: profile unavailable but profile-dependent conditions present
|
|
93
|
+
if (profile === null && hasProfileConditions) {
|
|
94
|
+
return { included: true, reasons: ['no workspace profile — fail-open'] };
|
|
95
|
+
}
|
|
96
|
+
const reasons = [];
|
|
97
|
+
let included = true;
|
|
98
|
+
// when_stack: evaluated against repoContext (not profile)
|
|
99
|
+
if (conditions.when_stack !== undefined) {
|
|
100
|
+
const needle = conditions.when_stack.toLowerCase();
|
|
101
|
+
const match = repoContext.detectedStack.some((s) => s.toLowerCase() === needle);
|
|
102
|
+
if (!match) {
|
|
103
|
+
included = false;
|
|
104
|
+
reasons.push(`when_stack=${conditions.when_stack} not in detected stack [${repoContext.detectedStack.join(', ')}]`);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
reasons.push(`when_stack=${conditions.when_stack} matched`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// when_minStage: profile guaranteed non-null here when this condition is present
|
|
111
|
+
if (conditions.when_minStage !== undefined && profile !== null) {
|
|
112
|
+
const profileIdx = STAGE_ORDER.indexOf(profile.stage);
|
|
113
|
+
const thresholdIdx = STAGE_ORDER.indexOf(conditions.when_minStage);
|
|
114
|
+
if (thresholdIdx === -1 || profileIdx === -1 || profileIdx < thresholdIdx) {
|
|
115
|
+
included = false;
|
|
116
|
+
reasons.push(`when_minStage=${conditions.when_minStage} but workspace stage=${profile.stage}`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
reasons.push(`when_minStage=${conditions.when_minStage} satisfied (stage=${profile.stage})`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// when_minGovernance: profile guaranteed non-null here when this condition is present
|
|
123
|
+
if (conditions.when_minGovernance !== undefined && profile !== null) {
|
|
124
|
+
const threshold = parseInt(conditions.when_minGovernance, 10);
|
|
125
|
+
if (isNaN(threshold) || profile.totalRelations < threshold) {
|
|
126
|
+
included = false;
|
|
127
|
+
reasons.push(`when_minGovernance=${conditions.when_minGovernance} but totalRelations=${profile.totalRelations}`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
reasons.push(`when_minGovernance=${conditions.when_minGovernance} satisfied (totalRelations=${profile.totalRelations})`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return { included, reasons };
|
|
134
|
+
}
|
|
135
|
+
// ── Frontmatter parser ─────────────────────────────────────────────────
|
|
136
|
+
function parseFrontmatter(raw) {
|
|
137
|
+
const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
138
|
+
if (!match)
|
|
139
|
+
return { fields: new Map(), arrayFields: new Map(), body: raw };
|
|
140
|
+
const yaml = match[1];
|
|
141
|
+
const body = match[2];
|
|
142
|
+
const fields = new Map();
|
|
143
|
+
const arrayFields = new Map();
|
|
144
|
+
const lines = yaml.split('\n');
|
|
145
|
+
let currentKey = null;
|
|
146
|
+
let collectingMultiline = false;
|
|
147
|
+
let collectingArray = false;
|
|
148
|
+
for (const line of lines) {
|
|
149
|
+
// Array item: " - value"
|
|
150
|
+
if (collectingArray && currentKey && /^\s+-\s/.test(line)) {
|
|
151
|
+
const items = arrayFields.get(currentKey) ?? [];
|
|
152
|
+
items.push(line.replace(/^\s+-\s+/, '').trim().replace(/^["']|["']$/g, ''));
|
|
153
|
+
arrayFields.set(currentKey, items);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
// Multiline continuation: indented text after >- or >
|
|
157
|
+
if (collectingMultiline && currentKey && /^\s+\S/.test(line)) {
|
|
158
|
+
const existing = fields.get(currentKey) ?? '';
|
|
159
|
+
fields.set(currentKey, (existing ? existing + ' ' : '') + line.trim());
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
// New key — reset collection state
|
|
163
|
+
collectingMultiline = false;
|
|
164
|
+
collectingArray = false;
|
|
165
|
+
const kv = line.match(/^([\w-]+):\s*(.*)/);
|
|
166
|
+
if (!kv)
|
|
167
|
+
continue;
|
|
168
|
+
currentKey = kv[1];
|
|
169
|
+
const val = kv[2].trim();
|
|
170
|
+
if (val === '' || val === '>-' || val === '>') {
|
|
171
|
+
// Could be array or multiline — peek ahead via next iterations
|
|
172
|
+
// If next line starts with " -", it's an array; if indented text, it's multiline
|
|
173
|
+
collectingMultiline = val === '>-' || val === '>';
|
|
174
|
+
collectingArray = val === '';
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
fields.set(currentKey, val.replace(/^["']|["']$/g, ''));
|
|
178
|
+
}
|
|
179
|
+
return { fields, arrayFields, body };
|
|
180
|
+
}
|
|
181
|
+
// ── Readers ────────────────────────────────────────────────────────────
|
|
182
|
+
export function readCanonicalSkills(productbrainDir) {
|
|
183
|
+
const skillsDir = join(productbrainDir, 'skills');
|
|
184
|
+
if (!existsSync(skillsDir))
|
|
185
|
+
return [];
|
|
186
|
+
const files = readdirSync(skillsDir).filter((f) => f.endsWith('.md'));
|
|
187
|
+
const skills = [];
|
|
188
|
+
for (const file of files) {
|
|
189
|
+
const filePath = join(skillsDir, file);
|
|
190
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
191
|
+
const { fields, arrayFields, body } = parseFrontmatter(raw);
|
|
192
|
+
const name = fields.get('name') ?? basename(file, '.md');
|
|
193
|
+
const description = fields.get('description') ?? '';
|
|
194
|
+
const triggers = arrayFields.get('triggers') ?? [];
|
|
195
|
+
const targets = arrayFields.get('targets');
|
|
196
|
+
const level = fields.get('level');
|
|
197
|
+
const conditions = {};
|
|
198
|
+
const whenStack = fields.get('when_stack');
|
|
199
|
+
const whenMinStage = fields.get('when_minStage');
|
|
200
|
+
const whenMinGovernance = fields.get('when_minGovernance');
|
|
201
|
+
if (whenStack)
|
|
202
|
+
conditions.when_stack = whenStack;
|
|
203
|
+
if (whenMinStage)
|
|
204
|
+
conditions.when_minStage = whenMinStage;
|
|
205
|
+
if (whenMinGovernance)
|
|
206
|
+
conditions.when_minGovernance = whenMinGovernance;
|
|
207
|
+
const hasConditions = Object.keys(conditions).length > 0;
|
|
208
|
+
skills.push({ name, description, triggers, body, sourcePath: filePath, targets: targets?.length ? targets : undefined, level: level || undefined, conditions: hasConditions ? conditions : undefined });
|
|
209
|
+
}
|
|
210
|
+
return skills.sort((a, b) => a.name.localeCompare(b.name));
|
|
211
|
+
}
|
|
212
|
+
export function readCanonicalRules(productbrainDir) {
|
|
213
|
+
const rulesDir = join(productbrainDir, 'rules');
|
|
214
|
+
if (!existsSync(rulesDir))
|
|
215
|
+
return [];
|
|
216
|
+
const files = readdirSync(rulesDir).filter((f) => f.endsWith('.md'));
|
|
217
|
+
const rules = [];
|
|
218
|
+
for (const file of files) {
|
|
219
|
+
const filePath = join(rulesDir, file);
|
|
220
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
221
|
+
const { fields, arrayFields, body } = parseFrontmatter(raw);
|
|
222
|
+
const name = fields.get('name') ?? basename(file, '.md');
|
|
223
|
+
const description = fields.get('description') ?? '';
|
|
224
|
+
const scope = fields.get('scope');
|
|
225
|
+
const autoApply = fields.get('autoApply') === 'true';
|
|
226
|
+
const targets = arrayFields.get('targets');
|
|
227
|
+
const level = fields.get('level');
|
|
228
|
+
const conditions = {};
|
|
229
|
+
const whenStack = fields.get('when_stack');
|
|
230
|
+
const whenMinStage = fields.get('when_minStage');
|
|
231
|
+
const whenMinGovernance = fields.get('when_minGovernance');
|
|
232
|
+
if (whenStack)
|
|
233
|
+
conditions.when_stack = whenStack;
|
|
234
|
+
if (whenMinStage)
|
|
235
|
+
conditions.when_minStage = whenMinStage;
|
|
236
|
+
if (whenMinGovernance)
|
|
237
|
+
conditions.when_minGovernance = whenMinGovernance;
|
|
238
|
+
const hasConditions = Object.keys(conditions).length > 0;
|
|
239
|
+
rules.push({ name, description, scope, autoApply, body, sourcePath: filePath, targets: targets?.length ? targets : undefined, level: level || undefined, conditions: hasConditions ? conditions : undefined });
|
|
240
|
+
}
|
|
241
|
+
return rules.sort((a, b) => a.name.localeCompare(b.name));
|
|
242
|
+
}
|
|
243
|
+
// ── Transport section stripping ───────────────────────────────────────
|
|
244
|
+
/**
|
|
245
|
+
* Strip transport-conditional sections from a skill body.
|
|
246
|
+
*
|
|
247
|
+
* Sections are delimited by HTML comments:
|
|
248
|
+
* <!-- transport:TARGET_NAME -->
|
|
249
|
+
* ...content...
|
|
250
|
+
* <!-- /transport -->
|
|
251
|
+
*
|
|
252
|
+
* - Blocks matching the current target: keep the content, remove the delimiter comments.
|
|
253
|
+
* - Blocks for OTHER targets: remove entirely (delimiters + content).
|
|
254
|
+
* - Content outside any transport block: keep as-is (universal content).
|
|
255
|
+
*/
|
|
256
|
+
export function stripTransportSections(body, target) {
|
|
257
|
+
// Match transport blocks: <!-- transport:NAME -->...<!-- /transport -->
|
|
258
|
+
// Using a non-greedy match between the opening and the NEXT closing tag.
|
|
259
|
+
const transportBlockRe = /<!-- transport:(\w+) -->\n?([\s\S]*?)<!-- \/transport -->\n?/g;
|
|
260
|
+
return body.replace(transportBlockRe, (_match, blockTarget, content) => {
|
|
261
|
+
if (blockTarget === target) {
|
|
262
|
+
// Keep the content, remove the delimiter comments
|
|
263
|
+
return content;
|
|
264
|
+
}
|
|
265
|
+
// Remove the entire block for other targets
|
|
266
|
+
return '';
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
// ── Cursor generators ──────────────────────────────────────────────────
|
|
270
|
+
/**
|
|
271
|
+
* Generate a Cursor SKILL.md from a canonical skill.
|
|
272
|
+
* Cursor expects: name, description (with triggers embedded).
|
|
273
|
+
*/
|
|
274
|
+
export function generateCursorSkill(skill, profile) {
|
|
275
|
+
// Cursor puts trigger phrases in the description field
|
|
276
|
+
const triggerLine = skill.triggers.length > 0
|
|
277
|
+
? ` Use when the user says ${skill.triggers.map((t) => `"${t}"`).join(', ')}.`
|
|
278
|
+
: '';
|
|
279
|
+
const description = skill.description + triggerLine;
|
|
280
|
+
// Strip transport sections BEFORE path replacement
|
|
281
|
+
const stripped = stripTransportSections(skill.body, 'cursor');
|
|
282
|
+
// Replace canonical paths with Cursor paths in body
|
|
283
|
+
const body = stripped
|
|
284
|
+
.replace(/\.productbrain\/rules\/(\S+)\.md/g, '.cursor/rules/$1.mdc')
|
|
285
|
+
.replace(/\.productbrain\/skills\/(\S+)\.md/g, '.cursor/skills/$1/SKILL.md');
|
|
286
|
+
return `---
|
|
287
|
+
name: ${skill.name}
|
|
288
|
+
description: >-
|
|
289
|
+
${description.replace(/\n/g, '\n ')}
|
|
290
|
+
---
|
|
291
|
+
<!-- ${MARKER} — source: .productbrain/skills/${skill.name}.md -->
|
|
292
|
+
|
|
293
|
+
${body}`;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Generate a Cursor .mdc rule from a canonical rule.
|
|
297
|
+
* Cursor expects: description, globs, alwaysApply.
|
|
298
|
+
*/
|
|
299
|
+
export function generateCursorRule(rule, profile) {
|
|
300
|
+
// Replace canonical paths with Cursor paths in body
|
|
301
|
+
const body = rule.body
|
|
302
|
+
.replace(/\.productbrain\/rules\/(\S+)\.md/g, '.cursor/rules/$1.mdc')
|
|
303
|
+
.replace(/\.productbrain\/skills\/(\S+)\.md/g, '.cursor/skills/$1/SKILL.md');
|
|
304
|
+
return `---
|
|
305
|
+
description: ${rule.description}
|
|
306
|
+
globs: ${rule.scope || ''}
|
|
307
|
+
alwaysApply: ${!rule.scope && rule.autoApply}
|
|
308
|
+
---
|
|
309
|
+
<!-- ${MARKER} — source: .productbrain/rules/${rule.name}.md -->
|
|
310
|
+
|
|
311
|
+
${body}`;
|
|
312
|
+
}
|
|
313
|
+
// ── Codex generators ───────────────────────────────────────────────────
|
|
314
|
+
/**
|
|
315
|
+
* Apply batch-mode transformations to a skill body (DEC-283).
|
|
316
|
+
*
|
|
317
|
+
* Skills describe WHAT (intent). This generator produces HOW (batch-appropriate
|
|
318
|
+
* instructions). We transform interactive patterns without gutting the skill's
|
|
319
|
+
* logical structure and purpose.
|
|
320
|
+
*
|
|
321
|
+
* Transformations applied:
|
|
322
|
+
* 1. Strip sub-agent spawn patterns → inline steps
|
|
323
|
+
* 2. Strip user confirmation gates → autonomous proceed
|
|
324
|
+
* 3. Strip streaming/interactive references
|
|
325
|
+
* 4. Add batch governance header after first `#` heading
|
|
326
|
+
*/
|
|
327
|
+
export function applyBatchTransformations(body) {
|
|
328
|
+
// Split into fenced code blocks vs prose so transforms only apply to prose.
|
|
329
|
+
// Fenced blocks (``` or ~~~) may contain examples of interactive patterns
|
|
330
|
+
// that must be preserved verbatim.
|
|
331
|
+
const segments = body.split(/(^```[^\n]*\n[\s\S]*?^```\s*$|^~~~[^\n]*\n[\s\S]*?^~~~\s*$)/m);
|
|
332
|
+
let result = segments
|
|
333
|
+
.map((segment, i) => {
|
|
334
|
+
// Odd indices are fenced code blocks — pass through unchanged
|
|
335
|
+
if (i % 2 === 1)
|
|
336
|
+
return segment;
|
|
337
|
+
return applyProseTransformations(segment);
|
|
338
|
+
})
|
|
339
|
+
.join('');
|
|
340
|
+
// 4. Add batch governance header after the first `#` heading line
|
|
341
|
+
const batchHeader = '> Batch execution mode: This skill runs autonomously without interactive gates. Decisions are logged, not prompted.';
|
|
342
|
+
result = result.replace(/^(#\s+[^\n]+)(\n)/m, `$1$2\n${batchHeader}\n`);
|
|
343
|
+
return result;
|
|
344
|
+
}
|
|
345
|
+
/** Apply interactive-pattern transforms to a prose segment (not inside code fences). */
|
|
346
|
+
function applyProseTransformations(text) {
|
|
347
|
+
let result = text;
|
|
348
|
+
// 1. Sub-agent spawn patterns — lines that dispatch to sub-agents or fresh conversations
|
|
349
|
+
result = result.replace(/^.*\b(spawn\s+(a\s+)?(sub-agent|build\s+sub-agent|review\s+sub-agent|judge|system\s+verification\s+agent)|Agent\s+tool\s+dispatch|fresh\s+conversation\s+handoff|open\s+a\s+(new|fresh)\s+(conversation|chat)|start\s+a\s+(new|fresh)\s+(conversation|chat))\b.*$/gim, 'Execute as inline steps within this session.');
|
|
350
|
+
// 2. User confirmation gates — lines that halt for human input
|
|
351
|
+
result = result.replace(/^.*\b(ask\s+the\s+(user|human)|wait\s+for\s+(user\s+)?input|present\s+gate\s+to\s+(the\s+)?user|stop\s+and\s+ask|pause\s+and\s+ask|get\s+user\s+confirmation|awaiting\s+your\s+feedback|wait\s+for\s+(human|user)\s+(sign-?off|approval|input))\b.*$/gim, 'Proceed autonomously. Log decision rationale.');
|
|
352
|
+
// 3. Streaming / persistent-connection references
|
|
353
|
+
result = result.replace(/^.*\b(real-time\s+feedback|streaming\s+output|interactive\s+mcp\s+tool\s+calls?\s+that\s+assume\s+a\s+persistent\s+connection)\b.*$/gim, '');
|
|
354
|
+
return result;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Generate a Codex skill projection from a canonical skill.
|
|
358
|
+
* This is a repo-local markdown projection, not a separate authoring source.
|
|
359
|
+
*
|
|
360
|
+
* When profile.executionModel === 'batch', batch transformations are applied
|
|
361
|
+
* AFTER transport stripping and path replacement (DEC-283).
|
|
362
|
+
*/
|
|
363
|
+
export function generateCodexSkill(skill, profile) {
|
|
364
|
+
const triggerLine = skill.triggers.length > 0
|
|
365
|
+
? `\n\n**Triggers:** ${skill.triggers.map((t) => `\`${t}\``).join(', ')}`
|
|
366
|
+
: '';
|
|
367
|
+
const stripped = stripTransportSections(skill.body, 'codex');
|
|
368
|
+
const pathReplaced = stripped
|
|
369
|
+
.replace(/\.productbrain\/skills\/(\S+)\.md/g, '.codex/skills/$1.md');
|
|
370
|
+
const body = profile?.executionModel === 'batch'
|
|
371
|
+
? applyBatchTransformations(pathReplaced)
|
|
372
|
+
: pathReplaced;
|
|
373
|
+
return `<!-- ${MARKER} — source: .productbrain/skills/${skill.name}.md -->
|
|
374
|
+
|
|
375
|
+
# ${skill.name}
|
|
376
|
+
|
|
377
|
+
${skill.description}${triggerLine}
|
|
378
|
+
|
|
379
|
+
${body}`;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Generate a Codex skill index/router file.
|
|
383
|
+
* AGENTS.md can point here so Codex has one obvious place to find available workflows.
|
|
384
|
+
*/
|
|
385
|
+
export function generateCodexSkillIndex(skills) {
|
|
386
|
+
const primarySkills = skills.filter((skill) => {
|
|
387
|
+
const lower = skill.name.toLowerCase();
|
|
388
|
+
return lower !== 'learnings-template' && !lower.endsWith('-learnings');
|
|
389
|
+
});
|
|
390
|
+
if (primarySkills.length === 0) {
|
|
391
|
+
return `<!-- ${MARKER} — source: generated from .productbrain/skills/*.md -->
|
|
392
|
+
|
|
393
|
+
# Product Brain Skills for Codex
|
|
394
|
+
|
|
395
|
+
No Product Brain skills are currently projected for Codex in this repo.
|
|
396
|
+
`;
|
|
397
|
+
}
|
|
398
|
+
const blocks = primarySkills.map((skill) => {
|
|
399
|
+
const triggerText = skill.triggers.length > 0
|
|
400
|
+
? `Triggers: ${skill.triggers.map((t) => `\`${t}\``).join(', ')}`
|
|
401
|
+
: 'Triggers: none declared';
|
|
402
|
+
return `## ${skill.name}
|
|
403
|
+
|
|
404
|
+
${skill.description}
|
|
405
|
+
|
|
406
|
+
${triggerText}
|
|
407
|
+
|
|
408
|
+
Read: \`.codex/skills/${skill.name}.md\``;
|
|
409
|
+
});
|
|
410
|
+
return `<!-- ${MARKER} — source: generated from .productbrain/skills/*.md -->
|
|
411
|
+
|
|
412
|
+
# Product Brain Skills for Codex
|
|
413
|
+
|
|
414
|
+
When the task matches one of these workflows, read the linked skill file first and follow its protocol.
|
|
415
|
+
Maintenance companions like \`*-learnings\` and \`LEARNINGS-TEMPLATE\` are still projected on disk, but hidden from this index so the primary workflows stay easy to scan.
|
|
416
|
+
|
|
417
|
+
${blocks.join('\n\n')}`;
|
|
418
|
+
}
|
|
419
|
+
const CODEX_DEAD_REFERENCE_PATTERNS = [
|
|
420
|
+
{ pattern: /\bpb\s+(session|orient|get|capture|search|update|handshake|context|constellation)\b/, label: 'pb CLI command' },
|
|
421
|
+
{ pattern: /\bsub-agent\b/i, label: 'sub-agent reference' },
|
|
422
|
+
{ pattern: /\bAgent\s+tool\b/, label: 'Agent tool reference' },
|
|
423
|
+
{ pattern: /\bmcpCall\b/, label: 'mcpCall reference' },
|
|
424
|
+
{ pattern: /\bpb\s+session\s+(start|close)\b/, label: 'pb session lifecycle' },
|
|
425
|
+
];
|
|
426
|
+
/**
|
|
427
|
+
* Validate Codex-projected skills for references to capabilities Codex cannot execute.
|
|
428
|
+
* Scans the transport-stripped body (so claude-only blocks don't false-positive).
|
|
429
|
+
*/
|
|
430
|
+
export function validateCodexSkills(skills) {
|
|
431
|
+
const warnings = [];
|
|
432
|
+
for (const skill of skills) {
|
|
433
|
+
const stripped = stripTransportSections(skill.body, 'codex');
|
|
434
|
+
const lines = stripped.split('\n');
|
|
435
|
+
for (const line of lines) {
|
|
436
|
+
for (const { pattern, label } of CODEX_DEAD_REFERENCE_PATTERNS) {
|
|
437
|
+
if (pattern.test(line)) {
|
|
438
|
+
warnings.push({
|
|
439
|
+
skillName: skill.name,
|
|
440
|
+
pattern: label,
|
|
441
|
+
line: line.trim().slice(0, 80),
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return warnings;
|
|
448
|
+
}
|
|
449
|
+
// ── Claude Code generators ────────────────────────────────────────────
|
|
450
|
+
/**
|
|
451
|
+
* Generate a Claude Code .md rule from a canonical rule.
|
|
452
|
+
* Claude Code expects: description, optional paths (array).
|
|
453
|
+
*/
|
|
454
|
+
export function generateClaudeRule(rule, profile) {
|
|
455
|
+
// Replace canonical paths with Claude Code paths in body
|
|
456
|
+
const body = rule.body
|
|
457
|
+
.replace(/\.productbrain\/rules\/(\S+)\.md/g, '.claude/rules/$1.md')
|
|
458
|
+
.replace(/\.productbrain\/skills\/(\S+)\.md/g, '.productbrain/skills/$1.md');
|
|
459
|
+
// Build frontmatter
|
|
460
|
+
const fmLines = ['---'];
|
|
461
|
+
fmLines.push(`description: "${rule.description.replace(/"/g, '\\"')}"`);
|
|
462
|
+
if (rule.scope) {
|
|
463
|
+
fmLines.push('paths:');
|
|
464
|
+
fmLines.push(` - "${rule.scope}"`);
|
|
465
|
+
}
|
|
466
|
+
fmLines.push('---');
|
|
467
|
+
return `${fmLines.join('\n')}
|
|
468
|
+
<!-- ${MARKER} — source: .productbrain/rules/${rule.name}.md -->
|
|
469
|
+
|
|
470
|
+
${body}`;
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Generate a Claude Code skill-router.md — imperative skill activation rule.
|
|
474
|
+
* Loaded automatically by Claude Code via .claude/rules/ with no paths (always active).
|
|
475
|
+
*/
|
|
476
|
+
export function generateClaudeSkillRouter(skills, profile) {
|
|
477
|
+
if (skills.length === 0)
|
|
478
|
+
return '';
|
|
479
|
+
const triggerBlocks = skills.map((skill) => {
|
|
480
|
+
const triggerList = skill.triggers.map((t) => `"${t}"`).join(' / ');
|
|
481
|
+
return `- User says ${triggerList}
|
|
482
|
+
→ READ \`.productbrain/skills/${skill.name}.md\` — follow its full protocol`;
|
|
483
|
+
});
|
|
484
|
+
return `---
|
|
485
|
+
description: "Skill activation router — MUST read skill file before responding when triggers match"
|
|
486
|
+
---
|
|
487
|
+
<!-- ${MARKER} — source: generated from .productbrain/skills/*.md -->
|
|
488
|
+
|
|
489
|
+
# Skill Router — Mandatory Activation
|
|
490
|
+
|
|
491
|
+
BEFORE responding to ANY user message, scan for these triggers.
|
|
492
|
+
If ANY trigger matches: READ the skill file FIRST, then follow its full protocol.
|
|
493
|
+
Do NOT respond with your own approach. The skill IS the approach.
|
|
494
|
+
|
|
495
|
+
## Triggers
|
|
496
|
+
|
|
497
|
+
${triggerBlocks.join('\n\n')}
|
|
498
|
+
|
|
499
|
+
## Why This Matters
|
|
500
|
+
|
|
501
|
+
Skipping the skill file produces a shallow response that misses governance, blast radius, and Chain context. This is the #1 quality failure in this workspace. The skill files encode the full protocol — including Chain checks, domain identification, and review gates — that a direct response will miss.
|
|
502
|
+
`;
|
|
503
|
+
}
|
|
504
|
+
//# sourceMappingURL=portable-knowledge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-knowledge.js","sourceRoot":"","sources":["../../src/generators/portable-knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-knowledge.test.d.ts","sourceRoot":"","sources":["../../src/generators/portable-knowledge.test.ts"],"names":[],"mappings":""}
|