pi-io-provider 1.1.44 → 1.1.46

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 ADDED
@@ -0,0 +1,6 @@
1
+ # Changelog
2
+
3
+ ## 1.1.45
4
+
5
+ - Test against Pi 0.99.0 and declare host-provided modules as wildcard peers.
6
+ - Replace no-op checks with scoped TypeScript checks and an offline real-Pi loader, provider-registration, and session-lifecycle smoke test.
package/README.md CHANGED
@@ -16,29 +16,29 @@ A [pi](https://github.com/badlogic/pi-mono) extension that adds [IO Intelligence
16
16
 
17
17
  | Model | ID | Context | Max Output | Vision | Reasoning | Cache | Input $/M | Output $/M |
18
18
  |-------|----|---------|------------|--------|-----------|-------|-----------|------------|
19
- | Gemma 4 26B A4B | `google/gemma-4-26b-a4b-it` | 262K | 262K | ✅ | ✅ | ✅ | $0.09 | $0.32 |
19
+ | DeepSeek V4.1 Flash | `deepseek-ai/DeepSeek-V4.1-Flash` | 1.0M | 131K | ✅ | ✅ | ✅ | $0.33 | $1.32 |
20
+ | Gemma 4 26B A4B | `google/gemma-4-26b-a4b-it` | 262K | 262K | ✅ | ✅ | ✅ | $0.08 | $0.30 |
20
21
  | Gemma 4 31B Instruct | `google/gemma-4-31b-it` | 262K | 16K | ✅ | ✅ | ✅ | $0.38 | $1.15 |
21
22
  | Kimi K2.5 | `moonshotai/Kimi-K2.5` | 262K | 262K | ✅ | ✅ | ✅ | $0.53 | $2.79 |
22
- | Kimi K2.6 | `moonshotai/Kimi-K2.6` | 262K | 262K | ✅ | ✅ | ✅ | $0.83 | $3.60 |
23
- | Kimi K2.7 Code | `moonshotai/Kimi-K2.7-Code` | 262K | 262K | ✅ | ✅ | ✅ | $1.07 | $4.65 |
24
- | Kimi K3 | `moonshotai/Kimi-K3` | 1.0M | 1.0M | ✅ | ✅ | ✅ | $3.30 | $16.50 |
23
+ | Kimi K2.6 | `moonshotai/Kimi-K2.6` | 262K | 262K | ✅ | ✅ | ✅ | $0.67 | $3.17 |
24
+ | Kimi K2.7 Code | `moonshotai/Kimi-K2.7-Code` | 262K | 262K | ✅ | ✅ | ✅ | $0.95 | $4.26 |
25
+ | Kimi K3 | `moonshotai/Kimi-K3` | 1.0M | 1.0M | ✅ | ✅ | ✅ | $3.06 | $15.30 |
25
26
  | Qwen3.6 27B | `Qwen/Qwen3.6-27B` | 33K | 33K | ✅ | ✅ | ✅ | $0.34 | $3.01 |
26
- | Qwen3.6 35B A3B | `Qwen/Qwen3.6-35B-A3B` | 262K | 262K | ✅ | ✅ | ✅ | $0.17 | $1.13 |
27
+ | Qwen3.6 35B A3B | `Qwen/Qwen3.6-35B-A3B` | 262K | 262K | ✅ | ✅ | ✅ | $0.17 | $1.11 |
27
28
  | Qwen3.8 27B | `Qwen/Qwen3.8-27B` | 66K | 66K | ✅ | ✅ | ✅ | $0.34 | $2.69 |
28
29
  | GLM 5.3 Flash | `zai-org/GLM-5.3-Flash` | 262K | 131K | ✅ | ✅ | ✅ | $0.21 | $0.70 |
29
30
  | DeepSeek R1 0528 | `deepseek-ai/DeepSeek-R1-0528` | 128K | 128K | ❌ | ✅ | ✅ | $0.57 | $2.28 |
30
31
  | DeepSeek V3.2 | `deepseek-ai/DeepSeek-V3.2` | 164K | 164K | ❌ | ✅ | ✅ | $1.42 | $2.38 |
31
32
  | DeepSeek V4 Flash | `deepseek-ai/DeepSeek-V4-Flash` | 33K | 33K | ❌ | ✅ | ✅ | $0.13 | $0.52 |
32
33
  | DeepSeek V4 Flash 0731 | `deepseek-ai/DeepSeek-V4-Flash-0731` | 262K | 66K | ❌ | ✅ | ✅ | $0.23 | $0.74 |
33
- | DeepSeek V4 Pro | `deepseek-ai/DeepSeek-V4-Pro` | 1.0M | 600K | ❌ | ✅ | ✅ | $1.74 | $3.47 |
34
- | DeepSeek V4 Pro 0813 | `deepseek-ai/DeepSeek-V4-Pro-0813` | 1.0M | 393K | ❌ | ✅ | ✅ | $1.24 | $3.50 |
35
- | DeepSeek V4.1 Flash | `deepseek-ai/DeepSeek-V4.1-Flash` | 262K | 131K | ❌ | ✅ | ✅ | $0.31 | $1.24 |
36
- | MiniMax M2.5 | `MiniMaxAI/MiniMax-M2.5` | 197K | 197K | ❌ | ✅ | ✅ | $0.35 | $1.37 |
37
- | MiniMax M2.7 | `MiniMaxAI/MiniMax-M2.7` | 262K | 66K | ❌ | ✅ | ✅ | $0.47 | $1.78 |
34
+ | DeepSeek V4 Pro | `deepseek-ai/DeepSeek-V4-Pro` | 1.0M | 600K | ❌ | ✅ | ✅ | $1.54 | $3.09 |
35
+ | DeepSeek V4 Pro 0813 | `deepseek-ai/DeepSeek-V4-Pro-0813` | 1.0M | 393K | ❌ | ✅ | ✅ | $1.13 | $4.01 |
36
+ | MiniMax M2.5 | `MiniMaxAI/MiniMax-M2.5` | 197K | 197K | ❌ | ✅ | ✅ | $0.35 | $1.42 |
37
+ | MiniMax M2.7 | `MiniMaxAI/MiniMax-M2.7` | 262K | 66K | ❌ | ✅ | ✅ | $0.40 | $1.49 |
38
38
  | Kimi K2 Thinking | `moonshotai/Kimi-K2-Thinking` | 262K | 262K | ❌ | ✅ | ✅ | $0.60 | $2.50 |
39
- | Nemotron 3.5 Lightning | `nvidia/nemotron-3.5-lightning` | 262K | 131K | ❌ | ✅ | ✅ | $0.06 | $0.20 |
40
- | gpt-oss-120b | `openai/gpt-oss-120b` | 131K | 131K | ❌ | ✅ | ✅ | $0.18 | $0.68 |
41
- | gpt-oss-20b | `openai/gpt-oss-20b` | 64K | 64K | ❌ | ✅ | ✅ | $0.06 | $0.20 |
39
+ | Nemotron 3.5 Lightning | `nvidia/nemotron-3.5-lightning` | 262K | 131K | ❌ | ✅ | ✅ | $0.06 | $0.18 |
40
+ | gpt-oss-120b | `openai/gpt-oss-120b` | 131K | 131K | ❌ | ✅ | ✅ | $0.19 | $0.73 |
41
+ | gpt-oss-20b | `openai/gpt-oss-20b` | 64K | 64K | ❌ | ✅ | ✅ | $0.06 | $0.19 |
42
42
  | MiMo-V2.5 | `XiaomiMiMo/MiMo-V2.5` | 1.0M | 1.0M | ❌ | ✅ | ✅ | $0.20 | $0.64 |
43
43
  | GLM-4.5-Air | `zai-org/GLM-4.5-Air` | 131K | 131K | ❌ | ✅ | ✅ | $0.16 | $0.94 |
44
44
  | GLM 4.6 | `zai-org/GLM-4.6` | 131K | 131K | ❌ | ✅ | ✅ | $0.52 | $2.04 |
@@ -46,7 +46,7 @@ A [pi](https://github.com/badlogic/pi-mono) extension that adds [IO Intelligence
46
46
  | GLM 4.7 Flash | `zai-org/GLM-4.7-Flash` | 200K | 200K | ❌ | ✅ | ✅ | $0.06 | $0.40 |
47
47
  | GLM 5 | `zai-org/GLM-5` | 203K | 203K | ❌ | ✅ | ✅ | $0.86 | $2.75 |
48
48
  | GLM 5.1 | `zai-org/GLM-5.1` | 203K | 33K | ❌ | ✅ | ✅ | $1.30 | $4.13 |
49
- | GLM 5.2 | `zai-org/GLM-5.2` | 262K | 131K | ❌ | ✅ | ✅ | $1.88 | $6.09 |
49
+ | GLM 5.2 | `zai-org/GLM-5.2` | 262K | 131K | ❌ | ✅ | ✅ | $1.85 | $6.00 |
50
50
  | GLM 5.3 | `zai-org/GLM-5.3` | 262K | 131K | ❌ | ✅ | ✅ | $1.65 | $5.19 |
51
51
  | Llama 4 Maverick 17B 128E Instruct FP8 | `meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8` | 430K | 430K | ✅ | ❌ | ✅ | $0.25 | $0.83 |
52
52
  | Qwen3 Coder 480B A35B Instruct INT4 Mixed AR | `Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar` | 106K | 106K | ❌ | ❌ | ✅ | $0.45 | $2.15 |
package/bun.lock CHANGED
@@ -5,7 +5,12 @@
5
5
  "": {
6
6
  "name": "pi-io-provider",
7
7
  "devDependencies": {
8
- "@earendil-works/pi-coding-agent": "0.87.0",
8
+ "@earendil-works/pi-coding-agent": "0.99.0",
9
+ "@types/node": "^25.9.1",
10
+ "typescript": "6.0.3",
11
+ },
12
+ "peerDependencies": {
13
+ "@earendil-works/pi-coding-agent": "*",
9
14
  },
10
15
  },
11
16
  },
@@ -52,17 +57,21 @@
52
57
 
53
58
  "@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="],
