opendevbrowser 0.0.16 → 0.0.18

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 (616) hide show
  1. package/README.md +201 -79
  2. package/dist/annotate/agent-inbox-store.d.ts +58 -0
  3. package/dist/annotate/agent-inbox-store.d.ts.map +1 -0
  4. package/dist/annotate/agent-inbox.d.ts +25 -0
  5. package/dist/annotate/agent-inbox.d.ts.map +1 -0
  6. package/dist/annotate/direct-annotator.d.ts.map +1 -1
  7. package/dist/annotate/timeout-messages.d.ts +4 -0
  8. package/dist/annotate/timeout-messages.d.ts.map +1 -0
  9. package/dist/automation/coordinator.d.ts +55 -0
  10. package/dist/automation/coordinator.d.ts.map +1 -0
  11. package/dist/browser/annotation-manager.d.ts +7 -1
  12. package/dist/browser/annotation-manager.d.ts.map +1 -1
  13. package/dist/browser/browser-manager.d.ts +153 -48
  14. package/dist/browser/browser-manager.d.ts.map +1 -1
  15. package/dist/browser/canvas-client.d.ts +54 -0
  16. package/dist/browser/canvas-client.d.ts.map +1 -0
  17. package/dist/browser/canvas-code-sync-manager.d.ts +87 -0
  18. package/dist/browser/canvas-code-sync-manager.d.ts.map +1 -0
  19. package/dist/browser/canvas-manager.d.ts +122 -0
  20. package/dist/browser/canvas-manager.d.ts.map +1 -0
  21. package/dist/browser/canvas-runtime-preview-bridge.d.ts +20 -0
  22. package/dist/browser/canvas-runtime-preview-bridge.d.ts.map +1 -0
  23. package/dist/browser/canvas-session-sync-manager.d.ts +21 -0
  24. package/dist/browser/canvas-session-sync-manager.d.ts.map +1 -0
  25. package/dist/browser/global-challenge-coordinator.d.ts +27 -0
  26. package/dist/browser/global-challenge-coordinator.d.ts.map +1 -0
  27. package/dist/browser/manager-types.d.ts +179 -1
  28. package/dist/browser/manager-types.d.ts.map +1 -1
  29. package/dist/browser/ops-browser-manager.d.ts +114 -4
  30. package/dist/browser/ops-browser-manager.d.ts.map +1 -1
  31. package/dist/browser/ops-client.d.ts +17 -1
  32. package/dist/browser/ops-client.d.ts.map +1 -1
  33. package/dist/browser/playwright-runtime.d.ts +4 -0
  34. package/dist/browser/playwright-runtime.d.ts.map +1 -0
  35. package/dist/browser/review-surface.d.ts +9 -0
  36. package/dist/browser/review-surface.d.ts.map +1 -0
  37. package/dist/browser/screencast-recorder.d.ts +57 -0
  38. package/dist/browser/screencast-recorder.d.ts.map +1 -0
  39. package/dist/browser/session-inspector.d.ts +71 -0
  40. package/dist/browser/session-inspector.d.ts.map +1 -0
  41. package/dist/browser/session-store.d.ts +5 -1
  42. package/dist/browser/session-store.d.ts.map +1 -1
  43. package/dist/browser/system-chrome-cookies.d.ts +46 -0
  44. package/dist/browser/system-chrome-cookies.d.ts.map +1 -0
  45. package/dist/browser/target-manager.d.ts +1 -0
  46. package/dist/browser/target-manager.d.ts.map +1 -1
  47. package/dist/cache/chrome-locator.d.ts.map +1 -1
  48. package/dist/cache/chrome-user-data.d.ts +17 -0
  49. package/dist/cache/chrome-user-data.d.ts.map +1 -0
  50. package/dist/canvas/adapter-plugins/loader.d.ts +13 -0
  51. package/dist/canvas/adapter-plugins/loader.d.ts.map +1 -0
  52. package/dist/canvas/adapter-plugins/manifest.d.ts +146 -0
  53. package/dist/canvas/adapter-plugins/manifest.d.ts.map +1 -0
  54. package/dist/canvas/adapter-plugins/types.d.ts +83 -0
  55. package/dist/canvas/adapter-plugins/types.d.ts.map +1 -0
  56. package/dist/canvas/adapter-plugins/validator.d.ts +10 -0
  57. package/dist/canvas/adapter-plugins/validator.d.ts.map +1 -0
  58. package/dist/canvas/code-sync/apply-tsx.d.ts +25 -0
  59. package/dist/canvas/code-sync/apply-tsx.d.ts.map +1 -0
  60. package/dist/canvas/code-sync/graph.d.ts +5 -0
  61. package/dist/canvas/code-sync/graph.d.ts.map +1 -0
  62. package/dist/canvas/code-sync/hash.d.ts +3 -0
  63. package/dist/canvas/code-sync/hash.d.ts.map +1 -0
  64. package/dist/canvas/code-sync/import.d.ts +19 -0
  65. package/dist/canvas/code-sync/import.d.ts.map +1 -0
  66. package/dist/canvas/code-sync/manifest.d.ts +6 -0
  67. package/dist/canvas/code-sync/manifest.d.ts.map +1 -0
  68. package/dist/canvas/code-sync/tsx-adapter.d.ts +8 -0
  69. package/dist/canvas/code-sync/tsx-adapter.d.ts.map +1 -0
  70. package/dist/canvas/code-sync/types.d.ts +244 -0
  71. package/dist/canvas/code-sync/types.d.ts.map +1 -0
  72. package/dist/canvas/code-sync/write.d.ts +9 -0
  73. package/dist/canvas/code-sync/write.d.ts.map +1 -0
  74. package/dist/canvas/document-store.d.ts +91 -0
  75. package/dist/canvas/document-store.d.ts.map +1 -0
  76. package/dist/canvas/export.d.ts +12 -0
  77. package/dist/canvas/export.d.ts.map +1 -0
  78. package/dist/canvas/framework-adapters/custom-elements-v1.d.ts +3 -0
  79. package/dist/canvas/framework-adapters/custom-elements-v1.d.ts.map +1 -0
  80. package/dist/canvas/framework-adapters/html-static-v1.d.ts +3 -0
  81. package/dist/canvas/framework-adapters/html-static-v1.d.ts.map +1 -0
  82. package/dist/canvas/framework-adapters/markup.d.ts +9 -0
  83. package/dist/canvas/framework-adapters/markup.d.ts.map +1 -0
  84. package/dist/canvas/framework-adapters/react-tsx-v2.d.ts +3 -0
  85. package/dist/canvas/framework-adapters/react-tsx-v2.d.ts.map +1 -0
  86. package/dist/canvas/framework-adapters/registry.d.ts +12 -0
  87. package/dist/canvas/framework-adapters/registry.d.ts.map +1 -0
  88. package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts +3 -0
  89. package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts.map +1 -0
  90. package/dist/canvas/framework-adapters/types.d.ts +57 -0
  91. package/dist/canvas/framework-adapters/types.d.ts.map +1 -0
  92. package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts +3 -0
  93. package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts.map +1 -0
  94. package/dist/canvas/kits/catalog.d.ts +5 -0
  95. package/dist/canvas/kits/catalog.d.ts.map +1 -0
  96. package/dist/canvas/library-adapters/react/index.d.ts +3 -0
  97. package/dist/canvas/library-adapters/react/index.d.ts.map +1 -0
  98. package/dist/canvas/library-adapters/registry.d.ts +11 -0
  99. package/dist/canvas/library-adapters/registry.d.ts.map +1 -0
  100. package/dist/canvas/library-adapters/types.d.ts +43 -0
  101. package/dist/canvas/library-adapters/types.d.ts.map +1 -0
  102. package/dist/canvas/repo-store.d.ts +12 -0
  103. package/dist/canvas/repo-store.d.ts.map +1 -0
  104. package/dist/canvas/starters/catalog.d.ts +34 -0
  105. package/dist/canvas/starters/catalog.d.ts.map +1 -0
  106. package/dist/canvas/surface-palette.d.ts +15 -0
  107. package/dist/canvas/surface-palette.d.ts.map +1 -0
  108. package/dist/canvas/token-references.d.ts +22 -0
  109. package/dist/canvas/token-references.d.ts.map +1 -0
  110. package/dist/canvas/types.d.ts +594 -0
  111. package/dist/canvas/types.d.ts.map +1 -0
  112. package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js +7 -0
  113. package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js.map +1 -0
  114. package/dist/challenges/action-loop.d.ts +13 -0
  115. package/dist/challenges/action-loop.d.ts.map +1 -0
  116. package/dist/challenges/capability-matrix.d.ts +3 -0
  117. package/dist/challenges/capability-matrix.d.ts.map +1 -0
  118. package/dist/challenges/evidence-bundle.d.ts +48 -0
  119. package/dist/challenges/evidence-bundle.d.ts.map +1 -0
  120. package/dist/challenges/governed-adapter-gateway.d.ts +4 -0
  121. package/dist/challenges/governed-adapter-gateway.d.ts.map +1 -0
  122. package/dist/challenges/human-yield-gate.d.ts +20 -0
  123. package/dist/challenges/human-yield-gate.d.ts.map +1 -0
  124. package/dist/challenges/index.d.ts +15 -0
  125. package/dist/challenges/index.d.ts.map +1 -0
  126. package/dist/challenges/interpreter.d.ts +3 -0
  127. package/dist/challenges/interpreter.d.ts.map +1 -0
  128. package/dist/challenges/optional-computer-use-bridge.d.ts +9 -0
  129. package/dist/challenges/optional-computer-use-bridge.d.ts.map +1 -0
  130. package/dist/challenges/orchestrator.d.ts +32 -0
  131. package/dist/challenges/orchestrator.d.ts.map +1 -0
  132. package/dist/challenges/outcome-recorder.d.ts +8 -0
  133. package/dist/challenges/outcome-recorder.d.ts.map +1 -0
  134. package/dist/challenges/owned-environment-lane.d.ts +3 -0
  135. package/dist/challenges/owned-environment-lane.d.ts.map +1 -0
  136. package/dist/challenges/policy-gate.d.ts +9 -0
  137. package/dist/challenges/policy-gate.d.ts.map +1 -0
  138. package/dist/challenges/sanctioned-identity-lane.d.ts +3 -0
  139. package/dist/challenges/sanctioned-identity-lane.d.ts.map +1 -0
  140. package/dist/challenges/service-adapter-lane.d.ts +3 -0
  141. package/dist/challenges/service-adapter-lane.d.ts.map +1 -0
  142. package/dist/challenges/strategy-selector.d.ts +10 -0
  143. package/dist/challenges/strategy-selector.d.ts.map +1 -0
  144. package/dist/challenges/types.d.ts +277 -0
  145. package/dist/challenges/types.d.ts.map +1 -0
  146. package/dist/challenges/verification-gate.d.ts +15 -0
  147. package/dist/challenges/verification-gate.d.ts.map +1 -0
  148. package/dist/chunk-5FZQJRBQ.js +15256 -0
  149. package/dist/chunk-5FZQJRBQ.js.map +1 -0
  150. package/dist/{chunk-7W3SPXIB.js → chunk-FUSXMW3G.js} +4 -1
  151. package/dist/chunk-L57D35TB.js +33513 -0
  152. package/dist/chunk-L57D35TB.js.map +1 -0
  153. package/dist/chunk-TBUCZX4A.js +34 -0
  154. package/dist/chunk-TBUCZX4A.js.map +1 -0
  155. package/dist/chunk-Y2KL55OG.js +59 -0
  156. package/dist/chunk-Y2KL55OG.js.map +1 -0
  157. package/dist/chunk-YBQECXZX.js +409 -0
  158. package/dist/chunk-YBQECXZX.js.map +1 -0
  159. package/dist/cli/args.d.ts +4 -4
  160. package/dist/cli/args.d.ts.map +1 -1
  161. package/dist/cli/commands/annotate.d.ts +11 -0
  162. package/dist/cli/commands/annotate.d.ts.map +1 -1
  163. package/dist/cli/commands/artifacts.d.ts.map +1 -1
  164. package/dist/cli/commands/canvas.d.ts +45 -0
  165. package/dist/cli/commands/canvas.d.ts.map +1 -0
  166. package/dist/cli/commands/daemon.d.ts +7 -0
  167. package/dist/cli/commands/daemon.d.ts.map +1 -1
  168. package/dist/cli/commands/desktop/accessibility-snapshot.d.ts +3 -0
  169. package/dist/cli/commands/desktop/accessibility-snapshot.d.ts.map +1 -0
  170. package/dist/cli/commands/desktop/active-window.d.ts +3 -0
  171. package/dist/cli/commands/desktop/active-window.d.ts.map +1 -0
  172. package/dist/cli/commands/desktop/capture-desktop.d.ts +3 -0
  173. package/dist/cli/commands/desktop/capture-desktop.d.ts.map +1 -0
  174. package/dist/cli/commands/desktop/capture-window.d.ts +3 -0
  175. package/dist/cli/commands/desktop/capture-window.d.ts.map +1 -0
  176. package/dist/cli/commands/desktop/shared.d.ts +19 -0
  177. package/dist/cli/commands/desktop/shared.d.ts.map +1 -0
  178. package/dist/cli/commands/desktop/status.d.ts +3 -0
  179. package/dist/cli/commands/desktop/status.d.ts.map +1 -0
  180. package/dist/cli/commands/desktop/windows.d.ts +3 -0
  181. package/dist/cli/commands/desktop/windows.d.ts.map +1 -0
  182. package/dist/cli/commands/devtools/dialog.d.ts +19 -0
  183. package/dist/cli/commands/devtools/dialog.d.ts.map +1 -0
  184. package/dist/cli/commands/devtools/perf.d.ts.map +1 -1
  185. package/dist/cli/commands/devtools/screencast-start.d.ts +20 -0
  186. package/dist/cli/commands/devtools/screencast-start.d.ts.map +1 -0
  187. package/dist/cli/commands/devtools/screencast-stop.d.ts +17 -0
  188. package/dist/cli/commands/devtools/screencast-stop.d.ts.map +1 -0
  189. package/dist/cli/commands/devtools/screenshot.d.ts +3 -0
  190. package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -1
  191. package/dist/cli/commands/dom/attr.d.ts.map +1 -1
  192. package/dist/cli/commands/dom/checked.d.ts.map +1 -1
  193. package/dist/cli/commands/dom/enabled.d.ts.map +1 -1
  194. package/dist/cli/commands/dom/html.d.ts.map +1 -1
  195. package/dist/cli/commands/dom/text.d.ts.map +1 -1
  196. package/dist/cli/commands/dom/value.d.ts.map +1 -1
  197. package/dist/cli/commands/dom/visible.d.ts.map +1 -1
  198. package/dist/cli/commands/export/clone-component.d.ts +9 -0
  199. package/dist/cli/commands/export/clone-component.d.ts.map +1 -1
  200. package/dist/cli/commands/export/clone-page.d.ts +8 -0
  201. package/dist/cli/commands/export/clone-page.d.ts.map +1 -1
  202. package/dist/cli/commands/interact/check.d.ts.map +1 -1
  203. package/dist/cli/commands/interact/click.d.ts.map +1 -1
  204. package/dist/cli/commands/interact/hover.d.ts.map +1 -1
  205. package/dist/cli/commands/interact/pointer-down.d.ts +7 -0
  206. package/dist/cli/commands/interact/pointer-down.d.ts.map +1 -0
  207. package/dist/cli/commands/interact/pointer-drag.d.ts +7 -0
  208. package/dist/cli/commands/interact/pointer-drag.d.ts.map +1 -0
  209. package/dist/cli/commands/interact/pointer-move.d.ts +7 -0
  210. package/dist/cli/commands/interact/pointer-move.d.ts.map +1 -0
  211. package/dist/cli/commands/interact/pointer-shared.d.ts +6 -0
  212. package/dist/cli/commands/interact/pointer-shared.d.ts.map +1 -0
  213. package/dist/cli/commands/interact/pointer-up.d.ts +7 -0
  214. package/dist/cli/commands/interact/pointer-up.d.ts.map +1 -0
  215. package/dist/cli/commands/interact/press.d.ts.map +1 -1
  216. package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -1
  217. package/dist/cli/commands/interact/scroll.d.ts.map +1 -1
  218. package/dist/cli/commands/interact/select.d.ts.map +1 -1
  219. package/dist/cli/commands/interact/type.d.ts.map +1 -1
  220. package/dist/cli/commands/interact/uncheck.d.ts.map +1 -1
  221. package/dist/cli/commands/interact/upload.d.ts +18 -0
  222. package/dist/cli/commands/interact/upload.d.ts.map +1 -0
  223. package/dist/cli/commands/macro-resolve.d.ts +2 -0
  224. package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
  225. package/dist/cli/commands/native.d.ts +22 -8
  226. package/dist/cli/commands/native.d.ts.map +1 -1
  227. package/dist/cli/commands/nav/goto.d.ts.map +1 -1
  228. package/dist/cli/commands/nav/review.d.ts +7 -0
  229. package/dist/cli/commands/nav/review.d.ts.map +1 -0
  230. package/dist/cli/commands/nav/snapshot.d.ts.map +1 -1
  231. package/dist/cli/commands/nav/wait.d.ts.map +1 -1
  232. package/dist/cli/commands/pages/open.d.ts.map +1 -1
  233. package/dist/cli/commands/product-video.d.ts +2 -0
  234. package/dist/cli/commands/product-video.d.ts.map +1 -1
  235. package/dist/cli/commands/research.d.ts +3 -0
  236. package/dist/cli/commands/research.d.ts.map +1 -1
  237. package/dist/cli/commands/run.d.ts +14 -0
  238. package/dist/cli/commands/run.d.ts.map +1 -1
  239. package/dist/cli/commands/serve.d.ts +1 -21
  240. package/dist/cli/commands/serve.d.ts.map +1 -1
  241. package/dist/cli/commands/session/connect.d.ts.map +1 -1
  242. package/dist/cli/commands/session/disconnect.d.ts.map +1 -1
  243. package/dist/cli/commands/session/inspector.d.ts +21 -0
  244. package/dist/cli/commands/session/inspector.d.ts.map +1 -0
  245. package/dist/cli/commands/session/launch.d.ts.map +1 -1
  246. package/dist/cli/commands/shopping.d.ts +5 -0
  247. package/dist/cli/commands/shopping.d.ts.map +1 -1
  248. package/dist/cli/commands/status.d.ts +2 -9
  249. package/dist/cli/commands/status.d.ts.map +1 -1
  250. package/dist/cli/commands/targets/new.d.ts.map +1 -1
  251. package/dist/cli/daemon-autostart.d.ts +11 -0
  252. package/dist/cli/daemon-autostart.d.ts.map +1 -1
  253. package/dist/cli/daemon-client.d.ts +3 -0
  254. package/dist/cli/daemon-client.d.ts.map +1 -1
  255. package/dist/cli/daemon-commands.d.ts.map +1 -1
  256. package/dist/cli/daemon-state.d.ts +16 -0
  257. package/dist/cli/daemon-state.d.ts.map +1 -1
  258. package/dist/cli/daemon-status.d.ts +7 -2
  259. package/dist/cli/daemon-status.d.ts.map +1 -1
  260. package/dist/cli/daemon.d.ts +1 -0
  261. package/dist/cli/daemon.d.ts.map +1 -1
  262. package/dist/cli/help.d.ts +19 -3
  263. package/dist/cli/help.d.ts.map +1 -1
  264. package/dist/cli/index.js +2927 -932
  265. package/dist/cli/index.js.map +1 -1
  266. package/dist/cli/install-autostart-output.d.ts +6 -0
  267. package/dist/cli/install-autostart-output.d.ts.map +1 -0
  268. package/dist/cli/install-autostart-reconciliation.d.ts +23 -0
  269. package/dist/cli/install-autostart-reconciliation.d.ts.map +1 -0
  270. package/dist/cli/installers/skills.d.ts +42 -6
  271. package/dist/cli/installers/skills.d.ts.map +1 -1
  272. package/dist/cli/output.d.ts +3 -0
  273. package/dist/cli/output.d.ts.map +1 -1
  274. package/dist/cli/remote-canvas-manager.d.ts +8 -0
  275. package/dist/cli/remote-canvas-manager.d.ts.map +1 -0
  276. package/dist/cli/remote-desktop-runtime.d.ts +15 -0
  277. package/dist/cli/remote-desktop-runtime.d.ts.map +1 -0
  278. package/dist/cli/remote-manager.d.ts +27 -3
  279. package/dist/cli/remote-manager.d.ts.map +1 -1
  280. package/dist/cli/remote-relay.d.ts +2 -0
  281. package/dist/cli/remote-relay.d.ts.map +1 -1
  282. package/dist/cli/transport-timeouts.d.ts +8 -0
  283. package/dist/cli/transport-timeouts.d.ts.map +1 -0
  284. package/dist/cli/utils/http.d.ts +9 -0
  285. package/dist/cli/utils/http.d.ts.map +1 -1
  286. package/dist/cli/utils/parse.d.ts +3 -0
  287. package/dist/cli/utils/parse.d.ts.map +1 -1
  288. package/dist/cli/utils/skills.d.ts +1 -2
  289. package/dist/cli/utils/skills.d.ts.map +1 -1
  290. package/dist/cli/utils/workflow-message.d.ts +2 -0
  291. package/dist/cli/utils/workflow-message.d.ts.map +1 -0
  292. package/dist/config.d.ts +47 -0
  293. package/dist/config.d.ts.map +1 -1
  294. package/dist/core/bootstrap.d.ts.map +1 -1
  295. package/dist/core/index.d.ts +1 -0
  296. package/dist/core/index.d.ts.map +1 -1
  297. package/dist/core/logging.d.ts +3 -1
  298. package/dist/core/logging.d.ts.map +1 -1
  299. package/dist/core/runtime-assemblies.d.ts +22 -0
  300. package/dist/core/runtime-assemblies.d.ts.map +1 -0
  301. package/dist/core/types.d.ts +17 -0
  302. package/dist/core/types.d.ts.map +1 -1
  303. package/dist/desktop/audit.d.ts +37 -0
  304. package/dist/desktop/audit.d.ts.map +1 -0
  305. package/dist/desktop/errors.d.ts +7 -0
  306. package/dist/desktop/errors.d.ts.map +1 -0
  307. package/dist/desktop/index.d.ts +6 -0
  308. package/dist/desktop/index.d.ts.map +1 -0
  309. package/dist/desktop/runtime.d.ts +26 -0
  310. package/dist/desktop/runtime.d.ts.map +1 -0
  311. package/dist/desktop/types.d.ts +76 -0
  312. package/dist/desktop/types.d.ts.map +1 -0
  313. package/dist/extension-extractor.d.ts +6 -0
  314. package/dist/extension-extractor.d.ts.map +1 -1
  315. package/dist/fs-UMRKOBNN.js +7 -0
  316. package/dist/fs-UMRKOBNN.js.map +1 -0
  317. package/dist/index.d.ts.map +1 -1
  318. package/dist/index.js +1221 -460
  319. package/dist/index.js.map +1 -1
  320. package/dist/integrations/figma/assets.d.ts +13 -0
  321. package/dist/integrations/figma/assets.d.ts.map +1 -0
  322. package/dist/integrations/figma/auth.d.ts +3 -0
  323. package/dist/integrations/figma/auth.d.ts.map +1 -0
  324. package/dist/integrations/figma/client.d.ts +42 -0
  325. package/dist/integrations/figma/client.d.ts.map +1 -0
  326. package/dist/integrations/figma/mappers.d.ts +23 -0
  327. package/dist/integrations/figma/mappers.d.ts.map +1 -0
  328. package/dist/integrations/figma/normalize.d.ts +99 -0
  329. package/dist/integrations/figma/normalize.d.ts.map +1 -0
  330. package/dist/integrations/figma/url.d.ts +17 -0
  331. package/dist/integrations/figma/url.d.ts.map +1 -0
  332. package/dist/integrations/figma/variables.d.ts +21 -0
  333. package/dist/integrations/figma/variables.d.ts.map +1 -0
  334. package/dist/macros/execute-runtime.d.ts +19 -0
  335. package/dist/macros/execute-runtime.d.ts.map +1 -0
  336. package/dist/macros/execute.d.ts +3 -1
  337. package/dist/macros/execute.d.ts.map +1 -1
  338. package/dist/{macros-NUBRM44Y.js → macros-ND2M7LWU.js} +2 -2
  339. package/dist/opendevbrowser.d.ts.map +1 -1
  340. package/dist/opendevbrowser.js +1221 -460
  341. package/dist/opendevbrowser.js.map +1 -1
  342. package/dist/providers/blocker.d.ts.map +1 -1
  343. package/dist/providers/browser-fallback.d.ts +30 -0
  344. package/dist/providers/browser-fallback.d.ts.map +1 -0
  345. package/dist/providers/constraint.d.ts +45 -0
  346. package/dist/providers/constraint.d.ts.map +1 -0
  347. package/dist/providers/index.d.ts +11 -2
  348. package/dist/providers/index.d.ts.map +1 -1
  349. package/dist/providers/policy.d.ts.map +1 -1
  350. package/dist/providers/product-video-compiler.d.ts +92 -0
  351. package/dist/providers/product-video-compiler.d.ts.map +1 -0
  352. package/dist/providers/registry.d.ts +37 -1
  353. package/dist/providers/registry.d.ts.map +1 -1
  354. package/dist/providers/renderer.d.ts.map +1 -1
  355. package/dist/providers/research-compiler.d.ts +64 -0
  356. package/dist/providers/research-compiler.d.ts.map +1 -0
  357. package/dist/providers/research-executor.d.ts +27 -0
  358. package/dist/providers/research-executor.d.ts.map +1 -0
  359. package/dist/providers/runtime-bundle.d.ts +26 -0
  360. package/dist/providers/runtime-bundle.d.ts.map +1 -0
  361. package/dist/providers/runtime-factory.d.ts +6 -1
  362. package/dist/providers/runtime-factory.d.ts.map +1 -1
  363. package/dist/providers/runtime-policy.d.ts +24 -0
  364. package/dist/providers/runtime-policy.d.ts.map +1 -0
  365. package/dist/providers/shared/anti-bot-policy.d.ts +3 -2
  366. package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -1
  367. package/dist/providers/shopping/index.d.ts +11 -1
  368. package/dist/providers/shopping/index.d.ts.map +1 -1
  369. package/dist/providers/shopping-compiler.d.ts +51 -0
  370. package/dist/providers/shopping-compiler.d.ts.map +1 -0
  371. package/dist/providers/shopping-executor.d.ts +18 -0
  372. package/dist/providers/shopping-executor.d.ts.map +1 -0
  373. package/dist/providers/shopping-postprocess.d.ts +46 -0
  374. package/dist/providers/shopping-postprocess.d.ts.map +1 -0
  375. package/dist/providers/shopping-workflow.d.ts +33 -0
  376. package/dist/providers/shopping-workflow.d.ts.map +1 -0
  377. package/dist/providers/social/platform.d.ts +2 -1
  378. package/dist/providers/social/platform.d.ts.map +1 -1
  379. package/dist/providers/social/search-quality.d.ts +16 -0
  380. package/dist/providers/social/search-quality.d.ts.map +1 -0
  381. package/dist/providers/social/youtube-resolver.d.ts +2 -1
  382. package/dist/providers/social/youtube-resolver.d.ts.map +1 -1
  383. package/dist/providers/social/youtube.d.ts.map +1 -1
  384. package/dist/providers/types.d.ts +116 -4
  385. package/dist/providers/types.d.ts.map +1 -1
  386. package/dist/providers/web/crawl-worker.d.ts.map +1 -1
  387. package/dist/providers/web/extract.d.ts +16 -0
  388. package/dist/providers/web/extract.d.ts.map +1 -1
  389. package/dist/providers/web/index.d.ts.map +1 -1
  390. package/dist/providers/workflow-contracts.d.ts +53 -0
  391. package/dist/providers/workflow-contracts.d.ts.map +1 -0
  392. package/dist/providers/workflows.d.ts +30 -6
  393. package/dist/providers/workflows.d.ts.map +1 -1
  394. package/dist/providers-G36AM3Z2.js +121 -0
  395. package/dist/providers-G36AM3Z2.js.map +1 -0
  396. package/dist/public-surface/generated-manifest.d.ts +1168 -0
  397. package/dist/public-surface/generated-manifest.d.ts.map +1 -0
  398. package/dist/public-surface/source.d.ts +437 -0
  399. package/dist/public-surface/source.d.ts.map +1 -0
  400. package/dist/relay/protocol.d.ts +108 -4
  401. package/dist/relay/protocol.d.ts.map +1 -1
  402. package/dist/relay/relay-endpoints.d.ts +21 -0
  403. package/dist/relay/relay-endpoints.d.ts.map +1 -1
  404. package/dist/relay/relay-server.d.ts +32 -1
  405. package/dist/relay/relay-server.d.ts.map +1 -1
  406. package/dist/relay/relay-types.d.ts +3 -0
  407. package/dist/relay/relay-types.d.ts.map +1 -1
  408. package/dist/skills/bundled-skill-directories.d.ts +8 -0
  409. package/dist/skills/bundled-skill-directories.d.ts.map +1 -0
  410. package/dist/skills/skill-loader.d.ts +9 -1
  411. package/dist/skills/skill-loader.d.ts.map +1 -1
  412. package/dist/skills/skill-loader.js +7 -0
  413. package/dist/skills/skill-loader.js.map +1 -0
  414. package/dist/skills/skill-nudge.d.ts.map +1 -1
  415. package/dist/skills/types.d.ts +31 -0
  416. package/dist/skills/types.d.ts.map +1 -1
  417. package/dist/snapshot/ops-snapshot.d.ts +1 -1
  418. package/dist/snapshot/ops-snapshot.d.ts.map +1 -1
  419. package/dist/snapshot/refs.d.ts +6 -1
  420. package/dist/snapshot/refs.d.ts.map +1 -1
  421. package/dist/snapshot/snapshotter.d.ts.map +1 -1
  422. package/dist/tools/annotate.d.ts.map +1 -1
  423. package/dist/tools/canvas.d.ts +4 -0
  424. package/dist/tools/canvas.d.ts.map +1 -0
  425. package/dist/tools/check.d.ts.map +1 -1
  426. package/dist/tools/click.d.ts.map +1 -1
  427. package/dist/tools/clone_component.d.ts.map +1 -1
  428. package/dist/tools/clone_page.d.ts.map +1 -1
  429. package/dist/tools/connect.d.ts.map +1 -1
  430. package/dist/tools/deps.d.ts +6 -0
  431. package/dist/tools/deps.d.ts.map +1 -1
  432. package/dist/tools/desktop-shared.d.ts +6 -0
  433. package/dist/tools/desktop-shared.d.ts.map +1 -0
  434. package/dist/tools/desktop_accessibility_snapshot.d.ts +4 -0
  435. package/dist/tools/desktop_accessibility_snapshot.d.ts.map +1 -0
  436. package/dist/tools/desktop_active_window.d.ts +4 -0
  437. package/dist/tools/desktop_active_window.d.ts.map +1 -0
  438. package/dist/tools/desktop_capture_desktop.d.ts +4 -0
  439. package/dist/tools/desktop_capture_desktop.d.ts.map +1 -0
  440. package/dist/tools/desktop_capture_window.d.ts +4 -0
  441. package/dist/tools/desktop_capture_window.d.ts.map +1 -0
  442. package/dist/tools/desktop_status.d.ts +4 -0
  443. package/dist/tools/desktop_status.d.ts.map +1 -0
  444. package/dist/tools/desktop_windows.d.ts +4 -0
  445. package/dist/tools/desktop_windows.d.ts.map +1 -0
  446. package/dist/tools/dialog.d.ts +4 -0
  447. package/dist/tools/dialog.d.ts.map +1 -0
  448. package/dist/tools/dom_get_html.d.ts.map +1 -1
  449. package/dist/tools/dom_get_text.d.ts.map +1 -1
  450. package/dist/tools/get_attr.d.ts.map +1 -1
  451. package/dist/tools/get_value.d.ts.map +1 -1
  452. package/dist/tools/goto.d.ts.map +1 -1
  453. package/dist/tools/hover.d.ts.map +1 -1
  454. package/dist/tools/index.d.ts +3 -0
  455. package/dist/tools/index.d.ts.map +1 -1
  456. package/dist/tools/is_checked.d.ts.map +1 -1
  457. package/dist/tools/is_enabled.d.ts.map +1 -1
  458. package/dist/tools/is_visible.d.ts.map +1 -1
  459. package/dist/tools/launch.d.ts.map +1 -1
  460. package/dist/tools/macro_resolve.d.ts.map +1 -1
  461. package/dist/tools/perf.d.ts.map +1 -1
  462. package/dist/tools/pointer_down.d.ts +4 -0
  463. package/dist/tools/pointer_down.d.ts.map +1 -0
  464. package/dist/tools/pointer_drag.d.ts +4 -0
  465. package/dist/tools/pointer_drag.d.ts.map +1 -0
  466. package/dist/tools/pointer_move.d.ts +4 -0
  467. package/dist/tools/pointer_move.d.ts.map +1 -0
  468. package/dist/tools/pointer_up.d.ts +4 -0
  469. package/dist/tools/pointer_up.d.ts.map +1 -0
  470. package/dist/tools/press.d.ts.map +1 -1
  471. package/dist/tools/product_video_run.d.ts.map +1 -1
  472. package/dist/tools/prompting_guide.d.ts.map +1 -1
  473. package/dist/tools/research_run.d.ts.map +1 -1
  474. package/dist/tools/response.d.ts +4 -1
  475. package/dist/tools/response.d.ts.map +1 -1
  476. package/dist/tools/review.d.ts +4 -0
  477. package/dist/tools/review.d.ts.map +1 -0
  478. package/dist/tools/screencast_start.d.ts +4 -0
  479. package/dist/tools/screencast_start.d.ts.map +1 -0
  480. package/dist/tools/screencast_stop.d.ts +4 -0
  481. package/dist/tools/screencast_stop.d.ts.map +1 -0
  482. package/dist/tools/screenshot.d.ts.map +1 -1
  483. package/dist/tools/scroll.d.ts.map +1 -1
  484. package/dist/tools/scroll_into_view.d.ts.map +1 -1
  485. package/dist/tools/select.d.ts.map +1 -1
  486. package/dist/tools/session_inspector.d.ts +4 -0
  487. package/dist/tools/session_inspector.d.ts.map +1 -0
  488. package/dist/tools/shopping_run.d.ts.map +1 -1
  489. package/dist/tools/skill_list.d.ts.map +1 -1
  490. package/dist/tools/skill_load.d.ts.map +1 -1
  491. package/dist/tools/snapshot.d.ts.map +1 -1
  492. package/dist/tools/type.d.ts.map +1 -1
  493. package/dist/tools/uncheck.d.ts.map +1 -1
  494. package/dist/tools/upload.d.ts +4 -0
  495. package/dist/tools/upload.d.ts.map +1 -0
  496. package/dist/tools/wait.d.ts.map +1 -1
  497. package/dist/tools/workflow-runtime.d.ts +4 -2
  498. package/dist/tools/workflow-runtime.d.ts.map +1 -1
  499. package/dist/utils/package-assets.d.ts +4 -0
  500. package/dist/utils/package-assets.d.ts.map +1 -0
  501. package/extension/canvas.html +1006 -0
  502. package/extension/dist/annotate-content.css +15 -6
  503. package/extension/dist/annotate-content.js +175 -35
  504. package/extension/dist/annotation-payload.js +199 -0
  505. package/extension/dist/background.js +544 -69
  506. package/extension/dist/canvas/canvas-runtime.js +1490 -0
  507. package/extension/dist/canvas/model.js +341 -0
  508. package/extension/dist/canvas/viewport-fit.js +67 -0
  509. package/extension/dist/canvas-page.js +3609 -0
  510. package/extension/dist/ops/dom-bridge.js +255 -3
  511. package/extension/dist/ops/ops-runtime.js +3324 -301
  512. package/extension/dist/ops/ops-session-store.js +97 -112
  513. package/extension/dist/ops/snapshot-builder.js +2 -2
  514. package/extension/dist/ops/snapshot-shared.js +2 -2
  515. package/extension/dist/ops/target-session-coordinator.js +159 -0
  516. package/extension/dist/popup.js +201 -42
  517. package/extension/dist/services/CDPRouter.js +1567 -63
  518. package/extension/dist/services/ConnectionManager.js +453 -78
  519. package/extension/dist/services/RelayClient.js +79 -30
  520. package/extension/dist/services/TabManager.js +118 -22
  521. package/extension/dist/services/TargetSessionMap.js +127 -3
  522. package/extension/dist/services/attach-errors.js +20 -0
  523. package/extension/dist/services/cdp-router-commands.js +135 -8
  524. package/extension/dist/services/url-restrictions.js +9 -13
  525. package/extension/dist/types.js +2 -0
  526. package/extension/manifest.json +2 -2
  527. package/extension/popup.html +59 -6
  528. package/package.json +19 -9
  529. package/skills/AGENTS.md +8 -4
  530. package/skills/opendevbrowser-best-practices/SKILL.md +183 -6
  531. package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +1 -0
  532. package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +141 -0
  533. package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +129 -19
  534. package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +9 -2
  535. package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +6 -0
  536. package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +58 -0
  537. package/skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json +70 -0
  538. package/skills/opendevbrowser-best-practices/assets/templates/canvas-feedback-eval.json +73 -0
  539. package/skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json +67 -0
  540. package/skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json +126 -0
  541. package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +57 -0
  542. package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +674 -0
  543. package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +12 -3
  544. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +107 -12
  545. package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +100 -0
  546. package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +83 -1
  547. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +365 -84
  548. package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +208 -0
  549. package/skills/opendevbrowser-continuity-ledger/SKILL.md +14 -1
  550. package/skills/opendevbrowser-continuity-ledger/scripts/validate-skill-assets.sh +61 -0
  551. package/skills/opendevbrowser-data-extraction/SKILL.md +6 -0
  552. package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +112 -0
  553. package/skills/opendevbrowser-design-agent/SKILL.md +275 -0
  554. package/skills/opendevbrowser-design-agent/artifacts/app-shell-and-state-wiring.md +84 -0
  555. package/skills/opendevbrowser-design-agent/artifacts/async-search-state-ownership.md +58 -0
  556. package/skills/opendevbrowser-design-agent/artifacts/component-pattern-index.md +130 -0
  557. package/skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md +157 -0
  558. package/skills/opendevbrowser-design-agent/artifacts/design-release-gate.md +40 -0
  559. package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +153 -0
  560. package/skills/opendevbrowser-design-agent/artifacts/existing-surface-adaptation.md +56 -0
  561. package/skills/opendevbrowser-design-agent/artifacts/external-pattern-synthesis.md +103 -0
  562. package/skills/opendevbrowser-design-agent/artifacts/frontend-evaluation-rubric.md +61 -0
  563. package/skills/opendevbrowser-design-agent/artifacts/implementation-anti-patterns.md +163 -0
  564. package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +68 -0
  565. package/skills/opendevbrowser-design-agent/artifacts/loading-and-feedback-surfaces.md +56 -0
  566. package/skills/opendevbrowser-design-agent/artifacts/opendevbrowser-ui-example-map.md +44 -0
  567. package/skills/opendevbrowser-design-agent/artifacts/performance-audit-playbook.md +70 -0
  568. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +81 -0
  569. package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +64 -0
  570. package/skills/opendevbrowser-design-agent/artifacts/state-ownership-matrix.md +36 -0
  571. package/skills/opendevbrowser-design-agent/artifacts/theming-and-token-ownership.md +43 -0
  572. package/skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json +58 -0
  573. package/skills/opendevbrowser-design-agent/assets/templates/design-audit-report.v1.md +34 -0
  574. package/skills/opendevbrowser-design-agent/assets/templates/design-brief.v1.md +40 -0
  575. package/skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json +226 -0
  576. package/skills/opendevbrowser-design-agent/assets/templates/design-release-gate.v1.json +35 -0
  577. package/skills/opendevbrowser-design-agent/assets/templates/design-review-checklist.json +57 -0
  578. package/skills/opendevbrowser-design-agent/assets/templates/real-surface-design-matrix.json +32 -0
  579. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +31 -0
  580. package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +171 -0
  581. package/skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh +56 -0
  582. package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +223 -0
  583. package/skills/opendevbrowser-form-testing/SKILL.md +19 -3
  584. package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +5 -4
  585. package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +2 -0
  586. package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +109 -0
  587. package/skills/opendevbrowser-login-automation/SKILL.md +21 -3
  588. package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +5 -4
  589. package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +5 -0
  590. package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +3 -2
  591. package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +17 -1
  592. package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +133 -0
  593. package/skills/opendevbrowser-product-presentation-asset/SKILL.md +23 -11
  594. package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +5 -3
  595. package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +2 -0
  596. package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +3 -2
  597. package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +5 -1
  598. package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +6 -2
  599. package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +5 -1
  600. package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +20 -7
  601. package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +39 -0
  602. package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +5 -1
  603. package/skills/opendevbrowser-research/SKILL.md +14 -6
  604. package/skills/opendevbrowser-research/scripts/render-output.sh +5 -1
  605. package/skills/opendevbrowser-research/scripts/run-research.sh +5 -1
  606. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +45 -0
  607. package/skills/opendevbrowser-research/scripts/write-artifacts.sh +5 -1
  608. package/skills/opendevbrowser-shopping/SKILL.md +20 -1
  609. package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +6 -2
  610. package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +5 -1
  611. package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +5 -1
  612. package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +54 -0
  613. package/dist/chunk-ST7CO5FA.js +0 -18668
  614. package/dist/chunk-ST7CO5FA.js.map +0 -1
  615. /package/dist/{chunk-7W3SPXIB.js.map → chunk-FUSXMW3G.js.map} +0 -0
  616. /package/dist/{macros-NUBRM44Y.js.map → macros-ND2M7LWU.js.map} +0 -0
