pi-extensions 0.1.37 → 0.1.38
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.
|
@@ -4,6 +4,12 @@ All notable changes to this extension will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.1.20] - 2026-04-24
|
|
8
|
+
|
|
9
|
+
### Removed
|
|
10
|
+
- Remove the external `/readfiles-review` and `/readfiles-diff` commands so files-widget stays focused on the `/readfiles` browser/viewer.
|
|
11
|
+
|
|
12
|
+
|
|
7
13
|
## [0.1.18] - 2026-04-19
|
|
8
14
|
|
|
9
15
|
### Changed
|
package/files-widget/README.md
CHANGED
|
@@ -81,21 +81,9 @@ The `/readfiles` browser requires these tools and will refuse to open until they
|
|
|
81
81
|
|
|
82
82
|
## Commands
|
|
83
83
|
|
|
84
|
-
- `/readfiles` - open the file browser
|
|
85
|
-
- `/review` - open tuicr review flow
|
|
86
|
-
- `/diff` - open critique (bunx critique)
|
|
84
|
+
- `/readfiles` - open the file browser and viewer
|
|
87
85
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
brew install agavra/tap/tuicr
|
|
92
|
-
brew install oven-sh/bun/bun
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
- `tuicr` is required for `/review`
|
|
96
|
-
- `bun` is required for `/diff`
|
|
97
|
-
|
|
98
|
-
If missing, `/review` or `/diff` will show a clear install prompt.
|
|
86
|
+
Diff viewing is built into the file viewer: open a changed tracked file and press `d` to toggle the git diff view.
|
|
99
87
|
|
|
100
88
|
## Browser Keybindings
|
|
101
89
|
|
package/files-widget/index.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pi Editor Extension
|
|
3
3
|
*
|
|
4
|
-
* Provides an in-terminal file browser
|
|
5
|
-
* Use /
|
|
4
|
+
* Provides an in-terminal file browser and viewer.
|
|
5
|
+
* Use /readfiles to open the file browser, navigate with j/k, Enter to view.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
9
|
-
import { execSync, spawnSync } from "node:child_process";
|
|
10
9
|
import { join } from "node:path";
|
|
11
10
|
|
|
12
11
|
import { createFileBrowser } from "./browser";
|
|
@@ -70,60 +69,6 @@ export default function editorExtension(pi: ExtensionAPI): void {
|
|
|
70
69
|
},
|
|
71
70
|
});
|
|
72
71
|
|
|
73
|
-
pi.registerCommand("readfiles-review", {
|
|
74
|
-
description: "Open tuicr to review changes and send feedback to agent",
|
|
75
|
-
handler: async (_args, ctx) => {
|
|
76
|
-
if (!hasCommand("tuicr")) {
|
|
77
|
-
ctx.ui.notify("Install tuicr: brew install agavra/tap/tuicr", "error");
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
ctx.ui.notify("Opening tuicr... Press :wq or y to copy review", "info");
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
spawnSync("tuicr", [], { cwd, stdio: "inherit" });
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
const clipboard = execSync(
|
|
88
|
-
process.platform === "darwin" ? "pbpaste" : "xclip -selection clipboard -o",
|
|
89
|
-
{ encoding: "utf-8", timeout: 5000 }
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
if (
|
|
93
|
-
clipboard.includes("## Review") ||
|
|
94
|
-
clipboard.includes("```") ||
|
|
95
|
-
clipboard.includes("[Issue]") ||
|
|
96
|
-
clipboard.includes("[Suggestion]")
|
|
97
|
-
) {
|
|
98
|
-
pi.sendUserMessage(clipboard, { deliverAs: "steer" });
|
|
99
|
-
ctx.ui.notify("Review sent to agent", "success");
|
|
100
|
-
}
|
|
101
|
-
} catch {}
|
|
102
|
-
} catch (e: any) {
|
|
103
|
-
ctx.ui.notify(`tuicr error: ${e.message}`, "error");
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
pi.registerCommand("readfiles-diff", {
|
|
109
|
-
description: "Open critique to view diffs",
|
|
110
|
-
handler: async (args, ctx) => {
|
|
111
|
-
if (!hasCommand("bun")) {
|
|
112
|
-
ctx.ui.notify("critique requires Bun: brew install oven-sh/bun/bun", "error");
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const critiqueArgs = args ? args.split(" ") : [];
|
|
117
|
-
ctx.ui.notify("Opening critique...", "info");
|
|
118
|
-
|
|
119
|
-
try {
|
|
120
|
-
spawnSync("bunx", ["critique", ...critiqueArgs], { cwd, stdio: "inherit" });
|
|
121
|
-
} catch (e: any) {
|
|
122
|
-
ctx.ui.notify(`critique error: ${e.message}`, "error");
|
|
123
|
-
}
|
|
124
|
-
},
|
|
125
|
-
});
|
|
126
|
-
|
|
127
72
|
pi.on("tool_result", async (event) => {
|
|
128
73
|
if (event.toolName === "write" || event.toolName === "edit") {
|
|
129
74
|
const filePath = event.input?.path as string | undefined;
|