pi-x-ide 1.10.0 → 1.11.1
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 +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/package.json +1 -1
- package/dist/src/pi/context.js +1 -1
- package/dist/src/pi/context.js.map +1 -1
- package/dist/src/pi/diagnostics.d.ts +2 -7
- package/dist/src/pi/diagnostics.js +10 -11
- package/dist/src/pi/diagnostics.js.map +1 -1
- package/dist/src/shared/config-options.js.map +1 -1
- package/dist/src/shared/format.d.ts +0 -1
- package/dist/src/shared/format.js +3 -3
- package/dist/src/shared/format.js.map +1 -1
- package/dist/src/shared/ide-server.d.ts +2 -0
- package/dist/src/shared/ide-server.js +13 -5
- package/dist/src/shared/ide-server.js.map +1 -1
- package/dist/test/diagnostics.test.js +6 -8
- package/dist/test/diagnostics.test.js.map +1 -1
- package/dist/test/ide-server.test.d.ts +1 -0
- package/dist/test/ide-server.test.js +50 -0
- package/dist/test/ide-server.test.js.map +1 -0
- package/package.json +1 -1
- package/src/pi/context.ts +1 -1
- package/src/pi/diagnostics.ts +12 -15
- package/src/shared/config-options.ts +1 -2
- package/src/shared/format.ts +4 -7
- package/src/shared/ide-server.ts +13 -4
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.
|
|
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
|
|
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
package/dist/src/pi/context.js
CHANGED
|
@@ -30,7 +30,7 @@ function registerContextHandlers(pi, runtime) {
|
|
|
30
30
|
runtime.turnSelection = undefined;
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
|
-
const text = `${(0, format_1.formatEditorContext)(runtime.turnSelection
|
|
33
|
+
const text = `${(0, format_1.formatEditorContext)(runtime.turnSelection)}\n<!-- ${CONTEXT_MARKER} -->\n`;
|
|
34
34
|
const message = mergeIntoUserMessage(event.message, text);
|
|
35
35
|
runtime.attachState = "sent";
|
|
36
36
|
runtime.turnSelection = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/pi/context.ts"],"names":[],"mappings":";;AAWA,0DA4BC;AAED,gDAYC;AAED,oDAMC;AA1DD,6CAAoE;AAEpE,+CAA0D;AAE1D,6BAAmC;AAEnC,MAAM,cAAc,GAAG,yBAAyB,CAAC;AAEjD,SAAgB,uBAAuB,CAAC,EAAgB,EAAE,OAAqB;IAC7E,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC1C,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO;QAC7B,IAAI,CAAC,OAAO,CAAC,eAAe;YAAE,OAAO;QACrC,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO;QAE9C,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,uCAAuC;IACvC,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAClC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO;QAC1C,IAAI,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,IAAA,4BAAmB,EAAC,OAAO,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/pi/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,8 @@ import type { DiagnosticFixRequestedParams } from "../shared/protocol";
|
|
|
3
3
|
import type { PiIdeRuntime } from "./state";
|
|
4
4
|
export declare const DIAGNOSTIC_CONTEXT_MARKER = "pi-x-ide/diagnostic-context";
|
|
5
5
|
export declare function buildDiagnosticFixPrompt(params: DiagnosticFixRequestedParams, options?: {
|
|
6
|
-
cwd?: string;
|
|
7
6
|
fixPrompt?: string;
|
|
8
7
|
}): string;
|
|
9
|
-
export declare function buildDiagnosticContextMessage(params: DiagnosticFixRequestedParams
|
|
10
|
-
|
|
11
|
-
}): string;
|
|
12
|
-
export declare function formatDiagnosticContext(params: DiagnosticFixRequestedParams, options?: {
|
|
13
|
-
cwd?: string;
|
|
14
|
-
}): string;
|
|
8
|
+
export declare function buildDiagnosticContextMessage(params: DiagnosticFixRequestedParams): string;
|
|
9
|
+
export declare function formatDiagnosticContext(params: DiagnosticFixRequestedParams): string;
|
|
15
10
|
export declare function handleDiagnosticFixRequested(pi: ExtensionAPI, runtime: PiIdeRuntime, params: DiagnosticFixRequestedParams): void;
|
|
@@ -6,10 +6,9 @@ exports.buildDiagnosticContextMessage = buildDiagnosticContextMessage;
|
|
|
6
6
|
exports.formatDiagnosticContext = formatDiagnosticContext;
|
|
7
7
|
exports.handleDiagnosticFixRequested = handleDiagnosticFixRequested;
|
|
8
8
|
const config_1 = require("../shared/config");
|
|
9
|
-
const paths_1 = require("../shared/paths");
|
|
10
9
|
exports.DIAGNOSTIC_CONTEXT_MARKER = "pi-x-ide/diagnostic-context";
|
|
11
10
|
function buildDiagnosticFixPrompt(params, options = {}) {
|
|
12
|
-
const context = buildDiagnosticContextMessage(params
|
|
11
|
+
const context = buildDiagnosticContextMessage(params);
|
|
13
12
|
const template = options.fixPrompt;
|
|
14
13
|
if (!template) {
|
|
15
14
|
return `Analyze the errors and warnings at the following location, and try to fix them:
|
|
@@ -21,15 +20,15 @@ ${context}`;
|
|
|
21
20
|
return `${template}
|
|
22
21
|
${context}`;
|
|
23
22
|
}
|
|
24
|
-
function buildDiagnosticContextMessage(params
|
|
23
|
+
function buildDiagnosticContextMessage(params) {
|
|
25
24
|
return `<!-- ${exports.DIAGNOSTIC_CONTEXT_MARKER} -->
|
|
26
|
-
${formatDiagnosticContext(params
|
|
25
|
+
${formatDiagnosticContext(params)}
|
|
27
26
|
<!-- ${exports.DIAGNOSTIC_CONTEXT_MARKER} -->
|
|
28
27
|
`;
|
|
29
28
|
}
|
|
30
|
-
function formatDiagnosticContext(params
|
|
31
|
-
const
|
|
32
|
-
const lines = [`File: ${
|
|
29
|
+
function formatDiagnosticContext(params) {
|
|
30
|
+
const filePath = params.filePath;
|
|
31
|
+
const lines = [`File: ${filePath}`, `Source: ${params.source}`];
|
|
33
32
|
if (params.documentVersion !== undefined)
|
|
34
33
|
lines.push(`Document version: ${params.documentVersion}`);
|
|
35
34
|
lines.push(`Trigger range: ${formatRange(params.triggerRange)}`);
|
|
@@ -48,14 +47,14 @@ function formatDiagnosticContext(params, options = {}) {
|
|
|
48
47
|
if (diagnostic.contextLines.length > 0) {
|
|
49
48
|
lines.push("- Context lines:");
|
|
50
49
|
for (const contextLine of diagnostic.contextLines) {
|
|
51
|
-
const marker = contextLine.isPrimary ? "
|
|
50
|
+
const marker = contextLine.isPrimary ? "\\>" : " ";
|
|
52
51
|
lines.push(` ${marker} ${contextLine.line + 1}: ${contextLine.text}`);
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
if (diagnostic.relatedInformation && diagnostic.relatedInformation.length > 0) {
|
|
56
55
|
lines.push("- Related information:");
|
|
57
56
|
for (const related of diagnostic.relatedInformation) {
|
|
58
|
-
const relatedPath =
|
|
57
|
+
const relatedPath = related.filePath;
|
|
59
58
|
lines.push(` - ${relatedPath} ${formatRange(related.range)}: ${related.message}`);
|
|
60
59
|
}
|
|
61
60
|
}
|
|
@@ -69,12 +68,12 @@ function handleDiagnosticFixRequested(pi, runtime, params) {
|
|
|
69
68
|
if (params.action === "send-diagnostic") {
|
|
70
69
|
if (!ctx.hasUI)
|
|
71
70
|
return;
|
|
72
|
-
ctx.ui.pasteToEditor(buildDiagnosticContextMessage(params
|
|
71
|
+
ctx.ui.pasteToEditor(buildDiagnosticContextMessage(params));
|
|
73
72
|
ctx.ui.notify("VS Code diagnostic context added to input.", "info");
|
|
74
73
|
return;
|
|
75
74
|
}
|
|
76
75
|
const fixPrompt = (0, config_1.readPiConfigFixPrompt)();
|
|
77
|
-
const prompt = buildDiagnosticFixPrompt(params, {
|
|
76
|
+
const prompt = buildDiagnosticFixPrompt(params, { fixPrompt });
|
|
78
77
|
if (ctx.isIdle()) {
|
|
79
78
|
pi.sendUserMessage(prompt);
|
|
80
79
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/pi/diagnostics.ts"],"names":[],"mappings":";;;AAQA,4DAeC;AAED,
|
|
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,
|
|
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"}
|
|
@@ -18,6 +18,5 @@ export declare function parseRangeMention(input: string): ParsedRangeMention | u
|
|
|
18
18
|
export declare function describeRanges(ranges: SelectionRange[], format?: RangeFormat): string;
|
|
19
19
|
export declare function snapshotKey(snapshot: EditorSelectionSnapshot): string;
|
|
20
20
|
export declare function formatEditorContext(snapshot: EditorSelectionSnapshot, options?: {
|
|
21
|
-
cwd?: string;
|
|
22
21
|
maxChars?: number;
|
|
23
22
|
}): string;
|
|
@@ -57,10 +57,10 @@ function snapshotKey(snapshot) {
|
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
function formatEditorContext(snapshot, options = {}) {
|
|
60
|
-
const
|
|
60
|
+
const filePath = snapshot.filePath;
|
|
61
61
|
const maxChars = options.maxChars ?? 24_000;
|
|
62
62
|
if (snapshot.ranges.length === 0) {
|
|
63
|
-
return `<system-reminder>\nThe user currently has \`${
|
|
63
|
+
return `<system-reminder>\nThe user currently has \`${filePath}\` open in ${snapshot.source}. This may or may not be relevant.\n</system-reminder>`;
|
|
64
64
|
}
|
|
65
65
|
const sections = [];
|
|
66
66
|
let remaining = maxChars;
|
|
@@ -74,7 +74,7 @@ function formatEditorContext(snapshot, options = {}) {
|
|
|
74
74
|
truncated = true;
|
|
75
75
|
}
|
|
76
76
|
remaining -= text.length;
|
|
77
|
-
sections.push(`${label} lines ${startLine}-${endLine} from \`${
|
|
77
|
+
sections.push(`${label} lines ${startLine}-${endLine} from \`${filePath}\` in ${snapshot.source}:\n\n\`\`\`\n${text}\n\`\`\``);
|
|
78
78
|
if (remaining <= 0)
|
|
79
79
|
break;
|
|
80
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/shared/format.ts"],"names":[],"mappings":";;AAKA,0CAKC;AAED,wCAIC;AAED,gDAOC;AAQD,8CAQC;AAED,wCAIC;AAED,kCAWC;AAED,
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/shared/format.ts"],"names":[],"mappings":";;AAKA,0CAKC;AAED,wCAIC;AAED,gDAOC;AAQD,8CAQC;AAED,wCAIC;AAED,kCAWC;AAED,kDA6BC;AA1FD,mCAAgD;AAIhD,SAAgB,eAAe,CAAC,KAAqB;IACnD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QACzC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,KAAqB,EAAE,SAAsB,OAAO;IACjF,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,KAAK,SAAS,EAAE,CAAC;IACnD,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC;AACxF,CAAC;AAED,SAAgB,kBAAkB,CAChC,QAAiC,EACjC,UAAkD,EAAE;IAEpD,MAAM,GAAG,GAAG,IAAA,6BAAqB,EAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AAC/E,CAAC;AAQD,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC5E,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACjG,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3F,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED,SAAgB,cAAc,CAAC,MAAwB,EAAE,SAAsB,OAAO;IACpF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjG,CAAC;AAED,SAAgB,WAAW,CAAC,QAAiC;IAC3D,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACtC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK;YAC5B,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG;YACxB,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;SAC9B,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,mBAAmB,CAAC,QAAiC,EAAE,UAAiC,EAAE;IACxG,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAE5C,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,+CAA+C,QAAQ,cAAc,QAAQ,CAAC,MAAM,wDAAwD,CAAC;IACtJ,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACvD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,KAAK,GAAG,CAAC,EAAE,CAAC;QAC5F,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YAC7C,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,CACX,GAAG,KAAK,UAAU,SAAS,IAAI,OAAO,WAAW,QAAQ,SAAS,QAAQ,CAAC,MAAM,gBAAgB,IAAI,UAAU,CAChH,CAAC;QACF,IAAI,SAAS,IAAI,CAAC;YAAE,MAAM;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,OAAO,sBAAsB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,uCAAuC,MAAM,sBAAsB,CAAC;AACxH,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.
|
|
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.
|
|
91
|
-
|
|
92
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAsD;AACtD,yCAAgD;AAChD,yCAMoB;AACpB,qCAA4C;AAC5C,6BAAqC;AAErC,MAAa,kBAAkB;IAMV;IACA;IACA;IAPX,UAAU,CAAU;IACpB,GAAG,CAAmB;IACb,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;IAEhD,YACmB,SAAiB,EACjB,UAA+D,EAC/D,mBAA+D;QAF/D,cAAS,GAAT,SAAS,CAAQ;QACjB,eAAU,GAAV,UAAU,CAAqD;QAC/D,wBAAmB,GAAnB,mBAAmB,CAA4C;IAC/E,CAAC;IAEJ,IAAI,IAAI;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ide-server.js","sourceRoot":"","sources":["../../../src/shared/ide-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,21 +63,20 @@ void (0, node_test_1.default)("validates diagnostic fix request params", () => {
|
|
|
63
63
|
}), false);
|
|
64
64
|
});
|
|
65
65
|
void (0, node_test_1.default)("builds diagnostic fix prompt from payload", () => {
|
|
66
|
-
const prompt = (0, diagnostics_1.buildDiagnosticFixPrompt)(diagnosticPayload
|
|
66
|
+
const prompt = (0, diagnostics_1.buildDiagnosticFixPrompt)(diagnosticPayload);
|
|
67
67
|
strict_1.default.match(prompt, /pi-x-ide\/diagnostic-context/);
|
|
68
68
|
strict_1.default.match(prompt, /^Analyze the errors and warnings at the following location, and try to fix them:/);
|
|
69
|
-
strict_1.default.match(prompt, /File: src\/main\.ts/);
|
|
69
|
+
strict_1.default.match(prompt, /File: \/repo\/src\/main\.ts/);
|
|
70
70
|
strict_1.default.match(prompt, /Severity: error/);
|
|
71
71
|
strict_1.default.match(prompt, /Source: ts/);
|
|
72
72
|
strict_1.default.match(prompt, /Code: 2322 \(https:\/\/typescript\.tv\/errors\/2322\)/);
|
|
73
73
|
strict_1.default.match(prompt, /Type 'string' is not assignable to type 'number'\./);
|
|
74
74
|
strict_1.default.match(prompt, /```\nvalue\n```/);
|
|
75
75
|
strict_1.default.match(prompt, /> 10: const count: number = value;/);
|
|
76
|
-
strict_1.default.match(prompt,
|
|
76
|
+
strict_1.default.match(prompt, /\/repo\/src\/types\.ts L2:C1-L2:C17: The expected type is declared here\./);
|
|
77
77
|
});
|
|
78
78
|
void (0, node_test_1.default)("replaces {DIAGNOSTIC} placeholder with context when fix prompt includes it", () => {
|
|
79
79
|
const prompt = (0, diagnostics_1.buildDiagnosticFixPrompt)(diagnosticPayload, {
|
|
80
|
-
cwd: "/repo",
|
|
81
80
|
fixPrompt: "Fix the problem:\n{DIAGNOSTIC}",
|
|
82
81
|
});
|
|
83
82
|
strict_1.default.doesNotMatch(prompt, /{DIAGNOSTIC}/);
|
|
@@ -88,7 +87,6 @@ void (0, node_test_1.default)("replaces {DIAGNOSTIC} placeholder with context wh
|
|
|
88
87
|
void (0, node_test_1.default)("appends context after prompt when fix prompt omits {DIAGNOSTIC}", () => {
|
|
89
88
|
const contextMarker = "<!-- pi-x-ide/diagnostic-context -->";
|
|
90
89
|
const prompt = (0, diagnostics_1.buildDiagnosticFixPrompt)(diagnosticPayload, {
|
|
91
|
-
cwd: "/repo",
|
|
92
90
|
fixPrompt: "Please fix the following issue.",
|
|
93
91
|
});
|
|
94
92
|
strict_1.default.match(prompt, /^Please fix the following issue\./);
|
|
@@ -99,14 +97,14 @@ void (0, node_test_1.default)("appends context after prompt when fix prompt omit
|
|
|
99
97
|
strict_1.default.ok(contextIndex > promptEndIndex);
|
|
100
98
|
});
|
|
101
99
|
void (0, node_test_1.default)("falls back to default prompt when fix prompt is empty", () => {
|
|
102
|
-
const prompt = (0, diagnostics_1.buildDiagnosticFixPrompt)(diagnosticPayload, {
|
|
100
|
+
const prompt = (0, diagnostics_1.buildDiagnosticFixPrompt)(diagnosticPayload, { fixPrompt: "" });
|
|
103
101
|
strict_1.default.match(prompt, /^Analyze the errors and warnings/);
|
|
104
102
|
strict_1.default.match(prompt, /pi-x-ide\/diagnostic-context/);
|
|
105
103
|
});
|
|
106
104
|
void (0, node_test_1.default)("builds diagnostic context message without triggering fix instructions", () => {
|
|
107
|
-
const message = (0, diagnostics_1.buildDiagnosticContextMessage)(diagnosticPayload
|
|
105
|
+
const message = (0, diagnostics_1.buildDiagnosticContextMessage)(diagnosticPayload);
|
|
108
106
|
strict_1.default.doesNotMatch(message, /^<!-- Diagnostic Context -->/);
|
|
109
|
-
strict_1.default.match(message, /File: src\/main\.ts/);
|
|
107
|
+
strict_1.default.match(message, /File: \/repo\/src\/main\.ts/);
|
|
110
108
|
strict_1.default.doesNotMatch(message, /try to fix/);
|
|
111
109
|
strict_1.default.match(message, /<!-- pi-x-ide\/diagnostic-context -->/);
|
|
112
110
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.test.js","sourceRoot":"","sources":["../../test/diagnostics.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"diagnostics.test.js","sourceRoot":"","sources":["../../test/diagnostics.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAwC;AACxC,0DAA6B;AAC7B,uDAI+B;AAC/B,iDAA6D;AAC7D,2CAAgD;AAEhD,iDAAsE;AAEtE,MAAM,iBAAiB,GAAiC;IACtD,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,mBAAmB;IAC7B,eAAe,EAAE,OAAO;IACxB,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QAChC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;KAChC;IACD,WAAW,EAAE;QACX;YACE,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,mDAAmD;YAC5D,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,mCAAmC,EAAE;YAClE,KAAK,EAAE;gBACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;gBAChC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;aAChC;YACD,YAAY,EAAE,OAAO;YACrB,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,SAAS,EAAE,KAAK,EAAE;gBAChE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,SAAS,EAAE,IAAI,EAAE;gBAClE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,KAAK,EAAE;aAC5D;YACD,kBAAkB,EAAE;gBAClB;oBACE,QAAQ,EAAE,oBAAoB;oBAC9B,KAAK,EAAE;wBACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;wBAChC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;qBAChC;oBACD,OAAO,EAAE,qCAAqC;iBAC/C;aACF;SACF;KACF;IACD,UAAU,EAAE,aAAa;CAC1B,CAAC;AAEF,KAAK,IAAA,mBAAI,EAAC,yCAAyC,EAAE,GAAG,EAAE;IACxD,gBAAM,CAAC,KAAK,CAAC,IAAA,uCAA8B,EAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;IACtE,gBAAM,CAAC,KAAK,CAAC,IAAA,uCAA8B,EAAC,EAAE,GAAG,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACxG,gBAAM,CAAC,KAAK,CAAC,IAAA,uCAA8B,EAAC,EAAE,GAAG,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACjG,gBAAM,CAAC,KAAK,CAAC,IAAA,uCAA8B,EAAC,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/F,gBAAM,CAAC,KAAK,CACV,IAAA,uCAA8B,EAAC;QAC7B,GAAG,iBAAiB;QACpB,WAAW,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;KAChF,CAAC,EACF,KAAK,CACN,CAAC;IACF,gBAAM,CAAC,KAAK,CACV,IAAA,uCAA8B,EAAC;QAC7B,GAAG,iBAAiB;QACpB,WAAW,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;KACrG,CAAC,EACF,KAAK,CACN,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,2CAA2C,EAAE,GAAG,EAAE;IAC1D,MAAM,MAAM,GAAG,IAAA,sCAAwB,EAAC,iBAAiB,CAAC,CAAC;IAE3D,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;IACrD,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kFAAkF,CAAC,CAAC;IACzG,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IACpD,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxC,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnC,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,uDAAuD,CAAC,CAAC;IAC9E,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,oDAAoD,CAAC,CAAC;IAC3E,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxC,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IAC3D,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,2EAA2E,CAAC,CAAC;AACpG,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,4EAA4E,EAAE,GAAG,EAAE;IAC3F,MAAM,MAAM,GAAG,IAAA,sCAAwB,EAAC,iBAAiB,EAAE;QACzD,SAAS,EAAE,gCAAgC;KAC5C,CAAC,CAAC;IAEH,gBAAM,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC1C,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;IACrD,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,oDAAoD,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,iEAAiE,EAAE,GAAG,EAAE;IAChF,MAAM,aAAa,GAAG,sCAAsC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAA,sCAAwB,EAAC,iBAAiB,EAAE;QACzD,SAAS,EAAE,iCAAiC;KAC7C,CAAC,CAAC;IAEH,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;IAC1D,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;IACrD,yCAAyC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,GAAG,iCAAiC,CAAC,MAAM,CAAC;IACpH,gBAAM,CAAC,EAAE,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,uDAAuD,EAAE,GAAG,EAAE;IACtE,MAAM,MAAM,GAAG,IAAA,sCAAwB,EAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAE9E,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;IACzD,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,uEAAuE,EAAE,GAAG,EAAE;IACtF,MAAM,OAAO,GAAG,IAAA,2CAA6B,EAAC,iBAAiB,CAAC,CAAC;IAEjE,gBAAM,CAAC,YAAY,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;IAC7D,gBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;IACrD,gBAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3C,gBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,yDAAyD,EAAE,GAAG,EAAE;IACxE,MAAM,OAAO,GAAG,IAAA,qBAAa,GAAE,CAAC;IAChC,OAAO,CAAC,GAAG,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAmD,EAAE,CAAC;IAChE,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE1B,IAAA,0CAA4B,EAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAE7D,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7B,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1C,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,8BAA8B,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,2DAA2D,EAAE,GAAG,EAAE;IAC1E,MAAM,OAAO,GAAG,IAAA,qBAAa,GAAE,CAAC;IAChC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAmD,EAAE,CAAC;IAChE,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE1B,IAAA,0CAA4B,EAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAE7D,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7B,gBAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9D,gBAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,wCAAwC,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,iEAAiE,EAAE,GAAG,EAAE;IAChF,MAAM,MAAM,GAAG,IAAA,8BAAqB,EAAC,+BAA+B,CAAC,CAAC;IACtE,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,sEAAsE,EAAE,GAAG,EAAE;IACrF,MAAM,OAAO,GAAG,IAAA,qBAAa,GAAE,CAAC;IAChC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAmD,EAAE,CAAC;IAChE,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE1B,IAAA,0CAA4B,EAAC,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAE/F,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7B,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/B,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,8BAA8B,CAAC,CAAC;IAC9D,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,oDAAoD,CAAC,CAAC;IACpF,gBAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,4CAA4C,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC,CAAC;AAEH,SAAS,QAAQ,CACf,IAAoD;IAEpD,OAAO;QACL,eAAe,EAAE,CAAC,OAAgB,EAAE,OAAiB,EAAE,EAAE;YACvD,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAClC,CAAC;KACoD,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa,CAAC,OAItB;IACC,OAAO;QACL,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI;QAC1B,EAAE,EAAE;YACF,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;YACjE,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;SAC5D;KACsD,CAAC;AAC5D,CAAC"}
|
|
@@ -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
package/src/pi/context.ts
CHANGED
|
@@ -30,7 +30,7 @@ export function registerContextHandlers(pi: ExtensionAPI, runtime: PiIdeRuntime)
|
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
const text = `${formatEditorContext(runtime.turnSelection
|
|
33
|
+
const text = `${formatEditorContext(runtime.turnSelection)}\n<!-- ${CONTEXT_MARKER} -->\n`;
|
|
34
34
|
const message = mergeIntoUserMessage(event.message, text);
|
|
35
35
|
runtime.attachState = "sent";
|
|
36
36
|
runtime.turnSelection = undefined;
|
package/src/pi/diagnostics.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent" with { "resolution-mode": "import" };
|
|
2
2
|
import { readPiConfigFixPrompt } from "../shared/config";
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
import type { DiagnosticFixRequestedParams, IdeDiagnosticCode, Position } from "../shared/protocol";
|
|
5
5
|
import type { PiIdeRuntime } from "./state";
|
|
6
6
|
|
|
@@ -8,9 +8,9 @@ export const DIAGNOSTIC_CONTEXT_MARKER = "pi-x-ide/diagnostic-context";
|
|
|
8
8
|
|
|
9
9
|
export function buildDiagnosticFixPrompt(
|
|
10
10
|
params: DiagnosticFixRequestedParams,
|
|
11
|
-
options: {
|
|
11
|
+
options: { fixPrompt?: string } = {},
|
|
12
12
|
): string {
|
|
13
|
-
const context = buildDiagnosticContextMessage(params
|
|
13
|
+
const context = buildDiagnosticContextMessage(params);
|
|
14
14
|
const template = options.fixPrompt;
|
|
15
15
|
if (!template) {
|
|
16
16
|
return `Analyze the errors and warnings at the following location, and try to fix them:
|
|
@@ -23,19 +23,16 @@ ${context}`;
|
|
|
23
23
|
${context}`;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export function buildDiagnosticContextMessage(
|
|
27
|
-
params: DiagnosticFixRequestedParams,
|
|
28
|
-
options: { cwd?: string } = {},
|
|
29
|
-
): string {
|
|
26
|
+
export function buildDiagnosticContextMessage(params: DiagnosticFixRequestedParams): string {
|
|
30
27
|
return `<!-- ${DIAGNOSTIC_CONTEXT_MARKER} -->
|
|
31
|
-
${formatDiagnosticContext(params
|
|
28
|
+
${formatDiagnosticContext(params)}
|
|
32
29
|
<!-- ${DIAGNOSTIC_CONTEXT_MARKER} -->
|
|
33
30
|
`;
|
|
34
31
|
}
|
|
35
32
|
|
|
36
|
-
export function formatDiagnosticContext(params: DiagnosticFixRequestedParams
|
|
37
|
-
const
|
|
38
|
-
const lines = [`File: ${
|
|
33
|
+
export function formatDiagnosticContext(params: DiagnosticFixRequestedParams): string {
|
|
34
|
+
const filePath = params.filePath;
|
|
35
|
+
const lines = [`File: ${filePath}`, `Source: ${params.source}`];
|
|
39
36
|
if (params.documentVersion !== undefined) lines.push(`Document version: ${params.documentVersion}`);
|
|
40
37
|
lines.push(`Trigger range: ${formatRange(params.triggerRange)}`);
|
|
41
38
|
|
|
@@ -54,7 +51,7 @@ export function formatDiagnosticContext(params: DiagnosticFixRequestedParams, op
|
|
|
54
51
|
if (diagnostic.contextLines.length > 0) {
|
|
55
52
|
lines.push("- Context lines:");
|
|
56
53
|
for (const contextLine of diagnostic.contextLines) {
|
|
57
|
-
const marker = contextLine.isPrimary ? "
|
|
54
|
+
const marker = contextLine.isPrimary ? "\\>" : " ";
|
|
58
55
|
lines.push(` ${marker} ${contextLine.line + 1}: ${contextLine.text}`);
|
|
59
56
|
}
|
|
60
57
|
}
|
|
@@ -62,7 +59,7 @@ export function formatDiagnosticContext(params: DiagnosticFixRequestedParams, op
|
|
|
62
59
|
if (diagnostic.relatedInformation && diagnostic.relatedInformation.length > 0) {
|
|
63
60
|
lines.push("- Related information:");
|
|
64
61
|
for (const related of diagnostic.relatedInformation) {
|
|
65
|
-
const relatedPath =
|
|
62
|
+
const relatedPath = related.filePath;
|
|
66
63
|
lines.push(` - ${relatedPath} ${formatRange(related.range)}: ${related.message}`);
|
|
67
64
|
}
|
|
68
65
|
}
|
|
@@ -81,13 +78,13 @@ export function handleDiagnosticFixRequested(
|
|
|
81
78
|
|
|
82
79
|
if (params.action === "send-diagnostic") {
|
|
83
80
|
if (!ctx.hasUI) return;
|
|
84
|
-
ctx.ui.pasteToEditor(buildDiagnosticContextMessage(params
|
|
81
|
+
ctx.ui.pasteToEditor(buildDiagnosticContextMessage(params));
|
|
85
82
|
ctx.ui.notify("VS Code diagnostic context added to input.", "info");
|
|
86
83
|
return;
|
|
87
84
|
}
|
|
88
85
|
|
|
89
86
|
const fixPrompt = readPiConfigFixPrompt();
|
|
90
|
-
const prompt = buildDiagnosticFixPrompt(params, {
|
|
87
|
+
const prompt = buildDiagnosticFixPrompt(params, { fixPrompt });
|
|
91
88
|
if (ctx.isIdle()) {
|
|
92
89
|
pi.sendUserMessage(prompt);
|
|
93
90
|
return;
|
|
@@ -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
|
},
|
package/src/shared/format.ts
CHANGED
|
@@ -60,15 +60,12 @@ export function snapshotKey(snapshot: EditorSelectionSnapshot): string {
|
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export function formatEditorContext(
|
|
64
|
-
snapshot
|
|
65
|
-
options: { cwd?: string; maxChars?: number } = {},
|
|
66
|
-
): string {
|
|
67
|
-
const rel = toRelativeDisplayPath(snapshot.filePath, snapshot.workspaceFolder, options.cwd);
|
|
63
|
+
export function formatEditorContext(snapshot: EditorSelectionSnapshot, options: { maxChars?: number } = {}): string {
|
|
64
|
+
const filePath = snapshot.filePath;
|
|
68
65
|
const maxChars = options.maxChars ?? 24_000;
|
|
69
66
|
|
|
70
67
|
if (snapshot.ranges.length === 0) {
|
|
71
|
-
return `<system-reminder>\nThe user currently has \`${
|
|
68
|
+
return `<system-reminder>\nThe user currently has \`${filePath}\` open in ${snapshot.source}. This may or may not be relevant.\n</system-reminder>`;
|
|
72
69
|
}
|
|
73
70
|
|
|
74
71
|
const sections: string[] = [];
|
|
@@ -85,7 +82,7 @@ export function formatEditorContext(
|
|
|
85
82
|
}
|
|
86
83
|
remaining -= text.length;
|
|
87
84
|
sections.push(
|
|
88
|
-
`${label} lines ${startLine}-${endLine} from \`${
|
|
85
|
+
`${label} lines ${startLine}-${endLine} from \`${filePath}\` in ${snapshot.source}:\n\n\`\`\`\n${text}\n\`\`\``,
|
|
89
86
|
);
|
|
90
87
|
if (remaining <= 0) break;
|
|
91
88
|
}
|
package/src/shared/ide-server.ts
CHANGED
|
@@ -28,7 +28,7 @@ export class IdeWebSocketServer {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
get clientCount(): number {
|
|
31
|
-
return this.
|
|
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.
|
|
66
|
-
|
|
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
|
}
|