mewkit 1.14.1 → 1.16.0
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/NOTICE +24 -0
- package/README.md +36 -70
- package/dist/commands/capabilities.d.ts +13 -0
- package/dist/commands/capabilities.d.ts.map +1 -0
- package/dist/commands/capabilities.js +230 -0
- package/dist/commands/capabilities.js.map +1 -0
- package/dist/commands/context.d.ts +10 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +125 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/doctor.d.ts +27 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +123 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/providers.d.ts +2 -0
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +77 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/task-state.d.ts +13 -0
- package/dist/commands/task-state.d.ts.map +1 -0
- package/dist/commands/task-state.js +106 -0
- package/dist/commands/task-state.js.map +1 -0
- package/dist/commands/validate.d.ts +48 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +97 -24
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/visual-plan.d.ts +23 -0
- package/dist/commands/visual-plan.d.ts.map +1 -0
- package/dist/commands/visual-plan.js +26 -0
- package/dist/commands/visual-plan.js.map +1 -0
- package/dist/core/availability.d.ts +40 -0
- package/dist/core/availability.d.ts.map +1 -0
- package/dist/core/availability.js +47 -0
- package/dist/core/availability.js.map +1 -0
- package/dist/core/bootstrap.d.ts +19 -0
- package/dist/core/bootstrap.d.ts.map +1 -0
- package/dist/core/bootstrap.js +42 -0
- package/dist/core/bootstrap.js.map +1 -0
- package/dist/core/build-capabilities.d.ts +9 -0
- package/dist/core/build-capabilities.d.ts.map +1 -0
- package/dist/core/build-capabilities.js +123 -0
- package/dist/core/build-capabilities.js.map +1 -0
- package/dist/core/build-inventory.d.ts +2 -0
- package/dist/core/build-inventory.d.ts.map +1 -1
- package/dist/core/build-inventory.js +1 -1
- package/dist/core/build-inventory.js.map +1 -1
- package/dist/core/capability-authored.d.ts +26 -0
- package/dist/core/capability-authored.d.ts.map +1 -0
- package/dist/core/capability-authored.js +117 -0
- package/dist/core/capability-authored.js.map +1 -0
- package/dist/core/capability-snapshot.d.ts +13 -0
- package/dist/core/capability-snapshot.d.ts.map +1 -0
- package/dist/core/capability-snapshot.js +53 -0
- package/dist/core/capability-snapshot.js.map +1 -0
- package/dist/core/capability.d.ts +519 -0
- package/dist/core/capability.d.ts.map +1 -0
- package/dist/core/capability.js +114 -0
- package/dist/core/capability.js.map +1 -0
- package/dist/core/compute-checksums.d.ts.map +1 -1
- package/dist/core/compute-checksums.js +8 -2
- package/dist/core/compute-checksums.js.map +1 -1
- package/dist/core/consolidation-ledger.d.ts +30 -0
- package/dist/core/consolidation-ledger.d.ts.map +1 -0
- package/dist/core/consolidation-ledger.js +147 -0
- package/dist/core/consolidation-ledger.js.map +1 -0
- package/dist/core/generate-capability-view.d.ts +21 -0
- package/dist/core/generate-capability-view.d.ts.map +1 -0
- package/dist/core/generate-capability-view.js +48 -0
- package/dist/core/generate-capability-view.js.map +1 -0
- package/dist/core/install-metadata.d.ts +20 -3
- package/dist/core/install-metadata.d.ts.map +1 -1
- package/dist/core/install-metadata.js +49 -9
- package/dist/core/install-metadata.js.map +1 -1
- package/dist/core/provider-adapter.d.ts +28 -0
- package/dist/core/provider-adapter.d.ts.map +1 -0
- package/dist/core/provider-adapter.js +31 -0
- package/dist/core/provider-adapter.js.map +1 -0
- package/dist/core/provider-invocation.d.ts +14 -0
- package/dist/core/provider-invocation.d.ts.map +1 -0
- package/dist/core/provider-invocation.js +56 -0
- package/dist/core/provider-invocation.js.map +1 -0
- package/dist/core/provider-lifecycle.d.ts +35 -0
- package/dist/core/provider-lifecycle.d.ts.map +1 -0
- package/dist/core/provider-lifecycle.js +101 -0
- package/dist/core/provider-lifecycle.js.map +1 -0
- package/dist/core/provider-projection.d.ts +29 -0
- package/dist/core/provider-projection.d.ts.map +1 -0
- package/dist/core/provider-projection.js +47 -0
- package/dist/core/provider-projection.js.map +1 -0
- package/dist/core/release-metadata.d.ts +7 -0
- package/dist/core/release-metadata.d.ts.map +1 -1
- package/dist/core/release-metadata.js +13 -0
- package/dist/core/release-metadata.js.map +1 -1
- package/dist/core/repo-context-adapter.d.ts +23 -0
- package/dist/core/repo-context-adapter.d.ts.map +1 -0
- package/dist/core/repo-context-adapter.js +44 -0
- package/dist/core/repo-context-adapter.js.map +1 -0
- package/dist/core/repo-context.d.ts +147 -0
- package/dist/core/repo-context.d.ts.map +1 -0
- package/dist/core/repo-context.js +204 -0
- package/dist/core/repo-context.js.map +1 -0
- package/dist/core/resolve-capabilities.d.ts +70 -0
- package/dist/core/resolve-capabilities.d.ts.map +1 -0
- package/dist/core/resolve-capabilities.js +124 -0
- package/dist/core/resolve-capabilities.js.map +1 -0
- package/dist/core/smart-update.d.ts.map +1 -1
- package/dist/core/smart-update.js +13 -12
- package/dist/core/smart-update.js.map +1 -1
- package/dist/core/task-record.d.ts +252 -0
- package/dist/core/task-record.d.ts.map +1 -0
- package/dist/core/task-record.js +252 -0
- package/dist/core/task-record.js.map +1 -0
- package/dist/core/validate-capabilities.d.ts +12 -0
- package/dist/core/validate-capabilities.d.ts.map +1 -0
- package/dist/core/validate-capabilities.js +138 -0
- package/dist/core/validate-capabilities.js.map +1 -0
- package/dist/index.js +99 -25
- package/dist/index.js.map +1 -1
- package/dist/local-web/atomic-write.d.ts +15 -0
- package/dist/local-web/atomic-write.d.ts.map +1 -0
- package/dist/local-web/atomic-write.js +69 -0
- package/dist/local-web/atomic-write.js.map +1 -0
- package/dist/local-web/constants.d.ts +13 -0
- package/dist/local-web/constants.d.ts.map +1 -0
- package/dist/local-web/constants.js +13 -0
- package/dist/local-web/constants.js.map +1 -0
- package/dist/local-web/etag.d.ts +19 -0
- package/dist/local-web/etag.d.ts.map +1 -0
- package/dist/local-web/etag.js +32 -0
- package/dist/local-web/etag.js.map +1 -0
- package/dist/local-web/host-guard.d.ts +12 -0
- package/dist/local-web/host-guard.d.ts.map +1 -0
- package/dist/local-web/host-guard.js +18 -0
- package/dist/local-web/host-guard.js.map +1 -0
- package/dist/local-web/index.d.ts +23 -0
- package/dist/local-web/index.d.ts.map +1 -0
- package/dist/local-web/index.js +23 -0
- package/dist/local-web/index.js.map +1 -0
- package/dist/local-web/local-server.d.ts +37 -0
- package/dist/local-web/local-server.d.ts.map +1 -0
- package/dist/local-web/local-server.js +85 -0
- package/dist/local-web/local-server.js.map +1 -0
- package/dist/local-web/open-browser.d.ts +12 -0
- package/dist/local-web/open-browser.d.ts.map +1 -0
- package/dist/{orchviz/open-url.js → local-web/open-browser.js} +9 -8
- package/dist/local-web/open-browser.js.map +1 -0
- package/dist/local-web/origin-guard.d.ts +11 -0
- package/dist/local-web/origin-guard.d.ts.map +1 -0
- package/dist/local-web/origin-guard.js +15 -0
- package/dist/local-web/origin-guard.js.map +1 -0
- package/dist/local-web/path-boundary.d.ts +20 -0
- package/dist/local-web/path-boundary.d.ts.map +1 -0
- package/dist/local-web/path-boundary.js +39 -0
- package/dist/local-web/path-boundary.js.map +1 -0
- package/dist/local-web/request-body.d.ts +24 -0
- package/dist/local-web/request-body.d.ts.map +1 -0
- package/dist/local-web/request-body.js +68 -0
- package/dist/local-web/request-body.js.map +1 -0
- package/dist/local-web/static-handler.d.ts +14 -0
- package/dist/local-web/static-handler.d.ts.map +1 -0
- package/dist/{orchviz/server → local-web}/static-handler.js +11 -6
- package/dist/local-web/static-handler.js.map +1 -0
- package/dist/migrate/capability-bootstrap-projection.d.ts +11 -0
- package/dist/migrate/capability-bootstrap-projection.d.ts.map +1 -0
- package/dist/migrate/capability-bootstrap-projection.js +48 -0
- package/dist/migrate/capability-bootstrap-projection.js.map +1 -0
- package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
- package/dist/migrate/migrate-orchestrator.js +22 -0
- package/dist/migrate/migrate-orchestrator.js.map +1 -1
- package/dist/migrate/reconcile/portable-manifest.d.ts +12 -12
- package/dist/migrate/reconcile/portable-registry.d.ts +30 -30
- package/dist/migrate/types.d.ts +10 -10
- package/dist/{orchviz/token-estimator.d.ts → token-estimator/index.d.ts} +6 -1
- package/dist/token-estimator/index.d.ts.map +1 -0
- package/dist/{orchviz/token-estimator.js → token-estimator/index.js} +11 -2
- package/dist/token-estimator/index.js.map +1 -0
- package/dist/visual-plan/__fixtures__/valid-plan.d.ts +15 -0
- package/dist/visual-plan/__fixtures__/valid-plan.d.ts.map +1 -0
- package/dist/visual-plan/__fixtures__/valid-plan.js +79 -0
- package/dist/visual-plan/__fixtures__/valid-plan.js.map +1 -0
- package/dist/visual-plan/application/apply-feedback.d.ts +31 -0
- package/dist/visual-plan/application/apply-feedback.d.ts.map +1 -0
- package/dist/visual-plan/application/apply-feedback.js +85 -0
- package/dist/visual-plan/application/apply-feedback.js.map +1 -0
- package/dist/visual-plan/application/apply-patch-op.d.ts +13 -0
- package/dist/visual-plan/application/apply-patch-op.d.ts.map +1 -0
- package/dist/visual-plan/application/apply-patch-op.js +72 -0
- package/dist/visual-plan/application/apply-patch-op.js.map +1 -0
- package/dist/visual-plan/application/approve.d.ts +24 -0
- package/dist/visual-plan/application/approve.d.ts.map +1 -0
- package/dist/visual-plan/application/approve.js +53 -0
- package/dist/visual-plan/application/approve.js.map +1 -0
- package/dist/visual-plan/application/clock.d.ts +8 -0
- package/dist/visual-plan/application/clock.d.ts.map +1 -0
- package/dist/visual-plan/application/clock.js +10 -0
- package/dist/visual-plan/application/clock.js.map +1 -0
- package/dist/visual-plan/application/export-plan.d.ts +19 -0
- package/dist/visual-plan/application/export-plan.d.ts.map +1 -0
- package/dist/visual-plan/application/export-plan.js +59 -0
- package/dist/visual-plan/application/export-plan.js.map +1 -0
- package/dist/visual-plan/application/patch-plan.d.ts +26 -0
- package/dist/visual-plan/application/patch-plan.d.ts.map +1 -0
- package/dist/visual-plan/application/patch-plan.js +48 -0
- package/dist/visual-plan/application/patch-plan.js.map +1 -0
- package/dist/visual-plan/application/prepare-feedback.d.ts +24 -0
- package/dist/visual-plan/application/prepare-feedback.d.ts.map +1 -0
- package/dist/visual-plan/application/prepare-feedback.js +70 -0
- package/dist/visual-plan/application/prepare-feedback.js.map +1 -0
- package/dist/visual-plan/application/rehash.d.ts +19 -0
- package/dist/visual-plan/application/rehash.d.ts.map +1 -0
- package/dist/visual-plan/application/rehash.js +43 -0
- package/dist/visual-plan/application/rehash.js.map +1 -0
- package/dist/visual-plan/application/status.d.ts +20 -0
- package/dist/visual-plan/application/status.d.ts.map +1 -0
- package/dist/visual-plan/application/status.js +27 -0
- package/dist/visual-plan/application/status.js.map +1 -0
- package/dist/visual-plan/application/validate-plan.d.ts +30 -0
- package/dist/visual-plan/application/validate-plan.d.ts.map +1 -0
- package/dist/visual-plan/application/validate-plan.js +59 -0
- package/dist/visual-plan/application/validate-plan.js.map +1 -0
- package/dist/visual-plan/domain/coverage.d.ts +35 -0
- package/dist/visual-plan/domain/coverage.d.ts.map +1 -0
- package/dist/visual-plan/domain/coverage.js +99 -0
- package/dist/visual-plan/domain/coverage.js.map +1 -0
- package/dist/visual-plan/domain/cross-refs.d.ts +20 -0
- package/dist/visual-plan/domain/cross-refs.d.ts.map +1 -0
- package/dist/visual-plan/domain/cross-refs.js +92 -0
- package/dist/visual-plan/domain/cross-refs.js.map +1 -0
- package/dist/visual-plan/domain/errors.d.ts +43 -0
- package/dist/visual-plan/domain/errors.d.ts.map +1 -0
- package/dist/visual-plan/domain/errors.js +33 -0
- package/dist/visual-plan/domain/errors.js.map +1 -0
- package/dist/visual-plan/domain/feedback-schemas.d.ts +160 -0
- package/dist/visual-plan/domain/feedback-schemas.d.ts.map +1 -0
- package/dist/visual-plan/domain/feedback-schemas.js +71 -0
- package/dist/visual-plan/domain/feedback-schemas.js.map +1 -0
- package/dist/visual-plan/domain/ids.d.ts +21 -0
- package/dist/visual-plan/domain/ids.d.ts.map +1 -0
- package/dist/visual-plan/domain/ids.js +25 -0
- package/dist/visual-plan/domain/ids.js.map +1 -0
- package/dist/visual-plan/domain/patches.d.ts +176 -0
- package/dist/visual-plan/domain/patches.d.ts.map +1 -0
- package/dist/visual-plan/domain/patches.js +41 -0
- package/dist/visual-plan/domain/patches.js.map +1 -0
- package/dist/visual-plan/domain/sanitizer-config.d.ts +61 -0
- package/dist/visual-plan/domain/sanitizer-config.d.ts.map +1 -0
- package/dist/visual-plan/domain/sanitizer-config.js +70 -0
- package/dist/visual-plan/domain/sanitizer-config.js.map +1 -0
- package/dist/visual-plan/domain/schemas.d.ts +1492 -0
- package/dist/visual-plan/domain/schemas.d.ts.map +1 -0
- package/dist/visual-plan/domain/schemas.js +166 -0
- package/dist/visual-plan/domain/schemas.js.map +1 -0
- package/dist/visual-plan/infrastructure/atomic-write.d.ts +11 -0
- package/dist/visual-plan/infrastructure/atomic-write.d.ts.map +1 -0
- package/dist/visual-plan/infrastructure/atomic-write.js +44 -0
- package/dist/visual-plan/infrastructure/atomic-write.js.map +1 -0
- package/dist/visual-plan/infrastructure/feedback-repository.d.ts +18 -0
- package/dist/visual-plan/infrastructure/feedback-repository.d.ts.map +1 -0
- package/dist/visual-plan/infrastructure/feedback-repository.js +59 -0
- package/dist/visual-plan/infrastructure/feedback-repository.js.map +1 -0
- package/dist/visual-plan/infrastructure/hashing.d.ts +37 -0
- package/dist/visual-plan/infrastructure/hashing.d.ts.map +1 -0
- package/dist/visual-plan/infrastructure/hashing.js +81 -0
- package/dist/visual-plan/infrastructure/hashing.js.map +1 -0
- package/dist/visual-plan/infrastructure/plan-state.d.ts +32 -0
- package/dist/visual-plan/infrastructure/plan-state.d.ts.map +1 -0
- package/dist/visual-plan/infrastructure/plan-state.js +58 -0
- package/dist/visual-plan/infrastructure/plan-state.js.map +1 -0
- package/dist/visual-plan/infrastructure/receipt-repository.d.ts +17 -0
- package/dist/visual-plan/infrastructure/receipt-repository.d.ts.map +1 -0
- package/dist/visual-plan/infrastructure/receipt-repository.js +59 -0
- package/dist/visual-plan/infrastructure/receipt-repository.js.map +1 -0
- package/dist/visual-plan/infrastructure/visual-plan-repository.d.ts +38 -0
- package/dist/visual-plan/infrastructure/visual-plan-repository.d.ts.map +1 -0
- package/dist/visual-plan/infrastructure/visual-plan-repository.js +97 -0
- package/dist/visual-plan/infrastructure/visual-plan-repository.js.map +1 -0
- package/dist/visual-plan/infrastructure/wireframe-sanitizer.d.ts +41 -0
- package/dist/visual-plan/infrastructure/wireframe-sanitizer.d.ts.map +1 -0
- package/dist/visual-plan/infrastructure/wireframe-sanitizer.js +72 -0
- package/dist/visual-plan/infrastructure/wireframe-sanitizer.js.map +1 -0
- package/dist/visual-plan/interface/cli.d.ts +29 -0
- package/dist/visual-plan/interface/cli.d.ts.map +1 -0
- package/dist/visual-plan/interface/cli.js +280 -0
- package/dist/visual-plan/interface/cli.js.map +1 -0
- package/dist/visual-plan/interface/studio.d.ts +20 -0
- package/dist/visual-plan/interface/studio.d.ts.map +1 -0
- package/dist/visual-plan/interface/studio.js +74 -0
- package/dist/visual-plan/interface/studio.js.map +1 -0
- package/dist/visual-plan/server/csp.d.ts +13 -0
- package/dist/visual-plan/server/csp.d.ts.map +1 -0
- package/dist/visual-plan/server/csp.js +17 -0
- package/dist/visual-plan/server/csp.js.map +1 -0
- package/dist/visual-plan/server/edit-lock.d.ts +28 -0
- package/dist/visual-plan/server/edit-lock.d.ts.map +1 -0
- package/dist/visual-plan/server/edit-lock.js +71 -0
- package/dist/visual-plan/server/edit-lock.js.map +1 -0
- package/dist/visual-plan/server/routes/feedback.d.ts +12 -0
- package/dist/visual-plan/server/routes/feedback.d.ts.map +1 -0
- package/dist/visual-plan/server/routes/feedback.js +63 -0
- package/dist/visual-plan/server/routes/feedback.js.map +1 -0
- package/dist/visual-plan/server/routes/get-plan.d.ts +14 -0
- package/dist/visual-plan/server/routes/get-plan.d.ts.map +1 -0
- package/dist/visual-plan/server/routes/get-plan.js +38 -0
- package/dist/visual-plan/server/routes/get-plan.js.map +1 -0
- package/dist/visual-plan/server/routes/patch.d.ts +10 -0
- package/dist/visual-plan/server/routes/patch.d.ts.map +1 -0
- package/dist/visual-plan/server/routes/patch.js +66 -0
- package/dist/visual-plan/server/routes/patch.js.map +1 -0
- package/dist/visual-plan/server/visual-plan-server.d.ts +30 -0
- package/dist/visual-plan/server/visual-plan-server.d.ts.map +1 -0
- package/dist/visual-plan/server/visual-plan-server.js +79 -0
- package/dist/visual-plan/server/visual-plan-server.js.map +1 -0
- package/dist/visual-plan-web/architects-daughter-latin-400-normal.woff +0 -0
- package/dist/visual-plan-web/architects-daughter-latin-400-normal.woff2 +0 -0
- package/dist/visual-plan-web/architects-daughter-latin-ext-400-normal.woff +0 -0
- package/dist/visual-plan-web/architects-daughter-latin-ext-400-normal.woff2 +0 -0
- package/dist/visual-plan-web/index.css +1 -0
- package/dist/visual-plan-web/index.html +17 -0
- package/dist/visual-plan-web/index.js +51 -0
- package/package.json +14 -17
- package/dist/commands/evolve.d.ts +0 -11
- package/dist/commands/evolve.d.ts.map +0 -1
- package/dist/commands/evolve.js +0 -63
- package/dist/commands/evolve.js.map +0 -1
- package/dist/commands/health.d.ts +0 -14
- package/dist/commands/health.d.ts.map +0 -1
- package/dist/commands/health.js +0 -193
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/orchviz.d.ts +0 -12
- package/dist/commands/orchviz.d.ts.map +0 -1
- package/dist/commands/orchviz.js +0 -157
- package/dist/commands/orchviz.js.map +0 -1
- package/dist/commands/policy.d.ts +0 -8
- package/dist/commands/policy.d.ts.map +0 -1
- package/dist/commands/policy.js +0 -65
- package/dist/commands/policy.js.map +0 -1
- package/dist/commands/portability.d.ts +0 -7
- package/dist/commands/portability.d.ts.map +0 -1
- package/dist/commands/portability.js +0 -50
- package/dist/commands/portability.js.map +0 -1
- package/dist/commands/reflect.d.ts +0 -14
- package/dist/commands/reflect.d.ts.map +0 -1
- package/dist/commands/reflect.js +0 -135
- package/dist/commands/reflect.js.map +0 -1
- package/dist/commands/simulate.d.ts +0 -14
- package/dist/commands/simulate.d.ts.map +0 -1
- package/dist/commands/simulate.js +0 -86
- package/dist/commands/simulate.js.map +0 -1
- package/dist/core/event-log.d.ts +0 -44
- package/dist/core/event-log.d.ts.map +0 -1
- package/dist/core/event-log.js +0 -169
- package/dist/core/event-log.js.map +0 -1
- package/dist/core/evolution/event-clusters.d.ts +0 -4
- package/dist/core/evolution/event-clusters.d.ts.map +0 -1
- package/dist/core/evolution/event-clusters.js +0 -82
- package/dist/core/evolution/event-clusters.js.map +0 -1
- package/dist/core/evolution/recommendation-renderer.d.ts +0 -3
- package/dist/core/evolution/recommendation-renderer.d.ts.map +0 -1
- package/dist/core/evolution/recommendation-renderer.js +0 -24
- package/dist/core/evolution/recommendation-renderer.js.map +0 -1
- package/dist/core/evolution/review-failure-clusters.d.ts +0 -10
- package/dist/core/evolution/review-failure-clusters.d.ts.map +0 -1
- package/dist/core/evolution/review-failure-clusters.js +0 -30
- package/dist/core/evolution/review-failure-clusters.js.map +0 -1
- package/dist/core/evolution/suggestions.d.ts +0 -24
- package/dist/core/evolution/suggestions.d.ts.map +0 -1
- package/dist/core/evolution/suggestions.js +0 -11
- package/dist/core/evolution/suggestions.js.map +0 -1
- package/dist/core/gate-policy.d.ts +0 -20
- package/dist/core/gate-policy.d.ts.map +0 -1
- package/dist/core/gate-policy.js +0 -64
- package/dist/core/gate-policy.js.map +0 -1
- package/dist/core/portability-matrix.d.ts +0 -17
- package/dist/core/portability-matrix.d.ts.map +0 -1
- package/dist/core/portability-matrix.js +0 -31
- package/dist/core/portability-matrix.js.map +0 -1
- package/dist/core/simulation-runner.d.ts +0 -93
- package/dist/core/simulation-runner.d.ts.map +0 -1
- package/dist/core/simulation-runner.js +0 -161
- package/dist/core/simulation-runner.js.map +0 -1
- package/dist/core/usage/usage-analyzer.d.ts +0 -18
- package/dist/core/usage/usage-analyzer.d.ts.map +0 -1
- package/dist/core/usage/usage-analyzer.js +0 -41
- package/dist/core/usage/usage-analyzer.js.map +0 -1
- package/dist/memory/archive.d.ts +0 -9
- package/dist/memory/archive.d.ts.map +0 -1
- package/dist/memory/archive.js +0 -42
- package/dist/memory/archive.js.map +0 -1
- package/dist/memory/compact.d.ts +0 -9
- package/dist/memory/compact.d.ts.map +0 -1
- package/dist/memory/compact.js +0 -33
- package/dist/memory/compact.js.map +0 -1
- package/dist/memory/conflicts.d.ts +0 -8
- package/dist/memory/conflicts.d.ts.map +0 -1
- package/dist/memory/conflicts.js +0 -28
- package/dist/memory/conflicts.js.map +0 -1
- package/dist/memory/promote.d.ts +0 -8
- package/dist/memory/promote.d.ts.map +0 -1
- package/dist/memory/promote.js +0 -10
- package/dist/memory/promote.js.map +0 -1
- package/dist/memory/store-utils.d.ts +0 -14
- package/dist/memory/store-utils.d.ts.map +0 -1
- package/dist/memory/store-utils.js +0 -44
- package/dist/memory/store-utils.js.map +0 -1
- package/dist/migrate/__tests__/frontmatter-parser.test.d.ts +0 -2
- package/dist/migrate/__tests__/frontmatter-parser.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/frontmatter-parser.test.js +0 -73
- package/dist/migrate/__tests__/frontmatter-parser.test.js.map +0 -1
- package/dist/migrate/__tests__/md-strip-mewkit.test.d.ts +0 -2
- package/dist/migrate/__tests__/md-strip-mewkit.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/md-strip-mewkit.test.js +0 -55
- package/dist/migrate/__tests__/md-strip-mewkit.test.js.map +0 -1
- package/dist/migrate/__tests__/migrate-scope-resolver.test.d.ts +0 -2
- package/dist/migrate/__tests__/migrate-scope-resolver.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/migrate-scope-resolver.test.js +0 -53
- package/dist/migrate/__tests__/migrate-scope-resolver.test.js.map +0 -1
- package/dist/migrate/__tests__/process-lock.test.d.ts +0 -2
- package/dist/migrate/__tests__/process-lock.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/process-lock.test.js +0 -63
- package/dist/migrate/__tests__/process-lock.test.js.map +0 -1
- package/dist/migrate/__tests__/provider-registry.test.d.ts +0 -2
- package/dist/migrate/__tests__/provider-registry.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/provider-registry.test.js +0 -53
- package/dist/migrate/__tests__/provider-registry.test.js.map +0 -1
- package/dist/migrate/__tests__/reconciler.test.d.ts +0 -2
- package/dist/migrate/__tests__/reconciler.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/reconciler.test.js +0 -180
- package/dist/migrate/__tests__/reconciler.test.js.map +0 -1
- package/dist/migrate/__tests__/skill-id-utils.test.d.ts +0 -2
- package/dist/migrate/__tests__/skill-id-utils.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/skill-id-utils.test.js +0 -78
- package/dist/migrate/__tests__/skill-id-utils.test.js.map +0 -1
- package/dist/migrate/converters/md-to-codex-rules.d.ts +0 -10
- package/dist/migrate/converters/md-to-codex-rules.d.ts.map +0 -1
- package/dist/migrate/converters/md-to-codex-rules.js +0 -133
- package/dist/migrate/converters/md-to-codex-rules.js.map +0 -1
- package/dist/orchviz/constants.d.ts +0 -72
- package/dist/orchviz/constants.d.ts.map +0 -1
- package/dist/orchviz/constants.js +0 -105
- package/dist/orchviz/constants.js.map +0 -1
- package/dist/orchviz/fs-utils.d.ts +0 -24
- package/dist/orchviz/fs-utils.d.ts.map +0 -1
- package/dist/orchviz/fs-utils.js +0 -49
- package/dist/orchviz/fs-utils.js.map +0 -1
- package/dist/orchviz/index.d.ts +0 -29
- package/dist/orchviz/index.d.ts.map +0 -1
- package/dist/orchviz/index.js +0 -28
- package/dist/orchviz/index.js.map +0 -1
- package/dist/orchviz/log-persister.d.ts +0 -22
- package/dist/orchviz/log-persister.d.ts.map +0 -1
- package/dist/orchviz/log-persister.js +0 -96
- package/dist/orchviz/log-persister.js.map +0 -1
- package/dist/orchviz/logger.d.ts +0 -13
- package/dist/orchviz/logger.d.ts.map +0 -1
- package/dist/orchviz/logger.js +0 -47
- package/dist/orchviz/logger.js.map +0 -1
- package/dist/orchviz/open-url.d.ts +0 -11
- package/dist/orchviz/open-url.d.ts.map +0 -1
- package/dist/orchviz/open-url.js.map +0 -1
- package/dist/orchviz/overlay/collector.d.ts +0 -29
- package/dist/orchviz/overlay/collector.d.ts.map +0 -1
- package/dist/orchviz/overlay/collector.js +0 -38
- package/dist/orchviz/overlay/collector.js.map +0 -1
- package/dist/orchviz/overlay/gate-readers.d.ts +0 -18
- package/dist/orchviz/overlay/gate-readers.d.ts.map +0 -1
- package/dist/orchviz/overlay/gate-readers.js +0 -111
- package/dist/orchviz/overlay/gate-readers.js.map +0 -1
- package/dist/orchviz/overlay/session-state-readers.d.ts +0 -18
- package/dist/orchviz/overlay/session-state-readers.d.ts.map +0 -1
- package/dist/orchviz/overlay/session-state-readers.js +0 -78
- package/dist/orchviz/overlay/session-state-readers.js.map +0 -1
- package/dist/orchviz/parser/handle-progress.d.ts +0 -9
- package/dist/orchviz/parser/handle-progress.d.ts.map +0 -1
- package/dist/orchviz/parser/handle-progress.js +0 -38
- package/dist/orchviz/parser/handle-progress.js.map +0 -1
- package/dist/orchviz/parser/handle-system.d.ts +0 -22
- package/dist/orchviz/parser/handle-system.d.ts.map +0 -1
- package/dist/orchviz/parser/handle-system.js +0 -99
- package/dist/orchviz/parser/handle-system.js.map +0 -1
- package/dist/orchviz/parser/handle-text.d.ts +0 -10
- package/dist/orchviz/parser/handle-text.d.ts.map +0 -1
- package/dist/orchviz/parser/handle-text.js +0 -83
- package/dist/orchviz/parser/handle-text.js.map +0 -1
- package/dist/orchviz/parser/handle-thinking.d.ts +0 -10
- package/dist/orchviz/parser/handle-thinking.d.ts.map +0 -1
- package/dist/orchviz/parser/handle-thinking.js +0 -35
- package/dist/orchviz/parser/handle-thinking.js.map +0 -1
- package/dist/orchviz/parser/handle-tool-result.d.ts +0 -10
- package/dist/orchviz/parser/handle-tool-result.d.ts.map +0 -1
- package/dist/orchviz/parser/handle-tool-result.js +0 -130
- package/dist/orchviz/parser/handle-tool-result.js.map +0 -1
- package/dist/orchviz/parser/handle-tool-use.d.ts +0 -11
- package/dist/orchviz/parser/handle-tool-use.d.ts.map +0 -1
- package/dist/orchviz/parser/handle-tool-use.js +0 -120
- package/dist/orchviz/parser/handle-tool-use.js.map +0 -1
- package/dist/orchviz/parser/index.d.ts +0 -38
- package/dist/orchviz/parser/index.d.ts.map +0 -1
- package/dist/orchviz/parser/index.js +0 -144
- package/dist/orchviz/parser/index.js.map +0 -1
- package/dist/orchviz/parser/label-helpers.d.ts +0 -9
- package/dist/orchviz/parser/label-helpers.d.ts.map +0 -1
- package/dist/orchviz/parser/label-helpers.js +0 -44
- package/dist/orchviz/parser/label-helpers.js.map +0 -1
- package/dist/orchviz/parser/strip-ansi.d.ts +0 -6
- package/dist/orchviz/parser/strip-ansi.d.ts.map +0 -1
- package/dist/orchviz/parser/strip-ansi.js +0 -14
- package/dist/orchviz/parser/strip-ansi.js.map +0 -1
- package/dist/orchviz/parser/utils.d.ts +0 -20
- package/dist/orchviz/parser/utils.d.ts.map +0 -1
- package/dist/orchviz/parser/utils.js +0 -54
- package/dist/orchviz/parser/utils.js.map +0 -1
- package/dist/orchviz/permission-detection.d.ts +0 -32
- package/dist/orchviz/permission-detection.d.ts.map +0 -1
- package/dist/orchviz/permission-detection.js +0 -104
- package/dist/orchviz/permission-detection.js.map +0 -1
- package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.d.ts +0 -15
- package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.js +0 -165
- package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/atomic-write.test.d.ts +0 -11
- package/dist/orchviz/plan/__tests__/atomic-write.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/atomic-write.test.js +0 -89
- package/dist/orchviz/plan/__tests__/atomic-write.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/end-to-end.test.d.ts +0 -10
- package/dist/orchviz/plan/__tests__/end-to-end.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/end-to-end.test.js +0 -132
- package/dist/orchviz/plan/__tests__/end-to-end.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/etag.test.d.ts +0 -11
- package/dist/orchviz/plan/__tests__/etag.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/etag.test.js +0 -92
- package/dist/orchviz/plan/__tests__/etag.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/list-plans.test.d.ts +0 -14
- package/dist/orchviz/plan/__tests__/list-plans.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/list-plans.test.js +0 -154
- package/dist/orchviz/plan/__tests__/list-plans.test.js.map +0 -1
- package/dist/orchviz/plan/apply-todo-toggle.d.ts +0 -29
- package/dist/orchviz/plan/apply-todo-toggle.d.ts.map +0 -1
- package/dist/orchviz/plan/apply-todo-toggle.js +0 -129
- package/dist/orchviz/plan/apply-todo-toggle.js.map +0 -1
- package/dist/orchviz/plan/atomic-write.d.ts +0 -25
- package/dist/orchviz/plan/atomic-write.d.ts.map +0 -1
- package/dist/orchviz/plan/atomic-write.js +0 -85
- package/dist/orchviz/plan/atomic-write.js.map +0 -1
- package/dist/orchviz/plan/collector.d.ts +0 -49
- package/dist/orchviz/plan/collector.d.ts.map +0 -1
- package/dist/orchviz/plan/collector.js +0 -169
- package/dist/orchviz/plan/collector.js.map +0 -1
- package/dist/orchviz/plan/etag.d.ts +0 -24
- package/dist/orchviz/plan/etag.d.ts.map +0 -1
- package/dist/orchviz/plan/etag.js +0 -58
- package/dist/orchviz/plan/etag.js.map +0 -1
- package/dist/orchviz/plan/find-active-plan.d.ts +0 -9
- package/dist/orchviz/plan/find-active-plan.d.ts.map +0 -1
- package/dist/orchviz/plan/find-active-plan.js +0 -90
- package/dist/orchviz/plan/find-active-plan.js.map +0 -1
- package/dist/orchviz/plan/index.d.ts +0 -23
- package/dist/orchviz/plan/index.d.ts.map +0 -1
- package/dist/orchviz/plan/index.js +0 -91
- package/dist/orchviz/plan/index.js.map +0 -1
- package/dist/orchviz/plan/list-plans.d.ts +0 -19
- package/dist/orchviz/plan/list-plans.d.ts.map +0 -1
- package/dist/orchviz/plan/list-plans.js +0 -143
- package/dist/orchviz/plan/list-plans.js.map +0 -1
- package/dist/orchviz/plan/parse-phase-file.d.ts +0 -13
- package/dist/orchviz/plan/parse-phase-file.d.ts.map +0 -1
- package/dist/orchviz/plan/parse-phase-file.js +0 -134
- package/dist/orchviz/plan/parse-phase-file.js.map +0 -1
- package/dist/orchviz/plan/parse-plan-file.d.ts +0 -19
- package/dist/orchviz/plan/parse-plan-file.d.ts.map +0 -1
- package/dist/orchviz/plan/parse-plan-file.js +0 -62
- package/dist/orchviz/plan/parse-plan-file.js.map +0 -1
- package/dist/orchviz/plan/plan-constants.d.ts +0 -17
- package/dist/orchviz/plan/plan-constants.d.ts.map +0 -1
- package/dist/orchviz/plan/plan-constants.js +0 -19
- package/dist/orchviz/plan/plan-constants.js.map +0 -1
- package/dist/orchviz/plan/plan-lifecycle.d.ts +0 -17
- package/dist/orchviz/plan/plan-lifecycle.d.ts.map +0 -1
- package/dist/orchviz/plan/plan-lifecycle.js +0 -97
- package/dist/orchviz/plan/plan-lifecycle.js.map +0 -1
- package/dist/orchviz/plan/types.d.ts +0 -46
- package/dist/orchviz/plan/types.d.ts.map +0 -1
- package/dist/orchviz/plan/types.js +0 -6
- package/dist/orchviz/plan/types.js.map +0 -1
- package/dist/orchviz/protocol.d.ts +0 -171
- package/dist/orchviz/protocol.d.ts.map +0 -1
- package/dist/orchviz/protocol.js +0 -23
- package/dist/orchviz/protocol.js.map +0 -1
- package/dist/orchviz/redact.d.ts +0 -10
- package/dist/orchviz/redact.d.ts.map +0 -1
- package/dist/orchviz/redact.js +0 -38
- package/dist/orchviz/redact.js.map +0 -1
- package/dist/orchviz/sanitize.d.ts +0 -11
- package/dist/orchviz/sanitize.d.ts.map +0 -1
- package/dist/orchviz/sanitize.js +0 -38
- package/dist/orchviz/sanitize.js.map +0 -1
- package/dist/orchviz/server/__tests__/security-smoke.test.d.ts +0 -13
- package/dist/orchviz/server/__tests__/security-smoke.test.d.ts.map +0 -1
- package/dist/orchviz/server/__tests__/security-smoke.test.js +0 -207
- package/dist/orchviz/server/__tests__/security-smoke.test.js.map +0 -1
- package/dist/orchviz/server/__tests__/write-handlers.test.d.ts +0 -24
- package/dist/orchviz/server/__tests__/write-handlers.test.d.ts.map +0 -1
- package/dist/orchviz/server/__tests__/write-handlers.test.js +0 -347
- package/dist/orchviz/server/__tests__/write-handlers.test.js.map +0 -1
- package/dist/orchviz/server/api-handlers.d.ts +0 -55
- package/dist/orchviz/server/api-handlers.d.ts.map +0 -1
- package/dist/orchviz/server/api-handlers.js +0 -112
- package/dist/orchviz/server/api-handlers.js.map +0 -1
- package/dist/orchviz/server/index.d.ts +0 -36
- package/dist/orchviz/server/index.d.ts.map +0 -1
- package/dist/orchviz/server/index.js +0 -144
- package/dist/orchviz/server/index.js.map +0 -1
- package/dist/orchviz/server/sse-handler.d.ts +0 -28
- package/dist/orchviz/server/sse-handler.d.ts.map +0 -1
- package/dist/orchviz/server/sse-handler.js +0 -217
- package/dist/orchviz/server/sse-handler.js.map +0 -1
- package/dist/orchviz/server/static-handler.d.ts +0 -9
- package/dist/orchviz/server/static-handler.d.ts.map +0 -1
- package/dist/orchviz/server/static-handler.js.map +0 -1
- package/dist/orchviz/server/write-handlers.d.ts +0 -20
- package/dist/orchviz/server/write-handlers.d.ts.map +0 -1
- package/dist/orchviz/server/write-handlers.js +0 -184
- package/dist/orchviz/server/write-handlers.js.map +0 -1
- package/dist/orchviz/server/write-utils.d.ts +0 -59
- package/dist/orchviz/server/write-utils.d.ts.map +0 -1
- package/dist/orchviz/server/write-utils.js +0 -161
- package/dist/orchviz/server/write-utils.js.map +0 -1
- package/dist/orchviz/session-discovery.d.ts +0 -19
- package/dist/orchviz/session-discovery.d.ts.map +0 -1
- package/dist/orchviz/session-discovery.js +0 -104
- package/dist/orchviz/session-discovery.js.map +0 -1
- package/dist/orchviz/session-manager.d.ts +0 -17
- package/dist/orchviz/session-manager.d.ts.map +0 -1
- package/dist/orchviz/session-manager.js +0 -63
- package/dist/orchviz/session-manager.js.map +0 -1
- package/dist/orchviz/session-runtime.d.ts +0 -21
- package/dist/orchviz/session-runtime.d.ts.map +0 -1
- package/dist/orchviz/session-runtime.js +0 -135
- package/dist/orchviz/session-runtime.js.map +0 -1
- package/dist/orchviz/session-watcher.d.ts +0 -33
- package/dist/orchviz/session-watcher.d.ts.map +0 -1
- package/dist/orchviz/session-watcher.js +0 -135
- package/dist/orchviz/session-watcher.js.map +0 -1
- package/dist/orchviz/subagent-meta.d.ts +0 -12
- package/dist/orchviz/subagent-meta.d.ts.map +0 -1
- package/dist/orchviz/subagent-meta.js +0 -34
- package/dist/orchviz/subagent-meta.js.map +0 -1
- package/dist/orchviz/subagent-scanner.d.ts +0 -15
- package/dist/orchviz/subagent-scanner.d.ts.map +0 -1
- package/dist/orchviz/subagent-scanner.js +0 -27
- package/dist/orchviz/subagent-scanner.js.map +0 -1
- package/dist/orchviz/subagent-watcher.d.ts +0 -20
- package/dist/orchviz/subagent-watcher.d.ts.map +0 -1
- package/dist/orchviz/subagent-watcher.js +0 -160
- package/dist/orchviz/subagent-watcher.js.map +0 -1
- package/dist/orchviz/test-server-boot.d.ts +0 -28
- package/dist/orchviz/test-server-boot.d.ts.map +0 -1
- package/dist/orchviz/test-server-boot.js +0 -64
- package/dist/orchviz/test-server-boot.js.map +0 -1
- package/dist/orchviz/token-estimator.d.ts.map +0 -1
- package/dist/orchviz/token-estimator.js.map +0 -1
- package/dist/orchviz/tool-input-data.d.ts +0 -11
- package/dist/orchviz/tool-input-data.d.ts.map +0 -1
- package/dist/orchviz/tool-input-data.js +0 -74
- package/dist/orchviz/tool-input-data.js.map +0 -1
- package/dist/orchviz/tool-summarizer.d.ts +0 -16
- package/dist/orchviz/tool-summarizer.d.ts.map +0 -1
- package/dist/orchviz/tool-summarizer.js +0 -129
- package/dist/orchviz/tool-summarizer.js.map +0 -1
- package/dist/orchviz-web/fira-code-cyrillic-400-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-cyrillic-400-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-cyrillic-500-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-cyrillic-500-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-cyrillic-ext-400-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-cyrillic-ext-500-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-cyrillic-ext-500-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-greek-400-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-greek-400-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-greek-500-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-greek-500-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-greek-ext-400-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-greek-ext-400-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-greek-ext-500-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-greek-ext-500-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-latin-400-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-latin-400-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-latin-500-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-latin-500-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-latin-ext-400-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-latin-ext-400-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-latin-ext-500-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-latin-ext-500-normal.woff2 +0 -0
- package/dist/orchviz-web/fira-code-symbols2-400-normal.woff +0 -0
- package/dist/orchviz-web/fira-code-symbols2-500-normal.woff +0 -0
- package/dist/orchviz-web/index.css +0 -1
- package/dist/orchviz-web/index.html +0 -18
- package/dist/orchviz-web/index.js +0 -53
- package/dist/orchviz-web/inter-cyrillic-400-normal.woff +0 -0
- package/dist/orchviz-web/inter-cyrillic-400-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-cyrillic-500-normal.woff +0 -0
- package/dist/orchviz-web/inter-cyrillic-500-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-cyrillic-600-normal.woff +0 -0
- package/dist/orchviz-web/inter-cyrillic-600-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-cyrillic-ext-400-normal.woff +0 -0
- package/dist/orchviz-web/inter-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-cyrillic-ext-500-normal.woff +0 -0
- package/dist/orchviz-web/inter-cyrillic-ext-500-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-cyrillic-ext-600-normal.woff +0 -0
- package/dist/orchviz-web/inter-cyrillic-ext-600-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-greek-400-normal.woff +0 -0
- package/dist/orchviz-web/inter-greek-400-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-greek-500-normal.woff +0 -0
- package/dist/orchviz-web/inter-greek-500-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-greek-600-normal.woff +0 -0
- package/dist/orchviz-web/inter-greek-600-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-greek-ext-400-normal.woff +0 -0
- package/dist/orchviz-web/inter-greek-ext-400-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-greek-ext-500-normal.woff +0 -0
- package/dist/orchviz-web/inter-greek-ext-500-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-greek-ext-600-normal.woff +0 -0
- package/dist/orchviz-web/inter-greek-ext-600-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-latin-400-normal.woff +0 -0
- package/dist/orchviz-web/inter-latin-400-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-latin-500-normal.woff +0 -0
- package/dist/orchviz-web/inter-latin-500-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-latin-600-normal.woff +0 -0
- package/dist/orchviz-web/inter-latin-600-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-latin-ext-400-normal.woff +0 -0
- package/dist/orchviz-web/inter-latin-ext-400-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-latin-ext-500-normal.woff +0 -0
- package/dist/orchviz-web/inter-latin-ext-500-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-latin-ext-600-normal.woff +0 -0
- package/dist/orchviz-web/inter-latin-ext-600-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-vietnamese-400-normal.woff +0 -0
- package/dist/orchviz-web/inter-vietnamese-400-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-vietnamese-500-normal.woff +0 -0
- package/dist/orchviz-web/inter-vietnamese-500-normal.woff2 +0 -0
- package/dist/orchviz-web/inter-vietnamese-600-normal.woff +0 -0
- package/dist/orchviz-web/inter-vietnamese-600-normal.woff2 +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolution-receipt storage under `<plan-dir>/visual-plan/resolutions/`.
|
|
3
|
+
*
|
|
4
|
+
* A receipt records the per-operation outcome of applying a feedback batch
|
|
5
|
+
* (applied | rejected | unresolved). Receipt EXISTENCE is the "batch resolved"
|
|
6
|
+
* marker — the batch file itself stays byte-immutable. `writeReceipt` is
|
|
7
|
+
* write-once (a second apply of the same batch is refused). The batch/receipt id
|
|
8
|
+
* is validated against the strict pattern BEFORE any path join (red-team M8).
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from "node:fs";
|
|
11
|
+
import * as path from "node:path";
|
|
12
|
+
import { isValidFeedbackBatchId } from "../domain/ids.js";
|
|
13
|
+
import { ResolutionReceiptSchema } from "../domain/feedback-schemas.js";
|
|
14
|
+
import { atomicWriteFileSync } from "./atomic-write.js";
|
|
15
|
+
const RESOLUTIONS_DIR = path.join("visual-plan", "resolutions");
|
|
16
|
+
/** Receipt path for a batch id, validating the id BEFORE the join. Throws on a bad id. */
|
|
17
|
+
function receiptPath(planDir, batchId) {
|
|
18
|
+
if (!isValidFeedbackBatchId(batchId))
|
|
19
|
+
throw new Error(`invalid batch id: ${JSON.stringify(batchId)}`);
|
|
20
|
+
return path.join(planDir, RESOLUTIONS_DIR, `${batchId}.json`);
|
|
21
|
+
}
|
|
22
|
+
/** True when a resolution receipt already exists for this batch (⇒ already applied). */
|
|
23
|
+
export function receiptExists(planDir, batchId) {
|
|
24
|
+
return fs.existsSync(receiptPath(planDir, batchId));
|
|
25
|
+
}
|
|
26
|
+
/** Persist a receipt write-once. Returns false if a receipt for this batch already exists. */
|
|
27
|
+
export function writeReceipt(planDir, receipt) {
|
|
28
|
+
const file = receiptPath(planDir, receipt.batchId);
|
|
29
|
+
if (fs.existsSync(file))
|
|
30
|
+
return false; // double-apply guard
|
|
31
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
32
|
+
atomicWriteFileSync(file, `${JSON.stringify(receipt, null, 2)}\n`);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
/** Read + validate every receipt in the plan (for approve's unresolved-check). */
|
|
36
|
+
export function listReceipts(planDir) {
|
|
37
|
+
let entries;
|
|
38
|
+
try {
|
|
39
|
+
entries = fs.readdirSync(path.join(planDir, RESOLUTIONS_DIR));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
const out = [];
|
|
45
|
+
for (const name of entries) {
|
|
46
|
+
if (!name.endsWith(".json"))
|
|
47
|
+
continue;
|
|
48
|
+
try {
|
|
49
|
+
const parsed = ResolutionReceiptSchema.safeParse(JSON.parse(fs.readFileSync(path.join(planDir, RESOLUTIONS_DIR, name), "utf-8")));
|
|
50
|
+
if (parsed.success)
|
|
51
|
+
out.push(parsed.data);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// skip unreadable/invalid receipt
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=receipt-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt-repository.js","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/receipt-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAA0B,MAAM,+BAA+B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAEhE,0FAA0F;AAC1F,SAAS,WAAW,CAAC,OAAe,EAAE,OAAe;IACpD,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtG,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,OAAe;IAC7D,OAAO,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAA0B;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,qBAAqB;IAC5D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,mBAAmB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACb,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC3C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAY,CAAC,CAAC;YAC7I,IAAI,MAAM,CAAC,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACR,kCAAkC;QACnC,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem gateway for the canonical visual artifact.
|
|
3
|
+
*
|
|
4
|
+
* The artifact always lives at `<plan-dir>/visual-plan/plan.json`. All access
|
|
5
|
+
* goes through realpath containment: the resolved artifact path MUST stay
|
|
6
|
+
* inside the resolved plan directory, so a symlinked `visual-plan/` cannot
|
|
7
|
+
* redirect reads/writes outside the plan (non-functional requirement: no path
|
|
8
|
+
* escapes the plan directory). Writes are atomic (same-dir tmp + rename).
|
|
9
|
+
*/
|
|
10
|
+
import { type ValidationError } from "../domain/errors.js";
|
|
11
|
+
/** Artifact location relative to the plan directory. */
|
|
12
|
+
export declare const ARTIFACT_REL_PATH: string;
|
|
13
|
+
/** Thrown when a plan directory or artifact path fails containment/existence checks. */
|
|
14
|
+
export declare class PlanPathError extends Error {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
/** Resolve `input` to an existing directory's realpath. Throws `PlanPathError` otherwise. */
|
|
18
|
+
export declare function resolvePlanDir(input: string): string;
|
|
19
|
+
/** Absolute artifact path, guaranteed contained within `planDir` (realpath checks). */
|
|
20
|
+
export declare function artifactPath(planDir: string): string;
|
|
21
|
+
/** True when an artifact file exists for this plan directory. */
|
|
22
|
+
export declare function artifactExists(planDir: string): boolean;
|
|
23
|
+
export interface RawArtifactRead {
|
|
24
|
+
raw?: unknown;
|
|
25
|
+
error?: ValidationError;
|
|
26
|
+
}
|
|
27
|
+
/** Read + JSON-parse the artifact. Missing/invalid file yields a typed error, never a throw. */
|
|
28
|
+
export declare function readArtifactRaw(planDir: string): RawArtifactRead;
|
|
29
|
+
/**
|
|
30
|
+
* Canonical on-disk serialization for the artifact (pretty JSON + trailing
|
|
31
|
+
* newline). Exposed so a caller can hash the EXACT bytes a subsequent
|
|
32
|
+
* `writeArtifact` will persist (used by prepare-feedback for a crash-safe
|
|
33
|
+
* batch-then-artifact write order).
|
|
34
|
+
*/
|
|
35
|
+
export declare function serializeArtifact(artifact: unknown): string;
|
|
36
|
+
/** Atomically write the artifact as canonical pretty JSON. */
|
|
37
|
+
export declare function writeArtifact(planDir: string, artifact: unknown): void;
|
|
38
|
+
//# sourceMappingURL=visual-plan-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual-plan-repository.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/visual-plan-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3E,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,QAAwC,CAAC;AAEvE,wFAAwF;AACxF,qBAAa,aAAc,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI3B;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYpD;AAQD,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBpD;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAchE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAEtE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem gateway for the canonical visual artifact.
|
|
3
|
+
*
|
|
4
|
+
* The artifact always lives at `<plan-dir>/visual-plan/plan.json`. All access
|
|
5
|
+
* goes through realpath containment: the resolved artifact path MUST stay
|
|
6
|
+
* inside the resolved plan directory, so a symlinked `visual-plan/` cannot
|
|
7
|
+
* redirect reads/writes outside the plan (non-functional requirement: no path
|
|
8
|
+
* escapes the plan directory). Writes are atomic (same-dir tmp + rename).
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from "node:fs";
|
|
11
|
+
import * as path from "node:path";
|
|
12
|
+
import { err, ErrorCode } from "../domain/errors.js";
|
|
13
|
+
import { atomicWriteFileSync } from "./atomic-write.js";
|
|
14
|
+
/** Artifact location relative to the plan directory. */
|
|
15
|
+
export const ARTIFACT_REL_PATH = path.join("visual-plan", "plan.json");
|
|
16
|
+
/** Thrown when a plan directory or artifact path fails containment/existence checks. */
|
|
17
|
+
export class PlanPathError extends Error {
|
|
18
|
+
constructor(message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = "PlanPathError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Resolve `input` to an existing directory's realpath. Throws `PlanPathError` otherwise. */
|
|
24
|
+
export function resolvePlanDir(input) {
|
|
25
|
+
const abs = path.resolve(input);
|
|
26
|
+
let real;
|
|
27
|
+
try {
|
|
28
|
+
real = fs.realpathSync(abs);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
throw new PlanPathError(`plan directory not found: ${abs}`);
|
|
32
|
+
}
|
|
33
|
+
if (!fs.statSync(real).isDirectory()) {
|
|
34
|
+
throw new PlanPathError(`not a directory: ${real}`);
|
|
35
|
+
}
|
|
36
|
+
return real;
|
|
37
|
+
}
|
|
38
|
+
/** True when `candidate`'s realpath is `planDir` itself or strictly inside it. */
|
|
39
|
+
function isContained(candidate, realPlan) {
|
|
40
|
+
const real = fs.realpathSync(candidate);
|
|
41
|
+
return real === realPlan || real.startsWith(realPlan + path.sep);
|
|
42
|
+
}
|
|
43
|
+
/** Absolute artifact path, guaranteed contained within `planDir` (realpath checks). */
|
|
44
|
+
export function artifactPath(planDir) {
|
|
45
|
+
const full = path.resolve(planDir, ARTIFACT_REL_PATH);
|
|
46
|
+
const rel = path.relative(planDir, full);
|
|
47
|
+
if (rel.startsWith("..") || path.isAbsolute(rel)) {
|
|
48
|
+
throw new PlanPathError(`artifact path escapes plan directory: ${full}`);
|
|
49
|
+
}
|
|
50
|
+
const realPlan = fs.realpathSync(planDir);
|
|
51
|
+
// Guard against a symlinked visual-plan/ directory redirecting outside the plan dir.
|
|
52
|
+
const dir = path.dirname(full);
|
|
53
|
+
if (fs.existsSync(dir) && !isContained(dir, realPlan)) {
|
|
54
|
+
throw new PlanPathError(`visual-plan directory resolves outside the plan directory: ${fs.realpathSync(dir)}`);
|
|
55
|
+
}
|
|
56
|
+
// Guard against a symlinked plan.json file redirecting reads outside the plan dir.
|
|
57
|
+
if (fs.existsSync(full) && !isContained(full, realPlan)) {
|
|
58
|
+
throw new PlanPathError(`artifact file resolves outside the plan directory: ${fs.realpathSync(full)}`);
|
|
59
|
+
}
|
|
60
|
+
return full;
|
|
61
|
+
}
|
|
62
|
+
/** True when an artifact file exists for this plan directory. */
|
|
63
|
+
export function artifactExists(planDir) {
|
|
64
|
+
return fs.existsSync(artifactPath(planDir));
|
|
65
|
+
}
|
|
66
|
+
/** Read + JSON-parse the artifact. Missing/invalid file yields a typed error, never a throw. */
|
|
67
|
+
export function readArtifactRaw(planDir) {
|
|
68
|
+
const full = artifactPath(planDir);
|
|
69
|
+
let text;
|
|
70
|
+
try {
|
|
71
|
+
text = fs.readFileSync(full, "utf-8");
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return { error: err(ARTIFACT_REL_PATH, ErrorCode.ARTIFACT_MISSING, `no visual artifact at ${ARTIFACT_REL_PATH}`) };
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
return { raw: JSON.parse(text) };
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
const detail = e instanceof Error ? e.message : String(e);
|
|
81
|
+
return { error: err(ARTIFACT_REL_PATH, ErrorCode.ARTIFACT_INVALID_JSON, `artifact is not valid JSON: ${detail}`) };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Canonical on-disk serialization for the artifact (pretty JSON + trailing
|
|
86
|
+
* newline). Exposed so a caller can hash the EXACT bytes a subsequent
|
|
87
|
+
* `writeArtifact` will persist (used by prepare-feedback for a crash-safe
|
|
88
|
+
* batch-then-artifact write order).
|
|
89
|
+
*/
|
|
90
|
+
export function serializeArtifact(artifact) {
|
|
91
|
+
return `${JSON.stringify(artifact, null, 2)}\n`;
|
|
92
|
+
}
|
|
93
|
+
/** Atomically write the artifact as canonical pretty JSON. */
|
|
94
|
+
export function writeArtifact(planDir, artifact) {
|
|
95
|
+
atomicWriteFileSync(artifactPath(planDir), serializeArtifact(artifact));
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=visual-plan-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual-plan-repository.js","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/visual-plan-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAwB,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAEvE,wFAAwF;AACxF,MAAM,OAAO,aAAc,SAAQ,KAAK;IACvC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC7B,CAAC;CACD;AAED,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAAC,KAAa;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACJ,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,aAAa,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,aAAa,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,kFAAkF;AAClF,SAAS,WAAW,CAAC,SAAiB,EAAE,QAAgB;IACvD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACxC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,aAAa,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,qFAAqF;IACrF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,aAAa,CAAC,8DAA8D,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/G,CAAC;IACD,mFAAmF;IACnF,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,aAAa,CAAC,sDAAsD,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,OAAe;IAC7C,OAAO,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7C,CAAC;AAOD,gGAAgG;AAChG,MAAM,UAAU,eAAe,CAAC,OAAe;IAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACJ,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACpH,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,qBAAqB,EAAE,+BAA+B,MAAM,EAAE,CAAC,EAAE,CAAC;IACpH,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAiB;IAClD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,QAAiB;IAC/D,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Save-time wireframe sanitizer (Node side, jsdom-backed DOMPurify).
|
|
3
|
+
*
|
|
4
|
+
* Engine decision (red-team H2): ONE vetted engine — DOMPurify — on both sides.
|
|
5
|
+
* MeowKit has no HTML parser in runtime deps today; DOMPurify + jsdom are added
|
|
6
|
+
* as runtime deps precisely for this. Regex-only sanitization is forbidden.
|
|
7
|
+
*
|
|
8
|
+
* Reject, not repair: we normalize the input through the DOM (so pure formatting
|
|
9
|
+
* differences — quote style, self-closing, whitespace — do NOT count), then
|
|
10
|
+
* sanitize with the SHARED allowlist config. If the sanitized output differs
|
|
11
|
+
* from the normalized input, the sanitizer removed something unsafe/unlisted and
|
|
12
|
+
* we REJECT with a JSON path. The Phase-4 browser renderer re-runs the identical
|
|
13
|
+
* engine + config; the shared adversarial corpus runs in both environments.
|
|
14
|
+
*/
|
|
15
|
+
/** Result of a reject-mode sanitize check. `safe:false` carries a short reason. */
|
|
16
|
+
export interface SanitizeCheck {
|
|
17
|
+
safe: boolean;
|
|
18
|
+
reason?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* True when `html` is safe under the shared allowlist. Any content DOMPurify
|
|
22
|
+
* would strip (disallowed tag/attr, unsafe URL scheme, event handler, inline
|
|
23
|
+
* style, SVG/MathML) makes it unsafe — the artifact is rejected, never repaired.
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkWireframeHtml(html: string): SanitizeCheck;
|
|
26
|
+
/**
|
|
27
|
+
* Return the SANITIZED wireframe HTML (safe to embed). Used by the HTML export
|
|
28
|
+
* to inline wireframes offline. The artifact was already reject-validated at
|
|
29
|
+
* save time; this re-sanitize is the export's own boundary.
|
|
30
|
+
*/
|
|
31
|
+
export declare function sanitizeWireframeHtml(html: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Replace the TEXT content of a schema-backed wireframe field (Phase 5 edit).
|
|
34
|
+
* The field is targeted by a `wf-field-<fieldId>` class (class is allowlisted, so
|
|
35
|
+
* no sanitizer-config change is needed). `textContent` assignment escapes the
|
|
36
|
+
* new value, so an edit can never introduce markup. `fieldId` is charset-safe
|
|
37
|
+
* (ENTITY_ID_RE) so it is a valid class token. Returns null if the field is
|
|
38
|
+
* absent (the caller rejects the patch).
|
|
39
|
+
*/
|
|
40
|
+
export declare function editWireframeField(html: string, fieldId: string, text: string): string | null;
|
|
41
|
+
//# sourceMappingURL=wireframe-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireframe-sanitizer.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/wireframe-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO7F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Save-time wireframe sanitizer (Node side, jsdom-backed DOMPurify).
|
|
3
|
+
*
|
|
4
|
+
* Engine decision (red-team H2): ONE vetted engine — DOMPurify — on both sides.
|
|
5
|
+
* MeowKit has no HTML parser in runtime deps today; DOMPurify + jsdom are added
|
|
6
|
+
* as runtime deps precisely for this. Regex-only sanitization is forbidden.
|
|
7
|
+
*
|
|
8
|
+
* Reject, not repair: we normalize the input through the DOM (so pure formatting
|
|
9
|
+
* differences — quote style, self-closing, whitespace — do NOT count), then
|
|
10
|
+
* sanitize with the SHARED allowlist config. If the sanitized output differs
|
|
11
|
+
* from the normalized input, the sanitizer removed something unsafe/unlisted and
|
|
12
|
+
* we REJECT with a JSON path. The Phase-4 browser renderer re-runs the identical
|
|
13
|
+
* engine + config; the shared adversarial corpus runs in both environments.
|
|
14
|
+
*/
|
|
15
|
+
import createDOMPurify from "dompurify";
|
|
16
|
+
import { JSDOM } from "jsdom";
|
|
17
|
+
import { WIREFRAME_SANITIZE_CONFIG } from "../domain/sanitizer-config.js";
|
|
18
|
+
// One jsdom window + DOMPurify instance for the process. jsdom is heavy to
|
|
19
|
+
// construct; reuse is safe because sanitize() is stateless per call.
|
|
20
|
+
const jsdomWindow = new JSDOM("").window;
|
|
21
|
+
const purify = createDOMPurify(jsdomWindow);
|
|
22
|
+
/**
|
|
23
|
+
* DOM-normalize `html` so the reject-diff ignores cosmetic reformatting: set it
|
|
24
|
+
* as innerHTML on a detached element and read it back. Both the normalized input
|
|
25
|
+
* and the DOMPurify output pass through this same DOM serialization path.
|
|
26
|
+
*/
|
|
27
|
+
function domNormalize(html) {
|
|
28
|
+
const el = jsdomWindow.document.createElement("div");
|
|
29
|
+
el.innerHTML = html;
|
|
30
|
+
return el.innerHTML;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* True when `html` is safe under the shared allowlist. Any content DOMPurify
|
|
34
|
+
* would strip (disallowed tag/attr, unsafe URL scheme, event handler, inline
|
|
35
|
+
* style, SVG/MathML) makes it unsafe — the artifact is rejected, never repaired.
|
|
36
|
+
*/
|
|
37
|
+
export function checkWireframeHtml(html) {
|
|
38
|
+
const normalized = domNormalize(html);
|
|
39
|
+
const clean = purify.sanitize(html, WIREFRAME_SANITIZE_CONFIG);
|
|
40
|
+
if (clean === normalized)
|
|
41
|
+
return { safe: true };
|
|
42
|
+
return {
|
|
43
|
+
safe: false,
|
|
44
|
+
reason: "wireframe HTML contains disallowed or unsafe markup (sanitizer would strip content — reject, not repair)",
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Return the SANITIZED wireframe HTML (safe to embed). Used by the HTML export
|
|
49
|
+
* to inline wireframes offline. The artifact was already reject-validated at
|
|
50
|
+
* save time; this re-sanitize is the export's own boundary.
|
|
51
|
+
*/
|
|
52
|
+
export function sanitizeWireframeHtml(html) {
|
|
53
|
+
return purify.sanitize(html, WIREFRAME_SANITIZE_CONFIG);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Replace the TEXT content of a schema-backed wireframe field (Phase 5 edit).
|
|
57
|
+
* The field is targeted by a `wf-field-<fieldId>` class (class is allowlisted, so
|
|
58
|
+
* no sanitizer-config change is needed). `textContent` assignment escapes the
|
|
59
|
+
* new value, so an edit can never introduce markup. `fieldId` is charset-safe
|
|
60
|
+
* (ENTITY_ID_RE) so it is a valid class token. Returns null if the field is
|
|
61
|
+
* absent (the caller rejects the patch).
|
|
62
|
+
*/
|
|
63
|
+
export function editWireframeField(html, fieldId, text) {
|
|
64
|
+
const el = jsdomWindow.document.createElement("div");
|
|
65
|
+
el.innerHTML = html;
|
|
66
|
+
const target = el.querySelector(`.wf-field-${fieldId}`);
|
|
67
|
+
if (!target)
|
|
68
|
+
return null;
|
|
69
|
+
target.textContent = text;
|
|
70
|
+
return el.innerHTML;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=wireframe-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireframe-sanitizer.js","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/wireframe-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,eAAe,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,2EAA2E;AAC3E,qEAAqE;AACrE,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AACzC,MAAM,MAAM,GAAG,eAAe,CAAC,WAA+D,CAAC,CAAC;AAQhG;;;;GAIG;AACH,SAAS,YAAY,CAAC,IAAY;IACjC,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrD,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,CAAC,SAAS,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAC/D,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,OAAO;QACN,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,0GAA0G;KAClH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IACjD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAe,EAAE,IAAY;IAC7E,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrD,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;IACpB,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,CAAC,SAAS,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mewkit visual-plan <subcommand>` dispatch + reporter.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands: validate | status | approve | rehash | export | prepare-feedback
|
|
5
|
+
* (sync) and edit | view (long-running studio). Each resolves
|
|
6
|
+
* the plan directory, runs the matching application function, and reports in
|
|
7
|
+
* human or `--json` form. Exit codes: 0 ok, 1 contract/precondition failure,
|
|
8
|
+
* 2 usage/path error. Sets `process.exitCode` (never calls `process.exit`) so
|
|
9
|
+
* the surface stays unit-testable.
|
|
10
|
+
*/
|
|
11
|
+
export interface VisualPlanCliArgs {
|
|
12
|
+
subcommand?: string;
|
|
13
|
+
planDir?: string;
|
|
14
|
+
revision?: string | number;
|
|
15
|
+
json?: boolean;
|
|
16
|
+
open?: boolean;
|
|
17
|
+
noOpen?: boolean;
|
|
18
|
+
force?: boolean;
|
|
19
|
+
port?: number;
|
|
20
|
+
format?: string;
|
|
21
|
+
ops?: string;
|
|
22
|
+
batch?: string;
|
|
23
|
+
check?: boolean;
|
|
24
|
+
receipt?: string;
|
|
25
|
+
op?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Dispatch a `visual-plan` subcommand. Returns a promise for the long-running studio commands. */
|
|
28
|
+
export declare function visualPlanCommand(args: VisualPlanCliArgs): void | Promise<void>;
|
|
29
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/interface/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,MAAM,WAAW,iBAAiB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ;AAoMD,mGAAmG;AACnG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC/E"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mewkit visual-plan <subcommand>` dispatch + reporter.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands: validate | status | approve | rehash | export | prepare-feedback
|
|
5
|
+
* (sync) and edit | view (long-running studio). Each resolves
|
|
6
|
+
* the plan directory, runs the matching application function, and reports in
|
|
7
|
+
* human or `--json` form. Exit codes: 0 ok, 1 contract/precondition failure,
|
|
8
|
+
* 2 usage/path error. Sets `process.exitCode` (never calls `process.exit`) so
|
|
9
|
+
* the surface stays unit-testable.
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from "node:fs";
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
import pc from "picocolors";
|
|
14
|
+
import { validatePlan } from "../application/validate-plan.js";
|
|
15
|
+
import { planStatus } from "../application/status.js";
|
|
16
|
+
import { approvePlan } from "../application/approve.js";
|
|
17
|
+
import { rehashPlan } from "../application/rehash.js";
|
|
18
|
+
import { exportPlanHtml } from "../application/export-plan.js";
|
|
19
|
+
import { prepareFeedback } from "../application/prepare-feedback.js";
|
|
20
|
+
import { checkBatchFresh, recordResolution } from "../application/apply-feedback.js";
|
|
21
|
+
import { patchPlan } from "../application/patch-plan.js";
|
|
22
|
+
import { PatchOpSchema } from "../domain/patches.js";
|
|
23
|
+
import { runStudio } from "./studio.js";
|
|
24
|
+
import { resolvePlanDir, PlanPathError } from "../infrastructure/visual-plan-repository.js";
|
|
25
|
+
import { atomicWriteFileSync } from "../infrastructure/atomic-write.js";
|
|
26
|
+
const emit = (value) => console.log(JSON.stringify(value, null, 2));
|
|
27
|
+
function printErrors(errors) {
|
|
28
|
+
for (const e of errors)
|
|
29
|
+
console.error(` ${pc.red("✗")} ${pc.bold(e.path)} — ${e.message} ${pc.dim(`[${e.code}]`)}`);
|
|
30
|
+
}
|
|
31
|
+
function runValidate(planDir, json) {
|
|
32
|
+
const r = validatePlan(planDir);
|
|
33
|
+
if (json) {
|
|
34
|
+
emit({ ok: r.ok, coverage: r.coverage ?? null, errors: r.errors });
|
|
35
|
+
}
|
|
36
|
+
else if (r.ok) {
|
|
37
|
+
const c = r.coverage;
|
|
38
|
+
const cov = c ? ` (coverage ${c.resolved} resolved / ${c.planned} planned / ${c.omitted} omitted / ${c.unresolved} unresolved)` : "";
|
|
39
|
+
console.log(`${pc.green("✓")} visual-plan valid${cov}`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.error(`${pc.red("✗")} visual-plan invalid — ${r.errors.length} error(s):`);
|
|
43
|
+
printErrors(r.errors);
|
|
44
|
+
}
|
|
45
|
+
process.exitCode = r.ok ? 0 : 1;
|
|
46
|
+
}
|
|
47
|
+
function runStatus(planDir, json) {
|
|
48
|
+
const s = planStatus(planDir);
|
|
49
|
+
if (json) {
|
|
50
|
+
emit(s);
|
|
51
|
+
}
|
|
52
|
+
else if (!s.exists) {
|
|
53
|
+
console.log(pc.dim("no visual artifact for this plan"));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const c = s.coverage;
|
|
57
|
+
console.log(`${s.valid ? pc.green("valid") : pc.red("invalid")} · rev ${s.revision} · review ${pc.bold(s.reviewStatus ?? "?")}` +
|
|
58
|
+
(c ? ` · coverage ${c.resolved}/${c.planned}/${c.omitted}/${c.unresolved} (R/P/O/U)` : "") +
|
|
59
|
+
(s.errorCount ? ` · ${s.errorCount} error(s)` : ""));
|
|
60
|
+
}
|
|
61
|
+
// Contract violation exits non-zero (phase Requirements). An absent artifact
|
|
62
|
+
// is NOT a violation — nothing to gate on — so it stays 0.
|
|
63
|
+
process.exitCode = s.exists && !s.valid ? 1 : 0;
|
|
64
|
+
}
|
|
65
|
+
function runApprove(planDir, revisionArg, json) {
|
|
66
|
+
const raw = String(revisionArg ?? "");
|
|
67
|
+
// Strict: reject trailing garbage / floats rather than silently coercing
|
|
68
|
+
// (e.g. "3abc" or "3.5"). Approval is pinned to an exact revision.
|
|
69
|
+
if (!/^\d+$/.test(raw)) {
|
|
70
|
+
console.error(pc.red("approve requires --revision <n> (non-negative integer)"));
|
|
71
|
+
process.exitCode = 2;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const revision = parseInt(raw, 10);
|
|
75
|
+
const r = approvePlan(planDir, revision);
|
|
76
|
+
if (json) {
|
|
77
|
+
emit(r);
|
|
78
|
+
}
|
|
79
|
+
else if (r.ok) {
|
|
80
|
+
console.log(`${pc.green("✓")} approved revision ${revision}`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.error(`${pc.red("✗")} approval refused (${r.failedPreconditions.length} precondition(s)):`);
|
|
84
|
+
for (const p of r.failedPreconditions)
|
|
85
|
+
console.error(` ${pc.red("✗")} ${p}`);
|
|
86
|
+
}
|
|
87
|
+
process.exitCode = r.ok ? 0 : 1;
|
|
88
|
+
}
|
|
89
|
+
function runExport(planDir, format, json) {
|
|
90
|
+
if (format !== undefined && format !== "html") {
|
|
91
|
+
console.error(pc.red(`export --format ${format} not supported (only 'html')`));
|
|
92
|
+
process.exitCode = 2;
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const r = exportPlanHtml(planDir);
|
|
96
|
+
if (!r.ok || !r.html) {
|
|
97
|
+
if (json)
|
|
98
|
+
emit(r);
|
|
99
|
+
else
|
|
100
|
+
console.error(`${pc.red("✗")} export failed — ${r.error ?? "unknown"}`);
|
|
101
|
+
process.exitCode = 1;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const out = path.join(planDir, "plan.html");
|
|
105
|
+
atomicWriteFileSync(out, r.html);
|
|
106
|
+
if (json)
|
|
107
|
+
emit({ ok: true, path: out });
|
|
108
|
+
else
|
|
109
|
+
console.log(`${pc.green("✓")} exported ${out}`);
|
|
110
|
+
process.exitCode = 0;
|
|
111
|
+
}
|
|
112
|
+
function readJsonFile(file) {
|
|
113
|
+
return JSON.parse(fs.readFileSync(file, "utf-8"));
|
|
114
|
+
}
|
|
115
|
+
/** `patch <dir> --op <file>` — apply one typed visual op (single-writer; no If-Match). */
|
|
116
|
+
function runPatch(planDir, opFile, json) {
|
|
117
|
+
if (!opFile) {
|
|
118
|
+
console.error(pc.red("patch requires --op <op.json> (a single typed patch op)"));
|
|
119
|
+
process.exitCode = 2;
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
let opJson;
|
|
123
|
+
try {
|
|
124
|
+
opJson = readJsonFile(opFile);
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
console.error(pc.red(`could not read --op file: ${e instanceof Error ? e.message : String(e)}`));
|
|
128
|
+
process.exitCode = 2;
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const op = PatchOpSchema.safeParse(opJson);
|
|
132
|
+
if (!op.success) {
|
|
133
|
+
console.error(pc.red(`invalid patch op: ${op.error.issues[0]?.message ?? "schema"}`));
|
|
134
|
+
process.exitCode = 2;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const r = patchPlan(planDir, op.data);
|
|
138
|
+
if (json)
|
|
139
|
+
emit(r);
|
|
140
|
+
else if (r.status === "ok")
|
|
141
|
+
console.log(`${pc.green("✓")} patched → revision ${r.revision}`);
|
|
142
|
+
else
|
|
143
|
+
console.error(`${pc.red("✗")} ${r.status}${r.message ? `: ${r.message}` : ""}`);
|
|
144
|
+
process.exitCode = r.status === "ok" ? 0 : 1;
|
|
145
|
+
}
|
|
146
|
+
/** `apply-feedback <dir> --batch <id> [--check | --receipt <file>]` — deterministic loop mechanics. */
|
|
147
|
+
function runApplyFeedback(planDir, args, json) {
|
|
148
|
+
if (!args.batch) {
|
|
149
|
+
console.error(pc.red("apply-feedback requires --batch <batch-id>"));
|
|
150
|
+
process.exitCode = 2;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (args.check) {
|
|
154
|
+
const r = checkBatchFresh(planDir, args.batch);
|
|
155
|
+
if (json)
|
|
156
|
+
emit(r);
|
|
157
|
+
else if (r.ok)
|
|
158
|
+
console.log(`${pc.green("✓")} batch ${args.batch} is fresh — safe to apply`);
|
|
159
|
+
else
|
|
160
|
+
console.error(`${pc.red("✗")} ${r.stale ? "STALE" : "cannot apply"}: ${r.reason}`);
|
|
161
|
+
process.exitCode = r.ok ? 0 : 1;
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (args.receipt) {
|
|
165
|
+
let entries;
|
|
166
|
+
try {
|
|
167
|
+
entries = readJsonFile(args.receipt);
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
console.error(pc.red(`could not read --receipt file: ${e instanceof Error ? e.message : String(e)}`));
|
|
171
|
+
process.exitCode = 2;
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const r = recordResolution(planDir, args.batch, entries);
|
|
175
|
+
if (json)
|
|
176
|
+
emit(r);
|
|
177
|
+
else if (r.ok) {
|
|
178
|
+
console.log(`${pc.green("✓")} receipt written: ${r.receiptPath}`);
|
|
179
|
+
console.log(` reopen: ${pc.cyan(r.reopenCommand ?? "")}`);
|
|
180
|
+
}
|
|
181
|
+
else
|
|
182
|
+
console.error(`${pc.red("✗")} ${r.error}`);
|
|
183
|
+
process.exitCode = r.ok ? 0 : 1;
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
console.error(pc.red("apply-feedback requires --check (pre-apply gate) or --receipt <file> (record outcomes)"));
|
|
187
|
+
process.exitCode = 2;
|
|
188
|
+
}
|
|
189
|
+
function runPrepareFeedback(planDir, opsFile, json) {
|
|
190
|
+
if (!opsFile) {
|
|
191
|
+
console.error(pc.red("prepare-feedback requires --ops <operations.json> (a JSON array of feedback operations)"));
|
|
192
|
+
process.exitCode = 2;
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
let operations;
|
|
196
|
+
try {
|
|
197
|
+
operations = JSON.parse(fs.readFileSync(opsFile, "utf-8"));
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
console.error(pc.red(`could not read --ops file: ${e instanceof Error ? e.message : String(e)}`));
|
|
201
|
+
process.exitCode = 2;
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (!Array.isArray(operations)) {
|
|
205
|
+
console.error(pc.red("--ops file must contain a JSON array of operations"));
|
|
206
|
+
process.exitCode = 2;
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const r = prepareFeedback(planDir, operations);
|
|
210
|
+
if (json) {
|
|
211
|
+
emit(r);
|
|
212
|
+
}
|
|
213
|
+
else if (r.ok) {
|
|
214
|
+
console.log(`${pc.green("✓")} feedback batch ${pc.bold(r.batchId ?? "")}`);
|
|
215
|
+
console.log(` copy: ${pc.cyan(r.copyCommand ?? "")}`);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
console.error(`${pc.red("✗")} ${r.error ?? "prepare failed"}`);
|
|
219
|
+
}
|
|
220
|
+
process.exitCode = r.ok ? 0 : 1;
|
|
221
|
+
}
|
|
222
|
+
function runRehash(planDir, json) {
|
|
223
|
+
const r = rehashPlan(planDir);
|
|
224
|
+
if (json) {
|
|
225
|
+
emit(r);
|
|
226
|
+
}
|
|
227
|
+
else if (r.ok) {
|
|
228
|
+
console.log(`${pc.green("✓")} source hashes refreshed${r.clearedApproval ? pc.yellow(" — prior approval cleared") : ""}`);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
printErrors(r.errors);
|
|
232
|
+
}
|
|
233
|
+
process.exitCode = r.ok ? 0 : 1;
|
|
234
|
+
}
|
|
235
|
+
/** Dispatch a `visual-plan` subcommand. Returns a promise for the long-running studio commands. */
|
|
236
|
+
export function visualPlanCommand(args) {
|
|
237
|
+
const sub = args.subcommand;
|
|
238
|
+
// Long-running studio commands (own their plan-dir resolution + browser lifecycle).
|
|
239
|
+
if (sub === "edit" || sub === "view") {
|
|
240
|
+
return runStudio({ mode: sub, planDir: args.planDir, open: args.open, noOpen: args.noOpen, force: args.force, port: args.port });
|
|
241
|
+
}
|
|
242
|
+
const known = new Set(["validate", "status", "approve", "rehash", "export", "prepare-feedback", "apply-feedback", "patch"]);
|
|
243
|
+
if (!sub || !known.has(sub)) {
|
|
244
|
+
console.error(pc.red(`visual-plan: expected one of validate|status|approve|rehash|export|prepare-feedback|apply-feedback|patch|edit|view (got ${sub ?? "nothing"})`));
|
|
245
|
+
process.exitCode = 2;
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (!args.planDir) {
|
|
249
|
+
console.error(pc.red(`visual-plan ${sub}: missing <plan-dir>`));
|
|
250
|
+
process.exitCode = 2;
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
let planDir;
|
|
254
|
+
try {
|
|
255
|
+
planDir = resolvePlanDir(args.planDir);
|
|
256
|
+
}
|
|
257
|
+
catch (e) {
|
|
258
|
+
console.error(pc.red(e instanceof PlanPathError ? e.message : String(e)));
|
|
259
|
+
process.exitCode = 2;
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const json = args.json === true;
|
|
263
|
+
if (sub === "validate")
|
|
264
|
+
runValidate(planDir, json);
|
|
265
|
+
else if (sub === "status")
|
|
266
|
+
runStatus(planDir, json);
|
|
267
|
+
else if (sub === "approve")
|
|
268
|
+
runApprove(planDir, args.revision, json);
|
|
269
|
+
else if (sub === "export")
|
|
270
|
+
runExport(planDir, args.format, json);
|
|
271
|
+
else if (sub === "prepare-feedback")
|
|
272
|
+
runPrepareFeedback(planDir, args.ops, json);
|
|
273
|
+
else if (sub === "apply-feedback")
|
|
274
|
+
runApplyFeedback(planDir, args, json);
|
|
275
|
+
else if (sub === "patch")
|
|
276
|
+
runPatch(planDir, args.op, json);
|
|
277
|
+
else
|
|
278
|
+
runRehash(planDir, json);
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=cli.js.map
|