@wherever-dev/pi 0.2.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Remote Client Example for Pi
3
+ *
4
+ * Demonstrates how to connect to and control a remote pi instance
5
+ * using the remote-server extension.
6
+ *
7
+ * Usage:
8
+ * npx tsx remote-client.ts --url ws://localhost:31415 --token YOUR_TOKEN
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
package/dist/client.js ADDED
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Remote Client Example for Pi
3
+ *
4
+ * Demonstrates how to connect to and control a remote pi instance
5
+ * using the remote-server extension.
6
+ *
7
+ * Usage:
8
+ * npx tsx remote-client.ts --url ws://localhost:31415 --token YOUR_TOKEN
9
+ */
10
+ import WebSocket from "ws";
11
+ function parseArgs() {
12
+ const args = process.argv.slice(2);
13
+ const config = { url: "ws://localhost:31415" };
14
+ for (let i = 0; i < args.length; i++) {
15
+ if (args[i] === "--url" && args[i + 1]) {
16
+ config.url = args[++i];
17
+ }
18
+ else if (args[i] === "--token" && args[i + 1]) {
19
+ config.token = args[++i];
20
+ }
21
+ }
22
+ return config;
23
+ }
24
+ async function main() {
25
+ const config = parseArgs();
26
+ // Connect to WebSocket
27
+ const wsUrl = config.token
28
+ ? `${config.url}?token=${config.token}`
29
+ : config.url;
30
+ const ws = new WebSocket(wsUrl);
31
+ ws.on("open", () => {
32
+ console.log("āœ… Connected to Wherever server");
33
+ console.log("\nCommands:");
34
+ console.log(" Type a message and press Enter");
35
+ console.log(" !abort - abort current operation");
36
+ console.log(" !exit - exit this client\n");
37
+ });
38
+ ws.on("message", (data) => {
39
+ try {
40
+ const msg = JSON.parse(data.toString());
41
+ handleMessage(msg);
42
+ }
43
+ catch (err) {
44
+ console.error("Failed to parse message:", err);
45
+ }
46
+ });
47
+ ws.on("close", () => {
48
+ console.log("\nāŒ Disconnected from Wherever server");
49
+ process.exit(0);
50
+ });
51
+ ws.on("error", (err) => {
52
+ console.error("WebSocket error:", err.message);
53
+ process.exit(1);
54
+ });
55
+ // Read user input
56
+ const readline = await import("readline");
57
+ const rl = readline.createInterface({
58
+ input: process.stdin,
59
+ output: process.stdout,
60
+ });
61
+ function prompt() {
62
+ rl.question("You: ", (input) => {
63
+ const trimmed = input.trim();
64
+ if (trimmed === "!exit") {
65
+ ws.close();
66
+ rl.close();
67
+ return;
68
+ }
69
+ if (trimmed === "!abort") {
70
+ ws.send(JSON.stringify({ type: "abort" }));
71
+ console.log("🚫 Abort sent");
72
+ prompt();
73
+ return;
74
+ }
75
+ if (trimmed) {
76
+ ws.send(JSON.stringify({ type: "message", message: trimmed }));
77
+ }
78
+ prompt();
79
+ });
80
+ }
81
+ prompt();
82
+ }
83
+ function handleMessage(msg) {
84
+ switch (msg.type) {
85
+ case "connected":
86
+ console.log(`šŸ“” Session: ${msg.session}`);
87
+ break;
88
+ case "agent_start":
89
+ console.log("\nšŸ¤– Agent: Working...");
90
+ break;
91
+ case "message_update":
92
+ process.stdout.write(msg.delta || "");
93
+ break;
94
+ case "message_end":
95
+ console.log("\n");
96
+ break;
97
+ case "agent_end":
98
+ console.log("āœ… Agent finished\n");
99
+ break;
100
+ case "tool_start":
101
+ console.log(`šŸ”§ Tool: ${msg.toolName}`);
102
+ break;
103
+ case "tool_end":
104
+ console.log(`āœ… Tool completed (error: ${msg.isError})\n`);
105
+ break;
106
+ case "aborted":
107
+ console.log("🚫 Aborted\n");
108
+ break;
109
+ case "pong":
110
+ console.log("šŸ“ Pong");
111
+ break;
112
+ default:
113
+ console.log("šŸ“Ø", msg.type, msg);
114
+ }
115
+ }
116
+ main().catch(console.error);
117
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CLI Bridge Extension for Wherever
3
+ *
4
+ * Connects the local pi CLI session as a client to the Standalone Wherever Server.
5
+ * Streams all terminal activity to the server in real-time, and receives remote
6
+ * commands to execute in the local agent loop.
7
+ *
8
+ * Features exponential backoff reconnection to automatically pair whenever the
9
+ * Standalone Server starts or stops.
10
+ *
11
+ * Usage:
12
+ * pi --extension ./extension/dist/index.js --remote-port 31415 --remote-token YOUR_TOKEN
13
+ */
14
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
15
+ export default function (pi: ExtensionAPI): Promise<void>;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,iCAAiC,CAAC;AAEzC,yBAA+B,EAAE,EAAE,YAAY,iBAuX9C"}
package/dist/index.js ADDED
@@ -0,0 +1,363 @@
1
+ /**
2
+ * CLI Bridge Extension for Wherever
3
+ *
4
+ * Connects the local pi CLI session as a client to the Standalone Wherever Server.
5
+ * Streams all terminal activity to the server in real-time, and receives remote
6
+ * commands to execute in the local agent loop.
7
+ *
8
+ * Features exponential backoff reconnection to automatically pair whenever the
9
+ * Standalone Server starts or stops.
10
+ *
11
+ * Usage:
12
+ * pi --extension ./extension/dist/index.js --remote-port 31415 --remote-token YOUR_TOKEN
13
+ */
14
+ import WebSocket from "ws";
15
+ import { spawn } from "node:child_process";
16
+ export default async function (pi) {
17
+ // Register flags to specify Standalone Server settings
18
+ pi.registerFlag("remote-port", {
19
+ description: "Port of the remote standalone server",
20
+ type: "string",
21
+ default: "31415",
22
+ });
23
+ pi.registerFlag("remote-host", {
24
+ description: "Host of the remote standalone server",
25
+ type: "string",
26
+ default: "127.0.0.1",
27
+ });
28
+ pi.registerFlag("remote-token", {
29
+ description: "Authentication token for the remote standalone server",
30
+ type: "string",
31
+ });
32
+ pi.registerFlag("remote-bridge", {
33
+ description: "Whether to connect to the remote standalone server as a bridge",
34
+ type: "boolean",
35
+ default: true,
36
+ });
37
+ pi.registerFlag("remote-secure", {
38
+ description: "Whether to connect to the remote standalone server using SSL (WSS)",
39
+ type: "boolean",
40
+ default: true,
41
+ });
42
+ pi.registerCommand("remote-reconnect", {
43
+ description: "Manually reconnect to the standalone remote server",
44
+ handler: async (args, ctx) => {
45
+ if (isConnected) {
46
+ ctx.ui.notify("[Wherever] Already connected to standalone server", "info");
47
+ return;
48
+ }
49
+ ctx.ui.notify("[Wherever] Initiating manual reconnect...", "info");
50
+ reconnectDelay = 2000;
51
+ connect();
52
+ },
53
+ });
54
+ let ws = null;
55
+ let isConnected = false;
56
+ let sessionFile = null;
57
+ let ctxVal = null;
58
+ let reconnectTimer = null;
59
+ let reconnectDelay = 2000;
60
+ const MAX_RECONNECT_DELAY = 15000;
61
+ let isInitialConnect = true;
62
+ function updateCliWidget(status) {
63
+ if (!ctxVal)
64
+ return;
65
+ try {
66
+ if (status === 'connecting') {
67
+ ctxVal.ui.setWidget("wherever-status", (_tui, theme) => {
68
+ const line = theme.fg("muted", "šŸ”Œ [Wherever] Connecting to standalone remote server...");
69
+ return {
70
+ render: () => [line],
71
+ invalidate: () => { },
72
+ };
73
+ });
74
+ }
75
+ else if (status === 'disconnected') {
76
+ ctxVal.ui.setWidget("wherever-status", (_tui, theme) => {
77
+ const line = theme.fg("error", "āš ļø [Wherever] Disconnected from standalone remote server");
78
+ return {
79
+ render: () => [line],
80
+ invalidate: () => { },
81
+ };
82
+ });
83
+ }
84
+ else {
85
+ ctxVal.ui.setWidget("wherever-status", undefined);
86
+ }
87
+ }
88
+ catch (err) {
89
+ // Quiet fail if context is stale or disposed
90
+ }
91
+ }
92
+ function sendCliEvent(event) {
93
+ if (!ws || !isConnected || !sessionFile)
94
+ return;
95
+ try {
96
+ ws.send(JSON.stringify({
97
+ type: "cli_event",
98
+ sessionFile,
99
+ event,
100
+ }));
101
+ }
102
+ catch (err) {
103
+ // Quiet fail if connection dropped suddenly during a send
104
+ }
105
+ }
106
+ function connect() {
107
+ if (ws) {
108
+ try {
109
+ ws.removeAllListeners();
110
+ ws.close();
111
+ }
112
+ catch (err) { }
113
+ ws = null;
114
+ }
115
+ if (!ctxVal || !sessionFile)
116
+ return;
117
+ updateCliWidget('connecting');
118
+ const host = pi.getFlag("remote-host") || "127.0.0.1";
119
+ const port = pi.getFlag("remote-port") || "31415";
120
+ const token = pi.getFlag("remote-token");
121
+ const isSecure = pi.getFlag("remote-secure") !== false;
122
+ const tokenQuery = token ? `?token=${encodeURIComponent(token)}` : "";
123
+ const protocol = isSecure ? "wss" : "ws";
124
+ const wsUrl = `${protocol}://${host}:${port}/ws${tokenQuery}`;
125
+ const wsOptions = isSecure ? { rejectUnauthorized: false } : {};
126
+ const currentWs = new WebSocket(wsUrl, wsOptions);
127
+ ws = currentWs;
128
+ currentWs.on("open", () => {
129
+ if (ws !== currentWs)
130
+ return;
131
+ isConnected = true;
132
+ reconnectDelay = 2000; // Reset reconnect delay back to 2s
133
+ isInitialConnect = false;
134
+ updateCliWidget('connected');
135
+ // Register this CLI session with the server
136
+ currentWs.send(JSON.stringify({
137
+ type: "cli_register",
138
+ sessionFile,
139
+ cwd: ctxVal?.cwd,
140
+ model: ctxVal?.model ? `${ctxVal.model.provider}:${ctxVal.model.id}` : "",
141
+ }));
142
+ });
143
+ currentWs.on("message", (data) => {
144
+ if (ws !== currentWs)
145
+ return;
146
+ try {
147
+ const msg = JSON.parse(data.toString());
148
+ switch (msg.type) {
149
+ case "cli_message": {
150
+ ctxVal?.ui.notify(`[Wherever] Received remote command: ${msg.message.slice(0, 40)}...`, "info");
151
+ pi.sendUserMessage(msg.message, {
152
+ deliverAs: msg.streamingBehavior,
153
+ });
154
+ break;
155
+ }
156
+ case "cli_bash": {
157
+ const { command, excludeFromContext } = msg;
158
+ ctxVal?.ui.notify(`[Wherever] Executing remote bash command: ${command.slice(0, 40)}...`, "info");
159
+ sendCliEvent({
160
+ type: "tool_execution_start",
161
+ toolName: "bash",
162
+ args: { command },
163
+ });
164
+ const shell = process.platform === "win32" ? "cmd.exe" : "bash";
165
+ const shellArgs = process.platform === "win32" ? ["/c", command] : ["-c", command];
166
+ const child = spawn(shell, shellArgs, { cwd: ctxVal?.cwd });
167
+ let output = "";
168
+ child.stdout?.on("data", (data) => {
169
+ const chunk = data.toString();
170
+ output += chunk;
171
+ sendCliEvent({
172
+ type: "tool_execution_update",
173
+ toolName: "bash",
174
+ delta: chunk,
175
+ });
176
+ });
177
+ child.stderr?.on("data", (data) => {
178
+ const chunk = data.toString();
179
+ output += chunk;
180
+ sendCliEvent({
181
+ type: "tool_execution_update",
182
+ toolName: "bash",
183
+ delta: chunk,
184
+ });
185
+ });
186
+ child.on("close", (code) => {
187
+ sendCliEvent({
188
+ type: "tool_execution_end",
189
+ toolName: "bash",
190
+ result: output,
191
+ isError: code !== 0,
192
+ });
193
+ // Record bash result locally
194
+ const bashMessage = {
195
+ role: "bashExecution",
196
+ command,
197
+ output,
198
+ exitCode: code,
199
+ timestamp: Date.now(),
200
+ excludeFromContext,
201
+ };
202
+ try {
203
+ if (ctxVal?.sessionManager) {
204
+ ctxVal.sessionManager.appendMessage(bashMessage);
205
+ }
206
+ }
207
+ catch (err) {
208
+ console.error("[Wherever] Failed to append bash message locally:", err);
209
+ }
210
+ });
211
+ child.on("error", (err) => {
212
+ const errMsg = err.message || String(err);
213
+ sendCliEvent({
214
+ type: "tool_execution_end",
215
+ toolName: "bash",
216
+ result: errMsg,
217
+ isError: true,
218
+ });
219
+ });
220
+ break;
221
+ }
222
+ case "cli_abort": {
223
+ ctxVal?.ui.notify("[Wherever] Received abort command from remote client", "warning");
224
+ ctxVal?.abort();
225
+ break;
226
+ }
227
+ case "cli_model_change": {
228
+ const { model: modelStr } = msg;
229
+ if (modelStr && ctxVal) {
230
+ const idx = modelStr.indexOf(':');
231
+ if (idx !== -1) {
232
+ const provider = modelStr.slice(0, idx);
233
+ const id = modelStr.slice(idx + 1);
234
+ const model = ctxVal.modelRegistry.find(provider, id);
235
+ if (model) {
236
+ ctxVal.ui.notify(`[Wherever] Changing model to ${modelStr}...`, "info");
237
+ pi.setModel(model).catch((err) => {
238
+ ctxVal?.ui.notify(`[Wherever] Failed to set model: ${err.message || err}`, "error");
239
+ });
240
+ }
241
+ else {
242
+ ctxVal.ui.notify(`[Wherever] Model not found in registry: ${modelStr}`, "error");
243
+ }
244
+ }
245
+ }
246
+ break;
247
+ }
248
+ }
249
+ }
250
+ catch (err) {
251
+ console.error("[Wherever] Error handling message from server:", err);
252
+ }
253
+ });
254
+ currentWs.on("close", () => {
255
+ if (ws !== currentWs)
256
+ return;
257
+ if (isConnected) {
258
+ isConnected = false;
259
+ updateCliWidget('disconnected');
260
+ }
261
+ scheduleReconnect();
262
+ });
263
+ currentWs.on("error", (err) => {
264
+ if (ws !== currentWs)
265
+ return;
266
+ if (isConnected || isInitialConnect) {
267
+ isConnected = false;
268
+ isInitialConnect = false;
269
+ updateCliWidget('disconnected');
270
+ }
271
+ scheduleReconnect();
272
+ });
273
+ }
274
+ function scheduleReconnect() {
275
+ if (reconnectTimer)
276
+ return;
277
+ reconnectTimer = setTimeout(() => {
278
+ reconnectTimer = null;
279
+ reconnectDelay = Math.min(reconnectDelay * 1.5, MAX_RECONNECT_DELAY);
280
+ connect();
281
+ }, reconnectDelay);
282
+ }
283
+ pi.on("session_start", async (event, ctx) => {
284
+ const isBridgeEnabled = pi.getFlag("remote-bridge") !== false;
285
+ if (!isBridgeEnabled)
286
+ return;
287
+ ctxVal = ctx;
288
+ sessionFile = ctx.sessionManager.getSessionFile() || "";
289
+ if (!sessionFile)
290
+ return;
291
+ connect();
292
+ });
293
+ pi.on("session_shutdown", async () => {
294
+ if (reconnectTimer) {
295
+ clearTimeout(reconnectTimer);
296
+ reconnectTimer = null;
297
+ }
298
+ const oldCtx = ctxVal;
299
+ ctxVal = null;
300
+ sessionFile = null;
301
+ if (ws) {
302
+ try {
303
+ ws.removeAllListeners();
304
+ ws.close();
305
+ }
306
+ catch (err) { }
307
+ ws = null;
308
+ }
309
+ isConnected = false;
310
+ if (oldCtx) {
311
+ try {
312
+ oldCtx.ui.setWidget("wherever-status", undefined); // Clear widget
313
+ }
314
+ catch (err) { }
315
+ }
316
+ });
317
+ // Subscribe and forward Agent Events to the Standalone Server
318
+ pi.on("agent_start", async () => {
319
+ sendCliEvent({ type: "agent_start" });
320
+ });
321
+ pi.on("message_update", async (event) => {
322
+ sendCliEvent({
323
+ type: "message_update",
324
+ message: event.message,
325
+ assistantMessageEvent: event.assistantMessageEvent,
326
+ });
327
+ });
328
+ pi.on("message_end", async (event) => {
329
+ sendCliEvent({
330
+ type: "message_end",
331
+ message: event.message,
332
+ });
333
+ });
334
+ pi.on("agent_end", async (event) => {
335
+ sendCliEvent({
336
+ type: "agent_end",
337
+ messages: event.messages,
338
+ });
339
+ });
340
+ pi.on("tool_execution_start", async (event) => {
341
+ sendCliEvent({
342
+ type: "tool_execution_start",
343
+ toolName: event.toolName,
344
+ args: event.args,
345
+ });
346
+ });
347
+ pi.on("tool_execution_end", async (event) => {
348
+ sendCliEvent({
349
+ type: "tool_execution_end",
350
+ toolName: event.toolName,
351
+ result: event.result,
352
+ isError: event.isError,
353
+ });
354
+ });
355
+ pi.on("model_select", async (event) => {
356
+ const modelStr = event.model ? `${event.model.provider}:${event.model.id}` : "";
357
+ sendCliEvent({
358
+ type: "model_select",
359
+ model: modelStr,
360
+ });
361
+ });
362
+ }
363
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@wherever-dev/pi",
3
+ "version": "0.2.0",
4
+ "description": "Remote control extension for pi coding agent with HTTP/WebSocket API (wherever.dev)",
5
+ "homepage": "https://github.com/wighawag/wherever#readme",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/wighawag/wherever.git",
9
+ "directory": "extension"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/wighawag/wherever/issues"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "type": "module",
18
+ "main": "dist/index.js",
19
+ "keywords": [
20
+ "pi-package",
21
+ "pi",
22
+ "coding-agent",
23
+ "remote",
24
+ "websocket",
25
+ "http"
26
+ ],
27
+ "license": "MIT",
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "dependencies": {
32
+ "ws": "^8.18.0"
33
+ },
34
+ "peerDependencies": {
35
+ "@earendil-works/pi-coding-agent": "*"
36
+ },
37
+ "devDependencies": {
38
+ "@earendil-works/pi-coding-agent": "^0.75.3",
39
+ "@types/node": "^22.0.0",
40
+ "@types/ws": "^8.5.13",
41
+ "tsx": "^4.19.0",
42
+ "typescript": "^5.7.0"
43
+ },
44
+ "pi": {
45
+ "extensions": [
46
+ "./dist/index.js"
47
+ ]
48
+ },
49
+ "scripts": {
50
+ "build": "tsc",
51
+ "dev": "tsx src/index.ts",
52
+ "client": "tsx src/client.ts",
53
+ "start": "node dist/index.js"
54
+ }
55
+ }