openplanr 3.0.0 → 3.1.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 (233) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/cli/commands/init-deterministic.d.ts.map +1 -1
  3. package/dist/cli/commands/init-deterministic.js +49 -6
  4. package/dist/cli/commands/init-deterministic.js.map +1 -1
  5. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  6. package/dist/cli/commands/upgrade.js +4 -2
  7. package/dist/cli/commands/upgrade.js.map +1 -1
  8. package/dist/dashboard/.vite/manifest.json +2 -2
  9. package/dist/dashboard/assets/{index-Bk8DyO_2.css → index-BU5fzjyz.css} +1 -1
  10. package/dist/dashboard/assets/index-G7ygVDGg.js +572 -0
  11. package/dist/dashboard/assets/index-G7ygVDGg.js.map +1 -0
  12. package/dist/dashboard/dashboard-manifest.json +14 -14
  13. package/dist/dashboard/index.html +2 -2
  14. package/dist/models/types.d.ts +0 -46
  15. package/dist/models/types.d.ts.map +1 -1
  16. package/dist/services/capability-map-service.d.ts +4 -0
  17. package/dist/services/capability-map-service.d.ts.map +1 -1
  18. package/dist/services/capability-map-service.js +7 -1
  19. package/dist/services/capability-map-service.js.map +1 -1
  20. package/dist/services/claude-plugin-service.d.ts +15 -1
  21. package/dist/services/claude-plugin-service.d.ts.map +1 -1
  22. package/dist/services/claude-plugin-service.js +66 -15
  23. package/dist/services/claude-plugin-service.js.map +1 -1
  24. package/dist/services/config-service.d.ts +24 -1
  25. package/dist/services/config-service.d.ts.map +1 -1
  26. package/dist/services/config-service.js +69 -2
  27. package/dist/services/config-service.js.map +1 -1
  28. package/dist/services/git-service.d.ts +5 -0
  29. package/dist/services/git-service.d.ts.map +1 -1
  30. package/dist/services/git-service.js +27 -0
  31. package/dist/services/git-service.js.map +1 -1
  32. package/dist/services/linear-pull-service.d.ts.map +1 -1
  33. package/dist/services/linear-pull-service.js +1 -2
  34. package/dist/services/linear-pull-service.js.map +1 -1
  35. package/dist/services/pipeline-package-service.d.ts +2 -0
  36. package/dist/services/pipeline-package-service.d.ts.map +1 -1
  37. package/dist/services/pipeline-package-service.js +2 -1
  38. package/dist/services/pipeline-package-service.js.map +1 -1
  39. package/dist/services/runtime-change-summary.d.ts.map +1 -1
  40. package/dist/services/runtime-change-summary.js +4 -0
  41. package/dist/services/runtime-change-summary.js.map +1 -1
  42. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  43. package/dist/services/runtime-manager-service.js +14 -3
  44. package/dist/services/runtime-manager-service.js.map +1 -1
  45. package/dist/services/spec-service.d.ts.map +1 -1
  46. package/dist/services/spec-service.js +11 -22
  47. package/dist/services/spec-service.js.map +1 -1
  48. package/dist/services/upgrade-report.d.ts.map +1 -1
  49. package/dist/services/upgrade-report.js +5 -2
  50. package/dist/services/upgrade-report.js.map +1 -1
  51. package/dist/services/upgrade-service.d.ts +14 -0
  52. package/dist/services/upgrade-service.d.ts.map +1 -1
  53. package/dist/services/upgrade-service.js +69 -11
  54. package/dist/services/upgrade-service.js.map +1 -1
  55. package/dist/templates/rules/shared/capability-map.md.hbs +2 -2
  56. package/lib/host-packages/adapter-registry.json +5 -5
  57. package/lib/host-packages/capability-map.json +89 -29
  58. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  59. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  60. package/lib/host-packages/claude/openplanr/.openplanr-content.json +70 -38
  61. package/lib/host-packages/claude/openplanr/CONNECTORS.md +62 -0
  62. package/lib/host-packages/claude/openplanr/README.md +1 -1
  63. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +1 -1
  64. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs +259 -36
  65. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +54 -54
  66. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
  67. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +259 -36
  68. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +4 -4
  69. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  70. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +43 -24
  71. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +279 -58
  72. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +50 -42
  73. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +282 -146
  74. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +949 -316
  75. 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 +143 -87
  76. 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 +930 -183
  77. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +17 -15
  78. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +375 -191
  79. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +140 -105
  80. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-studio-shell.js +146 -54
  81. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +25 -25
  82. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +8 -4
  83. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +259 -36
  84. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +8 -4
  85. package/lib/host-packages/claude/openplanr/skills/connect/SKILL.md +60 -0
  86. package/lib/host-packages/claude/openplanr/skills/connect/references/connectors.md +62 -0
  87. package/lib/host-packages/claude/openplanr/skills/openplanr/SKILL.md +4 -0
  88. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +4 -1
  89. package/lib/host-packages/claude/openplanr/skills/plan/scripts/planning-ids.mjs +49 -3
  90. package/lib/host-packages/claude/openplanr/skills/share/SKILL.md +87 -0
  91. package/lib/host-packages/claude/openplanr/skills/share/references/connectors.md +62 -0
  92. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +6 -3
  93. package/lib/host-packages/claude/openplanr/skills/ship/scripts/discover-verification.mjs +2 -1
  94. package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +15 -6
  95. package/lib/host-packages/claude/openplanr/skills/sprint/references/connectors.md +62 -0
  96. package/lib/host-packages/claude/openplanr/skills/sprint/references/tracker-connections.md +9 -13
  97. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +14 -3
  98. package/lib/host-packages/claude/openplanr/skills/status/references/connectors.md +62 -0
  99. package/lib/host-packages/claude/openplanr/skills/status/references/tracker-connections.md +9 -13
  100. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +25 -10
  101. package/lib/host-packages/claude/openplanr/skills/sync/references/connectors.md +62 -0
  102. package/lib/host-packages/claude/openplanr/skills/sync/references/tracker-connections.md +9 -13
  103. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +69 -37
  104. package/lib/host-packages/cursor/openplanr/CONNECTORS.md +62 -0
  105. package/lib/host-packages/cursor/openplanr/manifest.json +4 -2
  106. package/lib/host-packages/cursor/openplanr/rules/planr-connect/references/connectors.md +62 -0
  107. package/lib/host-packages/cursor/openplanr/rules/planr-connect.mdc +58 -0
  108. package/lib/host-packages/cursor/openplanr/rules/planr-openplanr.mdc +4 -0
  109. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/planning-ids.mjs +49 -3
  110. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +4 -1
  111. package/lib/host-packages/cursor/openplanr/rules/planr-share/references/connectors.md +62 -0
  112. package/lib/host-packages/cursor/openplanr/rules/planr-share.mdc +85 -0
  113. package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/discover-verification.mjs +2 -1
  114. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +6 -3
  115. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/connectors.md +62 -0
  116. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/tracker-connections.md +9 -13
  117. package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +15 -6
  118. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/connectors.md +62 -0
  119. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/tracker-connections.md +9 -13
  120. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +14 -3
  121. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/connectors.md +62 -0
  122. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/tracker-connections.md +9 -13
  123. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +25 -10
  124. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +1 -1
  125. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs +259 -36
  126. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +54 -54
  127. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
  128. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +259 -36
  129. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +4 -4
  130. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  131. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +43 -24
  132. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +279 -58
  133. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +50 -42
  134. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +282 -146
  135. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +949 -316
  136. 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 +143 -87
  137. 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 +930 -183
  138. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +17 -15
  139. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +375 -191
  140. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +140 -105
  141. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-studio-shell.js +146 -54
  142. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +25 -25
  143. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +8 -4
  144. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +259 -36
  145. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +8 -4
  146. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  147. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  148. package/lib/host-packages/openai/openplanr/.openplanr-content.json +88 -40
  149. package/lib/host-packages/openai/openplanr/CONNECTORS.md +62 -0
  150. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +1 -1
  151. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs +259 -36
  152. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +54 -54
  153. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
  154. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +259 -36
  155. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +4 -4
  156. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  157. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +43 -24
  158. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +279 -58
  159. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +50 -42
  160. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +282 -146
  161. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +949 -316
  162. 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 +143 -87
  163. 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 +930 -183
  164. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +17 -15
  165. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +375 -191
  166. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +140 -105
  167. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-studio-shell.js +146 -54
  168. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +25 -25
  169. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +8 -4
  170. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +259 -36
  171. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +8 -4
  172. package/lib/host-packages/openai/openplanr/skills/connect/SKILL.md +59 -0
  173. package/lib/host-packages/openai/openplanr/skills/connect/agents/openai.yaml +6 -0
  174. package/lib/host-packages/openai/openplanr/skills/connect/openplanr.skill.json +37 -0
  175. package/lib/host-packages/openai/openplanr/skills/connect/references/connectors.md +62 -0
  176. package/lib/host-packages/openai/openplanr/skills/openplanr/SKILL.md +4 -0
  177. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +4 -1
  178. package/lib/host-packages/openai/openplanr/skills/plan/scripts/planning-ids.mjs +49 -3
  179. package/lib/host-packages/openai/openplanr/skills/share/SKILL.md +86 -0
  180. package/lib/host-packages/openai/openplanr/skills/share/agents/openai.yaml +6 -0
  181. package/lib/host-packages/openai/openplanr/skills/share/openplanr.skill.json +37 -0
  182. package/lib/host-packages/openai/openplanr/skills/share/references/connectors.md +62 -0
  183. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +6 -3
  184. package/lib/host-packages/openai/openplanr/skills/ship/scripts/discover-verification.mjs +2 -1
  185. package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +15 -6
  186. package/lib/host-packages/openai/openplanr/skills/sprint/openplanr.skill.json +11 -0
  187. package/lib/host-packages/openai/openplanr/skills/sprint/references/connectors.md +62 -0
  188. package/lib/host-packages/openai/openplanr/skills/sprint/references/tracker-connections.md +9 -13
  189. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +14 -3
  190. package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +11 -0
  191. package/lib/host-packages/openai/openplanr/skills/status/references/connectors.md +62 -0
  192. package/lib/host-packages/openai/openplanr/skills/status/references/tracker-connections.md +9 -13
  193. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +25 -10
  194. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +11 -0
  195. package/lib/host-packages/openai/openplanr/skills/sync/references/connectors.md +62 -0
  196. package/lib/host-packages/openai/openplanr/skills/sync/references/tracker-connections.md +9 -13
  197. package/lib/json-schema.mjs +313 -36
  198. package/lib/schemas/v1.0.0/spec.schema.json +120 -0
  199. package/lib/schemas/v1.0.0/story.schema.json +95 -0
  200. package/lib/schemas/v1.0.0/task.schema.json +171 -0
  201. package/lib/schemas/v1.7.0/spec.schema.json +117 -0
  202. package/lib/schemas/v1.7.0/story.schema.json +107 -0
  203. package/lib/schemas/v1.7.0/task.schema.json +217 -0
  204. package/package.json +32 -32
  205. package/dist/dashboard/assets/index-Csby7_ur.js +0 -557
  206. package/dist/dashboard/assets/index-Csby7_ur.js.map +0 -1
  207. package/dist/services/audit-log-service.d.ts +0 -47
  208. package/dist/services/audit-log-service.d.ts.map +0 -1
  209. package/dist/services/audit-log-service.js +0 -211
  210. package/dist/services/audit-log-service.js.map +0 -1
  211. package/dist/services/delta-apply-service.d.ts +0 -16
  212. package/dist/services/delta-apply-service.d.ts.map +0 -1
  213. package/dist/services/delta-apply-service.js +0 -74
  214. package/dist/services/delta-apply-service.js.map +0 -1
  215. package/dist/services/evidence-verifier.d.ts +0 -71
  216. package/dist/services/evidence-verifier.d.ts.map +0 -1
  217. package/dist/services/evidence-verifier.js +0 -174
  218. package/dist/services/evidence-verifier.js.map +0 -1
  219. package/dist/services/revise-apply-service.d.ts +0 -55
  220. package/dist/services/revise-apply-service.d.ts.map +0 -1
  221. package/dist/services/revise-apply-service.js +0 -265
  222. package/dist/services/revise-apply-service.js.map +0 -1
  223. package/dist/services/revise-cache-service.d.ts +0 -46
  224. package/dist/services/revise-cache-service.d.ts.map +0 -1
  225. package/dist/services/revise-cache-service.js +0 -89
  226. package/dist/services/revise-cache-service.js.map +0 -1
  227. package/dist/services/revise-plan-service.d.ts +0 -38
  228. package/dist/services/revise-plan-service.d.ts.map +0 -1
  229. package/dist/services/revise-plan-service.js +0 -153
  230. package/dist/services/revise-plan-service.js.map +0 -1
  231. /package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-runtime-support-336900df0d39.mjs → design-runtime-support-e34c388a8e59.mjs} +0 -0
  232. /package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-runtime-support-336900df0d39.mjs → design-runtime-support-e34c388a8e59.mjs} +0 -0
  233. /package/lib/host-packages/openai/openplanr/runtime/design/scripts/{design-runtime-support-336900df0d39.mjs → design-runtime-support-e34c388a8e59.mjs} +0 -0
