poke-gate 0.0.1 → 0.0.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.
- package/package.json +1 -1
- package/src/app.js +4 -1
- package/src/mcp-server.js +47 -13
package/package.json
CHANGED
package/src/app.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { startMcpServer } from "./mcp-server.js";
|
|
1
|
+
import { startMcpServer, enableLogging } from "./mcp-server.js";
|
|
2
2
|
import { startTunnel } from "./tunnel.js";
|
|
3
3
|
import { readFileSync } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { homedir } from "node:os";
|
|
6
6
|
|
|
7
|
+
const verbose = process.argv.includes("--verbose") || process.argv.includes("-v");
|
|
8
|
+
enableLogging(verbose);
|
|
9
|
+
|
|
7
10
|
function resolveToken() {
|
|
8
11
|
if (process.env.POKE_API_KEY) return process.env.POKE_API_KEY;
|
|
9
12
|
|
package/src/mcp-server.js
CHANGED
|
@@ -8,6 +8,23 @@ const SERVER_INFO = { name: "poke-gate", version: "0.0.1" };
|
|
|
8
8
|
|
|
9
9
|
const COMMAND_TIMEOUT = 30_000;
|
|
10
10
|
|
|
11
|
+
let logEnabled = false;
|
|
12
|
+
|
|
13
|
+
export function enableLogging(enabled) {
|
|
14
|
+
logEnabled = enabled;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function logTool(name, args, result) {
|
|
18
|
+
if (!logEnabled) return;
|
|
19
|
+
const ts = new Date().toISOString().slice(11, 19);
|
|
20
|
+
console.log(`[${ts}] tool: ${name}`);
|
|
21
|
+
if (name === "run_command") console.log(`[${ts}] $ ${args.command}${args.cwd ? ` (in ${args.cwd})` : ""}`);
|
|
22
|
+
else if (name === "read_file") console.log(`[${ts}] read: ${args.path}`);
|
|
23
|
+
else if (name === "write_file") console.log(`[${ts}] write: ${args.path}`);
|
|
24
|
+
else if (name === "list_directory") console.log(`[${ts}] ls: ${args.path || "~"}`);
|
|
25
|
+
if (result?.isError) console.log(`[${ts}] error`);
|
|
26
|
+
}
|
|
27
|
+
|
|
11
28
|
const TOOLS = [
|
|
12
29
|
{
|
|
13
30
|
name: "run_command",
|
|
@@ -85,18 +102,26 @@ function runCommand(command, cwd) {
|
|
|
85
102
|
function handleToolCall(name, args) {
|
|
86
103
|
switch (name) {
|
|
87
104
|
case "run_command": {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
105
|
+
logTool(name, args);
|
|
106
|
+
return runCommand(args.command, args.cwd).then((result) => {
|
|
107
|
+
const r = { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
108
|
+
if (result.exitCode !== 0) r.isError = true;
|
|
109
|
+
logTool(name, args, r);
|
|
110
|
+
return r;
|
|
111
|
+
});
|
|
91
112
|
}
|
|
92
113
|
|
|
93
114
|
case "read_file": {
|
|
94
115
|
try {
|
|
95
116
|
const p = resolve(args.path.replace(/^~/, homedir()));
|
|
96
117
|
const text = readFileSync(p, "utf-8");
|
|
97
|
-
|
|
118
|
+
const r = { content: [{ type: "text", text: text.slice(0, 100_000) }] };
|
|
119
|
+
logTool(name, args, r);
|
|
120
|
+
return r;
|
|
98
121
|
} catch (err) {
|
|
99
|
-
|
|
122
|
+
const r = { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
123
|
+
logTool(name, args, r);
|
|
124
|
+
return r;
|
|
100
125
|
}
|
|
101
126
|
}
|
|
102
127
|
|
|
@@ -104,26 +129,34 @@ function handleToolCall(name, args) {
|
|
|
104
129
|
try {
|
|
105
130
|
const p = resolve(args.path.replace(/^~/, homedir()));
|
|
106
131
|
writeFileSync(p, args.content);
|
|
107
|
-
|
|
132
|
+
const r = { content: [{ type: "text", text: `Written to ${p}` }] };
|
|
133
|
+
logTool(name, args, r);
|
|
134
|
+
return r;
|
|
108
135
|
} catch (err) {
|
|
109
|
-
|
|
136
|
+
const r = { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
137
|
+
logTool(name, args, r);
|
|
138
|
+
return r;
|
|
110
139
|
}
|
|
111
140
|
}
|
|
112
141
|
|
|
113
142
|
case "list_directory": {
|
|
114
143
|
try {
|
|
115
144
|
const dir = resolve((args.path || "~").replace(/^~/, homedir()));
|
|
116
|
-
const entries = readdirSync(dir).map((
|
|
145
|
+
const entries = readdirSync(dir).map((entry) => {
|
|
117
146
|
try {
|
|
118
|
-
const s = statSync(join(dir,
|
|
119
|
-
return `${s.isDirectory() ? "d" : "-"} ${
|
|
147
|
+
const s = statSync(join(dir, entry));
|
|
148
|
+
return `${s.isDirectory() ? "d" : "-"} ${entry}`;
|
|
120
149
|
} catch {
|
|
121
|
-
return `? ${
|
|
150
|
+
return `? ${entry}`;
|
|
122
151
|
}
|
|
123
152
|
});
|
|
124
|
-
|
|
153
|
+
const r = { content: [{ type: "text", text: entries.join("\n") }] };
|
|
154
|
+
logTool(name, args, r);
|
|
155
|
+
return r;
|
|
125
156
|
} catch (err) {
|
|
126
|
-
|
|
157
|
+
const r = { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
158
|
+
logTool(name, args, r);
|
|
159
|
+
return r;
|
|
127
160
|
}
|
|
128
161
|
}
|
|
129
162
|
|
|
@@ -138,6 +171,7 @@ function handleToolCall(name, args) {
|
|
|
138
171
|
homeDir: homedir(),
|
|
139
172
|
nodeVersion: process.version,
|
|
140
173
|
};
|
|
174
|
+
logTool(name, args);
|
|
141
175
|
return { content: [{ type: "text", text: JSON.stringify(info, null, 2) }] };
|
|
142
176
|
}
|
|
143
177
|
|