@mariozechner/pi-coding-agent 0.55.1 → 0.55.3
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 +27 -0
- package/README.md +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +14 -2
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +5 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +27 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +10 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +21 -2
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +14 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +5 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/custom-provider.md +32 -0
- package/docs/extensions.md +17 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +5 -5
- package/examples/server-web-client/node_modules/.vite/deps/_metadata.json +0 -8
- package/examples/server-web-client/node_modules/.vite/deps/package.json +0 -3
package/docs/custom-provider.md
CHANGED
|
@@ -21,6 +21,7 @@ See these complete provider examples:
|
|
|
21
21
|
- [Quick Reference](#quick-reference)
|
|
22
22
|
- [Override Existing Provider](#override-existing-provider)
|
|
23
23
|
- [Register New Provider](#register-new-provider)
|
|
24
|
+
- [Unregister Provider](#unregister-provider)
|
|
24
25
|
- [OAuth Support](#oauth-support)
|
|
25
26
|
- [Custom Streaming API](#custom-streaming-api)
|
|
26
27
|
- [Testing Your Implementation](#testing-your-implementation)
|
|
@@ -116,6 +117,37 @@ pi.registerProvider("my-llm", {
|
|
|
116
117
|
|
|
117
118
|
When `models` is provided, it **replaces** all existing models for that provider.
|
|
118
119
|
|
|
120
|
+
## Unregister Provider
|
|
121
|
+
|
|
122
|
+
Use `pi.unregisterProvider(name)` to remove a provider that was previously registered via `pi.registerProvider(name, ...)`:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// Register
|
|
126
|
+
pi.registerProvider("my-llm", {
|
|
127
|
+
baseUrl: "https://api.my-llm.com/v1",
|
|
128
|
+
apiKey: "MY_LLM_API_KEY",
|
|
129
|
+
api: "openai-completions",
|
|
130
|
+
models: [
|
|
131
|
+
{
|
|
132
|
+
id: "my-llm-large",
|
|
133
|
+
name: "My LLM Large",
|
|
134
|
+
reasoning: true,
|
|
135
|
+
input: ["text", "image"],
|
|
136
|
+
cost: { input: 3.0, output: 15.0, cacheRead: 0.3, cacheWrite: 3.75 },
|
|
137
|
+
contextWindow: 200000,
|
|
138
|
+
maxTokens: 16384
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// Later, remove it
|
|
144
|
+
pi.unregisterProvider("my-llm");
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Unregistering removes that provider's dynamic models, API key fallback, OAuth provider registration, and custom stream handler registrations. Any built-in models or provider behavior that were overridden are restored.
|
|
148
|
+
|
|
149
|
+
Calls made after the initial extension load phase are applied immediately, so no `/reload` is required.
|
|
150
|
+
|
|
119
151
|
### API Types
|
|
120
152
|
|
|
121
153
|
The `api` field determines which streaming implementation is used:
|
package/docs/extensions.md
CHANGED
|
@@ -1161,6 +1161,8 @@ pi.events.emit("my:event", { ... });
|
|
|
1161
1161
|
|
|
1162
1162
|
Register or override a model provider dynamically. Useful for proxies, custom endpoints, or team-wide model configurations.
|
|
1163
1163
|
|
|
1164
|
+
Calls made during the extension factory function are queued and applied once the runner initialises. Calls made after that — for example from a command handler following a user setup flow — take effect immediately without requiring a `/reload`.
|
|
1165
|
+
|
|
1164
1166
|
```typescript
|
|
1165
1167
|
// Register a new provider with custom models
|
|
1166
1168
|
pi.registerProvider("my-proxy", {
|
|
@@ -1221,6 +1223,21 @@ pi.registerProvider("corporate-ai", {
|
|
|
1221
1223
|
|
|
1222
1224
|
See [custom-provider.md](custom-provider.md) for advanced topics: custom streaming APIs, OAuth details, model definition reference.
|
|
1223
1225
|
|
|
1226
|
+
### pi.unregisterProvider(name)
|
|
1227
|
+
|
|
1228
|
+
Remove a previously registered provider and its models. Built-in models that were overridden by the provider are restored. Has no effect if the provider was not registered.
|
|
1229
|
+
|
|
1230
|
+
Like `registerProvider`, this takes effect immediately when called after the initial load phase, so a `/reload` is not required.
|
|
1231
|
+
|
|
1232
|
+
```typescript
|
|
1233
|
+
pi.registerCommand("my-setup-teardown", {
|
|
1234
|
+
description: "Remove the custom proxy provider",
|
|
1235
|
+
handler: async (_args, _ctx) => {
|
|
1236
|
+
pi.unregisterProvider("my-proxy");
|
|
1237
|
+
},
|
|
1238
|
+
});
|
|
1239
|
+
```
|
|
1240
|
+
|
|
1224
1241
|
## State Management
|
|
1225
1242
|
|
|
1226
1243
|
Extensions with state should store it in tool result `details` for proper branching support:
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-custom-provider",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.3",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-custom-provider",
|
|
9
|
-
"version": "1.6.
|
|
9
|
+
"version": "1.6.3",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sdk": "^0.52.0"
|
|
12
12
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-with-deps",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.3",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-with-deps",
|
|
9
|
-
"version": "1.19.
|
|
9
|
+
"version": "1.19.3",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"ms": "^2.1.3"
|
|
12
12
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mariozechner/pi-coding-agent",
|
|
3
|
-
"version": "0.55.
|
|
3
|
+
"version": "0.55.3",
|
|
4
4
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"piConfig": {
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@mariozechner/jiti": "^2.6.2",
|
|
43
|
-
"@mariozechner/pi-agent-core": "^0.55.
|
|
44
|
-
"@mariozechner/pi-ai": "^0.55.
|
|
45
|
-
"@mariozechner/pi-tui": "^0.55.
|
|
43
|
+
"@mariozechner/pi-agent-core": "^0.55.3",
|
|
44
|
+
"@mariozechner/pi-ai": "^0.55.3",
|
|
45
|
+
"@mariozechner/pi-tui": "^0.55.3",
|
|
46
46
|
"@silvia-odwyer/photon-node": "^0.3.4",
|
|
47
47
|
"chalk": "^5.5.0",
|
|
48
48
|
"cli-highlight": "^2.1.11",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"hosted-git-info": "^9.0.2",
|
|
54
54
|
"ignore": "^7.0.5",
|
|
55
55
|
"marked": "^15.0.12",
|
|
56
|
-
"minimatch": "^10.
|
|
56
|
+
"minimatch": "^10.2.3",
|
|
57
57
|
"proper-lockfile": "^4.1.2",
|
|
58
58
|
"yaml": "^2.8.2"
|
|
59
59
|
},
|