wherdr 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/1gzTzt3j.js +9 -0
  3. package/.output/public/_nuxt/1gzTzt3j.js.br +0 -0
  4. package/.output/public/_nuxt/1gzTzt3j.js.gz +0 -0
  5. package/.output/public/_nuxt/AgentView.B6zltno1.css +1 -0
  6. package/.output/public/_nuxt/AgentView.B6zltno1.css.br +0 -0
  7. package/.output/public/_nuxt/AgentView.B6zltno1.css.gz +0 -0
  8. package/.output/public/_nuxt/{DN2uhp8-.js → Bd0Z2zzq.js} +1 -1
  9. package/.output/public/_nuxt/BdJIc1Xf.js +1 -0
  10. package/.output/public/_nuxt/BdJIc1Xf.js.br +0 -0
  11. package/.output/public/_nuxt/BdJIc1Xf.js.gz +0 -0
  12. package/.output/public/_nuxt/BrxmYJEM.js +1 -0
  13. package/.output/public/_nuxt/BrxmYJEM.js.br +0 -0
  14. package/.output/public/_nuxt/BrxmYJEM.js.gz +0 -0
  15. package/.output/public/_nuxt/C6fXOTRV.js +3 -0
  16. package/.output/public/_nuxt/C6fXOTRV.js.br +0 -0
  17. package/.output/public/_nuxt/C6fXOTRV.js.gz +0 -0
  18. package/.output/public/_nuxt/{BqaV2jLN.js → CXbAL3Yu.js} +43 -42
  19. package/.output/public/_nuxt/CXbAL3Yu.js.br +0 -0
  20. package/.output/public/_nuxt/CXbAL3Yu.js.gz +0 -0
  21. package/.output/public/_nuxt/Cf1C5Vkb.js +27 -0
  22. package/.output/public/_nuxt/Cf1C5Vkb.js.br +0 -0
  23. package/.output/public/_nuxt/Cf1C5Vkb.js.gz +0 -0
  24. package/.output/public/_nuxt/CgUSTIM1.js +1 -0
  25. package/.output/public/_nuxt/CgUSTIM1.js.br +0 -0
  26. package/.output/public/_nuxt/CgUSTIM1.js.gz +0 -0
  27. package/.output/public/_nuxt/CmTpxyM2.js +62 -0
  28. package/.output/public/_nuxt/CmTpxyM2.js.br +0 -0
  29. package/.output/public/_nuxt/CmTpxyM2.js.gz +0 -0
  30. package/.output/public/_nuxt/DMzjoyW_.js +1 -0
  31. package/.output/public/_nuxt/DMzjoyW_.js.br +0 -0
  32. package/.output/public/_nuxt/DMzjoyW_.js.gz +0 -0
  33. package/.output/public/_nuxt/{B2KlcBQ-.js → DOVT2Tt8.js} +1 -1
  34. package/.output/public/_nuxt/DOVT2Tt8.js.br +0 -0
  35. package/.output/public/_nuxt/{B2KlcBQ-.js.gz → DOVT2Tt8.js.gz} +0 -0
  36. package/.output/public/_nuxt/PjGJWal8.js +23 -0
  37. package/.output/public/_nuxt/PjGJWal8.js.br +0 -0
  38. package/.output/public/_nuxt/PjGJWal8.js.gz +0 -0
  39. package/.output/public/_nuxt/WPcHpWhL.js +31 -0
  40. package/.output/public/_nuxt/WPcHpWhL.js.br +0 -0
  41. package/.output/public/_nuxt/WPcHpWhL.js.gz +0 -0
  42. package/.output/public/_nuxt/{board.CeTYM1XN.css → board.CpFnG_Ho.css} +1 -1
  43. package/.output/public/_nuxt/board.CpFnG_Ho.css.br +0 -0
  44. package/.output/public/_nuxt/{board.CeTYM1XN.css.gz → board.CpFnG_Ho.css.gz} +0 -0
  45. package/.output/public/_nuxt/builds/latest.json +1 -1
  46. package/.output/public/_nuxt/builds/meta/d4aab09d-c1c4-4743-b8aa-35541006e853.json +1 -0
  47. package/.output/public/_nuxt/entry.DosS87kQ.css +2 -0
  48. package/.output/public/_nuxt/entry.DosS87kQ.css.br +0 -0
  49. package/.output/public/_nuxt/entry.DosS87kQ.css.gz +0 -0
  50. package/.output/public/_nuxt/nfsDZG4P.js +123 -0
  51. package/.output/public/_nuxt/nfsDZG4P.js.br +0 -0
  52. package/.output/public/_nuxt/nfsDZG4P.js.gz +0 -0
  53. package/.output/public/_nuxt/qODuBH5E.js +1 -0
  54. package/.output/public/_nuxt/{settings.Cdb21nNw.css → settings.ycbeituV.css} +1 -1
  55. package/.output/public/_nuxt/settings.ycbeituV.css.br +0 -0
  56. package/.output/public/_nuxt/settings.ycbeituV.css.gz +0 -0
  57. package/.output/public/_nuxt/tYQOxjM1.js +1 -0
  58. package/.output/public/_nuxt/tYQOxjM1.js.br +0 -0
  59. package/.output/public/_nuxt/tYQOxjM1.js.gz +0 -0
  60. package/.output/public/sw.js +1 -1
  61. package/.output/server/chunks/_/branding.mjs +1 -1
  62. package/.output/server/chunks/_/fileDownload.mjs +1 -1
  63. package/.output/server/chunks/_/machineOrder.mjs +1 -1
  64. package/.output/server/chunks/_/onboarding.mjs +1 -1
  65. package/.output/server/chunks/_/package.mjs +1 -1
  66. package/.output/server/chunks/_/plugins.mjs +1 -1
  67. package/.output/server/chunks/_/restart.mjs +1 -1
  68. package/.output/server/chunks/_/selfupdate.mjs +1 -1
  69. package/.output/server/chunks/_/splitShell.mjs +42 -0
  70. package/.output/server/chunks/_/updates.mjs +18 -5
  71. package/.output/server/chunks/_/worktrees.mjs +1 -1
  72. package/.output/server/chunks/_/ws.mjs +1 -1
  73. package/.output/server/chunks/nitro/nitro.mjs +6946 -6412
  74. package/.output/server/chunks/raw/check-leaks.mjs +1 -1
  75. package/.output/server/chunks/raw/ci-browser-plan.mjs +5 -0
  76. package/.output/server/chunks/raw/engine-changes.mjs +5 -0
  77. package/.output/server/chunks/raw/engine-result.mjs +7 -0
  78. package/.output/server/chunks/raw/install-claude-statusline.mjs +1 -1
  79. package/.output/server/chunks/raw/prerelease.mjs +1 -1
  80. package/.output/server/chunks/raw/test-affected.mjs +1 -1
  81. package/.output/server/chunks/routes/api/_..._.mjs +3 -3
  82. package/.output/server/chunks/routes/api/agents.post.mjs +3 -3
  83. package/.output/server/chunks/routes/api/ask-tab.post.mjs +3 -3
  84. package/.output/server/chunks/routes/api/attach.post.mjs +3 -3
  85. package/.output/server/chunks/routes/api/auth/disable.post.mjs +3 -3
  86. package/.output/server/chunks/routes/api/auth/lock-all.post.mjs +3 -3
  87. package/.output/server/chunks/routes/api/auth/lock.post.mjs +3 -3
  88. package/.output/server/chunks/routes/api/auth/login/options.post.mjs +3 -3
  89. package/.output/server/chunks/routes/api/auth/login/verify.post.mjs +3 -3
  90. package/.output/server/chunks/routes/api/auth/max-session.post.mjs +3 -3
  91. package/.output/server/chunks/routes/api/auth/register/options.post.mjs +3 -3
  92. package/.output/server/chunks/routes/api/auth/register/verify.post.mjs +3 -3
  93. package/.output/server/chunks/routes/api/auth/status.get.mjs +3 -3
  94. package/.output/server/chunks/routes/api/changes.get.mjs +3 -3
  95. package/.output/server/chunks/routes/api/chat/image.get.mjs +3 -3
  96. package/.output/server/chunks/routes/api/chat.get.mjs +3 -3
  97. package/.output/server/chunks/routes/api/choose.post.mjs +3 -3
  98. package/.output/server/chunks/routes/api/claude-setup.post.mjs +3 -3
  99. package/.output/server/chunks/routes/api/claude-statusline.post.mjs +3 -3
  100. package/.output/server/chunks/routes/api/clear-queued-input.post.mjs +3 -3
  101. package/.output/server/chunks/routes/api/close/status.get.mjs +3 -3
  102. package/.output/server/chunks/routes/api/close-preview.get.mjs +62 -0
  103. package/.output/server/chunks/routes/api/close.post.mjs +3 -3
  104. package/.output/server/chunks/routes/api/codex-update.post.mjs +4 -4
  105. package/.output/server/chunks/routes/api/commands.get.mjs +4 -4
  106. package/.output/server/chunks/routes/api/config.get.mjs +4 -4
  107. package/.output/server/chunks/routes/api/dirs.get.mjs +4 -4
  108. package/.output/server/chunks/routes/api/dismiss-stopped.post.mjs +4 -4
  109. package/.output/server/chunks/routes/api/dismiss.post.mjs +4 -4
  110. package/.output/server/chunks/routes/api/effort.post.mjs +4 -4
  111. package/.output/server/chunks/routes/api/efforts.get.mjs +4 -4
  112. package/.output/server/chunks/routes/api/file.post.mjs +4 -4
  113. package/.output/server/chunks/routes/api/files/download.get.mjs +3 -3
  114. package/.output/server/chunks/routes/api/files/download.head.mjs +3 -3
  115. package/.output/server/chunks/routes/api/files/read.get.mjs +3 -3
  116. package/.output/server/chunks/routes/api/files.get.mjs +3 -3
  117. package/.output/server/chunks/routes/api/health.get.mjs +3 -3
  118. package/.output/server/chunks/routes/api/input.post.mjs +4 -4
  119. package/.output/server/chunks/routes/api/interrupt.post.mjs +4 -4
  120. package/.output/server/chunks/routes/api/isgit.get.mjs +4 -4
  121. package/.output/server/chunks/routes/api/machine/awake.get.mjs +3 -3
  122. package/.output/server/chunks/routes/api/machine/awake.post.mjs +3 -3
  123. package/.output/server/chunks/routes/api/machine/order.get.mjs +3 -3
  124. package/.output/server/chunks/routes/api/machine/order.post.mjs +3 -3
  125. package/.output/server/chunks/routes/api/machine/reconnect.post.mjs +4 -4
  126. package/.output/server/chunks/routes/api/machine/rename.post.mjs +4 -4
  127. package/.output/server/chunks/routes/api/machine/status.post.mjs +4 -4
  128. package/.output/server/chunks/routes/api/menu-left.post.mjs +4 -4
  129. package/.output/server/chunks/routes/api/menu.post.mjs +4 -4
  130. package/.output/server/chunks/routes/api/model.post.mjs +4 -4
  131. package/.output/server/chunks/routes/api/models.get.mjs +4 -4
  132. package/.output/server/chunks/routes/api/nav.post.mjs +4 -4
  133. package/.output/server/chunks/routes/api/onboarding.get.mjs +3 -3
  134. package/.output/server/chunks/routes/api/onboarding.post.mjs +3 -3
  135. package/.output/server/chunks/routes/api/phone.get.mjs +4 -4
  136. package/.output/server/chunks/routes/api/phone.post.mjs +4 -4
  137. package/.output/server/chunks/routes/api/plugins/actions.get.mjs +3 -3
  138. package/.output/server/chunks/routes/api/plugins/invoke.post.mjs +3 -3
  139. package/.output/server/chunks/routes/api/plugins/projects.get.mjs +4 -4
  140. package/.output/server/chunks/routes/api/plugins/projects.post.mjs +4 -4
  141. package/.output/server/chunks/routes/api/prompt.post.mjs +4 -4
  142. package/.output/server/chunks/routes/api/push/devices.post.mjs +49 -0
  143. package/.output/server/chunks/routes/api/push/quiet.post.mjs +4 -4
  144. package/.output/server/chunks/routes/api/push/subscribe.post.mjs +4 -4
  145. package/.output/server/chunks/routes/api/push/test.post.mjs +4 -4
  146. package/.output/server/chunks/routes/api/push/unsubscribe.post.mjs +4 -4
  147. package/.output/server/chunks/routes/api/quotas.get.mjs +4 -4
  148. package/.output/server/chunks/routes/api/rename.post.mjs +3 -3
  149. package/.output/server/chunks/routes/api/requeue.post.mjs +4 -4
  150. package/.output/server/chunks/routes/api/restart.get.mjs +3 -3
  151. package/.output/server/chunks/routes/api/restart.post.mjs +3 -3
  152. package/.output/server/chunks/routes/api/reveal.post.mjs +4 -4
  153. package/.output/server/chunks/routes/api/screen-key.post.mjs +4 -4
  154. package/.output/server/chunks/routes/api/screen.get.mjs +4 -4
  155. package/.output/server/chunks/routes/api/search.get.mjs +58 -5
  156. package/.output/server/chunks/routes/api/seen.post.mjs +4 -4
  157. package/.output/server/chunks/routes/api/send-now.post.mjs +53 -0
  158. package/.output/server/chunks/routes/api/sessions.get.mjs +4 -4
  159. package/.output/server/chunks/routes/api/sessions.post.mjs +4 -4
  160. package/.output/server/chunks/routes/api/settings-tab.post.mjs +4 -4
  161. package/.output/server/chunks/routes/api/settings.get.mjs +4 -4
  162. package/.output/server/chunks/routes/api/settings.post.mjs +4 -4
  163. package/.output/server/chunks/routes/api/space.post.mjs +4 -4
  164. package/.output/server/chunks/routes/api/split-command.post.mjs +122 -0
  165. package/.output/server/chunks/routes/api/state.get.mjs +4 -4
  166. package/.output/server/chunks/routes/api/tasks/action.post.mjs +4 -4
  167. package/.output/server/chunks/routes/api/tasks/add.post.mjs +4 -4
  168. package/.output/server/chunks/routes/api/tasks/after.post.mjs +4 -4
  169. package/.output/server/chunks/routes/api/tasks/approve.post.mjs +4 -4
  170. package/.output/server/chunks/routes/api/tasks/archive-done.post.mjs +4 -4
  171. package/.output/server/chunks/routes/api/tasks/archived.get.mjs +4 -4
  172. package/.output/server/chunks/routes/api/tasks/autopilot.get.mjs +4 -4
  173. package/.output/server/chunks/routes/api/tasks/autopilot.post.mjs +4 -4
  174. package/.output/server/chunks/routes/api/tasks/board-settings.get.mjs +4 -4
  175. package/.output/server/chunks/routes/api/tasks/board-settings.post.mjs +4 -4
  176. package/.output/server/chunks/routes/api/tasks/coordinator.get.mjs +4 -4
  177. package/.output/server/chunks/routes/api/tasks/coordinator.post.mjs +4 -4
  178. package/.output/server/chunks/routes/api/tasks/describe.post.mjs +4 -4
  179. package/.output/server/chunks/routes/api/tasks/details.get.mjs +4 -4
  180. package/.output/server/chunks/routes/api/tasks/limit.post.mjs +4 -4
  181. package/.output/server/chunks/routes/api/tasks/links.get.mjs +4 -4
  182. package/.output/server/chunks/routes/api/tasks/models.get.mjs +4 -4
  183. package/.output/server/chunks/routes/api/tasks/pick.post.mjs +4 -4
  184. package/.output/server/chunks/routes/api/tasks/project.get.mjs +4 -4
  185. package/.output/server/chunks/routes/api/tasks/project.post.mjs +4 -4
  186. package/.output/server/chunks/routes/api/tasks/question.post.mjs +4 -4
  187. package/.output/server/chunks/routes/api/tasks/scheduled.get.mjs +4 -4
  188. package/.output/server/chunks/routes/api/tasks/settings.get.mjs +4 -4
  189. package/.output/server/chunks/routes/api/tasks/start.get.mjs +4 -4
  190. package/.output/server/chunks/routes/api/tasks/tell.post.mjs +4 -4
  191. package/.output/server/chunks/routes/api/tasks.get.mjs +4 -4
  192. package/.output/server/chunks/routes/api/unqueue.post.mjs +4 -4
  193. package/.output/server/chunks/routes/api/update/status.get.mjs +3 -3
  194. package/.output/server/chunks/routes/api/update.get.mjs +3 -3
  195. package/.output/server/chunks/routes/api/update.post.mjs +3 -3
  196. package/.output/server/chunks/routes/api/upload.post.mjs +4 -4
  197. package/.output/server/chunks/routes/api/worktrees/remove.post.mjs +3 -3
  198. package/.output/server/chunks/routes/api/worktrees.get.mjs +3 -3
  199. package/.output/server/chunks/routes/favicon.ico.get.mjs +3 -3
  200. package/.output/server/chunks/routes/icons/_name_.get.mjs +4 -4
  201. package/.output/server/chunks/routes/renderer.mjs +5 -5
  202. package/.output/server/chunks/routes/uploads/_...name_.get.mjs +4 -4
  203. package/.output/server/chunks/routes/ws/_..._.mjs +4 -4
  204. package/.output/server/chunks/routes/ws/events.mjs +8 -4
  205. package/.output/server/chunks/routes/ws/term.mjs +4 -4
  206. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  207. package/.output/server/index.mjs +4 -4
  208. package/.output/server/package.json +1 -1
  209. package/docs/README.md +5 -0
  210. package/docs/RELEASING.md +27 -5
  211. package/docs/board.md +8 -1
  212. package/docs/configuration.md +3 -4
  213. package/docs/conversation.md +2 -3
  214. package/docs/design.md +112 -0
  215. package/docs/devices.md +33 -0
  216. package/docs/herdr-projects-1x.md +28 -0
  217. package/docs/home.md +9 -0
  218. package/docs/installation.md +12 -0
  219. package/docs/notifications.md +7 -0
  220. package/docs/quotas.md +13 -1
  221. package/docs/release-notes-2.4.0.md +37 -0
  222. package/docs/release-notes-2.5.0.md +25 -0
  223. package/docs/security.md +7 -0
  224. package/package.json +1 -1
  225. package/skills/wherdr/SKILL.md +21 -0
  226. package/.output/public/_nuxt/30nuHmZs.js +0 -1
  227. package/.output/public/_nuxt/30nuHmZs.js.br +0 -0
  228. package/.output/public/_nuxt/30nuHmZs.js.gz +0 -0
  229. package/.output/public/_nuxt/AgentView.CfD2RWZY.css +0 -1
  230. package/.output/public/_nuxt/AgentView.CfD2RWZY.css.br +0 -0
  231. package/.output/public/_nuxt/AgentView.CfD2RWZY.css.gz +0 -0
  232. package/.output/public/_nuxt/B2KlcBQ-.js.br +0 -0
  233. package/.output/public/_nuxt/BF2qZ0lx.js +0 -31
  234. package/.output/public/_nuxt/BF2qZ0lx.js.br +0 -0
  235. package/.output/public/_nuxt/BF2qZ0lx.js.gz +0 -0
  236. package/.output/public/_nuxt/BU6Ihnb9.js +0 -62
  237. package/.output/public/_nuxt/BU6Ihnb9.js.br +0 -0
  238. package/.output/public/_nuxt/BU6Ihnb9.js.gz +0 -0
  239. package/.output/public/_nuxt/BmF5BXwf.js +0 -23
  240. package/.output/public/_nuxt/BmF5BXwf.js.br +0 -0
  241. package/.output/public/_nuxt/BmF5BXwf.js.gz +0 -0
  242. package/.output/public/_nuxt/BqaV2jLN.js.br +0 -0
  243. package/.output/public/_nuxt/BqaV2jLN.js.gz +0 -0
  244. package/.output/public/_nuxt/C_pXkozx.js +0 -1
  245. package/.output/public/_nuxt/C_pXkozx.js.br +0 -0
  246. package/.output/public/_nuxt/C_pXkozx.js.gz +0 -0
  247. package/.output/public/_nuxt/Cq1IlvFx.js +0 -3
  248. package/.output/public/_nuxt/Cq1IlvFx.js.br +0 -0
  249. package/.output/public/_nuxt/Cq1IlvFx.js.gz +0 -0
  250. package/.output/public/_nuxt/DNk1pHah.js +0 -1
  251. package/.output/public/_nuxt/DNk1pHah.js.br +0 -0
  252. package/.output/public/_nuxt/DNk1pHah.js.gz +0 -0
  253. package/.output/public/_nuxt/DcQrp3bD.js +0 -25
  254. package/.output/public/_nuxt/DcQrp3bD.js.br +0 -0
  255. package/.output/public/_nuxt/DcQrp3bD.js.gz +0 -0
  256. package/.output/public/_nuxt/I_R_EgeO.js +0 -1
  257. package/.output/public/_nuxt/L_vgVKcG.js +0 -105
  258. package/.output/public/_nuxt/L_vgVKcG.js.br +0 -0
  259. package/.output/public/_nuxt/L_vgVKcG.js.gz +0 -0
  260. package/.output/public/_nuxt/RI4B_b2M.js +0 -9
  261. package/.output/public/_nuxt/RI4B_b2M.js.br +0 -0
  262. package/.output/public/_nuxt/RI4B_b2M.js.gz +0 -0
  263. package/.output/public/_nuxt/Y-4S7Nuf.js +0 -1
  264. package/.output/public/_nuxt/Y-4S7Nuf.js.br +0 -0
  265. package/.output/public/_nuxt/Y-4S7Nuf.js.gz +0 -0
  266. package/.output/public/_nuxt/board.CeTYM1XN.css.br +0 -0
  267. package/.output/public/_nuxt/builds/meta/9240e8b5-8099-4108-9ff2-34b7f376d31a.json +0 -1
  268. package/.output/public/_nuxt/entry._gNxiS8l.css +0 -2
  269. package/.output/public/_nuxt/entry._gNxiS8l.css.br +0 -0
  270. package/.output/public/_nuxt/entry._gNxiS8l.css.gz +0 -0
  271. package/.output/public/_nuxt/settings.Cdb21nNw.css.br +0 -0
  272. package/.output/public/_nuxt/settings.Cdb21nNw.css.gz +0 -0
