opendevbrowser 0.0.32 → 0.0.34

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 (274) hide show
  1. package/README.md +1 -1
  2. package/dist/{accessibility-snapshot-XOP66CSK.js → accessibility-snapshot-VCBXK47S.js} +9 -9
  3. package/dist/{active-window-E3WFOQGX.js → active-window-7EUN36LZ.js} +9 -9
  4. package/dist/{annotate-MAE7ZJOZ.js → annotate-VLBK7YB6.js} +8 -8
  5. package/dist/{attr-M3PFDJ7Q.js → attr-JNANQKM6.js} +8 -8
  6. package/dist/browser/browser-manager.d.ts.map +1 -1
  7. package/dist/browser/canvas-manager.d.ts.map +1 -1
  8. package/dist/browser/manager-types.d.ts +3 -0
  9. package/dist/browser/manager-types.d.ts.map +1 -1
  10. package/dist/browser/ops-browser-manager.d.ts.map +1 -1
  11. package/dist/browser/screencast-recorder.d.ts +1 -0
  12. package/dist/browser/screencast-recorder.d.ts.map +1 -1
  13. package/dist/canvas/guidance.d.ts +7 -0
  14. package/dist/canvas/guidance.d.ts.map +1 -1
  15. package/dist/canvas/repair-examples.d.ts +45 -0
  16. package/dist/canvas/repair-examples.d.ts.map +1 -0
  17. package/dist/{canvas-3AJVL5I5.js → canvas-V5LO4JVL.js} +23 -8
  18. package/dist/canvas-V5LO4JVL.js.map +1 -0
  19. package/dist/{capture-desktop-VJGEETMJ.js → capture-desktop-FKVDWTVG.js} +9 -9
  20. package/dist/{capture-window-W5UFSFQL.js → capture-window-QVPM2DN2.js} +9 -9
  21. package/dist/{check-4IR3UJVW.js → check-V3CWZ56S.js} +8 -8
  22. package/dist/{checked-PKNY7724.js → checked-Q27Q6YZN.js} +8 -8
  23. package/dist/{chunk-WHQZBUNY.js → chunk-3WLCWHIV.js} +2 -2
  24. package/dist/{chunk-WHQZBUNY.js.map → chunk-3WLCWHIV.js.map} +1 -1
  25. package/dist/{chunk-RO3SMXF3.js → chunk-5FDXH4CS.js} +2870 -191
  26. package/dist/chunk-5FDXH4CS.js.map +1 -0
  27. package/dist/{chunk-J3KYGJRQ.js → chunk-G6NQ7WYD.js} +2 -2
  28. package/dist/{chunk-AKIAGFOE.js → chunk-GC2FWISX.js} +33 -14
  29. package/dist/chunk-GC2FWISX.js.map +1 -0
  30. package/dist/{chunk-2X4JFMKJ.js → chunk-IBIHDGTZ.js} +4 -4
  31. package/dist/chunk-IBIHDGTZ.js.map +1 -0
  32. package/dist/{chunk-XDLJE3RJ.js → chunk-NX2XYJP5.js} +2 -2
  33. package/dist/{chunk-AWQ37HSC.js → chunk-OJAUKABV.js} +2 -2
  34. package/dist/{chunk-ZOVMMQO6.js → chunk-QXJDJDSZ.js} +35 -14
  35. package/dist/chunk-QXJDJDSZ.js.map +1 -0
  36. package/dist/{chunk-SKFB5ICF.js → chunk-TI5I6UWY.js} +8 -3
  37. package/dist/chunk-TI5I6UWY.js.map +1 -0
  38. package/dist/{chunk-W6YPVNDX.js → chunk-VTGG5ZU2.js} +2 -2
  39. package/dist/{chunk-P5K3ZIPI.js → chunk-VX47SJZM.js} +2 -2
  40. package/dist/{chunk-BUXFIY2P.js → chunk-VY47VKXU.js} +3 -3
  41. package/dist/{chunk-NURQB55J.js → chunk-WY72GYAH.js} +2 -2
  42. package/dist/{chunk-HBK56JST.js → chunk-XRDCSHKZ.js} +202 -126
  43. package/dist/chunk-XRDCSHKZ.js.map +1 -0
  44. package/dist/{chunk-PIFHXKV4.js → chunk-Z3HIX2SE.js} +3 -3
  45. package/dist/{chunk-37VSRUW4.js → chunk-ZGCTC5YM.js} +39 -7
  46. package/dist/chunk-ZGCTC5YM.js.map +1 -0
  47. package/dist/cli/commands/canvas.d.ts +12 -0
  48. package/dist/cli/commands/canvas.d.ts.map +1 -1
  49. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  50. package/dist/cli/daemon-commands.d.ts.map +1 -1
  51. package/dist/cli/daemon-mismatch.d.ts +6 -0
  52. package/dist/cli/daemon-mismatch.d.ts.map +1 -1
  53. package/dist/cli/help.d.ts.map +1 -1
  54. package/dist/cli/index.js +77 -77
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/utils/parse.d.ts +1 -0
  57. package/dist/cli/utils/parse.d.ts.map +1 -1
  58. package/dist/cli/utils/workflow-message.d.ts +1 -1
  59. package/dist/cli/utils/workflow-message.d.ts.map +1 -1
  60. package/dist/{click-HLNXU4I5.js → click-EQDRSLR3.js} +8 -8
  61. package/dist/{clone-component-QIKN5PIM.js → clone-component-SISUXTJS.js} +7 -7
  62. package/dist/{clone-page-5C7DTGZT.js → clone-page-MLDPCBOY.js} +7 -7
  63. package/dist/{close-WTXB3EDD.js → close-2LQMJVOA.js} +7 -7
  64. package/dist/{close-PCRZHX7F.js → close-7J7EV237.js} +7 -7
  65. package/dist/{connect-6C2IG55I.js → connect-JFRSIW5M.js} +8 -8
  66. package/dist/{console-poll-VJXCZR3F.js → console-poll-NSVVUNEC.js} +8 -8
  67. package/dist/{cookie-import-5OEDFB6U.js → cookie-import-B7IQTGTN.js} +7 -7
  68. package/dist/{cookie-list-44UNJJ6D.js → cookie-list-YHG7JCZZ.js} +7 -7
  69. package/dist/{daemon-CIKGBWEB.js → daemon-ENU4FOV4.js} +6 -6
  70. package/dist/daemon-fingerprint.json +1 -1
  71. package/dist/{debug-trace-snapshot-RGXAPGWB.js → debug-trace-snapshot-KLGU2AWY.js} +8 -8
  72. package/dist/{dialog-S64MJUM2.js → dialog-MUVQIERS.js} +8 -8
  73. package/dist/{disconnect-MTIELIM7.js → disconnect-KELQJ45J.js} +7 -7
  74. package/dist/{enabled-KF2L7LW4.js → enabled-SF6UU5HG.js} +8 -8
  75. package/dist/{goto-ULWINUAZ.js → goto-AZQWXYPG.js} +8 -8
  76. package/dist/guidance/context.d.ts +44 -0
  77. package/dist/guidance/context.d.ts.map +1 -0
  78. package/dist/guidance/index.d.ts +7 -0
  79. package/dist/guidance/index.d.ts.map +1 -0
  80. package/dist/guidance/readiness.d.ts +7 -0
  81. package/dist/guidance/readiness.d.ts.map +1 -0
  82. package/dist/guidance/recipes/generic.d.ts +3 -0
  83. package/dist/guidance/recipes/generic.d.ts.map +1 -0
  84. package/dist/guidance/recipes/pinterest.d.ts +5 -0
  85. package/dist/guidance/recipes/pinterest.d.ts.map +1 -0
  86. package/dist/guidance/recipes/site-recipe-types.d.ts +2 -0
  87. package/dist/guidance/recipes/site-recipe-types.d.ts.map +1 -0
  88. package/dist/guidance/recipes/site-recipe-validation.d.ts +27 -0
  89. package/dist/guidance/recipes/site-recipe-validation.d.ts.map +1 -0
  90. package/dist/guidance/recipes/site-registry.d.ts +5 -0
  91. package/dist/guidance/recipes/site-registry.d.ts.map +1 -0
  92. package/dist/guidance/renderers.d.ts +22 -0
  93. package/dist/guidance/renderers.d.ts.map +1 -0
  94. package/dist/guidance/router.d.ts +8 -0
  95. package/dist/guidance/router.d.ts.map +1 -0
  96. package/dist/guidance/types.d.ts +140 -0
  97. package/dist/guidance/types.d.ts.map +1 -0
  98. package/dist/{help-IG5S5RJD.js → help-B44IBHXL.js} +6 -5
  99. package/dist/help-B44IBHXL.js.map +1 -0
  100. package/dist/{hover-NOCOTR6N.js → hover-MQRAKKVU.js} +8 -8
  101. package/dist/{html-LXSYP6BT.js → html-PLRTU2WS.js} +8 -8
  102. package/dist/index.js +51 -16
  103. package/dist/index.js.map +1 -1
  104. package/dist/{inspector-62EPCLYB.js → inspector-IY4GBIT6.js} +10 -10
  105. package/dist/{inspector-audit-T2IF67RJ.js → inspector-audit-7MQCRJHD.js} +12 -12
  106. package/dist/{inspector-plan-KQS6LRMW.js → inspector-plan-ZAUDHBET.js} +10 -10
  107. package/dist/inspiredesign/contract.d.ts +3 -0
  108. package/dist/inspiredesign/contract.d.ts.map +1 -1
  109. package/dist/inspiredesign/handoff.d.ts +2 -2
  110. package/dist/inspiredesign/meta-prompt.d.ts +1 -1
  111. package/dist/inspiredesign/meta-prompt.d.ts.map +1 -1
  112. package/dist/inspiredesign/reference-pattern-board.d.ts +22 -1
  113. package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
  114. package/dist/{inspiredesign-DB6CHYN3.js → inspiredesign-VHPEO3UK.js} +83 -30
  115. package/dist/inspiredesign-VHPEO3UK.js.map +1 -0
  116. package/dist/{launch-B5ES6FVS.js → launch-OCTWPTV5.js} +8 -8
  117. package/dist/{list-TIZVR6RO.js → list-HUSYADUS.js} +7 -7
  118. package/dist/{list-XM4BP5GM.js → list-JWKAMAUA.js} +7 -7
  119. package/dist/{macro-resolve-TTQZVFIW.js → macro-resolve-WOXMPZDQ.js} +9 -9
  120. package/dist/{network-poll-NNSY4W63.js → network-poll-WHB62OEF.js} +8 -8
  121. package/dist/{new-E6VNAC2A.js → new-IKZBYBNK.js} +7 -7
  122. package/dist/{open-F55XKMKB.js → open-UA2VI6ZP.js} +7 -7
  123. package/dist/opendevbrowser.js +51 -16
  124. package/dist/opendevbrowser.js.map +1 -1
  125. package/dist/{perf-RE7JE6CP.js → perf-DICS3VKH.js} +8 -8
  126. package/dist/{pointer-down-BCBPC5FJ.js → pointer-down-2XPRZFJC.js} +9 -9
  127. package/dist/{pointer-drag-QK7KGF7W.js → pointer-drag-7NY4BOLH.js} +9 -9
  128. package/dist/{pointer-move-VFAZQAXA.js → pointer-move-FWEXMH37.js} +9 -9
  129. package/dist/{pointer-up-FA5WE6LS.js → pointer-up-VU2OHK5D.js} +9 -9
  130. package/dist/{press-TNRHNDSW.js → press-W7IZ3FCX.js} +8 -8
  131. package/dist/{product-video-UEANMZ2U.js → product-video-XCZ6CHR5.js} +10 -10
  132. package/dist/providers/browser-native-discovery.d.ts +23 -0
  133. package/dist/providers/browser-native-discovery.d.ts.map +1 -0
  134. package/dist/providers/browser-output-artifacts.d.ts +13 -0
  135. package/dist/providers/browser-output-artifacts.d.ts.map +1 -0
  136. package/dist/providers/renderer.d.ts +2 -0
  137. package/dist/providers/renderer.d.ts.map +1 -1
  138. package/dist/providers/workflow-handoff.d.ts +3 -0
  139. package/dist/providers/workflow-handoff.d.ts.map +1 -1
  140. package/dist/providers/workflows.d.ts.map +1 -1
  141. package/dist/{providers-AMCNWZUL.js → providers-XCNSU3T6.js} +4 -4
  142. package/dist/public-surface/generated-manifest.d.ts +5 -5
  143. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  144. package/dist/public-surface/source.d.ts +2 -2
  145. package/dist/public-surface/source.d.ts.map +1 -1
  146. package/dist/{research-YFY7WJSZ.js → research-AYCKHOWK.js} +10 -10
  147. package/dist/{review-NHOPLAT7.js → review-PP2UNSMJ.js} +9 -9
  148. package/dist/{review-desktop-OFWPDYGD.js → review-desktop-3JOJFUEJ.js} +9 -9
  149. package/dist/{rpc-TVVQPUOL.js → rpc-7EPTJQQ6.js} +8 -8
  150. package/dist/{run-OCBEZRDW.js → run-P6UJS3D4.js} +6 -6
  151. package/dist/{screencast-start-GTSDA33J.js → screencast-start-ZZYNH2HT.js} +8 -8
  152. package/dist/{screencast-stop-FYBUIXAA.js → screencast-stop-Y6ADFOFA.js} +8 -8
  153. package/dist/{screenshot-OEYRT3SP.js → screenshot-CJB7PMAF.js} +8 -8
  154. package/dist/{scroll-35OFEFC5.js → scroll-BP5MA4ZT.js} +8 -8
  155. package/dist/{scroll-into-view-UQ5RAWIX.js → scroll-into-view-O3RDWLM2.js} +8 -8
  156. package/dist/{select-K56QELVZ.js → select-QLCNRI36.js} +8 -8
  157. package/dist/{serve-5UJ3VMWC.js → serve-OO2MQWGL.js} +7 -7
  158. package/dist/{shopping-FJG7XB4Q.js → shopping-UYHCYPAH.js} +10 -10
  159. package/dist/{snapshot-W7RKVZEI.js → snapshot-SXYZ3CMC.js} +8 -8
  160. package/dist/{status-KHYCLGUD.js → status-AL2AHVA5.js} +7 -7
  161. package/dist/{status-R4EV4TWO.js → status-QQW7REK4.js} +9 -9
  162. package/dist/{status-capabilities-XD3RGLKF.js → status-capabilities-AVHJYQQQ.js} +9 -9
  163. package/dist/{text-TANLFZ4O.js → text-B6Z47EOA.js} +8 -8
  164. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  165. package/dist/tools/product_video_run.d.ts.map +1 -1
  166. package/dist/{type-Y2Y7LX7Y.js → type-LR3F3SQY.js} +8 -8
  167. package/dist/{uncheck-6REVUUB2.js → uncheck-5PJEHR7J.js} +8 -8
  168. package/dist/{upload-GGZC5UQP.js → upload-HQ3QN2OW.js} +8 -8
  169. package/dist/{use-B4Q7CFG2.js → use-KFZLMRUH.js} +7 -7
  170. package/dist/{value-DHOHO55D.js → value-TKUFUK5I.js} +8 -8
  171. package/dist/{visible-S5BTWYNH.js → visible-P5Z2N2QR.js} +8 -8
  172. package/dist/{wait-WV6NZUKL.js → wait-BYSHJPSC.js} +8 -8
  173. package/dist/{windows-GKE36DJQ.js → windows-6GTD25EU.js} +9 -9
  174. package/extension/manifest.json +1 -1
  175. package/package.json +1 -1
  176. package/skills/opendevbrowser-best-practices/SKILL.md +8 -2
  177. package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +4 -4
  178. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +7 -0
  179. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +6 -0
  180. package/skills/opendevbrowser-design-agent/SKILL.md +8 -6
  181. package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +4 -3
  182. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +28 -4
  183. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +1 -0
  184. package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +5 -2
  185. package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +8 -2
  186. package/skills/opendevbrowser-motion-design/SKILL.md +1 -1
  187. package/skills/opendevbrowser-motion-design/scripts/validate-skill-assets.sh +1 -0
  188. package/dist/canvas-3AJVL5I5.js.map +0 -1
  189. package/dist/chunk-2X4JFMKJ.js.map +0 -1
  190. package/dist/chunk-37VSRUW4.js.map +0 -1
  191. package/dist/chunk-AKIAGFOE.js.map +0 -1
  192. package/dist/chunk-HBK56JST.js.map +0 -1
  193. package/dist/chunk-RO3SMXF3.js.map +0 -1
  194. package/dist/chunk-SKFB5ICF.js.map +0 -1
  195. package/dist/chunk-ZOVMMQO6.js.map +0 -1
  196. package/dist/help-IG5S5RJD.js.map +0 -1
  197. package/dist/inspiredesign-DB6CHYN3.js.map +0 -1
  198. /package/dist/{accessibility-snapshot-XOP66CSK.js.map → accessibility-snapshot-VCBXK47S.js.map} +0 -0
  199. /package/dist/{active-window-E3WFOQGX.js.map → active-window-7EUN36LZ.js.map} +0 -0
  200. /package/dist/{annotate-MAE7ZJOZ.js.map → annotate-VLBK7YB6.js.map} +0 -0
  201. /package/dist/{attr-M3PFDJ7Q.js.map → attr-JNANQKM6.js.map} +0 -0
  202. /package/dist/{capture-desktop-VJGEETMJ.js.map → capture-desktop-FKVDWTVG.js.map} +0 -0
  203. /package/dist/{capture-window-W5UFSFQL.js.map → capture-window-QVPM2DN2.js.map} +0 -0
  204. /package/dist/{check-4IR3UJVW.js.map → check-V3CWZ56S.js.map} +0 -0
  205. /package/dist/{checked-PKNY7724.js.map → checked-Q27Q6YZN.js.map} +0 -0
  206. /package/dist/{chunk-J3KYGJRQ.js.map → chunk-G6NQ7WYD.js.map} +0 -0
  207. /package/dist/{chunk-XDLJE3RJ.js.map → chunk-NX2XYJP5.js.map} +0 -0
  208. /package/dist/{chunk-AWQ37HSC.js.map → chunk-OJAUKABV.js.map} +0 -0
  209. /package/dist/{chunk-W6YPVNDX.js.map → chunk-VTGG5ZU2.js.map} +0 -0
  210. /package/dist/{chunk-P5K3ZIPI.js.map → chunk-VX47SJZM.js.map} +0 -0
  211. /package/dist/{chunk-BUXFIY2P.js.map → chunk-VY47VKXU.js.map} +0 -0
  212. /package/dist/{chunk-NURQB55J.js.map → chunk-WY72GYAH.js.map} +0 -0
  213. /package/dist/{chunk-PIFHXKV4.js.map → chunk-Z3HIX2SE.js.map} +0 -0
  214. /package/dist/{click-HLNXU4I5.js.map → click-EQDRSLR3.js.map} +0 -0
  215. /package/dist/{clone-component-QIKN5PIM.js.map → clone-component-SISUXTJS.js.map} +0 -0
  216. /package/dist/{clone-page-5C7DTGZT.js.map → clone-page-MLDPCBOY.js.map} +0 -0
  217. /package/dist/{close-WTXB3EDD.js.map → close-2LQMJVOA.js.map} +0 -0
  218. /package/dist/{close-PCRZHX7F.js.map → close-7J7EV237.js.map} +0 -0
  219. /package/dist/{connect-6C2IG55I.js.map → connect-JFRSIW5M.js.map} +0 -0
  220. /package/dist/{console-poll-VJXCZR3F.js.map → console-poll-NSVVUNEC.js.map} +0 -0
  221. /package/dist/{cookie-import-5OEDFB6U.js.map → cookie-import-B7IQTGTN.js.map} +0 -0
  222. /package/dist/{cookie-list-44UNJJ6D.js.map → cookie-list-YHG7JCZZ.js.map} +0 -0
  223. /package/dist/{daemon-CIKGBWEB.js.map → daemon-ENU4FOV4.js.map} +0 -0
  224. /package/dist/{debug-trace-snapshot-RGXAPGWB.js.map → debug-trace-snapshot-KLGU2AWY.js.map} +0 -0
  225. /package/dist/{dialog-S64MJUM2.js.map → dialog-MUVQIERS.js.map} +0 -0
  226. /package/dist/{disconnect-MTIELIM7.js.map → disconnect-KELQJ45J.js.map} +0 -0
  227. /package/dist/{enabled-KF2L7LW4.js.map → enabled-SF6UU5HG.js.map} +0 -0
  228. /package/dist/{goto-ULWINUAZ.js.map → goto-AZQWXYPG.js.map} +0 -0
  229. /package/dist/{hover-NOCOTR6N.js.map → hover-MQRAKKVU.js.map} +0 -0
  230. /package/dist/{html-LXSYP6BT.js.map → html-PLRTU2WS.js.map} +0 -0
  231. /package/dist/{inspector-62EPCLYB.js.map → inspector-IY4GBIT6.js.map} +0 -0
  232. /package/dist/{inspector-audit-T2IF67RJ.js.map → inspector-audit-7MQCRJHD.js.map} +0 -0
  233. /package/dist/{inspector-plan-KQS6LRMW.js.map → inspector-plan-ZAUDHBET.js.map} +0 -0
  234. /package/dist/{launch-B5ES6FVS.js.map → launch-OCTWPTV5.js.map} +0 -0
  235. /package/dist/{list-TIZVR6RO.js.map → list-HUSYADUS.js.map} +0 -0
  236. /package/dist/{list-XM4BP5GM.js.map → list-JWKAMAUA.js.map} +0 -0
  237. /package/dist/{macro-resolve-TTQZVFIW.js.map → macro-resolve-WOXMPZDQ.js.map} +0 -0
  238. /package/dist/{network-poll-NNSY4W63.js.map → network-poll-WHB62OEF.js.map} +0 -0
  239. /package/dist/{new-E6VNAC2A.js.map → new-IKZBYBNK.js.map} +0 -0
  240. /package/dist/{open-F55XKMKB.js.map → open-UA2VI6ZP.js.map} +0 -0
  241. /package/dist/{perf-RE7JE6CP.js.map → perf-DICS3VKH.js.map} +0 -0
  242. /package/dist/{pointer-down-BCBPC5FJ.js.map → pointer-down-2XPRZFJC.js.map} +0 -0
  243. /package/dist/{pointer-drag-QK7KGF7W.js.map → pointer-drag-7NY4BOLH.js.map} +0 -0
  244. /package/dist/{pointer-move-VFAZQAXA.js.map → pointer-move-FWEXMH37.js.map} +0 -0
  245. /package/dist/{pointer-up-FA5WE6LS.js.map → pointer-up-VU2OHK5D.js.map} +0 -0
  246. /package/dist/{press-TNRHNDSW.js.map → press-W7IZ3FCX.js.map} +0 -0
  247. /package/dist/{product-video-UEANMZ2U.js.map → product-video-XCZ6CHR5.js.map} +0 -0
  248. /package/dist/{providers-AMCNWZUL.js.map → providers-XCNSU3T6.js.map} +0 -0
  249. /package/dist/{research-YFY7WJSZ.js.map → research-AYCKHOWK.js.map} +0 -0
  250. /package/dist/{review-NHOPLAT7.js.map → review-PP2UNSMJ.js.map} +0 -0
  251. /package/dist/{review-desktop-OFWPDYGD.js.map → review-desktop-3JOJFUEJ.js.map} +0 -0
  252. /package/dist/{rpc-TVVQPUOL.js.map → rpc-7EPTJQQ6.js.map} +0 -0
  253. /package/dist/{run-OCBEZRDW.js.map → run-P6UJS3D4.js.map} +0 -0
  254. /package/dist/{screencast-start-GTSDA33J.js.map → screencast-start-ZZYNH2HT.js.map} +0 -0
  255. /package/dist/{screencast-stop-FYBUIXAA.js.map → screencast-stop-Y6ADFOFA.js.map} +0 -0
  256. /package/dist/{screenshot-OEYRT3SP.js.map → screenshot-CJB7PMAF.js.map} +0 -0
  257. /package/dist/{scroll-35OFEFC5.js.map → scroll-BP5MA4ZT.js.map} +0 -0
  258. /package/dist/{scroll-into-view-UQ5RAWIX.js.map → scroll-into-view-O3RDWLM2.js.map} +0 -0
  259. /package/dist/{select-K56QELVZ.js.map → select-QLCNRI36.js.map} +0 -0
  260. /package/dist/{serve-5UJ3VMWC.js.map → serve-OO2MQWGL.js.map} +0 -0
  261. /package/dist/{shopping-FJG7XB4Q.js.map → shopping-UYHCYPAH.js.map} +0 -0
  262. /package/dist/{snapshot-W7RKVZEI.js.map → snapshot-SXYZ3CMC.js.map} +0 -0
  263. /package/dist/{status-KHYCLGUD.js.map → status-AL2AHVA5.js.map} +0 -0
  264. /package/dist/{status-R4EV4TWO.js.map → status-QQW7REK4.js.map} +0 -0
  265. /package/dist/{status-capabilities-XD3RGLKF.js.map → status-capabilities-AVHJYQQQ.js.map} +0 -0
  266. /package/dist/{text-TANLFZ4O.js.map → text-B6Z47EOA.js.map} +0 -0
  267. /package/dist/{type-Y2Y7LX7Y.js.map → type-LR3F3SQY.js.map} +0 -0
  268. /package/dist/{uncheck-6REVUUB2.js.map → uncheck-5PJEHR7J.js.map} +0 -0
  269. /package/dist/{upload-GGZC5UQP.js.map → upload-HQ3QN2OW.js.map} +0 -0
  270. /package/dist/{use-B4Q7CFG2.js.map → use-KFZLMRUH.js.map} +0 -0
  271. /package/dist/{value-DHOHO55D.js.map → value-TKUFUK5I.js.map} +0 -0
  272. /package/dist/{visible-S5BTWYNH.js.map → visible-P5Z2N2QR.js.map} +0 -0
  273. /package/dist/{wait-WV6NZUKL.js.map → wait-BYSHJPSC.js.map} +0 -0
  274. /package/dist/{windows-GKE36DJQ.js.map → windows-6GTD25EU.js.map} +0 -0
