openplanr 1.25.3 → 2.0.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 (1738) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/CONTRIBUTING.md +33 -0
  3. package/README.md +154 -131
  4. package/dist/cli/commands/artifact.d.ts.map +1 -1
  5. package/dist/cli/commands/artifact.js +214 -30
  6. package/dist/cli/commands/artifact.js.map +1 -1
  7. package/dist/cli/commands/backlog.d.ts +1 -21
  8. package/dist/cli/commands/backlog.d.ts.map +1 -1
  9. package/dist/cli/commands/backlog.js +1 -428
  10. package/dist/cli/commands/backlog.js.map +1 -1
  11. package/dist/cli/commands/company.d.ts +3 -0
  12. package/dist/cli/commands/company.d.ts.map +1 -0
  13. package/dist/cli/commands/company.js +173 -0
  14. package/dist/cli/commands/company.js.map +1 -0
  15. package/dist/cli/commands/config-deterministic.d.ts +3 -0
  16. package/dist/cli/commands/config-deterministic.d.ts.map +1 -0
  17. package/dist/cli/commands/config-deterministic.js +88 -0
  18. package/dist/cli/commands/config-deterministic.js.map +1 -0
  19. package/dist/cli/commands/dashboard.d.ts +3 -0
  20. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  21. package/dist/cli/commands/dashboard.js +36 -0
  22. package/dist/cli/commands/dashboard.js.map +1 -0
  23. package/dist/cli/commands/diagram/index.d.ts +3 -0
  24. package/dist/cli/commands/diagram/index.d.ts.map +1 -0
  25. package/dist/cli/commands/diagram/index.js +73 -0
  26. package/dist/cli/commands/diagram/index.js.map +1 -0
  27. package/dist/cli/commands/diagram/presentation.d.ts +4 -0
  28. package/dist/cli/commands/diagram/presentation.d.ts.map +1 -0
  29. package/dist/cli/commands/diagram/presentation.js +38 -0
  30. package/dist/cli/commands/diagram/presentation.js.map +1 -0
  31. package/dist/cli/commands/doctor.d.ts.map +1 -1
  32. package/dist/cli/commands/doctor.js +1 -11
  33. package/dist/cli/commands/doctor.js.map +1 -1
  34. package/dist/cli/commands/epic.d.ts +1 -9
  35. package/dist/cli/commands/epic.d.ts.map +1 -1
  36. package/dist/cli/commands/epic.js +1 -259
  37. package/dist/cli/commands/epic.js.map +1 -1
  38. package/dist/cli/commands/feature.d.ts +1 -8
  39. package/dist/cli/commands/feature.d.ts.map +1 -1
  40. package/dist/cli/commands/feature.js +1 -220
  41. package/dist/cli/commands/feature.js.map +1 -1
  42. package/dist/cli/commands/groups/delivery.d.ts +3 -0
  43. package/dist/cli/commands/groups/delivery.d.ts.map +1 -0
  44. package/dist/cli/commands/groups/delivery.js +13 -0
  45. package/dist/cli/commands/groups/delivery.js.map +1 -0
  46. package/dist/cli/commands/groups/foundation.d.ts +3 -0
  47. package/dist/cli/commands/groups/foundation.d.ts.map +1 -0
  48. package/dist/cli/commands/groups/foundation.js +11 -0
  49. package/dist/cli/commands/groups/foundation.js.map +1 -0
  50. package/dist/cli/commands/groups/intelligence.d.ts +3 -0
  51. package/dist/cli/commands/groups/intelligence.d.ts.map +1 -0
  52. package/dist/cli/commands/groups/intelligence.js +19 -0
  53. package/dist/cli/commands/groups/intelligence.js.map +1 -0
  54. package/dist/cli/commands/groups/operations.d.ts +3 -0
  55. package/dist/cli/commands/groups/operations.d.ts.map +1 -0
  56. package/dist/cli/commands/groups/operations.js +17 -0
  57. package/dist/cli/commands/groups/operations.js.map +1 -0
  58. package/dist/cli/commands/groups/planning.d.ts +3 -0
  59. package/dist/cli/commands/groups/planning.d.ts.map +1 -0
  60. package/dist/cli/commands/groups/planning.js +25 -0
  61. package/dist/cli/commands/groups/planning.js.map +1 -0
  62. package/dist/cli/commands/index.d.ts +4 -0
  63. package/dist/cli/commands/index.d.ts.map +1 -0
  64. package/dist/cli/commands/index.js +14 -0
  65. package/dist/cli/commands/index.js.map +1 -0
  66. package/dist/cli/commands/init-deterministic.d.ts +3 -0
  67. package/dist/cli/commands/init-deterministic.d.ts.map +1 -0
  68. package/dist/cli/commands/init-deterministic.js +40 -0
  69. package/dist/cli/commands/init-deterministic.js.map +1 -0
  70. package/dist/cli/commands/land.d.ts +15 -0
  71. package/dist/cli/commands/land.d.ts.map +1 -0
  72. package/dist/cli/commands/land.js +176 -0
  73. package/dist/cli/commands/land.js.map +1 -0
  74. package/dist/cli/commands/operate/input.d.ts +54 -0
  75. package/dist/cli/commands/operate/input.d.ts.map +1 -0
  76. package/dist/cli/commands/operate/input.js +98 -0
  77. package/dist/cli/commands/operate/input.js.map +1 -0
  78. package/dist/cli/commands/operate/registrars/assignments.d.ts +5 -0
  79. package/dist/cli/commands/operate/registrars/assignments.d.ts.map +1 -0
  80. package/dist/cli/commands/operate/registrars/assignments.js +167 -0
  81. package/dist/cli/commands/operate/registrars/assignments.js.map +1 -0
  82. package/dist/cli/commands/operate/registrars/catalog.d.ts +4 -0
  83. package/dist/cli/commands/operate/registrars/catalog.d.ts.map +1 -0
  84. package/dist/cli/commands/operate/registrars/catalog.js +12 -0
  85. package/dist/cli/commands/operate/registrars/catalog.js.map +1 -0
  86. package/dist/cli/commands/operate/registrars/contracts.d.ts +41 -0
  87. package/dist/cli/commands/operate/registrars/contracts.d.ts.map +1 -0
  88. package/dist/cli/commands/operate/registrars/contracts.js +2 -0
  89. package/dist/cli/commands/operate/registrars/contracts.js.map +1 -0
  90. package/dist/cli/commands/operate/registrars/dashboard.d.ts +4 -0
  91. package/dist/cli/commands/operate/registrars/dashboard.d.ts.map +1 -0
  92. package/dist/cli/commands/operate/registrars/dashboard.js +26 -0
  93. package/dist/cli/commands/operate/registrars/dashboard.js.map +1 -0
  94. package/dist/cli/commands/operate/registrars/dispatch.d.ts +7 -0
  95. package/dist/cli/commands/operate/registrars/dispatch.d.ts.map +1 -0
  96. package/dist/cli/commands/operate/registrars/dispatch.js +55 -0
  97. package/dist/cli/commands/operate/registrars/dispatch.js.map +1 -0
  98. package/dist/cli/commands/operate/registrars/experience.d.ts +4 -0
  99. package/dist/cli/commands/operate/registrars/experience.d.ts.map +1 -0
  100. package/dist/cli/commands/operate/registrars/experience.js +93 -0
  101. package/dist/cli/commands/operate/registrars/experience.js.map +1 -0
  102. package/dist/cli/commands/operate/registrars/index.d.ts +5 -0
  103. package/dist/cli/commands/operate/registrars/index.d.ts.map +1 -0
  104. package/dist/cli/commands/operate/registrars/index.js +28 -0
  105. package/dist/cli/commands/operate/registrars/index.js.map +1 -0
  106. package/dist/cli/commands/operate/registrars/lifecycle.d.ts +4 -0
  107. package/dist/cli/commands/operate/registrars/lifecycle.d.ts.map +1 -0
  108. package/dist/cli/commands/operate/registrars/lifecycle.js +46 -0
  109. package/dist/cli/commands/operate/registrars/lifecycle.js.map +1 -0
  110. package/dist/cli/commands/operate/registrars/measurement.d.ts +4 -0
  111. package/dist/cli/commands/operate/registrars/measurement.d.ts.map +1 -0
  112. package/dist/cli/commands/operate/registrars/measurement.js +122 -0
  113. package/dist/cli/commands/operate/registrars/measurement.js.map +1 -0
  114. package/dist/cli/commands/operate/registrars/note-validation.d.ts +6 -0
  115. package/dist/cli/commands/operate/registrars/note-validation.d.ts.map +1 -0
  116. package/dist/cli/commands/operate/registrars/note-validation.js +103 -0
  117. package/dist/cli/commands/operate/registrars/note-validation.js.map +1 -0
  118. package/dist/cli/commands/operate/registrars/planning.d.ts +4 -0
  119. package/dist/cli/commands/operate/registrars/planning.d.ts.map +1 -0
  120. package/dist/cli/commands/operate/registrars/planning.js +41 -0
  121. package/dist/cli/commands/operate/registrars/planning.js.map +1 -0
  122. package/dist/cli/commands/operate/registrars/recovery.d.ts +4 -0
  123. package/dist/cli/commands/operate/registrars/recovery.d.ts.map +1 -0
  124. package/dist/cli/commands/operate/registrars/recovery.js +65 -0
  125. package/dist/cli/commands/operate/registrars/recovery.js.map +1 -0
  126. package/dist/cli/commands/operate/registrars/reviews.d.ts +4 -0
  127. package/dist/cli/commands/operate/registrars/reviews.d.ts.map +1 -0
  128. package/dist/cli/commands/operate/registrars/reviews.js +83 -0
  129. package/dist/cli/commands/operate/registrars/reviews.js.map +1 -0
  130. package/dist/cli/commands/operate/registration.d.ts +4 -0
  131. package/dist/cli/commands/operate/registration.d.ts.map +1 -0
  132. package/dist/cli/commands/operate/registration.js +3 -0
  133. package/dist/cli/commands/operate/registration.js.map +1 -0
  134. package/dist/cli/commands/operate/render.d.ts +19 -0
  135. package/dist/cli/commands/operate/render.d.ts.map +1 -0
  136. package/dist/cli/commands/operate/render.js +201 -0
  137. package/dist/cli/commands/operate/render.js.map +1 -0
  138. package/dist/cli/commands/operate.d.ts +58 -13
  139. package/dist/cli/commands/operate.d.ts.map +1 -1
  140. package/dist/cli/commands/operate.js +169 -984
  141. package/dist/cli/commands/operate.js.map +1 -1
  142. package/dist/cli/commands/planning-artifacts.d.ts +10 -0
  143. package/dist/cli/commands/planning-artifacts.d.ts.map +1 -0
  144. package/dist/cli/commands/planning-artifacts.js +350 -0
  145. package/dist/cli/commands/planning-artifacts.js.map +1 -0
  146. package/dist/cli/commands/quick/interaction.d.ts +8 -0
  147. package/dist/cli/commands/quick/interaction.d.ts.map +1 -0
  148. package/dist/cli/commands/quick/interaction.js +8 -0
  149. package/dist/cli/commands/quick/interaction.js.map +1 -0
  150. package/dist/cli/commands/quick/project.d.ts +8 -0
  151. package/dist/cli/commands/quick/project.d.ts.map +1 -0
  152. package/dist/cli/commands/quick/project.js +8 -0
  153. package/dist/cli/commands/quick/project.js.map +1 -0
  154. package/dist/cli/commands/quick.d.ts +1 -29
  155. package/dist/cli/commands/quick.d.ts.map +1 -1
  156. package/dist/cli/commands/quick.js +1 -337
  157. package/dist/cli/commands/quick.js.map +1 -1
  158. package/dist/cli/commands/rules.js +1 -1
  159. package/dist/cli/commands/rules.js.map +1 -1
  160. package/dist/cli/commands/setup.d.ts.map +1 -1
  161. package/dist/cli/commands/setup.js +40 -18
  162. package/dist/cli/commands/setup.js.map +1 -1
  163. package/dist/cli/commands/spec.d.ts +6 -4
  164. package/dist/cli/commands/spec.d.ts.map +1 -1
  165. package/dist/cli/commands/spec.js +166 -174
  166. package/dist/cli/commands/spec.js.map +1 -1
  167. package/dist/cli/commands/sprint.d.ts +1 -8
  168. package/dist/cli/commands/sprint.d.ts.map +1 -1
  169. package/dist/cli/commands/sprint.js +1 -522
  170. package/dist/cli/commands/sprint.js.map +1 -1
  171. package/dist/cli/commands/story/interaction.d.ts +7 -0
  172. package/dist/cli/commands/story/interaction.d.ts.map +1 -0
  173. package/dist/cli/commands/story/interaction.js +7 -0
  174. package/dist/cli/commands/story/interaction.js.map +1 -0
  175. package/dist/cli/commands/story/project.d.ts +10 -0
  176. package/dist/cli/commands/story/project.d.ts.map +1 -0
  177. package/dist/cli/commands/story/project.js +10 -0
  178. package/dist/cli/commands/story/project.js.map +1 -0
  179. package/dist/cli/commands/story.d.ts +1 -8
  180. package/dist/cli/commands/story.d.ts.map +1 -1
  181. package/dist/cli/commands/story.js +1 -358
  182. package/dist/cli/commands/story.js.map +1 -1
  183. package/dist/cli/commands/task.d.ts +1 -9
  184. package/dist/cli/commands/task.d.ts.map +1 -1
  185. package/dist/cli/commands/task.js +1 -351
  186. package/dist/cli/commands/task.js.map +1 -1
  187. package/dist/cli/error-boundary.d.ts +29 -0
  188. package/dist/cli/error-boundary.d.ts.map +1 -0
  189. package/dist/cli/error-boundary.js +103 -0
  190. package/dist/cli/error-boundary.js.map +1 -0
  191. package/dist/cli/helpers/bulk-checkbox-update.d.ts +1 -1
  192. package/dist/cli/helpers/bulk-checkbox-update.js +1 -1
  193. package/dist/cli/index.js +38 -113
  194. package/dist/cli/index.js.map +1 -1
  195. package/dist/dashboard/.vite/manifest.json +68 -0
  196. package/dist/dashboard/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  197. package/dist/dashboard/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  198. package/dist/dashboard/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  199. package/dist/dashboard/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  200. package/dist/dashboard/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  201. package/dist/dashboard/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  202. package/dist/dashboard/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  203. package/dist/dashboard/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  204. package/dist/dashboard/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  205. package/dist/dashboard/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  206. package/dist/dashboard/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  207. package/dist/dashboard/assets/index-Bk8DyO_2.css +1 -0
  208. package/dist/dashboard/assets/index-zeygL5iu.js +557 -0
  209. package/dist/dashboard/assets/index-zeygL5iu.js.map +1 -0
  210. package/dist/dashboard/dashboard-manifest.json +84 -0
  211. package/dist/dashboard/index.html +13 -0
  212. package/dist/generators/base-generator.d.ts +2 -0
  213. package/dist/generators/base-generator.d.ts.map +1 -1
  214. package/dist/generators/base-generator.js +8 -0
  215. package/dist/generators/base-generator.js.map +1 -1
  216. package/dist/generators/claude-generator.d.ts.map +1 -1
  217. package/dist/generators/claude-generator.js +12 -14
  218. package/dist/generators/claude-generator.js.map +1 -1
  219. package/dist/generators/codex-generator.d.ts.map +1 -1
  220. package/dist/generators/codex-generator.js +7 -7
  221. package/dist/generators/codex-generator.js.map +1 -1
  222. package/dist/generators/cursor-generator.d.ts.map +1 -1
  223. package/dist/generators/cursor-generator.js +11 -30
  224. package/dist/generators/cursor-generator.js.map +1 -1
  225. package/dist/models/schema.d.ts +0 -23
  226. package/dist/models/schema.d.ts.map +1 -1
  227. package/dist/models/schema.js +0 -7
  228. package/dist/models/schema.js.map +1 -1
  229. package/dist/models/types.d.ts +3 -14
  230. package/dist/models/types.d.ts.map +1 -1
  231. package/dist/services/artifact-pipeline-service.d.ts +99 -1
  232. package/dist/services/artifact-pipeline-service.d.ts.map +1 -1
  233. package/dist/services/artifact-pipeline-service.js +681 -4
  234. package/dist/services/artifact-pipeline-service.js.map +1 -1
  235. package/dist/services/canonical-json.d.ts +3 -0
  236. package/dist/services/canonical-json.d.ts.map +1 -0
  237. package/dist/services/canonical-json.js +71 -0
  238. package/dist/services/canonical-json.js.map +1 -0
  239. package/dist/services/claude-plugin-service.d.ts +6 -1
  240. package/dist/services/claude-plugin-service.d.ts.map +1 -1
  241. package/dist/services/claude-plugin-service.js +184 -12
  242. package/dist/services/claude-plugin-service.js.map +1 -1
  243. package/dist/services/codex-plugin-service.d.ts +30 -0
  244. package/dist/services/codex-plugin-service.d.ts.map +1 -0
  245. package/dist/services/codex-plugin-service.js +195 -0
  246. package/dist/services/codex-plugin-service.js.map +1 -0
  247. package/dist/services/company-auth-service.d.ts +70 -0
  248. package/dist/services/company-auth-service.d.ts.map +1 -0
  249. package/dist/services/company-auth-service.js +720 -0
  250. package/dist/services/company-auth-service.js.map +1 -0
  251. package/dist/services/company-auth-store.d.ts +22 -0
  252. package/dist/services/company-auth-store.d.ts.map +1 -0
  253. package/dist/services/company-auth-store.js +158 -0
  254. package/dist/services/company-auth-store.js.map +1 -0
  255. package/dist/services/company-common.d.ts +9 -0
  256. package/dist/services/company-common.d.ts.map +1 -0
  257. package/dist/services/company-common.js +35 -0
  258. package/dist/services/company-common.js.map +1 -0
  259. package/dist/services/company-sync-service.d.ts +214 -0
  260. package/dist/services/company-sync-service.d.ts.map +1 -0
  261. package/dist/services/company-sync-service.js +1299 -0
  262. package/dist/services/company-sync-service.js.map +1 -0
  263. package/dist/services/connectors/adapters/business-metrics.d.ts +5 -0
  264. package/dist/services/connectors/adapters/business-metrics.d.ts.map +1 -0
  265. package/dist/services/connectors/adapters/business-metrics.js +41 -0
  266. package/dist/services/connectors/adapters/business-metrics.js.map +1 -0
  267. package/dist/services/connectors/adapters/deployment-health.d.ts +18 -0
  268. package/dist/services/connectors/adapters/deployment-health.d.ts.map +1 -0
  269. package/dist/services/connectors/adapters/deployment-health.js +67 -0
  270. package/dist/services/connectors/adapters/deployment-health.js.map +1 -0
  271. package/dist/services/connectors/adapters/github.d.ts +5 -0
  272. package/dist/services/connectors/adapters/github.d.ts.map +1 -0
  273. package/dist/services/connectors/adapters/github.js +31 -0
  274. package/dist/services/connectors/adapters/github.js.map +1 -0
  275. package/dist/services/connectors/adapters/linear-jira.d.ts +5 -0
  276. package/dist/services/connectors/adapters/linear-jira.d.ts.map +1 -0
  277. package/dist/services/connectors/adapters/linear-jira.js +26 -0
  278. package/dist/services/connectors/adapters/linear-jira.js.map +1 -0
  279. package/dist/services/connectors/adapters/posthog.d.ts +5 -0
  280. package/dist/services/connectors/adapters/posthog.d.ts.map +1 -0
  281. package/dist/services/connectors/adapters/posthog.js +31 -0
  282. package/dist/services/connectors/adapters/posthog.js.map +1 -0
  283. package/dist/services/connectors/adapters/sentry.d.ts +5 -0
  284. package/dist/services/connectors/adapters/sentry.d.ts.map +1 -0
  285. package/dist/services/connectors/adapters/sentry.js +31 -0
  286. package/dist/services/connectors/adapters/sentry.js.map +1 -0
  287. package/dist/services/connectors/checkpoint-custody.d.ts +45 -0
  288. package/dist/services/connectors/checkpoint-custody.d.ts.map +1 -0
  289. package/dist/services/connectors/checkpoint-custody.js +496 -0
  290. package/dist/services/connectors/checkpoint-custody.js.map +1 -0
  291. package/dist/services/connectors/connector-registry.d.ts +144 -0
  292. package/dist/services/connectors/connector-registry.d.ts.map +1 -0
  293. package/dist/services/connectors/connector-registry.js +423 -0
  294. package/dist/services/connectors/connector-registry.js.map +1 -0
  295. package/dist/services/connectors/connector-runtime.d.ts +200 -0
  296. package/dist/services/connectors/connector-runtime.d.ts.map +1 -0
  297. package/dist/services/connectors/connector-runtime.js +1297 -0
  298. package/dist/services/connectors/connector-runtime.js.map +1 -0
  299. package/dist/services/connectors/credential-custody.d.ts +96 -0
  300. package/dist/services/connectors/credential-custody.d.ts.map +1 -0
  301. package/dist/services/connectors/credential-custody.js +390 -0
  302. package/dist/services/connectors/credential-custody.js.map +1 -0
  303. package/dist/services/credential-backends.d.ts +11 -1
  304. package/dist/services/credential-backends.d.ts.map +1 -1
  305. package/dist/services/credential-backends.js +104 -21
  306. package/dist/services/credential-backends.js.map +1 -1
  307. package/dist/services/credential-write-lock.d.ts +8 -0
  308. package/dist/services/credential-write-lock.d.ts.map +1 -0
  309. package/dist/services/credential-write-lock.js +104 -0
  310. package/dist/services/credential-write-lock.js.map +1 -0
  311. package/dist/services/credentials-service.d.ts +8 -2
  312. package/dist/services/credentials-service.d.ts.map +1 -1
  313. package/dist/services/credentials-service.js +66 -21
  314. package/dist/services/credentials-service.js.map +1 -1
  315. package/dist/services/deprecation-notices.d.ts +2 -2
  316. package/dist/services/deprecation-notices.d.ts.map +1 -1
  317. package/dist/services/deprecation-notices.js +2 -2
  318. package/dist/services/deprecation-notices.js.map +1 -1
  319. package/dist/services/design-artifact-service.d.ts +37 -0
  320. package/dist/services/design-artifact-service.d.ts.map +1 -0
  321. package/dist/services/design-artifact-service.js +94 -0
  322. package/dist/services/design-artifact-service.js.map +1 -0
  323. package/dist/services/diagram-artifact-service.d.ts +12 -0
  324. package/dist/services/diagram-artifact-service.d.ts.map +1 -0
  325. package/dist/services/diagram-artifact-service.js +41 -0
  326. package/dist/services/diagram-artifact-service.js.map +1 -0
  327. package/dist/services/diagram-pipeline-service.d.ts +125 -0
  328. package/dist/services/diagram-pipeline-service.d.ts.map +1 -0
  329. package/dist/services/diagram-pipeline-service.js +329 -0
  330. package/dist/services/diagram-pipeline-service.js.map +1 -0
  331. package/dist/services/gherkin-service.d.ts +3 -0
  332. package/dist/services/gherkin-service.d.ts.map +1 -0
  333. package/dist/services/gherkin-service.js +9 -0
  334. package/dist/services/gherkin-service.js.map +1 -0
  335. package/dist/services/graph-service.d.ts.map +1 -1
  336. package/dist/services/graph-service.js +6 -4
  337. package/dist/services/graph-service.js.map +1 -1
  338. package/dist/services/landing/landing-service.d.ts +42 -0
  339. package/dist/services/landing/landing-service.d.ts.map +1 -0
  340. package/dist/services/landing/landing-service.js +197 -0
  341. package/dist/services/landing/landing-service.js.map +1 -0
  342. package/dist/services/landing/operation-registry.d.ts +56 -0
  343. package/dist/services/landing/operation-registry.d.ts.map +1 -0
  344. package/dist/services/landing/operation-registry.js +165 -0
  345. package/dist/services/landing/operation-registry.js.map +1 -0
  346. package/dist/services/landing/receipt-custody.d.ts +48 -0
  347. package/dist/services/landing/receipt-custody.d.ts.map +1 -0
  348. package/dist/services/landing/receipt-custody.js +375 -0
  349. package/dist/services/landing/receipt-custody.js.map +1 -0
  350. package/dist/services/linear/constants.d.ts.map +1 -1
  351. package/dist/services/linear/constants.js +2 -6
  352. package/dist/services/linear/constants.js.map +1 -1
  353. package/dist/services/linear/task-status-aggregation.d.ts +1 -1
  354. package/dist/services/linear/task-status-aggregation.js +1 -1
  355. package/dist/services/linear-pull-service.d.ts.map +1 -1
  356. package/dist/services/linear-pull-service.js +7 -30
  357. package/dist/services/linear-pull-service.js.map +1 -1
  358. package/dist/services/linear-push-service.d.ts.map +1 -1
  359. package/dist/services/linear-push-service.js +4 -5
  360. package/dist/services/linear-push-service.js.map +1 -1
  361. package/dist/services/migration-registry.d.ts +0 -19
  362. package/dist/services/migration-registry.d.ts.map +1 -1
  363. package/dist/services/migration-registry.js +18 -32
  364. package/dist/services/migration-registry.js.map +1 -1
  365. package/dist/services/operate/assignment-lifecycle-service.d.ts +135 -0
  366. package/dist/services/operate/assignment-lifecycle-service.d.ts.map +1 -0
  367. package/dist/services/operate/assignment-lifecycle-service.js +113 -0
  368. package/dist/services/operate/assignment-lifecycle-service.js.map +1 -0
  369. package/dist/services/operate/assignment-packet-service.d.ts +79 -0
  370. package/dist/services/operate/assignment-packet-service.d.ts.map +1 -0
  371. package/dist/services/operate/assignment-packet-service.js +1030 -0
  372. package/dist/services/operate/assignment-packet-service.js.map +1 -0
  373. package/dist/services/operate/client/governance.d.ts +4 -0
  374. package/dist/services/operate/client/governance.d.ts.map +1 -0
  375. package/dist/services/operate/client/governance.js +3 -0
  376. package/dist/services/operate/client/governance.js.map +1 -0
  377. package/dist/services/operate/client/lifecycle.d.ts +18 -0
  378. package/dist/services/operate/client/lifecycle.d.ts.map +1 -0
  379. package/dist/services/operate/client/lifecycle.js +15 -0
  380. package/dist/services/operate/client/lifecycle.js.map +1 -0
  381. package/dist/services/operate/client/runtime.d.ts +13 -0
  382. package/dist/services/operate/client/runtime.d.ts.map +1 -0
  383. package/dist/services/operate/client/runtime.js +11 -0
  384. package/dist/services/operate/client/runtime.js.map +1 -0
  385. package/dist/services/operate/client-error.d.ts +9 -0
  386. package/dist/services/operate/client-error.d.ts.map +1 -0
  387. package/dist/services/operate/client-error.js +14 -0
  388. package/dist/services/operate/client-error.js.map +1 -0
  389. package/dist/services/operate/client.d.ts +415 -0
  390. package/dist/services/operate/client.d.ts.map +1 -0
  391. package/dist/services/operate/client.js +2432 -0
  392. package/dist/services/operate/client.js.map +1 -0
  393. package/dist/services/operate/command-gateway.d.ts +152 -0
  394. package/dist/services/operate/command-gateway.d.ts.map +1 -0
  395. package/dist/services/operate/command-gateway.js +883 -0
  396. package/dist/services/operate/command-gateway.js.map +1 -0
  397. package/dist/services/operate/composition.d.ts +421 -0
  398. package/dist/services/operate/composition.d.ts.map +1 -0
  399. package/dist/services/operate/composition.js +394 -0
  400. package/dist/services/operate/composition.js.map +1 -0
  401. package/dist/services/operate/cycle-lifecycle-service.d.ts +35 -0
  402. package/dist/services/operate/cycle-lifecycle-service.d.ts.map +1 -0
  403. package/dist/services/operate/cycle-lifecycle-service.js +427 -0
  404. package/dist/services/operate/cycle-lifecycle-service.js.map +1 -0
  405. package/dist/services/operate/delivery-evidence.d.ts +34 -0
  406. package/dist/services/operate/delivery-evidence.d.ts.map +1 -0
  407. package/dist/services/operate/delivery-evidence.js +666 -0
  408. package/dist/services/operate/delivery-evidence.js.map +1 -0
  409. package/dist/services/operate/domain-catalog-service.d.ts +24 -0
  410. package/dist/services/operate/domain-catalog-service.d.ts.map +1 -0
  411. package/dist/services/operate/domain-catalog-service.js +99 -0
  412. package/dist/services/operate/domain-catalog-service.js.map +1 -0
  413. package/dist/services/operate/experience-read-service.d.ts +64 -0
  414. package/dist/services/operate/experience-read-service.d.ts.map +1 -0
  415. package/dist/services/operate/experience-read-service.js +109 -0
  416. package/dist/services/operate/experience-read-service.js.map +1 -0
  417. package/dist/services/operate/governed-action-service.d.ts +80 -0
  418. package/dist/services/operate/governed-action-service.d.ts.map +1 -0
  419. package/dist/services/operate/governed-action-service.js +497 -0
  420. package/dist/services/operate/governed-action-service.js.map +1 -0
  421. package/dist/services/operate/identity-contract.d.ts +3 -0
  422. package/dist/services/operate/identity-contract.d.ts.map +1 -0
  423. package/dist/services/operate/identity-contract.js +6 -0
  424. package/dist/services/operate/identity-contract.js.map +1 -0
  425. package/dist/services/operate/measurement-schedule-service.d.ts +81 -0
  426. package/dist/services/operate/measurement-schedule-service.d.ts.map +1 -0
  427. package/dist/services/operate/measurement-schedule-service.js +461 -0
  428. package/dist/services/operate/measurement-schedule-service.js.map +1 -0
  429. package/dist/services/operate/path-custody.d.ts +16 -0
  430. package/dist/services/operate/path-custody.d.ts.map +1 -0
  431. package/dist/services/operate/path-custody.js +120 -0
  432. package/dist/services/operate/path-custody.js.map +1 -0
  433. package/dist/services/operate/pinned-legacy-replay-runner.d.ts +9 -0
  434. package/dist/services/operate/pinned-legacy-replay-runner.d.ts.map +1 -0
  435. package/dist/services/operate/pinned-legacy-replay-runner.js +441 -0
  436. package/dist/services/operate/pinned-legacy-replay-runner.js.map +1 -0
  437. package/dist/services/operate/planning-bridge.d.ts +28 -0
  438. package/dist/services/operate/planning-bridge.d.ts.map +1 -0
  439. package/dist/services/operate/planning-bridge.js +341 -0
  440. package/dist/services/operate/planning-bridge.js.map +1 -0
  441. package/dist/services/operate/planning-handoff-gateway.d.ts +47 -0
  442. package/dist/services/operate/planning-handoff-gateway.d.ts.map +1 -0
  443. package/dist/services/operate/planning-handoff-gateway.js +169 -0
  444. package/dist/services/operate/planning-handoff-gateway.js.map +1 -0
  445. package/dist/services/operate/planning-handoff-service.d.ts +38 -0
  446. package/dist/services/operate/planning-handoff-service.d.ts.map +1 -0
  447. package/dist/services/operate/planning-handoff-service.js +304 -0
  448. package/dist/services/operate/planning-handoff-service.js.map +1 -0
  449. package/dist/services/operate/project-transaction-lock.d.ts +6 -0
  450. package/dist/services/operate/project-transaction-lock.d.ts.map +1 -0
  451. package/dist/services/operate/project-transaction-lock.js +146 -0
  452. package/dist/services/operate/project-transaction-lock.js.map +1 -0
  453. package/dist/services/operate/recovery-service.d.ts +16 -0
  454. package/dist/services/operate/recovery-service.d.ts.map +1 -0
  455. package/dist/services/operate/recovery-service.js +59 -0
  456. package/dist/services/operate/recovery-service.js.map +1 -0
  457. package/dist/services/operate/replay-safe-retry-service.d.ts +21 -0
  458. package/dist/services/operate/replay-safe-retry-service.d.ts.map +1 -0
  459. package/dist/services/operate/replay-safe-retry-service.js +66 -0
  460. package/dist/services/operate/replay-safe-retry-service.js.map +1 -0
  461. package/dist/services/operate/repository-read-service.d.ts +13 -0
  462. package/dist/services/operate/repository-read-service.d.ts.map +1 -0
  463. package/dist/services/operate/repository-read-service.js +153 -0
  464. package/dist/services/operate/repository-read-service.js.map +1 -0
  465. package/dist/services/operate/review-lifecycle-service.d.ts +50 -0
  466. package/dist/services/operate/review-lifecycle-service.d.ts.map +1 -0
  467. package/dist/services/operate/review-lifecycle-service.js +63 -0
  468. package/dist/services/operate/review-lifecycle-service.js.map +1 -0
  469. package/dist/services/operate/review-read-gateway.d.ts +21 -0
  470. package/dist/services/operate/review-read-gateway.d.ts.map +1 -0
  471. package/dist/services/operate/review-read-gateway.js +119 -0
  472. package/dist/services/operate/review-read-gateway.js.map +1 -0
  473. package/dist/services/operate/screened-evidence-service.d.ts +24 -0
  474. package/dist/services/operate/screened-evidence-service.d.ts.map +1 -0
  475. package/dist/services/operate/screened-evidence-service.js +186 -0
  476. package/dist/services/operate/screened-evidence-service.js.map +1 -0
  477. package/dist/services/operate/search-hit-contract.d.ts +11 -0
  478. package/dist/services/operate/search-hit-contract.d.ts.map +1 -0
  479. package/dist/services/operate/search-hit-contract.js +29 -0
  480. package/dist/services/operate/search-hit-contract.js.map +1 -0
  481. package/dist/services/operate/session-capability.d.ts +61 -0
  482. package/dist/services/operate/session-capability.d.ts.map +1 -0
  483. package/dist/services/operate/session-capability.js +124 -0
  484. package/dist/services/operate/session-capability.js.map +1 -0
  485. package/dist/services/operate/spec-operating-origin-service.d.ts +60 -0
  486. package/dist/services/operate/spec-operating-origin-service.d.ts.map +1 -0
  487. package/dist/services/operate/spec-operating-origin-service.js +401 -0
  488. package/dist/services/operate/spec-operating-origin-service.js.map +1 -0
  489. package/dist/services/operate/storage-layout.d.ts +82 -0
  490. package/dist/services/operate/storage-layout.d.ts.map +1 -0
  491. package/dist/services/operate/storage-layout.js +1244 -0
  492. package/dist/services/operate/storage-layout.js.map +1 -0
  493. package/dist/services/operate/storage-migration-service.d.ts +15 -0
  494. package/dist/services/operate/storage-migration-service.d.ts.map +1 -0
  495. package/dist/services/operate/storage-migration-service.js +27 -0
  496. package/dist/services/operate/storage-migration-service.js.map +1 -0
  497. package/dist/services/operate/store.d.ts +132 -0
  498. package/dist/services/operate/store.d.ts.map +1 -0
  499. package/dist/services/operate/store.js +1344 -0
  500. package/dist/services/operate/store.js.map +1 -0
  501. package/dist/services/pipeline-package-service.d.ts +93 -2
  502. package/dist/services/pipeline-package-service.d.ts.map +1 -1
  503. package/dist/services/pipeline-package-service.js +867 -7
  504. package/dist/services/pipeline-package-service.js.map +1 -1
  505. package/dist/services/planning-id-service.d.ts +8 -0
  506. package/dist/services/planning-id-service.d.ts.map +1 -0
  507. package/dist/services/planning-id-service.js +114 -0
  508. package/dist/services/planning-id-service.js.map +1 -0
  509. package/dist/services/provenance-service.d.ts +33 -1
  510. package/dist/services/provenance-service.d.ts.map +1 -1
  511. package/dist/services/provenance-service.js +104 -8
  512. package/dist/services/provenance-service.js.map +1 -1
  513. package/dist/services/runtime-manager/doctor.d.ts +22 -0
  514. package/dist/services/runtime-manager/doctor.d.ts.map +1 -0
  515. package/dist/services/runtime-manager/doctor.js +74 -0
  516. package/dist/services/runtime-manager/doctor.js.map +1 -0
  517. package/dist/services/runtime-manager/global-state.d.ts +47 -0
  518. package/dist/services/runtime-manager/global-state.d.ts.map +1 -0
  519. package/dist/services/runtime-manager/global-state.js +59 -0
  520. package/dist/services/runtime-manager/global-state.js.map +1 -0
  521. package/dist/services/runtime-manager/install-plan.d.ts +37 -0
  522. package/dist/services/runtime-manager/install-plan.d.ts.map +1 -0
  523. package/dist/services/runtime-manager/install-plan.js +91 -0
  524. package/dist/services/runtime-manager/install-plan.js.map +1 -0
  525. package/dist/services/runtime-manager/inventory.d.ts +29 -0
  526. package/dist/services/runtime-manager/inventory.d.ts.map +1 -0
  527. package/dist/services/runtime-manager/inventory.js +46 -0
  528. package/dist/services/runtime-manager/inventory.js.map +1 -0
  529. package/dist/services/runtime-manager-service.d.ts +16 -71
  530. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  531. package/dist/services/runtime-manager-service.js +1288 -505
  532. package/dist/services/runtime-manager-service.js.map +1 -1
  533. package/dist/services/spec-service.d.ts +213 -39
  534. package/dist/services/spec-service.d.ts.map +1 -1
  535. package/dist/services/spec-service.js +938 -171
  536. package/dist/services/spec-service.js.map +1 -1
  537. package/dist/services/template-service.d.ts.map +1 -1
  538. package/dist/services/template-service.js +1 -0
  539. package/dist/services/template-service.js.map +1 -1
  540. package/dist/templates/quick/quick-task.md.hbs +6 -0
  541. package/dist/templates/rules/claude/CLAUDE.md.hbs +3 -111
  542. package/dist/templates/rules/codex/AGENTS.md.hbs +2 -92
  543. package/dist/templates/rules/cursor/create-task-list.mdc.hbs +1 -1
  544. package/dist/templates/rules/cursor/implement-task-list.mdc.hbs +5 -83
  545. package/dist/templates/rules/cursor/openplanr.mdc.hbs +12 -0
  546. package/dist/templates/rules/shared/host-native-guidance.md.hbs +12 -0
  547. package/dist/templates/rules/shared/implementation-guidance.md.hbs +44 -0
  548. package/dist/templates/spec/spec-shaped.md.hbs +66 -22
  549. package/dist/templates/spec/spec.md.hbs +46 -23
  550. package/dist/templates/spec/story.md.hbs +15 -4
  551. package/dist/templates/spec/task.md.hbs +53 -5
  552. package/dist/utils/constants.d.ts +1 -1
  553. package/dist/utils/constants.js +1 -1
  554. package/dist/utils/logger.d.ts +0 -3
  555. package/dist/utils/logger.d.ts.map +1 -1
  556. package/dist/utils/logger.js +0 -6
  557. package/dist/utils/logger.js.map +1 -1
  558. package/docs/ARTIFACT_REVIEW.md +110 -0
  559. package/docs/CLI.md +1216 -0
  560. package/docs/CROSS_RUNTIME_SETUP.md +168 -0
  561. package/docs/TROUBLESHOOTING.md +227 -0
  562. package/lib/dashboard-verifier.d.mts +29 -0
  563. package/lib/dashboard-verifier.mjs +307 -0
  564. package/lib/host-packages/adapter-registry.json +44 -0
  565. package/lib/host-packages/claude/.claude-plugin/marketplace.json +20 -0
  566. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +9 -0
  567. package/lib/host-packages/claude/openplanr/.openplanr-content.json +1179 -0
  568. package/lib/host-packages/claude/openplanr/agents/planr-backend.md +66 -0
  569. package/lib/host-packages/claude/openplanr/agents/planr-database.md +165 -0
  570. package/lib/host-packages/claude/openplanr/agents/planr-designer.md +57 -0
  571. package/lib/host-packages/claude/openplanr/agents/planr-devops.md +57 -0
  572. package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +63 -0
  573. package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +29 -0
  574. package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +69 -0
  575. package/lib/host-packages/claude/openplanr/agents/planr-qa.md +162 -0
  576. package/lib/host-packages/claude/openplanr/agents/planr-specification.md +124 -0
  577. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +93 -0
  578. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +90 -0
  579. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +55 -0
  580. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +67 -0
  581. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +94 -0
  582. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/qa.md +17 -0
  583. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +111 -0
  584. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/contract-create-modify-preserve.md +17 -0
  585. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-craft-rubric.md +51 -0
  586. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-principles.md +43 -0
  587. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-spec-template.md +88 -0
  588. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/task-context-resolution.md +60 -0
  589. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/verification-and-recovery-backend.md +26 -0
  590. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/verification-and-recovery-frontend.md +27 -0
  591. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +96 -0
  592. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +83 -0
  593. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +55 -0
  594. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +67 -0
  595. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +96 -0
  596. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/qa.md +17 -0
  597. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +112 -0
  598. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/backend/nestjs.md +130 -0
  599. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +122 -0
  600. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/prisma.md +155 -0
  601. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/devops/docker-compose.md +140 -0
  602. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/frontend/nextjs.md +123 -0
  603. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +54 -0
  604. package/lib/host-packages/claude/openplanr/skills/artifact/openplanr.skill.json +48 -0
  605. package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +18 -0
  606. package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +51 -0
  607. package/lib/host-packages/claude/openplanr/skills/browser-qa/SKILL.md +34 -0
  608. package/lib/host-packages/claude/openplanr/skills/browser-qa/openplanr.skill.json +26 -0
  609. package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +47 -0
  610. package/lib/host-packages/claude/openplanr/skills/ceo-review/openplanr.skill.json +81 -0
  611. package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +111 -0
  612. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/errors.mjs +8 -0
  613. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/operate-review-contract.mjs +438 -0
  614. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/operate-review-note.mjs +595 -0
  615. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/validate-note.mjs +31 -0
  616. package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +101 -0
  617. package/lib/host-packages/claude/openplanr/skills/chair-review/openplanr.skill.json +70 -0
  618. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/errors.mjs +8 -0
  619. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/operate-review-contract.mjs +438 -0
  620. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/operate-review-note.mjs +595 -0
  621. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/validate-note.mjs +31 -0
  622. package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +86 -0
  623. package/lib/host-packages/claude/openplanr/skills/challenger-review/openplanr.skill.json +70 -0
  624. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/errors.mjs +8 -0
  625. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/operate-review-contract.mjs +438 -0
  626. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/operate-review-note.mjs +595 -0
  627. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/validate-note.mjs +31 -0
  628. package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +46 -0
  629. package/lib/host-packages/claude/openplanr/skills/cmo-review/openplanr.skill.json +81 -0
  630. package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +111 -0
  631. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/errors.mjs +8 -0
  632. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/operate-review-contract.mjs +438 -0
  633. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/operate-review-note.mjs +595 -0
  634. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/validate-note.mjs +31 -0
  635. package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +45 -0
  636. package/lib/host-packages/claude/openplanr/skills/coo-review/openplanr.skill.json +81 -0
  637. package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +111 -0
  638. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/errors.mjs +8 -0
  639. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/operate-review-contract.mjs +438 -0
  640. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/operate-review-note.mjs +595 -0
  641. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/validate-note.mjs +31 -0
  642. package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +48 -0
  643. package/lib/host-packages/claude/openplanr/skills/cpo-review/openplanr.skill.json +81 -0
  644. package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +111 -0
  645. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/errors.mjs +8 -0
  646. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/operate-review-contract.mjs +438 -0
  647. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/operate-review-note.mjs +595 -0
  648. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/validate-note.mjs +31 -0
  649. package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +47 -0
  650. package/lib/host-packages/claude/openplanr/skills/cto-review/openplanr.skill.json +81 -0
  651. package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +111 -0
  652. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/errors.mjs +8 -0
  653. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/operate-review-contract.mjs +438 -0
  654. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/operate-review-note.mjs +595 -0
  655. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/validate-note.mjs +31 -0
  656. package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +20 -0
  657. package/lib/host-packages/claude/openplanr/skills/dashboard/openplanr.skill.json +26 -0
  658. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +73 -0
  659. package/lib/host-packages/claude/openplanr/skills/design/openplanr.skill.json +466 -0
  660. package/lib/host-packages/claude/openplanr/skills/design/references/craft.md +68 -0
  661. package/lib/host-packages/claude/openplanr/skills/design/references/design-spec-template.md +88 -0
  662. package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +33 -0
  663. package/lib/host-packages/claude/openplanr/skills/design/references/discovery.md +53 -0
  664. package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +105 -0
  665. package/lib/host-packages/claude/openplanr/skills/design/references/handoff.md +47 -0
  666. package/lib/host-packages/claude/openplanr/skills/design/references/review.md +88 -0
  667. package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +131 -0
  668. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +93 -0
  669. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +306 -0
  670. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-review-context.schema.json +191 -0
  671. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-review-handoff.schema.json +407 -0
  672. package/lib/host-packages/claude/openplanr/skills/design/scripts/design.mjs +17323 -0
  673. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/notices/entities.txt +13 -0
  674. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/notices/parse5.txt +21 -0
  675. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  676. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  677. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  678. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  679. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  680. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  681. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  682. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +115 -0
  683. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  684. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  685. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  686. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  687. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  688. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  689. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  690. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  691. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  692. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  693. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  694. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  695. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  696. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  697. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  698. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  699. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  700. package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +58 -0
  701. package/lib/host-packages/claude/openplanr/skills/design-loop/openplanr.skill.json +466 -0
  702. package/lib/host-packages/claude/openplanr/skills/design-loop/references/craft.md +68 -0
  703. package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-spec-template.md +88 -0
  704. package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +33 -0
  705. package/lib/host-packages/claude/openplanr/skills/design-loop/references/discovery.md +53 -0
  706. package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +105 -0
  707. package/lib/host-packages/claude/openplanr/skills/design-loop/references/handoff.md +47 -0
  708. package/lib/host-packages/claude/openplanr/skills/design-loop/references/review.md +88 -0
  709. package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +131 -0
  710. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +93 -0
  711. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +306 -0
  712. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-review-context.schema.json +191 -0
  713. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-review-handoff.schema.json +407 -0
  714. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design.mjs +17323 -0
  715. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/notices/entities.txt +13 -0
  716. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/notices/parse5.txt +21 -0
  717. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  718. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  719. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  720. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  721. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  722. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  723. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  724. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +115 -0
  725. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  726. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  727. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  728. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  729. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  730. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  731. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  732. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  733. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  734. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  735. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  736. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  737. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  738. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  739. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  740. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  741. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  742. package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +54 -0
  743. package/lib/host-packages/claude/openplanr/skills/design-review/openplanr.skill.json +466 -0
  744. package/lib/host-packages/claude/openplanr/skills/design-review/references/craft.md +68 -0
  745. package/lib/host-packages/claude/openplanr/skills/design-review/references/design-spec-template.md +88 -0
  746. package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +33 -0
  747. package/lib/host-packages/claude/openplanr/skills/design-review/references/discovery.md +53 -0
  748. package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +105 -0
  749. package/lib/host-packages/claude/openplanr/skills/design-review/references/handoff.md +47 -0
  750. package/lib/host-packages/claude/openplanr/skills/design-review/references/review.md +88 -0
  751. package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +131 -0
  752. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +93 -0
  753. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +306 -0
  754. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-review-context.schema.json +191 -0
  755. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-review-handoff.schema.json +407 -0
  756. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design.mjs +17323 -0
  757. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/notices/entities.txt +13 -0
  758. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/notices/parse5.txt +21 -0
  759. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  760. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  761. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  762. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  763. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  764. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  765. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  766. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +115 -0
  767. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  768. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  769. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  770. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  771. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  772. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  773. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  774. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  775. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  776. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  777. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  778. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  779. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  780. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  781. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  782. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  783. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  784. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +65 -0
  785. package/lib/host-packages/claude/openplanr/skills/diagram/openplanr.skill.json +59 -0
  786. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +86 -0
  787. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-fidelity.md +19 -0
  788. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +22 -0
  789. package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +40 -0
  790. package/lib/host-packages/claude/openplanr/skills/doctor/openplanr.skill.json +37 -0
  791. package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +106 -0
  792. package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +31 -0
  793. package/lib/host-packages/claude/openplanr/skills/investigate/openplanr.skill.json +26 -0
  794. package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +33 -0
  795. package/lib/host-packages/claude/openplanr/skills/land/openplanr.skill.json +26 -0
  796. package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +181 -0
  797. package/lib/host-packages/claude/openplanr/skills/operate/openplanr.skill.json +70 -0
  798. package/lib/host-packages/claude/openplanr/skills/operate/scripts/errors.mjs +8 -0
  799. package/lib/host-packages/claude/openplanr/skills/operate/scripts/operate-review-contract.mjs +438 -0
  800. package/lib/host-packages/claude/openplanr/skills/operate/scripts/operate-review-note.mjs +595 -0
  801. package/lib/host-packages/claude/openplanr/skills/operate/scripts/validate-note.mjs +31 -0
  802. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +106 -0
  803. package/lib/host-packages/claude/openplanr/skills/plan/openplanr.skill.json +389 -0
  804. package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +39 -0
  805. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +306 -0
  806. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-review-context.schema.json +191 -0
  807. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-review-handoff.schema.json +407 -0
  808. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design.mjs +17323 -0
  809. package/lib/host-packages/claude/openplanr/skills/plan/scripts/planning-ids.mjs +120 -0
  810. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/notices/entities.txt +13 -0
  811. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/notices/parse5.txt +21 -0
  812. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  813. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  814. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  815. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  816. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  817. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  818. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  819. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +115 -0
  820. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  821. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  822. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  823. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  824. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  825. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  826. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  827. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  828. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  829. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  830. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  831. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  832. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  833. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  834. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  835. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  836. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  837. package/lib/host-packages/claude/openplanr/skills/plan-review/SKILL.md +39 -0
  838. package/lib/host-packages/claude/openplanr/skills/plan-review/openplanr.skill.json +26 -0
  839. package/lib/host-packages/claude/openplanr/skills/release/SKILL.md +180 -0
  840. package/lib/host-packages/claude/openplanr/skills/release/assets/changelog-template.md +18 -0
  841. package/lib/host-packages/claude/openplanr/skills/release/assets/profile-template.md +45 -0
  842. package/lib/host-packages/claude/openplanr/skills/release/openplanr.skill.json +92 -0
  843. package/lib/host-packages/claude/openplanr/skills/release/references/cadence.md +92 -0
  844. package/lib/host-packages/claude/openplanr/skills/release/references/release-notes.md +127 -0
  845. package/lib/host-packages/claude/openplanr/skills/release/references/schemes.md +103 -0
  846. package/lib/host-packages/claude/openplanr/skills/release/scripts/collect_changes.sh +85 -0
  847. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +80 -0
  848. package/lib/host-packages/claude/openplanr/skills/ship/openplanr.skill.json +48 -0
  849. package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +14 -0
  850. package/lib/host-packages/claude/openplanr/skills/ship/scripts/discover-verification.mjs +107 -0
  851. package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +53 -0
  852. package/lib/host-packages/claude/openplanr/skills/spec/openplanr.skill.json +37 -0
  853. package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +32 -0
  854. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +21 -0
  855. package/lib/host-packages/claude/openplanr/skills/status/openplanr.skill.json +26 -0
  856. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +30 -0
  857. package/lib/host-packages/claude/openplanr/skills/sync/openplanr.skill.json +37 -0
  858. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +230 -0
  859. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +939 -0
  860. package/lib/host-packages/cursor/openplanr/manifest.json +32 -0
  861. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +18 -0
  862. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +51 -0
  863. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +53 -0
  864. package/lib/host-packages/cursor/openplanr/rules/planr-browser-qa.mdc +34 -0
  865. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +111 -0
  866. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/errors.mjs +8 -0
  867. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/operate-review-contract.mjs +438 -0
  868. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/operate-review-note.mjs +595 -0
  869. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/validate-note.mjs +31 -0
  870. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review.mdc +45 -0
  871. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/errors.mjs +8 -0
  872. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/operate-review-contract.mjs +438 -0
  873. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/operate-review-note.mjs +595 -0
  874. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/validate-note.mjs +31 -0
  875. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +99 -0
  876. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/errors.mjs +8 -0
  877. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/operate-review-contract.mjs +438 -0
  878. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/operate-review-note.mjs +595 -0
  879. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/validate-note.mjs +31 -0
  880. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +84 -0
  881. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +111 -0
  882. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/errors.mjs +8 -0
  883. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/operate-review-contract.mjs +438 -0
  884. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/operate-review-note.mjs +595 -0
  885. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/validate-note.mjs +31 -0
  886. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review.mdc +44 -0
  887. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +111 -0
  888. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/errors.mjs +8 -0
  889. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/operate-review-contract.mjs +438 -0
  890. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/operate-review-note.mjs +595 -0
  891. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/validate-note.mjs +31 -0
  892. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review.mdc +43 -0
  893. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +111 -0
  894. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/errors.mjs +8 -0
  895. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/operate-review-contract.mjs +438 -0
  896. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/operate-review-note.mjs +595 -0
  897. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/validate-note.mjs +31 -0
  898. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review.mdc +46 -0
  899. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +111 -0
  900. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/errors.mjs +8 -0
  901. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/operate-review-contract.mjs +438 -0
  902. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/operate-review-note.mjs +595 -0
  903. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/validate-note.mjs +31 -0
  904. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review.mdc +45 -0
  905. package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +19 -0
  906. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/craft.md +68 -0
  907. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-spec-template.md +88 -0
  908. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +33 -0
  909. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/discovery.md +53 -0
  910. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +105 -0
  911. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/handoff.md +47 -0
  912. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/review.md +88 -0
  913. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +131 -0
  914. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +93 -0
  915. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +306 -0
  916. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-review-context.schema.json +191 -0
  917. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-review-handoff.schema.json +407 -0
  918. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design.mjs +17323 -0
  919. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/notices/entities.txt +13 -0
  920. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/notices/parse5.txt +21 -0
  921. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  922. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  923. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  924. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  925. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  926. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  927. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  928. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/package.json +115 -0
  929. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  930. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  931. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  932. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  933. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  934. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  935. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  936. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  937. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  938. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  939. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  940. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  941. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  942. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  943. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  944. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  945. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  946. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/craft.md +68 -0
  947. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-spec-template.md +88 -0
  948. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +33 -0
  949. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/discovery.md +53 -0
  950. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +105 -0
  951. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/handoff.md +47 -0
  952. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/review.md +88 -0
  953. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +131 -0
  954. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +93 -0
  955. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +306 -0
  956. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-review-context.schema.json +191 -0
  957. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-review-handoff.schema.json +407 -0
  958. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design.mjs +17323 -0
  959. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/notices/entities.txt +13 -0
  960. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/notices/parse5.txt +21 -0
  961. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  962. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  963. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  964. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  965. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  966. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  967. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  968. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/package.json +115 -0
  969. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  970. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  971. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  972. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  973. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  974. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  975. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  976. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  977. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  978. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  979. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  980. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  981. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  982. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  983. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  984. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  985. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  986. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +57 -0
  987. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/craft.md +68 -0
  988. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-spec-template.md +88 -0
  989. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +33 -0
  990. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/discovery.md +53 -0
  991. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +105 -0
  992. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/handoff.md +47 -0
  993. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/review.md +88 -0
  994. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +131 -0
  995. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +93 -0
  996. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +306 -0
  997. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-review-context.schema.json +191 -0
  998. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-review-handoff.schema.json +407 -0
  999. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design.mjs +17323 -0
  1000. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/notices/entities.txt +13 -0
  1001. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/notices/parse5.txt +21 -0
  1002. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1003. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1004. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1005. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1006. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1007. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1008. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1009. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/package.json +115 -0
  1010. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1011. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1012. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1013. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1014. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1015. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1016. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1017. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1018. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1019. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1020. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1021. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1022. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1023. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1024. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1025. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1026. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1027. package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +53 -0
  1028. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +72 -0
  1029. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +86 -0
  1030. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-fidelity.md +19 -0
  1031. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +22 -0
  1032. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +64 -0
  1033. package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +106 -0
  1034. package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +39 -0
  1035. package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +31 -0
  1036. package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +32 -0
  1037. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/errors.mjs +8 -0
  1038. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/operate-review-contract.mjs +438 -0
  1039. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/operate-review-note.mjs +595 -0
  1040. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/validate-note.mjs +31 -0
  1041. package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +180 -0
  1042. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +39 -0
  1043. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +306 -0
  1044. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-review-context.schema.json +191 -0
  1045. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-review-handoff.schema.json +407 -0
  1046. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design.mjs +17323 -0
  1047. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/planning-ids.mjs +120 -0
  1048. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/notices/entities.txt +13 -0
  1049. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/notices/parse5.txt +21 -0
  1050. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1051. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1052. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1053. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1054. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1055. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1056. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1057. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/package.json +115 -0
  1058. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1059. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1060. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1061. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1062. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1063. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1064. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1065. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1066. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1067. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1068. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1069. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1070. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1071. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1072. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1073. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1074. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1075. package/lib/host-packages/cursor/openplanr/rules/planr-plan-review.mdc +38 -0
  1076. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +105 -0
  1077. package/lib/host-packages/cursor/openplanr/rules/planr-release/assets/changelog-template.md +18 -0
  1078. package/lib/host-packages/cursor/openplanr/rules/planr-release/assets/profile-template.md +45 -0
  1079. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/cadence.md +92 -0
  1080. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/release-notes.md +127 -0
  1081. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/schemes.md +103 -0
  1082. package/lib/host-packages/cursor/openplanr/rules/planr-release/scripts/collect_changes.sh +85 -0
  1083. package/lib/host-packages/cursor/openplanr/rules/planr-release.mdc +179 -0
  1084. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +14 -0
  1085. package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/discover-verification.mjs +107 -0
  1086. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +79 -0
  1087. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +32 -0
  1088. package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +52 -0
  1089. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +20 -0
  1090. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +230 -0
  1091. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +29 -0
  1092. package/lib/host-packages/openai/.claude-plugin/marketplace.json +19 -0
  1093. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +10 -0
  1094. package/lib/host-packages/openai/openplanr/.openplanr-content.json +1139 -0
  1095. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +54 -0
  1096. package/lib/host-packages/openai/openplanr/skills/artifact/agents/openai.yaml +6 -0
  1097. package/lib/host-packages/openai/openplanr/skills/artifact/openplanr.skill.json +48 -0
  1098. package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +18 -0
  1099. package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +51 -0
  1100. package/lib/host-packages/openai/openplanr/skills/browser-qa/SKILL.md +34 -0
  1101. package/lib/host-packages/openai/openplanr/skills/browser-qa/agents/openai.yaml +6 -0
  1102. package/lib/host-packages/openai/openplanr/skills/browser-qa/openplanr.skill.json +26 -0
  1103. package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +47 -0
  1104. package/lib/host-packages/openai/openplanr/skills/ceo-review/agents/openai.yaml +6 -0
  1105. package/lib/host-packages/openai/openplanr/skills/ceo-review/openplanr.skill.json +81 -0
  1106. package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +111 -0
  1107. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/errors.mjs +8 -0
  1108. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/operate-review-contract.mjs +438 -0
  1109. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/operate-review-note.mjs +595 -0
  1110. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/validate-note.mjs +31 -0
  1111. package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +101 -0
  1112. package/lib/host-packages/openai/openplanr/skills/chair-review/agents/openai.yaml +6 -0
  1113. package/lib/host-packages/openai/openplanr/skills/chair-review/openplanr.skill.json +70 -0
  1114. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/errors.mjs +8 -0
  1115. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/operate-review-contract.mjs +438 -0
  1116. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/operate-review-note.mjs +595 -0
  1117. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/validate-note.mjs +31 -0
  1118. package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +86 -0
  1119. package/lib/host-packages/openai/openplanr/skills/challenger-review/agents/openai.yaml +6 -0
  1120. package/lib/host-packages/openai/openplanr/skills/challenger-review/openplanr.skill.json +70 -0
  1121. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/errors.mjs +8 -0
  1122. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/operate-review-contract.mjs +438 -0
  1123. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/operate-review-note.mjs +595 -0
  1124. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/validate-note.mjs +31 -0
  1125. package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +46 -0
  1126. package/lib/host-packages/openai/openplanr/skills/cmo-review/agents/openai.yaml +6 -0
  1127. package/lib/host-packages/openai/openplanr/skills/cmo-review/openplanr.skill.json +81 -0
  1128. package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +111 -0
  1129. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/errors.mjs +8 -0
  1130. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/operate-review-contract.mjs +438 -0
  1131. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/operate-review-note.mjs +595 -0
  1132. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/validate-note.mjs +31 -0
  1133. package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +45 -0
  1134. package/lib/host-packages/openai/openplanr/skills/coo-review/agents/openai.yaml +6 -0
  1135. package/lib/host-packages/openai/openplanr/skills/coo-review/openplanr.skill.json +81 -0
  1136. package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +111 -0
  1137. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/errors.mjs +8 -0
  1138. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/operate-review-contract.mjs +438 -0
  1139. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/operate-review-note.mjs +595 -0
  1140. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/validate-note.mjs +31 -0
  1141. package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +48 -0
  1142. package/lib/host-packages/openai/openplanr/skills/cpo-review/agents/openai.yaml +6 -0
  1143. package/lib/host-packages/openai/openplanr/skills/cpo-review/openplanr.skill.json +81 -0
  1144. package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +111 -0
  1145. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/errors.mjs +8 -0
  1146. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/operate-review-contract.mjs +438 -0
  1147. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/operate-review-note.mjs +595 -0
  1148. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/validate-note.mjs +31 -0
  1149. package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +47 -0
  1150. package/lib/host-packages/openai/openplanr/skills/cto-review/agents/openai.yaml +6 -0
  1151. package/lib/host-packages/openai/openplanr/skills/cto-review/openplanr.skill.json +81 -0
  1152. package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +111 -0
  1153. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/errors.mjs +8 -0
  1154. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/operate-review-contract.mjs +438 -0
  1155. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/operate-review-note.mjs +595 -0
  1156. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/validate-note.mjs +31 -0
  1157. package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +20 -0
  1158. package/lib/host-packages/openai/openplanr/skills/dashboard/agents/openai.yaml +6 -0
  1159. package/lib/host-packages/openai/openplanr/skills/dashboard/openplanr.skill.json +26 -0
  1160. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +73 -0
  1161. package/lib/host-packages/openai/openplanr/skills/design/agents/openai.yaml +6 -0
  1162. package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +466 -0
  1163. package/lib/host-packages/openai/openplanr/skills/design/references/craft.md +68 -0
  1164. package/lib/host-packages/openai/openplanr/skills/design/references/design-spec-template.md +88 -0
  1165. package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +33 -0
  1166. package/lib/host-packages/openai/openplanr/skills/design/references/discovery.md +53 -0
  1167. package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +105 -0
  1168. package/lib/host-packages/openai/openplanr/skills/design/references/handoff.md +47 -0
  1169. package/lib/host-packages/openai/openplanr/skills/design/references/review.md +88 -0
  1170. package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +131 -0
  1171. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +93 -0
  1172. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +306 -0
  1173. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-review-context.schema.json +191 -0
  1174. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-review-handoff.schema.json +407 -0
  1175. package/lib/host-packages/openai/openplanr/skills/design/scripts/design.mjs +17323 -0
  1176. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/notices/entities.txt +13 -0
  1177. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/notices/parse5.txt +21 -0
  1178. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1179. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1180. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1181. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1182. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1183. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1184. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1185. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +115 -0
  1186. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1187. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1188. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1189. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1190. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1191. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1192. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1193. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1194. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1195. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1196. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1197. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1198. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1199. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1200. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1201. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1202. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1203. package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +58 -0
  1204. package/lib/host-packages/openai/openplanr/skills/design-loop/agents/openai.yaml +6 -0
  1205. package/lib/host-packages/openai/openplanr/skills/design-loop/openplanr.skill.json +466 -0
  1206. package/lib/host-packages/openai/openplanr/skills/design-loop/references/craft.md +68 -0
  1207. package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-spec-template.md +88 -0
  1208. package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +33 -0
  1209. package/lib/host-packages/openai/openplanr/skills/design-loop/references/discovery.md +53 -0
  1210. package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +105 -0
  1211. package/lib/host-packages/openai/openplanr/skills/design-loop/references/handoff.md +47 -0
  1212. package/lib/host-packages/openai/openplanr/skills/design-loop/references/review.md +88 -0
  1213. package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +131 -0
  1214. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +93 -0
  1215. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +306 -0
  1216. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-review-context.schema.json +191 -0
  1217. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-review-handoff.schema.json +407 -0
  1218. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design.mjs +17323 -0
  1219. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/notices/entities.txt +13 -0
  1220. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/notices/parse5.txt +21 -0
  1221. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1222. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1223. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1224. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1225. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1226. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1227. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1228. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +115 -0
  1229. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1230. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1231. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1232. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1233. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1234. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1235. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1236. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1237. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1238. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1239. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1240. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1241. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1242. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1243. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1244. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1245. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1246. package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +54 -0
  1247. package/lib/host-packages/openai/openplanr/skills/design-review/agents/openai.yaml +6 -0
  1248. package/lib/host-packages/openai/openplanr/skills/design-review/openplanr.skill.json +466 -0
  1249. package/lib/host-packages/openai/openplanr/skills/design-review/references/craft.md +68 -0
  1250. package/lib/host-packages/openai/openplanr/skills/design-review/references/design-spec-template.md +88 -0
  1251. package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +33 -0
  1252. package/lib/host-packages/openai/openplanr/skills/design-review/references/discovery.md +53 -0
  1253. package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +105 -0
  1254. package/lib/host-packages/openai/openplanr/skills/design-review/references/handoff.md +47 -0
  1255. package/lib/host-packages/openai/openplanr/skills/design-review/references/review.md +88 -0
  1256. package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +131 -0
  1257. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +93 -0
  1258. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +306 -0
  1259. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-review-context.schema.json +191 -0
  1260. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-review-handoff.schema.json +407 -0
  1261. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design.mjs +17323 -0
  1262. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/notices/entities.txt +13 -0
  1263. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/notices/parse5.txt +21 -0
  1264. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1265. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1266. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1267. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1268. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1269. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1270. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1271. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +115 -0
  1272. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1273. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1274. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1275. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1276. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1277. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1278. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1279. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1280. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1281. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1282. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1283. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1284. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1285. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1286. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1287. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1288. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1289. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +65 -0
  1290. package/lib/host-packages/openai/openplanr/skills/diagram/agents/openai.yaml +6 -0
  1291. package/lib/host-packages/openai/openplanr/skills/diagram/openplanr.skill.json +59 -0
  1292. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +86 -0
  1293. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-fidelity.md +19 -0
  1294. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +22 -0
  1295. package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +40 -0
  1296. package/lib/host-packages/openai/openplanr/skills/doctor/agents/openai.yaml +6 -0
  1297. package/lib/host-packages/openai/openplanr/skills/doctor/openplanr.skill.json +37 -0
  1298. package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +106 -0
  1299. package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +31 -0
  1300. package/lib/host-packages/openai/openplanr/skills/investigate/agents/openai.yaml +6 -0
  1301. package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +26 -0
  1302. package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +33 -0
  1303. package/lib/host-packages/openai/openplanr/skills/land/agents/openai.yaml +6 -0
  1304. package/lib/host-packages/openai/openplanr/skills/land/openplanr.skill.json +26 -0
  1305. package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +181 -0
  1306. package/lib/host-packages/openai/openplanr/skills/operate/agents/openai.yaml +6 -0
  1307. package/lib/host-packages/openai/openplanr/skills/operate/openplanr.skill.json +70 -0
  1308. package/lib/host-packages/openai/openplanr/skills/operate/scripts/errors.mjs +8 -0
  1309. package/lib/host-packages/openai/openplanr/skills/operate/scripts/operate-review-contract.mjs +438 -0
  1310. package/lib/host-packages/openai/openplanr/skills/operate/scripts/operate-review-note.mjs +595 -0
  1311. package/lib/host-packages/openai/openplanr/skills/operate/scripts/validate-note.mjs +31 -0
  1312. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +106 -0
  1313. package/lib/host-packages/openai/openplanr/skills/plan/agents/openai.yaml +6 -0
  1314. package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +389 -0
  1315. package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +39 -0
  1316. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +306 -0
  1317. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-review-context.schema.json +191 -0
  1318. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-review-handoff.schema.json +407 -0
  1319. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design.mjs +17323 -0
  1320. package/lib/host-packages/openai/openplanr/skills/plan/scripts/planning-ids.mjs +120 -0
  1321. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/notices/entities.txt +13 -0
  1322. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/notices/parse5.txt +21 -0
  1323. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1324. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1325. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1326. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1327. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1328. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1329. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1330. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +115 -0
  1331. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1332. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1333. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1334. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1335. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1336. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1337. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1338. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1339. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1340. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1341. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1342. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1343. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1344. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1345. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1346. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1347. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1348. package/lib/host-packages/openai/openplanr/skills/plan-review/SKILL.md +39 -0
  1349. package/lib/host-packages/openai/openplanr/skills/plan-review/agents/openai.yaml +6 -0
  1350. package/lib/host-packages/openai/openplanr/skills/plan-review/openplanr.skill.json +26 -0
  1351. package/lib/host-packages/openai/openplanr/skills/release/SKILL.md +180 -0
  1352. package/lib/host-packages/openai/openplanr/skills/release/agents/openai.yaml +6 -0
  1353. package/lib/host-packages/openai/openplanr/skills/release/assets/changelog-template.md +18 -0
  1354. package/lib/host-packages/openai/openplanr/skills/release/assets/profile-template.md +45 -0
  1355. package/lib/host-packages/openai/openplanr/skills/release/openplanr.skill.json +92 -0
  1356. package/lib/host-packages/openai/openplanr/skills/release/references/cadence.md +92 -0
  1357. package/lib/host-packages/openai/openplanr/skills/release/references/release-notes.md +127 -0
  1358. package/lib/host-packages/openai/openplanr/skills/release/references/schemes.md +103 -0
  1359. package/lib/host-packages/openai/openplanr/skills/release/scripts/collect_changes.sh +85 -0
  1360. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +80 -0
  1361. package/lib/host-packages/openai/openplanr/skills/ship/agents/openai.yaml +6 -0
  1362. package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +48 -0
  1363. package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +14 -0
  1364. package/lib/host-packages/openai/openplanr/skills/ship/scripts/discover-verification.mjs +107 -0
  1365. package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +53 -0
  1366. package/lib/host-packages/openai/openplanr/skills/spec/agents/openai.yaml +6 -0
  1367. package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +37 -0
  1368. package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +32 -0
  1369. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +21 -0
  1370. package/lib/host-packages/openai/openplanr/skills/status/agents/openai.yaml +6 -0
  1371. package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +26 -0
  1372. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +30 -0
  1373. package/lib/host-packages/openai/openplanr/skills/sync/agents/openai.yaml +6 -0
  1374. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +37 -0
  1375. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +230 -0
  1376. package/lib/integrations.d.mts +43 -0
  1377. package/lib/integrations.mjs +230 -0
  1378. package/lib/skill-runtime/errors.mjs +8 -0
  1379. package/lib/skill-runtime/operate-review-contract.mjs +438 -0
  1380. package/lib/skill-runtime/operate-review-note.mjs +595 -0
  1381. package/package.json +56 -18
  1382. package/dist/ai/codebase/context-builder.d.ts +0 -50
  1383. package/dist/ai/codebase/context-builder.d.ts.map +0 -1
  1384. package/dist/ai/codebase/context-builder.js +0 -281
  1385. package/dist/ai/codebase/context-builder.js.map +0 -1
  1386. package/dist/ai/codebase/file-reader.d.ts +0 -22
  1387. package/dist/ai/codebase/file-reader.d.ts.map +0 -1
  1388. package/dist/ai/codebase/file-reader.js +0 -144
  1389. package/dist/ai/codebase/file-reader.js.map +0 -1
  1390. package/dist/ai/codebase/index.d.ts +0 -7
  1391. package/dist/ai/codebase/index.d.ts.map +0 -1
  1392. package/dist/ai/codebase/index.js +0 -7
  1393. package/dist/ai/codebase/index.js.map +0 -1
  1394. package/dist/ai/codebase/pattern-rules.d.ts +0 -28
  1395. package/dist/ai/codebase/pattern-rules.d.ts.map +0 -1
  1396. package/dist/ai/codebase/pattern-rules.js +0 -186
  1397. package/dist/ai/codebase/pattern-rules.js.map +0 -1
  1398. package/dist/ai/codebase/rules-reader.d.ts +0 -14
  1399. package/dist/ai/codebase/rules-reader.d.ts.map +0 -1
  1400. package/dist/ai/codebase/rules-reader.js +0 -25
  1401. package/dist/ai/codebase/rules-reader.js.map +0 -1
  1402. package/dist/ai/codebase/stack-detector.d.ts +0 -18
  1403. package/dist/ai/codebase/stack-detector.d.ts.map +0 -1
  1404. package/dist/ai/codebase/stack-detector.js +0 -173
  1405. package/dist/ai/codebase/stack-detector.js.map +0 -1
  1406. package/dist/ai/codebase/tree-generator.d.ts +0 -8
  1407. package/dist/ai/codebase/tree-generator.d.ts.map +0 -1
  1408. package/dist/ai/codebase/tree-generator.js +0 -84
  1409. package/dist/ai/codebase/tree-generator.js.map +0 -1
  1410. package/dist/ai/errors.d.ts +0 -22
  1411. package/dist/ai/errors.d.ts.map +0 -1
  1412. package/dist/ai/errors.js +0 -72
  1413. package/dist/ai/errors.js.map +0 -1
  1414. package/dist/ai/index.d.ts +0 -11
  1415. package/dist/ai/index.d.ts.map +0 -1
  1416. package/dist/ai/index.js +0 -10
  1417. package/dist/ai/index.js.map +0 -1
  1418. package/dist/ai/prompts/prompt-builder.d.ts +0 -134
  1419. package/dist/ai/prompts/prompt-builder.d.ts.map +0 -1
  1420. package/dist/ai/prompts/prompt-builder.js +0 -295
  1421. package/dist/ai/prompts/prompt-builder.js.map +0 -1
  1422. package/dist/ai/prompts/system-prompts.d.ts +0 -41
  1423. package/dist/ai/prompts/system-prompts.d.ts.map +0 -1
  1424. package/dist/ai/prompts/system-prompts.js +0 -512
  1425. package/dist/ai/prompts/system-prompts.js.map +0 -1
  1426. package/dist/ai/provider-factory.d.ts +0 -10
  1427. package/dist/ai/provider-factory.d.ts.map +0 -1
  1428. package/dist/ai/provider-factory.js +0 -49
  1429. package/dist/ai/provider-factory.js.map +0 -1
  1430. package/dist/ai/providers/anthropic-provider.d.ts +0 -24
  1431. package/dist/ai/providers/anthropic-provider.d.ts.map +0 -1
  1432. package/dist/ai/providers/anthropic-provider.js +0 -97
  1433. package/dist/ai/providers/anthropic-provider.js.map +0 -1
  1434. package/dist/ai/providers/ollama-provider.d.ts +0 -13
  1435. package/dist/ai/providers/ollama-provider.d.ts.map +0 -1
  1436. package/dist/ai/providers/ollama-provider.js +0 -16
  1437. package/dist/ai/providers/ollama-provider.js.map +0 -1
  1438. package/dist/ai/providers/openai-provider.d.ts +0 -19
  1439. package/dist/ai/providers/openai-provider.d.ts.map +0 -1
  1440. package/dist/ai/providers/openai-provider.js +0 -84
  1441. package/dist/ai/providers/openai-provider.js.map +0 -1
  1442. package/dist/ai/schemas/ai-response-schemas.d.ts +0 -340
  1443. package/dist/ai/schemas/ai-response-schemas.d.ts.map +0 -1
  1444. package/dist/ai/schemas/ai-response-schemas.js +0 -278
  1445. package/dist/ai/schemas/ai-response-schemas.js.map +0 -1
  1446. package/dist/ai/types.d.ts +0 -76
  1447. package/dist/ai/types.d.ts.map +0 -1
  1448. package/dist/ai/types.js +0 -49
  1449. package/dist/ai/types.js.map +0 -1
  1450. package/dist/ai/validation/index.d.ts +0 -2
  1451. package/dist/ai/validation/index.d.ts.map +0 -1
  1452. package/dist/ai/validation/index.js +0 -2
  1453. package/dist/ai/validation/index.js.map +0 -1
  1454. package/dist/ai/validation/task-validator.d.ts +0 -37
  1455. package/dist/ai/validation/task-validator.d.ts.map +0 -1
  1456. package/dist/ai/validation/task-validator.js +0 -81
  1457. package/dist/ai/validation/task-validator.js.map +0 -1
  1458. package/dist/cli/commands/config.d.ts +0 -8
  1459. package/dist/cli/commands/config.d.ts.map +0 -1
  1460. package/dist/cli/commands/config.js +0 -224
  1461. package/dist/cli/commands/config.js.map +0 -1
  1462. package/dist/cli/commands/estimate.d.ts +0 -3
  1463. package/dist/cli/commands/estimate.d.ts.map +0 -1
  1464. package/dist/cli/commands/estimate.js +0 -368
  1465. package/dist/cli/commands/estimate.js.map +0 -1
  1466. package/dist/cli/commands/init.d.ts +0 -9
  1467. package/dist/cli/commands/init.d.ts.map +0 -1
  1468. package/dist/cli/commands/init.js +0 -166
  1469. package/dist/cli/commands/init.js.map +0 -1
  1470. package/dist/cli/commands/pipeline.d.ts +0 -3
  1471. package/dist/cli/commands/pipeline.d.ts.map +0 -1
  1472. package/dist/cli/commands/pipeline.js +0 -59
  1473. package/dist/cli/commands/pipeline.js.map +0 -1
  1474. package/dist/cli/commands/plan.d.ts +0 -15
  1475. package/dist/cli/commands/plan.d.ts.map +0 -1
  1476. package/dist/cli/commands/plan.js +0 -444
  1477. package/dist/cli/commands/plan.js.map +0 -1
  1478. package/dist/cli/commands/refine.d.ts +0 -10
  1479. package/dist/cli/commands/refine.d.ts.map +0 -1
  1480. package/dist/cli/commands/refine.js +0 -226
  1481. package/dist/cli/commands/refine.js.map +0 -1
  1482. package/dist/cli/commands/revise.d.ts +0 -24
  1483. package/dist/cli/commands/revise.d.ts.map +0 -1
  1484. package/dist/cli/commands/revise.js +0 -572
  1485. package/dist/cli/commands/revise.js.map +0 -1
  1486. package/dist/cli/helpers/task-creation.d.ts +0 -89
  1487. package/dist/cli/helpers/task-creation.d.ts.map +0 -1
  1488. package/dist/cli/helpers/task-creation.js +0 -139
  1489. package/dist/cli/helpers/task-creation.js.map +0 -1
  1490. package/dist/services/ai-service.d.ts +0 -77
  1491. package/dist/services/ai-service.d.ts.map +0 -1
  1492. package/dist/services/ai-service.js +0 -241
  1493. package/dist/services/ai-service.js.map +0 -1
  1494. package/dist/services/artifact-gathering.d.ts +0 -55
  1495. package/dist/services/artifact-gathering.d.ts.map +0 -1
  1496. package/dist/services/artifact-gathering.js +0 -147
  1497. package/dist/services/artifact-gathering.js.map +0 -1
  1498. package/dist/services/operate/advisors.d.ts +0 -625
  1499. package/dist/services/operate/advisors.d.ts.map +0 -1
  1500. package/dist/services/operate/advisors.js +0 -1545
  1501. package/dist/services/operate/advisors.js.map +0 -1
  1502. package/dist/services/operate/artifact-route-generation.d.ts +0 -111
  1503. package/dist/services/operate/artifact-route-generation.d.ts.map +0 -1
  1504. package/dist/services/operate/artifact-route-generation.js +0 -460
  1505. package/dist/services/operate/artifact-route-generation.js.map +0 -1
  1506. package/dist/services/operate/artifacts.d.ts +0 -66
  1507. package/dist/services/operate/artifacts.d.ts.map +0 -1
  1508. package/dist/services/operate/artifacts.js +0 -336
  1509. package/dist/services/operate/artifacts.js.map +0 -1
  1510. package/dist/services/operate/cadence.d.ts +0 -50
  1511. package/dist/services/operate/cadence.d.ts.map +0 -1
  1512. package/dist/services/operate/cadence.js +0 -56
  1513. package/dist/services/operate/cadence.js.map +0 -1
  1514. package/dist/services/operate/canonical.d.ts +0 -18
  1515. package/dist/services/operate/canonical.d.ts.map +0 -1
  1516. package/dist/services/operate/canonical.js +0 -157
  1517. package/dist/services/operate/canonical.js.map +0 -1
  1518. package/dist/services/operate/citation-resolution.d.ts +0 -161
  1519. package/dist/services/operate/citation-resolution.d.ts.map +0 -1
  1520. package/dist/services/operate/citation-resolution.js +0 -593
  1521. package/dist/services/operate/citation-resolution.js.map +0 -1
  1522. package/dist/services/operate/completion.d.ts +0 -80
  1523. package/dist/services/operate/completion.d.ts.map +0 -1
  1524. package/dist/services/operate/completion.js +0 -279
  1525. package/dist/services/operate/completion.js.map +0 -1
  1526. package/dist/services/operate/config.d.ts +0 -154
  1527. package/dist/services/operate/config.d.ts.map +0 -1
  1528. package/dist/services/operate/config.js +0 -791
  1529. package/dist/services/operate/config.js.map +0 -1
  1530. package/dist/services/operate/consolidation.d.ts +0 -18
  1531. package/dist/services/operate/consolidation.d.ts.map +0 -1
  1532. package/dist/services/operate/consolidation.js +0 -539
  1533. package/dist/services/operate/consolidation.js.map +0 -1
  1534. package/dist/services/operate/context-research.d.ts +0 -84
  1535. package/dist/services/operate/context-research.d.ts.map +0 -1
  1536. package/dist/services/operate/context-research.js +0 -448
  1537. package/dist/services/operate/context-research.js.map +0 -1
  1538. package/dist/services/operate/decision-brief.d.ts +0 -237
  1539. package/dist/services/operate/decision-brief.d.ts.map +0 -1
  1540. package/dist/services/operate/decision-brief.js +0 -368
  1541. package/dist/services/operate/decision-brief.js.map +0 -1
  1542. package/dist/services/operate/doctor.d.ts +0 -85
  1543. package/dist/services/operate/doctor.d.ts.map +0 -1
  1544. package/dist/services/operate/doctor.js +0 -1070
  1545. package/dist/services/operate/doctor.js.map +0 -1
  1546. package/dist/services/operate/drafts.d.ts +0 -48
  1547. package/dist/services/operate/drafts.d.ts.map +0 -1
  1548. package/dist/services/operate/drafts.js +0 -398
  1549. package/dist/services/operate/drafts.js.map +0 -1
  1550. package/dist/services/operate/engine.d.ts +0 -151
  1551. package/dist/services/operate/engine.d.ts.map +0 -1
  1552. package/dist/services/operate/engine.js +0 -1896
  1553. package/dist/services/operate/engine.js.map +0 -1
  1554. package/dist/services/operate/event-store.d.ts +0 -113
  1555. package/dist/services/operate/event-store.d.ts.map +0 -1
  1556. package/dist/services/operate/event-store.js +0 -384
  1557. package/dist/services/operate/event-store.js.map +0 -1
  1558. package/dist/services/operate/evidence-cache.d.ts +0 -41
  1559. package/dist/services/operate/evidence-cache.d.ts.map +0 -1
  1560. package/dist/services/operate/evidence-cache.js +0 -193
  1561. package/dist/services/operate/evidence-cache.js.map +0 -1
  1562. package/dist/services/operate/evidence-import.d.ts +0 -40
  1563. package/dist/services/operate/evidence-import.d.ts.map +0 -1
  1564. package/dist/services/operate/evidence-import.js +0 -340
  1565. package/dist/services/operate/evidence-import.js.map +0 -1
  1566. package/dist/services/operate/evidence.d.ts +0 -21
  1567. package/dist/services/operate/evidence.d.ts.map +0 -1
  1568. package/dist/services/operate/evidence.js +0 -20
  1569. package/dist/services/operate/evidence.js.map +0 -1
  1570. package/dist/services/operate/ids.d.ts +0 -7
  1571. package/dist/services/operate/ids.d.ts.map +0 -1
  1572. package/dist/services/operate/ids.js +0 -23
  1573. package/dist/services/operate/ids.js.map +0 -1
  1574. package/dist/services/operate/index.d.ts +0 -16
  1575. package/dist/services/operate/index.d.ts.map +0 -1
  1576. package/dist/services/operate/index.js +0 -1864
  1577. package/dist/services/operate/index.js.map +0 -1
  1578. package/dist/services/operate/integrity.d.ts +0 -81
  1579. package/dist/services/operate/integrity.d.ts.map +0 -1
  1580. package/dist/services/operate/integrity.js +0 -152
  1581. package/dist/services/operate/integrity.js.map +0 -1
  1582. package/dist/services/operate/interaction/action-service.d.ts +0 -34
  1583. package/dist/services/operate/interaction/action-service.d.ts.map +0 -1
  1584. package/dist/services/operate/interaction/action-service.js +0 -103
  1585. package/dist/services/operate/interaction/action-service.js.map +0 -1
  1586. package/dist/services/operate/interaction/answer-service.d.ts +0 -40
  1587. package/dist/services/operate/interaction/answer-service.d.ts.map +0 -1
  1588. package/dist/services/operate/interaction/answer-service.js +0 -317
  1589. package/dist/services/operate/interaction/answer-service.js.map +0 -1
  1590. package/dist/services/operate/interaction/charter-suggestions.d.ts +0 -29
  1591. package/dist/services/operate/interaction/charter-suggestions.d.ts.map +0 -1
  1592. package/dist/services/operate/interaction/charter-suggestions.js +0 -104
  1593. package/dist/services/operate/interaction/charter-suggestions.js.map +0 -1
  1594. package/dist/services/operate/interaction/confirmation-service.d.ts +0 -30
  1595. package/dist/services/operate/interaction/confirmation-service.d.ts.map +0 -1
  1596. package/dist/services/operate/interaction/confirmation-service.js +0 -78
  1597. package/dist/services/operate/interaction/confirmation-service.js.map +0 -1
  1598. package/dist/services/operate/interaction/initialization-replay.d.ts +0 -9
  1599. package/dist/services/operate/interaction/initialization-replay.d.ts.map +0 -1
  1600. package/dist/services/operate/interaction/initialization-replay.js +0 -64
  1601. package/dist/services/operate/interaction/initialization-replay.js.map +0 -1
  1602. package/dist/services/operate/interaction/question-engine.d.ts +0 -41
  1603. package/dist/services/operate/interaction/question-engine.d.ts.map +0 -1
  1604. package/dist/services/operate/interaction/question-engine.js +0 -434
  1605. package/dist/services/operate/interaction/question-engine.js.map +0 -1
  1606. package/dist/services/operate/interaction/question-registry.d.ts +0 -52
  1607. package/dist/services/operate/interaction/question-registry.d.ts.map +0 -1
  1608. package/dist/services/operate/interaction/question-registry.js +0 -305
  1609. package/dist/services/operate/interaction/question-registry.js.map +0 -1
  1610. package/dist/services/operate/interaction/session-service.d.ts +0 -55
  1611. package/dist/services/operate/interaction/session-service.d.ts.map +0 -1
  1612. package/dist/services/operate/interaction/session-service.js +0 -304
  1613. package/dist/services/operate/interaction/session-service.js.map +0 -1
  1614. package/dist/services/operate/interaction/terminal-renderer.d.ts +0 -19
  1615. package/dist/services/operate/interaction/terminal-renderer.d.ts.map +0 -1
  1616. package/dist/services/operate/interaction/terminal-renderer.js +0 -124
  1617. package/dist/services/operate/interaction/terminal-renderer.js.map +0 -1
  1618. package/dist/services/operate/journal.d.ts +0 -34
  1619. package/dist/services/operate/journal.d.ts.map +0 -1
  1620. package/dist/services/operate/journal.js +0 -235
  1621. package/dist/services/operate/journal.js.map +0 -1
  1622. package/dist/services/operate/legacy-import-service.d.ts +0 -58
  1623. package/dist/services/operate/legacy-import-service.d.ts.map +0 -1
  1624. package/dist/services/operate/legacy-import-service.js +0 -922
  1625. package/dist/services/operate/legacy-import-service.js.map +0 -1
  1626. package/dist/services/operate/lifecycle-driver.d.ts +0 -309
  1627. package/dist/services/operate/lifecycle-driver.d.ts.map +0 -1
  1628. package/dist/services/operate/lifecycle-driver.js +0 -434
  1629. package/dist/services/operate/lifecycle-driver.js.map +0 -1
  1630. package/dist/services/operate/lifecycle.d.ts +0 -96
  1631. package/dist/services/operate/lifecycle.d.ts.map +0 -1
  1632. package/dist/services/operate/lifecycle.js +0 -596
  1633. package/dist/services/operate/lifecycle.js.map +0 -1
  1634. package/dist/services/operate/lock-service.d.ts +0 -37
  1635. package/dist/services/operate/lock-service.d.ts.map +0 -1
  1636. package/dist/services/operate/lock-service.js +0 -215
  1637. package/dist/services/operate/lock-service.js.map +0 -1
  1638. package/dist/services/operate/maintenance.d.ts +0 -139
  1639. package/dist/services/operate/maintenance.d.ts.map +0 -1
  1640. package/dist/services/operate/maintenance.js +0 -2200
  1641. package/dist/services/operate/maintenance.js.map +0 -1
  1642. package/dist/services/operate/migration.d.ts +0 -68
  1643. package/dist/services/operate/migration.d.ts.map +0 -1
  1644. package/dist/services/operate/migration.js +0 -243
  1645. package/dist/services/operate/migration.js.map +0 -1
  1646. package/dist/services/operate/mission-dispatch.d.ts +0 -271
  1647. package/dist/services/operate/mission-dispatch.d.ts.map +0 -1
  1648. package/dist/services/operate/mission-dispatch.js +0 -590
  1649. package/dist/services/operate/mission-dispatch.js.map +0 -1
  1650. package/dist/services/operate/outcomes.d.ts +0 -48
  1651. package/dist/services/operate/outcomes.d.ts.map +0 -1
  1652. package/dist/services/operate/outcomes.js +0 -312
  1653. package/dist/services/operate/outcomes.js.map +0 -1
  1654. package/dist/services/operate/pipeline-handoff.d.ts +0 -138
  1655. package/dist/services/operate/pipeline-handoff.d.ts.map +0 -1
  1656. package/dist/services/operate/pipeline-handoff.js +0 -175
  1657. package/dist/services/operate/pipeline-handoff.js.map +0 -1
  1658. package/dist/services/operate/profile-migration.d.ts +0 -69
  1659. package/dist/services/operate/profile-migration.d.ts.map +0 -1
  1660. package/dist/services/operate/profile-migration.js +0 -462
  1661. package/dist/services/operate/profile-migration.js.map +0 -1
  1662. package/dist/services/operate/projection-persistence.d.ts +0 -126
  1663. package/dist/services/operate/projection-persistence.d.ts.map +0 -1
  1664. package/dist/services/operate/projection-persistence.js +0 -752
  1665. package/dist/services/operate/projection-persistence.js.map +0 -1
  1666. package/dist/services/operate/projection.d.ts +0 -37
  1667. package/dist/services/operate/projection.d.ts.map +0 -1
  1668. package/dist/services/operate/projection.js +0 -209
  1669. package/dist/services/operate/projection.js.map +0 -1
  1670. package/dist/services/operate/protocol.d.ts +0 -86
  1671. package/dist/services/operate/protocol.d.ts.map +0 -1
  1672. package/dist/services/operate/protocol.js +0 -76
  1673. package/dist/services/operate/protocol.js.map +0 -1
  1674. package/dist/services/operate/read-only-providers.d.ts +0 -76
  1675. package/dist/services/operate/read-only-providers.d.ts.map +0 -1
  1676. package/dist/services/operate/read-only-providers.js +0 -421
  1677. package/dist/services/operate/read-only-providers.js.map +0 -1
  1678. package/dist/services/operate/redaction.d.ts +0 -74
  1679. package/dist/services/operate/redaction.d.ts.map +0 -1
  1680. package/dist/services/operate/redaction.js +0 -406
  1681. package/dist/services/operate/redaction.js.map +0 -1
  1682. package/dist/services/operate/reducer.d.ts +0 -10
  1683. package/dist/services/operate/reducer.d.ts.map +0 -1
  1684. package/dist/services/operate/reducer.js +0 -11
  1685. package/dist/services/operate/reducer.js.map +0 -1
  1686. package/dist/services/operate/report-html.d.ts +0 -32
  1687. package/dist/services/operate/report-html.d.ts.map +0 -1
  1688. package/dist/services/operate/report-html.js +0 -289
  1689. package/dist/services/operate/report-html.js.map +0 -1
  1690. package/dist/services/operate/reports.d.ts +0 -72
  1691. package/dist/services/operate/reports.d.ts.map +0 -1
  1692. package/dist/services/operate/reports.js +0 -481
  1693. package/dist/services/operate/reports.js.map +0 -1
  1694. package/dist/services/operate/routes.d.ts +0 -133
  1695. package/dist/services/operate/routes.d.ts.map +0 -1
  1696. package/dist/services/operate/routes.js +0 -1577
  1697. package/dist/services/operate/routes.js.map +0 -1
  1698. package/dist/services/operate/scratch.d.ts +0 -81
  1699. package/dist/services/operate/scratch.d.ts.map +0 -1
  1700. package/dist/services/operate/scratch.js +0 -190
  1701. package/dist/services/operate/scratch.js.map +0 -1
  1702. package/dist/services/operate/shipment-observer.d.ts +0 -14
  1703. package/dist/services/operate/shipment-observer.d.ts.map +0 -1
  1704. package/dist/services/operate/shipment-observer.js +0 -320
  1705. package/dist/services/operate/shipment-observer.js.map +0 -1
  1706. package/dist/services/operate/stalled-item-service.d.ts +0 -18
  1707. package/dist/services/operate/stalled-item-service.d.ts.map +0 -1
  1708. package/dist/services/operate/stalled-item-service.js +0 -121
  1709. package/dist/services/operate/stalled-item-service.js.map +0 -1
  1710. package/dist/services/operate/subprocess-env.d.ts +0 -4
  1711. package/dist/services/operate/subprocess-env.d.ts.map +0 -1
  1712. package/dist/services/operate/subprocess-env.js +0 -45
  1713. package/dist/services/operate/subprocess-env.js.map +0 -1
  1714. package/dist/services/operate/types.d.ts +0 -1064
  1715. package/dist/services/operate/types.d.ts.map +0 -1
  1716. package/dist/services/operate/types.js +0 -27
  1717. package/dist/services/operate/types.js.map +0 -1
  1718. package/dist/services/operate/workspace.d.ts +0 -76
  1719. package/dist/services/operate/workspace.d.ts.map +0 -1
  1720. package/dist/services/operate/workspace.js +0 -350
  1721. package/dist/services/operate/workspace.js.map +0 -1
  1722. package/dist/services/revise-service.d.ts +0 -115
  1723. package/dist/services/revise-service.d.ts.map +0 -1
  1724. package/dist/services/revise-service.js +0 -294
  1725. package/dist/services/revise-service.js.map +0 -1
  1726. package/dist/templates/rules/claude/planr-pipeline.md.hbs +0 -69
  1727. package/dist/templates/rules/codex/_pipeline-section.md.hbs +0 -154
  1728. package/dist/templates/rules/cursor/agents/backend-agent.md +0 -299
  1729. package/dist/templates/rules/cursor/agents/db-agent.md +0 -163
  1730. package/dist/templates/rules/cursor/agents/designer-agent.md +0 -219
  1731. package/dist/templates/rules/cursor/agents/devops-agent.md +0 -197
  1732. package/dist/templates/rules/cursor/agents/doc-gen-agent.md +0 -203
  1733. package/dist/templates/rules/cursor/agents/frontend-agent.md +0 -220
  1734. package/dist/templates/rules/cursor/agents/qa-agent.md +0 -170
  1735. package/dist/templates/rules/cursor/agents/specification-agent.md +0 -282
  1736. package/dist/templates/rules/cursor/planr-pipeline-plan.mdc.hbs +0 -196
  1737. package/dist/templates/rules/cursor/planr-pipeline-ship.mdc.hbs +0 -246
  1738. package/dist/templates/rules/cursor/planr-pipeline.mdc.hbs +0 -134
