pi-x-ide 1.0.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,55 @@
1
+ import type { PiIdeRuntime } from "./state";
2
+ export declare const PI_X_IDE_EXTENSION_ID = "balaenis.pi-x-ide";
3
+ export declare const PI_X_IDE_AUTO_INSTALL_ENV = "PI_X_IDE_AUTO_INSTALL";
4
+ export declare const PI_X_IDE_TARGET_VERSION: string;
5
+ export type SupportedIdeId = "vscode" | "cursor" | "windsurf";
6
+ export type IdeInstallConfidence = "current-terminal" | "running-process" | "available-cli";
7
+ export type IdeInstallReason = "missing" | "outdated" | "current" | "unknown";
8
+ export type VersionComparison = "older" | "equal" | "newer" | "unknown";
9
+ export interface IdeCliProfile {
10
+ id: SupportedIdeId;
11
+ label: string;
12
+ command: "code" | "cursor" | "windsurf";
13
+ }
14
+ export interface IdeInstallCandidate {
15
+ id: SupportedIdeId;
16
+ label: string;
17
+ cli: IdeCliProfile["command"];
18
+ cliPath: string;
19
+ confidence: IdeInstallConfidence;
20
+ installedVersion?: string;
21
+ targetVersion: string;
22
+ needsInstall: boolean;
23
+ reason: IdeInstallReason;
24
+ listError?: string;
25
+ }
26
+ export interface IdeInstallResult {
27
+ candidate: IdeInstallCandidate;
28
+ skipped: boolean;
29
+ success: boolean;
30
+ stdout: string;
31
+ stderr: string;
32
+ error?: string;
33
+ }
34
+ export interface DiscoverInstallCandidatesOptions {
35
+ env?: NodeJS.ProcessEnv;
36
+ includeLowConfidence?: boolean;
37
+ timeoutMs?: number;
38
+ }
39
+ export interface InstallIdeExtensionOptions {
40
+ timeoutMs?: number;
41
+ }
42
+ export declare const SUPPORTED_IDE_CLI_PROFILES: IdeCliProfile[];
43
+ export declare function isAutoInstallEnabled(env?: NodeJS.ProcessEnv): boolean;
44
+ export declare function parseInstalledExtensionVersion(output: string, extensionId?: string): string | undefined;
45
+ export declare function compareExtensionVersions(installed: string | undefined, target: string): VersionComparison;
46
+ export declare function inferCurrentIdeFromEnv(env?: NodeJS.ProcessEnv): SupportedIdeId | undefined;
47
+ export declare function buildInstallArgs(): string[];
48
+ export declare function findExecutable(command: string, env?: NodeJS.ProcessEnv): Promise<string | undefined>;
49
+ export declare function runCli(cliPath: string, args: string[], timeoutMs?: number): Promise<{
50
+ stdout: string;
51
+ stderr: string;
52
+ }>;
53
+ export declare function discoverInstallCandidates(options?: DiscoverInstallCandidatesOptions): Promise<IdeInstallCandidate[]>;
54
+ export declare function selectAutoInstallCandidate(candidates: IdeInstallCandidate[], env?: NodeJS.ProcessEnv): IdeInstallCandidate | undefined;
55
+ export declare function installIdeExtension(candidate: IdeInstallCandidate, runtime: PiIdeRuntime, options?: InstallIdeExtensionOptions): Promise<IdeInstallResult>;
@@ -0,0 +1,264 @@
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
+ exports.SUPPORTED_IDE_CLI_PROFILES = exports.PI_X_IDE_TARGET_VERSION = exports.PI_X_IDE_AUTO_INSTALL_ENV = exports.PI_X_IDE_EXTENSION_ID = void 0;
7
+ exports.isAutoInstallEnabled = isAutoInstallEnabled;
8
+ exports.parseInstalledExtensionVersion = parseInstalledExtensionVersion;
9
+ exports.compareExtensionVersions = compareExtensionVersions;
10
+ exports.inferCurrentIdeFromEnv = inferCurrentIdeFromEnv;
11
+ exports.buildInstallArgs = buildInstallArgs;
12
+ exports.findExecutable = findExecutable;
13
+ exports.runCli = runCli;
14
+ exports.discoverInstallCandidates = discoverInstallCandidates;
15
+ exports.selectAutoInstallCandidate = selectAutoInstallCandidate;
16
+ exports.installIdeExtension = installIdeExtension;
17
+ const node_child_process_1 = require("node:child_process");
18
+ const promises_1 = require("node:fs/promises");
19
+ const node_path_1 = require("node:path");
20
+ const node_util_1 = require("node:util");
21
+ const package_json_1 = __importDefault(require("../../package.json"));
22
+ const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
23
+ exports.PI_X_IDE_EXTENSION_ID = "balaenis.pi-x-ide";
24
+ exports.PI_X_IDE_AUTO_INSTALL_ENV = "PI_X_IDE_AUTO_INSTALL";
25
+ exports.PI_X_IDE_TARGET_VERSION = package_json_1.default.version;
26
+ exports.SUPPORTED_IDE_CLI_PROFILES = [
27
+ { id: "vscode", label: "VS Code", command: "code" },
28
+ { id: "cursor", label: "Cursor", command: "cursor" },
29
+ { id: "windsurf", label: "Windsurf", command: "windsurf" },
30
+ ];
31
+ function isAutoInstallEnabled(env = process.env) {
32
+ const value = env[exports.PI_X_IDE_AUTO_INSTALL_ENV];
33
+ if (value === undefined)
34
+ return true;
35
+ return !["0", "false", "off"].includes(value.trim().toLowerCase());
36
+ }
37
+ function parseInstalledExtensionVersion(output, extensionId = exports.PI_X_IDE_EXTENSION_ID) {
38
+ const target = extensionId.toLowerCase();
39
+ for (const rawLine of output.split(/\r?\n/)) {
40
+ const line = rawLine.trim();
41
+ if (!line)
42
+ continue;
43
+ const separatorIndex = line.lastIndexOf("@");
44
+ if (separatorIndex <= 0)
45
+ continue;
46
+ const id = line.slice(0, separatorIndex).toLowerCase();
47
+ if (id === target)
48
+ return line.slice(separatorIndex + 1).trim() || undefined;
49
+ }
50
+ return undefined;
51
+ }
52
+ function compareExtensionVersions(installed, target) {
53
+ if (!installed)
54
+ return "unknown";
55
+ const installedParts = parseStableVersion(installed);
56
+ const targetParts = parseStableVersion(target);
57
+ if (!installedParts || !targetParts)
58
+ return "unknown";
59
+ for (let index = 0; index < 3; index += 1) {
60
+ if (installedParts[index] < targetParts[index])
61
+ return "older";
62
+ if (installedParts[index] > targetParts[index])
63
+ return "newer";
64
+ }
65
+ return "equal";
66
+ }
67
+ function inferCurrentIdeFromEnv(env = process.env) {
68
+ const matches = new Set();
69
+ const hasWindsurfMarker = hasWindsurfEnvMarker(env);
70
+ const hasCursorMarker = hasCursorEnvMarker(env);
71
+ const hasVscodeMarker = hasVscodeEnvMarker(env);
72
+ if (hasWindsurfMarker)
73
+ matches.add("windsurf");
74
+ if (hasCursorMarker)
75
+ matches.add("cursor");
76
+ if (hasVscodeMarker && !hasWindsurfMarker && !hasCursorMarker)
77
+ matches.add("vscode");
78
+ return matches.size === 1 ? [...matches][0] : undefined;
79
+ }
80
+ function hasWindsurfEnvMarker(env) {
81
+ if (env.TERM_PROGRAM?.toLowerCase() === "windsurf")
82
+ return true;
83
+ if (hasEnvKey(env, [/^WINDSURF/, /^CODEIUM/]))
84
+ return true;
85
+ return idePathHints(env).some((value) => envValueMatches(value, [/WINDSURF/, /CODEIUM/]));
86
+ }
87
+ function hasCursorEnvMarker(env) {
88
+ if (env.TERM_PROGRAM?.toLowerCase() === "cursor")
89
+ return true;
90
+ if (hasEnvKey(env, [/^CURSOR/]))
91
+ return true;
92
+ return idePathHints(env).some((value) => envValueMatches(value, [/CURSOR/]));
93
+ }
94
+ function hasVscodeEnvMarker(env) {
95
+ if (env.TERM_PROGRAM?.toLowerCase() === "vscode")
96
+ return true;
97
+ return Boolean(env.VSCODE_CWD || env.VSCODE_PID || env.VSCODE_IPC_HOOK_CLI || env.VSCODE_GIT_IPC_HANDLE);
98
+ }
99
+ function hasEnvKey(env, patterns) {
100
+ return Object.keys(env).some((key) => patterns.some((pattern) => pattern.test(key.toUpperCase())));
101
+ }
102
+ function idePathHints(env) {
103
+ return [env.VSCODE_CWD, env.VSCODE_IPC_HOOK_CLI, env.VSCODE_GIT_IPC_HANDLE];
104
+ }
105
+ function envValueMatches(value, patterns) {
106
+ const upperValue = value?.toUpperCase();
107
+ return upperValue ? patterns.some((pattern) => pattern.test(upperValue)) : false;
108
+ }
109
+ function buildInstallArgs() {
110
+ return ["--force", "--install-extension", exports.PI_X_IDE_EXTENSION_ID];
111
+ }
112
+ async function findExecutable(command, env = process.env) {
113
+ const pathEnv = env.PATH ?? env.Path ?? env.path;
114
+ if (!pathEnv)
115
+ return undefined;
116
+ const extensions = process.platform === "win32" ? parsePathExt(env) : [""];
117
+ const candidates = (0, node_path_1.isAbsolute)(command)
118
+ ? [command]
119
+ : pathEnv
120
+ .split(node_path_1.delimiter)
121
+ .filter(Boolean)
122
+ .flatMap((directory) => extensions.map((extension) => (0, node_path_1.join)(directory, withExtension(command, extension))));
123
+ for (const candidate of candidates) {
124
+ try {
125
+ await (0, promises_1.access)(candidate);
126
+ return candidate;
127
+ }
128
+ catch {
129
+ // Keep searching PATH.
130
+ }
131
+ }
132
+ return undefined;
133
+ }
134
+ async function runCli(cliPath, args, timeoutMs = 15_000) {
135
+ const { stdout, stderr } = await execFileAsync(cliPath, args, {
136
+ timeout: timeoutMs,
137
+ windowsHide: true,
138
+ maxBuffer: 1024 * 1024,
139
+ });
140
+ return { stdout: String(stdout), stderr: String(stderr) };
141
+ }
142
+ async function discoverInstallCandidates(options = {}) {
143
+ const env = options.env ?? process.env;
144
+ const currentIde = inferCurrentIdeFromEnv(env);
145
+ const includeLowConfidence = options.includeLowConfidence ?? false;
146
+ const timeoutMs = options.timeoutMs ?? 15_000;
147
+ const candidates = [];
148
+ for (const profile of exports.SUPPORTED_IDE_CLI_PROFILES) {
149
+ const cliPath = await findExecutable(profile.command, env);
150
+ if (!cliPath)
151
+ continue;
152
+ const confidence = currentIde === profile.id ? "current-terminal" : "available-cli";
153
+ if (confidence !== "current-terminal" && !includeLowConfidence)
154
+ continue;
155
+ let installedVersion;
156
+ let listError;
157
+ try {
158
+ const { stdout } = await runCli(cliPath, ["--list-extensions", "--show-versions"], timeoutMs);
159
+ installedVersion = parseInstalledExtensionVersion(stdout);
160
+ }
161
+ catch (error) {
162
+ listError = error instanceof Error ? error.message : String(error);
163
+ }
164
+ const reason = resolveInstallReason(installedVersion, exports.PI_X_IDE_TARGET_VERSION, listError);
165
+ candidates.push({
166
+ id: profile.id,
167
+ label: profile.label,
168
+ cli: profile.command,
169
+ cliPath,
170
+ confidence,
171
+ installedVersion,
172
+ targetVersion: exports.PI_X_IDE_TARGET_VERSION,
173
+ needsInstall: reason === "missing" || reason === "outdated" || reason === "unknown",
174
+ reason,
175
+ listError,
176
+ });
177
+ }
178
+ return candidates;
179
+ }
180
+ function selectAutoInstallCandidate(candidates, env = process.env) {
181
+ const currentIde = inferCurrentIdeFromEnv(env);
182
+ const highConfidence = candidates.filter((candidate) => candidate.confidence === "current-terminal" && (!currentIde || candidate.id === currentIde));
183
+ return highConfidence.length === 1 ? highConfidence[0] : undefined;
184
+ }
185
+ async function installIdeExtension(candidate, runtime, options = {}) {
186
+ if (!candidate.needsInstall) {
187
+ return { candidate, skipped: true, success: true, stdout: "", stderr: "" };
188
+ }
189
+ const installKey = candidate.id;
190
+ if (runtime.installingIdeIds.has(installKey)) {
191
+ return {
192
+ candidate,
193
+ skipped: true,
194
+ success: false,
195
+ stdout: "",
196
+ stderr: "",
197
+ error: `${candidate.label} extension install is already in progress.`,
198
+ };
199
+ }
200
+ runtime.installingIdeIds.add(installKey);
201
+ try {
202
+ const { stdout, stderr } = await runCli(candidate.cliPath, buildInstallArgs(), options.timeoutMs ?? 60_000);
203
+ return { candidate, skipped: false, success: true, stdout, stderr };
204
+ }
205
+ catch (error) {
206
+ return {
207
+ candidate,
208
+ skipped: false,
209
+ success: false,
210
+ stdout: getExecOutput(error, "stdout"),
211
+ stderr: getExecOutput(error, "stderr"),
212
+ error: error instanceof Error ? error.message : String(error),
213
+ };
214
+ }
215
+ finally {
216
+ runtime.installingIdeIds.delete(installKey);
217
+ }
218
+ }
219
+ function resolveInstallReason(installedVersion, targetVersion, listError) {
220
+ if (listError)
221
+ return "unknown";
222
+ if (!installedVersion)
223
+ return "missing";
224
+ const comparison = compareExtensionVersions(installedVersion, targetVersion);
225
+ if (comparison === "older")
226
+ return "outdated";
227
+ if (comparison === "equal" || comparison === "newer")
228
+ return "current";
229
+ return "unknown";
230
+ }
231
+ function parseStableVersion(version) {
232
+ const match = /^(\d+)\.(\d+)\.(\d+)(?:$|[-+])/.exec(version.trim());
233
+ if (!match)
234
+ return undefined;
235
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
236
+ }
237
+ function parsePathExt(env) {
238
+ const pathExt = env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD";
239
+ const values = pathExt
240
+ .split(";")
241
+ .map((extension) => extension.trim())
242
+ .filter(Boolean);
243
+ return values.length > 0 ? ["", ...values] : [""];
244
+ }
245
+ function withExtension(command, extension) {
246
+ if (!extension)
247
+ return command;
248
+ return command.toLowerCase().endsWith(extension.toLowerCase()) ? command : `${command}${extension}`;
249
+ }
250
+ function getExecOutput(error, key) {
251
+ if (typeof error !== "object" || error === null || !(key in error))
252
+ return "";
253
+ const value = error[key];
254
+ if (typeof value === "string")
255
+ return value;
256
+ if (Buffer.isBuffer(value))
257
+ return value.toString("utf8");
258
+ if (value === undefined || value === null)
259
+ return "";
260
+ if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint")
261
+ return value.toString();
262
+ return "";
263
+ }
264
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/pi/install.ts"],"names":[],"mappings":"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"}
@@ -20,5 +20,7 @@ export interface PiIdeRuntime {
20
20
  attachState: AttachState;
21
21
  turnSelection?: EditorSelectionSnapshot;
22
22
  reconnectTimer?: NodeJS.Timeout;
23
+ installingIdeIds: Set<string>;
24
+ sessionGeneration: number;
23
25
  }
