openplanr 3.1.1 → 3.3.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.
Files changed (452) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/cli/commands/groups/delivery.d.ts.map +1 -1
  3. package/dist/cli/commands/groups/delivery.js +2 -0
  4. package/dist/cli/commands/groups/delivery.js.map +1 -1
  5. package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
  6. package/dist/cli/commands/planning-artifacts.js +22 -12
  7. package/dist/cli/commands/planning-artifacts.js.map +1 -1
  8. package/dist/cli/commands/ship.d.ts +3 -0
  9. package/dist/cli/commands/ship.d.ts.map +1 -0
  10. package/dist/cli/commands/ship.js +65 -0
  11. package/dist/cli/commands/ship.js.map +1 -0
  12. package/dist/cli/commands/spec.d.ts +2 -1
  13. package/dist/cli/commands/spec.d.ts.map +1 -1
  14. package/dist/cli/commands/spec.js +45 -5
  15. package/dist/cli/commands/spec.js.map +1 -1
  16. package/dist/dashboard/.vite/manifest.json +1 -1
  17. package/dist/dashboard/assets/index-B_96uzCl.js +572 -0
  18. package/dist/dashboard/assets/index-B_96uzCl.js.map +1 -0
  19. package/dist/dashboard/dashboard-manifest.json +10 -10
  20. package/dist/dashboard/index.html +1 -1
  21. package/dist/models/schema.d.ts +39 -23
  22. package/dist/models/schema.d.ts.map +1 -1
  23. package/dist/models/schema.js +19 -12
  24. package/dist/models/schema.js.map +1 -1
  25. package/dist/models/types.d.ts +6 -0
  26. package/dist/models/types.d.ts.map +1 -1
  27. package/dist/services/claude-plugin-service.d.ts +5 -0
  28. package/dist/services/claude-plugin-service.d.ts.map +1 -1
  29. package/dist/services/claude-plugin-service.js +18 -2
  30. package/dist/services/claude-plugin-service.js.map +1 -1
  31. package/dist/services/codex-plugin-service.d.ts.map +1 -1
  32. package/dist/services/codex-plugin-service.js +11 -3
  33. package/dist/services/codex-plugin-service.js.map +1 -1
  34. package/dist/services/id-service.d.ts +1 -5
  35. package/dist/services/id-service.d.ts.map +1 -1
  36. package/dist/services/id-service.js +1 -34
  37. package/dist/services/id-service.js.map +1 -1
  38. package/dist/services/runtime-manager/codex-discovery.d.ts +1 -3
  39. package/dist/services/runtime-manager/codex-discovery.d.ts.map +1 -1
  40. package/dist/services/runtime-manager/codex-discovery.js +3 -16
  41. package/dist/services/runtime-manager/codex-discovery.js.map +1 -1
  42. package/dist/services/runtime-manager/doctor.d.ts +25 -0
  43. package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
  44. package/dist/services/runtime-manager/doctor.js +480 -0
  45. package/dist/services/runtime-manager/doctor.js.map +1 -1
  46. package/dist/services/runtime-manager/errors.d.ts +12 -0
  47. package/dist/services/runtime-manager/errors.d.ts.map +1 -0
  48. package/dist/services/runtime-manager/errors.js +14 -0
  49. package/dist/services/runtime-manager/errors.js.map +1 -0
  50. package/dist/services/runtime-manager/global-state.d.ts +7 -0
  51. package/dist/services/runtime-manager/global-state.d.ts.map +1 -1
  52. package/dist/services/runtime-manager/global-state.js +116 -0
  53. package/dist/services/runtime-manager/global-state.js.map +1 -1
  54. package/dist/services/runtime-manager/host-version-probe.d.ts +8 -0
  55. package/dist/services/runtime-manager/host-version-probe.d.ts.map +1 -0
  56. package/dist/services/runtime-manager/host-version-probe.js +14 -0
  57. package/dist/services/runtime-manager/host-version-probe.js.map +1 -0
  58. package/dist/services/runtime-manager/install-plan.d.ts +25 -0
  59. package/dist/services/runtime-manager/install-plan.d.ts.map +1 -1
  60. package/dist/services/runtime-manager/install-plan.js +305 -0
  61. package/dist/services/runtime-manager/install-plan.js.map +1 -1
  62. package/dist/services/runtime-manager/inventory.d.ts +6 -0
  63. package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
  64. package/dist/services/runtime-manager/inventory.js +16 -1
  65. package/dist/services/runtime-manager/inventory.js.map +1 -1
  66. package/dist/services/runtime-manager/legacy-adapters.d.ts +9 -0
  67. package/dist/services/runtime-manager/legacy-adapters.d.ts.map +1 -0
  68. package/dist/services/runtime-manager/legacy-adapters.js +187 -0
  69. package/dist/services/runtime-manager/legacy-adapters.js.map +1 -0
  70. package/dist/services/runtime-manager/paths.d.ts +18 -0
  71. package/dist/services/runtime-manager/paths.d.ts.map +1 -0
  72. package/dist/services/runtime-manager/paths.js +83 -0
  73. package/dist/services/runtime-manager/paths.js.map +1 -0
  74. package/dist/services/runtime-manager/runtime-package.d.ts +21 -0
  75. package/dist/services/runtime-manager/runtime-package.d.ts.map +1 -1
  76. package/dist/services/runtime-manager/runtime-package.js +77 -0
  77. package/dist/services/runtime-manager/runtime-package.js.map +1 -1
  78. package/dist/services/runtime-manager/storage.d.ts +47 -0
  79. package/dist/services/runtime-manager/storage.d.ts.map +1 -0
  80. package/dist/services/runtime-manager/storage.js +604 -0
  81. package/dist/services/runtime-manager/storage.js.map +1 -0
  82. package/dist/services/runtime-manager-service.d.ts +7 -17
  83. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  84. package/dist/services/runtime-manager-service.js +32 -1695
  85. package/dist/services/runtime-manager-service.js.map +1 -1
  86. package/dist/services/ship-checks/changes.d.ts +24 -0
  87. package/dist/services/ship-checks/changes.d.ts.map +1 -0
  88. package/dist/services/ship-checks/changes.js +135 -0
  89. package/dist/services/ship-checks/changes.js.map +1 -0
  90. package/dist/services/ship-checks/contract.d.ts +93 -0
  91. package/dist/services/ship-checks/contract.d.ts.map +1 -0
  92. package/dist/services/ship-checks/contract.js +7 -0
  93. package/dist/services/ship-checks/contract.js.map +1 -0
  94. package/dist/services/ship-checks/coverage.d.ts +4 -0
  95. package/dist/services/ship-checks/coverage.d.ts.map +1 -0
  96. package/dist/services/ship-checks/coverage.js +113 -0
  97. package/dist/services/ship-checks/coverage.js.map +1 -0
  98. package/dist/services/ship-checks/discover.d.ts +10 -0
  99. package/dist/services/ship-checks/discover.d.ts.map +1 -0
  100. package/dist/services/ship-checks/discover.js +253 -0
  101. package/dist/services/ship-checks/discover.js.map +1 -0
  102. package/dist/services/ship-checks/glob.d.ts +5 -0
  103. package/dist/services/ship-checks/glob.d.ts.map +1 -0
  104. package/dist/services/ship-checks/glob.js +39 -0
  105. package/dist/services/ship-checks/glob.js.map +1 -0
  106. package/dist/services/ship-checks/hooks.d.ts +7 -0
  107. package/dist/services/ship-checks/hooks.d.ts.map +1 -0
  108. package/dist/services/ship-checks/hooks.js +65 -0
  109. package/dist/services/ship-checks/hooks.js.map +1 -0
  110. package/dist/services/ship-checks/packages.d.ts +29 -0
  111. package/dist/services/ship-checks/packages.d.ts.map +1 -0
  112. package/dist/services/ship-checks/packages.js +197 -0
  113. package/dist/services/ship-checks/packages.js.map +1 -0
  114. package/dist/services/ship-checks/related-tests.d.ts +13 -0
  115. package/dist/services/ship-checks/related-tests.d.ts.map +1 -0
  116. package/dist/services/ship-checks/related-tests.js +73 -0
  117. package/dist/services/ship-checks/related-tests.js.map +1 -0
  118. package/dist/services/ship-checks/scope.d.ts +8 -0
  119. package/dist/services/ship-checks/scope.d.ts.map +1 -0
  120. package/dist/services/ship-checks/scope.js +66 -0
  121. package/dist/services/ship-checks/scope.js.map +1 -0
  122. package/dist/services/ship-checks/task-requirements.d.ts +14 -0
  123. package/dist/services/ship-checks/task-requirements.d.ts.map +1 -0
  124. package/dist/services/ship-checks/task-requirements.js +145 -0
  125. package/dist/services/ship-checks/task-requirements.js.map +1 -0
  126. package/dist/services/ship-checks/workflows.d.ts +21 -0
  127. package/dist/services/ship-checks/workflows.d.ts.map +1 -0
  128. package/dist/services/ship-checks/workflows.js +208 -0
  129. package/dist/services/ship-checks/workflows.js.map +1 -0
  130. package/dist/services/spec-service.d.ts +18 -0
  131. package/dist/services/spec-service.d.ts.map +1 -1
  132. package/dist/services/spec-service.js +174 -9
  133. package/dist/services/spec-service.js.map +1 -1
  134. package/dist/services/template-service.d.ts +2 -0
  135. package/dist/services/template-service.d.ts.map +1 -1
  136. package/dist/services/template-service.js +4 -0
  137. package/dist/services/template-service.js.map +1 -1
  138. package/dist/templates/spec/spec-shaped.md.hbs +1 -1
  139. package/dist/templates/spec/spec.md.hbs +2 -2
  140. package/dist/utils/slugify.d.ts +1 -8
  141. package/dist/utils/slugify.d.ts.map +1 -1
  142. package/dist/utils/slugify.js +1 -25
  143. package/dist/utils/slugify.js.map +1 -1
  144. package/docs/CLI.md +96 -2
  145. package/lib/backlog-item.d.mts +49 -0
  146. package/lib/backlog-item.mjs +339 -0
  147. package/lib/host-packages/adapter-registry.json +5 -5
  148. package/lib/host-packages/capability-map.json +3 -3
  149. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  150. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  151. package/lib/host-packages/claude/openplanr/.openplanr-content.json +134 -94
  152. package/lib/host-packages/claude/openplanr/CONNECTORS.md +4 -6
  153. package/lib/host-packages/claude/openplanr/README.md +1 -1
  154. package/lib/host-packages/claude/openplanr/agents/planr-qa.md +5 -3
  155. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  156. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  157. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-document.mjs +471 -80
  158. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
  159. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  160. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  161. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → claude/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
  162. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  163. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
  164. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  165. package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-shared-protocol-contracts-31a760fc.mjs → design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
  166. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  167. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design.mjs +482 -79
  168. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
  169. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  170. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
  171. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  172. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  173. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  174. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  175. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  176. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  177. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
  178. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  179. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  180. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  181. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  182. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  183. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  184. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
  185. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  186. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  187. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
  188. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
  189. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  190. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
  191. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  192. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  193. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  194. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  195. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  196. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
  197. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  198. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
  199. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
  200. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
  201. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
  202. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +73 -12
  203. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
  204. package/lib/host-packages/claude/openplanr/skills/connect/references/connectors.md +4 -6
  205. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +12 -0
  206. package/lib/host-packages/claude/openplanr/skills/design/references/craft.md +14 -3
  207. package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +48 -1
  208. package/lib/host-packages/claude/openplanr/skills/design/references/discovery.md +18 -4
  209. package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +133 -2
  210. package/lib/host-packages/claude/openplanr/skills/design/references/hosted-canvas.md +62 -0
  211. package/lib/host-packages/claude/openplanr/skills/design/references/review.md +46 -1
  212. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +17 -1
  213. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +207 -7
  214. package/lib/host-packages/claude/openplanr/skills/design-loop/references/craft.md +14 -3
  215. package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +48 -1
  216. package/lib/host-packages/claude/openplanr/skills/design-loop/references/discovery.md +18 -4
  217. package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +133 -2
  218. package/lib/host-packages/claude/openplanr/skills/design-loop/references/review.md +46 -1
  219. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +17 -1
  220. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +207 -7
  221. package/lib/host-packages/claude/openplanr/skills/design-review/references/craft.md +14 -3
  222. package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +48 -1
  223. package/lib/host-packages/claude/openplanr/skills/design-review/references/discovery.md +18 -4
  224. package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +133 -2
  225. package/lib/host-packages/claude/openplanr/skills/design-review/references/review.md +46 -1
  226. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +17 -1
  227. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +207 -7
  228. package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +11 -2
  229. package/lib/host-packages/claude/openplanr/skills/investigate/references/findings.md +92 -0
  230. package/lib/host-packages/claude/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
  231. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +24 -11
  232. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +207 -7
  233. package/lib/host-packages/claude/openplanr/skills/share/references/connectors.md +4 -6
  234. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +46 -14
  235. package/lib/host-packages/claude/openplanr/skills/ship/references/findings.md +92 -0
  236. package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +3 -1
  237. package/lib/host-packages/claude/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
  238. package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +6 -0
  239. package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +3 -1
  240. package/lib/host-packages/claude/openplanr/skills/sprint/references/connectors.md +4 -6
  241. package/lib/host-packages/claude/openplanr/skills/status/references/connectors.md +4 -6
  242. package/lib/host-packages/claude/openplanr/skills/sync/references/connectors.md +4 -6
  243. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +132 -92
  244. package/lib/host-packages/cursor/openplanr/CONNECTORS.md +4 -6
  245. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  246. package/lib/host-packages/cursor/openplanr/rules/planr-connect/references/connectors.md +4 -6
  247. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/craft.md +14 -3
  248. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +48 -1
  249. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/discovery.md +18 -4
  250. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +133 -2
  251. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/hosted-canvas.md +62 -0
  252. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/review.md +46 -1
  253. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +17 -1
  254. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +207 -7
  255. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/craft.md +14 -3
  256. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +48 -1
  257. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/discovery.md +18 -4
  258. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +133 -2
  259. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/review.md +46 -1
  260. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +17 -1
  261. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +207 -7
  262. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/craft.md +14 -3
  263. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +48 -1
  264. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/discovery.md +18 -4
  265. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +133 -2
  266. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/review.md +46 -1
  267. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +17 -1
  268. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +207 -7
  269. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +12 -0
  270. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/findings.md +92 -0
  271. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/scripts/backlog-item.mjs +339 -0
  272. package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +11 -2
  273. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +207 -7
  274. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +24 -11
  275. package/lib/host-packages/cursor/openplanr/rules/planr-share/references/connectors.md +4 -6
  276. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/findings.md +92 -0
  277. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +3 -1
  278. package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/backlog-item.mjs +339 -0
  279. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +46 -14
  280. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +3 -1
  281. package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +6 -0
  282. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/connectors.md +4 -6
  283. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/connectors.md +4 -6
  284. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/connectors.md +4 -6
  285. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  286. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  287. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-document.mjs +471 -80
  288. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
  289. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  290. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  291. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → cursor/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
  292. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  293. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
  294. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  295. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
  296. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  297. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design.mjs +482 -79
  298. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
  299. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  300. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
  301. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  302. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  303. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  304. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  305. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  306. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  307. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
  308. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  309. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  310. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  311. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  312. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  313. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  314. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
  315. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  316. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  317. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
  318. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
  319. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  320. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
  321. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  322. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  323. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  324. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  325. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  326. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
  327. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  328. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
  329. package/lib/host-packages/{claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
  330. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
  331. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
  332. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +73 -12
  333. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
  334. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  335. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  336. package/lib/host-packages/openai/openplanr/.openplanr-content.json +139 -99
  337. package/lib/host-packages/openai/openplanr/CONNECTORS.md +4 -6
  338. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  339. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  340. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-document.mjs +471 -80
  341. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
  342. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  343. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  344. package/lib/host-packages/{claude/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → openai/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
  345. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  346. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
  347. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  348. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
  349. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  350. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design.mjs +482 -79
  351. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
  352. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  353. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
  354. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  355. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  356. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  357. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  358. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  359. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  360. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
  361. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  362. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  363. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  364. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  365. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  366. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  367. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
  368. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  369. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  370. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
  371. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
  372. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  373. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
  374. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  375. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  376. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  377. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  378. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  379. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
  380. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  381. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
  382. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
  383. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
  384. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
  385. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +73 -12
  386. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
  387. package/lib/host-packages/openai/openplanr/skills/connect/references/connectors.md +4 -6
  388. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +12 -0
  389. package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +11 -0
  390. package/lib/host-packages/openai/openplanr/skills/design/references/craft.md +14 -3
  391. package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +48 -1
  392. package/lib/host-packages/openai/openplanr/skills/design/references/discovery.md +18 -4
  393. package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +133 -2
  394. package/lib/host-packages/openai/openplanr/skills/design/references/hosted-canvas.md +62 -0
  395. package/lib/host-packages/openai/openplanr/skills/design/references/review.md +46 -1
  396. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +17 -1
  397. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +207 -7
  398. package/lib/host-packages/openai/openplanr/skills/design-loop/references/craft.md +14 -3
  399. package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +48 -1
  400. package/lib/host-packages/openai/openplanr/skills/design-loop/references/discovery.md +18 -4
  401. package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +133 -2
  402. package/lib/host-packages/openai/openplanr/skills/design-loop/references/review.md +46 -1
  403. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +17 -1
  404. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +207 -7
  405. package/lib/host-packages/openai/openplanr/skills/design-review/references/craft.md +14 -3
  406. package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +48 -1
  407. package/lib/host-packages/openai/openplanr/skills/design-review/references/discovery.md +18 -4
  408. package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +133 -2
  409. package/lib/host-packages/openai/openplanr/skills/design-review/references/review.md +46 -1
  410. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +17 -1
  411. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +207 -7
  412. package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +11 -2
  413. package/lib/host-packages/openai/openplanr/skills/investigate/agents/openai.yaml +1 -1
  414. package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +23 -1
  415. package/lib/host-packages/openai/openplanr/skills/investigate/references/findings.md +92 -0
  416. package/lib/host-packages/openai/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
  417. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +24 -11
  418. package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +1 -1
  419. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +207 -7
  420. package/lib/host-packages/openai/openplanr/skills/share/references/connectors.md +4 -6
  421. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +46 -14
  422. package/lib/host-packages/openai/openplanr/skills/ship/agents/openai.yaml +1 -1
  423. package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +23 -1
  424. package/lib/host-packages/openai/openplanr/skills/ship/references/findings.md +92 -0
  425. package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +3 -1
  426. package/lib/host-packages/openai/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
  427. package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +6 -0
  428. package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +1 -1
  429. package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +3 -1
  430. package/lib/host-packages/openai/openplanr/skills/sprint/references/connectors.md +4 -6
  431. package/lib/host-packages/openai/openplanr/skills/status/references/connectors.md +4 -6
  432. package/lib/host-packages/openai/openplanr/skills/sync/references/connectors.md +4 -6
  433. package/lib/json-schema.mjs +4 -0
  434. package/package.json +13 -13
  435. package/dist/dashboard/assets/index-G7ygVDGg.js +0 -572
  436. package/dist/dashboard/assets/index-G7ygVDGg.js.map +0 -1
  437. package/dist/templates/backlog/backlog-item.md.hbs +0 -40
  438. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  439. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  440. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  441. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  442. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
  443. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  444. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  445. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  446. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  447. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
  448. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  449. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  450. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  451. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  452. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
@@ -0,0 +1,339 @@
1
+ #!/usr/bin/env node
2
+ // @ts-check
3
+ // The one backlog item writer: the CLI imports it, and skills run it when no CLI is installed.
4
+
5
+ import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
6
+ import { join, relative, resolve, sep } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+
9
+ /** Holds one empty file per issued ID, so the ID of a removed artifact is never issued again. */
10
+ const ISSUED_IDS_DIR = '.issued-ids';
11
+ const CLOSED_STATUSES = new Set(['closed', 'done']);
12
+
13
+ /** @type {typeof import('./backlog-item.d.mts').CLI_INSTALL_COMMAND} */
14
+ export const CLI_INSTALL_COMMAND = 'npm install -g openplanr';
15
+ /** @type {typeof import('./backlog-item.d.mts').CLI_HINT} */
16
+ export const CLI_HINT = `Install the OpenPlanr CLI to manage these items: ${CLI_INSTALL_COMMAND}`;
17
+
18
+ /** @type {typeof import('./backlog-item.d.mts').reserveNextId} */
19
+ export async function reserveNextId(dir, prefix) {
20
+ const issuedDir = join(dir, ISSUED_IDS_DIR);
21
+ await mkdir(issuedDir, { recursive: true });
22
+ const pattern = new RegExp(`^${prefix.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&')}-(\\d{3,})`, 'u');
23
+ let next = 1;
24
+ for (const directory of [dir, issuedDir]) {
25
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
26
+ const match = entry.isDirectory() ? null : pattern.exec(entry.name);
27
+ if (match) next = Math.max(next, Number.parseInt(match[1], 10) + 1);
28
+ }
29
+ }
30
+ for (; ; next++) {
31
+ const id = `${prefix}-${String(next).padStart(3, '0')}`;
32
+ try {
33
+ await writeFile(join(issuedDir, id), '', { flag: 'wx' });
34
+ return id;
35
+ } catch (error) {
36
+ if (/** @type {NodeJS.ErrnoException} */ (error).code !== 'EEXIST') throw error;
37
+ }
38
+ }
39
+ }
40
+
41
+ /** @type {typeof import('./backlog-item.d.mts').slugify} */
42
+ export function slugify(text, maxLength = 80) {
43
+ let slug = text
44
+ .toLowerCase()
45
+ .trim()
46
+ .replace(/[^\w\s-]/g, '')
47
+ .replace(/[\s_]+/g, '-')
48
+ .replace(/-+/g, '-')
49
+ .replace(/^-+|-+$/g, '');
50
+ if (slug.length > maxLength) {
51
+ slug = slug.slice(0, maxLength);
52
+ // Trim at the last whole-word boundary to avoid cut-off words.
53
+ const lastDash = slug.lastIndexOf('-');
54
+ if (lastDash > 0) slug = slug.slice(0, lastDash);
55
+ }
56
+ return slug;
57
+ }
58
+
59
+ /** @param {unknown} value */
60
+ function strings(value) {
61
+ if (Array.isArray(value)) return value.map(String).filter(Boolean);
62
+ if (typeof value === 'string')
63
+ return value
64
+ .split(',')
65
+ .map((item) => item.trim())
66
+ .filter(Boolean);
67
+ return [];
68
+ }
69
+
70
+ /** @param {unknown} value */
71
+ function optionalText(value) {
72
+ return value === undefined || value === null || value === '' ? undefined : value;
73
+ }
74
+
75
+ const PRIORITIES = Object.freeze(['critical', 'high', 'medium', 'low']);
76
+
77
+ /** Bad backlog input; the code lets the CLI report it as an input error, not a crash. */
78
+ class BacklogInputError extends Error {
79
+ /** @param {string} message */
80
+ constructor(message) {
81
+ super(message);
82
+ this.name = 'BacklogInputError';
83
+ this.code = 'E_BACKLOG_INVALID';
84
+ }
85
+ }
86
+
87
+ /** @type {typeof import('./backlog-item.d.mts').backlogFields} */
88
+ export function backlogFields(input) {
89
+ const title = String(input.title ?? input.name ?? '').trim();
90
+ if (!title) throw new BacklogInputError('A backlog item needs a non-empty title.');
91
+ const priority = String(input.priority ?? 'medium');
92
+ if (!PRIORITIES.includes(priority))
93
+ throw new BacklogInputError(
94
+ `Backlog priority ${JSON.stringify(priority)} is not valid; use one of ${PRIORITIES.join(', ')}.`,
95
+ );
96
+ const criteria = optionalText(input.acceptanceCriteria);
97
+ const notes = optionalText(input.notes);
98
+ const epicId = optionalText(input.epicId);
99
+ return {
100
+ title,
101
+ priority,
102
+ tags: strings(input.tags),
103
+ description: String(input.description ?? title),
104
+ ...(criteria === undefined
105
+ ? {}
106
+ : { acceptanceCriteria: Array.isArray(criteria) ? criteria.map(String) : String(criteria) }),
107
+ ...(notes === undefined ? {} : { notes: String(notes) }),
108
+ ...(epicId === undefined ? {} : { epicId: String(epicId) }),
109
+ };
110
+ }
111
+
112
+ /** @type {typeof import('./backlog-item.d.mts').renderBacklogItem} */
113
+ export function renderBacklogItem(id, fields, date) {
114
+ const quote = JSON.stringify;
115
+ const lines = [
116
+ '---',
117
+ `id: ${quote(id)}`,
118
+ `title: ${quote(fields.title)}`,
119
+ `priority: ${quote(fields.priority)}`,
120
+ `tags: [${fields.tags.map((tag) => quote(tag)).join(', ')}]`,
121
+ 'status: "open"',
122
+ `created: ${quote(date)}`,
123
+ `updated: ${quote(date)}`,
124
+ ...(fields.epicId ? [`epicId: ${quote(fields.epicId)}`] : []),
125
+ '---',
126
+ '',
127
+ `# ${id}: ${fields.title}`,
128
+ '',
129
+ ];
130
+ /** @param {string} heading @param {string} body @param {boolean} [spaced] */
131
+ const section = (heading, body, spaced = false) =>
132
+ lines.push(`## ${heading}`, ...(spaced ? [''] : []), body, '');
133
+ if (fields.tags.length > 0)
134
+ section('Tags', fields.tags.map((tag) => `- ${tag}`).join('\n'), true);
135
+ // A description with its own sections stands alone instead of nesting under another heading.
136
+ if (/^## /u.test(fields.description)) lines.push(fields.description, '');
137
+ else if (fields.description !== fields.title) section('Description', fields.description);
138
+ if (fields.acceptanceCriteria !== undefined && fields.acceptanceCriteria.length > 0)
139
+ section(
140
+ 'Acceptance Criteria',
141
+ Array.isArray(fields.acceptanceCriteria)
142
+ ? fields.acceptanceCriteria.map((criterion) => `- ${criterion}`).join('\n')
143
+ : fields.acceptanceCriteria,
144
+ );
145
+ if (fields.notes) section('Notes', fields.notes);
146
+ lines.push('---', `_Close when done: \`openplanr backlog update ${id} --status closed\`_`, '');
147
+ return lines.join('\n');
148
+ }
149
+
150
+ /** @type {typeof import('./backlog-item.d.mts').writeBacklogItem} */
151
+ export async function writeBacklogItem(backlogDir, prefix, fields, date) {
152
+ await mkdir(backlogDir, { recursive: true });
153
+ const id = await reserveNextId(backlogDir, prefix);
154
+ const filePath = join(backlogDir, `${id}-${slugify(fields.title)}.md`);
155
+ await writeFile(filePath, renderBacklogItem(id, fields, date));
156
+ return { id, filePath };
157
+ }
158
+
159
+ /** @param {string} projectDir */
160
+ async function projectConfig(projectDir) {
161
+ const configPath = join(projectDir, '.planr', 'config.json');
162
+ let raw;
163
+ try {
164
+ raw = await readFile(configPath, 'utf8');
165
+ } catch (error) {
166
+ if (/** @type {NodeJS.ErrnoException} */ (error).code === 'ENOENT')
167
+ throw new Error(
168
+ `No OpenPlanr project at ${projectDir}: ${configPath} is missing. Run \`openplanr init\` or pass the project root.`,
169
+ );
170
+ throw error;
171
+ }
172
+ let config;
173
+ try {
174
+ config = JSON.parse(raw);
175
+ } catch (error) {
176
+ throw new Error(`${configPath} is not valid JSON: ${/** @type {Error} */ (error).message}`);
177
+ }
178
+ return { configPath, raw, config };
179
+ }
180
+
181
+ /** @param {string} projectDir */
182
+ async function projectBacklog(projectDir) {
183
+ const { config } = await projectConfig(projectDir);
184
+ const agile = String(config.outputPaths?.agile ?? '.planr').replaceAll('\\', '/');
185
+ return {
186
+ backlogDir: resolve(projectDir, agile, 'backlog'),
187
+ prefix: String(config.idPrefix?.backlog ?? 'BL'),
188
+ templateOverrides:
189
+ typeof config.templateOverrides === 'string' ? config.templateOverrides : undefined,
190
+ };
191
+ }
192
+
193
+ /** @param {string} projectDir @param {string} filePath */
194
+ const relativePath = (projectDir, filePath) => relative(projectDir, filePath).split(sep).join('/');
195
+
196
+ /** @type {typeof import('./backlog-item.d.mts').createBacklogItem} */
197
+ export async function createBacklogItem(
198
+ projectDir,
199
+ input,
200
+ date = new Date().toISOString().split('T')[0],
201
+ ) {
202
+ const { backlogDir, prefix } = await projectBacklog(projectDir);
203
+ const fields = backlogFields(input);
204
+ const { id, filePath } = await writeBacklogItem(backlogDir, prefix, fields, date);
205
+ return { id, title: fields.title, artifactPath: relativePath(projectDir, filePath) };
206
+ }
207
+
208
+ /**
209
+ * Top-level scalar frontmatter fields; double-quoted values are read as JSON strings.
210
+ * @param {string} text
211
+ * @param {string} filePath
212
+ */
213
+ function frontmatter(text, filePath) {
214
+ const block = /^---\n([\s\S]*?)\n---/u.exec(text.replace(/\r\n/gu, '\n'))?.[1] ?? '';
215
+ /** @type {Record<string, string>} */
216
+ const fields = {};
217
+ for (const line of block.split('\n')) {
218
+ const match = /^(\w+):\s*(.*)$/u.exec(line);
219
+ if (!match) continue;
220
+ const value = match[2].trim();
221
+ if (!value.startsWith('"')) {
222
+ fields[match[1]] = value.replace(/^'(.*)'$/u, '$1');
223
+ continue;
224
+ }
225
+ try {
226
+ fields[match[1]] = String(JSON.parse(value));
227
+ } catch (error) {
228
+ throw new Error(
229
+ `${filePath}: frontmatter field "${match[1]}" is not a valid quoted string: ${/** @type {Error} */ (error).message}`,
230
+ );
231
+ }
232
+ }
233
+ return fields;
234
+ }
235
+
236
+ /** @type {typeof import('./backlog-item.d.mts').listOpenBacklog} */
237
+ export async function listOpenBacklog(projectDir) {
238
+ const { backlogDir } = await projectBacklog(projectDir);
239
+ let names;
240
+ try {
241
+ names = await readdir(backlogDir);
242
+ } catch (error) {
243
+ if (/** @type {NodeJS.ErrnoException} */ (error).code === 'ENOENT') return [];
244
+ throw error;
245
+ }
246
+ const items = [];
247
+ for (const name of names.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))) {
248
+ const match = /^([A-Z]+-\d{3,})-.+\.md$/u.exec(name);
249
+ if (!match) continue;
250
+ const filePath = join(backlogDir, name);
251
+ const fields = frontmatter(await readFile(filePath, 'utf8'), filePath);
252
+ const status = fields.status ?? 'open';
253
+ if (CLOSED_STATUSES.has(status)) continue;
254
+ items.push({
255
+ id: fields.id ?? match[1],
256
+ title: fields.title ?? name.slice(match[1].length + 1, -3).replace(/-/g, ' '),
257
+ status,
258
+ path: relativePath(projectDir, filePath),
259
+ });
260
+ }
261
+ return items;
262
+ }
263
+
264
+ /** @type {typeof import('./backlog-item.d.mts').takeCliHint} */
265
+ export async function takeCliHint(projectDir) {
266
+ const { configPath, raw, config } = await projectConfig(projectDir);
267
+ if (config.findings?.cliHintShown === true) return null;
268
+ const next = { ...config, findings: { ...config.findings, cliHintShown: true } };
269
+ const indent = /\n(\t| +)"/u.exec(raw)?.[1] ?? ' ';
270
+ await writeFile(configPath, `${JSON.stringify(next, null, indent)}\n`);
271
+ return CLI_HINT;
272
+ }
273
+
274
+ /** @param {string} source */
275
+ async function readInput(source) {
276
+ const text =
277
+ source === '-'
278
+ ? await new Promise((done, fail) => {
279
+ let value = '';
280
+ process.stdin.setEncoding('utf8');
281
+ process.stdin.on('data', (chunk) => {
282
+ value += chunk;
283
+ });
284
+ process.stdin.on('end', () => done(value));
285
+ process.stdin.on('error', fail);
286
+ })
287
+ : await readFile(resolve(source), 'utf8');
288
+ const parsed = JSON.parse(String(text));
289
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
290
+ throw new Error('Backlog input must be one JSON object with at least a title.');
291
+ return parsed;
292
+ }
293
+
294
+ const USAGE =
295
+ 'Usage: backlog-item.mjs add --project <dir> --data <file|->\n backlog-item.mjs list --project <dir> --open\n';
296
+
297
+ /** @param {string[]} argv */
298
+ async function main(argv) {
299
+ const [command, ...rest] = argv;
300
+ /** @type {Record<string, string | boolean>} */
301
+ const options = {};
302
+ for (let index = 0; index < rest.length; index += 1) {
303
+ const flag = rest[index];
304
+ if (flag === '--open') options.open = true;
305
+ else if (flag === '--project' || flag === '--data')
306
+ options[flag.slice(2)] = rest[++index] ?? '';
307
+ else throw new Error(`Unknown argument: ${flag}\n${USAGE}`);
308
+ }
309
+ const projectDir = resolve(String(options.project ?? '.'));
310
+ if (command === 'add') {
311
+ if (typeof options.data !== 'string' || !options.data)
312
+ throw new Error(`add needs --data.\n${USAGE}`);
313
+ const { templateOverrides } = await projectBacklog(projectDir);
314
+ const result = await createBacklogItem(projectDir, await readInput(options.data));
315
+ const cliHint = await takeCliHint(projectDir);
316
+ process.stdout.write(
317
+ `${JSON.stringify({
318
+ ok: true,
319
+ action: 'backlog.created',
320
+ ...result,
321
+ ...(templateOverrides ? { templateOverrideIgnored: true } : {}),
322
+ ...(cliHint ? { cliHint } : {}),
323
+ })}\n`,
324
+ );
325
+ return;
326
+ }
327
+ if (command === 'list' && options.open) {
328
+ process.stdout.write(`${JSON.stringify({ items: await listOpenBacklog(projectDir) })}\n`);
329
+ return;
330
+ }
331
+ throw new Error(USAGE);
332
+ }
333
+
334
+ if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
335
+ main(process.argv.slice(2)).catch((error) => {
336
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
337
+ process.exit(1);
338
+ });
339
+ }
@@ -7,9 +7,9 @@ license: MIT
7
7
  # OpenPlanr Plan
