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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poke-gate",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Expose your machine to your Poke AI assistant via MCP tunnel",
5
5
  "type": "module",
6
6
  "bin": {
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
- return runCommand(args.command, args.cwd).then((result) => ({
89
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
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
- return { content: [{ type: "text", text: text.slice(0, 100_000) }] };
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
- return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
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
- return { content: [{ type: "text", text: `Written to ${p}` }] };
132
+ const r = { content: [{ type: "text", text: `Written to ${p}` }] };
133
+ logTool(name, args, r);
134
+ return r;
108
135
  } catch (err) {
109
- return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
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((name) => {
145
+ const entries = readdirSync(dir).map((entry) => {
117
146
  try {
118
- const s = statSync(join(dir, name));
119
- return `${s.isDirectory() ? "d" : "-"} ${name}`;
147
+ const s = statSync(join(dir, entry));
148
+ return `${s.isDirectory() ? "d" : "-"} ${entry}`;
120
149
  } catch {
121
- return `? ${name}`;
150
+ return `? ${entry}`;
122
151
  }
123
152
  });
124
- return { content: [{ type: "text", text: entries.join("\n") }] };
153
+ const r = { content: [{ type: "text", text: entries.join("\n") }] };
154
+ logTool(name, args, r);
155
+ return r;
125
156
  } catch (err) {
126
- return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
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