@@ -1,13 +1,17 @@
1
1
  ---
2
2
  name: opendevbrowser-continuity-ledger
3
3
  description: This skill should be used when the user asks to "track continuity", "resume a long task", "maintain CONTINUITY.md", or run multi-step work that may span context compaction.
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  ---
6
6
 
7
7
  # OpenDevBrowser Continuity Ledger
8
8
 
9
9
  Use this guide to maintain compaction-safe project state in `CONTINUITY.md`.
10
10
 
11
+ Validation helper:
12
+
13
+ - `scripts/validate-skill-assets.sh`
14
+
11
15
  ## When to Use This Skill
12
16
 
13
17
  Use this skill when any of these are true:
@@ -68,6 +72,15 @@ Update `CONTINUITY.md` whenever one of these changes:
68
72
 
69
73
  Keep entries factual and concise. Avoid transcript-style logging.
70
74
 
75
+ ## Validator Contract
76
+
77
+ The validator must confirm all of these remain documented:
78
+
79
+ - `CONTINUITY.md` and `sub_continuity.md` ownership boundaries
80
+ - start-of-turn read and update protocol
81
+ - required ledger headings and `UNCONFIRMED` handling
82
+ - reply pattern with a short ledger snapshot before the main answer
83
+
71
84
  ## Handling Open Questions