8
8
 
9
9
  Turn a decision-complete specification or clear product request into
10
- implementation-ready stories and tasks. Perform the reasoning in this active
11
- coding session. Do not delegate semantic planning to a command-line or model
12
- subprocess. Plan ends with a Ship handoff; it never starts implementation
10
+ implementation-ready stories and tasks in this active coding session. Do not
11
+ delegate semantic planning to a command-line or model subprocess. Plan ends with a
12
+ Ship handoff; it never starts implementation
13
13
  automatically.
14
14
 
15
15
  ## Resolve context directly
@@ -35,6 +35,9 @@ For a studio-backed design, read its `.design/studio-state.json`: the recorded
35
35
  specification describe that same direction before decomposing UI work. If they
36
36
  disagree, synchronize the design handoff using the settled choice or report the
37
37
  specific unsynced inputs; do not silently plan the original preview direction.
38
+ A hosted design canvas handoff has no `design-document.json` or studio state:
39
+ its `design-spec.md` names the canvas URL and the local board sources, which are
40
+ the design inputs; read the boards rather than the hosted canvas.
38
41
  Use stable screen IDs, component recipes, responsive frames, and interaction
39
42
  flows as UI-task context. Read the current render's verification result and
40
43
  unresolved feedback; carry relevant gaps into explicit task checks. Preserve