@@ -0,0 +1,1775 @@
1
+ /* Design presentation composes the artifact stage. Pins remain artifact-owned. */
2
+ (() => {
3
+ // biome-ignore lint/suspicious/noRedundantUseStrict: shipped as an inline classic script rather than an ES module
4
+ "use strict";
5
+ // Removing a pending classic script does not cancel its download. A canceled
6
+ // hosted opening must not attach its runtime to a replacement review shell.
7
+ if (document.currentScript && !document.currentScript.isConnected) return;
8
+ const payloadNode = document.getElementById("planr-design-studio-payload");
9
+ if (!payloadNode) return;
10
+ const payload = JSON.parse(payloadNode.textContent);
11
+ const design = payload.document;
12
+ const entries = payload.entries;
13
+ let options = globalThis.__OPENPLANR_DESIGN_STUDIO_OPTIONS__ ?? {};
14
+ const storageKey = `openplanr.design-studio.${design.id}`;
15
+ const q = (selector) => document.querySelector(selector);
16
+ const qa = (selector) => [...document.querySelectorAll(selector)];
17
+ const clone = (value) => JSON.parse(JSON.stringify(value));
18
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
19
+ const readyVariants = design.variants.filter(
20
+ ({ status }) => status === "ready",
21
+ );
22
+ const views = ["canvas", "prototype", "walkthrough"];
23
+ const validId = (items, id, fallback) =>
24
+ items.some((item) => (typeof item === "string" ? item : item.id) === id)
25
+ ? id
26
+ : fallback;
27
+ const normalizedViewport = (value) => {
28
+ if (
29
+ !Number.isFinite(value?.x) ||
30
+ !Number.isFinite(value?.y) ||
31
+ !Number.isFinite(value?.zoom)
32
+ )
33
+ return null;
34
+ return {
35
+ x: clamp(value.x, -1e7, 1e7),
36
+ y: clamp(value.y, -1e7, 1e7),
37
+ zoom: clamp(value.zoom, 0.05, 2),
38
+ };
39
+ };
40
+
41
+ function normalizeState(input = {}) {
42
+ const view = views.includes(input.view) ? input.view : design.defaultView;
43
+ const viewports = {};
44
+ for (const name of views) {
45
+ const viewport = normalizedViewport(input.viewports?.[name]);
46
+ if (viewport) viewports[name] = viewport;
47
+ }
48
+ const legacyViewport = Number.isFinite(input.zoom)
49
+ ? normalizedViewport({
50
+ x: Number.isFinite(input.camera?.x) ? input.camera.x : 40,
51
+ y: Number.isFinite(input.camera?.y) ? input.camera.y : 40,
52
+ zoom: input.zoom,
53
+ })
54
+ : null;
55
+ const activeViewport = viewports[view] ??
56
+ legacyViewport ?? { x: 40, y: 40, zoom: 0.5 };
57
+ const state = {
58
+ schemaVersion: "1.1.0",
59
+ view,
60
+ screenId: validId(
61
+ design.screenOrder,
62
+ input.screenId,
63
+ design.screenOrder[0],
64
+ ),
65
+ frameId: validId(design.frames, input.frameId, design.frames[0].id),
66
+ variantId: validId(
67
+ readyVariants,
68
+ input.variantId,
69
+ design.selectedVariant,
70
+ ),
71
+ selectedVariant: validId(
72
+ readyVariants,
73
+ input.selectedVariant,
74
+ design.selectedVariant,
75
+ ),
76
+ compare: Boolean(input.compare),
77
+ navOpen: input.navOpen === undefined ? true : Boolean(input.navOpen),
78
+ reviewOpen:
79
+ input.reviewOpen === undefined ? true : Boolean(input.reviewOpen),
80
+ zoom: activeViewport.zoom,
81
+ camera: { x: activeViewport.x, y: activeViewport.y },
82
+ viewports,
83
+ positions: {},
84
+ ratings: {},
85
+ remix: {},
86
+ preferences: { selected: [], rejected: [] },
87
+ };
88
+ for (const entry of entries) {
89
+ const point = input.positions?.[entry.artifactId];
90
+ if (Number.isFinite(point?.x) && Number.isFinite(point?.y)) {
91
+ state.positions[entry.artifactId] = {
92
+ x: clamp(point.x, -1e7, 1e7),
93
+ y: clamp(point.y, -1e7, 1e7),
94
+ };
95
+ }
96
+ }
97
+ for (const variant of readyVariants) {
98
+ const rating = input.ratings?.[variant.id];
99
+ if (Number.isInteger(rating) && rating >= 1 && rating <= 5)
100
+ state.ratings[variant.id] = rating;
101
+ if (typeof input.remix?.[variant.id] === "string")
102
+ state.remix[variant.id] = input.remix[variant.id].slice(0, 8192);
103
+ }
104
+ for (const kind of ["selected", "rejected"]) {
105
+ state.preferences[kind] = [
106
+ ...new Set(
107
+ (Array.isArray(input.preferences?.[kind])
108
+ ? input.preferences[kind]
109
+ : []
110
+ ).filter((id) => readyVariants.some((variant) => variant.id === id)),
111
+ ),
112
+ ];
113
+ }
114
+ return state;
115
+ }
116
+
117
+ let savedDraft = null;
118
+ try {
119
+ savedDraft = JSON.parse(localStorage.getItem(storageKey) ?? "null");
120
+ } catch {
121
+ /* Embedded exports may disallow storage. */
122
+ }
123
+ // Portable views supply only their initial view. Keep the rest of the saved
124
+ // browser state; a live server replaces it with its authoritative GET below.
125
+ let state = normalizeState({
126
+ ...(savedDraft?.state ?? {}),
127
+ ...(payload.state ?? {}),
128
+ });
129
+ let revision = payload.revision;
130
+ let stateVersion = null;
131
+ let stage = null;
132
+ let root = null;
133
+ let scroll = null;
134
+ let surface = null;
135
+ let grid = null;
136
+ let canvasBackground = null;
137
+ let cameraFrame = null;
138
+ let selectionOutline = null;
139
+ let dirty = false;
140
+ let contentDirty = false;
141
+ let contentSerial = 0;
142
+ let reviewDirty = false;
143
+ let reviewSerial = 0;
144
+ let reviewSaving = Promise.resolve();
145
+ let reviewTimer = null;
146
+ let latestReview = null;
147
+ let serial = 0;
148
+ let saveTimer = null;
149
+ let saving = Promise.resolve();
150
+ let pollTimer = null;
151
+ let noticeTimer = null;
152
+ let readyReported = false;
153
+ let destroyed = false;
154
+ let panEnabled = false;
155
+ let spacePan = false;
156
+ let spaceReturnTool = null;
157
+ let activeTool = "interact";
158
+ let changingTool = false;
159
+ let previousReviewMode = "interact";
160
+ let gesture = null;
161
+ let rendering = false;
162
+ let previousStageZoom = 100;
163
+ let compactViewport = false;
164
+ let activeArtifactId = "";
165
+ let walkthroughTransition = null;
166
+ let pendingScreen = null, screenRequest = 0, frameDemandTimer = null;
167
+ let frameDemandKey = "";
168
+ let queuedSelection = null;
169
+ let noteScreenId = null;
170
+ let notesReturnFocus = null;
171
+ const panels = new Map();
172
+ const cleanup = [];
173
+
174
+ function listen(target, event, handler, settings) {
175
+ target?.addEventListener(event, handler, settings);
176
+ cleanup.push(() => target?.removeEventListener(event, handler, settings));
177
+ }
178
+
179
+ function status(message, phase = "saved") {
180
+ if (destroyed) return;
181
+ const node = q("[data-design-save-state]");
182
+ node.textContent = message;
183
+ node.dataset.status = phase;
184
+ }
185
+
186
+ function notice(message, persistent = false) {
187
+ if (destroyed) return;
188
+ const node = q(".design-notice");
189
+ clearTimeout(noticeTimer);
190
+ node.textContent = message;
191
+ node.hidden = false;
192
+ if (!persistent)
193
+ noticeTimer = setTimeout(() => {
194
+ node.hidden = true;
195
+ }, 6000);
196
+ }
197
+
198
+ function storeDraft() {
199
+ try {
200
+ localStorage.setItem(
201
+ storageKey,
202
+ JSON.stringify({ revision, stateVersion, state, unsaved: contentDirty, personalPending: dirty && !contentDirty }),
203
+ );
204
+ } catch {
205
+ /* Server persistence remains available when local storage is full. */
206
+ }
207
+ }
208
+
209
+ async function jsonRequest(url, init = {}) {
210
+ const response = await fetch(url, { credentials: "same-origin", ...init });
211
+ const result = await response.json().catch(() => ({}));
212
+ if (!response.ok) {
213
+ const error = new Error(
214
+ result.error?.message ??
215
+ result.error ??
216
+ result.message ??
217
+ `Save failed (${response.status}).`,
218
+ );
219
+ error.conflict = response.status === 409;
220
+ throw error;
221
+ }
222
+ return result;
223
+ }
224
+
225
+ function persist({ content = false } = {}) {
226
+ dirty = true;
227
+ serial += 1;
228
+ if (content) {
229
+ contentDirty = true;
230
+ contentSerial += 1;
231
+ status("Saving changes", "saving");
232
+ }
233
+ storeDraft();
234
+ root.dispatchEvent(
235
+ new CustomEvent("planr:design-state-change", {
236
+ bubbles: true,
237
+ detail: clone(state),
238
+ }),
239
+ );
240
+ clearTimeout(saveTimer);
241
+ saveTimer = setTimeout(flush, 180);
242
+ }
243
+
244
+ function flushState() {
245
+ clearTimeout(saveTimer);
246
+ if (!dirty) return saving;
247
+ const captured = clone(state);
248
+ const capturedSerial = serial;
249
+ const capturedContent = contentDirty;
250
+ const capturedContentSerial = contentSerial;
251
+ saving = saving
252
+ .catch(() => {})
253
+ .then(async () => {
254
+ if (destroyed) return;
255
+ try {
256
+ let result;
257
+ if (!capturedContent && typeof options.savePersonalState === "function") {
258
+ result = await options.savePersonalState(captured, { revision, stateVersion });
259
+ } else if (typeof options.saveState === "function") {
260
+ result = await options.saveState(captured, {
261
+ revision,
262
+ stateVersion,
263
+ personal: !capturedContent,
264
+ });
265
+ } else if (options.stateUrl) {
266
+ result = await jsonRequest(options.stateUrl, {
267
+ method: "PUT",
268
+ headers: { "Content-Type": "application/json" },
269
+ body: JSON.stringify({ state: captured, revision, stateVersion }),
270
+ });
271
+ }
272
+ if (result?.stateVersion !== undefined)
273
+ stateVersion = result.stateVersion;
274
+ if (result?.revision !== undefined) revision = result.revision;
275
+ if (capturedSerial === serial) {
276
+ dirty = false;
277
+ }
278
+ if (capturedContent && capturedContentSerial === contentSerial) {
279
+ contentDirty = false;
280
+ if (!reviewDirty)
281
+ status(
282
+ options.stateUrl || options.saveState
283
+ ? "All changes saved"
284
+ : "Saved in this browser",
285
+ );
286
+ }
287
+ storeDraft();
288
+ } catch (error) {
289
+ if (capturedContent) status(
290
+ error.conflict ? "Save conflict" : "Disconnected · unsaved",
291
+ error.conflict ? "failed" : "disconnected",
292
+ );
293
+ notice(
294
+ !capturedContent
295
+ ? "Canvas preferences could not be synchronized. Your arrangement remains saved in this browser."
296
+ : error.conflict
297
+ ? "This review changed in another window. Your unsaved edits remain in this browser. Reload to read the saved review before applying them again."
298
+ : "Changes could not be saved. Your draft remains in this browser; reconnect to retry.",
299
+ true,
300
+ );
301
+ storeDraft();
302
+ }
303
+ });
304
+ return saving;
305
+ }
306
+
307
+ function reviewUrl() {
308
+ return (
309
+ options.reviewUrl ??
310
+ (options.stateUrl
311
+ ? options.stateUrl.replace(/design-state$/, "review")
312
+ : null)
313
+ );
314
+ }
315
+
316
+ function storeReviewDraft() {
317
+ if (!latestReview) return;
318
+ try {
319
+ localStorage.setItem(
320
+ `${storageKey}.review`,
321
+ JSON.stringify({ review: latestReview, unsaved: reviewDirty }),
322
+ );
323
+ } catch {
324
+ /* Server remains authoritative. */
325
+ }
326
+ }
327
+
328
+ function flushReview() {
329
+ clearTimeout(reviewTimer);
330
+ if (!reviewDirty || !latestReview) return reviewSaving;
331
+ const captured = clone(latestReview);
332
+ const capturedSerial = reviewSerial;
333
+ reviewSaving = reviewSaving
334
+ .catch(() => {})
335
+ .then(async () => {
336
+ try {
337
+ if (reviewUrl())
338
+ await jsonRequest(reviewUrl(), {
339
+ method: "PUT",
340
+ headers: { "Content-Type": "application/json" },
341
+ body: JSON.stringify({ review: captured }),
342
+ });
343
+ if (capturedSerial === reviewSerial) {
344
+ reviewDirty = false;
345
+ if (!contentDirty)
346
+ status(
347
+ reviewUrl() ? "All changes saved" : "Saved in this browser",
348
+ );
349
+ }
350
+ storeReviewDraft();
351
+ } catch (error) {
352
+ status("Comments unsaved", "disconnected");
353
+ notice(
354
+ `Comments could not be saved: ${error.message} Your draft remains in this browser.`,
355
+ true,
356
+ );
357
+ storeReviewDraft();
358
+ }
359
+ });
360
+ return reviewSaving;
361
+ }
362
+
363
+ function flush() {
364
+ return Promise.all([flushState(), flushReview()]);
365
+ }
366
+
367
+ function entryFor(
368
+ screenId = state.screenId,
369
+ variantId = state.variantId,
370
+ frameId = state.frameId,
371
+ ) {
372
+ return entries.find(
373
+ (entry) =>
374
+ entry.screenId === screenId &&
375
+ entry.variantId === variantId &&
376
+ entry.frameId === frameId,
377
+ );
378
+ }
379
+
380
+ function visibleEntries() {
381
+ return entries.filter(
382
+ (entry) =>
383
+ ((state.view === "canvas" && state.compare) || entry.variantId === state.variantId) &&
384
+ (state.view === "canvas" ||
385
+ (entry.screenId === state.screenId &&
386
+ entry.frameId === state.frameId)),
387
+ );
388
+ }
389
+
390
+ function updatePan() {
391
+ root.dataset.designPanActive = String(state.view === "canvas" && (panEnabled || spacePan));
392
+ root.dataset.designTool = activeTool;
393
+ root.dataset.designDragging = String(gesture?.mode === "pan");
394
+ q("[data-design-pan]").setAttribute("aria-pressed", String(activeTool === "pan"));
395
+ q('[data-planr-mode="interact"]').setAttribute("aria-pressed", String(activeTool === "interact"));
396
+ q('[data-planr-mode="comment"]').setAttribute("aria-pressed", String(activeTool === "annotate"));
397
+ q("[data-design-inspect-mode]")?.setAttribute("aria-pressed", String(activeTool === "inspect"));
398
+ for (const [id, panel] of panels) {
399
+ const frame = stage.getFrame(id);
400
+ if (frame) {
401
+ const tabIndex = activeTool === "interact" && !panel.hidden && stage.getState().status === "ready" ? 0 : -1;
402
+ if (frame.tabIndex !== tabIndex) frame.tabIndex = tabIndex;
403
+ frame.__openPlanrBridge?.setViewportGestures?.(state.view === "canvas" && !panel.hidden);
404
+ }
405
+ }
406
+ }
407
+
408
+ function finishGesture() {
409
+ if (!gesture) return;
410
+ const pointerId = gesture.pointerId;
411
+ gesture = null;
412
+ // Clear our state first: releasing capture can synchronously notify listeners.
413
+ try { if (scroll.hasPointerCapture?.(pointerId)) scroll.releasePointerCapture(pointerId); } catch { /* Already canceled by the browser. */ }
414
+ updatePan();
415
+ persist();
416
+ }
417
+
418
+ function setTool(tool) {
419
+ if (!["interact", "annotate", "pan", "inspect"].includes(tool)) return;
420
+ if (tool === "pan" && state.view !== "canvas") return;
421
+ if (tool === "annotate" && root.hasAttribute("data-planr-room-comments-paused")) return;
422
+ finishWalkthroughTransition();
423
+ finishGesture();
424
+ spacePan = false;
425
+ spaceReturnTool = null;
426
+ activeTool = tool;
427
+ panEnabled = tool === "pan";
428
+ previousReviewMode = tool === "annotate" ? "comment" : "interact";
429
+ changingTool = true;
430
+ try { stage.dispatch({ type: "set-review-mode", reviewMode: previousReviewMode }); }
431
+ finally { changingTool = false; }
432
+ root.dispatchEvent(new CustomEvent("planr:design-tool-change", { detail: { tool } }));
433
+ updatePan();
434
+ }
435
+
436
+ function releaseTemporaryPan() {
437
+ const previous = spaceReturnTool;
438
+ finishGesture();
439
+ if (spacePan) setTool(previous || "interact");
440
+ }
441
+
442
+ function saveViewport() {
443
+ state.viewports[state.view] = {
444
+ x: state.camera.x,
445
+ y: state.camera.y,
446
+ zoom: state.zoom,
447
+ };
448
+ }
449
+
450
+ function restoreViewport(view) {
451
+ const viewport = state.viewports[view];
452
+ if (!viewport) return false;
453
+ state.camera = { x: viewport.x, y: viewport.y };
454
+ state.zoom = viewport.zoom;
455
+ return true;
456
+ }
457
+
458
+ function switchView(view, { save = true } = {}) {
459
+ if (!views.includes(view))
460
+ throw new TypeError(`Unknown design view: ${view}`);
461
+ if (view === state.view) return;
462
+ ++screenRequest; pendingScreen = null; delete root.dataset.designScreenLoading;
463
+ finishWalkthroughTransition();
464
+ closeDesignNotes();
465
+ saveViewport();
466
+ state.view = view;
467
+ setTool(view === "canvas" && activeTool === "annotate" ? "annotate" : "interact");
468
+ // Enter a focused viewer with product interaction, not a carried-over pin
469
+ // or inspector cursor. Drafts stay in the review controller untouched.
470
+ root.dispatchEvent(new CustomEvent("planr:design-view-change", { detail: { view } }));
471
+ const restored = view === "canvas" && restoreViewport(view);
472
+ render();
473
+ if (!restored) fit({ save: false });
474
+ if (save) persist();
475
+ }
476
+
477
+ function defaultPosition(entry, variant) {
478
+ const gap = 96;
479
+ const top = 72;
480
+ const frame = design.frames.find(({ id }) => id === entry.frameId);
481
+ const variants = state.compare ? readyVariants : [variant];
482
+ const variantIndex = variants.findIndex(({ id }) => id === entry.variantId);
483
+ const groupWidth =
484
+ design.frames.reduce((sum, item) => sum + item.width, 0) +
485
+ gap * Math.max(0, design.frames.length - 1) +
486
+ 160;
487
+ return {
488
+ x:
489
+ variantIndex * groupWidth +
490
+ design.frames
491
+ .slice(0, design.frames.indexOf(frame))
492
+ .reduce((sum, item) => sum + item.width + gap, 0),
493
+ y:
494
+ top +
495
+ design.screenOrder.indexOf(entry.screenId) *
496
+ (Math.max(...design.frames.map(({ height }) => height)) + 176),
497
+ };
498
+ }
499
+
500
+ function contentBounds(selection = null) {
501
+ const visible = selection ? [selection] : visibleEntries();
502
+ if (!visible.length) return { minX: 0, minY: 0, maxX: 1, maxY: 1 };
503
+ return visible.reduce(
504
+ (bounds, entry) => {
505
+ const panel = panels.get(entry.artifactId);
506
+ const frame = design.frames.find(({ id }) => id === entry.frameId);
507
+ const x = Number.parseFloat(panel.style.left) || 0;
508
+ const y = Number.parseFloat(panel.style.top) || 0;
509
+ bounds.minX = Math.min(bounds.minX, x);
510
+ bounds.minY = Math.min(bounds.minY, y - 64);
511
+ bounds.maxX = Math.max(bounds.maxX, x + frame.width);
512
+ bounds.maxY = Math.max(bounds.maxY, y + frame.height);
513
+ return bounds;
514
+ },
515
+ { minX: Infinity, minY: Infinity, maxX: -Infinity, maxY: -Infinity },
516
+ );
517
+ }
518
+
519
+ function centerEntry(entry) {
520
+ const panel = panels.get(entry.artifactId);
521
+ const frame = design.frames.find(({ id }) => id === entry.frameId);
522
+ const x = Number.parseFloat(panel.style.left) || 0;
523
+ const y = Number.parseFloat(panel.style.top) || 0;
524
+ state.camera = {
525
+ x: scroll.clientWidth / 2 - (x + frame.width / 2) * state.zoom,
526
+ y: scroll.clientHeight / 2 - (y + frame.height / 2) * state.zoom,
527
+ };
528
+ saveViewport();
529
+ render();
530
+ }
531
+
532
+ function updateDesignNotes() {
533
+ const notes = q("[data-design-notes]");
534
+ if (!notes) return;
535
+ notes.querySelector(":scope > summary").setAttribute("aria-expanded", String(notes.open));
536
+ for (const button of qa("[data-design-note]"))
537
+ button.setAttribute("aria-expanded", String(notes.open && button.dataset.designNote === noteScreenId));
538
+ if (!notes.open) return;
539
+ const panel = q(".design-guidance-panel");
540
+ const anchor = notes.querySelector(":scope > summary").getBoundingClientRect();
541
+ const width = panel.getBoundingClientRect().width || Math.min(340, window.innerWidth - 24);
542
+ const top = clamp(anchor.bottom + 7, 12, Math.max(12, window.innerHeight - 100));
543
+ panel.style.left = `${clamp(anchor.right - width, 12, Math.max(12, window.innerWidth - width - 12))}px`;
544
+ panel.style.top = `${top}px`;
545
+ panel.style.maxHeight = `${Math.min(520, Math.max(60, window.innerHeight - top - 12))}px`;
546
+ }
547
+
548
+ function closeDesignNotes({ restoreFocus = false } = {}) {
549
+ const notes = q("[data-design-notes]");
550
+ if (!notes?.open) return;
551
+ notes.open = false;
552
+ noteScreenId = null;
553
+ updateDesignNotes();
554
+ if (restoreFocus) {
555
+ const target = notesReturnFocus?.isConnected ? notesReturnFocus : notes.querySelector(":scope > summary");
556
+ target?.focus({ preventScroll: true });
557
+ }
558
+ notesReturnFocus = null;
559
+ }
560
+
561
+ function openDesignNote(screenId, trigger) {
562
+ const notes = q("[data-design-notes]");
563
+ if (!notes) return;
564
+ if (notes.open && noteScreenId === screenId) {
565
+ closeDesignNotes();
566
+ return;
567
+ }
568
+ notesReturnFocus = trigger;
569
+ noteScreenId = screenId;
570
+ notes.open = true;
571
+ let target = null;
572
+ for (const item of qa("[data-design-note-screen]")) {
573
+ const selected = item.dataset.designNoteScreen === screenId;
574
+ item.open = selected;
575
+ item.dataset.active = String(selected);
576
+ if (selected) target = item;
577
+ }
578
+ updateDesignNotes();
579
+ const panel = q(".design-guidance-panel");
580
+ if (target) panel.scrollTop = Math.max(0, target.offsetTop - panel.querySelector("header").offsetHeight);
581
+ }
582
+
583
+ function render() {
584
+ if (!stage || rendering || destroyed) return;
585
+ rendering = true;
586
+ try {
587
+ if (window.innerWidth <= 680)
588
+ root.style.setProperty("--planr-toolbar-height", `${q(".design-toolbar").getBoundingClientRect().height}px`);
589
+ else root.style.removeProperty("--planr-toolbar-height");
590
+ const screen = design.screens.find(({ id }) => id === state.screenId);
591
+ const variant = design.variants.find(({ id }) => id === state.variantId);
592
+ const stageState = stage.getState();
593
+ root.dataset.designView = state.view;
594
+ root.dataset.designNavOpen = String(state.navOpen);
595
+ const navigator = q(".design-navigator");
596
+ navigator.inert = !state.navOpen;
597
+ navigator.setAttribute("aria-hidden", String(!state.navOpen));
598
+ for (const toggle of qa("[data-design-toggle-nav]"))
599
+ toggle.setAttribute("aria-expanded", String(state.navOpen));
600
+ for (const button of qa("[data-design-view]")) {
601
+ if (button.tagName === "BUTTON")
602
+ button.setAttribute(
603
+ "aria-pressed",
604
+ String(button.dataset.designView === state.view),
605
+ );
606
+ }
607
+ for (const button of qa("[data-design-screen]"))
608
+ button.setAttribute(
609
+ "aria-current",
610
+ button.dataset.designScreen === state.screenId ? "page" : "false",
611
+ );
612
+ q("[data-design-variant]").value = state.variantId;
613
+ q("[data-design-frame]").value = state.frameId;
614
+ if (q("[data-design-compare]"))
615
+ q("[data-design-compare]").checked = state.compare;
616
+ q("[data-design-screen-title]").textContent =
617
+ state.view === "canvas" ? design.title : screen.title;
618
+ q("[data-design-stage-description]").textContent =
619
+ state.view === "canvas"
620
+ ? `${design.screenOrder.length} screens · ${design.frames.length} responsive ${design.frames.length === 1 ? "frame" : "frames"}${state.compare ? ` · ${readyVariants.length} directions` : ""}`
621
+ : state.view === "prototype"
622
+ ? "Explore the working journey"
623
+ : "A guided journey through the design";
624
+ q("[data-design-direction-label]").textContent = variant.label;
625
+ const chosen =
626
+ state.selectedVariant === state.variantId &&
627
+ state.preferences.selected.includes(state.variantId);
628
+ q("[data-design-selected-direction]").textContent = chosen
629
+ ? "Selected"
630
+ : "";
631
+ q("[data-design-select-direction]").disabled = chosen;
632
+ q("[data-design-select-direction]").textContent = chosen
633
+ ? "Selected direction"
634
+ : "Use this direction";
635
+ for (const button of qa("[data-design-rating]")) {
636
+ const selected =
637
+ Number(button.dataset.designRating) <=
638
+ (state.ratings[state.variantId] ?? 0);
639
+ button.setAttribute("aria-pressed", String(selected));
640
+ button.textContent = selected ? "★" : "☆";
641
+ }
642
+ if (document.activeElement !== q("[data-design-remix]"))
643
+ q("[data-design-remix]").value = state.remix[state.variantId] ?? "";
644
+ q("[data-design-pan]").hidden = state.view !== "canvas";
645
+ for (const control of qa("[data-design-zoom]")) control.hidden = state.view !== "canvas";
646
+ q(".design-canvas-tools").setAttribute("aria-label", state.view === "canvas" ? "Canvas controls" : "Screen controls");
647
+ const fitControl = q("[data-design-fit]");
648
+ fitControl.textContent = state.view === "canvas" ? "Fit" : "Fit screen";
649
+ fitControl.setAttribute("aria-label", state.view === "canvas" ? "Fit all visible artboards" : "Fit screen");
650
+ const comparison = q("[data-design-compare]");
651
+ if (comparison) comparison.closest("label").hidden = state.view !== "canvas";
652
+ const caption = q(".design-walkthrough-caption");
653
+ caption.hidden = state.view !== "walkthrough";
654
+ q("[data-design-step]").textContent =
655
+ `Step ${design.screenOrder.indexOf(state.screenId) + 1} of ${design.screenOrder.length}`;
656
+ q("[data-design-narrative-title]").textContent = screen.title;
657
+ q("[data-design-narrative]").textContent =
658
+ screen.description ??
659
+ design.flows?.find((flow) => flow.screens.includes(screen.id))?.title ??
660
+ design.brief.text;
661
+ q('[data-design-step-change="-1"]').disabled =
662
+ requestedScreen() === design.screenOrder[0];
663
+ q('[data-design-step-change="1"]').disabled =
664
+ requestedScreen() === design.screenOrder.at(-1);
665
+ for (const item of qa("[data-design-note-screen]"))
666
+ item.dataset.active = String(
667
+ item.dataset.designNoteScreen === state.screenId,
668
+ );
669
+
670
+ const visible = visibleEntries();
671
+ const visibleIds = new Set(visible.map(({ artifactId }) => artifactId));
672
+ for (const entry of entries) {
673
+ const panel = panels.get(entry.artifactId);
674
+ const isVisible = visibleIds.has(entry.artifactId);
675
+ const outgoing = walkthroughTransition?.from === entry.artifactId;
676
+ panel.hidden = !isVisible && !outgoing;
677
+ panel.dataset.designActive = String(
678
+ entry.artifactId === activeArtifactId,
679
+ );
680
+ const frameElement = stage.getFrame(entry.artifactId);
681
+ const layer = panel.querySelector("[data-planr-annotation-layer]");
682
+ const ready = stageState.status === "ready" && (!stage.frameBudget || frameElement.dataset.planrFrameState === "ready");
683
+ frameElement.tabIndex =
684
+ isVisible && ready && stageState.reviewMode === "interact" ? 0 : -1;
685
+ layer.tabIndex =
686
+ isVisible && ready && stageState.reviewMode === "comment" ? 0 : -1;
687
+ layer.setAttribute("aria-disabled", String(layer.tabIndex < 0));
688
+ if (!isVisible && !outgoing) continue;
689
+ let { x, y } = defaultPosition(entry, variant);
690
+ if (state.view === "canvas")
691
+ ({ x, y } = state.positions[entry.artifactId] ?? { x, y });
692
+ else {
693
+ x = 0;
694
+ y = 0;
695
+ }
696
+ panel.style.left = `${x}px`;
697
+ panel.style.top = `${y}px`;
698
+ }
699
+ grid.style.width = "1px";
700
+ grid.style.height = "1px";
701
+ surface.style.width = "100%";
702
+ surface.style.height = "100%";
703
+ updatePan();
704
+ renderCamera();
705
+ root.dispatchEvent(new CustomEvent("planr:design-render", { detail: clone(state) }));
706
+ } finally {
707
+ rendering = false;
708
+ }
709
+ }
710
+
711
+ // Moving the viewport must not rewrite artboard visibility, geometry or frame
712
+ // focus state. Those belong to structural renders; the compositor owns motion.
713
+ function scheduleCamera() {
714
+ if (cameraFrame !== null || destroyed) return;
715
+ cameraFrame = requestAnimationFrame(() => { cameraFrame = null; renderCamera(); });
716
+ }
717
+ function renderCamera() {
718
+ if (!stage || destroyed) return;
719
+ if (cameraFrame !== null) { cancelAnimationFrame(cameraFrame); cameraFrame = null; }
720
+ if (state.view !== "canvas") {
721
+ // A focused view has no navigable world: fit the authored frame inside
722
+ // its viewport. Scrolling and gestures within the iframe remain native.
723
+ const frame = design.frames.find(item => item.id === state.frameId);
724
+ const inset = window.innerWidth <= 680 ? 12 : 24;
725
+ state.zoom = Math.max(0.001, Math.min(1,
726
+ Math.max(1, scroll.clientWidth - inset * 2) / frame.width,
727
+ Math.max(1, scroll.clientHeight - inset * 2) / frame.height));
728
+ state.camera = { x: (scroll.clientWidth - frame.width * state.zoom) / 2,
729
+ y: (scroll.clientHeight - frame.height * state.zoom) / 2 };
730
+ saveViewport();
731
+ }
732
+ const zoom = String(state.zoom);
733
+ if (grid.style.getPropertyValue("--design-zoom") !== zoom)
734
+ grid.style.setProperty("--design-zoom", zoom);
735
+ grid.style.transform = `translate3d(${state.camera.x}px, ${state.camera.y}px, 0) scale(${state.zoom})`;
736
+ // Translate a bounded background layer rather than invalidating inherited
737
+ // properties on the entire shell or repainting its full stage background.
738
+ const pixelRatio = window.devicePixelRatio || 1;
739
+ const backgroundOffset = value => Math.round((value % 24) * pixelRatio) / pixelRatio;
740
+ canvasBackground.style.transform = `translate3d(${backgroundOffset(state.camera.x)}px, ${backgroundOffset(state.camera.y)}px, 0)`;
741
+ const active = entries.find(entry => entry.artifactId === activeArtifactId);
742
+ const panel = panels.get(activeArtifactId);
743
+ if (selectionOutline) {
744
+ selectionOutline.hidden = state.view !== "canvas" || !active || !panel || panel.hidden;
745
+ if (!selectionOutline.hidden) {
746
+ const frame = design.frames.find(item => item.id === active.frameId);
747
+ const ratio = window.devicePixelRatio || 1;
748
+ const pixel = value => Math.round(value * ratio) / ratio;
749
+ const x = pixel(state.camera.x + Number.parseFloat(panel.style.left) * state.zoom);
750
+ const y = pixel(state.camera.y + Number.parseFloat(panel.style.top) * state.zoom);
751
+ selectionOutline.style.transform = `translate3d(${x - 3}px, ${y - 3}px, 0)`;
752
+ selectionOutline.style.width = `${pixel(frame.width * state.zoom) + 6}px`;
753
+ selectionOutline.style.height = `${pixel(frame.height * state.zoom) + 6}px`;
754
+ }
755
+ }
756
+ const label = `${Math.round(state.zoom * 100)}%`;
757
+ const reset = q('[data-design-zoom="reset"]');
758
+ if (reset.textContent !== label) reset.textContent = label;
759
+ scheduleFrameDemand();
760
+ root.dispatchEvent(new CustomEvent("planr:design-camera", { detail: { view: state.view, zoom: state.zoom, camera: { ...state.camera } } }));
761
+ }
762
+
763
+ function updateFramePlaceholders() {
764
+ if (!stage?.frameBudget || destroyed) return;
765
+ for (const [id, panel] of panels) {
766
+ const frame = stage.getFrame(id), placeholder = panel.querySelector('[data-design-load-frame]');
767
+ if (!placeholder) continue;
768
+ const status = frame.dataset.planrFrameState || 'unloaded';
769
+ placeholder.hidden = status === 'ready';
770
+ placeholder.disabled = status === 'loading';
771
+ const copy = status === 'loading' ? 'Loading screen…' : status === 'error' ? 'Retry screen' : 'Open screen';
772
+ if (placeholder.textContent !== copy) placeholder.textContent = copy;
773
+ frame.style.visibility = status === 'ready' ? '' : 'hidden';
774
+ }
775
+ }
776
+ function scheduleFrameDemand() {
777
+ if (!stage?.frameBudget || destroyed) return;
778
+ clearTimeout(frameDemandTimer);
779
+ frameDemandTimer = setTimeout(() => {
780
+ if (destroyed || !readyReported || pendingScreen || walkthroughTransition || state.view !== 'canvas'
781
+ || root.dataset.sharedOpening || document.querySelector('.design-welcome[open]')) return;
782
+ const box = scroll.getBoundingClientRect();
783
+ const nearby = visibleEntries().map(entry => {
784
+ const rect = panels.get(entry.artifactId).getBoundingClientRect();
785
+ return { id:entry.artifactId, visible:rect.right > box.left && rect.left < box.right && rect.bottom > box.top && rect.top < box.bottom,
786
+ distance:Math.hypot((rect.left+rect.right-box.left-box.right)/2,(rect.top+rect.bottom-box.top-box.bottom)/2) };
787
+ }).filter(item=>item.visible).sort((a,b)=>a.distance-b.distance);
788
+ const ids = [...new Set([activeArtifactId,...nearby.map(item=>item.id)].filter(Boolean))].slice(0,stage.frameBudget);
789
+ const key = ids.join('|'); if(key === frameDemandKey) return; frameDemandKey = key;
790
+ void stage.ensureFrames(ids).then(updateFramePlaceholders).catch(error=>{
791
+ if (!destroyed && error.name !== 'AbortError') { frameDemandKey=''; updateFramePlaceholders(); }
792
+ });
793
+ }, 120);
794
+ }
795
+
796
+ // A display:none iframe has no painted layer. Keep the previous screen in
797
+ // place while the next one's existing frame lays out, then reveal it above
798
+ // that fully opaque backing. Never clone/reload authored DOM or fade both
799
+ // screens out together: that exposes the stage as a flash between steps.
800
+ function finishWalkthroughTransition({ continueQueued = false } = {}) {
801
+ const transition = walkthroughTransition;
802
+ const queued = continueQueued ? queuedSelection : null;
803
+ queuedSelection = null;
804
+ if (!transition) return;
805
+ walkthroughTransition = null;
806
+ cancelAnimationFrame(transition.frame);
807
+ clearTimeout(transition.timeout);
808
+ for (const animation of transition.animations ?? []) animation.cancel();
809
+ for (const visual of transition.visuals ?? []) delete visual.dataset.designTransitionVisual;
810
+ for (const id of [transition.from, transition.to]) {
811
+ const panel = panels.get(id);
812
+ panel.inert = false;
813
+ panel.removeAttribute("aria-hidden");
814
+ delete panel.dataset.designTransitionOutgoing;
815
+ delete panel.dataset.designTransitionIncoming;
816
+ }
817
+ delete root.dataset.designTransition;
818
+ render();
819
+ if (queued && !destroyed) selectEntry(queued.entry, queued.settings);
820
+ }
821
+
822
+ function prepareWalkthroughTransition(entry) {
823
+ const from = activeArtifactId;
824
+ const outgoing = panels.get(from);
825
+ const incoming = panels.get(entry.artifactId);
826
+ const direction = design.screenOrder.indexOf(entry.screenId) < design.screenOrder.indexOf(state.screenId) ? -1 : 1;
827
+ const transition = { from, to: entry.artifactId, direction, frame: null, timeout: null, animations: [], visuals: [] };
828
+ walkthroughTransition = transition;
829
+ root.dataset.designTransition = "preparing";
830
+ outgoing.dataset.designTransitionOutgoing = "";
831
+ incoming.dataset.designTransitionIncoming = "";
832
+ if (outgoing.contains(document.activeElement))
833
+ q(`[data-design-step-change="${direction}"]`).focus({ preventScroll: true });
834
+ outgoing.inert = incoming.inert = true;
835
+ outgoing.setAttribute("aria-hidden", "true");
836
+ const finish = () => {
837
+ if (walkthroughTransition === transition) finishWalkthroughTransition({ continueQueued: true });
838
+ };
839
+ // Background tabs and interrupted animations must never leave an inert
840
+ // screen behind. The deadline only settles; it never starts late motion.
841
+ transition.timeout = setTimeout(finish, 1000);
842
+ transition.frame = requestAnimationFrame(() => {
843
+ transition.frame = requestAnimationFrame(() => {
844
+ if (walkthroughTransition !== transition || destroyed) return;
845
+ if (document.hidden || window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches || typeof incoming.animate !== "function") {
846
+ finish();
847
+ return;
848
+ }
849
+ root.dataset.designTransition = "running";
850
+ const frameVisual = incoming.querySelector(".planr-frame iframe");
851
+ const annotationVisual = incoming.querySelector("[data-planr-annotation-layer]");
852
+ transition.visuals = [frameVisual, annotationVisual].filter(Boolean);
853
+ for (const visual of transition.visuals) visual.dataset.designTransitionVisual = "";
854
+ const options = { duration: 220, easing: "cubic-bezier(0.22, 1, 0.36, 1)", fill: "both" };
855
+ transition.animations = [frameVisual.animate([
856
+ { opacity: 0, transform: `translate3d(${direction * 12 / state.zoom}px, 0, 0)` },
857
+ { opacity: 1, transform: "translate3d(0, 0, 0)" },
858
+ ], options)];
859
+ if (annotationVisual) transition.animations.push(annotationVisual.animate([
860
+ { opacity: 0 },
861
+ { opacity: 1 },
862
+ ], options));
863
+ Promise.all(transition.animations.map(animation => animation.finished)).then(finish, () => {});
864
+ });
865
+ });
866
+ }
867
+
868
+ function requestedScreen() {
869
+ return pendingScreen?.entry.screenId ?? queuedSelection?.entry.screenId ?? state.screenId;
870
+ }
871
+
872
+ function selectEntry(entry, { save = true, reveal = false, loaded = false } = {}) {
873
+ if (!entry) return false;
874
+ if (stage.frameBudget && !loaded && (pendingScreen || !stage.getLoadedArtifactIds().includes(entry.artifactId))) {
875
+ if (pendingScreen?.entry.artifactId === entry.artifactId) return true;
876
+ const request = ++screenRequest;
877
+ pendingScreen = { entry }; root.dataset.designScreenLoading = 'true';
878
+ const ids = [...new Set([activeArtifactId,entry.artifactId].filter(Boolean))];
879
+ void stage.ensureFrames(ids).then(() => {
880
+ if (destroyed || request !== screenRequest) return;
881
+ pendingScreen = null; delete root.dataset.designScreenLoading;
882
+ selectEntry(entry, { save, reveal, loaded:true }); updateFramePlaceholders();
883
+ }).catch(error => {
884
+ if (destroyed || request !== screenRequest || error.name === 'AbortError') return;
885
+ pendingScreen = null; delete root.dataset.designScreenLoading;
886
+ notice('This screen could not load. Select it again to retry; your review is preserved.',true);
887
+ updateFramePlaceholders();
888
+ });
889
+ return true;
890
+ }
891
+ const sameFrame = entry.frameId === state.frameId && entry.variantId === state.variantId;
892
+ if (walkthroughTransition && state.view === "walkthrough" && sameFrame) {
893
+ // Coalesce rapid requests instead of cutting an animation halfway or
894
+ // ignoring clicks. Subsequent step buttons advance from this target.
895
+ queuedSelection = entry.artifactId === activeArtifactId ? null : { entry, settings: { save, reveal } };
896
+ q('[data-design-step-change="-1"]').disabled = requestedScreen() === design.screenOrder[0];
897
+ q('[data-design-step-change="1"]').disabled = requestedScreen() === design.screenOrder.at(-1);
898
+ return true;
899
+ }
900
+ finishWalkthroughTransition();
901
+ if (state.view === "walkthrough" && sameFrame && readyReported && entry.artifactId !== activeArtifactId && !document.hidden)
902
+ prepareWalkthroughTransition(entry);
903
+ state.screenId = entry.screenId;
904
+ state.frameId = entry.frameId;
905
+ state.variantId = entry.variantId;
906
+ activeArtifactId = entry.artifactId;
907
+ stage.dispatch({ type: "set-active", artifactId: entry.artifactId });
908
+ render();
909
+ if (reveal) centerEntry(entry);
910
+ if (save) persist();
911
+ return true;
912
+ }
913
+
914
+ function fit({ save = true, selection = null } = {}) {
915
+ render();
916
+ if (state.view !== "canvas") { if (save) persist(); return; }
917
+ const bounds = contentBounds(selection);
918
+ const width = Math.max(1, bounds.maxX - bounds.minX);
919
+ const height = Math.max(1, bounds.maxY - bounds.minY);
920
+ const availableWidth = Math.max(100, scroll.clientWidth - 96);
921
+ const availableHeight = Math.max(100, scroll.clientHeight - 96);
922
+ state.zoom = clamp(
923
+ Math.min(
924
+ availableWidth / Math.max(1, width),
925
+ availableHeight / Math.max(1, height),
926
+ ),
927
+ 0.05,
928
+ 1,
929
+ );
930
+ state.camera = {
931
+ x:
932
+ (scroll.clientWidth - width * state.zoom) / 2 -
933
+ bounds.minX * state.zoom,
934
+ y:
935
+ (scroll.clientHeight - height * state.zoom) / 2 -
936
+ bounds.minY * state.zoom,
937
+ };
938
+ saveViewport();
939
+ renderCamera();
940
+ if (save) persist();
941
+ }
942
+
943
+ function zoomTo(value, point = null, { scheduled = false } = {}) {
944
+ if (state.view !== "canvas") return;
945
+ const previous = state.zoom;
946
+ const next = clamp(value, 0.05, 2);
947
+ const rect = scroll.getBoundingClientRect();
948
+ const x = point ? point.x - rect.left : scroll.clientWidth / 2;
949
+ const y = point ? point.y - rect.top : scroll.clientHeight / 2;
950
+ state.camera = {
951
+ x: x - ((x - state.camera.x) * next) / previous,
952
+ y: y - ((y - state.camera.y) * next) / previous,
953
+ };
954
+ state.zoom = next;
955
+ saveViewport();
956
+ if (scheduled) scheduleCamera(); else renderCamera();
957
+ persist();
958
+ }
959
+
960
+ async function exportArtifact(kind) {
961
+ const artifactId = activeArtifactId;
962
+ try {
963
+ let blob;
964
+ if (kind === "png") {
965
+ const result =
966
+ typeof options.exportPng === "function"
967
+ ? await options.exportPng({ artifactId })
968
+ : await stage
969
+ .getFrame(artifactId)
970
+ ?.__openPlanrBridge?.exportPng("screen");
971
+ const dataUrl = typeof result === "string" ? result : result?.dataUrl;
972
+ if (!dataUrl?.startsWith("data:image/png;base64,"))
973
+ throw new Error(
974
+ "PNG capture is unavailable. Open the local review with the artifact bridge and retry.",
975
+ );
976
+ const bytes = Uint8Array.from(
977
+ atob(dataUrl.split(",")[1]),
978
+ (character) => character.charCodeAt(0),
979
+ );
980
+ blob = new Blob([bytes], { type: "image/png" });
981
+ } else {
982
+ const result =
983
+ typeof options.exportHtml === "function"
984
+ ? await options.exportHtml({ artifactId })
985
+ : null;
986
+ if (result instanceof Blob) blob = result;
987
+ else if (typeof result === "string")
988
+ blob = new Blob([result], { type: "text/html;charset=utf-8" });
989
+ else
990
+ throw new Error(
991
+ "Portable export is unavailable in this viewer. Use the design export utility from the project.",
992
+ );
993
+ }
994
+ const url = URL.createObjectURL(blob);
995
+ const anchor = document.createElement("a");
996
+ anchor.href = url;
997
+ anchor.download = `${design.id}-${state.screenId}.${kind === "png" ? "png" : "html"}`;
998
+ anchor.click();
999
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
1000
+ q(".design-export").open = false;
1001
+ notice(
1002
+ kind === "png" ? "Screen PNG exported." : "Portable HTML exported.",
1003
+ );
1004
+ } catch (error) {
1005
+ notice(error.message, true);
1006
+ }
1007
+ }
1008
+
1009
+ function editable(target) {
1010
+ return Boolean(
1011
+ target?.closest?.('input,textarea,select,[contenteditable="true"]'),
1012
+ );
1013
+ }
1014
+
1015
+ function installEvents() {
1016
+ listen(root, "planr:artifact-viewport-zoom", event => {
1017
+ if (state.view !== "canvas") return;
1018
+ const entry = entries.find(item => stage.getFrame(item.artifactId) === event.target);
1019
+ if (!entry || panels.get(entry.artifactId)?.hidden) return;
1020
+ const { x, y, deltaY } = event.detail;
1021
+ const frame = design.frames.find(item => item.id === entry.frameId);
1022
+ const rect = event.target.getBoundingClientRect();
1023
+ zoomTo(state.zoom * Math.exp(-deltaY * 0.004), {
1024
+ x: rect.left + x * rect.width / frame.width,
1025
+ y: rect.top + y * rect.height / frame.height,
1026
+ }, { scheduled: true });
1027
+ });
1028
+ listen(root, "planr:artifact-viewport-pan", event => {
1029
+ if (state.view !== "canvas") return;
1030
+ const entry = entries.find(item => stage.getFrame(item.artifactId) === event.target);
1031
+ if (!entry || panels.get(entry.artifactId)?.hidden) return;
1032
+ state.camera = {
1033
+ x: clamp(state.camera.x - event.detail.deltaX, -1e7, 1e7),
1034
+ y: clamp(state.camera.y - event.detail.deltaY, -1e7, 1e7),
1035
+ };
1036
+ saveViewport();
1037
+ scheduleCamera();
1038
+ persist();
1039
+ });
1040
+ // Handle explicit choices even when the generic stage's reviewMode has not
1041
+ // changed (Pan and Inspect both suspend the stage in interact mode).
1042
+ listen(root, "click", event => {
1043
+ const button = event.target.closest('[data-planr-mode],[data-planr-action="add-comment"]');
1044
+ if (!button || button.disabled) return;
1045
+ setTool(button.dataset.planrMode === "interact" ? "interact" : "annotate");
1046
+ }, true);
1047
+ listen(document, "keydown", event => {
1048
+ if (editable(event.target) || event.altKey || event.ctrlKey || event.metaKey || document.querySelector('dialog[open]')) return;
1049
+ const key = event.key.toLowerCase();
1050
+ if (["i", "c", "h"].includes(key)) {
1051
+ if (key === "h" && state.view !== "canvas") return;
1052
+ event.preventDefault();
1053
+ setTool({ i: "interact", c: "annotate", h: "pan" }[key]);
1054
+ } else if (event.key === "Escape" && (panEnabled || spacePan || gesture || activeTool === "inspect")
1055
+ && !q('[data-design-notes][open]') && !q('[data-planr-annotation-composer]')) {
1056
+ event.preventDefault();
1057
+ setTool("interact");
1058
+ q('[data-planr-mode="interact"]').focus();
1059
+ }
1060
+ }, true);
1061
+ // Sidebar transitions resize the stage without a window resize. Refit only
1062
+ // the focused views; the free canvas retains its personal camera position.
1063
+ if (typeof ResizeObserver === "function") {
1064
+ const observer = new ResizeObserver(() => {
1065
+ if (state.view !== "canvas" && root.dataset.designRestoring !== "true") fit({ save: false });
1066
+ updateDesignNotes();
1067
+ });
1068
+ observer.observe(scroll);
1069
+ cleanup.push(() => observer.disconnect());
1070
+ }
1071
+ const notes = q("[data-design-notes]");
1072
+ listen(notes?.querySelector(":scope > summary"), "click", (event) => {
1073
+ event.preventDefault();
1074
+ if (notes.open) closeDesignNotes();
1075
+ else {
1076
+ notesReturnFocus = event.currentTarget;
1077
+ notes.open = true;
1078
+ updateDesignNotes();
1079
+ }
1080
+ });
1081
+ listen(notes, "toggle", updateDesignNotes);
1082
+ listen(document, "pointerdown", (event) => {
1083
+ if (notes?.open && !notes.contains(event.target) && !event.target.closest?.("[data-design-note]")) closeDesignNotes();
1084
+ }, true);
1085
+ listen(document, "keydown", (event) => {
1086
+ if (event.key === "Escape" && notes?.open) {
1087
+ event.preventDefault();
1088
+ event.stopPropagation();
1089
+ closeDesignNotes({ restoreFocus: true });
1090
+ }
1091
+ }, true);
1092
+ listen(root, "click", (event) => {
1093
+ const button = event.target.closest("button");
1094
+ if (!button) return;
1095
+ if (button.dataset.designLoadFrame) {
1096
+ selectEntry(entries.find(item=>item.artifactId===button.dataset.designLoadFrame),{reveal:true});
1097
+ } else if (button.dataset.designView) {
1098
+ switchView(button.dataset.designView);
1099
+ } else if (button.hasAttribute("data-design-toggle-nav")) {
1100
+ state.navOpen = !state.navOpen;
1101
+ if (!state.navOpen && button.closest(".design-navigator"))
1102
+ q(".design-toolbar [data-design-toggle-nav]").focus();
1103
+ render();
1104
+ persist();
1105
+ } else if (button.dataset.designScreen) {
1106
+ selectEntry(entryFor(button.dataset.designScreen), {
1107
+ reveal: state.view === "canvas",
1108
+ });
1109
+ } else if (button.dataset.designNote) {
1110
+ openDesignNote(button.dataset.designNote, button);
1111
+ } else if (button.hasAttribute("data-design-close-notes")) {
1112
+ closeDesignNotes({ restoreFocus: true });
1113
+ } else if (button.hasAttribute("data-design-fit")) fit();
1114
+ else if (button.dataset.designZoom)
1115
+ zoomTo(
1116
+ button.dataset.designZoom === "reset"
1117
+ ? 1
1118
+ : state.zoom * (button.dataset.designZoom === "in" ? 1.2 : 1 / 1.2),
1119
+ );
1120
+ else if (button.hasAttribute("data-design-pan")) {
1121
+ if (state.view !== "canvas") return;
1122
+ setTool(activeTool === "pan" ? "interact" : "pan");
1123
+ } else if (button.dataset.designStepChange) {
1124
+ const index = clamp(
1125
+ design.screenOrder.indexOf(requestedScreen()) +
1126
+ Number(button.dataset.designStepChange),
1127
+ 0,
1128
+ design.screenOrder.length - 1,
1129
+ );
1130
+ selectEntry(entryFor(design.screenOrder[index]));
1131
+ } else if (button.dataset.designRating) {
1132
+ const rating = Number(button.dataset.designRating);
1133
+ state.ratings[state.variantId] = rating;
1134
+ if (rating <= 2)
1135
+ state.preferences.rejected = [
1136
+ ...new Set([...state.preferences.rejected, state.variantId]),
1137
+ ];
1138
+ else
1139
+ state.preferences.rejected = state.preferences.rejected.filter(
1140
+ (id) => id !== state.variantId,
1141
+ );
1142
+ render();
1143
+ persist({ content: true });
1144
+ } else if (button.hasAttribute("data-design-select-direction")) {
1145
+ state.selectedVariant = state.variantId;
1146
+ state.preferences.selected = [
1147
+ ...new Set([...state.preferences.selected, state.variantId]),
1148
+ ];
1149
+ state.preferences.rejected = state.preferences.rejected.filter(
1150
+ (id) => id !== state.variantId,
1151
+ );
1152
+ render();
1153
+ persist({ content: true });
1154
+ } else if (button.hasAttribute("data-design-save-remix")) {
1155
+ state.remix[state.variantId] = q("[data-design-remix]").value.trim();
1156
+ persist({ content: true });
1157
+ notice("Refinement note saved for the next design iteration.");
1158
+ } else if (button.dataset.designExport)
1159
+ void exportArtifact(button.dataset.designExport);
1160
+ });
1161
+ listen(q("[data-design-variant]"), "change", (event) =>
1162
+ selectEntry(entryFor(state.screenId, event.target.value)),
1163
+ );
1164
+ listen(q("[data-design-frame]"), "change", (event) => {
1165
+ selectEntry(
1166
+ entryFor(state.screenId, state.variantId, event.target.value),
1167
+ { reveal: state.view === "canvas" },
1168
+ );
1169
+ });
1170
+ listen(q("[data-design-compare]"), "change", (event) => {
1171
+ state.compare = event.target.checked;
1172
+ render();
1173
+ persist();
1174
+ });
1175
+ listen(root, "planr:stage-change", (event) => {
1176
+ const next = event.detail;
1177
+ if (!changingTool && next.reviewMode !== previousReviewMode) setTool(next.reviewMode === "comment" ? "annotate" : "interact");
1178
+ const reviewChanged =
1179
+ typeof next.railOpen === "boolean" &&
1180
+ next.railOpen !== state.reviewOpen;
1181
+ if (reviewChanged) state.reviewOpen = next.railOpen;
1182
+ const entry = entries.find(
1183
+ ({ artifactId }) => artifactId === next.activeArtifactId,
1184
+ );
1185
+ if (entry && entry.artifactId !== activeArtifactId) {
1186
+ if (stage.frameBudget && !stage.getLoadedArtifactIds().includes(entry.artifactId)) {
1187
+ selectEntry(entry, {save:false});
1188
+ } else {
1189
+ finishWalkthroughTransition();
1190
+ activeArtifactId = entry.artifactId;
1191
+ state.screenId = entry.screenId;
1192
+ state.frameId = entry.frameId;
1193
+ state.variantId = entry.variantId;
1194
+ }
1195
+ }
1196
+ if (next.zoom !== previousStageZoom) {
1197
+ state.zoom = clamp(next.zoom / 100, 0.05, 2);
1198
+ previousStageZoom = next.zoom;
1199
+ saveViewport();
1200
+ }
1201
+ render();
1202
+ if (reviewChanged) persist();
1203
+ });
1204
+ listen(root, "planr:artifact-review-change", (event) => {
1205
+ latestReview = clone(event.detail);
1206
+ reviewDirty = true;
1207
+ reviewSerial += 1;
1208
+ status("Saving comments", "saving");
1209
+ storeReviewDraft();
1210
+ clearTimeout(reviewTimer);
1211
+ reviewTimer = setTimeout(flushReview, 180);
1212
+ });
1213
+ // Capturing activation lets the artifact-owned pin controller annotate any
1214
+ // artboard in the canvas while preserving its active-artifact invariant.
1215
+ listen(
1216
+ root,
1217
+ "pointerdown",
1218
+ (event) => {
1219
+ const panel = event.target.closest(".planr-artifact-panel");
1220
+ if (event.button === 0 && panel && !panEnabled && !spacePan) {
1221
+ selectEntry(
1222
+ entries.find(
1223
+ ({ artifactId }) => artifactId === panel.dataset.artifactId,
1224
+ ),
1225
+ { save: false },
1226
+ );
1227
+ }
1228
+ },
1229
+ true,
1230
+ );
1231
+ listen(
1232
+ scroll,
1233
+ "wheel",
1234
+ (event) => {
1235
+ if (state.view !== "canvas") return;
1236
+ event.preventDefault();
1237
+ if (event.ctrlKey || event.metaKey) {
1238
+ zoomTo(state.zoom * Math.exp(-event.deltaY * 0.004), {
1239
+ x: event.clientX,
1240
+ y: event.clientY,
1241
+ }, { scheduled: true });
1242
+ return;
1243
+ }
1244
+ state.camera = {
1245
+ x: state.camera.x - (event.shiftKey ? event.deltaY : event.deltaX),
1246
+ y: state.camera.y - (event.shiftKey ? 0 : event.deltaY),
1247
+ };
1248
+ saveViewport();
1249
+ scheduleCamera();
1250
+ persist();
1251
+ },
1252
+ { passive: false },
1253
+ );
1254
+ listen(scroll, "pointerdown", (event) => {
1255
+ if (state.view !== "canvas") return;
1256
+ if (root.dataset.designInspect === "true") return;
1257
+ if (event.button !== 0 && event.button !== 1) return;
1258
+ const label = event.target.closest("[data-design-drag]");
1259
+ const dragging =
1260
+ event.button === 0 &&
1261
+ state.view === "canvas" &&
1262
+ label &&
1263
+ !panEnabled &&
1264
+ !spacePan;
1265
+ const panning =
1266
+ event.button === 1 ||
1267
+ panEnabled ||
1268
+ spacePan ||
1269
+ event.target === scroll ||
1270
+ event.target === grid ||
1271
+ event.target === surface;
1272
+ if (!dragging && !panning) return;
1273
+ event.preventDefault();
1274
+ const panel = label?.closest(".planr-artifact-panel");
1275
+ gesture = {
1276
+ pointerId: event.pointerId,
1277
+ x: event.clientX,
1278
+ y: event.clientY,
1279
+ mode: dragging ? "artboard" : "pan",
1280
+ artifactId: dragging ? panel.dataset.artifactId : null,
1281
+ left: dragging ? parseFloat(panel.style.left) : state.camera.x,
1282
+ top: dragging ? parseFloat(panel.style.top) : state.camera.y,
1283
+ };
1284
+ scroll.setPointerCapture?.(event.pointerId);
1285
+ updatePan();
1286
+ });
1287
+ listen(scroll, "pointermove", (event) => {
1288
+ if (!gesture || gesture.pointerId !== event.pointerId) return;
1289
+ const dx = event.clientX - gesture.x;
1290
+ const dy = event.clientY - gesture.y;
1291
+ if (gesture.mode === "pan") {
1292
+ state.camera = {
1293
+ x: clamp(gesture.left + dx, -1e7, 1e7),
1294
+ y: clamp(gesture.top + dy, -1e7, 1e7),
1295
+ };
1296
+ saveViewport();
1297
+ scheduleCamera();
1298
+ } else {
1299
+ state.positions[gesture.artifactId] = {
1300
+ x: clamp(gesture.left + dx / state.zoom, -1e7, 1e7),
1301
+ y: clamp(gesture.top + dy / state.zoom, -1e7, 1e7),
1302
+ };
1303
+ const panel = panels.get(gesture.artifactId);
1304
+ panel.style.left = `${state.positions[gesture.artifactId].x}px`;
1305
+ panel.style.top = `${state.positions[gesture.artifactId].y}px`;
1306
+ scheduleCamera();
1307
+ }
1308
+ });
1309
+ for (const eventName of ["pointerup", "pointercancel", "lostpointercapture"])
1310
+ listen(scroll, eventName, (event) => {
1311
+ if (!gesture || gesture.pointerId !== event.pointerId) return;
1312
+ if (eventName === "pointerup") finishGesture();
1313
+ else releaseTemporaryPan();
1314
+ });
1315
+ listen(document, "keydown", (event) => {
1316
+ if (editable(event.target)) return;
1317
+ if (
1318
+ state.view === "canvas" &&
1319
+ event.code === "Space" &&
1320
+ !event.defaultPrevented && !event.ctrlKey && !event.metaKey && !event.altKey &&
1321
+ !document.querySelector("dialog[open]") &&
1322
+ !event.target.closest("button,[data-planr-annotation-layer]")
1323
+ ) {
1324
+ event.preventDefault();
1325
+ if (event.repeat) return;
1326
+ const previous = activeTool;
1327
+ setTool("pan");
1328
+ panEnabled = false;
1329
+ spacePan = true;
1330
+ spaceReturnTool = previous;
1331
+ updatePan();
1332
+ }
1333
+ const label = event.target.closest("[data-design-drag]");
1334
+ if (
1335
+ label &&
1336
+ state.view === "canvas" &&
1337
+ ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(event.key)
1338
+ ) {
1339
+ event.preventDefault();
1340
+ const panel = label.closest(".planr-artifact-panel");
1341
+ const distance = event.shiftKey ? 40 : 8;
1342
+ state.positions[panel.dataset.artifactId] = {
1343
+ x: clamp(
1344
+ parseFloat(panel.style.left) +
1345
+ (event.key === "ArrowRight"
1346
+ ? distance
1347
+ : event.key === "ArrowLeft"
1348
+ ? -distance
1349
+ : 0),
1350
+ -1e7,
1351
+ 1e7,
1352
+ ),
1353
+ y: clamp(
1354
+ parseFloat(panel.style.top) +
1355
+ (event.key === "ArrowDown"
1356
+ ? distance
1357
+ : event.key === "ArrowUp"
1358
+ ? -distance
1359
+ : 0),
1360
+ -1e7,
1361
+ 1e7,
1362
+ ),
1363
+ };
1364
+ render();
1365
+ persist();
1366
+ } else if (
1367
+ state.view === "walkthrough" &&
1368
+ ["ArrowLeft", "ArrowRight"].includes(event.key) &&
1369
+ !event.target.closest('button,[role="radio"]')
1370
+ ) {
1371
+ event.preventDefault();
1372
+ const index = clamp(
1373
+ design.screenOrder.indexOf(requestedScreen()) +
1374
+ (event.key === "ArrowRight" ? 1 : -1),
1375
+ 0,
1376
+ design.screenOrder.length - 1,
1377
+ );
1378
+ selectEntry(entryFor(design.screenOrder[index]));
1379
+ }
1380
+ });
1381
+ listen(document, "keyup", (event) => {
1382
+ if (event.code === "Space") {
1383
+ releaseTemporaryPan();
1384
+ }
1385
+ });
1386
+ listen(window, "blur", () => {
1387
+ releaseTemporaryPan();
1388
+ // Pointer events inside sandboxed product frames do not bubble to the studio.
1389
+ if (document.activeElement?.tagName === "IFRAME") closeDesignNotes();
1390
+ });
1391
+ listen(document, "visibilitychange", () => { if (document.hidden) { releaseTemporaryPan(); finishWalkthroughTransition(); } });
1392
+ listen(window.matchMedia?.("(prefers-reduced-motion: reduce)"), "change", () => finishWalkthroughTransition());
1393
+ listen(window, "resize", () => {
1394
+ const compact = window.innerWidth <= 960;
1395
+ if (compact && !compactViewport) {
1396
+ state.navOpen = false;
1397
+ state.reviewOpen = false;
1398
+ stage.dispatch({ type: "set-rail-open", railOpen: false });
1399
+ persist();
1400
+ }
1401
+ compactViewport = compact;
1402
+ render();
1403
+ if (state.view !== "canvas" && root.dataset.designRestoring !== "true") fit({ save: false });
1404
+ updateDesignNotes();
1405
+ });
1406
+ listen(window, "online", () => {
1407
+ if (dirty || reviewDirty) void flush();
1408
+ });
1409
+ listen(window, "beforeunload", (event) => {
1410
+ storeDraft();
1411
+ storeReviewDraft();
1412
+ if (
1413
+ (contentDirty || reviewDirty) &&
1414
+ (options.stateUrl || options.saveState || reviewUrl())
1415
+ ) {
1416
+ event.preventDefault();
1417
+ event.returnValue = "";
1418
+ }
1419
+ });
1420
+ listen(window, "message", (event) => {
1421
+ // Authored navigation is accepted only from one of this studio's exact
1422
+ // sandbox windows, then resolved against the declared screen identities.
1423
+ if (
1424
+ event.data?.type !== "openplanr:design-navigate" ||
1425
+ typeof event.data.screenId !== "string"
1426
+ )
1427
+ return;
1428
+ const source = entries.find(
1429
+ ({ artifactId }) =>
1430
+ stage.getFrame(artifactId)?.contentWindow === event.source,
1431
+ );
1432
+ if (!source || !design.screenOrder.includes(event.data.screenId)) return;
1433
+ if (state.view !== "canvas" && (source.artifactId !== activeArtifactId || walkthroughTransition)) return;
1434
+ selectEntry(
1435
+ entryFor(event.data.screenId, source.variantId, source.frameId),
1436
+ );
1437
+ });
1438
+ }
1439
+
1440
+ async function refreshSavedState() {
1441
+ if (!options.stateUrl) return;
1442
+ try {
1443
+ const result = await jsonRequest(options.stateUrl);
1444
+ if (destroyed) return;
1445
+ if (result.revision !== undefined) revision = result.revision;
1446
+ if (result.stateVersion !== undefined) stateVersion = result.stateVersion;
1447
+ if (result.state && !dirty) {
1448
+ state = normalizeState(result.state);
1449
+ if (compactViewport) {
1450
+ state.navOpen = false;
1451
+ state.reviewOpen = false;
1452
+ }
1453
+ stage.dispatch({ type: "set-rail-open", railOpen: state.reviewOpen });
1454
+ }
1455
+ if (savedDraft?.unsaved)
1456
+ notice(
1457
+ "A previous unsaved draft is available in this browser. The saved review is shown; your draft has not overwritten it.",
1458
+ true,
1459
+ );
1460
+ selectEntry(entryFor(), { save: false });
1461
+ status("All changes saved");
1462
+ } catch {
1463
+ status("Disconnected · local draft", "disconnected");
1464
+ }
1465
+ }
1466
+
1467
+ async function pollRevision() {
1468
+ if (!options.statusUrl || destroyed) return;
1469
+ try {
1470
+ const result = await jsonRequest(options.statusUrl);
1471
+ if (destroyed) return;
1472
+ if (typeof result.verification === "string")
1473
+ q("[data-design-verification]").textContent =
1474
+ result.verification === "verified"
1475
+ ? "Browser inspection complete"
1476
+ : "Browser inspection pending";
1477
+ if (
1478
+ result.revision !== undefined &&
1479
+ revision !== null &&
1480
+ result.revision !== revision
1481
+ ) {
1482
+ if (contentDirty || reviewDirty)
1483
+ notice(
1484
+ "A new design revision is ready. Save or recover this browser’s unsaved changes before reloading.",
1485
+ true,
1486
+ );
1487
+ else {
1488
+ storeDraft();
1489
+ window.location.reload();
1490
+ return;
1491
+ }
1492
+ }
1493
+ if (result.status === "failed")
1494
+ notice(
1495
+ result.message ??
1496
+ "The new revision failed. This working design remains available.",
1497
+ true,
1498
+ );
1499
+ } catch {
1500
+ if (!dirty) status("Disconnected", "disconnected");
1501
+ }
1502
+ pollTimer = setTimeout(pollRevision, 4000);
1503
+ }
1504
+
1505
+ async function reportReady() {
1506
+ if (readyReported || destroyed) return;
1507
+ const result = await Promise.race([
1508
+ stage.ready,
1509
+ new Promise((resolve) =>
1510
+ setTimeout(() => resolve({ status: "timeout" }), 15000),
1511
+ ),
1512
+ ]);
1513
+ if (destroyed) return;
1514
+ const requiredEntries = stage.frameBudget ? [entryFor()] : entries;
1515
+ if (stage.frameBudget) {
1516
+ try { await stage.ensureFrames(requiredEntries.map(entry=>entry.artifactId)); }
1517
+ catch { if (!destroyed) notice('The first screen could not load. Reload to retry; saved feedback remains available.',true); return; }
1518
+ }
1519
+ const authenticated = Promise.all(
1520
+ requiredEntries.map(({ artifactId }) => {
1521
+ const frame = stage.getFrame(artifactId);
1522
+ if (
1523
+ !frame?.__openPlanrBridge ||
1524
+ frame.dataset.planrBridgeTrusted === "true"
1525
+ )
1526
+ return true;
1527
+ return new Promise((resolve) =>
1528
+ frame.addEventListener(
1529
+ "planr:artifact-bridge-ready",
1530
+ () => resolve(true),
1531
+ { once: true },
1532
+ ),
1533
+ );
1534
+ }),
1535
+ );
1536
+ const bridgeReady = await Promise.race([
1537
+ authenticated.then(() => true),
1538
+ new Promise((resolve) => setTimeout(() => resolve(false), 15000)),
1539
+ ]);
1540
+ if (destroyed) return;
1541
+ const loaded = requiredEntries.filter(({ artifactId }) => {
1542
+ const frame = stage.getFrame(artifactId);
1543
+ return (
1544
+ (frame?.src?.startsWith("blob:") || Boolean(frame?.srcdoc)) &&
1545
+ frame.dataset.planrArtifactDigest &&
1546
+ (!frame.__openPlanrBridge ||
1547
+ frame.dataset.planrBridgeTrusted === "true")
1548
+ );
1549
+ });
1550
+ if (
1551
+ result?.status !== "ready" ||
1552
+ !bridgeReady ||
1553
+ loaded.length !== requiredEntries.length
1554
+ ) {
1555
+ status("Preview failed to load", "failed");
1556
+ notice(
1557
+ "Some design previews did not finish loading. Reload the local review to retry; saved feedback remains available.",
1558
+ true,
1559
+ );
1560
+ return;
1561
+ }
1562
+ readyReported = true;
1563
+ render();
1564
+ await new Promise((resolve) =>
1565
+ requestAnimationFrame(() => requestAnimationFrame(resolve)),
1566
+ );
1567
+ if (destroyed) return;
1568
+ root.dataset.designReady = "true";
1569
+ if (!root.dataset.sharedOpening) delete document.documentElement.dataset.designOpening;
1570
+ if (!contentDirty && !reviewDirty && (!options.stateUrl || stateVersion !== null))
1571
+ status(options.stateUrl ? "All changes saved" : "Ready · local preview");
1572
+ const detail = {
1573
+ revision,
1574
+ status: "ready",
1575
+ artifacts: loaded.map(({ artifactId }) => artifactId),
1576
+ };
1577
+ root.dispatchEvent(
1578
+ new CustomEvent("planr:design-ready", { bubbles: true, detail }),
1579
+ );
1580
+ if (typeof options.onReady === "function") await options.onReady(detail);
1581
+ if (options.readyUrl) {
1582
+ try {
1583
+ await jsonRequest(options.readyUrl, {
1584
+ method: "POST",
1585
+ headers: { "Content-Type": "application/json" },
1586
+ body: JSON.stringify(detail),
1587
+ });
1588
+ } catch {
1589
+ status("Preview ready · server disconnected", "disconnected");
1590
+ }
1591
+ }
1592
+ }
1593
+
1594
+ function mount() {
1595
+ options = globalThis.__OPENPLANR_DESIGN_STUDIO_OPTIONS__ ?? options;
1596
+ stage = window.__openPlanrArtifactStage;
1597
+ if (!stage) {
1598
+ status("Review runtime unavailable", "failed");
1599
+ return null;
1600
+ }
1601
+ root = q(".planr-shell");
1602
+ previousReviewMode = stage.getState().reviewMode;
1603
+ activeTool = previousReviewMode === "comment" ? "annotate" : "interact";
1604
+ scroll = q(".planr-stage-scroll");
1605
+ surface = q(".planr-stage-surface");
1606
+ grid = q(".planr-frame-grid");
1607
+ canvasBackground = document.createElement("div");
1608
+ canvasBackground.className = "design-canvas-background";
1609
+ canvasBackground.setAttribute("aria-hidden", "true");
1610
+ scroll.prepend(canvasBackground);
1611
+ selectionOutline = document.createElement("div");
1612
+ selectionOutline.className = "design-selection-outline";
1613
+ selectionOutline.setAttribute("aria-hidden", "true");
1614
+ selectionOutline.hidden = true;
1615
+ scroll.append(selectionOutline);
1616
+ for (const entry of entries) {
1617
+ const panel = stage.getPanel(entry.artifactId);
1618
+ if (!panel) {
1619
+ status("Missing design preview", "failed");
1620
+ return null;
1621
+ }
1622
+ panels.set(entry.artifactId, panel);
1623
+ const screen = design.screens.find(({ id }) => id === entry.screenId);
1624
+ const variant = design.variants.find(({ id }) => id === entry.variantId);
1625
+ const frame = design.frames.find(({ id }) => id === entry.frameId);
1626
+ const label = document.createElement("div");
1627
+ label.className = "design-artboard-label";
1628
+ label.setAttribute("role", "group");
1629
+ const drag = document.createElement("button");
1630
+ drag.type = "button";
1631
+ drag.className = "design-artboard-drag";
1632
+ drag.dataset.designDrag = entry.artifactId;
1633
+ drag.setAttribute(
1634
+ "aria-label",
1635
+ `Move ${screen.title}, ${variant.label}, ${frame.label}. Use arrow keys to arrange.`,
1636
+ );
1637
+ const title = document.createElement("strong");
1638
+ title.textContent = `${screen.title}${readyVariants.length > 1 ? ` / ${variant.label}` : ""}`;
1639
+ const size = document.createElement("span");
1640
+ size.textContent = `${frame.label} · ${frame.width} × ${frame.height}`;
1641
+ drag.append(title, size);
1642
+ label.append(drag);
1643
+ if (screen.description) {
1644
+ const note = document.createElement("button");
1645
+ note.type = "button";
1646
+ note.className = "design-artboard-note";
1647
+ note.dataset.designNote = screen.id;
1648
+ note.setAttribute("aria-controls", "design-guidance-panel");
1649
+ note.setAttribute("aria-expanded", "false");
1650
+ note.title = screen.description;
1651
+ note.setAttribute(
1652
+ "aria-label",
1653
+ `Open design notes for ${screen.title}`,
1654
+ );
1655
+ note.textContent = "i";
1656
+ label.append(note);
1657
+ }
1658
+ panel.prepend(label);
1659
+ if (stage.frameBudget) {
1660
+ const load = document.createElement('button'); load.type='button';
1661
+ load.className='design-frame-placeholder'; load.dataset.designLoadFrame=entry.artifactId;
1662
+ load.setAttribute('aria-label',`Open screen: ${screen.title}, ${frame.label}`);
1663
+ load.textContent='Open screen'; panel.querySelector('.planr-frame').append(load);
1664
+ }
1665
+ }
1666
+ const verified = payload.verification?.status === "verified";
1667
+ q("[data-design-verification]").textContent = verified
1668
+ ? "Browser inspection complete"
1669
+ : "Browser inspection pending";
1670
+ installEvents();
1671
+ if (stage.frameBudget) {
1672
+ listen(root, 'planr:artifact-frame-state', updateFramePlaceholders);
1673
+ updateFramePlaceholders();
1674
+ }
1675
+ compactViewport = window.innerWidth <= 960;
1676
+ if (compactViewport) {
1677
+ state.navOpen = false;
1678
+ state.reviewOpen = false;
1679
+ stage.dispatch({ type: "set-rail-open", railOpen: false });
1680
+ } else
1681
+ stage.dispatch({ type: "set-rail-open", railOpen: state.reviewOpen });
1682
+ selectEntry(entryFor(), { save: false });
1683
+ if (!reviewUrl() && !stage.review.getState().review) {
1684
+ try {
1685
+ const storedReview = JSON.parse(
1686
+ localStorage.getItem(`${storageKey}.review`) ?? "null",
1687
+ );
1688
+ if (storedReview?.review)
1689
+ stage.review.replaceReview(storedReview.review);
1690
+ } catch {
1691
+ /* A different render digest must not inherit coordinate pins. */
1692
+ }
1693
+ }
1694
+ const controller = Object.freeze({
1695
+ setTool,
1696
+ getTool: () => activeTool,
1697
+ getState: () => clone(state),
1698
+ getRevision: () => revision,
1699
+ getSaveState: () => ({
1700
+ dirty: contentDirty || reviewDirty,
1701
+ personalPending: dirty && !contentDirty,
1702
+ revision,
1703
+ stateVersion,
1704
+ }),
1705
+ selectScreen: (screenId) => selectEntry(entryFor(screenId)),
1706
+ selectEntry: (entry) => selectEntry(entry),
1707
+ fitSelection: ({ save = true } = {}) => fit({ selection: entryFor(), save }),
1708
+ setCamera(camera) {
1709
+ if (state.view !== "canvas") return;
1710
+ if (!Number.isFinite(camera?.x) || !Number.isFinite(camera?.y)) return;
1711
+ state.camera = { x: clamp(camera.x, -1e7, 1e7), y: clamp(camera.y, -1e7, 1e7) };
1712
+ if (Number.isFinite(camera.zoom)) state.zoom = clamp(camera.zoom, 0.05, 2);
1713
+ saveViewport(); renderCamera(); persist();
1714
+ },
1715
+ setPanels({ navOpen = state.navOpen, reviewOpen = state.reviewOpen }, { save = true } = {}) {
1716
+ state.navOpen = Boolean(navOpen); state.reviewOpen = Boolean(reviewOpen);
1717
+ stage.dispatch({ type: "set-rail-open", railOpen: state.reviewOpen });
1718
+ render(); if (save) persist();
1719
+ },
1720
+ restorePresentation(snapshot) {
1721
+ finishWalkthroughTransition();
1722
+ const personal = {};
1723
+ for (const key of ["view", "screenId", "frameId", "variantId", "compare", "navOpen", "reviewOpen", "zoom", "camera", "viewports", "positions"])
1724
+ if (snapshot[key] !== undefined) personal[key] = clone(snapshot[key]);
1725
+ state = normalizeState({ ...state, ...personal });
1726
+ stage.dispatch({ type: "set-rail-open", railOpen: state.reviewOpen });
1727
+ selectEntry(entryFor(), { save: false }); render(); persist();
1728
+ },
1729
+ setView(view) {
1730
+ switchView(view);
1731
+ },
1732
+ fit,
1733
+ flush,
1734
+ exportArtifact,
1735
+ destroy() {
1736
+ finishWalkthroughTransition();
1737
+ root.dispatchEvent(new CustomEvent("planr:design-destroy"));
1738
+ for (const { artifactId } of entries) stage.getFrame(artifactId)?.__openPlanrBridge?.setViewportGestures?.(false);
1739
+ destroyed = true; ++screenRequest; pendingScreen=null; clearTimeout(frameDemandTimer);
1740
+ clearTimeout(saveTimer);
1741
+ clearTimeout(reviewTimer);
1742
+ clearTimeout(pollTimer);
1743
+ clearTimeout(noticeTimer);
1744
+ if (cameraFrame !== null) cancelAnimationFrame(cameraFrame);
1745
+ canvasBackground?.remove();
1746
+ selectionOutline?.remove();
1747
+ for (const remove of cleanup.splice(0)) remove();
1748
+ },
1749
+ });
1750
+ window.__openPlanrDesignStudio = controller;
1751
+ void refreshSavedState().then(reportReady);
1752
+ pollTimer = setTimeout(pollRevision, 4000);
1753
+ return controller;
1754
+ }
1755
+
1756
+ // The artifact server loads its trusted bridge and adapter before the stage.
1757
+ // Those scripts may arrive after DOMContentLoaded; do not confuse that normal
1758
+ // startup sequence with a missing runtime.
1759
+ const bootStarted = Date.now();
1760
+ function boot() {
1761
+ if (document.getElementById("planr-design-studio-payload") !== payloadNode) return;
1762
+ if (window.__openPlanrArtifactStage) {
1763
+ mount();
1764
+ return;
1765
+ }
1766
+ if (Date.now() - bootStarted >= 15000) {
1767
+ status("Review runtime unavailable", "failed");
1768
+ return;
1769
+ }
1770
+ setTimeout(boot, 30);
1771
+ }
1772
+ if (document.readyState === "loading")
1773
+ document.addEventListener("DOMContentLoaded", boot, { once: true });
1774
+ else boot();
1775
+ })();