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
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, P as PANE_RE, H as HerdrError, bq as retryQueued } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, P as PANE_RE, H as HerdrError, bu as retryQueued } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -18,16 +18,16 @@ import 'node:buffer';
18
18
  import 'node:fs';
19
19
  import 'node:path';
20
20
  import 'node:os';
21
- import 'node:net';
22
21
  import 'node:child_process';
23
22
  import 'node:dns';
24
23
  import 'node:util';
24
+ import 'qrcode-terminal/vendor/QRCode/index.js';
25
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
25
26
  import 'web-push';
27
+ import 'node:net';
26
28
  import 'node:string_decoder';
27
29
  import 'node:fs/promises';
28
30
  import 'node:readline';
29
- import 'qrcode-terminal/vendor/QRCode/index.js';
30
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
31
31
  import 'node:url';
32
32
  import 'node:zlib';
33
33
  import '@simplewebauthn/server';
@@ -18,16 +18,16 @@ import 'node:buffer';
18
18
  import 'node:fs';
19
19
  import 'node:path';
20
20
  import 'node:os';
21
- import 'node:net';
22
21
  import 'node:child_process';
23
22
  import 'node:dns';
24
23
  import 'node:util';
24
+ import 'qrcode-terminal/vendor/QRCode/index.js';
25
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
25
26
  import 'web-push';
27
+ import 'node:net';
26
28
  import 'node:string_decoder';
27
29
  import 'node:fs/promises';
28
30
  import 'node:readline';
29
- import 'qrcode-terminal/vendor/QRCode/index.js';
30
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
31
31
  import 'node:url';
32
32
  import 'node:zlib';
33
33
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { H as HerdrError, br as PANE_RE, f as findPane, $ as getMachine, a_ as splitId, t as fmt, aa as log, a as defineApi } from '../../nitro/nitro.mjs';
1
+ import { H as HerdrError, bv as PANE_RE, f as findPane, $ as getMachine, b0 as splitId, t as fmt, ad as log, a as defineApi } from '../../nitro/nitro.mjs';
2
2
  import { execFile } from 'node:child_process';
3
3
  import { r as resolveAgentPath, a as runnablePath } from '../../_/filePaths.mjs';
4
4
  import 'node:http';
@@ -19,15 +19,15 @@ import 'node:buffer';
19
19
  import 'node:fs';
20
20
  import 'node:path';
21
21
  import 'node:os';
22
- import 'node:net';
23
22
  import 'node:dns';
24
23
  import 'node:util';
24
+ import 'qrcode-terminal/vendor/QRCode/index.js';
25
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
25
26
  import 'web-push';
27
+ import 'node:net';
26
28
  import 'node:string_decoder';
27
29
  import 'node:fs/promises';
28
30
  import 'node:readline';
29
- import 'qrcode-terminal/vendor/QRCode/index.js';
30
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
31
31
  import 'node:url';
32
32
  import 'node:zlib';
33
33
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, P as PANE_RE, H as HerdrError, h as herdr, bs as parseWaitScreen, K as parseChoices, bt as waitIdentity, g as choicesCache, p as poll } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, P as PANE_RE, H as HerdrError, h as herdr, bw as parseWaitScreen, K as parseChoices, bx as waitIdentity, g as choicesCache, p as poll } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, i as getQuery, P as PANE_RE, H as HerdrError, h as herdr, bu as settingsTabs, bv as tabsOfRow, f as findPane, bw as classifyScreen, bs as parseWaitScreen, bx as parseMenu, b as screenChoices } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, i as getQuery, P as PANE_RE, H as HerdrError, h as herdr, by as settingsTabs, bz as tabsOfRow, f as findPane, bA as classifyScreen, bw as parseWaitScreen, bB as parseMenu, b as screenChoices } from '../../nitro/nitro.mjs';
2
2
  import { a as activeTab } from '../../_/settingstabs.mjs';
3
3
  import 'node:http';
4
4
  import 'node:https';
@@ -18,16 +18,16 @@ import 'node:buffer';
18
18
  import 'node:fs';
19
19
  import 'node:path';
20
20
  import 'node:os';
21
- import 'node:net';
22
21
  import 'node:child_process';
23
22
  import 'node:dns';
24
23
  import 'node:util';
24
+ import 'qrcode-terminal/vendor/QRCode/index.js';
25
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
25
26
  import 'web-push';
