shadok-ai 0.12.8 → 0.12.10

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/dist/tmux.d.ts CHANGED
@@ -13,7 +13,55 @@ import type { PilotOptions, WaitIdleOptions, WaitOptions } from "./session.js";
13
13
  export interface TmuxPilotOptions extends PilotOptions {
14
14
  /** tmux session name (stable across restarts — derive from the session id). */
15
15
  tmuxName: string;
16
+ /** Where the one-shot launcher script is written (default `~/.shadok-ai/run`). */
17
+ launcherDir?: string;
16
18
  }
19
+ /**
20
+ * What a failed tmux call is allowed to say: the subcommand and tmux's own
21
+ * complaint, NEVER the rest of the argument vector.
22
+ *
23
+ * `execFileSync` builds its error message as "Command failed: <every argument>",
24
+ * and that message travelled to the browser untouched. When the arguments are a
25
+ * spawn command, they are every secret the profile injects — so a spawn that
26
+ * failed for an unrelated reason displayed forty-six credentials in the web UI.
27
+ * `send-keys` carries the user's own prompt text, which has no business in an
28
+ * error either.
29
+ */
30
+ export declare function tmuxErrorMessage(args: string[], stderr: unknown): string;
31
+ /** Single-quote a string for POSIX sh; safe for any content, newlines included. */
32
+ export declare function shellQuote(s: string): string;
33
+ /** A name `export` accepts. The vault does not restrict names, the shell does. */
34
+ export declare function isEnvName(name: string): boolean;
35
+ /**
36
+ * The one-shot script a tmux pane runs to start an agent.
37
+ *
38
+ * The spawn used to be a single `env KEY=VALUE … claude <args>` string handed to
39
+ * `tmux new-session`. Two things were wrong with carrying it that way. tmux
40
+ * refuses a command over ~16 KB ("command too long", measured: 16000 bytes
41
+ * pass, 17000 fail), and that string holds every secret VALUE of the profile
42
+ * plus every system prompt — so a lead role with a long prompt on a large vault
43
+ * simply could not be launched, while a shorter role on the same vault could.
44
+ * And those values were arguments of a process, which `ps` shows to anyone on
45
+ * the machine.
46
+ *
47
+ * Writing them to a file makes the tmux command a few dozen bytes whatever the
48
+ * vault holds, and `export` is a shell builtin, so no value is ever the argument
49
+ * of any process. The order is the old one and is load-bearing: strip the
50
+ * inherited CLAUDE* markers, then the secrets, then `FORCED_CLAUDE_ENV` LAST so
51
+ * a profile can never switch transcript writing off (invariant 29). The script
52
+ * removes itself first thing — `sh` already holds it open, so unlinking the name
53
+ * loses nothing — which bounds the file's life to the moment before `exec`.
54
+ */
55
+ export declare function launcherScript(o: {
56
+ unset: string[];
57
+ env: Record<string, string>;
58
+ forced: Record<string, string>;
59
+ bin: string;
60
+ args: string[];
61
+ }): {
62
+ script: string;
63
+ skipped: string[];
64
+ };
17
65
  /** True when a tmux session with this exact name is alive. */
18
66
  export declare function tmuxHasSession(name: string): boolean;
19
67
  /** Kills a tmux session by name. Idempotent: an absent session is a no-op. */
package/dist/tmux.js CHANGED
@@ -5,14 +5,86 @@ import path from "node:path";
5
5
  import { idleStep, screenShowsWork, inputText, describeStuckScreen, nextScreenDelay, typeIntoBox, SCREEN_FAST_MS } from "./detect.js";
6
6
  import { windowMs, FORCED_CLAUDE_ENV } from "./session.js";
7
7
  import { binaryBusyError } from "./claude-bin.js";
