pi-freeflow 1.3.1 โ†’ 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 +131 -226
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,277 +1,182 @@
1
- # pi-freeflow
1
+ # pi-freeflow ๐ŸŒŠ
2
2
 
3
- > ๐ŸŒŠ **FreeFlow** โ€” Thin provider for [Oh My Pi (OMP)](https://omp.sh) & [Pi](https://pi.dev): **model list + relay proxy + log**. The rest (thinking, normalization, provider composition) is handled by the host `pi-ai` system โ€” `pi-freeflow` just provides 23 free models via a multi-cloud rolling relay.
3
+ > **23 free models. Up to 1M context (66Kโ€“1M per model). Zero API keys. Infinite scale via your own cloud relay.**
4
4
 
5
- ---
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)
6
11
 
7
- ## โœจ Features โ€” Minimal by Design
12
+ > **Join devs bypassing rate limits with their own relay pools โ€” BYO, add as many as you need.**
8
13
 
9
- `pi-freeflow` is **thin**: **model list + relay proxy + log**. Host `pi-ai`/OMP owns thinking, normalization, and provider composition.
14
+ ## Why youโ€™re here
10
15
 
11
- - ๐Ÿ“‹ **23 Free Models** โ€” `9 OpenCode Zen + 14 Kilo` via host `fetchDynamicModels` (24h cache, disk-only, no subagent live fetch)
12
- - ๐ŸŒ **Dumb Relay Proxy** โ€” `http://127.0.0.1:18080` dumb pipe: `x-relay-target/path` โ†’ 7-pool (CF Workers + Vercel Edge) round-robin seamless `429` roll โ†’ direct fallback; host already normalized `reasoning_effort`/`thinking`
13
- - ๐Ÿ“ **Persistent Log** โ€” `~/.pi/agent/pi-freeflow.log` 5MB rotate, `pi-freeflow-debug.json` toggle, `GET /v1/models` pathname-guarded (no `?query` paid leak)
14
- - ๐Ÿค– **Sub-agent Ready** โ€” shared daemon `18080` (or `18081` fallback) reused across parallel subagents; round-robin primary + `willUseRelay` bypass prevents local `127.0.0.1` 429
15
- - โšก **SSE Streaming** โ€” zero-buffer chunk pipe, `thinking_delta` pass-through (host parses)
16
+ You love Pi. You love free models. You hate:
16
17
 
17
- > **Philosophy:** *model list + relay proxy + log โ€” the rest is Pi.* No `src/normalizer.ts` duplication; `pi-ai` owns `compat.thinkingFormat` (11 variants), `clampThinkingBudgetToAnswerRoom`, `transformMessages`.
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.**
18
24
 
19
25
  ---
20
26
 
21
- ## ๐Ÿ“ฆ Installation
27
+ ## What you get (and what you donโ€™t pay for)
22
28
 
23
- ### Oh My Pi (OMP)
24
- ```bash
25
- omp plugin install pi-freeflow
26
- ```
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 |
27
35
 
28
- ### Pi Coding Agent
29
- ```bash
30
- pi install npm:pi-freeflow
31
- ```
36
+ > **Thin by design:** `model list + relay proxy + log` โ€” host `pi-ai` owns thinking & normalization.
37
+
38
+ ---
39
+
40
+ ## 23 Models โ€” One Command
32
41
 
33
- ### From Local / Git Repo
34
42
  ```bash
35
- omp plugin link /path/to/pi-freeflow
43
+ /model โ†’ freeflow โ†’ pick
36
44
  ```
37
45
 
38
- ---
46
+ ### OpenCode Zen (9) โ€” Responses & Chat
39
47
 
