openplanr 3.2.0 → 3.4.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 +73 -0
- package/dist/cli/commands/artifact-design-share.d.ts +9 -0
- package/dist/cli/commands/artifact-design-share.d.ts.map +1 -0
- package/dist/cli/commands/artifact-design-share.js +200 -0
- package/dist/cli/commands/artifact-design-share.js.map +1 -0
- package/dist/cli/commands/artifact.d.ts.map +1 -1
- package/dist/cli/commands/artifact.js +5 -18
- package/dist/cli/commands/artifact.js.map +1 -1
- package/dist/cli/commands/ship.d.ts.map +1 -1
- package/dist/cli/commands/ship.js +2 -0
- package/dist/cli/commands/ship.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +2 -1
- package/dist/cli/commands/spec.d.ts.map +1 -1
- package/dist/cli/commands/spec.js +45 -5
- package/dist/cli/commands/spec.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +2 -2
- package/dist/dashboard/assets/index-Cv4Vwhuw.css +2 -0
- package/dist/dashboard/assets/index-CvQAlBy3.js +75 -0
- package/dist/dashboard/assets/index-CvQAlBy3.js.map +1 -0
- package/dist/dashboard/dashboard-manifest.json +14 -14
- package/dist/dashboard/index.html +2 -2
- package/dist/services/claude-plugin-service.d.ts +5 -0
- package/dist/services/claude-plugin-service.d.ts.map +1 -1
- package/dist/services/claude-plugin-service.js +18 -2
- package/dist/services/claude-plugin-service.js.map +1 -1
- package/dist/services/codex-plugin-service.d.ts.map +1 -1
- package/dist/services/codex-plugin-service.js +11 -3
- package/dist/services/codex-plugin-service.js.map +1 -1
- package/dist/services/design-artifact-service.d.ts +20 -1
- package/dist/services/design-artifact-service.d.ts.map +1 -1
- package/dist/services/design-artifact-service.js +137 -18
- package/dist/services/design-artifact-service.js.map +1 -1
- package/dist/services/runtime-manager/codex-discovery.d.ts +1 -3
- package/dist/services/runtime-manager/codex-discovery.d.ts.map +1 -1
- package/dist/services/runtime-manager/codex-discovery.js +3 -16
- package/dist/services/runtime-manager/codex-discovery.js.map +1 -1
- package/dist/services/runtime-manager/doctor.d.ts +25 -0
- package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
- package/dist/services/runtime-manager/doctor.js +480 -0
- package/dist/services/runtime-manager/doctor.js.map +1 -1
- package/dist/services/runtime-manager/errors.d.ts +12 -0
- package/dist/services/runtime-manager/errors.d.ts.map +1 -0
- package/dist/services/runtime-manager/errors.js +14 -0
- package/dist/services/runtime-manager/errors.js.map +1 -0
- package/dist/services/runtime-manager/global-state.d.ts +7 -0
- package/dist/services/runtime-manager/global-state.d.ts.map +1 -1
- package/dist/services/runtime-manager/global-state.js +116 -0
- package/dist/services/runtime-manager/global-state.js.map +1 -1
- package/dist/services/runtime-manager/host-version-probe.d.ts +8 -0
- package/dist/services/runtime-manager/host-version-probe.d.ts.map +1 -0
- package/dist/services/runtime-manager/host-version-probe.js +14 -0
- package/dist/services/runtime-manager/host-version-probe.js.map +1 -0
- package/dist/services/runtime-manager/install-plan.d.ts +25 -0
- package/dist/services/runtime-manager/install-plan.d.ts.map +1 -1
- package/dist/services/runtime-manager/install-plan.js +305 -0
- package/dist/services/runtime-manager/install-plan.js.map +1 -1
- package/dist/services/runtime-manager/inventory.d.ts +6 -0
- package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
- package/dist/services/runtime-manager/inventory.js +16 -1
- package/dist/services/runtime-manager/inventory.js.map +1 -1
- package/dist/services/runtime-manager/legacy-adapters.d.ts +9 -0
- package/dist/services/runtime-manager/legacy-adapters.d.ts.map +1 -0
- package/dist/services/runtime-manager/legacy-adapters.js +187 -0
- package/dist/services/runtime-manager/legacy-adapters.js.map +1 -0
- package/dist/services/runtime-manager/paths.d.ts +18 -0
- package/dist/services/runtime-manager/paths.d.ts.map +1 -0
- package/dist/services/runtime-manager/paths.js +83 -0
- package/dist/services/runtime-manager/paths.js.map +1 -0
- package/dist/services/runtime-manager/runtime-package.d.ts +21 -0
- package/dist/services/runtime-manager/runtime-package.d.ts.map +1 -1
- package/dist/services/runtime-manager/runtime-package.js +77 -0
- package/dist/services/runtime-manager/runtime-package.js.map +1 -1
- package/dist/services/runtime-manager/storage.d.ts +47 -0
- package/dist/services/runtime-manager/storage.d.ts.map +1 -0
- package/dist/services/runtime-manager/storage.js +604 -0
- package/dist/services/runtime-manager/storage.js.map +1 -0
- package/dist/services/runtime-manager-service.d.ts +7 -17
- package/dist/services/runtime-manager-service.d.ts.map +1 -1
- package/dist/services/runtime-manager-service.js +32 -1695
- package/dist/services/runtime-manager-service.js.map +1 -1
- package/dist/services/ship-checks/contract.d.ts +15 -1
- package/dist/services/ship-checks/contract.d.ts.map +1 -1
- package/dist/services/ship-checks/contract.js +1 -1
- package/dist/services/ship-checks/contract.js.map +1 -1
- package/dist/services/ship-checks/coverage.d.ts +4 -0
- package/dist/services/ship-checks/coverage.d.ts.map +1 -0
- package/dist/services/ship-checks/coverage.js +113 -0
- package/dist/services/ship-checks/coverage.js.map +1 -0
- package/dist/services/ship-checks/discover.d.ts.map +1 -1
- package/dist/services/ship-checks/discover.js +5 -1
- package/dist/services/ship-checks/discover.js.map +1 -1
- package/dist/services/ship-checks/package-contents.d.ts +4 -0
- package/dist/services/ship-checks/package-contents.d.ts.map +1 -0
- package/dist/services/ship-checks/package-contents.js +91 -0
- package/dist/services/ship-checks/package-contents.js.map +1 -0
- package/dist/services/ship-checks/packages.d.ts +2 -0
- package/dist/services/ship-checks/packages.d.ts.map +1 -1
- package/dist/services/ship-checks/packages.js +4 -0
- package/dist/services/ship-checks/packages.js.map +1 -1
- package/dist/services/ship-checks/scope.js +2 -1
- package/dist/services/ship-checks/scope.js.map +1 -1
- package/dist/services/spec-service.d.ts +18 -0
- package/dist/services/spec-service.d.ts.map +1 -1
- package/dist/services/spec-service.js +174 -9
- package/dist/services/spec-service.js.map +1 -1
- package/dist/templates/spec/spec-shaped.md.hbs +1 -1
- package/dist/templates/spec/spec.md.hbs +2 -2
- package/dist/utils/splice-managed-block.js +1 -1
- package/dist/utils/splice-managed-block.js.map +1 -1
- package/docs/CLI.md +86 -2
- package/lib/host-packages/adapter-registry.json +5 -5
- package/lib/host-packages/capability-map.json +3 -3
- package/lib/host-packages/claude/.claude-plugin/marketplace.json +3 -3
- package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +6 -6
- package/lib/host-packages/claude/openplanr/.openplanr-content.json +94 -146
- package/lib/host-packages/claude/openplanr/README.md +12 -12
- package/lib/host-packages/claude/openplanr/agents/planr-qa.md +5 -3
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/task-context-resolution.md +4 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-artifact-shell.mjs +2 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-document.mjs +110 -25
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-handoff.mjs +851 -57
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review-state-store.mjs +45 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +65 -74
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-runtime-home.mjs +0 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share-cli-bridge.mjs +321 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-d707e49b.mjs +1652 -0
- package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs → claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-9f6918b0.mjs} +537 -5
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-design-support-0bac378d.mjs +137 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design.mjs +374 -61
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -59
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +138 -133
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +1 -5608
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-artifact-review-ui.js +2568 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +10 -74
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +8 -2
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +2 -2
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +5 -5
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +72 -2
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +14 -7
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +71 -34
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +28 -14
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +12 -12
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/{openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.20.0 → claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +131 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +616 -4775
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +219 -424
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/claude/openplanr/skills/delegate/SKILL.md +2 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/references/integration-review.md +26 -20
- package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +25 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/references/run-handoff.md +2 -2
- package/lib/host-packages/claude/openplanr/skills/delegate/references/worktree-custody.md +17 -9
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/claude.mjs +15 -3
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/codex.mjs +38 -2
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/native.mjs +5 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/custody.mjs +217 -10
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/handoff.mjs +1080 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/integrate.mjs +96 -201
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/integration-files.mjs +3 -382
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/presentation.mjs +29 -12
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-contract.mjs +11 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-execution.mjs +1 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-lifecycle.mjs +14 -10
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-preparation.mjs +4 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-record.mjs +2 -2
- package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +17 -2
- package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +60 -2
- package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +23 -7
- package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +17 -2
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +60 -2
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +23 -7
- package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +17 -2
- package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +60 -2
- package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +23 -7
- package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +2 -1
- package/lib/host-packages/claude/openplanr/skills/investigate/references/fail-first.md +40 -0
- package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +21 -11
- package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +51 -18
- package/lib/host-packages/claude/openplanr/skills/ship/references/fail-first.md +40 -0
- package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +7 -3
- package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +6 -0
- package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +3 -1
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +91 -143
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/integration-review.md +26 -20
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +25 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/run-handoff.md +2 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/worktree-custody.md +17 -9
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/claude.mjs +15 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/codex.mjs +38 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/native.mjs +5 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/custody.mjs +217 -10
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/handoff.mjs +1080 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/integrate.mjs +96 -201
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/integration-files.mjs +3 -382
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/presentation.mjs +29 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-contract.mjs +11 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-execution.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-lifecycle.mjs +14 -10
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-preparation.mjs +4 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-record.mjs +2 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate.mdc +2 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +17 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +60 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +23 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +17 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +60 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +23 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +17 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +60 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +23 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/fail-first.md +40 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +2 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +21 -11
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/fail-first.md +40 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +7 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +51 -18
- package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +3 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +6 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-artifact-shell.mjs +2 -4
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-document.mjs +110 -25
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-handoff.mjs +851 -57
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review-state-store.mjs +45 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +65 -74
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-runtime-home.mjs +0 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share-cli-bridge.mjs +321 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-d707e49b.mjs +1652 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs → design-shared-artifact-support-protocol-contracts-9f6918b0.mjs} +537 -5
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-design-support-0bac378d.mjs +137 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design.mjs +374 -61
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -59
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +138 -133
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +1 -5608
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-artifact-review-ui.js +2568 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +10 -74
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -4
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +8 -2
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +2 -2
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +5 -5
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +72 -2
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +14 -7
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +71 -34
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +28 -14
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +12 -12
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/{v1.20.0 → v1.22.0}/design-document.schema.json +131 -4
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +616 -4775
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +219 -424
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/openai/.claude-plugin/marketplace.json +3 -3
- package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +2 -2
- package/lib/host-packages/openai/openplanr/.openplanr-content.json +98 -150
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-artifact-shell.mjs +2 -4
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-document.mjs +110 -25
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-handoff.mjs +851 -57
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review-state-store.mjs +45 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +65 -74
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-runtime-home.mjs +0 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share-cli-bridge.mjs +321 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-d707e49b.mjs +1652 -0
- package/lib/host-packages/{claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs → openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-9f6918b0.mjs} +537 -5
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-design-support-0bac378d.mjs +137 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design.mjs +374 -61
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -59
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +138 -133
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +1 -5608
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-artifact-review-ui.js +2568 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +10 -74
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -4
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +8 -2
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +2 -2
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +5 -5
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +72 -2
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +14 -7
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +71 -34
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +28 -14
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +12 -12
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/{claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.20.0 → openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +131 -4
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +616 -4775
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +219 -424
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/openai/openplanr/skills/delegate/SKILL.md +2 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/openplanr.skill.json +1 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/references/integration-review.md +26 -20
- package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +25 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/references/run-handoff.md +2 -2
- package/lib/host-packages/openai/openplanr/skills/delegate/references/worktree-custody.md +17 -9
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/claude.mjs +15 -3
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/codex.mjs +38 -2
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/native.mjs +5 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/custody.mjs +217 -10
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/handoff.mjs +1080 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/integrate.mjs +96 -201
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/integration-files.mjs +3 -382
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/presentation.mjs +29 -12
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-contract.mjs +11 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-execution.mjs +1 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-lifecycle.mjs +14 -10
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-preparation.mjs +4 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-record.mjs +2 -2
- package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +17 -2
- package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +60 -2
- package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +23 -7
- package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +17 -2
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +60 -2
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +23 -7
- package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +17 -2
- package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +60 -2
- package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +23 -7
- package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +2 -1
- package/lib/host-packages/openai/openplanr/skills/investigate/agents/openai.yaml +1 -1
- package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +12 -1
- package/lib/host-packages/openai/openplanr/skills/investigate/references/fail-first.md +40 -0
- package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +21 -11
- package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +1 -1
- package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +131 -4
- package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +51 -18
- package/lib/host-packages/openai/openplanr/skills/ship/agents/openai.yaml +1 -1
- package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +12 -1
- package/lib/host-packages/openai/openplanr/skills/ship/references/fail-first.md +40 -0
- package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +7 -3
- package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +6 -0
- package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +1 -1
- package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +3 -1
- package/lib/json-schema.mjs +4 -0
- package/package.json +16 -16
- package/dist/dashboard/assets/index-BU5fzjyz.css +0 -1
- package/dist/dashboard/assets/index-L8qtwqv6.js +0 -572
- package/dist/dashboard/assets/index-L8qtwqv6.js.map +0 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +0 -555
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-compression.mjs +0 -4180
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-encrypted-workspace-client.mjs +0 -647
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-owner-custody.mjs +0 -129
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-resource-pack.mjs +0 -698
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs +0 -24
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +0 -1993
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +0 -1020
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-protocol-contracts-75a938cc.mjs +0 -222
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs +0 -5778
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-upload-spool.mjs +0 -198
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-compression.js +0 -4175
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/05-artifact-sharing.js +0 -65
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +0 -1755
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/07-artifact-sharing.js +0 -62
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +0 -2633
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +0 -49
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +0 -108
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +0 -170
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +0 -97
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +0 -56
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/integration-transaction.mjs +0 -958
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/integration-transaction.mjs +0 -958
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +0 -555
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-compression.mjs +0 -4180
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-encrypted-workspace-client.mjs +0 -647
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-owner-custody.mjs +0 -129
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-resource-pack.mjs +0 -698
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs +0 -24
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +0 -1993
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +0 -1020
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-75a938cc.mjs +0 -222
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs +0 -5778
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-upload-spool.mjs +0 -198
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-compression.js +0 -4175
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/05-artifact-sharing.js +0 -65
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +0 -1755
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/07-artifact-sharing.js +0 -62
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +0 -2633
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +0 -49
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +0 -108
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +0 -170
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +0 -97
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +0 -56
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +0 -555
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-compression.mjs +0 -4180
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-encrypted-workspace-client.mjs +0 -647
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-owner-custody.mjs +0 -129
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-resource-pack.mjs +0 -698
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs +0 -24
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +0 -1993
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +0 -1020
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-75a938cc.mjs +0 -222
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs +0 -5778
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-upload-spool.mjs +0 -198
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-compression.js +0 -4175
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/05-artifact-sharing.js +0 -65
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +0 -1755
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/07-artifact-sharing.js +0 -62
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +0 -2633
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +0 -49
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +0 -108
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +0 -170
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +0 -97
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +0 -56
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/integration-transaction.mjs +0 -958
package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review-state-store.mjs
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
planrHome
|
|
3
|
+
} from "./design-runtime-home.mjs";
|
|
4
|
+
|
|
5
|
+
// packages/artifact/lib/artifact/internal/review-state-store.mjs
|
|
6
|
+
import { readdirSync } from "node:fs";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
var RECORD = /^(?:instance-[A-Za-z0-9_-]{22}|state-(?:default|\d+))\.json$/u;
|
|
9
|
+
var AUTHORIZATION_CONTROL_VERSIONS = /* @__PURE__ */ new Set([1, 2]);
|
|
10
|
+
function reviewStateDir(env = process.env) {
|
|
11
|
+
return join(planrHome(env), "artifact-daemon");
|
|
12
|
+
}
|
|
13
|
+
function artifactReviewStatePath(port = 0, env = process.env) {
|
|
14
|
+
const suffix = port === 0 ? "default" : String(port);
|
|
15
|
+
return join(reviewStateDir(env), `state-${suffix}.json`);
|
|
16
|
+
}
|
|
17
|
+
function reviewStateLockPath(port, env = process.env) {
|
|
18
|
+
const suffix = port === 0 ? "default" : String(port);
|
|
19
|
+
return join(reviewStateDir(env), `start-${suffix}.lock`);
|
|
20
|
+
}
|
|
21
|
+
function reviewInstanceStatePath(instanceId, env = process.env) {
|
|
22
|
+
return join(reviewStateDir(env), `instance-${instanceId}.json`);
|
|
23
|
+
}
|
|
24
|
+
function reviewStateRecordPaths(env = process.env) {
|
|
25
|
+
const directory = reviewStateDir(env);
|
|
26
|
+
let names;
|
|
27
|
+
try {
|
|
28
|
+
names = readdirSync(directory);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
if (error?.code === "ENOENT") return [];
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
return names.filter((name) => RECORD.test(name)).sort().map((name) => join(directory, name));
|
|
34
|
+
}
|
|
35
|
+
function reviewControlHeaders(state, controlHeader) {
|
|
36
|
+
return AUTHORIZATION_CONTROL_VERSIONS.has(state.serverVersion) ? { authorization: `Bearer ${state.controlToken}` } : { [controlHeader]: state.controlToken };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export {
|
|
40
|
+
artifactReviewStatePath,
|
|
41
|
+
reviewStateLockPath,
|
|
42
|
+
reviewInstanceStatePath,
|
|
43
|
+
reviewStateRecordPaths,
|
|
44
|
+
reviewControlHeaders
|
|
45
|
+
};
|
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ARTIFACT_REVIEW_MAX_STATE_BYTES,
|
|
3
|
+
CLI_COMMAND,
|
|
4
|
+
PLANNING_FOLDER,
|
|
2
5
|
assertDesignImplementationHandoff,
|
|
6
|
+
createReviewLedger,
|
|
3
7
|
designImplementationHandoffDigest,
|
|
4
8
|
designReviewKey,
|
|
5
9
|
designReviewPath,
|
|
10
|
+
effectiveReviewDecision,
|
|
11
|
+
exportArtifactReview,
|
|
6
12
|
isDesignHandoffRelativePath,
|
|
13
|
+
mergeReviewLedger,
|
|
14
|
+
readArtifactReviewState,
|
|
7
15
|
readDesignExperience,
|
|
8
16
|
readDesignFeedback,
|
|
9
17
|
readDesignHandoff,
|
|
10
18
|
readDesignHandoffReadiness,
|
|
11
|
-
|
|
19
|
+
resolveArtifactReviewDestination,
|
|
20
|
+
updateDesignHandoff,
|
|
21
|
+
withArtifactReviewLock,
|
|
22
|
+
writeArtifactReviewState
|
|
12
23
|
} from "./design-handoff.mjs";
|
|
13
24
|
import {
|
|
14
25
|
createArtifactBridgeNonce,
|
|
@@ -24,43 +35,46 @@ import {
|
|
|
24
35
|
standaloneDesignHtml,
|
|
25
36
|
timingSafeTokenEqual
|
|
26
37
|
} from "./design-document.mjs";
|
|
38
|
+
import {
|
|
39
|
+
canonicalizeJson,
|
|
40
|
+
listDesignRevisions,
|
|
41
|
+
readDesignRevision,
|
|
42
|
+
reviewDigest
|
|
43
|
+
} from "./design-shared-artifact-support-dependencies-design-support-protocol-contracts-d707e49b.mjs";
|
|
44
|
+
import {
|
|
45
|
+
reviewControlHeaders,
|
|
46
|
+
reviewInstanceStatePath,
|
|
47
|
+
reviewStateRecordPaths
|
|
48
|
+
} from "./design-review-state-store.mjs";
|
|
27
49
|
import {
|
|
28
50
|
renderArtifactShellDocument
|
|
29
51
|
} from "./design-artifact-shell.mjs";
|
|
30
52
|
import {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
53
|
+
ARTIFACT_ERROR_CODES,
|
|
54
|
+
MAX_ARTIFACT_HTML_BYTES,
|
|
55
|
+
PipelineError,
|
|
56
|
+
digestArtifactEnvelope,
|
|
57
|
+
resolveArtifactHtml,
|
|
58
|
+
validateArtifactEnvelope,
|
|
59
|
+
validateArtifactReview
|
|
60
|
+
} from "./design-shared-artifact-support-protocol-contracts-9f6918b0.mjs";
|
|
61
|
+
import {
|
|
62
|
+
defaultDesignRecoveryOutput,
|
|
35
63
|
exportDesignShareRecovery,
|
|
36
64
|
getDesignShareStatus,
|
|
65
|
+
getDesignShareStatusAsync,
|
|
37
66
|
manageDesignShare,
|
|
38
|
-
mergeReviewLedger,
|
|
39
67
|
publishDesignShare,
|
|
40
|
-
readArtifactReviewState,
|
|
41
|
-
resolveArtifactReviewDestination,
|
|
42
68
|
shareDesign,
|
|
43
|
-
syncDesignShare
|
|
44
|
-
|
|
45
|
-
writeArtifactReviewState
|
|
46
|
-
} from "./design-share.mjs";
|
|
69
|
+
syncDesignShare
|
|
70
|
+
} from "./design-share-cli-bridge.mjs";
|
|
47
71
|
import {
|
|
48
72
|
atomicJson,
|
|
49
73
|
currentDesign,
|
|
50
74
|
designSpecPath,
|
|
51
75
|
hash,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
readJson,
|
|
55
|
-
reviewDigest
|
|
56
|
-
} from "./design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs";
|
|
57
|
-
import {
|
|
58
|
-
CLI_COMMAND,
|
|
59
|
-
PLANNING_FOLDER
|
|
60
|
-
} from "./design-owner-custody.mjs";
|
|
61
|
-
import {
|
|
62
|
-
planrHome
|
|
63
|
-
} from "./design-runtime-home.mjs";
|
|
76
|
+
readJson
|
|
77
|
+
} from "./design-shared-design-support-0bac378d.mjs";
|
|
64
78
|
import {
|
|
65
79
|
LOOPBACK_HOST,
|
|
66
80
|
acquireStartLock,
|
|
@@ -72,18 +86,6 @@ import {
|
|
|
72
86
|
readRequestBody,
|
|
73
87
|
writePrivateJsonState
|
|
74
88
|
} from "./design-loopback-server.mjs";
|
|
75
|
-
import {
|
|
76
|
-
ARTIFACT_ERROR_CODES,
|
|
77
|
-
MAX_ARTIFACT_HTML_BYTES,
|
|
78
|
-
PipelineError,
|
|
79
|
-
digestArtifactEnvelope,
|
|
80
|
-
resolveArtifactHtml,
|
|
81
|
-
validateArtifactEnvelope,
|
|
82
|
-
validateArtifactReview
|
|
83
|
-
} from "./design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs";
|
|
84
|
-
import {
|
|
85
|
-
canonicalizeJson
|
|
86
|
-
} from "./design-shared-protocol-contracts-75a938cc.mjs";
|
|
87
89
|
|
|
88
90
|
// packages/design/lib/design/review-export.mjs
|
|
89
91
|
function reviewExportTools() {
|
|
@@ -420,9 +422,9 @@ import { existsSync as existsSync5, readFileSync as readFileSync4 } from "node:f
|
|
|
420
422
|
import { dirname as dirname4, join as join5, relative, resolve as resolve3 } from "node:path";
|
|
421
423
|
|
|
422
424
|
// packages/artifact/lib/artifact/review-server.mjs
|
|
423
|
-
import { existsSync, lstatSync,
|
|
425
|
+
import { existsSync, lstatSync, readFileSync, rmSync } from "node:fs";
|
|
424
426
|
import { createServer } from "node:http";
|
|
425
|
-
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
427
|
+
import { basename, dirname, isAbsolute, join, resolve } from "node:path";
|
|
426
428
|
import { fileURLToPath } from "node:url";
|
|
427
429
|
var here = dirname(fileURLToPath(new URL("./runtime/packages/artifact/lib/artifact/review-server.mjs", import.meta.url).href));
|
|
428
430
|
var STAGE_RUNTIME_PATH = join(here, "..", "..", "templates", "artifact-review-stage.js");
|
|
@@ -431,7 +433,6 @@ var ARTIFACT_REVIEW_SERVER_KIND = "artifact-review";
|
|
|
431
433
|
var CONTROL_HEADER = "x-openplanr-control";
|
|
432
434
|
var CONTROLLABLE_SERVER_VERSIONS = /* @__PURE__ */ new Set([2, ARTIFACT_REVIEW_SERVER_VERSION]);
|
|
433
435
|
var EXPORT_ONLY_SERVER_VERSIONS = /* @__PURE__ */ new Set([1]);
|
|
434
|
-
var AUTHORIZATION_CONTROL_VERSIONS = /* @__PURE__ */ new Set([1, 2]);
|
|
435
436
|
var CONTROL_WINDOW_BYTES = 64 * 1024 * 1024;
|
|
436
437
|
var ARTIFACT_REVIEW_MAX_CONTROL_BYTES = Math.ceil((MAX_ARTIFACT_HTML_BYTES * 2 + ARTIFACT_REVIEW_MAX_STATE_BYTES) / CONTROL_WINDOW_BYTES) * CONTROL_WINDOW_BYTES;
|
|
437
438
|
var ARTIFACT_REVIEW_MAX_STATE_BYTES2 = ARTIFACT_REVIEW_MAX_STATE_BYTES;
|
|
@@ -491,10 +492,7 @@ function artifactReviewControlHeaders(controlToken) {
|
|
|
491
492
|
return { [CONTROL_HEADER]: controlToken };
|
|
492
493
|
}
|
|
493
494
|
function stateControlHeaders(state) {
|
|
494
|
-
return
|
|
495
|
-
}
|
|
496
|
-
function reviewStateDir(env = process.env) {
|
|
497
|
-
return join(planrHome(env), "artifact-daemon");
|
|
495
|
+
return reviewControlHeaders(state, CONTROL_HEADER);
|
|
498
496
|
}
|
|
499
497
|
function statusForError(error) {
|
|
500
498
|
if (error?.code === "E_REQUEST_BODY_LIMIT" || error?.code === ARTIFACT_ERROR_CODES.REQUEST_LIMIT)
|
|
@@ -832,7 +830,7 @@ function createArtifactReviewServer({
|
|
|
832
830
|
}
|
|
833
831
|
if (serverMetadata !== void 0 && (!serverMetadata || !["artifact", "design", "diagram"].includes(serverMetadata.kind) || typeof serverMetadata.projectRoot !== "string" || !isAbsolute(serverMetadata.projectRoot)))
|
|
834
832
|
throw artifactError(ARTIFACT_ERROR_CODES.LOOPBACK_STATE, "Local server metadata is invalid.");
|
|
835
|
-
const instanceStatePath = serverMetadata ?
|
|
833
|
+
const instanceStatePath = serverMetadata ? reviewInstanceStatePath(instanceId, env) : null;
|
|
836
834
|
const sessions = /* @__PURE__ */ new Map();
|
|
837
835
|
const pendingStudioIds = /* @__PURE__ */ new Set();
|
|
838
836
|
const pendingMutations = /* @__PURE__ */ new Set();
|
|
@@ -1501,20 +1499,11 @@ async function controlRequest(descriptor, path, { method, body, fetchImpl } = {}
|
|
|
1501
1499
|
return value;
|
|
1502
1500
|
}
|
|
1503
1501
|
async function discoveredArtifactServers({ env, fetchImpl }) {
|
|
1504
|
-
let names;
|
|
1505
|
-
try {
|
|
1506
|
-
names = readdirSync(reviewStateDir(env));
|
|
1507
|
-
} catch (error) {
|
|
1508
|
-
if (error.code === "ENOENT") return [];
|
|
1509
|
-
throw error;
|
|
1510
|
-
}
|
|
1511
1502
|
const live = /* @__PURE__ */ new Map();
|
|
1512
|
-
for (const
|
|
1513
|
-
if (!/^(?:instance-[A-Za-z0-9_-]{22}|state-(?:default|\d+))\.json$/u.test(name)) continue;
|
|
1514
|
-
const path = join(reviewStateDir(env), name);
|
|
1503
|
+
for (const path of reviewStateRecordPaths(env)) {
|
|
1515
1504
|
const state = readReviewServerState(path);
|
|
1516
1505
|
if (!validState(state, 0) || !await stateIsHealthy(state, fetchImpl)) continue;
|
|
1517
|
-
if (!live.has(state.instanceId) ||
|
|
1506
|
+
if (!live.has(state.instanceId) || basename(path).startsWith("instance-"))
|
|
1518
1507
|
live.set(state.instanceId, state);
|
|
1519
1508
|
}
|
|
1520
1509
|
return [...live.values()];
|
|
@@ -1550,7 +1539,7 @@ async function stopArtifactReviewServer(instanceId, { env = process.env, fetchIm
|
|
|
1550
1539
|
}
|
|
1551
1540
|
|
|
1552
1541
|
// packages/protocol/src/planning-folder.mjs
|
|
1553
|
-
import { existsSync as existsSync2, readdirSync
|
|
1542
|
+
import { existsSync as existsSync2, readdirSync, statSync } from "node:fs";
|
|
1554
1543
|
import { join as join2 } from "node:path";
|
|
1555
1544
|
var FOREIGN_FILES = Object.freeze(["planr.config.json", "board.html"]);
|
|
1556
1545
|
var GOAL_DIRECTORIES = Object.freeze(["tasks", "plans"]);
|
|
@@ -1561,7 +1550,7 @@ function foreignPlanningFolderSigns(projectRoot2) {
|
|
|
1561
1550
|
const signs = FOREIGN_FILES.filter((name) => existsSync2(join2(folder, name)));
|
|
1562
1551
|
for (const name of GOAL_DIRECTORIES) {
|
|
1563
1552
|
const directory = join2(folder, name);
|
|
1564
|
-
if (isDirectory(directory) &&
|
|
1553
|
+
if (isDirectory(directory) && readdirSync(directory).some((entry) => entry.endsWith("-goal.md")))
|
|
1565
1554
|
signs.push(`*-goal.md files in ${name}`);
|
|
1566
1555
|
}
|
|
1567
1556
|
return signs;
|
|
@@ -1945,7 +1934,7 @@ import { createHash as createHash2, randomUUID as randomUUID2 } from "node:crypt
|
|
|
1945
1934
|
import {
|
|
1946
1935
|
existsSync as existsSync4,
|
|
1947
1936
|
mkdirSync as mkdirSync2,
|
|
1948
|
-
readdirSync as
|
|
1937
|
+
readdirSync as readdirSync2,
|
|
1949
1938
|
readFileSync as readFileSync3,
|
|
1950
1939
|
renameSync as renameSync2,
|
|
1951
1940
|
rmSync as rmSync3,
|
|
@@ -2125,7 +2114,7 @@ function listImplementationHandoffHistory(root) {
|
|
|
2125
2114
|
recoverImplementationHandoffApproval(root);
|
|
2126
2115
|
const directory = implementationHandoffPaths(root).history;
|
|
2127
2116
|
if (!existsSync4(directory)) return [];
|
|
2128
|
-
return
|
|
2117
|
+
return readdirSync2(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map(
|
|
2129
2118
|
(entry) => assertImplementationHandoffProjection(readJson2(join4(directory, entry.name, "handoff.json")))
|
|
2130
2119
|
).sort((left, right) => left.version - right.version || left.id.localeCompare(right.id));
|
|
2131
2120
|
}
|
|
@@ -2133,7 +2122,7 @@ function readImplementationHandoffLifecycle(root) {
|
|
|
2133
2122
|
recoverImplementationHandoffApproval(root);
|
|
2134
2123
|
const paths = implementationHandoffApprovalPaths(root);
|
|
2135
2124
|
const current = readJson2(paths.current, null);
|
|
2136
|
-
const events = existsSync4(paths.events) ?
|
|
2125
|
+
const events = existsSync4(paths.events) ? readdirSync2(paths.events).filter((name) => name.endsWith(".json")).map((name) => readJson2(join4(paths.events, name))).sort(
|
|
2137
2126
|
(left, right) => left.at.localeCompare(right.at) || left.eventId.localeCompare(right.eventId)
|
|
2138
2127
|
) : [];
|
|
2139
2128
|
return Object.freeze({ current, history: listImplementationHandoffHistory(root), events });
|
|
@@ -2489,7 +2478,7 @@ function studioContentIdentity(current) {
|
|
|
2489
2478
|
})
|
|
2490
2479
|
);
|
|
2491
2480
|
}
|
|
2492
|
-
function exportDesignReview(file, { scope = "all", env = process.env } = {}) {
|
|
2481
|
+
function exportDesignReview(file, { scope = "all", env = process.env, shared: known } = {}) {
|
|
2493
2482
|
if (!["all", "current"].includes(scope))
|
|
2494
2483
|
throw new Error("Review export scope must be current or all.");
|
|
2495
2484
|
const current = currentDesign(file), feedback = readDesignFeedback(file, env);
|
|
@@ -2518,11 +2507,12 @@ function exportDesignReview(file, { scope = "all", env = process.env } = {}) {
|
|
|
2518
2507
|
const byDigest = /* @__PURE__ */ new Map();
|
|
2519
2508
|
for (const value of local.values())
|
|
2520
2509
|
byDigest.set(value.reviewOf, [...byDigest.get(value.reviewOf) ?? [], value]);
|
|
2521
|
-
let shared = null;
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2510
|
+
let shared = known ?? null;
|
|
2511
|
+
if (known === void 0)
|
|
2512
|
+
try {
|
|
2513
|
+
shared = getDesignShareStatus(file, { env });
|
|
2514
|
+
} catch {
|
|
2515
|
+
}
|
|
2526
2516
|
const currentRevisionId = shared?.publishedRevision === current.revision && shared?.revision ? shared.revision : current.revision;
|
|
2527
2517
|
const revisions = [...local.values()];
|
|
2528
2518
|
const entries = (feedback.ledger?.reviews ?? []).filter(
|
|
@@ -3120,8 +3110,13 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3120
3110
|
} else if (route === "design-feedback-export") {
|
|
3121
3111
|
if (!input || typeof input !== "object" || Array.isArray(input) || Object.keys(input).some((key) => key !== "scope") || input.scope !== void 0 && !["all", "current"].includes(input.scope))
|
|
3122
3112
|
throw new Error("Review export requires scope current or all.");
|
|
3123
|
-
await syncDesignShare(file, { env, fetchImpl });
|
|
3124
|
-
|
|
3113
|
+
await syncDesignShare(file, { env, fetchImpl, unavailable: "skip" });
|
|
3114
|
+
const shared = await getDesignShareStatusAsync(file, { env }).catch(() => null);
|
|
3115
|
+
respond(
|
|
3116
|
+
res,
|
|
3117
|
+
200,
|
|
3118
|
+
exportDesignReview(file, { scope: input.scope ?? "all", env, shared })
|
|
3119
|
+
);
|
|
3125
3120
|
} else {
|
|
3126
3121
|
if (!input || typeof input !== "object" || Array.isArray(input) || Object.keys(input).some((key) => !["revision", "artifactIds"].includes(key)) || input.artifactIds !== void 0 && (!Array.isArray(input.artifactIds) || input.artifactIds.length < 1 || input.artifactIds.length > 2 || input.artifactIds.some((id) => typeof id !== "string") || new Set(input.artifactIds).size !== input.artifactIds.length))
|
|
3127
3122
|
throw new Error("Revision comparison requires one or two distinct view IDs.");
|
|
@@ -3160,7 +3155,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3160
3155
|
readFileSync4(new URL("../../templates/studio/share.js", new URL("./runtime/packages/design/lib/design/review.mjs", import.meta.url).href), "utf8")
|
|
3161
3156
|
);
|
|
3162
3157
|
} else if (route === "design-share" && req.method === "GET") {
|
|
3163
|
-
respond(res, 200,
|
|
3158
|
+
respond(res, 200, await getDesignShareStatusAsync(file, { env }));
|
|
3164
3159
|
} else if (route === "design-share" && req.method === "POST") {
|
|
3165
3160
|
if (req.headers["x-openplanr-design"] !== "1" || !String(req.headers["content-type"] ?? "").startsWith("application/json"))
|
|
3166
3161
|
throw Object.assign(new Error("Sharing requires a same-origin studio request."), {
|
|
@@ -3180,11 +3175,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3180
3175
|
else if (action === "recovery")
|
|
3181
3176
|
result = await exportDesignShareRecovery(file, {
|
|
3182
3177
|
...options,
|
|
3183
|
-
output:
|
|
3184
|
-
env.HOME ?? process.env.HOME,
|
|
3185
|
-
"Downloads",
|
|
3186
|
-
`openplanr-design-recovery-${Date.now()}.json`
|
|
3187
|
-
)
|
|
3178
|
+
output: defaultDesignRecoveryOutput(env)
|
|
3188
3179
|
});
|
|
3189
3180
|
else result = await manageDesignShare(file, action, options);
|
|
3190
3181
|
respond(res, 200, result);
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import {
|
|
2
|
+
currentDesign
|
|
3
|
+
} from "./design-shared-design-support-0bac378d.mjs";
|
|
4
|
+
import {
|
|
5
|
+
planrHome
|
|
6
|
+
} from "./design-runtime-home.mjs";
|
|
7
|
+
|
|
8
|
+
// packages/design/lib/design/recovery-location.mjs
|
|
9
|
+
import { chmodSync, mkdirSync } from "node:fs";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
function defaultDesignRecoveryOutput(env = process.env, now = Date.now()) {
|
|
12
|
+
const directory = join(planrHome(env), "design-recovery");
|
|
13
|
+
mkdirSync(directory, { recursive: true, mode: 448 });
|
|
14
|
+
chmodSync(directory, 448);
|
|
15
|
+
return join(directory, `openplanr-design-recovery-${now}.json`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// packages/design/lib/design/share-cli-bridge.mjs
|
|
19
|
+
import { execFile, execFileSync } from "node:child_process";
|
|
20
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
21
|
+
import { join as join2 } from "node:path";
|
|
22
|
+
|
|
23
|
+
// packages/design/lib/design/share-compat.mjs
|
|
24
|
+
var DESIGN_SHARE_COMPAT = 1;
|
|
25
|
+
|
|
26
|
+
// packages/design/lib/design/share-cli-bridge.mjs
|
|
27
|
+
var CLI = "openplanr";
|
|
28
|
+
var UPLOAD_TIMEOUT_MS = 30 * 6e4;
|
|
29
|
+
var TIMEOUT_MS = 12e4;
|
|
30
|
+
var STATUS_TIMEOUT_MS = 5e3;
|
|
31
|
+
var FAILED_HANDSHAKE_TTL_MS = 3e4;
|
|
32
|
+
var STATUS_TTL_MS = 1e4;
|
|
33
|
+
var INSTALL = "Install the OpenPlanr CLI with `npm install -g openplanr`, then retry; your local design is unchanged.";
|
|
34
|
+
var UNAVAILABLE = Object.freeze([
|
|
35
|
+
"E_DESIGN_SHARE_CLI_REQUIRED",
|
|
36
|
+
"E_DESIGN_SHARE_CLI_UNRESPONSIVE",
|
|
37
|
+
"E_DESIGN_SHARE_RUNTIME_MISMATCH",
|
|
38
|
+
"E_DESIGN_SHARE_PIPELINE_MISSING"
|
|
39
|
+
]);
|
|
40
|
+
function shareError(code, message, fix) {
|
|
41
|
+
return Object.assign(new Error(fix ? `${message} ${fix}` : message), { code, name: code });
|
|
42
|
+
}
|
|
43
|
+
function cliMissing() {
|
|
44
|
+
return shareError(
|
|
45
|
+
"E_DESIGN_SHARE_CLI_REQUIRED",
|
|
46
|
+
"Sharing runs in the OpenPlanr CLI, which is not installed.",
|
|
47
|
+
INSTALL
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
function pathOf(env) {
|
|
51
|
+
const key = Object.keys(env).find((name) => name.toUpperCase() === "PATH");
|
|
52
|
+
return key ? env[key] ?? "" : "";
|
|
53
|
+
}
|
|
54
|
+
function cliLauncher({
|
|
55
|
+
platform = process.platform,
|
|
56
|
+
env = process.env,
|
|
57
|
+
execPath = process.execPath
|
|
58
|
+
} = {}) {
|
|
59
|
+
if (platform !== "win32") return { file: CLI, args: [] };
|
|
60
|
+
for (const directory of pathOf(env).split(";").filter(Boolean)) {
|
|
61
|
+
const shim = join2(directory, `${CLI}.cmd`);
|
|
62
|
+
if (!existsSync(shim)) continue;
|
|
63
|
+
const target = /"%~?dp0%?\\([^"\r\n]+?\.js)"/iu.exec(readFileSync(shim, "utf8"))?.[1];
|
|
64
|
+
const script = target ? join2(directory, ...target.split("\\")) : join2(directory, "node_modules", CLI, "bin", `${CLI}.js`);
|
|
65
|
+
if (existsSync(script)) return { file: execPath, args: [script] };
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
function lastJsonLine(stdout) {
|
|
70
|
+
const line = String(stdout ?? "").trim().split("\n").at(-1);
|
|
71
|
+
try {
|
|
72
|
+
return line ? JSON.parse(line) : null;
|
|
73
|
+
} catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function settle(command, timeout, error, stdout, stderr) {
|
|
78
|
+
if (error?.code === "ENOENT") throw cliMissing();
|
|
79
|
+
if (error?.code === "ETIMEDOUT" || error?.killed || error?.signal)
|
|
80
|
+
throw shareError(
|
|
81
|
+
"E_DESIGN_SHARE_CLI_UNRESPONSIVE",
|
|
82
|
+
`The OpenPlanr CLI did not finish \`artifact ${command}\` within ${Math.round(timeout / 1e3)} s.`,
|
|
83
|
+
"Check that `openplanr --version` answers, then retry."
|
|
84
|
+
);
|
|
85
|
+
const value = lastJsonLine(stdout);
|
|
86
|
+
if (!error && value && value.ok !== false) return value;
|
|
87
|
+
if (value && value.ok === false)
|
|
88
|
+
throw shareError(
|
|
89
|
+
value.code ?? "E_DESIGN_SHARE_FAILED",
|
|
90
|
+
value.problem ?? "The OpenPlanr CLI could not complete the sharing operation.",
|
|
91
|
+
value.recovery
|
|
92
|
+
);
|
|
93
|
+
const detail = String(stderr ?? "").trim().split("\n").at(-1) || error?.message || "no output";
|
|
94
|
+
throw shareError(
|
|
95
|
+
"E_DESIGN_SHARE_FAILED",
|
|
96
|
+
`openplanr artifact ${command} failed without a JSON result: ${detail}`
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
function argv(command, file, flags) {
|
|
100
|
+
return ["artifact", command, ...flags, "--json", ...file === void 0 ? [] : ["--", file]];
|
|
101
|
+
}
|
|
102
|
+
function launch(env) {
|
|
103
|
+
const launcher = cliLauncher({ env });
|
|
104
|
+
if (!launcher) throw cliMissing();
|
|
105
|
+
return launcher;
|
|
106
|
+
}
|
|
107
|
+
function runSync(command, file, flags, { env = process.env, timeout = STATUS_TIMEOUT_MS } = {}) {
|
|
108
|
+
const { file: program, args } = launch(env);
|
|
109
|
+
let stdout;
|
|
110
|
+
try {
|
|
111
|
+
stdout = execFileSync(program, [...args, ...argv(command, file, flags)], {
|
|
112
|
+
env,
|
|
113
|
+
encoding: "utf8",
|
|
114
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
115
|
+
timeout,
|
|
116
|
+
windowsHide: true
|
|
117
|
+
});
|
|
118
|
+
} catch (error) {
|
|
119
|
+
return settle(command, timeout, error, error?.stdout, error?.stderr);
|
|
120
|
+
}
|
|
121
|
+
return settle(command, timeout, null, stdout, "");
|
|
122
|
+
}
|
|
123
|
+
function runAsync(command, file, flags, { env = process.env, input, timeout = TIMEOUT_MS } = {}) {
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
const { file: program, args } = launch(env);
|
|
126
|
+
const child = execFile(
|
|
127
|
+
program,
|
|
128
|
+
[...args, ...argv(command, file, flags)],
|
|
129
|
+
{ env, encoding: "utf8", timeout, windowsHide: true, maxBuffer: 16 * 1024 * 1024 },
|
|
130
|
+
(error, stdout, stderr) => {
|
|
131
|
+
try {
|
|
132
|
+
resolve(settle(command, timeout, error, stdout, stderr));
|
|
133
|
+
} catch (failure) {
|
|
134
|
+
reject(failure);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
);
|
|
138
|
+
child.stdin?.end(input ?? "");
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function compatibility(runtime, error) {
|
|
142
|
+
if (error) {
|
|
143
|
+
if (UNAVAILABLE.includes(error.code)) return { error };
|
|
144
|
+
return {
|
|
145
|
+
error: shareError(
|
|
146
|
+
"E_DESIGN_SHARE_RUNTIME_MISMATCH",
|
|
147
|
+
`The installed OpenPlanr CLI is too old to share designs for this skill (${error.message}).`,
|
|
148
|
+
"Update the CLI with `npm install -g openplanr`, then retry."
|
|
149
|
+
)
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (runtime.designShareCompat === DESIGN_SHARE_COMPAT) return { runtime };
|
|
153
|
+
const older = typeof runtime.designShareCompat !== "number" || runtime.designShareCompat < DESIGN_SHARE_COMPAT;
|
|
154
|
+
return {
|
|
155
|
+
error: shareError(
|
|
156
|
+
"E_DESIGN_SHARE_RUNTIME_MISMATCH",
|
|
157
|
+
`The installed OpenPlanr CLI (${runtime.cli}) shares designs in format ${runtime.designShareCompat ?? "unknown"}, but this skill uses format ${DESIGN_SHARE_COMPAT}.`,
|
|
158
|
+
older ? "Update the CLI with `npm install -g openplanr`, then retry." : "Update the OpenPlanr plugin or skills to match the CLI, then retry."
|
|
159
|
+
)
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
var handshakes = /* @__PURE__ */ new Map();
|
|
163
|
+
function remembered(env) {
|
|
164
|
+
const known = handshakes.get(pathOf(env));
|
|
165
|
+
if (known?.outcome?.error && Date.now() - known.at > FAILED_HANDSHAKE_TTL_MS) {
|
|
166
|
+
handshakes.delete(pathOf(env));
|
|
167
|
+
return void 0;
|
|
168
|
+
}
|
|
169
|
+
return known;
|
|
170
|
+
}
|
|
171
|
+
function remember(env, outcome) {
|
|
172
|
+
handshakes.set(pathOf(env), { at: Date.now(), outcome });
|
|
173
|
+
return outcome;
|
|
174
|
+
}
|
|
175
|
+
function outcomeOf(outcome) {
|
|
176
|
+
if (outcome.error) throw outcome.error;
|
|
177
|
+
return outcome.runtime;
|
|
178
|
+
}
|
|
179
|
+
function requireCompatibleRuntime(env = process.env) {
|
|
180
|
+
const known = remembered(env);
|
|
181
|
+
if (known?.outcome) return outcomeOf(known.outcome);
|
|
182
|
+
let outcome;
|
|
183
|
+
try {
|
|
184
|
+
outcome = compatibility(runSync("share-runtime", void 0, [], { env }));
|
|
185
|
+
} catch (error) {
|
|
186
|
+
outcome = compatibility(null, error);
|
|
187
|
+
}
|
|
188
|
+
return outcomeOf(remember(env, outcome));
|
|
189
|
+
}
|
|
190
|
+
async function requireCompatibleRuntimeAsync(env = process.env) {
|
|
191
|
+
const known = remembered(env);
|
|
192
|
+
if (known?.outcome) return outcomeOf(known.outcome);
|
|
193
|
+
if (known?.pending) return outcomeOf(await known.pending);
|
|
194
|
+
const pending = runAsync("share-runtime", void 0, [], {
|
|
195
|
+
env,
|
|
196
|
+
timeout: STATUS_TIMEOUT_MS
|
|
197
|
+
}).then(
|
|
198
|
+
(runtime) => remember(env, compatibility(runtime)),
|
|
199
|
+
(error) => remember(env, compatibility(null, error))
|
|
200
|
+
);
|
|
201
|
+
handshakes.set(pathOf(env), { at: Date.now(), pending });
|
|
202
|
+
return outcomeOf(await pending);
|
|
203
|
+
}
|
|
204
|
+
var statuses = /* @__PURE__ */ new Map();
|
|
205
|
+
function statusKey(file, env) {
|
|
206
|
+
try {
|
|
207
|
+
return `${pathOf(env)}\0${file}\0${currentDesign(file).revision}`;
|
|
208
|
+
} catch {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function forget(file) {
|
|
213
|
+
for (const key of statuses.keys()) if (key.split("\0")[1] === file) statuses.delete(key);
|
|
214
|
+
}
|
|
215
|
+
function cachedStatus(key) {
|
|
216
|
+
const known = key && statuses.get(key);
|
|
217
|
+
return known && Date.now() - known.at <= STATUS_TTL_MS ? known.value : void 0;
|
|
218
|
+
}
|
|
219
|
+
function unavailableStatus(error) {
|
|
220
|
+
if (!UNAVAILABLE.includes(error.code)) throw error;
|
|
221
|
+
return { ok: true, shared: false, unavailable: { code: error.code, message: error.message } };
|
|
222
|
+
}
|
|
223
|
+
function required(value, flag, action) {
|
|
224
|
+
if (typeof value !== "string" || !value)
|
|
225
|
+
throw shareError("E_DESIGN_SHARE_INPUT_INVALID", `${action} requires ${flag}.`);
|
|
226
|
+
return value;
|
|
227
|
+
}
|
|
228
|
+
async function share(command, file, flags = [], options = {}) {
|
|
229
|
+
await requireCompatibleRuntimeAsync(options.env);
|
|
230
|
+
try {
|
|
231
|
+
return await runAsync(command, file, flags, options);
|
|
232
|
+
} finally {
|
|
233
|
+
forget(file);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function assertDesignShareAvailable({ env } = {}) {
|
|
237
|
+
requireCompatibleRuntime(env);
|
|
238
|
+
}
|
|
239
|
+
async function shareDesign(file, options = {}) {
|
|
240
|
+
return share("share", file, ["--yes", "--no-open"], { ...options, timeout: UPLOAD_TIMEOUT_MS });
|
|
241
|
+
}
|
|
242
|
+
async function publishDesignShare(file, options = {}) {
|
|
243
|
+
return share("publish", file, ["--yes"], { ...options, timeout: UPLOAD_TIMEOUT_MS });
|
|
244
|
+
}
|
|
245
|
+
async function syncDesignShare(file, options = {}) {
|
|
246
|
+
try {
|
|
247
|
+
return await share("sync", file, [], options);
|
|
248
|
+
} catch (error) {
|
|
249
|
+
if (options.unavailable === "skip" && UNAVAILABLE.includes(error.code))
|
|
250
|
+
return { ok: true, skipped: error.code, reason: error.message };
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
async function manageDesignShare(file, action, options = {}) {
|
|
255
|
+
return share("manage", file, ["--action", action, "--yes"], options);
|
|
256
|
+
}
|
|
257
|
+
async function exportDesignShareRecovery(file, { output, ...options } = {}) {
|
|
258
|
+
return share(
|
|
259
|
+
"manage",
|
|
260
|
+
file,
|
|
261
|
+
["--action", "recovery", ...output ? ["--output", output] : []],
|
|
262
|
+
options
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
async function importDesignShareRecovery(file, { input, ...options } = {}) {
|
|
266
|
+
const path = required(input, "--input <private recovery file>", "Recovery restore");
|
|
267
|
+
return share("manage", file, ["--action", "restore", "--input", path, "--yes"], options);
|
|
268
|
+
}
|
|
269
|
+
async function publishDesignReviewMetadata(file, payload, { revisionId, ...options } = {}) {
|
|
270
|
+
const revision = required(
|
|
271
|
+
revisionId,
|
|
272
|
+
"--revision <shared revision>",
|
|
273
|
+
"Publishing review metadata"
|
|
274
|
+
);
|
|
275
|
+
return share("review-metadata", file, ["--revision", revision, "--input", "-"], {
|
|
276
|
+
...options,
|
|
277
|
+
input: JSON.stringify(payload)
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
function getDesignShareStatus(file, { env } = {}) {
|
|
281
|
+
const key = statusKey(file, env);
|
|
282
|
+
const known = cachedStatus(key);
|
|
283
|
+
if (known) return known;
|
|
284
|
+
let value;
|
|
285
|
+
try {
|
|
286
|
+
requireCompatibleRuntime(env);
|
|
287
|
+
value = runSync("status", file, [], { env });
|
|
288
|
+
} catch (error) {
|
|
289
|
+
value = unavailableStatus(error);
|
|
290
|
+
}
|
|
291
|
+
if (key) statuses.set(key, { at: Date.now(), value });
|
|
292
|
+
return value;
|
|
293
|
+
}
|
|
294
|
+
async function getDesignShareStatusAsync(file, { env } = {}) {
|
|
295
|
+
const key = statusKey(file, env);
|
|
296
|
+
const known = cachedStatus(key);
|
|
297
|
+
if (known) return known;
|
|
298
|
+
let value;
|
|
299
|
+
try {
|
|
300
|
+
await requireCompatibleRuntimeAsync(env);
|
|
301
|
+
value = await runAsync("status", file, [], { env, timeout: STATUS_TIMEOUT_MS });
|
|
302
|
+
} catch (error) {
|
|
303
|
+
value = unavailableStatus(error);
|
|
304
|
+
}
|
|
305
|
+
if (key) statuses.set(key, { at: Date.now(), value });
|
|
306
|
+
return value;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
export {
|
|
310
|
+
defaultDesignRecoveryOutput,
|
|
311
|
+
assertDesignShareAvailable,
|
|
312
|
+
shareDesign,
|
|
313
|
+
publishDesignShare,
|
|
314
|
+
syncDesignShare,
|
|
315
|
+
manageDesignShare,
|
|
316
|
+
exportDesignShareRecovery,
|
|
317
|
+
importDesignShareRecovery,
|
|
318
|
+
publishDesignReviewMetadata,
|
|
319
|
+
getDesignShareStatus,
|
|
320
|
+
getDesignShareStatusAsync
|
|
321
|
+
};
|