54
59
 
55
- "@earendil-works/chord": ["@earendil-works/chord@0.87.0", "", { "dependencies": { "esbuild": "0.28.2" } }, "sha512-t8QOTf0GTHrsDSfcdtXuA9RCkh6mnR4l25N0SM/sgH7Ih25jH4tGXNbkGs9MWpV5xTu9MRPj4A7Zn1UEwQm9+g=="],
60
+ "@earendil-works/chord": ["@earendil-works/chord@0.99.0", "", { "dependencies": { "esbuild": "0.28.2" } }, "sha512-xGMjZqlbYOIs9hrKvTaW/rcwbjbrogBK2VU+z+YSR0v7G6WHMy6AivC4Sk0lMJjNaMsELFxG47X3BCkd6EqG4g=="],
61
+
62
+ "@earendil-works/pi-agent-core": ["@earendil-works/pi-agent-core@0.99.0", "", { "dependencies": { "@earendil-works/chord": "^0.99.0", "@earendil-works/pi-ai": "^0.99.0", "@earendil-works/pi-telemetry": "^0.99.0", "diff": "8.0.4", "ignore": "7.0.8", "typebox": "1.3.27", "yaml": "2.9.0" } }, "sha512-3ZFAZ6GnR+r41VVcI47svtvHJ01T/RGDcm3fL8l25VeJ3RwDxnzZ7/XSD56ldE/EOoLA7riwiqc7UEOLyoib1g=="],
56
63
 