40
- ## ๐Ÿš€ Quick Start
41
-
42
- 1. Start OMP or Pi:
43
- ```bash
44
- omp
45
- ```
46
- 2. Select a model via `/model` $\to$ **`freeflow`** $\to$ choose your model (e.g. `mimo-v2.5-free` or `x-preview-f-free`).
47
- 3. Manage relays with the `/freeflow` command:
48
- ```text
49
- /freeflow status # Check relay status and active proxy
50
- /freeflow list # View all saved relay proxies
51
- /freeflow on # Enable relay proxying
52
- /freeflow off # Disable relay (use direct upstream)
53
- /freeflow use <URL> # Activate a specific relay proxy
54
- /freeflow logs # Show recent 25 lines of debug logs
55
- ```
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` | โŒ |
56
59
 
57
- ---
60
+ ### Kilo Gateway (14) โ€” OpenRouter
61
+
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.
58
63
 
59
- ## ๐Ÿ“‹ Model Catalog (23 Models)
60
-
61
- ### OpenCode Zen Models (9 Models)
62
-
63
- | Model ID | Name | Context Window | Max Output | Reasoning / Thinking | Vision (Images) |
64
- | :--- | :--- | :---: | :---: | :---: | :---: |
65
- | `deepseek-v4-flash-free` | DeepSeek V4 Flash (1M) | **1M** (1,000,000) | **384K** | `minimal..max` | โŒ No |
66
- | `x-preview-f-free` | Ox Alpha (1M) | **1M** (1,048,576) | 131K | `low, high, max` | โœ… Yes |
67
- | `muse-spark-1.2-contributor-free` | Muse Spark 1.2 (1M) | **1M** (1,048,576) | 131K | `minimal..max` | โœ… Yes |
68
- | `mimo-v2.5-free` | MiMo V2.5 (1M) | **1M** (1,048,576) | 131K | `low, medium, high` | โœ… Yes |
69
- | `laguna-s-2.1-free` | Laguna S 2.1 (1M) | **1M** (1,048,576) | 131K | `minimal..max` | โŒ No |
70
- | `nemotron-3.5-lightning-free` | Nemotron 3.5 Lightning (1M) | **1M** (1,000,000) | 262K | `minimal..max` | โŒ No |
71
- | `nemotron-3-ultra-free` | Nemotron 3 Ultra (1M) | **1M** (1,000,000) | 128K | `minimal..max` | โŒ No |
72
- | `hy3-free` | Hy3 (262K) | **262K** (262,144) | 128K | `minimal..max` | โŒ No |
73
- | `big-pickle` | Big Pickle | **200K** (200,000) | 32K | `high, max` | โŒ No |
74
- ### KiloCode Gateway Models (14 Models)
75
-
76
- | Model ID | Name | Context Window | Max Output | Reasoning / Thinking | Vision (Images) |
77
- | :--- | :--- | :---: | :---: | :---: | :---: |
78
- | `dots-studio/dots-3-note-preview:free` | Dots3-Note Preview (512K) | **512K** (512,000) | 512K | OpenRouter format | โœ… Yes |
79
- | `stepfun/step-3.7-flash:free` | Step 3.7 Flash | **262K** (262,144) | 262K | OpenRouter format | โœ… Yes |
80
- | `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free` | Nemotron 3 Nano Omni | **256K** (256,000) | 65K | OpenRouter format | โœ… Yes |
81
- | `nvidia/nemotron-3-ultra-550b-a55b:free` | Nemotron 3 Ultra 550B (1M) | **1M** (1,000,000) | 65K | OpenRouter format | โŒ No |
82
- | `nvidia/nemotron-3.5-lightning:free` | Nemotron 3.5 Lightning (Kilo) | **1M** (1,000,000) | 65K | OpenRouter format | โŒ No |
83
- | `nvidia/nemotron-3-super-120b-a12b:free` | Nemotron 3 Super 120B | **262K** (262,144) | 262K | OpenRouter format | โŒ No |
84
- | `tencent/hy3:free` | Tencent Hy3 (Kilo) | **262K** (262,144) | 128K | OpenRouter format | โŒ No |
85
- | `cohere/north-mini-code:free` | North Mini Code | **256K** (256,000) | 64K | OpenRouter format | โŒ No |
86
- | `poolside/laguna-s-2.1:free` | Laguna S 2.1 (Kilo) | **262K** (262,144) | 33K | OpenRouter format | โŒ No |
87
- | `poolside/laguna-xs-2.1:free` | Laguna XS 2.1 | **262K** (262,144) | 33K | OpenRouter format | โŒ No |
88
- | `liquid/lfm-2.5-2.6b:free` | Liquid LFM 2.5 | **66K** (65,536) | 8K | OpenRouter format | โŒ No |
89
- | `kilo-auto/free` | Kilo Auto | **256K** (256,000) | 10K | Standard | โŒ No |
90
- | `openrouter/free` | OpenRouter Auto | **200K** (200,000) | 65K | Standard | โŒ No |
91
- | `nvidia/nemotron-3.5-content-safety:free` | Nemotron Content Safety | **128K** (128,000) | 8K | Standard | โŒ No |
64
+ All `offโ†’null` (hidden) โ€” host decides budgets, not us.
92
65
 
93
66
  ---
94
67
 
95
- ## ๐ŸŒ Setting Up Your Own Egress Relays (Multi-Cloud)
68
+ ## The magic: BYO relays, 0 rate limits
96
69
 
97
- 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**.
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
+ ```
98
74
 