@@ -61,14 +64,24 @@ host has no structured question interface, ask one concise chat question.
61
64
 
62
65
  ## Apply PO lenses in-session
63
66
 
64
- When the host supports native agents, dispatch the applicable database,
65
- designer, and specification roles inside this session. Give each role the
66
- request, repository root, relevant paths, and the precise decision or artifact
67
- it owns. Parallelize independent lenses. When native agents are unavailable,
68
- perform the same lenses sequentially in the active agent.
69
-
70
- The specification role integrates the results. Database and design roles
71
- provide grounded inputs; they do not create a second independent plan.
67
+ The main session owns the plan, decisions, and integration. Keep small coherent
68
+ planning work in this session. Delegate only a self-contained outcome that
69
+ benefits from context isolation, a distinct capability boundary, or independent
70
+ parallel work; agent availability alone is not a reason to dispatch.
71
+
72
+ Use specification for a distinct planning assignment or completeness review,
73
+ designer for a separate design deliverable or critique, and database only for
74
+ authorized read-only live introspection when repository schemas are insufficient.
75
+ Do not have two planners decompose the same request. Entity scaffolding remains
76
+ manual, on explicit request.
77
+
78
+ Select the exact registered identity from the host's roster; Claude plugin
79
+ agents use names such as `planr:planr-specification`. Give each worker its outcome,
80
+ authoritative paths, relevant decisions, file ownership, verification requirements,
81
+ and concise return expectations. Parallel workers need disjoint writes or an
82
+ agreed interface. Explain the delegation's purpose briefly in commentary.
83
+ When the host lacks the native role, perform the work sequentially in this session
84
+ and disclose capability limitations; never claim an unavailable specialist ran.
72
85
 
