openplanr 2.2641.0 → 2.2641.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +14 -14
  3. package/bin/openplanr.js +13 -0
  4. package/bin/planr.js +5 -11
  5. package/dist/cli/commands/artifact.d.ts.map +1 -1
  6. package/dist/cli/commands/artifact.js +6 -5
  7. package/dist/cli/commands/artifact.js.map +1 -1
  8. package/dist/cli/commands/checklist.d.ts.map +1 -1
  9. package/dist/cli/commands/checklist.js +4 -3
  10. package/dist/cli/commands/checklist.js.map +1 -1
  11. package/dist/cli/commands/company.d.ts.map +1 -1
  12. package/dist/cli/commands/company.js +3 -2
  13. package/dist/cli/commands/company.js.map +1 -1
  14. package/dist/cli/commands/context.d.ts +1 -1
  15. package/dist/cli/commands/context.js +1 -1
  16. package/dist/cli/commands/doctor.d.ts.map +1 -1
  17. package/dist/cli/commands/doctor.js +11 -5
  18. package/dist/cli/commands/doctor.js.map +1 -1
  19. package/dist/cli/commands/export.d.ts +1 -1
  20. package/dist/cli/commands/export.js +1 -1
  21. package/dist/cli/commands/github.d.ts +1 -1
  22. package/dist/cli/commands/github.d.ts.map +1 -1
  23. package/dist/cli/commands/github.js +16 -18
  24. package/dist/cli/commands/github.js.map +1 -1
  25. package/dist/cli/commands/init-deterministic.d.ts.map +1 -1
  26. package/dist/cli/commands/init-deterministic.js +2 -1
  27. package/dist/cli/commands/init-deterministic.js.map +1 -1
  28. package/dist/cli/commands/linear.d.ts +2 -2
  29. package/dist/cli/commands/linear.d.ts.map +1 -1
  30. package/dist/cli/commands/linear.js +29 -28
  31. package/dist/cli/commands/linear.js.map +1 -1
  32. package/dist/cli/commands/operate/registrars/index.d.ts +1 -1
  33. package/dist/cli/commands/operate/registrars/index.d.ts.map +1 -1
  34. package/dist/cli/commands/operate/registrars/index.js +1 -1
  35. package/dist/cli/commands/operate/registrars/index.js.map +1 -1
  36. package/dist/cli/commands/operate/render.d.ts.map +1 -1
  37. package/dist/cli/commands/operate/render.js +2 -1
  38. package/dist/cli/commands/operate/render.js.map +1 -1
  39. package/dist/cli/commands/operate.d.ts.map +1 -1
  40. package/dist/cli/commands/operate.js +2 -1
  41. package/dist/cli/commands/operate.js.map +1 -1
  42. package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
  43. package/dist/cli/commands/planning-artifacts.js +2 -1
  44. package/dist/cli/commands/planning-artifacts.js.map +1 -1
  45. package/dist/cli/commands/quick/interaction.d.ts +1 -1
  46. package/dist/cli/commands/quick/interaction.d.ts.map +1 -1
  47. package/dist/cli/commands/quick/interaction.js +1 -1
  48. package/dist/cli/commands/quick/interaction.js.map +1 -1
  49. package/dist/cli/commands/quick/project.d.ts +1 -1
  50. package/dist/cli/commands/quick/project.d.ts.map +1 -1
  51. package/dist/cli/commands/quick/project.js +1 -1
  52. package/dist/cli/commands/quick/project.js.map +1 -1
  53. package/dist/cli/commands/report-linter.d.ts +1 -1
  54. package/dist/cli/commands/report-linter.js +1 -1
  55. package/dist/cli/commands/report.d.ts +1 -1
  56. package/dist/cli/commands/report.d.ts.map +1 -1
  57. package/dist/cli/commands/report.js +32 -35
  58. package/dist/cli/commands/report.js.map +1 -1
  59. package/dist/cli/commands/setup.d.ts.map +1 -1
  60. package/dist/cli/commands/setup.js +5 -4
  61. package/dist/cli/commands/setup.js.map +1 -1
  62. package/dist/cli/commands/spec.d.ts +11 -11
  63. package/dist/cli/commands/spec.d.ts.map +1 -1
  64. package/dist/cli/commands/spec.js +34 -33
  65. package/dist/cli/commands/spec.js.map +1 -1
  66. package/dist/cli/commands/sprint-refinement.d.ts.map +1 -1
  67. package/dist/cli/commands/sprint-refinement.js +2 -1
  68. package/dist/cli/commands/sprint-refinement.js.map +1 -1
  69. package/dist/cli/commands/status.d.ts.map +1 -1
  70. package/dist/cli/commands/status.js +2 -1
  71. package/dist/cli/commands/status.js.map +1 -1
  72. package/dist/cli/commands/story/interaction.d.ts +1 -1
  73. package/dist/cli/commands/story/interaction.d.ts.map +1 -1
  74. package/dist/cli/commands/story/interaction.js +1 -1
  75. package/dist/cli/commands/story/interaction.js.map +1 -1
  76. package/dist/cli/commands/story/project.d.ts +1 -1
  77. package/dist/cli/commands/story/project.d.ts.map +1 -1
  78. package/dist/cli/commands/story/project.js +1 -1
  79. package/dist/cli/commands/story/project.js.map +1 -1
  80. package/dist/cli/commands/sync.d.ts +1 -1
  81. package/dist/cli/commands/sync.d.ts.map +1 -1
  82. package/dist/cli/commands/sync.js +3 -2
  83. package/dist/cli/commands/sync.js.map +1 -1
  84. package/dist/cli/commands/template.d.ts +1 -1
  85. package/dist/cli/commands/template.js +10 -10
  86. package/dist/cli/commands/template.js.map +1 -1
  87. package/dist/cli/commands/update.d.ts +1 -1
  88. package/dist/cli/commands/update.js +1 -1
  89. package/dist/cli/commands/upgrade.d.ts +1 -1
  90. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  91. package/dist/cli/commands/upgrade.js +3 -2
  92. package/dist/cli/commands/upgrade.js.map +1 -1
  93. package/dist/cli/commands/voice.d.ts +1 -1
  94. package/dist/cli/commands/voice.js +1 -1
  95. package/dist/cli/index.js +6 -3
  96. package/dist/cli/index.js.map +1 -1
  97. package/dist/dashboard/.vite/manifest.json +1 -1
  98. package/dist/dashboard/assets/{index-D7R6tnlX.js → index-DI_TKz9J.js} +115 -115
  99. package/dist/dashboard/assets/index-DI_TKz9J.js.map +1 -0
  100. package/dist/dashboard/dashboard-manifest.json +10 -10
  101. package/dist/dashboard/index.html +1 -1
  102. package/dist/generators/cursor-generator.js +1 -1
  103. package/dist/generators/cursor-generator.js.map +1 -1
  104. package/dist/models/schema.d.ts +0 -4
  105. package/dist/models/schema.d.ts.map +1 -1
  106. package/dist/models/schema.js +2 -3
  107. package/dist/models/schema.js.map +1 -1
  108. package/dist/models/types.d.ts +13 -16
  109. package/dist/models/types.d.ts.map +1 -1
  110. package/dist/services/artifact-service.d.ts +1 -1
  111. package/dist/services/artifact-service.js +2 -2
  112. package/dist/services/artifact-service.js.map +1 -1
  113. package/dist/services/audit-log-service.d.ts.map +1 -1
  114. package/dist/services/audit-log-service.js +2 -1
  115. package/dist/services/audit-log-service.js.map +1 -1
  116. package/dist/services/claude-plugin-service.d.ts +3 -1
  117. package/dist/services/claude-plugin-service.d.ts.map +1 -1
  118. package/dist/services/claude-plugin-service.js +9 -5
  119. package/dist/services/claude-plugin-service.js.map +1 -1
  120. package/dist/services/codex-plugin-service.d.ts.map +1 -1
  121. package/dist/services/codex-plugin-service.js +3 -2
  122. package/dist/services/codex-plugin-service.js.map +1 -1
  123. package/dist/services/company-auth-service.d.ts.map +1 -1
  124. package/dist/services/company-auth-service.js +2 -1
  125. package/dist/services/company-auth-service.js.map +1 -1
  126. package/dist/services/company-sync-service.d.ts.map +1 -1
  127. package/dist/services/company-sync-service.js +9 -8
  128. package/dist/services/company-sync-service.js.map +1 -1
  129. package/dist/services/config-service.d.ts +6 -1
  130. package/dist/services/config-service.d.ts.map +1 -1
  131. package/dist/services/config-service.js +19 -4
  132. package/dist/services/config-service.js.map +1 -1
  133. package/dist/services/credentials-service.js +2 -2
  134. package/dist/services/credentials-service.js.map +1 -1
  135. package/dist/services/delivery-status-service.d.ts +1 -1
  136. package/dist/services/delivery-status-service.d.ts.map +1 -1
  137. package/dist/services/delivery-status-service.js +3 -2
  138. package/dist/services/delivery-status-service.js.map +1 -1
  139. package/dist/services/diagram-authoring-service.d.ts.map +1 -1
  140. package/dist/services/diagram-authoring-service.js +2 -1
  141. package/dist/services/diagram-authoring-service.js.map +1 -1
  142. package/dist/services/diagram-pipeline-service.d.ts.map +1 -1
  143. package/dist/services/diagram-pipeline-service.js +6 -5
  144. package/dist/services/diagram-pipeline-service.js.map +1 -1
  145. package/dist/services/distribution-service.d.ts +1 -4
  146. package/dist/services/distribution-service.d.ts.map +1 -1
  147. package/dist/services/distribution-service.js +3 -61
  148. package/dist/services/distribution-service.js.map +1 -1
  149. package/dist/services/github-service.d.ts +8 -5
  150. package/dist/services/github-service.d.ts.map +1 -1
  151. package/dist/services/github-service.js +23 -21
  152. package/dist/services/github-service.js.map +1 -1
  153. package/dist/services/graph-integrity.d.ts +1 -1
  154. package/dist/services/graph-integrity.js +1 -1
  155. package/dist/services/landing/landing-service.d.ts.map +1 -1
  156. package/dist/services/landing/landing-service.js +4 -1
  157. package/dist/services/landing/landing-service.js.map +1 -1
  158. package/dist/services/landing/receipt-custody.d.ts.map +1 -1
  159. package/dist/services/landing/receipt-custody.js +3 -2
  160. package/dist/services/landing/receipt-custody.js.map +1 -1
  161. package/dist/services/linear/errors.d.ts.map +1 -1
  162. package/dist/services/linear/errors.js +2 -1
  163. package/dist/services/linear/errors.js.map +1 -1
  164. package/dist/services/linear/plan-builders.d.ts +3 -3
  165. package/dist/services/linear/plan-builders.d.ts.map +1 -1
  166. package/dist/services/linear/plan-builders.js +2 -2
  167. package/dist/services/linear/strategy-context.d.ts.map +1 -1
  168. package/dist/services/linear/strategy-context.js +6 -5
  169. package/dist/services/linear/strategy-context.js.map +1 -1
  170. package/dist/services/linear-mapping-service.d.ts +1 -1
  171. package/dist/services/linear-mapping-service.d.ts.map +1 -1
  172. package/dist/services/linear-mapping-service.js +3 -2
  173. package/dist/services/linear-mapping-service.js.map +1 -1
  174. package/dist/services/linear-pull-service.d.ts +1 -1
  175. package/dist/services/linear-pull-service.d.ts.map +1 -1
  176. package/dist/services/linear-pull-service.js +10 -9
  177. package/dist/services/linear-pull-service.js.map +1 -1
  178. package/dist/services/linear-push-service.d.ts +5 -6
  179. package/dist/services/linear-push-service.d.ts.map +1 -1
  180. package/dist/services/linear-push-service.js +22 -22
  181. package/dist/services/linear-push-service.js.map +1 -1
  182. package/dist/services/linear-service.d.ts +2 -2
  183. package/dist/services/linear-service.js +2 -2
  184. package/dist/services/linear-team-service.d.ts.map +1 -1
  185. package/dist/services/linear-team-service.js +2 -1
  186. package/dist/services/linear-team-service.js.map +1 -1
  187. package/dist/services/operate/assignment-packet-service.d.ts.map +1 -1
  188. package/dist/services/operate/assignment-packet-service.js +2 -1
  189. package/dist/services/operate/assignment-packet-service.js.map +1 -1
  190. package/dist/services/operate/delivery-evidence.d.ts.map +1 -1
  191. package/dist/services/operate/delivery-evidence.js +2 -1
  192. package/dist/services/operate/delivery-evidence.js.map +1 -1
  193. package/dist/services/operate/measurement-schedule-service.d.ts.map +1 -1
  194. package/dist/services/operate/measurement-schedule-service.js +2 -1
  195. package/dist/services/operate/measurement-schedule-service.js.map +1 -1
  196. package/dist/services/operate/path-custody.d.ts.map +1 -1
  197. package/dist/services/operate/path-custody.js +2 -1
  198. package/dist/services/operate/path-custody.js.map +1 -1
  199. package/dist/services/operate/pinned-legacy-replay-runner.d.ts.map +1 -1
  200. package/dist/services/operate/pinned-legacy-replay-runner.js +3 -2
  201. package/dist/services/operate/pinned-legacy-replay-runner.js.map +1 -1
  202. package/dist/services/operate/planning-handoff-service.d.ts.map +1 -1
  203. package/dist/services/operate/planning-handoff-service.js +3 -2
  204. package/dist/services/operate/planning-handoff-service.js.map +1 -1
  205. package/dist/services/operate/project-transaction-lock.d.ts.map +1 -1
  206. package/dist/services/operate/project-transaction-lock.js +2 -1
  207. package/dist/services/operate/project-transaction-lock.js.map +1 -1
  208. package/dist/services/operate/repository-read-service.d.ts.map +1 -1
  209. package/dist/services/operate/repository-read-service.js +5 -4
  210. package/dist/services/operate/repository-read-service.js.map +1 -1
  211. package/dist/services/operate/screened-evidence-service.d.ts.map +1 -1
  212. package/dist/services/operate/screened-evidence-service.js +5 -4
  213. package/dist/services/operate/screened-evidence-service.js.map +1 -1
  214. package/dist/services/operate/storage-layout.d.ts.map +1 -1
  215. package/dist/services/operate/storage-layout.js +8 -7
  216. package/dist/services/operate/storage-layout.js.map +1 -1
  217. package/dist/services/operate/store.d.ts.map +1 -1
  218. package/dist/services/operate/store.js +7 -6
  219. package/dist/services/operate/store.js.map +1 -1
  220. package/dist/services/pipeline-package-service.js +1 -1
  221. package/dist/services/pipeline-package-service.js.map +1 -1
  222. package/dist/services/provenance-service.d.ts.map +1 -1
  223. package/dist/services/provenance-service.js +2 -1
  224. package/dist/services/provenance-service.js.map +1 -1
  225. package/dist/services/report-linter-service.js +1 -1
  226. package/dist/services/report-linter-service.js.map +1 -1
  227. package/dist/services/revise-cache-service.d.ts.map +1 -1
  228. package/dist/services/revise-cache-service.js +2 -1
  229. package/dist/services/revise-cache-service.js.map +1 -1
  230. package/dist/services/runtime-manager/doctor.d.ts +13 -0
  231. package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
  232. package/dist/services/runtime-manager/doctor.js +50 -3
  233. package/dist/services/runtime-manager/doctor.js.map +1 -1
  234. package/dist/services/runtime-manager/inventory.d.ts +1 -0
  235. package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
  236. package/dist/services/runtime-manager/inventory.js +3 -1
  237. package/dist/services/runtime-manager/inventory.js.map +1 -1
  238. package/dist/services/runtime-manager-service.d.ts +4 -2
  239. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  240. package/dist/services/runtime-manager-service.js +52 -33
  241. package/dist/services/runtime-manager-service.js.map +1 -1
  242. package/dist/services/server-lifecycle-service.d.ts.map +1 -1
  243. package/dist/services/server-lifecycle-service.js +14 -9
  244. package/dist/services/server-lifecycle-service.js.map +1 -1
  245. package/dist/services/spec-service.d.ts +4 -4
  246. package/dist/services/spec-service.d.ts.map +1 -1
  247. package/dist/services/spec-service.js +43 -77
  248. package/dist/services/spec-service.js.map +1 -1
  249. package/dist/services/sprint-refinement-service.d.ts +6 -6
  250. package/dist/services/sprint-refinement-service.d.ts.map +1 -1
  251. package/dist/services/sprint-refinement-service.js +16 -16
  252. package/dist/services/sprint-refinement-service.js.map +1 -1
  253. package/dist/services/template-service.d.ts.map +1 -1
  254. package/dist/services/template-service.js +3 -1
  255. package/dist/services/template-service.js.map +1 -1
  256. package/dist/services/upgrade-offer-service.d.ts +2 -2
  257. package/dist/services/upgrade-offer-service.d.ts.map +1 -1
  258. package/dist/services/upgrade-offer-service.js +4 -3
  259. package/dist/services/upgrade-offer-service.js.map +1 -1
  260. package/dist/services/upgrade-report.d.ts +1 -1
  261. package/dist/services/upgrade-report.d.ts.map +1 -1
  262. package/dist/services/upgrade-report.js +5 -4
  263. package/dist/services/upgrade-report.js.map +1 -1
  264. package/dist/services/upgrade-service.d.ts +5 -5
  265. package/dist/services/upgrade-service.d.ts.map +1 -1
  266. package/dist/services/upgrade-service.js +14 -13
  267. package/dist/services/upgrade-service.js.map +1 -1
  268. package/dist/templates/backlog/backlog-item.md.hbs +1 -1
  269. package/dist/templates/checklists/agile-checklist.md.hbs +6 -6
  270. package/dist/templates/epics/epic.md.hbs +1 -1
  271. package/dist/templates/export/planning-report.html.hbs +1 -1
  272. package/dist/templates/export/planning-report.md.hbs +1 -1
  273. package/dist/templates/features/feature.md.hbs +1 -1
  274. package/dist/templates/guides/estimation.md.hbs +3 -12
  275. package/dist/templates/quick/quick-task.md.hbs +1 -1
  276. package/dist/templates/rules/cursor/create-epic.mdc.hbs +1 -1
  277. package/dist/templates/rules/cursor/create-features.mdc.hbs +1 -1
  278. package/dist/templates/rules/cursor/create-user-story.mdc.hbs +1 -1
  279. package/dist/templates/rules/cursor/openplanr.mdc.hbs +1 -1
  280. package/dist/templates/rules/shared/capability-map.md.hbs +1 -1
  281. package/dist/templates/rules/shared/host-native-guidance.md.hbs +1 -1
  282. package/dist/templates/spec/spec-shaped.md.hbs +1 -1
  283. package/dist/templates/spec/spec.md.hbs +1 -1
  284. package/dist/templates/sprints/sprint-tasks.md.hbs +1 -1
  285. package/dist/templates/sprints/sprint.md.hbs +1 -1
  286. package/dist/templates/stories/user-story.md.hbs +1 -1
  287. package/dist/utils/constants.d.ts +8 -4
  288. package/dist/utils/constants.d.ts.map +1 -1
  289. package/dist/utils/constants.js +10 -4
  290. package/dist/utils/constants.js.map +1 -1
  291. package/docs/ARTIFACT_REVIEW.md +13 -13
  292. package/docs/CLI.md +258 -262
  293. package/docs/CROSS_RUNTIME_SETUP.md +33 -33
  294. package/docs/TROUBLESHOOTING.md +28 -28
  295. package/install.ps1 +2 -2
  296. package/install.sh +3 -3
  297. package/lib/host-packages/adapter-registry.json +5 -5
  298. package/lib/host-packages/capability-map.json +9 -9
  299. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  300. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  301. package/lib/host-packages/claude/openplanr/.openplanr-content.json +109 -89
  302. package/lib/host-packages/claude/openplanr/README.md +13 -17
  303. package/lib/host-packages/claude/openplanr/agents/planr-backend.md +49 -55
  304. package/lib/host-packages/claude/openplanr/agents/planr-database.md +56 -92
  305. package/lib/host-packages/claude/openplanr/agents/planr-designer.md +35 -51
  306. package/lib/host-packages/claude/openplanr/agents/planr-devops.md +37 -51
  307. package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +29 -52
  308. package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +24 -23
  309. package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +46 -58
  310. package/lib/host-packages/claude/openplanr/agents/planr-qa.md +4 -2
  311. package/lib/host-packages/claude/openplanr/agents/planr-specification.md +54 -51
  312. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +21 -65
  313. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +5 -6
  314. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +2 -3
  315. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +3 -4
  316. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +19 -64
  317. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +10 -12
  318. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +19 -62
  319. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +5 -6
  320. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +2 -3
  321. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +2 -3
  322. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +16 -59
  323. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +9 -11
  324. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +4 -4
  325. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  326. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +105 -55
  327. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +12 -7
  328. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  329. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  330. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  331. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +11 -4
  332. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  333. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +14 -14
  334. package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +9 -9
  335. package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +1 -1
  336. package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +4 -4
  337. package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +0 -1
  338. package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
  339. package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +6 -2
  340. package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +6 -2
  341. package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +0 -1
  342. package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
  343. package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +0 -1
  344. package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
  345. package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +0 -1
  346. package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
  347. package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +0 -1
  348. package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
  349. package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +1 -1
  350. package/lib/host-packages/claude/openplanr/skills/delegate/SKILL.md +7 -0
  351. package/lib/host-packages/claude/openplanr/skills/delegate/references/capsule-contract.md +16 -1
  352. package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +8 -6
  353. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
  354. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
  355. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
  356. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/context.mjs +84 -22
  357. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
  358. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
  359. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
  360. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
  361. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
  362. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +1 -1
  363. package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +1 -1
  364. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +4 -4
  365. package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +1 -1
  366. package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +1 -1
  367. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +4 -4
  368. package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +1 -1
  369. package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +1 -1
  370. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +4 -4
  371. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +15 -15
  372. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +1 -1
  373. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
  374. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +4 -4
  375. package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +9 -9
  376. package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +18 -16
  377. package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +2 -2
  378. package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +5 -3
  379. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +8 -2
  380. package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +5 -0
  381. package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +5 -0
  382. package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +16 -15
  383. package/lib/host-packages/claude/openplanr/skills/sprint/references/refinement-contract.md +5 -5
  384. package/lib/host-packages/claude/openplanr/skills/sprint/references/sprint-formats.md +8 -8
  385. package/lib/host-packages/claude/openplanr/skills/sprint/references/tracker-connections.md +70 -0
  386. package/lib/host-packages/claude/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
  387. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +5 -4
  388. package/lib/host-packages/claude/openplanr/skills/status/references/tracker-connections.md +70 -0
  389. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +11 -20
  390. package/lib/host-packages/claude/openplanr/skills/sync/references/tracker-connections.md +70 -0
  391. package/lib/host-packages/claude/openplanr/skills/sync/scripts/names.mjs +8 -0
  392. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +3 -2
  393. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +81 -61
  394. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  395. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +9 -9
  396. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +1 -1
  397. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +4 -4
  398. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +14 -14
  399. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +25 -4
  400. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +6 -1
  401. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +6 -1
  402. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +25 -4
  403. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +25 -4
  404. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +25 -4
  405. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +25 -4
  406. package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +1 -1
  407. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/capsule-contract.md +16 -1
  408. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +8 -6
  409. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/claude.mjs +11 -4
  410. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/native.mjs +1 -1
  411. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/backend-diagnostics.mjs +14 -48
  412. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/context.mjs +84 -22
  413. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/credentials.mjs +167 -0
  414. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/presentation.mjs +3 -2
  415. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-contract.mjs +5 -7
  416. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-preparation.mjs +2 -0
  417. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-record.mjs +2 -3
  418. package/lib/host-packages/cursor/openplanr/rules/planr-delegate.mdc +7 -0
  419. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +1 -1
  420. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +4 -4
  421. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +1 -1
  422. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +4 -4
  423. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +1 -1
  424. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +1 -1
  425. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +4 -4
  426. package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +1 -1
  427. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +1 -1
  428. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +1 -1
  429. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +1 -1
  430. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +4 -4
  431. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +15 -15
  432. package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +18 -16
  433. package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +9 -9
  434. package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +2 -2
  435. package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +5 -3
  436. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +5 -0
  437. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +8 -2
  438. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +5 -0
  439. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/refinement-contract.md +5 -5
  440. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/sprint-formats.md +8 -8
  441. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/tracker-connections.md +70 -0
  442. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/schemas/refinement.schema.json +3 -3
  443. package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +16 -15
  444. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/tracker-connections.md +70 -0
  445. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +5 -4
  446. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/tracker-connections.md +70 -0
  447. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/names.mjs +8 -0
  448. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +3 -2
  449. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +11 -20
  450. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  451. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +105 -55
  452. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +12 -7
  453. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  454. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  455. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  456. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +11 -4
  457. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  458. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  459. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  460. package/lib/host-packages/openai/openplanr/.openplanr-content.json +90 -70
  461. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  462. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +105 -55
  463. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +12 -7
  464. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  465. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  466. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  467. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +11 -4
  468. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  469. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +14 -14
  470. package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +9 -9
  471. package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +1 -1
  472. package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +4 -4
  473. package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +0 -1
  474. package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
  475. package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +6 -2
  476. package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +6 -2
  477. package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +0 -1
  478. package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
  479. package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +0 -1
  480. package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
  481. package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +0 -1
  482. package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
  483. package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +0 -1
  484. package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
  485. package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +1 -1
  486. package/lib/host-packages/openai/openplanr/skills/delegate/SKILL.md +7 -0
  487. package/lib/host-packages/openai/openplanr/skills/delegate/openplanr.skill.json +11 -0
  488. package/lib/host-packages/openai/openplanr/skills/delegate/references/capsule-contract.md +16 -1
  489. package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +8 -6
  490. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
  491. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
  492. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
  493. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/context.mjs +84 -22
  494. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
  495. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
  496. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
  497. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
  498. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
  499. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +1 -1
  500. package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +1 -1
  501. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +4 -4
  502. package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +1 -1
  503. package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +1 -1
  504. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +4 -4
  505. package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +1 -1
  506. package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +1 -1
  507. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +4 -4
  508. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +15 -15
  509. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +1 -1
  510. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
  511. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +4 -4
  512. package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +9 -9
  513. package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +18 -16
  514. package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +2 -2
  515. package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +5 -3
  516. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +8 -2
  517. package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +5 -0
  518. package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +5 -0
  519. package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +16 -15
  520. package/lib/host-packages/openai/openplanr/skills/sprint/openplanr.skill.json +11 -0
  521. package/lib/host-packages/openai/openplanr/skills/sprint/references/refinement-contract.md +5 -5
  522. package/lib/host-packages/openai/openplanr/skills/sprint/references/sprint-formats.md +8 -8
  523. package/lib/host-packages/openai/openplanr/skills/sprint/references/tracker-connections.md +70 -0
  524. package/lib/host-packages/openai/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
  525. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +5 -4
  526. package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +11 -0
  527. package/lib/host-packages/openai/openplanr/skills/status/references/tracker-connections.md +70 -0
  528. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +11 -20
  529. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +22 -0
  530. package/lib/host-packages/openai/openplanr/skills/sync/references/tracker-connections.md +70 -0
  531. package/lib/host-packages/openai/openplanr/skills/sync/scripts/names.mjs +8 -0
  532. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +3 -2
  533. package/lib/integrations.mjs +3 -2
  534. package/lib/names.d.mts +4 -0
  535. package/lib/names.mjs +8 -0
  536. package/lib/planning-folder.d.mts +14 -0
  537. package/lib/planning-folder.mjs +40 -0
  538. package/package.json +5 -5
  539. package/dist/dashboard/assets/index-D7R6tnlX.js.map +0 -1
  540. package/dist/services/connectors/adapters/business-metrics.d.ts +0 -5
  541. package/dist/services/connectors/adapters/business-metrics.d.ts.map +0 -1
  542. package/dist/services/connectors/adapters/business-metrics.js +0 -41
  543. package/dist/services/connectors/adapters/business-metrics.js.map +0 -1
  544. package/dist/services/connectors/adapters/deployment-health.d.ts +0 -18
  545. package/dist/services/connectors/adapters/deployment-health.d.ts.map +0 -1
  546. package/dist/services/connectors/adapters/deployment-health.js +0 -67
  547. package/dist/services/connectors/adapters/deployment-health.js.map +0 -1
  548. package/dist/services/connectors/adapters/github.d.ts +0 -5
  549. package/dist/services/connectors/adapters/github.d.ts.map +0 -1
  550. package/dist/services/connectors/adapters/github.js +0 -31
  551. package/dist/services/connectors/adapters/github.js.map +0 -1
  552. package/dist/services/connectors/adapters/linear-jira.d.ts +0 -5
  553. package/dist/services/connectors/adapters/linear-jira.d.ts.map +0 -1
  554. package/dist/services/connectors/adapters/linear-jira.js +0 -26
  555. package/dist/services/connectors/adapters/linear-jira.js.map +0 -1
  556. package/dist/services/connectors/adapters/posthog.d.ts +0 -5
  557. package/dist/services/connectors/adapters/posthog.d.ts.map +0 -1
  558. package/dist/services/connectors/adapters/posthog.js +0 -31
  559. package/dist/services/connectors/adapters/posthog.js.map +0 -1
  560. package/dist/services/connectors/adapters/sentry.d.ts +0 -5
  561. package/dist/services/connectors/adapters/sentry.d.ts.map +0 -1
  562. package/dist/services/connectors/adapters/sentry.js +0 -31
  563. package/dist/services/connectors/adapters/sentry.js.map +0 -1
  564. package/dist/services/connectors/checkpoint-custody.d.ts +0 -45
  565. package/dist/services/connectors/checkpoint-custody.d.ts.map +0 -1
  566. package/dist/services/connectors/checkpoint-custody.js +0 -496
  567. package/dist/services/connectors/checkpoint-custody.js.map +0 -1
  568. package/dist/services/connectors/connector-registry.d.ts +0 -144
  569. package/dist/services/connectors/connector-registry.d.ts.map +0 -1
  570. package/dist/services/connectors/connector-registry.js +0 -423
  571. package/dist/services/connectors/connector-registry.js.map +0 -1
  572. package/dist/services/connectors/connector-runtime.d.ts +0 -208
  573. package/dist/services/connectors/connector-runtime.d.ts.map +0 -1
  574. package/dist/services/connectors/connector-runtime.js +0 -1305
  575. package/dist/services/connectors/connector-runtime.js.map +0 -1
  576. package/dist/services/connectors/credential-custody.d.ts +0 -96
  577. package/dist/services/connectors/credential-custody.d.ts.map +0 -1
  578. package/dist/services/connectors/credential-custody.js +0 -390
  579. package/dist/services/connectors/credential-custody.js.map +0 -1
  580. package/dist/templates/voice/standup.md.hbs +0 -20
  581. /package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
  582. /package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
  583. /package/lib/host-packages/openai/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
