@kkweon/agent-orchestrator-mcp 1.1.8 → 1.1.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/agent-manager.js +24 -9
- package/dist/agent-manager.js.map +1 -1
- package/dist/tmux.js +60 -4
- package/dist/tmux.js.map +1 -1
- package/package.json +2 -2
package/dist/agent-manager.js
CHANGED
|
@@ -13,7 +13,8 @@ export class AgentManager {
|
|
|
13
13
|
sessionId; // Expose sessionId for tests
|
|
14
14
|
constructor(workspaceRoot = process.cwd()) {
|
|
15
15
|
this.workspaceRoot = workspaceRoot;
|
|
16
|
-
|
|
16
|
+
// Check env var first (Sub-agent mode), else generate (Master mode)
|
|
17
|
+
this.sessionId = process.env.AGENT_SESSION_ID || randomUUID();
|
|
17
18
|
}
|
|
18
19
|
getSessionDir() {
|
|
19
20
|
return path.join(this.workspaceRoot, AGENTS_DIR, "sessions", this.sessionId);
|
|
@@ -35,8 +36,15 @@ export class AgentManager {
|
|
|
35
36
|
await fs.writeFile(path.join(agentDir, "outbox.jsonl"), "");
|
|
36
37
|
let context = await tmux.getCurrentTmuxContext();
|
|
37
38
|
if (!context) {
|
|
39
|
+
// Not inside tmux? Check if our dedicated session exists.
|
|
38
40
|
try {
|
|
39
|
-
|
|
41
|
+
const existing = await tmux.getSessionContext("openclaw-agents");
|
|
42
|
+
if (existing) {
|
|
43
|
+
context = existing;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
context = await tmux.createTmuxSession("openclaw-agents");
|
|
47
|
+
}
|
|
40
48
|
}
|
|
41
49
|
catch (e) {
|
|
42
50
|
console.error("Warning: Could not determine tmux context", e);
|
|
@@ -57,8 +65,8 @@ export class AgentManager {
|
|
|
57
65
|
};
|
|
58
66
|
await fs.writeFile(path.join(agentDir, "meta.json"), JSON.stringify(agent, null, 2));
|
|
59
67
|
// 1. Prepare Environment
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
// We pass AGENT_ID and AGENT_SESSION_ID inline with the command execution
|
|
69
|
+
// to guarantee they are set correctly without relying on separate export commands.
|
|
62
70
|
// 2. Launch Gemini CLI (or Mock)
|
|
63
71
|
// Model preference: params > env > default
|
|
64
72
|
const model = params.model || process.env.GEMINI_MODEL || "auto";
|
|
@@ -95,7 +103,8 @@ Start your loop now.
|
|
|
95
103
|
cmd = `${executable} -m ${model} ${argsStr} "$(cat '${inceptionPath}')"`;
|
|
96
104
|
}
|
|
97
105
|
// We assume 'gemini' is in the PATH.
|
|
98
|
-
|
|
106
|
+
const fullCmd = `AGENT_ID=${id} AGENT_SESSION_ID=${this.sessionId} ${cmd}`;
|
|
107
|
+
await tmux.sendKeys(pane.paneId, fullCmd);
|
|
99
108
|
return agent;
|
|
100
109
|
}
|
|
101
110
|
async listAgents() {
|
|
@@ -105,30 +114,36 @@ Start your loop now.
|
|
|
105
114
|
const dirs = await fs.readdir(agentsDir);
|
|
106
115
|
const agents = [];
|
|
107
116
|
for (const dir of dirs) {
|
|
117
|
+
const metaPath = path.join(agentsDir, dir, "meta.json");
|
|
108
118
|
try {
|
|
109
|
-
|
|
119
|
+
await fs.access(metaPath);
|
|
120
|
+
const meta = JSON.parse(await fs.readFile(metaPath, "utf-8"));
|
|
110
121
|
agents.push(meta);
|
|
111
122
|
}
|
|
112
123
|
catch (e) {
|
|
113
|
-
//
|
|
124
|
+
// Skip directories that don't have meta.json yet or are corrupted
|
|
125
|
+
console.warn(`Skipping agent directory ${dir}: meta.json not found or invalid`);
|
|
114
126
|
}
|
|
115
127
|
}
|
|
116
128
|
return agents;
|
|
117
129
|
}
|
|
118
130
|
catch (e) {
|
|
131
|
+
console.error("Failed to list agents:", e);
|
|
119
132
|
return [];
|
|
120
133
|
}
|
|
121
134
|
}
|
|
122
135
|
async deleteAgent(id) {
|
|
123
136
|
const agentDir = this.getAgentDir(id);
|
|
137
|
+
const metaPath = path.join(agentDir, "meta.json");
|
|
124
138
|
try {
|
|
125
|
-
|
|
139
|
+
await fs.access(metaPath);
|
|
140
|
+
const meta = JSON.parse(await fs.readFile(metaPath, "utf-8"));
|
|
126
141
|
const parts = meta.tmuxPaneId.split(":");
|
|
127
142
|
const paneId = parts[2] || parts[0];
|
|
128
143
|
await tmux.killPane(paneId);
|
|
129
144
|
}
|
|
130
145
|
catch (e) {
|
|
131
|
-
|
|
146
|
+
console.warn(`Could not delete agent ${id} cleanly (meta.json missing or corrupted).`);
|
|
132
147
|
}
|
|
133
148
|
}
|
|
134
149
|
async enqueueTask(agentId, taskPayload) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-manager.js","sourceRoot":"","sources":["../src/agent-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,kCAAkC;AAClC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,+BAA+B;AAC/B,MAAM,UAAU,GAAG,SAAS,CAAC;AAE7B,MAAM,OAAO,YAAY;IACf,aAAa,CAAS;IACvB,SAAS,CAAS,CAAC,6BAA6B;IAEvD,YAAY,gBAAwB,OAAO,CAAC,GAAG,EAAE;QAC/C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-manager.js","sourceRoot":"","sources":["../src/agent-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/tmux.js
CHANGED
|
@@ -12,14 +12,59 @@ export async function getCurrentTmuxContext() {
|
|
|
12
12
|
return null; // Not inside tmux
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
+
export async function hasSession(sessionName) {
|
|
16
|
+
try {
|
|
17
|
+
await execAsync(`tmux has-session -t ${sessionName}`);
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
15
24
|
export async function createTmuxSession(sessionName) {
|
|
16
25
|
// Use -d to create detached session.
|
|
17
26
|
// IMPORTANT: Set a large size explicitly to avoid "no space for new pane" errors in CI environments.
|
|
18
27
|
// 80x24 is too small for splitting. Use 800x600.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
try {
|
|
29
|
+
await execAsync(`tmux new-session -d -s ${sessionName} -x 800 -y 600`);
|
|
30
|
+
// Give the server a moment to initialize in CI
|
|
31
|
+
await new Promise(r => setTimeout(r, 200));
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
const msg = e.message || "";
|
|
35
|
+
const stderr = e.stderr || "";
|
|
36
|
+
if (!msg.includes("duplicate session") && !stderr.includes("duplicate session")) {
|
|
37
|
+
throw e;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Retry display-message a few times if it fails with "no server running"
|
|
41
|
+
let lastError;
|
|
42
|
+
for (let i = 0; i < 3; i++) {
|
|
43
|
+
try {
|
|
44
|
+
const { stdout } = await execAsync(`tmux display-message -t ${sessionName} -p '#{session_id}:#{window_id}:#{pane_id}'`);
|
|
45
|
+
const [sessionId, windowId, paneId] = stdout.trim().split(":");
|
|
46
|
+
return { sessionId, windowId, paneId };
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
lastError = e;
|
|
50
|
+
if (e.message.includes("no server running")) {
|
|
51
|
+
await new Promise(r => setTimeout(r, 500));
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
throw e;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
throw lastError;
|
|
58
|
+
}
|
|
59
|
+
export async function getSessionContext(sessionName) {
|
|
60
|
+
try {
|
|
61
|
+
const { stdout } = await execAsync(`tmux display-message -t ${sessionName} -p '#{session_id}:#{window_id}:#{pane_id}'`);
|
|
62
|
+
const [sessionId, windowId, paneId] = stdout.trim().split(":");
|
|
63
|
+
return { sessionId, windowId, paneId };
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
23
68
|
}
|
|
24
69
|
export async function splitPane(targetPaneId, direction = "horizontal", cwd) {
|
|
25
70
|
const flag = direction === "horizontal" ? "-h" : "-v";
|
|
@@ -35,7 +80,10 @@ export async function sendKeys(paneId, keys) {
|
|
|
35
80
|
// Use single quotes to prevent the host shell from expanding variables (like $ or *)
|
|
36
81
|
// We must escape existing single quotes in the command.
|
|
37
82
|
const safeKeys = keys.replace(/'/g, "'\\''");
|
|
83
|
+
// Add a small delay to ensure the shell prompt is ready.
|
|
84
|
+
// This can help in environments where shell startup is slow.
|
|
38
85
|
await execAsync(`tmux send-keys -t ${paneId} '${safeKeys}' Enter`);
|
|
86
|
+
await new Promise(r => setTimeout(r, 100)); // 100ms delay
|
|
39
87
|
}
|
|
40
88
|
export async function capturePane(paneId, lines = 100) {
|
|
41
89
|
const { stdout } = await execAsync(`tmux capture-pane -p -t ${paneId} -S -${lines}`);
|
|
@@ -44,4 +92,12 @@ export async function capturePane(paneId, lines = 100) {
|
|
|
44
92
|
export async function killPane(paneId) {
|
|
45
93
|
await execAsync(`tmux kill-pane -t ${paneId}`);
|
|
46
94
|
}
|
|
95
|
+
export async function killSession(sessionName) {
|
|
96
|
+
try {
|
|
97
|
+
await execAsync(`tmux kill-session -t ${sessionName}`);
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
// ignore if session doesn't exist
|
|
101
|
+
}
|
|
102
|
+
}
|
|
47
103
|
//# sourceMappingURL=tmux.js.map
|
package/dist/tmux.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux.js","sourceRoot":"","sources":["../src/tmux.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAQlC,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,iEAAiE,CAAC,CAAC;QACtG,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,CAAC,kBAAkB;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,qCAAqC;IACrC,qGAAqG;IACrG,iDAAiD;IACjD,MAAM,SAAS,CAAC,0BAA0B,WAAW,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tmux.js","sourceRoot":"","sources":["../src/tmux.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAQlC,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,iEAAiE,CAAC,CAAC;QACtG,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,CAAC,kBAAkB;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB;IAClD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,qCAAqC;IACrC,qGAAqG;IACrG,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,0BAA0B,WAAW,gBAAgB,CAAC,CAAC;QACvE,+CAA+C;QAC/C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC9E,MAAM,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,IAAI,SAAc,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2BAA2B,WAAW,6CAA6C,CAAC,CAAC;YACxH,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,SAAS,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC3C,SAAS;YACX,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IACD,MAAM,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2BAA2B,WAAW,6CAA6C,CAAC,CAAC;QACxH,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,YAAoB,EAAE,YAAuC,YAAY,EAAE,GAAY;IACrH,MAAM,IAAI,GAAG,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,oDAAoD;IACpD,6GAA6G;IAC7G,iFAAiF;IAEjF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,wBAAwB,IAAI,OAAO,YAAY,IAAI,MAAM,gDAAgD,CAAC,CAAC;IAC9I,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,IAAY;IACzD,qFAAqF;IACrF,wDAAwD;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,yDAAyD;IACzD,6DAA6D;IAC7D,MAAM,SAAS,CAAC,qBAAqB,MAAM,KAAK,QAAQ,SAAS,CAAC,CAAC;IACnE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,KAAK,GAAG,GAAG;IAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2BAA2B,MAAM,QAAQ,KAAK,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc;IAC3C,MAAM,SAAS,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB;IACnD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,kCAAkC;IACpC,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kkweon/agent-orchestrator-mcp",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.10",
|
|
4
4
|
"description": "Agent Orchestrator MCP Server for tmux-based sub-agents",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"build": "tsc && chmod +x dist/index.js",
|
|
25
25
|
"start": "node dist/index.js",
|
|
26
26
|
"dev": "ts-node src/index.ts",
|
|
27
|
-
"test": "NODE_OPTIONS='--experimental-vm-modules' jest",
|
|
27
|
+
"test": "NODE_OPTIONS='--experimental-vm-modules' jest --runInBand",
|
|
28
28
|
"prepare": "npm run build",
|
|
29
29
|
"prepublishOnly": "npm run build"
|
|
30
30
|
},
|