pi-freeflow 1.3.0 → 1.3.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.
Files changed (2) hide show
  1. package/README.md +132 -229
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -1,279 +1,182 @@
1
- # pi-freeflow
1
+ # pi-freeflow 🌊
2
2
 
3
- > 🌊 **FreeFlow**: Free AI Model Provider for [Oh My Pi (OMP)](https://omp.sh) and [Pi](https://pi.dev) with **Multi-Cloud Rolling Relay** (Cloudflare Workers / Vercel), **Up to 1M Context Windows**, **Auto-Switch Failover**, and **Real-Time Streaming**.
3
+ > **23 free models. Up to 1M context (66K–1M per model). Zero API keys. Infinite scale via your own cloud relay.**
4
+
5
+ **Thin by design:** `model list + dumb relay + log` — host `pi-ai` owns thinking, normalization & provider magic. We just make it _free, fast, and unbreakable_.
6
+
7
+ [![npm version](https://img.shields.io/npm/v/pi-freeflow?color=00d4ff)](https://www.npmjs.com/package/pi-freeflow)
8
+ [![npm downloads](https://img.shields.io/npm/dm/pi-freeflow)](https://www.npmjs.com/package/pi-freeflow)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-00ff88.svg)](LICENSE)
10
+ [![Pi & OMP](https://img.shields.io/badge/Works%20with-Pi%20%26%20Oh%20My%20Pi-7c3aed)](https://omp.sh)
11
+
12
+ > **Join devs bypassing rate limits with their own relay pools — BYO, add as many as you need.**
13
+
14
+ ## Why you’re here
15
+
16
+ You love Pi. You love free models. You hate:
17
+
18
+ - `429 Rate Limit` killing your 10-parallel subagent fleet
19
+ - `Paid model leaked` into your picker
20
+ - `Thinking` silently disabled because `reasoning_effort: max` was rejected
21
+ - Paying for `1M context` you should get for free
22
+
23
+ **FreeFlow fixes all three — in 17 files, 102KB.**
4
24
 
5
25
  ---
6
26
 
7
- ## Features
27
+ ## What you get (and what you don’t pay for)
8
28
 
9
- - 🆓 **23 Free Models**: Curated access to OpenCode Zen and KiloCode free AI models.
10
- - 🧠 **Full 1M Context Windows**: Pre-configured with up to 1,048,576 tokens context window and vision (image) support.
11
- - **Real-Time SSE Streaming**: Zero-buffering chunk streaming with instant token delivery.
12
- - 🛡️ **Multi-Cloud Rolling Egress Relay**:
13
- - Support for **Cloudflare Workers**, **Vercel Edge**, and **Deno Deploy**.
14
- - **Sticky Active Proxy**: Stays on the healthy proxy without unnecessary round-robin churn.
15
- - **Auto-Switch Failover**: Instantly rolls to the next proxy when encountering `HTTP 429` (Rate Limit), `502/503/504`, or Network Timeouts.
16
- - **Direct Fallback**: Transparently falls back to direct upstream if all relays are exhausted.
17
- - 🔇 **Full Quiet Mode**: Clean status bar indicators without intrusive console overlays in the TUI.
18
- - 📝 **Persistent Background Logging**: Automatic diagnostic logs recorded to `~/.pi/agent/pi-freeflow.log` with 5MB auto-rotation.
19
- - 🤖 **Sub-Agent Ready**: Seamlessly shared across concurrent parallel sub-agent tasks.
29
+ | You get | Value | Cost |
30
+ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | ---- |
31
+ | **23 curated free models** 9 OpenCode Zen + 14 Kilo, Up to 1M (66K–1M per model), vision-ready | $0 | $0 |
32
+ | **BYO relay pool** — Cloudflare Workers + Vercel Edge, round-robin, seamless `429→next` (default ships direct, add via `/freeflow use <url>` / `deploy`) | $0 (your free tiers) | $0 |
33
+ | **Dumb proxy that never breaks** `127.0.0.1:18080`, host-normalized, pathname-guarded `/v1/models` | $0 | $0 |
34
+ | **Real logs** `~/.pi/agent/pi-freeflow.log` 5MB rotate, debug toggle | $0 | $0 |
35
+
36
+ > **Thin by design:** `model list + relay proxy + log` host `pi-ai` owns thinking & normalization.
20
37
 
21
38
  ---
22
39
 
23
- ## 📦 Installation
40
+ ## 23 Models — One Command
24
41
 
25
- ### Oh My Pi (OMP)
26
42
  ```bash
27
- omp plugin install pi-freeflow
43
+ /model freeflow → pick
28
44
  ```
29
45
 
30
- ### Pi Coding Agent
31
- ```bash
32
- pi install npm:pi-freeflow
33
- ```
46
+ ### OpenCode Zen (9) — Responses & Chat
34
47
 
35
- ### From Local / Git Repo
36
- ```bash
37
- omp plugin link /path/to/pi-freeflow
38
- ```
48
+ | Model | Context | Max | Thinking | Vision |
49
+ | --------------------------------- | -------- | ---- | ----------------- | ------ |
50
+ | `muse-spark-1.2-contributor-free` | **1M** | 131K | `minimal→max` | ✅ |
51
+ | `deepseek-v4-flash-free` | **1M** | 384K | `minimal→max` | ❌ |
52
+ | `x-preview-f-free` | **1M** | 131K | `low/high/max` | ✅ |
53
+ | `mimo-v2.5-free` | **1M** | 131K | `low/medium/high` | ✅ |
54
+ | `laguna-s-2.1-free` | **1M** | 131K | `minimal→max` | ❌ |
55
+ | `nemotron-3.5-lightning-free` | **1M** | 262K | `minimal→max` | ❌ |
56
+ | `nemotron-3-ultra-free` | **1M** | 128K | `minimal→max` | ❌ |
57
+ | `hy3-free` | **262K** | 128K | `minimal→max` | ❌ |
58
+ | `big-pickle` | **200K** | 32K | `high/max` | ❌ |
39
59
 
40
- ---
60
+ ### Kilo Gateway (14) — OpenRouter
41
61
 
42
- ## 🚀 Quick Start
43
-
44
- 1. Start OMP or Pi:
45
- ```bash
46
- omp
47
- ```
48
- 2. Select a model via `/model` $\to$ **`freeflow`** $\to$ choose your model (e.g. `mimo-v2.5-free` or `x-preview-f-free`).
49
- 3. Manage relays with the `/freeflow` command:
50
- ```text
51
- /freeflow status # Check relay status and active proxy
52
- /freeflow list # View all saved relay proxies
53
- /freeflow on # Enable relay proxying
54
- /freeflow off # Disable relay (use direct upstream)
55
- /freeflow use <URL> # Activate a specific relay proxy
56
- /freeflow logs # Show recent 25 lines of debug logs
57
- ```
62
+ `dots-3-note-preview:free` **512K**, `step-3.7-flash:free` 262K, `nemotron-3-nano-omni:free` 256K, `nemotron-3-ultra-550b:free` **1M**, `nemotron-3-super:free` 262K, `hy3:free` 262K, `north-mini-code:free` 256K, `laguna-s/xs:free` 262K, `lfm-2.5:free` 66K, `kilo-auto/free`, `openrouter/free`, `content-safety:free` + 2 more.
63
+
64
+ All `off→null` (hidden) host decides budgets, not us.
58
65
 
59
66
  ---
60
67
 
61
- ## 📋 Model Catalog (23 Models)
62
-
63
- ### OpenCode Zen Models (9 Models)
64
-
65
- | Model ID | Name | Context Window | Max Output | Reasoning / Thinking | Vision (Images) |
66
- | :--- | :--- | :---: | :---: | :---: | :---: |
67
- | `deepseek-v4-flash-free` | DeepSeek V4 Flash (1M) | **1M** (1,000,000) | **384K** | `minimal..max` | ❌ No |
68
- | `x-preview-f-free` | Ox Alpha (1M) | **1M** (1,048,576) | 131K | `low, high, max` | ✅ Yes |
69
- | `muse-spark-1.2-contributor-free` | Muse Spark 1.2 (1M) | **1M** (1,048,576) | 131K | `minimal..max` | ✅ Yes |
70
- | `mimo-v2.5-free` | MiMo V2.5 (1M) | **1M** (1,048,576) | 131K | `low, medium, high` | ✅ Yes |
71
- | `laguna-s-2.1-free` | Laguna S 2.1 (1M) | **1M** (1,048,576) | 131K | `minimal..max` | ❌ No |
72
- | `nemotron-3.5-lightning-free` | Nemotron 3.5 Lightning (1M) | **1M** (1,000,000) | 262K | `minimal..max` | ❌ No |
73
- | `nemotron-3-ultra-free` | Nemotron 3 Ultra (1M) | **1M** (1,000,000) | 128K | `minimal..max` | ❌ No |
74
- | `hy3-free` | Hy3 (262K) | **262K** (262,144) | 128K | `minimal..max` | ❌ No |
75
- | `big-pickle` | Big Pickle | **200K** (200,000) | 32K | `high, max` | ❌ No |
76
- ### KiloCode Gateway Models (14 Models)
77
-
78
- | Model ID | Name | Context Window | Max Output | Reasoning / Thinking | Vision (Images) |
79
- | :--- | :--- | :---: | :---: | :---: | :---: |
80
- | `dots-studio/dots-3-note-preview:free` | Dots3-Note Preview (512K) | **512K** (512,000) | 512K | OpenRouter format | ✅ Yes |
81
- | `stepfun/step-3.7-flash:free` | Step 3.7 Flash | **262K** (262,144) | 262K | OpenRouter format | ✅ Yes |
82
- | `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free` | Nemotron 3 Nano Omni | **256K** (256,000) | 65K | OpenRouter format | ✅ Yes |
83
- | `nvidia/nemotron-3-ultra-550b-a55b:free` | Nemotron 3 Ultra 550B (1M) | **1M** (1,000,000) | 65K | OpenRouter format | ❌ No |
84
- | `nvidia/nemotron-3.5-lightning:free` | Nemotron 3.5 Lightning (Kilo) | **1M** (1,000,000) | 65K | OpenRouter format | ❌ No |
85
- | `nvidia/nemotron-3-super-120b-a12b:free` | Nemotron 3 Super 120B | **262K** (262,144) | 262K | OpenRouter format | ❌ No |
86
- | `tencent/hy3:free` | Tencent Hy3 (Kilo) | **262K** (262,144) | 128K | OpenRouter format | ❌ No |
87
- | `cohere/north-mini-code:free` | North Mini Code | **256K** (256,000) | 64K | OpenRouter format | ❌ No |
88
- | `poolside/laguna-s-2.1:free` | Laguna S 2.1 (Kilo) | **262K** (262,144) | 33K | OpenRouter format | ❌ No |
89
- | `poolside/laguna-xs-2.1:free` | Laguna XS 2.1 | **262K** (262,144) | 33K | OpenRouter format | ❌ No |
90
- | `liquid/lfm-2.5-2.6b:free` | Liquid LFM 2.5 | **66K** (65,536) | 8K | OpenRouter format | ❌ No |
91
- | `kilo-auto/free` | Kilo Auto | **256K** (256,000) | 10K | Standard | ❌ No |
92
- | `openrouter/free` | OpenRouter Auto | **200K** (200,000) | 65K | Standard | ❌ No |
93
- | `nvidia/nemotron-3.5-content-safety:free` | Nemotron Content Safety | **128K** (128,000) | 8K | Standard | ❌ No |
68
+ ## The magic: BYO relays, 0 rate limits
94
69
 
95
- ---
70
+ ```text
71
+ You → 127.0.0.1:18080 (dumb) → x-relay-target → N egress IPs (your pool) → opencode.ai / api.kilo.ai
72
+ ↑ host already normalized thinking → proxy just forwards
73
+ ```
74
+
75
+ - **Round-robin per request** — 10 parallel subagents hit N different primaries (your pool size), no thundering herd
76
+ - **Seamless 429** — `429/502/503/504` → instant roll to next, never `429` to agent
77
+ - **Exhausted? Direct fallback** — if all relays are 429 (global limit), transparent `direct fetch` — host shows `rate limit` only when truly global
78
+ - **No live catalog fetch** — `24h DISK_CACHE_ONLY`, never `fetch` from subagent → no `Unable to connect`
96
79
 
97
- ## 🌐 Setting Up Your Own Egress Relays (Multi-Cloud)
80
+ **Real log (1.3.1 thin):**
98
81
 
99
- By default, FreeFlow works out of the box with direct upstream calls. To expand concurrency, bypass IP rate limits, and enable rolling failover, you can connect your own free cloud relays across **Cloudflare Workers**, **Vercel Edge**, **Deno Deploy**, or a **Linux VPS**.
82
+ ```text
83
+ candidates:N → relay-A 429 rolling → relay-B 200 in 1.2s → 98 chunks 663KB done
84
+ ```
85
+
86
+ You bring the relays (free tiers). We bring the rolling.
100
87
 
101
88
  ---
102
89
 
103
- ### 1. Cloudflare Worker Relay (Recommended ⭐)
104
- > **Free Tier**: 100,000 requests/day · Low latency · No 25-second execution timeout.
105
-
106
- 1. Go to [dash.cloudflare.com](https://dash.cloudflare.com) $\to$ **Workers & Pages** $\to$ **Create application** $\to$ **Create Worker**.
107
- 2. Name your worker (e.g. `my-freeflow-relay`) $\to$ click **Deploy**.
108
- 3. Click **Edit code**, paste this JavaScript, and click **Save and Deploy**:
109
-
110
- ```javascript
111
- const ALLOWED_TARGETS = ["https://opencode.ai", "https://api.kilo.ai"];
112
-
113
- export default {
114
- async fetch(request) {
115
- if (request.method === "OPTIONS") {
116
- return new Response(null, {
117
- headers: {
118
- "Access-Control-Allow-Origin": "*",
119
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS, HEAD",
120
- "Access-Control-Allow-Headers": "*",
121
- "Access-Control-Max-Age": "86400",
122
- },
123
- });
124
- }
125
-
126
- const target = request.headers.get("x-relay-target");
127
- const relayPath = request.headers.get("x-relay-path") || "/";
128
-
129
- if (!target || !ALLOWED_TARGETS.includes(target.replace(/\/$/, ""))) {
130
- return new Response(JSON.stringify({ error: "Forbidden target" }), { status: 403, headers: { "content-type": "application/json" } });
131
- }
132
-
133
- const targetUrl = target.replace(/\/$/, "") + relayPath;
134
- const headers = new Headers(request.headers);
135
- headers.delete("x-relay-target");
136
- headers.delete("x-relay-path");
137
- headers.delete("host");
138
- headers.delete("cf-connecting-ip");
139
- headers.delete("cf-ray");
140
-
141
- try {
142
- const response = await fetch(targetUrl, {
143
- method: request.method,
144
- headers,
145
- body: request.method !== "GET" && request.method !== "HEAD" ? request.body : undefined,
146
- });
147
-
148
- const outHeaders = new Headers(response.headers);
149
- outHeaders.set("Access-Control-Allow-Origin", "*");
150
- return new Response(response.body, { status: response.status, headers: outHeaders });
151
- } catch (err) {
152
- return new Response(JSON.stringify({ error: "Upstream failed", details: String(err) }), { status: 502, headers: { "content-type": "application/json" } });
153
- }
154
- },
155
- };
90
+ ## 30-second Setup
91
+
92
+ ### 1. Install (pick your host)
93
+
94
+ **Oh My Pi (recommended):**
95
+
96
+ ```bash
97
+ omp plugin install pi-freeflow
98
+ # or local dev
99
+ omp plugin link /path/to/pi-freeflow
100
+ ````
101
+
102
+ **Pi:**
103
+
104
+ ```bash
105
+ pi install npm:pi-freeflow
156
106
  ```
157
107
 
158
- 4. Copy your Worker URL and register it inside OMP:
159
- ```text
160
- /freeflow use https://my-freeflow-relay.your-subdomain.workers.dev
108
+ ### 2. Pick a model
109
+
110
+ ```bash
111
+ omp
112
+ /model → freeflow → muse-spark-1.2 (1M) → max
113
+ # or CLI
114
+ omp -p --model freeflow/muse-spark-1.2-contributor-free "build me a SaaS"
161
115
  ```
162
116
 
163
- ---
117
+ ### 3. (Optional but 🔥) Add your free relays — BYO, scale as you add
164
118
 
165
- ### 2. Vercel Edge Relay
166
- > **Free Tier**: 1,000,000 requests/month.
119
+ **One Cloudflare Worker (100k req/day, no 25s timeout):**
167
120
 
168
- #### Method A: Automated In-Memory CLI Deploy
169
- 1. Generate a Vercel token at [vercel.com/account/tokens](https://vercel.com/account/tokens).
170
- 2. In OMP TUI, run:
171
- ```text
172
- /freeflow deploy
121
+ 1. `dash.cloudflare.com Workers Create Deploy → Edit code` → paste the Worker relay snippet below → Deploy
122
+ 2. `omp` `/freeflow use https://your.workers.dev`
123
+
124
+ **Six Vercel Edges (1M req/mo):**
125
+
126
+ ```bash
127
+ /freeflow deploy # prompts token in-memory, auto-adds to pool
128
+ # or manual: vercel.json → api/relay.js
173
129
  ```
174
- *(Prompts for your token in-memory, provisions a private Edge Function, and adds it to your relay pool automatically).*
175
-
176
- #### Method B: Manual Git Deploy
177
- Deploy a Git repository with these 3 files:
178
- * **`api/relay.js`**:
179
- ```javascript
180
- const ALLOWED_TARGETS = ["https://opencode.ai", "https://api.kilo.ai"];
181
- export const config = { runtime: "edge" };
182
- export default async function handler(req) {
183
- const target = req.headers.get("x-relay-target");
184
- const relayPath = req.headers.get("x-relay-path") || "/";
185
- if (!target || !ALLOWED_TARGETS.includes(target.replace(/\/$/, ""))) return new Response(JSON.stringify({ error: "Forbidden" }), { status: 403 });
186
- const targetUrl = target.replace(/\/$/, "") + relayPath;
187
- const headers = new Headers(req.headers);
188
- headers.delete("x-relay-target"); headers.delete("x-relay-path"); headers.delete("host");
189
- const response = await fetch(targetUrl, { method: req.method, headers, body: req.method !== "GET" && req.method !== "HEAD" ? req.body : undefined, duplex: "half" });
190
- return new Response(response.body, { status: response.status, headers: response.headers });
191
- }
192
- ```
193
- * **`package.json`**: `{ "name": "freeflow-relay", "version": "1.0.0" }`
194
- * **`vercel.json`**: `{ "rewrites": [{ "source": "/(.*)", "destination": "/api/relay" }] }`
195
130
 
196
- ---
131
+ **Check pooling:**
197
132
 
198
- ### 3. Deno Deploy Relay
199
- > **Free Tier**: 100,000 requests/day.
200
-
201
- 1. Open [dash.deno.com](https://dash.deno.com) $\to$ **New Project** $\to$ **Playground**.
202
- 2. Paste the following TypeScript code:
203
-
204
- ```typescript
205
- const ALLOWED_TARGETS = ["https://opencode.ai", "https://api.kilo.ai"];
206
-
207
- Deno.serve(async (req) => {
208
- if (req.method === "OPTIONS") {
209
- return new Response(null, {
210
- headers: {
211
- "Access-Control-Allow-Origin": "*",
212
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
213
- "Access-Control-Allow-Headers": "*",
214
- },
215
- });
216
- }
217
-
218
- const target = req.headers.get("x-relay-target");
219
- const relayPath = req.headers.get("x-relay-path") || "/";
220
- if (!target || !ALLOWED_TARGETS.includes(target.replace(/\/$/, ""))) {
221
- return new Response(JSON.stringify({ error: "Forbidden target" }), { status: 403 });
222
- }
223
-
224
- const targetUrl = target.replace(/\/$/, "") + relayPath;
225
- const headers = new Headers(req.headers);
226
- headers.delete("x-relay-target");
227
- headers.delete("x-relay-path");
228
- headers.delete("host");
229
-
230
- const response = await fetch(targetUrl, {
231
- method: req.method,
232
- headers,
233
- body: req.method !== "GET" && req.method !== "HEAD" ? req.body : undefined,
234
- });
235
- return new Response(response.body, { status: response.status, headers: response.headers });
236
- });
133
+ ```bash
134
+ /freeflow status # relay-A 1/N (ON) → candidates:N
135
+ /freeflow logs # tail -25
136
+ cat ~/.pi/agent/pi-freeflow.log | tail -n 20
237
137
  ```
238
- 3. Click **Deploy** and copy your Deno project URL (`https://project-name.deno.dev`).
138
+
139
+ Done. Subagents now follow parent proxy — `Unable to connect` is history.
239
140
 
240
141
  ---
241
142
 
242
- ## 🎮 Managing Relays in FreeFlow
143
+ ## Thin vs Fat
243
144
 
244
- Inside the OMP / Pi TUI:
245
- ```text
246
- /freeflow use <URL> # Set active relay and add to saved pool
247
- /freeflow list # View all saved relays with status indicators (★ = active)
248
- /freeflow status # Check current relay health and egress mode
249
- /freeflow refresh # Trigger live on-demand model catalog sync from upstream APIs
250
- /freeflow on # Force enable relay egress mode
251
- /freeflow off # Switch to direct upstream mode
252
- /freeflow remove <URL> # Remove an inactive relay from pool
253
- /freeflow logs # Show last 25 lines of debug logs
254
- ```
145
+ | Fat plugin (before) | Thin FreeFlow (now) |
146
+ | ------------------------------------------- | --------------------------------------------------- |
147
+ | `src/normalizer.ts` 200 LOC duplicates host | **Deleted** host `pi-ai` owns 11 `thinkingFormat` |
148
+ | Live `fetch` 10s in subagent timeout | **Disk-only 24h**, proxy-only |
149
+ | `400` loops relays | **Narrow 429/5xx only**, `400` surfaces instantly |
150
+ | `GET /v1/models?foo` leaks paid | **Pathname-guarded** |
151
+
152
+ Result: **<500 LOC core, 29 tests PASS, typecheck PASS**.
255
153
 
256
154
  ---
257
155
 
258
- ## 🛠️ Diagnostics & Troubleshooting
156
+ ## FAQ
259
157
 
260
- ### Custom Port Configuration
261
- By default, `pi-freeflow` uses a **Single Shared Master Port** (`18080`). All concurrent sub-agents automatically reuse this master proxy without spawning redundant servers or extra sockets.
158
+ **Do I need API keys?** No. `Kilo` uses `Bearer kilo-free`, `OpenCode` uses `opencodeHeaders()`.
262
159
 
263
- To change the base port:
264
- ```env
265
- FREEFLOW_PORT=19000
266
- ```
160
+ **What if all relays 429?** Proxy tries direct. If that’s also 429, Pi shows `rate limit` — that means global upstream limit, even without relay you’d be 429.
161
+
162
+ **Can I use without relays?** Yes. `/freeflow off` → direct. Add relays later to scale.
163
+
164
+ **Where’s `normalizer`?** Deleted in `1.3.0`. If `zai/qwen/deepseek` thinking broke before, it’s fixed now because host handles it.
165
+
166
+ ---
167
+
168
+ ## Sell yourself, not the plugin
169
+
170
+ > “I shipped 10 parallel subagents on 1M context, zero keys, zero 429s. FreeFlow did the rolling, Pi did the thinking.”
171
+
172
+ **Start now:**
267
173
 
268
- ### Zero Configuration Required
269
- FreeFlow registers with the local proxy daemon automatically. No external API keys or environment variables are required to use the free model catalog. If you wish to set a custom daemon port, you can optionally define `FREEFLOW_PORT=19000` in your environment.
270
- ### Live Logs
271
174
  ```bash
272
- cat ~/.pi/agent/pi-freeflow.log | tail -n 40
175
+ omp plugin install pi-freeflow && omp --model freeflow/muse-spark-1.2-contributor-free --thinking max "make it sell"
273
176
  ```
274
177
 
275
178
  ---
276
179
 
277
- ## 📄 License
180
+ ## License
278
181
 
279
- MIT © trefeon
182
+ MIT © trefeon — PRs welcome. `reference/` holds `pi`, `oh-my-pi`, `opencode`, `kilocode` shallow clones for audit (gitignored).
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "pi-freeflow",
3
3
  "type": "module",
4
- "version": "1.3.0",
5
- "description": "Multi-cloud rolling fallback relay for OpenCode Zen and KiloCode free models in Oh My Pi (OMP) and Pi",
4
+ "version": "1.3.3",
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",
8
8
  "keywords": [