@@ -276,3 +276,31 @@ devices open keep working.
276
276
 
277
277
  Follow [Migrate a 1.x Docker install](migrate-from-1.x-docker.md): back up, stop the container,
278
278
  install the native service, check, and go back if needed. It is written so an AI agent can run it.
279
+
280
+ ## Shepherdr 2
281
+
282
+ Shepherdr 2.x retains the `herdr-projects` plugin id but uses a different CLI and
283
+ store. wherdr detects its version or manifest and reports **Shepherdr 2 detected:
284
+ wherdr’s Board does not support it**, rather than asking for an update. Agents,
285
+ terminal, files and machines remain available. wherdr never starts Shepherdr or
286
+ migrates its data automatically.
287
+
288
+ To return to the Board's supported herdr-projects 1.2.x release:
289
+
290
+ 1. Finish or stop ongoing work, then stop Shepherdr using its own controls.
291
+ 2. Back up both data stores (`~/.herdr-projects` and `~/.shepherdr`), worktrees and
292
+ Herdr configuration. Keep the takeover backup made by Shepherdr too.
293
+ 3. On the affected machine, reinstall the pinned release yourself:
294
+
295
+ ```sh
296
+ herdr plugin uninstall herdr-projects && herdr plugin install eliasstravik/herdr-projects --ref v1.2.21 --yes
297
+ ```
298
+
299
+ 4. Check Herdr configuration against the takeover backup; restore only the required
300
+ sidebar/configuration entries, preserving subsequent changes, then reload Herdr's
301
+ configuration and open the 1.x board. Refresh wherdr to check detection.
302
+
303
+ Reinstalling the plugin does not import Shepherdr tasks, undo its configuration or
304
+ network changes, or restore the state of ongoing agents. Keep the 2.x store and
305
+ backups; do not delete them to make the Board work. Avoid an unpinned plugin update:
306
+ it can replace 1.x with Shepherdr 2 again.
package/docs/home.md CHANGED
@@ -48,5 +48,14 @@
48
48
  first online machine), or the empty view. All always keeps the current conversation. Phones keep