57
- "@earendil-works/pi-agent-core": ["@earendil-works/pi-agent-core@0.87.0", "", { "dependencies": { "@earendil-works/chord": "^0.87.0", "@earendil-works/pi-ai": "^0.87.0", "@earendil-works/pi-telemetry": "^0.87.0", "diff": "8.0.4", "ignore": "7.0.8", "typebox": "1.3.27", "yaml": "2.9.0" } }, "sha512-c5b2FMdJ7C++HBa6AyBmusdf96gdgRqpF7J+UCq2yVGB28UETJvJ190HkgDWUaLPnOQQPbanjKMAm/TgRmFE2w=="],
64
+ "@earendil-works/pi-ai": ["@earendil-works/pi-ai@0.99.0", "", { "dependencies": { "@anthropic-ai/sdk": "0.124.0", "@aws-sdk/client-bedrock-runtime": "3.1127.0", "@earendil-works/pi-telemetry": "^0.99.0", "@google/genai": "2.21.0", "@smithy/node-http-handler": "4.12.1", "http-proxy-agent": "9.1.0", "https-proxy-agent": "9.1.0", "openai": "7.19.0", "partial-json": "0.1.7", "typebox": "1.3.27" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-pJVG2aytD6x1xckiM4co7DlK6xXwfH7LKcMoI6SFDuJ4OvVqedUUAYFFekX4WkeqOoRNCIjUwka/l7mWb/mjsQ=="],
58
65
 
59
- "@earendil-works/pi-ai": ["@earendil-works/pi-ai@0.87.0", "", { "dependencies": { "@anthropic-ai/sdk": "0.124.0", "@aws-sdk/client-bedrock-runtime": "3.1127.0", "@earendil-works/pi-telemetry": "^0.87.0", "@google/genai": "2.21.0", "@smithy/node-http-handler": "4.12.1", "http-proxy-agent": "9.1.0", "https-proxy-agent": "9.1.0", "openai": "6.40.0", "partial-json": "0.1.7", "typebox": "1.3.27" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-lbRm+EMY6Jx3l+HLpbqbm9Yrhkc5u7EffLk2id+zJQEoBuR5I+tijGiZU8zlnuuCclmQOgH0PVjL9PLbeqJ9MQ=="],
66
+ "@earendil-works/pi-codemode": ["@earendil-works/pi-codemode@0.99.0", "", { "dependencies": { "quickjs-wasi": "3.6.2" } }, "sha512-zPbNpvVEtO3x++isZosWLuDhs+Xb0F3Pux6BsgIPg+aDmzwKnMruJNDuny2C3ig4HdQQfJ0hmfRsXV3ZmCWrWg=="],
60
67
 
61
- "@earendil-works/pi-coding-agent": ["@earendil-works/pi-coding-agent@0.87.0", "", { "dependencies": { "@earendil-works/chord": "^0.87.0", "@earendil-works/pi-agent-core": "^0.87.0", "@earendil-works/pi-ai": "^0.87.0", "@earendil-works/pi-tui": "^0.87.0", "@silvia-odwyer/photon-node": "0.3.4", "chalk": "6.0.0", "cross-spawn": "7.0.6", "diff": "8.0.4", "grok-mermaid": "0.2.3", "highlight.js": "10.7.3", "hosted-git-info": "9.0.3", "ignore": "7.0.8", "jiti": "2.7.0", "minimatch": "10.2.6", "proper-lockfile": "4.1.2", "semver": "7.8.5", "typebox": "1.3.27", "undici": "8.10.2", "yaml": "2.9.0" }, "bin": { "pi": "dist/bundle/cli.js" } }, "sha512-S9JJVGHya/h0e0M+zwPTB6RkPe7PmLLqfBUTssFYW5mxAti6oZEILn4jvaUImENRC3U9RwXAB6H4gw8xj2J0GQ=="],
68
+ "@earendil-works/pi-coding-agent": ["@earendil-works/pi-coding-agent@0.99.0", "", { "dependencies": { "@earendil-works/chord": "^0.99.0", "@earendil-works/pi-agent-core": "^0.99.0", "@earendil-works/pi-ai": "^0.99.0", "@earendil-works/pi-codemode": "^0.99.0", "@earendil-works/pi-mcp": "^0.99.0", "@earendil-works/pi-tui": "^0.99.0", "@silvia-odwyer/photon-node": "0.3.4", "chalk": "6.0.0", "cross-spawn": "7.0.6", "diff": "8.0.4", "grok-mermaid": "0.2.3", "highlight.js": "10.7.3", "hosted-git-info": "9.0.3", "ignore": "7.0.8", "jiti": "2.7.0", "minimatch": "10.2.6", "proper-lockfile": "4.1.2", "quickjs-wasi": "3.6.2", "semver": "7.8.5", "typebox": "1.3.27", "undici": "8.10.2", "yaml": "2.9.0" }, "bin": { "pi": "dist/bundle/cli.js" } }, "sha512-rZ8lLzqhrXrlZSt9VffVmVOcPBzbnK53UilkwEpDqU/WfE1RKCRqzYfGll/Xsk5XumjpeBT8IWzKNP6CyiEtrg=="],
62
69
 
63
- "@earendil-works/pi-telemetry": ["@earendil-works/pi-telemetry@0.87.0", "", {}, "sha512-IEUMnV6mgHyOMfAxa4CKXoBKKfHM8KxNjbXWM4Bps/iLJcFMf8hQsEZ+95VnVTc7C0cU77Rmdxt773C35jb5AA=="],
70
+ "@earendil-works/pi-mcp": ["@earendil-works/pi-mcp@0.99.0", "", { "dependencies": { "cross-spawn": "7.0.6" } }, "sha512-9bt7QOZHMczU+bxO1VJdYMPeX54QdTSxE5Q+KbAi06GwOh+RUH2FTJCD7PZ1Av+oOJcTGTqr9CkvHtEUIFSuYg=="],
64
71
 
65
- "@earendil-works/pi-tui": ["@earendil-works/pi-tui@0.87.0", "", { "dependencies": { "get-east-asian-width": "1.6.0", "marked": "18.0.11" } }, "sha512-7gTC0XOgQfVWg4yGxwHINBpCnGl9p4KEC7PXIc8gAwc/cyxSW4VuFQrp+r1YD3oM+rBkoepKwAt6w6+VJ7BCaw=="],
72
+ "@earendil-works/pi-telemetry": ["@earendil-works/pi-telemetry@0.99.0", "", {}, "sha512-WH/sYgk7gY5OlunzPdtFPfPUr/M95F3GV+0yva3nHkcw2h463fWrJxn6hWuEC6vGktBMV41sA6QLB/ejllv1mw=="],
73
+
74
+ "@earendil-works/pi-tui": ["@earendil-works/pi-tui@0.99.0", "", { "dependencies": { "get-east-asian-width": "1.6.0", "marked": "18.0.11" } }, "sha512-6S8VIb0RnD2xHlssyL8XsLXmM9LC7pjL2e9+UVkh5FCgNxslb35bl3glhDyJZzovBUrGnUM872CbBGiSiMRbGw=="],
66
75
 
67
76
  "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="],
68
77
 
@@ -152,7 +161,7 @@
152
161
 
153
162
  "@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="],
154
163
 
155
- "@types/node": ["@types/node@26.4.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-k97ENvZWtvA6yqz5/FS6a7duDgOPEeOQOc2iKS/nY6mX6qJUKtLnWzQS+Xj6tXweyj6ZcTAK2Qecetnvi9nCLA=="],
164
+ "@types/node": ["@types/node@25.9.8", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-VfMrScDmMhUJQmd5hArdQnFvK0OIeD36uN2Va1FcpYaLB/BgkgM8Ulc50XtYISPMz7APJ30+N0T5EM0jlcdfRw=="],
156
165
 
157
166
  "@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="],
158
167
 
@@ -242,7 +251,7 @@
242
251
 
243
252
  "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
244
253
 
245
- "openai": ["openai@6.40.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"] }, "sha512-MWtTjd/gQt4jpbji61NTgFWJLoY/PdRJ6wG9/ZDRMYNMlBKrCrSlkLI+KgHP1vR1qT6LKSAyAqIxno6lcK9JiA=="],
254
+ "openai": ["openai@7.19.0", "", { "peerDependencies": { "@aws-sdk/credential-provider-node": ">=3.972.0 <4", "@smithy/hash-node": ">=4.3.0 <5", "@smithy/signature-v4": ">=5.4.0 <6", "undici": ">=5 <9", "ws": "^8.21.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["@aws-sdk/credential-provider-node", "@smithy/hash-node", "@smithy/signature-v4", "undici", "ws", "zod"] }, "sha512-MX2s3u2L5racTO0CC/SWpCOasJQBCJrqLKXK+l82cAhdeF8mPMBEe/gxMm0ZFa2xpKpOFLRjxv5afYEZbBXmbQ=="],
246
255
 
247
256
  "p-retry": ["p-retry@4.6.2", "", { "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" } }, "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ=="],
248
257
 
@@ -256,6 +265,8 @@
256
265
 
257
266
  "proxy-agent-negotiate": ["proxy-agent-negotiate@1.1.0", "", { "peerDependencies": { "kerberos": "^2.0.0" }, "optionalPeers": ["kerberos"] }, "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ=="],
258
267
 
268
+ "quickjs-wasi": ["quickjs-wasi@3.6.2", "", {}, "sha512-FCqGtGOrMgzUiIrMNMA2YnsOxCNwo31dzqXvclXUC6xeT35NJLKXQJsvbeCTjvoFAwZgEAPg8U6+KAPDGXn8Mg=="],
269
+
259
270
  "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
260
271
 
261
272
  "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
@@ -276,9 +287,11 @@
276
287
 
277
288
  "typebox": ["typebox@1.3.27", "", {}, "sha512-zu+jc1pcy4UiNThxikUr36f0Rybk9PEeCg/NE6adeWr/SKsdNO4EzZHYRDlv2YCVAfj3Odq3dESSo/jNyoBXzA=="],
278
289
 
290
+ "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
291
+
279
292
  "undici": ["undici@8.10.2", "", {}, "sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ=="],
280
293
 
281
- "undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="],
294
+ "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="],
282
295
 
283
296
  "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
284
297
 
@@ -294,6 +307,10 @@
294
307
 
295
308
  "p-retry/retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="],
296
309
 
310
+ "protobufjs/@types/node": ["@types/node@26.4.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-k97ENvZWtvA6yqz5/FS6a7duDgOPEeOQOc2iKS/nY6mX6qJUKtLnWzQS+Xj6tXweyj6ZcTAK2Qecetnvi9nCLA=="],
311
+
297
312
  "gaxios/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
313
+
314
+ "protobufjs/@types/node/undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="],
298
315
  }