24
26
  export declare function createRuntime(): PiIdeRuntime;
@@ -7,6 +7,8 @@ function createRuntime() {
7
7
  candidates: [],
8
8
  connectionStatus: "idle",
9
9
  attachState: "idle",
10
+ installingIdeIds: new Set(),
11
+ sessionGeneration: 0,
10
12
  };
11
13
  }
12
14
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/pi/state.ts"],"names":[],"mappings":";;AAqBA,sCAOC;AAPD,SAAgB,aAAa;IAC3B,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,MAAM;QACxB,WAAW,EAAE,MAAM;KACpB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/pi/state.ts"],"names":[],"mappings":";;AAuBA,sCASC;AATD,SAAgB,aAAa;IAC3B,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,MAAM;QACxB,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,IAAI,GAAG,EAAU;QACnC,iBAAiB,EAAE,CAAC;KACrB,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export declare function resolveLockDir(env?: NodeJS.ProcessEnv): string;
2
2
  export declare function normalizePath(input: string): string;
3
3
  export declare function isPathInsideOrEqual(parent: string, child: string): boolean;
4
+ export declare function hasDirectWorkspaceMatch(workspaceFolders: readonly string[], cwd: string): boolean;
4
5
  export declare function relationshipMatchLength(workspaceFolder: string, cwd: string): number;