49
49
  the list first and check the same rule when reopening a conversation through browser history.
50
50
  Explicit choices from search, cards or links open the chosen conversation. Unsent drafts stay saved.
51
+ - **Global search** (magnifier, ⌘K) finds agents, conversations and Board tasks: a task's name
52
+ (`WHR-12`), title or description, with its machine, project and state. Choosing a task opens it on the Board.
51
53
  - **Named Herdr sessions**, **quotas** (remaining Claude and Codex usage limits), **Herdr plugin
52
54
  actions** in the menus, **passkey lock** (Face ID, Touch ID, Windows Hello, Android…).
55
+
56
+ Settings › Appearance › Home screen › **Individual agents** expands standalone
57
+ agent spaces into one row per pane, using their pane or tab labels. Workspace
58
+ cards remain the default. Board tasks and repository headers keep their existing
59
+ grouping, and **Show terminals** still controls plain terminal rows. The setting
60
+ follows you across devices. Workspace drag reordering is disabled in this view;
61
+ switch it off to reorder spaces.
@@ -4,6 +4,13 @@
4
4
 
5
5
  [Documentation](README.md) · [Project](../README.md)
6
6
 
7
+ **Shepherdr 2.x is not supported by the Board**, even though its plugin id is still
8
+ `herdr-projects`. wherdr shows a compatibility message and a manual command pinned
9
+ to herdr-projects 1.2.21, without starting or migrating anything. Agents, terminal,
10
+ files and machines remain available. See [returning from Shepherdr 2](herdr-projects-1x.md#shepherdr-2)
11
+ for backups, reinstallation and configuration limitations. Do not use an unpinned
12
+ plugin update to restore Board compatibility.
13
+
7
14
  ## Requirements
8
15
 
9
16
  - **Herdr ≥ 0.9.1** running on the server (`herdr` or `herdr server`), with its Claude Code /
@@ -172,3 +179,8 @@ and the app says so. Every step is logged in `~/wherdr/update.log`.
172
179
  | `wherdr` command (npm) | `npm install -g wherdr@latest && wherdr restart` (npx: stop it, then `npx wherdr@latest`) |
173
180
  | `wherdr` command (Homebrew) | `brew upgrade wherdr`, then `brew services restart wherdr` |
174
181
  | From source | `git pull && npm ci && npm run build`, then restart wherdr |
182
+
183
+ Update notices also show the number of newer stable releases and up to four
184
+ additional version numbers besides the latest. This measures published releases,
185
+ not Git commits or whether a fork has merged develop. When GitHub returns a full
186
+ 100-entry page, the count is labelled as a lower bound.
@@ -52,6 +52,13 @@ The screen reads top to bottom:
52
52
  others). Each says how it differs from the default; removing one goes back to it.