99
- ---
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`
100
79
 
101
- ### 1. Cloudflare Worker Relay (Recommended โญ)
102
- > **Free Tier**: 100,000 requests/day ยท Low latency ยท No 25-second execution timeout.
103
-
104
- 1. Go to [dash.cloudflare.com](https://dash.cloudflare.com) $\to$ **Workers & Pages** $\to$ **Create application** $\to$ **Create Worker**.
105
- 2. Name your worker (e.g. `my-freeflow-relay`) $\to$ click **Deploy**.
106
- 3. Click **Edit code**, paste this JavaScript, and click **Save and Deploy**:
107
-
108
- ```javascript
109
- const ALLOWED_TARGETS = ["https://opencode.ai", "https://api.kilo.ai"];
110
-
111
- export default {
112
- async fetch(request) {
113
- if (request.method === "OPTIONS") {
114
- return new Response(null, {
115
- headers: {
116
- "Access-Control-Allow-Origin": "*",
117
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS, HEAD",
118
- "Access-Control-Allow-Headers": "*",
119
- "Access-Control-Max-Age": "86400",
120
- },
121
- });
122
- }
123
-
124
- const target = request.headers.get("x-relay-target");
125
- const relayPath = request.headers.get("x-relay-path") || "/";
126
-
127
- if (!target || !ALLOWED_TARGETS.includes(target.replace(/\/$/, ""))) {
128
- return new Response(JSON.stringify({ error: "Forbidden target" }), { status: 403, headers: { "content-type": "application/json" } });
129
- }
130
-
131
- const targetUrl = target.replace(/\/$/, "") + relayPath;
132
- const headers = new Headers(request.headers);
133
- headers.delete("x-relay-target");
134
- headers.delete("x-relay-path");
135
- headers.delete("host");
136
- headers.delete("cf-connecting-ip");
137
- headers.delete("cf-ray");
138
-
139
- try {
140
- const response = await fetch(targetUrl, {
141
- method: request.method,
142
- headers,
143
- body: request.method !== "GET" && request.method !== "HEAD" ? request.body : undefined,
144
- });
145
-
146
- const outHeaders = new Headers(response.headers);
147
- outHeaders.set("Access-Control-Allow-Origin", "*");
148
- return new Response(response.body, { status: response.status, headers: outHeaders });
149
- } catch (err) {
150
- return new Response(JSON.stringify({ error: "Upstream failed", details: String(err) }), { status: 502, headers: { "content-type": "application/json" } });
151
- }
152
- },
153
- };
154
- ```
80
+ **Real log (1.3.1 thin):**
155
81
 
156
- 4. Copy your Worker URL and register it inside OMP:
157
82
  ```text
