Skip to content

Commit ba5008c

Browse files
committed
fix failing test on Linux; update readme
1 parent 9e8c0b2 commit ba5008c

2 files changed

Lines changed: 31 additions & 24 deletions

File tree

README.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ Use a different model:
155155

156156
```bash
157157
sofos --model gpt-5.5
158-
sofos --model claude-opus-4-7 -e high
158+
sofos --model claude-opus-4-8 -e high
159159
```
160160

161161
Run a single prompt and exit:
@@ -264,16 +264,16 @@ Supported formats: JPEG, PNG, GIF, and WebP. Local images are capped at 20 MB. I
264264

265265
Sofos supports eight models, in `/model` picker order:
266266

267-
| Model | Provider |
268-
|---|---|
269-
| `claude-fable-5` | Anthropic |
270-
| `claude-opus-4-7` | Anthropic |
267+
| Model | Provider |
268+
|-------------------------------|---|
269+
| `claude-fable-5` | Anthropic |
270+
| `claude-opus-4-8` | Anthropic |
271271
| `claude-sonnet-4-6` (default) | Anthropic |
272-
| `claude-haiku-4-5` | Anthropic |
273-
| `gpt-5.5` | OpenAI |
274-
| `gpt-5.4` | OpenAI |
275-
| `gpt-5.4-mini` | OpenAI |
276-
| `gpt-5.3-codex` | OpenAI |
272+
| `claude-haiku-4-5` | Anthropic |
273+
| `gpt-5.5` | OpenAI |
274+
| `gpt-5.4` | OpenAI |
275+
| `gpt-5.4-mini` | OpenAI |
276+
| `gpt-5.3-codex` | OpenAI |
277277

278278
`--model <name>` accepts only the values above; any other slug is refused at startup with the supported list. The same whitelist drives the inline `/model` picker, so the two surfaces never disagree about which models exist.
279279

@@ -291,25 +291,25 @@ Examples:
291291
sofos -e medium # Default balance.
292292
sofos -e off # Lowest-cost path.
293293
sofos -e high # More reasoning for hard tasks.
294-
sofos -e max --model claude-opus-4-7 # Highest Anthropic adaptive level.
294+
sofos -e max --model claude-opus-4-8 # Highest Anthropic adaptive level.
295295
sofos -e xhigh --model gpt-5.5 # Highest OpenAI gpt-5 reasoning level.
296296
```
297297

298298
Support matrix:
299299

300-
| Effort | Fable 5 | Opus 4.7 | Sonnet 4.6 | Haiku 4.5 | OpenAI gpt-5 reasoning models |
301-
|---|:---:|:---:|:---:|:---:|:---:|
302-
| `off` || ||||
303-
| `low` || ||||
304-
| `medium` || ||||
305-
| `high` || ||||
306-
| `xhigh` || ||||
307-
| `max` || ||||
300+
| Effort | Fable 5 | Opus 4.8 | Sonnet 4.6 | Haiku 4.5 | OpenAI gpt-5 reasoning models |
301+
|---|:---:|:--------:|:---:|:---:|:---:|
302+
| `off` || ||||
303+
| `low` || ||||
304+
| `medium` || ||||
305+
| `high` || ||||
306+
| `xhigh` || ||||
307+
| `max` || ||||
308308

309309
Provider mapping:
310310

311311
- **OpenAI** sends `reasoning.effort`; `off` maps to minimal reasoning and suppresses reasoning summaries.
312-
- **Claude Fable 5, Opus 4.7, and Sonnet 4.6** use adaptive thinking. The provider chooses the token budget from the effort level.
312+
- **Claude Fable 5, Opus 4.8, and Sonnet 4.6** use adaptive thinking. The provider chooses the token budget from the effort level.
313313
- **Claude Haiku 4.5** uses fixed legacy thinking budgets for `low`, `medium`, and `high`. `off` disables extended thinking.
314314

315315
---

src/tools/tests.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1739,14 +1739,21 @@ async fn test_glob_files_symlink_not_followed_by_default() {
17391739
// A regular file (so default-disabled excludes don't hide it).
17401740
std::fs::write(workspace.path().join("anchor.txt"), "").unwrap();
17411741

1742-
// A real directory outside the symlink we'll reach only via follow.
1742+
// A real directory inside the workspace, always reached directly.
17431743
let hidden = workspace.path().join("real_hidden");
17441744
std::fs::create_dir_all(&hidden).unwrap();
17451745
std::fs::write(hidden.join("through_symlink.txt"), "").unwrap();
17461746

1747-
// Symlink pointing at the hidden directory. Default walk won't
1748-
// descend through it; `follow_symlinks: true` will.
1749-
symlink(&hidden, workspace.path().join("alias")).unwrap();
1747+
// A separate directory reached only through the symlink. Keeping it
1748+
// distinct from `real_hidden` stops the cycle-breaking dedup from
1749+
// collapsing the two into one canonical path, so the aliased path
1750+
// surfaces whatever order the directory entries come back in.
1751+
let external = tempdir().unwrap();
1752+
std::fs::write(external.path().join("through_symlink.txt"), "").unwrap();
1753+
1754+
// Workspace-internal symlink to that external directory. The default
1755+
// walk won't descend through it; `follow_symlinks: true` will.
1756+
symlink(external.path(), workspace.path().join("alias")).unwrap();
17501757

17511758
let executor =
17521759
ToolExecutor::new(workspace.path().to_path_buf(), None, None, false, false).unwrap();

0 commit comments

Comments
 (0)