@diegopetrucci/pi-extensions 0.1.5 → 0.1.6
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
CHANGED
|
@@ -8,6 +8,7 @@ A collection of [pi](https://github.com/badlogic/pi-mono) agent extensions I mad
|
|
|
8
8
|
|---|---|
|
|
9
9
|
| [`minimal-footer`](./extensions/minimal-footer) | Replaces pi's built-in footer with a minimal two-line layout: branch/repo on the first line, context/model on the second. |
|
|
10
10
|
| [`oracle`](./extensions/oracle) | Adds an Amp-style read-only oracle tool that auto-selects the strongest reasoning model on the current provider/subscription, covers pi’s built-in providers with hardcoded rankings, sets reasoning to xhigh by default, and shows live status while running. |
|
|
11
|
+
| [`permission-gate`](./extensions/permission-gate) | Prompts for confirmation before dangerous bash commands like `rm -rf`, `sudo`, and `chmod 777`. |
|
|
11
12
|
|
|
12
13
|
## Install
|
|
13
14
|
|
|
@@ -22,7 +23,7 @@ pi install git:github.com/diegopetrucci/pi-extensions
|
|
|
22
23
|
Or pin to a tagged version:
|
|
23
24
|
|
|
24
25
|
```bash
|
|
25
|
-
pi install git:github.com/diegopetrucci/pi-extensions@v0.1.
|
|
26
|
+
pi install git:github.com/diegopetrucci/pi-extensions@v0.1.6
|
|
26
27
|
```
|
|
27
28
|
|
|
28
29
|
### npm
|
|
@@ -53,6 +54,10 @@ pi install npm:@diegopetrucci/pi-minimal-footer
|
|
|
53
54
|
pi install npm:@diegopetrucci/pi-oracle
|
|
54
55
|
```
|
|
55
56
|
|
|
57
|
+
```bash
|
|
58
|
+
pi install npm:@diegopetrucci/pi-permission-gate
|
|
59
|
+
```
|
|
60
|
+
|
|
56
61
|
### Option 2: filter the repo package
|
|
57
62
|
|
|
58
63
|
If you prefer the collection package, you can filter it in your pi settings.
|
|
@@ -83,25 +88,22 @@ Oracle only:
|
|
|
83
88
|
}
|
|
84
89
|
```
|
|
85
90
|
|
|
91
|
+
Permission gate only:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"packages": [
|
|
96
|
+
{
|
|
97
|
+
"source": "npm:@diegopetrucci/pi-extensions",
|
|
98
|
+
"extensions": ["extensions/permission-gate/index.ts"]
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
86
104
|
## npm publishing
|
|
87
105
|
|
|
88
106
|
The repo is set up to support both:
|
|
89
107
|
|
|
90
108
|
- the collection package: `@diegopetrucci/pi-extensions`
|
|
91
|
-
- standalone extension packages like `@diegopetrucci/pi-minimal-footer`
|
|
92
|
-
|
|
93
|
-
## Repository structure
|
|
94
|
-
|
|
95
|
-
Each extension lives in its own subdirectory under [`extensions/`](./extensions). This keeps the repo easy to grow while still letting each extension carry its own package metadata and documentation.
|
|
96
|
-
|
|
97
|
-
## Oracle docs
|
|
98
|
-
|
|
99
|
-
- [Oracle provider matrix](./docs/oracle-provider-matrix.md)
|
|
100
|
-
- [Release notes for v0.1.5](./docs/release-notes-v0.1.5.md)
|
|
101
|
-
- [GitHub release body for v0.1.5](./docs/github-release-v0.1.5.md)
|
|
102
|
-
- [Publish checklist for v0.1.5](./docs/publish-checklist-v0.1.5.md)
|
|
103
|
-
- [Announcement copy for v0.1.5](./docs/announcement-v0.1.5.md)
|
|
104
|
-
|
|
105
|
-
## License
|
|
106
|
-
|
|
107
|
-
[MIT](./LICENSE)
|
|
109
|
+
- standalone extension packages like `@diegopetrucci/pi-minimal-footer`, `@diegopetrucci/pi-oracle`, and `@diegopetrucci/pi-permission-gate`
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# permission-gate
|
|
2
|
+
|
|
3
|
+
A small pi extension that prompts for confirmation before running potentially dangerous bash commands.
|
|
4
|
+
|
|
5
|
+
This is adapted from the original `permission-gate.ts` example in [`badlogic/pi-mono`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/examples/extensions/permission-gate.ts) and kept basically the same.
|
|
6
|
+
|
|
7
|
+
## What it checks
|
|
8
|
+
|
|
9
|
+
- `rm -rf`
|
|
10
|
+
- `sudo`
|
|
11
|
+
- `chmod` / `chown` with `777`
|
|
12
|
+
|
|
13
|
+
If pi is running without an interactive UI, it blocks matching commands by default.
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
### Standalone npm package
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pi install npm:@diegopetrucci/pi-permission-gate
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Collection package
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pi install npm:@diegopetrucci/pi-extensions
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### GitHub package
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pi install git:github.com/diegopetrucci/pi-extensions
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Then reload pi:
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
/reload
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
|
|
43
|
+
- Hooks the `tool_call` event.
|
|
44
|
+
- Only inspects the `bash` tool.
|
|
45
|
+
- Prompts with a simple `Yes` / `No` selector before allowing dangerous commands.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Gate Extension
|
|
3
|
+
*
|
|
4
|
+
* Prompts for confirmation before running potentially dangerous bash commands.
|
|
5
|
+
* Patterns checked: rm -rf, sudo, chmod/chown 777
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
9
|
+
|
|
10
|
+
export default function (pi: ExtensionAPI) {
|
|
11
|
+
const dangerousPatterns = [/\brm\s+(-rf?|--recursive)/i, /\bsudo\b/i, /\b(chmod|chown)\b.*777/i];
|
|
12
|
+
|
|
13
|
+
pi.on("tool_call", async (event, ctx) => {
|
|
14
|
+
if (event.toolName !== "bash") return undefined;
|
|
15
|
+
|
|
16
|
+
const command = event.input.command as string;
|
|
17
|
+
const isDangerous = dangerousPatterns.some((p) => p.test(command));
|
|
18
|
+
|
|
19
|
+
if (isDangerous) {
|
|
20
|
+
if (!ctx.hasUI) {
|
|
21
|
+
// In non-interactive mode, block by default
|
|
22
|
+
return { block: true, reason: "Dangerous command blocked (no UI for confirmation)" };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const choice = await ctx.ui.select(`⚠️ Dangerous command:\n\n ${command}\n\nAllow?`, ["Yes", "No"]);
|
|
26
|
+
|
|
27
|
+
if (choice !== "Yes") {
|
|
28
|
+
return { block: true, reason: "Blocked by user" };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return undefined;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@diegopetrucci/pi-permission-gate",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A pi extension that prompts before dangerous bash commands.",
|
|
5
|
+
"keywords": ["pi-package", "pi", "security", "bash"],
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/diegopetrucci/pi-extensions.git",
|
|
10
|
+
"directory": "extensions/permission-gate"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"index.ts",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"pi": {
|
|
20
|
+
"extensions": [
|
|
21
|
+
"index.ts"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"@mariozechner/pi-coding-agent": "*"
|
|
26
|
+
}
|
|
27
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diegopetrucci/pi-extensions",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "A collection of pi extensions, including a minimal custom footer
|
|
3
|
+
"version": "0.1.6",
|
|
4
|
+
"description": "A collection of pi extensions, including a minimal custom footer, an Amp-style oracle, and a permission gate for dangerous bash commands.",
|
|
5
5
|
"keywords": ["pi-package", "pi", "terminal", "agent"],
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"pi": {
|
|
28
28
|
"extensions": [
|
|
29
29
|
"./extensions/minimal-footer/index.ts",
|
|
30
|
-
"./extensions/oracle/index.ts"
|
|
30
|
+
"./extensions/oracle/index.ts",
|
|
31
|
+
"./extensions/permission-gate/index.ts"
|
|
31
32
|
],
|
|
32
33
|
"image": "https://raw.githubusercontent.com/diegopetrucci/pi-extensions/main/assets/oracle-preview.svg"
|
|
33
34
|
}
|