wherdr 2.4.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.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/1gzTzt3j.js +9 -0
- package/.output/public/_nuxt/1gzTzt3j.js.br +0 -0
- package/.output/public/_nuxt/1gzTzt3j.js.gz +0 -0
- package/.output/public/_nuxt/AgentView.B6zltno1.css +1 -0
- package/.output/public/_nuxt/AgentView.B6zltno1.css.br +0 -0
- package/.output/public/_nuxt/AgentView.B6zltno1.css.gz +0 -0
- package/.output/public/_nuxt/{CLf2i_DM.js → Bd0Z2zzq.js} +1 -1
- package/.output/public/_nuxt/BrxmYJEM.js +1 -0
- package/.output/public/_nuxt/BrxmYJEM.js.br +0 -0
- package/.output/public/_nuxt/BrxmYJEM.js.gz +0 -0
- package/.output/public/_nuxt/C6fXOTRV.js +3 -0
- package/.output/public/_nuxt/C6fXOTRV.js.br +0 -0
- package/.output/public/_nuxt/C6fXOTRV.js.gz +0 -0
- package/.output/public/_nuxt/{CPlkxpge.js → CXbAL3Yu.js} +43 -42
- package/.output/public/_nuxt/CXbAL3Yu.js.br +0 -0
- package/.output/public/_nuxt/CXbAL3Yu.js.gz +0 -0
- package/.output/public/_nuxt/Cf1C5Vkb.js +27 -0
- package/.output/public/_nuxt/Cf1C5Vkb.js.br +0 -0
- package/.output/public/_nuxt/Cf1C5Vkb.js.gz +0 -0
- package/.output/public/_nuxt/CmTpxyM2.js +62 -0
- package/.output/public/_nuxt/CmTpxyM2.js.br +0 -0
- package/.output/public/_nuxt/CmTpxyM2.js.gz +0 -0
- package/.output/public/_nuxt/{BDTOz37p.js → DMzjoyW_.js} +1 -1
- package/.output/public/_nuxt/DMzjoyW_.js.br +0 -0
- package/.output/public/_nuxt/DMzjoyW_.js.gz +0 -0
- package/.output/public/_nuxt/{B2KlcBQ-.js → DOVT2Tt8.js} +1 -1
- package/.output/public/_nuxt/DOVT2Tt8.js.br +0 -0
- package/.output/public/_nuxt/{B2KlcBQ-.js.gz → DOVT2Tt8.js.gz} +0 -0
- package/.output/public/_nuxt/PjGJWal8.js +23 -0
- package/.output/public/_nuxt/PjGJWal8.js.br +0 -0
- package/.output/public/_nuxt/PjGJWal8.js.gz +0 -0
- package/.output/public/_nuxt/WPcHpWhL.js +31 -0
- package/.output/public/_nuxt/WPcHpWhL.js.br +0 -0
- package/.output/public/_nuxt/WPcHpWhL.js.gz +0 -0
- package/.output/public/_nuxt/{board.fZYj3O-m.css → board.CpFnG_Ho.css} +1 -1
- package/.output/public/_nuxt/board.CpFnG_Ho.css.br +0 -0
- package/.output/public/_nuxt/board.CpFnG_Ho.css.gz +0 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/d4aab09d-c1c4-4743-b8aa-35541006e853.json +1 -0
- package/.output/public/_nuxt/entry.DosS87kQ.css +2 -0
- package/.output/public/_nuxt/entry.DosS87kQ.css.br +0 -0
- package/.output/public/_nuxt/entry.DosS87kQ.css.gz +0 -0
- package/.output/public/_nuxt/nfsDZG4P.js +123 -0
- package/.output/public/_nuxt/nfsDZG4P.js.br +0 -0
- package/.output/public/_nuxt/nfsDZG4P.js.gz +0 -0
- package/.output/public/_nuxt/{CV6ukk-M.js → qODuBH5E.js} +1 -1
- package/.output/public/_nuxt/{settings.Cdb21nNw.css → settings.ycbeituV.css} +1 -1
- package/.output/public/_nuxt/settings.ycbeituV.css.br +0 -0
- package/.output/public/_nuxt/settings.ycbeituV.css.gz +0 -0
- package/.output/public/_nuxt/tYQOxjM1.js +1 -0
- package/.output/public/_nuxt/tYQOxjM1.js.br +0 -0
- package/.output/public/_nuxt/tYQOxjM1.js.gz +0 -0
- package/.output/public/sw.js +1 -1
- package/.output/server/chunks/_/branding.mjs +1 -1
- package/.output/server/chunks/_/fileDownload.mjs +1 -1
- package/.output/server/chunks/_/machineOrder.mjs +1 -1
- package/.output/server/chunks/_/onboarding.mjs +1 -1
- package/.output/server/chunks/_/package.mjs +1 -1
- package/.output/server/chunks/_/plugins.mjs +1 -1
- package/.output/server/chunks/_/restart.mjs +1 -1
- package/.output/server/chunks/_/selfupdate.mjs +1 -1
- package/.output/server/chunks/_/splitShell.mjs +42 -0
- package/.output/server/chunks/_/updates.mjs +1 -1
- package/.output/server/chunks/_/worktrees.mjs +1 -1
- package/.output/server/chunks/_/ws.mjs +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +14191 -13983
- package/.output/server/chunks/raw/check-leaks.mjs +1 -1
- package/.output/server/chunks/raw/ci-browser-plan.mjs +5 -0
- package/.output/server/chunks/raw/engine-changes.mjs +5 -0
- package/.output/server/chunks/raw/engine-result.mjs +7 -0
- package/.output/server/chunks/raw/prerelease.mjs +1 -1
- package/.output/server/chunks/raw/test-affected.mjs +1 -1
- package/.output/server/chunks/routes/api/_..._.mjs +3 -3
- package/.output/server/chunks/routes/api/agents.post.mjs +3 -3
- package/.output/server/chunks/routes/api/ask-tab.post.mjs +3 -3
- package/.output/server/chunks/routes/api/attach.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/disable.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/lock-all.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/lock.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/login/options.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/login/verify.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/max-session.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/register/options.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/register/verify.post.mjs +3 -3
- package/.output/server/chunks/routes/api/auth/status.get.mjs +3 -3
- package/.output/server/chunks/routes/api/changes.get.mjs +3 -3
- package/.output/server/chunks/routes/api/chat/image.get.mjs +3 -3
- package/.output/server/chunks/routes/api/chat.get.mjs +3 -3
- package/.output/server/chunks/routes/api/choose.post.mjs +3 -3
- package/.output/server/chunks/routes/api/claude-setup.post.mjs +3 -3
- package/.output/server/chunks/routes/api/claude-statusline.post.mjs +3 -3
- package/.output/server/chunks/routes/api/clear-queued-input.post.mjs +3 -3
- package/.output/server/chunks/routes/api/close/status.get.mjs +3 -3
- package/.output/server/chunks/routes/api/close-preview.get.mjs +62 -0
- package/.output/server/chunks/routes/api/close.post.mjs +3 -3
- package/.output/server/chunks/routes/api/codex-update.post.mjs +4 -4
- package/.output/server/chunks/routes/api/commands.get.mjs +4 -4
- package/.output/server/chunks/routes/api/config.get.mjs +4 -4
- package/.output/server/chunks/routes/api/dirs.get.mjs +4 -4
- package/.output/server/chunks/routes/api/dismiss-stopped.post.mjs +4 -4
- package/.output/server/chunks/routes/api/dismiss.post.mjs +4 -4
- package/.output/server/chunks/routes/api/effort.post.mjs +4 -4
- package/.output/server/chunks/routes/api/efforts.get.mjs +4 -4
- package/.output/server/chunks/routes/api/file.post.mjs +4 -4
- package/.output/server/chunks/routes/api/files/download.get.mjs +3 -3
- package/.output/server/chunks/routes/api/files/download.head.mjs +3 -3
- package/.output/server/chunks/routes/api/files/read.get.mjs +3 -3
- package/.output/server/chunks/routes/api/files.get.mjs +3 -3
- package/.output/server/chunks/routes/api/health.get.mjs +3 -3
- package/.output/server/chunks/routes/api/input.post.mjs +4 -4
- package/.output/server/chunks/routes/api/interrupt.post.mjs +4 -4
- package/.output/server/chunks/routes/api/isgit.get.mjs +4 -4
- package/.output/server/chunks/routes/api/machine/awake.get.mjs +3 -3
- package/.output/server/chunks/routes/api/machine/awake.post.mjs +3 -3
- package/.output/server/chunks/routes/api/machine/order.get.mjs +3 -3
- package/.output/server/chunks/routes/api/machine/order.post.mjs +3 -3
- package/.output/server/chunks/routes/api/machine/reconnect.post.mjs +4 -4
- package/.output/server/chunks/routes/api/machine/rename.post.mjs +4 -4
- package/.output/server/chunks/routes/api/machine/status.post.mjs +4 -4
- package/.output/server/chunks/routes/api/menu-left.post.mjs +4 -4
- package/.output/server/chunks/routes/api/menu.post.mjs +4 -4
- package/.output/server/chunks/routes/api/model.post.mjs +4 -4
- package/.output/server/chunks/routes/api/models.get.mjs +4 -4
- package/.output/server/chunks/routes/api/nav.post.mjs +4 -4
- package/.output/server/chunks/routes/api/onboarding.get.mjs +3 -3
- package/.output/server/chunks/routes/api/onboarding.post.mjs +3 -3
- package/.output/server/chunks/routes/api/phone.get.mjs +4 -4
- package/.output/server/chunks/routes/api/phone.post.mjs +4 -4
- package/.output/server/chunks/routes/api/plugins/actions.get.mjs +3 -3
- package/.output/server/chunks/routes/api/plugins/invoke.post.mjs +3 -3
- package/.output/server/chunks/routes/api/plugins/projects.get.mjs +4 -4
- package/.output/server/chunks/routes/api/plugins/projects.post.mjs +4 -4
- package/.output/server/chunks/routes/api/prompt.post.mjs +4 -4
- package/.output/server/chunks/routes/api/push/devices.post.mjs +49 -0
- package/.output/server/chunks/routes/api/push/quiet.post.mjs +4 -4
- package/.output/server/chunks/routes/api/push/subscribe.post.mjs +4 -4
- package/.output/server/chunks/routes/api/push/test.post.mjs +4 -4
- package/.output/server/chunks/routes/api/push/unsubscribe.post.mjs +4 -4
- package/.output/server/chunks/routes/api/quotas.get.mjs +4 -4
- package/.output/server/chunks/routes/api/rename.post.mjs +3 -3
- package/.output/server/chunks/routes/api/requeue.post.mjs +4 -4
- package/.output/server/chunks/routes/api/restart.get.mjs +3 -3
- package/.output/server/chunks/routes/api/restart.post.mjs +3 -3
- package/.output/server/chunks/routes/api/reveal.post.mjs +4 -4
- package/.output/server/chunks/routes/api/screen-key.post.mjs +4 -4
- package/.output/server/chunks/routes/api/screen.get.mjs +4 -4
- package/.output/server/chunks/routes/api/search.get.mjs +4 -4
- package/.output/server/chunks/routes/api/seen.post.mjs +4 -4
- package/.output/server/chunks/routes/api/send-now.post.mjs +4 -4
- package/.output/server/chunks/routes/api/sessions.get.mjs +4 -4
- package/.output/server/chunks/routes/api/sessions.post.mjs +4 -4
- package/.output/server/chunks/routes/api/settings-tab.post.mjs +4 -4
- package/.output/server/chunks/routes/api/settings.get.mjs +4 -4
- package/.output/server/chunks/routes/api/settings.post.mjs +4 -4
- package/.output/server/chunks/routes/api/space.post.mjs +4 -4
- package/.output/server/chunks/routes/api/split-command.post.mjs +7 -42
- package/.output/server/chunks/routes/api/state.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/action.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/add.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/after.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/approve.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/archive-done.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/archived.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/autopilot.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/autopilot.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/board-settings.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/board-settings.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/coordinator.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/coordinator.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/describe.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/details.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/limit.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/links.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/models.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/pick.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/project.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/project.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/question.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/scheduled.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/settings.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/start.get.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks/tell.post.mjs +4 -4
- package/.output/server/chunks/routes/api/tasks.get.mjs +4 -4
- package/.output/server/chunks/routes/api/unqueue.post.mjs +4 -4
- package/.output/server/chunks/routes/api/update/status.get.mjs +3 -3
- package/.output/server/chunks/routes/api/update.get.mjs +3 -3
- package/.output/server/chunks/routes/api/update.post.mjs +3 -3
- package/.output/server/chunks/routes/api/upload.post.mjs +4 -4
- package/.output/server/chunks/routes/api/worktrees/remove.post.mjs +3 -3
- package/.output/server/chunks/routes/api/worktrees.get.mjs +3 -3
- package/.output/server/chunks/routes/favicon.ico.get.mjs +3 -3
- package/.output/server/chunks/routes/icons/_name_.get.mjs +4 -4
- package/.output/server/chunks/routes/renderer.mjs +5 -5
- package/.output/server/chunks/routes/uploads/_...name_.get.mjs +4 -4
- package/.output/server/chunks/routes/ws/_..._.mjs +4 -4
- package/.output/server/chunks/routes/ws/events.mjs +4 -4
- package/.output/server/chunks/routes/ws/term.mjs +4 -4
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +4 -4
- package/.output/server/package.json +1 -1
- package/docs/README.md +2 -0
- package/docs/RELEASING.md +27 -5
- package/docs/configuration.md +3 -4
- package/docs/conversation.md +2 -3
- package/docs/design.md +1 -1
- package/docs/devices.md +28 -0
- package/docs/notifications.md +7 -0
- package/docs/quotas.md +7 -1
- package/docs/release-notes-2.5.0.md +25 -0
- package/docs/security.md +7 -0
- package/package.json +1 -1
- package/skills/wherdr/SKILL.md +21 -0
- package/.output/public/_nuxt/AgentView.B12D6ccj.css +0 -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/B2KlcBQ-.js.br +0 -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 +0 -25
- package/.output/public/_nuxt/BGD5AamG.js.br +0 -0
- package/.output/public/_nuxt/BGD5AamG.js.gz +0 -0
- package/.output/public/_nuxt/BxlzUs1i.js +0 -23
- 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 +0 -3
- package/.output/public/_nuxt/C-BDzEtI.js.br +0 -0
- package/.output/public/_nuxt/C-BDzEtI.js.gz +0 -0
- package/.output/public/_nuxt/CO4sDeSt.js +0 -62
- package/.output/public/_nuxt/CO4sDeSt.js.br +0 -0
- package/.output/public/_nuxt/CO4sDeSt.js.gz +0 -0
- package/.output/public/_nuxt/CPlkxpge.js.br +0 -0
- package/.output/public/_nuxt/CPlkxpge.js.gz +0 -0
- package/.output/public/_nuxt/CTPNZj4T.js +0 -9
- package/.output/public/_nuxt/CTPNZj4T.js.br +0 -0
- package/.output/public/_nuxt/CTPNZj4T.js.gz +0 -0
- package/.output/public/_nuxt/CwurhZnh.js +0 -123
- package/.output/public/_nuxt/CwurhZnh.js.br +0 -0
- package/.output/public/_nuxt/CwurhZnh.js.gz +0 -0
- package/.output/public/_nuxt/D7fCPncR.js +0 -1
- 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 +0 -1
- 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 +0 -31
- package/.output/public/_nuxt/Dpe9TNcA.js.br +0 -0
- package/.output/public/_nuxt/Dpe9TNcA.js.gz +0 -0
- 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/meta/75cc4ea7-3027-463a-aa3e-29e474ed7173.json +0 -1
- package/.output/public/_nuxt/entry.KNdllmoL.css +0 -2
- package/.output/public/_nuxt/entry.KNdllmoL.css.br +0 -0
- package/.output/public/_nuxt/entry.KNdllmoL.css.gz +0 -0
- package/.output/public/_nuxt/settings.Cdb21nNw.css.br +0 -0
- package/.output/public/_nuxt/settings.Cdb21nNw.css.gz +0 -0
package/docs/configuration.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[Documentation](README.md) · [Project](../README.md)
|
|
4
4
|
|
|
5
5
|
- **Themes**: wherdr Titanium (default), herdr.dev and Herdr's built-in themes, or follow your Herdr theme.
|
|
6
|
-
|
|
6
|
+
English interface.
|
|
7
7
|
|
|
8
8
|
## Configuration
|
|
9
9
|
|
|
@@ -20,7 +20,7 @@ native service (read at each start: `wherdr restart`, or **R** in the panel).
|
|
|
20
20
|
| `TAILNET_REFRESH_MS` | `30000` | How often wherdr reads again what `tailscale serve` publishes for its port. |
|
|
21
21
|
| `HERDR_WEB_ALLOWED_HOSTS` | *(empty)* | Additional hostnames or IP addresses allowed to open the app, comma-separated. |
|
|
22
22
|
| `PASSKEY_USER` | `wherdr` | User name stored with the passkeys. |
|
|
23
|
-
| `DATA_DIR` | `./data` | VAPID keys, push subscriptions, passkeys, recent folders, and `settings.json`: the display settings that follow you across devices (theme, machine bar and groups, home list, Board and file browser preferences). Screen-dependent ones (content width, sidebar width, terminal size and rendering), the
|
|
23
|
+
| `DATA_DIR` | `./data` | VAPID keys, push subscriptions, passkeys, recent folders, and `settings.json`: the display settings that follow you across devices (theme, machine bar and groups, home list, Board and file browser preferences). Screen-dependent ones (content width, sidebar width, terminal size and rendering), the last tab or filter and drafts stay in each browser. |
|
|
24
24
|
| `HERDR_BIN` | `~/.local/bin/herdr`, else `herdr` in `PATH` | Herdr binary. |
|
|
25
25
|
| `HERDR_WEB_SESSION` | *(default session)* | Named Herdr session to drive. Not `HERDR_SESSION`, which Herdr reads itself. |
|
|
26
26
|
| `HERDR_PROJECTS_DATA_DIR` | `~/.herdr-projects/data` | herdr-projects' data folder, where wherdr reads the `PATH` it recorded ([Agent PATH](installation.md#agent-path)). |
|
|
@@ -34,8 +34,7 @@ native service (read at each start: `wherdr restart`, or **R** in the panel).
|
|
|
34
34
|
| `TZ` | `UTC` | Time zone. |
|
|
35
35
|
|
|
36
36
|
In the app, **Settings** holds display preferences such as theme, typing effect and what the
|
|
37
|
-
home screen shows; these follow you across devices through `settings.json`.
|
|
38
|
-
notifications, terminal text size and renderer remain device-specific. The passkey lock is
|
|
37
|
+
home screen shows; these follow you across devices through `settings.json`. Notifications, terminal text size and renderer remain device-specific. The passkey lock is
|
|
39
38
|
managed under Settings › Security.
|
|
40
39
|
|
|
41
40
|
## Paste diagnostics
|
package/docs/conversation.md
CHANGED
|
@@ -100,7 +100,7 @@ same lines as text, a fallback if the tokens misbehave. The message sent is the
|
|
|
100
100
|
|
|
101
101
|
A **closed question**, one that yes or no answers in full, also gets **Yes** and **No** next to
|
|
102
102
|
its `↳` (at the end of its row in the list style). A tap refers to the question and writes the
|
|
103
|
-
answer under it
|
|
103
|
+
answer under it (`Yes` or `No`), exactly as Reply and typing would; nothing is sent, so several questions can be
|
|
104
104
|
answered in a row before sending. On a computer a click hands the field the focus, the caret
|
|
105
105
|
right after the answer, so Enter sends it at once; the keyboard stays down on a phone, and a
|
|
106
106
|
button pressed with the keyboard keeps the focus. Tapping the other answer
|
|
@@ -115,8 +115,7 @@ them, gets a panel right under it: **OK to all** refers to the whole table and w
|
|
|
115
115
|
under it (a second tap takes it back), and each row has **Yes**, **No** and `↳`, which refer to
|
|
116
116
|
the row by its number and write `Yes` or `No` under it, or nothing for an answer in words; a row
|
|
117
117
|
that asks an open question has `↳` alone. Every answer names the message and the row, even for
|
|
118
|
-
the last message: the agent may write another one before you send.
|
|
119
|
-
`Non`. Here too everything is composed in the field and you send; on a computer the field takes the focus
|
|
118
|
+
the last message: the agent may write another one before you send. Here too everything is composed in the field and you send; on a computer the field takes the focus
|
|
120
119
|
after a click, so Enter sends. A table qualifies when it has a
|
|
121
120
|
number column (a header `#`, `N°`, `No`, `Num`, `ID` or `Q` over short numbers, each once) and a
|
|
122
121
|
question column, known by its header (`Question`, `Decision`, `Choix`…), by cells that all end
|
package/docs/design.md
CHANGED
|
@@ -97,7 +97,7 @@ implementations.
|
|
|
97
97
|
## Text and layout checks
|
|
98
98
|
|
|
99
99
|
Follow [Contributing: Conventions](../CONTRIBUTING.md#conventions) for English
|
|
100
|
-
|
|
100
|
+
only interface text and `t()` / `tl()` usage; French translations are optional. Do not duplicate
|
|
101
101
|
those translation rules here. Examples: the translated Send label in
|
|
102
102
|
[Composer.vue](../app/components/Composer.vue) and Back in
|
|
103
103
|
[AgentView.vue](../app/components/AgentView.vue).
|
package/docs/devices.md
CHANGED
|
@@ -38,6 +38,30 @@
|
|
|
38
38
|
|
|
39
39
|
### On a phone
|
|
40
40
|
|
|
41
|
+
- **Compact agent header**: a 44 px bar holds Back, one two-line identity, Terminal and Options.
|
|
42
|
+
The identity shows the pane name, then its square state indicator, state label and agent kind.
|
|
43
|
+
Tap it (always available, even for a lone pane) for the machine/space context and everything
|
|
44
|
+
that manages panes and tabs: switching (listed only when there are several; a lone pane shows its
|
|
45
|
+
full name and state instead), then the current
|
|
46
|
+
pane (rename, split, move, swap, copy ID, then **Close this conversation** or **Close this
|
|
47
|
+
terminal**: only that pane, from either view) and the current tab (rename, new tab, tab
|
|
48
|
+
overview). **Close entire space…** stands apart, and only when the space holds other panes: a
|
|
49
|
+
lone pane has a single close, whose confirmation says the space closes too. A tab closes from its
|
|
50
|
+
overview, which says how many panes go. Every close confirmation names what stops, how many tabs
|
|
51
|
+
and panes go and what stays open; if the structure changes while it is open and the close would
|
|
52
|
+
now take more, the updated confirmation is shown again. Long names ellipsize; multiple panes
|
|
53
|
+
show their position, never 1/1.
|
|
54
|
+
Options keeps the conversation, the agent and its tools: Terminal/Conversation, search,
|
|
55
|
+
notifications, changes, files, plugin actions, take control, restart, reconnect and settings.
|
|
56
|
+
- **Terminal function keys** start closed. The square chevron button above Send shows or hides
|
|
57
|
+
one horizontally scrolling row in both Conversation and Terminal. It holds Ctrl, Esc, Tab,
|
|
58
|
+
arrows, Enter, Ctrl+C, Backspace and the remaining modifiers and function keys. The phone-keyboard
|
|
59
|
+
toggle comes first, and Home, End, PgUp, PgDn, Insert and Delete are available in both modes.
|
|
60
|
+
In Conversation the keyboard toggle focuses the message field, and navigation uses the
|
|
61
|
+
named-key API without opening a terminal connection.
|
|
62
|
+
Select Shift then Tab for Shift+Tab. Closing the bar clears any armed modifier.
|
|
63
|
+
The input stays on one row at rest and expands while editing. Desktop and tablet layouts
|
|
64
|
+
keep their existing controls.
|
|
41
65
|
- **Installable app (PWA)** on iPhone and Android, with safe-area and keyboard handling.
|
|
42
66
|
- **Web Push notifications** when an agent finishes or needs you (with its question), and for
|
|
43
67
|
`herdr notification show` (plugins, scripts).
|
|
@@ -45,6 +69,10 @@
|
|
|
45
69
|
- **Split tabs on a small screen**: a plan of the tab's panes in Herdr's proportions, then each
|
|
46
70
|
pane full screen with a mini-map and swipe to its neighbours.
|
|
47
71
|
- **Terminal key bar** (Esc, Enter, arrows, Shift+Tab, Ctrl+C…) and touch scrolling.
|
|
72
|
+
On iPhone and iPad a tap on the terminal does not open the on-screen keyboard: type in the
|
|
73
|
+
message field, or tap the key bar's keyboard button to type in the terminal.
|
|
74
|
+
Terminal links back to this app stay in the current window on a phone; external
|
|
75
|
+
links still open separately.
|
|
48
76
|
- **Offline reading** of the last known state and of recently opened conversations.
|
|
49
77
|
|
|
50
78
|
### On an iPad
|
package/docs/notifications.md
CHANGED
|
@@ -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):
|
|
@@ -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
package/skills/wherdr/SKILL.md
CHANGED
|
@@ -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
|
-
.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}.key-modifier[aria-pressed=true][data-v-33673e53]{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.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}.dismissible-transcript-note[data-v-745f7953]{flex:none;align-items:center;gap:8px;padding:0 4px 0 12px;display:flex}.dismissible-transcript-note>span[data-v-745f7953]{flex:1;padding:7px 0}.dismissible-transcript-note>button[data-v-745f7953]{min-width:40px;min-height:40px;color:var(--muted);font:22px/1 var(--sans);touch-action:manipulation;border-radius:6px;flex:none;align-self:stretch}.dismissible-transcript-note>button[data-v-745f7953]:focus-visible,.dismissible-transcript-note>button[data-v-745f7953]:hover{color:var(--text);background:var(--line-soft)}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import{A as e,B as t,Ft as n,Hn as r,Jt as i,M as a,Mn as o,N as s,Ot as c,P as l,Pt as u,Rt as d,St as f,U as p,V as m,Zt as h,b as g,fr as _,gr as v,hr as y,ht as b,j as x,ln as S,mt as C,nn as w,sn as T,vt as E,wn as D,zn as O}from"./C25ROUa9.js";import{_t as k,gt as A,ht as ee,vt as j}from"./CDWjMk9C.js";import{$n as M,At as N,Ct as P,Dr as F,Et as te,G as I,It as ne,Jn as L,Lt as R,Nt as z,Ot as re,Qn as B,Rt as ie,Tt as ae,W as oe,Xn as se,Y as V,Yn as H,Z as ce,Zn as le,_r as ue,_t as de,at as fe,b as pe,cr as me,dr as he,dt as ge,er as _e,f as U,fr as ve,gr as W,h as ye,hr as be,ir as xe,k as Se,kt as Ce,lr as we,m as Te,mr as Ee,nr as De,or as Oe,pr as ke,qn as Ae,r as je,rr as Me,s as Ne,sr as Pe,ti as Fe,un as Ie,ur as Le,x as G,y as Re}from"./BxlzUs1i.js";import{f as ze,p as Be,u as Ve}from"./CXJnLmWv.js";import{t as He}from"./Bpoxvzh6.js";import{c as Ue,r as K}from"./B2KlcBQ-.js";import{$ as We,B as Ge,Br as Ke,C as qe,Ct as Je,D as q,Dt as Ye,Et as Xe,Fr as Ze,Ir as Qe,Jr as $e,L as et,Lr as tt,M as nt,Mr as rt,O as it,Ot as at,Pr as ot,Rr as st,S as ct,St as lt,T as ut,Ti as dt,V as ft,W as pt,Wr as mt,Zr as ht,_ as gt,a as _t,at as vt,b as yt,ci as bt,ei as xt,et as St,f as Ct,g as wt,gt as Tt,h as Et,ht as Dt,i as Ot,it as kt,j as At,k as jt,li as J,n as Mt,o as Nt,pt as Pt,rt as Ft,si as It,ui as Y,ur as Lt,v as X,vt as Rt,wt as Z,x as Q}from"./CwurhZnh.js";import{F as zt,I as Bt,L as Vt,P as Ht,S as Ut,_ as Wt,a as Gt,f as Kt,i as qt,l as Jt,n as Yt,o as Xt,p as $,r as Zt,s as Qt,t as $t,x as en}from"./D7fCPncR.js";import{a as tn,h as nn,i as rn,l as an,m as on,n as sn,o as cn,r as ln,s as un,t as dn}from"./CO4sDeSt.js";import{t as fn}from"./BDNMzG2s.js";import{A as pn,M as mn,a as hn,c as gn,f as _n,i as vn,j as yn,k as bn,l as xn,n as Sn,o as Cn,r as wn,s as Tn,u as En}from"#entry";import{a as Dn,c as On,i as kn,l as An,n as jn,o as Mn,r as Nn,s as Pn,t as Fn}from"./BDTOz37p.js";var In=`radio.select`;function Ln(e,t,n){P(In,n,{originalEvent:e,value:t})}var Rn=p({inheritAttrs:!1,__name:`Radio`,props:{id:{type:String,required:!1},value:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},checked:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:[`update:checked`,`select`],setup(t,{emit:i}){let o=t,u=i,d=ge(o,`checked`,u,{passive:o.checked===void 0}),{value:f}=O(o),{forwardRef:p,currentElement:h}=V(),_=Vt(h),v=Bt(),y=e(()=>o.id&&h.value?document.querySelector(`[for="${o.id}"]`)?.innerText:void 0);function b(e){o.disabled||Ln(e,o.value,e=>{u(`select`,e),!e?.defaultPrevented&&(d.value=!0,_.value&&e.stopPropagation())})}return(e,t)=>(c(),l(g,null,[m(r(oe),C({id:e.id,ref:r(p),role:`radio`,type:e.as===`button`?`button`:void 0,as:e.as,"aria-checked":r(d)??!1,"aria-label":y.value,"as-child":e.asChild,disabled:e.disabled?``:void 0,"data-state":r(d)?`checked`:`unchecked`,"data-disabled":e.disabled?``:void 0,value:r(f),required:e.required,name:e.name},{...r(v),...e.$attrs},{onClick:j(b,[`stop`])}),{default:T(()=>[n(e.$slots,`default`,{checked:r(d)})]),_:3},16,[`id`,`type`,`as`,`aria-checked`,`aria-label`,`as-child`,`disabled`,`data-state`,`data-disabled`,`value`,`required`,`name`]),r(_)&&e.name?(c(),a(r(zt),C({key:0,type:`radio`,tabindex:`-1`,value:r(f),checked:!!r(d),name:e.name,disabled:e.disabled,required:e.required},r(v)),null,16,[`value`,`checked`,`name`,`disabled`,`required`])):s(`v-if`,!0)],64))}}),[zn,Bn]=ae(`RadioGroupRoot`),Vn=p({__name:`RadioGroupRoot`,props:{modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1,default:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let i=e,o=t,{forwardRef:l,currentElement:u}=V(),d=ge(i,`modelValue`,o,{defaultValue:i.defaultValue,passive:i.modelValue===void 0}),{disabled:f,loop:p,orientation:h,name:g,required:_,dir:v}=O(i),y=ce(v),b=Vt(u);return Bn({modelValue:d,changeModelValue:e=>{d.value=e},disabled:f,loop:p,orientation:h,name:g?.value,required:_}),(e,t)=>(c(),a(r(Se),{"as-child":``,orientation:r(h),dir:r(y),loop:r(p)},{default:T(()=>[m(r(oe),{ref:r(l),role:`radiogroup`,"data-disabled":r(f)?``:void 0,"as-child":e.asChild,as:e.as,"aria-orientation":r(h),"aria-required":r(_),dir:r(y)},{default:T(()=>[n(e.$slots,`default`,{modelValue:r(d)}),r(b)&&r(g)?(c(),a(r(zt),{key:0,required:r(_),disabled:r(f),value:r(d),name:r(g)},null,8,[`required`,`disabled`,`value`,`name`])):s(`v-if`,!0)]),_:3},8,[`data-disabled`,`as-child`,`as`,`aria-orientation`,`aria-required`,`dir`])]),_:3},8,[`orientation`,`dir`,`loop`]))}}),[Hn,Un]=ae(`RadioGroupItem`),Wn=p({inheritAttrs:!1,__name:`RadioGroupItem`,props:{id:{type:String,required:!1},value:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:[`select`],setup(t,{emit:i}){let s=t,l=i,{forwardRef:u,currentElement:d}=V(),f=zn(),p=e(()=>f.disabled.value||s.disabled),h=e(()=>f.required.value||s.required),g=e(()=>K(f.modelValue?.value,s.value));Un({disabled:p,checked:g});let _=o(!1),v=[`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`];fe(`keydown`,e=>{v.includes(e.key)&&(_.value=!0)}),fe(`keyup`,()=>{_.value=!1});function y(){setTimeout(()=>{_.value&&d.value?.click()},0)}let b=Bt();return(e,t)=>(c(),a(r(nn),{checked:g.value,disabled:p.value,"as-child":``,focusable:!p.value,active:g.value},{default:T(()=>[m(Rn,C({...r(b),...e.$attrs,...s},{ref:r(u),checked:g.value,required:h.value,disabled:p.value,"onUpdate:checked":t[0]||=t=>r(f).changeModelValue(e.value),onSelect:t[1]||=e=>l(`select`,e),onKeydown:t[2]||=k(j(()=>{},[`prevent`]),[`enter`]),onFocus:y}),{default:T(()=>[n(e.$slots,`default`,{checked:g.value,required:h.value,disabled:p.value})]),_:3},16,[`checked`,`required`,`disabled`])]),_:3},8,[`checked`,`disabled`,`focusable`,`active`]))}}),Gn=p({__name:`RadioGroupIndicator`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){let{forwardRef:t}=V(),i=Hn();return(e,o)=>(c(),a(r(I),{present:e.forceMount||r(i).checked.value},{default:T(()=>[m(r(oe),C({ref:r(t),"data-state":r(i).checked.value?`checked`:`unchecked`,"data-disabled":r(i).disabled.value?``:void 0,"as-child":e.asChild,as:e.as},e.$attrs),{default:T(()=>[n(e.$slots,`default`)]),_:3},16,[`data-state`,`data-disabled`,`as-child`,`as`])]),_:3},8,[`present`]))}}),Kn={slots:{root:`relative`,fieldset:`flex gap-x-2`,legend:`mb-1 block font-medium text-default`,item:`flex items-start`,container:`flex items-center`,base:`rounded-full ring ring-inset ring-accented overflow-hidden focus-visible:outline-none`,indicator:`flex items-center justify-center size-full after:bg-default after:rounded-full`,wrapper:`w-full`,label:`block font-medium text-default`,icon:`shrink-0`,description:`text-muted`},variants:{color:{primary:{indicator:`bg-primary`},neutral:{indicator:`bg-inverted`},success:{indicator:`bg-success`},warning:{indicator:`bg-warning`},error:{indicator:`bg-error`},info:{indicator:`bg-info`}},variant:{list:{fieldset:`flex-wrap`,item:``},card:{fieldset:`flex-wrap`,item:[`border border-default rounded-lg hover:not-has-disabled:not-has-focus-visible:not-has-data-[state=checked]:bg-elevated/50`,`transition-colors`]},table:{item:[`border border-default hover:not-has-disabled:not-has-focus-visible:not-has-data-[state=checked]:bg-elevated/50`,`transition-colors`]}},orientation:{horizontal:{fieldset:`flex-row`},vertical:{fieldset:`flex-col`}},indicator:{start:{item:`flex-row`,wrapper:`ms-2`},end:{item:`flex-row-reverse`,wrapper:`me-2`},hidden:{base:`sr-only`,wrapper:`flex flex-col items-center gap-1 text-center`}},size:{xs:{fieldset:`gap-y-0.5`,legend:`text-xs`,base:`size-3`,item:`text-xs`,container:`h-4`,indicator:`after:size-1`},sm:{fieldset:`gap-y-0.5`,legend:`text-xs`,base:`size-3.5`,item:`text-xs`,container:`h-4`,indicator:`after:size-1`},md:{fieldset:`gap-y-1`,legend:`text-sm`,base:`size-4`,item:`text-sm`,container:`h-5`,indicator:`after:size-1.5`},lg:{fieldset:`gap-y-1`,legend:`text-sm`,base:`size-4.5`,item:`text-sm`,container:`h-5`,indicator:`after:size-1.5`},xl:{fieldset:`gap-y-1.5`,legend:`text-base`,base:`size-5`,item:`text-base`,container:`h-6`,indicator:`after:size-2`}},highlight:{true:``,false:``},disabled:{true:{item:`opacity-75`,base:`cursor-not-allowed`,label:`cursor-not-allowed`,description:`cursor-not-allowed`}},required:{true:{legend:`after:content-['*'] after:ms-0.5 after:text-error`}}},compoundVariants:[{indicator:`hidden`,class:{container:`h-auto`}},{variant:[`card`,`table`],highlight:!1,class:{item:`hover:not-has-disabled:not-has-focus-visible:not-has-data-[state=checked]:border-accented`}},{size:`xs`,indicator:`hidden`,class:{icon:`size-3`}},{size:`sm`,indicator:`hidden`,class:{icon:`size-3.5`}},{size:`md`,indicator:`hidden`,class:{icon:`size-4`}},{size:`lg`,indicator:`hidden`,class:{icon:`size-4.5`}},{size:`xl`,indicator:`hidden`,class:{icon:`size-5`}},{size:`xs`,variant:[`card`,`table`],class:{item:`p-2.5`}},{size:`sm`,variant:[`card`,`table`],class:{item:`p-3`}},{size:`md`,variant:[`card`,`table`],class:{item:`p-3.5`}},{size:`lg`,variant:[`card`,`table`],class:{item:`p-4`}},{size:`xl`,variant:[`card`,`table`],class:{item:`p-4.5`}},{orientation:`horizontal`,variant:`table`,class:{item:`first-of-type:rounded-s-lg last-of-type:rounded-e-lg`,fieldset:`gap-0 -space-x-px`}},{orientation:`vertical`,variant:`table`,class:{item:`first-of-type:rounded-t-lg last-of-type:rounded-b-lg`,fieldset:`gap-0 -space-y-px`}},{color:`primary`,variant:`list`,indicator:[`start`,`end`],class:{base:`outline-primary/25 focus-visible:outline-solid focus-visible:outline-3 focus-visible:ring-primary`}},{color:`neutral`,variant:`list`,indicator:[`start`,`end`],class:{base:`outline-neutral/25 focus-visible:outline-solid focus-visible:outline-3 focus-visible:ring-neutral`}},{color:`success`,variant:`list`,indicator:[`start`,`end`],class:{base:`outline-success/25 focus-visible:outline-solid focus-visible:outline-3 focus-visible:ring-success`}},{color:`warning`,variant:`list`,indicator:[`start`,`end`],class:{base:`outline-warning/25 focus-visible:outline-solid focus-visible:outline-3 focus-visible:ring-warning`}},{color:`error`,variant:`list`,indicator:[`start`,`end`],class:{base:`outline-error/25 focus-visible:outline-solid focus-visible:outline-3 focus-visible:ring-error`}},{color:`info`,variant:`list`,indicator:[`start`,`end`],class:{base:`outline-info/25 focus-visible:outline-solid focus-visible:outline-3 focus-visible:ring-info`}},{color:`neutral`,variant:`list`,indicator:[`start`,`end`],class:{base:`outline-inverted/25 focus-visible:outline-solid focus-visible:outline-3 focus-visible:ring-inverted`}},{color:`primary`,variant:[`card`,`table`],class:{item:`outline-primary/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-primary has-focus-visible:z-[1]`}},{color:`neutral`,variant:[`card`,`table`],class:{item:`outline-neutral/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-neutral has-focus-visible:z-[1]`}},{color:`success`,variant:[`card`,`table`],class:{item:`outline-success/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-success has-focus-visible:z-[1]`}},{color:`warning`,variant:[`card`,`table`],class:{item:`outline-warning/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-warning has-focus-visible:z-[1]`}},{color:`error`,variant:[`card`,`table`],class:{item:`outline-error/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-error has-focus-visible:z-[1]`}},{color:`info`,variant:[`card`,`table`],class:{item:`outline-info/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-info has-focus-visible:z-[1]`}},{color:`neutral`,variant:[`card`,`table`],class:{item:`outline-inverted/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-inverted has-focus-visible:z-[1]`}},{color:`primary`,variant:`list`,indicator:`hidden`,class:{item:`outline-primary/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-primary has-focus-visible:z-[1]`}},{color:`neutral`,variant:`list`,indicator:`hidden`,class:{item:`outline-neutral/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-neutral has-focus-visible:z-[1]`}},{color:`success`,variant:`list`,indicator:`hidden`,class:{item:`outline-success/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-success has-focus-visible:z-[1]`}},{color:`warning`,variant:`list`,indicator:`hidden`,class:{item:`outline-warning/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-warning has-focus-visible:z-[1]`}},{color:`error`,variant:`list`,indicator:`hidden`,class:{item:`outline-error/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-error has-focus-visible:z-[1]`}},{color:`info`,variant:`list`,indicator:`hidden`,class:{item:`outline-info/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-info has-focus-visible:z-[1]`}},{color:`neutral`,variant:`list`,indicator:`hidden`,class:{item:`outline-inverted/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-inverted has-focus-visible:z-[1]`}},{color:`primary`,variant:`card`,class:{item:`has-data-[state=checked]:border-primary/50 has-data-[state=checked]:bg-primary/10`}},{color:`neutral`,variant:`card`,class:{item:`has-data-[state=checked]:border-neutral/50 has-data-[state=checked]:bg-neutral/10`}},{color:`success`,variant:`card`,class:{item:`has-data-[state=checked]:border-success/50 has-data-[state=checked]:bg-success/10`}},{color:`warning`,variant:`card`,class:{item:`has-data-[state=checked]:border-warning/50 has-data-[state=checked]:bg-warning/10`}},{color:`error`,variant:`card`,class:{item:`has-data-[state=checked]:border-error/50 has-data-[state=checked]:bg-error/10`}},{color:`info`,variant:`card`,class:{item:`has-data-[state=checked]:border-info/50 has-data-[state=checked]:bg-info/10`}},{color:`neutral`,variant:`card`,class:{item:`has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:bg-elevated`}},{color:`primary`,variant:`table`,class:{item:`has-data-[state=checked]:bg-primary/10 has-data-[state=checked]:border-primary/50 has-data-[state=checked]:z-[1]`}},{color:`neutral`,variant:`table`,class:{item:`has-data-[state=checked]:bg-neutral/10 has-data-[state=checked]:border-neutral/50 has-data-[state=checked]:z-[1]`}},{color:`success`,variant:`table`,class:{item:`has-data-[state=checked]:bg-success/10 has-data-[state=checked]:border-success/50 has-data-[state=checked]:z-[1]`}},{color:`warning`,variant:`table`,class:{item:`has-data-[state=checked]:bg-warning/10 has-data-[state=checked]:border-warning/50 has-data-[state=checked]:z-[1]`}},{color:`error`,variant:`table`,class:{item:`has-data-[state=checked]:bg-error/10 has-data-[state=checked]:border-error/50 has-data-[state=checked]:z-[1]`}},{color:`info`,variant:`table`,class:{item:`has-data-[state=checked]:bg-info/10 has-data-[state=checked]:border-info/50 has-data-[state=checked]:z-[1]`}},{color:`neutral`,variant:`table`,class:{item:`has-data-[state=checked]:bg-elevated has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:z-[1]`}},{variant:[`card`,`table`],disabled:!0,class:{item:`cursor-not-allowed`}},{color:`primary`,indicator:`hidden`,highlight:!0,class:{item:`not-has-disabled:border-primary not-has-disabled:has-data-[state=checked]:border-primary`}},{color:`neutral`,indicator:`hidden`,highlight:!0,class:{item:`not-has-disabled:border-neutral not-has-disabled:has-data-[state=checked]:border-neutral`}},{color:`success`,indicator:`hidden`,highlight:!0,class:{item:`not-has-disabled:border-success not-has-disabled:has-data-[state=checked]:border-success`}},{color:`warning`,indicator:`hidden`,highlight:!0,class:{item:`not-has-disabled:border-warning not-has-disabled:has-data-[state=checked]:border-warning`}},{color:`error`,indicator:`hidden`,highlight:!0,class:{item:`not-has-disabled:border-error not-has-disabled:has-data-[state=checked]:border-error`}},{color:`info`,indicator:`hidden`,highlight:!0,class:{item:`not-has-disabled:border-info not-has-disabled:has-data-[state=checked]:border-info`}},{color:`neutral`,indicator:`hidden`,highlight:!0,class:{item:`not-has-disabled:border-inverted not-has-disabled:has-data-[state=checked]:border-inverted`}},{color:`primary`,highlight:!0,class:{base:`ring-primary`}},{color:`neutral`,highlight:!0,class:{base:`ring-neutral`}},{color:`success`,highlight:!0,class:{base:`ring-success`}},{color:`warning`,highlight:!0,class:{base:`ring-warning`}},{color:`error`,highlight:!0,class:{base:`ring-error`}},{color:`info`,highlight:!0,class:{base:`ring-info`}},{color:`neutral`,highlight:!0,class:{base:`ring-inverted`}}],defaultVariants:{highlight:!1,size:`md`,color:`primary`,variant:`list`,indicator:`start`}},qn={__name:`URadioGroup`,props:{as:{type:null,required:!1},legend:{type:String,required:!1},valueKey:{type:null,required:!1,default:`value`},labelKey:{type:null,required:!1,default:`label`},descriptionKey:{type:null,required:!1,default:`description`},items:{type:null,required:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},size:{type:null,required:!1},variant:{type:null,required:!1},color:{type:null,required:!1},highlight:{type:Boolean,required:!1},orientation:{type:null,required:!1,default:`vertical`},indicator:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},disabled:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:[`change`,`update:modelValue`],setup(o,{emit:f}){let p=o,y=f,b=h(),S=pe(`radioGroup`,p),w=Ue(),E=Re(de(S,`as`,`loop`,`required`),y),{emitFormChange:D,emitFormInput:O,color:k,name:A,size:ee,highlight:j,id:M,disabled:N,ariaAttrs:P}=ye(p,{bind:!1}),F=M.value??i(),te=e(()=>k.value??S.color),I=e(()=>j.value??S.highlight),ne=e(()=>ee.value??S.size),L=e(()=>N.value??S.disabled),R=e(()=>Te({extend:Kn,...w.ui?.radioGroup||{}})({size:ne.value,color:te.value,highlight:I.value,disabled:L.value,required:S.required,orientation:S.orientation,variant:S.variant,indicator:S.indicator}));function z(e){if(e===null)return{id:`${F}:null`,value:void 0,label:void 0};if(typeof e==`string`||typeof e==`number`||typeof e==`bigint`)return{id:`${F}:${e}`,value:String(e),label:String(e)};let t=G(e,S.valueKey),n=G(e,S.labelKey),r=G(e,S.descriptionKey);return{...e,value:t,label:n,description:r,id:`${F}:${t}`}}let re=e(()=>S.items?S.items.map(z):[]);function B(e){return S.indicator===`hidden`?e.icon:void 0}function ie(e){let t=new Event(`change`,{target:{value:e}});y(`change`,t),D(),O()}return(e,i)=>(c(),a(r(Vn),C({id:r(F)},r(E),{"model-value":r(S).modelValue,"default-value":r(S).defaultValue,orientation:r(S).orientation,name:r(A),disabled:L.value,"data-slot":`root`,class:R.value.root({class:[r(S).ui?.root,r(S).class]}),"onUpdate:modelValue":ie}),{default:T(()=>[x(`fieldset`,C({"data-slot":`fieldset`,class:R.value.fieldset({class:r(S).ui?.fieldset})},r(P)),[r(S).legend||b.legend?(c(),l(`legend`,{key:0,"data-slot":`legend`,class:_(R.value.legend({class:r(S).ui?.legend}))},[n(e.$slots,`legend`,{},()=>[t(v(r(S).legend),1)])],2)):s(``,!0),(c(!0),l(g,null,u(re.value,i=>(c(),a(d(!r(S).variant||r(S).variant===`list`?`div`:r(Ht)),{key:i.value,"data-slot":`item`,class:_(R.value.item({class:[r(S).ui?.item,i.ui?.item,i.class],disabled:i.disabled||L.value}))},{default:T(()=>[x(`div`,{"data-slot":`container`,class:_(R.value.container({class:[r(S).ui?.container,i.ui?.container]}))},[m(r(Wn),{id:i.id,value:i.value,disabled:i.disabled||L.value,"data-slot":`base`,class:_(R.value.base({class:[r(S).ui?.base,i.ui?.base],disabled:i.disabled||L.value}))},{default:T(()=>[m(r(Gn),{"data-slot":`indicator`,class:_(R.value.indicator({class:[r(S).ui?.indicator,i.ui?.indicator]}))},null,8,[`class`])]),_:2},1032,[`id`,`value`,`disabled`,`class`])],2),B(i)||i.label||b.label||i.description||b.description?(c(),l(`div`,{key:0,"data-slot":`wrapper`,class:_(R.value.wrapper({class:[r(S).ui?.wrapper,i.ui?.wrapper]}))},[B(i)?(c(),a(U,{key:0,name:B(i),"data-slot":`icon`,class:_(R.value.icon({class:[r(S).ui?.icon,i.ui?.icon]}))},null,8,[`name`,`class`])):s(``,!0),i.label||b.label?(c(),a(d(!r(S).variant||r(S).variant===`list`?r(Ht):`p`),{key:1,for:i.id,"data-slot":`label`,class:_(R.value.label({class:[r(S).ui?.label,i.ui?.label],disabled:i.disabled||L.value}))},{default:T(()=>[n(e.$slots,`label`,{item:i,modelValue:r(S).modelValue},()=>[t(v(i.label),1)])]),_:2},1032,[`for`,`class`])):s(``,!0),i.description||b.description?(c(),l(`p`,{key:2,"data-slot":`description`,class:_(R.value.description({class:[r(S).ui?.description,i.ui?.description],disabled:i.disabled||L.value}))},[n(e.$slots,`description`,{item:i,modelValue:r(S).modelValue},()=>[t(v(i.description),1)])],2)):s(``,!0)],2)):s(``,!0)]),_:2},1032,[`class`]))),128))],16)]),_:3},16,[`id`,`model-value`,`default-value`,`orientation`,`name`,`disabled`,`class`]))}},Jn={class:`theme-section-title bar-pref-title`},Yn={key:0,class:`settings-toggle`},Xn={class:`bar-pref-head`},Zn={class:`machine-group-list`},Qn=[`onClick`],$n={class:`machine-group-summary`},er={class:`machine-group-name`},tr={class:`muted settings-hint`},nr={key:2,class:`bar-pref-head`},rr=[`data-bar-id`],ir=[`aria-label`,`title`,`onPointerdown`,`onKeydown`],ar={class:`bar-pref-label`},or=[`checked`,`onChange`],sr=[`title`],cr={key:2},lr={key:4,class:`machine-group-actions`},ur={class:`muted settings-hint`},dr=Object.assign(p({__name:`MachineBarSettings`,setup(n){f(Zt);let i=Xt,d=o(null),p=o([]),h=e=>ft(pt.value.find(t=>(t.baseKey??t.key)===e)?.key??e)||e||At.value||`herdr`;function C(e){d.value=e?{...e,machines:[...e.machines]}:{id:`*group:${crypto.randomUUID()}`,name:``,machines:[]},p.value=[...new Set([...d.value.machines,...Kt.value.length?Kt.value:[``]])]}let O=ze(),k=o(null);w(()=>[O.query.group,$.value.length],([e])=>{let t=typeof e==`string`?$.value.find(t=>t.id===e):void 0;if(!t)return;C(t);let{group:n,...r}=O.query;Ve({path:O.path,query:r},{replace:!0}),b(()=>k.value?.scrollIntoView?.({block:`start`}))},{immediate:!0});function A(){let e=d.value;if(!e?.name.trim())return;let t={...e,name:e.name.trim(),machines:p.value.filter(t=>e.machines.includes(t))};$.value=$.value.some(e=>e.id===t.id)?$.value.map(e=>e.id===t.id?t:e):[...$.value,t],d.value=null}function j(){let e=d.value.id;$.value=$.value.filter(t=>t.id!==e),Qt.value=Qt.value.filter(t=>t!==e),qt.value=qt.value.filter(t=>t!==e),Jt.value===e&&(Jt.value=`*`),d.value=null}let M=o(null),N=o(null),P={online:`online`,connecting:`reconnecting…`,offline:`offline`};function F(e){let t=pt.value.filter(t=>(t.baseKey??t.key)===e);return t.length?t.some(e=>e.status===`online`)?`online`:t.some(e=>e.status===`connecting`)?`connecting`:`offline`:e===``&&q.value.ok?`online`:`offline`}let te=e(()=>d.value?p.value.map(e=>({id:e,label:h(e),shown:d.value.machines.includes(e),status:F(e)})):Gt.value.map(e=>({...e,label:e.id===`*`?J(`All`):$.value.find(t=>t.id===e.id)?.name||h(e.id),status:e.id===`*`||$.value.some(t=>t.id===e.id)?null:F(e.id)}))),I=()=>te.value.map(e=>e.id),ne=e(()=>!Qt.value.length&&!qt.value.length);function L(e,t){if(d.value){d.value.machines=t?[...d.value.machines,e]:d.value.machines.filter(t=>t!==e);return}qt.value=Ut(qt.value,e,t)}function R(e,t){let n=en(I(),e,t);d.value?p.value=n:n.join(`
|
|
2
|
-
`)!==I().join(`
|
|
3
|
-
`)&&(Qt.value=n)}function z(e,t){let n=I().indexOf(e);if(t.key===`ArrowUp`&&n>0)R(e,n-1);else if(t.key===`ArrowDown`&&n<I().length-1)R(e,n+2);else return;t.preventDefault(),$e(),b(()=>M.value?.querySelector(`[data-bar-id="${CSS.escape(e)}"] .bar-pref-grip`)?.focus())}function re(e){let t=N.value;if(t){if(e===t.from)return`translateY(${t.dy}px)`;if(t.from<e&&e<=t.to)return`translateY(${-t.h}px)`;if(t.to<=e&&e<t.from)return`translateY(${t.h}px)`}}function B(e){N.value&&e.preventDefault()}let ie=null;E(()=>ie?.());function ae(e,t){if(N.value||!t.isPrimary||t.pointerType===`mouse`&&t.button!==0)return;t.preventDefault();let n=[...M.value?.querySelectorAll(`[data-bar-id]`)||[]],r=n.findIndex(t=>t.dataset.barId===e);if(r<0)return;let i=n.map(e=>{let t=e.getBoundingClientRect();return t.top+t.height/2}),a=n[r].getBoundingClientRect().height,o=t.clientY;N.value={id:e,from:r,dy:0,to:r,h:a},$e();let s=e=>{if(e.pointerId!==t.pointerId||!N.value)return;let n=e.clientY-o,a=i[r]+n,s=i.filter((e,t)=>t!==r&&e<a).length;s!==N.value.to&&$e(),N.value={...N.value,dy:n,to:s}},c=n=>r=>{if(r.pointerId!==t.pointerId)return;let i=N.value;ie?.(),n&&i&&i.to!==i.from&&R(e,i.to>i.from?i.to+1:i.to)};ie=()=>{ie=null,N.value=null,window.removeEventListener(`pointermove`,s),window.removeEventListener(`pointerup`,l),window.removeEventListener(`pointercancel`,u),document.removeEventListener(`touchmove`,B)};let l=c(!0),u=c(!1);window.addEventListener(`pointermove`,s),window.addEventListener(`pointerup`,l),window.addEventListener(`pointercancel`,u),document.addEventListener(`touchmove`,B,{passive:!1})}return(e,n)=>{let o=$t,f=U,p=Ne;return c(),l(`div`,{ref_key:`root`,ref:k,class:`machine-bar-settings`},[x(`h4`,Jn,v((`tl`in e?e.tl:r(Y))(`Machine bar`,`Barre des machines`)),1),r(d)?s(``,!0):(c(),l(`label`,Yn,[x(`span`,null,[x(`b`,null,v((`tl`in e?e.tl:r(Y))(`Show the machine bar`,`Afficher la barre des machines`)),1),x(`small`,null,v((`tl`in e?e.tl:r(Y))(`At the top of the home screen: “All”, then each machine. A tap shows that machine only.`,`En haut de l’accueil : « Toutes », puis chaque machine. Un toucher n’affiche que cette machine.`)),1)]),m(o,{modelValue:r(i),"onUpdate:modelValue":n[0]||=e=>D(i)?i.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])])),r(i)?(c(),l(g,{key:1},[r(d)?(c(),l(g,{key:1},[m(p,{color:`neutral`,variant:`ghost`,icon:`i-lucide-arrow-left`,onClick:n[2]||=e=>d.value=null},{default:T(()=>[t(v((`t`in e?e.t:r(J))(`Cancel`)),1)]),_:1}),x(`label`,er,[t(v((`tl`in e?e.tl:r(Y))(`Group name`,`Nom du groupe`)),1),S(x(`input`,{"onUpdate:modelValue":n[3]||=e=>r(d).name=e,type:`text`,maxlength:`100`},null,512),[[ee,r(d).name]])]),x(`p`,tr,v((`tl`in e?e.tl:r(Y))(`Check the machines to include. Drag the handles to set their order.`,`Cochez les machines à inclure. Glissez les poignées pour définir leur ordre.`)),1)],64)):(c(),l(g,{key:0},[x(`h4`,Xn,v((`tl`in e?e.tl:r(Y))(`Groups`,`Groupes`)),1),x(`ul`,Zn,[(c(!0),l(g,null,u(`machineGroups`in e?e.machineGroups:r($),t=>(c(),l(`li`,{key:t.id},[x(`button`,{type:`button`,onClick:e=>C(t)},[m(f,{name:`i-lucide-group`}),x(`span`,$n,[x(`b`,null,v(t.name),1),x(`small`,null,v(t.machines.map(h).join(` · `)||(`tl`in e?e.tl:r(Y))(`No machines`,`Aucune machine`)),1)]),m(f,{name:`i-lucide-chevron-right`})],8,Qn)]))),128))]),m(p,{class:`new-machine-group`,color:`neutral`,variant:`outline`,icon:`i-lucide-plus`,onClick:n[1]||=e=>C()},{default:T(()=>[t(v((`tl`in e?e.tl:r(Y))(`New group`,`Nouveau groupe`)),1)]),_:1})],64)),r(d)?s(``,!0):(c(),l(`p`,nr,v((`tl`in e?e.tl:r(Y))(`Order and display`,`Ordre et affichage`)),1)),x(`ul`,{ref_key:`list`,ref:M,class:_([`bar-pref-list`,{dragging:r(N)}])},[(c(!0),l(g,null,u(r(te),(t,n)=>(c(),l(`li`,{key:t.id,class:_([`bar-pref-row`,{moving:r(N)?.id===t.id,off:!t.shown}]),style:y({transform:re(n)}),"data-bar-id":t.id},[x(`button`,{type:`button`,class:`bar-pref-grip`,"aria-label":(`tl`in e?e.tl:r(Y))(`Move ${t.label} — up and down arrows`,`Déplacer ${t.label} — flèches haut et bas`),title:(`t`in e?e.t:r(J))(`Drag to reorder`),onPointerdown:e=>ae(t.id,e),onKeydown:e=>z(t.id,e)},`⠿`,40,ir),x(`label`,ar,[x(`input`,{class:`agent-pref-check`,type:`checkbox`,checked:t.shown,onChange:e=>L(t.id,e.target.checked)},null,40,or),!r(d)&&(`machineGroups`in e?e.machineGroups:r($)).some(e=>e.id===t.id)?(c(),a(f,{key:0,name:`i-lucide-group`,"aria-hidden":`true`})):s(``,!0),t.status?(c(),l(`i`,{key:1,class:_([`bar-pref-state`,t.status]),title:(`t`in e?e.t:r(J))(P[t.status]),"aria-hidden":`true`},null,10,sr)):s(``,!0),x(`span`,null,v(t.label),1),t.status&&t.status!==`online`?(c(),l(`small`,cr,v((`t`in e?e.t:r(J))(P[t.status])),1)):s(``,!0)])],14,rr))),128))],2),r(d)?s(``,!0):(c(),a(p,{key:3,color:`neutral`,variant:`outline`,icon:`i-lucide-rotate-ccw`,class:`bar-pref-reset`,disabled:r(ne),onClick:`resetMachineBar`in e?e.resetMachineBar:r(Wt)},{default:T(()=>[t(v((`machineGroups`in e?e.machineGroups:r($)).length?(`tl`in e?e.tl:r(Y))(`Reset: All + groups + machines`,`Rétablir : Toutes + groupes + machines`):(`tl`in e?e.tl:r(Y))(`Reset: All + every machine`,`Rétablir : Toutes + toutes les machines`)),1)]),_:1},8,[`disabled`,`onClick`])),r(d)?(c(),l(`div`,lr,[(`machineGroups`in e?e.machineGroups:r($)).some(e=>e.id===r(d).id)?(c(),a(p,{key:0,class:`delete-machine-group`,color:`error`,variant:`outline`,onClick:j},{default:T(()=>[t(v((`t`in e?e.t:r(J))(`Delete`)),1)]),_:1})):s(``,!0),m(p,{class:`save-machine-group`,color:`neutral`,disabled:!r(d).name.trim(),onClick:A},{default:T(()=>[t(v((`t`in e?e.t:r(J))(`Save`)),1)]),_:1},8,[`disabled`])])):s(``,!0)],64)):s(``,!0),x(`p`,ur,v((`t`in e?e.t:r(J))(`Choices follow you on every device.`)),1)],512)}}}),{__name:`MachineBarSettings`}),fr=`J’ai trouvé la cause : le cache n’était jamais invalidé après une mise à jour. Le correctif tient en trois points :
|
|
4
|
-
|
|
5
|
-
- vider l’entrée à chaque écriture ;
|
|
6
|
-
- ajouter un test de régression ;
|
|
7
|
-
- garder la durée de vie à 5 minutes.
|
|
8
|
-
|
|
9
|
-
\`\`\`ts
|
|
10
|
-
cache.delete(key)
|
|
11
|
-
await save(item)
|
|
12
|
-
\`\`\`
|
|
13
|
-
|
|
14
|
-
Tous les tests passent.`,pr=`Found the cause: the cache was never invalidated after an update. The fix has three parts:
|
|
15
|
-
|
|
16
|
-
- clear the entry on every write;
|
|
17
|
-
- add a regression test;
|
|
18
|
-
- keep the time to live at 5 minutes.
|
|
19
|
-
|
|
20
|
-
\`\`\`ts
|
|
21
|
-
cache.delete(key)
|
|
22
|
-
await save(item)
|
|
23
|
-
\`\`\`
|
|
24
|
-
|
|
25
|
-
All tests pass.`,mr=e=>e===`fr`?fr:pr,hr=(e,t)=>e===`off`?null:t,gr={class:`typing-preview`},_r=[`aria-label`,`disabled`],vr=Object.assign(p({__name:`TypingPreview`,setup(e){let t=an(mr(It)),n=o(null),i=o(null),a=o(``),s=()=>{n.value=hr(at.value,Date.now())};return f(()=>{i.value&&(a.value=`${i.value.offsetHeight}px`),s()}),w([at,ct],s),(e,o)=>{let u=U,d=je,f=on;return c(),l(`figure`,gr,[x(`figcaption`,null,[x(`span`,null,v((`t`in e?e.t:r(J))(`Preview`)),1),m(d,{text:(`t`in e?e.t:r(J))(`Replay`)},{default:T(()=>[x(`button`,{type:`button`,class:`typing-replay`,"aria-label":(`t`in e?e.t:r(J))(`Replay`),disabled:!(`typewriterActive`in e?e.typewriterActive:r(Xe)),onClick:s},[m(u,{name:`i-lucide-rotate-ccw`})],8,_r)]),_:1},8,[`text`])]),x(`div`,{ref_key:`box`,ref:i,class:`typing-sample md`,style:y({minHeight:r(a)})},[m(f,{html:r(t),typing:r(n),onDone:o[0]||=e=>n.value=null},null,8,[`html`,`typing`])],4)])}}}),{__name:`TypingPreview`}),yr=[`data-mode`,`data-playing`],br=[`aria-label`,`disabled`],xr={class:`qt-conv`},Sr={class:`qt-agent`},Cr={class:`qt-tag one`},wr={class:`qt-tag two`},Tr={class:`qt-sent`},Er={class:`qt-sent-q`},Dr={class:`qt-sent-q`},Or={class:`qt-chips`},kr={class:`qt-chip one`},Ar={class:`qt-chip two`},jr={class:`qt-field`},Mr={class:`qt-ph`},Nr={class:`qt-tok one`},Pr={class:`qt-ans one`},Fr={class:`qt-tok two`},Ir=Object.assign(p({__name:`QuoteTokensPreview`,props:{mode:{}},setup(e){let n=e,i=o(0),a=o(!1),s=()=>{Ft.value||(i.value++,a.value=!0)};return f(s),w(()=>n.mode,s),(n,o)=>{let u=U,d=je;return c(),l(`figure`,{class:`qt-preview`,"data-mode":e.mode,"data-playing":r(a)},[x(`figcaption`,null,[x(`span`,null,v((`t`in n?n.t:r(J))(`Preview`)),1),m(d,{text:(`t`in n?n.t:r(J))(`Replay`)},{default:T(()=>[x(`button`,{type:`button`,class:`typing-replay`,"aria-label":(`t`in n?n.t:r(J))(`Replay`),disabled:`reducedMotion`in n?n.reducedMotion:r(Ft),onClick:s},[m(u,{name:`i-lucide-rotate-ccw`})],8,br)]),_:1},8,[`text`])]),(c(),l(`div`,{key:r(i),class:`qt-stage`,"aria-hidden":`true`,onAnimationend:o[0]||=e=>a.value=!1},[x(`div`,xr,[x(`div`,Sr,[x(`p`,null,[t(v((`tl`in n?n.tl:r(Y))(`Tea or coffee?`,`Thé ou café ?`))+` `,1),x(`span`,Cr,`↳ `+v((`t`in n?n.t:r(J))(`Reply`)),1)]),x(`p`,null,[t(v((`tl`in n?n.tl:r(Y))(`And your favorite series?`,`Et ta série préférée ?`))+` `,1),x(`span`,wr,`↳ `+v((`t`in n?n.t:r(J))(`Reply`)),1)])]),x(`div`,Tr,[x(`span`,Er,[o[1]||=x(`b`,null,`↳ 09:12`,-1),t(v((`tl`in n?n.tl:r(Y))(`Tea or coffee?`,`Thé ou café ?`)),1)]),x(`span`,null,v((`tl`in n?n.tl:r(Y))(`Coffee.`,`Café.`)),1),x(`span`,Dr,[o[2]||=x(`b`,null,`↳ 09:12`,-1),t(v((`tl`in n?n.tl:r(Y))(`And your favorite series?`,`Et ta série préférée ?`)),1)]),o[3]||=x(`span`,null,`Lost !`,-1)])]),x(`div`,Or,[x(`span`,kr,[t(v((`tl`in n?n.tl:r(Y))(`Tea or coffee?`,`Thé ou café ?`)),1),o[4]||=x(`i`,null,`✕`,-1)]),x(`span`,Ar,[t(v((`tl`in n?n.tl:r(Y))(`And your favorite series?`,`Et ta série préférée ?`)),1),o[5]||=x(`i`,null,`✕`,-1)])]),x(`div`,jr,[x(`span`,Mr,v((`tl`in n?n.tl:r(Y))(`Message to Claude…`,`Message à Claude…`)),1),x(`span`,Nr,[o[6]||=x(`b`,null,`↳`,-1),o[7]||=x(`em`,null,`Quote point 09:12 :`,-1),x(`span`,null,v((`tl`in n?n.tl:r(Y))(`Tea or coffee?`,`Thé ou café ?`)),1),o[8]||=x(`em`,null,`—`,-1)]),x(`span`,Pr,v((`tl`in n?n.tl:r(Y))(`Coffee.`,`Café.`)),1),x(`span`,Fr,[o[9]||=x(`b`,null,`↳`,-1),o[10]||=x(`em`,null,`Quote point 09:12 :`,-1),x(`span`,null,v((`tl`in n?n.tl:r(Y))(`And your favorite series?`,`Et ta série préférée ?`)),1),o[11]||=x(`em`,null,`—`,-1)]),o[12]||=x(`span`,{class:`qt-ans two`},`Lost !`,-1),o[13]||=x(`span`,{class:`qt-send`},`↑`,-1)])],32))],8,yr)}}}),{__name:`QuoteTokensPreview`}),Lr={class:`settings-group`},Rr={class:`settings-card wt-card`},zr={key:0,class:`muted`},Br={key:1,class:`muted`},Vr=[`aria-label`],Hr=[`id`,`aria-selected`,`aria-controls`,`tabindex`,`onClick`,`onKeydown`],Ur=[`id`,`aria-labelledby`],Wr=[`aria-expanded`,`aria-controls`,`onClick`],Gr={class:`wt-count`},Kr=[`id`],qr={class:`wt-main`},Jr={class:`wt-meta`},Yr={class:`wt-path`},Xr=[`disabled`,`aria-label`,`onClick`],Zr={key:0,class:`spinner`},Qr={class:`muted`},$r=Object.assign(p({__name:`WorktreesSection`,setup(n){f(dn);let d=e(()=>[...new Set((rn.value||[]).map(e=>e.machine))]),p=o(null),h=e(()=>p.value!==null&&d.value.includes(p.value)?p.value:d.value[0]),y=e(()=>{let e=new Map;for(let t of rn.value||[])t.machine===h.value&&(e.has(t.repoRoot)||e.set(t.repoRoot,{root:t.repoRoot,name:t.repo,items:[]}),e.get(t.repoRoot).items.push(t));return[...e.values()]}),b=o(new Set),C=e=>JSON.stringify([h.value,e]);function w(e){let t=C(e);b.value.has(t)?b.value.delete(t):b.value.add(t)}let T=i(),E=e=>`${T}-machine-${d.value.indexOf(e)}`;function D(e,t){if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key))return;e.preventDefault();let n=d.value.length,r=e.key===`Home`?0:e.key===`End`?n-1:(t+(e.key===`ArrowRight`?1:-1)+n)%n;p.value=d.value[r],document.getElementById(E(p.value))?.focus()}let O=e(()=>!!(q.value.machines&&q.value.machines.length>1)),k=e=>(q.value.machines||[]).find(t=>t.key===e)?.label||e||At.value;function ee(e){return e.prunable?J(`folder missing`):e.workspace?e.agents?Y(`open · ${e.agents} agent${e.agents>1?`s`:``}`,`ouvert · ${e.agents} agent${e.agents>1?`s`:``}`):Y(`open`,`ouvert`):J(`closed`)}let j=o(null);async function M(e){j.value=e.path,await sn(e),j.value=null}return(e,n)=>{let i=U;return c(),l(`div`,Lr,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Worktrees`)),1),x(`div`,Rr,[(`worktrees`in e?e.worktrees:r(rn))===null?(c(),l(`p`,zr,[...n[0]||=[x(`span`,{class:`spinner`},null,-1)]])):(`worktrees`in e?e.worktrees:r(rn)).length?(c(),l(g,{key:2},[x(`div`,{class:`wt-machines`,role:`tablist`,"aria-label":(`t`in e?e.t:r(J))(`Worktrees`)},[(c(!0),l(g,null,u(r(d),(e,t)=>(c(),l(`button`,{id:E(e),key:e,type:`button`,role:`tab`,"aria-selected":r(h)===e,"aria-controls":`${r(T)}-panel`,tabindex:r(h)===e?0:-1,onClick:t=>p.value=e,onKeydown:e=>D(e,t)},v(k(e)),41,Hr))),128))],8,Vr),x(`div`,{id:`${r(T)}-panel`,role:`tabpanel`,tabindex:`0`,"aria-labelledby":E(r(h))},[(c(!0),l(g,null,u(r(y),(o,d)=>(c(),l(`section`,{key:C(o.root),class:`wt-project`},[x(`button`,{type:`button`,class:`wt-project-heading`,"aria-expanded":!r(b).has(C(o.root)),"aria-controls":`${r(T)}-project-${d}`,onClick:e=>w(o.root)},[m(i,{name:r(b).has(C(o.root))?`i-lucide-chevron-right`:`i-lucide-chevron-down`},null,8,[`name`]),x(`span`,null,v(o.name),1),x(`span`,Gr,v(o.items.length),1)],8,Wr),S(x(`ul`,{id:`${r(T)}-project-${d}`,class:`wt-list`},[(c(!0),l(g,null,u(o.items,o=>(c(),l(`li`,{key:`${o.machine}|${o.path}`,class:_({open:o.workspace,gone:o.prunable})},[x(`div`,qr,[x(`b`,null,[m(i,{name:`i-lucide-git-branch`}),t(v((`worktreeName`in e?e.worktreeName:r(ln))(o)),1)]),x(`span`,Jr,[t(v(o.repo),1),r(O)?(c(),l(g,{key:0},[t(` · `+v(k(o.machine)),1)],64)):s(``,!0),n[1]||=t(` · `,-1),x(`i`,null,v(ee(o)),1)]),x(`span`,Yr,v((`shortPath`in e?e.shortPath:r(xt))(o.path)),1)]),x(`button`,{type:`button`,class:`wt-del`,disabled:r(j)===o.path,"aria-label":(`t`in e?e.t:r(J))(`Delete`),onClick:e=>M(o)},[r(j)===o.path?(c(),l(`span`,Zr)):(c(),a(i,{key:1,name:`i-lucide-trash-2`}))],8,Xr)],2))),128))],8,Kr),[[A,!r(b).has(C(o.root))]])]))),128))],8,Ur)],64)):(c(),l(`p`,Br,v((`t`in e?e.t:r(J))(`No worktrees.`)),1)),x(`p`,Qr,v((`t`in e?e.t:r(J))(`Deleting a worktree removes its folder; the Git branch is kept.`)),1)])])}}}),{__name:`WorktreesSection`}),ei={class:`notification-level`},ti=[`value`,`aria-label`],ni={key:0,value:`custom`,disabled:``},ri=[`value`],ii={class:`notification-level-hint`},ai=[`open`],oi={class:`notification-events`},si=[`checked`,`onChange`],ci=Object.assign(fn(p({__name:`NotificationLevel`,props:{events:{},label:{},muted:{type:Boolean}},emits:[`change`],setup(n,{emit:i}){let a=n,o=i,d=e(()=>a.muted?`muted`:W(a.events));function f(e){o(`change`,[...he[e]])}function p(e,t){o(`change`,ve.filter(n=>n===e?t:a.events.includes(n)))}return(e,i)=>{let a=U;return c(),l(`div`,ei,[x(`select`,{value:r(d),"aria-label":n.label,onChange:i[0]||=e=>f(e.target.value)},[r(d)===`custom`?(c(),l(`option`,ni,v((`levelLabel`in e?e.levelLabel:r(B))(`custom`)),1)):s(``,!0),(c(!0),l(g,null,u(r(ke),t=>(c(),l(`option`,{key:t,value:t},v((`levelLabel`in e?e.levelLabel:r(B))(t)),9,ri))),128))],40,ti),x(`small`,ii,v(r(d)===`custom`?(`t`in e?e.t:r(J))(`Only the events checked under Customize.`):(`levelHint`in e?e.levelHint:r(le))(r(d))),1),x(`details`,{class:`notification-customize`,open:r(d)===`custom`||void 0},[x(`summary`,null,[m(a,{name:`i-lucide-chevron-right`,class:`notification-chev`}),t(v((`t`in e?e.t:r(J))(`Customize`)),1)]),x(`div`,oi,[(c(!0),l(g,null,u(r(ve),i=>(c(),l(`label`,{key:i},[x(`input`,{type:`checkbox`,checked:!n.muted&&n.events.includes(i),onChange:e=>p(i,e.target.checked)},null,40,si),t(` `+v((`eventLabel`in e?e.eventLabel:r(se))(i)),1)]))),128))])],8,ai)])}}}),[[`__scopeId`,`data-v-aa9b4e30`]]),{__name:`NotificationLevel`}),li={class:`notification-rules`,"data-testid":`notification-rules`},ui={class:`settings-group notification-default`,"data-testid":`notification-default`},di={class:`settings-toggle notification-subagents`},fi={class:`muted notification-help`},pi={class:`settings-group notification-exceptions`,"data-testid":`notification-exceptions`},mi={key:0,class:`muted`},hi={class:`notification-rule-head`},gi={class:`notification-diff`},_i={key:0,class:`settings-toggle notification-subagents`},vi=[`onClick`],yi={class:`muted`},bi=[`aria-expanded`],xi={key:1,class:`notification-picker`,"data-testid":`notification-picker`},Si={key:0,class:`muted`},Ci=[`onClick`],wi=Object.assign(fn(p({__name:`NotificationRules`,setup(n){we(),Le();let i=Fe(),a=De,d=M;function f(e){Pe({...a.value,default:{...a.value.default,...e}})}let p=e(()=>a.value.default.events),h=e(()=>a.value.exceptions.filter(e=>be(e,d.value)&&!(e.kind===`conversation`&&y(e.id))).map(e=>({e,machine:_e(e.machine),name:_(e)})).sort((e,t)=>e.machine.localeCompare(t.machine)||e.name.localeCompare(t.name)));function _(e){return e.kind===`coordinator`?Ae(e.machine,e.id):b(e.id)||e.label}function y(e){let t=q.value.panes.find(t=>t.id===e);return t?!!Me(t).subagent:!1}let b=e=>q.value.panes.find(t=>t.id===e)?.title||``,S=e=>e.until!==null&&e.until>d.value?e.until:null,C=e=>e.events??p.value;function w(e){let t=H(),n=S(e);if(n)return e.events===null?Y(`Muted until ${mt(n)}, then back to the default (${t})`,`Muet jusqu’au ${mt(n)}, puis retour au défaut (${t})`):Y(`Muted until ${mt(n)}, then ${B(W(e.events))}`,`Muet jusqu’au ${mt(n)}, puis ${B(W(e.events))}`);let r=Ee(C(e),p.value);return r===1?Y(`Louder than the default (${t})`,`Plus que le défaut (${t})`):r===-1?Y(`Quieter than the default (${t})`,`Moins que le défaut (${t})`):r===0?Y(`Same as the default (${t})`,`Identique au défaut (${t})`):Y(`Different from the default (${t})`,`Différent du défaut (${t})`)}let T=e=>e.kind===`coordinator`?J(`Coordinator`):J(`Conversation`),E=o(!1),D=e(()=>{let e=new Map,t=t=>{if(a.value.exceptions.some(e=>be(e,d.value)&&ue(e,t)))return;let n=e.get(t.machine)??{machine:t.machine,name:_e(t.machine),items:[]};n.items.some(e=>ue(e,t))||n.items.push(t),e.set(t.machine,n)},n={top:0,machine:1,project:2};for(let e of i.value)for(let r of[...e.coordinators].sort((e,t)=>n[e.level]-n[t.level]||(e.repo??``).localeCompare(t.repo??``)))t(L(e.machine,r));for(let e of q.value.panes){if(!e.agent)continue;let n=xe(e);n?.kind===`conversation`&&t(n)}return[...e.values()].sort((e,t)=>e.name.localeCompare(t.name))});function O(e){let t=W(p.value)===`muted`;me(e,{events:t?[...he.finished]:[],subagents:!1,until:null}),E.value=!1}function k(){Pe({...a.value,exceptions:[]}),Z(Y(`All exceptions removed. Everything follows the default: ${H()}`,`Exceptions retirées. Tout suit le défaut : ${H()}`))}return(e,n)=>{let i=ci,o=$t,d=U;return c(),l(`div`,li,[x(`div`,ui,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Default (applies to everything)`)),1),m(i,{events:r(p),label:(`t`in e?e.t:r(J))(`Default level`),onChange:n[0]||=e=>f({events:e})},null,8,[`events`,`label`]),x(`label`,di,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Sub-agents`)),1),x(`small`,null,v(r(a).default.subagents?(`t`in e?e.t:r(J))(`On: task agents (workers, reviewers, attempts) notify too, at the same level.`):(`t`in e?e.t:r(J))(`Off: only coordinators, standalone agents and board events notify. Task agents stay silent.`)),1)]),m(o,{color:`success`,size:`xl`,"model-value":r(a).default.subagents,"aria-label":(`t`in e?e.t:r(J))(`Sub-agents`),"onUpdate:modelValue":n[1]||=e=>f({subagents:e})},null,8,[`model-value`,`aria-label`])]),x(`p`,fi,v((`t`in e?e.t:r(J))(`Visible conversations stay silent on every device. Push resumes after about 30 seconds away. Inactive tabs expire automatically.`)),1)]),x(`div`,pi,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Exceptions`)),1),r(h).length?s(``,!0):(c(),l(`p`,mi,v((`t`in e?e.t:r(J))(`No exceptions: everything follows the default. Add one for a coordinator or an agent, or use Notifications in its menu.`)),1)),(c(!0),l(g,null,u(r(h),({e:n,machine:a,name:u})=>(c(),l(`article`,{key:JSON.stringify([n.kind,n.machine,n.id]),class:`notification-rule`,"data-testid":`notification-exception`},[x(`div`,hi,[x(`small`,null,v(a)+` · `+v(T(n)),1),x(`b`,null,v(u),1),x(`small`,gi,v(w(n)),1)]),m(i,{events:C(n),muted:!!S(n),label:(`tl`in e?e.tl:r(Y))(`Notifications: ${u}`,`Notifications : ${u}`),onChange:t=>(`setException`in e?e.setException:r(me))(n,{events:t,until:null})},null,8,[`events`,`muted`,`label`,`onChange`]),n.kind===`coordinator`?(c(),l(`label`,_i,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Sub-agents`)),1),x(`small`,null,v(n.subagents?(`t`in e?e.t:r(J))(`On: the task agents of this board follow this exception.`):(`t`in e?e.t:r(J))(`Off: only this coordinator. Its board’s task agents follow the default.`)),1)]),m(o,{color:`success`,size:`lg`,"model-value":n.subagents,"aria-label":(`tl`in e?e.tl:r(Y))(`Sub-agents: ${u}`,`Sous-agents : ${u}`),"onUpdate:modelValue":t=>(`setException`in e?e.setException:r(me))(n,{subagents:t})},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])])):s(``,!0),x(`button`,{type:`button`,class:`settings-action`,onClick:t=>(`removeException`in e?e.removeException:r(Oe))(n)},[m(d,{name:`i-lucide-x`}),t(v((`t`in e?e.t:r(J))(`Remove exception`)),1),x(`small`,yi,v((`tl`in e?e.tl:r(Y))(`Back to the default: ${(`defaultLevelLabel`in e?e.defaultLevelLabel:r(H))()}`,`Retour au défaut : ${(`defaultLevelLabel`in e?e.defaultLevelLabel:r(H))()}`)),1)],8,vi)]))),128)),x(`button`,{type:`button`,class:`settings-action solo notification-add`,"aria-expanded":r(E),onClick:n[2]||=e=>E.value=!r(E)},[m(d,{name:`i-lucide-plus`}),t(v((`t`in e?e.t:r(J))(`Add an exception`)),1)],8,bi),r(E)?(c(),l(`div`,xi,[r(D).length?s(``,!0):(c(),l(`p`,Si,v((`t`in e?e.t:r(J))(`No coordinator or agent conversation to add. Task agents follow the Sub-agents switch.`)),1)),(c(!0),l(g,null,u(r(D),e=>(c(),l(`div`,{key:e.machine,class:`notification-picker-group`},[x(`small`,null,v(e.name),1),(c(!0),l(g,null,u(e.items,e=>(c(),l(`button`,{key:e.kind+e.id,type:`button`,class:`settings-action`,onClick:t=>O(e)},[m(d,{name:e.kind===`coordinator`?`i-lucide-message-square-text`:`i-lucide-bot`},null,8,[`name`]),t(v(e.label),1)],8,Ci))),128))]))),128))])):s(``,!0),r(h).length?(c(),l(`button`,{key:2,type:`button`,class:`settings-action solo notification-reset`,onClick:k},[m(d,{name:`i-lucide-rotate-ccw`}),t(v((`t`in e?e.t:r(J))(`Remove all exceptions`)),1)])):s(``,!0)])])}}}),[[`__scopeId`,`data-v-aeafb17e`]]),{__name:`NotificationRules`}),Ti={class:`settings-group projects-plugin`},Ei={class:`projects-plugin-intro`},Di=[`href`],Oi={class:`projects-plugin-head`},ki={key:0},Ai={key:1},ji={key:2},Mi={key:0,class:`projects-plugin-note`},Ni={key:0,class:`projects-plugin-actions`},Pi={class:`projects-plugin-note projects-plugin-update`},Fi={key:0,class:`projects-plugin-actions`},Ii={key:1,class:`projects-plugin-note`},Li={key:3,class:`projects-plugin-note`},Ri={key:4,class:`projects-plugin-note`},zi={key:2,class:`plugin-input-note reload projects-plugin-reload`},Bi={key:3,class:`projects-plugin-note`},Vi={key:0,class:`projects-plugin-notify`},Hi={class:`projects-plugin-note`},Ui={class:`projects-upgrade-cmd`},Wi={class:`projects-plugin-command`},Gi=Object.assign(p({__name:`ProjectsPluginSettings`,props:{machines:{}},setup(n){let i=n,d=o({}),f=o({}),p=o({}),h=o({}),y=o({});async function b(e){if(e.online){p.value={...p.value,[e.key]:!0};try{let t=await Ot(`/api/plugins/projects?machine=${encodeURIComponent(e.key)}`);d.value={...d.value,[e.key]:t},f.value={...f.value,[e.key]:``}}catch(t){f.value={...f.value,[e.key]:t.message}}finally{p.value={...p.value,[e.key]:!1}}}}w(()=>i.machines.map(e=>`${e.key}:${e.online}`).join(`|`),()=>{for(let e of i.machines)b(e)},{immediate:!0});async function S(e){if($e(),await Ie(Y(`Install herdr-projects 1.2.21 on ${e.label}? Herdr downloads the plugin from GitHub (release ${Dn}, a prebuilt program) and runs its installer on this machine.`,`Installer herdr-projects 1.2.21 sur ${e.label} ? Herdr télécharge le plugin depuis GitHub (version ${Dn}, un programme déjà compilé) et exécute son installation sur cette machine.`),J(`Install`),`primary`)){h.value={...h.value,[e.key]:!0};try{await Ot(`/api/plugins/projects`,{machine:e.key}),Z(Y(`herdr-projects installed on ${e.label}.`,`herdr-projects installé sur ${e.label}.`)),y.value={...y.value,[e.key]:`install`},await b(e)}catch(e){Z(e.message,!0)}finally{h.value={...h.value,[e.key]:!1}}}}let C=e=>!!e&&e.status===`ready`&&On(e.program),E=[[`1.2.8`,`auto access for agents`,`l’accès auto des agents`],[`1.2.10`,`a settings page`,`une page de réglages`],[`1.2.11`,`chat-only tasks`,`les tâches conversation seule`],[`1.2.14`,`archiving every done task at once`,`l’archivage de tous les terminés d’un coup`],[`1.2.15`,`autopilot`,`l’autopilot`],[`1.2.18`,`archiving a whole project`,`l’archivage d’un projet entier`]];function D(e){let t=E.filter(([t])=>!An(e,t)),n=Y(`your tasks and settings stay.`,`tes tâches et tes réglages restent.`);return t.length?Y(`Adds ${t.map(e=>e[1]).join(`, `)}, and fixes; ${n}`,`Ajoute ${t.map(e=>e[2]).join(`, `)}, et des corrections ; ${n}`):Y(`Fixes and smaller changes; ${n}`,`Des corrections et de petits changements ; ${n}`)}async function O(e){$e();let t=d.value[e.key]?.program||``;if(await Ie(Y(`Update herdr-projects from ${t} to 1.2.21 on ${e.label}? Herdr downloads release ${Dn} from GitHub (a prebuilt program) and replaces its copy of the plugin. Your tasks and settings stay.`,`Mettre à jour herdr-projects de ${t} en 1.2.21 sur ${e.label} ? Herdr télécharge la version ${Dn} depuis GitHub (un programme déjà compilé) et remplace sa copie du plugin. Tes tâches et tes réglages restent.`),Y(`Update`,`Mettre à jour`),`primary`)){h.value={...h.value,[e.key]:!0};try{await Ot(`/api/plugins/projects`,{machine:e.key,update:!0}),Z(Y(`herdr-projects updated to ${Pn} on ${e.label}.`,`herdr-projects mis à jour en ${Pn} sur ${e.label}.`)),y.value={...y.value,[e.key]:`update`},await b(e)}catch(e){Z(e.message,!0)}finally{h.value={...h.value,[e.key]:!1}}}}let k=F(Nn),A=e(()=>Object.values(d.value).some(e=>e.status===`ready`));async function ee(){try{await navigator.clipboard.writeText(k),Z(J(`Copied`))}catch{Z(Y(`Copy failed`,`Copie impossible`),!0)}}function j(e){let t=e.program||e.version,n=t?` · v${t}`:``;return C(e)?Y(`Update available`,`Mise à jour disponible`)+n:e.status===`ready`?Y(`Installed`,`Installé`)+n:e.status===`disabled`?Y(`Disabled`,`Désactivé`)+n:e.status===`shepherdr`?Y(`Shepherdr 2 unsupported`,`Shepherdr 2 non pris en charge`)+n:e.status===`old`?Y(`Update needed`,`Mise à jour nécessaire`)+n:Y(`Not installed`,`Non installé`)}return(e,i)=>{let o=U,b=Ne,w=Fn,E=He;return c(),l(`div`,Ti,[i[6]||=x(`h3`,null,`herdr-projects`,-1),x(`p`,Ei,v((`tl`in e?e.tl:r(Y))(`herdr-projects is a work board for Herdr: one list of tasks, each handed to an agent in its own space. wherdr shows its tasks on the Board, where you can add tasks, start and stop them, reply to an agent, approve finished work and write to its coordinators. It needs herdr-projects ${r(kn)} or later; the plugin is optional.`,`herdr-projects est un tableau de travail pour Herdr : une liste de tâches, chacune confiée à un agent dans son propre space. wherdr affiche ses tâches dans le Board, où tu peux ajouter des tâches, les lancer et les arrêter, répondre à un agent, approuver un travail fini et écrire à ses coordinateurs. Il faut herdr-projects ${r(kn)} ou plus ; le plugin est facultatif.`)),1),x(`a`,{class:`projects-plugin-link`,href:r(Mn),target:`_blank`,rel:`noopener noreferrer`},[t(v((`tl`in e?e.tl:r(Y))(`View plugin repository`,`Voir le dépôt du plugin`))+` `,1),m(o,{name:`i-lucide-external-link`})],8,Di),(c(!0),l(g,null,u(n.machines,n=>(c(),l(`div`,{key:n.key,class:`projects-plugin-machine`},[x(`div`,Oi,[x(`strong`,null,v(n.label),1),n.online?r(p)[n.key]&&!r(d)[n.key]?(c(),l(`span`,Ai,v((`tl`in e?e.tl:r(Y))(`Checking…`,`Vérification…`)),1)):r(f)[n.key]?(c(),l(`span`,ji,v((`tl`in e?e.tl:r(Y))(`Status unavailable`,`État indisponible`)),1)):r(d)[n.key]?(c(),l(`span`,{key:3,class:_([r(d)[n.key].status,{behind:C(r(d)[n.key])}])},v(j(r(d)[n.key])),3)):s(``,!0):(c(),l(`span`,ki,v((`tl`in e?e.tl:r(Y))(`Offline`,`Hors ligne`)),1))]),n.online&&r(f)[n.key]?(c(),l(`p`,Mi,v(r(f)[n.key]),1)):s(``,!0),n.online&&r(d)[n.key]&&!r(f)[n.key]?(c(),l(g,{key:1},[r(d)[n.key].status===`missing`&&r(d)[n.key].installable?(c(),l(`div`,Ni,[m(b,{size:`sm`,color:`primary`,icon:`i-lucide-download`,loading:r(h)[n.key],onClick:e=>S(n)},{default:T(()=>[t(v((`tl`in e?e.tl:r(Y))(`Install herdr-projects`,`Installer herdr-projects`)),1)]),_:1},8,[`loading`,`onClick`])])):s(``,!0),C(r(d)[n.key])?(c(),l(g,{key:1},[x(`p`,Pi,v((`tl`in e?e.tl:r(Y))(`Tested with ${r(Pn)}.`,`Testé avec ${r(Pn)}.`))+` `+v(D(r(d)[n.key].program)),1),r(d)[n.key].installable?(c(),l(`div`,Fi,[m(b,{size:`sm`,color:`primary`,icon:`i-lucide-circle-arrow-up`,loading:r(h)[n.key],onClick:e=>O(n)},{default:T(()=>[t(v((`tl`in e?e.tl:r(Y))(`Update to ${r(Pn)}`,`Mettre à jour en ${r(Pn)}`)),1)]),_:1},8,[`loading`,`onClick`])])):(c(),l(`p`,Ii,[t(v((`tl`in e?e.tl:r(Y))(`By hand on this machine:`,`À la main sur cette machine :`))+` `,1),x(`code`,null,v(r(jn)),1)]))],64)):s(``,!0),r(d)[n.key].status===`missing`||r(d)[n.key].status===`old`||r(d)[n.key].status===`shepherdr`?(c(),a(w,{key:2,status:r(d)[n.key].status,version:r(d)[n.key].version},null,8,[`status`,`version`])):s(``,!0),r(d)[n.key].status===`disabled`?(c(),l(`p`,Li,v((`tl`in e?e.tl:r(Y))(`The plugin is disabled in Herdr: herdr plugin enable herdr-projects`,`Le plugin est désactivé dans Herdr : herdr plugin enable herdr-projects`)),1)):s(``,!0),r(d)[n.key].status===`ready`?(c(),l(`p`,Ri,[m(E,{to:`/board`},{default:T(()=>[t(v((`tl`in e?e.tl:r(Y))(`Open the Board`,`Ouvrir le Board`)),1)]),_:1})])):s(``,!0)],64)):s(``,!0),r(y)[n.key]?(c(),l(`div`,zi,[m(o,{name:`i-lucide-refresh-cw`}),x(`div`,null,[x(`strong`,null,v((`tl`in e?e.tl:r(Y))(`Reload the Herdr client config`,`Recharge la config du client Herdr`)),1),x(`p`,null,[t(v((`tl`in e?e.tl:r(Y))(`In the Herdr terminal: `,`Dans le terminal Herdr : `)),1),i[0]||=x(`kbd`,null,`prefix`,-1),i[1]||=t(` + `,-1),i[2]||=x(`kbd`,null,`Shift`,-1),i[3]||=t(` + `,-1),i[4]||=x(`kbd`,null,`R`,-1),i[5]||=t(`.`,-1),r(y)[n.key]===`install`?(c(),l(g,{key:0},[t(v((`tl`in e?e.tl:r(Y))(`Then open its work board once in Herdr: it asks its first-run questions there.`,`Puis ouvre une fois son tableau dans Herdr : il y pose ses questions de premier lancement.`)),1)],64)):s(``,!0)])])])):s(``,!0),!n.online||r(f)[n.key]?(c(),l(`p`,Bi,[t(v((`tl`in e?e.tl:r(Y))(`By hand on this machine:`,`À la main sur cette machine :`))+` `,1),x(`code`,null,v(r(jn)),1)])):s(``,!0)]))),128)),r(A)?(c(),l(`div`,Vi,[x(`strong`,null,v((`tl`in e?e.tl:r(Y))(`Push for the Board`,`Notifications du Board`)),1),x(`p`,Hi,v((`tl`in e?e.tl:r(Y))(`To get a push when a task needs you, is ready to approve, or failed, run this once on each machine with herdr-projects. A tap on the push opens the task.`,`Pour recevoir une notification quand une tâche a besoin de toi, est prête à approuver ou a échoué, lance ceci une fois sur chaque machine qui a herdr-projects. Toucher la notification ouvre la tâche.`)),1),x(`div`,Ui,[x(`code`,Wi,v(r(k)),1),m(b,{size:`sm`,color:`neutral`,variant:`outline`,icon:`i-lucide-copy`,"aria-label":(`t`in e?e.t:r(J))(`Copy command`),onClick:ee},null,8,[`aria-label`])])])):s(``,!0)])}}}),{__name:`ProjectsPluginSettings`}),Ki=[`appearance`,`conversation`,`terminal`,`agents`,`plugins`,`phone`,`notifications`,`security`,`shortcuts`,`advanced`,`about`];function qi(e){let t=e.historyBack;return!e.desk&&e.section?t===`/settings`?`history`:`list`:typeof t==`string`&&t.startsWith(`/`)&&!t.startsWith(`/settings`)?`history`:`home`}var Ji={id:`settings`,class:`view settings-view`},Yi={class:`top bar settings-top`},Xi=[`aria-label`],Zi=[`aria-current`,`onClick`],Qi={class:`settings-section-title`},$i={class:`settings-section`},ea={class:`settings-group`},ta=[`aria-expanded`],na={class:`theme-sw`},ra={class:`theme-name`},ia=[`aria-label`],aa=[`aria-label`],oa={class:`theme-section-title`},sa={class:`theme-grid`},ca=[`aria-checked`],la={class:`theme-sw`},ua={class:`theme-name`},da=[`aria-checked`,`onClick`],fa={class:`theme-sw`},pa={class:`theme-name`},ma={key:0},ha={key:1},ga={class:`muted settings-hint`},_a={class:`settings-group`},va={class:`muted settings-hint`},ya={class:`settings-group`},ba={class:`muted settings-hint`},xa={class:`settings-group`},Sa={id:`home-group-label`},Ca={class:`settings-toggle`},wa={class:`settings-toggle`},Ta={class:`settings-toggle`},Ea={class:`settings-toggle`},Da={class:`settings-toggle`},Oa={class:`settings-toggle`},ka={class:`settings-group`},Aa={class:`muted settings-hint`},ja={class:`eyebrow settings-subhead`},Ma={class:`settings-group`},Na={key:0,class:`settings-toggle`},Pa={class:`muted settings-hint`},Fa={class:`settings-group settings-width`},Ia={class:`muted settings-hint`},La={class:`settings-section`},Ra={class:`settings-group`},za={class:`muted settings-hint`},Ba={class:`settings-group settings-typing`},Va={class:`muted settings-hint`},Ha={class:`settings-group`},Ua={class:`muted settings-lead`},Wa={class:`muted settings-hint`},Ga={class:`settings-group`},Ka={class:`muted settings-lead`},qa={class:`muted settings-hint`},Ja={class:`settings-section`},Ya={class:`settings-group`},Xa={class:`settings-toggle`},Za={class:`settings-group`},Qa={class:`settings-stepper`},$a=[`aria-label`],eo=[`aria-label`],to={class:`settings-group`},no={class:`settings-toggle`},ro={class:`settings-group`},io={class:`settings-toggle`},ao={class:`settings-group settings-renderer`},oo={class:`muted settings-hint`},so={class:`settings-renderer-status`,role:`status`},co={class:`settings-section`},lo={class:`settings-group`},uo={class:`muted agent-pref-intro`},fo={key:0,class:`agent-pref-list`},po={key:0},mo=[`checked`,`onChange`],ho={key:1,class:`muted agent-pref-intro`},go={class:`muted agent-pref-note`},_o={id:`claude-quotas`,class:`settings-group`},vo={class:`settings-section`},yo={class:`settings-group`,"data-testid":`notification-quiet`},bo={class:`settings-toggle quiet-toggle`},xo={class:`notify-caption`},So={key:0,class:`muted notify-hint`},Co={class:`notify-caption`},wo={class:`settings-group`},To={class:`settings-section`},Eo={class:`settings-section`},Do={class:`settings-section`},Oo={class:`settings-group`},ko={key:0,class:`muted settings-hint`},Ao={class:`settings-group`},jo={key:0,class:`settings-group`},Mo={class:`muted settings-hint`},No={key:0,class:`muted settings-hint`},Po={key:0,class:`settings-section`},Fo={class:`settings-section`},Io={class:`settings-group`},Lo={class:`settings-toggle`},Ro={class:`muted settings-hint`},zo={class:`mono paste-journal`,style:{"white-space":`pre-wrap`,"overflow-wrap":`anywhere`,"font-size":`11px`}},Bo={class:`settings-section`},Vo={class:`settings-group`},Ho={class:`settings-version`},Uo={key:1,class:`muted settings-hint`};function Wo(){dt()}var Go=Object.assign(p({__name:`SettingsView`,setup(n){let i=Yt.version,d=Be(),p=ze();w(()=>[p.path,p.query.section],()=>{(p.query.section===`desktop`||p.path===`/settings/desktop`)&&d.replace({path:`/settings`,query:{...p.query,section:`conversation`}})},{immediate:!0});let h=e(()=>Ki.includes(String(p.query.section))?p.query.section:null),C={appearance:`i-lucide-palette`,conversation:`i-lucide-message-square`,terminal:`i-lucide-square-terminal`,agents:`i-lucide-bot`,plugins:`i-lucide-puzzle`,phone:`i-lucide-smartphone`,notifications:`i-lucide-bell`,security:`i-lucide-lock`,shortcuts:`i-lucide-keyboard`,advanced:`i-lucide-bug`,about:`i-lucide-info`},T={appearance:`Appearance`,conversation:`Conversation`,terminal:`Terminal`,agents:`Agents`,plugins:`Plugins`,phone:`Phone`,notifications:`Notifications`,security:`Security`,shortcuts:`Shortcuts`,advanced:`Advanced`,about:`About`},E=e(()=>Ki.filter(e=>e!==`shortcuts`||Q.value&&!Ct.value).map(e=>({id:e,label:J(T[e]),icon:C[e]}))),O=e(()=>h.value&&E.value.some(e=>e.id===h.value)?h.value:Q.value?`appearance`:null),k=e(()=>E.value.find(e=>e.id===O.value)?.label||J(`Settings`)),ee=o(null);w(h,()=>b(()=>{ee.value&&(ee.value.scrollTop=0)}));function j(e){if(e===h.value)return;let t={path:`/settings`,query:{section:e}};Q.value?d.replace(t):d.push(t)}function M(){let e=qi({desk:Q.value,section:h.value,historyBack:history.state?.back});e===`list`?d.replace(`/settings`):e===`history`?d.back():Ve(`/`,{replace:!0})}f(async()=>{if(Q.value||typeof history.state?.back==`string`)return;let e=p.fullPath;await d.replace(`/`),await d.push(e)});let P=o(It);w(P,e=>{e!==It&&(bt(e),location.reload())});let F=Tt,I=Pt,L=Dt,B=jt,ae=nt,oe=e(()=>[{value:`machine`,label:J(`Machine`)},{value:`state`,label:J(`State`)}]),se=Et,V=Nt,H=qe,ce=Mt,le=St,ue=e(()=>[{label:Y(`Tokens, native field`,`Jetons, champ natif`),description:Y(`Each “↳ … —” line is drawn as a token in the usual field. Typing, dictation and autocorrect unchanged. Default.`,`Chaque ligne « ↳ … — » est dessinée en jeton dans le champ habituel. Saisie, dictée et correction auto inchangées. Par défaut.`),value:`native`},{label:Y(`Plain text`,`Texte simple`),description:Y(`The same “↳ … —” lines, shown as plain text. A fallback if the tokens misbehave.`,`Les mêmes lignes « ↳ … — », affichées en texte simple. Un secours si les jetons se comportent mal.`),value:`lines`}]),de=vt,fe=e(()=>[{label:Y(`Icon`,`Icône`),description:Y(`A small ↳ after each question, and a grey one after each point (on hover on a computer). Default.`,`Un petit ↳ après chaque question, et un gris après chaque point (au survol sur ordinateur). Par défaut.`),value:`icon`},{label:Y(`Tap the text`,`Toucher le texte`),description:Y(`No button: a question is underlined, tap it. A point: click it on a computer; on a phone, tap it, then “↳ Discuss”.`,`Aucun bouton : une question est soulignée, touche-la. Un point : clique-le sur ordinateur ; sur téléphone, touche-le, puis « ↳ Discuter ».`),value:`text`},{label:Y(`List under the message`,`Liste sous le message`),description:Y(`A number after each question and the questions listed under the message; “+ Quote a point”, then the point.`,`Un numéro après chaque question et les questions listées sous le message ; « + Citer un point », puis le point.`),value:`list`}]),pe=e({get:()=>at.value,set:e=>{Ye.value=e}}),me=e(()=>[{label:J(`Off`),description:J(`The reply appears at once.`),value:`off`},{label:J(`Fast`),description:J(`Original speed · 0.5 to 2 s.`),value:`fast`},{label:J(`Medium`),description:J(`Twice as slow · 1 to 4 s.`),value:`medium`},{label:J(`Slow`),description:J(`Three times as slow · 1.5 to 6 s.`),value:`slow`}]),he=Je,ge=Rt,_e=gt,ve=e(()=>[{label:J(`Normal`),description:J(`760 px column · terminal fitted to width.`),value:`normal`},{label:J(`Wide`),description:J(`Up to 1100 px · terminal fitted to width.`),value:`wide`},{label:J(`Full width`),description:J(`The whole width, terminal included.`),value:`full`}]),W=yt,ye=[{label:J(`Conversation`),description:J(`Read the transcript first.`),value:`chat`},{label:J(`Terminal`),description:J(`Type straight into the pane.`),value:`term`}],be=We,xe=e(()=>[{label:J(`Remaining`),description:J(`What is left in each window, like Codex.`),value:`left`},{label:J(`Used`),description:J(`What has been used, like Claude.`),value:`used`}]),Se=N,we=e(()=>[{label:J(`Border only`),description:J(`A second color glides slowly around the border.`),value:`border`},{label:J(`Halo`),description:J(`The same, with a faint glow around the field.`),value:`halo`},{label:J(`None`),description:J(`Plain 1 px border, no animation.`),value:`off`}]),Te=re,Ee=Ce,De=e(()=>[{label:`wherdr grid`,description:J(`Dotted grid with light packets, like wherdr.dev.`),value:`wherdr`},{label:`herdr grid`,description:J(`Flat line grid, like herdr.dev.`),value:`herdr`}]),Oe=[{label:`English`,value:`en`},{label:`Français`,value:`fr`}],ke=e(()=>_t.value.machines?.filter(e=>e.local||!!e.home&&(Ge(e.key)?.status===`online`||!Ge(e.key)&&e.online))||[{key:``,label:At.value||J(`This machine`),kinds:_t.value.kinds}]),Ae=e(()=>[...new Set(ke.value.flatMap(e=>e.kinds||[]))]);function je(e){return!it.value.includes(e)}function Me(e,t){it.value=t?it.value.filter(t=>t!==e):[...it.value,e]}function Pe(e){let t=ke.value.filter(t=>t.kinds.includes(e));return t.length===ke.value.length?``:t.map(e=>e.label||J(`This machine`)).join(`, `)}let Fe=rt,Ie=Qe,Le=o(`all`),G=o(`manual`),Re=e(()=>[{label:Y(`This device`,`Cet appareil`),value:`device`,disabled:!Fe.value},{label:Y(`All devices`,`Tous les appareils`),value:`all`}]),He=[{label:Y(`1 hour`,`1 heure`),value:`hour`},{label:Y(`Until tomorrow morning (8 am)`,`Jusqu’à demain matin (8 h)`),value:`morning`},{label:Y(`Until turned back on`,`Jusqu’à réactivation`),value:`manual`}];w(ot,e=>{if(!e)return;Le.value=e.scope;let t=e.quiet.until===null?null:e.quiet.until-Date.now();G.value=t===null?`manual`:t<=36e5?`hour`:`morning`},{immediate:!0});async function Ue(e){try{let t=ot.value?.scope;e&&await st(Le.value,!0,Ke(G.value)),t&&(!e||t!==Le.value)&&await st(t,!1)}catch(e){Z(e.message,!0)}}let K=e({get:()=>!!ot.value,set:e=>{Ue(e)}});function q(e){Le.value=e,K.value&&Ue(!0)}function ct(e){G.value=e,K.value&&Ue(!0)}let dt=e(()=>{let e=ot.value;if(!e)return``;let t=e.scope===`all`?Y(`all devices`,`tous les appareils`):Y(`this device`,`cet appareil`),n=_n(e.quiet,Ze.value);if(n.kind===`manual`)return Y(`Silenced on ${t} until turned back on.`,`Silence sur ${t} jusqu’à réactivation.`);let r=new Date(n.at).toLocaleTimeString(It,{hour:`2-digit`,minute:`2-digit`});if(n.kind===`today`)return Y(`Silenced on ${t} until ${r}.`,`Silence sur ${t} jusqu’à ${r}.`);if(n.kind===`tomorrow`)return Y(`Silenced on ${t} until tomorrow ${r}.`,`Silence sur ${t} jusqu’à demain ${r}.`);let i=new Date(n.at).toLocaleDateString(It,{weekday:`short`,day:`numeric`,month:`short`});return Y(`Silenced on ${t} until ${i} ${r}.`,`Silence sur ${t} jusqu’au ${i} ${r}.`)}),ft=e=>e===`agents`?Y(`Agents`,`Agents`):e===`herdr`?`Herdr`:`wherdr`,pt=e=>[e.c.bg,e.c.surface,e.c.line,e.c.text,e.c.accent,e.c.blue,e.c.rose,e.c.teal],mt=e(()=>{let e=_t.value.herdrTheme;return e?e.autoSwitch?`${e.darkName||`catppuccin`} / ${e.lightName||`catppuccin-latte`}`:e.name||`catppuccin`:null}),xt=e(()=>R(ne(_t.value.herdrTheme,!1).id)),X=o(!1),zt=e(()=>z.value===`follow`?xt.value:R(z.value)),Bt=e(()=>z.value===`follow`?`${J(`Follow Herdr`)}${xt.value?` · ${xt.value.label}`:``}`:zt.value?zt.value.label:z.value);function Vt(e){z.value=e,$e()}let Ht=e=>{ut.value=Math.max(8,Math.min(20,ut.value+e))},Ut=[{label:`WebGL`,value:`webgl`},{label:`HTML`,value:`html`}],Wt=e(()=>lt.value===`html-fallback`?J(`Active rendering: HTML (WebGL unavailable)`):lt.value===`html`?J(`Active rendering: HTML`):J(`Active rendering: WebGL`));w(he,kt);let Gt=Cn,Kt=Tn,qt=e(()=>Lt.map(e=>({label:e===1?J(`1 day`):e===365?J(`1 year`):Y(`${e} days`,`${e} jours`),value:e}))),Jt=e({get:()=>Gt.value?.maxSessionDays??7,set:async e=>{try{await Ot(`/api/auth/max-session`,{days:e}),await wt()}catch(e){Z(e.message,!0)}Kt()}}),Xt=e(()=>{let e=Gt.value;if(!e?.deadline)return``;let t=new Date(e.deadline+Date.now()-(e.now??Date.now())).toLocaleString(It===`fr`?`fr-FR`:`en-GB`,{weekday:`short`,day:`numeric`,month:`short`,hour:`2-digit`,minute:`2-digit`});return Y(`This device asks for the passkey again at the first opening after ${t}.`,`Cet appareil redemandera la clé d’accès à la première ouverture après le ${t}.`)});return f(pn),f(()=>{kt(),et(),Ie().then(tt),Kt()}),(e,n)=>{let o=Ne,d=U,f=qn,p=$t,h=dr,b=vr,C=Ir,w=gn,T=$r,N=wi,ne=wn,R=Gi,re=xn,Ce=mn,ke=vn,Ie=hn,ze=En,Be=bn;return c(),l(`section`,Ji,[x(`header`,Yi,[m(o,{icon:`i-lucide-chevron-left`,color:`neutral`,variant:`ghost`,size:`lg`,class:`icon-btn`,"aria-label":(`t`in e?e.t:r(J))(`Back`),onClick:M},null,8,[`aria-label`]),x(`h2`,null,v((`desk`in e?e.desk:r(Q))?(`t`in e?e.t:r(J))(`Settings`):r(k)),1)]),x(`div`,{class:_([`settings-layout`,{"section-open":r(O)}])},[x(`nav`,{class:`settings-nav`,"aria-label":(`t`in e?e.t:r(J))(`Settings sections`)},[(c(!0),l(g,null,u(r(E),e=>(c(),l(`button`,{key:e.id,type:`button`,class:_([`settings-nav-item`,{selected:r(O)===e.id}]),"aria-current":r(O)===e.id?`page`:void 0,onClick:t=>j(e.id)},[m(d,{name:e.icon},null,8,[`name`]),x(`span`,null,v(e.label),1),m(d,{name:`i-lucide-chevron-right`,class:`settings-nav-arrow`})],10,Zi))),128))],8,Xi),S(x(`div`,{ref_key:`body`,ref:ee,class:`settings-body`},[x(`h2`,Qi,v(r(k)),1),S(x(`div`,$i,[x(`div`,ea,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Theme`)),1),x(`button`,{type:`button`,class:`theme-opt theme-current`,"aria-expanded":r(X),onClick:n[0]||=e=>X.value=!r(X)},[x(`span`,na,[(c(!0),l(g,null,u(r(zt)?pt(r(zt)):[],(e,t)=>(c(),l(`i`,{key:t,style:y({background:e})},null,4))),128))]),x(`span`,ra,[t(v(r(Bt)),1),x(`small`,null,v((`t`in e?e.t:r(J))(r(X)?`Hide themes`:`Change theme`)),1)]),m(d,{name:r(X)?`i-lucide-chevron-up`:`i-lucide-chevron-down`,class:`theme-check`},null,8,[`name`])],8,ta),S(x(`div`,{class:`theme-list`,role:`radiogroup`,"aria-label":(`t`in e?e.t:r(J))(`Theme`)},[(c(!0),l(g,null,u((`themeSections`in e?e.themeSections:r(ie))(),i=>(c(),l(`section`,{key:i.group,class:`theme-section`,"aria-label":ft(i.group)},[x(`h4`,oa,v(ft(i.group)),1),x(`div`,sa,[i.group===`herdr`?(c(),l(`button`,{key:0,type:`button`,role:`radio`,class:_([`theme-opt`,{on:(`themeChoice`in e?e.themeChoice:r(z))===(`FOLLOW_HERDR`in e?e.FOLLOW_HERDR:r(te))}]),"aria-checked":(`themeChoice`in e?e.themeChoice:r(z))===(`FOLLOW_HERDR`in e?e.FOLLOW_HERDR:r(te)),onClick:n[1]||=t=>Vt(`FOLLOW_HERDR`in e?e.FOLLOW_HERDR:r(`follow`))},[x(`span`,la,[(c(!0),l(g,null,u(r(xt)?pt(r(xt)):[],(e,t)=>(c(),l(`i`,{key:t,style:y({background:e})},null,4))),128))]),x(`span`,ua,[t(v((`t`in e?e.t:r(J))(`Follow Herdr`)),1),x(`small`,null,v(r(mt)?`config.toml · ${r(mt)}`:(`t`in e?e.t:r(J))(`config.toml not found`)),1)]),(`themeChoice`in e?e.themeChoice:r(z))===(`FOLLOW_HERDR`in e?e.FOLLOW_HERDR:r(`follow`))?(c(),a(d,{key:0,name:`i-lucide-check`,class:`theme-check`})):s(``,!0)],10,ca)):s(``,!0),(c(!0),l(g,null,u(i.themes,n=>(c(),l(`button`,{key:n.id,type:`button`,role:`radio`,class:_([`theme-opt`,{on:(`themeChoice`in e?e.themeChoice:r(z))===n.id}]),"aria-checked":(`themeChoice`in e?e.themeChoice:r(z))===n.id,onClick:e=>Vt(n.id)},[x(`span`,fa,[(c(!0),l(g,null,u(pt(n),(e,t)=>(c(),l(`i`,{key:t,style:y({background:e})},null,4))),128))]),x(`span`,pa,[t(v(n.label),1),n.id===(`DEFAULT_THEME`in e?e.DEFAULT_THEME:r(`wherdr-titanium`))?(c(),l(`small`,ma,v((`t`in e?e.t:r(J))(`default`)),1)):n.light?(c(),l(`small`,ha,v((`t`in e?e.t:r(J))(`light`)),1)):s(``,!0)]),(`themeChoice`in e?e.themeChoice:r(z))===n.id?(c(),a(d,{key:0,name:`i-lucide-check`,class:`theme-check`})):s(``,!0)],10,da))),128))])],8,aa))),128))],8,ia),[[A,r(X)]])]),x(`p`,ga,v((`t`in e?e.t:r(J))(`The theme follows you on every device.`)),1),x(`div`,_a,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Message field border on focus`)),1),m(f,{modelValue:r(Se),"onUpdate:modelValue":n[2]||=e=>D(Se)?Se.value=e:null,items:r(we),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`,`items`]),x(`p`,va,v((`t`in e?e.t:r(J))(`Also on omp’s running actions (border only). Frozen when the system asks for reduced motion. Follows you on every device.`)),1)]),x(`div`,ya,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Language`)),1),m(f,{modelValue:r(P),"onUpdate:modelValue":n[3]||=e=>D(P)?P.value=e:null,items:Oe,variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`])]),x(`p`,ba,v((`t`in e?e.t:r(J))(`The interface language is saved on this device.`)),1),x(`div`,xa,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Home screen`)),1),x(`h4`,Sa,v((`t`in e?e.t:r(J))(`Group by`)),1),m(f,{modelValue:r(B),"onUpdate:modelValue":n[4]||=e=>D(B)?B.value=e:null,items:r(oe),"aria-labelledby":`home-group-label`,variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`,`items`]),x(`label`,Ca,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Individual agents`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`List standalone agents separately. Board tasks stay grouped. Follows you on every device.`)),1)]),m(p,{modelValue:r(ae),"onUpdate:modelValue":n[5]||=e=>D(ae)?ae.value=e:null,"aria-label":(`t`in e?e.t:r(J))(`Individual agents`),color:`success`,size:`xl`},null,8,[`modelValue`,`aria-label`])]),x(`label`,wa,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Compact list`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Tasks: one line in Compact, two in Normal with current activity and relevant labels. Details stay in the task sheet. Follows you on every device.`)),1)]),m(p,{modelValue:r(se),"onUpdate:modelValue":n[6]||=e=>D(se)?se.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])]),x(`label`,Ta,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Reorder automatically`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`In Ready, show unread agents before read ones. Follows you on every device.`)),1)]),m(p,{modelValue:r(V),"onUpdate:modelValue":n[7]||=e=>D(V)?V.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])]),x(`label`,Ea,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Show terminals`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Show terminal spaces in the list, filed under Ready.`)),1)]),m(p,{modelValue:r(F),"onUpdate:modelValue":n[8]||=e=>D(F)?F.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])]),x(`label`,Da,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Show counters`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Show agent counters on the home screen.`)),1)]),m(p,{modelValue:r(I),"onUpdate:modelValue":n[9]||=e=>D(I)?I.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])]),x(`label`,Oa,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Show quotas`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Show Claude and Codex quotas on the home screen.`)),1)]),m(p,{modelValue:r(L),"onUpdate:modelValue":n[10]||=e=>D(L)?L.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])]),m(h)]),x(`div`,ka,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Quotas`)),1),m(f,{modelValue:r(be),"onUpdate:modelValue":n[11]||=e=>D(be)?be.value=e:null,items:r(xe),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`,`items`]),x(`p`,Aa,v((`t`in e?e.t:r(J))(`The color always flags a nearly exhausted quota. Follows you on every device.`)),1)]),(`desk`in e?e.desk:r(Q))?(c(),l(g,{key:0},[x(`div`,ja,[x(`span`,null,v((`t`in e?e.t:r(J))(`Desktop`)),1)]),x(`div`,Ma,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Background`)),1),m(f,{modelValue:r(Te),"onUpdate:modelValue":n[12]||=e=>D(Te)?Te.value=e:null,items:r(De),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`,`items`]),r(Te)===`wherdr`?(c(),l(`label`,Na,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Animated packets`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Small glowing squares running along the wherdr grid.`)),1)]),m(p,{modelValue:r(Ee),"onUpdate:modelValue":n[13]||=e=>D(Ee)?Ee.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])])):s(``,!0),x(`p`,Pa,v((`t`in e?e.t:r(J))(`In the margins of the conversation. Still when the system asks for reduced motion. Follows you on every device.`)),1)]),x(`div`,Fa,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Content width`)),1),m(f,{modelValue:r(_e),"onUpdate:modelValue":n[14]||=e=>D(_e)?_e.value=e:null,items:r(ve),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`,`items`]),x(`p`,Ia,v((`t`in e?e.t:r(J))(`Conversation, terminal, settings and other content. Saved on this device.`)),1)])],64)):s(``,!0)],512),[[A,r(O)===`appearance`]]),S(x(`div`,La,[x(`div`,Ra,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Default pane view`)),1),m(f,{modelValue:r(W),"onUpdate:modelValue":n[15]||=e=>D(W)?W.value=e:null,items:ye,variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`]),x(`p`,za,v((`t`in e?e.t:r(J))(`What an agent pane opens on. A pane you switched to Terminal stays there. Follows you on every device.`)),1)]),x(`div`,Ba,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Typewriter`)),1),m(f,{modelValue:r(pe),"onUpdate:modelValue":n[16]||=e=>D(pe)?pe.value=e:null,items:r(me),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`,disabled:`reducedMotion`in e?e.reducedMotion:r(Ft)},null,8,[`modelValue`,`items`,`disabled`]),x(`p`,Va,v((`t`in e?e.t:r(J))((`reducedMotion`in e?e.reducedMotion:r(Ft))?`Off: the system asks for reduced motion.`:`Only new replies are animated; history appears at once. Tap a reply while it types to show it in full. Follows you on every device.`)),1),x(`label`,{class:_([`settings-toggle encrypted-toggle`,{"is-disabled":!(`typewriterActive`in e?e.typewriterActive:r(Xe))}])},[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Encrypted text`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Writing advances in glyphs, then the text decrypts behind it.`)),1)]),m(p,{modelValue:r(H),"onUpdate:modelValue":n[17]||=e=>D(H)?H.value=e:null,disabled:!(`typewriterActive`in e?e.typewriterActive:r(Xe)),color:`success`,size:`xl`},null,8,[`modelValue`,`disabled`])],2),r(O)===`conversation`?(c(),a(b,{key:0})):s(``,!0)]),x(`div`,Ha,[x(`h3`,null,v((`tl`in e?e.tl:r(Y))(`Reply style`,`Style de réponse`)),1),x(`p`,Ua,v((`tl`in e?e.tl:r(Y))(`Each question an agent asks, and each point it lists, can be quoted in the field to answer them one by one. Choose how they offer it.`,`Chaque question d’un agent, et chaque point qu’il liste, peut être cité dans le champ pour y répondre un par un. Choisis comment ils le proposent.`)),1),m(f,{modelValue:r(de),"onUpdate:modelValue":n[18]||=e=>D(de)?de.value=e:null,items:r(fe),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio reply-style-radio`},null,8,[`modelValue`,`items`]),x(`p`,Wa,v((`tl`in e?e.tl:r(Y))(`Follows you on every device.`,`Te suit sur tous tes appareils.`)),1)]),x(`div`,Ga,[x(`h3`,null,v((`tl`in e?e.tl:r(Y))(`Quoted replies`,`Réponses citées`)),1),x(`p`,Ka,v((`tl`in e?e.tl:r(Y))(`Answer several questions, passages or decisions of an agent in one message: each one goes into the field as a “↳ … —” line that names the message and quotes it, your answer below. Choose how the field shows these lines; the message sent is the same.`,`Réponds à plusieurs questions, passages ou décisions d’un agent dans un seul message : chacun entre dans le champ sous la forme d’une ligne « ↳ … — » qui nomme le message et le cite, ta réponse en dessous. Choisis comment le champ affiche ces lignes ; le message envoyé est le même.`)),1),r(O)===`conversation`?(c(),a(C,{key:0,mode:r(le)},null,8,[`mode`])):s(``,!0),m(f,{modelValue:r(le),"onUpdate:modelValue":n[19]||=e=>D(le)?le.value=e:null,items:r(ue),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio quote-mode-radio`},null,8,[`modelValue`,`items`]),x(`p`,qa,v((`tl`in e?e.tl:r(Y))(`Saved on this device.`,`Enregistré sur cet appareil.`)),1)])],512),[[A,r(O)===`conversation`]]),S(x(`div`,Ja,[x(`div`,Ya,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Home screen`)),1),x(`label`,Xa,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Show terminals`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Show terminal spaces in the list, filed under Ready.`)),1)]),m(p,{modelValue:r(F),"onUpdate:modelValue":n[20]||=e=>D(F)?F.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])])]),x(`div`,Za,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Text`)),1),x(`div`,Qa,[x(`span`,null,v((`t`in e?e.t:r(J))(`Terminal text size`)),1),x(`div`,null,[x(`button`,{type:`button`,"aria-label":(`t`in e?e.t:r(J))(`Decrease text size`),onClick:n[21]||=e=>Ht(-1)},`A−`,8,$a),x(`output`,null,v(`fontSize`in e?e.fontSize:r(ut)),1),x(`button`,{type:`button`,"aria-label":(`t`in e?e.t:r(J))(`Increase text size`),onClick:n[22]||=e=>Ht(1)},`A+`,8,eo)])])]),x(`div`,to,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Clipboard`)),1),x(`label`,no,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Agent copies`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Text an agent copies in the terminal (OSC 52) goes to this device’s clipboard. Never read from it. Saved on this device.`)),1)]),m(p,{modelValue:r(ce),"onUpdate:modelValue":n[23]||=e=>D(ce)?ce.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])])]),x(`div`,ro,[x(`label`,io,[x(`span`,null,[x(`b`,null,v((`t`in e?e.t:r(J))(`Smooth touch scrolling (beta)`)),1),x(`small`,null,v((`t`in e?e.t:r(J))(`Experimental finger tracking and inertia. Saved on this device.`)),1)]),m(p,{modelValue:r(ge),"onUpdate:modelValue":n[24]||=e=>D(ge)?ge.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])])]),x(`div`,ao,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Terminal rendering`)),1),m(f,{modelValue:r(he),"onUpdate:modelValue":n[25]||=e=>D(he)?he.value=e:null,items:Ut,variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`]),x(`p`,oo,v((`t`in e?e.t:r(J))(`Rendering is saved on this device.`)),1),x(`p`,so,v(r(Wt)),1)])],512),[[A,r(O)===`terminal`]]),S(x(`div`,co,[x(`div`,lo,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Offered agents`)),1),x(`p`,uo,v((`t`in e?e.t:r(J))(`Agents offered wherever an agent is chosen. Terminal is always available.`)),1),r(Ae).length?(c(),l(`div`,fo,[(c(!0),l(g,null,u(r(Ae),t=>(c(),l(`label`,{key:t,class:`settings-toggle`},[x(`span`,null,[x(`b`,null,v((`kindLabel`in e?e.kindLabel:r(ht))(t)),1),Pe(t)?(c(),l(`small`,po,v(Pe(t)),1)):s(``,!0)]),x(`input`,{class:`agent-pref-check`,type:`checkbox`,checked:je(t),onChange:e=>Me(t,e.target.checked)},null,40,mo)]))),128))])):(c(),l(`p`,ho,v((`t`in e?e.t:r(J))(`No agents installed on online machines.`)),1)),x(`p`,go,v((`t`in e?e.t:r(J))(`Choices follow you on every device.`)),1)]),x(`div`,_o,[x(`h3`,null,v((`tl`in e?e.tl:r(Y))(`Claude quotas`,`Quotas Claude`)),1),r(O)===`agents`?(c(),a(w,{key:0})):s(``,!0)]),m(T)],512),[[A,r(O)===`agents`]]),S(x(`div`,vo,[x(`div`,yo,[x(`label`,bo,[x(`span`,null,[x(`b`,null,[m(d,{name:r(K)?`i-lucide-bell-off`:`i-lucide-bell`},null,8,[`name`]),t(v((`tl`in e?e.tl:r(Y))(`Do not disturb`,`Silence`)),1)]),x(`small`,null,v((`tl`in e?e.tl:r(Y))(`Turns off every notification, no exceptions: the rules below are ignored.`,`Coupe toutes les notifications, sans exception : les réglages ci-dessous sont ignorés.`)),1)]),m(p,{modelValue:r(K),"onUpdate:modelValue":n[26]||=e=>D(K)?K.value=e:null,color:`success`,size:`xl`},null,8,[`modelValue`])]),x(`p`,xo,v((`tl`in e?e.tl:r(Y))(`Silence on`,`Couper pour`)),1),m(f,{"model-value":r(Le),items:r(Re),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`,"onUpdate:modelValue":n[27]||=e=>q(e)},null,8,[`model-value`,`items`]),r(Fe)?s(``,!0):(c(),l(`p`,So,v((`tl`in e?e.tl:r(Y))(`“This device” needs notifications turned on below.`,`« Cet appareil » demande d’activer les notifications ci-dessous.`)),1)),x(`p`,Co,v((`tl`in e?e.tl:r(Y))(`Duration`,`Durée`)),1),m(f,{"model-value":r(G),items:He,variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`,"onUpdate:modelValue":n[28]||=e=>ct(e)},null,8,[`model-value`]),x(`p`,{class:_([`muted notify-hint`,{"quiet-end":r(K)}])},v(r(dt)||(`tl`in e?e.tl:r(Y))(`Notifications come back on by themselves at the end.`,`Retour automatique à la normale à la fin de la durée choisie.`)),3)]),m(N),x(`div`,wo,[x(`h3`,null,v((`tl`in e?e.tl:r(Y))(`This device’s notifications`,`Notifications de cet appareil`)),1),m(ne,{detailed:``})])],512),[[A,r(O)===`notifications`]]),S(x(`div`,To,[m(R,{machines:(`appConfig`in e?e.appConfig:r(_t)).machines||[{key:``,label:(`hostLabel`in e?e.hostLabel:r(At))||(`t`in e?e.t:r(J))(`This machine`),local:!0,home:``,dirs:[],online:!0,kinds:[]}]},null,8,[`machines`])],512),[[A,r(O)===`plugins`]]),S(x(`div`,Eo,[m(re,{active:r(O)===`phone`},null,8,[`active`])],512),[[A,r(O)===`phone`]]),S(x(`div`,Do,[x(`div`,Oo,[x(`h3`,null,v((`tl`in e?e.tl:r(Y))(`Network access`,`Accès réseau`)),1),m(Ce),(`appConfig`in e?e.appConfig:r(_t)).openNetwork?s(``,!0):(c(),l(`p`,ko,v((`tl`in e?e.tl:r(Y))(`wherdr only answers this computer (localhost) and your tailnet. A device on another network (a Wi-Fi, a LAN, the Internet) is refused, even with the address and the port. A proxy or tunnel you run on this computer counts as this computer.`,`wherdr ne répond qu’à cet ordinateur (localhost) et à ton tailnet. Un appareil sur un autre réseau (un Wi-Fi, un réseau local, Internet) est refusé, même avec l’adresse et le port. Un proxy ou un tunnel que tu fais tourner sur cet ordinateur compte comme cet ordinateur.`)),1)),m(ke)]),x(`div`,Ao,[x(`h3`,null,v((`tl`in e?e.tl:r(Y))(`Passkey · optional`,`Passkey · facultative`)),1),m(Ie)]),r(Gt)?.enabled?(c(),l(`div`,jo,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Ask for the passkey again after`)),1),m(f,{modelValue:r(Jt),"onUpdate:modelValue":n[29]||=e=>D(Jt)?Jt.value=e:null,items:r(qt),variant:`table`,indicator:`end`,color:`primary`,size:`lg`,class:`settings-radio`},null,8,[`modelValue`,`items`]),x(`p`,Mo,v((`t`in e?e.t:r(J))(`Counted from the last passkey unlock, used or not, for every device. Never in the middle of use: at the next opening of the app.`)),1),r(Xt)?(c(),l(`p`,No,v(r(Xt)),1)):s(``,!0)])):s(``,!0)],512),[[A,r(O)===`security`]]),(`desk`in e?e.desk:r(Q))&&!(`coarse`in e?e.coarse:r(Ct))?S((c(),l(`div`,Po,[m(ze)],512)),[[A,r(O)===`shortcuts`]]):s(``,!0),S(x(`div`,Fo,[x(`div`,Io,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Paste journal`)),1),x(`label`,Lo,[x(`span`,null,v((`t`in e?e.t:r(J))(`Paste journal`)),1),m(p,{"model-value":r(cn),"onUpdate:modelValue":r(un)},null,8,[`model-value`,`onUpdate:modelValue`])]),x(`p`,Ro,v((`t`in e?e.t:r(J))(`Records the last 50 paste events on this device, without text content. Turning it off clears the journal.`)),1),x(`pre`,zo,v(JSON.stringify(r(tn),null,2)),1)])],512),[[A,r(O)===`advanced`]]),S(x(`div`,Bo,[x(`div`,Vo,[x(`h3`,null,v((`t`in e?e.t:r(J))(`Application`)),1),x(`p`,Ho,`wherdr · v`+v(r(i)),1),(`updateInfo`in e?e.updateInfo:r(yn))?.latest?(c(),a(Be,{key:0,info:`updateInfo`in e?e.updateInfo:r(yn)},null,8,[`info`])):(`updateInfo`in e?e.updateInfo:r(yn))?.checked?(c(),l(`p`,Uo,v((`t`in e?e.t:r(J))(`This is the latest version.`)),1)):s(``,!0),x(`button`,{type:`button`,class:`settings-action solo`,onClick:Wo},[m(d,{name:`i-lucide-refresh-cw`}),t(v((`t`in e?e.t:r(J))(`Reload app`)),1)]),x(`button`,{type:`button`,class:`settings-action solo`,onClick:n[30]||=(...t)=>(`openOnboarding`in e?e.openOnboarding:r(Sn))&&(`openOnboarding`in e?e.openOnboarding:r(Sn))(...t)},[m(d,{name:`i-lucide-compass`}),t(v((`tl`in e?e.tl:r(Y))(`Setup guide`,`Guide de démarrage`)),1)])])],512),[[A,r(O)===`about`]])],512),[[A,r(O)]])],2)])}}}),{__name:`SettingsView`}),Ko=p({__name:`settings`,setup(e){return f(()=>{X.value=null}),(e,t)=>{let n=Go;return c(),a(n)}}});export{Ko as default};
|
|
Binary file
|
|
Binary file
|