73
86
  ## Author the decomposition
74
87
 
@@ -3,7 +3,7 @@
3
3
  "schemaVersion": "1.0.0",
4
4
  "protocolVersion": "1.8.0",
5
5
  "skillId": "planr-plan",
6
- "skillVersion": "1.2.1",
6
+ "skillVersion": "1.3.0",
7
7
  "entrypoint": "SKILL.md",
8
8
  "hosts": [
9
9
  "claude-code",
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://openplanr.dev/schemas/v1.9.0/design-document.schema.json",
3
+ "$id": "https://openplanr.dev/schemas/v1.22.0/design-document.schema.json",
4
4
  "x-openplanr-contract": {
5
5
  "id": "design-document",
6
- "version": "1.9.0"
6
+ "version": "1.22.0"
7
7
  },
8
8
  "title": "OpenPlanr authored design document",
9
9
  "type": "object",
@@ -26,7 +26,10 @@
26
26
  "const": "openplanr-design-document"
27
27
  },
28
28
  "schemaVersion": {
29
- "const": "1.0.0"
29
+ "enum": [
30
+ "1.0.0",
31
+ "1.1.0"
32
+ ]
30
33
  },
31
34
  "id": {
32
35
  "$ref": "#/$defs/id"
@@ -118,9 +121,16 @@
118
121
  "maximum": 16384
119
122
  },
