@productbrain/cli 0.1.0-beta.98 → 0.1.0-beta.989
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/dist/__tests__/audit.test.js +5 -0
- package/dist/__tests__/audit.test.js.map +1 -1
- 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__/config.test.js +272 -2
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/constants.test.js +6 -1
- package/dist/__tests__/constants.test.js.map +1 -1
- package/dist/__tests__/envelope-contract.test.js +29 -3
- package/dist/__tests__/envelope-contract.test.js.map +1 -1
- package/dist/__tests__/errors.test.js +1 -0
- package/dist/__tests__/errors.test.js.map +1 -1
- 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 +423 -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.js +566 -4
- package/dist/__tests__/handshake-preview.test.js.map +1 -1
- 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 +1252 -0
- package/dist/__tests__/handshake.e2e.test.js.map +1 -0
- package/dist/__tests__/handshake.test.js +611 -2
- package/dist/__tests__/handshake.test.js.map +1 -1
- package/dist/__tests__/manifest.test.js +118 -1
- package/dist/__tests__/manifest.test.js.map +1 -1
- 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.js +4 -4
- package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
- package/dist/__tests__/orient.test.js +184 -7
- 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 +1 -2
- package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
- package/dist/__tests__/personal-layer.test.js +12 -48
- package/dist/__tests__/personal-layer.test.js.map +1 -1
- package/dist/__tests__/profiles.test.js +106 -2
- package/dist/__tests__/profiles.test.js.map +1 -1
- package/dist/__tests__/promote.test.js +2 -2
- package/dist/__tests__/promote.test.js.map +1 -1
- package/dist/__tests__/session-state-machine.test.js +45 -1
- package/dist/__tests__/session-state-machine.test.js.map +1 -1
- 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 +129 -0
- package/dist/__tests__/session-switch.test.js.map +1 -0
- package/dist/__tests__/setup-ingest.test.js +16 -0
- package/dist/__tests__/setup-ingest.test.js.map +1 -1
- 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 +187 -0
- package/dist/__tests__/skill-vocabulary.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__/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 +534 -0
- package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
- package/dist/__tests__/workspace.test.js +32 -12
- package/dist/__tests__/workspace.test.js.map +1 -1
- 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/admin/seed.d.ts +46 -2
- package/dist/commands/admin/seed.d.ts.map +1 -1
- package/dist/commands/admin/seed.js +475 -33
- package/dist/commands/admin/seed.js.map +1 -1
- package/dist/commands/admin/seed.test.d.ts +5 -0
- package/dist/commands/admin/seed.test.d.ts.map +1 -1
- package/dist/commands/admin/seed.test.js +67 -2
- package/dist/commands/admin/seed.test.js.map +1 -1
- 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 +117 -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 +67 -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 +30 -3
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/authority-domains.d.ts +7 -1
- package/dist/commands/authority-domains.d.ts.map +1 -1
- package/dist/commands/authority-domains.js +17 -3
- package/dist/commands/authority-domains.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +3 -2
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/codex-prep.d.ts +1 -0
- package/dist/commands/codex-prep.d.ts.map +1 -1
- package/dist/commands/codex-prep.js +10 -7
- package/dist/commands/codex-prep.js.map +1 -1
- 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 +64 -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 +110 -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.js +13 -12
- package/dist/commands/connect-integration.test.js.map +1 -1
- package/dist/commands/connect-screens.d.ts +6 -4
- package/dist/commands/connect-screens.d.ts.map +1 -1
- package/dist/commands/connect-screens.js +30 -19
- package/dist/commands/connect-screens.js.map +1 -1
- package/dist/commands/connect.d.ts +19 -6
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +31 -56
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +68 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.js +150 -0
- package/dist/commands/doctor.test.js.map +1 -1
- package/dist/commands/handshake.d.ts +194 -2
- package/dist/commands/handshake.d.ts.map +1 -1
- package/dist/commands/handshake.js +1537 -46
- package/dist/commands/handshake.js.map +1 -1
- package/dist/commands/method.d.ts.map +1 -1
- package/dist/commands/method.js +3 -0
- package/dist/commands/method.js.map +1 -1
- package/dist/commands/orient.d.ts +63 -2
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +106 -4
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/profile.d.ts +1 -14
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +89 -72
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +50 -13
- 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.map +1 -1
- package/dist/commands/setup-ingest.js +4 -2
- package/dist/commands/setup-ingest.js.map +1 -1
- 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 +17 -9
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +52 -131
- package/dist/commands/setup.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/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 +23 -2
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +2 -2
- package/dist/commands/workspace.js.map +1 -1
- 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 +454 -0
- package/dist/formatters/__tests__/orient-provenance.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/entry.d.ts +21 -0
- package/dist/formatters/entry.d.ts.map +1 -1
- package/dist/formatters/entry.js +46 -5
- package/dist/formatters/entry.js.map +1 -1
- package/dist/formatters/handshake.d.ts +19 -3
- package/dist/formatters/handshake.d.ts.map +1 -1
- package/dist/formatters/handshake.js +48 -13
- package/dist/formatters/handshake.js.map +1 -1
- package/dist/formatters/orient.d.ts +79 -4
- package/dist/formatters/orient.d.ts.map +1 -1
- package/dist/formatters/orient.js +119 -18
- package/dist/formatters/orient.js.map +1 -1
- package/dist/generators/context-md.js +6 -6
- package/dist/generators/context-md.js.map +1 -1
- package/dist/generators/manifest.d.ts +76 -0
- package/dist/generators/manifest.d.ts.map +1 -1
- package/dist/generators/manifest.js +125 -14
- package/dist/generators/manifest.js.map +1 -1
- package/dist/generators/portable-knowledge.d.ts +6 -12
- package/dist/generators/portable-knowledge.d.ts.map +1 -1
- package/dist/generators/portable-knowledge.js +2 -19
- package/dist/generators/portable-knowledge.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 +1 -2
- package/dist/generators/surface-profiles.d.ts.map +1 -1
- package/dist/generators/surface-profiles.js.map +1 -1
- package/dist/index.js +134 -26
- package/dist/index.js.map +1 -1
- package/dist/lib/activation.d.ts.map +1 -1
- package/dist/lib/activation.js +3 -3
- package/dist/lib/activation.js.map +1 -1
- package/dist/lib/activation.test.js +3 -3
- package/dist/lib/activation.test.js.map +1 -1
- package/dist/lib/canonicalRefs.d.ts +72 -0
- package/dist/lib/canonicalRefs.d.ts.map +1 -1
- package/dist/lib/canonicalRefs.js +67 -0
- package/dist/lib/canonicalRefs.js.map +1 -1
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +13 -3
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +70 -4
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +151 -11
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +2 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +2 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/errors.d.ts +1 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +1 -0
- package/dist/lib/errors.js.map +1 -1
- 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.map +1 -1
- package/dist/lib/onboarding-path-b.js +0 -1
- package/dist/lib/onboarding-path-b.js.map +1 -1
- package/dist/lib/onboarding-shared.d.ts +0 -1
- package/dist/lib/onboarding-shared.d.ts.map +1 -1
- package/dist/lib/onboarding-shared.js +1 -17
- package/dist/lib/onboarding-shared.js.map +1 -1
- package/dist/lib/profiles.d.ts +3 -1
- package/dist/lib/profiles.d.ts.map +1 -1
- package/dist/lib/profiles.js +9 -6
- package/dist/lib/profiles.js.map +1 -1
- package/dist/lib/session.d.ts +10 -0
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +14 -0
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/update-check.d.ts +42 -7
- package/dist/lib/update-check.d.ts.map +1 -1
- package/dist/lib/update-check.js +213 -62
- package/dist/lib/update-check.js.map +1 -1
- 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/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/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 +58 -2
- package/dist/surfaces/registry.d.ts.map +1 -1
- package/dist/surfaces/registry.js +82 -7
- package/dist/surfaces/registry.js.map +1 -1
- 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 +3 -1
- package/dist/__tests__/setup.test.d.ts +0 -2
- package/dist/__tests__/setup.test.d.ts.map +0 -1
- package/dist/__tests__/setup.test.js +0 -141
- package/dist/__tests__/setup.test.js.map +0 -1
- package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
- package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
- package/dist/generators/__tests__/surface-profiles.test.js +0 -89
- package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
- package/dist/lib/onboarding-phases.d.ts +0 -9
- package/dist/lib/onboarding-phases.d.ts.map +0 -1
- package/dist/lib/onboarding-phases.js +0 -120
- package/dist/lib/onboarding-phases.js.map +0 -1
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TEN-2155 — loop-level integration tests for the handshake region-augmentation feature.
|
|
3
|
+
*
|
|
4
|
+
* Drives `runHandshake({ apply: true })` against real temp dirs (real fs, real symlinks,
|
|
5
|
+
* real realpathSync) and asserts on-disk bytes + the returned report.
|
|
6
|
+
*
|
|
7
|
+
* Harness approach: mirrors the WP-426 E3 round-trip block in handshake.e2e.test.ts.
|
|
8
|
+
* vi.doMock() chains stub every kernel/network/generator call; `../generators/region.js`
|
|
9
|
+
* and `../generators/region-projections.js` are intentionally NOT mocked so the real
|
|
10
|
+
* augment mechanism is exercised. `runHandshake` is imported dynamically AFTER the mocks.
|
|
11
|
+
*/
|
|
12
|
+
import { mkdtempSync, writeFileSync, readFileSync, existsSync, rmSync, mkdirSync, symlinkSync, } from 'fs';
|
|
13
|
+
import { tmpdir } from 'os';
|
|
14
|
+
import { join } from 'path';
|
|
15
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
16
|
+
import { REGION_START, REGION_END, REGION_OPT_OUT } from '../generators/region.js';
|
|
17
|
+
// ── Shared mock wiring (replicates WP-426 E3 beforeEach block exactly) ────────
|
|
18
|
+
let augE2eRoot;
|
|
19
|
+
let augCwdSpy;
|
|
20
|
+
/** Set up a fresh tempdir + all kernel/generator stubs, then point cwd there. */
|
|
21
|
+
async function setupAugmentMocks(manifestYaml) {
|
|
22
|
+
vi.resetModules();
|
|
23
|
+
augE2eRoot = mkdtempSync(join(tmpdir(), 'pb-ten2155-augment-'));
|
|
24
|
+
mkdirSync(join(augE2eRoot, '.productbrain'), { recursive: true });
|
|
25
|
+
writeFileSync(join(augE2eRoot, '.productbrain', 'manifest.yaml'), manifestYaml);
|
|
26
|
+
augCwdSpy = vi.spyOn(process, 'cwd').mockReturnValue(augE2eRoot);
|
|
27
|
+
// Silence stdout/stderr — the full handshake writes formatting noise we don't care about.
|
|
28
|
+
vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
29
|
+
vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
30
|
+
// ── Kernel: no active/dormant assets; just enough to let the loop complete ──
|
|
31
|
+
vi.doMock('../lib/client.js', () => ({
|
|
32
|
+
kernelCall: vi.fn().mockImplementation(async (tool) => {
|
|
33
|
+
if (tool === 'chain.workspaceReadiness')
|
|
34
|
+
return null;
|
|
35
|
+
if (tool === 'chain.getOrientView')
|
|
36
|
+
return null;
|
|
37
|
+
if (tool === 'chain.searchEntries')
|
|
38
|
+
return [];
|
|
39
|
+
if (tool === 'setup.listAssetsForUser') {
|
|
40
|
+
return { activeAssets: [], dormantAssets: [], hasAnyReceipt: true };
|
|
41
|
+
}
|
|
42
|
+
if (tool === 'setup.updateLastProjectedHash')
|
|
43
|
+
return { ok: true };
|
|
44
|
+
if (tool === 'setup.getCurrentSetupState')
|
|
45
|
+
return { effectiveMode: 'project' };
|
|
46
|
+
if (tool === 'setup.materializeSetup')
|
|
47
|
+
return { ok: true, assetCount: 0, receiptWritten: true };
|
|
48
|
+
return null;
|
|
49
|
+
}),
|
|
50
|
+
kernelCallWithSession: vi.fn().mockResolvedValue(null),
|
|
51
|
+
}));
|
|
52
|
+
vi.doMock('../lib/config.js', () => ({
|
|
53
|
+
getConfigOrGuide: vi.fn().mockResolvedValue({
|
|
54
|
+
apiKey: 'pb_sk_augment_test',
|
|
55
|
+
siteUrl: 'https://test.convex.site',
|
|
56
|
+
}),
|
|
57
|
+
}));
|
|
58
|
+
vi.doMock('../lib/repo-detect.js', () => ({
|
|
59
|
+
detectRepo: vi.fn().mockReturnValue({ name: 'augment-test-repo', detectedStack: [], repoSlug: null }),
|
|
60
|
+
extractWorkspaceProfile: vi.fn().mockReturnValue(null),
|
|
61
|
+
}));
|
|
62
|
+
// ── Adapter generators: ABSENT file falls through to this whole-file content.
|
|
63
|
+
// Contains MARKER so a future classifyAdapterFile call sees 'pb-managed'.
|
|
64
|
+
// Case (b) regression guard: the string must contain 'auto-generated by pb handshake'.
|
|
65
|
+
vi.doMock('../generators/adapters.js', () => ({
|
|
66
|
+
MARKER: 'auto-generated by pb handshake',
|
|
67
|
+
generateAgentsMd: vi.fn().mockReturnValue('<!-- auto-generated by pb handshake -->\nagents'),
|
|
68
|
+
generateClaudeMd: vi.fn().mockReturnValue('<!-- auto-generated by pb handshake -->\nclaude'),
|
|
69
|
+
generateCursorMdc: vi.fn().mockReturnValue('<!-- auto-generated by pb handshake -->\ncursor'),
|
|
70
|
+
generateCopilotMd: vi.fn().mockReturnValue('<!-- auto-generated by pb handshake -->\ncopilot'),
|
|
71
|
+
}));
|
|
72
|
+
vi.doMock('../generators/portable-knowledge.js', () => ({
|
|
73
|
+
readCanonicalSkills: vi.fn().mockReturnValue([]),
|
|
74
|
+
readCanonicalRules: vi.fn().mockReturnValue([]),
|
|
75
|
+
readPersonalLayer: vi.fn().mockReturnValue([]),
|
|
76
|
+
readPersonalSkillsLayer: vi.fn().mockReturnValue([]),
|
|
77
|
+
generateCursorSkill: vi.fn().mockReturnValue(''),
|
|
78
|
+
generateCursorRule: vi.fn().mockReturnValue(''),
|
|
79
|
+
generateCodexSkill: vi.fn().mockReturnValue(''),
|
|
80
|
+
generateClaudeRule: vi.fn().mockReturnValue(''),
|
|
81
|
+
generateCodexSkillIndex: vi.fn().mockReturnValue(''),
|
|
82
|
+
generateClaudeSkillRouter: vi.fn().mockReturnValue(''),
|
|
83
|
+
shouldEmitToTarget: vi.fn().mockReturnValue(false),
|
|
84
|
+
filterByLevel: vi.fn().mockImplementation((items) => items),
|
|
85
|
+
evaluateConditions: vi.fn().mockReturnValue({ included: true, reasons: [] }),
|
|
86
|
+
validateCodexSkills: vi.fn().mockReturnValue([]),
|
|
87
|
+
STAGE_TO_MAX_LEVEL: {},
|
|
88
|
+
LEVEL_ORDER: [],
|
|
89
|
+
}));
|
|
90
|
+
vi.doMock('../generators/briefing-md.js', () => ({
|
|
91
|
+
generateBriefingMd: vi.fn().mockReturnValue('briefing content'),
|
|
92
|
+
}));
|
|
93
|
+
vi.doMock('../generators/context-md.js', () => ({
|
|
94
|
+
generateContextMd: vi.fn().mockReturnValue('context content'),
|
|
95
|
+
}));
|
|
96
|
+
vi.doMock('../generators/chain-rules.js', () => ({
|
|
97
|
+
generateChainRules: vi.fn().mockResolvedValue({
|
|
98
|
+
content: '',
|
|
99
|
+
rules: [],
|
|
100
|
+
classified: {},
|
|
101
|
+
stats: { generatedRules: 0, suppressedByManual: 0, suppressedByZeroEntries: 0 },
|
|
102
|
+
gaps: [],
|
|
103
|
+
sentinel: null,
|
|
104
|
+
}),
|
|
105
|
+
}));
|
|
106
|
+
vi.doMock('../generators/handshake-diff.js', () => ({
|
|
107
|
+
saveHandshakeState: vi.fn(),
|
|
108
|
+
loadPreviousState: vi.fn().mockReturnValue(null),
|
|
109
|
+
diffHandshakeState: vi.fn().mockReturnValue({ added: [], updated: [], removed: [] }),
|
|
110
|
+
formatDiff: vi.fn().mockReturnValue(''),
|
|
111
|
+
buildCurrentState: vi.fn().mockReturnValue({}),
|
|
112
|
+
}));
|
|
113
|
+
vi.doMock('../generators/surface-profiles.js', () => ({
|
|
114
|
+
resolveSurfaceProfile: vi.fn().mockReturnValue({ level: 'intermediate' }),
|
|
115
|
+
}));
|
|
116
|
+
vi.doMock('../generators/boundary-manifest.js', () => ({
|
|
117
|
+
generateBoundaryManifest: vi.fn().mockReturnValue(null),
|
|
118
|
+
getBoundaryEnforcementMode: vi.fn().mockReturnValue('advisory'),
|
|
119
|
+
}));
|
|
120
|
+
vi.doMock('../formatters/handshake.js', () => ({
|
|
121
|
+
formatHandshakeReport: vi.fn().mockReturnValue(''),
|
|
122
|
+
}));
|
|
123
|
+
vi.doMock('../lib/hook-intents.js', () => ({
|
|
124
|
+
composeHooksFromIntents: vi.fn().mockReturnValue({}),
|
|
125
|
+
getHookStatusForSurface: vi.fn().mockReturnValue([]),
|
|
126
|
+
}));
|
|
127
|
+
vi.doMock('../lib/method-registry.js', () => ({
|
|
128
|
+
loadMethodRegistry: vi.fn().mockResolvedValue({ methods: [], source: 'bundled', stale: false }),
|
|
129
|
+
}));
|
|
130
|
+
vi.doMock('../lib/workspaceVocabCache.js', () => ({
|
|
131
|
+
getOrFetchVocabCtx: vi.fn().mockResolvedValue(null),
|
|
132
|
+
}));
|
|
133
|
+
vi.doMock('../lib/telemetry.js', () => ({
|
|
134
|
+
trackEvent: vi.fn(),
|
|
135
|
+
}));
|
|
136
|
+
vi.doMock('../lib/session.js', () => ({
|
|
137
|
+
readSession: vi.fn().mockReturnValue(null),
|
|
138
|
+
}));
|
|
139
|
+
// replaceVocabTokens as identity — region content passes through intact.
|
|
140
|
+
vi.doMock('../lib/canonicalRefs.js', () => ({
|
|
141
|
+
parseSemanticRefs: vi.fn().mockReturnValue([]),
|
|
142
|
+
replaceVocabTokens: vi.fn().mockImplementation((content) => content),
|
|
143
|
+
}));
|
|
144
|
+
vi.doMock('../surfaces/telemetry.js', () => ({
|
|
145
|
+
getReverseMapFallbackMessage: vi.fn().mockReturnValue(''),
|
|
146
|
+
reportReverseMapMissing: vi.fn(),
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
/** Manifest for materialize: project + both claude + codex surfaces. */
|
|
150
|
+
const PROJECT_MANIFEST = [
|
|
151
|
+
'version: "0.1"',
|
|
152
|
+
'materialize: project',
|
|
153
|
+
'surfaces:',
|
|
154
|
+
' - .claude',
|
|
155
|
+
' - .codex',
|
|
156
|
+
' - .cursor',
|
|
157
|
+
'',
|
|
158
|
+
].join('\n');
|
|
159
|
+
/** Manifest without materialize (defaults to observe) + both claude + codex surfaces. */
|
|
160
|
+
const OBSERVE_MANIFEST = [
|
|
161
|
+
'version: "0.1"',
|
|
162
|
+
'surfaces:',
|
|
163
|
+
' - .claude',
|
|
164
|
+
' - .codex',
|
|
165
|
+
' - .cursor',
|
|
166
|
+
'',
|
|
167
|
+
].join('\n');
|
|
168
|
+
/** Manifest for materialize: project + codex only (no claude surface). */
|
|
169
|
+
const CODEX_ONLY_MANIFEST = [
|
|
170
|
+
'version: "0.1"',
|
|
171
|
+
'materialize: project',
|
|
172
|
+
'surfaces:',
|
|
173
|
+
' - .codex',
|
|
174
|
+
' - .cursor',
|
|
175
|
+
'',
|
|
176
|
+
].join('\n');
|
|
177
|
+
/** Manifest for materialize: project + claude only (no codex surface). */
|
|
178
|
+
const CLAUDE_ONLY_MANIFEST = [
|
|
179
|
+
'version: "0.1"',
|
|
180
|
+
'materialize: project',
|
|
181
|
+
'surfaces:',
|
|
182
|
+
' - .claude',
|
|
183
|
+
' - .cursor',
|
|
184
|
+
'',
|
|
185
|
+
].join('\n');
|
|
186
|
+
/** Drive a single runHandshake call after all mocks are set. Always applies. */
|
|
187
|
+
async function run(opts = {}) {
|
|
188
|
+
const { runHandshake } = await import('../commands/handshake.js');
|
|
189
|
+
return runHandshake({ apply: true, noPrompt: true, ...opts });
|
|
190
|
+
}
|
|
191
|
+
// ── Test suite ────────────────────────────────────────────────────────────────
|
|
192
|
+
describe('TEN-2155: region augmentation integration matrix', () => {
|
|
193
|
+
// Each test gets its own tempdir + fresh mocks.
|
|
194
|
+
beforeEach(() => {
|
|
195
|
+
// Intentionally empty — setupAugmentMocks() is called inside each test
|
|
196
|
+
// because the manifest content varies per test.
|
|
197
|
+
});
|
|
198
|
+
afterEach(() => {
|
|
199
|
+
augCwdSpy?.mockRestore();
|
|
200
|
+
if (augE2eRoot && existsSync(augE2eRoot)) {
|
|
201
|
+
rmSync(augE2eRoot, { recursive: true, force: true });
|
|
202
|
+
}
|
|
203
|
+
vi.restoreAllMocks();
|
|
204
|
+
});
|
|
205
|
+
// ── (a) user-owned CLAUDE.md → region appended, user bytes preserved ────────
|
|
206
|
+
it('(a) user-owned CLAUDE.md → region appended, user bytes preserved', async () => {
|
|
207
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
208
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
209
|
+
const userBody = '# Acme rules\n\nUse pnpm. Validate with zod.\n';
|
|
210
|
+
writeFileSync(claudePath, userBody);
|
|
211
|
+
await run();
|
|
212
|
+
const after = readFileSync(claudePath, 'utf8');
|
|
213
|
+
expect(after.startsWith(userBody), 'user bytes must be at the start').toBe(true);
|
|
214
|
+
expect(after.includes(REGION_START), 'must contain REGION_START').toBe(true);
|
|
215
|
+
expect(after.includes(REGION_END), 'must contain REGION_END').toBe(true);
|
|
216
|
+
});
|
|
217
|
+
// ── (a) re-run idempotent ───────────────────────────────────────────────────
|
|
218
|
+
it('(a) re-run idempotent — second apply is byte-identical to first', async () => {
|
|
219
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
220
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
221
|
+
writeFileSync(claudePath, '# mine\n');
|
|
222
|
+
// First apply
|
|
223
|
+
await run();
|
|
224
|
+
const firstRead = readFileSync(claudePath, 'utf8');
|
|
225
|
+
// Reset modules + mocks for the second apply to simulate a fresh CLI invocation.
|
|
226
|
+
vi.restoreAllMocks();
|
|
227
|
+
augCwdSpy?.mockRestore();
|
|
228
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
229
|
+
// Second apply
|
|
230
|
+
await run();
|
|
231
|
+
const secondRead = readFileSync(claudePath, 'utf8');
|
|
232
|
+
expect(secondRead, 'second apply must be byte-identical to first').toBe(firstRead);
|
|
233
|
+
});
|
|
234
|
+
// ── (b) absent file → whole-file PB-owned (regression guard) ───────────────
|
|
235
|
+
it('(b) absent CLAUDE.md → whole-file PB-owned content, no REGION_START', async () => {
|
|
236
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
237
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
238
|
+
expect(existsSync(claudePath), 'CLAUDE.md must not exist before run').toBe(false);
|
|
239
|
+
await run();
|
|
240
|
+
expect(existsSync(claudePath), 'CLAUDE.md must be created').toBe(true);
|
|
241
|
+
const content = readFileSync(claudePath, 'utf8');
|
|
242
|
+
expect(content.includes('auto-generated by pb handshake'), 'must contain whole-file MARKER').toBe(true);
|
|
243
|
+
expect(content.includes(REGION_START), 'REGION_START must NOT be present in whole-file PB-owned write').toBe(false);
|
|
244
|
+
});
|
|
245
|
+
// ── user edit OUTSIDE region survives a re-run ─────────────────────────────
|
|
246
|
+
it('user edit OUTSIDE region survives a re-run', async () => {
|
|
247
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
248
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
249
|
+
writeFileSync(claudePath, '# mine\n');
|
|
250
|
+
// First apply
|
|
251
|
+
await run();
|
|
252
|
+
const afterFirst = readFileSync(claudePath, 'utf8');
|
|
253
|
+
// Insert a user line above the region (i.e. before REGION_START)
|
|
254
|
+
const regionStartIdx = afterFirst.indexOf(REGION_START);
|
|
255
|
+
const withUserEdit = afterFirst.slice(0, regionStartIdx) +
|
|
256
|
+
'## User added section\n\nDo not delete this.\n\n' +
|
|
257
|
+
afterFirst.slice(regionStartIdx);
|
|
258
|
+
writeFileSync(claudePath, withUserEdit);
|
|
259
|
+
// Reset modules + mocks for the second apply
|
|
260
|
+
vi.restoreAllMocks();
|
|
261
|
+
augCwdSpy?.mockRestore();
|
|
262
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
263
|
+
// Second apply
|
|
264
|
+
await run();
|
|
265
|
+
const afterSecond = readFileSync(claudePath, 'utf8');
|
|
266
|
+
expect(afterSecond.includes('User added section'), 'user edit outside region must survive').toBe(true);
|
|
267
|
+
expect(afterSecond.includes('Do not delete this.'), 'user content must survive').toBe(true);
|
|
268
|
+
});
|
|
269
|
+
// ── malformed region → file untouched + headless apply refuses ──────────────
|
|
270
|
+
it('malformed region → file untouched + headless apply throws /malformed/i', async () => {
|
|
271
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
272
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
273
|
+
// Start sentinel without matching end sentinel → malformed
|
|
274
|
+
const malformedContent = `# mine\n${REGION_START}\n(no end sentinel)\n`;
|
|
275
|
+
writeFileSync(claudePath, malformedContent);
|
|
276
|
+
await expect(run()).rejects.toThrow(/malformed/i);
|
|
277
|
+
// File must be completely untouched
|
|
278
|
+
const afterContent = readFileSync(claudePath, 'utf8');
|
|
279
|
+
expect(afterContent, 'malformed file must not be touched').toBe(malformedContent);
|
|
280
|
+
});
|
|
281
|
+
// ── opt-out sentinel → declines augmentation, left untouched ───────────────
|
|
282
|
+
// Governance regression guard (TEN-2155): a file carrying pb:no-augment (e.g. this repo's own
|
|
283
|
+
// committed CLAUDE.md/AGENTS.md constitution) must NEVER be spliced — pre-fix it classified
|
|
284
|
+
// 'augmentable' and got a region. Routes to the legacy user-owned skip instead.
|
|
285
|
+
it('pb:no-augment file → not augmented, left byte-identical, reported user-owned', async () => {
|
|
286
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
287
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
288
|
+
const optOutBody = `${REGION_OPT_OUT}\n# Acme constitution\n\nHand-maintained. Do not touch.\n`;
|
|
289
|
+
writeFileSync(claudePath, optOutBody);
|
|
290
|
+
const report = await run();
|
|
291
|
+
const after = readFileSync(claudePath, 'utf8');
|
|
292
|
+
expect(after, 'opt-out file must be byte-identical').toBe(optOutBody);
|
|
293
|
+
expect(after.includes(REGION_START), 'no PB region may be spliced into an opt-out file').toBe(false);
|
|
294
|
+
// Reported as user-owned (left untouched), never written.
|
|
295
|
+
expect(report?.filesWritten ?? [], 'filesWritten must not include CLAUDE.md').not.toContain('CLAUDE.md');
|
|
296
|
+
const claudeSkip = (report?.filesSkipped ?? []).find((s) => s.path === 'CLAUDE.md');
|
|
297
|
+
expect(claudeSkip?.reason, 'skip reason must mark it user-owned').toMatch(/user-owned/);
|
|
298
|
+
});
|
|
299
|
+
// ── opt-out file in preview mode → still left untouched, never planned to augment ──
|
|
300
|
+
it('pb:no-augment file in preview mode → byte-identical, no region planned', async () => {
|
|
301
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
302
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
303
|
+
const optOutBody = `${REGION_OPT_OUT}\n# Acme constitution\n`;
|
|
304
|
+
writeFileSync(claudePath, optOutBody);
|
|
305
|
+
// apply:false → preview = true (no writes at all).
|
|
306
|
+
await run({ apply: false });
|
|
307
|
+
const after = readFileSync(claudePath, 'utf8');
|
|
308
|
+
expect(after, 'opt-out file must be byte-identical in preview').toBe(optOutBody);
|
|
309
|
+
expect(after.includes(REGION_START), 'no PB region may be added to an opt-out file in preview').toBe(false);
|
|
310
|
+
});
|
|
311
|
+
// ── observe + malformed + headless apply → STILL refuses (refusal is applyMode-gated) ──
|
|
312
|
+
// Regression guard for the writeMode→applyMode fix (TEN-2155): a malformed region is a user-file
|
|
313
|
+
// integrity fault. Under materialize: observe the augment branch won't WRITE, but the headless
|
|
314
|
+
// refusal must still fire (STD-263 invariant vi — "headless → non-zero refusal", unqualified).
|
|
315
|
+
// Pre-fix the writeMode guard suppressed this throw under observe/off and exited 0.
|
|
316
|
+
it('observe mode + malformed region + headless apply → still refuses (authority does not suppress it)', async () => {
|
|
317
|
+
await setupAugmentMocks(OBSERVE_MANIFEST);
|
|
318
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
319
|
+
const malformedContent = `# mine\n${REGION_START}\n(no end sentinel)\n`;
|
|
320
|
+
writeFileSync(claudePath, malformedContent);
|
|
321
|
+
await expect(run()).rejects.toThrow(/malformed/i);
|
|
322
|
+
const afterContent = readFileSync(claudePath, 'utf8');
|
|
323
|
+
expect(afterContent, 'malformed file must remain untouched in observe mode too').toBe(malformedContent);
|
|
324
|
+
});
|
|
325
|
+
// ── materialize observe → NO write + reported preview-only ─────────────────
|
|
326
|
+
it('materialize observe → no write AND filesSkipped contains CLAUDE.md with preview-only reason', async () => {
|
|
327
|
+
await setupAugmentMocks(OBSERVE_MANIFEST);
|
|
328
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
329
|
+
const userContent = '# mine\n';
|
|
330
|
+
writeFileSync(claudePath, userContent);
|
|
331
|
+
const report = await run();
|
|
332
|
+
expect(report).toBeDefined();
|
|
333
|
+
// File must not have been modified
|
|
334
|
+
const after = readFileSync(claudePath, 'utf8');
|
|
335
|
+
expect(after, 'CLAUDE.md must be unchanged in observe mode').toBe(userContent);
|
|
336
|
+
// Report must NOT list CLAUDE.md as written
|
|
337
|
+
expect(report?.filesWritten ?? [], 'filesWritten must not include CLAUDE.md').not.toContain('CLAUDE.md');
|
|
338
|
+
// Report must list a CLAUDE.md skip with a preview-only reason
|
|
339
|
+
const claudeSkip = (report?.filesSkipped ?? []).find((s) => s.path === 'CLAUDE.md');
|
|
340
|
+
expect(claudeSkip, 'filesSkipped must have a CLAUDE.md entry').toBeDefined();
|
|
341
|
+
expect(claudeSkip?.reason, 'skip reason must match /preview-only/').toMatch(/preview-only/);
|
|
342
|
+
});
|
|
343
|
+
// ── symlinked CLAUDE.md → AGENTS.md → augmented exactly once ───────────────
|
|
344
|
+
it('symlinked CLAUDE.md→AGENTS.md → resolved file augmented exactly once', async () => {
|
|
345
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
346
|
+
const agentsPath = join(augE2eRoot, 'AGENTS.md');
|
|
347
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
348
|
+
writeFileSync(agentsPath, '# shared\n');
|
|
349
|
+
symlinkSync(agentsPath, claudePath);
|
|
350
|
+
const report = await run();
|
|
351
|
+
const body = readFileSync(agentsPath, 'utf8');
|
|
352
|
+
const regionCount = body.split(REGION_START).length - 1;
|
|
353
|
+
expect(regionCount, 'REGION_START must appear exactly once in the symlinked file').toBe(1);
|
|
354
|
+
expect(report.filesSkipped.some((s) => s.path === 'CLAUDE.md' && /symlinked to another augment target/.test(s.reason)), 'CLAUDE.md must be reported as skipped with symlink reason').toBe(true);
|
|
355
|
+
});
|
|
356
|
+
// ── non-augmentTarget .cursor/rules/*.mdc → legacy skip, never augmented ───
|
|
357
|
+
it('non-augmentTarget .cursor/rules/*.mdc → byte-identical, no REGION_START', async () => {
|
|
358
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
359
|
+
const cursorDir = join(augE2eRoot, '.cursor', 'rules');
|
|
360
|
+
mkdirSync(cursorDir, { recursive: true });
|
|
361
|
+
const mdcPath = join(cursorDir, 'mine.mdc');
|
|
362
|
+
const originalContent = '# my cursor rule\n\nSome user content here.\n';
|
|
363
|
+
writeFileSync(mdcPath, originalContent);
|
|
364
|
+
await run();
|
|
365
|
+
const after = readFileSync(mdcPath, 'utf8');
|
|
366
|
+
expect(after, '.cursor/rules/mine.mdc must be byte-identical').toBe(originalContent);
|
|
367
|
+
expect(after.includes(REGION_START), 'REGION_START must NOT appear in .mdc file').toBe(false);
|
|
368
|
+
});
|
|
369
|
+
// ── CLAUDE.md present but claude NOT in surfaces → filtered, no augment ─────
|
|
370
|
+
it('claude not in surfaces → CLAUDE.md unchanged, no REGION_START, no throw', async () => {
|
|
371
|
+
await setupAugmentMocks(CODEX_ONLY_MANIFEST);
|
|
372
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
373
|
+
const userContent = '# mine\n';
|
|
374
|
+
writeFileSync(claudePath, userContent);
|
|
375
|
+
// Must resolve (not throw) even though CLAUDE.md exists
|
|
376
|
+
await expect(run()).resolves.toBeDefined();
|
|
377
|
+
const after = readFileSync(claudePath, 'utf8');
|
|
378
|
+
expect(after, 'CLAUDE.md must be unchanged when claude not in surfaces').toBe(userContent);
|
|
379
|
+
expect(after.includes(REGION_START), 'REGION_START must not appear').toBe(false);
|
|
380
|
+
});
|
|
381
|
+
// ── symlinked CLAUDE.md→AGENTS.md with single-surface scope (Fix 1 regression) ──
|
|
382
|
+
it('symlinked CLAUDE.md→AGENTS.md with single-surface scope → selected surface still augmented', async () => {
|
|
383
|
+
// Fix 1 regression test (TEN-2155):
|
|
384
|
+
// CLAUDE.md is a symlink to AGENTS.md; run scoped to claude only (codex filtered out).
|
|
385
|
+
// Before the fix: the dedupe pre-pass iterated ALL writes including the filtered-out
|
|
386
|
+
// AGENTS.md (codex), which claimed the shared inode first — so CLAUDE.md was then
|
|
387
|
+
// skipped as a duplicate → neither file got augmented.
|
|
388
|
+
// After the fix: only surfaces that will actually be processed participate in dedupe,
|
|
389
|
+
// so CLAUDE.md (the first surface-included target) claims the inode and is augmented.
|
|
390
|
+
await setupAugmentMocks(CLAUDE_ONLY_MANIFEST);
|
|
391
|
+
const agentsPath = join(augE2eRoot, 'AGENTS.md');
|
|
392
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
393
|
+
// Write the shared backing file; symlink CLAUDE.md → AGENTS.md.
|
|
394
|
+
writeFileSync(agentsPath, '# shared rules\n');
|
|
395
|
+
symlinkSync(agentsPath, claudePath);
|
|
396
|
+
await run();
|
|
397
|
+
// The resolved file (AGENTS.md, which CLAUDE.md points to) must contain exactly one
|
|
398
|
+
// REGION_START — proving CLAUDE.md was augmented (not skipped as a false duplicate).
|
|
399
|
+
const body = readFileSync(agentsPath, 'utf8');
|
|
400
|
+
const regionCount = body.split(REGION_START).length - 1;
|
|
401
|
+
expect(regionCount, 'REGION_START must appear exactly once — CLAUDE.md was augmented').toBe(1);
|
|
402
|
+
});
|
|
403
|
+
// ── CRLF user file → region rendered CRLF; re-run byte-identical ───────────
|
|
404
|
+
it('CRLF user file → region rendered CRLF; re-run byte-identical; user CRLF preserved', async () => {
|
|
405
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
406
|
+
const claudePath = join(augE2eRoot, 'CLAUDE.md');
|
|
407
|
+
const userBody = '# mine\r\nuse pnpm\r\n';
|
|
408
|
+
writeFileSync(claudePath, userBody);
|
|
409
|
+
// First apply
|
|
410
|
+
await run();
|
|
411
|
+
const first = readFileSync(claudePath, 'utf8');
|
|
412
|
+
expect(first.startsWith(userBody), 'user CRLF bytes must be preserved').toBe(true);
|
|
413
|
+
expect(first.includes(REGION_START + '\r\n'), 'REGION_START must be followed by CRLF').toBe(true);
|
|
414
|
+
// Reset mocks + second apply
|
|
415
|
+
vi.restoreAllMocks();
|
|
416
|
+
augCwdSpy?.mockRestore();
|
|
417
|
+
await setupAugmentMocks(PROJECT_MANIFEST);
|
|
418
|
+
await run();
|
|
419
|
+
const second = readFileSync(claudePath, 'utf8');
|
|
420
|
+
expect(second, 'second apply must be byte-identical to first (CRLF idempotent)').toBe(first);
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
//# sourceMappingURL=handshake-augment.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake-augment.test.js","sourceRoot":"","sources":["../../src/__tests__/handshake-augment.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,WAAW,GACZ,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEnF,iFAAiF;AAEjF,IAAI,UAAkB,CAAC;AACvB,IAAI,SAAsC,CAAC;AAE3C,iFAAiF;AACjF,KAAK,UAAU,iBAAiB,CAAC,YAAoB;IACnD,EAAE,CAAC,YAAY,EAAE,CAAC;IAElB,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAChE,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,YAAY,CAAC,CAAC;IAEhF,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAEjE,0FAA0F;IAC1F,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACjE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAEjE,+EAA+E;IAC/E,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;YAC5D,IAAI,IAAI,KAAK,0BAA0B;gBAAE,OAAO,IAAI,CAAC;YACrD,IAAI,IAAI,KAAK,qBAAqB;gBAAE,OAAO,IAAI,CAAC;YAChD,IAAI,IAAI,KAAK,qBAAqB;gBAAE,OAAO,EAAE,CAAC;YAC9C,IAAI,IAAI,KAAK,yBAAyB,EAAE,CAAC;gBACvC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YACtE,CAAC;YACD,IAAI,IAAI,KAAK,+BAA+B;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YAClE,IAAI,IAAI,KAAK,4BAA4B;gBAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;YAC/E,IAAI,IAAI,KAAK,wBAAwB;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;YAChG,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,qBAAqB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;KACvD,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,MAAM,EAAE,oBAAoB;YAC5B,OAAO,EAAE,0BAA0B;SACpC,CAAC;KACH,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;QACxC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACrG,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;KACvD,CAAC,CAAC,CAAC;IAEJ,+EAA+E;IAC/E,6EAA6E;IAC7E,0FAA0F;IAC1F,EAAE,CAAC,MAAM,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE,gCAAgC;QACxC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,iDAAiD,CAAC;QAC5F,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,iDAAiD,CAAC;QAC5F,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,iDAAiD,CAAC;QAC7F,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,kDAAkD,CAAC;KAC/F,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAChD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/C,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9C,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QACpD,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAChD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/C,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/C,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/C,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QACpD,yBAAyB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QACtD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;QAClD,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAgB,EAAE,EAAE,CAAC,KAAK,CAAC;QACtE,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC5E,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAChD,kBAAkB,EAAE,EAAE;QACtB,WAAW,EAAE,EAAE;KAChB,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,kBAAkB,CAAC;KAChE,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9C,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,iBAAiB,CAAC;KAC9D,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC5C,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE;YAC/E,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3B,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QAChD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACpF,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QACvC,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;KAC/C,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,qBAAqB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;KAC1E,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QACvD,0BAA0B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC;KAChE,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,qBAAqB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;KACnD,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;QACzC,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QACpD,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KAChG,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;KACpD,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;KACpB,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC,CAAC;IAEJ,yEAAyE;IACzE,EAAE,CAAC,MAAM,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1C,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9C,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC;KAC7E,CAAC,CAAC,CAAC;IAEJ,EAAE,CAAC,MAAM,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3C,4BAA4B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QACzD,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE;KACjC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,wEAAwE;AACxE,MAAM,gBAAgB,GAAG;IACvB,gBAAgB;IAChB,sBAAsB;IACtB,WAAW;IACX,aAAa;IACb,YAAY;IACZ,aAAa;IACb,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,yFAAyF;AACzF,MAAM,gBAAgB,GAAG;IACvB,gBAAgB;IAChB,WAAW;IACX,aAAa;IACb,YAAY;IACZ,aAAa;IACb,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG;IAC1B,gBAAgB;IAChB,sBAAsB;IACtB,WAAW;IACX,YAAY;IACZ,aAAa;IACb,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,0EAA0E;AAC1E,MAAM,oBAAoB,GAAG;IAC3B,gBAAgB;IAChB,sBAAsB;IACtB,WAAW;IACX,aAAa;IACb,aAAa;IACb,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,gFAAgF;AAChF,KAAK,UAAU,GAAG,CAAC,OAAgC,EAAE;IACnD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAClE,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,iFAAiF;AAEjF,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,gDAAgD;IAChD,UAAU,CAAC,GAAG,EAAE;QACd,uEAAuE;QACvE,gDAAgD;IAClD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,EAAE,WAAW,EAAE,CAAC;QACzB,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,gDAAgD,CAAC;QAClE,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEpC,MAAM,GAAG,EAAE,CAAC;QAEZ,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,iCAAiC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,yBAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtC,cAAc;QACd,MAAM,GAAG,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEnD,iFAAiF;QACjF,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,SAAS,EAAE,WAAW,EAAE,CAAC;QACzB,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,eAAe;QACf,MAAM,GAAG,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEpD,MAAM,CAAC,UAAU,EAAE,8CAA8C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,qCAAqC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElF,MAAM,GAAG,EAAE,CAAC;QAEZ,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,gCAAgC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,+DAA+D,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtC,cAAc;QACd,MAAM,GAAG,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEpD,iEAAiE;QACjE,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,YAAY,GAChB,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;YACnC,kDAAkD;YAClD,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAExC,6CAA6C;QAC7C,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,SAAS,EAAE,WAAW,EAAE,CAAC;QACzB,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,eAAe;QACf,MAAM,GAAG,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAErD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,uCAAuC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,WAAW,YAAY,uBAAuB,CAAC;QACxE,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAE5C,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAElD,oCAAoC;QACpC,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,CAAC,YAAY,EAAE,oCAAoC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,8FAA8F;IAC9F,4FAA4F;IAC5F,gFAAgF;IAChF,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,GAAG,cAAc,2DAA2D,CAAC;QAChG,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,kDAAkD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAErG,0DAA0D;QAC1D,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,EAAE,yCAAyC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzG,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACpF,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,qCAAqC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,sFAAsF;IACtF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,GAAG,cAAc,yBAAyB,CAAC;QAC9D,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtC,mDAAmD;QACnD,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5B,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,EAAE,gDAAgD,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,yDAAyD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9G,CAAC,CAAC,CAAC;IAEH,0FAA0F;IAC1F,iGAAiG;IACjG,+FAA+F;IAC/F,+FAA+F;IAC/F,oFAAoF;IACpF,EAAE,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;QACjH,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,WAAW,YAAY,uBAAuB,CAAC;QACxE,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAE5C,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAElD,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,CAAC,YAAY,EAAE,0DAA0D,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,UAAU,CAAC;QAC/B,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7B,mCAAmC;QACnC,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/E,4CAA4C;QAC5C,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,EAAE,yCAAyC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEzG,+DAA+D;QAC/D,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACpF,MAAM,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7E,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,uCAAuC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEjD,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACxC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;QAE3B,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,EAAE,6DAA6D,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,CACJ,MAAO,CAAC,YAAY,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CACtF,EACD,2DAA2D,CAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,+CAA+C,CAAC;QACxE,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAExC,MAAM,GAAG,EAAE,CAAC;QAEZ,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,2CAA2C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,UAAU,CAAC;QAC/B,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEvC,wDAAwD;QACxD,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,EAAE,yDAAyD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3F,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,8BAA8B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,mFAAmF;IACnF,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,oCAAoC;QACpC,uFAAuF;QACvF,qFAAqF;QACrF,kFAAkF;QAClF,uDAAuD;QACvD,sFAAsF;QACtF,sFAAsF;QACtF,MAAM,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;QAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEjD,gEAAgE;QAChE,aAAa,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAC9C,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEpC,MAAM,GAAG,EAAE,CAAC;QAEZ,oFAAoF;QACpF,qFAAqF;QACrF,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,EAAE,iEAAiE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,wBAAwB,CAAC;QAC1C,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEpC,cAAc;QACd,MAAM,GAAG,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE/C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,mCAAmC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,EAAE,uCAAuC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElG,6BAA6B;QAC7B,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,SAAS,EAAE,WAAW,EAAE,CAAC;QACzB,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,GAAG,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,EAAE,gEAAgE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake-dormancy.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/handshake-dormancy.test.ts"],"names":[],"mappings":""}
|