wherdr 2.3.0 → 2.4.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.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{AgentView.CfD2RWZY.css → AgentView.B12D6ccj.css} +1 -1
- package/.output/public/_nuxt/AgentView.B12D6ccj.css.br +0 -0
- package/.output/public/_nuxt/AgentView.B12D6ccj.css.gz +0 -0
- package/.output/public/_nuxt/BDTOz37p.js +1 -0
- package/.output/public/_nuxt/BDTOz37p.js.br +0 -0
- package/.output/public/_nuxt/BDTOz37p.js.gz +0 -0
- package/.output/public/_nuxt/BGD5AamG.js +25 -0
- package/.output/public/_nuxt/BGD5AamG.js.br +0 -0
- package/.output/public/_nuxt/BGD5AamG.js.gz +0 -0
- package/.output/public/_nuxt/BdJIc1Xf.js +1 -0
- package/.output/public/_nuxt/BdJIc1Xf.js.br +0 -0
- package/.output/public/_nuxt/BdJIc1Xf.js.gz +0 -0
- package/.output/public/_nuxt/BxlzUs1i.js +23 -0
- package/.output/public/_nuxt/BxlzUs1i.js.br +0 -0
- package/.output/public/_nuxt/BxlzUs1i.js.gz +0 -0
- package/.output/public/_nuxt/C-BDzEtI.js +3 -0
- package/.output/public/_nuxt/C-BDzEtI.js.br +0 -0
- package/.output/public/_nuxt/C-BDzEtI.js.gz +0 -0
- package/.output/public/_nuxt/{DN2uhp8-.js → CLf2i_DM.js} +1 -1
- package/.output/public/_nuxt/CO4sDeSt.js +62 -0
- package/.output/public/_nuxt/CO4sDeSt.js.br +0 -0
- package/.output/public/_nuxt/CO4sDeSt.js.gz +0 -0
- package/.output/public/_nuxt/{BqaV2jLN.js → CPlkxpge.js} +42 -42
- package/.output/public/_nuxt/CPlkxpge.js.br +0 -0
- package/.output/public/_nuxt/CPlkxpge.js.gz +0 -0
- package/.output/public/_nuxt/CTPNZj4T.js +9 -0
- package/.output/public/_nuxt/CTPNZj4T.js.br +0 -0
- package/.output/public/_nuxt/CTPNZj4T.js.gz +0 -0
- package/.output/public/_nuxt/CV6ukk-M.js +1 -0
- package/.output/public/_nuxt/CgUSTIM1.js +1 -0
- package/.output/public/_nuxt/CgUSTIM1.js.br +0 -0
- package/.output/public/_nuxt/CgUSTIM1.js.gz +0 -0
- package/.output/public/_nuxt/CwurhZnh.js +123 -0
- package/.output/public/_nuxt/CwurhZnh.js.br +0 -0
- package/.output/public/_nuxt/CwurhZnh.js.gz +0 -0
- package/.output/public/_nuxt/D7fCPncR.js +1 -0
- package/.output/public/_nuxt/D7fCPncR.js.br +0 -0
- package/.output/public/_nuxt/D7fCPncR.js.gz +0 -0
- package/.output/public/_nuxt/DFe-cDm2.js +1 -0
- package/.output/public/_nuxt/DFe-cDm2.js.br +0 -0
- package/.output/public/_nuxt/DFe-cDm2.js.gz +0 -0
- package/.output/public/_nuxt/Dpe9TNcA.js +31 -0
- package/.output/public/_nuxt/Dpe9TNcA.js.br +0 -0
- package/.output/public/_nuxt/Dpe9TNcA.js.gz +0 -0
- package/.output/public/_nuxt/{board.CeTYM1XN.css → board.fZYj3O-m.css} +1 -1
- package/.output/public/_nuxt/board.fZYj3O-m.css.br +0 -0
- package/.output/public/_nuxt/board.fZYj3O-m.css.gz +0 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/75cc4ea7-3027-463a-aa3e-29e474ed7173.json +1 -0
- package/.output/public/_nuxt/entry.KNdllmoL.css +2 -0
- package/.output/public/_nuxt/entry.KNdllmoL.css.br +0 -0
- package/.output/public/_nuxt/entry.KNdllmoL.css.gz +0 -0
- package/.output/public/sw.js +1 -1
- package/.output/server/chunks/_/branding.mjs +1 -1
- package/.output/server/chunks/_/package.mjs +1 -1
- package/.output/server/chunks/_/selfupdate.mjs +1 -1
- package/.output/server/chunks/_/updates.mjs +18 -5
- package/.output/server/chunks/_/worktrees.mjs +1 -1
- package/.output/server/chunks/_/ws.mjs +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +813 -487
- package/.output/server/chunks/raw/install-claude-statusline.mjs +1 -1
- package/.output/server/chunks/routes/api/search.get.mjs +55 -2
- package/.output/server/chunks/routes/api/seen.post.mjs +1 -1
- package/.output/server/chunks/routes/api/send-now.post.mjs +53 -0
- package/.output/server/chunks/routes/api/sessions.get.mjs +1 -1
- package/.output/server/chunks/routes/api/sessions.post.mjs +1 -1
- package/.output/server/chunks/routes/api/settings-tab.post.mjs +1 -1
- package/.output/server/chunks/routes/api/settings.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings.post.mjs +1 -1
- package/.output/server/chunks/routes/api/space.post.mjs +1 -1
- package/.output/server/chunks/routes/api/split-command.post.mjs +157 -0
- package/.output/server/chunks/routes/api/tasks/action.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/add.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/after.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/approve.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/archive-done.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/archived.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/autopilot.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/autopilot.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/board-settings.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/board-settings.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/coordinator.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/coordinator.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/describe.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/details.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/limit.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/links.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/models.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/pick.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/project.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/project.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/question.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/scheduled.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/settings.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/start.get.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks/tell.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tasks.get.mjs +1 -1
- package/.output/server/chunks/routes/api/unqueue.post.mjs +1 -1
- package/.output/server/chunks/routes/icons/_name_.get.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/routes/uploads/_...name_.get.mjs +1 -1
- package/.output/server/chunks/routes/ws/_..._.mjs +1 -1
- package/.output/server/chunks/routes/ws/events.mjs +5 -1
- package/.output/server/chunks/routes/ws/term.mjs +1 -1
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/docs/README.md +3 -0
- package/docs/board.md +8 -1
- package/docs/design.md +112 -0
- package/docs/devices.md +5 -0
- package/docs/herdr-projects-1x.md +28 -0
- package/docs/home.md +9 -0
- package/docs/installation.md +12 -0
- package/docs/quotas.md +6 -0
- package/docs/release-notes-2.4.0.md +37 -0
- package/package.json +1 -1
- package/.output/public/_nuxt/30nuHmZs.js +0 -1
- package/.output/public/_nuxt/30nuHmZs.js.br +0 -0
- package/.output/public/_nuxt/30nuHmZs.js.gz +0 -0
- package/.output/public/_nuxt/AgentView.CfD2RWZY.css.br +0 -0
- package/.output/public/_nuxt/AgentView.CfD2RWZY.css.gz +0 -0
- package/.output/public/_nuxt/BF2qZ0lx.js +0 -31
- package/.output/public/_nuxt/BF2qZ0lx.js.br +0 -0
- package/.output/public/_nuxt/BF2qZ0lx.js.gz +0 -0
- package/.output/public/_nuxt/BU6Ihnb9.js +0 -62
- package/.output/public/_nuxt/BU6Ihnb9.js.br +0 -0
- package/.output/public/_nuxt/BU6Ihnb9.js.gz +0 -0
- package/.output/public/_nuxt/BmF5BXwf.js +0 -23
- package/.output/public/_nuxt/BmF5BXwf.js.br +0 -0
- package/.output/public/_nuxt/BmF5BXwf.js.gz +0 -0
- package/.output/public/_nuxt/BqaV2jLN.js.br +0 -0
- package/.output/public/_nuxt/BqaV2jLN.js.gz +0 -0
- package/.output/public/_nuxt/C_pXkozx.js +0 -1
- package/.output/public/_nuxt/C_pXkozx.js.br +0 -0
- package/.output/public/_nuxt/C_pXkozx.js.gz +0 -0
- package/.output/public/_nuxt/Cq1IlvFx.js +0 -3
- package/.output/public/_nuxt/Cq1IlvFx.js.br +0 -0
- package/.output/public/_nuxt/Cq1IlvFx.js.gz +0 -0
- package/.output/public/_nuxt/DNk1pHah.js +0 -1
- package/.output/public/_nuxt/DNk1pHah.js.br +0 -0
- package/.output/public/_nuxt/DNk1pHah.js.gz +0 -0
- package/.output/public/_nuxt/DcQrp3bD.js +0 -25
- package/.output/public/_nuxt/DcQrp3bD.js.br +0 -0
- package/.output/public/_nuxt/DcQrp3bD.js.gz +0 -0
- package/.output/public/_nuxt/I_R_EgeO.js +0 -1
- package/.output/public/_nuxt/L_vgVKcG.js +0 -105
- package/.output/public/_nuxt/L_vgVKcG.js.br +0 -0
- package/.output/public/_nuxt/L_vgVKcG.js.gz +0 -0
- package/.output/public/_nuxt/RI4B_b2M.js +0 -9
- package/.output/public/_nuxt/RI4B_b2M.js.br +0 -0
- package/.output/public/_nuxt/RI4B_b2M.js.gz +0 -0
- package/.output/public/_nuxt/Y-4S7Nuf.js +0 -1
- package/.output/public/_nuxt/Y-4S7Nuf.js.br +0 -0
- package/.output/public/_nuxt/Y-4S7Nuf.js.gz +0 -0
- package/.output/public/_nuxt/board.CeTYM1XN.css.br +0 -0
- package/.output/public/_nuxt/board.CeTYM1XN.css.gz +0 -0
- package/.output/public/_nuxt/builds/meta/9240e8b5-8099-4108-9ff2-34b7f376d31a.json +0 -1
- package/.output/public/_nuxt/entry._gNxiS8l.css +0 -2
- package/.output/public/_nuxt/entry._gNxiS8l.css.br +0 -0
- package/.output/public/_nuxt/entry._gNxiS8l.css.gz +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { b as base64ToUint8Array } from '../virtual/_raw-helpers.mjs';
|
|
2
2
|
|
|
3
3
|
// ROLLUP_NO_REPLACE
|
|
4
|
-
const installClaudeStatusline = base64ToUint8Array("IyEvYmluL3NoCiMgd2hlcmRyOiBpbnN0YWxscyBDbGF1ZGUgQ29kZSdzIGludmlzaWJsZSBzdGF0dXMgbGluZSAocXVvdGFzICsgYWNjb3VudAojIGZpbmdlcnByaW50KSBmb3IgdGhlIGN1cnJlbnQgdXNlci4gU2VsZi1jb250YWluZWQgKHRoZSBzdGF0dXMgbGluZSBpcyBpbmNsdWRlZAojIGJlbG93KTogd2hlcmRyIHJ1bnMgaXQgYXMgaXMgb24gYSBtYWNoaW5lICgiSW5zdGFsbCIgYnV0dG9uKSBvcgojIGhhbmRzIGl0IG91dCB0byBwYXN0ZSAoIkNvcHkgY29tbWFuZCIpLiBTYWZlIHRvIHJ1biBhZ2FpbjoKIyAgLSB3cml0ZXMgdGhlIHN0YXR1cyBsaW5lIHRvIH4vLmNsYXVkZS93aGVyZHItc3RhdHVzbGluZS5zaCAodXBkYXRlKTsKIyAgLSBubyBgc3RhdHVzTGluZWAgaW4gfi8uY2xhdWRlL3NldHRpbmdzLmpzb246IGFkZHMgb3VyczsKIyAgLSBhbm90aGVyIGBzdGF0dXNMaW5lYCAoY29tbWFuZCk6IGNoYWlucyBpdCBiZWhpbmQgb3VycywgaXRzCiMgICAgb3V0cHV0IHN0YXlzIHRoZSBzYW1lOyBiYWNrdXAgY29weSBzZXR0aW5ncy5qc29uLmJhay13aGVyZHIuCiMgUXVvdGFzIHNob3cgdXAgYWZ0ZXIgdGhlIG5leHQgZXhjaGFuZ2Ugd2l0aCBhIENsYXVkZS4Kc2V0IC1lCmRpcj0iJHtDTEFVREVfQ09ORklHX0RJUjotJEhPTUUvLmNsYXVkZX0iCm1rZGlyIC1wICIkZGlyIgojIC0tLS0gc3RhdHVzIGxpbmUgKHByaW50cyBub3RoaW5nKSAtLS0tCmNhdCA+
|
|
4
|
+
const installClaudeStatusline = base64ToUint8Array("IyEvYmluL3NoCiMgd2hlcmRyOiBpbnN0YWxscyBDbGF1ZGUgQ29kZSdzIGludmlzaWJsZSBzdGF0dXMgbGluZSAocXVvdGFzICsgYWNjb3VudAojIGZpbmdlcnByaW50KSBmb3IgdGhlIGN1cnJlbnQgdXNlci4gU2VsZi1jb250YWluZWQgKHRoZSBzdGF0dXMgbGluZSBpcyBpbmNsdWRlZAojIGJlbG93KTogd2hlcmRyIHJ1bnMgaXQgYXMgaXMgb24gYSBtYWNoaW5lICgiSW5zdGFsbCIgYnV0dG9uKSBvcgojIGhhbmRzIGl0IG91dCB0byBwYXN0ZSAoIkNvcHkgY29tbWFuZCIpLiBTYWZlIHRvIHJ1biBhZ2FpbjoKIyAgLSB3cml0ZXMgdGhlIHN0YXR1cyBsaW5lIHRvIH4vLmNsYXVkZS93aGVyZHItc3RhdHVzbGluZS5zaCAodXBkYXRlKTsKIyAgLSBubyBgc3RhdHVzTGluZWAgaW4gfi8uY2xhdWRlL3NldHRpbmdzLmpzb246IGFkZHMgb3VyczsKIyAgLSBhbm90aGVyIGBzdGF0dXNMaW5lYCAoY29tbWFuZCk6IGNoYWlucyBpdCBiZWhpbmQgb3VycywgaXRzCiMgICAgb3V0cHV0IHN0YXlzIHRoZSBzYW1lOyBiYWNrdXAgY29weSBzZXR0aW5ncy5qc29uLmJhay13aGVyZHIuCiMgUXVvdGFzIHNob3cgdXAgYWZ0ZXIgdGhlIG5leHQgZXhjaGFuZ2Ugd2l0aCBhIENsYXVkZS4Kc2V0IC1lCmRpcj0iJHtDTEFVREVfQ09ORklHX0RJUjotJEhPTUUvLmNsYXVkZX0iCm1rZGlyIC1wICIkZGlyIgojIC0tLS0gc3RhdHVzIGxpbmUgKHByaW50cyBub3RoaW5nKSAtLS0tCmNhdCA+ICIkZGlyL3doZXJkci1zdGF0dXNsaW5lLnNoLnRtcCIgPDwnV0hFUkRSX1NUQVRVU0xJTkUnCiMhL2Jpbi9zaAojIHdoZXJkcjogQ2xhdWRlIENvZGUncyBpbnZpc2libGUgc3RhdHVzIGxpbmUgKHByaW50cyBub3RoaW5nKS4gSXQgb25seSBrZWVwcwojIHRoZSBhY2NvdW50IHF1b3RhcyAocmF0ZV9saW1pdHMsIHdoaWNoIENsYXVkZSBDb2RlIHBhc3NlcyB0byBpdHMKIyBzdGF0dXMgbGluZSBhZnRlciBlYWNoIGV4Y2hhbmdlKSBmb3IgdGhlIHdoZXJkciBob21lIHNjcmVlbiwgYW5kIGFuIGFjY291bnQKIyBmaW5nZXJwcmludCAodHJ1bmNhdGVkIGhhc2ggb2YgaXRzIElELCBuZXZlciB0aGUgSUQgb3IgdGhlIGVtYWlsKQojIHRvIHRlbGwgYXBhcnQgbWFjaGluZXMgdGhhdCBkbyBub3QgdXNlIHRoZSBzYW1lIGFjY291bnQuIE9uIEFQSSBiaWxsaW5nCiMgKEFQSSBrZXksIENvbnNvbGUgY3JlZGl0cykgQ2xhdWRlIENvZGUgcGFzc2VzIG5vIHJhdGVfbGltaXRzOiBvbmNlIHRoZSBzZXNzaW9uCiMgaGFzIGhhZCBhbiBBUEkgcmVzcG9uc2UgKGNvc3QudG90YWxfYXBpX2R1cmF0aW9uX21zID4gMCksIHRoZSBzbmFwc2hvdCBpcyBrZXB0CiMgd2l0aG91dCB0aGVtLCBhbmQgd2hlcmRyIHJlYWRzICJBUEkgdXNhZ2UsIG5vIHF1b3RhIiBmb3IgdGhlIG1hY2hpbmUuCiMgSW5zdGFsbGVkIGJ5IGluc3RhbGwtY2xhdWRlLXN0YXR1c2xpbmUuc2ggKHdoZXJkciByZXBvc2l0b3J5LCBSRUFETUUsICJRdW90YXMKIyBvbiB0aGUgaG9tZSBzY3JlZW4iKS4gRXhpc3Rpbmcgc3RhdHVzIGxpbmU6IHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgaXQgcmVjZWl2ZXMgdGhlCiMgc2FtZSBkYXRhIGFuZCBpdHMgb3V0cHV0IGlzIGtlcHQgKHNoIHdoZXJkci1zdGF0dXNsaW5lLnNoICdjbWQnKS4KZD0kKGNhdCkKY2FzZSAiJGQiIGluCiAgKicicmF0ZV9saW1pdHMiJyp8KicidG90YWxfYXBpX2R1cmF0aW9uX21zIicqKQogICAgZGlyPSIkSE9NRS8uY2FjaGUvaGVyZHItd2ViIgogICAgbWtkaXIgLXAgIiRkaXIiCiAgICAjIEJpbmQgdGhlIGZpbmdlcnByaW50IGFuZCB0aW1lc3RhbXAgdG8gdGhlIHBheWxvYWQgaW4gb25lIGF0b21pYyByZW5hbWUuCiAgICAjIE5vIGZpbmdlcnByaW50IFRUTDogYSBsb2dpbiBjaGFuZ2UgbXVzdCBhZmZlY3QgdGhlIHZlcnkgbmV4dCByZWFkaW5nLgogICAgcHJpbnRmICclcycgIiRkIiB8IHB5dGhvbjMgLWMgJwppbXBvcnQgaGFzaGxpYiwganNvbiwgb3MsIHN5cywgdGVtcGZpbGUsIHRpbWUKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmNhY2hlID0gUGF0aChzeXMuYXJndlsxXSkKY29uZmlnID0gUGF0aChvcy5lbnZpcm9uLmdldCgiQ0xBVURFX0NPTkZJR19ESVIiLCBvcy5lbnZpcm9uWyJIT01FIl0pKSAvICIuY2xhdWRlLmpzb24iCnRyeToKICAgIGFjY291bnRfaWQgPSBqc29uLmxvYWRzKGNvbmZpZy5yZWFkX3RleHQoKSkuZ2V0KCJvYXV0aEFjY291bnQiLCB7fSkuZ2V0KCJhY2NvdW50VXVpZCIpCmV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgYWNjb3VudF9pZCA9IE5vbmUKYWNjb3VudCA9IGhhc2hsaWIuc2hhMjU2KCgid2hlcmRyOiIgKyBhY2NvdW50X2lkKS5lbmNvZGUoKSkuaGV4ZGlnZXN0KClbOjE2XSBpZiBpc2luc3RhbmNlKGFjY291bnRfaWQsIHN0cikgYW5kIGFjY291bnRfaWQgZWxzZSBOb25lCnN0YXR1cyA9IGpzb24ubG9hZChzeXMuc3RkaW4pCmlmIG5vdCBpc2luc3RhbmNlKHN0YXR1cywgZGljdCk6CiAgICBzeXMuZXhpdCgwKQppZiAicmF0ZV9saW1pdHMiIG5vdCBpbiBzdGF0dXM6CiAgICAjIFN1YnNjcmliZXJzIGdldCByYXRlX2xpbWl0cyBvbmx5IGFmdGVyIHRoZSBmaXJzdCBBUEkgcmVzcG9uc2Ugb2YgYSBzZXNzaW9uOgogICAgIyB3aXRob3V0IG9uZSB5ZXQsIG5vdGhpbmcgaXMga25vd24uIEEgc2Vzc2lvbiB0aGF0IGFscmVhZHkgZ2F2ZSByYXRlIGxpbWl0cwogICAgIyBzdGF5cyBhIHN1YnNjcmlwdGlvbiAoYSB3aW5kb3cgbWF5IGRyb3Agb3V0IG9uY2UgaXQgcmVzZXRzKS4KICAgIGFwaV9tcyA9IChzdGF0dXMuZ2V0KCJjb3N0Iikgb3Ige30pLmdldCgidG90YWxfYXBpX2R1cmF0aW9uX21zIikKICAgIGlmIG5vdCBpc2luc3RhbmNlKGFwaV9tcywgKGludCwgZmxvYXQpKSBvciBhcGlfbXMgPD0gMDoKICAgICAgICBzeXMuZXhpdCgwKQogICAgdHJ5OgogICAgICAgIHByZXYgPSBqc29uLmxvYWRzKChjYWNoZSAvICJjbGF1ZGUtc3RhdHVzLmpzb24iKS5yZWFkX3RleHQoKSkKICAgICAgICBpZiBwcmV2LmdldCgicmF0ZV9saW1pdHMiKSBpcyBub3QgTm9uZSBhbmQgcHJldi5nZXQoInNlc3Npb25faWQiKSA9PSBzdGF0dXMuZ2V0KCJzZXNzaW9uX2lkIik6CiAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICBwYXNzCnN0YXR1c1siX3doZXJkciJdID0geyJ2ZXJzaW9uIjogMSwgImFjY291bnQiOiBhY2NvdW50LCAiYXQiOiBpbnQodGltZS50aW1lKCkgKiAxMDAwKX0KZGVmIGF0b21pYyhuYW1lLCB0ZXh0KToKICAgIGZkLCB0ZW1wID0gdGVtcGZpbGUubWtzdGVtcChwcmVmaXg9bmFtZSArICIuIiwgZGlyPWNhY2hlKQogICAgdHJ5OgogICAgICAgIHdpdGggb3MuZmRvcGVuKGZkLCAidyIpIGFzIGY6CiAgICAgICAgICAgIGYud3JpdGUodGV4dCkKICAgICAgICBvcy5yZXBsYWNlKHRlbXAsIGNhY2hlIC8gbmFtZSkKICAgIGZpbmFsbHk6CiAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGVtcCk6CiAgICAgICAgICAgIG9zLnVubGluayh0ZW1wKQojIENvbXBhdGliaWxpdHkgZm9yIG9sZGVyIHJlYWRlcnM7IG5ldyByZWFkZXJzIHVzZSBvbmx5IHRoZSBlbWJlZGRlZCBhY2NvdW50LgppZiBhY2NvdW50OgogICAgYXRvbWljKCJjbGF1ZGUtYWNjb3VudCIsIGFjY291bnQgKyAiXG4iKQplbHNlOgogICAgKGNhY2hlIC8gImNsYXVkZS1hY2NvdW50IikudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSkKYXRvbWljKCJjbGF1ZGUtc3RhdHVzLmpzb24iLCBqc29uLmR1bXBzKHN0YXR1cykpCicgIiRkaXIiIDs7CmVzYWMKaWYgWyAtbiAiJDEiIF07IHRoZW4gcHJpbnRmICclcycgIiRkIiB8IHNoIC1jICIkMSI7IGV4aXQgJD87IGZpCmV4aXQgMApXSEVSRFJfU1RBVFVTTElORQpjaG1vZCA3NTUgIiRkaXIvd2hlcmRyLXN0YXR1c2xpbmUuc2gudG1wIgptdiAiJGRpci93aGVyZHItc3RhdHVzbGluZS5zaC50bXAiICIkZGlyL3doZXJkci1zdGF0dXNsaW5lLnNoIgplY2hvICJzdGF0dXMgbGluZSB3cml0dGVuOiAkZGlyL3doZXJkci1zdGF0dXNsaW5lLnNoIgojIC0tLS0gc2V0dGluZ3MuanNvbiAtLS0tClsgLWYgIiRkaXIvc2V0dGluZ3MuanNvbiIgXSB8fCBlY2hvICd7fScgPiAiJGRpci9zZXR0aW5ncy5qc29uIgpjcCAiJGRpci9zZXR0aW5ncy5qc29uIiAiJGRpci9zZXR0aW5ncy5qc29uLmJhay13aGVyZHIiCnB5dGhvbjMgLSAiJGRpci9zZXR0aW5ncy5qc29uIiAiJGRpci93aGVyZHItc3RhdHVzbGluZS5zaCIgPDwnV0hFUkRSX1BZJwppbXBvcnQganNvbiwgc2hsZXgsIHN5cwpwYXRoLCBzY3JpcHQgPSBzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0KZCA9IGpzb24ubG9hZChvcGVuKHBhdGgpKQpvdXJzID0gJ3NoICcgKyBzaGxleC5xdW90ZShzY3JpcHQpCmN1ciA9IGQuZ2V0KCdzdGF0dXNMaW5lJykKaWYgaXNpbnN0YW5jZShjdXIsIGRpY3QpIGFuZCAnd2hlcmRyLXN0YXR1c2xpbmUuc2gnIGluIHN0cihjdXIuZ2V0KCdjb21tYW5kJywgJycpKToKICAgIHByaW50KCdhbHJlYWR5IGluc3RhbGxlZDonLCBjdXJbJ2NvbW1hbmQnXSkKICAgIHN5cy5leGl0KDApCmlmIGN1ciBpcyBOb25lOgogICAgZFsnc3RhdHVzTGluZSddID0geyd0eXBlJzogJ2NvbW1hbmQnLCAnY29tbWFuZCc6IG91cnN9CiAgICBwcmludCgnc3RhdHVzIGxpbmUgYWRkZWQ6Jywgb3VycykKZWxpZiBpc2luc3RhbmNlKGN1ciwgZGljdCkgYW5kIGN1ci5nZXQoJ3R5cGUnKSA9PSAnY29tbWFuZCcgYW5kIGN1ci5nZXQoJ2NvbW1hbmQnKToKICAgIGRbJ3N0YXR1c0xpbmUnXSA9IHsqKmN1ciwgJ2NvbW1hbmQnOiBvdXJzICsgJyAnICsgc2hsZXgucXVvdGUoY3VyWydjb21tYW5kJ10pfQogICAgcHJpbnQoJ2V4aXN0aW5nIHN0YXR1cyBsaW5lIGNoYWluZWQ6JywgZFsnc3RhdHVzTGluZSddWydjb21tYW5kJ10pCmVsc2U6CiAgICBwcmludCgndW5rbm93biBzdGF0dXNMaW5lLCBub3RoaW5nIGNoYW5nZWQ6JywganNvbi5kdW1wcyhjdXIpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICBzeXMuZXhpdCgxKQp3aXRoIG9wZW4ocGF0aCwgJ3cnKSBhcyBmOgogICAganNvbi5kdW1wKGQsIGYsIGluZGVudD0yLCBlbnN1cmVfYXNjaWk9RmFsc2UpCiAgICBmLndyaXRlKCdcbicpCldIRVJEUl9QWQo=");
|
|
5
5
|
|
|
6
6
|
export { installClaudeStatusline as default };
|
|
7
7
|
//# sourceMappingURL=install-claude-statusline.mjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, i as getQuery, a$ as getState,
|
|
1
|
+
import { by as excerpt, bz as taskKey, bA as foldSearch, bB as matchAt, a as defineApi, i as getQuery, bC as searchableBoards, a$ as getState, bD as hasTranscript, q as machineOfPane, bE as SEARCH_DEADLINE_MS, bF as SEARCH_MAX_RESULTS, bG as spaceTitle } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -31,9 +31,62 @@ 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,
|
|
1
|
+
import { a as defineApi, P as PANE_RE, H as HerdrError, bH as markSeen } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -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, bI 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:net';
|
|
21
|
+
import 'node:child_process';
|
|
22
|
+
import 'node:dns';
|
|
23
|
+
import 'node:util';
|
|
24
|
+
import 'web-push';
|
|
25
|
+
import 'node:string_decoder';
|
|
26
|
+
import 'node:fs/promises';
|
|
27
|
+
import 'node:readline';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
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, P as PANE_RE, H as HerdrError, f as findPane, h as herdr, bu as settingsTabs, bv as tabsOfRow,
|
|
1
|
+
import { a as defineApi, P as PANE_RE, H as HerdrError, f as findPane, h as herdr, bu as settingsTabs, bv as tabsOfRow, bL 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';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi,
|
|
1
|
+
import { a as defineApi, bN as cleanSettingsPatch, H as HerdrError, bO as patchSettings } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi,
|
|
1
|
+
import { a as defineApi, bP as spaceCall, bQ as SpaceActionError, H as HerdrError, aa as log, p as poll, aZ as herdrOn, bR as dropSteps, bS as verifySpaceRename, bT as spaceResult, bU as swapSteps } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { $ as getMachine, H as HerdrError, aH as DATA_DIR, bV as RemoteMachine, bW as HERDR_BIN, aZ as herdrOn, br as PANE_RE, a_ as splitId, bX as reduceSnapshot, X as sleep, bY as joinId, a as defineApi, p as poll } from '../../nitro/nitro.mjs';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import 'node:http';
|
|
5
|
+
import 'node:https';
|
|
6
|
+
import 'node:crypto';
|
|
7
|
+
import 'stream';
|
|
8
|
+
import 'events';
|
|
9
|
+
import 'http';
|
|
10
|
+
import 'crypto';
|
|
11
|
+
import 'buffer';
|
|
12
|
+
import 'zlib';
|
|
13
|
+
import 'https';
|
|
14
|
+
import 'net';
|
|
15
|
+
import 'tls';
|
|
16
|
+
import 'url';
|
|
17
|
+
import 'node:events';
|
|
18
|
+
import 'node:buffer';
|
|
19
|
+
import 'node:fs';
|
|
20
|
+
import 'node:os';
|
|
21
|
+
import 'node:net';
|
|
22
|
+
import 'node:child_process';
|
|
23
|
+
import 'node:dns';
|
|
24
|
+
import 'node:util';
|
|
25
|
+
import 'web-push';
|
|
26
|
+
import 'node:string_decoder';
|
|
27
|
+
import 'node:readline';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
30
|
+
import 'node:url';
|
|
31
|
+
import 'node:zlib';
|
|
32
|
+
import '@simplewebauthn/server';
|
|
33
|
+
|
|
34
|
+
const SPLIT_TERMINAL_TOKEN = "wherdr_split_terminal";
|
|
35
|
+
const SPLIT_PROMPT_TOKEN = "wherdr_split_prompt";
|
|
36
|
+
const quote = (s) => `'${s.replace(/'/g, `'\\''`)}'`;
|
|
37
|
+
function splitShellHooks(binary, session) {
|
|
38
|
+
const report = `${quote(binary)} --session ${quote(session)} pane report-metadata "$HERDR_PANE_ID" --source wherdr-split`;
|
|
39
|
+
const busy = `${report} --clear-token ${SPLIT_PROMPT_TOKEN} >/dev/null 2>&1`;
|
|
40
|
+
const ready = `${report} --token "${SPLIT_PROMPT_TOKEN}=$$" >/dev/null 2>&1`;
|
|
41
|
+
return {
|
|
42
|
+
bash: `if (( BASH_VERSINFO[0] > 4 || (BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 4) )); then PS0=${quote(`$(${busy})`)}; ${ready}; fi`,
|
|
43
|
+
zsh: `_wherdr_split_busy() { ${busy}; }
|
|
44
|
+
_wherdr_split_ready() { ${ready}; }
|
|
45
|
+
preexec_functions+=(_wherdr_split_busy)
|
|
46
|
+
precmd_functions+=(_wherdr_split_ready)
|
|
47
|
+
`
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async function prepareSplitShell(machine) {
|
|
51
|
+
const m = getMachine(machine);
|
|
52
|
+
if (!m) throw new HerdrError("bad_machine", "Unknown machine");
|
|
53
|
+
const dir = m.local ? path.join(DATA_DIR, "split-shell") : path.posix.join(m.home, ".cache/herdr-web/split-shell");
|
|
54
|
+
const hooks = splitShellHooks(m instanceof RemoteMachine ? m.bin : HERDR_BIN, m.session);
|
|
55
|
+
const zshenv = 'unset ZDOTDIR\n[[ -f "$HOME/.zshenv" ]] && source "$HOME/.zshenv"\nexport WHERDR_SPLIT_USER_ZDOTDIR=${ZDOTDIR:-$HOME}\nexport ZDOTDIR=$WHERDR_SPLIT_BOOTSTRAP\n';
|
|
56
|
+
const zprofile = 'ZDOTDIR=$WHERDR_SPLIT_USER_ZDOTDIR\n[[ -f "$ZDOTDIR/.zprofile" ]] && source "$ZDOTDIR/.zprofile"\nexport WHERDR_SPLIT_USER_ZDOTDIR=${ZDOTDIR:-$HOME}\nexport ZDOTDIR=$WHERDR_SPLIT_BOOTSTRAP\n';
|
|
57
|
+
const zshrc = 'ZDOTDIR=$WHERDR_SPLIT_USER_ZDOTDIR\n[[ -f "$ZDOTDIR/.zshrc" ]] && source "$ZDOTDIR/.zshrc"\n' + hooks.zsh;
|
|
58
|
+
if (m.exec) {
|
|
59
|
+
const r = await m.exec('umask 077; mkdir -p "$1" && printf %s "$2" > "$1/.zshenv" && printf %s "$3" > "$1/.zshrc" && printf %s "$4" > "$1/.zprofile"', [dir, zshenv, zshrc, zprofile], { timeoutMs: 5e3 });
|
|
60
|
+
if (r.code !== 0) throw new HerdrError("split_failed", "Could not prepare the split terminal. No command was sent.");
|
|
61
|
+
} else {
|
|
62
|
+
await fs.mkdir(dir, { recursive: true, mode: 448 });
|
|
63
|
+
await fs.writeFile(path.join(dir, ".zshenv"), zshenv, { mode: 384 });
|
|
64
|
+
await fs.writeFile(path.join(dir, ".zshrc"), zshrc, { mode: 384 });
|
|
65
|
+
await fs.writeFile(path.join(dir, ".zprofile"), zprofile, { mode: 384 });
|
|
66
|
+
}
|
|
67
|
+
return { PROMPT_COMMAND: hooks.bash, ZDOTDIR: dir, WHERDR_SPLIT_BOOTSTRAP: dir };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const pending = /* @__PURE__ */ new Map();
|
|
71
|
+
const START_WAIT_MS = 5e3;
|
|
72
|
+
const START_STEP_MS = 100;
|
|
73
|
+
async function runSplitCommand(paneId, raw, call = herdrOn, prepare = prepareSplitShell) {
|
|
74
|
+
if (!PANE_RE.test(paneId)) throw new HerdrError("bad_pane", "Pane not found");
|
|
75
|
+
const command = typeof raw === "string" ? raw.trim().replace(/^!\s*/, "") : "";
|
|
76
|
+
if (!command || /[\r\n\x00-\x1f\x7f]/.test(command)) throw new HerdrError("bad_command", "Expected a single shell command");
|
|
77
|
+
const { machine, local } = splitId(paneId);
|
|
78
|
+
const previous = pending.get(machine);
|
|
79
|
+
const task = (async () => {
|
|
80
|
+
var _a, _b;
|
|
81
|
+
await (previous == null ? void 0 : previous.catch(() => {
|
|
82
|
+
}));
|
|
83
|
+
const hx = (method, params = {}) => call(machine, method, params);
|
|
84
|
+
const snap = await hx("session.snapshot");
|
|
85
|
+
const state = reduceSnapshot(snap.snapshot || snap);
|
|
86
|
+
const agent = state.panes.find((p) => p.id === local);
|
|
87
|
+
if (!(agent == null ? void 0 : agent.agent) || !agent.cwd) throw new HerdrError("bad_pane", "Pane not found");
|
|
88
|
+
const inspect = async (id) => {
|
|
89
|
+
var _a2, _b2, _c;
|
|
90
|
+
const p = (await hx("pane.get", { pane_id: id })).pane;
|
|
91
|
+
if (!p || p.agent || p.tab_id !== agent.tab) return { free: false, managed: false, alone: false };
|
|
92
|
+
const info = (await hx("pane.process_info", { pane_id: id })).process_info;
|
|
93
|
+
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));
|
|
94
|
+
const managed = ((_b2 = p.tokens) == null ? void 0 : _b2[SPLIT_TERMINAL_TOKEN]) === "1";
|
|
95
|
+
return { free: alone && (!managed || ((_c = p.tokens) == null ? void 0 : _c[SPLIT_PROMPT_TOKEN]) === String(info.shell_pid)), managed, alone };
|
|
96
|
+
};
|
|
97
|
+
const ready = async (id) => (await inspect(id)).free;
|
|
98
|
+
const siblings = state.panes.filter((p) => p.id !== local && p.tab === agent.tab && !p.agent);
|
|
99
|
+
let target;
|
|
100
|
+
let fallback;
|
|
101
|
+
for (const p of siblings) {
|
|
102
|
+
const s = await inspect(p.id);
|
|
103
|
+
if (!s.free) continue;
|
|
104
|
+
if (s.managed) {
|
|
105
|
+
target = p.id;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
fallback != null ? fallback : fallback = p.id;
|
|
109
|
+
}
|
|
110
|
+
target != null ? target : target = fallback;
|
|
111
|
+
if (target) {
|
|
112
|
+
await hx("pane.focus", { pane_id: target });
|
|
113
|
+
if (!await ready(target)) target = void 0;
|
|
114
|
+
}
|
|
115
|
+
const created = !target;
|
|
116
|
+
if (!target) {
|
|
117
|
+
const last = siblings.at(-1);
|
|
118
|
+
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) });
|
|
119
|
+
target = (_b = r.pane) == null ? void 0 : _b.pane_id;
|
|
120
|
+
if (!target) throw new HerdrError("bad_pane", "Pane not found");
|
|
121
|
+
await hx("pane.report_metadata", { pane_id: target, source: "wherdr-split", tokens: { [SPLIT_TERMINAL_TOKEN]: "1" } });
|
|
122
|
+
const deadline = Date.now() + START_WAIT_MS;
|
|
123
|
+
let s = await inspect(target);
|
|
124
|
+
while (!s.free && Date.now() < deadline) {
|
|
125
|
+
await sleep(START_STEP_MS);
|
|
126
|
+
s = await inspect(target);
|
|
127
|
+
}
|
|
128
|
+
if (!s.free && s.alone) {
|
|
129
|
+
await hx("pane.report_metadata", { pane_id: target, source: "wherdr-split", tokens: { [SPLIT_TERMINAL_TOKEN]: null } });
|
|
130
|
+
s = await inspect(target);
|
|
131
|
+
}
|
|
132
|
+
await hx("pane.focus", { pane_id: target });
|
|
133
|
+
if (!s.free || !await ready(target)) throw new HerdrError("busy_pane", "Cannot verify an idle shell prompt. No command was sent.");
|
|
134
|
+
}
|
|
135
|
+
await hx("pane.report_metadata", { pane_id: target, source: "wherdr-split", tokens: { [SPLIT_PROMPT_TOKEN]: null } });
|
|
136
|
+
await hx("pane.send_input", { pane_id: target, keys: ["ctrl+e", "ctrl+u"] });
|
|
137
|
+
await hx("pane.send_input", { pane_id: target, text: command, keys: ["enter"] });
|
|
138
|
+
return { ok: true, pane_id: joinId(machine, target), created };
|
|
139
|
+
})();
|
|
140
|
+
pending.set(machine, task);
|
|
141
|
+
try {
|
|
142
|
+
return await task;
|
|
143
|
+
} finally {
|
|
144
|
+
if (pending.get(machine) === task) pending.delete(machine);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const splitCommand_post = defineApi(async (_event, body) => {
|
|
149
|
+
try {
|
|
150
|
+
return await runSplitCommand(String(body.pane_id || ""), body.command);
|
|
151
|
+
} finally {
|
|
152
|
+
await poll();
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
export { splitCommand_post as default };
|
|
157
|
+
//# sourceMappingURL=split-command.post.mjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, i as getQuery,
|
|
1
|
+
import { a as defineApi, i as getQuery, c4 as autopilotStatuses, c5 as coordinatorAutopilot } from '../../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi,
|
|
1
|
+
import { a as defineApi, c9 as restartCoordinator, ca as tellCoordinator } from '../../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, i as getQuery,
|
|
1
|
+
import { a as defineApi, i as getQuery, ck as coordinatorScheduled } from '../../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, P as PANE_RE, H as HerdrError,
|
|
1
|
+
import { a as defineApi, P as PANE_RE, H as HerdrError, co as cancelQueued } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as defineEventHandler,
|
|
1
|
+
import { d as defineEventHandler, cw as getRouterParam } from '../../nitro/nitro.mjs';
|
|
2
2
|
import { s as serveBranding } from '../../_/branding.mjs';
|
|
3
3
|
import 'node:http';
|
|
4
4
|
import 'node:https';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { cK as useRuntimeConfig, cL as encodePath, cM as joinRelativeURL, cN as defineRenderHandler, i as getQuery, cO as createError, cP as destr, cQ as getRouteRules, cR as relative, cS as joinURL, cT as getResponseStatusText, cU as getResponseStatus, cV as useNitroApp } from '../nitro/nitro.mjs';
|
|
2
2
|
import { createHead as createHead$1, propsToString, renderSSRHead } from 'unhead/server';
|
|
3
3
|
import { isRef, toValue } from 'vue';
|
|
4
4
|
import { DeprecationsPlugin } from 'unhead/legacy';
|
|
@@ -208,7 +208,7 @@ function encodeForwardSlashes(str) {
|
|
|
208
208
|
|
|
209
209
|
const renderSSRHeadOptions = {"omitLineBreaks":true};
|
|
210
210
|
|
|
211
|
-
const entryFileName = "
|
|
211
|
+
const entryFileName = "Dpe9TNcA.js";
|
|
212
212
|
|
|
213
213
|
//#region src/runtime/handlers/renderer.ts
|
|
214
214
|
globalThis.__buildAssetsURL = buildAssetsURL;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as defineEventHandler,
|
|
1
|
+
import { d as defineEventHandler, cw as getRouterParam, cx as readUpload, s as sendError, I as sendImage } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|