@@ -67,12 +67,14 @@ cat skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.
67
67
  cat skills/opendevbrowser-design-agent/artifacts/external-pattern-synthesis.md
68
68
  cat skills/opendevbrowser-design-agent/artifacts/component-pattern-index.md
69
69
  cat skills/opendevbrowser-design-agent/artifacts/existing-surface-adaptation.md
70
+ $CLI_PREFIX inspiredesign harvest --brief "Premium digital photography studio landing page" --query "Pinterest premium digital photography studio landing page cinematic parallax portfolio" --provider social/pinterest --max-references 5 --visual-evidence required --browser-mode extension --use-cookies --cookie-policy required --challenge-automation-mode browser_with_helper --mode json --output-format json
71
+ # Inspect nextStepGuidance.readiness and doNotProceedIf first. Use recovery-first guidance unless readiness is ready.
70
72
  $CLI_PREFIX launch --no-extension --start-url https://example.com
71
73
  $CLI_PREFIX goto --session-id <session-id> --url <reference-url>
72
74
  $CLI_PREFIX snapshot --session-id <session-id>
73
75
  $CLI_PREFIX screenshot --session-id <session-id>
74
76
  $CLI_PREFIX debug-trace-snapshot --session-id <session-id>
75
- # Repeat for 3-5 live references, then turn the synthesis into contract deltas before implementation.
77
+ # Repeat for 3-5 live references, then turn ready synthesis into contract deltas before implementation.
76
78
  EOF