5
6
  export declare function toRelativeDisplayPath(filePath: string, workspaceFolder?: string, cwd?: string): string;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveLockDir = resolveLockDir;
4
4
  exports.normalizePath = normalizePath;
5
5
  exports.isPathInsideOrEqual = isPathInsideOrEqual;
6
+ exports.hasDirectWorkspaceMatch = hasDirectWorkspaceMatch;
6
7
  exports.relationshipMatchLength = relationshipMatchLength;
7
8
  exports.toRelativeDisplayPath = toRelativeDisplayPath;
8
9
  const node_os_1 = require("node:os");
@@ -24,6 +25,9 @@ function isPathInsideOrEqual(parent, child) {
24
25
  const rel = (0, node_path_1.relative)(normalizedParent, normalizedChild);
25
26
  return rel !== "" && !rel.startsWith("..") && !(0, node_path_1.isAbsolute)(rel);
26
27
  }
28
+ function hasDirectWorkspaceMatch(workspaceFolders, cwd) {
29
+ return workspaceFolders.some((workspaceFolder) => isPathInsideOrEqual(workspaceFolder, cwd));
30
+ }
27
31
  function relationshipMatchLength(workspaceFolder, cwd) {
28
32
  const workspace = normalizePath(workspaceFolder);
29
33
  const active = normalizePath(cwd);
@@ -1 +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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/shared/paths.ts"],"names":[],"mappings":";;AAIA,wCAIC;AAED,sCAEC;AAED,kDAMC;AAED,0DAEC;AAED,0DAgBC;AAED,sDAMC;AAlDD,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,gBAAmC,EAAE,GAAW;IACtF,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,mBAAmB,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/F,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 @@
1
+ export {};
@@ -0,0 +1,99 @@
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 install_1 = require("../src/pi/install");
9
+ const commands_1 = require("../src/pi/commands");
10
+ const state_1 = require("../src/pi/state");
11
+ void (0, node_test_1.default)("checks auto-install env gate", () => {
12
+ strict_1.default.equal((0, install_1.isAutoInstallEnabled)({}), true);
13
+ strict_1.default.equal((0, install_1.isAutoInstallEnabled)({ PI_X_IDE_AUTO_INSTALL: "0" }), false);
14
+ strict_1.default.equal((0, install_1.isAutoInstallEnabled)({ PI_X_IDE_AUTO_INSTALL: "false" }), false);
15
+ strict_1.default.equal((0, install_1.isAutoInstallEnabled)({ PI_X_IDE_AUTO_INSTALL: "OFF" }), false);
16
+ strict_1.default.equal((0, install_1.isAutoInstallEnabled)({ PI_X_IDE_AUTO_INSTALL: "1" }), true);
17
+ strict_1.default.equal((0, install_1.isAutoInstallEnabled)({ PI_X_IDE_AUTO_INSTALL: "true" }), true);
18
+ });
19
+ void (0, node_test_1.default)("parses installed extension versions", () => {
20
+ const output = ["publisher.other@0.1.0", "balaenis.pi-x-ide@1.2.3", "BALAENIS.PI-X-IDE@1.2.4"].join("\n");
21
+ strict_1.default.equal((0, install_1.parseInstalledExtensionVersion)(output), "1.2.3");
22
+ strict_1.default.equal((0, install_1.parseInstalledExtensionVersion)("publisher.other@0.1.0"), undefined);
23
+ });
24
+ void (0, node_test_1.default)("compares stable extension versions", () => {
25
+ strict_1.default.equal((0, install_1.compareExtensionVersions)("1.0.4", "1.0.5"), "older");
26
+ strict_1.default.equal((0, install_1.compareExtensionVersions)("1.0.5", "1.0.5"), "equal");
27
+ strict_1.default.equal((0, install_1.compareExtensionVersions)("1.0.6", "1.0.5"), "newer");
28
+ strict_1.default.equal((0, install_1.compareExtensionVersions)("1.1.0", "1.0.5"), "newer");
29
+ strict_1.default.equal((0, install_1.compareExtensionVersions)("not-a-version", "1.0.5"), "unknown");
30
+ strict_1.default.equal((0, install_1.compareExtensionVersions)(undefined, "1.0.5"), "unknown");
31
+ });
32
+ void (0, node_test_1.default)("infers current IDE from terminal environment conservatively", () => {
33
+ strict_1.default.equal((0, install_1.inferCurrentIdeFromEnv)({ TERM_PROGRAM: "vscode", VSCODE_PID: "123" }), "vscode");
34
+ strict_1.default.equal((0, install_1.inferCurrentIdeFromEnv)({ TERM_PROGRAM: "vscode", CURSOR_TRACE_ID: "trace" }), "cursor");
35
+ strict_1.default.equal((0, install_1.inferCurrentIdeFromEnv)({ TERM_PROGRAM: "vscode", WINDSURF_BIN: "1" }), "windsurf");
36
+ strict_1.default.equal((0, install_1.inferCurrentIdeFromEnv)({ CURSOR_TRACE_ID: "trace", WINDSURF_BIN: "1" }), undefined);
37
+ strict_1.default.equal((0, install_1.inferCurrentIdeFromEnv)({}), undefined);
38
+ });
39
+ void (0, node_test_1.default)("selects only one high-confidence auto-install candidate", () => {
40
+ const vscode = createCandidate({ id: "vscode", confidence: "current-terminal" });
41
+ const cursor = createCandidate({ id: "cursor", confidence: "current-terminal", cli: "cursor", label: "Cursor" });
42
+ const available = createCandidate({ id: "vscode", confidence: "available-cli" });
43
+ strict_1.default.equal((0, install_1.selectAutoInstallCandidate)([vscode], { TERM_PROGRAM: "vscode" }), vscode);
44
+ strict_1.default.equal((0, install_1.selectAutoInstallCandidate)([available], { TERM_PROGRAM: "vscode" }), undefined);
45
+ strict_1.default.equal((0, install_1.selectAutoInstallCandidate)([vscode, cursor], {}), undefined);
46
+ strict_1.default.equal((0, install_1.selectAutoInstallCandidate)([cursor], { CURSOR_TRACE_ID: "trace" }), cursor);
47
+ });
48
+ void (0, node_test_1.default)("builds forced Marketplace install args", () => {
49
+ strict_1.default.deepEqual((0, install_1.buildInstallArgs)(), ["--force", "--install-extension", install_1.PI_X_IDE_EXTENSION_ID]);
50
+ });
51
+ void (0, node_test_1.default)("/ide install completion and handler are wired", async () => {
52
+ let registered;
53
+ let installCalled = false;
54
+ const pi = {
55
+ registerCommand: (_name, command) => {
56
+ registered = command;
57
+ },
58
+ };
59
+ (0, commands_1.registerIdeCommand)(pi, (0, state_1.createRuntime)(), {
60
+ refreshCandidates: () => Promise.resolve([]),
61
+ connectAuto: () => Promise.resolve(),
62
+ connectCandidate: () => Promise.resolve(),
63
+ disconnect: () => { },
64
+ installExtension: () => {
65
+ installCalled = true;
66
+ return Promise.resolve();
67
+ },
68
+ });
69
+ strict_1.default.ok(registered);
70
+ strict_1.default.ok(registered.getArgumentCompletions("")?.some((completion) => completion.value === "install"));
71
+ await registered.handler("install", createCommandContext());
72
+ strict_1.default.equal(installCalled, true);
73
+ });
74
+ function createCandidate(overrides = {}) {
75
+ return {
76
+ id: "vscode",
77
+ label: "VS Code",
78
+ cli: "code",
79
+ cliPath: "/usr/bin/code",
80
+ confidence: "current-terminal",
81
+ targetVersion: "1.0.5",
82
+ needsInstall: true,
83
+ reason: "missing",
84
+ ...overrides,
85
+ };
86
+ }
87
+ function createCommandContext() {
88
+ return {
89
+ cwd: "/repo",
90
+ hasUI: true,
91
+ ui: {
92
+ notify: () => { },
93
+ select: () => Promise.resolve(undefined),
94
+ pasteToEditor: () => { },
95
+ setWidget: () => { },
96
+ },
97
+ };
98
+ }
99
+ //# sourceMappingURL=install.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../test/install.test.ts"],"names":[],"mappings":"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"}
@@ -77,6 +77,12 @@ void (0, node_test_1.default)("matches workspace relationship", () => {
77
77
  strict_1.default.ok((0, paths_1.relationshipMatchLength)("/repo/src", "/repo/src/app") > (0, paths_1.relationshipMatchLength)("/repo", "/repo/src/app"));
78
78
  strict_1.default.equal((0, paths_1.relationshipMatchLength)("/other", "/repo"), 0);
79
79
  });
80
+ void (0, node_test_1.default)("matches direct workspace paths for auto-connect", () => {
81
+ strict_1.default.equal((0, paths_1.hasDirectWorkspaceMatch)(["/repo"], "/repo"), true);
82
+ strict_1.default.equal((0, paths_1.hasDirectWorkspaceMatch)(["/repo"], "/repo/src/app"), true);
83
+ strict_1.default.equal((0, paths_1.hasDirectWorkspaceMatch)(["/repo/src/app"], "/repo"), false);
84
+ strict_1.default.ok((0, paths_1.relationshipMatchLength)("/repo/src/app", "/repo") > 0);
85
+ });
80
86
  void (0, node_test_1.default)("discovers and sorts matching lock files", async () => {
81
87
  const dir = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "pi-x-ide-test-"));
82
88
  const baseLock = {
@@ -97,5 +103,7 @@ void (0, node_test_1.default)("discovers and sorts matching lock files", async (
97
103
  const candidates = await (0, discovery_1.discoverIdeCandidates)({ cwd: "/repo/src/app", lockDir: dir, checkPid: false });
98
104
  strict_1.default.equal(candidates.length, 2);
99
105
  strict_1.default.equal(candidates[0].lock.port, 40001);
106
+ // Invalid lockfile was removed during scanning
107
+ await strict_1.default.rejects(() => (0, promises_1.access)((0, node_path_1.join)(dir, "bad.lock")));
100
108
  });
101
109
  //# sourceMappingURL=shared.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.test.js","sourceRoot":"","sources":["../../test/shared.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.test.js","sourceRoot":"","sources":["../../test/shared.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-x-ide",
3
- "version": "1.0.5",
3
+ "version": "1.2.0",
4
4
  "description": "Pi extension package for IDE selection context integration.",
5
5
  "files": [
6
6
  "dist",
@@ -43,6 +43,7 @@
43
43
  "typescript-eslint": "^8.60.1"
44
44
  },
45
45
  "pi": {
46
+ "image": "https://fastly.jsdelivr.net/gh/balaenis/pi-x-ide@main/assets/icons/pi-x-ide.png",
46
47
  "extensions": [
47
48
  "./src/pi/index.ts"
48
49
  ]
@@ -11,6 +11,7 @@ export interface IdeCommandActions {
11
11
  connectAuto: (ctx: ExtensionCommandContext) => Promise<void>;
12
12
  connectCandidate: (candidate: LockFileCandidate, ctx: ExtensionCommandContext) => Promise<void>;
13
13
  disconnect: (ctx: ExtensionCommandContext, disabled?: boolean) => void;
14
+ installExtension: (ctx: ExtensionCommandContext) => Promise<void>;
14
15
  }
15
16
 
16
17
  export function registerIdeCommand(pi: ExtensionAPI, runtime: PiIdeRuntime, actions: IdeCommandActions): void {
@@ -23,6 +24,7 @@ export function registerIdeCommand(pi: ExtensionAPI, runtime: PiIdeRuntime, acti
23
24
  { value: "auto", label: "auto", description: "Auto-connect to the most recent IDE" },
24
25
  { value: "off", label: "off", description: "Disable IDE integration" },
25
26
  { value: "attach", label: "attach", description: "Attach latest IDE selection to the prompt" },
27
+ { value: "install", label: "install", description: "Install or update the IDE extension" },
26
28
  ];
27
29
  const filtered = subcommands.filter((s) => s.value.startsWith(argumentPrefix));
28
30
  return filtered.length > 0 ? filtered : null;
@@ -50,8 +52,11 @@ export function registerIdeCommand(pi: ExtensionAPI, runtime: PiIdeRuntime, acti
50
52
  case "attach":
51
53
  attachLatest(runtime, ctx);
52
54
  return;
55
+ case "install":
56
+ await actions.installExtension(ctx);
57
+ return;
53
58
  default:
54
- ctx.ui.notify("Usage: /ide [status|list|auto|off|attach]", "warning");
59
+ ctx.ui.notify("Usage: /ide [status|list|auto|off|attach|install]", "warning");
55
60
  }
56
61
  },
57
62
  });