@scotthuang/agent-knock-knock 0.2.5 → 0.2.7
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.7 - 2026-06-25
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Added tmux socket discovery across `/private/tmp/tmux-*` and `/tmp/tmux-*` directories so OpenClaw Gateway environments do not need to infer the interactive terminal user's tmux socket from their own process UID.
|
|
8
|
+
|
|
9
|
+
## 0.2.6 - 2026-06-25
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Added tmux executable path fallback for OpenClaw Gateway environments whose service `PATH` cannot resolve `tmux`, allowing `AKK list` and terminal-control actions to discover and operate tmux panes via common absolute install paths.
|
|
14
|
+
|
|
3
15
|
## 0.2.5 - 2026-06-25
|
|
4
16
|
|
|
5
17
|
### Added
|
|
@@ -32,9 +32,11 @@ export interface CommandResult {
|
|
|
32
32
|
export declare class TmuxTerminalControlProvider implements TerminalControlProvider {
|
|
33
33
|
private readonly runCommand;
|
|
34
34
|
private readonly socketPaths;
|
|
35
|
+
private readonly commands;
|
|
35
36
|
constructor(options?: {
|
|
36
37
|
runCommand?: (command: string, args: string[]) => CommandResult;
|
|
37
38
|
socketPaths?: string[];
|
|
39
|
+
commands?: string[];
|
|
38
40
|
});
|
|
39
41
|
listPanes(): Promise<TerminalPane[]>;
|
|
40
42
|
capture(target: string, options?: {
|
|
@@ -67,3 +69,4 @@ export declare class StaticTerminalControlProvider implements TerminalControlPro
|
|
|
67
69
|
export declare function parseTmuxListPanes(output: string, socketPath?: string): TerminalPane[];
|
|
68
70
|
export declare function enrichActiveProcessesWithTerminalControl(processes: ActiveCodexProcess[], provider: TerminalControlProvider): Promise<ActiveCodexProcess[]>;
|
|
69
71
|
export declare function terminalRefFromPane(pane: TerminalPane): TerminalControlRef;
|
|
72
|
+
export declare function discoverTmuxSocketPaths(root: string): string[];
|
|
@@ -1,62 +1,82 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
2
4
|
export class TmuxTerminalControlProvider {
|
|
3
5
|
runCommand;
|
|
4
6
|
socketPaths;
|
|
7
|
+
commands;
|
|
5
8
|
constructor(options = {}) {
|
|
6
9
|
this.runCommand = options.runCommand ?? runCommand;
|
|
7
10
|
this.socketPaths = options.socketPaths ?? defaultTmuxSocketPaths();
|
|
11
|
+
this.commands = uniqueStrings(options.commands ?? defaultTmuxCommands());
|
|
8
12
|
}
|
|
9
13
|
async listPanes() {
|
|
10
14
|
const panes = [];
|
|
11
15
|
const seenTargets = new Set();
|
|
12
16
|
const attempts = [undefined, ...this.socketPaths];
|
|
13
|
-
for (const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
for (const pane of parseTmuxListPanes(result.stdout, socketPath)) {
|
|
24
|
-
const key = `${pane.socketPath ?? ""}\t${pane.target}\t${pane.panePid}`;
|
|
25
|
-
if (seenTargets.has(key)) {
|
|
17
|
+
for (const command of this.commands) {
|
|
18
|
+
for (const socketPath of attempts) {
|
|
19
|
+
const result = this.runCommand(command, tmuxArgs(socketPath, [
|
|
20
|
+
"list-panes",
|
|
21
|
+
"-a",
|
|
22
|
+
"-F",
|
|
23
|
+
"#{session_name}\t#{window_index}\t#{pane_index}\t#{pane_pid}\t#{pane_current_command}\t#{pane_current_path}"
|
|
24
|
+
]));
|
|
25
|
+
if (result.status !== 0) {
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
for (const pane of parseTmuxListPanes(result.stdout, socketPath)) {
|
|
29
|
+
const key = `${pane.socketPath ?? ""}\t${pane.target}\t${pane.panePid}`;
|
|
30
|
+
if (seenTargets.has(key)) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
seenTargets.add(key);
|
|
34
|
+
panes.push(pane);
|
|
35
|
+
}
|
|
30
36
|
}
|
|
31
37
|
}
|
|
32
38
|
return panes;
|
|
33
39
|
}
|
|
34
40
|
async capture(target, options = {}) {
|
|
35
41
|
const scrollbackLines = Math.max(0, Math.floor(options.scrollbackLines ?? 200));
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
let lastResult;
|
|
43
|
+
for (const command of this.commands) {
|
|
44
|
+
const result = this.runCommand(command, tmuxArgs(options.socketPath, [
|
|
45
|
+
"capture-pane",
|
|
46
|
+
"-t",
|
|
47
|
+
target,
|
|
48
|
+
"-p",
|
|
49
|
+
"-S",
|
|
50
|
+
`-${scrollbackLines}`
|
|
51
|
+
]));
|
|
52
|
+
if (result.status === 0) {
|
|
53
|
+
return result.stdout;
|
|
54
|
+
}
|
|
55
|
+
lastResult = result;
|
|
46
56
|
}
|
|
47
|
-
|
|
57
|
+
throw new Error(lastResult?.stderr || lastResult?.error?.message || `tmux capture-pane failed for ${target}`);
|
|
48
58
|
}
|
|
49
59
|
async sendKeys(target, keys, options = {}) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
let lastResult;
|
|
61
|
+
for (const command of this.commands) {
|
|
62
|
+
const result = this.runCommand(command, tmuxArgs(options.socketPath, ["send-keys", "-t", target, ...keys]));
|
|
63
|
+
if (result.status === 0) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
lastResult = result;
|
|
53
67
|
}
|
|
68
|
+
throw new Error(lastResult?.stderr || lastResult?.error?.message || `tmux send-keys failed for ${target}`);
|
|
54
69
|
}
|
|
55
70
|
async sendText(target, text, options = {}) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
71
|
+
let lastResult;
|
|
72
|
+
for (const command of this.commands) {
|
|
73
|
+
const result = this.runCommand(command, tmuxArgs(options.socketPath, ["send-keys", "-t", target, "-l", text]));
|
|
74
|
+
if (result.status === 0) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
lastResult = result;
|
|
59
78
|
}
|
|
79
|
+
throw new Error(lastResult?.stderr || lastResult?.error?.message || `tmux send-keys failed for ${target}`);
|
|
60
80
|
}
|
|
61
81
|
}
|
|
62
82
|
export class StaticTerminalControlProvider {
|
|
@@ -176,10 +196,34 @@ function defaultTmuxSocketPaths() {
|
|
|
176
196
|
process.env.AKK_TMUX_SOCKET,
|
|
177
197
|
tmuxSocketFromEnvironment(process.env.TMUX),
|
|
178
198
|
uidSocketPath("/private/tmp"),
|
|
179
|
-
uidSocketPath("/tmp")
|
|
199
|
+
uidSocketPath("/tmp"),
|
|
200
|
+
...discoverTmuxSocketPaths("/private/tmp"),
|
|
201
|
+
...discoverTmuxSocketPaths("/tmp")
|
|
180
202
|
].filter((value) => Boolean(value));
|
|
181
203
|
return [...new Set(paths)];
|
|
182
204
|
}
|
|
205
|
+
export function discoverTmuxSocketPaths(root) {
|
|
206
|
+
try {
|
|
207
|
+
return fs.readdirSync(root, { withFileTypes: true })
|
|
208
|
+
.filter((entry) => entry.isDirectory() && entry.name.startsWith("tmux-"))
|
|
209
|
+
.map((entry) => path.join(root, entry.name, "default"))
|
|
210
|
+
.filter((socketPath) => fs.existsSync(socketPath));
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return [];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function defaultTmuxCommands() {
|
|
217
|
+
return [
|
|
218
|
+
"tmux",
|
|
219
|
+
"/opt/homebrew/bin/tmux",
|
|
220
|
+
"/usr/local/bin/tmux",
|
|
221
|
+
"/usr/bin/tmux"
|
|
222
|
+
];
|
|
223
|
+
}
|
|
224
|
+
function uniqueStrings(values) {
|
|
225
|
+
return [...new Set(values.filter(Boolean))];
|
|
226
|
+
}
|
|
183
227
|
function tmuxSocketFromEnvironment(value) {
|
|
184
228
|
return value?.split(",")[0] || undefined;
|
|
185
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-control-provider.js","sourceRoot":"","sources":["../../src/terminal-control-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal-control-provider.js","sourceRoot":"","sources":["../../src/terminal-control-provider.ts"],"names":[],"mappings":"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"}
|