299
316
  }
package/models.json CHANGED
@@ -4,15 +4,16 @@
4
4
  "name": "DeepSeek V4.1 Flash",
5
5
  "reasoning": true,
6
6
  "input": [
7
- "text"
7
+ "text",
8
+ "image"
8
9
  ],
9
10
  "cost": {
10
- "input": 0.3102,
11
- "output": 1.2408,
12
- "cacheRead": 0.1551,
11
+ "input": 0.33,
12
+ "output": 1.32,
13
+ "cacheRead": 0.165,
13
14
  "cacheWrite": 0
14
15
  },
15
- "contextWindow": 262124,
16
+ "contextWindow": 1048320,
16
17
  "maxTokens": 131072,
17
18
  "compat": {
18
19
  "supportsStore": false,
@@ -120,9 +121,9 @@
120
121
  "image"
121
122
  ],
122
123
  "cost": {
123
- "input": 3.3,
124
- "output": 16.5,
125
- "cacheRead": 1.65,
124
+ "input": 3.06,
125
+ "output": 15.3,
126
+ "cacheRead": 1.53,
126
127
  "cacheWrite": 0
127
128
  },
128
129
  "contextWindow": 1048576,
@@ -142,9 +143,9 @@
142
143
  "text"
143
144
  ],
144
145
  "cost": {
145
- "input": 0.1976,
146
- "output": 0.6352,
147
- "cacheRead": 0.0988,
146
+ "input": 0.2018,
147
+ "output": 0.6436,
148
+ "cacheRead": 0.1009,
148
149
  "cacheWrite": 0
149
150
  },