77
79
  ;;
78
80
  screenshot-audit)
@@ -101,10 +103,11 @@ cat skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md
101
103
  cat skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json
102
104
  ./skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh ./tmp/design-contract.json > ./tmp/canvas-plan.json
103
105
  $CLI_PREFIX canvas --command canvas.session.open --params '{"requestId":"req_open_01","browserSessionId":"<browser-session-id>","documentId":null,"repoPath":null,"mode":"dual-track"}'
104
- # Inspect planStatus, preflightState, generationPlanRequirements.allowedValues, generationPlanIssues, and guidance.recommendedNextCommands before continuing.
106
+ # Inspect planStatus, preflightState, generationPlanRequirements.allowedValues, generationPlanIssues, guidance.recommendedNextCommands, guidance.nextStepGuidance, guidance.paramsExamples, guidance.fieldExamples, guidance.validationChecks, and guidance.doNotProceedIf before continuing.
105
107
  # Treat preflightState=handshake_read as the normal first-step checkpoint before canvas.plan.set.
106
108
  $CLI_PREFIX canvas --command canvas.plan.set --params-file ./tmp/canvas-plan.json
107
109
  # If canvas.plan.set succeeds with planStatus=accepted or preflightState=plan_accepted, follow the returned guidance into canvas.document.patch.
110
+ # If canvas.plan.set returns generation_plan_invalid, repair ./tmp/canvas-plan.json from guidance.paramsExamples before retrying.
108
111
  # Optional diagnostics after generation_plan_invalid:
109
112
  # $CLI_PREFIX canvas --command canvas.plan.get --params '{"requestId":"req_plan_get_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","documentId":"<document-id>"}'
110
113
  # or re-read with canvas.capabilities.get to inspect generationPlanIssues before resubmitting canvas.plan.set.