27
+ import 'node:net';
26
28
  import 'node:string_decoder';
27
29
  import 'node:fs/promises';
28
30
  import 'node:readline';
29
- import 'qrcode-terminal/vendor/QRCode/index.js';
30
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
31
31
  import 'node:url';
32
32
  import 'node:zlib';
33
33
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, i as getQuery, a$ as getState, by as hasTranscript, q as machineOfPane, bz as SEARCH_DEADLINE_MS, bA as SEARCH_MAX_RESULTS, bB as spaceTitle } from '../../nitro/nitro.mjs';
1
+ import { bC as excerpt, bD as taskKey, bE as foldSearch, bF as matchAt, a as defineApi, i as getQuery, bG as searchableBoards, b1 as getState, bH as hasTranscript, q as machineOfPane, bI as SEARCH_DEADLINE_MS, bJ as SEARCH_MAX_RESULTS, bK as spaceTitle } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,23 +17,76 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
33
33
 
34
+ const TASK_SEARCH_MAX = 12;
35
+ const compact = (s) => foldSearch(s).replace(/[\s_-]+/g, "");
36
+ const WORD = /[\p{L}\p{N}]/u;
37
+ function wordStart(text, q) {
38
+ for (let i = text.indexOf(q); i >= 0; i = text.indexOf(q, i + 1)) if (i === 0 || !WORD.test(text[i - 1])) return true;
39
+ return false;
40
+ }
41
+ function taskScore(t, query) {
42
+ const q = foldSearch(query.trim());
43
+ if (!q) return null;
44
+ const key = taskKey(t.row.id, t.row.repoKey);
45
+ const names = [key, t.row.id, `#${t.row.n}`].map(compact);
46
+ const cq = compact(q);
47
+ if (names.includes(cq)) return { score: 0, field: "id", at: 0 };
48
+ if (/\d/.test(cq) && (cq === String(t.row.n) || names.some((n) => n.startsWith(cq)))) return { score: 1, field: "id", at: 0 };
49
+ const title = foldSearch(t.row.title);
50
+ const at = title.indexOf(q);
51
+ if (at === 0) return { score: 2, field: "title", at };
52
+ if (at > 0) return { score: wordStart(title, q) ? 3 : 4, field: "title", at };
53
+ const d = matchAt(t.description, query.trim());
54
+ return d < 0 ? null : { score: 5, field: "description", at: d };
55
+ }
56
+ const GROUP_RANK = { needs: 0, ready: 0, working: 0, todo: 0, done: 1 };
57
+ function searchTasks(boards, query, max = TASK_SEARCH_MAX) {
58
+ const found = [];
59
+ for (const b of boards) {
60
+ for (const t of b.tasks) {
61
+ if (t.row.archived) continue;
62
+ const m = taskScore(t, query);
63
+ if (!m) continue;
64
+ found.push({
65
+ score: m.score,
66
+ n: t.row.n,
67
+ hit: {
68
+ machine: b.machine,
69
+ id: t.row.id,
70
+ key: taskKey(t.row.id, t.row.repoKey),
71
+ repo: t.row.repo,
72
+ title: t.row.title,
73
+ stage: t.row.stage,
74
+ group: t.row.group,
75
+ field: m.field,
76
+ ...m.field === "description" ? { excerpt: excerpt(t.description, m.at, 100, query.trim()) } : {}
77
+ }
78
+ });
79
+ }
80
+ }
81
+ found.sort((a, b) => a.score - b.score || GROUP_RANK[a.hit.group] - GROUP_RANK[b.hit.group] || b.n - a.n);
82
+ return { hits: found.slice(0, max).map((f) => f.hit), limited: found.length > max };
83
+ }
84
+
85
+ const TASKS_DEADLINE_MS = 1500;
34
86
  const search_get = defineApi(async (event) => {
35
87
  const query = String(getQuery(event).q || "").trim().slice(0, 100);
36
88
  if (query.length < 2) return { hits: [], limited: false };
89
+ const tasks = searchableBoards(TASKS_DEADLINE_MS).then((boards) => searchTasks(boards, query).hits, () => []);
37
90
  const panes = getState().panes.filter((p) => {
38
91
  var _a;
39
92
  return hasTranscript(p.agent) && (!machineOfPane(p.id) || ((_a = machineOfPane(p.id)) == null ? void 0 : _a.status) === "online");
@@ -76,7 +129,7 @@ const search_get = defineApi(async (event) => {
76
129
  await Promise.all([worker(), worker(), worker()]);
77
130
  if (next < panes.length) limited = true;
78
131
  hits.sort((a, b) => Date.parse(b.ts || "") - Date.parse(a.ts || ""));
79
- return { hits, limited };
132
+ return { hits, limited, tasks: await tasks };
80
133
  });
81
134
 
82
135
  export { search_get as default };
@@ -1,4 +1,4 @@
1
- import { a as defineApi, P as PANE_RE, H as HerdrError, bC as markSeen } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, P as PANE_RE, H as HerdrError, bL as markSeen } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -0,0 +1,53 @@
1
+ import { a as defineApi, P as PANE_RE, H as HerdrError, M as withPaneLock, f as findPane, h as herdr, bM as parseClaudeScreen, p as poll } from '../../nitro/nitro.mjs';
2
+ import 'node:http';
3
+ import 'node:https';
4
+ import 'node:crypto';
5
+ import 'stream';
6
+ import 'events';
7
+ import 'http';
8
+ import 'crypto';
9
+ import 'buffer';
10
+ import 'zlib';
11
+ import 'https';
12
+ import 'net';
13
+ import 'tls';
14
+ import 'url';
15
+ import 'node:events';
16
+ import 'node:buffer';
17
+ import 'node:fs';
18
+ import 'node:path';
19
+ import 'node:os';
20
+ import 'node:child_process';
21
+ import 'node:dns';
22
+ import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
25
+ import 'web-push';
26
+ import 'node:net';
27
+ import 'node:string_decoder';
28
+ import 'node:fs/promises';
29
+ import 'node:readline';
30
+ import 'node:url';
31
+ import 'node:zlib';
32
+ import '@simplewebauthn/server';
33
+
34
+ const sendNow_post = defineApi(async (_event, b) => {
35
+ if (!PANE_RE.test(b.pane_id || "")) throw new HerdrError("bad_pane", "Invalid pane");
36
+ await withPaneLock(b.pane_id, async () => {
37
+ var _a, _b;
38
+ const p = findPane(b.pane_id);
39
+ if (!p || p.agent !== "claude" || p.status !== "working" || p.stopped || p.leaving) {
40
+ throw new HerdrError("stale", "The screen has changed \u2014 check the current screen.");
41
+ }
42
+ const r = await herdr("pane.read", { pane_id: b.pane_id, source: "detection" }, 4e3);
43
+ if (!((_b = parseClaudeScreen((_a = r.read) == null ? void 0 : _a.text)) == null ? void 0 : _b.sendNow)) {
44
+ throw new HerdrError("stale", "The screen has changed \u2014 check the current screen.");
45
+ }
46
+ await herdr("pane.send_input", { pane_id: b.pane_id, keys: ["ctrl+enter"] });
47
+ });
48
+ setTimeout(poll, 0);
49
+ return { ok: true };
50
+ });
51
+
52
+ export { sendNow_post as default };
53
+ //# sourceMappingURL=send-now.post.mjs.map
@@ -1,4 +1,4 @@
1
- import { a as defineApi, i as getQuery, bD as listSessions } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, i as getQuery, bN as listSessions } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, H as HerdrError, bE as openSession } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, H as HerdrError, bO as openSession } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, P as PANE_RE, H as HerdrError, f as findPane, h as herdr, bu as settingsTabs, bv as tabsOfRow, bF as settingsFocus, X as sleep, g as choicesCache } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, P as PANE_RE, H as HerdrError, f as findPane, h as herdr, by as settingsTabs, bz as tabsOfRow, bP as settingsFocus, X as sleep, g as choicesCache } from '../../nitro/nitro.mjs';
2
2
  import { a as activeTab } from '../../_/settingstabs.mjs';