150
151
  "contextWindow": 1048576,
@@ -164,9 +165,9 @@
164
165
  "text"
165
166
  ],
166
167
  "cost": {
167
- "input": 1.878,
168
- "output": 6.088,
169
- "cacheRead": 0.939,
168
+ "input": 1.85,
169
+ "output": 6,
170
+ "cacheRead": 0.925,
170
171
  "cacheWrite": 0
171
172
  },
172
173
  "contextWindow": 262144,
@@ -187,9 +188,9 @@
187
188
  "image"
188
189
  ],
189
190
  "cost": {
190
- "input": 1.072,
191
- "output": 4.65,
192
- "cacheRead": 0.536,
191
+ "input": 0.94574,
192
+ "output": 4.26,
193
+ "cacheRead": 0.47287,
193
194
  "cacheWrite": 0
194
195
  },
195
196
  "contextWindow": 262144,
@@ -211,7 +212,7 @@
211
212
  ],
212
213
  "cost": {
213
214
  "input": 0.1672,
214
- "output": 1.12675,
215
+ "output": 1.10675,
215
216
  "cacheRead": 0.0836,
216
217
  "cacheWrite": 0
217
218
  },
@@ -255,9 +256,9 @@
255
256
  "text"
256
257
  ],
257
258
  "cost": {
258
- "input": 0.474,
259
- "output": 1.776,
260
- "cacheRead": 0.237,
259
+ "input": 0.402,
260
+ "output": 1.488,
261
+ "cacheRead": 0.201,
261
262
  "cacheWrite": 0
262
263
  },
