pi-x-ide 0.1.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 +201 -0
- package/README.md +138 -0
- package/README.zh.md +138 -0
- package/dist/src/pi/commands.d.ts +12 -0
- package/dist/src/pi/commands.js +96 -0
- package/dist/src/pi/commands.js.map +1 -0
- package/dist/src/pi/connection.d.ts +27 -0
- package/dist/src/pi/connection.js +136 -0
- package/dist/src/pi/connection.js.map +1 -0
- package/dist/src/pi/context.d.ts +8 -0
- package/dist/src/pi/context.js +66 -0
- package/dist/src/pi/context.js.map +1 -0
- package/dist/src/pi/discovery.d.ts +11 -0
- package/dist/src/pi/discovery.js +79 -0
- package/dist/src/pi/discovery.js.map +1 -0
- package/dist/src/pi/index.d.ts +4 -0
- package/dist/src/pi/index.js +182 -0
- package/dist/src/pi/index.js.map +1 -0
- package/dist/src/pi/state.d.ts +24 -0
- package/dist/src/pi/state.js +12 -0
- package/dist/src/pi/state.js.map +1 -0
- package/dist/src/pi/ui.d.ts +6 -0
- package/dist/src/pi/ui.js +84 -0
- package/dist/src/pi/ui.js.map +1 -0
- package/dist/src/shared/format.d.ts +23 -0
- package/dist/src/shared/format.js +84 -0
- package/dist/src/shared/format.js.map +1 -0
- package/dist/src/shared/paths.d.ts +5 -0
- package/dist/src/shared/paths.js +50 -0
- package/dist/src/shared/paths.js.map +1 -0
- package/dist/src/shared/protocol.d.ts +92 -0
- package/dist/src/shared/protocol.js +8 -0
- package/dist/src/shared/protocol.js.map +1 -0
- package/dist/src/shared/schema.d.ts +9 -0
- package/dist/src/shared/schema.js +94 -0
- package/dist/src/shared/schema.js.map +1 -0
- package/dist/src/shared/ws.d.ts +2 -0
- package/dist/src/shared/ws.js +12 -0
- package/dist/src/shared/ws.js.map +1 -0
- package/dist/test/shared.test.d.ts +1 -0
- package/dist/test/shared.test.js +101 -0
- package/dist/test/shared.test.js.map +1 -0
- package/package.json +55 -0
- package/src/pi/commands.ts +122 -0
- package/src/pi/connection.ts +155 -0
- package/src/pi/context.ts +82 -0
- package/src/pi/discovery.ts +88 -0
- package/src/pi/index.ts +190 -0
- package/src/pi/state.ts +29 -0
- package/src/pi/ui.ts +85 -0
- package/src/shared/format.ts +95 -0
- package/src/shared/paths.ts +47 -0
- package/src/shared/protocol.ts +107 -0
- package/src/shared/schema.ts +113 -0
- package/src/shared/ws.ts +8 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/pi/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EditorSelectionSnapshot, SelectionRange } from "./protocol";
|
|
2
|
+
export type RangeFormat = "comma" | "dash";
|
|
3
|
+
export declare function rangeToLineSpan(range: SelectionRange): {
|
|
4
|
+
startLine: number;
|
|
5
|
+
endLine: number;
|
|
6
|
+
};
|
|
7
|
+
export declare function formatLineSpan(range: SelectionRange, format?: RangeFormat): string;
|
|
8
|
+
export declare function formatRangeMention(snapshot: EditorSelectionSnapshot, options?: {
|
|
9
|
+
cwd?: string;
|
|
10
|
+
format?: RangeFormat;
|
|
11
|
+
}): string;
|
|
12
|
+
export interface ParsedRangeMention {
|
|
13
|
+
path: string;
|
|
14
|
+
startLine?: number;
|
|
15
|
+
endLine?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function parseRangeMention(input: string): ParsedRangeMention | undefined;
|
|
18
|
+
export declare function describeRanges(ranges: SelectionRange[], format?: RangeFormat): string;
|
|
19
|
+
export declare function snapshotKey(snapshot: EditorSelectionSnapshot): string;
|
|
20
|
+
export declare function formatEditorContext(snapshot: EditorSelectionSnapshot, options?: {
|
|
21
|
+
cwd?: string;
|
|
22
|
+
maxChars?: number;
|
|
23
|
+
}): string;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rangeToLineSpan = rangeToLineSpan;
|
|
4
|
+
exports.formatLineSpan = formatLineSpan;
|
|
5
|
+
exports.formatRangeMention = formatRangeMention;
|
|
6
|
+
exports.parseRangeMention = parseRangeMention;
|
|
7
|
+
exports.describeRanges = describeRanges;
|
|
8
|
+
exports.snapshotKey = snapshotKey;
|
|
9
|
+
exports.formatEditorContext = formatEditorContext;
|
|
10
|
+
const paths_1 = require("./paths");
|
|
11
|
+
function rangeToLineSpan(range) {
|
|
12
|
+
return {
|
|
13
|
+
startLine: range.selection.start.line + 1,
|
|
14
|
+
endLine: range.selection.end.line + 1,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function formatLineSpan(range, format = "comma") {
|
|
18
|
+
const { startLine, endLine } = rangeToLineSpan(range);
|
|
19
|
+
if (startLine === endLine)
|
|
20
|
+
return `#L${startLine}`;
|
|
21
|
+
return format === "dash" ? `#L${startLine}-L${endLine}` : `#L${startLine},${endLine}`;
|
|
22
|
+
}
|
|
23
|
+
function formatRangeMention(snapshot, options = {}) {
|
|
24
|
+
const rel = (0, paths_1.toRelativeDisplayPath)(snapshot.filePath, snapshot.workspaceFolder, options.cwd);
|
|
25
|
+
const first = snapshot.ranges[0];
|
|
26
|
+
return first ? `@${rel}${formatLineSpan(first, options.format)}` : `@${rel}`;
|
|
27
|
+
}
|
|
28
|
+
function parseRangeMention(input) {
|
|
29
|
+
const match = input.trim().match(/^@(.+?)(?:#L(\d+)(?:(?:,|-L?)(\d+))?)?$/);
|
|
30
|
+
if (!match)
|
|
31
|
+
return undefined;
|
|
32
|
+
const startLine = match[2] ? Number(match[2]) : undefined;
|
|
33
|
+
const endLine = match[3] ? Number(match[3]) : startLine;
|
|
34
|
+
if (startLine !== undefined && (!Number.isInteger(startLine) || startLine < 1))
|
|
35
|
+
return undefined;
|
|
36
|
+
if (endLine !== undefined && (!Number.isInteger(endLine) || endLine < 1))
|
|
37
|
+
return undefined;
|
|
38
|
+
return { path: match[1], startLine, endLine };
|
|
39
|
+
}
|
|
40
|
+
function describeRanges(ranges, format = "comma") {
|
|
41
|
+
if (ranges.length === 0)
|
|
42
|
+
return "open file";
|
|
43
|
+
if (ranges.length === 1)
|
|
44
|
+
return formatLineSpan(ranges[0], format);
|
|
45
|
+
return ranges.map((range, index) => `${index + 1}:${formatLineSpan(range, format)}`).join(" ");
|
|
46
|
+
}
|
|
47
|
+
function snapshotKey(snapshot) {
|
|
48
|
+
return JSON.stringify({
|
|
49
|
+
source: snapshot.source,
|
|
50
|
+
filePath: snapshot.filePath,
|
|
51
|
+
workspaceFolder: snapshot.workspaceFolder,
|
|
52
|
+
ranges: snapshot.ranges.map((range) => ({
|
|
53
|
+
start: range.selection.start,
|
|
54
|
+
end: range.selection.end,
|
|
55
|
+
textLength: range.text.length,
|
|
56
|
+
})),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function formatEditorContext(snapshot, options = {}) {
|
|
60
|
+
const rel = (0, paths_1.toRelativeDisplayPath)(snapshot.filePath, snapshot.workspaceFolder, options.cwd);
|
|
61
|
+
const maxChars = options.maxChars ?? 24_000;
|
|
62
|
+
if (snapshot.ranges.length === 0) {
|
|
63
|
+
return `<system-reminder>\nThe user currently has \`${rel}\` open in ${snapshot.source}. This may or may not be relevant.\n</system-reminder>`;
|
|
64
|
+
}
|
|
65
|
+
const sections = [];
|
|
66
|
+
let remaining = maxChars;
|
|
67
|
+
let truncated = false;
|
|
68
|
+
for (const [index, range] of snapshot.ranges.entries()) {
|
|
69
|
+
const { startLine, endLine } = rangeToLineSpan(range);
|
|
70
|
+
const label = snapshot.ranges.length === 1 ? "The user selected" : `Selection ${index + 1}`;
|
|
71
|
+
let text = range.text;
|
|
72
|
+
if (text.length > remaining) {
|
|
73
|
+
text = text.slice(0, Math.max(0, remaining));
|
|
74
|
+
truncated = true;
|
|
75
|
+
}
|
|
76
|
+
remaining -= text.length;
|
|
77
|
+
sections.push(`${label} lines ${startLine}-${endLine} from \`${rel}\` in ${snapshot.source}:\n\n\`\`\`\n${text}\n\`\`\``);
|
|
78
|
+
if (remaining <= 0)
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
const suffix = truncated ? "\n\n[Selection text truncated to keep the prompt size bounded.]" : "";
|
|
82
|
+
return `<system-reminder>\n${sections.join("\n\n")}\n\nThis may or may not be relevant.${suffix}\n</system-reminder>`;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/shared/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function resolveLockDir(env?: NodeJS.ProcessEnv): string;
|
|
2
|
+
export declare function normalizePath(input: string): string;
|
|
3
|
+
export declare function isPathInsideOrEqual(parent: string, child: string): boolean;
|
|
4
|
+
export declare function relationshipMatchLength(workspaceFolder: string, cwd: string): number;
|
|
5
|
+
export declare function toRelativeDisplayPath(filePath: string, workspaceFolder?: string, cwd?: string): string;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveLockDir = resolveLockDir;
|
|
4
|
+
exports.normalizePath = normalizePath;
|
|
5
|
+
exports.isPathInsideOrEqual = isPathInsideOrEqual;
|
|
6
|
+
exports.relationshipMatchLength = relationshipMatchLength;
|
|
7
|
+
exports.toRelativeDisplayPath = toRelativeDisplayPath;
|
|
8
|
+
const node_os_1 = require("node:os");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const protocol_1 = require("./protocol");
|
|
11
|
+
function resolveLockDir(env = process.env) {
|
|
12
|
+
return env[protocol_1.LOCK_DIR_ENV] && env[protocol_1.LOCK_DIR_ENV].trim()
|
|
13
|
+
? (0, node_path_1.resolve)(env[protocol_1.LOCK_DIR_ENV])
|
|
14
|
+
: (0, node_path_1.resolve)((0, node_os_1.homedir)(), ".pi", "pi-x-ide");
|
|
15
|
+
}
|
|
16
|
+
function normalizePath(input) {
|
|
17
|
+
return (0, node_path_1.resolve)(input);
|
|
18
|
+
}
|
|
19
|
+
function isPathInsideOrEqual(parent, child) {
|
|
20
|
+
const normalizedParent = normalizePath(parent);
|
|
21
|
+
const normalizedChild = normalizePath(child);
|
|
22
|
+
if (normalizedParent === normalizedChild)
|
|
23
|
+
return true;
|
|
24
|
+
const rel = (0, node_path_1.relative)(normalizedParent, normalizedChild);
|
|
25
|
+
return rel !== "" && !rel.startsWith("..") && !(0, node_path_1.isAbsolute)(rel);
|
|
26
|
+
}
|
|
27
|
+
function relationshipMatchLength(workspaceFolder, cwd) {
|
|
28
|
+
const workspace = normalizePath(workspaceFolder);
|
|
29
|
+
const active = normalizePath(cwd);
|
|
30
|
+
// Best case: Pi is started inside the IDE workspace.
|
|
31
|
+
if (isPathInsideOrEqual(workspace, active)) {
|
|
32
|
+
return workspace.length + 10_000;
|
|
33
|
+
}
|
|
34
|
+
// Accept the inverse relationship for monorepos where Pi starts above a nested workspace,
|
|
35
|
+
// but rank it lower than a workspace containing cwd.
|
|
36
|
+
if (isPathInsideOrEqual(active, workspace)) {
|
|
37
|
+
return active.length;
|
|
38
|
+
}
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
function toRelativeDisplayPath(filePath, workspaceFolder, cwd) {
|
|
42
|
+
const base = workspaceFolder ?? cwd;
|
|
43
|
+
if (!base)
|
|
44
|
+
return filePath;
|
|
45
|
+
const rel = (0, node_path_1.relative)(base, filePath);
|
|
46
|
+
if (!rel || rel.startsWith("..") || (0, node_path_1.isAbsolute)(rel))
|
|
47
|
+
return filePath;
|
|
48
|
+
return rel.split(node_path_1.sep).join("/");
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/shared/paths.ts"],"names":[],"mappings":";;AAIA,wCAIC;AAED,sCAEC;AAED,kDAMC;AAED,0DAgBC;AAED,sDAMC;AA9CD,qCAAkC;AAClC,yCAA+D;AAC/D,yCAA0C;AAE1C,SAAgB,cAAc,CAAC,MAAyB,OAAO,CAAC,GAAG;IACjE,OAAO,GAAG,CAAC,uBAAY,CAAC,IAAI,GAAG,CAAC,uBAAY,CAAC,CAAC,IAAI,EAAE;QAClD,CAAC,CAAC,IAAA,mBAAO,EAAC,GAAG,CAAC,uBAAY,CAAC,CAAC;QAC5B,CAAC,CAAC,IAAA,mBAAO,EAAC,IAAA,iBAAO,GAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,IAAA,mBAAO,EAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAc,EAAE,KAAa;IAC/D,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,gBAAgB,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,GAAG,GAAG,IAAA,oBAAQ,EAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IACxD,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAA,sBAAU,EAAC,GAAG,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,uBAAuB,CAAC,eAAuB,EAAE,GAAW;IAC1E,MAAM,SAAS,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAElC,qDAAqD;IACrD,IAAI,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,0FAA0F;IAC1F,qDAAqD;IACrD,IAAI,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAAgB,EAAE,eAAwB,EAAE,GAAY;IAC5F,MAAM,IAAI,GAAG,eAAe,IAAI,GAAG,CAAC;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAA,oBAAQ,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAA,sBAAU,EAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrE,OAAO,GAAG,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export declare const PROTOCOL_VERSION = 1;
|
|
2
|
+
export declare const LOCK_DIR_ENV = "PI_X_IDE_LOCK_DIR";
|
|
3
|
+
export declare const AUTH_HEADER = "x-pi-x-ide-authorization";
|
|
4
|
+
export declare const LOCK_FILE_EXTENSION = ".lock";
|
|
5
|
+
export type IdeSource = "vscode" | "zed" | "unknown";
|
|
6
|
+
export type Transport = "ws";
|
|
7
|
+
export interface IdeLockFile {
|
|
8
|
+
version: 1;
|
|
9
|
+
ide: IdeSource;
|
|
10
|
+
name: string;
|
|
11
|
+
transport: Transport;
|
|
12
|
+
host: string;
|
|
13
|
+
port: number;
|
|
14
|
+
authToken: string;
|
|
15
|
+
workspaceFolders: string[];
|
|
16
|
+
pid?: number;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
updatedAt: string;
|
|
19
|
+
}
|
|
20
|
+
export interface LockFileCandidate {
|
|
21
|
+
path: string;
|
|
22
|
+
lock: IdeLockFile;
|
|
23
|
+
mtimeMs: number;
|
|
24
|
+
matchLength: number;
|
|
25
|
+
workspaceFolder: string;
|
|
26
|
+
}
|
|
27
|
+
export interface JsonRpcRequest<TParams = unknown> {
|
|
28
|
+
jsonrpc: "2.0";
|
|
29
|
+
id: number | string;
|
|
30
|
+
method: string;
|
|
31
|
+
params?: TParams;
|
|
32
|
+
}
|
|
33
|
+
export interface JsonRpcResponse<TResult = unknown> {
|
|
34
|
+
jsonrpc: "2.0";
|
|
35
|
+
id: number | string;
|
|
36
|
+
result?: TResult;
|
|
37
|
+
error?: {
|
|
38
|
+
code: number;
|
|
39
|
+
message: string;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface JsonRpcNotification<TParams = unknown> {
|
|
43
|
+
jsonrpc: "2.0";
|
|
44
|
+
method: string;
|
|
45
|
+
params?: TParams;
|
|
46
|
+
}
|
|
47
|
+
export interface InitializeParams {
|
|
48
|
+
protocolVersion: number;
|
|
49
|
+
client: {
|
|
50
|
+
name: "pi-x-ide";
|
|
51
|
+
version: string;
|
|
52
|
+
};
|
|
53
|
+
cwd: string;
|
|
54
|
+
}
|
|
55
|
+
export interface InitializeResult {
|
|
56
|
+
protocolVersion: number;
|
|
57
|
+
server: {
|
|
58
|
+
name: string;
|
|
59
|
+
version?: string;
|
|
60
|
+
ide: IdeSource;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export interface Position {
|
|
64
|
+
line: number;
|
|
65
|
+
character: number;
|
|
66
|
+
}
|
|
67
|
+
export interface SelectionRange {
|
|
68
|
+
text: string;
|
|
69
|
+
selection: {
|
|
70
|
+
start: Position;
|
|
71
|
+
end: Position;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface EditorSelectionSnapshot {
|
|
75
|
+
source: IdeSource;
|
|
76
|
+
filePath: string;
|
|
77
|
+
workspaceFolder?: string;
|
|
78
|
+
ranges: SelectionRange[];
|
|
79
|
+
receivedAt?: number;
|
|
80
|
+
}
|
|
81
|
+
export interface SelectionChangedParams extends EditorSelectionSnapshot {
|
|
82
|
+
}
|
|
83
|
+
export interface SelectionClearedParams {
|
|
84
|
+
source: IdeSource;
|
|
85
|
+
reason: "no-active-editor";
|
|
86
|
+
receivedAt?: number;
|
|
87
|
+
}
|
|
88
|
+
export interface AtMentionedParams extends EditorSelectionSnapshot {
|
|
89
|
+
rangeText: string;
|
|
90
|
+
}
|
|
91
|
+
export type IdeNotification = JsonRpcNotification<SelectionChangedParams> | JsonRpcNotification<SelectionClearedParams> | JsonRpcNotification<AtMentionedParams>;
|
|
92
|
+
export type AttachState = "pending" | "sent" | "idle";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LOCK_FILE_EXTENSION = exports.AUTH_HEADER = exports.LOCK_DIR_ENV = exports.PROTOCOL_VERSION = void 0;
|
|
4
|
+
exports.PROTOCOL_VERSION = 1;
|
|
5
|
+
exports.LOCK_DIR_ENV = "PI_X_IDE_LOCK_DIR";
|
|
6
|
+
exports.AUTH_HEADER = "x-pi-x-ide-authorization";
|
|
7
|
+
exports.LOCK_FILE_EXTENSION = ".lock";
|
|
8
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/shared/protocol.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,CAAC,CAAC;AACrB,QAAA,YAAY,GAAG,mBAAmB,CAAC;AACnC,QAAA,WAAW,GAAG,0BAA0B,CAAC;AACzC,QAAA,mBAAmB,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AtMentionedParams, EditorSelectionSnapshot, IdeLockFile, JsonRpcRequest, SelectionChangedParams, SelectionClearedParams } from "./protocol";
|
|
2
|
+
export declare function isIdeLockFile(value: unknown): value is IdeLockFile;
|
|
3
|
+
export declare function isEditorSelectionSnapshot(value: unknown): value is EditorSelectionSnapshot;
|
|
4
|
+
export declare function isSelectionChangedParams(value: unknown): value is SelectionChangedParams;
|
|
5
|
+
export declare function isSelectionClearedParams(value: unknown): value is SelectionClearedParams;
|
|
6
|
+
export declare function isAtMentionedParams(value: unknown): value is AtMentionedParams;
|
|
7
|
+
export declare function parseJsonObject(input: string): Record<string, unknown> | undefined;
|
|
8
|
+
export declare function parseLockFileContent(content: string): IdeLockFile | undefined;
|
|
9
|
+
export declare function isJsonRpcRequest(value: unknown): value is JsonRpcRequest;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isIdeLockFile = isIdeLockFile;
|
|
4
|
+
exports.isEditorSelectionSnapshot = isEditorSelectionSnapshot;
|
|
5
|
+
exports.isSelectionChangedParams = isSelectionChangedParams;
|
|
6
|
+
exports.isSelectionClearedParams = isSelectionClearedParams;
|
|
7
|
+
exports.isAtMentionedParams = isAtMentionedParams;
|
|
8
|
+
exports.parseJsonObject = parseJsonObject;
|
|
9
|
+
exports.parseLockFileContent = parseLockFileContent;
|
|
10
|
+
exports.isJsonRpcRequest = isJsonRpcRequest;
|
|
11
|
+
function isRecord(value) {
|
|
12
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
13
|
+
}
|
|
14
|
+
function isString(value) {
|
|
15
|
+
return typeof value === "string";
|
|
16
|
+
}
|
|
17
|
+
function isFiniteNumber(value) {
|
|
18
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
19
|
+
}
|
|
20
|
+
function isIdeSource(value) {
|
|
21
|
+
return value === "vscode" || value === "zed" || value === "unknown";
|
|
22
|
+
}
|
|
23
|
+
function isIdeLockFile(value) {
|
|
24
|
+
if (!isRecord(value))
|
|
25
|
+
return false;
|
|
26
|
+
return (value.version === 1 &&
|
|
27
|
+
isIdeSource(value.ide) &&
|
|
28
|
+
isString(value.name) &&
|
|
29
|
+
value.transport === "ws" &&
|
|
30
|
+
isString(value.host) &&
|
|
31
|
+
isFiniteNumber(value.port) &&
|
|
32
|
+
value.port > 0 &&
|
|
33
|
+
value.port <= 65_535 &&
|
|
34
|
+
isString(value.authToken) &&
|
|
35
|
+
Array.isArray(value.workspaceFolders) &&
|
|
36
|
+
value.workspaceFolders.every(isString) &&
|
|
37
|
+
(value.pid === undefined || isFiniteNumber(value.pid)) &&
|
|
38
|
+
isString(value.createdAt) &&
|
|
39
|
+
isString(value.updatedAt));
|
|
40
|
+
}
|
|
41
|
+
function isPosition(value) {
|
|
42
|
+
return (isRecord(value) &&
|
|
43
|
+
isFiniteNumber(value.line) &&
|
|
44
|
+
isFiniteNumber(value.character) &&
|
|
45
|
+
value.line >= 0 &&
|
|
46
|
+
value.character >= 0);
|
|
47
|
+
}
|
|
48
|
+
function isSelectionRange(value) {
|
|
49
|
+
if (!isRecord(value) || !isString(value.text) || !isRecord(value.selection))
|
|
50
|
+
return false;
|
|
51
|
+
return isPosition(value.selection.start) && isPosition(value.selection.end);
|
|
52
|
+
}
|
|
53
|
+
function isEditorSelectionSnapshot(value) {
|
|
54
|
+
if (!isRecord(value))
|
|
55
|
+
return false;
|
|
56
|
+
return (isIdeSource(value.source) &&
|
|
57
|
+
isString(value.filePath) &&
|
|
58
|
+
(value.workspaceFolder === undefined || isString(value.workspaceFolder)) &&
|
|
59
|
+
Array.isArray(value.ranges) &&
|
|
60
|
+
value.ranges.every(isSelectionRange) &&
|
|
61
|
+
(value.receivedAt === undefined || isFiniteNumber(value.receivedAt)));
|
|
62
|
+
}
|
|
63
|
+
function isSelectionChangedParams(value) {
|
|
64
|
+
return isEditorSelectionSnapshot(value);
|
|
65
|
+
}
|
|
66
|
+
function isSelectionClearedParams(value) {
|
|
67
|
+
return (isRecord(value) &&
|
|
68
|
+
isIdeSource(value.source) &&
|
|
69
|
+
value.reason === "no-active-editor" &&
|
|
70
|
+
(value.receivedAt === undefined || isFiniteNumber(value.receivedAt)));
|
|
71
|
+
}
|
|
72
|
+
function isAtMentionedParams(value) {
|
|
73
|
+
return isEditorSelectionSnapshot(value) && isString(value.rangeText);
|
|
74
|
+
}
|
|
75
|
+
function parseJsonObject(input) {
|
|
76
|
+
try {
|
|
77
|
+
const parsed = JSON.parse(input);
|
|
78
|
+
return isRecord(parsed) ? parsed : undefined;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function parseLockFileContent(content) {
|
|
85
|
+
const parsed = parseJsonObject(content);
|
|
86
|
+
return isIdeLockFile(parsed) ? parsed : undefined;
|
|
87
|
+
}
|
|
88
|
+
function isJsonRpcRequest(value) {
|
|
89
|
+
return (isRecord(value) &&
|
|
90
|
+
value.jsonrpc === "2.0" &&
|
|
91
|
+
(isString(value.id) || isFiniteNumber(value.id)) &&
|
|
92
|
+
isString(value.method));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/shared/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeRawData = decodeRawData;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
function decodeRawData(raw) {
|
|
6
|
+
if (Array.isArray(raw))
|
|
7
|
+
return node_buffer_1.Buffer.concat(raw).toString("utf8");
|
|
8
|
+
if (node_buffer_1.Buffer.isBuffer(raw))
|
|
9
|
+
return raw.toString("utf8");
|
|
10
|
+
return node_buffer_1.Buffer.from(raw).toString("utf8");
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/shared/ws.ts"],"names":[],"mappings":";;AAGA,sCAIC;AAPD,6CAAqC;AAGrC,SAAgB,aAAa,CAAC,GAAY;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,oBAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnE,IAAI,oBAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,oBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
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 promises_1 = require("node:fs/promises");
|
|
8
|
+
const node_os_1 = require("node:os");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const node_test_1 = __importDefault(require("node:test"));
|
|
11
|
+
const format_1 = require("../src/shared/format");
|
|
12
|
+
const paths_1 = require("../src/shared/paths");
|
|
13
|
+
const schema_1 = require("../src/shared/schema");
|
|
14
|
+
const discovery_1 = require("../src/pi/discovery");
|
|
15
|
+
const context_1 = require("../src/pi/context");
|
|
16
|
+
const state_1 = require("../src/pi/state");
|
|
17
|
+
const snapshot = {
|
|
18
|
+
source: "vscode",
|
|
19
|
+
filePath: "/repo/src/main.ts",
|
|
20
|
+
workspaceFolder: "/repo",
|
|
21
|
+
ranges: [
|
|
22
|
+
{
|
|
23
|
+
text: "const x = 1;",
|
|
24
|
+
selection: {
|
|
25
|
+
start: { line: 9, character: 0 },
|
|
26
|
+
end: { line: 19, character: 12 },
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
void (0, node_test_1.default)("formats and parses range mentions", () => {
|
|
32
|
+
strict_1.default.equal((0, format_1.formatRangeMention)(snapshot), "@src/main.ts#L10,20");
|
|
33
|
+
strict_1.default.deepEqual((0, format_1.parseRangeMention)("@src/main.ts#L10,20"), { path: "src/main.ts", startLine: 10, endLine: 20 });
|
|
34
|
+
strict_1.default.deepEqual((0, format_1.parseRangeMention)("@src/main.ts#L10-L20"), { path: "src/main.ts", startLine: 10, endLine: 20 });
|
|
35
|
+
strict_1.default.deepEqual((0, format_1.parseRangeMention)("@src/main.ts#L10"), { path: "src/main.ts", startLine: 10, endLine: 10 });
|
|
36
|
+
});
|
|
37
|
+
void (0, node_test_1.default)("formats bounded editor context", () => {
|
|
38
|
+
const context = (0, format_1.formatEditorContext)(snapshot, { maxChars: 6 });
|
|
39
|
+
strict_1.default.match(context, /src\/main\.ts/);
|
|
40
|
+
strict_1.default.match(context, /lines 10-20/);
|
|
41
|
+
strict_1.default.match(context, /truncated/i);
|
|
42
|
+
});
|
|
43
|
+
void (0, node_test_1.default)("validates selection cleared params", () => {
|
|
44
|
+
strict_1.default.equal((0, schema_1.isSelectionClearedParams)({ source: "vscode", reason: "no-active-editor" }), true);
|
|
45
|
+
strict_1.default.equal((0, schema_1.isSelectionClearedParams)({ source: "vscode", reason: "no-active-editor", receivedAt: 123 }), true);
|
|
46
|
+
strict_1.default.equal((0, schema_1.isSelectionClearedParams)({ source: "vscode", reason: "unknown" }), false);
|
|
47
|
+
strict_1.default.equal((0, schema_1.isSelectionClearedParams)({ source: "vscode" }), false);
|
|
48
|
+
});
|
|
49
|
+
void (0, node_test_1.default)("clears stale editor selection state", () => {
|
|
50
|
+
const runtime = (0, state_1.createRuntime)();
|
|
51
|
+
(0, context_1.setLatestSelection)(runtime, snapshot);
|
|
52
|
+
strict_1.default.equal(runtime.latestSelection, snapshot);
|
|
53
|
+
strict_1.default.equal(runtime.attachState, "pending");
|
|
54
|
+
(0, context_1.clearLatestSelection)(runtime);
|
|
55
|
+
strict_1.default.equal(runtime.latestSelection, undefined);
|
|
56
|
+
strict_1.default.equal(runtime.latestSelectionKey, undefined);
|
|
57
|
+
strict_1.default.equal(runtime.turnSelection, undefined);
|
|
58
|
+
strict_1.default.equal(runtime.attachState, "idle");
|
|
59
|
+
});
|
|
60
|
+
void (0, node_test_1.default)("validates lock file content", () => {
|
|
61
|
+
const lock = {
|
|
62
|
+
version: 1,
|
|
63
|
+
ide: "vscode",
|
|
64
|
+
name: "Visual Studio Code",
|
|
65
|
+
transport: "ws",
|
|
66
|
+
host: "127.0.0.1",
|
|
67
|
+
port: 49152,
|
|
68
|
+
authToken: "token",
|
|
69
|
+
workspaceFolders: ["/repo"],
|
|
70
|
+
createdAt: new Date().toISOString(),
|
|
71
|
+
updatedAt: new Date().toISOString(),
|
|
72
|
+
};
|
|
73
|
+
strict_1.default.deepEqual((0, schema_1.parseLockFileContent)(JSON.stringify(lock)), lock);
|
|
74
|
+
strict_1.default.equal((0, schema_1.parseLockFileContent)(JSON.stringify({ ...lock, port: 99999 })), undefined);
|
|
75
|
+
});
|
|
76
|
+
void (0, node_test_1.default)("matches workspace relationship", () => {
|
|
77
|
+
strict_1.default.ok((0, paths_1.relationshipMatchLength)("/repo/src", "/repo/src/app") > (0, paths_1.relationshipMatchLength)("/repo", "/repo/src/app"));
|
|
78
|
+
strict_1.default.equal((0, paths_1.relationshipMatchLength)("/other", "/repo"), 0);
|
|
79
|
+
});
|
|
80
|
+
void (0, node_test_1.default)("discovers and sorts matching lock files", async () => {
|
|
81
|
+
const dir = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "pi-x-ide-test-"));
|
|
82
|
+
const baseLock = {
|
|
83
|
+
version: 1,
|
|
84
|
+
ide: "vscode",
|
|
85
|
+
name: "VS Code",
|
|
86
|
+
transport: "ws",
|
|
87
|
+
host: "127.0.0.1",
|
|
88
|
+
port: 40000,
|
|
89
|
+
authToken: "token",
|
|
90
|
+
workspaceFolders: ["/repo"],
|
|
91
|
+
createdAt: new Date().toISOString(),
|
|
92
|
+
updatedAt: new Date().toISOString(),
|
|
93
|
+
};
|
|
94
|
+
await (0, promises_1.writeFile)((0, node_path_1.join)(dir, "a.lock"), JSON.stringify(baseLock));
|
|
95
|
+
await (0, promises_1.writeFile)((0, node_path_1.join)(dir, "b.lock"), JSON.stringify({ ...baseLock, port: 40001, workspaceFolders: ["/repo/src"] }));
|
|
96
|
+
await (0, promises_1.writeFile)((0, node_path_1.join)(dir, "bad.lock"), "not json");
|
|
97
|
+
const candidates = await (0, discovery_1.discoverIdeCandidates)({ cwd: "/repo/src/app", lockDir: dir, checkPid: false });
|
|
98
|
+
strict_1.default.equal(candidates.length, 2);
|
|
99
|
+
strict_1.default.equal(candidates[0].lock.port, 40001);
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=shared.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.test.js","sourceRoot":"","sources":["../../test/shared.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pi-x-ide",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Pi extension package for IDE selection context integration.",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist",
|
|
7
|
+
"src"
|
|
8
|
+
],
|
|
9
|
+
"keywords": [
|
|
10
|
+
"pi-package",
|
|
11
|
+
"pi",
|
|
12
|
+
"ide",
|
|
13
|
+
"vscode"
|
|
14
|
+
],
|
|
15
|
+
"license": "Apache-2.0",
|
|
16
|
+
"type": "commonjs",
|
|
17
|
+
"main": "./dist/src/pi/index.js",
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"ws": "^8.18.0"
|
|
20
|
+
},
|
|
21
|
+
"peerDependencies": {
|
|
22
|
+
"@earendil-works/pi-coding-agent": "*"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@earendil-works/pi-coding-agent": "^0.79.0",
|
|
26
|
+
"@eslint/js": "^10.0.1",
|
|
27
|
+
"@types/node": "^22.10.0",
|
|
28
|
+
"@types/ws": "^8.5.13",
|
|
29
|
+
"@vscode/vsce": "^3.2.2",
|
|
30
|
+
"esbuild": "^0.27.0",
|
|
31
|
+
"eslint": "^10.4.1",
|
|
32
|
+
"eslint-config-prettier": "^10.1.8",
|
|
33
|
+
"prettier": "^3.8.3",
|
|
34
|
+
"typescript": "^5.7.2",
|
|
35
|
+
"typescript-eslint": "^8.60.1"
|
|
36
|
+
},
|
|
37
|
+
"pi": {
|
|
38
|
+
"extensions": [
|
|
39
|
+
"./src/pi/index.ts"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsc -p tsconfig.json && pnpm --filter pi-x-ide-vscode compile",
|
|
44
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && pnpm --filter pi-x-ide-vscode typecheck",
|
|
45
|
+
"test": "pnpm build && node --test dist/test/*.test.js",
|
|
46
|
+
"lint": "eslint .",
|
|
47
|
+
"lint:fix": "eslint . --fix",
|
|
48
|
+
"format": "prettier --write .",
|
|
49
|
+
"format:check": "prettier --check .",
|
|
50
|
+
"compile:vscode": "pnpm --filter pi-x-ide-vscode compile",
|
|
51
|
+
"sync:vscode-assets": "pnpm --filter pi-x-ide-vscode sync:assets",
|
|
52
|
+
"package:vscode": "pnpm --filter pi-x-ide-vscode package",
|
|
53
|
+
"vsix": "pnpm package:vscode"
|
|
54
|
+
}
|
|
55
|
+
}
|