pi-x-ide 1.11.0 → 1.12.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/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 +9 -10
- package/dist/src/pi/diagnostics.js.map +1 -1
- package/dist/src/pi/ui.d.ts +9 -2
- package/dist/src/pi/ui.js +87 -32
- package/dist/src/pi/ui.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/test/diagnostics.test.js +6 -8
- package/dist/test/diagnostics.test.js.map +1 -1
- package/package.json +1 -1
- package/src/pi/context.ts +1 -1
- package/src/pi/diagnostics.ts +11 -14
- package/src/pi/ui.ts +98 -28
- package/src/shared/format.ts +4 -7
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)}`);
|
|
@@ -55,7 +54,7 @@ function formatDiagnosticContext(params, options = {}) {
|
|
|
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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"}
|
package/dist/src/pi/ui.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import type { ExtensionContext } from "@earendil-works/pi-coding-agent" with {
|
|
1
|
+
import type { ExtensionContext, ThemeColor } from "@earendil-works/pi-coding-agent" with {
|
|
2
|
+
"resolution-mode": "import"
|
|
3
|
+
};
|
|
2
4
|
import type { PiIdeRuntime } from "./state";
|
|
5
|
+
interface StatusSegment {
|
|
6
|
+
text: string;
|
|
7
|
+
color: ThemeColor;
|
|
8
|
+
}
|
|
3
9
|
export declare function updateIdeUi(runtime: PiIdeRuntime, ctx?: ExtensionContext | undefined): void;
|
|
4
10
|
export declare function clearIdeUi(runtime: PiIdeRuntime, ctx?: ExtensionContext | undefined): void;
|
|
5
|
-
export declare function
|
|
11
|
+
export declare function buildStatusSegments(runtime: PiIdeRuntime, cwd?: string, spinnerFrame?: string): StatusSegment[];
|
|
6
12
|
export declare function buildWidget(runtime: PiIdeRuntime, cwd?: string): string[] | undefined;
|
|
13
|
+
export {};
|
package/dist/src/pi/ui.js
CHANGED
|
@@ -2,57 +2,112 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.updateIdeUi = updateIdeUi;
|
|
4
4
|
exports.clearIdeUi = clearIdeUi;
|
|
5
|
-
exports.
|
|
5
|
+
exports.buildStatusSegments = buildStatusSegments;
|
|
6
6
|
exports.buildWidget = buildWidget;
|
|
7
7
|
const format_1 = require("../shared/format");
|
|
8
8
|
const paths_1 = require("../shared/paths");
|
|
9
|
+
const IDE_ICON = "⧉";
|
|
10
|
+
const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
11
|
+
const SPINNER_INTERVAL_MS = 90;
|
|
9
12
|
function updateIdeUi(runtime, ctx = runtime.ctx) {
|
|
10
13
|
if (!ctx?.hasUI)
|
|
11
14
|
return;
|
|
12
|
-
ctx.ui.setWidget("pi-x-ide", (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
ctx.ui.setWidget("pi-x-ide", (tui, theme) => {
|
|
16
|
+
let frame = 0;
|
|
17
|
+
let timer;
|
|
18
|
+
// Drive the connecting spinner: tick a frame and request a redraw only while connecting.
|
|
19
|
+
const animate = (active) => {
|
|
20
|
+
if (active && !timer) {
|
|
21
|
+
timer = setInterval(() => {
|
|
22
|
+
frame = (frame + 1) % SPINNER_FRAMES.length;
|
|
23
|
+
tui.requestRender();
|
|
24
|
+
}, SPINNER_INTERVAL_MS);
|
|
25
|
+
timer.unref?.();
|
|
26
|
+
}
|
|
27
|
+
else if (!active && timer) {
|
|
28
|
+
clearInterval(timer);
|
|
29
|
+
timer = undefined;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
render(width) {
|
|
34
|
+
const connecting = runtime.enabled && runtime.connectionStatus === "connecting";
|
|
35
|
+
animate(connecting);
|
|
36
|
+
const segments = buildStatusSegments(runtime, ctx.cwd, SPINNER_FRAMES[frame]);
|
|
37
|
+
if (segments.length === 0 || width <= 0)
|
|
38
|
+
return [];
|
|
39
|
+
const visible = truncateSegments(segments, width);
|
|
40
|
+
const plainLength = visible.reduce((sum, segment) => sum + segment.text.length, 0);
|
|
41
|
+
const pad = " ".repeat(Math.max(0, width - plainLength));
|
|
42
|
+
return [pad + visible.map((segment) => theme.fg(segment.color, segment.text)).join("")];
|
|
43
|
+
},
|
|
44
|
+
invalidate() { },
|
|
45
|
+
dispose() {
|
|
46
|
+
animate(false);
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}, { placement: "aboveEditor" });
|
|
22
50
|
}
|
|
23
51
|
function clearIdeUi(runtime, ctx = runtime.ctx) {
|
|
24
52
|
if (!ctx?.hasUI)
|
|
25
53
|
return;
|
|
26
54
|
ctx.ui.setWidget("pi-x-ide", undefined);
|
|
27
55
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
return
|
|
56
|
+
// Truncates colored segments to the given width, appending an ellipsis when content overflows.
|
|
57
|
+
function truncateSegments(segments, width) {
|
|
58
|
+
const total = segments.reduce((sum, segment) => sum + segment.text.length, 0);
|
|
59
|
+
if (total <= width)
|
|
60
|
+
return segments;
|
|
61
|
+
const fallbackColor = segments[0]?.color ?? "dim";
|
|
33
62
|
if (width <= 3)
|
|
34
|
-
return ".".repeat(width);
|
|
35
|
-
|
|
63
|
+
return [{ text: ".".repeat(width), color: fallbackColor }];
|
|
64
|
+
const limit = width - 3;
|
|
65
|
+
const visible = [];
|
|
66
|
+
let used = 0;
|
|
67
|
+
for (const segment of segments) {
|
|
68
|
+
if (used >= limit)
|
|
69
|
+
break;
|
|
70
|
+
const room = limit - used;
|
|
71
|
+
if (segment.text.length <= room) {
|
|
72
|
+
visible.push(segment);
|
|
73
|
+
used += segment.text.length;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
visible.push({ text: segment.text.slice(0, room), color: segment.color });
|
|
77
|
+
used = limit;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
visible.push({ text: "...", color: visible[visible.length - 1]?.color ?? fallbackColor });
|
|
81
|
+
return visible;
|
|
36
82
|
}
|
|
37
|
-
function
|
|
38
|
-
|
|
83
|
+
function buildStatusSegments(runtime, cwd, spinnerFrame = SPINNER_FRAMES[0]) {
|
|
84
|
+
if (!runtime.enabled)
|
|
85
|
+
return [];
|
|
86
|
+
switch (runtime.connectionStatus) {
|
|
87
|
+
case "connecting":
|
|
88
|
+
return [{ text: `${IDE_ICON} ${spinnerFrame}`, color: "dim" }];
|
|
89
|
+
case "error":
|
|
90
|
+
return [
|
|
91
|
+
{ text: `${IDE_ICON} `, color: "dim" },
|
|
92
|
+
{ text: "✕", color: "error" },
|
|
93
|
+
];
|
|
94
|
+
case "connected":
|
|
95
|
+
return buildConnectedSegments(runtime, cwd);
|
|
96
|
+
default:
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
39
99
|
}
|
|
40
|
-
function
|
|
41
|
-
if (!runtime.enabled || runtime.connectionStatus === "disabled")
|
|
42
|
-
return "Pi x IDE: off";
|
|
43
|
-
if (runtime.connectionStatus === "connecting")
|
|
44
|
-
return "Pi x IDE: connecting";
|
|
45
|
-
if (runtime.connectionStatus === "error")
|
|
46
|
-
return `Pi x IDE: error${runtime.connectionMessage ? ` ${runtime.connectionMessage}` : ""}`;
|
|
47
|
-
if (runtime.connectionStatus !== "connected")
|
|
48
|
-
return "Pi x IDE: disconnected";
|
|
49
|
-
const ide = runtime.connectedServer?.ide ?? runtime.currentCandidate?.lock.ide ?? "ide";
|
|
100
|
+
function buildConnectedSegments(runtime, cwd) {
|
|
50
101
|
const selection = runtime.latestSelection;
|
|
51
102
|
if (!selection)
|
|
52
|
-
return `${
|
|
103
|
+
return [{ text: `${IDE_ICON} ✓`, color: "dim" }];
|
|
53
104
|
const rel = (0, paths_1.toRelativeDisplayPath)(selection.filePath, selection.workspaceFolder, cwd);
|
|
54
105
|
const range = (0, format_1.describeRanges)(selection.ranges);
|
|
55
|
-
|
|
106
|
+
// Pending selections are still queued for the next prompt (⇡, success); sent ones are attached (✓, dim).
|
|
107
|
+
const pending = runtime.attachState === "pending";
|
|
108
|
+
const marker = pending ? "⇡" : "✓";
|
|
109
|
+
const color = pending ? "success" : "dim";
|
|
110
|
+
return [{ text: `${IDE_ICON} ${marker} ${rel}${range === "open file" ? "" : range}`, color }];
|
|
56
111
|
}
|
|
57
112
|
function buildWidget(runtime, cwd) {
|
|
58
113
|
if (!runtime.enabled || runtime.connectionStatus === "disabled")
|
package/dist/src/pi/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/pi/ui.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/pi/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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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":"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"}
|
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
|
|
|
@@ -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;
|
package/src/pi/ui.ts
CHANGED
|
@@ -1,23 +1,59 @@
|
|
|
1
|
-
import type { ExtensionContext } from "@earendil-works/pi-coding-agent" with {
|
|
1
|
+
import type { ExtensionContext, ThemeColor } from "@earendil-works/pi-coding-agent" with {
|
|
2
|
+
"resolution-mode": "import",
|
|
3
|
+
};
|
|
2
4
|
import { describeRanges } from "../shared/format";
|
|
3
5
|
import { toRelativeDisplayPath } from "../shared/paths";
|
|
4
6
|
import type { PiIdeRuntime } from "./state";
|
|
5
7
|
|
|
8
|
+
const IDE_ICON = "⧉";
|
|
9
|
+
const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
10
|
+
const SPINNER_INTERVAL_MS = 90;
|
|
11
|
+
|
|
12
|
+
interface StatusSegment {
|
|
13
|
+
text: string;
|
|
14
|
+
color: ThemeColor;
|
|
15
|
+
}
|
|
16
|
+
|
|
6
17
|
export function updateIdeUi(runtime: PiIdeRuntime, ctx: ExtensionContext | undefined = runtime.ctx): void {
|
|
7
18
|
if (!ctx?.hasUI) return;
|
|
8
19
|
|
|
9
20
|
ctx.ui.setWidget(
|
|
10
21
|
"pi-x-ide",
|
|
11
|
-
(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
(tui, theme) => {
|
|
23
|
+
let frame = 0;
|
|
24
|
+
let timer: ReturnType<typeof setInterval> | undefined;
|
|
25
|
+
|
|
26
|
+
// Drive the connecting spinner: tick a frame and request a redraw only while connecting.
|
|
27
|
+
const animate = (active: boolean): void => {
|
|
28
|
+
if (active && !timer) {
|
|
29
|
+
timer = setInterval(() => {
|
|
30
|
+
frame = (frame + 1) % SPINNER_FRAMES.length;
|
|
31
|
+
tui.requestRender();
|
|
32
|
+
}, SPINNER_INTERVAL_MS);
|
|
33
|
+
timer.unref?.();
|
|
34
|
+
} else if (!active && timer) {
|
|
35
|
+
clearInterval(timer);
|
|
36
|
+
timer = undefined;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
render(width: number): string[] {
|
|
42
|
+
const connecting = runtime.enabled && runtime.connectionStatus === "connecting";
|
|
43
|
+
animate(connecting);
|
|
44
|
+
const segments = buildStatusSegments(runtime, ctx.cwd, SPINNER_FRAMES[frame]);
|
|
45
|
+
if (segments.length === 0 || width <= 0) return [];
|
|
46
|
+
const visible = truncateSegments(segments, width);
|
|
47
|
+
const plainLength = visible.reduce((sum, segment) => sum + segment.text.length, 0);
|
|
48
|
+
const pad = " ".repeat(Math.max(0, width - plainLength));
|
|
49
|
+
return [pad + visible.map((segment) => theme.fg(segment.color, segment.text)).join("")];
|
|
50
|
+
},
|
|
51
|
+
invalidate() {},
|
|
52
|
+
dispose() {
|
|
53
|
+
animate(false);
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
},
|
|
21
57
|
{ placement: "aboveEditor" },
|
|
22
58
|
);
|
|
23
59
|
}
|
|
@@ -27,30 +63,64 @@ export function clearIdeUi(runtime: PiIdeRuntime, ctx: ExtensionContext | undefi
|
|
|
27
63
|
ctx.ui.setWidget("pi-x-ide", undefined);
|
|
28
64
|
}
|
|
29
65
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
}
|
|
66
|
+
// Truncates colored segments to the given width, appending an ellipsis when content overflows.
|
|
67
|
+
function truncateSegments(segments: StatusSegment[], width: number): StatusSegment[] {
|
|
68
|
+
const total = segments.reduce((sum, segment) => sum + segment.text.length, 0);
|
|
69
|
+
if (total <= width) return segments;
|
|
70
|
+
const fallbackColor = segments[0]?.color ?? "dim";
|
|
71
|
+
if (width <= 3) return [{ text: ".".repeat(width), color: fallbackColor }];
|
|
36
72
|
|
|
37
|
-
|
|
38
|
-
|
|
73
|
+
const limit = width - 3;
|
|
74
|
+
const visible: StatusSegment[] = [];
|
|
75
|
+
let used = 0;
|
|
76
|
+
for (const segment of segments) {
|
|
77
|
+
if (used >= limit) break;
|
|
78
|
+
const room = limit - used;
|
|
79
|
+
if (segment.text.length <= room) {
|
|
80
|
+
visible.push(segment);
|
|
81
|
+
used += segment.text.length;
|
|
82
|
+
} else {
|
|
83
|
+
visible.push({ text: segment.text.slice(0, room), color: segment.color });
|
|
84
|
+
used = limit;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
visible.push({ text: "...", color: visible[visible.length - 1]?.color ?? fallbackColor });
|
|
88
|
+
return visible;
|
|
39
89
|
}
|
|
40
90
|
|
|
41
|
-
export function
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (runtime.
|
|
91
|
+
export function buildStatusSegments(
|
|
92
|
+
runtime: PiIdeRuntime,
|
|
93
|
+
cwd?: string,
|
|
94
|
+
spinnerFrame = SPINNER_FRAMES[0],
|
|
95
|
+
): StatusSegment[] {
|
|
96
|
+
if (!runtime.enabled) return [];
|
|
47
97
|
|
|
48
|
-
|
|
98
|
+
switch (runtime.connectionStatus) {
|
|
99
|
+
case "connecting":
|
|
100
|
+
return [{ text: `${IDE_ICON} ${spinnerFrame}`, color: "dim" }];
|
|
101
|
+
case "error":
|
|
102
|
+
return [
|
|
103
|
+
{ text: `${IDE_ICON} `, color: "dim" },
|
|
104
|
+
{ text: "✕", color: "error" },
|
|
105
|
+
];
|
|
106
|
+
case "connected":
|
|
107
|
+
return buildConnectedSegments(runtime, cwd);
|
|
108
|
+
default:
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function buildConnectedSegments(runtime: PiIdeRuntime, cwd?: string): StatusSegment[] {
|
|
49
114
|
const selection = runtime.latestSelection;
|
|
50
|
-
if (!selection) return `${
|
|
115
|
+
if (!selection) return [{ text: `${IDE_ICON} ✓`, color: "dim" }];
|
|
116
|
+
|
|
51
117
|
const rel = toRelativeDisplayPath(selection.filePath, selection.workspaceFolder, cwd);
|
|
52
118
|
const range = describeRanges(selection.ranges);
|
|
53
|
-
|
|
119
|
+
// Pending selections are still queued for the next prompt (⇡, success); sent ones are attached (✓, dim).
|
|
120
|
+
const pending = runtime.attachState === "pending";
|
|
121
|
+
const marker = pending ? "⇡" : "✓";
|
|
122
|
+
const color: ThemeColor = pending ? "success" : "dim";
|
|
123
|
+
return [{ text: `${IDE_ICON} ${marker} ${rel}${range === "open file" ? "" : range}`, color }];
|
|
54
124
|
}
|
|
55
125
|
|
|
56
126
|
export function buildWidget(runtime: PiIdeRuntime, cwd?: string): string[] | undefined {
|
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
|
}
|