@@ -52,6 +52,10 @@ import {
52
52
  readJson,
53
53
  reviewDigest
54
54
  } from "./design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs";
55
+ import {
56
+ CLI_COMMAND,
57
+ PLANNING_FOLDER
58
+ } from "./design-owner-custody.mjs";
55
59
  import {
56
60
  planrHome
57
61
  } from "./design-runtime-home.mjs";
@@ -410,8 +414,8 @@ ${fence}`;
410
414
  var { createDesignReviewExport, serializeDesignReviewExport } = reviewExportTools();
411
415
 
412
416
  // packages/design/lib/design/review.mjs
413
- import { existsSync as existsSync4, readFileSync as readFileSync4 } from "node:fs";
414
- import { dirname as dirname4, join as join4, relative, resolve as resolve3 } from "node:path";
417
+ import { existsSync as existsSync5, readFileSync as readFileSync4 } from "node:fs";
418
+ import { dirname as dirname4, join as join5, relative, resolve as resolve3 } from "node:path";
415
419
 
416
420
  // packages/artifact/lib/artifact/review-server.mjs
417
421
  import { existsSync, lstatSync, readdirSync, readFileSync, rmSync } from "node:fs";
@@ -420,8 +424,12 @@ import { dirname, isAbsolute, join, resolve } from "node:path";
420
424
  import { fileURLToPath } from "node:url";
421
425
  var here = dirname(fileURLToPath(new URL("./runtime/packages/artifact/lib/artifact/review-server.mjs", import.meta.url).href));
422
426
  var STAGE_RUNTIME_PATH = join(here, "..", "..", "templates", "artifact-review-stage.js");
423
- var ARTIFACT_REVIEW_SERVER_VERSION = 2;
427
+ var ARTIFACT_REVIEW_SERVER_VERSION = 3;
424
428
  var ARTIFACT_REVIEW_SERVER_KIND = "artifact-review";
429
+ var CONTROL_HEADER = "x-openplanr-control";
430
+ var CONTROLLABLE_SERVER_VERSIONS = /* @__PURE__ */ new Set([2, ARTIFACT_REVIEW_SERVER_VERSION]);
431
+ var EXPORT_ONLY_SERVER_VERSIONS = /* @__PURE__ */ new Set([1]);
432
+ var AUTHORIZATION_CONTROL_VERSIONS = /* @__PURE__ */ new Set([1, 2]);
425
433
  var CONTROL_WINDOW_BYTES = 64 * 1024 * 1024;
426
434
  var ARTIFACT_REVIEW_MAX_CONTROL_BYTES = Math.ceil((MAX_ARTIFACT_HTML_BYTES * 2 + ARTIFACT_REVIEW_MAX_STATE_BYTES) / CONTROL_WINDOW_BYTES) * CONTROL_WINDOW_BYTES;
427
435
  var ARTIFACT_REVIEW_MAX_STATE_BYTES2 = ARTIFACT_REVIEW_MAX_STATE_BYTES;
@@ -477,6 +485,12 @@ var PERMISSIONS_POLICY = [
477
485
  function artifactError(code, message, fix = "", details) {
478
486
  return new PipelineError(code, message, fix, details);
479
487
  }
488
+ function artifactReviewControlHeaders(controlToken) {
489
+ return { [CONTROL_HEADER]: controlToken };
490
+ }
491
+ function stateControlHeaders(state) {
492
+ return AUTHORIZATION_CONTROL_VERSIONS.has(state.serverVersion) ? { authorization: `Bearer ${state.controlToken}` } : artifactReviewControlHeaders(state.controlToken);
493
+ }
480
494
  function reviewStateDir(env = process.env) {
481
495
  return join(planrHome(env), "artifact-daemon");
482
496
  }
@@ -559,9 +573,9 @@ function parseRequestPath(rawUrl) {
559
573
  });
560
574
  return { segments, trailingSlash };
561
575
  }
562
- function bearerToken(req) {
563
- const value = req.headers?.authorization;
564
- return typeof value === "string" && value.startsWith("Bearer ") ? value.slice(7) : "";
576
+ function presentedControlToken(req) {
577
+ const value = req.headers?.[CONTROL_HEADER];
578
+ return typeof value === "string" ? value : "";
565
579
  }
566
580
  function cloneAndValidateEnvelope(envelope) {
567
581
  let cloned;
@@ -871,7 +885,7 @@ function createArtifactReviewServer({
871
885
  return;
872
886
  }
873
887
  if (internal) {
874
- if (!timingSafeTokenEqual(bearerToken(req), controlToken)) {
888
+ if (!timingSafeTokenEqual(presentedControlToken(req), controlToken)) {
875
889
  sendJson(res, 403, { ok: false, error: "forbidden" });
876
890
  return;
877
891
  }
@@ -1445,7 +1459,7 @@ function createArtifactReviewServer({
1445
1459
  return controller;
1446
1460
  }
1447
1461
  function validState(value, requestedPort, { allowLegacy = false } = {}) {
1448
- return value?.schemaVersion === "1.0.0" && value.kind === ARTIFACT_REVIEW_SERVER_KIND && (value.serverVersion === ARTIFACT_REVIEW_SERVER_VERSION || allowLegacy && value.serverVersion === 1) && Number.isInteger(value.pid) && value.pid > 0 && Number.isInteger(value.port) && value.port > 0 && value.port <= 65535 && (requestedPort === 0 || value.port === requestedPort) && isCapabilityToken(value.instanceId, { bytes: SESSION_ID_BYTES }) && isCapabilityToken(value.controlToken, { bytes: CONTROL_TOKEN_BYTES });
1462
+ return value?.schemaVersion === "1.0.0" && value.kind === ARTIFACT_REVIEW_SERVER_KIND && (CONTROLLABLE_SERVER_VERSIONS.has(value.serverVersion) || allowLegacy && EXPORT_ONLY_SERVER_VERSIONS.has(value.serverVersion)) && Number.isInteger(value.pid) && value.pid > 0 && Number.isInteger(value.port) && value.port > 0 && value.port <= 65535 && (requestedPort === 0 || value.port === requestedPort) && isCapabilityToken(value.instanceId, { bytes: SESSION_ID_BYTES }) && isCapabilityToken(value.controlToken, { bytes: CONTROL_TOKEN_BYTES });
1449
1463
  }
1450
1464
  function readReviewServerState(path) {
1451
1465
  try {
@@ -1456,7 +1470,7 @@ function readReviewServerState(path) {
1456
1470
  throw artifactError(
1457
1471
  ARTIFACT_ERROR_CODES.LOOPBACK_STATE,
1458
1472
  "Local Studio owner state is unsafe or malformed. The original record was preserved.",
1459
- "Run planr doctor and recover the owner record before starting or stopping this service."
1473
+ `Run ${CLI_COMMAND} doctor and recover the owner record before starting or stopping this service.`
1460
1474
  );
1461
1475
  }
1462
1476
  }
@@ -1469,7 +1483,7 @@ async function controlRequest(descriptor, path, { method, body, fetchImpl } = {}
1469
1483
  const response = await fetchImpl(`http://${LOOPBACK_HOST}:${descriptor.state.port}${path}`, {