263
264
  "contextWindow": 262100,
@@ -299,9 +300,9 @@
299
300
  "text"
300
301
  ],
301
302
  "cost": {
302
- "input": 1.736,
303
- "output": 3.474,
304
- "cacheRead": 0.868,
303
+ "input": 1.542,
304
+ "output": 3.086,
305
+ "cacheRead": 0.771,
305
306
  "cacheWrite": 0
306
307
  },
307
308
  "contextWindow": 1048576,
@@ -322,9 +323,9 @@
322
323
  "image"
323
324
  ],
324
325
  "cost": {
325
- "input": 0.8297,
326
- "output": 3.604,
327
- "cacheRead": 0.41485,
326
+ "input": 0.6723,
327
+ "output": 3.16592,
328
+ "cacheRead": 0.33615,
328
329
  "cacheWrite": 0
329
330
  },
330
331
  "contextWindow": 262142,
@@ -366,9 +367,9 @@
366
367
  "text"
367
368
  ],
368
369
  "cost": {
369
- "input": 0.347,
370
- "output": 1.366,
371
- "cacheRead": 0.1735,
370
+ "input": 0.354,
371
+ "output": 1.416,
372
+ "cacheRead": 0.177,
372
373
  "cacheWrite": 0
373
374
  },
374
375
  "contextWindow": 196600,
