openplanr 3.1.0 → 3.2.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/CHANGELOG.md +56 -0
- package/README.md +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +24 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/groups/delivery.d.ts.map +1 -1
- package/dist/cli/commands/groups/delivery.js +2 -0
- package/dist/cli/commands/groups/delivery.js.map +1 -1
- package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
- package/dist/cli/commands/planning-artifacts.js +22 -12
- package/dist/cli/commands/planning-artifacts.js.map +1 -1
- package/dist/cli/commands/ship.d.ts +3 -0
- package/dist/cli/commands/ship.d.ts.map +1 -0
- package/dist/cli/commands/ship.js +65 -0
- package/dist/cli/commands/ship.js.map +1 -0
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/{index-G7ygVDGg.js → index-L8qtwqv6.js} +2 -2
- package/dist/dashboard/assets/{index-G7ygVDGg.js.map → index-L8qtwqv6.js.map} +1 -1
- package/dist/dashboard/dashboard-manifest.json +8 -8
- package/dist/dashboard/index.html +1 -1
- package/dist/models/schema.d.ts +39 -23
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +19 -12
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +6 -0
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/global-install-service.d.ts +24 -0
- package/dist/services/global-install-service.d.ts.map +1 -0
- package/dist/services/global-install-service.js +68 -0
- package/dist/services/global-install-service.js.map +1 -0
- package/dist/services/id-service.d.ts +1 -5
- package/dist/services/id-service.d.ts.map +1 -1
- package/dist/services/id-service.js +1 -34
- package/dist/services/id-service.js.map +1 -1
- package/dist/services/ship-checks/changes.d.ts +24 -0
- package/dist/services/ship-checks/changes.d.ts.map +1 -0
- package/dist/services/ship-checks/changes.js +135 -0
- package/dist/services/ship-checks/changes.js.map +1 -0
- package/dist/services/ship-checks/contract.d.ts +81 -0
- package/dist/services/ship-checks/contract.d.ts.map +1 -0
- package/dist/services/ship-checks/contract.js +7 -0
- package/dist/services/ship-checks/contract.js.map +1 -0
- package/dist/services/ship-checks/discover.d.ts +10 -0
- package/dist/services/ship-checks/discover.d.ts.map +1 -0
- package/dist/services/ship-checks/discover.js +250 -0
- package/dist/services/ship-checks/discover.js.map +1 -0
- package/dist/services/ship-checks/glob.d.ts +5 -0
- package/dist/services/ship-checks/glob.d.ts.map +1 -0
- package/dist/services/ship-checks/glob.js +39 -0
- package/dist/services/ship-checks/glob.js.map +1 -0
- package/dist/services/ship-checks/hooks.d.ts +7 -0
- package/dist/services/ship-checks/hooks.d.ts.map +1 -0
- package/dist/services/ship-checks/hooks.js +65 -0
- package/dist/services/ship-checks/hooks.js.map +1 -0
- package/dist/services/ship-checks/packages.d.ts +29 -0
- package/dist/services/ship-checks/packages.d.ts.map +1 -0
- package/dist/services/ship-checks/packages.js +197 -0
- package/dist/services/ship-checks/packages.js.map +1 -0
- package/dist/services/ship-checks/related-tests.d.ts +13 -0
- package/dist/services/ship-checks/related-tests.d.ts.map +1 -0
- package/dist/services/ship-checks/related-tests.js +73 -0
- package/dist/services/ship-checks/related-tests.js.map +1 -0
- package/dist/services/ship-checks/scope.d.ts +8 -0
- package/dist/services/ship-checks/scope.d.ts.map +1 -0
- package/dist/services/ship-checks/scope.js +66 -0
- package/dist/services/ship-checks/scope.js.map +1 -0
- package/dist/services/ship-checks/task-requirements.d.ts +14 -0
- package/dist/services/ship-checks/task-requirements.d.ts.map +1 -0
- package/dist/services/ship-checks/task-requirements.js +145 -0
- package/dist/services/ship-checks/task-requirements.js.map +1 -0
- package/dist/services/ship-checks/workflows.d.ts +21 -0
- package/dist/services/ship-checks/workflows.d.ts.map +1 -0
- package/dist/services/ship-checks/workflows.js +208 -0
- package/dist/services/ship-checks/workflows.js.map +1 -0
- package/dist/services/template-service.d.ts +2 -0
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +4 -0
- package/dist/services/template-service.js.map +1 -1
- package/dist/services/upgrade-service.d.ts +15 -1
- package/dist/services/upgrade-service.d.ts.map +1 -1
- package/dist/services/upgrade-service.js +102 -13
- package/dist/services/upgrade-service.js.map +1 -1
- package/dist/utils/slugify.d.ts +1 -8
- package/dist/utils/slugify.d.ts.map +1 -1
- package/dist/utils/slugify.js +1 -25
- package/dist/utils/slugify.js.map +1 -1
- package/docs/CLI.md +48 -1
- package/lib/backlog-item.d.mts +49 -0
- package/lib/backlog-item.mjs +339 -0
- package/lib/host-packages/adapter-registry.json +5 -5
- package/lib/host-packages/capability-map.json +1 -1
- package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
- package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
- package/lib/host-packages/claude/openplanr/.openplanr-content.json +126 -90
- package/lib/host-packages/claude/openplanr/CONNECTORS.md +4 -6
- package/lib/host-packages/claude/openplanr/README.md +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-document.mjs +385 -79
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-handoff.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +45 -4
- package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → claude/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs} +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +8 -5
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +40 -7
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-shared-protocol-contracts-31a760fc.mjs → design-shared-protocol-contracts-b5f28f94.mjs} +284 -45
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design.mjs +215 -55
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +246 -45
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +163 -274
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +115 -240
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +215 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2766 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2170 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1583 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/{openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.20.0}/design-document.schema.json +78 -5
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +247 -45
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +45 -12
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/claude/openplanr/skills/connect/references/connectors.md +4 -6
- package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +12 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/craft.md +14 -3
- package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +33 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/discovery.md +18 -4
- package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +74 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/hosted-canvas.md +62 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/review.md +46 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +6 -0
- package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/craft.md +14 -3
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +33 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/discovery.md +18 -4
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +74 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/review.md +46 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +6 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/claude/openplanr/skills/design-review/references/craft.md +14 -3
- package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +33 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/discovery.md +18 -4
- package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +74 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/review.md +46 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +6 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +10 -1
- package/lib/host-packages/claude/openplanr/skills/investigate/references/findings.md +92 -0
- package/lib/host-packages/claude/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +3 -0
- package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/claude/openplanr/skills/share/references/connectors.md +4 -6
- package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +15 -4
- package/lib/host-packages/claude/openplanr/skills/ship/references/findings.md +92 -0
- package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +3 -1
- package/lib/host-packages/claude/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/claude/openplanr/skills/sprint/references/connectors.md +4 -6
- package/lib/host-packages/claude/openplanr/skills/status/references/connectors.md +4 -6
- package/lib/host-packages/claude/openplanr/skills/sync/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +125 -89
- package/lib/host-packages/cursor/openplanr/CONNECTORS.md +4 -6
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-connect/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/craft.md +14 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +33 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/discovery.md +18 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +74 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/hosted-canvas.md +62 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/review.md +46 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +6 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/craft.md +14 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +33 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/discovery.md +18 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +74 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/review.md +46 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +6 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/craft.md +14 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +33 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/discovery.md +18 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +74 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/review.md +46 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +6 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +12 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/findings.md +92 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +10 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +3 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-share/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/findings.md +92 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +3 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +15 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-status/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-document.mjs +385 -79
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-handoff.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +45 -4
- package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → cursor/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs} +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +8 -5
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +40 -7
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
- package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +284 -45
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design.mjs +215 -55
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +246 -45
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +163 -274
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +115 -240
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +215 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2766 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2170 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1583 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/{claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.20.0}/design-document.schema.json +78 -5
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +247 -45
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +45 -12
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
- package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
- package/lib/host-packages/openai/openplanr/.openplanr-content.json +128 -92
- package/lib/host-packages/openai/openplanr/CONNECTORS.md +4 -6
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-document.mjs +385 -79
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-handoff.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +45 -4
- package/lib/host-packages/{claude/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → openai/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs} +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +8 -5
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +40 -7
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
- package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +284 -45
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design.mjs +215 -55
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +246 -45
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +163 -274
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +115 -240
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +215 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2766 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2170 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1583 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.20.0}/design-document.schema.json +78 -5
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +247 -45
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +45 -12
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/openai/openplanr/skills/connect/references/connectors.md +4 -6
- package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +12 -0
- package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/craft.md +14 -3
- package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +33 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/discovery.md +18 -4
- package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +74 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/hosted-canvas.md +62 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/review.md +46 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +6 -0
- package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/craft.md +14 -3
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +33 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/discovery.md +18 -4
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +74 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/review.md +46 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +6 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/openai/openplanr/skills/design-review/references/craft.md +14 -3
- package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +33 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/discovery.md +18 -4
- package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +74 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/review.md +46 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +6 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +10 -1
- package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +22 -0
- package/lib/host-packages/openai/openplanr/skills/investigate/references/findings.md +92 -0
- package/lib/host-packages/openai/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +3 -0
- package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +78 -5
- package/lib/host-packages/openai/openplanr/skills/share/references/connectors.md +4 -6
- package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +15 -4
- package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +22 -0
- package/lib/host-packages/openai/openplanr/skills/ship/references/findings.md +92 -0
- package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +3 -1
- package/lib/host-packages/openai/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/openai/openplanr/skills/sprint/references/connectors.md +4 -6
- package/lib/host-packages/openai/openplanr/skills/status/references/connectors.md +4 -6
- package/lib/host-packages/openai/openplanr/skills/sync/references/connectors.md +4 -6
- package/package.json +3 -3
- package/dist/templates/backlog/backlog-item.md.hbs +0 -40
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
|
@@ -15,7 +15,9 @@ import {
|
|
|
15
15
|
} from "./design-handoff.mjs";
|
|
16
16
|
import {
|
|
17
17
|
inspectDesignDocument,
|
|
18
|
+
matchesDesignFrame,
|
|
18
19
|
prepareDesignDocument,
|
|
20
|
+
readDesignViewContext,
|
|
19
21
|
renderDesignDocument,
|
|
20
22
|
standaloneDesignHtml
|
|
21
23
|
} from "./design-document.mjs";
|
|
@@ -64,7 +66,7 @@ import {
|
|
|
64
66
|
PipelineError,
|
|
65
67
|
digestArtifactEnvelope
|
|
66
68
|
} from "./design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs";
|
|
67
|
-
import "./design-shared-protocol-contracts-
|
|
69
|
+
import "./design-shared-protocol-contracts-b5f28f94.mjs";
|
|
68
70
|
import "./design-shared-protocol-contracts-75a938cc.mjs";
|
|
69
71
|
|
|
70
72
|
// packages/design/lib/design/utility.mjs
|
|
@@ -147,7 +149,7 @@ function validatePin(pin, bundle) {
|
|
|
147
149
|
const entry = bundle.entries.find((value) => value.artifactId === pin.artifactId);
|
|
148
150
|
const frame = bundle.document.frames.find((value) => value.id === entry?.frameId);
|
|
149
151
|
const screen = bundle.document.screens.find((value) => value.id === entry?.screenId);
|
|
150
|
-
if (!entry ||
|
|
152
|
+
if (!entry || !matchesDesignFrame(frame, pin.viewport))
|
|
151
153
|
invalid("Feedback pin does not match its original screen and captured frame.");
|
|
152
154
|
if (pin.variant !== void 0 && pin.variant !== entry.variantId)
|
|
153
155
|
invalid("Feedback pin targets another design direction.");
|
|
@@ -422,7 +424,7 @@ async function manageDesignStudio(file, { action = "status", instanceId, env = p
|
|
|
422
424
|
}
|
|
423
425
|
|
|
424
426
|
// packages/design/lib/design/browser-audit.mjs
|
|
425
|
-
function auditRenderedScreen() {
|
|
427
|
+
function auditRenderedScreen({ height, frameBoundsSeverity = "warning" } = {}) {
|
|
426
428
|
const issues = [];
|
|
427
429
|
const add = (rule, severity, message) => issues.push({ rule, severity, message });
|
|
428
430
|
const label = (node) => node.getAttribute("data-planr-id") || node.id || `${node.tagName.toLowerCase()} \u201C${(node.textContent || node.getAttribute("aria-label") || "").trim().replace(/\s+/gu, " ").slice(0, 60)}\u201D`;
|
|
@@ -432,6 +434,19 @@ function auditRenderedScreen() {
|
|
|
432
434
|
add("screen-not-loaded", "error", "The frame has no authored design screen identity.");
|
|
433
435
|
if (document.readyState !== "complete")
|
|
434
436
|
add("screen-loading", "error", `The frame is still ${document.readyState}.`);
|
|
437
|
+
const documentHeight = document.documentElement.scrollHeight;
|
|
438
|
+
if (document.body && getComputedStyle(document.body).boxSizing !== "border-box")
|
|
439
|
+
add(
|
|
440
|
+
"board-root-box-sizing",
|
|
441
|
+
frameBoundsSeverity,
|
|
442
|
+
"The screen root body must use box-sizing: border-box."
|
|
443
|
+
);
|
|
444
|
+
if (height !== "auto" && documentHeight > viewport.height + 1)
|
|
445
|
+
add(
|
|
446
|
+
"vertical-overflow",
|
|
447
|
+
frameBoundsSeverity,
|
|
448
|
+
`The screen is ${documentHeight}px tall in a ${viewport.height}px frame.`
|
|
449
|
+
);
|
|
435
450
|
const nodes = [...document.querySelectorAll("body *")];
|
|
436
451
|
if (nodes.length > 5e3)
|
|
437
452
|
add(
|
|
@@ -476,9 +491,31 @@ function auditRenderedScreen() {
|
|
|
476
491
|
let checkedElements = 0, checkedContrast = 0, skippedContrast = 0, checkedFocus = 0;
|
|
477
492
|
const focusTargets = [];
|
|
478
493
|
for (const node of nodes.slice(0, 5e3)) {
|
|
494
|
+
const style = getComputedStyle(node);
|
|
495
|
+
const rect = node.getBoundingClientRect();
|
|
496
|
+
if (rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.visibility !== "collapse" && Number(style.opacity) > 0 && ["absolute", "fixed"].includes(style.position)) {
|
|
497
|
+
let { left, right, top, bottom } = rect;
|
|
498
|
+
for (let ancestor = node.parentElement; ancestor && ancestor !== document.body; ancestor = ancestor.parentElement) {
|
|
499
|
+
const clip = getComputedStyle(ancestor);
|
|
500
|
+
const bounds = ancestor.getBoundingClientRect();
|
|
501
|
+
if (["auto", "scroll", "hidden", "clip"].includes(clip.overflowX)) {
|
|
502
|
+
left = Math.max(left, bounds.left + ancestor.clientLeft);
|
|
503
|
+
right = Math.min(right, bounds.left + ancestor.clientLeft + ancestor.clientWidth);
|
|
504
|
+
}
|
|
505
|
+
if (["auto", "scroll", "hidden", "clip"].includes(clip.overflowY)) {
|
|
506
|
+
top = Math.max(top, bounds.top + ancestor.clientTop);
|
|
507
|
+
bottom = Math.min(bottom, bounds.top + ancestor.clientTop + ancestor.clientHeight);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
if (right > left && bottom > top && (left < -1 || right > viewport.width + 1 || top < -1 || bottom > (height === "auto" ? documentHeight : viewport.height) + 1))
|
|
511
|
+
add(
|
|
512
|
+
"outside-frame",
|
|
513
|
+
frameBoundsSeverity,
|
|
514
|
+
`${label(node)} is positioned outside the frame box.`
|
|
515
|
+
);
|
|
516
|
+
}
|
|
479
517
|
if (!visible(node)) continue;
|
|
480
518
|
checkedElements += 1;
|
|
481
|
-
const style = getComputedStyle(node);
|
|
482
519
|
const directText = [...node.childNodes].some(
|
|
483
520
|
(child) => child.nodeType === 3 && child.textContent.trim()
|
|
484
521
|
);
|
|
@@ -595,8 +632,62 @@ function auditRenderedScreen() {
|
|
|
595
632
|
issues
|
|
596
633
|
};
|
|
597
634
|
}
|
|
598
|
-
async function
|
|
635
|
+
async function attachedArtifactFrame(page, artifactId, warn) {
|
|
636
|
+
const deadline = Date.now() + 5e3;
|
|
637
|
+
const escaped = artifactId.replace(
|
|
638
|
+
/[^a-z0-9_-]/giu,
|
|
639
|
+
(char) => `\\${char.codePointAt(0).toString(16)} `
|
|
640
|
+
);
|
|
641
|
+
const handle = await page.waitForSelector(
|
|
642
|
+
`iframe[data-planr-artifact-frame="${escaped}"], iframe[data-planr-artifact-id="${escaped}"]`,
|
|
643
|
+
{ state: "attached", timeout: 5e3 }
|
|
644
|
+
);
|
|
645
|
+
try {
|
|
646
|
+
return await new Promise((resolve3, reject) => {
|
|
647
|
+
let settled = false;
|
|
648
|
+
const finish = (error, frame) => {
|
|
649
|
+
if (settled) return;
|
|
650
|
+
settled = true;
|
|
651
|
+
clearTimeout(timer);
|
|
652
|
+
page.off("frameattached", inspect);
|
|
653
|
+
page.off("framenavigated", inspect);
|
|
654
|
+
if (error) reject(error);
|
|
655
|
+
else resolve3(frame);
|
|
656
|
+
};
|
|
657
|
+
const inspect = async (frame) => {
|
|
658
|
+
if (settled || frame === page.mainFrame?.()) return;
|
|
659
|
+
try {
|
|
660
|
+
const candidate = await frame.frameElement();
|
|
661
|
+
let matches;
|
|
662
|
+
try {
|
|
663
|
+
matches = await handle.evaluate((element, other) => element === other, candidate);
|
|
664
|
+
} finally {
|
|
665
|
+
await candidate.dispose?.();
|
|
666
|
+
}
|
|
667
|
+
if (matches) finish(null, frame);
|
|
668
|
+
} catch (error) {
|
|
669
|
+
if (!settled) warn(error);
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
const timer = setTimeout(
|
|
673
|
+
() => finish(new Error(`No frame attached for artifact ${artifactId} within 5000ms.`)),
|
|
674
|
+
Math.max(1, deadline - Date.now())
|
|
675
|
+
);
|
|
676
|
+
page.on("frameattached", inspect);
|
|
677
|
+
page.on("framenavigated", inspect);
|
|
678
|
+
handle.contentFrame().then((frame) => {
|
|
679
|
+
if (frame) finish(null, frame);
|
|
680
|
+
}, finish);
|
|
681
|
+
});
|
|
682
|
+
} finally {
|
|
683
|
+
await handle.dispose?.();
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
async function auditDesignPage(page, { revision, document: document2, entries = [], screenshotPaths = [], scenarios = [] } = {}) {
|
|
687
|
+
if (!document2 || typeof document2 !== "object" || Array.isArray(document2))
|
|
688
|
+
throw new TypeError("Audit requires a design document input.");
|
|
599
689
|
const issues = [], checkedArtifacts = [], screens = [];
|
|
690
|
+
const frameBoundsSeverity = document2.frames?.some((frame) => frame.height === "auto") ? "error" : "warning";
|
|
600
691
|
const expected = new Map(entries.map((entry) => [entry.artifactId, entry]));
|
|
601
692
|
const add = (artifactId, rule, severity, message) => issues.push({ artifactId, rule, severity, message });
|
|
602
693
|
if (!entries.length || expected.size !== entries.length)
|
|
@@ -626,62 +717,125 @@ async function auditDesignPage(page, { revision, entries = [], screenshotPaths =
|
|
|
626
717
|
};
|
|
627
718
|
}
|
|
628
719
|
const loaded = /* @__PURE__ */ new Set();
|
|
629
|
-
for (const
|
|
630
|
-
let
|
|
720
|
+
for (const entry of expected.values()) {
|
|
721
|
+
let frameHold;
|
|
631
722
|
try {
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
723
|
+
try {
|
|
724
|
+
frameHold = await page.evaluateHandle?.((id) => {
|
|
725
|
+
const stage = window.__openPlanrArtifactStage;
|
|
726
|
+
return stage?.frameBudget ? stage.holdFrames([id]) : null;
|
|
727
|
+
}, entry.artifactId);
|
|
728
|
+
await page.evaluate?.(async (id) => {
|
|
729
|
+
const stage = window.__openPlanrArtifactStage;
|
|
730
|
+
if (stage?.frameBudget) await stage.ensureFrames([id]);
|
|
731
|
+
}, entry.artifactId);
|
|
732
|
+
} catch (error) {
|
|
637
733
|
add(
|
|
638
|
-
artifactId,
|
|
639
|
-
"
|
|
734
|
+
entry.artifactId,
|
|
735
|
+
"frame-load-error",
|
|
640
736
|
"error",
|
|
641
|
-
|
|
737
|
+
`The rendered frame could not be mounted: ${error.message}`
|
|
642
738
|
);
|
|
643
739
|
continue;
|
|
644
740
|
}
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
741
|
+
let frames;
|
|
742
|
+
if (["waitForSelector", "on", "off"].every((method) => typeof page[method] === "function")) {
|
|
743
|
+
try {
|
|
744
|
+
const frame = await attachedArtifactFrame(
|
|
745
|
+
page,
|
|
746
|
+
entry.artifactId,
|
|
747
|
+
(error) => add(
|
|
748
|
+
entry.artifactId,
|
|
749
|
+
"frame-attachment-inspection-error",
|
|
750
|
+
"warning",
|
|
751
|
+
`A frame attachment could not be matched to artifact ${entry.artifactId}: ${error.message}`
|
|
752
|
+
)
|
|
753
|
+
);
|
|
754
|
+
frames = [frame, ...page.frames().filter((candidate) => candidate !== frame)];
|
|
755
|
+
} catch (error) {
|
|
756
|
+
add(
|
|
757
|
+
entry.artifactId,
|
|
758
|
+
"frame-load-error",
|
|
759
|
+
"error",
|
|
760
|
+
`Artifact ${entry.artifactId} has no frame attached for inspection: ${error.message}`
|
|
761
|
+
);
|
|
762
|
+
continue;
|
|
763
|
+
}
|
|
764
|
+
} else frames = page.frames();
|
|
765
|
+
for (const frame of frames) {
|
|
766
|
+
let handle, artifactId, panelState;
|
|
767
|
+
try {
|
|
768
|
+
if (frame === page.mainFrame?.()) continue;
|
|
769
|
+
handle = await frame.frameElement();
|
|
770
|
+
artifactId = await handle.getAttribute("data-planr-artifact-frame") ?? await handle.getAttribute("data-planr-artifact-id");
|
|
771
|
+
if (artifactId !== entry.artifactId) continue;
|
|
772
|
+
if (loaded.has(artifactId)) {
|
|
773
|
+
add(
|
|
774
|
+
artifactId,
|
|
775
|
+
"duplicate-frame",
|
|
776
|
+
"error",
|
|
777
|
+
"Multiple frames claim the same artifact identity."
|
|
778
|
+
);
|
|
779
|
+
continue;
|
|
780
|
+
}
|
|
781
|
+
loaded.add(artifactId);
|
|
782
|
+
await frame.waitForLoadState?.("load", { timeout: 5e3 });
|
|
783
|
+
panelState = await handle.evaluate((element) => {
|
|
784
|
+
const panel = element.closest("[data-artifact-id]");
|
|
785
|
+
if (!panel) return null;
|
|
786
|
+
const hidden = panel.hidden;
|
|
787
|
+
panel.hidden = false;
|
|
788
|
+
return { hidden };
|
|
789
|
+
});
|
|
790
|
+
await page.keyboard?.press("Tab");
|
|
791
|
+
const result = await frame.evaluate(auditRenderedScreen, {
|
|
792
|
+
height: entry.height,
|
|
793
|
+
frameBoundsSeverity
|
|
794
|
+
});
|
|
795
|
+
if (result.screenId !== entry.screenId) {
|
|
796
|
+
add(
|
|
797
|
+
artifactId,
|
|
798
|
+
"screen-identity-mismatch",
|
|
799
|
+
"error",
|
|
800
|
+
`Expected screen ${entry.screenId}; loaded ${result.screenId ?? "none"}.`
|
|
801
|
+
);
|
|
802
|
+
continue;
|
|
803
|
+
}
|
|
804
|
+
checkedArtifacts.push(artifactId);
|
|
805
|
+
screens.push({ artifactId, ...result });
|
|
806
|
+
for (const issue of result.issues)
|
|
807
|
+
add(artifactId, issue.rule, issue.severity, issue.message);
|
|
808
|
+
} catch (error) {
|
|
809
|
+
if (artifactId && expected.has(artifactId))
|
|
810
|
+
add(
|
|
811
|
+
artifactId,
|
|
812
|
+
"frame-load-error",
|
|
813
|
+
"error",
|
|
814
|
+
`The rendered frame could not be inspected: ${error.message}`
|
|
815
|
+
);
|
|
816
|
+
} finally {
|
|
817
|
+
if (panelState && handle) {
|
|
818
|
+
await handle.evaluate((element, state) => {
|
|
819
|
+
const panel = element.closest("[data-artifact-id]");
|
|
820
|
+
if (panel) panel.hidden = state.hidden;
|
|
821
|
+
}, panelState).catch(
|
|
822
|
+
(error) => add(
|
|
823
|
+
artifactId,
|
|
824
|
+
"panel-visibility-restore-error",
|
|
825
|
+
"warning",
|
|
826
|
+
`Artifact ${artifactId} panel visibility could not be restored: ${error.message}`
|
|
827
|
+
)
|
|
828
|
+
);
|
|
829
|
+
}
|
|
830
|
+
await handle?.dispose?.();
|
|
831
|
+
}
|
|
664
832
|
}
|
|
665
|
-
checkedArtifacts.push(artifactId);
|
|
666
|
-
screens.push({ artifactId, ...result });
|
|
667
|
-
for (const issue of result.issues) add(artifactId, issue.rule, issue.severity, issue.message);
|
|
668
|
-
} catch (error) {
|
|
669
|
-
if (artifactId && expected.has(artifactId))
|
|
670
|
-
add(
|
|
671
|
-
artifactId,
|
|
672
|
-
"frame-load-error",
|
|
673
|
-
"error",
|
|
674
|
-
`The rendered frame could not be inspected: ${error.message}`
|
|
675
|
-
);
|
|
676
833
|
} finally {
|
|
677
|
-
|
|
678
|
-
await
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
}, panelState).catch(() => {
|
|
682
|
-
});
|
|
834
|
+
try {
|
|
835
|
+
await frameHold?.evaluate((release) => release?.());
|
|
836
|
+
} finally {
|
|
837
|
+
await frameHold?.dispose();
|
|
683
838
|
}
|
|
684
|
-
await handle?.dispose?.();
|
|
685
839
|
}
|
|
686
840
|
}
|
|
687
841
|
for (const artifactId of expected.keys()) {
|
|
@@ -737,7 +891,7 @@ function verifyDesignDocument(file, report) {
|
|
|
737
891
|
const coverage = current.entries.every((entry) => {
|
|
738
892
|
const frame = current.document.frames.find((item) => item.id === entry.frameId);
|
|
739
893
|
const matches = screenEvidence.filter((item) => item?.artifactId === entry.artifactId);
|
|
740
|
-
return checkedArtifacts.includes(entry.artifactId) && matches.length === 1 && matches[0].screenId === entry.screenId &&
|
|
894
|
+
return checkedArtifacts.includes(entry.artifactId) && matches.length === 1 && matches[0].screenId === entry.screenId && matchesDesignFrame(frame, matches[0].viewport) && Number.isInteger(matches[0].checkedElements) && matches[0].checkedElements > 0;
|
|
741
895
|
});
|
|
742
896
|
const images = (Array.isArray(report.screenshots) ? report.screenshots : []).filter((item) => {
|
|
743
897
|
const path = typeof item === "string" ? item : item?.path;
|
|
@@ -778,7 +932,7 @@ async function designUtility(argv, {
|
|
|
778
932
|
} = {}) {
|
|
779
933
|
if (argv.length === 0 || argv[0] === "--help" || argv[0] === "help") {
|
|
780
934
|
const help = {
|
|
781
|
-
usage: "design.mjs inspect|validate|render|open|studio|export|feedback|verify|share|publish|sync|manage|handoff <design-document.json>",
|
|
935
|
+
usage: "design.mjs inspect|validate|render|open|studio|view-context|export|feedback|verify|share|publish|sync|manage|handoff <design-document.json>",
|
|
782
936
|
flags: [
|
|
783
937
|
"--json",
|
|
784
938
|
"--no-open",
|
|
@@ -791,6 +945,7 @@ async function designUtility(argv, {
|
|
|
791
945
|
"--action inspect|export|import|select|resolve|rotate|pause|resume|revoke|delete|recovery|restore|status|stop",
|
|
792
946
|
"--input <private recovery or feedback JSON file>",
|
|
793
947
|
"--revision <current-render-revision>",
|
|
948
|
+
"--request-time <ISO-timestamp>",
|
|
794
949
|
"--allow-stale",
|
|
795
950
|
"--variant <id>",
|
|
796
951
|
"--pins <id,id>",
|
|
@@ -808,6 +963,7 @@ async function designUtility(argv, {
|
|
|
808
963
|
"render",
|
|
809
964
|
"open",
|
|
810
965
|
"studio",
|
|
966
|
+
"view-context",
|
|
811
967
|
"export",
|
|
812
968
|
"feedback",
|
|
813
969
|
"verify",
|
|
@@ -818,7 +974,7 @@ async function designUtility(argv, {
|
|
|
818
974
|
"handoff"
|
|
819
975
|
].includes(command) || !input)
|
|
820
976
|
throw new Error(
|
|
821
|
-
"Usage: design.mjs inspect|validate|render|open|studio|export|feedback|verify|share|publish|sync|manage|handoff <design-document.json> [--json] [--no-open] [--view canvas|prototype|walkthrough]"
|
|
977
|
+
"Usage: design.mjs inspect|validate|render|open|studio|view-context|export|feedback|verify|share|publish|sync|manage|handoff <design-document.json> [--json] [--no-open] [--view canvas|prototype|walkthrough]"
|
|
822
978
|
);
|
|
823
979
|
const flags = {};
|
|
824
980
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -840,6 +996,7 @@ async function designUtility(argv, {
|
|
|
840
996
|
"input",
|
|
841
997
|
"scope",
|
|
842
998
|
"revision",
|
|
999
|
+
"request-time",
|
|
843
1000
|
"allow-stale"
|
|
844
1001
|
].includes(key))
|
|
845
1002
|
throw new Error(`Unknown option: ${args[i]}`);
|
|
@@ -849,6 +1006,8 @@ async function designUtility(argv, {
|
|
|
849
1006
|
throw new Error("View must be canvas, prototype, or walkthrough.");
|
|
850
1007
|
const file = resolve2(input);
|
|
851
1008
|
let result;
|
|
1009
|
+
if (command === "view-context")
|
|
1010
|
+
result = readDesignViewContext(file, { requestTime: flags["request-time"] });
|
|
852
1011
|
if (command === "studio")
|
|
853
1012
|
result = await manageDesignStudio(file, {
|
|
854
1013
|
action: flags.action,
|
|
@@ -1023,5 +1182,6 @@ export {
|
|
|
1023
1182
|
auditRenderedScreen,
|
|
1024
1183
|
designUtility,
|
|
1025
1184
|
main,
|
|
1185
|
+
readDesignViewContext,
|
|
1026
1186
|
verifyDesignDocument
|
|
1027
1187
|
};
|
|
@@ -46,35 +46,35 @@
|
|
|
46
46
|
function normalized(value) {
|
|
47
47
|
return Math.round(clamp(value) * 1e6) / 1e6;
|
|
48
48
|
}
|
|
49
|
-
function assertRect(
|
|
50
|
-
if (!
|
|
49
|
+
function assertRect(rect2) {
|
|
50
|
+
if (!rect2 || !Number.isFinite(rect2.left) || !Number.isFinite(rect2.top) || !Number.isFinite(rect2.width) || !Number.isFinite(rect2.height) || rect2.width <= 0 || rect2.height <= 0) {
|
|
51
51
|
throw new RangeError("Artifact bounds must have positive finite dimensions.");
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
function clientSelectionToNormalized(
|
|
55
|
-
assertRect(
|
|
54
|
+
function clientSelectionToNormalized(rect2, start, end = start, { dragThreshold = ARTIFACT_ANNOTATION_LIMITS.dragThreshold } = {}) {
|
|
55
|
+
assertRect(rect2);
|
|
56
56
|
const startX = clamp(
|
|
57
|
-
finite(start?.x ?? start?.clientX,
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
finite(start?.x ?? start?.clientX, rect2.left),
|
|
58
|
+
rect2.left,
|
|
59
|
+
rect2.left + rect2.width
|
|
60
60
|
);
|
|
61
61
|
const startY = clamp(
|
|
62
|
-
finite(start?.y ?? start?.clientY,
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
finite(start?.y ?? start?.clientY, rect2.top),
|
|
63
|
+
rect2.top,
|
|
64
|
+
rect2.top + rect2.height
|
|
65
65
|
);
|
|
66
|
-
const endX = clamp(finite(end?.x ?? end?.clientX, startX),
|
|
67
|
-
const endY = clamp(finite(end?.y ?? end?.clientY, startY),
|
|
66
|
+
const endX = clamp(finite(end?.x ?? end?.clientX, startX), rect2.left, rect2.left + rect2.width);
|
|
67
|
+
const endY = clamp(finite(end?.y ?? end?.clientY, startY), rect2.top, rect2.top + rect2.height);
|
|
68
68
|
const dragged = Math.hypot(endX - startX, endY - startY) >= Math.max(0, finite(dragThreshold, 4));
|
|
69
69
|
const left = dragged ? Math.min(startX, endX) : startX;
|
|
70
70
|
const top = dragged ? Math.min(startY, endY) : startY;
|
|
71
71
|
const right = dragged ? Math.max(startX, endX) : startX;
|
|
72
72
|
const bottom = dragged ? Math.max(startY, endY) : startY;
|
|
73
73
|
return Object.freeze({
|
|
74
|
-
x: normalized((left -
|
|
75
|
-
y: normalized((top -
|
|
76
|
-
w: normalized((right - left) /
|
|
77
|
-
h: normalized((bottom - top) /
|
|
74
|
+
x: normalized((left - rect2.left) / rect2.width),
|
|
75
|
+
y: normalized((top - rect2.top) / rect2.height),
|
|
76
|
+
w: normalized((right - left) / rect2.width),
|
|
77
|
+
h: normalized((bottom - top) / rect2.height)
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
function artifactAnchorPoint(region, viewport) {
|
|
@@ -271,8 +271,8 @@
|
|
|
271
271
|
]);
|
|
272
272
|
}
|
|
273
273
|
function setPinPosition(record2, region) {
|
|
274
|
-
const
|
|
275
|
-
setRegionStyle(record2.button,
|
|
274
|
+
const point3 = { x: region.x + region.w / 2, y: region.y + region.h / 2, w: 0, h: 0 };
|
|
275
|
+
setRegionStyle(record2.button, point3);
|
|
276
276
|
if (record2.region) setRegionStyle(record2.region, region);
|
|
277
277
|
if (record2.button.hidden) record2.button.hidden = false;
|
|
278
278
|
if (record2.region?.hidden) record2.region.hidden = false;
|
|
@@ -448,10 +448,10 @@
|
|
|
448
448
|
}
|
|
449
449
|
async function resolveAnchor(token3, candidate) {
|
|
450
450
|
const frame = frameFor(candidate.artifactId);
|
|
451
|
-
const
|
|
451
|
+
const point3 = artifactAnchorPoint(candidate.region, candidate.viewport);
|
|
452
452
|
let result = null;
|
|
453
453
|
try {
|
|
454
|
-
const anchor2 = frame?.__openPlanrBridge?.hitTest?.(
|
|
454
|
+
const anchor2 = frame?.__openPlanrBridge?.hitTest?.(point3.x, point3.y);
|
|
455
455
|
if (anchor2) {
|
|
456
456
|
result = await Promise.race([
|
|
457
457
|
anchor2,
|
|
@@ -486,15 +486,15 @@
|
|
|
486
486
|
composer.style.width = `${Math.min(360, availableWidth)}px`;
|
|
487
487
|
composer.style.maxHeight = `${Math.min(620, availableHeight)}px`;
|
|
488
488
|
const bounds2 = layer.getBoundingClientRect();
|
|
489
|
-
const
|
|
489
|
+
const point3 = {
|
|
490
490
|
x: bounds2.left + clamp(draft.displayRegion.x + draft.displayRegion.w / 2) * bounds2.width,
|
|
491
491
|
y: bounds2.top + clamp(draft.displayRegion.y + draft.displayRegion.h / 2) * bounds2.height
|
|
492
492
|
};
|
|
493
493
|
const size = composer.getBoundingClientRect();
|
|
494
494
|
const width = Math.min(size.width || 360, availableWidth), height = Math.min(size.height || 360, availableHeight);
|
|
495
|
-
const left =
|
|
495
|
+
const left = point3.x + 16 + width <= viewport.x + viewport.width - margin ? point3.x + 16 : point3.x - width - 16;
|
|
496
496
|
composer.style.left = `${clamp(left, viewport.x + margin, viewport.x + viewport.width - width - margin)}px`;
|
|
497
|
-
composer.style.top = `${clamp(
|
|
497
|
+
composer.style.top = `${clamp(point3.y + 16, viewport.y + margin, viewport.y + viewport.height - height - margin)}px`;
|
|
498
498
|
}
|
|
499
499
|
function openComposer(detail, { restoredDraft = null } = {}) {
|
|
500
500
|
const opener = document2.activeElement;
|