53
53
  4. **This device's notifications** only asks this browser or phone for permission to
54
54
  show push notifications, and shows whether it is allowed, blocked or not asked yet.
55
+ Below it, every registered device is listed with the result of the last push sent to it:
56
+ delivered, expired (404/410: the browser dropped the subscription), rejected (401/403),
57
+ push service unreachable, or failed with its HTTP status. Each device keeps its own result,
58
+ so one device's success never hides another's failure. An expired device is no longer
59
+ tried; **Remove** forgets it (otherwise it goes away on its own after 30 days). Only the
60
+ time, the class and the status code are stored in `data/push.json`, never the push
61
+ service's response.
55
62
 
56
63
  A coordinator's exception is kept by its identity (machine, Herdr session, level and
57
64
  repo), not its pane: it still applies after `coordinator new` or a restart.
package/docs/quotas.md CHANGED
@@ -30,7 +30,13 @@ week, with reset times), for every online machine.
30
30
 
31
31
  - **Codex**: nothing to do, Codex writes its limits in its session files. Machines on different
32
32
  Codex accounts get one block each (told apart by a short hash of the account ID found in the
33
- session files; `~/.codex/auth.json` is never read).
33
+ session files; `~/.codex/auth.json` is never read). If a session has no recognized account
34
+ fingerprint, its reading stays under its own machine and is never merged with another
35
+ conversation or machine. A new conversation identifies an account switch even before it
36
+ logs limits; until a reading for that account is available, no Codex gauge is shown. Failed reads do not
37
+ reuse an older machine snapshot, and remembered weekly limits cannot cross account
38
+ identities. Without a known fingerprint, remembered weekly corrections are not reused,
39
+ even on the same machine. Session files are read from `~/.codex/sessions`.
34
40
  - **Claude Code** only gives them to its status line. On each machine, install wherdr's