@@ -500,9 +501,9 @@
500
501
  "image"
501
502
  ],
502
503
  "cost": {
503
- "input": 0.0875,
504
- "output": 0.315,
505
- "cacheRead": 0.04375,
504
+ "input": 0.0833,
505
+ "output": 0.301,
506
+ "cacheRead": 0.04165,
506
507
  "cacheWrite": 0
507
508
  },
508
509
  "contextWindow": 262142,
@@ -587,9 +588,9 @@
587
588
  "text"
588
589
  ],
589
590
  "cost": {
590
- "input": 0.178,
591
- "output": 0.68,
592
- "cacheRead": 0.089,
591
+ "input": 0.188,
592
+ "output": 0.73,
593
+ "cacheRead": 0.094,
593
594
  "cacheWrite": 0.04
594
595
  },
595
596
  "contextWindow": 131072,
@@ -738,9 +739,9 @@
738
739
  "text"
739
740
  ],
740
741
  "cost": {
741
- "input": 0.057,
742
- "output": 0.198,
743
- "cacheRead": 0.0285,
742
+ "input": 0.055,
743
+ "output": 0.194,
744
+ "cacheRead": 0.0275,
744
745
  "cacheWrite": 0.03
745
746
  },
746
747
  "contextWindow": 64000,
@@ -781,9 +782,9 @@
781
782
  "text"
782
783
  ],
783
784
  "cost": {
784
- "input": 1.24,
785
- "output": 3.5,
786
- "cacheRead": 0.14,
785
+ "input": 1.13298,
786
+ "output": 4.008,
787
+ "cacheRead": 0.56649,
787
788
  "cacheWrite": 0
788
789
  },
789
790
  "contextWindow": 1048576,
@@ -826,9 +827,9 @@
826
827
  "text"
827
828
  ],
828
829
  "cost": {
829
- "input": 0.06475,
830
- "output": 0.195,
831
- "cacheRead": 0.032375,
830
+ "input": 0.05975,
831
+ "output": 0.185,
832
+ "cacheRead": 0.029875,
832
833
  "cacheWrite": 0
833
834
  },
834
835
  "contextWindow": 262144,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-io-provider",
3
- "version": "1.1.44",
3
+ "version": "1.1.46",
4
4
  "description": "IO Intelligence provider extension for pi - Access DeepSeek, Kimi, GLM, Llama, Qwen, Mistral, and more through the IO Intelligence API",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -27,12 +27,19 @@
27
27
  ]
28
28
  },
29
29
  "devDependencies": {
30
- "@earendil-works/pi-coding-agent": "0.87.0"
30
+ "@earendil-works/pi-coding-agent": "0.99.0",
31
+ "typescript": "6.0.3",
32
+ "@types/node": "^25.9.1"
33
+ },
34
+ "peerDependencies": {
35
+ "@earendil-works/pi-coding-agent": "*"
31
36
  },
32
37
  "scripts": {
33
38
  "clean": "echo 'nothing to clean'",
34
39
  "build": "echo 'nothing to build'",
35
- "check": "echo 'nothing to check'",
36
- "update-models": "node scripts/update-models.js"
40
+ "check": "tsc --noEmit && node scripts/test-pi-compat.mjs",
41
+ "update-models": "node scripts/update-models.js",
42
+ "test:pi": "node scripts/test-pi-compat.mjs",
43
+ "typecheck": "tsc --noEmit"
37
44
  }
38
45
  }