72
85
 
73
86
  When uncertainty exists:
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ skill_file="$root/SKILL.md"
6
+
7
+ node - "$skill_file" <<'NODE'
8
+ const fs = require("node:fs");
9
+
10
+ const [skillFile] = process.argv.slice(2);
11
+ const content = fs.readFileSync(skillFile, "utf8");
12
+ const failures = [];
13
+
14
+ const requiredMarkers = [
15
+ "scripts/validate-skill-assets.sh",
16
+ "CONTINUITY.md",
17
+ "sub_continuity.md",
18
+ "Allow only the main orchestrator agent to edit `CONTINUITY.md`.",
19
+ "Run this sequence at the beginning of each turn:",
20
+ "Goal (incl. success criteria):",
21
+ "Constraints/Assumptions:",
22
+ "Key decisions:",
23
+ "State:",
24
+ "Open questions (UNCONFIRMED if needed):",
25
+ "Working set (files/ids/commands):",
26
+ "Key learnings: what worked; what didn't work, best approach identified for next time",
27
+ "UNCONFIRMED",
28
+ "Start response messages with a short ledger snapshot:"
29
+ ];
30
+
31
+ for (const marker of requiredMarkers) {
32
+ if (!content.includes(marker)) {
33
+ failures.push(`SKILL.md missing marker: ${marker}`);
34
+ }
35
+ }
36
+
37
+ const turnSteps = [
38
+ "1. Read `CONTINUITY.md`.",
39
+ "2. Read `sub_continuity.md`.",
40
+ "3. Update `CONTINUITY.md` to reflect the current goal, constraints, decisions, and execution state.",
41
+ "4. Proceed with implementation."
42
+ ];
43
+ for (const step of turnSteps) {
44
+ if (!content.includes(step)) {
45
+ failures.push(`Start-of-turn protocol missing step: ${step}`);
46
+ }
47
+ }
48
+
49
+ if (!/## Validator Contract[\s\S]*reply pattern/i.test(content)) {
50
+ failures.push("Validator contract section must document the reply pattern guarantee.");
51
+ }
52
+
53
+ if (failures.length > 0) {
54
+ for (const failure of failures) {
55
+ console.error(failure);
56
+ }
57
+ process.exit(1);
58
+ }
59
+
60
+ console.log("Continuity ledger skill assets validated.");
61
+ NODE
@@ -28,6 +28,12 @@ Use this skill to extract structured, auditable datasets from dynamic pages with
28
28
  ./skills/opendevbrowser-data-extraction/scripts/run-extraction-workflow.sh infinite-scroll