@@ -32,6 +32,34 @@
32
32
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("rect", { x: "127", y: "71", width: "18", height: "18", rx: "3", fill: "currentColor" })
33
33
  ] }) }) });
34
34
  }
35
+ function inlineGap(element) {
36
+ const view = element?.ownerDocument.defaultView;
37
+ return view && element ? parseFloat(view.getComputedStyle(element).gap) || 0 : 0;
38
+ }
39
+ function measureLeadingFloor(leading) {
40
+ const view = leading.ownerDocument.defaultView;
41
+ if (!view) return 128;
42
+ const leadingControls = [...leading.children].filter(
43
+ (node) => node instanceof view.HTMLElement && !node.classList.contains("planr-brand") && node.getClientRects().length > 0
44
+ );
45
+ const branding = [
46
+ ...leading.querySelectorAll(".planr-mark,.design-wordmark")
47
+ ].filter((node) => node.getClientRects().length);
48
+ const brandGap = inlineGap(leading.querySelector(".planr-brand"));
49
+ const brandingWidth = branding.reduce(
50
+ (total, node) => total + node.getBoundingClientRect().width + brandGap,
51
+ 0
52
+ );
53
+ const titleBlock = leading.querySelector(".planr-title-block");
54
+ const badge = titleBlock?.querySelector(".studio-type-badge");
55
+ const title = titleBlock?.querySelector("strong,.de-title");
56
+ const titleFloor = Math.max(36, parseFloat(view.getComputedStyle(title ?? leading).fontSize) * 3);
57
+ const identityFloor = Math.max(
58
+ 128,
59
+ (badge?.getBoundingClientRect().width || 0) + inlineGap(titleBlock) + titleFloor
60
+ );
61
+ return identityFloor + brandingWidth + leadingControls.reduce((total, control) => total + control.getBoundingClientRect().width, 0) + leadingControls.length * inlineGap(leading);
62
+ }
35
63
  function StudioToolbar({
36
64
  title,
37
65
  titleNode,
@@ -44,6 +72,7 @@
44
72
  viewPicker,
45
73
  status,
46
74
  actions,
75
+ secondaryActions,
47
76
  className = ""
48
77
  }) {
49
78
  const toolbar = (0, import_react3.useRef)(null);
@@ -54,6 +83,7 @@
54
83
  const center = element.querySelector(".studio-toolbar-center");
55
84
  const trailing = element.querySelector(".studio-toolbar-trailing");
56
85
  const leading2 = element.querySelector(".studio-toolbar-leading");
86
+ const secondary = element.querySelector(".studio-toolbar-secondary");
57
87
  if (!center || !trailing || !leading2) return;
58
88
  const measure = () => {
59
89
  const width = element.getBoundingClientRect().width;
@@ -61,24 +91,28 @@
61
91
  element.dataset.studioDensity = width <= 680 ? "narrow" : "regular";
62
92
  const style = window2.getComputedStyle(element);
63
93
  const available = width - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight);
64
- const gap = parseFloat(style.columnGap) || 0;
94
+ const gap = Math.max(12, parseFloat(style.columnGap) || 0);
65
95
  element.dataset.studioCenter = "true";
66
96
  const centerWidth = center.scrollWidth;
67
97
  element.dataset.studioCenter = String(centerWidth > 0);
68
98
  const controlSelector = 'button,a,summary,input,select,output,[role="status"]';
69
- const controls = [...trailing.querySelectorAll(controlSelector)].filter(
99
+ const controls = [
100
+ ...trailing.querySelectorAll(controlSelector),
101
+ ...secondary?.querySelectorAll(controlSelector) ?? []
102
+ ].filter(
70
103
  (control) => control.getClientRects().length && !control.closest('[role="menu"],.studio-tooltip,[role="dialog"]') && (!control.closest("details") || !!control.closest("summary")) && !control.parentElement?.closest(controlSelector)
71
104
  );
72
- const actionWidth = controls.reduce((total, control) => total + control.getBoundingClientRect().width, 0) + Math.max(0, controls.length - 1) * (parseFloat(window2.getComputedStyle(trailing).gap) || 8);
73
- const leadingControl = leading2.firstElementChild;
74
- const branding = [
75
- ...leading2.querySelectorAll(".planr-mark,.design-wordmark")
76
- ].filter((node) => node.getClientRects().length);
77
- const brandingWidth = branding.reduce(
78
- (total, node) => total + node.getBoundingClientRect().width + 8,
79
- 0
80
- );
81
- const leadingFloor = 128 + brandingWidth + (leadingControl instanceof window2.HTMLElement && !leadingControl.classList.contains("planr-brand") ? leadingControl.getBoundingClientRect().width + 8 : 0);
105
+ const actionWidth = controls.reduce((total, control) => {
106
+ if (secondary?.contains(control) && control.getAttribute("role") === "status") {
107
+ const range = element.ownerDocument.createRange();
108
+ range.selectNodeContents(control);
109
+ const textWidth = range.getBoundingClientRect().width;
110
+ const controlStyle = window2.getComputedStyle(control);
111
+ return total + textWidth + (parseFloat(controlStyle.paddingLeft) || 0) + (parseFloat(controlStyle.paddingRight) || 0);
112
+ }
113
+ return total + control.getBoundingClientRect().width;
114
+ }, 0) + Math.max(0, controls.length - 1) * (parseFloat(window2.getComputedStyle(trailing).gap) || 8);
115
+ const leadingFloor = measureLeadingFloor(leading2);
82
116
  const outerWidth = Math.max(leadingFloor, actionWidth);
83
117
  element.dataset.studioLayout = centerWidth > 0 ? width <= 680 || centerWidth + outerWidth * 2 + gap * 2 > available ? "compact" : "inline" : leadingFloor + actionWidth + gap > available ? "compact" : "inline";
84
118
  };
@@ -92,7 +126,7 @@
92
126
  });