35
41
  invisible status line (it displays nothing, and chains to your existing status line if you
36
42
  have one):
@@ -60,6 +66,12 @@ week, with reset times), for every online machine.
60
66
  with Claude to produce the new snapshot. The status line also requires `python3` in Claude’s
61
67
  `PATH` at runtime.
62
68
 
69
+ **API billing** (API key or Anthropic Console credits): Claude Code passes no rate limits, so
70
+ once a session has had an API response the status line keeps its snapshot without them, and
71
+ the machine reads **API usage (no quota)** in Settings and *Claude · API usage, no quota* on the
72
+ home screen (no gauge, no setup prompt); switching back to a subscription shows the gauges
73
+ again after the next exchange. Status lines installed before this need **Update**.
74
+
63
75
  **New machine**: run `sh scripts/install-claude-statusline.sh` on it once (or **Install** in
64
76
  Settings › Agents › Claude quotas), then send a message to any Claude agent there; its quotas
65
77
  appear on the home screen.
@@ -0,0 +1,37 @@
1
+ ## New
2
+
3
+ **Protection for users who upgraded to Shepherdr 2.** wherdr recognizes Shepherdr 2.x and displays **Shepherdr 2 detected: wherdr’s Board does not support it**, instead of saying the plugin is too old. It refuses to install or update herdr-projects over Shepherdr 2. Agents, terminal, files and machines remain available; wherdr does not start Shepherdr or migrate its data automatically.
4
+
5
+ To return manually to the supported herdr-projects 1.2.21, first finish or stop ongoing work, stop Shepherdr using its own controls, and back up both data stores, worktrees and Herdr configuration, including Shepherdr's takeover backup. On the affected machine, run:
6
+
7
+ ```sh
8
+ herdr plugin uninstall herdr-projects && herdr plugin install eliasstravik/herdr-projects --ref v1.2.21 --yes
9
+ ```
10
+
11
+ Follow the [Shepherdr 2 return checklist](https://github.com/afloury/wherdr/blob/v2.4.0/docs/herdr-projects-1x.md#shepherdr-2) to check and restore the required configuration entries before reloading Herdr and refreshing wherdr. Reinstalling does not import Shepherdr tasks, undo its configuration or network changes, or restore ongoing agents. Keep the 2.x store and backups, and avoid an unpinned plugin update that could install Shepherdr 2 again.
12
+
13
+ Global search (⌘K) now finds Board tasks by key, title or description and opens the selected task on the Board. Terminal Ctrl, Alt and Shift can be armed for the next key, and an optional individual-agent list shows standalone agents as separate rows. Thanks to [@followcat](https://github.com/followcat) for the modifier controls and individual-agent list.
14
+
15
+ ## Improved
16
+
17
+ Swipe between machine and group tabs on Home. Task panels combine conversation and terminal in one Agent tab, queued Claude messages can be sent immediately, and chat commands run in a verified wherdr-managed split terminal.
18
+
19
+ A device-local beta setting enables smooth terminal touch scrolling, while the existing behavior remains the default. Transcript notices can be dismissed, and update banners show how many newer stable releases are available. Thanks to [@followcat](https://github.com/followcat) for these contributions, including the original scrolling work.
20
+
21
+ Claude sessions billed through an API key or Console credits show API usage with no quota on Home and in Settings. Update the Claude status line on those machines to enable detection. A shared keyboard shortcut reference and refreshed narrated tutorials, including “wherdr in one minute”, help you find your way around.
22
+
23
+ ## Fixed
24
+
25
+ Connections recover after the device wakes without competing socket probes. Starting a command just after creating a split or tab no longer falsely reports that it did not start while the new pane is being discovered.
26
+
27
+ The WebGL terminal stays sharp and correctly sized on high-density screens, and long agent state lines fit phone headers. Wrapped task titles keep their height, and Autopilot messages show their copy button only on hover.
28
+
29
+ Codex self-updates are detected with Ubuntu shell prompts, status reset information remains visible alongside footer warnings, and passive reads leave shell history alone. A folder used as a transcript path returns “no conversation”. omp 18.14 tool approval cards are recognized again, including grants and expanded details, while older dialogs remain supported.
30
+
31
+ Settings navigation tests wait for phone history transitions before teardown. Tutorial fonts are pinned and checksum-verified, CI actions use Node 24 runtimes on Ubuntu 24.04, and contributors share one interface design reference.
32
+
33
+ ## Update
34
+
35
+ No migration is required from 2.3.0; existing tasks and settings are kept. Node.js 22 or newer and Herdr 0.9.1 or newer are still required. The Board supports herdr-projects 1.2.x, not Shepherdr 2.x; use the checklist above if you already upgraded that plugin. Users upgrading wherdr from 1.x should follow the [2.0 migration guide](https://github.com/afloury/wherdr/blob/v2.4.0/docs/herdr-projects-1x.md).
36
+
37
+ [Full changelog](https://github.com/afloury/wherdr/blob/v2.4.0/CHANGELOG.md)
@@ -0,0 +1,25 @@
1
+ ## New
2
+
3
+ You can choose the order of the phone key bar in Settings › Terminal, with a preview and a reset to the default. The order is saved on the device and shared by Conversation and Terminal. Thanks to [@followcat](https://github.com/followcat) for the idea.
4
+
5
+ Notification settings show each registered device's last push delivery result and let you remove expired registrations.
6
+
7
+ ## Improved
8
+
9
+ The interface is always in English, including on browsers previously set to French. Messages written by you and your agents keep their original language. The phone header chevron has a full-size button box, and desktop view switching uses a single action button.
10
+
11
+ The agent skill explains how to share verified links that users can open. Focused unit and component coverage replaces repeated browser cases, CI shards phone tests, and full develop coverage runs nightly. Develop prereleases are built only from commits that passed CI.
12
+
13
+ ## Fixed
14
+
15
+ After a server restart, machines recover independently and existing panes remain visible until their machine has been read or confirmed offline. Codex quota readings stay with the correct account, and Home WORKING counters follow Board groups without counting remote tasks twice.
16
+
17
+ On iPhone and iPad, tapping the terminal keeps the keyboard closed; the message field and keyboard button still open it. Phone navigation returns from tasks to the Board, wherdr links reuse the existing window, and closing a terminal no longer falsely reports that its process stopped.
18
+
19
+ Conversation images can load from other machines and ports on the same tailnet, with an explanation and an open link when loading fails. Codex photo placeholders no longer appear as message text, older explicitly resumed conversations can be found, and current Codex sessions no longer show a false restart-to-update notice. omp provider errors now appear in the conversation, and coordinators can be found by conversation after their pane closes.
20
+
21
+ ## Update
22
+
23
+ No migration is required from 2.4.0. Node.js 22 or newer and Herdr 0.9.1 or newer remain required. The Board continues to support herdr-projects 1.2.x, not Shepherdr 2.x.
24
+
25
+ [Full changelog](https://github.com/afloury/wherdr/blob/v2.5.0/CHANGELOG.md)
package/docs/security.md CHANGED
@@ -44,6 +44,13 @@ wherdr drives Herdr, so **it can run anything as your user**.
44
44
  - A strict Content Security Policy limits scripts to the app's own origin and hashed inline
45
45
  scripts, and connections to that origin and its WebSockets. It also blocks embedded objects
46
46
  and framing.
47
+ - Images in agent replies load from the app's own origin (`data:` and `blob:` included) and,
48
+ over HTTPS only, from any machine and port of the tailnet wherdr is reached on
49
+ (`https://*.<tailnet>.ts.net:*`). That tailnet is read from Tailscale on the machine, from
50
+ `APP_URL`, from `HERDR_WEB_ALLOWED_HOSTS` and from what `tailscale serve` publishes, never from
51
+ a request; a name outside `*.ts.net` adds nothing. Any other image (public sites, another
52
+ tailnet, plain HTTP, Tailscale IP addresses) is refused by the browser and shown as a note with
53
+ a link to open it in a new tab.
47
54
  - wherdr never changes your agents' global settings: model and effort changes are for the
48
55
  current session only.
49
56
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wherdr",
3
- "version": "2.3.0",
3
+ "version": "2.5.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "Unofficial mobile web client (PWA) to drive the coding agents running in Herdr",
@@ -30,6 +30,27 @@ So a message from the Board is the user's own words: answer and act on it as on
30
30
  from them. Report your progress with `herdr-projects report` as usual: the Board shows the
31
31
  state, the message and the progress you report, the pull request and the review.
32
32
 
33
+ ## Links
34
+
35
+ - **Files:** verify that the file exists and is readable on the agent's machine, then
36
+ write its absolute path in inline code (backticks), optionally with `:line` or
37
+ `:line:column` (these suffixes are stripped, not navigated to). Chat recognizes
38
+ paths; Markdown file links do not use its file viewer. `~/` means that machine's
39
+ home; relative paths use the pane's working folder, falling back to home when
40
+ unknown or outside home. Never use a path relative to another folder (such as a
41
+ vault). The file and its symlink target must stay inside that machine's home.
42
+ Terminal links open only HTTP(S) URLs, not file paths.
43
+ - **Web:** give an absolute HTTPS URL reachable from the user's phone and other
44
+ machines (for example through their tailnet). Never offer localhost, loopback
45
+ addresses (including `127.0.0.1`) or relative URLs as portable links. Follow
46
+ redirects and verify a successful HTTP status and the final destination; a local
47
+ response alone does not prove access from another device.
48
+ - **Images:** prefer displaying them directly in chat (web images must come from
49
+ wherdr's own origin or an HTTPS tailnet address). For an image URL, verify
50
+ that the final response serves the image itself with an `image/*` Content-Type,
51
+ rather than an HTML page.
52
+ - If no verified link is available, say so clearly instead of offering a broken one.
53
+
33
54
  ## What the Board does not do
34
55
 
35
56
  No task is added, delegated, stopped, archived or cleared from wherdr: the user asks the
@@ -1 +0,0 @@
1
- import{Ot as e,P as t,gr as n,j as r}from"./C25ROUa9.js";import{t as i}from"./BDNMzG2s.js";import{lt as a}from"#entry";var o={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},s={class:`max-w-520px text-center`},c=[`textContent`],l=[`textContent`],u=[`textContent`],d=i({__name:`error-500`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:500},statusText:{type:String,default:`Internal server error`},description:{type:String,default:`This page is temporarily unavailable.`},refresh:{type:String,default:`Refresh this page`}},setup(i){let d=i;return a({title:`${d.status} - ${d.statusText} | ${d.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;let r=function(e){let r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),r.credentials="use-credentials"===e.crossOrigin?"include":"anonymous"===e.crossOrigin?"omit":"same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }`}]}),(a,d)=>(e(),t(`div`,o,[r(`div`,s,[r(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:n(i.status)},null,8,c),r(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:n(i.statusText)},null,8,l),r(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:n(i.description)},null,8,u)])]))}},[[`__scopeId`,`data-v-f91406c7`]]);export{d as default};
Binary file
Binary file
@@ -1 +0,0 @@
1
- .header-menu[data-v-562a5bfa]{display:contents}.grid-backdrop[data-v-a290ab6b]{z-index:-1;pointer-events:none;contain:strict;overflow:hidden}.gbd-dots[data-v-a290ab6b],.grid-backdrop[data-v-a290ab6b]{position:absolute;inset:0}.gbd-dots[data-v-a290ab6b]{background-image:radial-gradient(circle at 32px 32px,color-mix(in srgb,var(--muted) 60%,transparent) 1.4px,transparent 2.2px),linear-gradient(color-mix(in srgb,var(--line) 30%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--line) 30%,transparent) 1px,transparent 1px),radial-gradient(ellipse 50% 40% at 50% 25%,color-mix(in srgb,var(--accent) 6%,transparent),transparent 75%);background-position:calc(50% - 32px) -32px,top,top,0 0;background-size:64px 64px,64px 64px,64px 64px,100% 100%;-webkit-mask:radial-gradient(85% 75% at 50% 35%,#000 25%,#00000073 60%,#0000 88%);mask:radial-gradient(85% 75% at 50% 35%,#000 25%,#00000073 60%,#0000 88%)}.gbd-packets[data-v-a290ab6b]{position:absolute;inset:0;-webkit-mask:radial-gradient(70% 60% at 50% 30%,#000 30%,#0000 75%);mask:radial-gradient(70% 60% at 50% 30%,#000 30%,#0000 75%)}.gbd-packets[data-v-a290ab6b] .pkt{will-change:transform,opacity;--c:var(--accent);display:block;position:absolute}.gbd-packets[data-v-a290ab6b] .pkt.alt{--c:var(--lav)}.gbd-packets[data-v-a290ab6b] .pkt.h{background:linear-gradient(90deg,transparent,var(--c));width:56px;height:1px;margin-left:-56px}.gbd-packets[data-v-a290ab6b] .pkt.h.rev{background:linear-gradient(270deg,transparent,var(--c));margin-left:0}.gbd-packets[data-v-a290ab6b] .pkt.h:after{content:"";background:var(--c);width:6px;height:5px;box-shadow:0 0 10px var(--c);position:absolute;top:-2px;right:-3px}.gbd-packets[data-v-a290ab6b] .pkt.h.rev:after{left:-3px;right:auto}.gbd-packets[data-v-a290ab6b] .pkt.v{background:linear-gradient(180deg,transparent,var(--c));width:1px;height:56px;margin-top:-56px}.gbd-packets[data-v-a290ab6b] .pkt.v.rev{background:linear-gradient(0deg,transparent,var(--c));margin-top:0}.gbd-packets[data-v-a290ab6b] .pkt.v:after{content:"";background:var(--c);width:5px;height:6px;box-shadow:0 0 10px var(--c);position:absolute;bottom:-3px;left:-2px}.gbd-packets[data-v-a290ab6b] .pkt.v.rev:after{top:-3px;bottom:auto}.gbd-vignette[data-v-a290ab6b]{background:linear-gradient(to right,var(--bg),transparent 14%,transparent 86%,var(--bg)),linear-gradient(to bottom,var(--bg),transparent 18%,transparent 70%,var(--bg));position:absolute;inset:0}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm .xterm-cursor-pointer,.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::-moz-selection{color:#0000}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.usage-limit-card[data-v-8c0c9595]{border-top:1px solid var(--line);white-space:normal;text-align:left;color:var(--ochre);flex-wrap:wrap;justify-content:flex-start;padding-top:8px}.restart-text small[data-v-8c0c9595]{color:var(--muted);display:block}
Binary file