1470
1484
  method,
1471
1485
  headers: {
1472
- authorization: `Bearer ${descriptor.state.controlToken}`,
1486
+ ...stateControlHeaders(descriptor.state),
1473
1487
  ...body === void 0 ? {} : { "content-type": "application/json" }
1474
1488
  },
1475
1489
  ...body === void 0 ? {} : { body: JSON.stringify(body) },
@@ -1533,6 +1547,34 @@ async function stopArtifactReviewServer(instanceId, { env = process.env, fetchIm
1533
1547
  return controlRequest({ state }, "/internal/v1/shutdown", { method: "POST", fetchImpl });
1534
1548
  }
1535
1549
 
1550
+ // packages/protocol/src/planning-folder.mjs
1551
+ import { existsSync as existsSync2, readdirSync as readdirSync2, statSync } from "node:fs";
1552
+ import { join as join2 } from "node:path";
1553
+ var FOREIGN_FILES = Object.freeze(["planr.config.json", "board.html"]);
1554
+ var GOAL_DIRECTORIES = Object.freeze(["tasks", "plans"]);
1555
+ var isDirectory = (path) => existsSync2(path) && statSync(path).isDirectory();
1556
+ function foreignPlanningFolderSigns(projectRoot2) {
1557
+ const folder = join2(projectRoot2, PLANNING_FOLDER);
1558
+ if (!isDirectory(folder) || existsSync2(join2(folder, "config.json"))) return [];
1559
+ const signs = FOREIGN_FILES.filter((name) => existsSync2(join2(folder, name)));
1560
+ for (const name of GOAL_DIRECTORIES) {
1561
+ const directory = join2(folder, name);
1562
+ if (isDirectory(directory) && readdirSync2(directory).some((entry) => entry.endsWith("-goal.md")))
1563
+ signs.push(`*-goal.md files in ${name}`);
1564
+ }
1565
+ return signs;
1566
+ }
1567
+ function planningFolderConflict(projectRoot2) {
1568
+ const signs = foreignPlanningFolderSigns(projectRoot2);
1569
+ if (signs.length === 0) return null;
1570
+ return Object.freeze({
1571
+ code: "E_PLANNING_FOLDER_FOREIGN",
1572
+ problem: `The ${PLANNING_FOLDER} folder in this project wasn't created by OpenPlanr: it has ${signs.join(", ")} and no OpenPlanr config.json. OpenPlanr wrote nothing there.`,
1573
+ fix: `Move or rename that folder, or use ${CLI_COMMAND} in a project without it, then retry.`,
1574
+ signs: Object.freeze(signs)
1575
+ });
1576
+ }
1577
+
1536
1578
  // packages/design/lib/design/design-plan-handoff.mjs
1537
1579
  var clone = (value) => JSON.parse(canonicalizeJson(value));
1538
1580
  function prepareDesignPlanHandoff(handoff, { subject } = {}) {
@@ -1571,7 +1613,7 @@ function prepareDesignPlanHandoff(handoff, { subject } = {}) {
1571
1613
  // packages/design/lib/design/implementation-handoff.mjs
1572
1614
  import { createHash, randomUUID } from "node:crypto";
1573
1615
  import {
1574
- existsSync as existsSync2,
1616
+ existsSync as existsSync3,
1575
1617
  mkdirSync,
1576
1618
  readFileSync as readFileSync2,
1577
1619
  realpathSync,
@@ -1579,7 +1621,7 @@ import {
1579
1621
  rmSync as rmSync2,
1580
1622
  writeFileSync
1581
1623
  } from "node:fs";
1582
- import { dirname as dirname2, join as join2, resolve as resolve2, sep } from "node:path";
1624
+ import { dirname as dirname2, join as join3, resolve as resolve2, sep } from "node:path";
1583
1625
 
1584
1626
  // packages/design/lib/design/implementation-handoff-markdown.mjs
1585
1627
  var line = (value) => String(value).replaceAll("\r\n", "\n").replaceAll("\r", "\n").trim().replaceAll("\n", " ").replace(/([\\`*_[\]<>#|])/gu, "\\$1");
@@ -1832,19 +1874,19 @@ function createRepositorySourceResolver(root) {
1832
1874
  };
1833
1875
  }
1834
1876
  function implementationHandoffPaths(root) {
1835
- const directory = join2(resolve2(root), "implementation-handoff");
1877
+ const directory = join3(resolve2(root), "implementation-handoff");
1836
1878
  return Object.freeze({
1837
1879
  directory,
1838
- draftJson: join2(directory, "draft.json"),
1839
- draftMarkdown: join2(directory, "draft.md"),
1840
- journal: join2(directory, "draft-publication.json"),
1841
- current: join2(directory, "current.json"),
1842
- history: join2(directory, "versions")
1880
+ draftJson: join3(directory, "draft.json"),
1881
+ draftMarkdown: join3(directory, "draft.md"),
1882
+ journal: join3(directory, "draft-publication.json"),
1883
+ current: join3(directory, "current.json"),
1884
+ history: join3(directory, "versions")
1843
1885
  });
1844
1886
  }
1845
1887
  function recoverImplementationHandoffDraft(root) {
1846
1888
  const paths = implementationHandoffPaths(root);
1847
- if (!existsSync2(paths.journal)) return false;
1889
+ if (!existsSync3(paths.journal)) return false;
1848
1890
  const journal = JSON.parse(readFileSync2(paths.journal, "utf8"));
1849
1891
  const value = assertImplementationHandoffProjection(journal.package);
1850
1892
  if (journal.markdown !== value.markdown)
@@ -1857,14 +1899,14 @@ function recoverImplementationHandoffDraft(root) {
1857
1899
  function readImplementationHandoffDraft(root, { allowMissing = true } = {}) {
1858
1900
  const paths = implementationHandoffPaths(root);
1859
1901
  recoverImplementationHandoffDraft(root);
1860
- if (!existsSync2(paths.draftJson)) {
1902
+ if (!existsSync3(paths.draftJson)) {
1861
1903
  if (allowMissing) return null;
1862
1904
  throw new Error("No implementation handoff draft exists.");
1863
1905
  }
1864
1906
  const value = assertImplementationHandoffProjection(
1865
1907
  JSON.parse(readFileSync2(paths.draftJson, "utf8"))
1866
1908
  );
1867
- if (!existsSync2(paths.draftMarkdown))
1909
+ if (!existsSync3(paths.draftMarkdown))
1868
1910
  throw new Error("Implementation handoff Markdown is missing.");
1869
1911
  if (readFileSync2(paths.draftMarkdown, "utf8") !== value.markdown)
1870
1912
  throw new Error("Implementation handoff JSON and Markdown projections differ.");
@@ -1899,15 +1941,15 @@ function importImplementationHandoffPackage(input, { resolveSource } = {}) {
1899
1941
  // packages/design/lib/design/implementation-handoff-approval.mjs
1900
1942
  import { createHash as createHash2, randomUUID as randomUUID2 } from "node:crypto";
1901
1943
  import {
1902
- existsSync as existsSync3,
1944
+ existsSync as existsSync4,
1903
1945
  mkdirSync as mkdirSync2,
1904
- readdirSync as readdirSync2,
1946
+ readdirSync as readdirSync3,
1905
1947
  readFileSync as readFileSync3,
1906
1948
  renameSync as renameSync2,
1907
1949
  rmSync as rmSync3,
1908
1950
  writeFileSync as writeFileSync2
1909
1951
  } from "node:fs";
1910
- import { dirname as dirname3, join as join3 } from "node:path";
1952
+ import { dirname as dirname3, join as join4 } from "node:path";
1911
1953
  var DIGEST2 = /^sha256:[a-f0-9]{64}$/u;
1912
1954
  var ID = /^[A-Za-z0-9][A-Za-z0-9._:-]*$/u;
1913
1955
  var APPROVE_CAPABILITY = "design:implementation-handoff:approve";
@@ -1996,20 +2038,20 @@ function implementationHandoffApprovalPaths(root) {
1996
2038
  const base = implementationHandoffPaths(root);
1997
2039
  return Object.freeze({
1998
2040
  ...base,
1999
- events: join3(base.directory, "events"),
2000
- journal: join3(base.directory, "lifecycle-publication.json")
2041
+ events: join4(base.directory, "events"),
2042
+ journal: join4(base.directory, "lifecycle-publication.json")
2001
2043
  });
2002
2044
  }
2003
2045
  function archivePaths(root, value) {
2004
- const directory = join3(implementationHandoffPaths(root).history, packageKey(value));
2046
+ const directory = join4(implementationHandoffPaths(root).history, packageKey(value));
2005
2047
  return {
2006
2048
  directory,
2007
- json: join3(directory, "handoff.json"),
2008
- markdown: join3(directory, "handoff.md")
2049
+ json: join4(directory, "handoff.json"),
2050
+ markdown: join4(directory, "handoff.md")
2009
2051
  };
2010
2052
  }
2011
2053
  function eventPath(root, requestId) {
2012
- return join3(implementationHandoffApprovalPaths(root).events, `${requestKey(requestId)}.json`);
2054
+ return join4(implementationHandoffApprovalPaths(root).events, `${requestKey(requestId)}.json`);
2013
2055
  }
2014
2056
  function readJson2(path, fallback = void 0) {
2015
2057
  try {
@@ -2043,13 +2085,13 @@ function pointerFor(value, status, eventId, extra = {}) {
2043
2085
  }
2044
2086
  function writeLifecycleJournal(root, journal) {
2045
2087
  const paths = implementationHandoffApprovalPaths(root);
2046
- if (existsSync3(paths.journal)) recoverImplementationHandoffApproval(root);
2088
+ if (existsSync4(paths.journal)) recoverImplementationHandoffApproval(root);
2047
2089
  atomicText2(paths.journal, jsonBytes2(journal));
2048
2090
  return recoverImplementationHandoffApproval(root);
2049
2091
  }
2050
2092
  function recoverImplementationHandoffApproval(root) {
2051
2093
  const paths = implementationHandoffApprovalPaths(root);
2052
- if (!existsSync3(paths.journal)) return false;
2094
+ if (!existsSync4(paths.journal)) return false;
2053
2095
  const journal = readJson2(paths.journal);
2054
2096
  if (journal.kind !== "openplanr-design-implementation-handoff-lifecycle-publication" || journal.schemaVersion !== "1.0.0")
2055
2097
  throw new TypeError("The implementation handoff lifecycle journal is invalid.");
@@ -2080,16 +2122,16 @@ function readImplementationHandoffVersion(root, identity) {
2080
2122
  function listImplementationHandoffHistory(root) {
2081
2123
  recoverImplementationHandoffApproval(root);
2082
2124
  const directory = implementationHandoffPaths(root).history;
2083
- if (!existsSync3(directory)) return [];
2084
- return readdirSync2(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map(
2085
- (entry) => assertImplementationHandoffProjection(readJson2(join3(directory, entry.name, "handoff.json")))
2125
+ if (!existsSync4(directory)) return [];
2126
+ return readdirSync3(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map(
2127
+ (entry) => assertImplementationHandoffProjection(readJson2(join4(directory, entry.name, "handoff.json")))
2086
2128
  ).sort((left, right) => left.version - right.version || left.id.localeCompare(right.id));
2087
2129
  }
2088
2130
  function readImplementationHandoffLifecycle(root) {
2089
2131
  recoverImplementationHandoffApproval(root);
2090
2132
  const paths = implementationHandoffApprovalPaths(root);
2091
2133
  const current = readJson2(paths.current, null);
2092
- const events = existsSync3(paths.events) ? readdirSync2(paths.events).filter((name) => name.endsWith(".json")).map((name) => readJson2(join3(paths.events, name))).sort(
2134
+ const events = existsSync4(paths.events) ? readdirSync3(paths.events).filter((name) => name.endsWith(".json")).map((name) => readJson2(join4(paths.events, name))).sort(
2093
2135
  (left, right) => left.at.localeCompare(right.at) || left.eventId.localeCompare(right.eventId)
2094
2136
  ) : [];
2095
2137
  return Object.freeze({ current, history: listImplementationHandoffHistory(root), events });
@@ -2561,7 +2603,7 @@ function validateState(value, current) {
2561
2603
  function projectRoot(root) {
2562
2604
  let candidate = root;
2563
2605
  while (true) {
2564
- if (existsSync4(join4(candidate, ".planr")) || existsSync4(join4(candidate, ".git")))
2606
+ if (existsSync5(join5(candidate, PLANNING_FOLDER)) || existsSync5(join5(candidate, ".git")))
2565
2607
  return candidate;
2566
2608
  const parent = dirname4(candidate);
2567
2609
  if (parent === candidate) return root;
@@ -2606,7 +2648,7 @@ function proposeImplementationPackage(file, env) {
2606
2648
  designSpecPath(current.root),
2607
2649
  ...(current.sourceFiles ?? []).map((path) => resolve3(current.root, path))
2608
2650
  ])
2609
- ].filter((path) => existsSync4(path));
2651
+ ].filter((path) => existsSync5(path));
2610
2652
  const sources = paths.map((path, index) => {
2611
2653
  const logicalPath = relative(repository, path).replaceAll("\\", "/");
2612
2654
  const extension = logicalPath.split(".").pop()?.toLowerCase();
@@ -2652,7 +2694,10 @@ function proposeImplementationPackage(file, env) {
2652
2694
  };
2653
2695
  }
2654
2696
  async function persistDesignTaste(current, state) {
2655
- const path = join4(projectRoot(current.root), ".planr/design-system/taste.json");
2697
+ const root = projectRoot(current.root);
2698
+ const conflict = planningFolderConflict(root);
2699
+ if (conflict) throw new PipelineError(conflict.code, conflict.problem, conflict.fix);
2700
+ const path = join5(root, `${PLANNING_FOLDER}/design-system/taste.json`);
2656
2701
  const release = await acquireStartLock(`${path}.lock`);
2657
2702
  try {
2658
2703
  const taste = readJson(path, { designs: {} });
@@ -2693,7 +2738,7 @@ async function saveDesignState(file, { state, revision, stateVersion }) {
2693
2738
  throw Object.assign(new Error("The design changed. Reload before saving feedback."), {
2694
2739
  statusCode: 409
2695
2740
  });
2696
- const path = join4(current.root, ".design/studio-state.json");
2741
+ const path = join5(current.root, ".design/studio-state.json");
2697
2742
  const release = await acquireStartLock(`${path}.lock`);
2698
2743
  try {
2699
2744
  current = currentDesign(file);
@@ -2731,7 +2776,7 @@ var readBody = async (req) => JSON.parse(await readRequestBody(req, { maxBytes:
2731
2776
  var readImplementationBody = async (req) => JSON.parse(await readRequestBody(req, { maxBytes: 5 * 1024 * 1024, encoding: "utf8" }));
2732
2777
  async function startDesignReview(file, options = {}) {
2733
2778
  const { root } = currentDesign(file);
2734
- const release = await acquireStartLock(join4(root, ".design/start.lock"));
2779
+ const release = await acquireStartLock(join5(root, ".design/start.lock"));
2735
2780
  try {
2736
2781
  return await startDesignReviewUnlocked(file, options);
2737
2782
  } finally {
@@ -2752,7 +2797,7 @@ async function startDesignReviewUnlocked(file, {
2752
2797
  let current = currentDesign(file);
2753
2798
  const applyInitialView = async () => {
2754
2799
  if (view === void 0) return;
2755
- const saved = readJson(join4(current.root, ".design/studio-state.json"), {
2800
+ const saved = readJson(join5(current.root, ".design/studio-state.json"), {
2756
2801
  state: {},
2757
2802
  stateVersion: 0
2758
2803
  });
@@ -2762,7 +2807,7 @@ async function startDesignReviewUnlocked(file, {
2762
2807
  state: { ...saved.state, view }
2763
2808
  });
2764
2809
  };
2765
- const stateFile = join4(current.root, ".design/server.json");
2810
+ const stateFile = join5(current.root, ".design/server.json");
2766
2811
  const old = readJson(stateFile, null);
2767
2812
  const services = (await listArtifactReviewServers({ env, fetchImpl })).filter(
2768
2813
  (service) => service.kind === "design" && service.projectRoot === current.root
@@ -2817,7 +2862,12 @@ async function startDesignReviewUnlocked(file, {
2817
2862
  server = createArtifactReviewServer({
2818
2863
  env,
2819
2864
  serverMetadata: { kind: "design", projectRoot: current.root },
2820
- prepareSource: (options) => prepareArtifactDocument({ ...options, allowLocalForms: true }),
2865
+ prepareSource: (options) => prepareArtifactDocument({
2866
+ ...options,
2867
+ allowLocalForms: true,
2868
+ prototypeState: true,
2869
+ screenId: current.entries.find((entry) => entry.artifactId === options.artifactId)?.screenId ?? options.artifactId
2870
+ }),
2821
2871
  async refreshSession(session) {
2822
2872
  current = currentDesign(file);
2823
2873
  if (session.designRevision === current.revision) return;
@@ -2839,7 +2889,7 @@ async function startDesignReviewUnlocked(file, {
2839
2889
  session.designRevision = current.revision;
2840
2890
  },
2841
2891
  renderDocument({ model, base }) {
2842
- const state = readJson(join4(current.root, ".design/studio-state.json"), {
2892
+ const state = readJson(join5(current.root, ".design/studio-state.json"), {
2843
2893
  state: {}
2844
2894
  }).state;
2845
2895
  const stalePins = readDesignFeedback(file, env).pins.filter((pin) => pin.stale);
@@ -2892,7 +2942,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
2892
2942
  respond(res, 200, readDesignHandoff(file, { env }));
2893
2943
  } else if (route === "design-implementation-handoff" && req.method === "GET") {
2894
2944
  const design = currentDesign(file);
2895
- const unlock = await acquireStartLock(join4(design.root, ".design/render.lock"));
2945
+ const unlock = await acquireStartLock(join5(design.root, ".design/render.lock"));
2896
2946
  try {
2897
2947
  const root = dirname4(designSpecPath(design.root));
2898
2948
  let proposal = null;
@@ -2938,7 +2988,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
2938
2988
  ].includes(input.action))
2939
2989
  throw new Error("Unknown implementation package action.");
2940
2990
  const initial = currentDesign(file);
2941
- const unlock = await acquireStartLock(join4(initial.root, ".design/render.lock"));
2991
+ const unlock = await acquireStartLock(join5(initial.root, ".design/render.lock"));
2942
2992
  try {
2943
2993
  const design = currentDesign(file);
2944
2994
  const root = dirname4(designSpecPath(design.root));
@@ -3103,7 +3153,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3103
3153
  else if (action === "recovery")
3104
3154
  result = await exportDesignShareRecovery(file, {
3105
3155
  ...options,
3106
- output: join4(
3156
+ output: join5(
3107
3157
  env.HOME ?? process.env.HOME,
3108
3158
  "Downloads",
3109
3159
  `openplanr-design-recovery-${Date.now()}.json`
@@ -3112,7 +3162,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3112
3162
  else result = await manageDesignShare(file, action, options);
3113
3163
  respond(res, 200, result);
3114
3164
  } else if (route === "design-status" && req.method === "GET") {
3115
- const ready = readJson(join4(current.root, ".design/browser-ready.json"), null);
3165
+ const ready = readJson(join5(current.root, ".design/browser-ready.json"), null);
3116
3166
  respond(res, 200, {
3117
3167
  ok: true,
3118
3168
  documentId: current.document.id,
@@ -3123,7 +3173,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3123
3173
  });
3124
3174
  } else if (route === "design-state" && req.method === "GET") {
3125
3175
  respond(res, 200, {
3126
- ...readJson(join4(current.root, ".design/studio-state.json"), {
3176
+ ...readJson(join5(current.root, ".design/studio-state.json"), {
3127
3177
  state: {},
3128
3178
  stateVersion: 0
3129
3179
  }),
@@ -3136,7 +3186,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3136
3186
  const loadedArtifacts = new Set(Array.isArray(value?.artifacts) ? value.artifacts : []);
3137
3187
  if (value.revision !== current.revision || value.status !== "ready" || !Array.isArray(value.artifacts) || value.artifacts.length === 0 || loadedArtifacts.size !== value.artifacts.length || value.artifacts.some((id) => !current.entries.some((entry) => entry.artifactId === id)))
3138
3188
  throw new Error("Browser readiness must identify loaded design artboards.");
3139
- atomicJson(join4(current.root, ".design/browser-ready.json"), {
3189
+ atomicJson(join5(current.root, ".design/browser-ready.json"), {
3140
3190
  status: "ready",
3141
3191
  revision: current.revision,
3142
3192
  artifacts: value.artifacts,
@@ -3145,7 +3195,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3145
3195
  });
3146
3196
  respond(res, 200, { ok: true });
3147
3197
  } else if (route === "design-export" && req.method === "GET") {
3148
- const state = readJson(join4(current.root, ".design/studio-state.json"), {
3198
+ const state = readJson(join5(current.root, ".design/studio-state.json"), {
3149
3199
  state: {}
3150
3200
  }).state;
3151
3201
  res.writeHead(200, {
@@ -3179,7 +3229,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3179
3229
  const registered = await fetchImpl(`${origin}/internal/v1/sessions`, {
3180
3230
  method: "POST",
3181
3231
  headers: {
3182
- authorization: `Bearer ${server.controlToken}`,
3232
+ ...artifactReviewControlHeaders(server.controlToken),
3183
3233
  "content-type": "application/json"
3184
3234
  },
3185
3235
  body: JSON.stringify({
@@ -3269,8 +3319,8 @@ async function resolveDesignPins(file, { pinIds, summary, env = process.env }) {
3269
3319
  "One or more requested pins do not exist."
3270
3320
  );
3271
3321
  writeArtifactReviewState(path, createReviewLedger({ ...ledger, reviews: revisions }));
3272
- const history = readJson(join4(current.root, ".design/review-history.json"), []);
3273
- atomicJson(join4(current.root, ".design/review-history.json"), [
3322
+ const history = readJson(join5(current.root, ".design/review-history.json"), []);
3323
+ atomicJson(join5(current.root, ".design/review-history.json"), [
3274
3324
  ...history,
3275
3325
  {
3276
3326
  revision: current.revision,
@@ -20,6 +20,7 @@ import {
20
20
  createChunkedWorkspaceClient
21
21
  } from "./design-chunked-workspace-client.mjs";
22
22
  import {
23
+ PLANNING_FOLDER,
23
24
  ensurePrivateDirectory,
24
25
  readCustody,
25
26
  writeCustody
@@ -80,7 +81,7 @@ function custodyLocation(file, options = {}, { allowMissing = false } = {}) {
80
81
  const root = resolve(options.custodyRoot ?? join(planrHome(env), "design-shares"));
81
82
  let project = current.root;
82
83
  for (let candidate = current.root; dirname(candidate) !== candidate; candidate = dirname(candidate)) {
83
- if (existsSync(join(candidate, ".git")) || existsSync(join(candidate, ".planr"))) {
84
+ if (existsSync(join(candidate, ".git")) || existsSync(join(candidate, PLANNING_FOLDER))) {
84
85
  project = candidate;
85
86
  break;
86
87
  }
@@ -91,7 +92,7 @@ ${current.document.id}`);
91
92
  const within = relative(project, root);
92
93
  if ((!allowMissing || existsSync(path)) && (within === "" || !within.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) && within !== ".." && !isAbsolute(within)))
93
94
  throw new Error(
94
- "Design owner credentials must be stored outside the project. Set PLANR_HOME to a private user-level directory."
95
+ "Design owner keys must be stored outside the project. Set PLANR_HOME to a private user-level directory."
95
96
  );
96
97
  const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join(realpathSync(env.HOME || homedir()), ".openplanr", "design-shares", `${key}.json`) : null;
97
98
  return { root, path, current, legacyPath };
@@ -684,7 +685,7 @@ function inside(base, candidate) {
684
685
  return rel === "" || !rel.startsWith("..") && !isAbsolute2(rel);
685
686
  }
686
687
  function parseablePlanrConfig(root) {
687
- const path = join2(root, ".planr", "config.json");
688
+ const path = join2(root, PLANNING_FOLDER, "config.json");
688
689
  if (!existsSync3(path)) return false;
689
690
  try {
690
691
  if (lstatSync2(path).isSymbolicLink()) return false;
@@ -813,7 +814,11 @@ function resolveArtifactReviewDestination({
813
814
  }
814
815
  const projectRoot = findArtifactProjectRoot(cwd, { env });
815
816
  if (projectRoot) {
816
- const directory2 = assertSafeDestination(projectRoot, [".planr", "artifacts", artifactId]);
817
+ const directory2 = assertSafeDestination(projectRoot, [
818
+ PLANNING_FOLDER,
819
+ "artifacts",
820
+ artifactId
821
+ ]);
817
822
  return Object.freeze({
818
823
  kind: "project",
819
824
  artifactId,
@@ -1780,10 +1785,10 @@ async function importDesignShareRecovery(file, { input, ...options } = {}) {
1780
1785
  throw new Error("Recovery belongs to a different design.");
1781
1786
  if (record && (record.custody.id !== custody.id || JSON.stringify(record.custody.ownerPublicKey) !== JSON.stringify(custody.ownerPublicKey)))
1782
1787
  throw new Error(
1783
- "This design already has different owner credentials. Recovery will not overwrite them."
1788
+ "This design already has different owner keys. Recovery will not overwrite them."
1784
1789
  );
1785
1790
  if (record && record.custody.version > custody.version)
1786
- throw new Error("This recovery file is older than the locally saved owner credentials.");
1791
+ throw new Error("This recovery file is older than the locally saved owner keys.");
1787
1792
  if (!custody.pendingCreate && !recovered.deleted && !recovered.revoked) {
1788
1793
  await getWorkspace(custody, { fetchImpl: options.fetchImpl });
1789
1794
  const bundle = await decryptWorkspaceRevision(custody, custody.currentRevision, {
@@ -1799,7 +1804,7 @@ async function importDesignShareRecovery(file, { input, ...options } = {}) {
1799
1804
  const pending = custody.pendingCreate ?? custody.pendingMutation.body;
1800
1805
  const destination = join3(root, "uploads", custody.id, pending.operationId);
1801
1806
  if (existsSync4(destination)) {
1802
- const { spoolChunkReader: spoolChunkReader2 } = await import("./design-runtime-support-5cb7531bede8.mjs");
1807
+ const { spoolChunkReader: spoolChunkReader2 } = await import("./design-runtime-support-336900df0d39.mjs");
1803
1808
  const reader = spoolChunkReader2(destination, pending);
1804
1809
  for (const part of pending.manifest.chunks) await reader(part.index);
1805
1810
  } else await copyUploadSpool(custody, destination);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/design",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Canonical OpenPlanr design helpers and design-loop engine",
@@ -46,8 +46,8 @@
46
46
  "node": ">=20.19.0"
47
47
  },
48
48
  "dependencies": {
49
- "@openplanr/artifact": "0.6.3",
50
- "@openplanr/protocol": "0.10.1"
49
+ "@openplanr/artifact": "0.6.5",
50
+ "@openplanr/protocol": "0.10.3"
51
51
  },
52
52
  "scripts": {
53
53
  "test": "node --test --test-concurrency=2 tests/*.test.mjs",
@@ -1,4 +1,4 @@
1
- /* Trusted local adapter. Owner credentials never enter this runtime. */
1
+ /* Trusted local adapter. Owner keys never enter this runtime. */
2
2
  (() => {
3
3
  'use strict';
4
4
  const options = globalThis.__OPENPLANR_DESIGN_STUDIO_OPTIONS__ || {};
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.10.1",
3
+ "version": "0.10.3",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -27,6 +27,14 @@
27
27
  "types": "./src/semver.d.mts",
28
28
  "import": "./src/semver.mjs"
29
29
  },
30
+ "./names": {
31
+ "types": "./src/names.d.mts",
32
+ "import": "./src/names.mjs"
33
+ },
34
+ "./planning-folder": {
35
+ "types": "./src/planning-folder.d.mts",
36
+ "import": "./src/planning-folder.mjs"
37
+ },
30
38
  "./contracts": {
31
39
  "types": "./src/contracts.d.mts",
32
40
  "import": "./src/contracts.mjs"
@@ -1671,6 +1671,9 @@ import {
1671
1671
  import { homedir as homedir2 } from "node:os";
1672
1672
  import { dirname as dirname3, isAbsolute, join as join4, relative, resolve as resolve3 } from "node:path";
1673
1673
 
1674
+ // packages/protocol/src/names.mjs
1675
+ var PLANNING_FOLDER = ".planr";
1676
+
1674
1677
  // packages/artifact/lib/artifact/internal/feedback.mjs
1675
1678
  var FEEDBACK_FILE = "feedback.json";
1676
1679
 
@@ -1839,7 +1842,7 @@ function inside(base, candidate) {
1839
1842
  return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
1840
1843
  }
1841
1844
  function parseablePlanrConfig(root) {
1842
- const path = join4(root, ".planr", "config.json");
1845
+ const path = join4(root, PLANNING_FOLDER, "config.json");
1843
1846
  if (!existsSync2(path)) return false;
1844
1847
  try {
1845
1848
  if (lstatSync3(path).isSymbolicLink()) return false;
@@ -1968,7 +1971,11 @@ function resolveArtifactReviewDestination({
1968
1971
  }
1969
1972
  const projectRoot = findArtifactProjectRoot(cwd, { env });
1970
1973
  if (projectRoot) {
1971
- const directory2 = assertSafeDestination(projectRoot, [".planr", "artifacts", artifactId]);
1974
+ const directory2 = assertSafeDestination(projectRoot, [
1975
+ PLANNING_FOLDER,
1976
+ "artifacts",
1977
+ artifactId
1978
+ ]);
1972
1979
  return Object.freeze({
1973
1980
  kind: "project",
1974
1981
  artifactId,
@@ -2533,7 +2540,7 @@ function custodyLocation(file, options = {}, { allowMissing = false } = {}) {
2533
2540
  const root = resolve5(options.custodyRoot ?? join7(planrHome(env), "design-shares"));
2534
2541
  let project = current.root;
2535
2542
  for (let candidate = current.root; dirname5(candidate) !== candidate; candidate = dirname5(candidate)) {
2536
- if (existsSync4(join7(candidate, ".git")) || existsSync4(join7(candidate, ".planr"))) {
2543
+ if (existsSync4(join7(candidate, ".git")) || existsSync4(join7(candidate, PLANNING_FOLDER))) {
2537
2544
  project = candidate;
2538
2545
  break;
2539
2546
  }
@@ -2544,7 +2551,7 @@ ${current.document.id}`);
2544
2551
  const within = relative3(project, root);
2545
2552
  if ((!allowMissing || existsSync4(path)) && (within === "" || !within.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) && within !== ".." && !isAbsolute3(within)))
2546
2553
  throw new Error(
2547
- "Design owner credentials must be stored outside the project. Set PLANR_HOME to a private user-level directory."
2554
+ "Design owner keys must be stored outside the project. Set PLANR_HOME to a private user-level directory."
2548
2555
  );
2549
2556
  const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join7(realpathSync4(env.HOME || homedir3()), ".openplanr", "design-shares", `${key}.json`) : null;
2550
2557
  return { root, path, current, legacyPath };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.10.1",
3
+ "version": "0.10.3",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -27,6 +27,14 @@
27
27
  "types": "./src/semver.d.mts",
28
28
  "import": "./src/semver.mjs"
29
29
  },
30
+ "./names": {
31
+ "types": "./src/names.d.mts",
32
+ "import": "./src/names.mjs"
33
+ },
34
+ "./planning-folder": {
35
+ "types": "./src/planning-folder.d.mts",
36
+ "import": "./src/planning-folder.mjs"
37
+ },
30
38
  "./contracts": {
31
39
  "types": "./src/contracts.d.mts",
32
40
  "import": "./src/contracts.mjs"