@saifymatteo/pi-x-ide 0.0.0-stage → 1.20.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/CHANGELOG.md +328 -0
- package/CONTRIBUTING.md +119 -0
- package/CONTRIBUTING.zh-CN.md +106 -0
- package/LICENSE +201 -0
- package/README.md +33 -2
- package/README.zh-CN.md +34 -0
- package/RELEASE.md +213 -0
- package/config.example.json +9 -0
- package/dist/src/pi/chunks/chunk-4RHJAL4S.js +200 -0
- package/dist/src/pi/chunks/chunk-UUXVCTOS.js +819 -0
- package/dist/src/pi/chunks/config-ui-LO3DVQFC.js +8073 -0
- package/dist/src/pi/chunks/runtime-services-TUOTPMCH.js +19569 -0
- package/dist/src/pi/commands.js +126 -0
- package/dist/src/pi/config-ui.js +127 -0
- package/dist/src/pi/connection.js +237 -0
- package/dist/src/pi/context.js +30 -0
- package/dist/src/pi/diagnostic-renderer.js +326 -0
- package/dist/src/pi/diagnostic-types.js +1 -0
- package/dist/src/pi/diagnostics.js +104 -0
- package/dist/src/pi/discovery.js +135 -0
- package/dist/src/pi/effect-boundary.js +5 -0
- package/dist/src/pi/ide-host.js +68 -0
- package/dist/src/pi/index.js +636 -0
- package/dist/src/pi/install.js +308 -0
- package/dist/src/pi/reconnect.js +57 -0
- package/dist/src/pi/runtime-loader.js +38 -0
- package/dist/src/pi/runtime-services.js +356 -0
- package/dist/src/pi/safety.js +61 -0
- package/dist/src/pi/selection.js +18 -0
- package/dist/src/pi/state.js +13 -0
- package/dist/src/pi/ui.js +304 -0
- package/dist/src/pi/zed.js +409 -0
- package/dist/src/shared/config-options.js +45 -0
- package/dist/src/shared/config.js +183 -0
- package/dist/src/shared/display-width.js +99 -0
- package/dist/src/shared/effect-errors.js +36 -0
- package/dist/src/shared/effect-runtime.js +36 -0
- package/dist/src/shared/effect-schema.js +120 -0
- package/dist/src/shared/errors.js +48 -0
- package/dist/src/shared/format.js +92 -0
- package/dist/src/shared/ide-server.js +167 -0
- package/dist/src/shared/jsonrpc-guard.js +12 -0
- package/dist/src/shared/lock-file-heartbeat.js +58 -0
- package/dist/src/shared/lock-file.js +50 -0
- package/dist/src/shared/paths.js +79 -0
- package/dist/src/shared/platform.js +57 -0
- package/dist/src/shared/protocol.js +3 -0
- package/dist/src/shared/schema.js +37 -0
- package/dist/src/shared/version.js +1 -0
- package/dist/src/shared/ws.js +8 -0
- package/docs/explanation/architecture.md +123 -0
- package/docs/explanation/discovery.md +113 -0
- package/docs/explanation/effect.md +127 -0
- package/docs/how-to/install-jetbrains.md +58 -0
- package/docs/how-to/install-neovim.md +138 -0
- package/docs/how-to/install-vscode.md +75 -0
- package/docs/how-to/install-zed.md +70 -0
- package/docs/how-to/troubleshoot-connection.md +103 -0
- package/docs/how-to/use-wsl2.md +90 -0
- package/docs/reference/commands.md +59 -0
- package/docs/reference/configuration.md +101 -0
- package/docs/reference/feature-parity.md +26 -0
- package/docs/reference/protocol.md +71 -0
- package/docs/specs/ide-protocol.md +215 -0
- package/docs/tutorials/get-started.md +133 -0
- package/docs/zh-CN/explanation/architecture.md +93 -0
- package/docs/zh-CN/explanation/discovery.md +71 -0
- package/docs/zh-CN/explanation/effect.md +90 -0
- package/docs/zh-CN/how-to/install-jetbrains.md +49 -0
- package/docs/zh-CN/how-to/install-neovim.md +126 -0
- package/docs/zh-CN/how-to/install-vscode.md +67 -0
- package/docs/zh-CN/how-to/install-zed.md +56 -0
- package/docs/zh-CN/how-to/troubleshoot-connection.md +85 -0
- package/docs/zh-CN/how-to/use-wsl2.md +75 -0
- package/docs/zh-CN/reference/commands.md +54 -0
- package/docs/zh-CN/reference/configuration.md +94 -0
- package/docs/zh-CN/reference/feature-parity.md +21 -0
- package/docs/zh-CN/reference/protocol.md +54 -0
- package/docs/zh-CN/tutorials/get-started.md +101 -0
- package/package.json +86 -4
- package/schemas/config.json +77 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# 配置参考
|
|
2
|
+
|
|
3
|
+
Pi × IDE 通过三层配置:各 IDE 设置、Pi 侧环境变量,以及 config JSON 中的顶层选项。
|
|
4
|
+
|
|
5
|
+
配置文件:
|
|
6
|
+
|
|
7
|
+
- **全局:** `~/.pi/pi-x-ide/config.json`
|
|
8
|
+
- **项目:** `<cwd>/.pi/pi-x-ide/config.json`(对支持的键覆盖全局)
|
|
9
|
+
|
|
10
|
+
Pi 侧变量可设为真实环境变量 **或** 写入 config 的 `env`。真实环境变量优先级更高。交互设置(`Display`、`AutoInstall` 等)见 [`/ide settings`](commands.md)。
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"$schema": "https://raw.githubusercontent.com/saifymatteo/pi-x-ide/refs/heads/main/schemas/config.json",
|
|
15
|
+
"fixPrompt": "Analyze the errors and warnings at the following location, and try to fix them:\n{DIAGNOSTIC}",
|
|
16
|
+
"status_display": "widget",
|
|
17
|
+
"env": {
|
|
18
|
+
"PI_X_IDE_AUTO_INSTALL": "1",
|
|
19
|
+
"PI_X_IDE_ATTACH_SHORTCUT": "ctrl+alt+k"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
起始模板见 [`config.example.json`](../../../config.example.json),编辑器 schema 见 [`schemas/config.json`](../../../schemas/config.json)。
|
|
25
|
+
|
|
26
|
+
## VS Code 设置
|
|
27
|
+
|
|
28
|
+
| 键 | 类型 | 默认值 | 说明 |
|
|
29
|
+
| ---------------- | --------- | ------- | --------------------------------------------------------------------------------------- |
|
|
30
|
+
| `piXIde.useTmux` | `boolean` | `false` | 通过终端图标用 `tmux` 打开 Pi。每次点击都会创建一个新 session,终端 detach 后自动销毁。 |
|
|
31
|
+
|
|
32
|
+
## Zed
|
|
33
|
+
|
|
34
|
+
| 环境变量 | 默认值 | 说明 |
|
|
35
|
+
| ------------------------------- | ------------ | --------------------------------------------------- |
|
|
36
|
+
| `PI_X_IDE_ZED_DB` | (自动检测) | 覆盖 Zed SQLite 数据库路径。 |
|
|
37
|
+
| `PI_X_IDE_ZED_POLL_INTERVAL_MS` | `1000` | Zed SQLite 轮询间隔(毫秒),限制在 100–2000 范围。 |
|
|
38
|
+
|
|
39
|
+
默认数据库路径:
|
|
40
|
+
|
|
41
|
+
- **Linux:** `~/.local/share/zed/db/0-stable/db.sqlite`
|
|
42
|
+
- **macOS:** `~/Library/Application Support/Zed/db/0-stable/db.sqlite`
|
|
43
|
+
- **Windows:** `%LOCALAPPDATA%\Zed\db\0-stable\db.sqlite`
|
|
44
|
+
- **WSL + Windows 版 Zed:** `/mnt/c/Users/<user>/AppData/Local/Zed/db/0-stable/db.sqlite`
|
|
45
|
+
|
|
46
|
+
## Neovim
|
|
47
|
+
|
|
48
|
+
```lua
|
|
49
|
+
require("pi_x_ide").setup({
|
|
50
|
+
enabled = true,
|
|
51
|
+
keymap = "<C-A-k>",
|
|
52
|
+
debounce_ms = 150,
|
|
53
|
+
-- sidecar_cmd = { "node", "/absolute/path/to/pi-x-ide-nvim-sidecar.cjs" },
|
|
54
|
+
-- workspace_folders = { "/path/to/project" },
|
|
55
|
+
})
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
| 选项 | 默认值 | 说明 |
|
|
59
|
+
| ------------------- | --------- | ----------------------------------- |
|
|
60
|
+
| `enabled` | `true` | 启用或禁用插件。 |
|
|
61
|
+
| `keymap` | `<C-A-k>` | 附加当前选区到 Pi 的快捷键。 |
|
|
62
|
+
| `debounce_ms` | `150` | 选区通知去抖间隔。 |
|
|
63
|
+
| `sidecar_cmd` | (自动) | 覆盖 sidecar 命令。 |
|
|
64
|
+
| `workspace_folders` | (自动) | 覆盖向 Pi 广播的 workspace 文件夹。 |
|
|
65
|
+
|
|
66
|
+
如果 sidecar 无法启动,请运行 `:PiXIdeStatus`,或设置 `sidecar_cmd` 为自定义命令。见 [安装 Neovim 插件](../how-to/install-neovim.md#排查-sidecar)。
|
|
67
|
+
|
|
68
|
+
| 命令 | 行为 |
|
|
69
|
+
| --------------- | ------------------------------------------------------- |
|
|
70
|
+
| `:PiXIdeStart` | 启动 Neovim sidecar 并写入 lock file。 |
|
|
71
|
+
| `:PiXIdeStop` | 停止 sidecar 并移除 lock file。 |
|
|
72
|
+
| `:PiXIdeStatus` | 显示 sidecar 是否正在运行。 |
|
|
73
|
+
| `:PiXIdeAttach` | 将当前文件或选区作为 `@relative/path#Lx-Ly` 附加到 Pi。 |
|
|
74
|
+
|
|
75
|
+
## Pi 侧环境变量
|
|
76
|
+
|
|
77
|
+
| 变量 | 默认值 | 说明 |
|
|
78
|
+
| ------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------- |
|
|
79
|
+
| `PI_X_IDE_AUTO_INSTALL` | `1` | Pi 启动时自动安装 VS Code 扩展。设为 `0`/`false`/`off` 可禁用。也可在 `/ide settings` 中以 `AutoInstall` 配置。 |
|
|
80
|
+
| `PI_X_IDE_ATTACH_SHORTCUT` | `ctrl+alt+k` | Pi TUI 的 `/ide attach` 快捷键。设为 `off`、`none`、`false` 或 `0` 可禁用。 |
|
|
81
|
+
| `PI_X_IDE_HOST_OVERRIDE` | (未设置) | 覆盖 Pi 连接 IDE WebSocket 时使用的 host。适用于 WSL2 网络场景。 |
|
|
82
|
+
| `PI_X_IDE_ZED_DB` | (自动检测) | 覆盖 Zed SQLite 数据库路径。 |
|
|
83
|
+
| `PI_X_IDE_ZED_POLL_INTERVAL_MS` | `1000` | Zed SQLite 轮询间隔(毫秒),限制在 100–2000 范围。 |
|
|
84
|
+
|
|
85
|
+
## 顶层选项
|
|
86
|
+
|
|
87
|
+
<a id="顶层选项"></a>
|
|
88
|
+
|
|
89
|
+
| 选项 | 默认值 | 说明 |
|
|
90
|
+
| ---------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
91
|
+
| `fixPrompt` | `Analyze the errors and warnings at the following location, and try to fix them:\n{DIAGNOSTIC}` | 请求修复 IDE 诊断信息时的自定义 prompt 前缀。使用 `{DIAGNOSTIC}` 作为诊断上下文的占位符。如果未包含占位符,诊断上下文会拼接在你的 prompt 之后。 |
|
|
92
|
+
| `status_display` | `widget` | 在 Pi TUI 中显示 IDE 连接状态的位置。默认 `widget`(编辑器上方);`statusline` 使用页脚状态行。同一时间只启用一种显示方式。项目配置覆盖全局。可在 `/ide settings` 中以 `Display` 设置。 |
|
|
93
|
+
|
|
94
|
+
`fixPrompt` 控制 VS Code **Pi: Fix it** Quick Fix 使用的 prompt。见 [安装 VS Code 扩展](../how-to/install-vscode.md#诊断-quick-fix)。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 功能对比
|
|
2
|
+
|
|
3
|
+
各编辑器集成支持的能力。
|
|
4
|
+
|
|
5
|
+
| 功能 | VS Code | Zed | Neovim | JetBrains |
|
|
6
|
+
| ----------------------------------------- | -------------------- | ------- | ------------------------ | -------------------- |
|
|
7
|
+
| 实时文件追踪 | ✅ 实时推送 | ✅ 轮询 | ✅ 通过 sidecar 实时推送 | ✅ 实时推送 |
|
|
8
|
+
| 实时选区追踪 | ✅ 实时推送 | ✅ 轮询 | ✅ 通过 sidecar 实时推送 | ✅ 实时推送 |
|
|
9
|
+
| IDE 上下文 attach 快捷键 | ✅ 默认 `Ctrl+Alt+K` | ❌ | ✅ 自定义快捷键 keymap | ✅ 默认 `Ctrl+Alt+K` |
|
|
10
|
+
| Pi TUI attach 快捷键(默认 `Ctrl+Alt+K`) | ✅ | ✅ | ✅ | ✅ |
|
|
11
|
+
| LLM 上下文注入 | ✅ | ✅ | ✅ | ✅ |
|
|
12
|
+
| `/ide auto` | ✅ | ✅ | ✅ | ✅ |
|
|
13
|
+
| 诊断 Quick Fix | ✅ | ❌ | ❌ | ❌ |
|
|
14
|
+
| 自动安装 | ✅ 仅 VS Code 系列 | N/A | ❌ | ❌ |
|
|
15
|
+
|
|
16
|
+
## 注意
|
|
17
|
+
|
|
18
|
+
- **Zed** 没有扩展 API,文件和选区追踪基于轮询(默认 1000 ms)。见 [架构](../explanation/architecture.md#zed-轮询)。
|
|
19
|
+
- **Neovim** 用 sidecar 进程承载 WebSocket 服务器;attach 快捷键在 Lua 插件中配置,不继承自 Pi。见 [安装 Neovim 插件](../how-to/install-neovim.md)。
|
|
20
|
+
- **诊断 Quick Fix** 和 **自动安装** 是 VS Code 系列功能。
|
|
21
|
+
- **WSL2** 跨边界发现对所有写 lock file 的编辑器(VS Code 系列、Neovim、JetBrains)均可用,Zed 则通过其 Windows 数据库路径支持。见 [在 WSL2 中使用](../how-to/use-wsl2.md)。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# 协议参考
|
|
2
|
+
|
|
3
|
+
Pi × IDE 通过本地 WebSocket 连接 Pi 和 IDE,连接由 lock file 发现。本页是快速参考;确切字段语义、消息结构和完整规范见 [`docs/specs/ide-protocol.md`](../../specs/ide-protocol.md)。
|
|
4
|
+
|
|
5
|
+
## lock file
|
|
6
|
+
|
|
7
|
+
- **目录:** `~/.pi/pi-x-ide/lock/`(权限 `0700`)
|
|
8
|
+
- **命名:** `<ide>-<pid>-<port>.lock` - 例如 `vscode-12345-48123.lock`、`nvim-98765-50001.lock`、`jetbrains-4242-51234.lock`
|
|
9
|
+
- **权限:** 文件权限 `0600`,原子写入(临时文件 + rename)
|
|
10
|
+
|
|
11
|
+
lock file 广播 WebSocket 端点、auth token、workspace 文件夹和时间戳。
|
|
12
|
+
|
|
13
|
+
## 传输
|
|
14
|
+
|
|
15
|
+
- **协议:** WebSocket(`ws://host:port`)
|
|
16
|
+
- **线路格式:** JSON-RPC 2.0
|
|
17
|
+
|
|
18
|
+
## 认证
|
|
19
|
+
|
|
20
|
+
Pi 连接时携带头:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
x-pi-x-ide-authorization: <authToken>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
token 是 64 字符的十六进制串(`randomBytes(32)`),每次 IDE 会话生成并写入 lock file。服务器拒绝缺失或无效 token 的连接。
|
|
27
|
+
|
|
28
|
+
## 握手
|
|
29
|
+
|
|
30
|
+
Pi 发送带 `cwd` 的 `initialize` 请求;IDE 响应服务器信息,并立即发送初始 `selection_changed` 或 `selection_cleared` 通知。
|
|
31
|
+
|
|
32
|
+
## 通知
|
|
33
|
+
|
|
34
|
+
| 方法 | 触发时机 |
|
|
35
|
+
| -------------------------- | -------------------------------------------------- |
|
|
36
|
+
| `selection_changed` | 活跃编辑器或选区变化。 |
|
|
37
|
+
| `selection_cleared` | 无活跃本地文本编辑器(JetBrains)。 |
|
|
38
|
+
| `at_mentioned` | 用户调用 IDE attach 选区命令。 |
|
|
39
|
+
| `diagnostic_fix_requested` | 用户在诊断上选择 Pi Quick Fix(仅 VS Code 系列)。 |
|
|
40
|
+
|
|
41
|
+
line 和 character 偏移从 0 开始,与 VS Code/LSP 一致。Neovim 把字节列转换为 UTF-16 character 偏移;JetBrains 从 UTF-16 code-unit 计数派生 character 偏移。
|
|
42
|
+
|
|
43
|
+
## TUI 行为
|
|
44
|
+
|
|
45
|
+
连接后,Pi 根据 `status_display`(项目配置覆盖全局;可通过 `/ide settings` 设置)只在一处显示 IDE 连接状态:
|
|
46
|
+
|
|
47
|
+
- `widget`(默认):通过 `ctx.ui.setWidget("pi-x-ide", ...)` 显示在编辑器上方。
|
|
48
|
+
- `statusline`:通过 `ctx.ui.setStatus("pi-x-ide", ...)` 显示在默认页脚状态行。
|
|
49
|
+
|
|
50
|
+
两种位置都显示紧凑的连接/选区状态(IDE 图标、spinner 或状态标记、文件、范围,以及 `pending` / `sent` attach 状态),刻意不显示选中文本内容。见 [配置](configuration.md#顶层选项)。
|
|
51
|
+
|
|
52
|
+
## 完整规范
|
|
53
|
+
|
|
54
|
+
完整 lock file schema、WSL2 发现与 host 解析规则、以及每条通知的确切 JSON 见 [`docs/specs/ide-protocol.md`](../../specs/ide-protocol.md)。各编辑器传输方式的设计理由见 [架构](../explanation/architecture.md)。
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Pi × IDE 入门指南
|
|
2
|
+
|
|
3
|
+
本教程带你从全新安装走到第一次把 IDE 选区送进 LLM 对话。大约 5 分钟,以 VS Code 为例 - Cursor 和 Windsurf 流程相同。
|
|
4
|
+
|
|
5
|
+
> 已经装好了,只想附加选区?直接跳到 [附加选区并对话](#第-5-步附加选区并对话)。
|
|
6
|
+
> 用其他编辑器?Zed、Neovim、JetBrains 的安装见 [操作指南](../how-to/)。
|
|
7
|
+
|
|
8
|
+
## 你将学到
|
|
9
|
+
|
|
10
|
+
- 如何安装 Pi 扩展包和 VS Code 扩展。
|
|
11
|
+
- 如何启动 Pi 让它自动发现你的 IDE。
|
|
12
|
+
- 一段选中的文本如何变成 LLM 上下文。
|
|
13
|
+
|
|
14
|
+
## 开始之前
|
|
15
|
+
|
|
16
|
+
你需要:
|
|
17
|
+
|
|
18
|
+
- 已安装 [`pi`](https://github.com/earendil-works/pi-coding-agent) CLI 并加入 `PATH`。
|
|
19
|
+
- 已安装 VS Code、Cursor 或 Windsurf。
|
|
20
|
+
- 一个至少包含一个源文件的项目文件夹。
|
|
21
|
+
|
|
22
|
+
## 第 1 步:安装 Pi 扩展包
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pi install npm:pi-x-ide
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
这会把 `pi-x-ide` 包加入 Pi。下次启动 Pi 时会自动加载,无需额外配置。
|
|
29
|
+
|
|
30
|
+
## 第 2 步:安装 VS Code 扩展
|
|
31
|
+
|
|
32
|
+
在 IDE 的 **扩展** 面板搜索
|
|
33
|
+
[`balaenis.pi-x-ide`](https://marketplace.visualstudio.com/items?itemName=balaenis.pi-x-ide)
|
|
34
|
+
并安装。
|
|
35
|
+
|
|
36
|
+
> 也可以在 Pi TUI 中运行 `/ide install`,它会自动检测 `code`、`cursor` 或 `windsurf` 并安装扩展。Pi 启动时若检测到受支持的 VS Code 集成终端,也会尝试自动安装。
|
|
37
|
+
|
|
38
|
+
安装后重新加载 IDE 窗口,让扩展生效。
|
|
39
|
+
|
|
40
|
+
## 第 3 步:在项目中启动 Pi
|
|
41
|
+
|
|
42
|
+
在 IDE 内打开终端(Terminal -> New Terminal),然后在与 IDE workspace 相同的项目目录启动 Pi:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pi
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Pi 加载 `pi-x-ide` 并查找 IDE 连接。当终端工作目录位于某个 IDE workspace 文件夹内时,Pi 会自动连接。Pi 输入框上方会出现一个 widget,显示连接和选区状态。
|
|
49
|
+
|
|
50
|
+
## 第 4 步:打开文件并选中文本
|
|
51
|
+
|
|
52
|
+
回到 IDE,打开一个源文件,选中几行文本。Pi widget 应实时更新:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
⧉ ⇡ foo.ts#L10-L20
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`⇡` 标记表示选区处于 **pending** 状态 - Pi 已注意到它,但尚未附加到消息。
|
|
59
|
+
|
|
60
|
+
如果 widget 没出现,见 [排查连接问题](../how-to/troubleshoot-connection.md)。
|
|
61
|
+
|
|
62
|
+
## 第 5 步:附加选区并对话
|
|
63
|
+
|
|
64
|
+
在 IDE 中选中文本后,聚焦 Pi TUI 并按 `Ctrl+Alt+K`(macOS:`Ctrl+Option+K`)。Pi 会在输入框插入一个 mention:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
@src/foo.ts#L10-L20
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
输入问题并提交,选中文本会作为该轮的 LLM 上下文注入。提交后 widget 标记变为 `✓`:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
⧉ ✓ foo.ts#L10-L20
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
会话记录会将你的提示与 IDE 上下文分开显示。Pi 会把 IDE 元数据显示为紫色自定义消息,并将相同元数据发送给代理:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
你的提示
|
|
80
|
+
### IDE Context
|
|
81
|
+
- **IDE**: vscode
|
|
82
|
+
- **File**: `src/foo.ts`
|
|
83
|
+
- **Selection**: L10-L20
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
附加内容只有 IDE、文件路径和选区行范围,不包含选中的源代码。这样代理需要更多上下文时可以自行读取文件。若打开的文件没有选区,则省略 `Selection` 行。蓝色用户提示保持不变。
|
|
87
|
+
|
|
88
|
+
你可以反复按 `Ctrl+Alt+K` 把多个范围追加到同一条消息,也可以在两轮之间重新选中文本,每次附加新的上下文。
|
|
89
|
+
|
|
90
|
+
## 刚才发生了什么
|
|
91
|
+
|
|
92
|
+
当你选中文本时,IDE 会通过本地 WebSocket 向 Pi 广播一条 `selection_changed` 通知。Pi 缓存最新选区并标记为 pending。按下附加快捷键时,Pi 把 `@file#Lx-Ly` mention 插入输入框。提交消息时,Pi 会将 IDE 名称、文件路径和选区行范围作为单独的紫色自定义消息添加给代理,不会自动发送选中的源代码。
|
|
93
|
+
|
|
94
|
+
完整机制 - lock file、host 解析、Neovim sidecar,以及为什么 Zed 用轮询 - 见 [发现机制](../explanation/discovery.md) 和 [架构](../explanation/architecture.md)。
|
|
95
|
+
|
|
96
|
+
## 下一步
|
|
97
|
+
|
|
98
|
+
- [安装其他编辑器](../how-to/) - Zed、Neovim 或 JetBrains。
|
|
99
|
+
- [在 WSL2 中使用](../how-to/use-wsl2.md) - Pi 在 WSL,IDE 在 Windows。
|
|
100
|
+
- [配置参考](../reference/configuration.md) - 环境变量、快捷键、`fixPrompt` 和 `status_display`。
|
|
101
|
+
- [`/ide` 命令参考](../reference/commands.md) - 在 TUI 中管理连接。
|
package/package.json
CHANGED
|
@@ -1,6 +1,88 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saifymatteo/pi-x-ide",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.20.1",
|
|
4
|
+
"description": "Pi extension package for IDE selection context integration.",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"dist/src",
|
|
10
|
+
"schemas",
|
|
11
|
+
"docs/tutorials",
|
|
12
|
+
"docs/how-to",
|
|
13
|
+
"docs/reference",
|
|
14
|
+
"docs/explanation",
|
|
15
|
+
"docs/zh-CN",
|
|
16
|
+
"docs/specs/ide-protocol.md",
|
|
17
|
+
"config.example.json",
|
|
18
|
+
"CONTRIBUTING.md",
|
|
19
|
+
"CONTRIBUTING.zh-CN.md",
|
|
20
|
+
"CHANGELOG.md",
|
|
21
|
+
"RELEASE.md"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"prepack": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && node node_modules/@typescript/native-preview/bin/tsgo -p tsconfig.publish.json && node scripts/build-pi-entry.mjs"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"pi-package",
|
|
28
|
+
"pi",
|
|
29
|
+
"ide",
|
|
30
|
+
"vscode",
|
|
31
|
+
"zed",
|
|
32
|
+
"neovim",
|
|
33
|
+
"nvim",
|
|
34
|
+
"jetbrains",
|
|
35
|
+
"intellij",
|
|
36
|
+
"idea"
|
|
37
|
+
],
|
|
38
|
+
"license": "Apache-2.0",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/saifymatteo/pi-x-ide.git"
|
|
42
|
+
},
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/saifymatteo/pi-x-ide/issues"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/saifymatteo/pi-x-ide#readme",
|
|
47
|
+
"workspaces": [
|
|
48
|
+
"ide-plugins/vscode"
|
|
49
|
+
],
|
|
50
|
+
"packageManager": "bun@1.3.14",
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=26"
|
|
53
|
+
},
|
|
54
|
+
"type": "module",
|
|
55
|
+
"main": "./dist/src/pi/index.js",
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"effect": "^3.22.0",
|
|
58
|
+
"ws": "^8.21.0"
|
|
59
|
+
},
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"@earendil-works/pi-coding-agent": "*",
|
|
62
|
+
"@earendil-works/pi-tui": "*"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@earendil-works/pi-coding-agent": "^0.99.1",
|
|
66
|
+
"@earendil-works/pi-tui": "^0.99.1",
|
|
67
|
+
"@eslint/js": "^10.0.1",
|
|
68
|
+
"@types/node": "^26.0.0",
|
|
69
|
+
"@types/ws": "^8.18.1",
|
|
70
|
+
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
71
|
+
"@vscode/vsce": "^3.9.2",
|
|
72
|
+
"esbuild": "^0.28.1",
|
|
73
|
+
"eslint": "^10.4.1",
|
|
74
|
+
"eslint-config-prettier": "^10.1.8",
|
|
75
|
+
"prettier": "^3.8.4",
|
|
76
|
+
"typescript": "^6.0.3",
|
|
77
|
+
"typescript-eslint": "^8.61.0"
|
|
78
|
+
},
|
|
79
|
+
"trustedDependencies": [
|
|
80
|
+
"esbuild"
|
|
81
|
+
],
|
|
82
|
+
"pi": {
|
|
83
|
+
"image": "https://fastly.jsdelivr.net/gh/saifymatteo/pi-x-ide@main/assets/icons/pi-x-ide.png",
|
|
84
|
+
"extensions": [
|
|
85
|
+
"./dist/src/pi/index.js"
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/saifymatteo/pi-x-ide/schemas/config.json",
|
|
4
|
+
"title": "Pi config.json",
|
|
5
|
+
"description": "Schema for Pi-side configuration read from ~/.pi/pi-x-ide/config.json.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": true,
|
|
8
|
+
"properties": {
|
|
9
|
+
"fixPrompt": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Custom prompt prefix when requesting a fix for IDE diagnostics. Use {DIAGNOSTIC} as a placeholder for the diagnostic context. If the placeholder is omitted, the diagnostic context is appended after your prompt.",
|
|
12
|
+
"default": "Analyze the errors and warnings at the following location, and try to fix them:\n{DIAGNOSTIC}"
|
|
13
|
+
},
|
|
14
|
+
"status_display": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Where to show IDE connection status. Use \"widget\" for the above-editor widget (default), or \"statusline\" for the default footer status line.",
|
|
17
|
+
"default": "widget",
|
|
18
|
+
"enum": [
|
|
19
|
+
"widget",
|
|
20
|
+
"statusline"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"env": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"description": "Pi-side environment variables. Real environment variables override these values.",
|
|
26
|
+
"additionalProperties": {
|
|
27
|
+
"type": [
|
|
28
|
+
"string",
|
|
29
|
+
"number",
|
|
30
|
+
"boolean"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"properties": {
|
|
34
|
+
"PI_X_IDE_AUTO_INSTALL": {
|
|
35
|
+
"type": [
|
|
36
|
+
"string",
|
|
37
|
+
"number",
|
|
38
|
+
"boolean"
|
|
39
|
+
],
|
|
40
|
+
"description": "Controls VS Code extension auto-install. Values 0, false, and off disable it."
|
|
41
|
+
},
|
|
42
|
+
"PI_X_IDE_ATTACH_SHORTCUT": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"description": "Pi TUI shortcut for attaching the latest IDE selection. Set to off, none, false, or 0 to disable."
|
|
45
|
+
},
|
|
46
|
+
"PI_X_IDE_HOST_OVERRIDE": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "Override the host Pi uses to connect to IDE WebSocket lock files. Useful for WSL2 or custom networking."
|
|
49
|
+
},
|
|
50
|
+
"PI_X_IDE_ZED_DB": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "Override path to Zed's SQLite database."
|
|
53
|
+
},
|
|
54
|
+
"PI_X_IDE_ZED_POLL_INTERVAL_MS": {
|
|
55
|
+
"type": [
|
|
56
|
+
"string",
|
|
57
|
+
"number"
|
|
58
|
+
],
|
|
59
|
+
"description": "Polling interval in milliseconds when checking Zed's SQLite database for selection changes."
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"patternProperties": {}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"examples": [
|
|
66
|
+
{
|
|
67
|
+
"fixPrompt": "Analyze the errors and warnings at the following location, and try to fix them:\n{DIAGNOSTIC}",
|
|
68
|
+
"status_display": "widget",
|
|
69
|
+
"env": {
|
|
70
|
+
"PI_X_IDE_AUTO_INSTALL": "0",
|
|
71
|
+
"PI_X_IDE_ATTACH_SHORTCUT": "ctrl+alt+k",
|
|
72
|
+
"PI_X_IDE_ZED_DB": "/home/user/.local/share/zed/db/0-stable/db.sqlite",
|
|
73
|
+
"PI_X_IDE_ZED_POLL_INTERVAL_MS": 1000
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|