botmux 2.24.1 → 2.24.2
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.
|
@@ -10,6 +10,41 @@ export interface AdoptableSession {
|
|
|
10
10
|
paneCols: number;
|
|
11
11
|
paneRows: number;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* 读取进程的 comm 名(不含路径)。Linux 走 /proc/<pid>/comm 快路径;
|
|
15
|
+
* macOS / 其它 Unix 走 `ps -o comm=` 兜底。
|
|
16
|
+
*
|
|
17
|
+
* 注意 macOS 的 `ps -o comm=` 返回完整可执行路径(如 `/usr/local/bin/claude`),
|
|
18
|
+
* 所以这里统一做一次 basename,让上层匹配 CLI_COMM_MAP 的逻辑保持不变。
|
|
19
|
+
*
|
|
20
|
+
* 返回 undefined 表示进程不存在或读不到。
|
|
21
|
+
*/
|
|
22
|
+
declare function readComm(pid: number): string | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* 读取进程的工作目录。Linux 走 /proc/<pid>/cwd 软链;
|
|
25
|
+
* macOS / 其它 Unix 走 `lsof -a -d cwd -p <pid> -Fn` 兜底。
|
|
26
|
+
*
|
|
27
|
+
* lsof -Fn 的输出格式:
|
|
28
|
+
* p<pid>
|
|
29
|
+
* fcwd
|
|
30
|
+
* n<path>
|
|
31
|
+
* 这里只解析以 n 开头的那一行。
|
|
32
|
+
*
|
|
33
|
+
* 返回 undefined 表示读不到。
|
|
34
|
+
*/
|
|
35
|
+
declare function readCwd(pid: number): string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* 获取一个进程的直接子进程 PID。
|
|
38
|
+
*
|
|
39
|
+
* 既不能用 GNU `ps --ppid`(BSD ps 不支持长选项),也不能用 `pgrep -P`
|
|
40
|
+
* (macOS BSD pgrep 把 `-P` 当过滤器,要求**必须**搭配一个 pattern 位置参数,
|
|
41
|
+
* 不传 pattern 返回空)。
|
|
42
|
+
*
|
|
43
|
+
* 改成一次 `ps -A -o pid= -o ppid=` 把全表拿回来 JS 端过滤 —— 两个平台
|
|
44
|
+
* 的 ps 都接受这个写法。fork-exec 一次代价可接受,因为 discovery 本身是
|
|
45
|
+
* 低频操作(只在用户 /adopt 时跑一遍)。
|
|
46
|
+
*/
|
|
47
|
+
declare function getChildPids(pid: number): number[];
|
|
13
48
|
/**
|
|
14
49
|
* Scan all tmux panes for running CLI processes that can be adopted by Botmux.
|
|
15
50
|
*
|
|
@@ -25,4 +60,8 @@ export declare function discoverAdoptableSessions(filterCliId?: CliId): Adoptabl
|
|
|
25
60
|
* Used to validate an adopt target right before the actual adoption.
|
|
26
61
|
*/
|
|
27
62
|
export declare function validateAdoptTarget(tmuxTarget: string, expectedPid: number): boolean;
|
|
63
|
+
export declare const __testOnly_readComm: typeof readComm;
|
|
64
|
+
export declare const __testOnly_readCwd: typeof readCwd;
|
|
65
|
+
export declare const __testOnly_getChildPids: typeof getChildPids;
|
|
66
|
+
export {};
|
|
28
67
|
//# sourceMappingURL=session-discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-discovery.d.ts","sourceRoot":"","sources":["../../src/core/session-discovery.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"session-discovery.d.ts","sourceRoot":"","sources":["../../src/core/session-discovery.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAUtD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAoBD;;;;;;;;GAQG;AACH,iBAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBjD;AAED;;;;;;;;;;;GAWG;AACH,iBAAS,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBhD;AAED;;;;;;;;;;GAUG;AACH,iBAAS,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAsB3C;AAuED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG,gBAAgB,EAAE,CAoFjF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAiBpF;AAID,eAAO,MAAM,mBAAmB,iBAAW,CAAC;AAC5C,eAAO,MAAM,kBAAkB,gBAAU,CAAC;AAC1C,eAAO,MAAM,uBAAuB,qBAAe,CAAC"}
|
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { execSync } from 'node:child_process';
|
|
8
8
|
import { readFileSync, readlinkSync } from 'node:fs';
|
|
9
|
-
import { homedir } from 'node:os';
|
|
10
|
-
import { join } from 'node:path';
|
|
9
|
+
import { homedir, platform } from 'node:os';
|
|
10
|
+
import { basename, join } from 'node:path';
|
|
11
11
|
import { findCodexRolloutByPid } from '../services/codex-transcript.js';
|
|
12
12
|
import { findCocoSessionByPid } from '../services/coco-transcript.js';
|
|
13
13
|
import { tmuxEnv } from '../setup/ensure-tmux.js';
|
|
14
|
+
// macOS 没有 /proc,所以走 ps/lsof/pgrep 兜底。Linux 仍优先走 /proc 快路径。
|
|
15
|
+
const IS_LINUX = platform() === 'linux';
|
|
14
16
|
// ─── CLI process name → CliId mapping ────────────────────────────────────────
|
|
15
17
|
const CLI_COMM_MAP = {
|
|
16
18
|
claude: 'claude-code',
|
|
@@ -26,39 +28,104 @@ function shellescape(s) {
|
|
|
26
28
|
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
+
* 读取进程的 comm 名(不含路径)。Linux 走 /proc/<pid>/comm 快路径;
|
|
32
|
+
* macOS / 其它 Unix 走 `ps -o comm=` 兜底。
|
|
33
|
+
*
|
|
34
|
+
* 注意 macOS 的 `ps -o comm=` 返回完整可执行路径(如 `/usr/local/bin/claude`),
|
|
35
|
+
* 所以这里统一做一次 basename,让上层匹配 CLI_COMM_MAP 的逻辑保持不变。
|
|
36
|
+
*
|
|
37
|
+
* 返回 undefined 表示进程不存在或读不到。
|
|
31
38
|
*/
|
|
32
39
|
function readComm(pid) {
|
|
40
|
+
if (IS_LINUX) {
|
|
41
|
+
try {
|
|
42
|
+
return readFileSync(`/proc/${pid}/comm`, 'utf-8').trim();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// 落到下面的 ps 兜底
|
|
46
|
+
}
|
|
47
|
+
}
|
|
33
48
|
try {
|
|
34
|
-
|
|
49
|
+
const out = execSync(`ps -o comm= -p ${pid}`, {
|
|
50
|
+
encoding: 'utf-8',
|
|
51
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
52
|
+
}).trim();
|
|
53
|
+
if (!out)
|
|
54
|
+
return undefined;
|
|
55
|
+
return out.includes('/') ? basename(out) : out;
|
|
35
56
|
}
|
|
36
57
|
catch {
|
|
37
58
|
return undefined;
|
|
38
59
|
}
|
|
39
60
|
}
|
|
40
61
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
62
|
+
* 读取进程的工作目录。Linux 走 /proc/<pid>/cwd 软链;
|
|
63
|
+
* macOS / 其它 Unix 走 `lsof -a -d cwd -p <pid> -Fn` 兜底。
|
|
64
|
+
*
|
|
65
|
+
* lsof -Fn 的输出格式:
|
|
66
|
+
* p<pid>
|
|
67
|
+
* fcwd
|
|
68
|
+
* n<path>
|
|
69
|
+
* 这里只解析以 n 开头的那一行。
|
|
70
|
+
*
|
|
71
|
+
* 返回 undefined 表示读不到。
|
|
43
72
|
*/
|
|
44
73
|
function readCwd(pid) {
|
|
74
|
+
if (IS_LINUX) {
|
|
75
|
+
try {
|
|
76
|
+
return readlinkSync(`/proc/${pid}/cwd`);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// 落到下面的 lsof 兜底
|
|
80
|
+
}
|
|
81
|
+
}
|
|
45
82
|
try {
|
|
46
|
-
|
|
83
|
+
const out = execSync(`lsof -a -d cwd -p ${pid} -Fn`, {
|
|
84
|
+
encoding: 'utf-8',
|
|
85
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
86
|
+
});
|
|
87
|
+
for (const line of out.split('\n')) {
|
|
88
|
+
if (line.startsWith('n'))
|
|
89
|
+
return line.slice(1);
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
47
92
|
}
|
|
48
93
|
catch {
|
|
49
94
|
return undefined;
|
|
50
95
|
}
|
|
51
96
|
}
|
|
52
|
-
/**
|
|
97
|
+
/**
|
|
98
|
+
* 获取一个进程的直接子进程 PID。
|
|
99
|
+
*
|
|
100
|
+
* 既不能用 GNU `ps --ppid`(BSD ps 不支持长选项),也不能用 `pgrep -P`
|
|
101
|
+
* (macOS BSD pgrep 把 `-P` 当过滤器,要求**必须**搭配一个 pattern 位置参数,
|
|
102
|
+
* 不传 pattern 返回空)。
|
|
103
|
+
*
|
|
104
|
+
* 改成一次 `ps -A -o pid= -o ppid=` 把全表拿回来 JS 端过滤 —— 两个平台
|
|
105
|
+
* 的 ps 都接受这个写法。fork-exec 一次代价可接受,因为 discovery 本身是
|
|
106
|
+
* 低频操作(只在用户 /adopt 时跑一遍)。
|
|
107
|
+
*/
|
|
53
108
|
function getChildPids(pid) {
|
|
54
109
|
try {
|
|
55
|
-
const out = execSync(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
110
|
+
const out = execSync('ps -A -o pid= -o ppid=', {
|
|
111
|
+
encoding: 'utf-8',
|
|
112
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
113
|
+
});
|
|
114
|
+
const children = [];
|
|
115
|
+
for (const line of out.split('\n')) {
|
|
116
|
+
const trimmed = line.trim();
|
|
117
|
+
if (!trimmed)
|
|
118
|
+
continue;
|
|
119
|
+
const parts = trimmed.split(/\s+/);
|
|
120
|
+
if (parts.length < 2)
|
|
121
|
+
continue;
|
|
122
|
+
const childPid = Number(parts[0]);
|
|
123
|
+
const parentPid = Number(parts[1]);
|
|
124
|
+
if (!isNaN(childPid) && !isNaN(parentPid) && parentPid === pid) {
|
|
125
|
+
children.push(childPid);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return children;
|
|
62
129
|
}
|
|
63
130
|
catch {
|
|
64
131
|
return [];
|
|
@@ -163,7 +230,7 @@ export function discoverAdoptableSessions(filterCliId) {
|
|
|
163
230
|
// 3b. Filter by CLI type if requested
|
|
164
231
|
if (filterCliId && match.cliId !== filterCliId)
|
|
165
232
|
continue;
|
|
166
|
-
// 4. Read CLI working directory
|
|
233
|
+
// 4. Read CLI working directory (Linux: /proc; macOS: lsof)
|
|
167
234
|
const cwd = readCwd(match.pid);
|
|
168
235
|
if (!cwd)
|
|
169
236
|
continue;
|
|
@@ -233,4 +300,9 @@ export function validateAdoptTarget(tmuxTarget, expectedPid) {
|
|
|
233
300
|
const match = findCliProcess(panePid, 3);
|
|
234
301
|
return match !== undefined && match.pid === expectedPid;
|
|
235
302
|
}
|
|
303
|
+
// 仅供单测使用 —— 暴露内部 helper,方便覆盖跨平台 (Linux /proc vs macOS ps/lsof/pgrep)
|
|
304
|
+
// 的回归路径。生产代码不要直接消费这些导出。
|
|
305
|
+
export const __testOnly_readComm = readComm;
|
|
306
|
+
export const __testOnly_readCwd = readCwd;
|
|
307
|
+
export const __testOnly_getChildPids = getChildPids;
|
|
236
308
|
//# sourceMappingURL=session-discovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-discovery.js","sourceRoot":"","sources":["../../src/core/session-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"session-discovery.js","sourceRoot":"","sources":["../../src/core/session-discovery.ts"],"names":[],"mappings":"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"}
|