pi-x-ide 1.12.0 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -28
- package/README.zh-CN.md +34 -28
- package/dist/package.json +6 -6
- package/dist/src/nvim/sidecar.js +15 -4
- package/dist/src/nvim/sidecar.js.map +1 -1
- package/dist/src/pi/commands.js +7 -4
- package/dist/src/pi/commands.js.map +1 -1
- package/dist/src/pi/connection.d.ts +3 -0
- package/dist/src/pi/connection.js +48 -11
- package/dist/src/pi/connection.js.map +1 -1
- package/dist/src/pi/context.js +7 -7
- package/dist/src/pi/context.js.map +1 -1
- package/dist/src/pi/index.js +33 -28
- package/dist/src/pi/index.js.map +1 -1
- package/dist/src/pi/safety.d.ts +7 -0
- package/dist/src/pi/safety.js +20 -0
- package/dist/src/pi/safety.js.map +1 -0
- package/dist/src/pi/ui.js +55 -15
- package/dist/src/pi/ui.js.map +1 -1
- package/dist/src/pi/zed.js +51 -42
- package/dist/src/pi/zed.js.map +1 -1
- package/dist/src/shared/errors.d.ts +5 -0
- package/dist/src/shared/errors.js +49 -0
- package/dist/src/shared/errors.js.map +1 -0
- package/dist/src/shared/format.d.ts +4 -4
- package/dist/src/shared/format.js +24 -18
- package/dist/src/shared/format.js.map +1 -1
- package/dist/src/shared/ide-server.d.ts +2 -0
- package/dist/src/shared/ide-server.js +63 -8
- package/dist/src/shared/ide-server.js.map +1 -1
- package/dist/test/connection.test.js +74 -5
- package/dist/test/connection.test.js.map +1 -1
- package/dist/test/shared.test.js +91 -5
- package/dist/test/shared.test.js.map +1 -1
- package/package.json +6 -6
- package/src/nvim/sidecar.ts +15 -4
- package/src/pi/commands.ts +48 -32
- package/src/pi/connection.ts +49 -10
- package/src/pi/context.ts +41 -26
- package/src/pi/index.ts +70 -45
- package/src/pi/safety.ts +38 -0
- package/src/pi/ui.ts +85 -42
- package/src/pi/zed.ts +51 -43
- package/src/shared/errors.ts +43 -0
- package/src/shared/format.ts +25 -22
- package/src/shared/ide-server.ts +63 -9
package/README.md
CHANGED
|
@@ -14,8 +14,6 @@ Automatically attaches the currently opened or selected file and text range from
|
|
|
14
14
|
pi install npm:pi-x-ide
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
This installs `pi-x-ide` as a global Pi extension. Pi loads it automatically on startup — no flags needed.
|
|
18
|
-
|
|
19
17
|
### Install the IDE Extension
|
|
20
18
|
|
|
21
19
|
#### VS Code / Cursor / Windsurf
|
|
@@ -51,16 +49,22 @@ SHA-256 digest before caching it. If the download or checksum verification fails
|
|
|
51
49
|
or no binary matches your platform, the plugin falls back to the bundled Node.js
|
|
52
50
|
sidecar — Node.js is then required on PATH.
|
|
53
51
|
|
|
54
|
-
|
|
55
|
-
starts.
|
|
52
|
+
Downloaded binaries are cached under `stdpath("cache")/pi-x-ide/` and reused on
|
|
53
|
+
subsequent starts. The optional lazy.nvim build hook uses the bundled binary when
|
|
54
|
+
present; otherwise it checks the release digest on install and update,
|
|
55
|
+
downloading only when the cached binary is missing or stale.
|
|
56
56
|
|
|
57
57
|
**lazy.nvim:**
|
|
58
58
|
|
|
59
59
|
```lua
|
|
60
60
|
{
|
|
61
61
|
"balaenis/pi-x-ide",
|
|
62
|
+
build = function(plugin)
|
|
63
|
+
vim.opt.rtp:prepend(plugin.dir .. "/ide-plugins/nvim")
|
|
64
|
+
require("pi_x_ide.download").run({ refresh = true })
|
|
65
|
+
end,
|
|
62
66
|
init = function(plugin)
|
|
63
|
-
vim.opt.rtp:prepend(plugin.dir .. "/nvim")
|
|
67
|
+
vim.opt.rtp:prepend(plugin.dir .. "/ide-plugins/nvim")
|
|
64
68
|
end,
|
|
65
69
|
main = "pi_x_ide",
|
|
66
70
|
opts = {
|
|
@@ -69,12 +73,19 @@ starts. Plugin updates trigger a one-time re-download.
|
|
|
69
73
|
}
|
|
70
74
|
```
|
|
71
75
|
|
|
72
|
-
> **Note:** The `init` block manually adds the `nvim/` subdirectory to the runtime path to avoid a Lua module resolution issue with some lazy.nvim versions. The plugin options are passed through lazy.nvim's recommended `opts` field.
|
|
76
|
+
> **Note:** The `init` block manually adds the `ide-plugins/nvim/` subdirectory to the runtime path to avoid a Lua module resolution issue with some lazy.nvim versions. The plugin options are passed through lazy.nvim's recommended `opts` field.
|
|
77
|
+
>
|
|
78
|
+
> The optional `build` hook resolves the bundled sidecar binary when present;
|
|
79
|
+
> otherwise it checks the GitHub Release asset digest at install/update time
|
|
80
|
+
> (`:Lazy build pi-x-ide` to re-run) and downloads only when the cached binary is
|
|
81
|
+
> missing or stale. It is safe to omit: the plugin still downloads the binary
|
|
82
|
+
> lazily on first start and falls back to the Node.js sidecar if the download is
|
|
83
|
+
> unavailable.
|
|
73
84
|
|
|
74
85
|
**Native package:**
|
|
75
86
|
|
|
76
87
|
```vim
|
|
77
|
-
set runtimepath+=/path/to/pi-x-ide/nvim
|
|
88
|
+
set runtimepath+=/path/to/pi-x-ide/ide-plugins/nvim
|
|
78
89
|
lua require("pi_x_ide").setup({ keymap = "<leader>pa" })
|
|
79
90
|
```
|
|
80
91
|
|
|
@@ -95,10 +106,10 @@ Pi auto-loads `pi-x-ide` and connects to your IDE. The TUI should display `IDE:
|
|
|
95
106
|
Open a file in your IDE and select some text. The widget should update in real time:
|
|
96
107
|
|
|
97
108
|
```
|
|
98
|
-
IDE: vscode ✓ src/foo.ts#L10
|
|
109
|
+
IDE: vscode ✓ src/foo.ts#L10-L20 pending
|
|
99
110
|
```
|
|
100
111
|
|
|
101
|
-
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
|
|
112
|
+
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-L20`.
|
|
102
113
|
|
|
103
114
|
Type a chat prompt in Pi and submit it. The selected text is injected as LLM context (does not persist in session history). After submission, the widget shows `sent`.
|
|
104
115
|
|
|
@@ -128,10 +139,9 @@ Pi also registers `Ctrl+Alt+K` in the TUI as a shortcut for `/ide attach` by def
|
|
|
128
139
|
|
|
129
140
|
#### VS Code
|
|
130
141
|
|
|
131
|
-
| Key
|
|
132
|
-
|
|
|
133
|
-
| `piXIde.
|
|
134
|
-
| `piXIde.useTmux` | `boolean` | `false` | Open Pi through `tmux` from the terminal icon. Each click creates a new session that is destroyed when the terminal detaches. |
|
|
142
|
+
| Key | Type | Default | Description |
|
|
143
|
+
| ---------------- | --------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
144
|
+
| `piXIde.useTmux` | `boolean` | `false` | Open Pi through `tmux` from the terminal icon. Each click creates a new session that is destroyed when the terminal detaches. |
|
|
135
145
|
|
|
136
146
|
#### Zed
|
|
137
147
|
|
|
@@ -154,7 +164,6 @@ When Pi runs in WSL and Zed runs as a Windows app, pi-x-ide normalizes Windows p
|
|
|
154
164
|
require("pi_x_ide").setup({
|
|
155
165
|
enabled = true,
|
|
156
166
|
keymap = "<C-A-k>",
|
|
157
|
-
range_format = "comma", -- or "dash"
|
|
158
167
|
debounce_ms = 150,
|
|
159
168
|
-- sidecar_cmd = { "node", "/absolute/path/to/pi-x-ide-nvim-sidecar.cjs" },
|
|
160
169
|
-- (defaults to the platform binary; falls back to node + cjs if no binary found)
|
|
@@ -168,12 +177,12 @@ when no binary matches.
|
|
|
168
177
|
|
|
169
178
|
**Commands:**
|
|
170
179
|
|
|
171
|
-
| Command | Behavior
|
|
172
|
-
| --------------- |
|
|
173
|
-
| `:PiXIdeStart` | Start the Neovim sidecar and write the lock file
|
|
174
|
-
| `:PiXIdeStop` | Stop the sidecar and remove the lock file
|
|
175
|
-
| `:PiXIdeStatus` | Show whether the sidecar is running
|
|
176
|
-
| `:PiXIdeAttach` | Attach the current file or selection to Pi as `@relative/path#Lx
|
|
180
|
+
| Command | Behavior |
|
|
181
|
+
| --------------- | -------------------------------------------------------------------- |
|
|
182
|
+
| `:PiXIdeStart` | Start the Neovim sidecar and write the lock file |
|
|
183
|
+
| `:PiXIdeStop` | Stop the sidecar and remove the lock file |
|
|
184
|
+
| `:PiXIdeStatus` | Show whether the sidecar is running |
|
|
185
|
+
| `:PiXIdeAttach` | Attach the current file or selection to Pi as `@relative/path#Lx-Ly` |
|
|
177
186
|
|
|
178
187
|
#### Pi-side Environment Variables
|
|
179
188
|
|
|
@@ -243,13 +252,13 @@ pi -e ./src/pi/index.ts
|
|
|
243
252
|
|
|
244
253
|
All `bun run` commands have equivalent `mise run` tasks (see `mise.toml`):
|
|
245
254
|
|
|
246
|
-
| Command | Description
|
|
247
|
-
| ----------------------------- |
|
|
248
|
-
| `bun run build` | Build Pi-side TypeScript → `dist/` + Neovim sidecar → `nvim/bin/` + VS Code bundle → `vscode/out/` |
|
|
249
|
-
| `bun run typecheck` | Type-check only (no output files)
|
|
250
|
-
| `bun run test` | Build + run unit tests
|
|
251
|
-
| `bun run package:vsix` | Package VS Code extension as VSIX
|
|
252
|
-
| `bun run check:config-schema` | Verify `schemas/config.json` is in sync with the config registry
|
|
255
|
+
| Command | Description |
|
|
256
|
+
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
257
|
+
| `bun run build` | Build Pi-side TypeScript → `dist/` + Neovim sidecar → `ide-plugins/nvim/bin/` + VS Code bundle → `ide-plugins/vscode/out/` |
|
|
258
|
+
| `bun run typecheck` | Type-check only (no output files) |
|
|
259
|
+
| `bun run test` | Build + run unit tests |
|
|
260
|
+
| `bun run package:vsix` | Package VS Code extension as VSIX |
|
|
261
|
+
| `bun run check:config-schema` | Verify `schemas/config.json` is in sync with the config registry |
|
|
253
262
|
|
|
254
263
|
### Testing the VS Code Extension Locally
|
|
255
264
|
|
|
@@ -266,7 +275,7 @@ All `bun run` commands have equivalent `mise run` tasks (see `mise.toml`):
|
|
|
266
275
|
|
|
267
276
|
```bash
|
|
268
277
|
bun run package:vsix
|
|
269
|
-
cd vscode && code --install-extension dist/pi-x-ide-$(node -p "require('./package.json').version").vsix
|
|
278
|
+
cd ide-plugins/vscode && code --install-extension dist/pi-x-ide-$(node -p "require('./package.json').version").vsix
|
|
270
279
|
```
|
|
271
280
|
|
|
272
281
|
The extension installed this way runs in all VS Code windows, independent of the F5 Extension Host.
|
|
@@ -284,3 +293,7 @@ You should see a file like `vscode-12345-48123.lock`. If not, run **Developer: R
|
|
|
284
293
|
This project uses [Release Please](https://github.com/googleapis/release-please) with [Conventional Commits](https://www.conventionalcommits.org/) to automate versioning and publishing.
|
|
285
294
|
|
|
286
295
|
See [RELEASE.md](RELEASE.md) for the full release guide.
|
|
296
|
+
|
|
297
|
+
## Acknowledgments
|
|
298
|
+
|
|
299
|
+
- [opencode](https://github.com/anomalyco/opencode)
|
package/README.zh-CN.md
CHANGED
|
@@ -14,8 +14,6 @@
|
|
|
14
14
|
pi install npm:pi-x-ide
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
将 `pi-x-ide` 安装为全局 Pi 扩展,Pi 启动时自动加载,无需额外参数。
|
|
18
|
-
|
|
19
17
|
### 安装 IDE 扩展
|
|
20
18
|
|
|
21
19
|
#### VS Code / Cursor / Windsurf
|
|
@@ -50,16 +48,20 @@ x64 或 arm64),并在写入缓存前用 release asset 的 SHA-256 digest 做
|
|
|
50
48
|
或校验失败、或无匹配二进制时,插件降级到内置的 Node.js sidecar — 此时需要
|
|
51
49
|
PATH 中有 Node.js。
|
|
52
50
|
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
下载的二进制文件缓存在 `stdpath("cache")/pi-x-ide/` 目录,后续启动直接复用。可选的
|
|
52
|
+
lazy.nvim build 钩子会优先使用插件包内的 bundled binary;如果不存在,则在安装和更新时检查 release digest,仅在缓存二进制缺失或过期时下载。
|
|
55
53
|
|
|
56
54
|
**lazy.nvim:**
|
|
57
55
|
|
|
58
56
|
```lua
|
|
59
57
|
{
|
|
60
58
|
"balaenis/pi-x-ide",
|
|
59
|
+
build = function(plugin)
|
|
60
|
+
vim.opt.rtp:prepend(plugin.dir .. "/ide-plugins/nvim")
|
|
61
|
+
require("pi_x_ide.download").run({ refresh = true })
|
|
62
|
+
end,
|
|
61
63
|
init = function(plugin)
|
|
62
|
-
vim.opt.rtp:prepend(plugin.dir .. "/nvim")
|
|
64
|
+
vim.opt.rtp:prepend(plugin.dir .. "/ide-plugins/nvim")
|
|
63
65
|
end,
|
|
64
66
|
main = "pi_x_ide",
|
|
65
67
|
opts = {
|
|
@@ -68,12 +70,14 @@ PATH 中有 Node.js。
|
|
|
68
70
|
}
|
|
69
71
|
```
|
|
70
72
|
|
|
71
|
-
> **注意:** `init` 块手动将 `nvim/` 子目录加入 runtime path,以规避部分版本 lazy.nvim 的 Lua 模块解析兼容性问题。插件选项通过 lazy.nvim 推荐的 `opts` 字段传入。
|
|
73
|
+
> **注意:** `init` 块手动将 `ide-plugins/nvim/` 子目录加入 runtime path,以规避部分版本 lazy.nvim 的 Lua 模块解析兼容性问题。插件选项通过 lazy.nvim 推荐的 `opts` 字段传入。
|
|
74
|
+
>
|
|
75
|
+
> 可选的 `build` 钩子会优先使用插件包内的 bundled sidecar 二进制;如果不存在,则在安装/更新时检查 GitHub Release asset digest(用 `:Lazy build pi-x-ide` 可重新触发),仅在缓存二进制缺失或过期时下载。该钩子可以省略:插件仍会在首次启动时按需下载二进制,下载不可用时回退到 Node.js sidecar。
|
|
72
76
|
|
|
73
77
|
**原生 package:**
|
|
74
78
|
|
|
75
79
|
```vim
|
|
76
|
-
set runtimepath+=/path/to/pi-x-ide/nvim
|
|
80
|
+
set runtimepath+=/path/to/pi-x-ide/ide-plugins/nvim
|
|
77
81
|
lua require("pi_x_ide").setup({ keymap = "<leader>pa" })
|
|
78
82
|
```
|
|
79
83
|
|
|
@@ -94,10 +98,10 @@ Pi 自动加载 `pi-x-ide` 并连接 IDE。TUI 底部应显示 `IDE: vscode ✓`
|
|
|
94
98
|
在 IDE 中打开文件并选中文本,widget 应实时更新:
|
|
95
99
|
|
|
96
100
|
```text
|
|
97
|
-
IDE: vscode ✓ src/foo.ts#L10
|
|
101
|
+
IDE: vscode ✓ src/foo.ts#L10-L20 pending
|
|
98
102
|
```
|
|
99
103
|
|
|
100
|
-
可以从任一侧附加选区:在 VS Code 系列 IDE 中按 `Ctrl+Alt+K`(Linux/Windows)或 `Cmd+Alt+K`(macOS),或聚焦 Pi TUI 后按 `Ctrl+Alt+K` / 运行 `/ide attach`。Pi 输入框应插入 `@src/foo.ts#L10
|
|
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-L20`。
|
|
101
105
|
|
|
102
106
|
在 Pi 中输入对话提示并提交,选中文本会作为 LLM 上下文注入(不写入 session 历史)。提交后 widget 显示 `sent`。
|
|
103
107
|
|
|
@@ -127,10 +131,9 @@ Pi 默认也会在 TUI 中注册 `Ctrl+Alt+K`,作为 `/ide attach` 的快捷
|
|
|
127
131
|
|
|
128
132
|
#### VS Code
|
|
129
133
|
|
|
130
|
-
| 键
|
|
131
|
-
|
|
|
132
|
-
| `piXIde.
|
|
133
|
-
| `piXIde.useTmux` | `boolean` | `false` | 通过终端图标用 `tmux` 打开 Pi。每次点击都会创建一个新 session,终端 detach 后自动销毁。 |
|
|
134
|
+
| 键 | 类型 | 默认值 | 说明 |
|
|
135
|
+
| ---------------- | --------- | ------- | --------------------------------------------------------------------------------------- |
|
|
136
|
+
| `piXIde.useTmux` | `boolean` | `false` | 通过终端图标用 `tmux` 打开 Pi。每次点击都会创建一个新 session,终端 detach 后自动销毁。 |
|
|
134
137
|
|
|
135
138
|
#### Zed
|
|
136
139
|
|
|
@@ -153,7 +156,6 @@ Pi 默认也会在 TUI 中注册 `Ctrl+Alt+K`,作为 `/ide attach` 的快捷
|
|
|
153
156
|
require("pi_x_ide").setup({
|
|
154
157
|
enabled = true,
|
|
155
158
|
keymap = "<C-A-k>",
|
|
156
|
-
range_format = "comma", -- 或 "dash"
|
|
157
159
|
debounce_ms = 150,
|
|
158
160
|
-- sidecar_cmd = { "node", "/absolute/path/to/pi-x-ide-nvim-sidecar.cjs" },
|
|
159
161
|
-- (默认使用平台二进制文件;找不到时降级到 node + cjs)
|
|
@@ -166,12 +168,12 @@ require("pi_x_ide").setup({
|
|
|
166
168
|
|
|
167
169
|
**命令:**
|
|
168
170
|
|
|
169
|
-
| 命令 | 行为
|
|
170
|
-
| --------------- |
|
|
171
|
-
| `:PiXIdeStart` | 启动 Neovim sidecar 并写入 lock file
|
|
172
|
-
| `:PiXIdeStop` | 停止 sidecar 并移除 lock file
|
|
173
|
-
| `:PiXIdeStatus` | 显示 sidecar 是否正在运行
|
|
174
|
-
| `:PiXIdeAttach` | 将当前文件或选区作为 `@relative/path#Lx
|
|
171
|
+
| 命令 | 行为 |
|
|
172
|
+
| --------------- | ----------------------------------------------------- |
|
|
173
|
+
| `:PiXIdeStart` | 启动 Neovim sidecar 并写入 lock file |
|
|
174
|
+
| `:PiXIdeStop` | 停止 sidecar 并移除 lock file |
|
|
175
|
+
| `:PiXIdeStatus` | 显示 sidecar 是否正在运行 |
|
|
176
|
+
| `:PiXIdeAttach` | 将当前文件或选区作为 `@relative/path#Lx-Ly` 附加到 Pi |
|
|
175
177
|
|
|
176
178
|
#### Pi 侧环境变量
|
|
177
179
|
|
|
@@ -241,13 +243,13 @@ pi -e ./src/pi/index.ts
|
|
|
241
243
|
|
|
242
244
|
所有 `bun run` 命令都有等效的 `mise run` 任务(见 `mise.toml`):
|
|
243
245
|
|
|
244
|
-
| 命令 | 说明
|
|
245
|
-
| ----------------------------- |
|
|
246
|
-
| `bun run build` | 编译 Pi 侧 TypeScript → `dist/` + Neovim sidecar → `nvim/bin/` + VS Code bundle → `vscode/out/` |
|
|
247
|
-
| `bun run typecheck` | 类型检查(不产出文件)
|
|
248
|
-
| `bun run test` | 编译 + 运行单元测试
|
|
249
|
-
| `bun run package:vsix` | 打包 VS Code 扩展为 VSIX
|
|
250
|
-
| `bun run check:config-schema` | 验证 `schemas/config.json` 与配置注册表是否同步
|
|
246
|
+
| 命令 | 说明 |
|
|
247
|
+
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
248
|
+
| `bun run build` | 编译 Pi 侧 TypeScript → `dist/` + Neovim sidecar → `ide-plugins/nvim/bin/` + VS Code bundle → `ide-plugins/vscode/out/` |
|
|
249
|
+
| `bun run typecheck` | 类型检查(不产出文件) |
|
|
250
|
+
| `bun run test` | 编译 + 运行单元测试 |
|
|
251
|
+
| `bun run package:vsix` | 打包 VS Code 扩展为 VSIX |
|
|
252
|
+
| `bun run check:config-schema` | 验证 `schemas/config.json` 与配置注册表是否同步 |
|
|
251
253
|
|
|
252
254
|
### 本地测试 VS Code 扩展
|
|
253
255
|
|
|
@@ -264,7 +266,7 @@ pi -e ./src/pi/index.ts
|
|
|
264
266
|
|
|
265
267
|
```bash
|
|
266
268
|
bun run package:vsix
|
|
267
|
-
cd vscode && code --install-extension dist/pi-x-ide-$(node -p "require('./package.json').version").vsix
|
|
269
|
+
cd ide-plugins/vscode && code --install-extension dist/pi-x-ide-$(node -p "require('./package.json').version").vsix
|
|
268
270
|
```
|
|
269
271
|
|
|
270
272
|
这样安装的扩展在所有 VS Code 窗口中运行,不依赖 F5 Extension Host。
|
|
@@ -282,3 +284,7 @@ ls -l ~/.pi/pi-x-ide/lock
|
|
|
282
284
|
本项目使用 [Release Please](https://github.com/googleapis/release-please) 和 [Conventional Commits](https://www.conventionalcommits.org/) 来自动化版本管理和发布流程。
|
|
283
285
|
|
|
284
286
|
详见 [RELEASE.md](RELEASE.md)。
|
|
287
|
+
|
|
288
|
+
## 致谢
|
|
289
|
+
|
|
290
|
+
- [opencode](https://github.com/anomalyco/opencode)
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-x-ide",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.1",
|
|
4
4
|
"description": "Pi extension package for IDE selection context integration.",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"homepage": "https://github.com/balaenis/pi-x-ide#readme",
|
|
28
28
|
"workspaces": [
|
|
29
|
-
"vscode"
|
|
29
|
+
"ide-plugins/vscode"
|
|
30
30
|
],
|
|
31
31
|
"packageManager": "bun@1.3.14",
|
|
32
32
|
"engines": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"type": "commonjs",
|
|
36
36
|
"main": "./dist/src/pi/index.js",
|
|
37
37
|
"scripts": {
|
|
38
|
-
"typecheck": "tsc -p tsconfig.json --noEmit && bun run --filter './vscode' typecheck",
|
|
38
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && bun run --filter './ide-plugins/vscode' typecheck",
|
|
39
39
|
"generate:config-schema": "bun run scripts/generate-config-schema.cjs",
|
|
40
40
|
"check:config-schema": "bun run scripts/generate-config-schema.cjs --check",
|
|
41
41
|
"test": "bun run check:config-schema && bun run compile && node --test dist/test/*.test.js",
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
"format": "prettier --write .",
|
|
45
45
|
"format:check": "prettier --check .",
|
|
46
46
|
"compile": "tsc -p tsconfig.json",
|
|
47
|
-
"compile:vsix": "bun run --filter './vscode' compile",
|
|
48
|
-
"sync:vsix-assets": "bun run --filter './vscode' sync:assets",
|
|
49
|
-
"package:vsix": "bun run --filter './vscode' package",
|
|
47
|
+
"compile:vsix": "bun run --filter './ide-plugins/vscode' compile",
|
|
48
|
+
"sync:vsix-assets": "bun run --filter './ide-plugins/vscode' sync:assets",
|
|
49
|
+
"package:vsix": "bun run --filter './ide-plugins/vscode' package",
|
|
50
50
|
"package:nvim-sidecar": "bun run scripts/build-nvim-sidecar.mjs --production",
|
|
51
51
|
"package:nvim-sidecar:all": "bun run scripts/build-nvim-sidecar.mjs --production --target=all",
|
|
52
52
|
"build": "bun run compile && bun run compile:vsix && bun run package:nvim-sidecar",
|
package/dist/src/nvim/sidecar.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.startNvimSidecar = startNvimSidecar;
|
|
5
|
+
// ABOUTME: Runs the Neovim sidecar process that bridges Neovim selections to Pi over WebSocket.
|
|
6
|
+
// ABOUTME: Maintains lock files and contains sidecar message handling failures.
|
|
5
7
|
const node_readline_1 = require("node:readline");
|
|
6
8
|
const format_1 = require("../shared/format");
|
|
7
9
|
const ide_server_1 = require("../shared/ide-server");
|
|
@@ -35,6 +37,11 @@ async function startNvimSidecar(options = {}) {
|
|
|
35
37
|
};
|
|
36
38
|
const stdin = options.stdin ?? process.stdin;
|
|
37
39
|
const stderr = options.stderr ?? process.stderr;
|
|
40
|
+
const stopSafely = (reason) => {
|
|
41
|
+
void stop().catch((error) => {
|
|
42
|
+
stderr.write(`pi-x-ide nvim sidecar: failed to stop after ${reason}: ${errorMessage(error)}\n`);
|
|
43
|
+
});
|
|
44
|
+
};
|
|
38
45
|
const rl = (0, node_readline_1.createInterface)({ input: stdin });
|
|
39
46
|
rl.on("line", (line) => {
|
|
40
47
|
const trimmed = line.trim();
|
|
@@ -43,7 +50,9 @@ async function startNvimSidecar(options = {}) {
|
|
|
43
50
|
const parsed = (0, sidecar_schema_1.parseJsonLine)(trimmed);
|
|
44
51
|
const config = (0, sidecar_schema_1.parseSidecarConfig)(parsed);
|
|
45
52
|
if (config && !("type" in parsed)) {
|
|
46
|
-
void applyConfig(state, config, stderr)
|
|
53
|
+
void applyConfig(state, config, stderr).catch((error) => {
|
|
54
|
+
stderr.write(`pi-x-ide nvim sidecar: failed to apply config: ${errorMessage(error)}\n`);
|
|
55
|
+
});
|
|
47
56
|
return;
|
|
48
57
|
}
|
|
49
58
|
const message = (0, sidecar_schema_1.parseNvimSidecarMessage)(parsed);
|
|
@@ -51,10 +60,12 @@ async function startNvimSidecar(options = {}) {
|
|
|
51
60
|
stderr.write(`pi-x-ide nvim sidecar: ignored malformed message: ${trimmed}\n`);
|
|
52
61
|
return;
|
|
53
62
|
}
|
|
54
|
-
void handleMessage(state, server, message, stderr, stop)
|
|
63
|
+
void handleMessage(state, server, message, stderr, stop).catch((error) => {
|
|
64
|
+
stderr.write(`pi-x-ide nvim sidecar: failed to handle message: ${errorMessage(error)}\n`);
|
|
65
|
+
});
|
|
55
66
|
});
|
|
56
|
-
rl.on("close", () =>
|
|
57
|
-
const cleanup = () =>
|
|
67
|
+
rl.on("close", () => stopSafely("stdin close"));
|
|
68
|
+
const cleanup = () => stopSafely("process signal");
|
|
58
69
|
process.once("SIGINT", cleanup);
|
|
59
70
|
process.once("SIGTERM", cleanup);
|
|
60
71
|
process.once("beforeExit", cleanup);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../../src/nvim/sidecar.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../../src/nvim/sidecar.ts"],"names":[],"mappings":"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"}
|
package/dist/src/pi/commands.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.registerIdeCommand = registerIdeCommand;
|
|
|
5
5
|
exports.resolveAttachShortcut = resolveAttachShortcut;
|
|
6
6
|
const config_1 = require("../shared/config");
|
|
7
7
|
const format_1 = require("../shared/format");
|
|
8
|
+
const safety_1 = require("./safety");
|
|
8
9
|
const ui_1 = require("./ui");
|
|
9
10
|
exports.PI_X_IDE_ATTACH_SHORTCUT_ENV = "PI_X_IDE_ATTACH_SHORTCUT";
|
|
10
11
|
exports.DEFAULT_ATTACH_SHORTCUT = "ctrl+alt+k";
|
|
@@ -15,8 +16,10 @@ function registerIdeCommand(pi, runtime, actions, options = {}) {
|
|
|
15
16
|
pi.registerShortcut(attachShortcut, {
|
|
16
17
|
description: "Attach latest IDE selection to the prompt",
|
|
17
18
|
handler: (ctx) => {
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
(0, safety_1.runPiBoundary)("IDE attach shortcut", runtime, () => {
|
|
20
|
+
runtime.ctx = ctx;
|
|
21
|
+
attachLatest(runtime, ctx);
|
|
22
|
+
}, ctx);
|
|
20
23
|
},
|
|
21
24
|
});
|
|
22
25
|
}
|
|
@@ -34,7 +37,7 @@ function registerIdeCommand(pi, runtime, actions, options = {}) {
|
|
|
34
37
|
const filtered = subcommands.filter((s) => s.value.startsWith(argumentPrefix));
|
|
35
38
|
return filtered.length > 0 ? filtered : null;
|
|
36
39
|
},
|
|
37
|
-
handler:
|
|
40
|
+
handler: (args, ctx) => (0, safety_1.runPiBoundaryAsync)("/ide command", runtime, async () => {
|
|
38
41
|
runtime.ctx = ctx;
|
|
39
42
|
const [subcommand] = args.trim().split(/\s+/, 1);
|
|
40
43
|
switch (subcommand || "") {
|
|
@@ -63,7 +66,7 @@ function registerIdeCommand(pi, runtime, actions, options = {}) {
|
|
|
63
66
|
default:
|
|
64
67
|
ctx.ui.notify("Usage: /ide [status|list|auto|off|attach|install]", "warning");
|
|
65
68
|
}
|
|
66
|
-
},
|
|
69
|
+
}, ctx),
|
|
67
70
|
});
|
|
68
71
|
}
|
|
69
72
|
async function showPicker(runtime, actions, ctx) {
|
|
@@ -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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"}
|
|
@@ -4,9 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.IdeConnection = exports.IdeConnectionTimeoutError = exports.IDE_CONNECT_TIMEOUT_MS = void 0;
|
|
7
|
+
// ABOUTME: Implements the Pi-side WebSocket client that receives IDE selection notifications.
|
|
8
|
+
// ABOUTME: Contains callback dispatch boundaries so IDE messages cannot crash the Pi process.
|
|
7
9
|
const ws_1 = __importDefault(require("ws"));
|
|
8
10
|
const protocol_1 = require("../shared/protocol");
|
|
9
11
|
const schema_1 = require("../shared/schema");
|
|
12
|
+
const errors_1 = require("../shared/errors");
|
|
10
13
|
const ws_2 = require("../shared/ws");
|
|
11
14
|
exports.IDE_CONNECT_TIMEOUT_MS = 5_000;
|
|
12
15
|
class IdeConnectionTimeoutError extends Error {
|
|
@@ -43,16 +46,18 @@ class IdeConnection {
|
|
|
43
46
|
},
|
|
44
47
|
});
|
|
45
48
|
this.socket = socket;
|
|
46
|
-
socket.on("message", (raw) => this.handleMessage((0, ws_2.decodeRawData)(raw)));
|
|
49
|
+
socket.on("message", (raw) => this.runSocketHandler("message", () => this.handleMessage((0, ws_2.decodeRawData)(raw))));
|
|
47
50
|
socket.on("close", (_code, reason) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
this.runSocketHandler("close", () => {
|
|
52
|
+
if (this.socket !== socket)
|
|
53
|
+
return;
|
|
54
|
+
this.socket = undefined;
|
|
55
|
+
this.emitCallback("disconnected callback", () => this.callbacks.onDisconnected?.(reason.toString("utf8") || (this.closedByUser ? "closed" : "disconnected")));
|
|
56
|
+
});
|
|
52
57
|
});
|
|
53
58
|
socket.on("error", (error) => {
|
|
54
59
|
if (this.socket === socket)
|
|
55
|
-
this.
|
|
60
|
+
this.reportError("websocket error", error);
|
|
56
61
|
});
|
|
57
62
|
await new Promise((resolve, reject) => {
|
|
58
63
|
const timeout = setTimeout(() => {
|
|
@@ -110,23 +115,55 @@ class IdeConnection {
|
|
|
110
115
|
if (isRpcResponse(parsed)) {
|
|
111
116
|
const server = getServerInfo(parsed);
|
|
112
117
|
if (server)
|
|
113
|
-
this.callbacks.onConnected?.(server);
|
|
118
|
+
this.emitCallback("connected callback", () => this.callbacks.onConnected?.(server));
|
|
114
119
|
return;
|
|
115
120
|
}
|
|
116
121
|
if (!isNotification(parsed))
|
|
117
122
|
return;
|
|
118
123
|
if (parsed.method === "selection_changed" && (0, schema_1.isSelectionChangedParams)(parsed.params)) {
|
|
119
|
-
|
|
124
|
+
const params = withReceivedAt(parsed.params);
|
|
125
|
+
this.emitCallback("selection changed callback", () => this.callbacks.onSelectionChanged?.(params));
|
|
120
126
|
}
|
|
121
127
|
else if (parsed.method === "selection_cleared" && (0, schema_1.isSelectionClearedParams)(parsed.params)) {
|
|
122
|
-
|
|
128
|
+
const params = withReceivedAt(parsed.params);
|
|
129
|
+
this.emitCallback("selection cleared callback", () => this.callbacks.onSelectionCleared?.(params));
|
|
123
130
|
}
|
|
124
131
|
else if (parsed.method === "at_mentioned" && (0, schema_1.isAtMentionedParams)(parsed.params)) {
|
|
125
132
|
const params = withReceivedAt(parsed.params);
|
|
126
|
-
this.callbacks.onAtMentioned?.(params);
|
|
133
|
+
this.emitCallback("at mentioned callback", () => this.callbacks.onAtMentioned?.(params));
|
|
127
134
|
}
|
|
128
135
|
else if (parsed.method === "diagnostic_fix_requested" && (0, schema_1.isDiagnosticFixRequestedParams)(parsed.params)) {
|
|
129
|
-
|
|
136
|
+
const params = withReceivedAt(parsed.params);
|
|
137
|
+
this.emitCallback("diagnostic fix requested callback", () => this.callbacks.onDiagnosticFixRequested?.(params));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
runSocketHandler(label, action) {
|
|
141
|
+
try {
|
|
142
|
+
action();
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
this.reportError(`websocket ${label}`, error);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
emitCallback(label, action) {
|
|
149
|
+
try {
|
|
150
|
+
action();
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
this.reportError(label, error);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
reportError(label, error) {
|
|
157
|
+
const reported = (0, errors_1.toError)(error, label);
|
|
158
|
+
if (!this.callbacks.onError) {
|
|
159
|
+
(0, errors_1.logExtensionError)(label, reported);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
this.callbacks.onError(reported);
|
|
164
|
+
}
|
|
165
|
+
catch (callbackError) {
|
|
166
|
+
(0, errors_1.logExtensionError)(`${label} onError callback`, callbackError);
|
|
130
167
|
}
|
|
131
168
|
}
|
|
132
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/pi/connection.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA2B;AAC3B,iDAU4B;AAC5B,6CAK0B;AAC1B,qCAA6C;AAEhC,QAAA,sBAAsB,GAAG,KAAK,CAAC;AAE5C,MAAa,yBAA0B,SAAQ,KAAK;IAC7B;IAArB,YAAqB,SAA4B;QAC/C,KAAK,CAAC,2BAA2B,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QADtF,cAAS,GAAT,SAAS,CAAmB;QAE/C,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AALD,8DAKC;AAYD,MAAa,aAAa;IAMb;IACQ;IACA;IAPX,MAAM,CAAa;IACnB,MAAM,GAAG,CAAC,CAAC;IACX,YAAY,GAAG,KAAK,CAAC;IAE7B,YACW,SAA4B,EACpB,GAAW,EACX,SAAiC;QAFzC,cAAS,GAAT,SAAS,CAAmB;QACpB,QAAG,GAAH,GAAG,CAAQ;QACX,cAAS,GAAT,SAAS,CAAwB;IACjD,CAAC;IAEJ,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,YAAS,CAAC,IAAI,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,8BAAsB;QAC9C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,YAAS,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YAC7D,gBAAgB,EAAE,SAAS,GAAG,KAAK;YACnC,OAAO,EAAE;gBACP,CAAC,sBAAW,CAAC,EAAE,IAAI,CAAC,SAAS;aAC9B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAA,kBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/pi/connection.ts"],"names":[],"mappings":"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"}
|