8
+ import { SHADOK_DIR } from "./config.js";
8
9
  function tmux(args, input) {
9
- return execFileSync("tmux", args, {
10
- encoding: "utf8",
11
- input,
12
- timeout: 10_000,
13
- maxBuffer: 8 * 1024 * 1024,
14
- stdio: ["pipe", "pipe", "ignore"],
15
- });
10
+ try {
11
+ return execFileSync("tmux", args, {
12
+ encoding: "utf8",
13
+ input,
14
+ timeout: 10_000,
15
+ maxBuffer: 8 * 1024 * 1024,
16
+ stdio: ["pipe", "pipe", "pipe"],
17
+ });
18
+ }
19
+ catch (e) {
20
+ throw new Error(tmuxErrorMessage(args, e.stderr));
21
+ }
22
+ }
23
+ /**
24
+ * What a failed tmux call is allowed to say: the subcommand and tmux's own
25
+ * complaint, NEVER the rest of the argument vector.
26
+ *
27
+ * `execFileSync` builds its error message as "Command failed: <every argument>",
28
+ * and that message travelled to the browser untouched. When the arguments are a
29
+ * spawn command, they are every secret the profile injects — so a spawn that
30
+ * failed for an unrelated reason displayed forty-six credentials in the web UI.
31
+ * `send-keys` carries the user's own prompt text, which has no business in an
32
+ * error either.
33
+ */
34
+ export function tmuxErrorMessage(args, stderr) {
35
+ const why = typeof stderr === "string" ? stderr.trim() : Buffer.isBuffer(stderr) ? stderr.toString("utf8").trim() : "";
36
+ return `tmux ${args[0] ?? "command"} failed${why ? `: ${why}` : ""}`;
37
+ }
38
+ /** Single-quote a string for POSIX sh; safe for any content, newlines included. */
39
+ export function shellQuote(s) {
40
+ return `'${String(s).replace(/'/g, "'\\''")}'`;
41
+ }
42
+ /** A name `export` accepts. The vault does not restrict names, the shell does. */
43
+ export function isEnvName(name) {
44
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);
45
+ }
46
+ /**
47
+ * The one-shot script a tmux pane runs to start an agent.
48
+ *
49
+ * The spawn used to be a single `env KEY=VALUE … claude <args>` string handed to
50
+ * `tmux new-session`. Two things were wrong with carrying it that way. tmux
51
+ * refuses a command over ~16 KB ("command too long", measured: 16000 bytes
52
+ * pass, 17000 fail), and that string holds every secret VALUE of the profile
53
+ * plus every system prompt — so a lead role with a long prompt on a large vault
54
+ * simply could not be launched, while a shorter role on the same vault could.
55
+ * And those values were arguments of a process, which `ps` shows to anyone on
56
+ * the machine.
57
+ *
58
+ * Writing them to a file makes the tmux command a few dozen bytes whatever the
59
+ * vault holds, and `export` is a shell builtin, so no value is ever the argument
60
+ * of any process. The order is the old one and is load-bearing: strip the
61
+ * inherited CLAUDE* markers, then the secrets, then `FORCED_CLAUDE_ENV` LAST so
62
+ * a profile can never switch transcript writing off (invariant 29). The script
63
+ * removes itself first thing — `sh` already holds it open, so unlinking the name
64
+ * loses nothing — which bounds the file's life to the moment before `exec`.
65
+ */
66
+ export function launcherScript(o) {
67
+ const skipped = [];
68
+ const exports = [];
69
+ const add = (k, v) => {
70
+ if (!isEnvName(k))
71
+ return skipped.push(k);
72
+ exports.push(`export ${k}=${shellQuote(v)}`);
73
+ };
74
+ add("TERM", "xterm-256color");
75
+ for (const [k, v] of Object.entries(o.env))
76
+ add(k, v);
77
+ for (const [k, v] of Object.entries(o.forced))
78
+ add(k, v);
79
+ const script = [
80
+ "#!/bin/sh",
81
+ 'rm -f -- "$0"',
82
+ ...o.unset.filter(isEnvName).map((k) => `unset ${k}`),
83
+ ...exports,
84
+ `exec ${[o.bin, ...o.args].map(shellQuote).join(" ")}`,
85
+ "",
86
+ ].join("\n");
87
+ return { script, skipped };
16
88
  }
