flint-agent 1.14.0 → 1.14.1

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 CHANGED
@@ -7,6 +7,17 @@ All notable changes to Flint are written here. The format follows
7
7
  Each version is a `## [x.y.z] - YYYY-MM-DD` heading: `/update` reads these
8
8
  headings to show what changed between your version and the newest one.
9
9
 
10
+ ## [1.14.1] - 2026-10-02
11
+
12
+ ### Fixed
13
+ - Free mode no longer crashes the console. After `/model free` or
14
+ `/model free auto` chose a model, Flint stopped with React error #185, and
15
+ then on every start, because the chosen models are remembered. The status
16
+ line built its free-request counter as a new object on each check, so the
17
+ screen redrew without end.
18
+ - `bin` in package.json written the way npm expects, so publishing no longer
19
+ warns that it was corrected.
20
+
10
21
  ## [1.14.0] - 2026-10-02
11
22
 
12
23
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flint-agent",
3
- "version": "1.14.0",
3
+ "version": "1.14.1",
4
4
  "description": "A lightweight AI agent for the terminal that works with any LLM, free tiers included: files, commands, web, MCP",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -36,7 +36,7 @@
36
36
  "vitest": "^4.0.18"
37
37
  },
38
38
  "bin": {
39
- "flint": "./bin/flint.js"
39
+ "flint": "bin/flint.js"
40
40
  },
41
41
  "engines": {
42
42
  "node": ">=22.12.0"
@@ -112,7 +112,11 @@ export function App({ store, onSubmit, onAbort, onQuit, onClipboard, onRecallQue
112
112
  careLevel: s._careLevel || null,
113
113
  spendLevel: s._spendLevel || getSpendLevel(),
114
114
  // Free mode: requests made today with a free model, of the daily limit.
115
- freeQuota: config.freeChain ? { used: freeUsedToday(), limit: s._freeLimit || savedFreeLimit() } : null,
115
+ // Two plain numbers, not an object: the selector runs on every store
116
+ // check, and a fresh object each time never compares equal, so React
117
+ // re-rendered forever (error #185) as soon as free mode was on.
118
+ freeUsed: config.freeChain ? freeUsedToday() : null,
119
+ freeLimit: config.freeChain ? s._freeLimit || savedFreeLimit() : null,
116
120
  }));
117
121
  const { inputHistory } = ui;
118
122
 
@@ -221,7 +221,7 @@ export function statusText(state) {
221
221
  }
222
222
  parts.push(formatStatusLevel());
223
223
  if (state.spendLevel) parts.push(`spend: ${state.spendLevel}`);
224
- if (state.freeQuota) parts.push(`free ${state.freeQuota.used}/${state.freeQuota.limit}`);
224
+ if (state.freeLimit != null) parts.push(`free ${state.freeUsed}/${state.freeLimit}`);
225
225
  parts.push("/help");
226
226
  return ` ${parts.join(" | ")}`;
227
227
  }