pi-x-ide 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -13
- package/README.zh-CN.md +17 -13
- package/dist/package.json +1 -1
- package/dist/src/pi/commands.d.ts +8 -1
- package/dist/src/pi/commands.js +24 -1
- package/dist/src/pi/commands.js.map +1 -1
- package/dist/src/shared/config-options.d.ts +5 -0
- package/dist/src/shared/config-options.js +5 -0
- package/dist/src/shared/config-options.js.map +1 -1
- package/dist/test/connection.test.js +0 -1
- package/dist/test/connection.test.js.map +1 -1
- package/dist/test/install.test.js +12 -1
- package/dist/test/install.test.js.map +1 -1
- package/package.json +1 -1
- package/schemas/config.json +5 -0
- package/src/pi/commands.ts +34 -3
- package/src/shared/config-options.ts +5 -0
package/README.md
CHANGED
|
@@ -102,7 +102,7 @@ Open a file in your IDE and select some text. The widget should update in real t
|
|
|
102
102
|
IDE: vscode ✓ src/foo.ts#L10,20 pending
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
Attach the selection from either side: press `Ctrl+Alt+K` (Linux/Windows) or `Cmd+Alt+K` (macOS) in a VS Code-family IDE, or focus the Pi TUI and press `Ctrl+Alt+K` / run `/ide attach`. The Pi input box should insert `@src/foo.ts#L10,20`.
|
|
106
106
|
|
|
107
107
|
Type a chat prompt in Pi and submit it. The selected text is injected as LLM context (does not persist in session history). After submission, the widget shows `sent`.
|
|
108
108
|
|
|
@@ -124,6 +124,8 @@ Type a chat prompt in Pi and submit it. The selected text is injected as LLM con
|
|
|
124
124
|
| `/ide attach` | Manually insert the latest selection range into the input box |
|
|
125
125
|
| `/ide install` | Install or update `balaenis.pi-x-ide` through a supported IDE CLI |
|
|
126
126
|
|
|
127
|
+
Pi also registers `Ctrl+Alt+K` in the TUI as a shortcut for `/ide attach` by default. Repeated presses append the latest selected range to the current input, so you can select multiple ranges in the editor and attach them one by one. On macOS, this is a terminal shortcut (`Ctrl+Option+K`); `Cmd` shortcuts are handled by the terminal/OS and are not available to Pi's TUI. Set `PI_X_IDE_ATTACH_SHORTCUT` to another pi key id to customize it, or to `off`/`none`/`false`/`0` to disable it.
|
|
128
|
+
|
|
127
129
|
### Configuration Reference
|
|
128
130
|
|
|
129
131
|
#### VS Code
|
|
@@ -178,23 +180,24 @@ when no binary matches.
|
|
|
178
180
|
|
|
179
181
|
Pi-side variables can be set as real environment variables or in `~/.pi/config.json` under `env`. Real environment variables take precedence.
|
|
180
182
|
|
|
181
|
-
| Variable | Default | Description
|
|
182
|
-
| ------------------------------- | ------------- |
|
|
183
|
-
| `PI_X_IDE_AUTO_INSTALL` | `1` | Auto-install VS Code extension on Pi startup
|
|
184
|
-
| `
|
|
185
|
-
| `
|
|
183
|
+
| Variable | Default | Description |
|
|
184
|
+
| ------------------------------- | ------------- | ----------------------------------------------------------------------------------- |
|
|
185
|
+
| `PI_X_IDE_AUTO_INSTALL` | `1` | Auto-install VS Code extension on Pi startup |
|
|
186
|
+
| `PI_X_IDE_ATTACH_SHORTCUT` | `ctrl+alt+k` | Pi TUI shortcut for `/ide attach`; set to `off`, `none`, `false`, or `0` to disable |
|
|
187
|
+
| `PI_X_IDE_ZED_DB` | (auto-detect) | Override path to Zed SQLite database |
|
|
188
|
+
| `PI_X_IDE_ZED_POLL_INTERVAL_MS` | `1000` | Zed SQLite polling interval, clamped to 100-2000 ms |
|
|
186
189
|
|
|
187
190
|
See [schemas/config.json](schemas/config.json) for editor schema guidance.
|
|
188
191
|
|
|
189
192
|
### Feature Parity
|
|
190
193
|
|
|
191
|
-
| Feature
|
|
192
|
-
|
|
|
193
|
-
| Live file tracking
|
|
194
|
-
| Live selection tracking
|
|
195
|
-
|
|
|
196
|
-
|
|
|
197
|
-
|
|
|
194
|
+
| Feature | VS Code | Zed | Neovim |
|
|
195
|
+
| ---------------------------------------------------- | ----------------------- | ---------- | ----------------------------- |
|
|
196
|
+
| Live file tracking | ✅ Real-time push | ✅ polling | ✅ Real-time push via sidecar |
|
|
197
|
+
| Live selection tracking | ✅ Real-time push | ✅ polling | ✅ Real-time push via sidecar |
|
|
198
|
+
| IDE context attach shortcut | ✅ Default `Ctrl+Alt+K` | ❌ | ✅ Custom configured keymap |
|
|
199
|
+
| Pi TUI context attach shortcut(default `Ctrl+Alt+K`) | ✅ | ✅ | ✅ |
|
|
200
|
+
| LLM context injection | ✅ | ✅ | ✅ |
|
|
198
201
|
|
|
199
202
|
### Lock File Protocol
|
|
200
203
|
|
package/README.zh-CN.md
CHANGED
|
@@ -101,7 +101,7 @@ Pi 自动加载 `pi-x-ide` 并连接 IDE。TUI 底部应显示 `IDE: vscode ✓`
|
|
|
101
101
|
IDE: vscode ✓ src/foo.ts#L10,20 pending
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
可以从任一侧附加选区:在 VS Code 系列 IDE 中按 `Ctrl+Alt+K`(Linux/Windows)或 `Cmd+Alt+K`(macOS),或聚焦 Pi TUI 后按 `Ctrl+Alt+K` / 运行 `/ide attach`。Pi 输入框应插入 `@src/foo.ts#L10,20`。
|
|
105
105
|
|
|
106
106
|
在 Pi 中输入对话提示并提交,选中文本会作为 LLM 上下文注入(不写入 session 历史)。提交后 widget 显示 `sent`。
|
|
107
107
|
|
|
@@ -123,6 +123,8 @@ IDE: vscode ✓ src/foo.ts#L10,20 pending
|
|
|
123
123
|
| `/ide attach` | 手动把最新 selection range 插入输入框 |
|
|
124
124
|
| `/ide install` | 通过支持的 IDE CLI 安装或更新 `balaenis.pi-x-ide` |
|
|
125
125
|
|
|
126
|
+
Pi 默认也会在 TUI 中注册 `Ctrl+Alt+K`,作为 `/ide attach` 的快捷键。重复按下会把最新选中的范围追加到当前输入框,因此可以在编辑器中多次选择不同文本并逐个附加。macOS 上这是终端快捷键(`Ctrl+Option+K`);`Cmd` 快捷键通常由终端或系统处理,Pi TUI 无法接收。设置 `PI_X_IDE_ATTACH_SHORTCUT` 可改成其他 pi key id;设为 `off`/`none`/`false`/`0` 可禁用。
|
|
127
|
+
|
|
126
128
|
### 配置参考
|
|
127
129
|
|
|
128
130
|
#### VS Code
|
|
@@ -176,23 +178,25 @@ require("pi_x_ide").setup({
|
|
|
176
178
|
|
|
177
179
|
Pi 侧变量可设为真实环境变量或写入 `~/.pi/config.json` 的 `env` 中。真实环境变量优先级更高。
|
|
178
180
|
|
|
179
|
-
| 变量 | 默认值 | 说明
|
|
180
|
-
| ------------------------------- | ------------ |
|
|
181
|
-
| `PI_X_IDE_AUTO_INSTALL` | `1` | Pi 启动时自动安装 VS Code 扩展
|
|
182
|
-
| `
|
|
183
|
-
| `
|
|
181
|
+
| 变量 | 默认值 | 说明 |
|
|
182
|
+
| ------------------------------- | ------------ | ------------------------------------------------------------------------- |
|
|
183
|
+
| `PI_X_IDE_AUTO_INSTALL` | `1` | Pi 启动时自动安装 VS Code 扩展 |
|
|
184
|
+
| `PI_X_IDE_ATTACH_SHORTCUT` | `ctrl+alt+k` | Pi TUI 的 `/ide attach` 快捷键;设为 `off`、`none`、`false` 或 `0` 可禁用 |
|
|
185
|
+
| `PI_X_IDE_ZED_DB` | (自动检测) | 覆盖 Zed SQLite 数据库路径 |
|
|
186
|
+
| `PI_X_IDE_ZED_POLL_INTERVAL_MS` | `1000` | Zed SQLite 轮询间隔,会被限制在 100-2000 ms 范围 |
|
|
184
187
|
|
|
185
188
|
编辑器 schema 指导见 [schemas/config.json](schemas/config.json)。
|
|
186
189
|
|
|
187
190
|
### 功能对比
|
|
188
191
|
|
|
189
|
-
| 功能
|
|
190
|
-
|
|
|
191
|
-
| 实时文件追踪
|
|
192
|
-
| 实时选区追踪
|
|
193
|
-
|
|
|
194
|
-
|
|
|
195
|
-
|
|
|
192
|
+
| 功能 | VS Code | Zed | Neovim |
|
|
193
|
+
| ------------------------------------------------ | -------------------- | ----------- | ------------------------ |
|
|
194
|
+
| 实时文件追踪 | ✅ 实时推送 | ✅ 1 秒轮询 | ✅ 通过 sidecar 实时推送 |
|
|
195
|
+
| 实时选区追踪 | ✅ 实时推送 | ✅ 1 秒轮询 | ✅ 通过 sidecar 实时推送 |
|
|
196
|
+
| IDE 上下文 attach 快捷键 | ✅ 默认 `Ctrl+Alt+K` | ❌ | ✅ 自定义快捷键 keymap |
|
|
197
|
+
| Pi TUI 上下文 attach 快捷键(默认 `Ctrl+Alt+K`) | ✅ | ✅ | ✅ |
|
|
198
|
+
| LLM 上下文注入 | ✅ | ✅ | ✅ |
|
|
199
|
+
| `/ide auto` | ✅ | ✅ | ✅ |
|
|
196
200
|
|
|
197
201
|
### Lock File 协议
|
|
198
202
|
|
package/dist/package.json
CHANGED
|
@@ -3,6 +3,9 @@ import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-c
|
|
|
3
3
|
};
|
|
4
4
|
import type { LockFileCandidate } from "../shared/protocol";
|
|
5
5
|
import type { PiIdeRuntime } from "./state";
|
|
6
|
+
export declare const PI_X_IDE_ATTACH_SHORTCUT_ENV = "PI_X_IDE_ATTACH_SHORTCUT";
|
|
7
|
+
export declare const DEFAULT_ATTACH_SHORTCUT = "ctrl+alt+k";
|
|
8
|
+
type ShortcutKey = Parameters<ExtensionAPI["registerShortcut"]>[0];
|
|
6
9
|
export interface IdeCommandActions {
|
|
7
10
|
refreshCandidates: (ctx: ExtensionCommandContext) => Promise<LockFileCandidate[]>;
|
|
8
11
|
connectAuto: (ctx: ExtensionCommandContext) => Promise<void>;
|
|
@@ -10,4 +13,8 @@ export interface IdeCommandActions {
|
|
|
10
13
|
disconnect: (ctx: ExtensionCommandContext, disabled?: boolean) => void;
|
|
11
14
|
installExtension: (ctx: ExtensionCommandContext) => Promise<void>;
|
|
12
15
|
}
|
|
13
|
-
export declare function registerIdeCommand(pi: ExtensionAPI, runtime: PiIdeRuntime, actions: IdeCommandActions
|
|
16
|
+
export declare function registerIdeCommand(pi: ExtensionAPI, runtime: PiIdeRuntime, actions: IdeCommandActions, options?: {
|
|
17
|
+
env?: NodeJS.ProcessEnv;
|
|
18
|
+
}): void;
|
|
19
|
+
export declare function resolveAttachShortcut(env?: NodeJS.ProcessEnv): ShortcutKey | undefined;
|
|
20
|
+
export {};
|
package/dist/src/pi/commands.js
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_ATTACH_SHORTCUT = exports.PI_X_IDE_ATTACH_SHORTCUT_ENV = void 0;
|
|
3
4
|
exports.registerIdeCommand = registerIdeCommand;
|
|
5
|
+
exports.resolveAttachShortcut = resolveAttachShortcut;
|
|
6
|
+
const config_1 = require("../shared/config");
|
|
4
7
|
const format_1 = require("../shared/format");
|
|
5
8
|
const ui_1 = require("./ui");
|
|
6
|
-
|
|
9
|
+
exports.PI_X_IDE_ATTACH_SHORTCUT_ENV = "PI_X_IDE_ATTACH_SHORTCUT";
|
|
10
|
+
exports.DEFAULT_ATTACH_SHORTCUT = "ctrl+alt+k";
|
|
11
|
+
const DISABLED_ATTACH_SHORTCUT_VALUES = new Set(["", "0", "false", "off", "none", "disabled"]);
|
|
12
|
+
function registerIdeCommand(pi, runtime, actions, options = {}) {
|
|
13
|
+
const attachShortcut = resolveAttachShortcut(options.env);
|
|
14
|
+
if (attachShortcut) {
|
|
15
|
+
pi.registerShortcut(attachShortcut, {
|
|
16
|
+
description: "Attach latest IDE selection to the prompt",
|
|
17
|
+
handler: (ctx) => {
|
|
18
|
+
runtime.ctx = ctx;
|
|
19
|
+
attachLatest(runtime, ctx);
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
7
23
|
pi.registerCommand("ide", {
|
|
8
24
|
description: "Manage IDE connection and editor selection context",
|
|
9
25
|
getArgumentCompletions: (argumentPrefix) => {
|
|
@@ -86,6 +102,13 @@ async function listCandidates(actions, ctx) {
|
|
|
86
102
|
.map((candidate, index) => `${index + 1}. ${candidate.lock.name} ${candidate.lock.host}:${candidate.lock.port}\n ${candidate.workspaceFolder}\n ${candidate.path}`)
|
|
87
103
|
.join("\n"), "info");
|
|
88
104
|
}
|
|
105
|
+
function resolveAttachShortcut(env = process.env) {
|
|
106
|
+
const value = (0, config_1.resolvePiConfigEnv)(env)[exports.PI_X_IDE_ATTACH_SHORTCUT_ENV] ?? exports.DEFAULT_ATTACH_SHORTCUT;
|
|
107
|
+
const normalized = value.trim().toLowerCase();
|
|
108
|
+
if (DISABLED_ATTACH_SHORTCUT_VALUES.has(normalized))
|
|
109
|
+
return undefined;
|
|
110
|
+
return normalized;
|
|
111
|
+
}
|
|
89
112
|
function attachLatest(runtime, ctx) {
|
|
90
113
|
if (!runtime.latestSelection) {
|
|
91
114
|
ctx.ui.notify("No IDE selection is available.", "warning");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/pi/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/pi/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,11 @@ export declare const CONFIG_ENV_OPTIONS: {
|
|
|
15
15
|
readonly default: "enabled";
|
|
16
16
|
readonly description: "Controls VS Code-family extension auto-install. Values 0, false, and off disable it.";
|
|
17
17
|
};
|
|
18
|
+
readonly PI_X_IDE_ATTACH_SHORTCUT: {
|
|
19
|
+
readonly type: readonly ["string"];
|
|
20
|
+
readonly default: "ctrl+alt+k";
|
|
21
|
+
readonly description: "Pi TUI shortcut for attaching the latest IDE selection. Set to off, none, false, or 0 to disable.";
|
|
22
|
+
};
|
|
18
23
|
readonly PI_X_IDE_ZED_DB: {
|
|
19
24
|
readonly type: readonly ["string"];
|
|
20
25
|
readonly description: "Override path to Zed's SQLite database.";
|
|
@@ -12,6 +12,11 @@ exports.CONFIG_ENV_OPTIONS = {
|
|
|
12
12
|
default: "enabled",
|
|
13
13
|
description: "Controls VS Code-family extension auto-install. Values 0, false, and off disable it.",
|
|
14
14
|
},
|
|
15
|
+
PI_X_IDE_ATTACH_SHORTCUT: {
|
|
16
|
+
type: ["string"],
|
|
17
|
+
default: "ctrl+alt+k",
|
|
18
|
+
description: "Pi TUI shortcut for attaching the latest IDE selection. Set to off, none, false, or 0 to disable.",
|
|
19
|
+
},
|
|
15
20
|
PI_X_IDE_ZED_DB: {
|
|
16
21
|
type: ["string"],
|
|
17
22
|
description: "Override path to Zed's SQLite database.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-options.js","sourceRoot":"","sources":["../../../src/shared/config-options.ts"],"names":[],"mappings":";;;AAcA,4CAEC;AAJY,QAAA,sBAAsB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAkD,CAAC;AAEvH,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,8BAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC;AACtE,CAAC;AAEY,QAAA,kBAAkB,GAAG;IAChC,qBAAqB,EAAE;QACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;QACrC,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,sFAAsF;KACpG;IACD,eAAe,EAAE;QACf,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,WAAW,EAAE,yCAAyC;KACvD;IACD,6BAA6B,EAAE;QAC7B,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC1B,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,MAAM;KAChB;CACiD,CAAC;AAExC,QAAA,0BAA0B,GAAG,EAAuD,CAAC"}
|
|
1
|
+
{"version":3,"file":"config-options.js","sourceRoot":"","sources":["../../../src/shared/config-options.ts"],"names":[],"mappings":";;;AAcA,4CAEC;AAJY,QAAA,sBAAsB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAkD,CAAC;AAEvH,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,8BAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC;AACtE,CAAC;AAEY,QAAA,kBAAkB,GAAG;IAChC,qBAAqB,EAAE;QACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;QACrC,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,sFAAsF;KACpG;IACD,wBAAwB,EAAE;QACxB,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,mGAAmG;KACjH;IACD,eAAe,EAAE;QACf,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,WAAW,EAAE,yCAAyC;KACvD;IACD,6BAA6B,EAAE;QAC7B,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC1B,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,MAAM;KAChB;CACiD,CAAC;AAExC,QAAA,0BAA0B,GAAG,EAAuD,CAAC"}
|
|
@@ -17,7 +17,6 @@ void (0, node_test_1.default)("caps reconnect attempts at three per candidate",
|
|
|
17
17
|
strict_1.default.equal((0, reconnect_1.recordReconnectAttempt)(runtime, candidate), reconnect_1.MAX_RECONNECT_ATTEMPTS);
|
|
18
18
|
strict_1.default.equal((0, reconnect_1.recordReconnectAttempt)(runtime, candidate), undefined);
|
|
19
19
|
strict_1.default.match((0, reconnect_1.formatReconnectLimitMessage)(candidate), /after 3 attempts/);
|
|
20
|
-
strict_1.default.match((0, reconnect_1.formatReconnectLimitMessage)(candidate), /\/ide/);
|
|
21
20
|
const nextCandidate = createCandidate({ port: 41002 });
|
|
22
21
|
strict_1.default.equal((0, reconnect_1.recordReconnectAttempt)(runtime, nextCandidate), 1);
|
|
23
22
|
(0, reconnect_1.resetReconnectState)(runtime);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.test.js","sourceRoot":"","sources":["../../test/connection.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAwC;AACxC,uCAAuE;AACvE,0DAA6B;AAC7B,qDAAgF;AAChF,mDAK6B;AAC7B,2CAAgD;AAGhD,KAAK,IAAA,mBAAI,EAAC,gDAAgD,EAAE,GAAG,EAAE;IAC/D,MAAM,OAAO,GAAG,IAAA,qBAAa,GAAE,CAAC;IAChC,MAAM,SAAS,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnD,gBAAM,CAAC,KAAK,CAAC,IAAA,kCAAsB,EAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,gBAAM,CAAC,KAAK,CAAC,IAAA,kCAAsB,EAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,gBAAM,CAAC,KAAK,CAAC,IAAA,kCAAsB,EAAC,OAAO,EAAE,SAAS,CAAC,EAAE,kCAAsB,CAAC,CAAC;IACjF,gBAAM,CAAC,KAAK,CAAC,IAAA,kCAAsB,EAAC,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IACpE,gBAAM,CAAC,KAAK,CAAC,IAAA,uCAA2B,EAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.test.js","sourceRoot":"","sources":["../../test/connection.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,13 +61,23 @@ void (0, node_test_1.default)("selects only one high-confidence auto-install can
|
|
|
61
61
|
void (0, node_test_1.default)("builds forced Marketplace install args", () => {
|
|
62
62
|
strict_1.default.deepEqual((0, install_1.buildInstallArgs)(), ["--force", "--install-extension", install_1.PI_X_IDE_EXTENSION_ID]);
|
|
63
63
|
});
|
|
64
|
+
void (0, node_test_1.default)("resolves configurable Pi TUI attach shortcut", () => {
|
|
65
|
+
strict_1.default.equal((0, commands_1.resolveAttachShortcut)({}), commands_1.DEFAULT_ATTACH_SHORTCUT);
|
|
66
|
+
strict_1.default.equal((0, commands_1.resolveAttachShortcut)({ [commands_1.PI_X_IDE_ATTACH_SHORTCUT_ENV]: "Ctrl+Shift+I" }), "ctrl+shift+i");
|
|
67
|
+
strict_1.default.equal((0, commands_1.resolveAttachShortcut)({ [commands_1.PI_X_IDE_ATTACH_SHORTCUT_ENV]: "off" }), undefined);
|
|
68
|
+
strict_1.default.equal((0, commands_1.resolveAttachShortcut)({ [commands_1.PI_X_IDE_ATTACH_SHORTCUT_ENV]: "0" }), undefined);
|
|
69
|
+
});
|
|
64
70
|
void (0, node_test_1.default)("/ide install completion and handler are wired", async () => {
|
|
65
71
|
let registered;
|
|
72
|
+
let shortcut;
|
|
66
73
|
let installCalled = false;
|
|
67
74
|
const pi = {
|
|
68
75
|
registerCommand: (_name, command) => {
|
|
69
76
|
registered = command;
|
|
70
77
|
},
|
|
78
|
+
registerShortcut: (key) => {
|
|
79
|
+
shortcut = key;
|
|
80
|
+
},
|
|
71
81
|
};
|
|
72
82
|
(0, commands_1.registerIdeCommand)(pi, (0, state_1.createRuntime)(), {
|
|
73
83
|
refreshCandidates: () => Promise.resolve([]),
|
|
@@ -78,8 +88,9 @@ void (0, node_test_1.default)("/ide install completion and handler are wired", a
|
|
|
78
88
|
installCalled = true;
|
|
79
89
|
return Promise.resolve();
|
|
80
90
|
},
|
|
81
|
-
});
|
|
91
|
+
}, { env: { [commands_1.PI_X_IDE_ATTACH_SHORTCUT_ENV]: "ctrl+shift+i" } });
|
|
82
92
|
strict_1.default.ok(registered);
|
|
93
|
+
strict_1.default.equal(shortcut, "ctrl+shift+i");
|
|
83
94
|
strict_1.default.ok(registered.getArgumentCompletions("")?.some((completion) => completion.value === "install"));
|
|
84
95
|
await registered.handler("install", createCommandContext());
|
|
85
96
|
strict_1.default.equal(installCalled, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../test/install.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAwC;AACxC,+CAA6D;AAC7D,qCAAiC;AACjC,yCAAiC;AACjC,0DAA6B;AAI7B,+CAS2B;AAC3B,
|
|
1
|
+
{"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../test/install.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/schemas/config.json
CHANGED
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
],
|
|
26
26
|
"description": "Controls VS Code-family extension auto-install. Values 0, false, and off disable it."
|
|
27
27
|
},
|
|
28
|
+
"PI_X_IDE_ATTACH_SHORTCUT": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"description": "Pi TUI shortcut for attaching the latest IDE selection. Set to off, none, false, or 0 to disable."
|
|
31
|
+
},
|
|
28
32
|
"PI_X_IDE_ZED_DB": {
|
|
29
33
|
"type": "string",
|
|
30
34
|
"description": "Override path to Zed's SQLite database."
|
|
@@ -44,6 +48,7 @@
|
|
|
44
48
|
{
|
|
45
49
|
"env": {
|
|
46
50
|
"PI_X_IDE_AUTO_INSTALL": "0",
|
|
51
|
+
"PI_X_IDE_ATTACH_SHORTCUT": "ctrl+alt+k",
|
|
47
52
|
"PI_X_IDE_ZED_DB": "/home/user/.local/share/zed/db/0-stable/db.sqlite",
|
|
48
53
|
"PI_X_IDE_ZED_POLL_INTERVAL_MS": 1000
|
|
49
54
|
}
|
package/src/pi/commands.ts
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent" with {
|
|
1
|
+
import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from "@earendil-works/pi-coding-agent" with {
|
|
2
2
|
"resolution-mode": "import",
|
|
3
3
|
};
|
|
4
|
+
import { resolvePiConfigEnv } from "../shared/config";
|
|
4
5
|
import { formatRangeMention } from "../shared/format";
|
|
5
6
|
import type { LockFileCandidate } from "../shared/protocol";
|
|
6
7
|
import type { PiIdeRuntime } from "./state";
|
|
7
8
|
import { buildWidget, updateIdeUi } from "./ui";
|
|
8
9
|
|
|
10
|
+
export const PI_X_IDE_ATTACH_SHORTCUT_ENV = "PI_X_IDE_ATTACH_SHORTCUT";
|
|
11
|
+
export const DEFAULT_ATTACH_SHORTCUT = "ctrl+alt+k";
|
|
12
|
+
|
|
13
|
+
const DISABLED_ATTACH_SHORTCUT_VALUES = new Set(["", "0", "false", "off", "none", "disabled"]);
|
|
14
|
+
|
|
15
|
+
type ShortcutKey = Parameters<ExtensionAPI["registerShortcut"]>[0];
|
|
16
|
+
|
|
9
17
|
export interface IdeCommandActions {
|
|
10
18
|
refreshCandidates: (ctx: ExtensionCommandContext) => Promise<LockFileCandidate[]>;
|
|
11
19
|
connectAuto: (ctx: ExtensionCommandContext) => Promise<void>;
|
|
@@ -14,7 +22,23 @@ export interface IdeCommandActions {
|
|
|
14
22
|
installExtension: (ctx: ExtensionCommandContext) => Promise<void>;
|
|
15
23
|
}
|
|
16
24
|
|
|
17
|
-
export function registerIdeCommand(
|
|
25
|
+
export function registerIdeCommand(
|
|
26
|
+
pi: ExtensionAPI,
|
|
27
|
+
runtime: PiIdeRuntime,
|
|
28
|
+
actions: IdeCommandActions,
|
|
29
|
+
options: { env?: NodeJS.ProcessEnv } = {},
|
|
30
|
+
): void {
|
|
31
|
+
const attachShortcut = resolveAttachShortcut(options.env);
|
|
32
|
+
if (attachShortcut) {
|
|
33
|
+
pi.registerShortcut(attachShortcut, {
|
|
34
|
+
description: "Attach latest IDE selection to the prompt",
|
|
35
|
+
handler: (ctx) => {
|
|
36
|
+
runtime.ctx = ctx;
|
|
37
|
+
attachLatest(runtime, ctx);
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
18
42
|
pi.registerCommand("ide", {
|
|
19
43
|
description: "Manage IDE connection and editor selection context",
|
|
20
44
|
getArgumentCompletions: (argumentPrefix: string) => {
|
|
@@ -114,7 +138,14 @@ async function listCandidates(actions: IdeCommandActions, ctx: ExtensionCommandC
|
|
|
114
138
|
);
|
|
115
139
|
}
|
|
116
140
|
|
|
117
|
-
function
|
|
141
|
+
export function resolveAttachShortcut(env: NodeJS.ProcessEnv = process.env): ShortcutKey | undefined {
|
|
142
|
+
const value = resolvePiConfigEnv(env)[PI_X_IDE_ATTACH_SHORTCUT_ENV] ?? DEFAULT_ATTACH_SHORTCUT;
|
|
143
|
+
const normalized = value.trim().toLowerCase();
|
|
144
|
+
if (DISABLED_ATTACH_SHORTCUT_VALUES.has(normalized)) return undefined;
|
|
145
|
+
return normalized as ShortcutKey;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function attachLatest(runtime: PiIdeRuntime, ctx: ExtensionContext): void {
|
|
118
149
|
if (!runtime.latestSelection) {
|
|
119
150
|
ctx.ui.notify("No IDE selection is available.", "warning");
|
|
120
151
|
return;
|
|
@@ -22,6 +22,11 @@ export const CONFIG_ENV_OPTIONS = {
|
|
|
22
22
|
default: "enabled",
|
|
23
23
|
description: "Controls VS Code-family extension auto-install. Values 0, false, and off disable it.",
|
|
24
24
|
},
|
|
25
|
+
PI_X_IDE_ATTACH_SHORTCUT: {
|
|
26
|
+
type: ["string"],
|
|
27
|
+
default: "ctrl+alt+k",
|
|
28
|
+
description: "Pi TUI shortcut for attaching the latest IDE selection. Set to off, none, false, or 0 to disable.",
|
|
29
|
+
},
|
|
25
30
|
PI_X_IDE_ZED_DB: {
|
|
26
31
|
type: ["string"],
|
|
27
32
|
description: "Override path to Zed's SQLite database.",
|