openplanr 2.2641.0 → 2.2641.2
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 +34 -0
- package/README.md +14 -14
- package/bin/openplanr.js +13 -0
- package/bin/planr.js +5 -11
- package/dist/cli/commands/artifact.d.ts.map +1 -1
- package/dist/cli/commands/artifact.js +6 -5
- package/dist/cli/commands/artifact.js.map +1 -1
- package/dist/cli/commands/checklist.d.ts.map +1 -1
- package/dist/cli/commands/checklist.js +4 -3
- package/dist/cli/commands/checklist.js.map +1 -1
- package/dist/cli/commands/company.d.ts.map +1 -1
- package/dist/cli/commands/company.js +3 -2
- package/dist/cli/commands/company.js.map +1 -1
- package/dist/cli/commands/context.d.ts +1 -1
- package/dist/cli/commands/context.js +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +11 -5
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/export.d.ts +1 -1
- package/dist/cli/commands/export.js +1 -1
- package/dist/cli/commands/github.d.ts +1 -1
- package/dist/cli/commands/github.d.ts.map +1 -1
- package/dist/cli/commands/github.js +16 -18
- package/dist/cli/commands/github.js.map +1 -1
- package/dist/cli/commands/init-deterministic.d.ts.map +1 -1
- package/dist/cli/commands/init-deterministic.js +2 -1
- package/dist/cli/commands/init-deterministic.js.map +1 -1
- package/dist/cli/commands/linear.d.ts +2 -2
- package/dist/cli/commands/linear.d.ts.map +1 -1
- package/dist/cli/commands/linear.js +29 -28
- package/dist/cli/commands/linear.js.map +1 -1
- package/dist/cli/commands/operate/registrars/index.d.ts +1 -1
- package/dist/cli/commands/operate/registrars/index.d.ts.map +1 -1
- package/dist/cli/commands/operate/registrars/index.js +1 -1
- package/dist/cli/commands/operate/registrars/index.js.map +1 -1
- package/dist/cli/commands/operate/render.d.ts.map +1 -1
- package/dist/cli/commands/operate/render.js +2 -1
- package/dist/cli/commands/operate/render.js.map +1 -1
- package/dist/cli/commands/operate.d.ts.map +1 -1
- package/dist/cli/commands/operate.js +2 -1
- package/dist/cli/commands/operate.js.map +1 -1
- package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
- package/dist/cli/commands/planning-artifacts.js +2 -1
- package/dist/cli/commands/planning-artifacts.js.map +1 -1
- package/dist/cli/commands/quick/interaction.d.ts +1 -1
- package/dist/cli/commands/quick/interaction.d.ts.map +1 -1
- package/dist/cli/commands/quick/interaction.js +1 -1
- package/dist/cli/commands/quick/interaction.js.map +1 -1
- package/dist/cli/commands/quick/project.d.ts +1 -1
- package/dist/cli/commands/quick/project.d.ts.map +1 -1
- package/dist/cli/commands/quick/project.js +1 -1
- package/dist/cli/commands/quick/project.js.map +1 -1
- package/dist/cli/commands/report-linter.d.ts +1 -1
- package/dist/cli/commands/report-linter.js +1 -1
- package/dist/cli/commands/report.d.ts +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +32 -35
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +5 -4
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +11 -11
- package/dist/cli/commands/spec.d.ts.map +1 -1
- package/dist/cli/commands/spec.js +34 -33
- package/dist/cli/commands/spec.js.map +1 -1
- package/dist/cli/commands/sprint-refinement.d.ts.map +1 -1
- package/dist/cli/commands/sprint-refinement.js +2 -1
- package/dist/cli/commands/sprint-refinement.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +2 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/story/interaction.d.ts +1 -1
- package/dist/cli/commands/story/interaction.d.ts.map +1 -1
- package/dist/cli/commands/story/interaction.js +1 -1
- package/dist/cli/commands/story/interaction.js.map +1 -1
- package/dist/cli/commands/story/project.d.ts +1 -1
- package/dist/cli/commands/story/project.d.ts.map +1 -1
- package/dist/cli/commands/story/project.js +1 -1
- package/dist/cli/commands/story/project.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -1
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +3 -2
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/template.d.ts +1 -1
- package/dist/cli/commands/template.js +10 -10
- package/dist/cli/commands/template.js.map +1 -1
- package/dist/cli/commands/update.d.ts +1 -1
- package/dist/cli/commands/update.js +1 -1
- package/dist/cli/commands/upgrade.d.ts +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +3 -2
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/voice.d.ts +1 -1
- package/dist/cli/commands/voice.js +1 -1
- package/dist/cli/index.js +6 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/{index-D7R6tnlX.js → index-DI_TKz9J.js} +115 -115
- package/dist/dashboard/assets/index-DI_TKz9J.js.map +1 -0
- package/dist/dashboard/dashboard-manifest.json +10 -10
- package/dist/dashboard/index.html +1 -1
- package/dist/generators/cursor-generator.js +1 -1
- package/dist/generators/cursor-generator.js.map +1 -1
- package/dist/models/schema.d.ts +0 -4
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +2 -3
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +13 -16
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/artifact-service.d.ts +1 -1
- package/dist/services/artifact-service.js +2 -2
- package/dist/services/artifact-service.js.map +1 -1
- package/dist/services/audit-log-service.d.ts.map +1 -1
- package/dist/services/audit-log-service.js +2 -1
- package/dist/services/audit-log-service.js.map +1 -1
- package/dist/services/claude-plugin-service.d.ts +3 -1
- package/dist/services/claude-plugin-service.d.ts.map +1 -1
- package/dist/services/claude-plugin-service.js +9 -5
- 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 +3 -2
- package/dist/services/codex-plugin-service.js.map +1 -1
- package/dist/services/company-auth-service.d.ts.map +1 -1
- package/dist/services/company-auth-service.js +2 -1
- package/dist/services/company-auth-service.js.map +1 -1
- package/dist/services/company-sync-service.d.ts.map +1 -1
- package/dist/services/company-sync-service.js +9 -8
- package/dist/services/company-sync-service.js.map +1 -1
- package/dist/services/config-service.d.ts +6 -1
- package/dist/services/config-service.d.ts.map +1 -1
- package/dist/services/config-service.js +19 -4
- package/dist/services/config-service.js.map +1 -1
- package/dist/services/credentials-service.js +2 -2
- package/dist/services/credentials-service.js.map +1 -1
- package/dist/services/delivery-status-service.d.ts +1 -1
- package/dist/services/delivery-status-service.d.ts.map +1 -1
- package/dist/services/delivery-status-service.js +3 -2
- package/dist/services/delivery-status-service.js.map +1 -1
- package/dist/services/diagram-authoring-service.d.ts.map +1 -1
- package/dist/services/diagram-authoring-service.js +2 -1
- package/dist/services/diagram-authoring-service.js.map +1 -1
- package/dist/services/diagram-pipeline-service.d.ts.map +1 -1
- package/dist/services/diagram-pipeline-service.js +6 -5
- package/dist/services/diagram-pipeline-service.js.map +1 -1
- package/dist/services/distribution-service.d.ts +1 -4
- package/dist/services/distribution-service.d.ts.map +1 -1
- package/dist/services/distribution-service.js +3 -61
- package/dist/services/distribution-service.js.map +1 -1
- package/dist/services/github-service.d.ts +8 -5
- package/dist/services/github-service.d.ts.map +1 -1
- package/dist/services/github-service.js +23 -21
- package/dist/services/github-service.js.map +1 -1
- package/dist/services/graph-integrity.d.ts +1 -1
- package/dist/services/graph-integrity.js +1 -1
- package/dist/services/landing/landing-service.d.ts.map +1 -1
- package/dist/services/landing/landing-service.js +4 -1
- package/dist/services/landing/landing-service.js.map +1 -1
- package/dist/services/landing/receipt-custody.d.ts.map +1 -1
- package/dist/services/landing/receipt-custody.js +3 -2
- package/dist/services/landing/receipt-custody.js.map +1 -1
- package/dist/services/linear/errors.d.ts.map +1 -1
- package/dist/services/linear/errors.js +2 -1
- package/dist/services/linear/errors.js.map +1 -1
- package/dist/services/linear/plan-builders.d.ts +3 -3
- package/dist/services/linear/plan-builders.d.ts.map +1 -1
- package/dist/services/linear/plan-builders.js +2 -2
- package/dist/services/linear/strategy-context.d.ts.map +1 -1
- package/dist/services/linear/strategy-context.js +6 -5
- package/dist/services/linear/strategy-context.js.map +1 -1
- package/dist/services/linear-mapping-service.d.ts +1 -1
- package/dist/services/linear-mapping-service.d.ts.map +1 -1
- package/dist/services/linear-mapping-service.js +3 -2
- package/dist/services/linear-mapping-service.js.map +1 -1
- package/dist/services/linear-pull-service.d.ts +1 -1
- package/dist/services/linear-pull-service.d.ts.map +1 -1
- package/dist/services/linear-pull-service.js +10 -9
- package/dist/services/linear-pull-service.js.map +1 -1
- package/dist/services/linear-push-service.d.ts +5 -6
- package/dist/services/linear-push-service.d.ts.map +1 -1
- package/dist/services/linear-push-service.js +22 -22
- package/dist/services/linear-push-service.js.map +1 -1
- package/dist/services/linear-service.d.ts +2 -2
- package/dist/services/linear-service.js +2 -2
- package/dist/services/linear-team-service.d.ts.map +1 -1
- package/dist/services/linear-team-service.js +2 -1
- package/dist/services/linear-team-service.js.map +1 -1
- package/dist/services/operate/assignment-packet-service.d.ts.map +1 -1
- package/dist/services/operate/assignment-packet-service.js +2 -1
- package/dist/services/operate/assignment-packet-service.js.map +1 -1
- package/dist/services/operate/delivery-evidence.d.ts.map +1 -1
- package/dist/services/operate/delivery-evidence.js +2 -1
- package/dist/services/operate/delivery-evidence.js.map +1 -1
- package/dist/services/operate/measurement-schedule-service.d.ts.map +1 -1
- package/dist/services/operate/measurement-schedule-service.js +2 -1
- package/dist/services/operate/measurement-schedule-service.js.map +1 -1
- package/dist/services/operate/path-custody.d.ts.map +1 -1
- package/dist/services/operate/path-custody.js +2 -1
- package/dist/services/operate/path-custody.js.map +1 -1
- package/dist/services/operate/pinned-legacy-replay-runner.d.ts.map +1 -1
- package/dist/services/operate/pinned-legacy-replay-runner.js +3 -2
- package/dist/services/operate/pinned-legacy-replay-runner.js.map +1 -1
- package/dist/services/operate/planning-handoff-service.d.ts.map +1 -1
- package/dist/services/operate/planning-handoff-service.js +3 -2
- package/dist/services/operate/planning-handoff-service.js.map +1 -1
- package/dist/services/operate/project-transaction-lock.d.ts.map +1 -1
- package/dist/services/operate/project-transaction-lock.js +2 -1
- package/dist/services/operate/project-transaction-lock.js.map +1 -1
- package/dist/services/operate/repository-read-service.d.ts.map +1 -1
- package/dist/services/operate/repository-read-service.js +5 -4
- package/dist/services/operate/repository-read-service.js.map +1 -1
- package/dist/services/operate/screened-evidence-service.d.ts.map +1 -1
- package/dist/services/operate/screened-evidence-service.js +5 -4
- package/dist/services/operate/screened-evidence-service.js.map +1 -1
- package/dist/services/operate/storage-layout.d.ts.map +1 -1
- package/dist/services/operate/storage-layout.js +8 -7
- package/dist/services/operate/storage-layout.js.map +1 -1
- package/dist/services/operate/store.d.ts.map +1 -1
- package/dist/services/operate/store.js +7 -6
- package/dist/services/operate/store.js.map +1 -1
- package/dist/services/pipeline-package-service.js +1 -1
- package/dist/services/pipeline-package-service.js.map +1 -1
- package/dist/services/provenance-service.d.ts.map +1 -1
- package/dist/services/provenance-service.js +2 -1
- package/dist/services/provenance-service.js.map +1 -1
- package/dist/services/report-linter-service.js +1 -1
- package/dist/services/report-linter-service.js.map +1 -1
- package/dist/services/revise-cache-service.d.ts.map +1 -1
- package/dist/services/revise-cache-service.js +2 -1
- package/dist/services/revise-cache-service.js.map +1 -1
- package/dist/services/runtime-manager/doctor.d.ts +13 -0
- package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
- package/dist/services/runtime-manager/doctor.js +50 -3
- package/dist/services/runtime-manager/doctor.js.map +1 -1
- package/dist/services/runtime-manager/inventory.d.ts +1 -0
- package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
- package/dist/services/runtime-manager/inventory.js +3 -1
- package/dist/services/runtime-manager/inventory.js.map +1 -1
- package/dist/services/runtime-manager-service.d.ts +4 -2
- package/dist/services/runtime-manager-service.d.ts.map +1 -1
- package/dist/services/runtime-manager-service.js +52 -33
- package/dist/services/runtime-manager-service.js.map +1 -1
- package/dist/services/server-lifecycle-service.d.ts.map +1 -1
- package/dist/services/server-lifecycle-service.js +14 -9
- package/dist/services/server-lifecycle-service.js.map +1 -1
- package/dist/services/spec-service.d.ts +4 -4
- package/dist/services/spec-service.d.ts.map +1 -1
- package/dist/services/spec-service.js +43 -77
- package/dist/services/spec-service.js.map +1 -1
- package/dist/services/sprint-refinement-service.d.ts +6 -6
- package/dist/services/sprint-refinement-service.d.ts.map +1 -1
- package/dist/services/sprint-refinement-service.js +16 -16
- package/dist/services/sprint-refinement-service.js.map +1 -1
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +3 -1
- package/dist/services/template-service.js.map +1 -1
- package/dist/services/upgrade-offer-service.d.ts +2 -2
- package/dist/services/upgrade-offer-service.d.ts.map +1 -1
- package/dist/services/upgrade-offer-service.js +4 -3
- package/dist/services/upgrade-offer-service.js.map +1 -1
- package/dist/services/upgrade-report.d.ts +1 -1
- package/dist/services/upgrade-report.d.ts.map +1 -1
- package/dist/services/upgrade-report.js +5 -4
- package/dist/services/upgrade-report.js.map +1 -1
- package/dist/services/upgrade-service.d.ts +5 -5
- package/dist/services/upgrade-service.d.ts.map +1 -1
- package/dist/services/upgrade-service.js +14 -13
- package/dist/services/upgrade-service.js.map +1 -1
- package/dist/templates/backlog/backlog-item.md.hbs +1 -1
- package/dist/templates/checklists/agile-checklist.md.hbs +6 -6
- package/dist/templates/epics/epic.md.hbs +1 -1
- package/dist/templates/export/planning-report.html.hbs +1 -1
- package/dist/templates/export/planning-report.md.hbs +1 -1
- package/dist/templates/features/feature.md.hbs +1 -1
- package/dist/templates/guides/estimation.md.hbs +3 -12
- package/dist/templates/quick/quick-task.md.hbs +1 -1
- package/dist/templates/rules/cursor/create-epic.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/create-features.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/create-user-story.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/openplanr.mdc.hbs +1 -1
- package/dist/templates/rules/shared/capability-map.md.hbs +1 -1
- package/dist/templates/rules/shared/host-native-guidance.md.hbs +1 -1
- package/dist/templates/spec/spec-shaped.md.hbs +1 -1
- package/dist/templates/spec/spec.md.hbs +1 -1
- package/dist/templates/sprints/sprint-tasks.md.hbs +1 -1
- package/dist/templates/sprints/sprint.md.hbs +1 -1
- package/dist/templates/stories/user-story.md.hbs +1 -1
- package/dist/utils/constants.d.ts +8 -4
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +10 -4
- package/dist/utils/constants.js.map +1 -1
- package/docs/ARTIFACT_REVIEW.md +13 -13
- package/docs/CLI.md +258 -262
- package/docs/CROSS_RUNTIME_SETUP.md +33 -33
- package/docs/TROUBLESHOOTING.md +28 -28
- package/install.ps1 +2 -2
- package/install.sh +3 -3
- package/lib/host-packages/adapter-registry.json +5 -5
- package/lib/host-packages/capability-map.json +9 -9
- 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 +109 -89
- package/lib/host-packages/claude/openplanr/README.md +13 -17
- package/lib/host-packages/claude/openplanr/agents/planr-backend.md +49 -55
- package/lib/host-packages/claude/openplanr/agents/planr-database.md +56 -92
- package/lib/host-packages/claude/openplanr/agents/planr-designer.md +35 -51
- package/lib/host-packages/claude/openplanr/agents/planr-devops.md +37 -51
- package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +29 -52
- package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +24 -23
- package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +46 -58
- package/lib/host-packages/claude/openplanr/agents/planr-qa.md +4 -2
- package/lib/host-packages/claude/openplanr/agents/planr-specification.md +54 -51
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +21 -65
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +5 -6
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +2 -3
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +3 -4
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +19 -64
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +10 -12
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +19 -62
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +5 -6
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +2 -3
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +2 -3
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +16 -59
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +9 -11
- package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +4 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +105 -55
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +12 -7
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +11 -4
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +14 -14
- package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +9 -9
- package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +4 -4
- package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +6 -2
- package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +6 -2
- package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/SKILL.md +7 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/references/capsule-contract.md +16 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +8 -6
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/context.mjs +84 -22
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
- package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +4 -4
- package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +4 -4
- package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +4 -4
- package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +15 -15
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +4 -4
- package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +9 -9
- package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +18 -16
- package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +2 -2
- package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +5 -3
- package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +8 -2
- package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +5 -0
- package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +5 -0
- package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +16 -15
- package/lib/host-packages/claude/openplanr/skills/sprint/references/refinement-contract.md +5 -5
- package/lib/host-packages/claude/openplanr/skills/sprint/references/sprint-formats.md +8 -8
- package/lib/host-packages/claude/openplanr/skills/sprint/references/tracker-connections.md +70 -0
- package/lib/host-packages/claude/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
- package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +5 -4
- package/lib/host-packages/claude/openplanr/skills/status/references/tracker-connections.md +70 -0
- package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +11 -20
- package/lib/host-packages/claude/openplanr/skills/sync/references/tracker-connections.md +70 -0
- package/lib/host-packages/claude/openplanr/skills/sync/scripts/names.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +3 -2
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +81 -61
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +9 -9
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +4 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +14 -14
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +6 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +6 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/capsule-contract.md +16 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +8 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/claude.mjs +11 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/native.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/backend-diagnostics.mjs +14 -48
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/context.mjs +84 -22
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/credentials.mjs +167 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/presentation.mjs +3 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-contract.mjs +5 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-preparation.mjs +2 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-record.mjs +2 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate.mdc +7 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +4 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +4 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +4 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +4 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +15 -15
- package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +18 -16
- package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +9 -9
- package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +2 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +5 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +5 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +8 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +5 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/refinement-contract.md +5 -5
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/sprint-formats.md +8 -8
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/tracker-connections.md +70 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/schemas/refinement.schema.json +3 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +16 -15
- package/lib/host-packages/cursor/openplanr/rules/planr-status/references/tracker-connections.md +70 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +5 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/tracker-connections.md +70 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/names.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +3 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +11 -20
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +105 -55
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +12 -7
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +11 -4
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -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 +90 -70
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +105 -55
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +12 -7
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +11 -4
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +14 -14
- package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +9 -9
- package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +4 -4
- package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +6 -2
- package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +6 -2
- package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/SKILL.md +7 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/references/capsule-contract.md +16 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +8 -6
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/context.mjs +84 -22
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
- package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +4 -4
- package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +4 -4
- package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +4 -4
- package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +15 -15
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +4 -4
- package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +9 -9
- package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +18 -16
- package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +2 -2
- package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +5 -3
- package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +8 -2
- package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +5 -0
- package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +5 -0
- package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +16 -15
- package/lib/host-packages/openai/openplanr/skills/sprint/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/sprint/references/refinement-contract.md +5 -5
- package/lib/host-packages/openai/openplanr/skills/sprint/references/sprint-formats.md +8 -8
- package/lib/host-packages/openai/openplanr/skills/sprint/references/tracker-connections.md +70 -0
- package/lib/host-packages/openai/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
- package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +5 -4
- package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/status/references/tracker-connections.md +70 -0
- package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +11 -20
- package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +22 -0
- package/lib/host-packages/openai/openplanr/skills/sync/references/tracker-connections.md +70 -0
- package/lib/host-packages/openai/openplanr/skills/sync/scripts/names.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +3 -2
- package/lib/integrations.mjs +3 -2
- package/lib/names.d.mts +4 -0
- package/lib/names.mjs +8 -0
- package/lib/planning-folder.d.mts +14 -0
- package/lib/planning-folder.mjs +40 -0
- package/package.json +5 -5
- package/dist/dashboard/assets/index-D7R6tnlX.js.map +0 -1
- package/dist/services/connectors/adapters/business-metrics.d.ts +0 -5
- package/dist/services/connectors/adapters/business-metrics.d.ts.map +0 -1
- package/dist/services/connectors/adapters/business-metrics.js +0 -41
- package/dist/services/connectors/adapters/business-metrics.js.map +0 -1
- package/dist/services/connectors/adapters/deployment-health.d.ts +0 -18
- package/dist/services/connectors/adapters/deployment-health.d.ts.map +0 -1
- package/dist/services/connectors/adapters/deployment-health.js +0 -67
- package/dist/services/connectors/adapters/deployment-health.js.map +0 -1
- package/dist/services/connectors/adapters/github.d.ts +0 -5
- package/dist/services/connectors/adapters/github.d.ts.map +0 -1
- package/dist/services/connectors/adapters/github.js +0 -31
- package/dist/services/connectors/adapters/github.js.map +0 -1
- package/dist/services/connectors/adapters/linear-jira.d.ts +0 -5
- package/dist/services/connectors/adapters/linear-jira.d.ts.map +0 -1
- package/dist/services/connectors/adapters/linear-jira.js +0 -26
- package/dist/services/connectors/adapters/linear-jira.js.map +0 -1
- package/dist/services/connectors/adapters/posthog.d.ts +0 -5
- package/dist/services/connectors/adapters/posthog.d.ts.map +0 -1
- package/dist/services/connectors/adapters/posthog.js +0 -31
- package/dist/services/connectors/adapters/posthog.js.map +0 -1
- package/dist/services/connectors/adapters/sentry.d.ts +0 -5
- package/dist/services/connectors/adapters/sentry.d.ts.map +0 -1
- package/dist/services/connectors/adapters/sentry.js +0 -31
- package/dist/services/connectors/adapters/sentry.js.map +0 -1
- package/dist/services/connectors/checkpoint-custody.d.ts +0 -45
- package/dist/services/connectors/checkpoint-custody.d.ts.map +0 -1
- package/dist/services/connectors/checkpoint-custody.js +0 -496
- package/dist/services/connectors/checkpoint-custody.js.map +0 -1
- package/dist/services/connectors/connector-registry.d.ts +0 -144
- package/dist/services/connectors/connector-registry.d.ts.map +0 -1
- package/dist/services/connectors/connector-registry.js +0 -423
- package/dist/services/connectors/connector-registry.js.map +0 -1
- package/dist/services/connectors/connector-runtime.d.ts +0 -208
- package/dist/services/connectors/connector-runtime.d.ts.map +0 -1
- package/dist/services/connectors/connector-runtime.js +0 -1305
- package/dist/services/connectors/connector-runtime.js.map +0 -1
- package/dist/services/connectors/credential-custody.d.ts +0 -96
- package/dist/services/connectors/credential-custody.d.ts.map +0 -1
- package/dist/services/connectors/credential-custody.js +0 -390
- package/dist/services/connectors/credential-custody.js.map +0 -1
- package/dist/templates/voice/standup.md.hbs +0 -20
- /package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
- /package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
- /package/lib/host-packages/openai/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
|
@@ -52,6 +52,10 @@ import {
|
|
|
52
52
|
readJson,
|
|
53
53
|
reviewDigest
|
|
54
54
|
} from "./design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs";
|
|
55
|
+
import {
|
|
56
|
+
CLI_COMMAND,
|
|
57
|
+
PLANNING_FOLDER
|
|
58
|
+
} from "./design-owner-custody.mjs";
|
|
55
59
|
import {
|
|
56
60
|
planrHome
|
|
57
61
|
} from "./design-runtime-home.mjs";
|
|
@@ -410,8 +414,8 @@ ${fence}`;
|
|
|
410
414
|
var { createDesignReviewExport, serializeDesignReviewExport } = reviewExportTools();
|
|
411
415
|
|
|
412
416
|
// packages/design/lib/design/review.mjs
|
|
413
|
-
import { existsSync as
|
|
414
|
-
import { dirname as dirname4, join as
|
|
417
|
+
import { existsSync as existsSync5, readFileSync as readFileSync4 } from "node:fs";
|
|
418
|
+
import { dirname as dirname4, join as join5, relative, resolve as resolve3 } from "node:path";
|
|
415
419
|
|
|
416
420
|
// packages/artifact/lib/artifact/review-server.mjs
|
|
417
421
|
import { existsSync, lstatSync, readdirSync, readFileSync, rmSync } from "node:fs";
|
|
@@ -420,8 +424,12 @@ import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
|
420
424
|
import { fileURLToPath } from "node:url";
|
|
421
425
|
var here = dirname(fileURLToPath(new URL("./runtime/packages/artifact/lib/artifact/review-server.mjs", import.meta.url).href));
|
|
422
426
|
var STAGE_RUNTIME_PATH = join(here, "..", "..", "templates", "artifact-review-stage.js");
|
|
423
|
-
var ARTIFACT_REVIEW_SERVER_VERSION =
|
|
427
|
+
var ARTIFACT_REVIEW_SERVER_VERSION = 3;
|
|
424
428
|
var ARTIFACT_REVIEW_SERVER_KIND = "artifact-review";
|
|
429
|
+
var CONTROL_HEADER = "x-openplanr-control";
|
|
430
|
+
var CONTROLLABLE_SERVER_VERSIONS = /* @__PURE__ */ new Set([2, ARTIFACT_REVIEW_SERVER_VERSION]);
|
|
431
|
+
var EXPORT_ONLY_SERVER_VERSIONS = /* @__PURE__ */ new Set([1]);
|
|
432
|
+
var AUTHORIZATION_CONTROL_VERSIONS = /* @__PURE__ */ new Set([1, 2]);
|
|
425
433
|
var CONTROL_WINDOW_BYTES = 64 * 1024 * 1024;
|
|
426
434
|
var ARTIFACT_REVIEW_MAX_CONTROL_BYTES = Math.ceil((MAX_ARTIFACT_HTML_BYTES * 2 + ARTIFACT_REVIEW_MAX_STATE_BYTES) / CONTROL_WINDOW_BYTES) * CONTROL_WINDOW_BYTES;
|
|
427
435
|
var ARTIFACT_REVIEW_MAX_STATE_BYTES2 = ARTIFACT_REVIEW_MAX_STATE_BYTES;
|
|
@@ -477,6 +485,12 @@ var PERMISSIONS_POLICY = [
|
|
|
477
485
|
function artifactError(code, message, fix = "", details) {
|
|
478
486
|
return new PipelineError(code, message, fix, details);
|
|
479
487
|
}
|
|
488
|
+
function artifactReviewControlHeaders(controlToken) {
|
|
489
|
+
return { [CONTROL_HEADER]: controlToken };
|
|
490
|
+
}
|
|
491
|
+
function stateControlHeaders(state) {
|
|
492
|
+
return AUTHORIZATION_CONTROL_VERSIONS.has(state.serverVersion) ? { authorization: `Bearer ${state.controlToken}` } : artifactReviewControlHeaders(state.controlToken);
|
|
493
|
+
}
|
|
480
494
|
function reviewStateDir(env = process.env) {
|
|
481
495
|
return join(planrHome(env), "artifact-daemon");
|
|
482
496
|
}
|
|
@@ -559,9 +573,9 @@ function parseRequestPath(rawUrl) {
|
|
|
559
573
|
});
|
|
560
574
|
return { segments, trailingSlash };
|
|
561
575
|
}
|
|
562
|
-
function
|
|
563
|
-
const value = req.headers?.
|
|
564
|
-
return typeof value === "string"
|
|
576
|
+
function presentedControlToken(req) {
|
|
577
|
+
const value = req.headers?.[CONTROL_HEADER];
|
|
578
|
+
return typeof value === "string" ? value : "";
|
|
565
579
|
}
|
|
566
580
|
function cloneAndValidateEnvelope(envelope) {
|
|
567
581
|
let cloned;
|
|
@@ -871,7 +885,7 @@ function createArtifactReviewServer({
|
|
|
871
885
|
return;
|
|
872
886
|
}
|
|
873
887
|
if (internal) {
|
|
874
|
-
if (!timingSafeTokenEqual(
|
|
888
|
+
if (!timingSafeTokenEqual(presentedControlToken(req), controlToken)) {
|
|
875
889
|
sendJson(res, 403, { ok: false, error: "forbidden" });
|
|
876
890
|
return;
|
|
877
891
|
}
|
|
@@ -1445,7 +1459,7 @@ function createArtifactReviewServer({
|
|
|
1445
1459
|
return controller;
|
|
1446
1460
|
}
|
|
1447
1461
|
function validState(value, requestedPort, { allowLegacy = false } = {}) {
|
|
1448
|
-
return value?.schemaVersion === "1.0.0" && value.kind === ARTIFACT_REVIEW_SERVER_KIND && (value.serverVersion
|
|
1462
|
+
return value?.schemaVersion === "1.0.0" && value.kind === ARTIFACT_REVIEW_SERVER_KIND && (CONTROLLABLE_SERVER_VERSIONS.has(value.serverVersion) || allowLegacy && EXPORT_ONLY_SERVER_VERSIONS.has(value.serverVersion)) && Number.isInteger(value.pid) && value.pid > 0 && Number.isInteger(value.port) && value.port > 0 && value.port <= 65535 && (requestedPort === 0 || value.port === requestedPort) && isCapabilityToken(value.instanceId, { bytes: SESSION_ID_BYTES }) && isCapabilityToken(value.controlToken, { bytes: CONTROL_TOKEN_BYTES });
|
|
1449
1463
|
}
|
|
1450
1464
|
function readReviewServerState(path) {
|
|
1451
1465
|
try {
|
|
@@ -1456,7 +1470,7 @@ function readReviewServerState(path) {
|
|
|
1456
1470
|
throw artifactError(
|
|
1457
1471
|
ARTIFACT_ERROR_CODES.LOOPBACK_STATE,
|
|
1458
1472
|
"Local Studio owner state is unsafe or malformed. The original record was preserved.",
|
|
1459
|
-
|
|
1473
|
+
`Run ${CLI_COMMAND} doctor and recover the owner record before starting or stopping this service.`
|
|
1460
1474
|
);
|
|
1461
1475
|
}
|
|
1462
1476
|
}
|
|
@@ -1469,7 +1483,7 @@ async function controlRequest(descriptor, path, { method, body, fetchImpl } = {}
|
|
|
1469
1483
|
const response = await fetchImpl(`http://${LOOPBACK_HOST}:${descriptor.state.port}${path}`, {
|
|
1470
1484
|
method,
|
|
1471
1485
|
headers: {
|
|
1472
|
-
|
|
1486
|
+
...stateControlHeaders(descriptor.state),
|
|
1473
1487
|
...body === void 0 ? {} : { "content-type": "application/json" }
|
|
1474
1488
|
},
|
|
1475
1489
|
...body === void 0 ? {} : { body: JSON.stringify(body) },
|
|
@@ -1533,6 +1547,34 @@ async function stopArtifactReviewServer(instanceId, { env = process.env, fetchIm
|
|
|
1533
1547
|
return controlRequest({ state }, "/internal/v1/shutdown", { method: "POST", fetchImpl });
|
|
1534
1548
|
}
|
|
1535
1549
|
|
|
1550
|
+
// packages/protocol/src/planning-folder.mjs
|
|
1551
|
+
import { existsSync as existsSync2, readdirSync as readdirSync2, statSync } from "node:fs";
|
|
1552
|
+
import { join as join2 } from "node:path";
|
|
1553
|
+
var FOREIGN_FILES = Object.freeze(["planr.config.json", "board.html"]);
|
|
1554
|
+
var GOAL_DIRECTORIES = Object.freeze(["tasks", "plans"]);
|
|
1555
|
+
var isDirectory = (path) => existsSync2(path) && statSync(path).isDirectory();
|
|
1556
|
+
function foreignPlanningFolderSigns(projectRoot2) {
|
|
1557
|
+
const folder = join2(projectRoot2, PLANNING_FOLDER);
|
|
1558
|
+
if (!isDirectory(folder) || existsSync2(join2(folder, "config.json"))) return [];
|
|
1559
|
+
const signs = FOREIGN_FILES.filter((name) => existsSync2(join2(folder, name)));
|
|
1560
|
+
for (const name of GOAL_DIRECTORIES) {
|
|
1561
|
+
const directory = join2(folder, name);
|
|
1562
|
+
if (isDirectory(directory) && readdirSync2(directory).some((entry) => entry.endsWith("-goal.md")))
|
|
1563
|
+
signs.push(`*-goal.md files in ${name}`);
|
|
1564
|
+
}
|
|
1565
|
+
return signs;
|
|
1566
|
+
}
|
|
1567
|
+
function planningFolderConflict(projectRoot2) {
|
|
1568
|
+
const signs = foreignPlanningFolderSigns(projectRoot2);
|
|
1569
|
+
if (signs.length === 0) return null;
|
|
1570
|
+
return Object.freeze({
|
|
1571
|
+
code: "E_PLANNING_FOLDER_FOREIGN",
|
|
1572
|
+
problem: `The ${PLANNING_FOLDER} folder in this project wasn't created by OpenPlanr: it has ${signs.join(", ")} and no OpenPlanr config.json. OpenPlanr wrote nothing there.`,
|
|
1573
|
+
fix: `Move or rename that folder, or use ${CLI_COMMAND} in a project without it, then retry.`,
|
|
1574
|
+
signs: Object.freeze(signs)
|
|
1575
|
+
});
|
|
1576
|
+
}
|
|
1577
|
+
|
|
1536
1578
|
// packages/design/lib/design/design-plan-handoff.mjs
|
|
1537
1579
|
var clone = (value) => JSON.parse(canonicalizeJson(value));
|
|
1538
1580
|
function prepareDesignPlanHandoff(handoff, { subject } = {}) {
|
|
@@ -1571,7 +1613,7 @@ function prepareDesignPlanHandoff(handoff, { subject } = {}) {
|
|
|
1571
1613
|
// packages/design/lib/design/implementation-handoff.mjs
|
|
1572
1614
|
import { createHash, randomUUID } from "node:crypto";
|
|
1573
1615
|
import {
|
|
1574
|
-
existsSync as
|
|
1616
|
+
existsSync as existsSync3,
|
|
1575
1617
|
mkdirSync,
|
|
1576
1618
|
readFileSync as readFileSync2,
|
|
1577
1619
|
realpathSync,
|
|
@@ -1579,7 +1621,7 @@ import {
|
|
|
1579
1621
|
rmSync as rmSync2,
|
|
1580
1622
|
writeFileSync
|
|
1581
1623
|
} from "node:fs";
|
|
1582
|
-
import { dirname as dirname2, join as
|
|
1624
|
+
import { dirname as dirname2, join as join3, resolve as resolve2, sep } from "node:path";
|
|
1583
1625
|
|
|
1584
1626
|
// packages/design/lib/design/implementation-handoff-markdown.mjs
|
|
1585
1627
|
var line = (value) => String(value).replaceAll("\r\n", "\n").replaceAll("\r", "\n").trim().replaceAll("\n", " ").replace(/([\\`*_[\]<>#|])/gu, "\\$1");
|
|
@@ -1832,19 +1874,19 @@ function createRepositorySourceResolver(root) {
|
|
|
1832
1874
|
};
|
|
1833
1875
|
}
|
|
1834
1876
|
function implementationHandoffPaths(root) {
|
|
1835
|
-
const directory =
|
|
1877
|
+
const directory = join3(resolve2(root), "implementation-handoff");
|
|
1836
1878
|
return Object.freeze({
|
|
1837
1879
|
directory,
|
|
1838
|
-
draftJson:
|
|
1839
|
-
draftMarkdown:
|
|
1840
|
-
journal:
|
|
1841
|
-
current:
|
|
1842
|
-
history:
|
|
1880
|
+
draftJson: join3(directory, "draft.json"),
|
|
1881
|
+
draftMarkdown: join3(directory, "draft.md"),
|
|
1882
|
+
journal: join3(directory, "draft-publication.json"),
|
|
1883
|
+
current: join3(directory, "current.json"),
|
|
1884
|
+
history: join3(directory, "versions")
|
|
1843
1885
|
});
|
|
1844
1886
|
}
|
|
1845
1887
|
function recoverImplementationHandoffDraft(root) {
|
|
1846
1888
|
const paths = implementationHandoffPaths(root);
|
|
1847
|
-
if (!
|
|
1889
|
+
if (!existsSync3(paths.journal)) return false;
|
|
1848
1890
|
const journal = JSON.parse(readFileSync2(paths.journal, "utf8"));
|
|
1849
1891
|
const value = assertImplementationHandoffProjection(journal.package);
|
|
1850
1892
|
if (journal.markdown !== value.markdown)
|
|
@@ -1857,14 +1899,14 @@ function recoverImplementationHandoffDraft(root) {
|
|
|
1857
1899
|
function readImplementationHandoffDraft(root, { allowMissing = true } = {}) {
|
|
1858
1900
|
const paths = implementationHandoffPaths(root);
|
|
1859
1901
|
recoverImplementationHandoffDraft(root);
|
|
1860
|
-
if (!
|
|
1902
|
+
if (!existsSync3(paths.draftJson)) {
|
|
1861
1903
|
if (allowMissing) return null;
|
|
1862
1904
|
throw new Error("No implementation handoff draft exists.");
|
|
1863
1905
|
}
|
|
1864
1906
|
const value = assertImplementationHandoffProjection(
|
|
1865
1907
|
JSON.parse(readFileSync2(paths.draftJson, "utf8"))
|
|
1866
1908
|
);
|
|
1867
|
-
if (!
|
|
1909
|
+
if (!existsSync3(paths.draftMarkdown))
|
|
1868
1910
|
throw new Error("Implementation handoff Markdown is missing.");
|
|
1869
1911
|
if (readFileSync2(paths.draftMarkdown, "utf8") !== value.markdown)
|
|
1870
1912
|
throw new Error("Implementation handoff JSON and Markdown projections differ.");
|
|
@@ -1899,15 +1941,15 @@ function importImplementationHandoffPackage(input, { resolveSource } = {}) {
|
|
|
1899
1941
|
// packages/design/lib/design/implementation-handoff-approval.mjs
|
|
1900
1942
|
import { createHash as createHash2, randomUUID as randomUUID2 } from "node:crypto";
|
|
1901
1943
|
import {
|
|
1902
|
-
existsSync as
|
|
1944
|
+
existsSync as existsSync4,
|
|
1903
1945
|
mkdirSync as mkdirSync2,
|
|
1904
|
-
readdirSync as
|
|
1946
|
+
readdirSync as readdirSync3,
|
|
1905
1947
|
readFileSync as readFileSync3,
|
|
1906
1948
|
renameSync as renameSync2,
|
|
1907
1949
|
rmSync as rmSync3,
|
|
1908
1950
|
writeFileSync as writeFileSync2
|
|
1909
1951
|
} from "node:fs";
|
|
1910
|
-
import { dirname as dirname3, join as
|
|
1952
|
+
import { dirname as dirname3, join as join4 } from "node:path";
|
|
1911
1953
|
var DIGEST2 = /^sha256:[a-f0-9]{64}$/u;
|
|
1912
1954
|
var ID = /^[A-Za-z0-9][A-Za-z0-9._:-]*$/u;
|
|
1913
1955
|
var APPROVE_CAPABILITY = "design:implementation-handoff:approve";
|
|
@@ -1996,20 +2038,20 @@ function implementationHandoffApprovalPaths(root) {
|
|
|
1996
2038
|
const base = implementationHandoffPaths(root);
|
|
1997
2039
|
return Object.freeze({
|
|
1998
2040
|
...base,
|
|
1999
|
-
events:
|
|
2000
|
-
journal:
|
|
2041
|
+
events: join4(base.directory, "events"),
|
|
2042
|
+
journal: join4(base.directory, "lifecycle-publication.json")
|
|
2001
2043
|
});
|
|
2002
2044
|
}
|
|
2003
2045
|
function archivePaths(root, value) {
|
|
2004
|
-
const directory =
|
|
2046
|
+
const directory = join4(implementationHandoffPaths(root).history, packageKey(value));
|
|
2005
2047
|
return {
|
|
2006
2048
|
directory,
|
|
2007
|
-
json:
|
|
2008
|
-
markdown:
|
|
2049
|
+
json: join4(directory, "handoff.json"),
|
|
2050
|
+
markdown: join4(directory, "handoff.md")
|
|
2009
2051
|
};
|
|
2010
2052
|
}
|
|
2011
2053
|
function eventPath(root, requestId) {
|
|
2012
|
-
return
|
|
2054
|
+
return join4(implementationHandoffApprovalPaths(root).events, `${requestKey(requestId)}.json`);
|
|
2013
2055
|
}
|
|
2014
2056
|
function readJson2(path, fallback = void 0) {
|
|
2015
2057
|
try {
|
|
@@ -2043,13 +2085,13 @@ function pointerFor(value, status, eventId, extra = {}) {
|
|
|
2043
2085
|
}
|
|
2044
2086
|
function writeLifecycleJournal(root, journal) {
|
|
2045
2087
|
const paths = implementationHandoffApprovalPaths(root);
|
|
2046
|
-
if (
|
|
2088
|
+
if (existsSync4(paths.journal)) recoverImplementationHandoffApproval(root);
|
|
2047
2089
|
atomicText2(paths.journal, jsonBytes2(journal));
|
|
2048
2090
|
return recoverImplementationHandoffApproval(root);
|
|
2049
2091
|
}
|
|
2050
2092
|
function recoverImplementationHandoffApproval(root) {
|
|
2051
2093
|
const paths = implementationHandoffApprovalPaths(root);
|
|
2052
|
-
if (!
|
|
2094
|
+
if (!existsSync4(paths.journal)) return false;
|
|
2053
2095
|
const journal = readJson2(paths.journal);
|
|
2054
2096
|
if (journal.kind !== "openplanr-design-implementation-handoff-lifecycle-publication" || journal.schemaVersion !== "1.0.0")
|
|
2055
2097
|
throw new TypeError("The implementation handoff lifecycle journal is invalid.");
|
|
@@ -2080,16 +2122,16 @@ function readImplementationHandoffVersion(root, identity) {
|
|
|
2080
2122
|
function listImplementationHandoffHistory(root) {
|
|
2081
2123
|
recoverImplementationHandoffApproval(root);
|
|
2082
2124
|
const directory = implementationHandoffPaths(root).history;
|
|
2083
|
-
if (!
|
|
2084
|
-
return
|
|
2085
|
-
(entry) => assertImplementationHandoffProjection(readJson2(
|
|
2125
|
+
if (!existsSync4(directory)) return [];
|
|
2126
|
+
return readdirSync3(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map(
|
|
2127
|
+
(entry) => assertImplementationHandoffProjection(readJson2(join4(directory, entry.name, "handoff.json")))
|
|
2086
2128
|
).sort((left, right) => left.version - right.version || left.id.localeCompare(right.id));
|
|
2087
2129
|
}
|
|
2088
2130
|
function readImplementationHandoffLifecycle(root) {
|
|
2089
2131
|
recoverImplementationHandoffApproval(root);
|
|
2090
2132
|
const paths = implementationHandoffApprovalPaths(root);
|
|
2091
2133
|
const current = readJson2(paths.current, null);
|
|
2092
|
-
const events =
|
|
2134
|
+
const events = existsSync4(paths.events) ? readdirSync3(paths.events).filter((name) => name.endsWith(".json")).map((name) => readJson2(join4(paths.events, name))).sort(
|
|
2093
2135
|
(left, right) => left.at.localeCompare(right.at) || left.eventId.localeCompare(right.eventId)
|
|
2094
2136
|
) : [];
|
|
2095
2137
|
return Object.freeze({ current, history: listImplementationHandoffHistory(root), events });
|
|
@@ -2561,7 +2603,7 @@ function validateState(value, current) {
|
|
|
2561
2603
|
function projectRoot(root) {
|
|
2562
2604
|
let candidate = root;
|
|
2563
2605
|
while (true) {
|
|
2564
|
-
if (
|
|
2606
|
+
if (existsSync5(join5(candidate, PLANNING_FOLDER)) || existsSync5(join5(candidate, ".git")))
|
|
2565
2607
|
return candidate;
|
|
2566
2608
|
const parent = dirname4(candidate);
|
|
2567
2609
|
if (parent === candidate) return root;
|
|
@@ -2606,7 +2648,7 @@ function proposeImplementationPackage(file, env) {
|
|
|
2606
2648
|
designSpecPath(current.root),
|
|
2607
2649
|
...(current.sourceFiles ?? []).map((path) => resolve3(current.root, path))
|
|
2608
2650
|
])
|
|
2609
|
-
].filter((path) =>
|
|
2651
|
+
].filter((path) => existsSync5(path));
|
|
2610
2652
|
const sources = paths.map((path, index) => {
|
|
2611
2653
|
const logicalPath = relative(repository, path).replaceAll("\\", "/");
|
|
2612
2654
|
const extension = logicalPath.split(".").pop()?.toLowerCase();
|
|
@@ -2652,7 +2694,10 @@ function proposeImplementationPackage(file, env) {
|
|
|
2652
2694
|
};
|
|
2653
2695
|
}
|
|
2654
2696
|
async function persistDesignTaste(current, state) {
|
|
2655
|
-
const
|
|
2697
|
+
const root = projectRoot(current.root);
|
|
2698
|
+
const conflict = planningFolderConflict(root);
|
|
2699
|
+
if (conflict) throw new PipelineError(conflict.code, conflict.problem, conflict.fix);
|
|
2700
|
+
const path = join5(root, `${PLANNING_FOLDER}/design-system/taste.json`);
|
|
2656
2701
|
const release = await acquireStartLock(`${path}.lock`);
|
|
2657
2702
|
try {
|
|
2658
2703
|
const taste = readJson(path, { designs: {} });
|
|
@@ -2693,7 +2738,7 @@ async function saveDesignState(file, { state, revision, stateVersion }) {
|
|
|
2693
2738
|
throw Object.assign(new Error("The design changed. Reload before saving feedback."), {
|
|
2694
2739
|
statusCode: 409
|
|
2695
2740
|
});
|
|
2696
|
-
const path =
|
|
2741
|
+
const path = join5(current.root, ".design/studio-state.json");
|
|
2697
2742
|
const release = await acquireStartLock(`${path}.lock`);
|
|
2698
2743
|
try {
|
|
2699
2744
|
current = currentDesign(file);
|
|
@@ -2731,7 +2776,7 @@ var readBody = async (req) => JSON.parse(await readRequestBody(req, { maxBytes:
|
|
|
2731
2776
|
var readImplementationBody = async (req) => JSON.parse(await readRequestBody(req, { maxBytes: 5 * 1024 * 1024, encoding: "utf8" }));
|
|
2732
2777
|
async function startDesignReview(file, options = {}) {
|
|
2733
2778
|
const { root } = currentDesign(file);
|
|
2734
|
-
const release = await acquireStartLock(
|
|
2779
|
+
const release = await acquireStartLock(join5(root, ".design/start.lock"));
|
|
2735
2780
|
try {
|
|
2736
2781
|
return await startDesignReviewUnlocked(file, options);
|
|
2737
2782
|
} finally {
|
|
@@ -2752,7 +2797,7 @@ async function startDesignReviewUnlocked(file, {
|
|
|
2752
2797
|
let current = currentDesign(file);
|
|
2753
2798
|
const applyInitialView = async () => {
|
|
2754
2799
|
if (view === void 0) return;
|
|
2755
|
-
const saved = readJson(
|
|
2800
|
+
const saved = readJson(join5(current.root, ".design/studio-state.json"), {
|
|
2756
2801
|
state: {},
|
|
2757
2802
|
stateVersion: 0
|
|
2758
2803
|
});
|
|
@@ -2762,7 +2807,7 @@ async function startDesignReviewUnlocked(file, {
|
|
|
2762
2807
|
state: { ...saved.state, view }
|
|
2763
2808
|
});
|
|
2764
2809
|
};
|
|
2765
|
-
const stateFile =
|
|
2810
|
+
const stateFile = join5(current.root, ".design/server.json");
|
|
2766
2811
|
const old = readJson(stateFile, null);
|
|
2767
2812
|
const services = (await listArtifactReviewServers({ env, fetchImpl })).filter(
|
|
2768
2813
|
(service) => service.kind === "design" && service.projectRoot === current.root
|
|
@@ -2817,7 +2862,12 @@ async function startDesignReviewUnlocked(file, {
|
|
|
2817
2862
|
server = createArtifactReviewServer({
|
|
2818
2863
|
env,
|
|
2819
2864
|
serverMetadata: { kind: "design", projectRoot: current.root },
|
|
2820
|
-
prepareSource: (options) => prepareArtifactDocument({
|
|
2865
|
+
prepareSource: (options) => prepareArtifactDocument({
|
|
2866
|
+
...options,
|
|
2867
|
+
allowLocalForms: true,
|
|
2868
|
+
prototypeState: true,
|
|
2869
|
+
screenId: current.entries.find((entry) => entry.artifactId === options.artifactId)?.screenId ?? options.artifactId
|
|
2870
|
+
}),
|
|
2821
2871
|
async refreshSession(session) {
|
|
2822
2872
|
current = currentDesign(file);
|
|
2823
2873
|
if (session.designRevision === current.revision) return;
|
|
@@ -2839,7 +2889,7 @@ async function startDesignReviewUnlocked(file, {
|
|
|
2839
2889
|
session.designRevision = current.revision;
|
|
2840
2890
|
},
|
|
2841
2891
|
renderDocument({ model, base }) {
|
|
2842
|
-
const state = readJson(
|
|
2892
|
+
const state = readJson(join5(current.root, ".design/studio-state.json"), {
|
|
2843
2893
|
state: {}
|
|
2844
2894
|
}).state;
|
|
2845
2895
|
const stalePins = readDesignFeedback(file, env).pins.filter((pin) => pin.stale);
|
|
@@ -2892,7 +2942,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
2892
2942
|
respond(res, 200, readDesignHandoff(file, { env }));
|
|
2893
2943
|
} else if (route === "design-implementation-handoff" && req.method === "GET") {
|
|
2894
2944
|
const design = currentDesign(file);
|
|
2895
|
-
const unlock = await acquireStartLock(
|
|
2945
|
+
const unlock = await acquireStartLock(join5(design.root, ".design/render.lock"));
|
|
2896
2946
|
try {
|
|
2897
2947
|
const root = dirname4(designSpecPath(design.root));
|
|
2898
2948
|
let proposal = null;
|
|
@@ -2938,7 +2988,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
2938
2988
|
].includes(input.action))
|
|
2939
2989
|
throw new Error("Unknown implementation package action.");
|
|
2940
2990
|
const initial = currentDesign(file);
|
|
2941
|
-
const unlock = await acquireStartLock(
|
|
2991
|
+
const unlock = await acquireStartLock(join5(initial.root, ".design/render.lock"));
|
|
2942
2992
|
try {
|
|
2943
2993
|
const design = currentDesign(file);
|
|
2944
2994
|
const root = dirname4(designSpecPath(design.root));
|
|
@@ -3103,7 +3153,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3103
3153
|
else if (action === "recovery")
|
|
3104
3154
|
result = await exportDesignShareRecovery(file, {
|
|
3105
3155
|
...options,
|
|
3106
|
-
output:
|
|
3156
|
+
output: join5(
|
|
3107
3157
|
env.HOME ?? process.env.HOME,
|
|
3108
3158
|
"Downloads",
|
|
3109
3159
|
`openplanr-design-recovery-${Date.now()}.json`
|
|
@@ -3112,7 +3162,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3112
3162
|
else result = await manageDesignShare(file, action, options);
|
|
3113
3163
|
respond(res, 200, result);
|
|
3114
3164
|
} else if (route === "design-status" && req.method === "GET") {
|
|
3115
|
-
const ready = readJson(
|
|
3165
|
+
const ready = readJson(join5(current.root, ".design/browser-ready.json"), null);
|
|
3116
3166
|
respond(res, 200, {
|
|
3117
3167
|
ok: true,
|
|
3118
3168
|
documentId: current.document.id,
|
|
@@ -3123,7 +3173,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3123
3173
|
});
|
|
3124
3174
|
} else if (route === "design-state" && req.method === "GET") {
|
|
3125
3175
|
respond(res, 200, {
|
|
3126
|
-
...readJson(
|
|
3176
|
+
...readJson(join5(current.root, ".design/studio-state.json"), {
|
|
3127
3177
|
state: {},
|
|
3128
3178
|
stateVersion: 0
|
|
3129
3179
|
}),
|
|
@@ -3136,7 +3186,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3136
3186
|
const loadedArtifacts = new Set(Array.isArray(value?.artifacts) ? value.artifacts : []);
|
|
3137
3187
|
if (value.revision !== current.revision || value.status !== "ready" || !Array.isArray(value.artifacts) || value.artifacts.length === 0 || loadedArtifacts.size !== value.artifacts.length || value.artifacts.some((id) => !current.entries.some((entry) => entry.artifactId === id)))
|
|
3138
3188
|
throw new Error("Browser readiness must identify loaded design artboards.");
|
|
3139
|
-
atomicJson(
|
|
3189
|
+
atomicJson(join5(current.root, ".design/browser-ready.json"), {
|
|
3140
3190
|
status: "ready",
|
|
3141
3191
|
revision: current.revision,
|
|
3142
3192
|
artifacts: value.artifacts,
|
|
@@ -3145,7 +3195,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3145
3195
|
});
|
|
3146
3196
|
respond(res, 200, { ok: true });
|
|
3147
3197
|
} else if (route === "design-export" && req.method === "GET") {
|
|
3148
|
-
const state = readJson(
|
|
3198
|
+
const state = readJson(join5(current.root, ".design/studio-state.json"), {
|
|
3149
3199
|
state: {}
|
|
3150
3200
|
}).state;
|
|
3151
3201
|
res.writeHead(200, {
|
|
@@ -3179,7 +3229,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3179
3229
|
const registered = await fetchImpl(`${origin}/internal/v1/sessions`, {
|
|
3180
3230
|
method: "POST",
|
|
3181
3231
|
headers: {
|
|
3182
|
-
|
|
3232
|
+
...artifactReviewControlHeaders(server.controlToken),
|
|
3183
3233
|
"content-type": "application/json"
|
|
3184
3234
|
},
|
|
3185
3235
|
body: JSON.stringify({
|
|
@@ -3269,8 +3319,8 @@ async function resolveDesignPins(file, { pinIds, summary, env = process.env }) {
|
|
|
3269
3319
|
"One or more requested pins do not exist."
|
|
3270
3320
|
);
|
|
3271
3321
|
writeArtifactReviewState(path, createReviewLedger({ ...ledger, reviews: revisions }));
|
|
3272
|
-
const history = readJson(
|
|
3273
|
-
atomicJson(
|
|
3322
|
+
const history = readJson(join5(current.root, ".design/review-history.json"), []);
|
|
3323
|
+
atomicJson(join5(current.root, ".design/review-history.json"), [
|
|
3274
3324
|
...history,
|
|
3275
3325
|
{
|
|
3276
3326
|
revision: current.revision,
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
createChunkedWorkspaceClient
|
|
21
21
|
} from "./design-chunked-workspace-client.mjs";
|
|
22
22
|
import {
|
|
23
|
+
PLANNING_FOLDER,
|
|
23
24
|
ensurePrivateDirectory,
|
|
24
25
|
readCustody,
|
|
25
26
|
writeCustody
|
|
@@ -80,7 +81,7 @@ function custodyLocation(file, options = {}, { allowMissing = false } = {}) {
|
|
|
80
81
|
const root = resolve(options.custodyRoot ?? join(planrHome(env), "design-shares"));
|
|
81
82
|
let project = current.root;
|
|
82
83
|
for (let candidate = current.root; dirname(candidate) !== candidate; candidate = dirname(candidate)) {
|
|
83
|
-
if (existsSync(join(candidate, ".git")) || existsSync(join(candidate,
|
|
84
|
+
if (existsSync(join(candidate, ".git")) || existsSync(join(candidate, PLANNING_FOLDER))) {
|
|
84
85
|
project = candidate;
|
|
85
86
|
break;
|
|
86
87
|
}
|
|
@@ -91,7 +92,7 @@ ${current.document.id}`);
|
|
|
91
92
|
const within = relative(project, root);
|
|
92
93
|
if ((!allowMissing || existsSync(path)) && (within === "" || !within.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) && within !== ".." && !isAbsolute(within)))
|
|
93
94
|
throw new Error(
|
|
94
|
-
"Design owner
|
|
95
|
+
"Design owner keys must be stored outside the project. Set PLANR_HOME to a private user-level directory."
|
|
95
96
|
);
|
|
96
97
|
const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join(realpathSync(env.HOME || homedir()), ".openplanr", "design-shares", `${key}.json`) : null;
|
|
97
98
|
return { root, path, current, legacyPath };
|
|
@@ -684,7 +685,7 @@ function inside(base, candidate) {
|
|
|
684
685
|
return rel === "" || !rel.startsWith("..") && !isAbsolute2(rel);
|
|
685
686
|
}
|
|
686
687
|
function parseablePlanrConfig(root) {
|
|
687
|
-
const path = join2(root,
|
|
688
|
+
const path = join2(root, PLANNING_FOLDER, "config.json");
|
|
688
689
|
if (!existsSync3(path)) return false;
|
|
689
690
|
try {
|
|
690
691
|
if (lstatSync2(path).isSymbolicLink()) return false;
|
|
@@ -813,7 +814,11 @@ function resolveArtifactReviewDestination({
|
|
|
813
814
|
}
|
|
814
815
|
const projectRoot = findArtifactProjectRoot(cwd, { env });
|
|
815
816
|
if (projectRoot) {
|
|
816
|
-
const directory2 = assertSafeDestination(projectRoot, [
|
|
817
|
+
const directory2 = assertSafeDestination(projectRoot, [
|
|
818
|
+
PLANNING_FOLDER,
|
|
819
|
+
"artifacts",
|
|
820
|
+
artifactId
|
|
821
|
+
]);
|
|
817
822
|
return Object.freeze({
|
|
818
823
|
kind: "project",
|
|
819
824
|
artifactId,
|
|
@@ -1780,10 +1785,10 @@ async function importDesignShareRecovery(file, { input, ...options } = {}) {
|
|
|
1780
1785
|
throw new Error("Recovery belongs to a different design.");
|
|
1781
1786
|
if (record && (record.custody.id !== custody.id || JSON.stringify(record.custody.ownerPublicKey) !== JSON.stringify(custody.ownerPublicKey)))
|
|
1782
1787
|
throw new Error(
|
|
1783
|
-
"This design already has different owner
|
|
1788
|
+
"This design already has different owner keys. Recovery will not overwrite them."
|
|
1784
1789
|
);
|
|
1785
1790
|
if (record && record.custody.version > custody.version)
|
|
1786
|
-
throw new Error("This recovery file is older than the locally saved owner
|
|
1791
|
+
throw new Error("This recovery file is older than the locally saved owner keys.");
|
|
1787
1792
|
if (!custody.pendingCreate && !recovered.deleted && !recovered.revoked) {
|
|
1788
1793
|
await getWorkspace(custody, { fetchImpl: options.fetchImpl });
|
|
1789
1794
|
const bundle = await decryptWorkspaceRevision(custody, custody.currentRevision, {
|
|
@@ -1799,7 +1804,7 @@ async function importDesignShareRecovery(file, { input, ...options } = {}) {
|
|
|
1799
1804
|
const pending = custody.pendingCreate ?? custody.pendingMutation.body;
|
|
1800
1805
|
const destination = join3(root, "uploads", custody.id, pending.operationId);
|
|
1801
1806
|
if (existsSync4(destination)) {
|
|
1802
|
-
const { spoolChunkReader: spoolChunkReader2 } = await import("./design-runtime-support-
|
|
1807
|
+
const { spoolChunkReader: spoolChunkReader2 } = await import("./design-runtime-support-336900df0d39.mjs");
|
|
1803
1808
|
const reader = spoolChunkReader2(destination, pending);
|
|
1804
1809
|
for (const part of pending.manifest.chunks) await reader(part.index);
|
|
1805
1810
|
} else await copyUploadSpool(custody, destination);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openplanr/design",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Canonical OpenPlanr design helpers and design-loop engine",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"node": ">=20.19.0"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@openplanr/artifact": "0.6.
|
|
50
|
-
"@openplanr/protocol": "0.10.
|
|
49
|
+
"@openplanr/artifact": "0.6.5",
|
|
50
|
+
"@openplanr/protocol": "0.10.3"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"test": "node --test --test-concurrency=2 tests/*.test.mjs",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openplanr/protocol",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,6 +27,14 @@
|
|
|
27
27
|
"types": "./src/semver.d.mts",
|
|
28
28
|
"import": "./src/semver.mjs"
|
|
29
29
|
},
|
|
30
|
+
"./names": {
|
|
31
|
+
"types": "./src/names.d.mts",
|
|
32
|
+
"import": "./src/names.mjs"
|
|
33
|
+
},
|
|
34
|
+
"./planning-folder": {
|
|
35
|
+
"types": "./src/planning-folder.d.mts",
|
|
36
|
+
"import": "./src/planning-folder.mjs"
|
|
37
|
+
},
|
|
30
38
|
"./contracts": {
|
|
31
39
|
"types": "./src/contracts.d.mts",
|
|
32
40
|
"import": "./src/contracts.mjs"
|
|
@@ -1671,6 +1671,9 @@ import {
|
|
|
1671
1671
|
import { homedir as homedir2 } from "node:os";
|
|
1672
1672
|
import { dirname as dirname3, isAbsolute, join as join4, relative, resolve as resolve3 } from "node:path";
|
|
1673
1673
|
|
|
1674
|
+
// packages/protocol/src/names.mjs
|
|
1675
|
+
var PLANNING_FOLDER = ".planr";
|
|
1676
|
+
|
|
1674
1677
|
// packages/artifact/lib/artifact/internal/feedback.mjs
|
|
1675
1678
|
var FEEDBACK_FILE = "feedback.json";
|
|
1676
1679
|
|
|
@@ -1839,7 +1842,7 @@ function inside(base, candidate) {
|
|
|
1839
1842
|
return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
|
|
1840
1843
|
}
|
|
1841
1844
|
function parseablePlanrConfig(root) {
|
|
1842
|
-
const path = join4(root,
|
|
1845
|
+
const path = join4(root, PLANNING_FOLDER, "config.json");
|
|
1843
1846
|
if (!existsSync2(path)) return false;
|
|
1844
1847
|
try {
|
|
1845
1848
|
if (lstatSync3(path).isSymbolicLink()) return false;
|
|
@@ -1968,7 +1971,11 @@ function resolveArtifactReviewDestination({
|
|
|
1968
1971
|
}
|
|
1969
1972
|
const projectRoot = findArtifactProjectRoot(cwd, { env });
|
|
1970
1973
|
if (projectRoot) {
|
|
1971
|
-
const directory2 = assertSafeDestination(projectRoot, [
|
|
1974
|
+
const directory2 = assertSafeDestination(projectRoot, [
|
|
1975
|
+
PLANNING_FOLDER,
|
|
1976
|
+
"artifacts",
|
|
1977
|
+
artifactId
|
|
1978
|
+
]);
|
|
1972
1979
|
return Object.freeze({
|
|
1973
1980
|
kind: "project",
|
|
1974
1981
|
artifactId,
|
|
@@ -2533,7 +2540,7 @@ function custodyLocation(file, options = {}, { allowMissing = false } = {}) {
|
|
|
2533
2540
|
const root = resolve5(options.custodyRoot ?? join7(planrHome(env), "design-shares"));
|
|
2534
2541
|
let project = current.root;
|
|
2535
2542
|
for (let candidate = current.root; dirname5(candidate) !== candidate; candidate = dirname5(candidate)) {
|
|
2536
|
-
if (existsSync4(join7(candidate, ".git")) || existsSync4(join7(candidate,
|
|
2543
|
+
if (existsSync4(join7(candidate, ".git")) || existsSync4(join7(candidate, PLANNING_FOLDER))) {
|
|
2537
2544
|
project = candidate;
|
|
2538
2545
|
break;
|
|
2539
2546
|
}
|
|
@@ -2544,7 +2551,7 @@ ${current.document.id}`);
|
|
|
2544
2551
|
const within = relative3(project, root);
|
|
2545
2552
|
if ((!allowMissing || existsSync4(path)) && (within === "" || !within.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) && within !== ".." && !isAbsolute3(within)))
|
|
2546
2553
|
throw new Error(
|
|
2547
|
-
"Design owner
|
|
2554
|
+
"Design owner keys must be stored outside the project. Set PLANR_HOME to a private user-level directory."
|
|
2548
2555
|
);
|
|
2549
2556
|
const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join7(realpathSync4(env.HOME || homedir3()), ".openplanr", "design-shares", `${key}.json`) : null;
|
|
2550
2557
|
return { root, path, current, legacyPath };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openplanr/protocol",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,6 +27,14 @@
|
|
|
27
27
|
"types": "./src/semver.d.mts",
|
|
28
28
|
"import": "./src/semver.mjs"
|
|
29
29
|
},
|
|
30
|
+
"./names": {
|
|
31
|
+
"types": "./src/names.d.mts",
|
|
32
|
+
"import": "./src/names.mjs"
|
|
33
|
+
},
|
|
34
|
+
"./planning-folder": {
|
|
35
|
+
"types": "./src/planning-folder.d.mts",
|
|
36
|
+
"import": "./src/planning-folder.mjs"
|
|
37
|
+
},
|
|
30
38
|
"./contracts": {
|
|
31
39
|
"types": "./src/contracts.d.mts",
|
|
32
40
|
"import": "./src/contracts.mjs"
|