pi-x-ide 1.10.0 → 1.11.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/README.md CHANGED
@@ -102,7 +102,7 @@ Attach the selection from either side: press `Ctrl+Alt+K` (Linux/Windows) or `Cm
102
102
 
103
103
  Type a chat prompt in Pi and submit it. The selected text is injected as LLM context (does not persist in session history). After submission, the widget shows `sent`.
104
104
 
105
- For diagnostics in VS Code-family IDEs, place the cursor on an error or warning and open Quick Fix. Choose **Pi: Fix it** to send the diagnostic message, source range, nearby context lines, and related information to Pi and start a diagnostic-analysis turn with a configurable prompt template (see [`fix_prompt`](#pi-side-configuration)). Choose **Pi: Send diagnostic** to paste the diagnostic context into Pi's input box without starting a turn.
105
+ For diagnostics in VS Code-family IDEs, connect Pi first, then place the cursor on an error or warning and open Quick Fix. The **Pi: Fix it** and **Pi: Send diagnostic** actions are shown only while at least one Pi client is connected. **Pi: Fix it** sends the diagnostic message, source range, nearby context lines, and related information to one connected Pi client and starts a diagnostic-analysis turn with a configurable prompt template (see [`fix_prompt`](#pi-side-configuration)). **Pi: Send diagnostic** sends the same context to one connected Pi client and pastes it into Pi's input box without starting a turn.
106
106
 
107
107
  **If the connection doesn't appear:**
108
108
 
package/README.zh-CN.md CHANGED
@@ -101,7 +101,7 @@ IDE: vscode ✓ src/foo.ts#L10,20 pending
101
101
 
102
102
  在 Pi 中输入对话提示并提交,选中文本会作为 LLM 上下文注入(不写入 session 历史)。提交后 widget 显示 `sent`。
103
103
 
104
- 对于 VS Code 系列 IDE 中的诊断信息,把光标放在 error 或 warning 上并打开 Quick Fix。选择 **Pi: Fix it** 会把诊断消息、源码范围、附近上下文行和 related information 发送给 Pi,并用可自定义的 prompt 模板自动开始诊断分析(参见 [`fix_prompt`](#pi-侧配置))。选择 **Pi: Send diagnostic** 只会把诊断上下文粘贴到 Pi 输入框,不会自动开始一轮对话。
104
+ 对于 VS Code 系列 IDE 中的诊断信息,先连接 Pi,再把光标放在 error 或 warning 上并打开 Quick Fix。只有至少一个 Pi 客户端已连接时,才会显示 **Pi: Fix it** 和 **Pi: Send diagnostic**。**Pi: Fix it** 会把诊断消息、源码范围、附近上下文行和 related information 发送给一个已连接的 Pi 客户端,并用可自定义的 prompt 模板自动开始诊断分析(参见 [`fix_prompt`](#pi-侧配置))。**Pi: Send diagnostic** 会把相同上下文发送给一个已连接的 Pi 客户端并粘贴到 Pi 输入框,不会自动开始一轮对话。
105
105
 
106
106
  **如果连接未出现:**
107
107
 
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-x-ide",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "description": "Pi extension package for IDE selection context integration.",
5
5
  "files": [
6
6
  "dist",
@@ -48,7 +48,7 @@ function formatDiagnosticContext(params, options = {}) {
48
48
  if (diagnostic.contextLines.length > 0) {
49
49
  lines.push("- Context lines:");
50
50
  for (const contextLine of diagnostic.contextLines) {
51
- const marker = contextLine.isPrimary ? ">" : " ";
51
+ const marker = contextLine.isPrimary ? "\\>" : " ";
52
52
  lines.push(` ${marker} ${contextLine.line + 1}: ${contextLine.text}`);
53
53
  }
54
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/pi/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/pi/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-options.js","sourceRoot":"","sources":["../../../src/shared/config-options.ts"],"names":[],"mappings":";;;AAcA,4CAEC;AAJY,QAAA,sBAAsB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAkD,CAAC;AAEvH,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,8BAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC;AACtE,CAAC;AAEY,QAAA,kBAAkB,GAAG;IAChC,qBAAqB,EAAE;QACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;QACrC,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,sFAAsF;KACpG;IACD,wBAAwB,EAAE;QACxB,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,mGAAmG;KACjH;IACD,eAAe,EAAE;QACf,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,WAAW,EAAE,yCAAyC;KACvD;IACD,6BAA6B,EAAE;QAC7B,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC1B,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,MAAM;KAChB;CACiD,CAAC;AAExC,QAAA,0BAA0B,GAAG,EAAuD,CAAC;AAUrF,QAAA,cAAc,GAAG;IAC5B,UAAU,EAAE;QACV,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,OAAO,EACL,+FAA+F;QACjG,WAAW,EACT,oNAAoN;KACvN;CAC8C,CAAC"}
1
+ {"version":3,"file":"config-options.js","sourceRoot":"","sources":["../../../src/shared/config-options.ts"],"names":[],"mappings":";;;AAcA,4CAEC;AAJY,QAAA,sBAAsB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAkD,CAAC;AAEvH,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,8BAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC;AACtE,CAAC;AAEY,QAAA,kBAAkB,GAAG;IAChC,qBAAqB,EAAE;QACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;QACrC,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,sFAAsF;KACpG;IACD,wBAAwB,EAAE;QACxB,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,mGAAmG;KACjH;IACD,eAAe,EAAE;QACf,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,WAAW,EAAE,yCAAyC;KACvD;IACD,6BAA6B,EAAE;QAC7B,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC1B,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,MAAM;KAChB;CACiD,CAAC;AAExC,QAAA,0BAA0B,GAAG,EAAuD,CAAC;AAUrF,QAAA,cAAc,GAAG;IAC5B,UAAU,EAAE;QACV,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,+FAA+F;QACxG,WAAW,EACT,oNAAoN;KACvN;CAC8C,CAAC"}
@@ -15,6 +15,8 @@ export declare class IdeWebSocketServer {
15
15
  get clientCount(): number;
16
16
  start(): Promise<number>;
17
17
  broadcast(value: unknown): void;
18
+ sendToFirstClient(value: unknown): boolean;
18
19
  stop(): Promise<void>;
19
20
  private handleMessage;
21
+ private get openSockets();
20
22
  }
@@ -58,7 +58,7 @@ class IdeWebSocketServer {
58
58
  return address.port;
59
59
  }
60
60
  get clientCount() {
61
- return this.sockets.size;
61
+ return this.openSockets.length;
62
62
  }
63
63
  async start() {
64
64
  this.httpServer = (0, node_http_1.createServer)();
@@ -87,10 +87,15 @@ class IdeWebSocketServer {
87
87
  }
88
88
  broadcast(value) {
89
89
  const text = JSON.stringify(value);
90
- for (const socket of this.sockets) {
91
- if (socket.readyState === ws_1.default.OPEN)
92
- socket.send(text);
93
- }
90
+ for (const socket of this.openSockets)
91
+ socket.send(text);
92
+ }
93
+ sendToFirstClient(value) {
94
+ const [socket] = this.openSockets;
95
+ if (!socket)
96
+ return false;
97
+ socket.send(JSON.stringify(value));
98
+ return true;
94
99
  }
95
100
  async stop() {
96
101
  for (const socket of this.sockets)
@@ -139,6 +144,9 @@ class IdeWebSocketServer {
139
144
  },
140
145
  }));
141
146
  }
147
+ get openSockets() {
148
+ return [...this.sockets].filter((socket) => socket.readyState === ws_1.default.OPEN);
149
+ }
142
150
  }
143
151
  exports.IdeWebSocketServer = IdeWebSocketServer;
144
152
  //# sourceMappingURL=ide-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ide-server.js","sourceRoot":"","sources":["../../../src/shared/ide-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ide-server.js","sourceRoot":"","sources":["../../../src/shared/ide-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_test_1 = __importDefault(require("node:test"));
8
+ const ws_1 = __importDefault(require("ws"));
9
+ const ide_server_1 = require("../src/shared/ide-server");
10
+ const protocol_1 = require("../src/shared/protocol");
11
+ const ws_2 = require("../src/shared/ws");
12
+ void (0, node_test_1.default)("sends targeted notifications to only one connected client", async () => {
13
+ const server = new ide_server_1.IdeWebSocketServer("token", { name: "Test IDE", ide: "vscode" });
14
+ const port = await server.start();
15
+ const clients = await Promise.all([connectClient(port), connectClient(port)]);
16
+ const received = clients.map((client) => collectMessages(client));
17
+ try {
18
+ strict_1.default.equal(server.clientCount, 2);
19
+ strict_1.default.equal(server.sendToFirstClient({ jsonrpc: "2.0", method: "targeted" }), true);
20
+ await waitFor(() => received[0].length + received[1].length === 1);
21
+ strict_1.default.equal(received[0].length + received[1].length, 1);
22
+ }
23
+ finally {
24
+ for (const client of clients)
25
+ client.close();
26
+ await server.stop();
27
+ }
28
+ });
29
+ async function connectClient(port) {
30
+ const client = new ws_1.default(`ws://127.0.0.1:${port}`, { headers: { [protocol_1.AUTH_HEADER]: "token" } });
31
+ await new Promise((resolve, reject) => {
32
+ client.once("open", resolve);
33
+ client.once("error", reject);
34
+ });
35
+ return client;
36
+ }
37
+ function collectMessages(client) {
38
+ const messages = [];
39
+ client.on("message", (raw) => messages.push((0, ws_2.decodeRawData)(raw)));
40
+ return messages;
41
+ }
42
+ async function waitFor(predicate) {
43
+ for (let attempt = 0; attempt < 20; attempt += 1) {
44
+ if (predicate())
45
+ return;
46
+ await new Promise((resolve) => setTimeout(resolve, 10));
47
+ }
48
+ strict_1.default.fail("condition was not met before timeout");
49
+ }
50
+ //# sourceMappingURL=ide-server.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ide-server.test.js","sourceRoot":"","sources":["../../test/ide-server.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAwC;AACxC,0DAA6B;AAC7B,4CAA2B;AAC3B,yDAA8D;AAC9D,qDAAqD;AACrD,yCAAiD;AAEjD,KAAK,IAAA,mBAAI,EAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;IAChF,MAAM,MAAM,GAAG,IAAI,+BAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAEpC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrF,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAEnE,gBAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,MAAM,MAAM,GAAG,IAAI,YAAS,CAAC,kBAAkB,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,sBAAW,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAChG,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,MAAiB;IACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,kBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,SAAwB;IAC7C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,SAAS,EAAE;YAAE,OAAO;QACxB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,gBAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-x-ide",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "description": "Pi extension package for IDE selection context integration.",
5
5
  "files": [
6
6
  "dist",
@@ -54,7 +54,7 @@ export function formatDiagnosticContext(params: DiagnosticFixRequestedParams, op
54
54
  if (diagnostic.contextLines.length > 0) {
55
55
  lines.push("- Context lines:");
56
56
  for (const contextLine of diagnostic.contextLines) {
57
- const marker = contextLine.isPrimary ? ">" : " ";
57
+ const marker = contextLine.isPrimary ? "\\>" : " ";
58
58
  lines.push(` ${marker} ${contextLine.line + 1}: ${contextLine.text}`);
59
59
  }
60
60
  }
@@ -51,8 +51,7 @@ export interface ConfigOption {
51
51
  export const CONFIG_OPTIONS = {
52
52
  fix_prompt: {
53
53
  type: ["string"],
54
- default:
55
- "Analyze the errors and warnings at the following location, and try to fix them:\n{DIAGNOSTIC}",
54
+ default: "Analyze the errors and warnings at the following location, and try to fix them:\n{DIAGNOSTIC}",
56
55
  description:
57
56
  "Custom prompt prefix when requesting a fix for IDE diagnostics. Use {DIAGNOSTIC} as a placeholder for the diagnostic context. If the placeholder is omitted, the diagnostic context is appended after your prompt.",
58
57
  },
@@ -28,7 +28,7 @@ export class IdeWebSocketServer {
28
28
  }
29
29
 
30
30
  get clientCount(): number {
31
- return this.sockets.size;
31
+ return this.openSockets.length;
32
32
  }
33
33
 
34
34
  async start(): Promise<number> {
@@ -62,9 +62,14 @@ export class IdeWebSocketServer {
62
62
 
63
63
  broadcast(value: unknown): void {
64
64
  const text = JSON.stringify(value);
65
- for (const socket of this.sockets) {
66
- if (socket.readyState === WebSocket.OPEN) socket.send(text);
67
- }
65
+ for (const socket of this.openSockets) socket.send(text);
66
+ }
67
+
68
+ sendToFirstClient(value: unknown): boolean {
69
+ const [socket] = this.openSockets;
70
+ if (!socket) return false;
71
+ socket.send(JSON.stringify(value));
72
+ return true;
68
73
  }
69
74
 
70
75
  async stop(): Promise<void> {
@@ -117,4 +122,8 @@ export class IdeWebSocketServer {
117
122
  }),
118
123
  );
119
124
  }
125
+
126
+ private get openSockets(): WebSocket[] {
127
+ return [...this.sockets].filter((socket) => socket.readyState === WebSocket.OPEN);
128
+ }
120
129
  }