120
123
  "height": {
121
- "type": "integer",
122
- "minimum": 1,
123
- "maximum": 16384
124
+ "anyOf": [
125
+ {
126
+ "type": "integer",
127
+ "minimum": 1,
128
+ "maximum": 16384
129
+ },
130
+ {
131
+ "const": "auto"
132
+ }
133
+ ]
124
134
  }
125
135
  }
126
136
  }
@@ -151,6 +161,66 @@
151
161
  },
152
162
  "anchors": {
153
163
  "$ref": "#/$defs/ids"
164
+ },
165
+ "props": {
166
+ "type": "object",
167
+ "propertyNames": {
168
+ "type": "string",
169
+ "minLength": 1,
170
+ "maxLength": 128,
171
+ "pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
172
+ },
173
+ "additionalProperties": {
174
+ "oneOf": [
175
+ {
176
+ "type": "object",
177
+ "additionalProperties": false,
178
+ "required": [
179
+ "type",
180
+ "options",
181
+ "default"
182
+ ],
183
+ "properties": {
184
+ "type": {
185
+ "const": "enum"
186
+ },
187
+ "options": {
188
+ "type": "array",
189
+ "minItems": 1,
190
+ "uniqueItems": true,
191
+ "items": {
192
+ "type": "string",
193
+ "minLength": 1,
194
+ "maxLength": 128,
195
+ "pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
196
+ }
197
+ },
198
+ "default": {
199
+ "type": "string",
200
+ "minLength": 1,
201
+ "maxLength": 128,
202
+ "pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
203
+ }
204
+ }
205
+ },
206
+ {
207
+ "type": "object",
208
+ "additionalProperties": false,
209
+ "required": [
210
+ "type",
211
+ "default"
212
+ ],
213
+ "properties": {
214
+ "type": {
215
+ "const": "boolean"
216
+ },
217
+ "default": {
218
+ "type": "boolean"
219
+ }
220
+ }
221
+ }
222
+ ]
223
+ }
154
224
  }
