tmuxes 0.1.2 → 0.1.3
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/README.md +8 -0
- package/dist/agentHooks.js +65 -0
- package/dist/agentHooks.js.map +1 -0
- package/dist/index.js +42 -5
- package/dist/index.js.map +1 -1
- package/dist/tmux/formats.js +4 -2
- package/dist/tmux/formats.js.map +1 -1
- package/dist/tmux/sessions.js +4 -1
- package/dist/tmux/sessions.js.map +1 -1
- package/package.json +1 -1
- package/public/assets/{index-BmRC6hB0.js → index-DRmK9UMk.js} +2 -2
- package/public/index.html +1 -1
package/README.md
CHANGED
|
@@ -216,11 +216,19 @@ npm test # vitest:输入校验、列表解析、ssh/tmux/wsl 的 argv 形状
|
|
|
216
216
|
| 在模式里搜索 | `C-s` 向前 / `C-r` 向后(默认 emacs 风格) |
|
|
217
217
|
| 退出复制 / 滚动模式 | `q` |
|
|
218
218
|
| **开鼠标滚轮**(直接滚轮翻 + 鼠标选) | 执行 `tmux set -g mouse on`,或写进 `~/.tmux.conf` |
|
|
219
|
+
| **按住 Shift 用鼠标**(绕过 tmux 鼠标模式) | 按住 `Shift` 拖动选中文字 → 浏览器右键「复制」;右键「粘贴」 |
|
|
219
220
|
|
|
221
|
+
> 提示:开了 `mouse on` 后鼠标归 tmux 管;想用浏览器原生的**框选 + 右键复制粘贴**,**按住 `Shift`** 再拖动 / 右键即可。
|
|
222
|
+
>
|
|
220
223
|
> 提示:在 tmuxes 里**新建 / 选择 / 重命名 / 杀会话**直接点 UI 就行,不用记命令;但**往上滚看历史、复制文字、拆面板**这些是 tmux 自己的功能,得用上面的快捷键。
|
|
221
224
|
|
|
222
225
|
## 📋 更新日志
|
|
223
226
|
|
|
227
|
+
### 0.1.3
|
|
228
|
+
- **修复 (Windows)**:`Ctrl+C` 现在真的能停掉服务了。之前的修复有 bug(readline 没进入终端模式,信号桥接形同虚设),而且 node-pty 的 ConPTY 会破坏宿主进程的 `CTRL_C_EVENT → SIGINT` 通路。改为**直接从控制台读取 `Ctrl+C` 原始字节(0x03)**,绕开被破坏的信号机制。`Ctrl+Break` 同样可用。
|
|
229
|
+
- **改进:完成 / 提问提醒改用 agent hook(修 SSH 虚假提醒)**。旧的 idle 启发式在 SSH 集群上经常误报(agent 在排队 / 慢 I/O 时长时间不输出 → 被误判成「完成」)。现在启动 Claude Code / Codex 时**自动注入 hook**:agent 在完成 / 需要决策时,通过其自身 tmux 会话里的 `@tmuxes_attn` 选项上报,tmuxes 经已有的管理轮询读取(SSH 友好,无需反向网络)。Claude:`Stop`=完成 / `Notification`=决策;Codex:仅完成。SSH/本地/WSL 不再有 idle 误报;原生 Windows shell 仍用 idle 兜底。可用 `TMUXES_NO_AUTOHOOK=1` 关闭注入。
|
|
230
|
+
- **变更:恢复浏览器原生右键**。终端区域不再拦截右键菜单。想用浏览器原生**框选 + 右键复制粘贴**,**按住 `Shift`** 拖动 / 右键即可(绕过 tmux 鼠标模式)。
|
|
231
|
+
|
|
224
232
|
### 0.1.2
|
|
225
233
|
- **新增:完成 / 提问提醒**。零配置监测每个会话——agent 跑完或停下来等你决策时,通过**侧边栏徽标 + 提示音 + 后台标签页标题闪烁**提醒你,并区分「✋ 等待输入」与「✓ 已完成」。原理:用 `session_activity` 做抗时钟偏差的空闲检测,触发时 `capture-pane` 抓屏分类。设置面板可开关提醒与提示音。
|
|
226
234
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Auto-inject notification hooks into known agent launch commands.
|
|
2
|
+
*
|
|
3
|
+
* When tmuxes launches a recognized agent (Claude Code, Codex) as a session's
|
|
4
|
+
* initial command, we splice in that agent's hook config so it sets a tmux
|
|
5
|
+
* SESSION user option `@tmuxes_attn` to "<reason>:<nonce>" on its events:
|
|
6
|
+
* done — the agent finished a turn
|
|
7
|
+
* decision — the agent needs the user's input/permission
|
|
8
|
+
*
|
|
9
|
+
* tmuxes reads `@tmuxes_attn` over its existing management poll. Because the
|
|
10
|
+
* agent runs inside the tmux pane, $TMUX is inherited and the option lands on
|
|
11
|
+
* the agent's own session — so this works over SSH/WSL with no reverse network.
|
|
12
|
+
*
|
|
13
|
+
* The nonce ($(date +%s), portable across GNU/BSD date) just makes each event a
|
|
14
|
+
* distinct value; the client edge-detects on change. Opt out with
|
|
15
|
+
* TMUXES_NO_AUTOHOOK=1. */
|
|
16
|
+
/** Shell snippet (run by the agent's hook) that records an attention event. */
|
|
17
|
+
function attnCmd(reason) {
|
|
18
|
+
return `tmux set-option @tmuxes_attn ${reason}:$(date +%s)`;
|
|
19
|
+
}
|
|
20
|
+
/** Claude Code: file-less inline settings → Stop=done, Notification=decision.
|
|
21
|
+
* JSON.stringify emits only double quotes (our strings have no apostrophes), so
|
|
22
|
+
* the whole thing is safe to wrap in single quotes on the command line. */
|
|
23
|
+
function claudeSettings() {
|
|
24
|
+
return JSON.stringify({
|
|
25
|
+
hooks: {
|
|
26
|
+
Stop: [{ matcher: '', hooks: [{ type: 'command', command: attnCmd('done') }] }],
|
|
27
|
+
Notification: [{ matcher: '', hooks: [{ type: 'command', command: attnCmd('decision') }] }],
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** Codex: notify fires only on agent-turn-complete → "done" (no decision event). */
|
|
32
|
+
function codexNotify() {
|
|
33
|
+
return JSON.stringify(['sh', '-c', attnCmd('done')]);
|
|
34
|
+
}
|
|
35
|
+
function isDisabled() {
|
|
36
|
+
const v = process.env.TMUXES_NO_AUTOHOOK;
|
|
37
|
+
return v === '1' || v === 'true';
|
|
38
|
+
}
|
|
39
|
+
/** lowercase basename without a .exe/.cmd/.bat suffix */
|
|
40
|
+
function baseName(token) {
|
|
41
|
+
return (token.split(/[\\/]/).pop() || '').toLowerCase().replace(/\.(exe|cmd|bat)$/, '');
|
|
42
|
+
}
|
|
43
|
+
/** Splice notification hooks into a recognized agent command; pass others
|
|
44
|
+
* through unchanged. `command` is the literal line tmuxes types into the pane. */
|
|
45
|
+
export function augmentAgentCommand(command) {
|
|
46
|
+
if (isDisabled())
|
|
47
|
+
return command;
|
|
48
|
+
const trimmed = command.trim();
|
|
49
|
+
if (!trimmed)
|
|
50
|
+
return command;
|
|
51
|
+
const m = /^(\S+)(\s+[\s\S]*)?$/.exec(trimmed);
|
|
52
|
+
if (!m)
|
|
53
|
+
return command;
|
|
54
|
+
const prog = m[1];
|
|
55
|
+
const rest = m[2] ?? ''; // includes its leading whitespace
|
|
56
|
+
switch (baseName(prog)) {
|
|
57
|
+
case 'claude':
|
|
58
|
+
return `${prog} --settings '${claudeSettings()}'${rest}`;
|
|
59
|
+
case 'codex':
|
|
60
|
+
return `${prog} -c 'notify=${codexNotify()}'${rest}`;
|
|
61
|
+
default:
|
|
62
|
+
return command;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=agentHooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentHooks.js","sourceRoot":"","sources":["../src/agentHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;4BAc4B;AAI5B,+EAA+E;AAC/E,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,gCAAgC,MAAM,cAAc,CAAC;AAC9D,CAAC;AAED;;4EAE4E;AAC5E,SAAS,cAAc;IACrB,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/E,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;SAC5F;KACF,CAAC,CAAC;AACL,CAAC;AAED,oFAAoF;AACpF,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACzC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC;AACnC,CAAC;AAED,yDAAyD;AACzD,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,IAAI,UAAU,EAAE;QAAE,OAAO,OAAO,CAAC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAE7B,MAAM,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,kCAAkC;IAE3D,QAAQ,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,GAAG,IAAI,gBAAgB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC;QAC3D,KAAK,OAAO;YACV,OAAO,GAAG,IAAI,eAAe,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;QACvD;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,14 @@ function shutdown(signal) {
|
|
|
46
46
|
return;
|
|
47
47
|
shuttingDown = true;
|
|
48
48
|
log.info(`received ${signal}, shutting down`);
|
|
49
|
+
// Restore the console we put into raw mode (Windows Ctrl+C handling).
|
|
50
|
+
try {
|
|
51
|
+
if (process.stdin.isTTY)
|
|
52
|
+
process.stdin.setRawMode(false);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
/* ignore */
|
|
56
|
+
}
|
|
49
57
|
disposeAll();
|
|
50
58
|
winShell.disposeAll();
|
|
51
59
|
server.close(() => process.exit(0));
|
|
@@ -59,11 +67,40 @@ process.on('SIGHUP', () => shutdown('SIGHUP'));
|
|
|
59
67
|
// Windows Ctrl+Break.
|
|
60
68
|
if (process.platform === 'win32')
|
|
61
69
|
process.on('SIGBREAK', () => shutdown('SIGBREAK'));
|
|
62
|
-
// On Windows,
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
// On Windows, node-pty's ConPTY backend breaks the normal CTRL_C_EVENT → SIGINT
|
|
71
|
+
// path for the host process (see microsoft/node-pty#190), so `process.on('SIGINT')`
|
|
72
|
+
// can't be relied on. Instead we read the raw Ctrl+C byte (0x03) straight from the
|
|
73
|
+
// console, set up at startup (before any pty is spawned). This bypasses the signal
|
|
74
|
+
// machinery entirely. Ctrl+Break still works via the SIGBREAK handler above.
|
|
75
|
+
if (process.platform === 'win32') {
|
|
76
|
+
const stdin = process.stdin;
|
|
77
|
+
if (stdin.isTTY) {
|
|
78
|
+
try {
|
|
79
|
+
stdin.setRawMode(true); // deliver keys as bytes; Ctrl+C arrives as 0x03
|
|
80
|
+
stdin.resume();
|
|
81
|
+
stdin.on('data', (buf) => {
|
|
82
|
+
if (buf.includes(0x03))
|
|
83
|
+
shutdown('Ctrl+C');
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Fall back to the readline SIGINT bridge (needs explicit terminal mode).
|
|
88
|
+
readline
|
|
89
|
+
.createInterface({ input: stdin, terminal: true })
|
|
90
|
+
.on('SIGINT', () => shutdown('SIGINT'));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// stdin isn't a console TTY (e.g. piped) — best-effort bridge.
|
|
95
|
+
try {
|
|
96
|
+
readline
|
|
97
|
+
.createInterface({ input: stdin, terminal: true })
|
|
98
|
+
.on('SIGINT', () => shutdown('SIGINT'));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
/* nothing more we can do */
|
|
102
|
+
}
|
|
103
|
+
}
|
|
67
104
|
}
|
|
68
105
|
// If the port is already held (e.g. a previous run is still alive), exit with a
|
|
69
106
|
// clear message instead of an unhandled-error stack trace.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACxC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE3B,4EAA4E;AAC5E,4DAA4D;AAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3G,IAAI,UAAU,EAAE,CAAC;IACf,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,uFAAuF;IACvF,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,EAAE,CAAC;QACvE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AACjC,eAAe,CAAC,MAAM,CAAC,CAAC;AAExB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAC3C,MAAM,GAAG,GAAG,UAAU,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;IACnD,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IACvC,4EAA4E;IAC5E,KAAK,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,iEAAiE;IACjE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;QAAE,WAAW,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,SAAS,QAAQ,CAAC,MAAc;IAC9B,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,iBAAiB,CAAC,CAAC;IAC9C,UAAU,EAAE,CAAC;IACb,QAAQ,CAAC,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,4CAA4C;IAC5C,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AACD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,6EAA6E;AAC7E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/C,sBAAsB;AACtB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;IAAE,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAErF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACxC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE3B,4EAA4E;AAC5E,4DAA4D;AAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3G,IAAI,UAAU,EAAE,CAAC;IACf,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,uFAAuF;IACvF,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,EAAE,CAAC;QACvE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AACjC,eAAe,CAAC,MAAM,CAAC,CAAC;AAExB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAC3C,MAAM,GAAG,GAAG,UAAU,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;IACnD,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IACvC,4EAA4E;IAC5E,KAAK,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,iEAAiE;IACjE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;QAAE,WAAW,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,SAAS,QAAQ,CAAC,MAAc;IAC9B,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,iBAAiB,CAAC,CAAC;IAC9C,sEAAsE;IACtE,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,UAAU,EAAE,CAAC;IACb,QAAQ,CAAC,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,4CAA4C;IAC5C,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AACD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,6EAA6E;AAC7E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/C,sBAAsB;AACtB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;IAAE,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAErF,gFAAgF;AAChF,oFAAoF;AACpF,mFAAmF;AACnF,mFAAmF;AACnF,6EAA6E;AAC7E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,gDAAgD;YACxE,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;gBAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,QAAQ;iBACL,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;iBACjD,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,IAAI,CAAC;YACH,QAAQ;iBACL,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;iBACjD,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,2DAA2D;AAC3D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;IAChD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CACP,QAAQ,MAAM,CAAC,IAAI,iEAAiE;YAClF,6CAA6C,CAChD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/tmux/formats.js
CHANGED
|
@@ -10,7 +10,8 @@ export const SESSION_FORMAT = [
|
|
|
10
10
|
'#{session_windows}',
|
|
11
11
|
'#{session_attached}',
|
|
12
12
|
'#{session_created}',
|
|
13
|
-
'#{session_activity}', // epoch of last activity in any window (idle
|
|
13
|
+
'#{session_activity}', // epoch of last activity in any window (winlocal idle fallback)
|
|
14
|
+
'#{@tmuxes_attn}', // attention event set by an agent hook: "<reason>:<nonce>" (or empty)
|
|
14
15
|
'#{session_name}', // free-form → must be last
|
|
15
16
|
].join(SEP);
|
|
16
17
|
export const WINDOW_FORMAT = [
|
|
@@ -30,7 +31,8 @@ export function parseSessions(stdout) {
|
|
|
30
31
|
attached: Number(parts[1]) > 0,
|
|
31
32
|
created: Number(parts[2]) || 0,
|
|
32
33
|
lastActivity: Number(parts[3]) || 0,
|
|
33
|
-
|
|
34
|
+
attn: parts[4] || '',
|
|
35
|
+
name: parts.slice(5).join(SEP), // name may legitimately contain "|"
|
|
34
36
|
};
|
|
35
37
|
})
|
|
36
38
|
.filter((s) => s.name);
|
package/dist/tmux/formats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/tmux/formats.ts"],"names":[],"mappings":"AAAA;;;;;;2CAM2C;AAE3C,MAAM,GAAG,GAAG,GAAG,CAAC;AAEhB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/tmux/formats.ts"],"names":[],"mappings":"AAAA;;;;;;2CAM2C;AAE3C,MAAM,GAAG,GAAG,GAAG,CAAC;AAEhB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB,EAAE,gEAAgE;IACvF,iBAAiB,EAAE,sEAAsE;IACzF,iBAAiB,EAAE,2BAA2B;CAC/C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB,EAAE,2BAA2B;CAC9C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAyBZ,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9B,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9B,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACnC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YACpB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oCAAoC;SACrE,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,wEAAwE;AACxE,MAAM,QAAQ,GAAG,oDAAoD,CAAC;AAEtE,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/tmux/sessions.js
CHANGED
|
@@ -3,6 +3,7 @@ import { managementArgv, newSessionArgv } from './builder.js';
|
|
|
3
3
|
import { SESSION_FORMAT, WINDOW_FORMAT, parseSessions, parseWindows, isEmptySessionsError, } from './formats.js';
|
|
4
4
|
import { isValidSessionName } from '../validate.js';
|
|
5
5
|
import { classifyTail, lastLines } from '../attention.js';
|
|
6
|
+
import { augmentAgentCommand } from '../agentHooks.js';
|
|
6
7
|
/** A management error carrying the HTTP status the router should return. */
|
|
7
8
|
export class TmuxError extends Error {
|
|
8
9
|
status;
|
|
@@ -58,9 +59,11 @@ export async function createSession(target, opts) {
|
|
|
58
59
|
name = r.stdout.trim();
|
|
59
60
|
}
|
|
60
61
|
if (opts.command && opts.command.length > 0) {
|
|
62
|
+
// Recognized agents get notification hooks spliced in (see agentHooks).
|
|
63
|
+
const cmd = augmentAgentCommand(opts.command);
|
|
61
64
|
// Type the command literally, then press Enter. Two send-keys calls so the
|
|
62
65
|
// command text can never be misparsed as a key name.
|
|
63
|
-
await run(target, ['send-keys', '-t', name, '-l',
|
|
66
|
+
await run(target, ['send-keys', '-t', name, '-l', cmd]);
|
|
64
67
|
await run(target, ['send-keys', '-t', name, 'Enter']);
|
|
65
68
|
}
|
|
66
69
|
return { name };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/tmux/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,oBAAoB,GAGrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAsB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/tmux/sessions.ts"],"names":[],"mappings":"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"}
|