@productbrain/cli 0.1.0-beta.20 → 0.1.0-beta.2065
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 +72 -172
- 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 +470 -0
- package/dist/__tests__/adapters.test.js.map +1 -0
- package/dist/__tests__/audit.test.js +65 -44
- package/dist/__tests__/audit.test.js.map +1 -1
- package/dist/__tests__/authority-domains-queue.test.d.ts +2 -0
- package/dist/__tests__/authority-domains-queue.test.d.ts.map +1 -0
- package/dist/__tests__/authority-domains-queue.test.js +169 -0
- package/dist/__tests__/authority-domains-queue.test.js.map +1 -0
- package/dist/__tests__/authority-domains.test.d.ts +2 -0
- package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
- package/dist/__tests__/authority-domains.test.js +48 -0
- package/dist/__tests__/authority-domains.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__/canonicalRefs.vocab.test.d.ts +2 -0
- package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
- package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
- package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
- package/dist/__tests__/capture-receipt-coaching.test.d.ts +2 -0
- package/dist/__tests__/capture-receipt-coaching.test.d.ts.map +1 -0
- package/dist/__tests__/capture-receipt-coaching.test.js +89 -0
- package/dist/__tests__/capture-receipt-coaching.test.js.map +1 -0
- package/dist/__tests__/capture-receipt-domain.test.d.ts +2 -0
- package/dist/__tests__/capture-receipt-domain.test.d.ts.map +1 -0
- package/dist/__tests__/capture-receipt-domain.test.js +29 -0
- package/dist/__tests__/capture-receipt-domain.test.js.map +1 -0
- package/dist/__tests__/capture.test.js +653 -40
- package/dist/__tests__/capture.test.js.map +1 -1
- package/dist/__tests__/coaching-mirror-drift.test.d.ts +2 -0
- package/dist/__tests__/coaching-mirror-drift.test.d.ts.map +1 -0
- package/dist/__tests__/coaching-mirror-drift.test.js +47 -0
- package/dist/__tests__/coaching-mirror-drift.test.js.map +1 -0
- package/dist/__tests__/codex-prep-parity.test.d.ts +2 -0
- package/dist/__tests__/codex-prep-parity.test.d.ts.map +1 -0
- package/dist/__tests__/codex-prep-parity.test.js +107 -0
- package/dist/__tests__/codex-prep-parity.test.js.map +1 -0
- package/dist/__tests__/config-prod-fallthrough.test.d.ts +2 -0
- package/dist/__tests__/config-prod-fallthrough.test.d.ts.map +1 -0
- package/dist/__tests__/config-prod-fallthrough.test.js +82 -0
- package/dist/__tests__/config-prod-fallthrough.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 +566 -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 +146 -0
- package/dist/__tests__/constants.test.js.map +1 -0
- package/dist/__tests__/constellation.test.js +16 -22
- package/dist/__tests__/constellation.test.js.map +1 -1
- package/dist/__tests__/context-strategy.test.js +8 -8
- package/dist/__tests__/context-strategy.test.js.map +1 -1
- package/dist/__tests__/conversation.test.d.ts +2 -0
- package/dist/__tests__/conversation.test.d.ts.map +1 -0
- package/dist/__tests__/conversation.test.js +113 -0
- package/dist/__tests__/conversation.test.js.map +1 -0
- package/dist/__tests__/envelope-contract.test.d.ts +15 -0
- package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
- package/dist/__tests__/envelope-contract.test.js +152 -0
- package/dist/__tests__/envelope-contract.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 +125 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/experiment.test.d.ts +6 -0
- package/dist/__tests__/experiment.test.d.ts.map +1 -0
- package/dist/__tests__/experiment.test.js +69 -0
- package/dist/__tests__/experiment.test.js.map +1 -0
- package/dist/__tests__/fields.test.js +36 -36
- package/dist/__tests__/fields.test.js.map +1 -1
- package/dist/__tests__/glossary.test.d.ts +2 -0
- package/dist/__tests__/glossary.test.d.ts.map +1 -0
- package/dist/__tests__/glossary.test.js +32 -0
- package/dist/__tests__/glossary.test.js.map +1 -0
- package/dist/__tests__/handshake-augment.test.d.ts +2 -0
- package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-augment.test.js +424 -0
- package/dist/__tests__/handshake-augment.test.js.map +1 -0
- package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
- package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-dormancy.test.js +207 -0
- package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
- package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
- package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-formatter.test.js +67 -0
- package/dist/__tests__/handshake-formatter.test.js.map +1 -0
- package/dist/__tests__/handshake-preview.test.d.ts +2 -0
- package/dist/__tests__/handshake-preview.test.d.ts.map +1 -0
- package/dist/__tests__/handshake-preview.test.js +950 -0
- package/dist/__tests__/handshake-preview.test.js.map +1 -0
- package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
- package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/handshake.e2e.test.js +1255 -0
- package/dist/__tests__/handshake.e2e.test.js.map +1 -0
- package/dist/__tests__/handshake.test.js +796 -19
- package/dist/__tests__/handshake.test.js.map +1 -1
- package/dist/__tests__/hook-intents.test.d.ts +2 -0
- package/dist/__tests__/hook-intents.test.d.ts.map +1 -0
- package/dist/__tests__/hook-intents.test.js +184 -0
- package/dist/__tests__/hook-intents.test.js.map +1 -0
- package/dist/__tests__/ingest.test.js +37 -28
- package/dist/__tests__/ingest.test.js.map +1 -1
- package/dist/__tests__/init.test.d.ts +7 -0
- package/dist/__tests__/init.test.d.ts.map +1 -0
- package/dist/__tests__/init.test.js +146 -0
- package/dist/__tests__/init.test.js.map +1 -0
- package/dist/__tests__/login.test.d.ts +2 -0
- package/dist/__tests__/login.test.d.ts.map +1 -0
- package/dist/__tests__/login.test.js +167 -0
- package/dist/__tests__/login.test.js.map +1 -0
- package/dist/__tests__/manifest.test.d.ts +6 -0
- package/dist/__tests__/manifest.test.d.ts.map +1 -0
- package/dist/__tests__/manifest.test.js +255 -0
- package/dist/__tests__/manifest.test.js.map +1 -0
- package/dist/__tests__/method-publish-coherency.test.d.ts +9 -0
- package/dist/__tests__/method-publish-coherency.test.d.ts.map +1 -0
- package/dist/__tests__/method-publish-coherency.test.js +71 -0
- package/dist/__tests__/method-publish-coherency.test.js.map +1 -0
- package/dist/__tests__/method-registry.integration.test.d.ts +6 -0
- package/dist/__tests__/method-registry.integration.test.d.ts.map +1 -0
- package/dist/__tests__/method-registry.integration.test.js +18 -0
- package/dist/__tests__/method-registry.integration.test.js.map +1 -0
- package/dist/__tests__/method-registry.test.d.ts +14 -0
- package/dist/__tests__/method-registry.test.d.ts.map +1 -0
- package/dist/__tests__/method-registry.test.js +134 -0
- package/dist/__tests__/method-registry.test.js.map +1 -0
- package/dist/__tests__/notice-marker.test.d.ts +2 -0
- package/dist/__tests__/notice-marker.test.d.ts.map +1 -0
- package/dist/__tests__/notice-marker.test.js +41 -0
- package/dist/__tests__/notice-marker.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.js +325 -11
- package/dist/__tests__/orient.test.js.map +1 -1
- package/dist/__tests__/perimeter.test.d.ts +2 -0
- package/dist/__tests__/perimeter.test.d.ts.map +1 -0
- package/dist/__tests__/perimeter.test.js +165 -0
- package/dist/__tests__/perimeter.test.js.map +1 -0
- package/dist/__tests__/personal-layer.test.d.ts +11 -0
- package/dist/__tests__/personal-layer.test.d.ts.map +1 -0
- package/dist/__tests__/personal-layer.test.js +268 -0
- package/dist/__tests__/personal-layer.test.js.map +1 -0
- package/dist/__tests__/preview-key-refresh.test.d.ts +2 -0
- package/dist/__tests__/preview-key-refresh.test.d.ts.map +1 -0
- package/dist/__tests__/preview-key-refresh.test.js +126 -0
- package/dist/__tests__/preview-key-refresh.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 +320 -0
- package/dist/__tests__/profiles.test.js.map +1 -0
- package/dist/__tests__/promote-batch.test.d.ts +2 -0
- package/dist/__tests__/promote-batch.test.d.ts.map +1 -0
- package/dist/__tests__/promote-batch.test.js +185 -0
- package/dist/__tests__/promote-batch.test.js.map +1 -0
- package/dist/__tests__/promote.test.js +182 -37
- package/dist/__tests__/promote.test.js.map +1 -1
- 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__/proof-run.test.d.ts +2 -0
- package/dist/__tests__/proof-run.test.d.ts.map +1 -0
- package/dist/__tests__/proof-run.test.js +255 -0
- package/dist/__tests__/proof-run.test.js.map +1 -0
- package/dist/__tests__/proposals.test.js +24 -47
- package/dist/__tests__/proposals.test.js.map +1 -1
- package/dist/__tests__/relate.test.js +34 -36
- package/dist/__tests__/relate.test.js.map +1 -1
- package/dist/__tests__/runner.test.js +19 -15
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/__tests__/session-close-loop.test.d.ts +2 -0
- package/dist/__tests__/session-close-loop.test.d.ts.map +1 -0
- package/dist/__tests__/session-close-loop.test.js +231 -0
- package/dist/__tests__/session-close-loop.test.js.map +1 -0
- package/dist/__tests__/session-label.test.d.ts +2 -0
- package/dist/__tests__/session-label.test.d.ts.map +1 -0
- package/dist/__tests__/session-label.test.js +46 -0
- package/dist/__tests__/session-label.test.js.map +1 -0
- package/dist/__tests__/session-list-show.test.d.ts +2 -0
- package/dist/__tests__/session-list-show.test.d.ts.map +1 -0
- package/dist/__tests__/session-list-show.test.js +174 -0
- package/dist/__tests__/session-list-show.test.js.map +1 -0
- package/dist/__tests__/session-reset.test.d.ts +2 -0
- package/dist/__tests__/session-reset.test.d.ts.map +1 -0
- package/dist/__tests__/session-reset.test.js +138 -0
- package/dist/__tests__/session-reset.test.js.map +1 -0
- package/dist/__tests__/session-resume-backstop.test.d.ts +2 -0
- package/dist/__tests__/session-resume-backstop.test.d.ts.map +1 -0
- package/dist/__tests__/session-resume-backstop.test.js +99 -0
- package/dist/__tests__/session-resume-backstop.test.js.map +1 -0
- package/dist/__tests__/session-start-key-refresh.test.d.ts +2 -0
- package/dist/__tests__/session-start-key-refresh.test.d.ts.map +1 -0
- package/dist/__tests__/session-start-key-refresh.test.js +179 -0
- package/dist/__tests__/session-start-key-refresh.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 +379 -0
- package/dist/__tests__/session-state-machine.test.js.map +1 -0
- package/dist/__tests__/session-switch.test.d.ts +2 -0
- package/dist/__tests__/session-switch.test.d.ts.map +1 -0
- package/dist/__tests__/session-switch.test.js +132 -0
- package/dist/__tests__/session-switch.test.js.map +1 -0
- package/dist/__tests__/session-touch.test.js +11 -11
- package/dist/__tests__/session-touch.test.js.map +1 -1
- package/dist/__tests__/session.test.js +4 -10
- package/dist/__tests__/session.test.js.map +1 -1
- package/dist/__tests__/setup-ingest.test.d.ts +2 -0
- package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
- package/dist/__tests__/setup-ingest.test.js +71 -0
- package/dist/__tests__/setup-ingest.test.js.map +1 -0
- package/dist/__tests__/setup-resolver.test.d.ts +14 -0
- package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/setup-resolver.test.js +228 -0
- package/dist/__tests__/setup-resolver.test.js.map +1 -0
- package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
- package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
- package/dist/__tests__/skill-vocabulary.test.js +192 -0
- package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
- package/dist/__tests__/spinner-labels.test.d.ts +2 -0
- package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
- package/dist/__tests__/spinner-labels.test.js +23 -0
- package/dist/__tests__/spinner-labels.test.js.map +1 -0
- package/dist/__tests__/state.test.d.ts +6 -0
- package/dist/__tests__/state.test.d.ts.map +1 -0
- package/dist/__tests__/state.test.js +97 -0
- package/dist/__tests__/state.test.js.map +1 -0
- package/dist/__tests__/surface-profiles.test.d.ts +2 -0
- package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
- package/dist/__tests__/surface-profiles.test.js +233 -0
- package/dist/__tests__/surface-profiles.test.js.map +1 -0
- package/dist/__tests__/surfaces.test.d.ts +2 -0
- package/dist/__tests__/surfaces.test.d.ts.map +1 -0
- package/dist/__tests__/surfaces.test.js +46 -0
- package/dist/__tests__/surfaces.test.js.map +1 -0
- package/dist/__tests__/update-check.test.d.ts +2 -0
- package/dist/__tests__/update-check.test.d.ts.map +1 -0
- package/dist/__tests__/update-check.test.js +215 -0
- package/dist/__tests__/update-check.test.js.map +1 -0
- package/dist/__tests__/update.test.js +88 -81
- package/dist/__tests__/update.test.js.map +1 -1
- package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
- package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
- package/dist/__tests__/upgrade-runner.test.js +54 -0
- package/dist/__tests__/upgrade-runner.test.js.map +1 -0
- package/dist/__tests__/upgrade.test.d.ts +2 -0
- package/dist/__tests__/upgrade.test.d.ts.map +1 -0
- package/dist/__tests__/upgrade.test.js +56 -0
- package/dist/__tests__/upgrade.test.js.map +1 -0
- package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
- package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
- package/dist/__tests__/vocabulary-leak.test.js +539 -0
- package/dist/__tests__/vocabulary-leak.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 +328 -0
- package/dist/__tests__/workspace.test.js.map +1 -0
- package/dist/__tests__/workspaceNotice.test.d.ts +2 -0
- package/dist/__tests__/workspaceNotice.test.d.ts.map +1 -0
- package/dist/__tests__/workspaceNotice.test.js +338 -0
- package/dist/__tests__/workspaceNotice.test.js.map +1 -0
- package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
- package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
- package/dist/commands/__tests__/connect-handoff.test.js +111 -0
- package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
- package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
- package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
- package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
- package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
- package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
- package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
- package/dist/commands/__tests__/setup-state.test.js +194 -0
- package/dist/commands/__tests__/setup-state.test.js.map +1 -0
- package/dist/commands/accept.d.ts.map +1 -1
- package/dist/commands/accept.js +10 -6
- package/dist/commands/accept.js.map +1 -1
- package/dist/commands/admin/cockpit.d.ts +90 -0
- package/dist/commands/admin/cockpit.d.ts.map +1 -0
- package/dist/commands/admin/cockpit.js +618 -0
- package/dist/commands/admin/cockpit.js.map +1 -0
- package/dist/commands/admin/index.d.ts +21 -0
- package/dist/commands/admin/index.d.ts.map +1 -0
- package/dist/commands/admin/index.js +256 -0
- package/dist/commands/admin/index.js.map +1 -0
- package/dist/commands/admin/inspect.d.ts +30 -0
- package/dist/commands/admin/inspect.d.ts.map +1 -0
- package/dist/commands/admin/inspect.js +555 -0
- package/dist/commands/admin/inspect.js.map +1 -0
- package/dist/commands/admin/inspect.test.d.ts +7 -0
- package/dist/commands/admin/inspect.test.d.ts.map +1 -0
- package/dist/commands/admin/inspect.test.js +90 -0
- package/dist/commands/admin/inspect.test.js.map +1 -0
- package/dist/commands/admin/manage.d.ts +8 -0
- package/dist/commands/admin/manage.d.ts.map +1 -0
- package/dist/commands/admin/manage.js +260 -0
- package/dist/commands/admin/manage.js.map +1 -0
- package/dist/commands/admin/manage.test.d.ts +16 -0
- package/dist/commands/admin/manage.test.d.ts.map +1 -0
- package/dist/commands/admin/manage.test.js +159 -0
- package/dist/commands/admin/manage.test.js.map +1 -0
- package/dist/commands/admin/seed.d.ts +75 -0
- package/dist/commands/admin/seed.d.ts.map +1 -0
- package/dist/commands/admin/seed.js +944 -0
- package/dist/commands/admin/seed.js.map +1 -0
- package/dist/commands/admin/seed.test.d.ts +11 -0
- package/dist/commands/admin/seed.test.d.ts.map +1 -0
- package/dist/commands/admin/seed.test.js +127 -0
- package/dist/commands/admin/seed.test.js.map +1 -0
- package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
- package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
- package/dist/commands/admin/seedRegistryEntries.generated.js +144 -0
- package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
- package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
- package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
- package/dist/commands/admin/seedRegistryEntries.test.js +70 -0
- package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +42 -7
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/authority-domains.d.ts +157 -0
- package/dist/commands/authority-domains.d.ts.map +1 -0
- package/dist/commands/authority-domains.js +356 -0
- package/dist/commands/authority-domains.js.map +1 -0
- package/dist/commands/brief.d.ts.map +1 -1
- package/dist/commands/brief.js +10 -5
- package/dist/commands/brief.js.map +1 -1
- package/dist/commands/capture.d.ts +9 -0
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +316 -57
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/chain-walk.d.ts.map +1 -1
- package/dist/commands/chain-walk.js +8 -3
- package/dist/commands/chain-walk.js.map +1 -1
- package/dist/commands/changes.d.ts.map +1 -1
- package/dist/commands/changes.js +8 -3
- package/dist/commands/changes.js.map +1 -1
- package/dist/commands/codex-prep.d.ts +12 -1
- package/dist/commands/codex-prep.d.ts.map +1 -1
- package/dist/commands/codex-prep.js +25 -87
- package/dist/commands/codex-prep.js.map +1 -1
- 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-config.test.d.ts +2 -0
- package/dist/commands/connect-config.test.d.ts.map +1 -0
- package/dist/commands/connect-config.test.js +44 -0
- package/dist/commands/connect-config.test.js.map +1 -0
- package/dist/commands/connect-context.d.ts +45 -0
- package/dist/commands/connect-context.d.ts.map +1 -0
- package/dist/commands/connect-context.js +83 -0
- package/dist/commands/connect-context.js.map +1 -0
- package/dist/commands/connect-context.test.d.ts +2 -0
- package/dist/commands/connect-context.test.d.ts.map +1 -0
- package/dist/commands/connect-context.test.js +158 -0
- package/dist/commands/connect-context.test.js.map +1 -0
- package/dist/commands/connect-handoff.d.ts +51 -0
- package/dist/commands/connect-handoff.d.ts.map +1 -0
- package/dist/commands/connect-handoff.js +70 -0
- package/dist/commands/connect-handoff.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 +219 -0
- package/dist/commands/connect-integration.test.js.map +1 -0
- package/dist/commands/connect-screens.d.ts +33 -0
- package/dist/commands/connect-screens.d.ts.map +1 -0
- package/dist/commands/connect-screens.js +124 -0
- package/dist/commands/connect-screens.js.map +1 -0
- package/dist/commands/connect.d.ts +42 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +339 -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 +380 -0
- package/dist/commands/connect.test.js.map +1 -0
- package/dist/commands/constellation.d.ts.map +1 -1
- package/dist/commands/constellation.js +8 -3
- package/dist/commands/constellation.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +8 -3
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/cross-cut.js +2 -2
- package/dist/commands/cross-cut.js.map +1 -1
- package/dist/commands/doctor.d.ts +18 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +297 -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 +461 -0
- package/dist/commands/doctor.test.js.map +1 -0
- package/dist/commands/fields.d.ts.map +1 -1
- package/dist/commands/fields.js +8 -4
- package/dist/commands/fields.js.map +1 -1
- package/dist/commands/files.d.ts +26 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +160 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/files.test.d.ts +2 -0
- package/dist/commands/files.test.d.ts.map +1 -0
- package/dist/commands/files.test.js +243 -0
- package/dist/commands/files.test.js.map +1 -0
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +14 -6
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/handshake.d.ts +227 -2
- package/dist/commands/handshake.d.ts.map +1 -1
- package/dist/commands/handshake.js +2226 -85
- package/dist/commands/handshake.js.map +1 -1
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +26 -9
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +109 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +101 -38
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/method.d.ts +99 -0
- package/dist/commands/method.d.ts.map +1 -0
- package/dist/commands/method.js +804 -0
- package/dist/commands/method.js.map +1 -0
- package/dist/commands/migrate-setup.d.ts +18 -0
- package/dist/commands/migrate-setup.d.ts.map +1 -0
- package/dist/commands/migrate-setup.js +148 -0
- package/dist/commands/migrate-setup.js.map +1 -0
- package/dist/commands/orient.d.ts +113 -2
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +162 -7
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/profile.d.ts +34 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +170 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/promote.d.ts +12 -1
- package/dist/commands/promote.d.ts.map +1 -1
- package/dist/commands/promote.js +198 -54
- package/dist/commands/promote.js.map +1 -1
- package/dist/commands/proof-run.d.ts +51 -0
- package/dist/commands/proof-run.d.ts.map +1 -0
- package/dist/commands/proof-run.js +209 -0
- package/dist/commands/proof-run.js.map +1 -0
- package/dist/commands/proposals.js +2 -2
- package/dist/commands/proposals.js.map +1 -1
- package/dist/commands/reject.d.ts.map +1 -1
- package/dist/commands/reject.js +14 -7
- package/dist/commands/reject.js.map +1 -1
- package/dist/commands/relate.d.ts.map +1 -1
- package/dist/commands/relate.js +55 -17
- package/dist/commands/relate.js.map +1 -1
- package/dist/commands/scoreboard.d.ts +28 -0
- package/dist/commands/scoreboard.d.ts.map +1 -0
- package/dist/commands/scoreboard.js +40 -0
- package/dist/commands/scoreboard.js.map +1 -0
- package/dist/commands/search.js +2 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session.d.ts +55 -2
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +477 -45
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/setup-audit.d.ts +59 -0
- package/dist/commands/setup-audit.d.ts.map +1 -0
- package/dist/commands/setup-audit.js +250 -0
- package/dist/commands/setup-audit.js.map +1 -0
- package/dist/commands/setup-detect-surfaces.d.ts +38 -0
- package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
- package/dist/commands/setup-detect-surfaces.js +76 -0
- package/dist/commands/setup-detect-surfaces.js.map +1 -0
- package/dist/commands/setup-ingest.d.ts +17 -0
- package/dist/commands/setup-ingest.d.ts.map +1 -0
- package/dist/commands/setup-ingest.js +174 -0
- package/dist/commands/setup-ingest.js.map +1 -0
- package/dist/commands/setup-resolver.d.ts +58 -0
- package/dist/commands/setup-resolver.d.ts.map +1 -0
- package/dist/commands/setup-resolver.js +150 -0
- package/dist/commands/setup-resolver.js.map +1 -0
- package/dist/commands/setup-state.d.ts +42 -0
- package/dist/commands/setup-state.d.ts.map +1 -0
- package/dist/commands/setup-state.js +93 -0
- package/dist/commands/setup-state.js.map +1 -0
- package/dist/commands/setup.d.ts +23 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +69 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +71 -49
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upgrade.d.ts +5 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +110 -0
- package/dist/commands/upgrade.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.map +1 -1
- package/dist/commands/verify.js +14 -7
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/welcome.d.ts +21 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +50 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/commands/whoami.d.ts +12 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +70 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/commands/whoami.test.d.ts +2 -0
- package/dist/commands/whoami.test.d.ts.map +1 -0
- package/dist/commands/whoami.test.js +50 -0
- package/dist/commands/whoami.test.js.map +1 -0
- package/dist/commands/workspace.d.ts +113 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +263 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/formatters/__tests__/orient-provenance.test.d.ts +7 -0
- package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
- package/dist/formatters/__tests__/orient-provenance.test.js +493 -0
- package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
- package/dist/formatters/__tests__/session-list-show.test.d.ts +2 -0
- package/dist/formatters/__tests__/session-list-show.test.d.ts.map +1 -0
- package/dist/formatters/__tests__/session-list-show.test.js +159 -0
- package/dist/formatters/__tests__/session-list-show.test.js.map +1 -0
- package/dist/formatters/__tests__/session.test.d.ts +2 -0
- package/dist/formatters/__tests__/session.test.d.ts.map +1 -0
- package/dist/formatters/__tests__/session.test.js +113 -0
- package/dist/formatters/__tests__/session.test.js.map +1 -0
- package/dist/formatters/audit.d.ts +6 -0
- package/dist/formatters/audit.d.ts.map +1 -1
- package/dist/formatters/audit.js.map +1 -1
- package/dist/formatters/capture.d.ts +26 -0
- package/dist/formatters/capture.d.ts.map +1 -1
- package/dist/formatters/capture.js +27 -0
- package/dist/formatters/capture.js.map +1 -1
- package/dist/formatters/coaching.d.ts +51 -0
- package/dist/formatters/coaching.d.ts.map +1 -0
- package/dist/formatters/coaching.js +46 -0
- package/dist/formatters/coaching.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/entry.d.ts +30 -0
- package/dist/formatters/entry.d.ts.map +1 -1
- package/dist/formatters/entry.js +51 -5
- package/dist/formatters/entry.js.map +1 -1
- package/dist/formatters/handshake.d.ts +43 -0
- package/dist/formatters/handshake.d.ts.map +1 -1
- package/dist/formatters/handshake.js +141 -3
- package/dist/formatters/handshake.js.map +1 -1
- package/dist/formatters/orient.d.ts +190 -4
- package/dist/formatters/orient.d.ts.map +1 -1
- package/dist/formatters/orient.js +273 -22
- package/dist/formatters/orient.js.map +1 -1
- package/dist/formatters/orient.rcrtMiss.test.d.ts +2 -0
- package/dist/formatters/orient.rcrtMiss.test.d.ts.map +1 -0
- package/dist/formatters/orient.rcrtMiss.test.js +146 -0
- package/dist/formatters/orient.rcrtMiss.test.js.map +1 -0
- package/dist/formatters/promote.d.ts +6 -0
- package/dist/formatters/promote.d.ts.map +1 -1
- package/dist/formatters/promote.js +8 -0
- package/dist/formatters/promote.js.map +1 -1
- package/dist/formatters/relate.d.ts +2 -0
- package/dist/formatters/relate.d.ts.map +1 -1
- package/dist/formatters/relate.js +3 -0
- package/dist/formatters/relate.js.map +1 -1
- package/dist/formatters/scoreboard.d.ts +11 -0
- package/dist/formatters/scoreboard.d.ts.map +1 -0
- package/dist/formatters/scoreboard.js +48 -0
- package/dist/formatters/scoreboard.js.map +1 -0
- package/dist/formatters/session.d.ts +85 -2
- package/dist/formatters/session.d.ts.map +1 -1
- package/dist/formatters/session.js +241 -9
- package/dist/formatters/session.js.map +1 -1
- package/dist/formatters/update.d.ts +3 -0
- package/dist/formatters/update.d.ts.map +1 -1
- package/dist/formatters/update.js +4 -0
- package/dist/formatters/update.js.map +1 -1
- package/dist/generators/adapters.d.ts +70 -4
- package/dist/generators/adapters.d.ts.map +1 -1
- package/dist/generators/adapters.js +211 -11
- package/dist/generators/adapters.js.map +1 -1
- package/dist/generators/archetypes.d.ts +52 -0
- package/dist/generators/archetypes.d.ts.map +1 -0
- package/dist/generators/archetypes.js +190 -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 +272 -0
- package/dist/generators/archetypes.test.js.map +1 -0
- package/dist/generators/boundary-manifest.d.ts +29 -0
- package/dist/generators/boundary-manifest.d.ts.map +1 -0
- package/dist/generators/boundary-manifest.js +183 -0
- package/dist/generators/boundary-manifest.js.map +1 -0
- package/dist/generators/boundary-manifest.test.d.ts +2 -0
- package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
- package/dist/generators/boundary-manifest.test.js +91 -0
- package/dist/generators/boundary-manifest.test.js.map +1 -0
- package/dist/generators/chain-classifier.d.ts +63 -0
- package/dist/generators/chain-classifier.d.ts.map +1 -0
- package/dist/generators/chain-classifier.js +131 -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 +371 -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 +152 -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 +211 -0
- package/dist/generators/chain-rules.test.js.map +1 -0
- package/dist/generators/context-md.d.ts +1 -1
- package/dist/generators/context-md.d.ts.map +1 -1
- package/dist/generators/context-md.js +18 -7
- package/dist/generators/context-md.js.map +1 -1
- package/dist/generators/handshake-diff.d.ts +67 -0
- package/dist/generators/handshake-diff.d.ts.map +1 -0
- package/dist/generators/handshake-diff.js +183 -0
- package/dist/generators/handshake-diff.js.map +1 -0
- package/dist/generators/handshake-diff.test.d.ts +2 -0
- package/dist/generators/handshake-diff.test.d.ts.map +1 -0
- package/dist/generators/handshake-diff.test.js +264 -0
- package/dist/generators/handshake-diff.test.js.map +1 -0
- package/dist/generators/manifest.d.ts +115 -0
- package/dist/generators/manifest.d.ts.map +1 -0
- package/dist/generators/manifest.js +277 -0
- package/dist/generators/manifest.js.map +1 -0
- package/dist/generators/portable-knowledge.d.ts +46 -6
- package/dist/generators/portable-knowledge.d.ts.map +1 -1
- package/dist/generators/portable-knowledge.js +151 -8
- package/dist/generators/portable-knowledge.js.map +1 -1
- package/dist/generators/portable-knowledge.test.js +43 -0
- package/dist/generators/portable-knowledge.test.js.map +1 -1
- package/dist/generators/region-projections.d.ts +18 -0
- package/dist/generators/region-projections.d.ts.map +1 -0
- package/dist/generators/region-projections.js +49 -0
- package/dist/generators/region-projections.js.map +1 -0
- package/dist/generators/region-projections.test.d.ts +2 -0
- package/dist/generators/region-projections.test.d.ts.map +1 -0
- package/dist/generators/region-projections.test.js +63 -0
- package/dist/generators/region-projections.test.js.map +1 -0
- package/dist/generators/region.d.ts +24 -0
- package/dist/generators/region.d.ts.map +1 -0
- package/dist/generators/region.js +87 -0
- package/dist/generators/region.js.map +1 -0
- package/dist/generators/region.test.d.ts +2 -0
- package/dist/generators/region.test.d.ts.map +1 -0
- package/dist/generators/region.test.js +126 -0
- package/dist/generators/region.test.js.map +1 -0
- package/dist/generators/surface-profiles.d.ts +48 -0
- package/dist/generators/surface-profiles.d.ts.map +1 -0
- package/dist/generators/surface-profiles.js +98 -0
- package/dist/generators/surface-profiles.js.map +1 -0
- package/dist/index.js +811 -259
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/parseFields.test.d.ts +2 -0
- package/dist/lib/__tests__/parseFields.test.d.ts.map +1 -0
- package/dist/lib/__tests__/parseFields.test.js +19 -0
- package/dist/lib/__tests__/parseFields.test.js.map +1 -0
- 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/canonicalRefs.d.ts +141 -0
- package/dist/lib/canonicalRefs.d.ts.map +1 -0
- package/dist/lib/canonicalRefs.js +150 -0
- package/dist/lib/canonicalRefs.js.map +1 -0
- package/dist/lib/client.d.ts +33 -6
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +213 -42
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/collectionRegistry.d.ts +40 -0
- package/dist/lib/collectionRegistry.d.ts.map +1 -0
- package/dist/lib/collectionRegistry.js +112 -0
- package/dist/lib/collectionRegistry.js.map +1 -0
- package/dist/lib/compose-wrapup-view.d.ts +48 -0
- package/dist/lib/compose-wrapup-view.d.ts.map +1 -0
- package/dist/lib/compose-wrapup-view.js +37 -0
- package/dist/lib/compose-wrapup-view.js.map +1 -0
- package/dist/lib/config.d.ts +204 -4
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +594 -42
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/connectKeyLabel.d.ts +9 -0
- package/dist/lib/connectKeyLabel.d.ts.map +1 -0
- package/dist/lib/connectKeyLabel.js +12 -0
- package/dist/lib/connectKeyLabel.js.map +1 -0
- package/dist/lib/constants.d.ts +46 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +83 -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/conversation.d.ts +36 -0
- package/dist/lib/conversation.d.ts.map +1 -0
- package/dist/lib/conversation.js +66 -0
- package/dist/lib/conversation.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 +96 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +105 -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/frontmatter.d.ts +55 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js +92 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/frontmatter.test.d.ts +15 -0
- package/dist/lib/frontmatter.test.d.ts.map +1 -0
- package/dist/lib/frontmatter.test.js +98 -0
- package/dist/lib/frontmatter.test.js.map +1 -0
- package/dist/lib/glossary.d.ts +19 -0
- package/dist/lib/glossary.d.ts.map +1 -0
- package/dist/lib/glossary.js +53 -0
- package/dist/lib/glossary.js.map +1 -0
- package/dist/lib/hook-intents.d.ts +51 -0
- package/dist/lib/hook-intents.d.ts.map +1 -0
- package/dist/lib/hook-intents.js +85 -0
- package/dist/lib/hook-intents.js.map +1 -0
- package/dist/lib/inferSourceDate.d.ts +12 -0
- package/dist/lib/inferSourceDate.d.ts.map +1 -0
- package/dist/lib/inferSourceDate.js +44 -0
- package/dist/lib/inferSourceDate.js.map +1 -0
- package/dist/lib/method-registry.d.ts +32 -0
- package/dist/lib/method-registry.d.ts.map +1 -0
- package/dist/lib/method-registry.js +53 -0
- package/dist/lib/method-registry.js.map +1 -0
- package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
- package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
- package/dist/lib/normalizeMaterializedFilename.js +56 -0
- package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
- package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
- package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
- package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
- package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
- package/dist/lib/notice-marker.d.ts +3 -0
- package/dist/lib/notice-marker.d.ts.map +1 -0
- package/dist/lib/notice-marker.js +53 -0
- package/dist/lib/notice-marker.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 +213 -0
- package/dist/lib/onboarding-path-b.js.map +1 -0
- package/dist/lib/onboarding-shared.d.ts +80 -0
- package/dist/lib/onboarding-shared.d.ts.map +1 -0
- package/dist/lib/onboarding-shared.js +174 -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/parseFields.d.ts +6 -0
- package/dist/lib/parseFields.d.ts.map +1 -0
- package/dist/lib/parseFields.js +30 -0
- package/dist/lib/parseFields.js.map +1 -0
- package/dist/lib/productbrain-files.d.ts +94 -0
- package/dist/lib/productbrain-files.d.ts.map +1 -0
- package/dist/lib/productbrain-files.js +213 -0
- package/dist/lib/productbrain-files.js.map +1 -0
- package/dist/lib/productbrain-files.test.d.ts +2 -0
- package/dist/lib/productbrain-files.test.d.ts.map +1 -0
- package/dist/lib/productbrain-files.test.js +239 -0
- package/dist/lib/productbrain-files.test.js.map +1 -0
- package/dist/lib/profiles.d.ts +41 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +188 -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/runner.d.ts +10 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +44 -7
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/session.d.ts +85 -4
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +276 -13
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/spinner.d.ts +27 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +76 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/spinner.test.d.ts +2 -0
- package/dist/lib/spinner.test.d.ts.map +1 -0
- package/dist/lib/spinner.test.js +39 -0
- package/dist/lib/spinner.test.js.map +1 -0
- package/dist/lib/startup-resolution-signals.d.ts +34 -0
- package/dist/lib/startup-resolution-signals.d.ts.map +1 -0
- package/dist/lib/startup-resolution-signals.js +118 -0
- package/dist/lib/startup-resolution-signals.js.map +1 -0
- package/dist/lib/startup-resolution-signals.test.d.ts +2 -0
- package/dist/lib/startup-resolution-signals.test.d.ts.map +1 -0
- package/dist/lib/startup-resolution-signals.test.js +113 -0
- package/dist/lib/startup-resolution-signals.test.js.map +1 -0
- package/dist/lib/state.d.ts +51 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +90 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/style.d.ts +96 -0
- package/dist/lib/style.d.ts.map +1 -0
- package/dist/lib/style.js +169 -0
- package/dist/lib/style.js.map +1 -0
- package/dist/lib/style.test.d.ts +7 -0
- package/dist/lib/style.test.d.ts.map +1 -0
- package/dist/lib/style.test.js +263 -0
- package/dist/lib/style.test.js.map +1 -0
- package/dist/lib/telemetry.d.ts +15 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +47 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/tokenConstants.d.ts +19 -0
- package/dist/lib/tokenConstants.d.ts.map +1 -0
- package/dist/lib/tokenConstants.js +19 -0
- package/dist/lib/tokenConstants.js.map +1 -0
- package/dist/lib/update-check.d.ts +56 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +296 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/upgrade-runner.d.ts +22 -0
- package/dist/lib/upgrade-runner.d.ts.map +1 -0
- package/dist/lib/upgrade-runner.js +110 -0
- package/dist/lib/upgrade-runner.js.map +1 -0
- package/dist/lib/wizard-surfaces.d.ts +47 -0
- package/dist/lib/wizard-surfaces.d.ts.map +1 -0
- package/dist/lib/wizard-surfaces.js +176 -0
- package/dist/lib/wizard-surfaces.js.map +1 -0
- package/dist/lib/wizard-surfaces.test.d.ts +2 -0
- package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
- package/dist/lib/wizard-surfaces.test.js +127 -0
- package/dist/lib/wizard-surfaces.test.js.map +1 -0
- package/dist/lib/wizard-trust.d.ts +31 -0
- package/dist/lib/wizard-trust.d.ts.map +1 -0
- package/dist/lib/wizard-trust.js +66 -0
- package/dist/lib/wizard-trust.js.map +1 -0
- package/dist/lib/wizard-trust.test.d.ts +2 -0
- package/dist/lib/wizard-trust.test.d.ts.map +1 -0
- package/dist/lib/wizard-trust.test.js +32 -0
- package/dist/lib/wizard-trust.test.js.map +1 -0
- package/dist/lib/workspace-probe.d.ts +19 -0
- package/dist/lib/workspace-probe.d.ts.map +1 -0
- package/dist/lib/workspace-probe.js +27 -0
- package/dist/lib/workspace-probe.js.map +1 -0
- package/dist/lib/workspaceNotice.d.ts +59 -0
- package/dist/lib/workspaceNotice.d.ts.map +1 -0
- package/dist/lib/workspaceNotice.js +77 -0
- package/dist/lib/workspaceNotice.js.map +1 -0
- package/dist/lib/workspaceVocabCache.d.ts +60 -0
- package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
- package/dist/lib/workspaceVocabCache.js +98 -0
- package/dist/lib/workspaceVocabCache.js.map +1 -0
- package/dist/scoreboard/diagnose.d.ts +189 -0
- package/dist/scoreboard/diagnose.d.ts.map +1 -0
- package/dist/scoreboard/diagnose.js +255 -0
- package/dist/scoreboard/diagnose.js.map +1 -0
- package/dist/scoreboard/diagnose.test.d.ts +12 -0
- package/dist/scoreboard/diagnose.test.d.ts.map +1 -0
- package/dist/scoreboard/diagnose.test.js +204 -0
- package/dist/scoreboard/diagnose.test.js.map +1 -0
- package/dist/scoreboard/localDrift.d.ts +23 -0
- package/dist/scoreboard/localDrift.d.ts.map +1 -0
- package/dist/scoreboard/localDrift.js +111 -0
- package/dist/scoreboard/localDrift.js.map +1 -0
- package/dist/scoreboard/localDrift.test.d.ts +9 -0
- package/dist/scoreboard/localDrift.test.d.ts.map +1 -0
- package/dist/scoreboard/localDrift.test.js +82 -0
- package/dist/scoreboard/localDrift.test.js.map +1 -0
- package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
- package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
- package/dist/setup/__tests__/coach-traces.test.js +189 -0
- package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
- package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
- package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
- package/dist/setup/__tests__/setup-commands.test.js +177 -0
- package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
- package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
- package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
- package/dist/setup/__tests__/state-machine.test.js +341 -0
- package/dist/setup/__tests__/state-machine.test.js.map +1 -0
- package/dist/setup/detect-surfaces.d.ts +21 -0
- package/dist/setup/detect-surfaces.d.ts.map +1 -0
- package/dist/setup/detect-surfaces.js +39 -0
- package/dist/setup/detect-surfaces.js.map +1 -0
- package/dist/setup/manifest-writer.d.ts +17 -0
- package/dist/setup/manifest-writer.d.ts.map +1 -0
- package/dist/setup/manifest-writer.js +153 -0
- package/dist/setup/manifest-writer.js.map +1 -0
- package/dist/setup/perimeter.d.ts +72 -0
- package/dist/setup/perimeter.d.ts.map +1 -0
- package/dist/setup/perimeter.js +128 -0
- package/dist/setup/perimeter.js.map +1 -0
- package/dist/setup/state-machine.d.ts +67 -0
- package/dist/setup/state-machine.d.ts.map +1 -0
- package/dist/setup/state-machine.js +124 -0
- package/dist/setup/state-machine.js.map +1 -0
- package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
- package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
- package/dist/surfaces/__tests__/adapter.test.js +90 -0
- package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
- package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
- package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
- package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
- package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
- package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
- package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
- package/dist/surfaces/__tests__/telemetry.test.js +55 -0
- package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
- package/dist/surfaces/adapter.d.ts +70 -0
- package/dist/surfaces/adapter.d.ts.map +1 -0
- package/dist/surfaces/adapter.js +2 -0
- package/dist/surfaces/adapter.js.map +1 -0
- package/dist/surfaces/adapters/claude.d.ts +3 -0
- package/dist/surfaces/adapters/claude.d.ts.map +1 -0
- package/dist/surfaces/adapters/claude.js +67 -0
- package/dist/surfaces/adapters/claude.js.map +1 -0
- package/dist/surfaces/adapters/codex.d.ts +3 -0
- package/dist/surfaces/adapters/codex.d.ts.map +1 -0
- package/dist/surfaces/adapters/codex.js +61 -0
- package/dist/surfaces/adapters/codex.js.map +1 -0
- package/dist/surfaces/adapters/copilot.d.ts +3 -0
- package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
- package/dist/surfaces/adapters/copilot.js +59 -0
- package/dist/surfaces/adapters/copilot.js.map +1 -0
- package/dist/surfaces/adapters/cursor.d.ts +3 -0
- package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
- package/dist/surfaces/adapters/cursor.js +78 -0
- package/dist/surfaces/adapters/cursor.js.map +1 -0
- package/dist/surfaces/registry.d.ts +76 -0
- package/dist/surfaces/registry.d.ts.map +1 -0
- package/dist/surfaces/registry.js +117 -0
- package/dist/surfaces/registry.js.map +1 -0
- package/dist/surfaces/telemetry.d.ts +17 -0
- package/dist/surfaces/telemetry.d.ts.map +1 -0
- package/dist/surfaces/telemetry.js +31 -0
- package/dist/surfaces/telemetry.js.map +1 -0
- package/package.json +11 -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/method-registry.json +16 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest reader — reads .productbrain/manifest.yaml for adoption state.
|
|
3
|
+
* WP-310 E1: personal workspace layer — manifest-based filtering.
|
|
4
|
+
* WP-421 S1 (#35): extends Manifest with DEC-951 authority keys (`materialize`,
|
|
5
|
+
* `surfaces`, `lock`) and adds `readManifestStatus()` — a typed reader that
|
|
6
|
+
* returns the FULL UNION of legacy + new fields plus a `parseStatus`
|
|
7
|
+
* discriminator (DEC-955, DEC-963 "Authority mode parse semantics").
|
|
8
|
+
*
|
|
9
|
+
* No external YAML dependency is required; the manifest schema is
|
|
10
|
+
* simple enough to parse with a minimal line-by-line parser.
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync } from 'fs';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
// ── Minimal YAML parser ────────────────────────────────────────────────
|
|
15
|
+
//
|
|
16
|
+
// Handles the subset of YAML used by manifest.yaml:
|
|
17
|
+
// - Top-level key: value pairs (strings, booleans)
|
|
18
|
+
// - Nested objects (one level deep, e.g. hooks.cursor: true)
|
|
19
|
+
// - Sequence lists under a key:
|
|
20
|
+
// adopted:
|
|
21
|
+
// - rule-a
|
|
22
|
+
// - rule-b
|
|
23
|
+
//
|
|
24
|
+
// Does NOT handle: multi-line strings, anchors, complex quoting, etc.
|
|
25
|
+
function parseManifestYaml(raw) {
|
|
26
|
+
const result = {};
|
|
27
|
+
const lines = raw.split('\n');
|
|
28
|
+
let currentKey = null;
|
|
29
|
+
let currentArray = null;
|
|
30
|
+
let currentObject = null;
|
|
31
|
+
const commitCurrent = () => {
|
|
32
|
+
if (currentKey !== null) {
|
|
33
|
+
if (currentArray !== null) {
|
|
34
|
+
result[currentKey] = currentArray;
|
|
35
|
+
}
|
|
36
|
+
else if (currentObject !== null) {
|
|
37
|
+
result[currentKey] = currentObject;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
currentKey = null;
|
|
41
|
+
currentArray = null;
|
|
42
|
+
currentObject = null;
|
|
43
|
+
};
|
|
44
|
+
for (let i = 0; i < lines.length; i++) {
|
|
45
|
+
const rawLine = lines[i];
|
|
46
|
+
const line = rawLine;
|
|
47
|
+
// Skip comments and blank lines
|
|
48
|
+
const trimmed = line.trim();
|
|
49
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
50
|
+
continue;
|
|
51
|
+
// Array item: " - value"
|
|
52
|
+
const arrayItemMatch = line.match(/^(\s+)-\s+(.+)$/);
|
|
53
|
+
if (arrayItemMatch && currentKey !== null) {
|
|
54
|
+
const indent = arrayItemMatch[1].length;
|
|
55
|
+
const value = arrayItemMatch[2].trim().replace(/^['"]|['"]$/g, '');
|
|
56
|
+
if (indent >= 2) {
|
|
57
|
+
if (currentArray !== null) {
|
|
58
|
+
currentArray.push(value);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Nested key-value: " key: value"
|
|
64
|
+
const nestedKvMatch = line.match(/^(\s{2,})([a-zA-Z_][a-zA-Z0-9_-]*):\s*(.*)$/);
|
|
65
|
+
if (nestedKvMatch && currentKey !== null) {
|
|
66
|
+
if (currentObject === null) {
|
|
67
|
+
// Transition: previous currentArray (if any) is lost — nested objects start fresh
|
|
68
|
+
currentArray = null;
|
|
69
|
+
currentObject = {};
|
|
70
|
+
}
|
|
71
|
+
const nestedVal = nestedKvMatch[3].trim();
|
|
72
|
+
currentObject[nestedKvMatch[2]] = parseScalar(nestedVal);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
// Top-level key: value
|
|
76
|
+
const kvMatch = line.match(/^([a-zA-Z_][a-zA-Z0-9_-]*):\s*(.*)$/);
|
|
77
|
+
if (kvMatch) {
|
|
78
|
+
commitCurrent();
|
|
79
|
+
const key = kvMatch[1];
|
|
80
|
+
const val = kvMatch[2].trim();
|
|
81
|
+
if (val === '') {
|
|
82
|
+
// Value will come on subsequent lines (array or object)
|
|
83
|
+
currentKey = key;
|
|
84
|
+
currentArray = null;
|
|
85
|
+
currentObject = null;
|
|
86
|
+
// Peek ahead using index — avoid indexOf which breaks on duplicate lines
|
|
87
|
+
const nextContent = lines.slice(i + 1).find((l) => l.trim() && !l.trim().startsWith('#'));
|
|
88
|
+
if (nextContent && nextContent.match(/^\s+-\s+/)) {
|
|
89
|
+
currentArray = [];
|
|
90
|
+
}
|
|
91
|
+
else if (nextContent && nextContent.match(/^\s{2,}[a-zA-Z]/)) {
|
|
92
|
+
currentObject = {};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
result[key] = parseScalar(val);
|
|
97
|
+
}
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
commitCurrent();
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
function parseScalar(val) {
|
|
105
|
+
const stripped = val.replace(/^['"]|['"]$/g, '');
|
|
106
|
+
if (stripped === 'true')
|
|
107
|
+
return true;
|
|
108
|
+
if (stripped === 'false')
|
|
109
|
+
return false;
|
|
110
|
+
if (stripped === 'null' || stripped === '~')
|
|
111
|
+
return null;
|
|
112
|
+
if (/^\d+$/.test(stripped))
|
|
113
|
+
return parseInt(stripped, 10);
|
|
114
|
+
return stripped;
|
|
115
|
+
}
|
|
116
|
+
// ── Public API ─────────────────────────────────────────────────────────
|
|
117
|
+
/** Valid AuthorityMode values, derived once for runtime guards. */
|
|
118
|
+
const VALID_AUTHORITY_MODES = new Set([
|
|
119
|
+
'off',
|
|
120
|
+
'observe',
|
|
121
|
+
'project',
|
|
122
|
+
'govern',
|
|
123
|
+
]);
|
|
124
|
+
/** Valid LockLevel values. */
|
|
125
|
+
const VALID_LOCK_LEVELS = new Set([
|
|
126
|
+
'platform',
|
|
127
|
+
'workspace',
|
|
128
|
+
'personal',
|
|
129
|
+
]);
|
|
130
|
+
/**
|
|
131
|
+
* Validate a parsed manifest object against the union schema.
|
|
132
|
+
* Returns the typed Manifest on success, null on any shape violation.
|
|
133
|
+
*
|
|
134
|
+
* Shared between `readManifest()` and `readManifestStatus()` so legacy
|
|
135
|
+
* callers and the WP-421 typed reader agree on what counts as parseable.
|
|
136
|
+
*/
|
|
137
|
+
function validateManifestShape(parsed) {
|
|
138
|
+
// Require version to be a string; reject missing or non-string values
|
|
139
|
+
if (typeof parsed.version !== 'string')
|
|
140
|
+
return null;
|
|
141
|
+
// Validate array fields — scalar values (e.g. adopted: "rule-a") must be rejected
|
|
142
|
+
if (parsed.adopted !== undefined && !Array.isArray(parsed.adopted))
|
|
143
|
+
return null;
|
|
144
|
+
if (parsed.rejected !== undefined && !Array.isArray(parsed.rejected))
|
|
145
|
+
return null;
|
|
146
|
+
// Validate method_source if present — only 'chain' | 'bundled' are valid
|
|
147
|
+
if (parsed.method_source !== undefined &&
|
|
148
|
+
parsed.method_source !== 'chain' &&
|
|
149
|
+
parsed.method_source !== 'bundled')
|
|
150
|
+
return null;
|
|
151
|
+
// ── WP-421 S1 — DEC-951 keys ─────────────────────────────────────────
|
|
152
|
+
// materialize: optional; if present, must be a known AuthorityMode.
|
|
153
|
+
if (parsed.materialize !== undefined &&
|
|
154
|
+
!(typeof parsed.materialize === 'string' && VALID_AUTHORITY_MODES.has(parsed.materialize))) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
// surfaces: optional; if present, must be an array of strings.
|
|
158
|
+
if (parsed.surfaces !== undefined) {
|
|
159
|
+
if (!Array.isArray(parsed.surfaces))
|
|
160
|
+
return null;
|
|
161
|
+
if (!parsed.surfaces.every((s) => typeof s === 'string'))
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
// lock: optional; if present, must be a plain object whose values are valid LockLevels.
|
|
165
|
+
if (parsed.lock !== undefined) {
|
|
166
|
+
if (parsed.lock === null ||
|
|
167
|
+
typeof parsed.lock !== 'object' ||
|
|
168
|
+
Array.isArray(parsed.lock)) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
for (const value of Object.values(parsed.lock)) {
|
|
172
|
+
if (typeof value !== 'string' || !VALID_LOCK_LEVELS.has(value)) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return parsed;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Read .productbrain/manifest.yaml.
|
|
181
|
+
* Returns null if the file is absent or unparseable (treat as no-op).
|
|
182
|
+
*
|
|
183
|
+
* Legacy reader — kept for callers that only need adoption-state filtering.
|
|
184
|
+
* WP-421 callers should prefer `readManifestStatus()` for typed authority
|
|
185
|
+
* mode + parse-status discriminator.
|
|
186
|
+
*/
|
|
187
|
+
export function readManifest(productbrainDir) {
|
|
188
|
+
const manifestPath = join(productbrainDir, 'manifest.yaml');
|
|
189
|
+
if (!existsSync(manifestPath))
|
|
190
|
+
return null;
|
|
191
|
+
try {
|
|
192
|
+
const raw = readFileSync(manifestPath, 'utf8');
|
|
193
|
+
const parsed = parseManifestYaml(raw);
|
|
194
|
+
return validateManifestShape(parsed);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return null; // malformed manifest = treat as absent
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Read manifest with full WP-421 authority typing (#35).
|
|
202
|
+
*
|
|
203
|
+
* Returns the FULL UNION of legacy + DEC-951 keys plus a `parseStatus`
|
|
204
|
+
* discriminator. Defaults per DEC-955 / DEC-963:
|
|
205
|
+
* - `.productbrain/` directory absent → mode='off', parseStatus='absent'
|
|
206
|
+
* - Directory present, manifest absent → mode='observe', parseStatus='absent'
|
|
207
|
+
* - Manifest present, no `materialize:` → mode='observe', parseStatus='ok'
|
|
208
|
+
* - Manifest unparseable / fails shape validation → mode='observe',
|
|
209
|
+
* parseStatus='unparseable' (NEVER 'project'/'govern' — fail closed).
|
|
210
|
+
*
|
|
211
|
+
* @param productbrainDir Absolute path to the `.productbrain/` directory.
|
|
212
|
+
* The directory itself MAY be absent — caller passes the candidate path
|
|
213
|
+
* regardless and this reader infers the mode from filesystem state.
|
|
214
|
+
*/
|
|
215
|
+
export function readManifestStatus(productbrainDir) {
|
|
216
|
+
// No `.productbrain/` directory at all → mode 'off' (DEC-955).
|
|
217
|
+
if (!existsSync(productbrainDir)) {
|
|
218
|
+
return { mode: 'off', surfaces: [], lock: {}, parseStatus: 'absent', manifest: null };
|
|
219
|
+
}
|
|
220
|
+
const manifestPath = join(productbrainDir, 'manifest.yaml');
|
|
221
|
+
// Directory present but no manifest file → mode 'observe', absent.
|
|
222
|
+
if (!existsSync(manifestPath)) {
|
|
223
|
+
return { mode: 'observe', surfaces: [], lock: {}, parseStatus: 'absent', manifest: null };
|
|
224
|
+
}
|
|
225
|
+
let raw;
|
|
226
|
+
try {
|
|
227
|
+
raw = readFileSync(manifestPath, 'utf8');
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// I/O failure — treat as unparseable, fail closed to observe (DEC-963).
|
|
231
|
+
return { mode: 'observe', surfaces: [], lock: {}, parseStatus: 'unparseable', manifest: null };
|
|
232
|
+
}
|
|
233
|
+
let parsed;
|
|
234
|
+
try {
|
|
235
|
+
parsed = parseManifestYaml(raw);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return { mode: 'observe', surfaces: [], lock: {}, parseStatus: 'unparseable', manifest: null };
|
|
239
|
+
}
|
|
240
|
+
const validated = validateManifestShape(parsed);
|
|
241
|
+
if (validated === null) {
|
|
242
|
+
// Shape violation (e.g. invalid materialize value, malformed lock map).
|
|
243
|
+
// Fail closed to observe per DEC-963 — NEVER project/govern.
|
|
244
|
+
return { mode: 'observe', surfaces: [], lock: {}, parseStatus: 'unparseable', manifest: null };
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
mode: validated.materialize ?? 'observe',
|
|
248
|
+
surfaces: validated.surfaces ?? [],
|
|
249
|
+
lock: validated.lock ?? {},
|
|
250
|
+
parseStatus: 'ok',
|
|
251
|
+
manifest: validated,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Filter a list of items by the manifest's adopted/rejected lists.
|
|
256
|
+
*
|
|
257
|
+
* Rules:
|
|
258
|
+
* - No manifest → return all items unchanged (no-op, preserves current behaviour).
|
|
259
|
+
* - rejected denylist applied first — excluded regardless of adopted.
|
|
260
|
+
* - adopted allowlist applied second — only items in the list pass (only when non-empty).
|
|
261
|
+
* - Empty adopted array → allowlist is inactive, all non-rejected items pass.
|
|
262
|
+
*/
|
|
263
|
+
export function filterByAdoptionState(items, manifest) {
|
|
264
|
+
if (!manifest)
|
|
265
|
+
return items;
|
|
266
|
+
const adopted = manifest.adopted ?? [];
|
|
267
|
+
const rejected = new Set(manifest.rejected ?? []);
|
|
268
|
+
// Apply rejected denylist first
|
|
269
|
+
let filtered = items.filter((item) => !rejected.has(item.name));
|
|
270
|
+
// Apply adopted allowlist (only when non-empty)
|
|
271
|
+
if (adopted.length > 0) {
|
|
272
|
+
const adoptedSet = new Set(adopted);
|
|
273
|
+
filtered = filtered.filter((item) => adoptedSet.has(item.name));
|
|
274
|
+
}
|
|
275
|
+
return filtered;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/generators/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA0E5B,0EAA0E;AAC1E,EAAE;AACF,oDAAoD;AACpD,qDAAqD;AACrD,+DAA+D;AAC/D,kCAAkC;AAClC,iBAAiB;AACjB,mBAAmB;AACnB,mBAAmB;AACnB,EAAE;AACF,sEAAsE;AAEtE,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,YAAY,GAAoB,IAAI,CAAC;IACzC,IAAI,aAAa,GAAmC,IAAI,CAAC;IAEzD,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;YACpC,CAAC;iBAAM,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAClC,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC;YACrC,CAAC;QACH,CAAC;QACD,UAAU,GAAG,IAAI,CAAC;QAClB,YAAY,GAAG,IAAI,CAAC;QACpB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC;QAErB,gCAAgC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAElD,0BAA0B;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrD,IAAI,cAAc,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACxC,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACnE,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChB,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzB,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChF,IAAI,aAAa,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACzC,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,kFAAkF;gBAClF,YAAY,GAAG,IAAI,CAAC;gBACpB,aAAa,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;gBACf,wDAAwD;gBACxD,UAAU,GAAG,GAAG,CAAC;gBACjB,YAAY,GAAG,IAAI,CAAC;gBACpB,aAAa,GAAG,IAAI,CAAC;gBACrB,yEAAyE;gBACzE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1F,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBACjD,YAAY,GAAG,EAAE,CAAC;gBACpB,CAAC;qBAAM,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBAC/D,aAAa,GAAG,EAAE,CAAC;gBACrB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;YACD,SAAS;QACX,CAAC;IACH,CAAC;IAED,aAAa,EAAE,CAAC;IAChB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0EAA0E;AAE1E,mEAAmE;AACnE,MAAM,qBAAqB,GAA+B,IAAI,GAAG,CAAC;IAChE,KAAK;IACL,SAAS;IACT,SAAS;IACT,QAAQ;CACT,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,iBAAiB,GAA2B,IAAI,GAAG,CAAC;IACxD,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,MAA+B;IAC5D,sEAAsE;IACtE,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACpD,kFAAkF;IAClF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,yEAAyE;IACzE,IACE,MAAM,CAAC,aAAa,KAAK,SAAS;QAClC,MAAM,CAAC,aAAa,KAAK,OAAO;QAChC,MAAM,CAAC,aAAa,KAAK,SAAS;QAElC,OAAO,IAAI,CAAC;IACd,wEAAwE;IACxE,oEAAoE;IACpE,IACE,MAAM,CAAC,WAAW,KAAK,SAAS;QAChC,CAAC,CAAC,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,WAA4B,CAAC,CAAC,EAC3G,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,+DAA+D;IAC/D,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;IACxE,CAAC;IACD,wFAAwF;IACxF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,IACE,MAAM,CAAC,IAAI,KAAK,IAAI;YACpB,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAC1B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAA+B,CAAC,EAAE,CAAC;YAC1E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAkB,CAAC,EAAE,CAAC;gBAC5E,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAA6B,CAAC;AACvC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,eAAuB;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,uCAAuC;IACtD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,eAAuB;IACxD,+DAA+D;IAC/D,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC5D,mEAAmE;IACnE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5F,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjG,CAAC;IAED,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjG,CAAC;IAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,wEAAwE;QACxE,6DAA6D;QAC7D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjG,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,WAAW,IAAI,SAAS;QACxC,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,EAAE;QAClC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;QAC1B,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,SAAS;KACpB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAU,EACV,QAAyB;IAEzB,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAElD,gCAAgC;IAChC,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,gDAAgD;IAChD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Portable knowledge — reads canonical skills/rules from .productbrain/
|
|
3
3
|
* and generates tool-specific copies for Cursor, Claude Code, etc.
|
|
4
4
|
*/
|
|
5
|
+
import type { SurfaceProfile, TargetName } from './surface-profiles.js';
|
|
6
|
+
export type { TargetName };
|
|
5
7
|
export interface WhenConditions {
|
|
6
8
|
when_stack?: string;
|
|
7
9
|
when_minStage?: string;
|
|
@@ -16,19 +18,28 @@ export interface CanonicalSkill {
|
|
|
16
18
|
targets?: string[];
|
|
17
19
|
level?: string;
|
|
18
20
|
conditions?: WhenConditions;
|
|
21
|
+
/** 'team' = default; 'local' = local surface files only, never committed. */
|
|
22
|
+
persist?: 'local' | 'team';
|
|
19
23
|
}
|
|
20
24
|
export interface CanonicalRule {
|
|
21
25
|
name: string;
|
|
22
26
|
description: string;
|
|
23
27
|
scope?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Path-scope glob for path-aware surfaces (e.g. "convex/**\/*.ts"). Drives the
|
|
30
|
+
* GitHub Copilot `.github/instructions/<name>.instructions.md` fan-out (applyTo frontmatter)
|
|
31
|
+
* and, in principle, nested CLAUDE.md/AGENTS.md placement. Absent = repo-wide only.
|
|
32
|
+
*/
|
|
33
|
+
applyTo?: string;
|
|
24
34
|
autoApply: boolean;
|
|
25
35
|
body: string;
|
|
26
36
|
sourcePath: string;
|
|
27
37
|
targets?: string[];
|
|
28
38
|
level?: string;
|
|
29
39
|
conditions?: WhenConditions;
|
|
40
|
+
/** 'team' = default; 'local' = local surface files only, never committed. */
|
|
41
|
+
persist?: 'local' | 'team';
|
|
30
42
|
}
|
|
31
|
-
export type TargetName = 'cursor' | 'claude' | 'copilot' | 'codex';
|
|
32
43
|
/** Returns true if the entry should be emitted to the given target. */
|
|
33
44
|
export declare function shouldEmitToTarget(entry: CanonicalRule | CanonicalSkill, target: TargetName): boolean;
|
|
34
45
|
export type HandshakeLevel = 'beginner' | 'intermediate' | 'expert';
|
|
@@ -69,6 +80,18 @@ export declare function evaluateConditions(conditions: WhenConditions, profile:
|
|
|
69
80
|
};
|
|
70
81
|
export declare function readCanonicalSkills(productbrainDir: string): CanonicalSkill[];
|
|
71
82
|
export declare function readCanonicalRules(productbrainDir: string): CanonicalRule[];
|
|
83
|
+
/**
|
|
84
|
+
* Read machine-local personal rules from .productbrain/.local/rules/.
|
|
85
|
+
* Returns [] when the directory is absent — no-op when personal layer is not set up.
|
|
86
|
+
* Every returned rule has persist: 'local' set, marking it as part of the personal layer.
|
|
87
|
+
*/
|
|
88
|
+
export declare function readPersonalLayer(productbrainDir: string): CanonicalRule[];
|
|
89
|
+
/**
|
|
90
|
+
* Read machine-local personal skills from .productbrain/.local/skills/.
|
|
91
|
+
* Returns [] when the directory is absent — no-op when personal layer is not set up.
|
|
92
|
+
* Every returned skill has persist: 'local' set, marking it as part of the personal layer.
|
|
93
|
+
*/
|
|
94
|
+
export declare function readPersonalSkillsLayer(productbrainDir: string): CanonicalSkill[];
|
|
72
95
|
/**
|
|
73
96
|
* Strip transport-conditional sections from a skill body.
|
|
74
97
|
*
|
|
@@ -86,17 +109,34 @@ export declare function stripTransportSections(body: string, target: TargetName)
|
|
|
86
109
|
* Generate a Cursor SKILL.md from a canonical skill.
|
|
87
110
|
* Cursor expects: name, description (with triggers embedded).
|
|
88
111
|
*/
|
|
89
|
-
export declare function generateCursorSkill(skill: CanonicalSkill): string;
|
|
112
|
+
export declare function generateCursorSkill(skill: CanonicalSkill, profile?: SurfaceProfile): string;
|
|
90
113
|
/**
|
|
91
114
|
* Generate a Cursor .mdc rule from a canonical rule.
|
|
92
115
|
* Cursor expects: description, globs, alwaysApply.
|
|
93
116
|
*/
|
|
94
|
-
export declare function generateCursorRule(rule: CanonicalRule): string;
|
|
117
|
+
export declare function generateCursorRule(rule: CanonicalRule, profile?: SurfaceProfile): string;
|
|
118
|
+
/**
|
|
119
|
+
* Apply batch-mode transformations to a skill body (DEC-283).
|
|
120
|
+
*
|
|
121
|
+
* Skills describe WHAT (intent). This generator produces HOW (batch-appropriate
|
|
122
|
+
* instructions). We transform interactive patterns without gutting the skill's
|
|
123
|
+
* logical structure and purpose.
|
|
124
|
+
*
|
|
125
|
+
* Transformations applied:
|
|
126
|
+
* 1. Strip sub-agent spawn patterns → inline steps
|
|
127
|
+
* 2. Strip user confirmation gates → autonomous proceed
|
|
128
|
+
* 3. Strip streaming/interactive references
|
|
129
|
+
* 4. Add batch governance header after first `#` heading
|
|
130
|
+
*/
|
|
131
|
+
export declare function applyBatchTransformations(body: string): string;
|
|
95
132
|
/**
|
|
96
133
|
* Generate a Codex skill projection from a canonical skill.
|
|
97
134
|
* This is a repo-local markdown projection, not a separate authoring source.
|
|
135
|
+
*
|
|
136
|
+
* When profile.executionModel === 'batch', batch transformations are applied
|
|
137
|
+
* AFTER transport stripping and path replacement (DEC-283).
|
|
98
138
|
*/
|
|
99
|
-
export declare function generateCodexSkill(skill: CanonicalSkill): string;
|
|
139
|
+
export declare function generateCodexSkill(skill: CanonicalSkill, profile?: SurfaceProfile): string;
|
|
100
140
|
/**
|
|
101
141
|
* Generate a Codex skill index/router file.
|
|
102
142
|
* AGENTS.md can point here so Codex has one obvious place to find available workflows.
|
|
@@ -116,10 +156,10 @@ export declare function validateCodexSkills(skills: CanonicalSkill[]): CodexVali
|
|
|
116
156
|
* Generate a Claude Code .md rule from a canonical rule.
|
|
117
157
|
* Claude Code expects: description, optional paths (array).
|
|
118
158
|
*/
|
|
119
|
-
export declare function generateClaudeRule(rule: CanonicalRule): string;
|
|
159
|
+
export declare function generateClaudeRule(rule: CanonicalRule, profile?: SurfaceProfile): string;
|
|
120
160
|
/**
|
|
121
161
|
* Generate a Claude Code skill-router.md — imperative skill activation rule.
|
|
122
162
|
* Loaded automatically by Claude Code via .claude/rules/ with no paths (always active).
|
|
123
163
|
*/
|
|
124
|
-
export declare function generateClaudeSkillRouter(skills: CanonicalSkill[]): string;
|
|
164
|
+
export declare function generateClaudeSkillRouter(skills: CanonicalSkill[], profile?: SurfaceProfile): string;
|
|
125
165
|
//# sourceMappingURL=portable-knowledge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portable-knowledge.d.ts","sourceRoot":"","sources":["../../src/generators/portable-knowledge.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"portable-knowledge.d.ts","sourceRoot":"","sources":["../../src/generators/portable-knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -222,6 +222,7 @@ export function readCanonicalRules(productbrainDir) {
|
|
|
222
222
|
const name = fields.get('name') ?? basename(file, '.md');
|
|
223
223
|
const description = fields.get('description') ?? '';
|
|
224
224
|
const scope = fields.get('scope');
|
|
225
|
+
const applyTo = fields.get('applyTo');
|
|
225
226
|
const autoApply = fields.get('autoApply') === 'true';
|
|
226
227
|
const targets = arrayFields.get('targets');
|
|
227
228
|
const level = fields.get('level');
|
|
@@ -236,10 +237,104 @@ export function readCanonicalRules(productbrainDir) {
|
|
|
236
237
|
if (whenMinGovernance)
|
|
237
238
|
conditions.when_minGovernance = whenMinGovernance;
|
|
238
239
|
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
|
+
rules.push({ name, description, scope, applyTo: applyTo || undefined, autoApply, body, sourcePath: filePath, targets: targets?.length ? targets : undefined, level: level || undefined, conditions: hasConditions ? conditions : undefined });
|
|
240
241
|
}
|
|
241
242
|
return rules.sort((a, b) => a.name.localeCompare(b.name));
|
|
242
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Read machine-local personal rules from .productbrain/.local/rules/.
|
|
246
|
+
* Returns [] when the directory is absent — no-op when personal layer is not set up.
|
|
247
|
+
* Every returned rule has persist: 'local' set, marking it as part of the personal layer.
|
|
248
|
+
*/
|
|
249
|
+
export function readPersonalLayer(productbrainDir) {
|
|
250
|
+
const localRulesDir = join(productbrainDir, '.local', 'rules');
|
|
251
|
+
if (!existsSync(localRulesDir))
|
|
252
|
+
return [];
|
|
253
|
+
const files = readdirSync(localRulesDir).filter((f) => f.endsWith('.md'));
|
|
254
|
+
const rules = [];
|
|
255
|
+
for (const file of files) {
|
|
256
|
+
const filePath = join(localRulesDir, file);
|
|
257
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
258
|
+
const { fields, arrayFields, body } = parseFrontmatter(raw);
|
|
259
|
+
const name = fields.get('name') ?? basename(file, '.md');
|
|
260
|
+
const description = fields.get('description') ?? '';
|
|
261
|
+
const scope = fields.get('scope');
|
|
262
|
+
const applyTo = fields.get('applyTo');
|
|
263
|
+
const autoApply = fields.get('autoApply') === 'true';
|
|
264
|
+
const targets = arrayFields.get('targets');
|
|
265
|
+
const level = fields.get('level');
|
|
266
|
+
const conditions = {};
|
|
267
|
+
const whenStack = fields.get('when_stack');
|
|
268
|
+
const whenMinStage = fields.get('when_minStage');
|
|
269
|
+
const whenMinGovernance = fields.get('when_minGovernance');
|
|
270
|
+
if (whenStack)
|
|
271
|
+
conditions.when_stack = whenStack;
|
|
272
|
+
if (whenMinStage)
|
|
273
|
+
conditions.when_minStage = whenMinStage;
|
|
274
|
+
if (whenMinGovernance)
|
|
275
|
+
conditions.when_minGovernance = whenMinGovernance;
|
|
276
|
+
const hasConditions = Object.keys(conditions).length > 0;
|
|
277
|
+
rules.push({
|
|
278
|
+
name,
|
|
279
|
+
description,
|
|
280
|
+
scope,
|
|
281
|
+
applyTo: applyTo || undefined,
|
|
282
|
+
autoApply,
|
|
283
|
+
body,
|
|
284
|
+
sourcePath: filePath,
|
|
285
|
+
targets: targets?.length ? targets : undefined,
|
|
286
|
+
level: level || undefined,
|
|
287
|
+
conditions: hasConditions ? conditions : undefined,
|
|
288
|
+
persist: 'local',
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
return rules.sort((a, b) => a.name.localeCompare(b.name));
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Read machine-local personal skills from .productbrain/.local/skills/.
|
|
295
|
+
* Returns [] when the directory is absent — no-op when personal layer is not set up.
|
|
296
|
+
* Every returned skill has persist: 'local' set, marking it as part of the personal layer.
|
|
297
|
+
*/
|
|
298
|
+
export function readPersonalSkillsLayer(productbrainDir) {
|
|
299
|
+
const localSkillsDir = join(productbrainDir, '.local', 'skills');
|
|
300
|
+
if (!existsSync(localSkillsDir))
|
|
301
|
+
return [];
|
|
302
|
+
const files = readdirSync(localSkillsDir).filter((f) => f.endsWith('.md'));
|
|
303
|
+
const skills = [];
|
|
304
|
+
for (const file of files) {
|
|
305
|
+
const filePath = join(localSkillsDir, file);
|
|
306
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
307
|
+
const { fields, arrayFields, body } = parseFrontmatter(raw);
|
|
308
|
+
const name = fields.get('name') ?? basename(file, '.md');
|
|
309
|
+
const description = fields.get('description') ?? '';
|
|
310
|
+
const triggers = arrayFields.get('triggers') ?? [];
|
|
311
|
+
const targets = arrayFields.get('targets');
|
|
312
|
+
const level = fields.get('level');
|
|
313
|
+
const conditions = {};
|
|
314
|
+
const whenStack = fields.get('when_stack');
|
|
315
|
+
const whenMinStage = fields.get('when_minStage');
|
|
316
|
+
const whenMinGovernance = fields.get('when_minGovernance');
|
|
317
|
+
if (whenStack)
|
|
318
|
+
conditions.when_stack = whenStack;
|
|
319
|
+
if (whenMinStage)
|
|
320
|
+
conditions.when_minStage = whenMinStage;
|
|
321
|
+
if (whenMinGovernance)
|
|
322
|
+
conditions.when_minGovernance = whenMinGovernance;
|
|
323
|
+
const hasConditions = Object.keys(conditions).length > 0;
|
|
324
|
+
skills.push({
|
|
325
|
+
name,
|
|
326
|
+
description,
|
|
327
|
+
triggers,
|
|
328
|
+
body,
|
|
329
|
+
sourcePath: filePath,
|
|
330
|
+
targets: targets?.length ? targets : undefined,
|
|
331
|
+
level: level || undefined,
|
|
332
|
+
conditions: hasConditions ? conditions : undefined,
|
|
333
|
+
persist: 'local',
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
return skills.sort((a, b) => a.name.localeCompare(b.name));
|
|
337
|
+
}
|
|
243
338
|
// ── Transport section stripping ───────────────────────────────────────
|
|
244
339
|
/**
|
|
245
340
|
* Strip transport-conditional sections from a skill body.
|
|
@@ -271,7 +366,7 @@ export function stripTransportSections(body, target) {
|
|
|
271
366
|
* Generate a Cursor SKILL.md from a canonical skill.
|
|
272
367
|
* Cursor expects: name, description (with triggers embedded).
|
|
273
368
|
*/
|
|
274
|
-
export function generateCursorSkill(skill) {
|
|
369
|
+
export function generateCursorSkill(skill, profile) {
|
|
275
370
|
// Cursor puts trigger phrases in the description field
|
|
276
371
|
const triggerLine = skill.triggers.length > 0
|
|
277
372
|
? ` Use when the user says ${skill.triggers.map((t) => `"${t}"`).join(', ')}.`
|
|
@@ -296,7 +391,7 @@ ${body}`;
|
|
|
296
391
|
* Generate a Cursor .mdc rule from a canonical rule.
|
|
297
392
|
* Cursor expects: description, globs, alwaysApply.
|
|
298
393
|
*/
|
|
299
|
-
export function generateCursorRule(rule) {
|
|
394
|
+
export function generateCursorRule(rule, profile) {
|
|
300
395
|
// Replace canonical paths with Cursor paths in body
|
|
301
396
|
const body = rule.body
|
|
302
397
|
.replace(/\.productbrain\/rules\/(\S+)\.md/g, '.cursor/rules/$1.mdc')
|
|
@@ -311,17 +406,65 @@ alwaysApply: ${!rule.scope && rule.autoApply}
|
|
|
311
406
|
${body}`;
|
|
312
407
|
}
|
|
313
408
|
// ── Codex generators ───────────────────────────────────────────────────
|
|
409
|
+
/**
|
|
410
|
+
* Apply batch-mode transformations to a skill body (DEC-283).
|
|
411
|
+
*
|
|
412
|
+
* Skills describe WHAT (intent). This generator produces HOW (batch-appropriate
|
|
413
|
+
* instructions). We transform interactive patterns without gutting the skill's
|
|
414
|
+
* logical structure and purpose.
|
|
415
|
+
*
|
|
416
|
+
* Transformations applied:
|
|
417
|
+
* 1. Strip sub-agent spawn patterns → inline steps
|
|
418
|
+
* 2. Strip user confirmation gates → autonomous proceed
|
|
419
|
+
* 3. Strip streaming/interactive references
|
|
420
|
+
* 4. Add batch governance header after first `#` heading
|
|
421
|
+
*/
|
|
422
|
+
export function applyBatchTransformations(body) {
|
|
423
|
+
// Split into fenced code blocks vs prose so transforms only apply to prose.
|
|
424
|
+
// Fenced blocks (``` or ~~~) may contain examples of interactive patterns
|
|
425
|
+
// that must be preserved verbatim.
|
|
426
|
+
const segments = body.split(/(^```[^\n]*\n[\s\S]*?^```\s*$|^~~~[^\n]*\n[\s\S]*?^~~~\s*$)/m);
|
|
427
|
+
let result = segments
|
|
428
|
+
.map((segment, i) => {
|
|
429
|
+
// Odd indices are fenced code blocks — pass through unchanged
|
|
430
|
+
if (i % 2 === 1)
|
|
431
|
+
return segment;
|
|
432
|
+
return applyProseTransformations(segment);
|
|
433
|
+
})
|
|
434
|
+
.join('');
|
|
435
|
+
// 4. Add batch governance header after the first `#` heading line
|
|
436
|
+
const batchHeader = '> Batch execution mode: This skill runs autonomously without interactive gates. Decisions are logged, not prompted.';
|
|
437
|
+
result = result.replace(/^(#\s+[^\n]+)(\n)/m, `$1$2\n${batchHeader}\n`);
|
|
438
|
+
return result;
|
|
439
|
+
}
|
|
440
|
+
/** Apply interactive-pattern transforms to a prose segment (not inside code fences). */
|
|
441
|
+
function applyProseTransformations(text) {
|
|
442
|
+
let result = text;
|
|
443
|
+
// 1. Sub-agent spawn patterns — lines that dispatch to sub-agents or fresh conversations
|
|
444
|
+
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.');
|
|
445
|
+
// 2. User confirmation gates — lines that halt for human input
|
|
446
|
+
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.');
|
|
447
|
+
// 3. Streaming / persistent-connection references
|
|
448
|
+
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, '');
|
|
449
|
+
return result;
|
|
450
|
+
}
|
|
314
451
|
/**
|
|
315
452
|
* Generate a Codex skill projection from a canonical skill.
|
|
316
453
|
* This is a repo-local markdown projection, not a separate authoring source.
|
|
454
|
+
*
|
|
455
|
+
* When profile.executionModel === 'batch', batch transformations are applied
|
|
456
|
+
* AFTER transport stripping and path replacement (DEC-283).
|
|
317
457
|
*/
|
|
318
|
-
export function generateCodexSkill(skill) {
|
|
458
|
+
export function generateCodexSkill(skill, profile) {
|
|
319
459
|
const triggerLine = skill.triggers.length > 0
|
|
320
460
|
? `\n\n**Triggers:** ${skill.triggers.map((t) => `\`${t}\``).join(', ')}`
|
|
321
461
|
: '';
|
|
322
462
|
const stripped = stripTransportSections(skill.body, 'codex');
|
|
323
|
-
const
|
|
463
|
+
const pathReplaced = stripped
|
|
324
464
|
.replace(/\.productbrain\/skills\/(\S+)\.md/g, '.codex/skills/$1.md');
|
|
465
|
+
const body = profile?.executionModel === 'batch'
|
|
466
|
+
? applyBatchTransformations(pathReplaced)
|
|
467
|
+
: pathReplaced;
|
|
325
468
|
return `<!-- ${MARKER} — source: .productbrain/skills/${skill.name}.md -->
|
|
326
469
|
|
|
327
470
|
# ${skill.name}
|
|
@@ -372,7 +515,7 @@ const CODEX_DEAD_REFERENCE_PATTERNS = [
|
|
|
372
515
|
{ pattern: /\bpb\s+(session|orient|get|capture|search|update|handshake|context|constellation)\b/, label: 'pb CLI command' },
|
|
373
516
|
{ pattern: /\bsub-agent\b/i, label: 'sub-agent reference' },
|
|
374
517
|
{ pattern: /\bAgent\s+tool\b/, label: 'Agent tool reference' },
|
|
375
|
-
{ pattern: /\
|
|
518
|
+
{ pattern: /\bkernelCall\b/, label: 'kernelCall reference' },
|
|
376
519
|
{ pattern: /\bpb\s+session\s+(start|close)\b/, label: 'pb session lifecycle' },
|
|
377
520
|
];
|
|
378
521
|
/**
|
|
@@ -403,7 +546,7 @@ export function validateCodexSkills(skills) {
|
|
|
403
546
|
* Generate a Claude Code .md rule from a canonical rule.
|
|
404
547
|
* Claude Code expects: description, optional paths (array).
|
|
405
548
|
*/
|
|
406
|
-
export function generateClaudeRule(rule) {
|
|
549
|
+
export function generateClaudeRule(rule, profile) {
|
|
407
550
|
// Replace canonical paths with Claude Code paths in body
|
|
408
551
|
const body = rule.body
|
|
409
552
|
.replace(/\.productbrain\/rules\/(\S+)\.md/g, '.claude/rules/$1.md')
|
|
@@ -425,7 +568,7 @@ ${body}`;
|
|
|
425
568
|
* Generate a Claude Code skill-router.md — imperative skill activation rule.
|
|
426
569
|
* Loaded automatically by Claude Code via .claude/rules/ with no paths (always active).
|
|
427
570
|
*/
|
|
428
|
-
export function generateClaudeSkillRouter(skills) {
|
|
571
|
+
export function generateClaudeSkillRouter(skills, profile) {
|
|
429
572
|
if (skills.length === 0)
|
|
430
573
|
return '';
|
|
431
574
|
const triggerBlocks = skills.map((skill) => {
|