@@ -100,6 +100,8 @@ const skillDocMarkers = [
100
100
  "plan_invalid",
101
101
  "plan_accepted",
102
102
  "recommendedNextCommands",
103
+ "nextStepGuidance.readiness",
104
+ "social/pinterest",
103
105
  "canvas.plan.set",
104
106
  "canvas.history.undo",
105
107
  "canvas.history.redo",
@@ -129,7 +131,9 @@ const designWorkflowMarkers = [
129
131
  "handshake_read",
130
132
  "plan_invalid",
131
133
  "plan_accepted",
132
- "recommendedNextCommands"
134
+ "recommendedNextCommands",
135
+ "guidance.nextStepGuidance",
136
+ "guidance.paramsExamples"
133
137
  ];
134
138
 
135
139
  const workflowOutputMarkers = {
@@ -145,7 +149,9 @@ const workflowOutputMarkers = {
145
149
  "handshake_read",
146
150
  "plan_invalid",
147
151
  "plan_accepted",
148
- "recommendedNextCommands"
152
+ "recommendedNextCommands",
153
+ "guidance.nextStepGuidance",
154
+ "guidance.paramsExamples"
149
155
  ]
150
156
  };
151
157
 
@@ -41,7 +41,7 @@ Use this skill when a task asks for animation, motion language, transition syste
41
41
 
42
42
  ## InspireDesign Harvest Inputs
43
43
 
44
- When an InspireDesign harvest bundle is available, read `meta-prompt.md`, `ranked-references.json`, `visual-evidence.json`, `screenshot-index.json`, and the referenced PNG files before selecting motion patterns. Treat harvested motion posture as evidence-backed design intent, not permission to add dependencies or copy source-brand choreography. Carry accepted cues into the motion contract with explicit reduced-motion behavior, device posture, frame budget, and temporal proof requirements.
44
+ When an InspireDesign harvest bundle is available, inspect `nextStepGuidance.readiness` and `doNotProceedIf` before selecting motion patterns. Read `meta-prompt.md`, `ranked-references.json`, `visual-evidence.json`, `screenshot-index.json`, and the referenced PNG files only after the bundle is ready or while following recovery guidance. Treat harvested motion posture as evidence-backed design intent, not permission to add dependencies or copy source-brand choreography. Carry accepted cues into the motion contract with explicit reduced-motion behavior, device posture, frame budget, and temporal proof requirements.
45
45
 
46
46
  ## Motion Contract
47
47
 
@@ -78,6 +78,7 @@ for (const marker of [
78
78
  "opendevbrowser-best-practices",
79
79
  "opendevbrowser-design-agent",
80
80
  "Motion Contract",
81
+ "nextStepGuidance.readiness",
81
82
  "Pattern Selection",
82
83
  "Platform And Framework Policy",
83
84
  "Device Posture",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/canvas.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\nimport type { ParsedArgs } from \"../args\";\nimport { DaemonClient } from \"../daemon-client\";\nimport { createUsageError } from \"../errors\";\nimport { writeOutput } from \"../output\";\nimport { parseNumberFlag } from \"../utils/parse\";\n\ntype CanvasArgs = {\n command?: string;\n params?: string;\n paramsFile?: string;\n timeoutMs?: number;\n};\n\nconst DEFAULT_FEEDBACK_STREAM_TIMEOUT_MS = 30000;\n\ntype FeedbackItem = Record<string, unknown>;\n\ntype FeedbackSubscribeResult = {\n subscriptionId: string | null;\n initialItems: FeedbackItem[];\n cursor: string | null;\n heartbeatMs: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst asString = (value: unknown): string | null => {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n};\n\nconst asNumber = (value: unknown): number | null => {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n};\n\nconst asRecordArray = (value: unknown): FeedbackItem[] => {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n};\n\nconst toFeedbackSubscribeResult = (value: unknown): FeedbackSubscribeResult => {\n if (!isRecord(value)) {\n return {\n subscriptionId: null,\n initialItems: [],\n cursor: null,\n heartbeatMs: 15000\n };\n }\n return {\n subscriptionId: asString(value.subscriptionId),\n initialItems: asRecordArray(value.initialItems),\n cursor: asString(value.cursor),\n heartbeatMs: Math.max(asNumber(value.heartbeatMs) ?? 15000, 1000)\n };\n};\n\nasync function streamFeedbackViaSubscription(\n client: DaemonClient,\n args: ParsedArgs,\n canvasArgs: CanvasArgs,\n params: Record<string, unknown>,\n initial: Record<string, unknown>\n): Promise<void> {\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n writeOutput({\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n result: initial\n }\n }, outputOptions);\n\n const initialResult = toFeedbackSubscribeResult(initial);\n const subscriptionId = initialResult.subscriptionId;\n const heartbeatMs = initialResult.heartbeatMs;\n const streamTimeoutMs = canvasArgs.timeoutMs ?? DEFAULT_FEEDBACK_STREAM_TIMEOUT_MS;\n const deadline = Date.now() + streamTimeoutMs;\n let cursor = initialResult.cursor;\n\n for (const item of initialResult.initialItems) {\n const itemCursor = asString(item.cursor);\n if (itemCursor) {\n cursor = itemCursor;\n }\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: {\n eventType: \"feedback.item\",\n item\n }\n }\n }, outputOptions);\n }\n\n while (subscriptionId && Date.now() < deadline) {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n break;\n }\n const nextEvent = await client.call(\n \"canvas.execute\",\n {\n command: \"canvas.feedback.next\",\n params: {\n ...params,\n subscriptionId,\n timeoutMs: Math.min(heartbeatMs, remainingMs)\n }\n },\n { timeoutMs: remainingMs }\n );\n if (isRecord(nextEvent)) {\n if (nextEvent.eventType === \"feedback.item\" && isRecord(nextEvent.item)) {\n const itemCursor = asString(nextEvent.item.cursor);\n if (itemCursor) {\n cursor = itemCursor;\n }\n } else if (typeof nextEvent.cursor === \"string\") {\n cursor = nextEvent.cursor;\n }\n }\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: nextEvent\n }\n }, outputOptions);\n if (isRecord(nextEvent) && nextEvent.eventType === \"feedback.complete\") {\n break;\n }\n }\n\n if (Date.now() >= deadline) {\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: {\n eventType: \"feedback.complete\",\n cursor: cursor ?? null,\n reason: \"timeout\"\n }\n }\n }, outputOptions);\n }\n\n if (subscriptionId) {\n await client.call(\n \"canvas.execute\",\n {\n command: \"canvas.feedback.unsubscribe\",\n params: {\n ...params,\n subscriptionId\n }\n }\n ).catch(() => {});\n }\n}\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) throw createUsageError(`Missing value for ${flag}`);\n return value;\n};\n\nconst parseJsonObject = (raw: string, source: string): Record<string, unknown> => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw createUsageError(`Invalid JSON from ${source}: ${message}`);\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw createUsageError(`Invalid JSON from ${source}: expected object`);\n }\n return parsed as Record<string, unknown>;\n};\n\nexport const parseCanvasArgs = (rawArgs: string[]): CanvasArgs => {\n const parsed: CanvasArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--command\") {\n parsed.command = requireValue(rawArgs[i + 1], \"--command\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--command=\")) {\n parsed.command = requireValue(arg.split(\"=\", 2)[1], \"--command\");\n continue;\n }\n if (arg === \"--params\") {\n parsed.params = requireValue(rawArgs[i + 1], \"--params\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params=\")) {\n parsed.params = requireValue(arg.split(\"=\", 2)[1], \"--params\");\n continue;\n }\n if (arg === \"--params-file\") {\n parsed.paramsFile = requireValue(rawArgs[i + 1], \"--params-file\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params-file=\")) {\n parsed.paramsFile = requireValue(arg.split(\"=\", 2)[1], \"--params-file\");\n continue;\n }\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs[i + 1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(requireValue(arg.split(\"=\", 2)[1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n }\n }\n return parsed;\n};\n\nconst resolveCanvasParams = (canvasArgs: CanvasArgs): Record<string, unknown> => {\n const hasParams = typeof canvasArgs.params === \"string\";\n const hasParamsFile = typeof canvasArgs.paramsFile === \"string\";\n if (Number(hasParams) + Number(hasParamsFile) > 1) {\n throw createUsageError(\"Provide only one params source: --params or --params-file.\");\n }\n if (hasParams) {\n return parseJsonObject(canvasArgs.params ?? \"\", \"--params\");\n }\n if (hasParamsFile) {\n let raw = \"\";\n try {\n raw = readFileSync(canvasArgs.paramsFile ?? \"\", \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file\";\n throw createUsageError(`Invalid --params-file: ${message}`);\n }\n if (!raw.trim()) {\n throw createUsageError(\"Invalid JSON from --params-file: empty input\");\n }\n return parseJsonObject(raw, \"--params-file\");\n }\n return {};\n};\n\nconst attachRepoRoot = (params: Record<string, unknown>): Record<string, unknown> => {\n if (typeof params.repoRoot === \"string\" && params.repoRoot.trim().length > 0) {\n return params;\n }\n return {\n ...params,\n repoRoot: process.cwd()\n };\n};\n\nexport async function runCanvas(args: ParsedArgs) {\n const canvasArgs = parseCanvasArgs(args.rawArgs);\n if (!canvasArgs.command) {\n throw createUsageError(\"Usage: opendevbrowser canvas --command <canvas.command> [--params <json> | --params-file <path>]\");\n }\n if (!canvasArgs.command.startsWith(\"canvas.\")) {\n throw createUsageError(\"Canvas command names must start with 'canvas.'.\");\n }\n\n const client = new DaemonClient({ autoRenew: true });\n try {\n const params = attachRepoRoot(resolveCanvasParams(canvasArgs));\n const result = await client.call<unknown>(\n \"canvas.execute\",\n {\n command: canvasArgs.command,\n params\n },\n { timeoutMs: canvasArgs.timeoutMs }\n );\n if (\n canvasArgs.command === \"canvas.feedback.subscribe\"\n && args.outputFormat === \"stream-json\"\n && isRecord(result)\n ) {\n await streamFeedbackViaSubscription(client, args, canvasArgs, params, result);\n return {\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n suppressOutput: true\n }\n };\n }\n if (args.outputFormat === \"text\") {\n const output = typeof result === \"string\" ? result : JSON.stringify(result, null, 2);\n return { success: true, message: output };\n }\n return {\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n result\n }\n };\n } finally {\n await client.releaseBinding().catch(() => {});\n }\n}\n\nexport const __test__ = {\n parseCanvasArgs,\n parseJsonObject,\n resolveCanvasParams,\n attachRepoRoot,\n toFeedbackSubscribeResult\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,oBAAoB;AAc7B,IAAM,qCAAqC;AAW3C,IAAM,WAAW,CAAC,UAAqD;AACrE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,IAAM,WAAW,CAAC,UAAkC;AAClD,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAEA,IAAM,WAAW,CAAC,UAAkC;AAClD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAEA,IAAM,gBAAgB,CAAC,UAAmC;AACxD,SAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,QAAQ,IAAI,CAAC;AAC1D;AAEA,IAAM,4BAA4B,CAAC,UAA4C;AAC7E,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,cAAc,CAAC;AAAA,MACf,QAAQ;AAAA,MACR,aAAa;AAAA,IACf;AAAA,EACF;AACA,SAAO;AAAA,IACL,gBAAgB,SAAS,MAAM,cAAc;AAAA,IAC7C,cAAc,cAAc,MAAM,YAAY;AAAA,IAC9C,QAAQ,SAAS,MAAM,MAAM;AAAA,IAC7B,aAAa,KAAK,IAAI,SAAS,MAAM,WAAW,KAAK,MAAO,GAAI;AAAA,EAClE;AACF;AAEA,eAAe,8BACb,QACA,MACA,YACA,QACA,SACe;AACf,QAAM,gBAAgB,EAAE,QAAQ,KAAK,cAAc,OAAO,KAAK,MAAM;AACrE,cAAY;AAAA,IACV,SAAS;AAAA,IACT,SAAS,oBAAoB,WAAW,OAAO;AAAA,IAC/C,MAAM;AAAA,MACJ,SAAS,WAAW;AAAA,MACpB,QAAQ;AAAA,IACV;AAAA,EACF,GAAG,aAAa;AAEhB,QAAM,gBAAgB,0BAA0B,OAAO;AACvD,QAAM,iBAAiB,cAAc;AACrC,QAAM,cAAc,cAAc;AAClC,QAAM,kBAAkB,WAAW,aAAa;AAChD,QAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,MAAI,SAAS,cAAc;AAE3B,aAAW,QAAQ,cAAc,cAAc;AAC7C,UAAM,aAAa,SAAS,KAAK,MAAM;AACvC,QAAI,YAAY;AACd,eAAS;AAAA,IACX;AACA,gBAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS,oBAAoB,WAAW,OAAO;AAAA,MAC/C,MAAM;AAAA,QACJ,SAAS,WAAW;AAAA,QACpB,aAAa;AAAA,UACX,WAAW;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG,aAAa;AAAA,EAClB;AAEA,SAAO,kBAAkB,KAAK,IAAI,IAAI,UAAU;AAC9C,UAAM,cAAc,WAAW,KAAK,IAAI;AACxC,QAAI,eAAe,GAAG;AACpB;AAAA,IACF;AACA,UAAM,YAAY,MAAM,OAAO;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,QAAQ;AAAA,UACN,GAAG;AAAA,UACH;AAAA,UACA,WAAW,KAAK,IAAI,aAAa,WAAW;AAAA,QAC9C;AAAA,MACF;AAAA,MACA,EAAE,WAAW,YAAY;AAAA,IAC3B;AACA,QAAI,SAAS,SAAS,GAAG;AACvB,UAAI,UAAU,cAAc,mBAAmB,SAAS,UAAU,IAAI,GAAG;AACvE,cAAM,aAAa,SAAS,UAAU,KAAK,MAAM;AACjD,YAAI,YAAY;AACd,mBAAS;AAAA,QACX;AAAA,MACF,WAAW,OAAO,UAAU,WAAW,UAAU;AAC/C,iBAAS,UAAU;AAAA,MACrB;AAAA,IACF;AACA,gBAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS,oBAAoB,WAAW,OAAO;AAAA,MAC/C,MAAM;AAAA,QACJ,SAAS,WAAW;AAAA,QACpB,aAAa;AAAA,MACf;AAAA,IACF,GAAG,aAAa;AAChB,QAAI,SAAS,SAAS,KAAK,UAAU,cAAc,qBAAqB;AACtE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,IAAI,KAAK,UAAU;AAC1B,gBAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS,oBAAoB,WAAW,OAAO;AAAA,MAC/C,MAAM;AAAA,QACJ,SAAS,WAAW;AAAA,QACpB,aAAa;AAAA,UACX,WAAW;AAAA,UACX,QAAQ,UAAU;AAAA,UAClB,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,GAAG,aAAa;AAAA,EAClB;AAEA,MAAI,gBAAgB;AAClB,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,QAAQ;AAAA,UACN,GAAG;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EAClB;AACF;AAEA,IAAM,eAAe,CAAC,OAA2B,SAAyB;AACxE,MAAI,CAAC,MAAO,OAAM,iBAAiB,qBAAqB,IAAI,EAAE;AAC9D,SAAO;AACT;AAEA,IAAM,kBAAkB,CAAC,KAAa,WAA4C;AAChF,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,GAAG;AAAA,EACzB,SAAS,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,UAAM,iBAAiB,qBAAqB,MAAM,KAAK,OAAO,EAAE;AAAA,EAClE;AACA,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAClE,UAAM,iBAAiB,qBAAqB,MAAM,mBAAmB;AAAA,EACvE;AACA,SAAO;AACT;AAEO,IAAM,kBAAkB,CAAC,YAAkC;AAChE,QAAM,SAAqB,CAAC;AAC5B,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;AAC1C,UAAM,MAAM,QAAQ,CAAC;AACrB,QAAI,QAAQ,aAAa;AACvB,aAAO,UAAU,aAAa,QAAQ,IAAI,CAAC,GAAG,WAAW;AACzD,WAAK;AACL;AAAA,IACF;AACA,QAAI,KAAK,WAAW,YAAY,GAAG;AACjC,aAAO,UAAU,aAAa,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,WAAW;AAC/D;AAAA,IACF;AACA,QAAI,QAAQ,YAAY;AACtB,aAAO,SAAS,aAAa,QAAQ,IAAI,CAAC,GAAG,UAAU;AACvD,WAAK;AACL;AAAA,IACF;AACA,QAAI,KAAK,WAAW,WAAW,GAAG;AAChC,aAAO,SAAS,aAAa,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,UAAU;AAC7D;AAAA,IACF;AACA,QAAI,QAAQ,iBAAiB;AAC3B,aAAO,aAAa,aAAa,QAAQ,IAAI,CAAC,GAAG,eAAe;AAChE,WAAK;AACL;AAAA,IACF;AACA,QAAI,KAAK,WAAW,gBAAgB,GAAG;AACrC,aAAO,aAAa,aAAa,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,eAAe;AACtE;AAAA,IACF;AACA,QAAI,QAAQ,gBAAgB;AAC1B,aAAO,YAAY,gBAAgB,aAAa,QAAQ,IAAI,CAAC,GAAG,cAAc,GAAG,gBAAgB,EAAE,KAAK,EAAE,CAAC;AAC3G,WAAK;AACL;AAAA,IACF;AACA,QAAI,KAAK,WAAW,eAAe,GAAG;AACpC,aAAO,YAAY,gBAAgB,aAAa,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,cAAc,GAAG,gBAAgB,EAAE,KAAK,EAAE,CAAC;AAAA,IACnH;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,sBAAsB,CAAC,eAAoD;AAC/E,QAAM,YAAY,OAAO,WAAW,WAAW;AAC/C,QAAM,gBAAgB,OAAO,WAAW,eAAe;AACvD,MAAI,OAAO,SAAS,IAAI,OAAO,aAAa,IAAI,GAAG;AACjD,UAAM,iBAAiB,4DAA4D;AAAA,EACrF;AACA,MAAI,WAAW;AACb,WAAO,gBAAgB,WAAW,UAAU,IAAI,UAAU;AAAA,EAC5D;AACA,MAAI,eAAe;AACjB,QAAI,MAAM;AACV,QAAI;AACF,YAAM,aAAa,WAAW,cAAc,IAAI,MAAM;AAAA,IACxD,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,YAAM,iBAAiB,0BAA0B,OAAO,EAAE;AAAA,IAC5D;AACA,QAAI,CAAC,IAAI,KAAK,GAAG;AACf,YAAM,iBAAiB,8CAA8C;AAAA,IACvE;AACA,WAAO,gBAAgB,KAAK,eAAe;AAAA,EAC7C;AACA,SAAO,CAAC;AACV;AAEA,IAAM,iBAAiB,CAAC,WAA6D;AACnF,MAAI,OAAO,OAAO,aAAa,YAAY,OAAO,SAAS,KAAK,EAAE,SAAS,GAAG;AAC5E,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,QAAQ,IAAI;AAAA,EACxB;AACF;AAEA,eAAsB,UAAU,MAAkB;AAChD,QAAM,aAAa,gBAAgB,KAAK,OAAO;AAC/C,MAAI,CAAC,WAAW,SAAS;AACvB,UAAM,iBAAiB,kGAAkG;AAAA,EAC3H;AACA,MAAI,CAAC,WAAW,QAAQ,WAAW,SAAS,GAAG;AAC7C,UAAM,iBAAiB,iDAAiD;AAAA,EAC1E;AAEA,QAAM,SAAS,IAAI,aAAa,EAAE,WAAW,KAAK,CAAC;AACnD,MAAI;AACF,UAAM,SAAS,eAAe,oBAAoB,UAAU,CAAC;AAC7D,UAAM,SAAS,MAAM,OAAO;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,SAAS,WAAW;AAAA,QACpB;AAAA,MACF;AAAA,MACA,EAAE,WAAW,WAAW,UAAU;AAAA,IACpC;AACA,QACE,WAAW,YAAY,+BACpB,KAAK,iBAAiB,iBACtB,SAAS,MAAM,GAClB;AACA,YAAM,8BAA8B,QAAQ,MAAM,YAAY,QAAQ,MAAM;AAC5E,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,oBAAoB,WAAW,OAAO;AAAA,QAC/C,MAAM;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,QAAI,KAAK,iBAAiB,QAAQ;AAChC,YAAM,SAAS,OAAO,WAAW,WAAW,SAAS,KAAK,UAAU,QAAQ,MAAM,CAAC;AACnF,aAAO,EAAE,SAAS,MAAM,SAAS,OAAO;AAAA,IAC1C;AACA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS,oBAAoB,WAAW,OAAO;AAAA,MAC/C,MAAM;AAAA,QACJ,SAAS,WAAW;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF,UAAE;AACA,UAAM,OAAO,eAAe,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EAC9C;AACF;AAEO,IAAM,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/inspiredesign/handoff.ts"],"sourcesContent":["export const INSPIREDESIGN_HANDOFF_FILES = {\n designMarkdown: \"design.md\",\n advancedBrief: \"advanced-brief.md\",\n designContract: \"design-contract.json\",\n canvasPlanRequest: \"canvas-plan.request.json\",\n designAgentHandoff: \"design-agent-handoff.json\",\n generationPlan: \"generation-plan.json\",\n implementationPlanMarkdown: \"implementation-plan.md\",\n implementationPlan: \"implementation-plan.json\",\n evidence: \"evidence.json\",\n visualEvidence: \"visual-evidence.json\",\n screenshotIndex: \"screenshot-index.json\",\n rankedReferences: \"ranked-references.json\",\n metaPrompt: \"meta-prompt.md\",\n prototypeGuidance: \"prototype-guidance.md\"\n} as const;\n\nexport type InspiredesignGuideEntry = {\n purpose: string;\n expectedContents: readonly string[];\n howToUse: readonly string[];\n mustNot: readonly string[];\n};\n\ntype InspiredesignHandoffFile =\n (typeof INSPIREDESIGN_HANDOFF_FILES)[keyof typeof INSPIREDESIGN_HANDOFF_FILES];\n\nexport type InspiredesignArtifactGuide = Record<InspiredesignHandoffFile, InspiredesignGuideEntry>;\n\nexport type InspiredesignContractSectionGuide = Record<string, InspiredesignGuideEntry>;\n\nconst INSPIREDESIGN_HANDOFF_SKILLS = {\n bestPractices: {\n name: \"opendevbrowser-best-practices\",\n topic: \"quick start\"\n },\n designAgent: {\n name: \"opendevbrowser-design-agent\",\n topic: \"canvas-contract\"\n },\n motionDesign: {\n name: \"opendevbrowser-motion-design\",\n topic: \"quick start\"\n }\n} as const;\n\ntype InspiredesignHandoffSkill =\n (typeof INSPIREDESIGN_HANDOFF_SKILLS)[keyof typeof INSPIREDESIGN_HANDOFF_SKILLS];\n\nconst formatSkillReference = (skill: InspiredesignHandoffSkill): string => (\n `${skill.name} \"${skill.topic}\"`\n);\n\nconst formatSkillLoadCommand = (skill: InspiredesignHandoffSkill): string => (\n `opendevbrowser_skill_load ${skill.name} \"${skill.topic}\"`\n);\n\nexport const INSPIREDESIGN_HANDOFF_COMMANDS = {\n loadBestPractices: formatSkillLoadCommand(INSPIREDESIGN_HANDOFF_SKILLS.bestPractices),\n loadDesignAgent: formatSkillLoadCommand(INSPIREDESIGN_HANDOFF_SKILLS.designAgent),\n loadMotionDesign: formatSkillLoadCommand(INSPIREDESIGN_HANDOFF_SKILLS.motionDesign),\n continueInCanvas: `opendevbrowser canvas --command canvas.plan.set --params-file ./${INSPIREDESIGN_HANDOFF_FILES.canvasPlanRequest}`\n} as const;\n\nexport const INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS = [\n formatSkillReference(INSPIREDESIGN_HANDOFF_SKILLS.bestPractices),\n formatSkillReference(INSPIREDESIGN_HANDOFF_SKILLS.designAgent),\n formatSkillReference(INSPIREDESIGN_HANDOFF_SKILLS.motionDesign)\n] as const;\n\nexport const INSPIREDESIGN_HANDOFF_GUIDANCE = {\n reviewAdvancedBrief: `${INSPIREDESIGN_HANDOFF_FILES.advancedBrief} is the authoritative reference-first brief. When URL references exist, captured evidence leads the creative direction; selected format, profile defaults, layout posture, motion grammar, and anti-patterns are route guardrails only. Read it before touching Canvas or implementation files.`,\n prepareCanvasPlanRequest: `Fill canvasSessionId, leaseId, and documentId in ${INSPIREDESIGN_HANDOFF_FILES.canvasPlanRequest} before running ${INSPIREDESIGN_HANDOFF_COMMANDS.continueInCanvas}.`,\n deepCaptureRecommendation: \"Any inspiredesign run with reference URLs already uses captureMode=deep. Rerun with the same URLs only when you need refreshed DOM/layout evidence, restored session state, or capture-specific debugging.\",\n visualArtifactRecommendation: `${INSPIREDESIGN_HANDOFF_FILES.visualEvidence}, ${INSPIREDESIGN_HANDOFF_FILES.screenshotIndex}, ${INSPIREDESIGN_HANDOFF_FILES.rankedReferences}, and ${INSPIREDESIGN_HANDOFF_FILES.metaPrompt} are metadata-only guidance surfaces. Read them before translating visual or motion cues, and inspect PNG files by path instead of expecting image blobs in JSON.`\n} as const;\n\nexport const INSPIREDESIGN_ARTIFACT_GUIDE: InspiredesignArtifactGuide = {\n [INSPIREDESIGN_HANDOFF_FILES.advancedBrief]: {\n purpose: \"Authoritative reference-first brief for the downstream design agent.\",\n expectedContents: [\"Selected prompt format\", \"reference pattern board\", \"route guardrails\"],\n howToUse: [\"Read first\", \"treat captured evidence as creative priority\", \"use guardrails to avoid route drift\"],\n mustNot: [\"Do not treat defaults as stronger than captured references\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.designMarkdown]: {\n purpose: \"Human-readable design specification and implementation narrative.\",\n expectedContents: [\"inspiration analysis\", \"unified direction\", \"governance summary\", \"deliverables\"],\n howToUse: [\"Use as the readable project brief\", \"cross-check implementation choices against its sections\"],\n mustNot: [\"Do not use prose as a substitute for the JSON contract when patching Canvas\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.designContract]: {\n purpose: \"Narrowed Canvas governance contract for design decisions.\",\n expectedContents: [\"emitted governance blocks\", \"motion system\", \"library policy\", \"runtime budgets\"],\n howToUse: [\"Patch only emitted governance blocks\", \"compare implementation against this contract before shipping\"],\n mustNot: [\"Do not add navigation, async, or performance context as Canvas governance patches\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.canvasPlanRequest]: {\n purpose: \"Ready-to-fill request payload for `canvas.plan.set`.\",\n expectedContents: [\"request ids\", \"Canvas session ids\", \"mutation-safe generationPlan\"],\n howToUse: [\"Fill canvasSessionId, leaseId, and documentId\", \"submit with the provided canvas.plan.set command\"],\n mustNot: [\"Do not add handoff-only fields or reference-only analysis to generationPlan\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.designAgentHandoff]: {\n purpose: \"Downstream index for artifact usage, skills, commands, and omitted implementation context.\",\n expectedContents: [\"skills\", \"commands\", \"contract scope\", \"implementation context\", \"artifact and section guides\"],\n howToUse: [\"Use as the navigation map for the bundle\", \"load recommended skills before implementation\"],\n mustNot: [\"Do not treat handoff context as runtime Canvas schema\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.generationPlan]: {\n purpose: \"Full generated plan for reasoning about design intent.\",\n expectedContents: [\"Canvas plan fields\", \"design vectors\", \"reference analysis when available\"],\n howToUse: [\"Use for agent reasoning and audit traceability\", \"compare with canvas-plan.request.json for runtime subset\"],\n mustNot: [\"Do not submit this file directly to Canvas when it contains non-request context\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.implementationPlanMarkdown]: {\n purpose: \"Human-readable engineering sequence for the first implementation pass.\",\n expectedContents: [\"build sequence\", \"component plan\", \"token strategy\", \"QA and risk checks\"],\n howToUse: [\"Convert sections into implementation tasks\", \"keep tests and browser validation aligned to the plan\"],\n mustNot: [\"Do not implement sections unsupported by brief or reference evidence\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.implementationPlan]: {\n purpose: \"Machine-readable implementation plan matching the Markdown plan.\",\n expectedContents: [\"architecture steps\", \"component inventory\", \"state and validation tasks\"],\n howToUse: [\"Use for structured task extraction\", \"keep it synchronized with implementation-plan.md\"],\n mustNot: [\"Do not treat it as a Canvas document patch payload\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.evidence]: {\n purpose: \"Evidence digest for brief, reference, capture, and design-vector provenance.\",\n expectedContents: [\"brief expansion\", \"reference outcomes\", \"capture attempts\", \"design vectors\"],\n howToUse: [\"Audit why choices were made\", \"prefer evidence over generic template defaults\"],\n mustNot: [\"Do not ignore failed or skipped capture statuses when judging confidence\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.visualEvidence]: {\n purpose: \"Metadata-only visual evidence index for screenshot capture results.\",\n expectedContents: [\"reference ids\", \"artifact-relative PNG paths\", \"hashes\", \"byte counts\", \"viewport metadata when available\", \"warnings\"],\n howToUse: [\"Open PNG files by path\", \"audit hashes and warnings before making visual claims\"],\n mustNot: [\"Do not expect base64 images, absolute temp paths, DOM, or raw screenshots in JSON\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.screenshotIndex]: {\n purpose: \"Compact index of finalized screenshot PNG files.\",\n expectedContents: [\"reference ids\", \"paths\", \"sha256 hashes\", \"byte counts\", \"capture timestamps\"],\n howToUse: [\"Use for bundle inspection\", \"confirm every listed path exists before implementation\"],\n mustNot: [\"Do not treat missing screenshots as visual proof\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.rankedReferences]: {\n purpose: \"Deterministic ranked reference pattern board for design transfer.\",\n expectedContents: [\"rank\", \"score\", \"confidence\", \"visual strengths\", \"visual risks\", \"rejected references\"],\n howToUse: [\"Start from rank 1 for dominant direction\", \"borrow patterns and reject risks explicitly\"],\n mustNot: [\"Do not copy source brands or override the ranked order with source order\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.metaPrompt]: {\n purpose: \"Markdown prompt for downstream design generation from harvested evidence.\",\n expectedContents: [\"ranked references\", \"borrow guidance\", \"reject guidance\", \"motion posture\", \"accessibility constraints\", \"validation gates\"],\n howToUse: [\"Use as the prompt brief for the first design pass\", \"pair with the motion-design skill for timing and reduced-motion decisions\"],\n mustNot: [\"Do not generate production code from harvest output alone\"]\n },\n [INSPIREDESIGN_HANDOFF_FILES.prototypeGuidance]: {\n purpose: \"Optional first prototype guidance when the workflow requests prototype output.\",\n expectedContents: [\"prototype structure\", \"design-vector guidance\", \"browser proof checklist\"],\n howToUse: [\"Use only for the first prototype pass\", \"promote proven ideas back into contract-aligned work\"],\n mustNot: [\"Do not treat prototype guidance as final implementation authority\"]\n }\n};\n\nexport const INSPIREDESIGN_CONTRACT_SECTION_GUIDE: InspiredesignContractSectionGuide = {\n intent: {\n purpose: \"Define why the design exists and what success means.\",\n expectedContents: [\"audience\", \"task\", \"success criteria\", \"trust posture\"],\n howToUse: [\"Validate the primary user job before styling\", \"reject sections that do not serve the task\"],\n mustNot: [\"Do not start visual polish before the audience and task are clear\"]\n },\n generationPlan: {\n purpose: \"Mutation-safe subset accepted by Canvas planning.\",\n expectedContents: [\"target outcome\", \"visual, layout, content, component, motion, responsive, accessibility posture\"],\n howToUse: [\"Submit only through canvas-plan.request.json\", \"repair generationPlanIssues before mutation\"],\n mustNot: [\"Do not add handoff-only guide fields to the Canvas generation plan\"]\n },\n designLanguage: {\n purpose: \"Name the coherent visual direction and token ownership.\",\n expectedContents: [\"direction\", \"style axes\", \"semantic token source\", \"approved libraries\"],\n howToUse: [\"Keep one design language per task\", \"align repeated components to semantic tokens\"],\n mustNot: [\"Do not mix unrelated visual families inside one surface\"]\n },\n contentModel: {\n purpose: \"Define real content, message hierarchy, and UI states.\",\n expectedContents: [\"primary message\", \"supporting messages\", \"states\", \"loading, empty, and error behavior\"],\n howToUse: [\"Use real content first\", \"plan non-happy-path states before polish\"],\n mustNot: [\"Do not ship placeholder copy as product content\"]\n },\n layoutSystem: {\n purpose: \"Describe page architecture and section rhythm.\",\n expectedContents: [\"grid\", \"containers\", \"spacing rhythm\", \"alignment rules\"],\n howToUse: [\"Use to place sections and scan units consistently\", \"verify desktop and mobile structure\"],\n mustNot: [\"Do not invent one-off layout rules for repeated sections\"]\n },\n typographySystem: {\n purpose: \"Define type families, scale, measure, and loading behavior.\",\n expectedContents: [\"families\", \"scale\", \"measure\", \"fallback policy\", \"loading strategy\"],\n howToUse: [\"Apply type hierarchy consistently\", \"avoid layout shift from font loading\"],\n mustNot: [\"Do not default to unapproved system stacks for a distinctive design\"]\n },\n colorSystem: {\n purpose: \"Define semantic color roles and theme behavior.\",\n expectedContents: [\"primary roles\", \"surface roles\", \"text roles\", \"state colors\"],\n howToUse: [\"Map repeated UI to semantic tokens\", \"validate contrast in every required theme\"],\n mustNot: [\"Do not scatter raw color values across leaf components\"]\n },\n surfaceSystem: {\n purpose: \"Define material, depth, borders, and background behavior.\",\n expectedContents: [\"surface hierarchy\", \"border rules\", \"shadow rules\", \"material effects\"],\n howToUse: [\"Use depth only to clarify hierarchy\", \"align material effects with design vectors\"],\n mustNot: [\"Do not turn every content group into a card by default\"]\n },\n iconSystem: {\n purpose: \"Define icon usage and decorative asset boundaries.\",\n expectedContents: [\"icon family\", \"stroke policy\", \"labeling rules\", \"decorative rules\"],\n howToUse: [\"Use icons to clarify actions\", \"keep accessible names on icon-only controls\"],\n mustNot: [\"Do not rely on icons as the only explanation for critical actions\"]\n },\n motionSystem: {\n purpose: \"Define motion that supports comprehension.\",\n expectedContents: [\"timing\", \"interaction moments\", \"reduced-motion posture\", \"advanced motion advisory\"],\n howToUse: [\"Keep shader, WebGL, and Spline cues advisory\", \"provide reduced-motion replacements\"],\n mustNot: [\"Do not use motion cues to authorize new runtime libraries\"]\n },\n responsiveSystem: {\n purpose: \"Define authored behavior across desktop, tablet, and mobile.\",\n expectedContents: [\"breakpoints\", \"adaptation rules\", \"touch policy\", \"overflow policy\"],\n howToUse: [\"Validate the primary action at every viewport\", \"collapse structure before copy becomes cramped\"],\n mustNot: [\"Do not assume desktop layouts naturally scale down\"]\n },\n accessibilityPolicy: {\n purpose: \"Set accessibility requirements before implementation.\",\n expectedContents: [\"WCAG target\", \"keyboard requirements\", \"focus policy\", \"semantic requirements\"],\n howToUse: [\"Block release on contrast or keyboard regressions\", \"validate focus on every interactive state\"],\n mustNot: [\"Do not defer accessibility until after visual implementation\"]\n },\n libraryPolicy: {\n purpose: \"Declare approved implementation libraries and runtime boundaries.\",\n expectedContents: [\"components\", \"icons\", \"styling\", \"motion\", \"threeD\"],\n howToUse: [\"Use as the dependency authorization boundary\", \"keep motion and threeD empty unless separately approved\"],\n mustNot: [\"Do not infer WebGL, shader, Spline, or 3D runtime support from advisory motion\"]\n },\n runtimeBudgets: {\n purpose: \"Set practical limits for sections, actions, interaction latency, and preview cost.\",\n expectedContents: [\"section budgets\", \"action budgets\", \"latency budgets\", \"preview notes\"],\n howToUse: [\"Use as a constraint during implementation\", \"validate slow or animation-heavy surfaces against it\"],\n mustNot: [\"Do not add decorative weight that violates the budget\"]\n },\n navigationModel: {\n purpose: \"Implementation-only context for route, tab, overlay, and deep-link ownership.\",\n expectedContents: [\"route owner\", \"deep-link policy\", \"invalid route fallback\", \"overlay entry points\"],\n howToUse: [\"Use from design-agent-handoff.json when wiring implementation state\"],\n mustNot: [\"Do not patch this omitted block into Canvas governance\"]\n },\n asyncModel: {\n purpose: \"Implementation-only context for loading, restart, cancellation, and URL-owned query state.\",\n expectedContents: [\"owner\", \"load trigger\", \"restart triggers\", \"cancellation policy\"],\n howToUse: [\"Use when wiring fetch/search state and stale-request handling\"],\n mustNot: [\"Do not let components invent independent async ownership\"]\n },\n performanceModel: {\n purpose: \"Implementation-only context for render hotspots and measurement posture.\",\n expectedContents: [\"render hotspots\", \"stable identity policy\", \"list strategy\", \"measurement plan\"],\n howToUse: [\"Use before building scan-heavy or motion-heavy surfaces\"],\n mustNot: [\"Do not ship heavy interaction surfaces without measurement evidence\"]\n }\n};\n\nexport const buildInspiredesignFollowthroughSummary = (): string => (\n `Read ${INSPIREDESIGN_HANDOFF_FILES.advancedBrief} first, then continue in OpenDevBrowser Canvas with ${INSPIREDESIGN_HANDOFF_FILES.canvasPlanRequest} and ${INSPIREDESIGN_HANDOFF_FILES.designAgentHandoff}, load ${INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS[0]}, ${INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS[1]}, and ${INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS[2]} before implementation, inspect ${INSPIREDESIGN_HANDOFF_FILES.metaPrompt} plus screenshot metadata, and note that any supplied reference URL already uses captureMode=deep.`\n);\n\nexport const buildInspiredesignNextStep = (): string => (\n `Read ${INSPIREDESIGN_HANDOFF_FILES.advancedBrief} first. ${INSPIREDESIGN_HANDOFF_GUIDANCE.prepareCanvasPlanRequest} Then run ${INSPIREDESIGN_HANDOFF_COMMANDS.continueInCanvas}, confirm planStatus=accepted, then patch only the governance blocks listed in ${INSPIREDESIGN_HANDOFF_FILES.designAgentHandoff}.`\n);\n"],"mappings":";AAAO,IAAM,8BAA8B;AAAA,EACzC,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,4BAA4B;AAAA,EAC5B,oBAAoB;AAAA,EACpB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,mBAAmB;AACrB;AAgBA,IAAM,+BAA+B;AAAA,EACnC,eAAe;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF;AAKA,IAAM,uBAAuB,CAAC,UAC5B,GAAG,MAAM,IAAI,KAAK,MAAM,KAAK;AAG/B,IAAM,yBAAyB,CAAC,UAC9B,6BAA6B,MAAM,IAAI,KAAK,MAAM,KAAK;AAGlD,IAAM,iCAAiC;AAAA,EAC5C,mBAAmB,uBAAuB,6BAA6B,aAAa;AAAA,EACpF,iBAAiB,uBAAuB,6BAA6B,WAAW;AAAA,EAChF,kBAAkB,uBAAuB,6BAA6B,YAAY;AAAA,EAClF,kBAAkB,mEAAmE,4BAA4B,iBAAiB;AACpI;AAEO,IAAM,2CAA2C;AAAA,EACtD,qBAAqB,6BAA6B,aAAa;AAAA,EAC/D,qBAAqB,6BAA6B,WAAW;AAAA,EAC7D,qBAAqB,6BAA6B,YAAY;AAChE;AAEO,IAAM,iCAAiC;AAAA,EAC5C,qBAAqB,GAAG,4BAA4B,aAAa;AAAA,EACjE,0BAA0B,oDAAoD,4BAA4B,iBAAiB,mBAAmB,+BAA+B,gBAAgB;AAAA,EAC7L,2BAA2B;AAAA,EAC3B,8BAA8B,GAAG,4BAA4B,cAAc,KAAK,4BAA4B,eAAe,KAAK,4BAA4B,gBAAgB,SAAS,4BAA4B,UAAU;AAC7N;AAEO,IAAM,+BAA2D;AAAA,EACtE,CAAC,4BAA4B,aAAa,GAAG;AAAA,IAC3C,SAAS;AAAA,IACT,kBAAkB,CAAC,0BAA0B,2BAA2B,kBAAkB;AAAA,IAC1F,UAAU,CAAC,cAAc,gDAAgD,qCAAqC;AAAA,IAC9G,SAAS,CAAC,4DAA4D;AAAA,EACxE;AAAA,EACA,CAAC,4BAA4B,cAAc,GAAG;AAAA,IAC5C,SAAS;AAAA,IACT,kBAAkB,CAAC,wBAAwB,qBAAqB,sBAAsB,cAAc;AAAA,IACpG,UAAU,CAAC,qCAAqC,yDAAyD;AAAA,IACzG,SAAS,CAAC,6EAA6E;AAAA,EACzF;AAAA,EACA,CAAC,4BAA4B,cAAc,GAAG;AAAA,IAC5C,SAAS;AAAA,IACT,kBAAkB,CAAC,6BAA6B,iBAAiB,kBAAkB,iBAAiB;AAAA,IACpG,UAAU,CAAC,wCAAwC,8DAA8D;AAAA,IACjH,SAAS,CAAC,mFAAmF;AAAA,EAC/F;AAAA,EACA,CAAC,4BAA4B,iBAAiB,GAAG;AAAA,IAC/C,SAAS;AAAA,IACT,kBAAkB,CAAC,eAAe,sBAAsB,8BAA8B;AAAA,IACtF,UAAU,CAAC,iDAAiD,kDAAkD;AAAA,IAC9G,SAAS,CAAC,6EAA6E;AAAA,EACzF;AAAA,EACA,CAAC,4BAA4B,kBAAkB,GAAG;AAAA,IAChD,SAAS;AAAA,IACT,kBAAkB,CAAC,UAAU,YAAY,kBAAkB,0BAA0B,6BAA6B;AAAA,IAClH,UAAU,CAAC,4CAA4C,+CAA+C;AAAA,IACtG,SAAS,CAAC,uDAAuD;AAAA,EACnE;AAAA,EACA,CAAC,4BAA4B,cAAc,GAAG;AAAA,IAC5C,SAAS;AAAA,IACT,kBAAkB,CAAC,sBAAsB,kBAAkB,mCAAmC;AAAA,IAC9F,UAAU,CAAC,kDAAkD,0DAA0D;AAAA,IACvH,SAAS,CAAC,iFAAiF;AAAA,EAC7F;AAAA,EACA,CAAC,4BAA4B,0BAA0B,GAAG;AAAA,IACxD,SAAS;AAAA,IACT,kBAAkB,CAAC,kBAAkB,kBAAkB,kBAAkB,oBAAoB;AAAA,IAC7F,UAAU,CAAC,8CAA8C,uDAAuD;AAAA,IAChH,SAAS,CAAC,sEAAsE;AAAA,EAClF;AAAA,EACA,CAAC,4BAA4B,kBAAkB,GAAG;AAAA,IAChD,SAAS;AAAA,IACT,kBAAkB,CAAC,sBAAsB,uBAAuB,4BAA4B;AAAA,IAC5F,UAAU,CAAC,sCAAsC,kDAAkD;AAAA,IACnG,SAAS,CAAC,oDAAoD;AAAA,EAChE;AAAA,EACA,CAAC,4BAA4B,QAAQ,GAAG;AAAA,IACtC,SAAS;AAAA,IACT,kBAAkB,CAAC,mBAAmB,sBAAsB,oBAAoB,gBAAgB;AAAA,IAChG,UAAU,CAAC,+BAA+B,gDAAgD;AAAA,IAC1F,SAAS,CAAC,0EAA0E;AAAA,EACtF;AAAA,EACA,CAAC,4BAA4B,cAAc,GAAG;AAAA,IAC5C,SAAS;AAAA,IACT,kBAAkB,CAAC,iBAAiB,+BAA+B,UAAU,eAAe,oCAAoC,UAAU;AAAA,IAC1I,UAAU,CAAC,0BAA0B,uDAAuD;AAAA,IAC5F,SAAS,CAAC,mFAAmF;AAAA,EAC/F;AAAA,EACA,CAAC,4BAA4B,eAAe,GAAG;AAAA,IAC7C,SAAS;AAAA,IACT,kBAAkB,CAAC,iBAAiB,SAAS,iBAAiB,eAAe,oBAAoB;AAAA,IACjG,UAAU,CAAC,6BAA6B,wDAAwD;AAAA,IAChG,SAAS,CAAC,kDAAkD;AAAA,EAC9D;AAAA,EACA,CAAC,4BAA4B,gBAAgB,GAAG;AAAA,IAC9C,SAAS;AAAA,IACT,kBAAkB,CAAC,QAAQ,SAAS,cAAc,oBAAoB,gBAAgB,qBAAqB;AAAA,IAC3G,UAAU,CAAC,4CAA4C,6CAA6C;AAAA,IACpG,SAAS,CAAC,0EAA0E;AAAA,EACtF;AAAA,EACA,CAAC,4BAA4B,UAAU,GAAG;AAAA,IACxC,SAAS;AAAA,IACT,kBAAkB,CAAC,qBAAqB,mBAAmB,mBAAmB,kBAAkB,6BAA6B,kBAAkB;AAAA,IAC/I,UAAU,CAAC,qDAAqD,2EAA2E;AAAA,IAC3I,SAAS,CAAC,2DAA2D;AAAA,EACvE;AAAA,EACA,CAAC,4BAA4B,iBAAiB,GAAG;AAAA,IAC/C,SAAS;AAAA,IACT,kBAAkB,CAAC,uBAAuB,0BAA0B,yBAAyB;AAAA,IAC7F,UAAU,CAAC,yCAAyC,sDAAsD;AAAA,IAC1G,SAAS,CAAC,mEAAmE;AAAA,EAC/E;AACF;AAEO,IAAM,uCAA0E;AAAA,EACrF,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,kBAAkB,CAAC,YAAY,QAAQ,oBAAoB,eAAe;AAAA,IAC1E,UAAU,CAAC,gDAAgD,4CAA4C;AAAA,IACvG,SAAS,CAAC,mEAAmE;AAAA,EAC/E;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,kBAAkB,CAAC,kBAAkB,+EAA+E;AAAA,IACpH,UAAU,CAAC,gDAAgD,6CAA6C;AAAA,IACxG,SAAS,CAAC,oEAAoE;AAAA,EAChF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,kBAAkB,CAAC,aAAa,cAAc,yBAAyB,oBAAoB;AAAA,IAC3F,UAAU,CAAC,qCAAqC,8CAA8C;AAAA,IAC9F,SAAS,CAAC,yDAAyD;AAAA,EACrE;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,kBAAkB,CAAC,mBAAmB,uBAAuB,UAAU,oCAAoC;AAAA,IAC3G,UAAU,CAAC,0BAA0B,0CAA0C;AAAA,IAC/E,SAAS,CAAC,iDAAiD;AAAA,EAC7D;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,kBAAkB,CAAC,QAAQ,cAAc,kBAAkB,iBAAiB;AAAA,IAC5E,UAAU,CAAC,qDAAqD,qCAAqC;AAAA,IACrG,SAAS,CAAC,0DAA0D;AAAA,EACtE;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,kBAAkB,CAAC,YAAY,SAAS,WAAW,mBAAmB,kBAAkB;AAAA,IACxF,UAAU,CAAC,qCAAqC,sCAAsC;AAAA,IACtF,SAAS,CAAC,qEAAqE;AAAA,EACjF;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,IACT,kBAAkB,CAAC,iBAAiB,iBAAiB,cAAc,cAAc;AAAA,IACjF,UAAU,CAAC,sCAAsC,2CAA2C;AAAA,IAC5F,SAAS,CAAC,wDAAwD;AAAA,EACpE;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,kBAAkB,CAAC,qBAAqB,gBAAgB,gBAAgB,kBAAkB;AAAA,IAC1F,UAAU,CAAC,uCAAuC,4CAA4C;AAAA,IAC9F,SAAS,CAAC,wDAAwD;AAAA,EACpE;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,kBAAkB,CAAC,eAAe,iBAAiB,kBAAkB,kBAAkB;AAAA,IACvF,UAAU,CAAC,gCAAgC,6CAA6C;AAAA,IACxF,SAAS,CAAC,mEAAmE;AAAA,EAC/E;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,kBAAkB,CAAC,UAAU,uBAAuB,0BAA0B,0BAA0B;AAAA,IACxG,UAAU,CAAC,gDAAgD,qCAAqC;AAAA,IAChG,SAAS,CAAC,2DAA2D;AAAA,EACvE;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,kBAAkB,CAAC,eAAe,oBAAoB,gBAAgB,iBAAiB;AAAA,IACvF,UAAU,CAAC,iDAAiD,gDAAgD;AAAA,IAC5G,SAAS,CAAC,oDAAoD;AAAA,EAChE;AAAA,EACA,qBAAqB;AAAA,IACnB,SAAS;AAAA,IACT,kBAAkB,CAAC,eAAe,yBAAyB,gBAAgB,uBAAuB;AAAA,IAClG,UAAU,CAAC,qDAAqD,2CAA2C;AAAA,IAC3G,SAAS,CAAC,8DAA8D;AAAA,EAC1E;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,kBAAkB,CAAC,cAAc,SAAS,WAAW,UAAU,QAAQ;AAAA,IACvE,UAAU,CAAC,gDAAgD,yDAAyD;AAAA,IACpH,SAAS,CAAC,gFAAgF;AAAA,EAC5F;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,kBAAkB,CAAC,mBAAmB,kBAAkB,mBAAmB,eAAe;AAAA,IAC1F,UAAU,CAAC,6CAA6C,sDAAsD;AAAA,IAC9G,SAAS,CAAC,uDAAuD;AAAA,EACnE;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,kBAAkB,CAAC,eAAe,oBAAoB,0BAA0B,sBAAsB;AAAA,IACtG,UAAU,CAAC,qEAAqE;AAAA,IAChF,SAAS,CAAC,wDAAwD;AAAA,EACpE;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,kBAAkB,CAAC,SAAS,gBAAgB,oBAAoB,qBAAqB;AAAA,IACrF,UAAU,CAAC,+DAA+D;AAAA,IAC1E,SAAS,CAAC,0DAA0D;AAAA,EACtE;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,kBAAkB,CAAC,mBAAmB,0BAA0B,iBAAiB,kBAAkB;AAAA,IACnG,UAAU,CAAC,yDAAyD;AAAA,IACpE,SAAS,CAAC,qEAAqE;AAAA,EACjF;AACF;AAEO,IAAM,yCAAyC,MACpD,QAAQ,4BAA4B,aAAa,uDAAuD,4BAA4B,iBAAiB,QAAQ,4BAA4B,kBAAkB,UAAU,yCAAyC,CAAC,CAAC,KAAK,yCAAyC,CAAC,CAAC,SAAS,yCAAyC,CAAC,CAAC,mCAAmC,4BAA4B,UAAU;AAGxa,IAAM,6BAA6B,MACxC,QAAQ,4BAA4B,aAAa,WAAW,+BAA+B,wBAAwB,aAAa,+BAA+B,gBAAgB,kFAAkF,4BAA4B,kBAAkB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/utils/workflow-message.ts"],"sourcesContent":["import { summarizePrimaryProviderIssue } from \"../../providers/constraint\";\n\ntype FailureShape = {\n provider?: string;\n error?: {\n reasonCode?: unknown;\n code?: unknown;\n message?: unknown;\n details?: Record<string, unknown>;\n };\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> | null => (\n value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n);\n\nconst readNonEmptyString = (value: unknown): string | null => (\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null\n);\n\nconst UNRESOLVED_COMMAND_PLACEHOLDER_RE = /<[^>\\n]+>/;\n\nconst readRunnableStepCommand = (step: Record<string, unknown>): string | null => {\n const command = readNonEmptyString(step.command);\n if (!command) return null;\n return UNRESOLVED_COMMAND_PLACEHOLDER_RE.test(command) ? null : command;\n};\n\nconst readDisplayableNextStep = (value: unknown): string | null => {\n const text = readNonEmptyString(value);\n if (!text) return null;\n return UNRESOLVED_COMMAND_PLACEHOLDER_RE.test(text) ? null : text;\n};\n\nconst readMeta = (data: unknown): Record<string, unknown> | null => {\n return asRecord(asRecord(data)?.meta);\n};\n\nconst readPrimaryConstraint = (data: unknown): Record<string, unknown> | null => {\n const meta = readMeta(data);\n if (!meta) return null;\n return asRecord(meta.primaryConstraint);\n};\n\nconst readPrimarySummary = (data: unknown): string | null => {\n const meta = readMeta(data);\n return readNonEmptyString(meta?.primaryConstraintSummary);\n};\n\nconst readPrimaryNextStep = (data: unknown): string | null => {\n const constraint = readPrimaryConstraint(data);\n if (!constraint) return null;\n const guidance = asRecord(constraint.guidance);\n if (!guidance) return null;\n const commands = guidance.recommendedNextCommands;\n if (!Array.isArray(commands)) return null;\n const nextStep = commands.find((entry): entry is string => typeof entry === \"string\" && entry.trim().length > 0);\n return nextStep?.trim() ?? null;\n};\n\nconst inferPrimaryIssueNextStep = (data: unknown): string | null => {\n return summarizePrimaryProviderIssue(readFailures(data))?.guidance?.recommendedNextCommands[0] ?? null;\n};\n\nconst readFailures = (data: unknown): FailureShape[] => {\n const meta = readMeta(data);\n if (!meta) return [];\n const failures = meta.failures;\n return Array.isArray(failures)\n ? failures.filter((entry): entry is FailureShape => Boolean(entry) && typeof entry === \"object\")\n : [];\n};\n\nexport const readFollowthroughSummary = (data: unknown): string | null => {\n const record = asRecord(data);\n return readNonEmptyString(record?.followthroughSummary)\n ?? readNonEmptyString(readMeta(data)?.followthroughSummary);\n};\n\nconst readSuggestedSteps = (data: unknown): readonly Record<string, unknown>[] => {\n const steps = asRecord(data)?.suggestedSteps;\n return Array.isArray(steps)\n ? steps.flatMap((step) => {\n const record = asRecord(step);\n return record ? [record] : [];\n })\n : [];\n};\n\nexport const buildNextStepMessage = (message: string, nextStep: string | null): string => {\n const displayableNextStep = readDisplayableNextStep(nextStep);\n return displayableNextStep ? `${message} Next step: ${displayableNextStep}` : message;\n};\n\nexport const buildProviderFollowupErrorMessage = (message: string): string => {\n const normalized = message.toLowerCase();\n if (normalized.includes(\"next step:\")) return message;\n if (normalized.includes(\"requires login or an existing session\")) {\n return buildNextStepMessage(\n message,\n \"Reuse an authenticated browser session, import logged-in cookies, or use the provider sign-in flow.\"\n );\n }\n if (\n normalized.includes(\"requires manual browser follow-up\")\n || normalized.includes(\"requires a live browser-rendered page\")\n ) {\n return buildNextStepMessage(message, \"Retry with browser assistance or a headed browser session.\");\n }\n return message;\n};\n\nexport const readSuggestedNextAction = (data: unknown): string | null => {\n const record = asRecord(data);\n if (!record) return null;\n return readDisplayableNextStep(record.suggestedNextAction)\n ?? readDisplayableNextStep(asRecord(record.sessionInspector)?.suggestedNextAction);\n};\n\nexport const readSuggestedStepCommand = (data: unknown): string | null => {\n let current = asRecord(data);\n\n while (current) {\n const command = readSuggestedSteps(current)\n .map(readRunnableStepCommand)\n .find((step): step is string => Boolean(step));\n if (command) {\n return command;\n }\n current = asRecord(current.challengePlan);\n }\n\n return null;\n};\n\nexport const readSuggestedStepReason = (data: unknown): string | null => {\n let current = asRecord(data);\n\n while (current) {\n const [firstStep] = readSuggestedSteps(current);\n if (firstStep) {\n return readDisplayableNextStep(firstStep.reason);\n }\n current = asRecord(current.challengePlan);\n }\n\n return null;\n};\n\nexport const readWorkflowGuidanceNextStep = (data: unknown): string | null => (\n readSuggestedNextAction(data) ?? readSuggestedStepCommand(data) ?? readSuggestedStepReason(data)\n);\n\nexport const buildWorkflowCompletionMessage = (workflowLabel: string, data: unknown): string => {\n const explicitSummary = readPrimarySummary(data);\n if (explicitSummary) {\n return buildNextStepMessage(\n `${workflowLabel} completed with provider follow-up required: ${explicitSummary}`,\n readPrimaryNextStep(data) ?? inferPrimaryIssueNextStep(data)\n );\n }\n const inferred = summarizePrimaryProviderIssue(readFailures(data));\n if (inferred) {\n return buildNextStepMessage(\n `${workflowLabel} completed with provider follow-up required: ${inferred.summary}`,\n inferred.guidance?.recommendedNextCommands[0] ?? null\n );\n }\n const followthroughSummary = readFollowthroughSummary(data);\n if (followthroughSummary) {\n return buildNextStepMessage(\n `${workflowLabel} completed. ${followthroughSummary}`,\n readWorkflowGuidanceNextStep(data)\n );\n }\n return `${workflowLabel} completed.`;\n};\n"],"mappings":"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","names":[]}