155
225
  }
156
226
  }
@@ -225,6 +295,34 @@
225
295
  "additionalProperties": {
226
296
  "$ref": "#/$defs/source"
227
297
  }
298
+ },
299
+ "props": {
300
+ "type": "object",
301
+ "propertyNames": {
302
+ "$ref": "#/$defs/id"
303
+ },
304
+ "additionalProperties": {
305
+ "type": "object",
306
+ "propertyNames": {
307
+ "type": "string",
308
+ "minLength": 1,
309
+ "maxLength": 128,
310
+ "pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
311
+ },
312
+ "additionalProperties": {
313
+ "anyOf": [
314
+ {
315
+ "type": "string",
316
+ "minLength": 1,
317
+ "maxLength": 128,
318
+ "pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
319
+ },
320
+ {
321
+ "type": "boolean"
322
+ }
323
+ ]
324
+ }
325
+ }
228
326
  }
229
327
  },
230
328
  "if": {
@@ -250,6 +348,67 @@
250
348
  "prototype",
251
349
  "walkthrough"
252
350
  ]
351
+ },
352
+ "layout": {
353
+ "type": "object",
354
+ "additionalProperties": false,
355
+ "properties": {
356
+ "boards": {
357
+ "type": "object",
358
+ "description": "Keys are screenId, screenId/frameId or screenId/frameId/variantId; each ID must exist in the document.",
359
+ "additionalProperties": {
360
+ "type": "object",
361
+ "additionalProperties": false,
362
+ "required": [
363
+ "x",
364
+ "y"
365
+ ],
366
+ "properties": {
367
+ "x": {
368
+ "$ref": "#/$defs/coordinate"
369
+ },
370
+ "y": {
371
+ "$ref": "#/$defs/coordinate"
372
+ },
373
+ "title": {
374
+ "$ref": "#/$defs/text"
375
+ }
376
+ }
377
+ }
378
+ },
379
+ "sections": {
380
+ "type": "array",
381
+ "items": {
382
+ "type": "object",
383
+ "additionalProperties": false,
384
+ "required": [
385
+ "id",
386
+ "x",
387
+ "y",
388
+ "text"
389
+ ],
390
+ "properties": {
391
+ "id": {
392
+ "$ref": "#/$defs/id"
393
+ },
394
+ "x": {
395
+ "$ref": "#/$defs/coordinate"
396
+ },
397
+ "y": {
398
+ "$ref": "#/$defs/coordinate"
399
+ },
400
+ "text": {
401
+ "$ref": "#/$defs/text"
402
+ },
403
+ "maxW": {
404
+ "type": "integer",
405
+ "minimum": 1,
406
+ "maximum": 16384
407
+ }
408
+ }
409
+ }
410
+ }
411
+ }
253
412
  }
