mewkit 1.15.0 → 1.16.1
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 +29 -70
- 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/capability.d.ts +81 -81
- package/dist/core/consolidation-ledger.d.ts.map +1 -1
- package/dist/core/consolidation-ledger.js +13 -11
- package/dist/core/consolidation-ledger.js.map +1 -1
- package/dist/core/install-metadata.d.ts +27 -27
- package/dist/core/plugin-manifest.d.ts +16 -16
- package/dist/core/release-metadata.d.ts +2 -2
- package/dist/core/task-record.d.ts +8 -8
- package/dist/index.js +33 -21
- 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/reconcile/portable-manifest.d.ts +12 -12
- package/dist/migrate/reconcile/portable-registry.d.ts +24 -24
- 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 +74 -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/domain/wireframe-theme.d.ts +24 -0
- package/dist/visual-plan/domain/wireframe-theme.d.ts.map +1 -0
- package/dist/visual-plan/domain/wireframe-theme.js +169 -0
- package/dist/visual-plan/domain/wireframe-theme.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 +187 -0
- package/package.json +15 -18
- 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/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/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/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/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 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/domain/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,2EAA2E;AAC3E,eAAO,MAAM,IAAI;;;;;;;;;;CAUP,CAAC;AAIX,eAAO,MAAM,aAAa,yEAA0E,CAAC;AACrG,eAAO,MAAM,YAAY,qDAAsD,CAAC;AAChF,eAAO,MAAM,gBAAgB,yIAOnB,CAAC;AACX,eAAO,MAAM,eAAe,6DAA8D,CAAC;AAoB3F,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQf,CAAC;AAEX,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMjB,CAAC;AA+BX,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeP,CAAC;AAMX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASnB,CAAC;AAgCX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA9E3B,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAhF,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAhF,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0FnE,CAAC;AAEhB,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `visual-plan/v1` canonical artifact schema (shape + bounded sizes only).
|
|
3
|
+
*
|
|
4
|
+
* This module validates STRUCTURE. Cross-reference integrity (dangling refs,
|
|
5
|
+
* duplicate ids), coverage closure, HTML safety, and source-hash freshness are
|
|
6
|
+
* separate deterministic passes (`cross-refs.ts`, `coverage.ts`, the sanitizer,
|
|
7
|
+
* `hashing.ts`) so each can emit an exact JSON path and a stable code.
|
|
8
|
+
*
|
|
9
|
+
* `.passthrough()` is used on the top-level object so a future additive field
|
|
10
|
+
* survives a read→write round-trip; every nested object stays strict.
|
|
11
|
+
*
|
|
12
|
+
* Bounds (red-team: agent-native precedent caps depth/count/size) protect the
|
|
13
|
+
* validator and the Phase-4 renderer from pathological artifacts.
|
|
14
|
+
*/
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
import { ENTITY_ID_RE } from "./ids.js";
|
|
17
|
+
/** Concrete caps. Generous for real plans, hard ceilings against abuse. */
|
|
18
|
+
export const CAPS = {
|
|
19
|
+
FRAMES: 200,
|
|
20
|
+
CONNECTORS: 400,
|
|
21
|
+
ANNOTATIONS: 200,
|
|
22
|
+
LANES: 40,
|
|
23
|
+
DOCUMENT_BLOCKS: 100,
|
|
24
|
+
SURFACES: 50,
|
|
25
|
+
STATES_PER_SURFACE: 100,
|
|
26
|
+
SOURCE_REFS: 500,
|
|
27
|
+
HTML_BYTES: 20_000,
|
|
28
|
+
};
|
|
29
|
+
const EntityId = z.string().regex(ENTITY_ID_RE, "invalid id (charset [A-Za-z0-9_-], max 128)");
|
|
30
|
+
export const SURFACE_KINDS = ["browser", "desktop", "mobile", "popover", "panel", "dialog"];
|
|
31
|
+
export const CHANGE_MODES = ["current", "target", "unchanged-context"];
|
|
32
|
+
export const OMISSION_REASONS = [
|
|
33
|
+
"equivalent-layout",
|
|
34
|
+
"out-of-scope",
|
|
35
|
+
"unreachable-after-change",
|
|
36
|
+
"non-visual-only",
|
|
37
|
+
"requires-runtime-data",
|
|
38
|
+
"accepted-risk",
|
|
39
|
+
];
|
|
40
|
+
export const REVIEW_STATUSES = ["draft", "feedback-pending", "approved", "stale"];
|
|
41
|
+
const SourceRefSchema = z
|
|
42
|
+
.object({
|
|
43
|
+
id: EntityId,
|
|
44
|
+
kind: z.enum(["code", "plan-requirement"]),
|
|
45
|
+
ref: z.string().min(1),
|
|
46
|
+
note: z.string().optional(),
|
|
47
|
+
})
|
|
48
|
+
.strict();
|
|
49
|
+
const OmissionSchema = z
|
|
50
|
+
.object({
|
|
51
|
+
reason: z.enum(OMISSION_REASONS),
|
|
52
|
+
representedBy: EntityId.optional(),
|
|
53
|
+
riskId: z.string().min(1).optional(),
|
|
54
|
+
note: z.string().optional(),
|
|
55
|
+
})
|
|
56
|
+
.strict();
|
|
57
|
+
const CoverageStateSchema = z
|
|
58
|
+
.object({
|
|
59
|
+
id: EntityId,
|
|
60
|
+
label: z.string().optional(),
|
|
61
|
+
frameIds: z.array(EntityId).max(CAPS.FRAMES).default([]),
|
|
62
|
+
sourceRefIds: z.array(EntityId).max(CAPS.SOURCE_REFS).default([]),
|
|
63
|
+
omitted: OmissionSchema.optional(),
|
|
64
|
+
})
|
|
65
|
+
.strict();
|
|
66
|
+
const CoverageSurfaceSchema = z
|
|
67
|
+
.object({
|
|
68
|
+
id: EntityId,
|
|
69
|
+
label: z.string().optional(),
|
|
70
|
+
states: z.array(CoverageStateSchema).max(CAPS.STATES_PER_SURFACE),
|
|
71
|
+
})
|
|
72
|
+
.strict();
|
|
73
|
+
const CoverageSummarySchema = z
|
|
74
|
+
.object({
|
|
75
|
+
total: z.number().int().nonnegative(),
|
|
76
|
+
resolved: z.number().int().nonnegative(),
|
|
77
|
+
planned: z.number().int().nonnegative(),
|
|
78
|
+
omitted: z.number().int().nonnegative(),
|
|
79
|
+
unresolved: z.number().int().nonnegative(),
|
|
80
|
+
})
|
|
81
|
+
.strict();
|
|
82
|
+
const UiCoverageSchema = z
|
|
83
|
+
.object({
|
|
84
|
+
surfaces: z.array(CoverageSurfaceSchema).max(CAPS.SURFACES),
|
|
85
|
+
/** Author totals are IGNORED — always recomputed from states. Optional here. */
|
|
86
|
+
summary: CoverageSummarySchema.optional(),
|
|
87
|
+
})
|
|
88
|
+
.strict();
|
|
89
|
+
const WireframeSchema = z
|
|
90
|
+
.object({
|
|
91
|
+
format: z.literal("semantic-html"),
|
|
92
|
+
html: z.string().max(CAPS.HTML_BYTES, `wireframe HTML exceeds ${CAPS.HTML_BYTES} bytes`),
|
|
93
|
+
})
|
|
94
|
+
.strict();
|
|
95
|
+
const LaneSchema = z
|
|
96
|
+
.object({ id: EntityId, label: z.string().optional(), kind: z.string().optional() })
|
|
97
|
+
.strict();
|
|
98
|
+
const FrameSchema = z
|
|
99
|
+
.object({
|
|
100
|
+
id: EntityId,
|
|
101
|
+
label: z.string().min(1),
|
|
102
|
+
surface: z.enum(SURFACE_KINDS),
|
|
103
|
+
laneId: EntityId,
|
|
104
|
+
order: z.number().int(),
|
|
105
|
+
x: z.number().optional(),
|
|
106
|
+
y: z.number().optional(),
|
|
107
|
+
stateKind: z.string().optional(),
|
|
108
|
+
changeMode: z.enum(CHANGE_MODES),
|
|
109
|
+
coverageStateIds: z.array(EntityId).max(CAPS.STATES_PER_SURFACE).default([]),
|
|
110
|
+
sourceRefIds: z.array(EntityId).max(CAPS.SOURCE_REFS).default([]),
|
|
111
|
+
wireframe: WireframeSchema,
|
|
112
|
+
})
|
|
113
|
+
.strict();
|
|
114
|
+
const ConnectorSchema = z
|
|
115
|
+
.object({ id: EntityId, from: EntityId, to: EntityId, label: z.string().optional() })
|
|
116
|
+
.strict();
|
|
117
|
+
export const AnnotationSchema = z
|
|
118
|
+
.object({
|
|
119
|
+
id: EntityId,
|
|
120
|
+
kind: z.enum(["note", "markup"]),
|
|
121
|
+
text: z.string().min(1),
|
|
122
|
+
targetId: EntityId.optional(),
|
|
123
|
+
placement: z.enum(["top", "right", "bottom", "left"]).optional(),
|
|
124
|
+
points: z.array(z.object({ x: z.number(), y: z.number() }).strict()).optional(),
|
|
125
|
+
})
|
|
126
|
+
.strict();
|
|
127
|
+
const CanvasSchema = z
|
|
128
|
+
.object({
|
|
129
|
+
lanes: z.array(LaneSchema).max(CAPS.LANES),
|
|
130
|
+
frames: z.array(FrameSchema).max(CAPS.FRAMES),
|
|
131
|
+
connectors: z.array(ConnectorSchema).max(CAPS.CONNECTORS),
|
|
132
|
+
annotations: z.array(AnnotationSchema).max(CAPS.ANNOTATIONS),
|
|
133
|
+
})
|
|
134
|
+
.strict();
|
|
135
|
+
const DocumentBlockSchema = z
|
|
136
|
+
.object({ id: EntityId, title: z.string().optional(), body: z.string() })
|
|
137
|
+
.strict();
|
|
138
|
+
const SourceSchema = z
|
|
139
|
+
.object({
|
|
140
|
+
planPath: z.string().min(1),
|
|
141
|
+
planHash: z.string(),
|
|
142
|
+
phaseHashes: z.record(z.string(), z.string()),
|
|
143
|
+
})
|
|
144
|
+
.strict();
|
|
145
|
+
const ReviewSchema = z
|
|
146
|
+
.object({
|
|
147
|
+
status: z.enum(REVIEW_STATUSES),
|
|
148
|
+
approvedRevision: z.number().int().nonnegative().nullable().default(null),
|
|
149
|
+
approvedAt: z.string().nullable().default(null),
|
|
150
|
+
pendingFeedbackBatchIds: z.array(z.string()).default([]),
|
|
151
|
+
})
|
|
152
|
+
.strict();
|
|
153
|
+
export const VisualPlanSchema = z
|
|
154
|
+
.object({
|
|
155
|
+
schemaVersion: z.literal("visual-plan/v1"),
|
|
156
|
+
id: EntityId,
|
|
157
|
+
revision: z.number().int().nonnegative(),
|
|
158
|
+
source: SourceSchema,
|
|
159
|
+
uiCoverage: UiCoverageSchema,
|
|
160
|
+
canvas: CanvasSchema,
|
|
161
|
+
documentBlocks: z.array(DocumentBlockSchema).max(CAPS.DOCUMENT_BLOCKS).default([]),
|
|
162
|
+
sourceRefs: z.array(SourceRefSchema).max(CAPS.SOURCE_REFS).default([]),
|
|
163
|
+
review: ReviewSchema,
|
|
164
|
+
})
|
|
165
|
+
.passthrough();
|
|
166
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/visual-plan/domain/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared wireframe theme — the SINGLE source of truth for how sanitized
|
|
3
|
+
* `.wf-*` semantic HTML looks, consumed by BOTH renderers (same pattern as
|
|
4
|
+
* sanitizer-config.ts): the studio injects it at boot, `export --format html`
|
|
5
|
+
* embeds it in the exported page. One theme, two surfaces, no drift.
|
|
6
|
+
*
|
|
7
|
+
* Visual language follows the agent-native plan renderer (ISC), re-expressed
|
|
8
|
+
* for MeowKit's vocabulary: a scoped ink/paper/card/accent token palette with
|
|
9
|
+
* soft variants, hand-drawn font by DEFAULT (sketchy is the primary register;
|
|
10
|
+
* `[data-style="clean"]` swaps to the sans stack), 1.4px strokes, 9px radii,
|
|
11
|
+
* and a `[data-rough-ready]` hook that hides crisp borders once the rough.js
|
|
12
|
+
* overlay has redrawn them so outlines are never doubled.
|
|
13
|
+
*
|
|
14
|
+
* Pure data — no DOM, no imports — so the Node exporter and the Vite bundle
|
|
15
|
+
* can both consume it.
|
|
16
|
+
*/
|
|
17
|
+
export declare const WIREFRAME_THEME_CSS = "\n/* ---- tokens (scoped to .wf-root; light + dark) ---- */\n.wf-root {\n --wf-ink: #222b38; --wf-ink-soft: #6b7684; --wf-line: #d3d9e0; --wf-sketch: #94a0ad;\n --wf-paper: #ffffff; --wf-card: #f6f8fa;\n --wf-accent: #4c6ef5; --wf-accent-fg: #ffffff; --wf-accent-soft: rgba(76, 110, 245, 0.12);\n --wf-warn: #d64545; --wf-warn-soft: rgba(214, 69, 69, 0.12); --wf-ok: #2f9e63;\n --wf-radius: 9px; --wf-stroke: 1.4px;\n --wf-font-hand: \"Architects Daughter\", \"Comic Sans MS\", \"Bradley Hand\", \"Marker Felt\", cursive;\n --wf-font-clean: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif;\n --wf-font: var(--wf-font-hand);\n background: var(--wf-paper); color: var(--wf-ink);\n font-family: var(--wf-font); font-size: 14px; line-height: 1.45;\n padding: 14px; height: 100%; overflow: hidden; position: relative;\n}\n.wf-root, .wf-root * { box-sizing: border-box; min-width: 0; }\n[data-style=\"clean\"] .wf-root { --wf-font: var(--wf-font-clean); }\n@media (prefers-color-scheme: dark) {\n .wf-root {\n --wf-ink: #e9edf3; --wf-ink-soft: #93a0ae; --wf-line: #2c3646; --wf-sketch: #5d6a7a;\n --wf-paper: #171d26; --wf-card: #1e2733;\n --wf-accent: #7c9aff; --wf-accent-fg: #10141c; --wf-accent-soft: rgba(124, 154, 255, 0.16);\n --wf-warn: #ef7070; --wf-warn-soft: rgba(239, 112, 112, 0.16); --wf-ok: #52c184;\n }\n}\n\n/* ---- bare semantic elements ---- */\n.wf-root h1 { font-size: 21px; font-weight: 700; line-height: 1.15; margin: 0 0 8px; }\n.wf-root h2 { font-size: 17px; font-weight: 700; line-height: 1.2; margin: 0 0 6px; }\n.wf-root h3, .wf-root h4, .wf-root h5, .wf-root h6 { font-size: 14px; font-weight: 700; margin: 0 0 4px; }\n.wf-root p { margin: 0 0 8px; }\n.wf-root small { color: var(--wf-ink-soft); font-size: 12.5px; }\n.wf-root a { color: var(--wf-accent); text-decoration: none; }\n.wf-root hr { border: 0; border-top: var(--wf-stroke) solid var(--wf-line); margin: 10px 0; }\n.wf-root ul, .wf-root ol { margin: 0 0 8px; padding-left: 1.2em; }\n.wf-root li { margin: 2px 0; }\n.wf-root label { font-size: 12.5px; font-weight: 700; color: var(--wf-ink-soft); }\n.wf-root blockquote { margin: 0 0 8px; padding: 6px 12px; border-left: 3px solid var(--wf-line); color: var(--wf-ink-soft); }\n.wf-root code, .wf-root pre { font-family: ui-monospace, Menlo, monospace; font-size: 12.5px; background: var(--wf-card); border-radius: 5px; }\n.wf-root pre { padding: 8px 10px; overflow: auto; margin: 0 0 8px; }\n.wf-root table { width: 100%; border-collapse: collapse; margin: 0 0 8px; font-size: 13px; }\n.wf-root th { text-align: left; font-weight: 700; border-bottom: var(--wf-stroke) solid var(--wf-line); padding: 6px 8px; }\n.wf-root td { padding: 6px 8px; border-bottom: 1px solid var(--wf-line); }\n.wf-root figure { margin: 0 0 8px; }\n.wf-root figcaption { font-size: 12.5px; color: var(--wf-ink-soft); }\n\n/* ---- structure ---- */\n.wf-root .wf-screen { display: flex; flex-direction: column; gap: 10px; min-height: 100%; }\n.wf-root .wf-topbar, .wf-root header { display: flex; align-items: center; gap: 10px; border-bottom: var(--wf-stroke) solid var(--wf-line); padding-bottom: 8px; }\n.wf-root .wf-topbar :is(h1, h2, h3, p), .wf-root header :is(h1, h2, h3, p) { margin: 0; }\n.wf-root .wf-content, .wf-root main { display: flex; flex-direction: column; gap: 10px; flex: 1; min-height: 0; }\n.wf-root footer, .wf-root .wf-footer { display: flex; align-items: center; gap: 10px; border-top: var(--wf-stroke) solid var(--wf-line); padding-top: 8px; margin-top: auto; }\n.wf-root nav, .wf-root .wf-nav { display: flex; align-items: center; gap: 12px; }\n.wf-root aside, .wf-root .wf-sidebar { display: flex; flex-direction: column; gap: 8px; border-right: var(--wf-stroke) solid var(--wf-line); padding-right: 10px; }\n.wf-root .wf-row { display: flex; align-items: center; gap: 8px; }\n.wf-root .wf-col { display: flex; flex-direction: column; gap: 8px; }\n.wf-root .wf-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }\n.wf-root .wf-spacer { flex: 1; }\n\n/* ---- surfaces & controls ---- */\n.wf-root .wf-card, .wf-root .wf-box, .wf-root .wf-panel {\n background: var(--wf-card); border: var(--wf-stroke) solid var(--wf-line);\n border-radius: var(--wf-radius); padding: 12px;\n}\n.wf-root .wf-button {\n display: inline-flex; align-items: center; justify-content: center; gap: 6px;\n font: inherit; font-weight: 700; color: var(--wf-ink); background: var(--wf-paper);\n border: var(--wf-stroke) solid var(--wf-line); border-radius: var(--wf-radius);\n padding: 7px 14px; text-decoration: none; cursor: default; width: fit-content;\n}\n.wf-root .wf-button:is(.primary, .wf-primary) {\n background: var(--wf-accent); border-color: var(--wf-accent); color: var(--wf-accent-fg);\n}\n.wf-root .wf-input, .wf-root .wf-field, .wf-root .wf-select, .wf-root .wf-textarea {\n display: flex; align-items: center; min-height: 34px; width: 100%;\n color: var(--wf-ink-soft); background: var(--wf-card);\n border: var(--wf-stroke) solid var(--wf-line); border-radius: var(--wf-radius); padding: 6px 10px;\n}\n.wf-root .wf-textarea { min-height: 64px; align-items: flex-start; }\n.wf-root .wf-form { display: flex; flex-direction: column; gap: 8px; }\n.wf-root .wf-checkbox, .wf-root .wf-radio {\n display: inline-block; width: 15px; height: 15px; flex: 0 0 auto;\n border: var(--wf-stroke) solid var(--wf-sketch); background: var(--wf-paper);\n}\n.wf-root .wf-checkbox { border-radius: 4px; }\n.wf-root .wf-radio { border-radius: 999px; }\n\n/* ---- chips, badges, status ---- */\n.wf-root :is(.wf-badge, .wf-chip, .wf-pill, .wf-tag) {\n display: inline-flex; align-items: center; gap: 5px; width: fit-content; max-width: 100%;\n border: var(--wf-stroke) solid var(--wf-line); border-radius: 999px;\n padding: 2px 10px; font-size: 12.5px; background: var(--wf-paper);\n}\n.wf-root :is(.wf-badge, .wf-chip, .wf-pill, .wf-tag).accent { border-color: var(--wf-accent); color: var(--wf-accent); background: var(--wf-accent-soft); }\n.wf-root .wf-muted { color: var(--wf-ink-soft); }\n.wf-root .wf-hint { color: var(--wf-ink-soft); font-size: 12.5px; }\n.wf-root .wf-error { color: var(--wf-warn); }\n.wf-root :is(.wf-alert, .wf-banner) { background: var(--wf-warn-soft); border: var(--wf-stroke) solid var(--wf-warn); border-radius: var(--wf-radius); padding: 8px 12px; color: var(--wf-warn); }\n\n/* ---- lists ---- */\n.wf-root .wf-list { list-style: none; margin: 0 0 8px; padding: 0; display: flex; flex-direction: column; gap: 6px; }\n.wf-root .wf-list-item {\n display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0;\n background: var(--wf-card); border: var(--wf-stroke) solid var(--wf-line);\n border-radius: var(--wf-radius); padding: 9px 12px;\n}\n\n/* ---- media & placeholders ---- */\n.wf-root :is(.wf-image, .wf-img, .wf-media) {\n display: block; min-height: 84px; background: var(--wf-card);\n background-image: linear-gradient(to top right, transparent 49.55%, var(--wf-line) 49.55%, var(--wf-line) 50.45%, transparent 50.45%),\n linear-gradient(to bottom right, transparent 49.55%, var(--wf-line) 49.55%, var(--wf-line) 50.45%, transparent 50.45%);\n border: var(--wf-stroke) solid var(--wf-line); border-radius: var(--wf-radius);\n}\n.wf-root .wf-avatar {\n display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto;\n width: 32px; height: 32px; border-radius: 999px; font-size: 12px; font-weight: 700;\n background: var(--wf-card); border: var(--wf-stroke) solid var(--wf-line);\n}\n.wf-root .wf-loading {\n display: block; height: 12px; width: 70%; border-radius: 999px; border: 0;\n background: var(--wf-line);\n}\n@media (prefers-reduced-motion: no-preference) {\n .wf-root .wf-loading { animation: wf-pulse 1.6s ease-in-out infinite; }\n}\n@keyframes wf-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }\n\n/* ---- rough handoff: once the overlay has drawn hand-drawn outlines, hide the\n crisp borders it replaced (fills and text stay) so nothing is doubled. ---- */\n[data-rough-ready=\"true\"] .wf-root :is(\n .wf-button, .wf-input, .wf-field, .wf-select, .wf-textarea,\n .wf-card, .wf-box, .wf-panel, .wf-badge, .wf-chip, .wf-pill, .wf-tag,\n .wf-list-item, .wf-avatar, .wf-image, .wf-img, .wf-media, .wf-alert, .wf-banner,\n .wf-checkbox, .wf-radio, hr\n) { border-color: transparent !important; }\n";
|
|
18
|
+
/**
|
|
19
|
+
* Class names the theme MUST style (superset of the generation contract's
|
|
20
|
+
* common vocabulary). The coverage test asserts each appears in the CSS so a
|
|
21
|
+
* generated artifact can never render a bare, unstyled block again.
|
|
22
|
+
*/
|
|
23
|
+
export declare const WIREFRAME_THEME_CLASSES: readonly string[];
|
|
24
|
+
//# sourceMappingURL=wireframe-theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireframe-theme.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/domain/wireframe-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,mBAAmB,2uQAwI/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EASpD,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared wireframe theme — the SINGLE source of truth for how sanitized
|
|
3
|
+
* `.wf-*` semantic HTML looks, consumed by BOTH renderers (same pattern as
|
|
4
|
+
* sanitizer-config.ts): the studio injects it at boot, `export --format html`
|
|
5
|
+
* embeds it in the exported page. One theme, two surfaces, no drift.
|
|
6
|
+
*
|
|
7
|
+
* Visual language follows the agent-native plan renderer (ISC), re-expressed
|
|
8
|
+
* for MeowKit's vocabulary: a scoped ink/paper/card/accent token palette with
|
|
9
|
+
* soft variants, hand-drawn font by DEFAULT (sketchy is the primary register;
|
|
10
|
+
* `[data-style="clean"]` swaps to the sans stack), 1.4px strokes, 9px radii,
|
|
11
|
+
* and a `[data-rough-ready]` hook that hides crisp borders once the rough.js
|
|
12
|
+
* overlay has redrawn them so outlines are never doubled.
|
|
13
|
+
*
|
|
14
|
+
* Pure data — no DOM, no imports — so the Node exporter and the Vite bundle
|
|
15
|
+
* can both consume it.
|
|
16
|
+
*/
|
|
17
|
+
export const WIREFRAME_THEME_CSS = `
|
|
18
|
+
/* ---- tokens (scoped to .wf-root; light + dark) ---- */
|
|
19
|
+
.wf-root {
|
|
20
|
+
--wf-ink: #222b38; --wf-ink-soft: #6b7684; --wf-line: #d3d9e0; --wf-sketch: #94a0ad;
|
|
21
|
+
--wf-paper: #ffffff; --wf-card: #f6f8fa;
|
|
22
|
+
--wf-accent: #4c6ef5; --wf-accent-fg: #ffffff; --wf-accent-soft: rgba(76, 110, 245, 0.12);
|
|
23
|
+
--wf-warn: #d64545; --wf-warn-soft: rgba(214, 69, 69, 0.12); --wf-ok: #2f9e63;
|
|
24
|
+
--wf-radius: 9px; --wf-stroke: 1.4px;
|
|
25
|
+
--wf-font-hand: "Architects Daughter", "Comic Sans MS", "Bradley Hand", "Marker Felt", cursive;
|
|
26
|
+
--wf-font-clean: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
27
|
+
--wf-font: var(--wf-font-hand);
|
|
28
|
+
background: var(--wf-paper); color: var(--wf-ink);
|
|
29
|
+
font-family: var(--wf-font); font-size: 14px; line-height: 1.45;
|
|
30
|
+
padding: 14px; height: 100%; overflow: hidden; position: relative;
|
|
31
|
+
}
|
|
32
|
+
.wf-root, .wf-root * { box-sizing: border-box; min-width: 0; }
|
|
33
|
+
[data-style="clean"] .wf-root { --wf-font: var(--wf-font-clean); }
|
|
34
|
+
@media (prefers-color-scheme: dark) {
|
|
35
|
+
.wf-root {
|
|
36
|
+
--wf-ink: #e9edf3; --wf-ink-soft: #93a0ae; --wf-line: #2c3646; --wf-sketch: #5d6a7a;
|
|
37
|
+
--wf-paper: #171d26; --wf-card: #1e2733;
|
|
38
|
+
--wf-accent: #7c9aff; --wf-accent-fg: #10141c; --wf-accent-soft: rgba(124, 154, 255, 0.16);
|
|
39
|
+
--wf-warn: #ef7070; --wf-warn-soft: rgba(239, 112, 112, 0.16); --wf-ok: #52c184;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* ---- bare semantic elements ---- */
|
|
44
|
+
.wf-root h1 { font-size: 21px; font-weight: 700; line-height: 1.15; margin: 0 0 8px; }
|
|
45
|
+
.wf-root h2 { font-size: 17px; font-weight: 700; line-height: 1.2; margin: 0 0 6px; }
|
|
46
|
+
.wf-root h3, .wf-root h4, .wf-root h5, .wf-root h6 { font-size: 14px; font-weight: 700; margin: 0 0 4px; }
|
|
47
|
+
.wf-root p { margin: 0 0 8px; }
|
|
48
|
+
.wf-root small { color: var(--wf-ink-soft); font-size: 12.5px; }
|
|
49
|
+
.wf-root a { color: var(--wf-accent); text-decoration: none; }
|
|
50
|
+
.wf-root hr { border: 0; border-top: var(--wf-stroke) solid var(--wf-line); margin: 10px 0; }
|
|
51
|
+
.wf-root ul, .wf-root ol { margin: 0 0 8px; padding-left: 1.2em; }
|
|
52
|
+
.wf-root li { margin: 2px 0; }
|
|
53
|
+
.wf-root label { font-size: 12.5px; font-weight: 700; color: var(--wf-ink-soft); }
|
|
54
|
+
.wf-root blockquote { margin: 0 0 8px; padding: 6px 12px; border-left: 3px solid var(--wf-line); color: var(--wf-ink-soft); }
|
|
55
|
+
.wf-root code, .wf-root pre { font-family: ui-monospace, Menlo, monospace; font-size: 12.5px; background: var(--wf-card); border-radius: 5px; }
|
|
56
|
+
.wf-root pre { padding: 8px 10px; overflow: auto; margin: 0 0 8px; }
|
|
57
|
+
.wf-root table { width: 100%; border-collapse: collapse; margin: 0 0 8px; font-size: 13px; }
|
|
58
|
+
.wf-root th { text-align: left; font-weight: 700; border-bottom: var(--wf-stroke) solid var(--wf-line); padding: 6px 8px; }
|
|
59
|
+
.wf-root td { padding: 6px 8px; border-bottom: 1px solid var(--wf-line); }
|
|
60
|
+
.wf-root figure { margin: 0 0 8px; }
|
|
61
|
+
.wf-root figcaption { font-size: 12.5px; color: var(--wf-ink-soft); }
|
|
62
|
+
|
|
63
|
+
/* ---- structure ---- */
|
|
64
|
+
.wf-root .wf-screen { display: flex; flex-direction: column; gap: 10px; min-height: 100%; }
|
|
65
|
+
.wf-root .wf-topbar, .wf-root header { display: flex; align-items: center; gap: 10px; border-bottom: var(--wf-stroke) solid var(--wf-line); padding-bottom: 8px; }
|
|
66
|
+
.wf-root .wf-topbar :is(h1, h2, h3, p), .wf-root header :is(h1, h2, h3, p) { margin: 0; }
|
|
67
|
+
.wf-root .wf-content, .wf-root main { display: flex; flex-direction: column; gap: 10px; flex: 1; min-height: 0; }
|
|
68
|
+
.wf-root footer, .wf-root .wf-footer { display: flex; align-items: center; gap: 10px; border-top: var(--wf-stroke) solid var(--wf-line); padding-top: 8px; margin-top: auto; }
|
|
69
|
+
.wf-root nav, .wf-root .wf-nav { display: flex; align-items: center; gap: 12px; }
|
|
70
|
+
.wf-root aside, .wf-root .wf-sidebar { display: flex; flex-direction: column; gap: 8px; border-right: var(--wf-stroke) solid var(--wf-line); padding-right: 10px; }
|
|
71
|
+
.wf-root .wf-row { display: flex; align-items: center; gap: 8px; }
|
|
72
|
+
.wf-root .wf-col { display: flex; flex-direction: column; gap: 8px; }
|
|
73
|
+
.wf-root .wf-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
|
|
74
|
+
.wf-root .wf-spacer { flex: 1; }
|
|
75
|
+
|
|
76
|
+
/* ---- surfaces & controls ---- */
|
|
77
|
+
.wf-root .wf-card, .wf-root .wf-box, .wf-root .wf-panel {
|
|
78
|
+
background: var(--wf-card); border: var(--wf-stroke) solid var(--wf-line);
|
|
79
|
+
border-radius: var(--wf-radius); padding: 12px;
|
|
80
|
+
}
|
|
81
|
+
.wf-root .wf-button {
|
|
82
|
+
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
|
|
83
|
+
font: inherit; font-weight: 700; color: var(--wf-ink); background: var(--wf-paper);
|
|
84
|
+
border: var(--wf-stroke) solid var(--wf-line); border-radius: var(--wf-radius);
|
|
85
|
+
padding: 7px 14px; text-decoration: none; cursor: default; width: fit-content;
|
|
86
|
+
}
|
|
87
|
+
.wf-root .wf-button:is(.primary, .wf-primary) {
|
|
88
|
+
background: var(--wf-accent); border-color: var(--wf-accent); color: var(--wf-accent-fg);
|
|
89
|
+
}
|
|
90
|
+
.wf-root .wf-input, .wf-root .wf-field, .wf-root .wf-select, .wf-root .wf-textarea {
|
|
91
|
+
display: flex; align-items: center; min-height: 34px; width: 100%;
|
|
92
|
+
color: var(--wf-ink-soft); background: var(--wf-card);
|
|
93
|
+
border: var(--wf-stroke) solid var(--wf-line); border-radius: var(--wf-radius); padding: 6px 10px;
|
|
94
|
+
}
|
|
95
|
+
.wf-root .wf-textarea { min-height: 64px; align-items: flex-start; }
|
|
96
|
+
.wf-root .wf-form { display: flex; flex-direction: column; gap: 8px; }
|
|
97
|
+
.wf-root .wf-checkbox, .wf-root .wf-radio {
|
|
98
|
+
display: inline-block; width: 15px; height: 15px; flex: 0 0 auto;
|
|
99
|
+
border: var(--wf-stroke) solid var(--wf-sketch); background: var(--wf-paper);
|
|
100
|
+
}
|
|
101
|
+
.wf-root .wf-checkbox { border-radius: 4px; }
|
|
102
|
+
.wf-root .wf-radio { border-radius: 999px; }
|
|
103
|
+
|
|
104
|
+
/* ---- chips, badges, status ---- */
|
|
105
|
+
.wf-root :is(.wf-badge, .wf-chip, .wf-pill, .wf-tag) {
|
|
106
|
+
display: inline-flex; align-items: center; gap: 5px; width: fit-content; max-width: 100%;
|
|
107
|
+
border: var(--wf-stroke) solid var(--wf-line); border-radius: 999px;
|
|
108
|
+
padding: 2px 10px; font-size: 12.5px; background: var(--wf-paper);
|
|
109
|
+
}
|
|
110
|
+
.wf-root :is(.wf-badge, .wf-chip, .wf-pill, .wf-tag).accent { border-color: var(--wf-accent); color: var(--wf-accent); background: var(--wf-accent-soft); }
|
|
111
|
+
.wf-root .wf-muted { color: var(--wf-ink-soft); }
|
|
112
|
+
.wf-root .wf-hint { color: var(--wf-ink-soft); font-size: 12.5px; }
|
|
113
|
+
.wf-root .wf-error { color: var(--wf-warn); }
|
|
114
|
+
.wf-root :is(.wf-alert, .wf-banner) { background: var(--wf-warn-soft); border: var(--wf-stroke) solid var(--wf-warn); border-radius: var(--wf-radius); padding: 8px 12px; color: var(--wf-warn); }
|
|
115
|
+
|
|
116
|
+
/* ---- lists ---- */
|
|
117
|
+
.wf-root .wf-list { list-style: none; margin: 0 0 8px; padding: 0; display: flex; flex-direction: column; gap: 6px; }
|
|
118
|
+
.wf-root .wf-list-item {
|
|
119
|
+
display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0;
|
|
120
|
+
background: var(--wf-card); border: var(--wf-stroke) solid var(--wf-line);
|
|
121
|
+
border-radius: var(--wf-radius); padding: 9px 12px;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* ---- media & placeholders ---- */
|
|
125
|
+
.wf-root :is(.wf-image, .wf-img, .wf-media) {
|
|
126
|
+
display: block; min-height: 84px; background: var(--wf-card);
|
|
127
|
+
background-image: linear-gradient(to top right, transparent 49.55%, var(--wf-line) 49.55%, var(--wf-line) 50.45%, transparent 50.45%),
|
|
128
|
+
linear-gradient(to bottom right, transparent 49.55%, var(--wf-line) 49.55%, var(--wf-line) 50.45%, transparent 50.45%);
|
|
129
|
+
border: var(--wf-stroke) solid var(--wf-line); border-radius: var(--wf-radius);
|
|
130
|
+
}
|
|
131
|
+
.wf-root .wf-avatar {
|
|
132
|
+
display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto;
|
|
133
|
+
width: 32px; height: 32px; border-radius: 999px; font-size: 12px; font-weight: 700;
|
|
134
|
+
background: var(--wf-card); border: var(--wf-stroke) solid var(--wf-line);
|
|
135
|
+
}
|
|
136
|
+
.wf-root .wf-loading {
|
|
137
|
+
display: block; height: 12px; width: 70%; border-radius: 999px; border: 0;
|
|
138
|
+
background: var(--wf-line);
|
|
139
|
+
}
|
|
140
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
141
|
+
.wf-root .wf-loading { animation: wf-pulse 1.6s ease-in-out infinite; }
|
|
142
|
+
}
|
|
143
|
+
@keyframes wf-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }
|
|
144
|
+
|
|
145
|
+
/* ---- rough handoff: once the overlay has drawn hand-drawn outlines, hide the
|
|
146
|
+
crisp borders it replaced (fills and text stay) so nothing is doubled. ---- */
|
|
147
|
+
[data-rough-ready="true"] .wf-root :is(
|
|
148
|
+
.wf-button, .wf-input, .wf-field, .wf-select, .wf-textarea,
|
|
149
|
+
.wf-card, .wf-box, .wf-panel, .wf-badge, .wf-chip, .wf-pill, .wf-tag,
|
|
150
|
+
.wf-list-item, .wf-avatar, .wf-image, .wf-img, .wf-media, .wf-alert, .wf-banner,
|
|
151
|
+
.wf-checkbox, .wf-radio, hr
|
|
152
|
+
) { border-color: transparent !important; }
|
|
153
|
+
`;
|
|
154
|
+
/**
|
|
155
|
+
* Class names the theme MUST style (superset of the generation contract's
|
|
156
|
+
* common vocabulary). The coverage test asserts each appears in the CSS so a
|
|
157
|
+
* generated artifact can never render a bare, unstyled block again.
|
|
158
|
+
*/
|
|
159
|
+
export const WIREFRAME_THEME_CLASSES = [
|
|
160
|
+
"wf-screen", "wf-topbar", "wf-content", "wf-footer", "wf-nav", "wf-sidebar",
|
|
161
|
+
"wf-row", "wf-col", "wf-grid", "wf-spacer",
|
|
162
|
+
"wf-card", "wf-box", "wf-panel", "wf-button", "wf-input", "wf-field", "wf-select", "wf-textarea", "wf-form",
|
|
163
|
+
"wf-checkbox", "wf-radio",
|
|
164
|
+
"wf-badge", "wf-chip", "wf-pill", "wf-tag",
|
|
165
|
+
"wf-muted", "wf-hint", "wf-error", "wf-alert", "wf-banner",
|
|
166
|
+
"wf-list", "wf-list-item",
|
|
167
|
+
"wf-image", "wf-img", "wf-media", "wf-avatar", "wf-loading",
|
|
168
|
+
];
|
|
169
|
+
//# sourceMappingURL=wireframe-theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireframe-theme.js","sourceRoot":"","sources":["../../../src/visual-plan/domain/wireframe-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwIlC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACzD,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY;IAC3E,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW;IAC1C,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS;IAC3G,aAAa,EAAE,UAAU;IACzB,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ;IAC1C,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW;IAC1D,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY;CAC3D,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crash-safe same-directory atomic write (Phase-1 inline copy).
|
|
3
|
+
*
|
|
4
|
+
* Same-dir tmp + renameSync (atomic on POSIX because tmp and target share a
|
|
5
|
+
* filesystem). A self-contained copy local to the visual-plan module; the
|
|
6
|
+
* shared `local-web/atomic-write.ts` is the general-purpose primitive. The tmp
|
|
7
|
+
* prefix keeps orphaned temps from ever matching the `phase-NN-*.md` glob.
|
|
8
|
+
*/
|
|
9
|
+
/** Write `content` to `targetPath` atomically via a same-directory temp file. */
|
|
10
|
+
export declare function atomicWriteFileSync(targetPath: string, content: string): void;
|
|
11
|
+
//# sourceMappingURL=atomic-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/atomic-write.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAyB7E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crash-safe same-directory atomic write (Phase-1 inline copy).
|
|
3
|
+
*
|
|
4
|
+
* Same-dir tmp + renameSync (atomic on POSIX because tmp and target share a
|
|
5
|
+
* filesystem). A self-contained copy local to the visual-plan module; the
|
|
6
|
+
* shared `local-web/atomic-write.ts` is the general-purpose primitive. The tmp
|
|
7
|
+
* prefix keeps orphaned temps from ever matching the `phase-NN-*.md` glob.
|
|
8
|
+
*/
|
|
9
|
+
import * as crypto from "node:crypto";
|
|
10
|
+
import * as fs from "node:fs";
|
|
11
|
+
import * as path from "node:path";
|
|
12
|
+
const TMP_PREFIX = ".visual-plan-tmp-";
|
|
13
|
+
/** Write `content` to `targetPath` atomically via a same-directory temp file. */
|
|
14
|
+
export function atomicWriteFileSync(targetPath, content) {
|
|
15
|
+
const dir = path.dirname(targetPath);
|
|
16
|
+
const tmpPath = path.join(dir, `${TMP_PREFIX}${crypto.randomBytes(6).toString("hex")}`);
|
|
17
|
+
fs.writeFileSync(tmpPath, content, "utf-8");
|
|
18
|
+
try {
|
|
19
|
+
try {
|
|
20
|
+
fs.renameSync(tmpPath, targetPath);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const e = error;
|
|
24
|
+
if (e.code === "EPERM") {
|
|
25
|
+
// Windows: target may be briefly locked by another process. Single retry.
|
|
26
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 50);
|
|
27
|
+
fs.renameSync(tmpPath, targetPath);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
try {
|
|
36
|
+
fs.unlinkSync(tmpPath);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// best-effort cleanup; surface the original error
|
|
40
|
+
}
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=atomic-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write.js","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/atomic-write.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,OAAe;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxF,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC;QACJ,IAAI,CAAC;YACJ,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,KAA8B,CAAC;YACzC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACxB,0EAA0E;gBAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACP,MAAM,KAAK,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACR,kDAAkD;QACnD,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Immutable feedback-batch storage under `<plan-dir>/visual-plan/feedback/`.
|
|
3
|
+
*
|
|
4
|
+
* A batch file is write-once: `writeBatch` refuses to overwrite an existing id
|
|
5
|
+
* (immutability is the misapplication guard). The batch id is validated against
|
|
6
|
+
* the strict `feedback-<ts>-<slug>` pattern BEFORE any path join (red-team M8),
|
|
7
|
+
* so a traversal/absolute/null-byte id can never escape the feedback dir.
|
|
8
|
+
* Batches are committed to git by default (Validation Session 1) — they are
|
|
9
|
+
* review evidence, like the plan files.
|
|
10
|
+
*/
|
|
11
|
+
import { type FeedbackBatch } from "../domain/feedback-schemas.js";
|
|
12
|
+
/** Persist a batch write-once. Returns false if a batch with this id already exists. */
|
|
13
|
+
export declare function writeBatch(planDir: string, batch: FeedbackBatch): boolean;
|
|
14
|
+
/** Read + validate a batch by id, or null when absent/invalid. Throws on a malformed id. */
|
|
15
|
+
export declare function readBatch(planDir: string, id: string): FeedbackBatch | null;
|
|
16
|
+
/** List batch ids present in the feedback dir (for `status` / orphan detection). */
|
|
17
|
+
export declare function listBatchIds(planDir: string): string[];
|
|
18
|
+
//# sourceMappingURL=feedback-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-repository.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/feedback-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAWxF,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAMzE;AAED,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAU3E;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAWtD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Immutable feedback-batch storage under `<plan-dir>/visual-plan/feedback/`.
|
|
3
|
+
*
|
|
4
|
+
* A batch file is write-once: `writeBatch` refuses to overwrite an existing id
|
|
5
|
+
* (immutability is the misapplication guard). The batch id is validated against
|
|
6
|
+
* the strict `feedback-<ts>-<slug>` pattern BEFORE any path join (red-team M8),
|
|
7
|
+
* so a traversal/absolute/null-byte id can never escape the feedback dir.
|
|
8
|
+
* Batches are committed to git by default (Validation Session 1) — they are
|
|
9
|
+
* review evidence, like the plan files.
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from "node:fs";
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
import { isValidFeedbackBatchId } from "../domain/ids.js";
|
|
14
|
+
import { FeedbackBatchSchema } from "../domain/feedback-schemas.js";
|
|
15
|
+
import { atomicWriteFileSync } from "./atomic-write.js";
|
|
16
|
+
const FEEDBACK_DIR = path.join("visual-plan", "feedback");
|
|
17
|
+
/** Absolute path to a batch file, validating the id BEFORE the join. Throws on a bad id. */
|
|
18
|
+
function batchPath(planDir, id) {
|
|
19
|
+
if (!isValidFeedbackBatchId(id))
|
|
20
|
+
throw new Error(`invalid feedback batch id: ${JSON.stringify(id)}`);
|
|
21
|
+
return path.join(planDir, FEEDBACK_DIR, `${id}.json`);
|
|
22
|
+
}
|
|
23
|
+
/** Persist a batch write-once. Returns false if a batch with this id already exists. */
|
|
24
|
+
export function writeBatch(planDir, batch) {
|
|
25
|
+
const file = batchPath(planDir, batch.id);
|
|
26
|
+
if (fs.existsSync(file))
|
|
27
|
+
return false; // immutable — never overwrite
|
|
28
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
29
|
+
atomicWriteFileSync(file, `${JSON.stringify(batch, null, 2)}\n`);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
/** Read + validate a batch by id, or null when absent/invalid. Throws on a malformed id. */
|
|
33
|
+
export function readBatch(planDir, id) {
|
|
34
|
+
const file = batchPath(planDir, id);
|
|
35
|
+
let text;
|
|
36
|
+
try {
|
|
37
|
+
text = fs.readFileSync(file, "utf-8");
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const parsed = FeedbackBatchSchema.safeParse(JSON.parse(text));
|
|
43
|
+
return parsed.success ? parsed.data : null;
|
|
44
|
+
}
|
|
45
|
+
/** List batch ids present in the feedback dir (for `status` / orphan detection). */
|
|
46
|
+
export function listBatchIds(planDir) {
|
|
47
|
+
try {
|
|
48
|
+
return fs
|
|
49
|
+
.readdirSync(path.join(planDir, FEEDBACK_DIR))
|
|
50
|
+
.filter((n) => n.endsWith(".json"))
|
|
51
|
+
.map((n) => n.slice(0, -5))
|
|
52
|
+
.filter(isValidFeedbackBatchId)
|
|
53
|
+
.sort();
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=feedback-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-repository.js","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/feedback-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;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,mBAAmB,EAAsB,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAE1D,4FAA4F;AAC5F,SAAS,SAAS,CAAC,OAAe,EAAE,EAAU;IAC7C,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrG,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,KAAoB;IAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,8BAA8B;IACrE,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,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC;AACb,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,EAAU;IACpD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACpC,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,IAAI,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC3C,IAAI,CAAC;QACJ,OAAO,EAAE;aACP,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;aAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC1B,MAAM,CAAC,sBAAsB,CAAC;aAC9B,IAAI,EAAE,CAAC;IACV,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source-hash computation + stale detection for the visual artifact.
|
|
3
|
+
*
|
|
4
|
+
* The artifact pins the SHA-256 of the Markdown plan it was generated from
|
|
5
|
+
* (`source.planHash`) and of every phase file (`source.phaseHashes`). If a
|
|
6
|
+
* human edits `plan.md`/`phase-*.md` after generation, the recomputed hash
|
|
7
|
+
* diverges and validation reports STALE_SOURCE_HASH — the artifact must be
|
|
8
|
+
* regenerated or re-hashed (`rehash`) before it can be approved (red-team M1).
|
|
9
|
+
*
|
|
10
|
+
* `artifactHash` (SHA-256 of the plan.json bytes) is the pointer cached in
|
|
11
|
+
* `.plan-state.json.visual.hash`; it detects artifact drift, not source drift.
|
|
12
|
+
*/
|
|
13
|
+
import { type ValidationError } from "../domain/errors.js";
|
|
14
|
+
import type { VisualPlan } from "../domain/schemas.js";
|
|
15
|
+
/** SHA-256 of a UTF-8 string, `sha256:`-prefixed lowercase hex. */
|
|
16
|
+
export declare function sha256(content: string): string;
|
|
17
|
+
/** SHA-256 of a file's bytes, or `null` if it cannot be read. */
|
|
18
|
+
export declare function hashFile(filePath: string): string | null;
|
|
19
|
+
/** SHA-256 of the artifact's on-disk bytes (the `.plan-state.json` pointer). */
|
|
20
|
+
export declare function artifactHash(planDir: string, artifactRelPath: string): string | null;
|
|
21
|
+
export interface SourceHashes {
|
|
22
|
+
planHash: string;
|
|
23
|
+
phaseHashes: Record<string, string>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Recompute source hashes from disk. `planPath` is resolved relative to
|
|
27
|
+
* `planDir`; phase files are discovered by the `phase-NN-*.md` convention in
|
|
28
|
+
* the plan directory. Missing plan file → empty planHash (validation catches it).
|
|
29
|
+
*/
|
|
30
|
+
export declare function computeSourceHashes(planDir: string, planPath: string): SourceHashes;
|
|
31
|
+
/**
|
|
32
|
+
* Compare the artifact's pinned source hashes against freshly-computed ones.
|
|
33
|
+
* Any divergence (plan bytes changed, a phase added/removed/edited) is a
|
|
34
|
+
* STALE_SOURCE_HASH error with the exact JSON path.
|
|
35
|
+
*/
|
|
36
|
+
export declare function checkSourceFreshness(plan: VisualPlan, planDir: string): ValidationError[];
|
|
37
|
+
//# sourceMappingURL=hashing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/infrastructure/hashing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKvD,mEAAmE;AACnE,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxD;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEpF;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAiBnF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAazF"}
|