93
127
  };
94
128
  const resize = typeof window2.ResizeObserver === "function" ? new window2.ResizeObserver(scheduleMeasure) : null;
95
- for (const node of [element, center, trailing]) resize?.observe(node);
129
+ for (const node of [element, center, trailing, secondary]) if (node) resize?.observe(node);
96
130
  const mutations = new window2.MutationObserver(scheduleMeasure);
97
131
  mutations.observe(element, {
98
132
  subtree: true,
@@ -150,7 +184,8 @@
150
184
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "studio-toolbar-trailing design-toolbar-trailing", children: [
151
185
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "studio-toolbar-status", children: status }),
152
186
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "studio-toolbar-actions", children: actions })
153
- ] })
187
+ ] }),
188
+ secondaryActions && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "studio-toolbar-secondary", children: secondaryActions })
154
189
  ]
155
190
  }
156
191
  );
@@ -164,49 +199,106 @@
164
199
  onOpenChange
165
200
  }) {
166
201
  const trigger = (0, import_react3.useRef)(null);
167
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(dist_exports5.Root, { modal: false, open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { className: `studio-menu ${className}`, children: [
168
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(dist_exports5.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(StudioButton, { "aria-label": label, title: label, ...triggerAttributes, ref: trigger, children: [
169
- label,
170
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { "aria-hidden": "true", children: "⌄" })
171
- ] }) }),
172
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
173
- dist_exports5.Content,
174
- {
175
- className: "studio-menu-content",
176
- align: "end",
177
- sideOffset: 8,
178
- collisionPadding: 8,
179
- onCloseAutoFocus: (event) => {
180
- event.preventDefault();
181
- const content = event.target;
182
- const ownerDocument = content?.ownerDocument;
183
- const active = ownerDocument?.activeElement;
184
- if (active?.isConnected && active !== ownerDocument?.body && active !== ownerDocument?.documentElement && !content?.contains(active))
185
- return;
186
- if (trigger.current?.isConnected) trigger.current.focus();
187
- },
188
- children: items.map((item, index2) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
189
- dist_exports5.Item,
202
+ const mousePosition = (0, import_react3.useRef)(null);
203
+ const keyboardPosition = (0, import_react3.useRef)(null);
204
+ (0, import_react3.useLayoutEffect)(() => {
205
+ const ownerDocument = trigger.current?.ownerDocument;
206
+ if (!ownerDocument) return;
207
+ const move = (event) => {
208
+ if (event.pointerType !== "mouse") return;
209
+ const position = { x: event.clientX, y: event.clientY };
210
+ const previous = keyboardPosition.current;
211
+ if (previous && (previous.x !== position.x || previous.y !== position.y))
212
+ keyboardPosition.current = null;
213
+ mousePosition.current = position;
214
+ };
215
+ const down = (event) => {
216
+ keyboardPosition.current = null;
217
+ if (event.pointerType === "mouse")
218
+ mousePosition.current = { x: event.clientX, y: event.clientY };
219
+ };
220
+ ownerDocument.addEventListener("pointermove", move, true);
221
+ ownerDocument.addEventListener("pointerdown", down, true);
222
+ return () => {
223
+ ownerDocument.removeEventListener("pointermove", move, true);
224
+ ownerDocument.removeEventListener("pointerdown", down, true);
225
+ };
226
+ }, []);
227
+ const retainKeyboardFocus = (event) => {
228
+ const position = keyboardPosition.current;
229
+ if (event.pointerType === "mouse" && position?.x === event.clientX && position.y === event.clientY)
230
+ event.preventDefault();
231
+ };
232
+ const keyboardInput = () => {
233
+ keyboardPosition.current = mousePosition.current;
234
+ };
235
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
236
+ dist_exports5.Root,
237
+ {
238
+ modal: false,
239
+ open,
240
+ onOpenChange: (value) => {
241
+ if (!value) keyboardPosition.current = null;
242
+ onOpenChange?.(value);
243
+ },
244
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { className: `studio-menu ${className}`, children: [
245
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(dist_exports5.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
246
+ StudioButton,
190
247
  {
191
- asChild: true,
192
- disabled: item.disabled,
193
- onSelect: item.onSelect,
194
- children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
195
- "button",
248
+ "aria-label": label,
249
+ title: label,
250
+ ...triggerAttributes,
251
+ ref: trigger,
252
+ onKeyDownCapture: keyboardInput,
253
+ children: [
254
+ label,
255
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { "aria-hidden": "true", children: "⌄" })
256
+ ]
257
+ }
258
+ ) }),
259
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
260
+ dist_exports5.Content,
261
+ {
262
+ className: "studio-menu-content",
263
+ align: "end",
264
+ sideOffset: 8,
265
+ collisionPadding: 8,
266
+ onKeyDownCapture: keyboardInput,
267
+ onCloseAutoFocus: (event) => {
268
+ event.preventDefault();
269
+ const content = event.target;
270
+ const ownerDocument = content?.ownerDocument;
271
+ const active = ownerDocument?.activeElement;
272
+ if (active?.isConnected && active !== ownerDocument?.body && active !== ownerDocument?.documentElement && !content?.contains(active))
273
+ return;
274
+ if (trigger.current?.isConnected) trigger.current.focus();
275
+ },
276
+ children: items.map((item, index2) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
277
+ dist_exports5.Item,
196
278
  {
197
- type: "button",
198
- className: `studio-menu-item${index2 > 0 && item.group !== items[index2 - 1].group ? " studio-menu-group-start" : ""}`,
279
+ asChild: true,
199
280
  disabled: item.disabled,
200
- ...item.attributes,
201
- children: item.label
202
- }
203
- )
204
- },
205
- item.id
206
- ))
207
- }
208
- )
209
- ] }) });
281
+ onSelect: item.onSelect,
282
+ onPointerMove: retainKeyboardFocus,
283
+ onPointerLeave: retainKeyboardFocus,
284
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
285
+ "button",
286
+ {
287
+ type: "button",
288
+ className: `studio-menu-item${index2 > 0 && item.group !== items[index2 - 1].group ? " studio-menu-group-start" : ""}`,
289
+ disabled: item.disabled,
290
+ ...item.attributes,
291
+ children: item.label
292
+ }
293
+ )
294
+ },
295
+ item.id
296
+ ))
297
+ }
298
+ )
299
+ ] })
300
+ }
301
+ );
210
302
  }
