fix(tmux): hide web terminal proxy sessions
This commit is contained in:
@@ -3,6 +3,7 @@ import { basename } from 'node:path';
|
|||||||
import { runProcess } from '../process.js';
|
import { runProcess } from '../process.js';
|
||||||
|
|
||||||
const PANE_FORMAT = '#{session_name}\t#{window_index}\t#{window_name}\t#{pane_id}\t#{pane_current_command}\t#{pane_current_path}';
|
const PANE_FORMAT = '#{session_name}\t#{window_index}\t#{window_name}\t#{pane_id}\t#{pane_current_command}\t#{pane_current_path}';
|
||||||
|
const WEB_TERMINAL_SESSION_PATTERN = /^web-\d+-\d+$/;
|
||||||
|
|
||||||
const ENGINE_BY_COMMAND = {
|
const ENGINE_BY_COMMAND = {
|
||||||
claude: 'claude',
|
claude: 'claude',
|
||||||
@@ -21,7 +22,9 @@ export function parseTmuxPanes(output) {
|
|||||||
.map((line) => {
|
.map((line) => {
|
||||||
const [session, windowIndex, windowName, paneId, command, cwd] = line.split('\t');
|
const [session, windowIndex, windowName, paneId, command, cwd] = line.split('\t');
|
||||||
const engine = ENGINE_BY_COMMAND[command];
|
const engine = ENGINE_BY_COMMAND[command];
|
||||||
if (!engine || !paneId) return null;
|
// Web terminal sessions only link an existing pane into a temporary view.
|
||||||
|
// They are not additional agents and must not be enumerated in Live Agents.
|
||||||
|
if (!engine || !paneId || WEB_TERMINAL_SESSION_PATTERN.test(session)) return null;
|
||||||
return { engine, session, windowIndex: Number(windowIndex), windowName, paneId, cwd };
|
return { engine, session, windowIndex: Number(windowIndex), windowName, paneId, cwd };
|
||||||
})
|
})
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|||||||
@@ -36,6 +36,33 @@ test('parseTmuxPanes drops unrelated commands', () => {
|
|||||||
assert.deepEqual(parseTmuxPanes(output), []);
|
assert.deepEqual(parseTmuxPanes(output), []);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('parseTmuxPanes hides temporary web terminal sessions', () => {
|
||||||
|
const output = [
|
||||||
|
'main\t1\tcodex:kanban\t%5\tnode\t/home/gahow/projects/kanban',
|
||||||
|
'web-1234-5678\t1\tcodex:kanban\t%5\tnode\t/home/gahow/projects/kanban',
|
||||||
|
'web-development\t2\tcodex:web\t%6\tnode\t/home/gahow/projects/web'
|
||||||
|
].join('\n');
|
||||||
|
|
||||||
|
assert.deepEqual(parseTmuxPanes(output), [
|
||||||
|
{
|
||||||
|
engine: 'codex',
|
||||||
|
session: 'main',
|
||||||
|
windowIndex: 1,
|
||||||
|
windowName: 'codex:kanban',
|
||||||
|
paneId: '%5',
|
||||||
|
cwd: '/home/gahow/projects/kanban'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
engine: 'codex',
|
||||||
|
session: 'web-development',
|
||||||
|
windowIndex: 2,
|
||||||
|
windowName: 'codex:web',
|
||||||
|
paneId: '%6',
|
||||||
|
cwd: '/home/gahow/projects/web'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
test('parseTmuxPanes handles empty output', () => {
|
test('parseTmuxPanes handles empty output', () => {
|
||||||
assert.deepEqual(parseTmuxPanes(''), []);
|
assert.deepEqual(parseTmuxPanes(''), []);
|
||||||
assert.deepEqual(parseTmuxPanes(null), []);
|
assert.deepEqual(parseTmuxPanes(null), []);
|
||||||
|
|||||||
Reference in New Issue
Block a user