158
- /freeflow use https://my-freeflow-relay.your-subdomain.workers.dev
83
+ candidates:N โ†’ relay-A 429 rolling โ†’ relay-B 200 in 1.2s โ†’ 98 chunks 663KB done
159
84
  ```
160
85
 
86
+ You bring the relays (free tiers). We bring the rolling.
87
+
161
88
  ---
162
89
 
163
- ### 2. Vercel Edge Relay
164
- > **Free Tier**: 1,000,000 requests/month.
90
+ ## 30-second Setup
165
91
 
166
- #### Method A: Automated In-Memory CLI Deploy
167
- 1. Generate a Vercel token at [vercel.com/account/tokens](https://vercel.com/account/tokens).
168
- 2. In OMP TUI, run:
169
- ```text
170
- /freeflow deploy
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
171
106
  ```
172
- *(Prompts for your token in-memory, provisions a private Edge Function, and adds it to your relay pool automatically).*
173
-
174
- #### Method B: Manual Git Deploy
175
- Deploy a Git repository with these 3 files:
176
- * **`api/relay.js`**:
177
- ```javascript
178
- const ALLOWED_TARGETS = ["https://opencode.ai", "https://api.kilo.ai"];
179
- export const config = { runtime: "edge" };
180
- export default async function handler(req) {
181
- const target = req.headers.get("x-relay-target");
182
- const relayPath = req.headers.get("x-relay-path") || "/";
183
- if (!target || !ALLOWED_TARGETS.includes(target.replace(/\/$/, ""))) return new Response(JSON.stringify({ error: "Forbidden" }), { status: 403 });
184
- const targetUrl = target.replace(/\/$/, "") + relayPath;
185
- const headers = new Headers(req.headers);
186
- headers.delete("x-relay-target"); headers.delete("x-relay-path"); headers.delete("host");
187
- const response = await fetch(targetUrl, { method: req.method, headers, body: req.method !== "GET" && req.method !== "HEAD" ? req.body : undefined, duplex: "half" });
188
- return new Response(response.body, { status: response.status, headers: response.headers });
189
- }
190
- ```
191
- * **`package.json`**: `{ "name": "freeflow-relay", "version": "1.0.0" }`
192
- * **`vercel.json`**: `{ "rewrites": [{ "source": "/(.*)", "destination": "/api/relay" }] }`
193
107
 
194
- ---
108
+ ### 2. Pick a model
195
109
 
196
- ### 3. Deno Deploy Relay
197
- > **Free Tier**: 100,000 requests/day.
198
-
199
- 1. Open [dash.deno.com](https://dash.deno.com) $\to$ **New Project** $\to$ **Playground**.
200
- 2. Paste the following TypeScript code:
201
-
202
- ```typescript
203
- const ALLOWED_TARGETS = ["https://opencode.ai", "https://api.kilo.ai"];
204
-
205
- Deno.serve(async (req) => {
206
- if (req.method === "OPTIONS") {
207
- return new Response(null, {
208
- headers: {
209
- "Access-Control-Allow-Origin": "*",
210
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
211
- "Access-Control-Allow-Headers": "*",
212
- },
213
- });
214
- }
215
-
216
- const target = req.headers.get("x-relay-target");
217
- const relayPath = req.headers.get("x-relay-path") || "/";
218
- if (!target || !ALLOWED_TARGETS.includes(target.replace(/\/$/, ""))) {
219
- return new Response(JSON.stringify({ error: "Forbidden target" }), { status: 403 });
220
- }
221
-
222
- const targetUrl = target.replace(/\/$/, "") + relayPath;
223
- const headers = new Headers(req.headers);
224
- headers.delete("x-relay-target");
225
- headers.delete("x-relay-path");
226
- headers.delete("host");
227
-
228
- const response = await fetch(targetUrl, {
229
- method: req.method,
230
- headers,
231
- body: req.method !== "GET" && req.method !== "HEAD" ? req.body : undefined,
232
- });
233
- return new Response(response.body, { status: response.status, headers: response.headers });
234
- });
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"
235
115
  ```
236
- 3. Click **Deploy** and copy your Deno project URL (`https://project-name.deno.dev`).
237
116
 
238
- ---
117
+ ### 3. (Optional but ๐Ÿ”ฅ) Add your free relays โ€” BYO, scale as you add
239
118
 
240
- ## ๐ŸŽฎ Managing Relays in FreeFlow
119
+ **One Cloudflare Worker (100k req/day, no 25s timeout):**
241
120
 
242
- Inside the OMP / Pi TUI:
243
- ```text
244
- /freeflow use <URL> # Set active relay and add to saved pool
245
- /freeflow list # View all saved relays with status indicators (โ˜… = active)
246
- /freeflow status # Check current relay health and egress mode
247
- /freeflow refresh # Trigger live on-demand model catalog sync from upstream APIs
248
- /freeflow on # Force enable relay egress mode
249
- /freeflow off # Switch to direct upstream mode
250
- /freeflow remove <URL> # Remove an inactive relay from pool
251
- /freeflow logs # Show last 25 lines of debug logs
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
129
+ ```
130
+
131
+ **Check pooling:**
132
+
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
252
137
  ```
253
138
 
139
+ Done. Subagents now follow parent proxy โ€” `Unable to connect` is history.
140
+
254
141
  ---
255
142
 
256
- ## ๐Ÿ› ๏ธ Diagnostics & Troubleshooting
143
+ ## Thin vs Fat
257
144
 
258
- ### Custom Port Configuration
259
- 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.
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 Nร— relays | **Narrow 429/5xx only**, `400` surfaces instantly |
150
+ | `GET /v1/models?foo` leaks paid | **Pathname-guarded** |
260
151
 
261
- To change the base port:
262
- ```env
263
- FREEFLOW_PORT=19000
264
- ```
152
+ Result: **<500 LOC core, 29 tests PASS, typecheck PASS**.
153
+
154
+ ---
155
+
156
+ ## FAQ
157
+
158
+ **Do I need API keys?** No. `Kilo` uses `Bearer kilo-free`, `OpenCode` uses `opencodeHeaders()`.
159
+
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:**
265
173
 
266
- ### Zero Configuration Required
267
- 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.
268
- ### Live Logs
269
174
  ```bash
270
- 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"
271
176
  ```
272
177
 
273
178
  ---
274
179
 
275
- ## ๐Ÿ“„ License
180
+ ## License
276
181
 
277
- 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,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-freeflow",
3
3
  "type": "module",
4
- "version": "1.3.1",
4
+ "version": "1.3.3",
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",