211
303
  function StudioPanelDialog({
212
304
  open,
@@ -2,8 +2,8 @@
2
2
  "kind": "openplanr-runtime-asset-sources",
3
3
  "schemaVersion": "1.0.0",
4
4
  "asset": "studio.js",
5
- "bytes": 1142078,
6
- "sha256": "b8688a3102c5028847fc9a1d4a257b096768de1db3b4bfd4656482d318013c71",
5
+ "bytes": 1249882,
6
+ "sha256": "48fcbdfa9f85b4bba49ab4237e8bf0427d0f07e129b1be2c6b8cb4d0f54ebdfa",
7
7
  "scopes": [
8
8
  {
9
9
  "id": "bundle",
@@ -41,8 +41,8 @@
41
41
  "node_modules/scheduler/cjs/scheduler.production.js",
42
42
  "node_modules/scheduler/index.js"
43
43
  ],
44
- "bytes": 40770,
45
- "sha256": "bf350d5126e53d2eebc29c96ce4c38d007dc205aded91cc3bb964c1d68e469e5"
44
+ "bytes": 42312,
45
+ "sha256": "3d07031b0e1ebfe8d00491d70eb876cdd9ec829801ec3df4fc5aa72205b5ea7f"
46
46
  },
47
47
  {
48
48
  "path": "studio.js.sources/03-react-dom-client-fiber-foundations.js",
@@ -51,8 +51,8 @@
51
51
  "inputs": [
52
52
  "node_modules/react-dom/cjs/react-dom-client.production.js"
53
53
  ],
54
- "bytes": 115580,
55
- "sha256": "f30ee0a7f2c9dbe1b13e64d33fd9f5a25bd816e60ca04eeda5153a1a3694cbb1"
54
+ "bytes": 125924,
55
+ "sha256": "793a627a349d139397ff51c837c7cc911b08b34a49e5629af0c7967e5cb89715"
56
56
  },
57
57
  {
58
58
  "path": "studio.js.sources/04-react-dom-client-reconciliation-hooks.js",
@@ -61,8 +61,8 @@
61
61
  "inputs": [
62
62
  "node_modules/react-dom/cjs/react-dom-client.production.js"
63
63
  ],
64
- "bytes": 88768,
65
- "sha256": "0f5687e30eb5029375818768c47b407d48946ad420adec5b3d9453d4e6e9b751"
64
+ "bytes": 89353,
65
+ "sha256": "3839e5bdcca072a612ec48fffb6e340083f4692c516a2aeb9c8c8896ab4ea6a4"
66
66
  },
67
67
  {
68
68
  "path": "studio.js.sources/05-react-dom-client-render-phases.js",
@@ -71,8 +71,8 @@
71
71
  "inputs": [
72
72
  "node_modules/react-dom/cjs/react-dom-client.production.js"
73
73
  ],
74
- "bytes": 97715,
75
- "sha256": "1fb2854c8642a5f9285fb5d30b015ef25006a5c2b433323eb6226173ec9f0d12"
74
+ "bytes": 103002,
75
+ "sha256": "f057d07ab68567daebe124fe103d88157ee4ce68177e21d1a2166debf424309f"
76
76
  },
77
77
  {
78
78
  "path": "studio.js.sources/06-react-dom-client-commit-effects.js",
@@ -81,8 +81,8 @@
81
81
  "inputs": [
82
82
  "node_modules/react-dom/cjs/react-dom-client.production.js"
83
83
  ],
84
- "bytes": 71832,
85
- "sha256": "6038d1c4d96e123d9f9ab7ee2516878c97bdbe5bc6149732d1064444d38b3b57"
84
+ "bytes": 106377,
85
+ "sha256": "67291903232cb09062344ef0770638c9882a76178adba57c9a67f72bbdb80cbb"
86
86
  },
87
87
  {
88
88
  "path": "studio.js.sources/07-react-dom-client-work-loop-scheduling.js",
@@ -91,8 +91,8 @@
91
91
  "inputs": [
92
92
  "node_modules/react-dom/cjs/react-dom-client.production.js"
93
93
  ],
94
- "bytes": 56229,
95
- "sha256": "89525ecc086cf31eff4fc4daf2e886ed603b301c8af6c855d409e9d6367df3e8"
94
+ "bytes": 60129,
95
+ "sha256": "ed6b1c356c341efa060072cffa2a61fcbb425655bd00c8b58dc5b50a13d5a3ad"
96
96
  },
97
97
  {
98
98
  "path": "studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js",
@@ -101,8 +101,8 @@
101
101
  "inputs": [
102
102
  "node_modules/react-dom/cjs/react-dom-client.production.js"
103
103
  ],
104
- "bytes": 103909,
105
- "sha256": "02670980a272f781deb8d9e9d67c0ca5ea62fd31c9fff6ea55a1ccc7ade93262"
104
+ "bytes": 142294,
105
+ "sha256": "fae78a4ea2c320638ca51a504b26dba90440d72882afdf1edf7ac49fe24853b6"
106
106
  },
107
107
  {
108
108
  "path": "studio.js.sources/09-react-dom-client-public-roots.js",
@@ -111,8 +111,8 @@
111
111
  "inputs": [
112
112
  "node_modules/react-dom/cjs/react-dom-client.production.js"
113
113
  ],
114
- "bytes": 31761,
115
- "sha256": "631a2f59100373a07571b84cf75aeb8469d122721c32c5c30a85c26591721878"
114
+ "bytes": 31832,
115
+ "sha256": "adca04c0e9079e354d467d17aaa6f49423611d290661f0cbbd7610545a98825e"
116
116
  },
117
117
  {
118
118
  "path": "studio.js.sources/10-react.js",
@@ -170,7 +170,6 @@
170
170
  "node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs",
171
171
  "node_modules/@radix-ui/primitive/dist/index.mjs",
172
172
  "node_modules/@radix-ui/primitive/dist/internal/is-development.false.mjs",
173
- "node_modules/@radix-ui/react-arrow/dist/index.mjs",
174
173
  "node_modules/@radix-ui/react-collection/dist/index.mjs",
175
174
  "node_modules/@radix-ui/react-compose-refs/dist/index.mjs",
176
175
  "node_modules/@radix-ui/react-context/dist/index.mjs",
@@ -213,22 +212,23 @@
213
212
  "node_modules/use-sidecar/dist/es2015/exports.js",
214
213
  "node_modules/use-sidecar/dist/es2015/medium.js"
215
214
  ],
216
- "bytes": 188797,
217
- "sha256": "674115ab13d18062757b121898429a0ba0c6075d94cdc1318d3a1fd4d99252f7"
215
+ "bytes": 196384,
216
+ "sha256": "c8d5ab2e7df79e22329daaf59e074d74345d11147c500553edd7910aaf96ed3e"
218
217
  },
219
218
  {
220
219
  "path": "studio.js.sources/15-interface-primitives.js",
221
220
  "scope": "bundle",
222
221
  "responsibility": "interface-primitives",
223
222
  "inputs": [
223
+ "node_modules/@radix-ui/react-arrow/dist/index.mjs",
224
224
  "node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs",
225
225
  "node_modules/@radix-ui/react-menu/dist/index.mjs",
226
226
  "node_modules/@radix-ui/react-popper/dist/index.mjs",
227
227
  "node_modules/@radix-ui/react-roving-focus/dist/index.mjs",
228
228
  "node_modules/@radix-ui/react-use-is-hydrated/dist/index.mjs"
229
229
  ],
230
- "bytes": 77376,
231
- "sha256": "6228cf871238da64e48ae07c2998a754451462fdc0662137a15e99ce1c7408ee"
230
+ "bytes": 78937,
231
+ "sha256": "e26c838db40b55f6df77606ac87b36f0298d7316ac832fa8c770c9dbab896596"
232
232
  },
233
233
  {
234
234
  "path": "studio.js.sources/16-studio-shell.js",
@@ -238,8 +238,8 @@
238
238
  "packages/artifact/lib/artifact/ui/studio-shell-components.mjs",
239
239
  "packages/artifact/lib/artifact/ui/studio-shell-mount-impl.mjs"
240
240
  ],
241
- "bytes": 23280,
242
- "sha256": "5306387b1f59d43e1cd0ed2c471b18b0b35d5cc8c573ffe5439ea9315494c01e"
241
+ "bytes": 27277,
242
+ "sha256": "81af29a6a5a15fd4f0ef41fc48e1eca63c30b3745fd1d92830ba83f7cf2ba603"
243
243
  },
244
244
  {
245
245
  "path": "studio.js.sources/17-design-studio.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -115,6 +115,10 @@
115
115
  "./sharing-security-contracts": {
116
116
  "types": "./src/sharing-security-contracts.d.mts",
117
117
  "import": "./src/sharing-security-contracts.mjs"
118
+ },
119
+ "./enterprise-journey-contracts": {
120
+ "types": "./src/enterprise-journey-contracts.d.mts",
121
+ "import": "./src/enterprise-journey-contracts.mjs"
118
122
  }
119
123
  },
120
124
  "files": [
@@ -143,9 +147,9 @@
143
147
  "access": "public"
144
148
  },
145
149
  "devDependencies": {
146
- "esbuild": "0.28.1",
147
- "miniflare": "4.20260708.1",
148
- "playwright": "1.61.1",
150
+ "esbuild": "0.28.2",
151
+ "miniflare": "4.20260730.0",
152
+ "playwright": "1.64.0",
149
153
  "typescript": "6.0.2"
150
154
  }
151
155
  }