@@ -0,0 +1,76 @@
1
+ import assert from 'node:assert/strict';
2
+ import { mkdtemp, readFile, rm } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { dirname, join, resolve } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+
7
+ // Import Pi only after selecting a disposable agent directory. Never read user auth/cache.
8
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
9
+ const home = await mkdtemp(join(tmpdir(), 'pi-provider-compat-'));
10
+ const previousHome = process.env.PI_CODING_AGENT_DIR;
11
+ const previousFetch = globalThis.fetch;
12
+ process.env.PI_CODING_AGENT_DIR = home;
13
+ globalThis.fetch = async () => new Response('', { status: 503 });
14
+ let session;
15
+ try {
16
+ const { createAgentSession, DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager, VERSION } = await import('@earendil-works/pi-coding-agent');
17
+ assert.equal(VERSION, '0.99.0', 'run compatibility checks against the pinned host');
18
+ const manifest = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'));
19
+ const hostPackages = ['@earendil-works/pi-ai', '@earendil-works/pi-agent-core', '@earendil-works/pi-coding-agent', '@earendil-works/pi-tui', 'typebox'];
20
+ for (const name of hostPackages) {
21
+ assert.equal(manifest.dependencies?.[name], undefined, `${name} must not be installed as a runtime dependency`);
22
+ if (manifest.peerDependencies?.[name] !== undefined) assert.equal(manifest.peerDependencies[name], '*');
23
+ }
24
+ const settingsManager = SettingsManager.inMemory({ compaction: { enabled: false }, retry: { enabled: false } });
25
+ const resourceLoader = new DefaultResourceLoader({
26
+ cwd: home, agentDir: home, settingsManager,
27
+ additionalExtensionPaths: [join(root, 'index.ts')],
28
+ noSkills: true, noPromptTemplates: true, noThemes: true, noContextFiles: true,
29
+ });
30
+ await resourceLoader.reload();
31
+ const loaded = resourceLoader.getExtensions();
32
+ assert.deepEqual(loaded.errors, [], 'extension must load in the real Pi loader');
33
+ assert.deepEqual(loaded.warnings ?? [], [], 'extension must not produce host-dependency warnings');
34
+ assert.equal(loaded.extensions.length, 1, 'load only this provider');
35
+ const registrations = [...loaded.runtime.pendingProviderRegistrations];
36
+ assert.ok(registrations.length > 0, 'factory must register a provider before session startup');
37
+ const modelRuntime = await ModelRuntime.create({ authPath: join(home, 'auth.json'), modelsPath: null, modelsStorePath: join(home, 'models-cache'), allowModelNetwork: false });
38
+ ({ session } = await createAgentSession({ cwd: home, agentDir: home, resourceLoader, modelRuntime, settingsManager, sessionManager: SessionManager.inMemory(home), noTools: true }));
39
+ const errors = [];
40
+ await session.bindExtensions({ mode: 'print', onError: (error) => errors.push(error) });
41
+ await new Promise((done) => setImmediate(done));
42
+ let modelCount = 0;
43
+ for (const { name, config } of registrations) {
44
+ const models = modelRuntime.getAllModels(name);
45
+ assert.equal(models.length, config.models.length, `${name}: all configured models must survive host registration`);
46
+ assert.ok(models.length > 0, `${name}: nonempty catalog`);
47
+ assert.equal(new Set(models.map((model) => model.id)).size, models.length, `${name}: unique model IDs`);
48
+ for (const model of models) {
49
+ assert.equal(model.provider, name);
50
+ assert.ok(model.api && model.baseUrl && model.id && model.name);
51
+ if (model.type === 'image') assert.ok(model.output.includes('image'));
52
+ else assert.ok(model.contextWindow > 0, `${name}/${model.id}: positive context limit`);
53
+ if (model.type === 'chat') assert.ok(model.maxTokens > 0, `${name}/${model.id}: positive output limit`);
54
+ assert.ok(model.input.includes('text'));
55
+ for (const cost of Object.values(model.cost)) assert.ok(Number.isFinite(cost) && cost >= 0);
56
+ }
57
+ if (name === 'opencode') {
58
+ const { getAllBuiltinModels } = await import('@earendil-works/pi-ai/providers/all');
59
+ for (const native of getAllBuiltinModels(name).filter(model => model.type !== 'chat')) {
60
+ assert.ok(models.some(model => model.id === native.id && model.type === native.type), `${native.id}: preserve native operation`);
61
+ assert.ok(!modelRuntime.getModels(name).some(model => model.id === native.id), `${native.id}: must not become a chat model`);
62
+ }
63
+ assert.equal(typeof modelRuntime.getProvider(name).classify, 'function');
64
+ }
65
+ modelCount += models.length;
66
+ }
67
+ await session.extensionRunner.emit({ type: 'session_shutdown' });
68
+ assert.deepEqual(errors, [], 'startup and shutdown handlers must work with Pi 0.99 contexts');
69
+ console.log(`${manifest.name}: Pi ${VERSION} loader, manifest, session startup, and ${modelCount} models OK`);
70
+ } finally {
71
+ session?.dispose();
72
+ globalThis.fetch = previousFetch;
73
+ if (previousHome === undefined) delete process.env.PI_CODING_AGENT_DIR;
74
+ else process.env.PI_CODING_AGENT_DIR = previousHome;
75
+ await rm(home, { recursive: true, force: true });
76
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "esModuleInterop": true,
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "skipLibCheck": true,
10
+ "resolveJsonModule": true,
11
+ "types": ["node"]
12
+ },
13
+ "files": ["index.ts"]
14
+ }