254
413
  },
255
414
  "$defs": {
@@ -301,6 +460,47 @@
301
460
  "$ref": "#/$defs/paths"
302
461
  }
303
462
  }
463
+ },
464
+ "coordinate": {
465
+ "type": "number",
466
+ "minimum": -10000000,
467
+ "maximum": 10000000
468
+ }
469
+ },
470
+ "allOf": [
471
+ {
472
+ "if": {
473
+ "properties": {
474
+ "schemaVersion": {
475
+ "const": "1.1.0"
476
+ }
477
+ },
478
+ "required": [
479
+ "schemaVersion"
480
+ ]
481
+ },
482
+ "else": {
483
+ "properties": {
484
+ "screens": {
485
+ "items": {
486
+ "not": {
487
+ "required": [
488
+ "props"
489
+ ]
490
+ }
491
+ }
492
+ },
493
+ "variants": {
494
+ "items": {
495
+ "not": {
496
+ "required": [
497
+ "props"
498
+ ]
499
+ }
500
+ }
501
+ }
502
+ }
503
+ }
304
504
  }
305
- }
505
+ ]
306
506
  }
@@ -3,12 +3,10 @@
3
3
  OpenPlanr skills name a kind of service, such as `~~chat`, instead of a product. Connect
4
4
  the product your team uses through your host: the vendor publishes the connector, and
5
5
  you sign in through the host. OpenPlanr bundles no connectors; they and their credentials
6
- live in your host. Two optional features need a token: Linear sync (`openplanr linear`) and
7
- company sign-in (`openplanr company login`). Only when you use them does OpenPlanr store a
8
- token, in your OS keychain, or in an encrypted file at `~/.planr/credentials.enc` if you set
9
- `PLANR_CREDENTIAL_FILE_PASSPHRASE`. Tokens are sent only to Linear or to the company server
10
- you sign in to.
11
- `openplanr company logout` removes company tokens.
6
+ live in your host. One optional feature needs a token: Linear sync (`openplanr linear`).
7
+ Only when you use it does OpenPlanr store a token, in your OS keychain, or in an encrypted
8
+ file at `~/.planr/credentials.enc` if you set `PLANR_CREDENTIAL_FILE_PASSPHRASE`. The token
9
+ is sent only to Linear.
12
10
  Every skill also works with nothing connected and reports any remote step it skipped.
13
11
 
14
12
  | Category | Placeholder | Products |