little-coder 1.8.2 → 1.8.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.
@@ -37,10 +37,13 @@ describe("resolveOverridePath", () => {
37
37
  expect(resolveOverridePath({ LITTLE_CODER_MODELS_FILE: "/explicit.json", HOME: "/h" })).toBe("/explicit.json");
38
38
  });
39
39
  it("falls back to XDG_CONFIG_HOME", () => {
40
- expect(resolveOverridePath({ XDG_CONFIG_HOME: "/xdg", HOME: "/h" })).toBe("/xdg/little-coder/models.json");
40
+ expect(resolveOverridePath({ XDG_CONFIG_HOME: "/xdg", HOME: "/h" })).toBe(join("/xdg", "little-coder", "models.json"),);
41
41
  });
42
42
  it("falls back to HOME/.config", () => {
43
- expect(resolveOverridePath({ HOME: "/h" })).toBe("/h/.config/little-coder/models.json");
43
+ expect(resolveOverridePath({ HOME: "/h" })).toBe(join("/h", ".config", "little-coder", "models.json"),);
44
+ });
45
+ it("falls back to USERPROFILE/.config when HOME is absent", () => {
46
+ expect(resolveOverridePath({ USERPROFILE: "/profile" })).toBe(join("/profile", ".config", "little-coder", "models.json"),);
44
47
  });
45
48
  it("returns undefined when neither is set", () => {
46
49
  expect(resolveOverridePath({})).toBeUndefined();
@@ -58,7 +58,8 @@ export function resolveOverridePath(env: NodeJS.ProcessEnv = process.env): strin
58
58
  if (env.LITTLE_CODER_MODELS_FILE) return env.LITTLE_CODER_MODELS_FILE;
59
59
  const xdg = env.XDG_CONFIG_HOME;
60
60
  if (xdg) return join(xdg, "little-coder", "models.json");
61
- if (env.HOME) return join(env.HOME, ".config", "little-coder", "models.json");
61
+ const home = env.HOME || env.USERPROFILE;
62
+ if (home) return join(home, ".config", "little-coder", "models.json");
62
63
  return undefined;
63
64
  }
64
65
 
package/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to little-coder are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and little-coder's public interface (CLI, providers, tools, skills) follows semver starting at `v0.0.1` post-rename.
4
4
 
5
+ ## [v1.8.3] — 2026-06-08
6
+
7
+ ### Fixed
8
+ - **User `models.json` is now found on Windows when `HOME` is unset** ([#43](https://github.com/itayinbarr/little-coder/pull/43), thanks [@A-M-D-R-3-W](https://github.com/A-M-D-R-3-W)). Windows doesn't guarantee `HOME`, but it does set `USERPROFILE`. The documented fallback `~/.config/little-coder/models.json` was therefore skipped on Windows and user-defined models never registered. `resolveOverridePath()` now falls back to `USERPROFILE` when `HOME` is absent (resolution order is unchanged where `HOME` exists: `$LITTLE_CODER_MODELS_FILE` → `$XDG_CONFIG_HOME` → `$HOME`/`$USERPROFILE` `/.config`). Path-resolution tests are now platform-neutral via `path.join`.
9
+
10
+ ### Documentation
11
+ - **Added an "Any OpenAI-compatible server (e.g. MLX / omlx)" section** to the model-configuration docs ([#40](https://github.com/itayinbarr/little-coder/issues/40)). little-coder registers providers from `models.json` rather than from pi's standalone picker extensions, so an omlx/MLX server is added by declaring a provider entry (any OpenAI-compatible `/v1` endpoint works the same way), not by installing its pi picker. The README now shows the exact `~/.config/little-coder/models.json` block.
12
+
13
+ ---
14
+
5
15
  ## [v1.8.2] — 2026-05-25
6
16
 
7
17
  ### Fixed
package/README.md CHANGED
@@ -188,6 +188,35 @@ Then verify with `little-coder --list-models` — you should see your overridden
188
188
 
189
189
  `LLAMACPP_BASE_URL`, `OLLAMA_BASE_URL`, and `LMSTUDIO_BASE_URL` env vars still beat both files for those three providers.
190
190
 
191
+ ### Any OpenAI-compatible server (e.g. MLX / omlx)
192
+
193
+ little-coder registers providers from `models.json` — it doesn't pick up pi's standalone "picker" extensions. So a server isn't added by installing its pi picker; you add it by declaring a provider. Any OpenAI-compatible endpoint works this way, including Apple's MLX server (`mlx_lm.server`, often surfaced as **omlx**). Drop this into `~/.config/little-coder/models.json` and pick it with `little-coder --model omlx/<id>`:
194
+
195
+ ```json
196
+ {
197
+ "providers": {
198
+ "omlx": {
199
+ "api": "openai-completions",
200
+ "baseUrl": "http://127.0.0.1:8000/v1",
201
+ "apiKey": "IGNORED",
202
+ "models": [
203
+ {
204
+ "id": "Qwen3-32B-4bit",
205
+ "name": "Qwen3.6-35B-A3B (local omlx, 150K)",
206
+ "reasoning": true,
207
+ "input": ["text"],
208
+ "contextWindow": 150000,
209
+ "maxTokens": 4096,
210
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
211
+ }
212
+ ]
213
+ }
214
+ }
215
+ }
216
+ ```
217
+
218
+ Set `id` to whatever model your server reports, and `baseUrl` to its `/v1` endpoint. Verify with `little-coder --list-models`.
219
+
191
220
  `.pi/settings.json` is a separate concern: it controls per-model **profiles** (context_limit, thinking_budget, temperature, benchmark_overrides) referenced by the `<provider>/<id>` key. Profiles don't register or describe models — they only tune how little-coder runs against models that are already registered.
192
221
 
193
222
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "little-coder",
3
- "version": "1.8.2",
3
+ "version": "1.8.3",
4
4
  "description": "A pi-based coding agent optimized for small local language models. Reproduces the whitepaper's scaffold-model-fit adaptations as pi extensions.",
5
5
  "homepage": "https://github.com/itayinbarr/little-coder",
6
6
  "repository": {