17
89
  function tmuxOk(args) {
18
90
  try {
@@ -74,28 +146,44 @@ export class TmuxPilot {
74
146
  else {
75
147
  // Strip a parent Claude Code session's vars (a nested claude that sees
76
148
  // them may disable interactive mode), like PtyPilot does.
77
- const unset = Object.keys(process.env)
78
- .filter((k) => /^(CLAUDE|CLAUDECODE|AI_AGENT)/.test(k))
79
- .flatMap((k) => ["-u", k]);
149
+ const unset = Object.keys(process.env).filter((k) => /^(CLAUDE|CLAUDECODE|AI_AGENT)/.test(k));
80
150
  const bin = this.opts.claudePath ?? "claude";
81
- // Repo secrets → KEY=VALUE assignments for the `env` prefix (each token is
82
- // single-quoted below, so values with spaces/specials are safe).
83
- const secretEnv = Object.entries(this.opts.env ?? {}).map(([k, v]) => `${k}=${v}`);
84
- // After secretEnv on purpose — `env` applies assignments left to right, so
85
- // the last one wins and a profile cannot switch off transcript writing.
86
- const forced = Object.entries(FORCED_CLAUDE_ENV).map(([k, v]) => `${k}=${v}`);
87
- const cmd = ["env", ...unset, "TERM=xterm-256color", ...secretEnv, ...forced, bin, ...(this.opts.args ?? [])]
88
- .map((a) => `'${String(a).replace(/'/g, "'\\''")}'`)
89
- .join(" ");
90
- tmux([
91
- "new-session",
92
- "-d",
93
- "-s", this.name,
94
- "-x", String(this.opts.cols),
95
- "-y", String(this.opts.rows),
96
- "-c", this.opts.cwd ?? process.cwd(),
97
- cmd,
98
- ]);
151
+ // Secrets and prompts go into a private one-shot script, never onto the
152
+ // tmux command line: see `launcherScript` for why both halves matter.
153
+ const { script, skipped } = launcherScript({
154
+ unset,
155
+ env: this.opts.env ?? {},
156
+ forced: FORCED_CLAUDE_ENV,
157
+ bin,
158
+ args: this.opts.args ?? [],
159
+ });
160
+ for (const name of skipped)
161
+ console.error(`[${this.name}] secret "${name}" not exported — not a valid environment variable name`);
162
+ const dir = this.opts.launcherDir ?? path.join(SHADOK_DIR, "run");
163
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
164
+ fs.chmodSync(dir, 0o700);
165
+ const launcher = path.join(dir, `${this.name}.sh`);
166
+ // `wx` after a forced remove: a stale file from an earlier failed spawn must
167
+ // not keep whatever mode it had — the new one is created 0600 or not at all.
168
+ fs.rmSync(launcher, { force: true });
169
+ fs.writeFileSync(launcher, script, { mode: 0o600, flag: "wx" });
170
+ try {
171
+ tmux([
172
+ "new-session",
173
+ "-d",
174
+ "-s", this.name,
175
+ "-x", String(this.opts.cols),
176
+ "-y", String(this.opts.rows),
177
+ "-c", this.opts.cwd ?? process.cwd(),
178
+ `sh ${shellQuote(launcher)}`,
179
+ ]);
180
+ }
181
+ catch (e) {
182
+ // The pane never ran, so the script never removed itself: it holds the
183
+ // profile's secrets and must not outlive the failure.
184
+ fs.rmSync(launcher, { force: true });
185
+ throw e;
186
+ }
99
187
  // `tmux new-session` returns as soon as the pane exists, so a pane that is
100
188
  // ALREADY gone means its command never got to run — ETXTBSY being the
101
189
  // reason that actually happens here, when a claude-code upgrade is
@@ -103,8 +191,10 @@ export class TmuxPilot {
103
191
  // reads it as an ordinary exit, and a spawn killed by a transient reports
104
192
  // as a dead agent. A pane tmux has not torn down yet reads as alive and we
105
193
  // fall through to the old behaviour — no worse than before, never worse.
106
- if (!this.hasSession())
194
+ if (!this.hasSession()) {
195
+ fs.rmSync(launcher, { force: true });
107
196
  throw binaryBusyError(bin);
197
+ }
108
198
  }
109
199
  this.capture();
110
200
  // Self-rescheduling rather than a flat interval: the capture is synchronous,
package/dist/tmux.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tmux.js","sourceRoot":"","sources":["../src/tmux.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tmux.js","sourceRoot":"","sources":["../src/tmux.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shadok-ai",
3
- "version": "0.12.8",
3
+ "version": "0.12.10",
4
4
  "main": "dist/session.js",
5
5
  "scripts": {
6
6
  "test": "node --import tsx --test test/*.ts context/*/test/*.test.mjs",
package/public/index.html CHANGED
@@ -275,7 +275,8 @@
275
275
  .led.busy { background: var(--amber); box-shadow: 0 0 8px var(--amber); animation: breathe 1.2s ease-in-out infinite; }
276
276
  .led.off { background: var(--err); }
277
277
  @keyframes breathe { 50% { opacity: 0.35; } }
278
- @media (prefers-reduced-motion: reduce) { .led.busy { animation: none; } }
278
+ @keyframes sheet-up { from { transform: translateY(100%); } to { transform: translateY(0); } }
279
+ @media (prefers-reduced-motion: reduce) { .led.busy { animation: none; } body.picker-open #tabbar { animation: none; } }
279
280
  header .spacer { flex: 1; }
280
281
  /* Quota dials (5h / 7d subscription usage).
281
282
  A 240° speedometer whose CENTRE is the ideal pace and whose RIGHT END is
@@ -1178,17 +1179,43 @@
1178
1179
  #chanBar .gauge .label { font-size: 10px; }
1179
1180
  #chanBar #cwdView { display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; }
1180
1181
  /* Channel selector: hidden on desktop (the sidebar is the navigation). */
1181
- #chanSelect {
1182
- display: none;
1183
- font-family: var(--mono); font-size: 13px;
1182
+ /* Mobile agents trigger: hidden on desktop (the sidebar IS the navigation),
1183
+ shown as a compact "● name ▾" pill on a phone. */
1184
+ #chanPicker {
1185
+ display: none; align-items: center; gap: 6px;
1186
+ font-family: var(--mono); font-size: 13px; cursor: pointer;
1184
1187
  background: var(--bg-inset); color: var(--text);
1185
1188
  border: 1px solid var(--line); border-radius: 6px; padding: 5px 8px;
1186
1189
  max-width: 55vw;
1187
1190
  }
1191
+ #chanPicker #pickerName { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1192
+ #chanPicker .pk-caret { color: var(--text-dim); font-size: 11px; flex: none; transition: transform 0.15s; }
1193
+ body.picker-open #chanPicker { border-color: var(--amber); }
1194
+ body.picker-open #chanPicker .pk-caret { transform: rotate(180deg); }
1188
1195
  /* ── Mobile: sidebar hidden, navigation via the channel header's selector ── */
1189
1196
  @media (max-width: 640px) {
1190
1197
  #tabbar { display: none; }
1191
- #chanSelect { display: inline-block; min-width: 0; }
1198
+ #chanPicker { display: inline-flex; min-width: 0; }
1199
+ /* The agents column, on demand, as a bottom sheet — the SAME rich tabs, not a
1200
+ flattened list. Slides up over the chat; a backdrop dims and closes it. */
1201
+ body.picker-open #tabbar {
1202
+ display: flex;
1203
+ position: fixed; left: 0; right: 0; bottom: 0; top: auto;
1204
+ width: auto; max-height: 78vh; z-index: 55;
1205
+ border-right: none; border-top: 1px solid var(--line);
1206
+ border-radius: 14px 14px 0 0;
1207
+ box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.5);
1208
+ padding: 8px 8px calc(12px + env(safe-area-inset-bottom, 0px));
1209
+ animation: sheet-up 0.18s ease-out;
1210
+ }
1211
+ /* A grab handle, so the panel reads as a sheet you can dismiss. */
1212
+ body.picker-open #tabbar::before {
1213
+ content: ""; align-self: center; flex: none;
1214
+ width: 36px; height: 4px; margin: 2px 0 8px;
1215
+ border-radius: 2px; background: var(--line);
1216
+ }
1217
+ #pickerBackdrop { position: fixed; inset: 0; z-index: 54; background: rgba(8, 9, 13, 0.5); }
1218
+ #pickerBackdrop[hidden] { display: none; }
1192
1219
  #chanBar #chanBarName { display: none; }
1193
1220
  /* Condensed channel bar: keep Status + Session, hide the rest. */
1194
1221
  #chanBar #dirGauge, #chanBar #branchGauge { display: none !important; }
@@ -1241,7 +1268,7 @@
1241
1268
  @media (pointer: coarse) {
1242
1269
  textarea, select,
1243
1270
  input[type="text"], input[type="password"], input[type="number"], input[type="search"],
1244
- #composer textarea, #chanSelect { font-size: 16px; }
1271
+ #composer textarea { font-size: 16px; }
1245
1272
  }
1246
1273
  #xtermHost { flex: 1; min-height: 0; overflow: auto; padding: 8px 10px; }
1247
1274
  #xtermHost .xterm { height: 100%; }
@@ -2022,6 +2049,8 @@
2022
2049
  </button>
2023
2050
  </div>
2024
2051
  </nav>
2052
+ <!-- Dims the chat behind the mobile agents sheet; tap to close. -->
2053
+ <div id="pickerBackdrop" hidden></div>
2025
2054
 
2026
2055
  <section class="chat-pane">
2027
2056
 
@@ -2030,8 +2059,12 @@
2030
2059
  separate place, so its actions have no reason to appear with it. -->
2031
2060
  <div id="chanBar" hidden>
2032
2061
  <span class="label" id="chanBarName"></span>
2033
- <!-- Mobile: sidebar hidden → this selector switches channel / creates one. -->
2034
- <select id="chanSelect" title="Agent"></select>
2062
+ <!-- Mobile: the sidebar is hidden → this button opens the very same rich
2063
+ agent tabs (LED, state, background-work hatch, context bar) as a bottom
2064
+ sheet, instead of flattening them into a native <select>. -->
2065
+ <button id="chanPicker" type="button" aria-haspopup="true" aria-expanded="false" title="Agents">
2066
+ <span id="pickerLed" class="led"></span><span id="pickerName">—</span><span class="pk-caret">▾</span>
2067
+ </button>
2035
2068
  <div class="gauge">
2036
2069
  <span class="label">Status</span>
2037
2070
  <span class="value"><span id="led" class="led"></span><span id="state">—</span></span>
@@ -2787,7 +2820,7 @@
2787
2820
  document.addEventListener("click", () => {
2788
2821
  if (Date.now() - tabMenuOpenedAt > 200) closeTabMenu();
2789
2822
  });
2790
- document.addEventListener("keydown", (e) => { if (e.key === "Escape") closeTabMenu(); });
2823
+ document.addEventListener("keydown", (e) => { if (e.key === "Escape") { closeTabMenu(); closePicker(); } });
2791
2824
  window.addEventListener("blur", () => closeTabMenu());
2792
2825
 
2793
2826
  /** Right-click menu on a tab: the home for per-channel actions. */
@@ -3460,6 +3493,8 @@
3460
3493
  promptInput.value = tab.draft;
3461
3494
  autosizePrompt();
3462
3495
  refreshChrome();
3496
+ // Picking an agent from the mobile sheet dismisses it.
3497
+ closePicker();
3463
3498
  // Experimental terminal follows the active channel (re-seeds on switch).
3464
3499
  if (typeof syncTerm === "function") syncTerm();
3465
3500
  if (tab.status !== "setup") {
@@ -3866,29 +3901,39 @@
3866
3901
  * central panel shows the invitation.
3867
3902
  */
3868
3903
  /** (Re)builds the mobile selector: one option per channel + "+ New agent". */
3904
+ // The mobile trigger just MIRRORS the active agent (its name + LED). The sheet
3905
+ // it opens is the real sidebar (#tabbar), so there is no flattened list to
3906
+ // rebuild here — every rich tab renders itself. Name kept for its callers.
3869
3907
  function rebuildChanSelect() {
3870
- const sel = $("chanSelect");
3871
- if (!sel) return;
3872
- const cur = active ? String(active.id) : "";
3873
- sel.innerHTML = "";
3874
- for (const t of tabs) {
3875
- const o = document.createElement("option");
3876
- o.value = String(t.id);
3877
- o.textContent = t.nameEl ? t.nameEl.textContent : "agent " + t.id;
3878
- sel.appendChild(o);
3879
- }
3880
- const nw = document.createElement("option");
3881
- nw.value = "__new__";
3882
- nw.textContent = "+ New agent";
3883
- sel.appendChild(nw);
3884
- sel.value = cur;
3885
- }
3886
- $("chanSelect").addEventListener("change", () => {
3887
- const v = $("chanSelect").value;
3888
- if (v === "__new__") { createTab(); return; }
3889
- const t = tabs.find((x) => String(x.id) === v);
3890
- if (t) activate(t);
3891
- });
3908
+ const led = $("pickerLed"), name = $("pickerName");
3909
+ if (!led || !name) return;
3910
+ led.className = active && active.ledEl ? active.ledEl.className : "led";
3911
+ name.textContent = active ? (active.nameEl ? active.nameEl.textContent : "agent " + active.id) : "—";
3912
+ }
3913
+ // ── Mobile agents sheet ──────────────────────────────────────────────────
3914
+ // On a phone the sidebar is hidden; this opens it as a bottom sheet so the
3915
+ // channels keep their full rendering (status, background-work hatch, context)
3916
+ // instead of collapsing into a native <select>.
3917
+ function isMobileWidth() { return matchMedia("(max-width: 640px)").matches; }
3918
+ function openPicker() {
3919
+ if (!isMobileWidth()) return;
3920
+ document.body.classList.add("picker-open");
3921
+ $("pickerBackdrop").hidden = false;
3922
+ $("chanPicker").setAttribute("aria-expanded", "true");
3923
+ }
3924
+ function closePicker() {
3925
+ if (!document.body.classList.contains("picker-open")) return;
3926
+ document.body.classList.remove("picker-open");
3927
+ $("pickerBackdrop").hidden = true;
3928
+ $("chanPicker").setAttribute("aria-expanded", "false");
3929
+ }
3930
+ function togglePicker() {
3931
+ document.body.classList.contains("picker-open") ? closePicker() : openPicker();
3932
+ }
3933
+ $("chanPicker").addEventListener("click", togglePicker);
3934
+ $("pickerBackdrop").addEventListener("click", closePicker);
3935
+ // Leaving phone width (rotation, resized window) must not strand an open sheet.
3936
+ addEventListener("resize", () => { if (!isMobileWidth()) closePicker(); });
3892
3937
 
3893
3938
  function refreshChrome() {
3894
3939
  rebuildChanSelect(); // keeps the mobile selector in step (list + active)
@@ -4774,6 +4819,9 @@
4774
4819
  * of the conversation you were watching.
4775
4820
  */
4776
4821
  function openSetup() {
4822
+ // Close the mobile agents sheet first: the setup overlay sits BELOW it in
4823
+ // the stack, so leaving the sheet open would hide the form behind it.
4824
+ closePicker();
4777
4825
  // PREDICTABLE defaults on every opening. The browser restores form-field
4778
4826
  // state (a "continue"/"resume" mode chosen once, an unticked worktree box, a
4779
4827
  // worktree cwd) — which is what silently made "create an agent" fall back
@@ -7252,6 +7300,7 @@
7252
7300
 
7253
7301
  tweakCta.addEventListener("click", async () => {
7254
7302
  if (tweakBusy) return;
7303
+ closePicker(); // dismiss the mobile sheet; the tweak agent takes over the view
7255
7304
  // Belt and braces: the CTA is hidden as soon as a tweak channel exists, but
7256
7305
  // should it reappear we activate the existing one rather than open a second.
7257
7306
  const already = tweakTab();
@@ -38,16 +38,14 @@ export const TOUR_STEPS = [
38
38
  "Every agent gets its own git worktree and branch, so several never collide. " +
39
39
  "Pick one here to follow it, and “+ New agent” starts another. One of them is this " +
40
40
  "cockpit's home agent: the only one that cannot be closed.",
41
- // The column on desktop, the channel picker on a phone — never both at once.
42
- //
43
- // Which is also why this body says neither "at the top" nor "at the bottom",
44
- // and no longer points at "Tweak Shadok-AI": those describe the COLUMN, and
45
- // the phone's `<select>` holds one option per agent plus "+ New agent" and
46
- // nothing else. A tour that names a control the reader cannot find is the
47
- // same failure as a spotlight on empty space, just harder to notice.
48
- // (That Tweak is unreachable on a phone at all is a real gap — in the UI,
49
- // not in the tour.)
50
- target: ["#tabbar", "#chanSelect"],
41
+ // The column on desktop, the agents-picker button on a phone — never both at
42
+ // once. The phone's `#chanPicker` opens the SAME column as a bottom sheet, so
43
+ // "+ New agent" and Tweak are reachable there too now — but the spotlight
44
+ // lands on the CLOSED button, whose contents aren't on screen yet. So this
45
+ // body still says neither "at the top" nor "at the bottom" and still doesn't
46
+ // point at "Tweak Shadok-AI": naming a control the reader cannot see at the
47
+ // moment of the spotlight is the same failure as a spotlight on empty space.
48
+ target: ["#tabbar", "#chanPicker"],
51
49
  },
52
50
  {
53
51
  id: "tab",