29
29
  ```
30
30
 
31
+ ## Supporting Surfaces
32
+
33
+ - Use browser replay (`screencast-start` / `screencast-stop`) when lazy loading, infinite scroll, or pagination drift needs time-based proof.
34
+ - Use desktop observation only for read-only evidence around sibling desktop surfaces; most extraction flows should stay browser-only.
35
+ - Use `--challenge-automation-mode off|browser|browser_with_helper` only for bounded browser-scoped computer use when provider challenges appear; stop before any desktop-control interpretation.
36
+
31
37
  ## Core Rules
32
38
 
33
39
  - Define schema before extraction.
@@ -15,6 +15,16 @@ required=(
15
15
  )
16
16
 
17
17
  status=0
18
+
19
+ require_marker() {
20
+ local label="$1"
21
+ local output="$2"
22
+ local marker="$3"
23
+ if [[ "$output" != *"$marker"* ]]; then
24
+ echo "$label missing marker: $marker" >&2
25
+ status=1
26
+ fi
27
+ }
18
28
  for rel in "${required[@]}"; do
19
29
  if [[ ! -f "$root/$rel" ]]; then
20
30
  echo "Missing required asset: $rel" >&2
@@ -42,6 +52,108 @@ for rel in assets/templates/extraction-schema.json assets/templates/pagination-s
42
52
  fi
43
53
  done
44
54
 
55
+ list_output="$("$root/scripts/run-extraction-workflow.sh" list-workflows)"
56
+ for workflow_name in \
57
+ table \
58
+ pagination \
59
+ infinite-scroll \
60
+ load-more \
61
+ anti-bot-pressure \
62
+ checkpoint-resume
63
+ do
64
+ require_marker "workflow list" "$list_output" "$workflow_name"
65
+ done
66
+
67
+ list_output="$("$root/scripts/run-extraction-workflow.sh" list)"
68
+ require_marker "list extraction workflow" "$list_output" "opendevbrowser_snapshot"
69
+ require_marker "list extraction workflow" "$list_output" "opendevbrowser_get_attr"
70
+
71
+ table_output="$("$root/scripts/run-extraction-workflow.sh" table)"
72
+ require_marker "table workflow" "$table_output" "opendevbrowser_dom_get_html"
73
+ require_marker "table workflow" "$table_output" "table-ref"
74
+
75
+ pagination_output="$("$root/scripts/run-extraction-workflow.sh" pagination)"
76
+ require_marker "pagination workflow" "$pagination_output" "opendevbrowser_click"
77
+ require_marker "pagination workflow" "$pagination_output" "networkidle"
78
+
79
+ infinite_scroll_output="$("$root/scripts/run-extraction-workflow.sh" infinite-scroll)"
80
+ require_marker "infinite-scroll workflow" "$infinite_scroll_output" "opendevbrowser_scroll"
81
+ require_marker "infinite-scroll workflow" "$infinite_scroll_output" "opendevbrowser_wait"
82
+
83
+ anti_bot_output="$("$root/scripts/run-extraction-workflow.sh" anti-bot-pressure)"
84
+ require_marker "anti-bot-pressure workflow" "$anti_bot_output" "403/429/challenge"
85
+ require_marker "anti-bot-pressure workflow" "$anti_bot_output" "Retry-After"
86
+
87
+ checkpoint_output="$("$root/scripts/run-extraction-workflow.sh" checkpoint-resume)"
88
+ require_marker "checkpoint-resume workflow" "$checkpoint_output" "pagination checkpoint"
89
+ require_marker "checkpoint-resume workflow" "$checkpoint_output" "opendevbrowser_snapshot"
90
+
91
+ if ! node - "$root" <<'NODE'
92
+ const fs = require("node:fs");
93
+ const path = require("node:path");
94
+
95
+ const [root] = process.argv.slice(2);
96
+ const failures = [];
97
+
98
+ const extractionSchema = JSON.parse(fs.readFileSync(path.join(root, "assets/templates/extraction-schema.json"), "utf8"));
99
+ const paginationState = JSON.parse(fs.readFileSync(path.join(root, "assets/templates/pagination-state.json"), "utf8"));
100
+ const qualityGates = JSON.parse(fs.readFileSync(path.join(root, "assets/templates/quality-gates.json"), "utf8"));
101
+
102
+ for (const field of ["title", "url"]) {
103
+ if (!Array.isArray(extractionSchema.required_fields) || !extractionSchema.required_fields.includes(field)) {
104
+ failures.push(`extraction-schema.json missing required field: ${field}`);
105
+ }
106
+ }
107
+ if (extractionSchema.field_types?.price !== "number") {
108
+ failures.push("extraction-schema.json must keep price typed as number.");
109
+ }
110
+ for (const field of ["price", "rating", "availability"]) {
111
+ if (!Array.isArray(extractionSchema.optional_fields) || !extractionSchema.optional_fields.includes(field)) {
112
+ failures.push(`extraction-schema.json missing optional field: ${field}`);
113
+ }
114
+ }
115
+
116
+ for (const key of ["checkpoint_token", "retry_after_seconds", "challenge_loops", "stopping_reason"]) {
117
+ if (!(key in paginationState)) {
118
+ failures.push(`pagination-state.json missing key: ${key}`);
119
+ }
120
+ }
121
+ if (paginationState.current_page !== 1) {
122
+ failures.push("pagination-state.json must start with current_page=1.");
123
+ }
124
+
125
+ for (const key of [
126
+ "max_required_null_rate",
127
+ "max_duplicate_rate",
128
+ "require_positive_page_delta",
129
+ "max_consecutive_empty_pages",
130
+ "max_consecutive_challenge_loops",
131
+ "max_retries_per_page",
132
+ "respect_retry_after",
133
+ "stop_on_repeated_anti_bot_signals"
134
+ ]) {
135
+ if (!(key in qualityGates)) {
136
+ failures.push(`quality-gates.json missing key: ${key}`);
137
+ }
138
+ }
139
+ if (qualityGates.max_retries_per_page !== 2) {
140
+ failures.push("quality-gates.json must cap retries per page at 2.");
141
+ }
142
+ if (qualityGates.respect_retry_after !== true || qualityGates.stop_on_repeated_anti_bot_signals !== true) {
143
+ failures.push("quality-gates.json must enforce Retry-After and repeated anti-bot stops.");
144
+ }
145
+
146
+ if (failures.length > 0) {
147
+ for (const failure of failures) {
148
+ console.error(failure);
149
+ }
150
+ process.exit(1);
151
+ }
152
+ NODE
153
+ then
154
+ status=1
155
+ fi
156
+
45
157
  if [[ $status -ne 0 ]]; then
46
158
  exit $status
47
159
  fi
@@ -0,0 +1,275 @@
1
+ ---
2
+ name: opendevbrowser-design-agent
3
+ description: This skill should be used when the user asks to design, redesign, audit, or implement frontend/UI work with OpenDevBrowser, screenshots, or the /canvas surface. It turns briefs and existing interfaces into contract-first, real-browser-validated design execution.
4
+ version: 1.1.0
5
+ ---
6
+
7
+ # Design Agent Skill
8
+
9
+ Use this skill for frontend work that must be visually strong, contract-first, and verified in a real browser instead of judged only from code.
10
+
11
+ ## Pack Contents
12
+
13
+ - `artifacts/design-workflows.md`
14
+ - `artifacts/design-contract-playbook.md`
15
+ - `artifacts/frontend-evaluation-rubric.md`
16
+ - `artifacts/external-pattern-synthesis.md`
17
+ - `artifacts/component-pattern-index.md`
18
+ - `artifacts/existing-surface-adaptation.md`
19
+ - `artifacts/app-shell-and-state-wiring.md`
20
+ - `artifacts/state-ownership-matrix.md`
21
+ - `artifacts/async-search-state-ownership.md`
22
+ - `artifacts/loading-and-feedback-surfaces.md`
23
+ - `artifacts/theming-and-token-ownership.md`
24
+ - `artifacts/isolated-preview-validation.md`
25
+ - `artifacts/performance-audit-playbook.md`
26
+ - `artifacts/scroll-reveal-surface-planning.md`
27
+ - `artifacts/research-harvest-workflow.md`
28
+ - `artifacts/design-release-gate.md`
29
+ - `artifacts/opendevbrowser-ui-example-map.md`
30
+ - `artifacts/implementation-anti-patterns.md`
31
+ - `assets/templates/design-brief.v1.md`
32
+ - `assets/templates/design-audit-report.v1.md`
33
+ - `assets/templates/design-contract.v1.json`
34
+ - `assets/templates/canvas-generation-plan.design.v1.json`
35
+ - `assets/templates/design-review-checklist.json`
36
+ - `assets/templates/real-surface-design-matrix.json`
37
+ - `assets/templates/reference-pattern-board.v1.json`
38
+ - `assets/templates/design-release-gate.v1.json`
39
+ - `scripts/design-workflow.sh`
40
+ - `scripts/extract-canvas-plan.sh`
41
+ - `scripts/validate-skill-assets.sh`
42
+ - Shared robustness matrix: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
43
+ - Shared canvas workflow baseline: `../opendevbrowser-best-practices/SKILL.md`
44
+
45
+ ## Fast Start
46
+
47
+ 1. Validate pack integrity.
48
+
49
+ ```bash
50
+ ./skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh
51
+ ```
52
+
53
+ 2. Print a workflow.
54
+
55
+ ```bash
56
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh contract-first
57
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh canvas-contract
58
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh real-surface-validation
59
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh research-harvest
60
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh release-gate
61
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh performance-audit
62
+ ```
63
+
64
+ 3. Convert a full design contract into a `/canvas`-ready generation plan.
65
+
66
+ ```bash
67
+ ./skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh \
68
+ skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json
69
+ ```
70
+
71
+ ## Supporting Surfaces
72
+
73
+ - Use browser replay (`screencast-start` / `screencast-stop`) during real-surface validation when motion, sequencing, or transition timing matters.
74
+ - Desktop observation stays read-only and is only for external window or OS-level evidence around the workflow; it is not a design-surface control lane.
75
+ - Browser-scoped computer use remains a challenge posture knob via `--challenge-automation-mode`, not a desktop-agent capability.
76
+
77
+ ## Core Rules
78
+
79
+ - Start with a design contract, not ad-hoc implementation.
80
+ - Build a reference pattern board before locking a new direction when external inspiration matters.
81
+ - Choose a component family from `artifacts/component-pattern-index.md` before inventing a new screen structure.
82
+ - Start from the closest shipped OpenDevBrowser example in `artifacts/opendevbrowser-ui-example-map.md` when the repo already has a related surface.
83
+ - Route repo-first redesigns through `artifacts/existing-surface-adaptation.md` before changing shells or component anatomy.
84
+ - Decide state ownership before writing component APIs, prompts, or `/canvas` patches.
85
+ - Declare app-shell, route, and overlay ownership with `artifacts/app-shell-and-state-wiring.md` before expanding navigation chrome or shared panels.
86
+ - Declare navigation and deep-link ownership in the contract before buttons, tabs, or search params start pushing route changes ad hoc.
87
+ - Declare async and search ownership with `artifacts/async-search-state-ownership.md` before wiring input-driven fetches, scopes, or background refresh.
88
+ - Keep one semantic token source with `artifacts/theming-and-token-ownership.md`; do not let leaf components invent raw colors, spacing, or type rules ad hoc.
89
+ - Define layout-preserving loading, empty/error recovery, and transient feedback surfaces with `artifacts/loading-and-feedback-surfaces.md` before polishing the happy path.
90
+ - For scan-heavy screens, declare list identity, lazy-loading, and progressive-reveal posture before polishing individual cards or rows.
91
+ - Keep one visual direction per task. Do not mix unrelated design languages.
92
+ - Prefer real content, realistic states, and explicit user journeys over placeholder copy.
93
+ - Preserve the repo's existing design system when one already exists. Only introduce a new direction when the brief or product gap justifies it.
94
+ - Treat `/canvas` governance as the strongest contract in the repo: read the handshake, respect `generationPlanRequirements`, and do not mutate before the plan is accepted.
95
+ - For non-canvas frontend work, still fill the same design-contract fields before coding so decisions stay consistent across code, preview, and docs.
96
+ - Use one owner for overlays, drawers, sheets, and detail panels; prefer item-backed state over boolean sprawl.
97
+ - If motion depends on scroll or viewport progress, define the driver and reduced-motion fallback before implementation.
98
+ - Use `artifacts/scroll-reveal-surface-planning.md` whenever the design depends on pinned sections, reveal stages, or viewport-driven sequencing.
99
+ - Validate new patterns in isolation or `/canvas` preview with `artifacts/isolated-preview-validation.md`, including deterministic fixtures and installed dependencies, before declaring the integrated screen finished.
100
+ - Verify default, hover, focus, empty, loading, success, and error states when they are relevant.
101
+ - Validate responsive behavior intentionally; do not assume desktop layouts scale down cleanly.
102
+ - If the UI feels slow or unstable, switch to `artifacts/performance-audit-playbook.md` and capture a baseline before changing structure.
103
+ - Use OpenDevBrowser CLI for real-browser validation, not just static reasoning.
104
+ - Record the final ship decision in `assets/templates/design-release-gate.v1.json`; if evidence is missing, the task is not done.
105
+ - Finish by updating docs, AGENTS guidance, and any skill-pack references affected by the new UI behavior.
106
+
107
+ ## Design Contract
108
+
109
+ The mandatory design contract lives in `assets/templates/design-contract.v1.json`.
110
+
111
+ Every design task should answer these blocks before implementation:
112
+
113
+ - `intent`
114
+ - `designLanguage`
115
+ - `contentModel`
116
+ - `navigationModel`
117
+ - `asyncModel`
118
+ - `layoutSystem`
119
+ - `typographySystem`
120
+ - `motionSystem`
121
+ - `performanceModel`
122
+ - `responsiveSystem`
123
+ - `accessibilityPolicy`
124
+ - `generationPlan`
125
+
126
+ ### `/canvas` Required Generation Plan Fields
127
+
128
+ The `generationPlan` block must include:
129
+
130
+ - `targetOutcome`
131
+ - `visualDirection`
132
+ - `layoutStrategy`
133
+ - `contentStrategy`
134
+ - `componentStrategy`
135
+ - `motionPosture`
136
+ - `responsivePosture`
137
+ - `accessibilityPosture`
138
+ - `validationTargets`
139
+
140
+ Use `scripts/extract-canvas-plan.sh` when the full contract already exists and only the `/canvas` payload is needed.
141
+
142
+ ## Recommended Workflow Modes
143
+
144
+ ### `contract-first`
145
+
146
+ Use when starting from a brief or existing product requirement.
147
+
148
+ - Fill `assets/templates/design-brief.v1.md`.
149
+ - Translate it into `assets/templates/design-contract.v1.json`.
150
+ - Check `artifacts/opendevbrowser-ui-example-map.md` and `artifacts/app-shell-and-state-wiring.md` before deciding the shell structure.
151
+ - If a nearby shipped surface exists, review `artifacts/existing-surface-adaptation.md` before changing shell or component structure.
152
+ - Review `artifacts/design-contract-playbook.md`.
153
+ - Implement only after the contract is coherent.
154
+
155
+ ### `research-harvest`
156
+
157
+ Use when a redesign needs external references or when the brief explicitly asks for competitive learning.
158
+
159
+ - Start with `artifacts/research-harvest-workflow.md`.
160
+ - Capture `3` to `5` live references with OpenDevBrowser.
161
+ - Record them in `assets/templates/reference-pattern-board.v1.json`.
162
+ - Turn the synthesis into contract deltas before implementation.
163
+
164
+ ### `screenshot-audit`
165
+
166
+ Use when starting from screenshots, mocks, or an existing page.
167
+
168
+ - Decompose the design into layout, type, spacing, state, motion, and accessibility decisions.
169
+ - Rewrite those observations into the same contract fields used for `/canvas`.
170
+ - Record issues and fixes in `assets/templates/design-audit-report.v1.md`.
171
+ - Use `artifacts/frontend-evaluation-rubric.md` before editing code.
172
+ - If the screen uses scroll-driven sequencing, add `artifacts/scroll-reveal-surface-planning.md` to the audit inputs.
173
+
174
+ ### `canvas-contract`
175
+
176
+ Use when the task should run through the design canvas.
177
+
178
+ - Start with `canvas.session.open` or `canvas.capabilities.get`.
179
+ - Read the handshake and confirm mutation is allowed.
180
+ - Fill the full design contract and extract the `generationPlan`.
181
+ - Submit `canvas.plan.set`, then mutate with `canvas.document.patch`.
182
+ - Validate extension-stage history controls against public `canvas.history.undo` and `canvas.history.redo`; design-tab clicks emit the internal `canvas_history_requested` event, but acceptance is still on the public command outcomes.
183
+ - When token work is in scope, validate collection or mode authoring, token value or alias edits, selected-node binding, and token usage inspection in the extension stage.
184
+ - If annotation send is part of the workflow, record whether the design tab returned `Delivered to agent` or `Stored only; fetch with annotate --stored`.
185
+ - Use `canvas.feedback.poll`, `canvas.preview.render`, `canvas.preview.refresh`, and `canvas.document.save` as the validation loop.
186
+
187
+ ### `real-surface-validation`
188
+
189
+ Use when design work must be proven on live surfaces.
190
+
191
+ - Validate the design on the actual browser surface with `snapshot`, `screenshot`, `debug-trace-snapshot`, and relevant `/canvas` preview commands.
192
+ - Run `artifacts/isolated-preview-validation.md` first when the component family or state matrix is still unstable.
193
+ - Run the same real task across supported modes when parity is part of the acceptance criteria.
194
+ - Record blockers explicitly instead of hand-waving them away.
195
+
196
+ ### `performance-audit`
197
+
198
+ Use when the design feels heavy, re-renders too often, or becomes unstable with realistic content.
199
+
200
+ - Capture the slow interaction and baseline with `artifacts/performance-audit-playbook.md`.
201
+ - Use `assets/templates/design-audit-report.v1.md` to record `issue / evidence / fix / validation`.
202
+ - Prefer ownership and structure fixes before memoization or micro-optimizations.
203
+ - If scroll-driven motion is part of the problem, validate the progress owner with `artifacts/scroll-reveal-surface-planning.md` before tuning timing.
204
+
205
+ ### `release-gate`
206
+
207
+ Use when the implementation looks done and the remaining work is proof and cleanup.
208
+
209
+ - Start with `artifacts/design-release-gate.md`.
210
+ - Fill `assets/templates/design-release-gate.v1.json`.
211
+ - Re-run the real-surface matrix and the design review checklist.
212
+ - Follow the canonical direct-run release evidence policy from `../opendevbrowser-best-practices/SKILL.md`; this pack does not redefine release-proof ownership.
213
+ - Fix remaining gaps before ship-audit.
214
+
215
+ ## Research-Backed Patterns
216
+
217
+ These patterns are summarized in `artifacts/external-pattern-synthesis.md` and should shape how the skill is applied:
218
+
219
+ - Specialized agents work best when scope, tooling, and examples are explicit.
220
+ - Frontend generation quality improves when prompts specify stack, layout intent, interaction states, and visual references instead of generic adjectives.
221
+ - Competitive harvest works best when each reference captures borrow and reject decisions instead of a mood board only.
222
+ - Large UI tasks should be broken into deliberate passes: contract, structure, implementation, then live validation.
223
+ - Real content and real workflows outperform placeholder-heavy prompts.
224
+ - Frontend design agents should own both aesthetics and verification, not just code output.
225
+ - Component libraries and screen families should be referenced intentionally instead of rediscovered from scratch on every task.
226
+ - Existing shipped surfaces should be treated as first-class adaptation inputs, not obstacles to work around.
227
+ - State ownership, overlay ownership, async ownership, and preview discipline need to be explicit or the implementation will drift even when the design language is strong.
228
+ - Route ownership should be explicit and typed: one owner translates deep links, tabs, URL params, and external entry points into screen state.
229
+ - Scroll-reveal work needs one declared progress owner and an explicit reduced-motion contract or it will regress across breakpoints.
230
+ - Debounced async search, layout-preserving placeholders, semantic token ownership, and non-reflow feedback surfaces should be decided in the contract instead of improvised during polish.
231
+ - Scan-heavy screens need stable item identity, lazy containers or progressive reveal where justified, and a declared scan unit before per-item polish or motion work.
232
+
233
+ ## Parallel Multitab Alignment
234
+
235
+ - Apply shared concurrency policy from `../opendevbrowser-best-practices/SKILL.md` ("Parallel Operations").
236
+ - Treat design validation as `session-per-worker`; do not alternate unrelated target streams inside one session.
237
+ - Re-check extension readiness before `/canvas` or relay-backed annotation steps after idle windows.
238
+
239
+ ## Robustness Coverage (Known-Issue Matrix)
240
+
241
+ Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
242
+
243
+ - `ISSUE-01`: stale refs and DOM churn during iterative UI validation
244
+ - `ISSUE-07`: MV3 extension state loss during `/canvas` and popup-driven design loops
245
+ - `ISSUE-08`: restricted origins and unsupported extension pages during design validation
246
+ - `ISSUE-12`: stale evidence or unsupported design claims in final deliverables
247
+
248
+ Reload discipline for unpacked-extension design work:
249
+
250
+ - After `npm run extension:build`, do not trust a live Chrome result until the unpacked extension is actually reloaded in Chrome.
251
+ - Stale MV3 runtime state can preserve old popup or `/canvas` design-tab behavior even when the repo bundle is already fixed.
252
+ - If design-tab commands still throw `restricted_url` on `chrome-extension://.../canvas.html`, treat that as an unpacked-extension reload problem first, then reconnect the extension and rerun the design workflow.
253
+
254
+ ## Commands
255
+
256
+ ```bash
257
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh contract-first
258
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh canvas-contract
259
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh screenshot-audit
260
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh real-surface-validation
261
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh research-harvest
262
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh performance-audit
263
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh release-gate
264
+ ./skills/opendevbrowser-design-agent/scripts/design-workflow.sh ship-audit
265
+ ./skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh ./tmp/design-contract.json
266
+ ```
267
+
268
+ ## References
269
+
270
+ - Anthropic Claude Code subagents best practices: https://docs.anthropic.com/en/docs/claude-code/sub-agents
271
+ - Anthropic Claude Code settings and agent ownership patterns: https://docs.anthropic.com/en/docs/claude-code/settings
272
+ - Vercel v0 prompting guide: https://v0.dev/docs/prompting/text
273
+ - Lovable prompting guide: https://docs.lovable.dev/prompting/prompting-best-practices
274
+ - Public frontend-designer subagent example: https://github.com/iannuttall/claude-agents
275
+ - Dimillian SwiftUI UI patterns: https://github.com/Dimillian/Skills/blob/main/swiftui-ui-patterns/SKILL.md
@@ -0,0 +1,84 @@
1
+ # App Shell And State Wiring
2
+
3
+ Use this guide when the design task affects navigation shells, route depth, search params, inspectors, drawers, or shared workspace state.
4
+
5
+ ## 1. Shell First
6
+
7
+ Before styling, decide which layer owns each responsibility:
8
+
9
+ - app shell: global navigation, workspace switchers, auth-scoped chrome, top-level keyboard shortcuts
10
+ - feature shell: feature tabs, inspector visibility, page-local actions, route-local loading states
11
+ - component: presentational toggles, disclosure state, hover or pressed affordances
12
+
13
+ If the same concern appears in two shells, pick one owner and document it in the design contract.
14
+
15
+ ## 2. Route Ownership
16
+
17
+ Use the URL for state that should survive refresh, deep links, or handoff:
18
+
19
+ - active tab that matters outside one component
20
+ - search query, sort, filters, pagination, selected record id
21
+ - editor sub-mode when the user expects shareable or recoverable state
22
+
23
+ Keep purely presentational toggles out of the URL:
24
+
25
+ - card expansion that does not change the task
26
+ - hover or preview affordances
27
+ - temporary compare or reveal states
28
+
29
+ Treat deep links as a translation contract, not a side effect:
30
+
31
+ - one route owner maps params into tabs, filters, selected records, or editor sub-modes
32
+ - one invalid-route fallback returns the user to a safe baseline when params are stale or incomplete
33
+ - row actions, tabs, and shortcut handlers should call the same route translator instead of assembling strings independently
34
+ - external entry points should resolve to the same canonical route model as in-app navigation
35
+
36
+ ## 3. Overlay Ownership
37
+
38
+ All overlays need one owner:
39
+
40
+ - route-owned when the overlay changes page meaning or selected entity
41
+ - feature-owned when the overlay is local to a workflow
42
+ - component-owned only for low-risk ephemeral UI
43
+
44
+ Prefer item-backed overlay state:
45
+
46
+ - `activeDrawerItemId`
47
+ - `commandPaletteMode`
48
+ - `confirmDeleteTarget`
49
+
50
+ Avoid parallel booleans for one overlay family.
51
+
52
+ ## 4. Shared Dependencies
53
+
54
+ Keep dependency boundaries explicit:
55
+
56
+ - data caches and async records belong in the data layer
57
+ - auth/session context belongs at the app or workspace shell
58
+ - feature controllers own only feature-local orchestration
59
+ - heavy editors or canvases should expose narrow mutation surfaces instead of leaking internal state across the tree
60
+
61
+ ## 5. Async And Error Boundaries
62
+
63
+ State which shell owns:
64
+
65
+ - initial loading
66
+ - incremental refresh
67
+ - empty results
68
+ - recoverable errors
69
+ - destructive retry actions
70
+
71
+ Do not split one async story across unrelated branches unless the user can act on them independently.
72
+
73
+ ## 6. Review Prompts
74
+
75
+ Before implementation, answer:
76
+
77
+ 1. Which state belongs in the URL?
78
+ 2. Which state belongs in a shared workspace store?
79
+ 3. Which overlay has the final authority to open or close?
80
+ 4. Which shell owns the primary action row?
81
+ 5. Which route owner resolves deep links, invalid params, and tab switching?
82
+ 6. Which branch is allowed to show the loading or error affordance?
83
+
84
+ If any answer is unclear, the shell wiring is not ready.
@@ -0,0 +1,58 @@
1
+ # Async And Search State Ownership
2
+
3
+ Use this when a screen loads remote data, reacts to changing input, or exposes search, scope, filter, or sort controls that can restart work.
4
+
5
+ ## 1. Choose The Trigger Model First
6
+
7
+ Name the async trigger before writing component structure:
8
+
9
+ - `load-on-enter`: initial screen load or detail fetch tied to first render
10
+ - `restart-on-input`: query, selection, scope, filter, or sort changes
11
+ - `long-lived-workflow`: work that must survive navigation, dismissal, or cross-screen reuse
12
+
13
+ If the trigger model is unclear, the UI will usually duplicate state or fire stale requests.
14
+
15
+ ## 2. One Owner Per Search Story
16
+
17
+ Decide where query and result ownership lives:
18
+
19
+ - local component or route state when search is specific to one surface
20
+ - URL or search params when the search should survive refresh, deep links, or handoff
21
+ - shared store or service only when multiple surfaces truly need the same search session
22
+
23
+ Keep result arrays, status, and restart logic close to the canonical owner or in the data layer. Do not mirror them into sibling components.
24
+
25
+ ## 3. Execution Rules
26
+
27
+ - Debounce user-driven restarts before they hit the network or expensive local filtering.
28
+ - Treat cancellation as normal for stale requests. Do not surface cancellation as a user-facing error.
29
+ - Clear back to a baseline or empty state when the query is empty unless the product explicitly needs default results.
30
+ - Apply the same restart policy to scope, filter, and sort changes when they mutate the same result set.
31
+ - Keep retry, caching, offline, and dedupe policy in a service once the rules exceed simple view ownership.
32
+
33
+ ## 4. Move Work Out Of The View When
34
+
35
+ - the work must survive dismissal or route changes
36
+ - multiple screens depend on the same in-flight state
37
+ - cache, retry, or optimistic rules become product-level policy
38
+ - the view is mostly coordinating app-shell or account lifecycle instead of rendering a local task
39
+
40
+ The view should still own presentation-state transitions even when execution moves into a service.
41
+
42
+ ## 5. Review Prompts
43
+
44
+ Before implementation, answer:
45
+
46
+ 1. What restarts the async work?
47
+ 2. Where do query, scope, and sort live?
48
+ 3. What should happen on an empty query?
49
+ 4. How are stale responses ignored or cancelled?
50
+ 5. At what point does the work move out of the view into a service or shared controller?
51
+
52
+ ## Failure Signals
53
+
54
+ - searches run for empty input with no product reason
55
+ - typeahead or scoped search has no debounce or cancellation story
56
+ - the same query state exists in the URL, local state, and a shared store
57
+ - result ownership is split across sibling components
58
+ - retry and cache rules leak into presentation components