pi-freeflow 1.29.0 → 1.30.0
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 +10 -0
- package/README.md +8 -8
- package/package.json +1 -1
- package/src/catalog.ts +7 -0
- package/src/client.ts +925 -916
- package/src/commands.ts +32 -3
- package/src/config.ts +466 -463
- package/src/index.ts +1 -1
- package/src/models.ts +44 -36
- package/src/opencode-fingerprint.ts +66 -24
- package/src/proxy.ts +82 -6
- package/src/relay-state.ts +119 -18
- package/src/relay.ts +163 -30
- package/src/responses.ts +31 -0
- package/src/stream-pipe.ts +75 -9
- package/src/tool-translation.ts +28 -21
- package/src/types.ts +1 -1
- package/src/upstream-health.ts +9 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.30.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- **Spread relay mode.** `/freeflow spread` sends each request to a rotating healthy relay instead of always starting at one sticky relay, so parallel sessions and subagents land on different egress IPs rather than crowding a single one. A conversation's reasoning issuer still outranks the rotation, so in-progress chats are never rerouted, and a relay that is cooling down is never preferred. The interactive relay menu and `/freeflow status` show the new mode.
|
|
8
|
+
|
|
9
|
+
**Helper tools the proxy injects for API compatibility can no longer reach your host.** On the messages API path those injected tool calls were passed straight through; they are now stripped on every path, and a host that declares no tools never receives tool calls at all.
|
|
10
|
+
|
|
11
|
+
**Injected file-search helper now matches the shape your host expects**, so a call to it executes instead of being rejected.
|
|
12
|
+
|
|
3
13
|
## 1.29.0
|
|
4
14
|
|
|
5
15
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -16,8 +16,8 @@ Thin by design: a model list, a relay proxy, and a log. The host (`pi-ai`) handl
|
|
|
16
16
|
|
|
17
17
|
| Feature | What it does | Cost |
|
|
18
18
|
| :--- | :--- | :--- |
|
|
19
|
-
| **33 free models** |
|
|
20
|
-
| **Relay pool** | Route requests through your own Cloudflare Workers and Vercel Edge relays.
|
|
19
|
+
| **33 free models** | 11 from OpenCode Zen, 17 from KiloCode Gateway, 5 from Cline, context windows up to 1M. Full list below. | **$0** |
|
|
20
|
+
| **Relay pool** | Route requests through your own Cloudflare Workers and Vercel Edge relays. Traffic spreads across the pool, or stays on one sticky relay. A relay that rate-limits, times out, or drops the connection cools down while healthy ones take its traffic. | **$0** beyond your platforms' free tiers |
|
|
21
21
|
| **Automatic fallback** | When every relay is cooling down, requests go direct to upstream instead of failing. | **$0** |
|
|
22
22
|
| **Short model names** | Every model has a slash-free, colon-free alias, plus an optional `:effort` suffix for thinking depth. You type `freeflow/<name>`. | **$0** |
|
|
23
23
|
| **Shared local proxy** | One daemon on `127.0.0.1:28180` serves every session on the machine, so parallel subagents reuse it instead of opening their own connections. | **$0** |
|
|
@@ -167,7 +167,7 @@ The same command set works identically in OMP and Pi:
|
|
|
167
167
|
/freeflow label <index|url> <name># Assign a friendly label to a relay
|
|
168
168
|
/freeflow remove <index|url|label># Remove a relay from the pool
|
|
169
169
|
/freeflow test <index|url|label> # Probe a relay for reachability and latency
|
|
170
|
-
/freeflow on
|
|
170
|
+
/freeflow on|off|auto|spread # Relay mode (auto = enabled for freeflow, spread = rotate pool)
|
|
171
171
|
/freeflow deploy <platform> # Guided relay deploy: vercel|cloudflare|deno, token in-memory, auto-adds
|
|
172
172
|
/freeflow logs [lines] # Inspect recent proxy logs
|
|
173
173
|
/freeflow trace [req-id] # Tail logs filtered by request correlation ID
|
|
@@ -191,7 +191,7 @@ The same command set works identically in OMP and Pi:
|
|
|
191
191
|
/model → freeflow → pick
|
|
192
192
|
```
|
|
193
193
|
|
|
194
|
-
#### OpenCode Zen (
|
|
194
|
+
#### OpenCode Zen (11 models), Responses and Chat API
|
|
195
195
|
|
|
196
196
|
Good defaults for long coding sessions and agentic work.
|
|
197
197
|
|
|
@@ -204,11 +204,12 @@ Good defaults for long coding sessions and agentic work.
|
|
|
204
204
|
| `nemotron-3.5-lightning-free` | NVIDIA | **1M** (1.000.000) | **262K** (262.144) | `minimal … xhigh` | ❌ |
|
|
205
205
|
| `nemotron-3-ultra-free` | NVIDIA | **1M** (1.000.000) | **128K** (128.000) | `minimal … xhigh` | ❌ |
|
|
206
206
|
| `big-pickle` | Big Pickle | **200K** (200.000) | **32K** (32.000) | `high / max` | ❌ |
|
|
207
|
-
| `ling-3.0-flash-fin-free` | Inclusion AI | **262K** (262.144) | **131K** (131.072) | `minimal … xhigh` | ❌ |
|
|
208
207
|
| `space-bunny-free` | Stealth preview (lab undisclosed) | **1M** (1.048.576) | **512K** (524.288) | `low … max` | ✅ |
|
|
209
208
|
| `longcat-2.5-preview-free` | Meituan LongCat | **1M** (1.000.000) | **131K** (131.072) | `minimal … max` | ✅ |
|
|
209
|
+
| `fledge-alpha-free` | Stealth preview (lab undisclosed) | **1M** (1.048.576) | **131K** (131.072) | `low / high / max` | ✅ |
|
|
210
|
+
| `ling-3.1-flash-free` | Inclusion AI | **262K** (262.144) | **32K** (32.768) | `minimal … max` | ❌ |
|
|
210
211
|
|
|
211
|
-
#### KiloCode Gateway (
|
|
212
|
+
#### KiloCode Gateway (17 models), OpenRouter compatible
|
|
212
213
|
|
|
213
214
|
Keyless access. Short aliases work for every row (the full ID is in parentheses).
|
|
214
215
|
|
|
@@ -226,7 +227,6 @@ Keyless access. Short aliases work for every row (the full ID is in parentheses)
|
|
|
226
227
|
| `kilo-auto` (`kilo-auto/free`) | Kilo Gateway Auto | **256K** (256.000) | **10K** (10.000) | `minimal…xhigh`\* | ❌ |
|
|
227
228
|
| `openrouter` (`openrouter/free`) | OpenRouter Free | **200K** (200.000) | **65K** (65.536) | `minimal…xhigh`\* | ✅ |
|
|
228
229
|
| `content-safety` (`nvidia/...:free`) | NVIDIA | **128K** (128.000) | **8K** (8.192) | ❌ *(non-thinking)* | ✅ |
|
|
229
|
-
| `ling-3.0-flash-fin` (`inclusionai/ling-3.0-flash-fin:free`) | Inclusion AI | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\* | ❌ |
|
|
230
230
|
| `ling-3.0-flash-sante` (`inclusionai/ling-3.0-flash-sante:free`) | Inclusion AI | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\* | ❌ |
|
|
231
231
|
| `step-3.7-flash` (`stepfun/...:free`) | StepFun | **262K** (262.144) | **262K** (262.144) | `minimal…xhigh`\* | ✅ |
|
|
232
232
|
| `space-bunny-alpha` (`stealth/...`) | Stealth preview (lab undisclosed) | **1M** (1.000.000) | **512K** (524.288) | `minimal…xhigh`\* | ✅ |
|
|
@@ -347,7 +347,7 @@ src/
|
|
|
347
347
|
├── models.ts # 33-model catalog definitions
|
|
348
348
|
├── catalog.ts # model catalog cache (24h disk)
|
|
349
349
|
├── proxy.ts # local proxy server (127.0.0.1:28180)
|
|
350
|
-
├── relay.ts # relay
|
|
350
|
+
├── relay.ts # relay fetch, rolling on retryable failures
|
|
351
351
|
├── relay-state.ts # relay pool state, health tracking
|
|
352
352
|
├── stream-pipe.ts # SSE stream piping and truncation resilience
|
|
353
353
|
├── commands.ts # /freeflow CLI subcommands
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-freeflow",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.30.0",
|
|
5
5
|
"description": "Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization",
|
|
6
6
|
"main": "extensions/index.ts",
|
|
7
7
|
"types": "src/index.ts",
|
package/src/catalog.ts
CHANGED
|
@@ -37,6 +37,11 @@ import type {
|
|
|
37
37
|
* - z-ai/glm-5.2:free: gone 2026-09-28 — :free ID absent (keyless 404); only the paid
|
|
38
38
|
* z-ai/glm-5.2 remains (isFree:false, keyless 401 PAID_MODEL_AUTH_REQUIRED).
|
|
39
39
|
* - inclusionai/ling-3.0-flash-vl:free: gone from the live Kilo free list — only the paid counterpart remains.
|
|
40
|
+
* - ling-3.0-flash-fin-free: unserved upstream (2026-10-01) — persistent keyless 400
|
|
41
|
+
* "Error from provider (Console): Upstream request failed: Endpoint is unavailable.",
|
|
42
|
+
* reproduced across separate runs on different days while every other Zen model answers.
|
|
43
|
+
* - inclusionai/ling-3.0-flash-fin:free: gone from Kilo (2026-10-01) — keyless chat 404
|
|
44
|
+
* "The requested model ... does not exist".
|
|
40
45
|
*/
|
|
41
46
|
export const DEAD_MODEL_IDS = new Set<string>([
|
|
42
47
|
"jev-1.13-free",
|
|
@@ -54,6 +59,8 @@ export const DEAD_MODEL_IDS = new Set<string>([
|
|
|
54
59
|
"nex-agi/nex-n2.5-mini:free",
|
|
55
60
|
"z-ai/glm-5.2:free",
|
|
56
61
|
"inclusionai/ling-3.0-flash-vl:free",
|
|
62
|
+
"ling-3.0-flash-fin-free",
|
|
63
|
+
"inclusionai/ling-3.0-flash-fin:free",
|
|
57
64
|
]);
|
|
58
65
|
/**
|
|
59
66
|
* Free-tier allowlist for anything entering the picker via network or stale disk.
|