poke-browser 0.4.0 → 0.4.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/dist/run.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAwGA,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;AAkBvD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAqBA;AAuMD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAa1C"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAqNA,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;AAkBvD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAqBA;AAyMD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAa1C"}
package/dist/run.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { execFileSync, spawn } from "node:child_process";
2
+ import { createServer } from "node:http";
2
3
  import { PassThrough } from "node:stream";
3
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
5
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
@@ -12,6 +13,7 @@ let stdioMcpConnected = false;
12
13
  /** Active stdio MCP transport (stdio mode only); closed on graceful shutdown. */
13
14
  let mcpTransport = null;
14
15
  let tunnelChild = null;
16
+ let pokeProxyServerRunning = false;
15
17
  let processGuardsInstalled = false;
16
18
  function installProcessGuards() {
17
19
  if (processGuardsInstalled)
@@ -84,6 +86,107 @@ function installShutdownHandlers() {
84
86
  process.on("SIGINT", () => shutdownWithTimeout("SIGINT"));
85
87
  process.on("SIGTERM", () => shutdownWithTimeout("SIGTERM"));
86
88
  }
89
+ function readRequestBody(req, limitBytes = 64 * 1024) {
90
+ return new Promise((resolve, reject) => {
91
+ let body = "";
92
+ let size = 0;
93
+ req.setEncoding("utf8");
94
+ req.on("data", (chunk) => {
95
+ size += Buffer.byteLength(chunk, "utf8");
96
+ if (size > limitBytes) {
97
+ reject(new Error("Request body too large"));
98
+ req.destroy();
99
+ return;
100
+ }
101
+ body += chunk;
102
+ });
103
+ req.on("end", () => resolve(body));
104
+ req.on("error", reject);
105
+ });
106
+ }
107
+ function writeJson(res, status, payload) {
108
+ const body = JSON.stringify(payload);
109
+ res.statusCode = status;
110
+ res.setHeader("content-type", "application/json; charset=utf-8");
111
+ res.setHeader("content-length", String(Buffer.byteLength(body, "utf8")));
112
+ // Allow extension clients (chrome-extension://...) to call localhost proxy.
113
+ res.setHeader("access-control-allow-origin", "*");
114
+ res.setHeader("access-control-allow-methods", "POST, OPTIONS");
115
+ res.setHeader("access-control-allow-headers", "content-type");
116
+ res.end(body);
117
+ }
118
+ async function startPokeLocalProxyServer(wsPort) {
119
+ if (pokeProxyServerRunning)
120
+ return;
121
+ const proxyPort = wsPort + 1;
122
+ const server = createServer(async (req, res) => {
123
+ if (req.method === "OPTIONS") {
124
+ res.statusCode = 204;
125
+ res.setHeader("access-control-allow-origin", "*");
126
+ res.setHeader("access-control-allow-methods", "POST, OPTIONS");
127
+ res.setHeader("access-control-allow-headers", "content-type");
128
+ res.end();
129
+ return;
130
+ }
131
+ if (req.method !== "POST" || req.url !== "/poke/send-message") {
132
+ writeJson(res, 404, { error: "Not found" });
133
+ return;
134
+ }
135
+ try {
136
+ const raw = await readRequestBody(req);
137
+ let parsed;
138
+ try {
139
+ parsed = JSON.parse(raw);
140
+ }
141
+ catch {
142
+ writeJson(res, 400, { error: "Invalid JSON body" });
143
+ return;
144
+ }
145
+ const body = parsed && typeof parsed === "object" ? parsed : {};
146
+ const apiKey = typeof body.apiKey === "string" ? body.apiKey.trim() : "";
147
+ const message = typeof body.message === "string" ? body.message : "";
148
+ if (!apiKey || !message.trim()) {
149
+ writeJson(res, 400, { error: "apiKey and message are required" });
150
+ return;
151
+ }
152
+ const upstream = await fetch("https://poke.com/api/v1/inbound/api-message", {
153
+ method: "POST",
154
+ headers: {
155
+ Authorization: `Bearer ${apiKey}`,
156
+ "Content-Type": "application/json",
157
+ },
158
+ body: JSON.stringify({ message }),
159
+ });
160
+ const text = await upstream.text();
161
+ let json = { error: { message: text || upstream.statusText, status: upstream.status } };
162
+ try {
163
+ json = JSON.parse(text);
164
+ }
165
+ catch {
166
+ // keep fallback object
167
+ }
168
+ writeJson(res, upstream.status, json);
169
+ }
170
+ catch (err) {
171
+ writeJson(res, 500, {
172
+ error: {
173
+ message: err instanceof Error ? err.message : String(err),
174
+ status: 500,
175
+ },
176
+ });
177
+ }
178
+ });
179
+ await new Promise((resolve, reject) => {
180
+ server.listen(proxyPort, "127.0.0.1", (err) => {
181
+ if (err)
182
+ reject(err);
183
+ else
184
+ resolve();
185
+ });
186
+ });
187
+ pokeProxyServerRunning = true;
188
+ log(`[poke-browser-mcp] Local Poke proxy → http://127.0.0.1:${proxyPort}/poke/send-message`);
189
+ }
87
190
  function readMcpHttpPortFromEnv() {
88
191
  const raw = process.env.POKE_BROWSER_MCP_PORT ??
89
192
  process.env.POKE_BROWSER_PORT ??
@@ -146,6 +249,7 @@ async function runStdio() {
146
249
  const WS_PORT = readPort();
147
250
  try {
148
251
  await logAndStartExtensionWebSocket(WS_PORT);
252
+ await startPokeLocalProxyServer(WS_PORT);
149
253
  }
150
254
  catch (err) {
151
255
  logError("[poke-browser-mcp] WebSocket server failed to bind (is another poke-browser or process using the port?):", err);
@@ -180,6 +284,7 @@ async function runHttp(opts) {
180
284
  const WS_PORT = readPort();
181
285
  try {
182
286
  await logAndStartExtensionWebSocket(WS_PORT);
287
+ await startPokeLocalProxyServer(WS_PORT);
183
288
  }
184
289
  catch (err) {
185
290
  logError("[poke-browser-mcp] WebSocket server failed to bind:", err);
package/dist/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
@@ -39,10 +39,20 @@ const POKE_TERMINAL_ONLY_INSTRUCTION =
39
39
  "You are in a browser extension initiated terminal-style session.\n" +
40
40
  "DO NOT reply via iMessage. DO NOT reply via SMS. DO NOT reply via Telegram.\n" +
41
41
  "DO NOT send any normal chat reply text.\n" +
42
+ "You MUST use browser MCP tools for actions.\n" +
43
+ "The user is probably already on the target page.\n" +
44
+ "Start with a screenshot tool call first to understand current page state.\n" +
45
+ "Continue from the current page and avoid navigate_to unless absolutely needed.\n" +
42
46
  "Your only allowed behavior is to execute browser tasks and deliver output through the terminal/tool channel.\n" +
43
47
  "Be strict: immediately start the browser process and proceed with the requested browser actions.\n" +
44
48
  "[END BROWSER EXTENSION SESSION]\n\n";
45
49
 
50
+ const POKE_TERMINAL_FALLBACK_INSTRUCTION =
51
+ "[BROWSER SESSION]\n" +
52
+ "No chat reply. No iMessage/SMS/Telegram reply.\n" +
53
+ "Use browser MCP tools. Take screenshot first, continue from current page, avoid navigate_to unless needed.\n" +
54
+ "Start browser actions immediately and respond only through tool/terminal channel.\n\n";
55
+
46
56
  function logCommand(direction, summary) {
47
57
  commandLog.unshift({ ts: Date.now(), direction, summary });
48
58
  if (commandLog.length > LOG_MAX) commandLog.length = LOG_MAX;
@@ -64,6 +74,93 @@ function logCommand(direction, summary) {
64
74
  }
65
75
  }
66
76
 
77
+ /**
78
+ * @param {string} apiKey
79
+ * @param {string} message
80
+ */
81
+ async function postPokeMessage(apiKey, message) {
82
+ const resp = await fetch("https://poke.com/api/v1/inbound/api-message", {
83
+ method: "POST",
84
+ headers: {
85
+ Authorization: `Bearer ${apiKey}`,
86
+ "Content-Type": "application/json",
87
+ },
88
+ body: JSON.stringify({ message }),
89
+ });
90
+
91
+ if (resp.ok) {
92
+ const data = await resp.json().catch(() => null);
93
+ return { ok: true, data };
94
+ }
95
+
96
+ const bodyText = await resp.text();
97
+ let serverMsg = "";
98
+ try {
99
+ const parsed = JSON.parse(bodyText);
100
+ serverMsg =
101
+ typeof parsed?.error === "string"
102
+ ? parsed.error
103
+ : typeof parsed?.message === "string"
104
+ ? parsed.message
105
+ : "";
106
+ } catch {
107
+ /* non-json response body */
108
+ }
109
+
110
+ return {
111
+ ok: false,
112
+ status: resp.status,
113
+ statusText: resp.statusText || "",
114
+ serverMsg: serverMsg || bodyText.slice(0, 300),
115
+ };
116
+ }
117
+
118
+ /**
119
+ * Prefer localhost proxy to avoid extension-origin upstream edge cases.
120
+ * @param {string} apiKey
121
+ * @param {string} message
122
+ */
123
+ async function postPokeMessageViaLocalProxy(apiKey, message) {
124
+ const wsPort = await getWsPort();
125
+ const proxyPort = wsPort + 1;
126
+ const resp = await fetch(`http://127.0.0.1:${proxyPort}/poke/send-message`, {
127
+ method: "POST",
128
+ headers: {
129
+ "Content-Type": "application/json",
130
+ },
131
+ body: JSON.stringify({ apiKey, message }),
132
+ signal: AbortSignal.timeout(3500),
133
+ });
134
+
135
+ if (resp.ok) {
136
+ const data = await resp.json().catch(() => null);
137
+ return { ok: true, data };
138
+ }
139
+
140
+ const bodyText = await resp.text();
141
+ let serverMsg = "";
142
+ try {
143
+ const parsed = JSON.parse(bodyText);
144
+ if (parsed && typeof parsed === "object") {
145
+ const errObj = parsed.error;
146
+ if (errObj && typeof errObj === "object" && typeof errObj.message === "string") {
147
+ serverMsg = errObj.message;
148
+ } else if (typeof parsed.message === "string") {
149
+ serverMsg = parsed.message;
150
+ }
151
+ }
152
+ } catch {
153
+ /* non-json response body */
154
+ }
155
+
156
+ return {
157
+ ok: false,
158
+ status: resp.status,
159
+ statusText: resp.statusText || "",
160
+ serverMsg: serverMsg || bodyText.slice(0, 300),
161
+ };
162
+ }
163
+
67
164
  async function getWsPort() {
68
165
  const { wsPort } = await chrome.storage.local.get("wsPort");
69
166
  if (typeof wsPort === "number" && Number.isFinite(wsPort) && wsPort > 0 && wsPort < 65536) {
@@ -1993,37 +2090,54 @@ const RUNTIME_HANDLERS = {
1993
2090
  return;
1994
2091
  }
1995
2092
  try {
1996
- const fullMessage = `${POKE_TERMINAL_ONLY_INSTRUCTION}${userMessage}`;
1997
- const resp = await fetch("https://poke.com/api/v1/inbound/api-message", {
1998
- method: "POST",
1999
- headers: {
2000
- Authorization: `Bearer ${apiKey}`,
2001
- "Content-Type": "application/json",
2002
- },
2003
- body: JSON.stringify({ message: fullMessage }),
2004
- });
2005
- if (!resp.ok) {
2006
- const bodyText = await resp.text();
2007
- let serverMsg = "";
2093
+ const primaryPrompt = `${POKE_TERMINAL_ONLY_INSTRUCTION}${userMessage}`;
2094
+ const fallbackPrompt = `${POKE_TERMINAL_FALLBACK_INSTRUCTION}${userMessage}`;
2095
+
2096
+ // First path: localhost proxy through poke-browser Node process.
2097
+ let primary;
2098
+ try {
2099
+ primary = await postPokeMessageViaLocalProxy(apiKey, primaryPrompt);
2100
+ } catch {
2101
+ // Proxy unavailable; fallback to direct extension fetch.
2102
+ primary = await postPokeMessage(apiKey, primaryPrompt);
2103
+ }
2104
+
2105
+ if (primary.ok) {
2106
+ sendResponse({ ok: true, data: primary.data });
2107
+ return;
2108
+ }
2109
+
2110
+ // If backend fails with a 5xx, retry once with shorter strict instruction.
2111
+ if (primary.status >= 500) {
2112
+ let fallback;
2008
2113
  try {
2009
- const parsed = JSON.parse(bodyText);
2010
- serverMsg =
2011
- typeof parsed?.error === "string"
2012
- ? parsed.error
2013
- : typeof parsed?.message === "string"
2014
- ? parsed.message
2015
- : "";
2114
+ fallback = await postPokeMessageViaLocalProxy(apiKey, fallbackPrompt);
2016
2115
  } catch {
2017
- /* keep raw status */
2116
+ fallback = await postPokeMessage(apiKey, fallbackPrompt);
2117
+ }
2118
+ if (fallback.ok) {
2119
+ sendResponse({
2120
+ ok: true,
2121
+ data: fallback.data,
2122
+ warning: `Primary prompt failed with ${primary.status}; fallback succeeded.`,
2123
+ });
2124
+ return;
2018
2125
  }
2019
2126
  sendResponse({
2020
2127
  ok: false,
2021
- error: serverMsg || `Poke API error (${resp.status}).`,
2128
+ error:
2129
+ `Poke API error (${fallback.status}). ` +
2130
+ (fallback.serverMsg || fallback.statusText || "Unknown server error."),
2022
2131
  });
2023
2132
  return;
2024
2133
  }
2025
- const data = await resp.json().catch(() => null);
2026
- sendResponse({ ok: true, data });
2134
+
2135
+ sendResponse({
2136
+ ok: false,
2137
+ error:
2138
+ `Poke API error (${primary.status}). ` +
2139
+ (primary.serverMsg || primary.statusText || "Unknown server error."),
2140
+ });
2027
2141
  } catch (err) {
2028
2142
  sendResponse({
2029
2143
  ok: false,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "poke-browser",
4
- "version": "0.3.0",
4
+ "version": "0.4.1",
5
5
  "description": "Browser automation bridge for MCP agents via WebSocket.",
6
6
  "permissions": [
7
7
  "tabs",
@@ -260,6 +260,20 @@
260
260
  min-height: 14px;
261
261
  }
262
262
 
263
+ .inline-link {
264
+ margin-top: 6px;
265
+ font-size: 11px;
266
+ }
267
+
268
+ .inline-link a {
269
+ color: #a78bfa;
270
+ text-decoration: none;
271
+ }
272
+
273
+ .inline-link a:hover {
274
+ text-decoration: underline;
275
+ }
276
+
263
277
  .toggle-label {
264
278
  font-size: 13px;
265
279
  color: var(--text-primary);
@@ -489,6 +503,9 @@
489
503
  <button type="button" id="save-api-key-btn" class="btn">Save key</button>
490
504
  <button type="button" id="clear-api-key-btn" class="btn">Clear key</button>
491
505
  </div>
506
+ <div class="inline-link">
507
+ <a href="https://poke.com/kitchen/api-keys" target="_blank" rel="noopener noreferrer">Get an API key from Poke Kitchen</a>
508
+ </div>
492
509
  <div class="mini-status" id="api-key-status"></div>
493
510
  </section>
494
511
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poke-browser",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "MCP server + WebSocket bridge for the poke-browser Chrome extension",
5
5
  "type": "module",
6
6
  "engines": {