3
3
  import 'node:http';
4
4
  import 'node:https';
@@ -18,16 +18,16 @@ import 'node:buffer';
18
18
  import 'node:fs';
19
19
  import 'node:path';
20
20
  import 'node:os';
21
- import 'node:net';
22
21
  import 'node:child_process';
23
22
  import 'node:dns';
24
23
  import 'node:util';
24
+ import 'qrcode-terminal/vendor/QRCode/index.js';
25
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
25
26
  import 'web-push';
27
+ import 'node:net';
26
28
  import 'node:string_decoder';
27
29
  import 'node:fs/promises';
28
30
  import 'node:readline';
29
- import 'qrcode-terminal/vendor/QRCode/index.js';
30
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
31
31
  import 'node:url';
32
32
  import 'node:zlib';
33
33
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, bG as readSettings } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, bQ as readSettings } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, bH as cleanSettingsPatch, H as HerdrError, bI as patchSettings } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, bR as cleanSettingsPatch, H as HerdrError, bS as patchSettings } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -1,4 +1,4 @@
1
- import { a as defineApi, bJ as spaceCall, bK as SpaceActionError, H as HerdrError, aa as log, p as poll, aZ as herdrOn, bL as dropSteps, bM as verifySpaceRename, bN as spaceResult, bO as swapSteps } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, bT as spaceCall, bU as SpaceActionError, H as HerdrError, ad as log, p as poll, a$ as herdrOn, bV as dropSteps, bW as verifySpaceRename, bX as spaceResult, bY as swapSteps } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';
@@ -0,0 +1,122 @@
1
+ import { a$ as herdrOn, bv as PANE_RE, H as HerdrError, b0 as splitId, bZ as reduceSnapshot, X as sleep, b_ as joinId, a as defineApi, p as poll } from '../../nitro/nitro.mjs';
2
+ import { p as prepareSplitShell, a as SPLIT_TERMINAL_TOKEN, S as SPLIT_PROMPT_TOKEN } from '../../_/splitShell.mjs';
3
+ import 'node:http';
4
+ import 'node:https';
5
+ import 'node:crypto';
6
+ import 'stream';
7
+ import 'events';
8
+ import 'http';
9
+ import 'crypto';
10
+ import 'buffer';
11
+ import 'zlib';
12
+ import 'https';
13
+ import 'net';
14
+ import 'tls';
15
+ import 'url';
16
+ import 'node:events';
17
+ import 'node:buffer';
18
+ import 'node:fs';
19
+ import 'node:path';
20
+ import 'node:os';
21
+ import 'node:child_process';
22
+ import 'node:dns';
23
+ import 'node:util';
24
+ import 'qrcode-terminal/vendor/QRCode/index.js';
25
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
26
+ import 'web-push';
27
+ import 'node:net';
28
+ import 'node:string_decoder';
29
+ import 'node:fs/promises';
30
+ import 'node:readline';
31
+ import 'node:url';
32
+ import 'node:zlib';
33
+ import '@simplewebauthn/server';
34
+
35
+ const pending = /* @__PURE__ */ new Map();
36
+ const START_WAIT_MS = 5e3;
37
+ const START_STEP_MS = 100;
38
+ async function runSplitCommand(paneId, raw, call = herdrOn, prepare = prepareSplitShell) {
39
+ if (!PANE_RE.test(paneId)) throw new HerdrError("bad_pane", "Pane not found");
40
+ const command = typeof raw === "string" ? raw.trim().replace(/^!\s*/, "") : "";
41
+ if (!command || /[\r\n\x00-\x1f\x7f]/.test(command)) throw new HerdrError("bad_command", "Expected a single shell command");
42
+ const { machine, local } = splitId(paneId);
43
+ const previous = pending.get(machine);
44
+ const task = (async () => {
45
+ var _a, _b;
46
+ await (previous == null ? void 0 : previous.catch(() => {
47
+ }));
48
+ const hx = (method, params = {}) => call(machine, method, params);
49
+ const snap = await hx("session.snapshot");
50
+ const state = reduceSnapshot(snap.snapshot || snap);
51
+ const agent = state.panes.find((p) => p.id === local);
52
+ if (!(agent == null ? void 0 : agent.agent) || !agent.cwd) throw new HerdrError("bad_pane", "Pane not found");
53
+ const inspect = async (id) => {
54
+ var _a2, _b2, _c;
55
+ const p = (await hx("pane.get", { pane_id: id })).pane;
56
+ if (!p || p.agent || p.tab_id !== agent.tab) return { free: false, managed: false, alone: false };
57
+ const info = (await hx("pane.process_info", { pane_id: id })).process_info;
58
+ const alone = Boolean((info == null ? void 0 : info.shell_pid) > 0 && info.foreground_process_group_id === info.shell_pid && ((_a2 = info.foreground_processes) == null ? void 0 : _a2.length) && info.foreground_processes.every((p2) => p2.pid === info.shell_pid));
59
+ const managed = ((_b2 = p.tokens) == null ? void 0 : _b2[SPLIT_TERMINAL_TOKEN]) === "1";
60
+ return { free: alone && (!managed || ((_c = p.tokens) == null ? void 0 : _c[SPLIT_PROMPT_TOKEN]) === String(info.shell_pid)), managed, alone };
61
+ };
62
+ const ready = async (id) => (await inspect(id)).free;
63
+ const siblings = state.panes.filter((p) => p.id !== local && p.tab === agent.tab && !p.agent);
64
+ let target;
65
+ let fallback;
66
+ for (const p of siblings) {
67
+ const s = await inspect(p.id);
68
+ if (!s.free) continue;
69
+ if (s.managed) {
70
+ target = p.id;
71
+ break;
72
+ }
73
+ fallback != null ? fallback : fallback = p.id;
74
+ }
75
+ target != null ? target : target = fallback;
76
+ if (target) {
77
+ await hx("pane.focus", { pane_id: target });
78
+ if (!await ready(target)) target = void 0;
79
+ }
80
+ const created = !target;
81
+ if (!target) {
82
+ const last = siblings.at(-1);
83
+ const r = await hx("pane.split", { target_pane_id: (_a = last == null ? void 0 : last.id) != null ? _a : local, direction: last ? "down" : "right", cwd: agent.cwd, focus: false, env: await prepare(machine) });
84
+ target = (_b = r.pane) == null ? void 0 : _b.pane_id;
85
+ if (!target) throw new HerdrError("bad_pane", "Pane not found");
86
+ await hx("pane.report_metadata", { pane_id: target, source: "wherdr-split", tokens: { [SPLIT_TERMINAL_TOKEN]: "1" } });
87
+ const deadline = Date.now() + START_WAIT_MS;
88
+ let s = await inspect(target);
89
+ while (!s.free && Date.now() < deadline) {
90
+ await sleep(START_STEP_MS);
91
+ s = await inspect(target);
92
+ }
93
+ if (!s.free && s.alone) {
94
+ await hx("pane.report_metadata", { pane_id: target, source: "wherdr-split", tokens: { [SPLIT_TERMINAL_TOKEN]: null } });
95
+ s = await inspect(target);
96
+ }
97
+ await hx("pane.focus", { pane_id: target });
98
+ if (!s.free || !await ready(target)) throw new HerdrError("busy_pane", "Cannot verify an idle shell prompt. No command was sent.");
99
+ }
100
+ await hx("pane.report_metadata", { pane_id: target, source: "wherdr-split", tokens: { [SPLIT_PROMPT_TOKEN]: null } });
101
+ await hx("pane.send_input", { pane_id: target, keys: ["ctrl+e", "ctrl+u"] });
102
+ await hx("pane.send_input", { pane_id: target, text: command, keys: ["enter"] });
103
+ return { ok: true, pane_id: joinId(machine, target), created };
104
+ })();
105
+ pending.set(machine, task);
106
+ try {
107
+ return await task;
108
+ } finally {
109
+ if (pending.get(machine) === task) pending.delete(machine);
110
+ }
111
+ }
112
+
113
+ const splitCommand_post = defineApi(async (_event, body) => {
114
+ try {
115
+ return await runSplitCommand(String(body.pane_id || ""), body.command);
116
+ } finally {
117
+ await poll();
118
+ }
119
+ });
120
+
121
+ export { splitCommand_post as default };
122
+ //# sourceMappingURL=split-command.post.mjs.map
@@ -1,4 +1,4 @@
1
- import { a as defineApi, a$ as getState } from '../../nitro/nitro.mjs';
1
+ import { a as defineApi, b1 as getState } from '../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:crypto';
@@ -17,16 +17,16 @@ import 'node:buffer';
17
17
  import 'node:fs';
18
18
  import 'node:path';
19
19
  import 'node:os';
20
- import 'node:net';
21
20
  import 'node:child_process';
22
21
  import 'node:dns';
23
22
  import 'node:util';
23
+ import 'qrcode-terminal/vendor/QRCode/index.js';
24
+ import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
24
25
  import 'web-push';
26
+ import 'node:net';
25
27
  import 'node:string_decoder';
26
28
  import 'node:fs/promises';
27
29
  import 'node:readline';
28
- import 'qrcode-terminal/vendor/QRCode/index.js';
29
- import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
30
30
  import 'node:url';
31
31
  import 'node:zlib';
32
32
  import '@simplewebauthn/server';