@productbrain/cli 0.1.0-beta.7 → 0.1.0-beta.71
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 +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__/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-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.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 +21 -10
- 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 +61 -8
- 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 +151 -28
- 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 +25 -9
- 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 +6 -4
- 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 +203 -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/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/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 +670 -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 +62 -1
- 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 +42 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +109 -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/update-check.d.ts +21 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +144 -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 +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,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter file generators — thin pointers for each AI tool.
|
|
3
|
+
* Each function returns the file content as a string.
|
|
4
|
+
*/
|
|
5
|
+
const MARKER = 'auto-generated by pb handshake';
|
|
6
|
+
export { MARKER };
|
|
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) {
|
|
90
|
+
return `<!-- ${MARKER} — ${timestamp} -->
|
|
91
|
+
<!-- Re-run \`pb handshake\` to refresh. Do not edit manually. -->
|
|
92
|
+
|
|
93
|
+
# Product Brain Context
|
|
94
|
+
|
|
95
|
+
Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
|
|
96
|
+
Read \`.productbrain/briefing.md\` for entries matched to this repo.
|
|
97
|
+
|
|
98
|
+
## The Chain is the SSOT. Use \`pb\` before everything.
|
|
99
|
+
|
|
100
|
+
| Command | Purpose |
|
|
101
|
+
|---------|---------|
|
|
102
|
+
| \`pb orient -b\` | Current workspace focus |
|
|
103
|
+
| \`pb orient --task "<task>"\` | Task-shaped governance and context before implementation, review, or diagnosis |
|
|
104
|
+
| \`pb get <ID>\` | Full entry (BET, DEC, STD, BR, TEN, ARCH) |
|
|
105
|
+
| \`pb context <ID>\` | Constellation context for an entry |
|
|
106
|
+
| \`pb search <query>\` | Find entries across the Chain |
|
|
107
|
+
| \`pb handshake\` | Refresh these context files |
|
|
108
|
+
|
|
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.
|
|
111
|
+
|
|
112
|
+
## Session lifecycle — close the loop
|
|
113
|
+
|
|
114
|
+
Start every session with \`pb session start\`. This opens a tracked write session and refreshes context.
|
|
115
|
+
|
|
116
|
+
When you make a decision, discover a tension, or learn something during work:
|
|
117
|
+
\`\`\`
|
|
118
|
+
pb capture "TEN: description of the tension"
|
|
119
|
+
pb capture "DEC: decided X because Y"
|
|
120
|
+
pb capture "INS: learned that X"
|
|
121
|
+
\`\`\`
|
|
122
|
+
|
|
123
|
+
Close with \`pb session close\` — reviews what was captured, refreshes context for the next session.
|
|
124
|
+
|
|
125
|
+
All captures are drafts. The human reviews and commits in Product Brain Studio.
|
|
126
|
+
`;
|
|
127
|
+
}
|
|
128
|
+
export function generateCursorMdc(timestamp, profile) {
|
|
129
|
+
return `---
|
|
130
|
+
description: Product Brain Chain context — workspace knowledge for AI-assisted development
|
|
131
|
+
globs:
|
|
132
|
+
alwaysApply: true
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
# Product Brain Context
|
|
136
|
+
|
|
137
|
+
Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
|
|
138
|
+
Read \`.productbrain/briefing.md\` for entries matched to this repo.
|
|
139
|
+
|
|
140
|
+
## The Chain is the SSOT. Use \`pb\` before everything.
|
|
141
|
+
|
|
142
|
+
- \`pb orient -b\` — Current workspace focus
|
|
143
|
+
- \`pb orient --task "<task>"\` — Task-shaped governance and context before implementation, review, or diagnosis
|
|
144
|
+
- \`pb get <ID>\` — Full entry (BET, DEC, STD, BR, TEN, ARCH)
|
|
145
|
+
- \`pb context <ID>\` — Constellation context for an entry
|
|
146
|
+
- \`pb search <query>\` — Find entries across the Chain
|
|
147
|
+
- \`pb handshake\` — Refresh these context files
|
|
148
|
+
|
|
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.
|
|
151
|
+
|
|
152
|
+
## Session lifecycle — close the loop
|
|
153
|
+
|
|
154
|
+
Start with \`pb session start\`. When you make a decision, discover a tension, or learn something:
|
|
155
|
+
- \`pb capture "TEN: description"\` — capture a tension
|
|
156
|
+
- \`pb capture "DEC: decided X because Y"\` — capture a decision
|
|
157
|
+
- \`pb capture "INS: learned that X"\` — capture an insight
|
|
158
|
+
Close with \`pb session close\`. All captures are drafts — human reviews and commits.
|
|
159
|
+
|
|
160
|
+
<!-- ${MARKER} — ${timestamp} -->
|
|
161
|
+
`;
|
|
162
|
+
}
|
|
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} -->
|
|
188
|
+
<!-- Re-run \`pb handshake\` to refresh. Do not edit manually. -->
|
|
189
|
+
|
|
190
|
+
# Product Brain Context
|
|
191
|
+
|
|
192
|
+
Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
|
|
193
|
+
Read \`.productbrain/briefing.md\` for entries matched to this repo.
|
|
194
|
+
${workspaceSection}
|
|
195
|
+
## The Chain is the SSOT. Use \`pb\` before everything.
|
|
196
|
+
|
|
197
|
+
- \`pb orient -b\` — Current workspace focus
|
|
198
|
+
- \`pb orient --task "<task>"\` — Task-shaped governance and context before implementation, review, or diagnosis
|
|
199
|
+
- \`pb get <ID>\` — Full entry (BET, DEC, STD, BR, TEN, ARCH)
|
|
200
|
+
- \`pb context <ID>\` — Constellation context for an entry
|
|
201
|
+
- \`pb search <query>\` — Find entries across the Chain
|
|
202
|
+
- \`pb handshake\` — Refresh these context files
|
|
203
|
+
|
|
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.
|
|
206
|
+
|
|
207
|
+
## Session lifecycle — close the loop
|
|
208
|
+
|
|
209
|
+
Start with \`pb session start\`. Capture knowledge during work with \`pb capture "text"\`.
|
|
210
|
+
Close with \`pb session close\`. All captures are drafts — human reviews and commits.
|
|
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;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
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 { existsSync, readFileSync } from 'fs';
|
|
12
|
+
import { join, dirname } from 'path';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
// ── Path resolution ───────────────────────────────────────────────────
|
|
15
|
+
/** Resolved archetypes template directory (relative to this module).
|
|
16
|
+
* From dist/generators/archetypes.js → ../../templates/archetypes/
|
|
17
|
+
*/
|
|
18
|
+
const TEMPLATES_DIR = (() => {
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
+
const __dirname = dirname(__filename);
|
|
21
|
+
return join(__dirname, '..', '..', 'templates', 'archetypes');
|
|
22
|
+
})();
|
|
23
|
+
function parseArchetypeFrontmatter(raw) {
|
|
24
|
+
const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
25
|
+
if (!match)
|
|
26
|
+
return { fields: {}, body: raw };
|
|
27
|
+
const yaml = match[1];
|
|
28
|
+
const body = match[2] ?? '';
|
|
29
|
+
const fields = {};
|
|
30
|
+
for (const line of yaml.split('\n')) {
|
|
31
|
+
const kv = line.match(/^([\w-]+):\s*(.*)/);
|
|
32
|
+
if (kv) {
|
|
33
|
+
fields[kv[1]] = kv[2].trim().replace(/^["']|["']$/g, '');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { fields, body };
|
|
37
|
+
}
|
|
38
|
+
// ── Loader ────────────────────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* Load the archetype template for a governance function.
|
|
41
|
+
* Returns null if the function is 'unclassified' or no template file exists.
|
|
42
|
+
*/
|
|
43
|
+
export function loadArchetype(functionKey) {
|
|
44
|
+
if (functionKey === 'unclassified')
|
|
45
|
+
return null;
|
|
46
|
+
const filePath = join(TEMPLATES_DIR, `${functionKey}.md`);
|
|
47
|
+
if (!existsSync(filePath))
|
|
48
|
+
return null;
|
|
49
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
50
|
+
const { fields, body } = parseArchetypeFrontmatter(raw);
|
|
51
|
+
return {
|
|
52
|
+
functionKey,
|
|
53
|
+
name: fields['name'] ?? functionKey,
|
|
54
|
+
description: fields['description'] ?? '',
|
|
55
|
+
autoApply: fields['autoApply'] === 'true',
|
|
56
|
+
level: fields['level'] ?? 'core',
|
|
57
|
+
body,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ── Slot resolution ───────────────────────────────────────────────────
|
|
61
|
+
/** Replace all {{slot}} placeholders in a string. */
|
|
62
|
+
function resolveSlots(text, slots) {
|
|
63
|
+
return text.replace(/\{\{(\w+)\}\}/g, (_match, key) => slots[key] ?? _match);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build the *_summary slot value for a given function key.
|
|
67
|
+
* Lists up to 5 entry names then "and N more".
|
|
68
|
+
*/
|
|
69
|
+
function buildSummary(entries) {
|
|
70
|
+
if (entries.length === 0)
|
|
71
|
+
return '(none)';
|
|
72
|
+
const MAX_LISTED = 5;
|
|
73
|
+
const names = entries.map((e) => e.name);
|
|
74
|
+
const listed = names.slice(0, MAX_LISTED);
|
|
75
|
+
const remaining = names.length - MAX_LISTED;
|
|
76
|
+
const lines = listed.map((n) => `- ${n}`);
|
|
77
|
+
if (remaining > 0) {
|
|
78
|
+
lines.push(`- ...and ${remaining} more`);
|
|
79
|
+
}
|
|
80
|
+
return lines.join('\n');
|
|
81
|
+
}
|
|
82
|
+
/** Map function key to its summary slot name. */
|
|
83
|
+
function summarySlotName(functionKey) {
|
|
84
|
+
const map = {
|
|
85
|
+
constraint: 'constraint_summary',
|
|
86
|
+
boundary: 'boundary_summary',
|
|
87
|
+
convention: 'convention_summary',
|
|
88
|
+
policy: 'policy_summary',
|
|
89
|
+
workflow: 'workflow_summary',
|
|
90
|
+
'quality-gate': 'quality_summary',
|
|
91
|
+
};
|
|
92
|
+
return map[functionKey] ?? `${functionKey}_summary`;
|
|
93
|
+
}
|
|
94
|
+
// ── Resolver ──────────────────────────────────────────────────────────
|
|
95
|
+
/**
|
|
96
|
+
* Resolve an archetype's slots using classified governance entries.
|
|
97
|
+
*
|
|
98
|
+
* Returns a discriminated result:
|
|
99
|
+
* - `{ resolved: ResolvedArchetype }` on success
|
|
100
|
+
* - `{ skipped: ArchetypeSkipReason }` when the archetype cannot be produced
|
|
101
|
+
*/
|
|
102
|
+
export function resolveArchetype(functionKey, classified, manualRuleNames) {
|
|
103
|
+
const template = loadArchetype(functionKey);
|
|
104
|
+
if (!template)
|
|
105
|
+
return { skipped: 'no-template' };
|
|
106
|
+
// Manual rule suppression: if a manual rule with this name exists, skip
|
|
107
|
+
if (manualRuleNames.has(template.name))
|
|
108
|
+
return { skipped: 'manual-suppression' };
|
|
109
|
+
// Filter to entries matching this function
|
|
110
|
+
const matching = classified.filter((e) => e.governanceFunction === functionKey);
|
|
111
|
+
if (matching.length === 0)
|
|
112
|
+
return { skipped: 'zero-entries' };
|
|
113
|
+
// Build slot values
|
|
114
|
+
const entryIds = matching.map((e) => e.entryId).join(', ');
|
|
115
|
+
const entryNames = matching.map((e) => e.name).join(', ');
|
|
116
|
+
const entryCount = String(matching.length);
|
|
117
|
+
const summary = buildSummary(matching);
|
|
118
|
+
const summarySlot = summarySlotName(functionKey);
|
|
119
|
+
const slots = {
|
|
120
|
+
entry_ids: entryIds,
|
|
121
|
+
entry_names: entryNames,
|
|
122
|
+
entry_count: entryCount,
|
|
123
|
+
// Populate all summary slots — only the relevant one gets the real summary;
|
|
124
|
+
// others get empty string so stale placeholders resolve to blank, not wrong data.
|
|
125
|
+
constraint_summary: '',
|
|
126
|
+
boundary_summary: '',
|
|
127
|
+
convention_summary: '',
|
|
128
|
+
policy_summary: '',
|
|
129
|
+
workflow_summary: '',
|
|
130
|
+
quality_summary: '',
|
|
131
|
+
[summarySlot]: summary,
|
|
132
|
+
};
|
|
133
|
+
const resolvedDescription = resolveSlots(template.description, slots);
|
|
134
|
+
const resolvedBody = resolveSlots(template.body, slots);
|
|
135
|
+
const rule = {
|
|
136
|
+
name: template.name,
|
|
137
|
+
description: resolvedDescription,
|
|
138
|
+
autoApply: template.autoApply,
|
|
139
|
+
level: template.level,
|
|
140
|
+
body: resolvedBody,
|
|
141
|
+
sourcePath: `chain://${functionKey}`,
|
|
142
|
+
scope: undefined,
|
|
143
|
+
targets: undefined,
|
|
144
|
+
};
|
|
145
|
+
return {
|
|
146
|
+
resolved: {
|
|
147
|
+
rule,
|
|
148
|
+
functionKey,
|
|
149
|
+
resolvedEntryIds: matching.map((e) => e.entryId),
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=archetypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../src/generators/archetypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.test.d.ts","sourceRoot":"","sources":["../../src/generators/archetypes.test.ts"],"names":[],"mappings":""}
|