@mariozechner/pi-coding-agent 0.55.1 → 0.55.2

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/core/extensions/loader.d.ts.map +1 -1
  3. package/dist/core/extensions/loader.js +14 -2
  4. package/dist/core/extensions/loader.js.map +1 -1
  5. package/dist/core/extensions/runner.d.ts.map +1 -1
  6. package/dist/core/extensions/runner.js +5 -1
  7. package/dist/core/extensions/runner.js.map +1 -1
  8. package/dist/core/extensions/types.d.ts +27 -0
  9. package/dist/core/extensions/types.d.ts.map +1 -1
  10. package/dist/core/extensions/types.js.map +1 -1
  11. package/dist/core/model-registry.d.ts +10 -0
  12. package/dist/core/model-registry.d.ts.map +1 -1
  13. package/dist/core/model-registry.js +21 -2
  14. package/dist/core/model-registry.js.map +1 -1
  15. package/dist/core/session-manager.d.ts.map +1 -1
  16. package/dist/core/session-manager.js +14 -7
  17. package/dist/core/session-manager.js.map +1 -1
  18. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  19. package/dist/modes/interactive/interactive-mode.js +5 -0
  20. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  21. package/docs/custom-provider.md +32 -0
  22. package/docs/extensions.md +17 -0
  23. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  24. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  25. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  26. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  27. package/examples/extensions/with-deps/package-lock.json +2 -2
  28. package/examples/extensions/with-deps/package.json +1 -1
  29. package/package.json +5 -5
  30. package/examples/server-web-client/node_modules/.vite/deps/_metadata.json +0 -8
  31. package/examples/server-web-client/node_modules/.vite/deps/package.json +0 -3
@@ -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:
@@ -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.1",
3
+ "version": "1.6.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-custom-provider",
9
- "version": "1.6.1",
9
+ "version": "1.6.2",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.52.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "1.6.1",
4
+ "version": "1.6.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "1.6.1",
4
+ "version": "1.6.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-qwen-cli",
3
3
  "private": true,
4
- "version": "1.5.1",
4
+ "version": "1.5.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "1.19.1",
3
+ "version": "1.19.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "1.19.1",
9
+ "version": "1.19.2",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "1.19.1",
4
+ "version": "1.19.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mariozechner/pi-coding-agent",
3
- "version": "0.55.1",
3
+ "version": "0.55.2",
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.1",
44
- "@mariozechner/pi-ai": "^0.55.1",
45
- "@mariozechner/pi-tui": "^0.55.1",
43
+ "@mariozechner/pi-agent-core": "^0.55.2",
44
+ "@mariozechner/pi-ai": "^0.55.2",
45
+ "@mariozechner/pi-tui": "^0.55.2",
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.1.1",
56
+ "minimatch": "^10.2.3",
57
57
  "proper-lockfile": "^4.1.2",
58
58
  "yaml": "^2.8.2"
59
59
  },
@@ -1,8 +0,0 @@
1
- {
2
- "hash": "aa4bce83",
3
- "configHash": "c964211b",
4
- "lockfileHash": "693aa852",
5
- "browserHash": "8b3dfc5b",
6
- "optimized": {},
7
- "chunks": {}
8
- }
@@ -1,3 +0,0 @@
1
- {
2
- "type": "module"
3
- }