@bastani/atomic 0.8.2-0 → 0.8.3-0
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 +12 -0
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +1 -0
- package/dist/builtin/subagents/README.md +1 -1
- package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
- package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +22 -22
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
- package/dist/builtin/subagents/agents/debugger.md +1 -1
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +1 -1
- package/dist/builtin/subagents/src/runs/background/async-execution.ts +3 -2
- package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +3 -1
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +8 -1
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +7 -1
- package/dist/builtin/subagents/src/shared/types.ts +2 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/builtin/deep-research-codebase.ts +2 -0
- package/dist/builtin/workflows/builtin/ralph.ts +5 -0
- package/dist/builtin/workflows/package.json +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.8.3-0] - 2026-05-17
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Pinned `@j178/prek` to 0.3.13 to keep hook installation stable.
|
|
10
|
+
|
|
11
|
+
## [0.8.2] - 2026-05-16
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Reduced the Atomic startup banner to a compact three-line mark.
|
|
16
|
+
|
|
5
17
|
## [0.8.2-0] - 2026-05-16
|
|
6
18
|
|
|
7
19
|
### Changed
|
|
@@ -448,7 +448,7 @@ Important fields:
|
|
|
448
448
|
| `tools` | Builtin tool allowlist. `mcp:` entries select direct MCP tools when `pi-mcp-adapter` is installed. |
|
|
449
449
|
| `extensions` | Omitted means normal extensions; empty means no extensions; comma-separated values allowlist specific extensions. |
|
|
450
450
|
| `model` | Default model. Bare ids prefer the current provider when possible, then unique registry matches. |
|
|
451
|
-
| `fallbackModels` | Ordered backup models for provider/model failures such as quota, auth, timeout, or unavailable model. Ordinary task failures do not trigger fallback. |
|
|
451
|
+
| `fallbackModels` | Ordered backup models for provider/model failures such as quota, auth, timeout, or unavailable model. The current user-selected model is automatically appended as the last fallback and de-duplicated. Ordinary task failures do not trigger fallback. |
|
|
452
452
|
| `thinking` | Appended as a `:level` suffix at runtime unless a suffix is already present. |
|
|
453
453
|
| `systemPromptMode` | `replace` by default; `append` keeps Pi’s base prompt. |
|
|
454
454
|
| `inheritProjectContext` | Keeps or strips inherited project instruction blocks. |
|
|
@@ -9,7 +9,7 @@ description: |
|
|
|
9
9
|
- Code that has gotten messy after several iterations.
|
|
10
10
|
tools: read, edit, write, grep, find, ls, bash
|
|
11
11
|
model: openai/gpt-5.5
|
|
12
|
-
fallbackModels: github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
12
|
+
fallbackModels: openai-codex/gpt-5.5, github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
13
13
|
thinking: low
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -3,7 +3,7 @@ name: codebase-analyzer
|
|
|
3
3
|
description: Analyzes codebase implementation details. Call the codebase-analyzer agent when you need to find detailed information about specific components.
|
|
4
4
|
tools: read, grep, find, ls, bash
|
|
5
5
|
model: openai/gpt-5.5
|
|
6
|
-
fallbackModels: github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
6
|
+
fallbackModels: openai-codex/gpt-5.5, github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
7
7
|
thinking: low
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: codebase-locator
|
|
|
3
3
|
description: Locates files, directories, and components relevant to a feature or task. Basically a "super search/find/ls tool."
|
|
4
4
|
tools: read, grep, find, ls, bash
|
|
5
5
|
model: openai/gpt-5.4-mini
|
|
6
|
-
fallbackModels: github-copilot/gpt-5.4-mini, anthropic/claude-haiku-4-5, github-copilot/claude-haiku-4.5
|
|
6
|
+
fallbackModels: openai-codex/gpt-5.4-mini, github-copilot/gpt-5.4-mini, anthropic/claude-haiku-4-5, github-copilot/claude-haiku-4.5
|
|
7
7
|
thinking: low
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: codebase-online-researcher
|
|
|
3
3
|
description: Online research for up-to-date documentation and library-source knowledge. Use when you need authoritative external information — official docs, ecosystem context, version-specific behavior, GitHub permalinks into open-source libraries, or video tutorials.
|
|
4
4
|
tools: read, grep, find, ls, bash, write, web_search, fetch_content, get_search_content
|
|
5
5
|
model: openai/gpt-5.5
|
|
6
|
-
fallbackModels: github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
6
|
+
fallbackModels: openai-codex/gpt-5.5, github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
7
7
|
thinking: low
|
|
8
8
|
skills: playwright-cli
|
|
9
9
|
---
|
|
@@ -27,11 +27,11 @@ For JS-heavy or auth-gated pages, fall back to invoking `playwright-cli` through
|
|
|
27
27
|
|
|
28
28
|
Pi executes tool calls sequentially, even when you emit multiple calls in one turn. But batching independent calls in a single turn still saves LLM round-trips (~5-10s each). Use these patterns:
|
|
29
29
|
|
|
30
|
-
| Pattern | When
|
|
31
|
-
| -------------------------------- |
|
|
32
|
-
| Batch tool calls in one turn | Independent ops (web_search + fetch_content + read)
|
|
33
|
-
| `fetch_content({ urls: [...] })` | Multiple URLs to fetch
|
|
34
|
-
| Bash with `&` + `wait` | Multiple git/gh commands
|
|
30
|
+
| Pattern | When | Actually parallel? |
|
|
31
|
+
| -------------------------------- | --------------------------------------------------- | ------------------------- |
|
|
32
|
+
| Batch tool calls in one turn | Independent ops (web_search + fetch_content + read) | No, but saves round-trips |
|
|
33
|
+
| `fetch_content({ urls: [...] })` | Multiple URLs to fetch | Yes (3 concurrent) |
|
|
34
|
+
| Bash with `&` + `wait` | Multiple git/gh commands | Yes (OS-level) |
|
|
35
35
|
|
|
36
36
|
## Web Fetch Strategy (token-efficient order)
|
|
37
37
|
|
|
@@ -63,12 +63,12 @@ When the question is about an open-source library — its internals, why somethi
|
|
|
63
63
|
|
|
64
64
|
### Step 1: Classify the request
|
|
65
65
|
|
|
66
|
-
| Type | Trigger
|
|
67
|
-
| --------------------- |
|
|
68
|
-
| **Conceptual** | "How do I use X?", "Best practice for Y?"
|
|
69
|
-
| **Implementation** | "How does X implement Y?", "Show me the source"
|
|
70
|
-
| **Context / History** | "Why was this changed?", "History of X?"
|
|
71
|
-
| **Comprehensive** | Complex or ambiguous "deep dive"
|
|
66
|
+
| Type | Trigger | Primary approach |
|
|
67
|
+
| --------------------- | ----------------------------------------------- | ----------------------------------------------------------- |
|
|
68
|
+
| **Conceptual** | "How do I use X?", "Best practice for Y?" | `web_search` + `fetch_content` on README/docs |
|
|
69
|
+
| **Implementation** | "How does X implement Y?", "Show me the source" | `fetch_content` (clone) + `grep`/`read` + permalinks |
|
|
70
|
+
| **Context / History** | "Why was this changed?", "History of X?" | `git log`, `git blame`, `git show` + `gh search issues/prs` |
|
|
71
|
+
| **Comprehensive** | Complex or ambiguous "deep dive" | All of the above |
|
|
72
72
|
|
|
73
73
|
### Step 2: Research by type
|
|
74
74
|
|
|
@@ -303,15 +303,15 @@ For library-source answers, every code claim should look like the citation examp
|
|
|
303
303
|
|
|
304
304
|
## Failure Recovery
|
|
305
305
|
|
|
306
|
-
| Failure
|
|
307
|
-
|
|
|
308
|
-
| `grep` finds nothing
|
|
309
|
-
| `gh` CLI rate limited
|
|
310
|
-
| Repo too large to clone
|
|
311
|
-
| File not found in the clone
|
|
312
|
-
| Uncertain about implementation
|
|
313
|
-
| Video extraction fails
|
|
314
|
-
| Page returns 403 / bot block
|
|
315
|
-
| `web_search` fails
|
|
306
|
+
| Failure | Recovery |
|
|
307
|
+
| ------------------------------ | -------------------------------------------------------------------------------------------------------------- |
|
|
308
|
+
| `grep` finds nothing | Broaden the query; try concept names instead of exact function names. |
|
|
309
|
+
| `gh` CLI rate limited | Use the already-cloned repo under `/tmp/pi-github-repos/` for git operations instead. |
|
|
310
|
+
| Repo too large to clone | `fetch_content` returns an API-only view automatically; use that, or add `forceClone: true` if you must clone. |
|
|
311
|
+
| File not found in the clone | A branch name with slashes may have misresolved; list the repo tree and navigate manually. |
|
|
312
|
+
| Uncertain about implementation | State your uncertainty explicitly, propose a hypothesis, and show what evidence you did find. |
|
|
313
|
+
| Video extraction fails | Ensure Chrome is signed into gemini.google.com (free) or set `GEMINI_API_KEY`. |
|
|
314
|
+
| Page returns 403 / bot block | Gemini fallback triggers automatically; no action needed if Gemini is configured. |
|
|
315
|
+
| `web_search` fails | Check provider config; try explicit `provider: "gemini"` if a Perplexity key is missing. |
|
|
316
316
|
|
|
317
317
|
Remember: you are the user's expert guide to technical research. Lean on `fetch_content` first with the `/llms.txt` → `Accept: text/markdown` → `playwright-cli` fallback chain to efficiently pull authoritative content, clone open-source repos when implementation evidence is needed, store anything reusable under `research/web/`, and deliver comprehensive, up-to-date answers with exact citations and GitHub permalinks. Answer directly — skip preamble like "I'll help you with…" and go straight to findings.
|
|
@@ -3,7 +3,7 @@ name: codebase-pattern-finder
|
|
|
3
3
|
description: Find similar implementations, usage examples, or existing patterns in the codebase that can be modeled after.
|
|
4
4
|
tools: read, grep, find, ls, bash
|
|
5
5
|
model: openai/gpt-5.4-mini
|
|
6
|
-
fallbackModels: github-copilot/gpt-5.4-mini, anthropic/claude-haiku-4-5, github-copilot/claude-haiku-4.5
|
|
6
|
+
fallbackModels: openai-codex/gpt-5.4-mini, github-copilot/gpt-5.4-mini, anthropic/claude-haiku-4-5, github-copilot/claude-haiku-4.5
|
|
7
7
|
thinking: low
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: codebase-research-analyzer
|
|
|
3
3
|
description: Analyzes local research documents to extract high-value insights, decisions, and technical details while filtering out noise. Use this when you want to deep dive on a research topic or understand the rationale behind decisions.
|
|
4
4
|
tools: read, grep, find, ls, bash
|
|
5
5
|
model: openai/gpt-5.5
|
|
6
|
-
fallbackModels: github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
6
|
+
fallbackModels: openai-codex/gpt-5.5, github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
7
7
|
thinking: low
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: codebase-research-locator
|
|
|
3
3
|
description: Discovers local research documents that are relevant to the current research task.
|
|
4
4
|
tools: read, grep, find, ls, bash
|
|
5
5
|
model: openai/gpt-5.4-mini
|
|
6
|
-
fallbackModels: github-copilot/gpt-5.4-mini, anthropic/claude-haiku-4-5, github-copilot/claude-haiku-4.5
|
|
6
|
+
fallbackModels: openai-codex/gpt-5.4-mini, github-copilot/gpt-5.4-mini, anthropic/claude-haiku-4-5, github-copilot/claude-haiku-4.5
|
|
7
7
|
thinking: low
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: debugger
|
|
|
3
3
|
description: Debug errors, test failures, and unexpected behavior. Use PROACTIVELY when encountering issues, analyzing stack traces, or investigating system problems.
|
|
4
4
|
tools: read, edit, write, grep, find, ls, bash, web_search, fetch_content, get_search_content
|
|
5
5
|
model: openai/gpt-5.5
|
|
6
|
-
fallbackModels: github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
6
|
+
fallbackModels: openai-codex/gpt-5.5, github-copilot/gpt-5.5, anthropic/claude-opus-4-7, github-copilot/claude-opus-4.7
|
|
7
7
|
thinking: high
|
|
8
8
|
skills: tdd, playwright-cli
|
|
9
9
|
---
|
|
@@ -129,7 +129,7 @@ Builtin agents load at the lowest priority. Project agents override user agents,
|
|
|
129
129
|
| `code-simplifier` | Clean up recently changed code without changing behavior | `openai/gpt-5.5` | low | read, edit, write, grep, find, ls, bash | **Writer.** Scopes to recently modified code by default; preserves all observable behavior. |
|
|
130
130
|
| `debugger` | Reproduce, diagnose, and fix failing behavior | `openai/gpt-5.5` | high | read, edit, write, grep, find, ls, bash, web_search, fetch_content, get_search_content | **Writer.** Has the `tdd` and `playwright-cli` skills. Inspect-only mode requires an explicit instruction. |
|
|
131
131
|
|
|
132
|
-
Each builtin declares an explicit `model` and `fallbackModels` chain (typically `github-copilot/<same>`, then `anthropic/claude-opus-4-7`, then `github-copilot/claude-opus-4.7`). Override per run with inline config:
|
|
132
|
+
Each builtin declares an explicit `model` and `fallbackModels` chain (typically `github-copilot/<same>`, then `anthropic/claude-opus-4-7`, then `github-copilot/claude-opus-4.7`). The current user-selected model is automatically appended as the last fallback and de-duplicated. Override per run with inline config:
|
|
133
133
|
|
|
134
134
|
```text
|
|
135
135
|
/run codebase-analyzer[model=anthropic/claude-sonnet-4] "Trace the auth flow"
|
|
@@ -88,6 +88,7 @@ interface AsyncExecutionContext {
|
|
|
88
88
|
cwd: string;
|
|
89
89
|
currentSessionId: string;
|
|
90
90
|
currentModelProvider?: string;
|
|
91
|
+
currentModel?: string;
|
|
91
92
|
}
|
|
92
93
|
|
|
93
94
|
interface AsyncChainParams {
|
|
@@ -317,7 +318,7 @@ export function executeAsyncChain(
|
|
|
317
318
|
cwd: stepCwd,
|
|
318
319
|
model,
|
|
319
320
|
thinking: resolveEffectiveThinking(model, a.thinking),
|
|
320
|
-
modelCandidates: buildModelCandidates(behavior.model ?? a.model, a.fallbackModels, availableModels, ctx.currentModelProvider).map((candidate) =>
|
|
321
|
+
modelCandidates: buildModelCandidates(behavior.model ?? a.model, a.fallbackModels, availableModels, ctx.currentModelProvider, ctx.currentModel).map((candidate) =>
|
|
321
322
|
applyThinkingSuffix(candidate, a.thinking),
|
|
322
323
|
),
|
|
323
324
|
tools: a.tools,
|
|
@@ -544,7 +545,7 @@ export function executeAsyncSingle(
|
|
|
544
545
|
cwd: runnerCwd,
|
|
545
546
|
model,
|
|
546
547
|
thinking: resolveEffectiveThinking(model, agentConfig.thinking),
|
|
547
|
-
modelCandidates: buildModelCandidates(params.modelOverride ?? agentConfig.model, agentConfig.fallbackModels, availableModels, ctx.currentModelProvider).map((candidate) =>
|
|
548
|
+
modelCandidates: buildModelCandidates(params.modelOverride ?? agentConfig.model, agentConfig.fallbackModels, availableModels, ctx.currentModelProvider, ctx.currentModel).map((candidate) =>
|
|
548
549
|
applyThinkingSuffix(candidate, agentConfig.thinking),
|
|
549
550
|
),
|
|
550
551
|
tools: agentConfig.tools,
|
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
MAX_CONCURRENCY,
|
|
57
57
|
resolveChildMaxSubagentDepth,
|
|
58
58
|
} from "../../shared/types.ts";
|
|
59
|
-
import { resolveModelCandidate } from "../shared/model-fallback.ts";
|
|
59
|
+
import { currentModelFullId, resolveModelCandidate } from "../shared/model-fallback.ts";
|
|
60
60
|
import { validateFileOnlyOutputMode } from "../shared/single-output.ts";
|
|
61
61
|
|
|
62
62
|
interface ChainExecutionDetailsInput {
|
|
@@ -247,6 +247,7 @@ async function runParallelChainTasks(input: ParallelChainRunInput): Promise<Sing
|
|
|
247
247
|
modelOverride: effectiveModel,
|
|
248
248
|
availableModels: input.availableModels,
|
|
249
249
|
preferredModelProvider: input.ctx.model?.provider,
|
|
250
|
+
currentModel: currentModelFullId(input.ctx.model),
|
|
250
251
|
skills: behavior.skills === false ? [] : behavior.skills,
|
|
251
252
|
onUpdate: input.onUpdate
|
|
252
253
|
? (progressUpdate) => {
|
|
@@ -796,6 +797,7 @@ export async function executeChain(params: ChainExecutionParams): Promise<ChainE
|
|
|
796
797
|
modelOverride: effectiveModel,
|
|
797
798
|
availableModels,
|
|
798
799
|
preferredModelProvider: ctx.model?.provider,
|
|
800
|
+
currentModel: currentModelFullId(ctx.model),
|
|
799
801
|
skills: behavior.skills === false ? [] : behavior.skills,
|
|
800
802
|
onUpdate: onUpdate
|
|
801
803
|
? (p) => {
|
|
@@ -13,7 +13,7 @@ import { handleManagementAction } from "../../agents/agent-management.ts";
|
|
|
13
13
|
import { buildDoctorReport } from "../../extension/doctor.ts";
|
|
14
14
|
import { clearPendingForegroundControlNotices } from "../../extension/control-notices.ts";
|
|
15
15
|
import { runSync } from "./execution.ts";
|
|
16
|
-
import { resolveModelCandidate } from "../shared/model-fallback.ts";
|
|
16
|
+
import { currentModelFullId, resolveModelCandidate } from "../shared/model-fallback.ts";
|
|
17
17
|
import { aggregateParallelOutputs } from "../shared/parallel-utils.ts";
|
|
18
18
|
import { recordRun } from "../shared/run-history.ts";
|
|
19
19
|
import {
|
|
@@ -481,6 +481,7 @@ async function resumeAsyncRun(input: {
|
|
|
481
481
|
cwd: input.requestCwd,
|
|
482
482
|
currentSessionId: input.deps.state.currentSessionId,
|
|
483
483
|
currentModelProvider: input.ctx.model?.provider,
|
|
484
|
+
currentModel: currentModelFullId(input.ctx.model),
|
|
484
485
|
},
|
|
485
486
|
cwd: effectiveCwd,
|
|
486
487
|
maxOutput: input.params.maxOutput,
|
|
@@ -891,6 +892,7 @@ function runAsyncPath(data: ExecutionContextData, deps: ExecutorDeps): AgentTool
|
|
|
891
892
|
cwd: ctx.cwd,
|
|
892
893
|
currentSessionId: deps.state.currentSessionId!,
|
|
893
894
|
currentModelProvider: ctx.model?.provider,
|
|
895
|
+
currentModel: currentModelFullId(ctx.model),
|
|
894
896
|
};
|
|
895
897
|
const availableModels: ModelInfo[] = ctx.modelRegistry.getAvailable().map(toModelInfo);
|
|
896
898
|
const currentMaxSubagentDepth = resolveCurrentMaxSubagentDepth(deps.config.maxSubagentDepth);
|
|
@@ -1081,6 +1083,7 @@ async function runChainPath(data: ExecutionContextData, deps: ExecutorDeps): Pro
|
|
|
1081
1083
|
cwd: ctx.cwd,
|
|
1082
1084
|
currentSessionId: deps.state.currentSessionId!,
|
|
1083
1085
|
currentModelProvider: ctx.model?.provider,
|
|
1086
|
+
currentModel: currentModelFullId(ctx.model),
|
|
1084
1087
|
};
|
|
1085
1088
|
const asyncChain = wrapChainTasksForFork(chainResult.requestedAsync.chain, params.context);
|
|
1086
1089
|
return executeAsyncChain(id, {
|
|
@@ -1314,6 +1317,7 @@ async function runForegroundParallelTasks(input: ForegroundParallelRunInput): Pr
|
|
|
1314
1317
|
modelOverride: input.modelOverrides[index],
|
|
1315
1318
|
availableModels: input.availableModels,
|
|
1316
1319
|
preferredModelProvider: input.ctx.model?.provider,
|
|
1320
|
+
currentModel: currentModelFullId(input.ctx.model),
|
|
1317
1321
|
skills: effectiveSkills === false ? [] : effectiveSkills,
|
|
1318
1322
|
onUpdate: input.onUpdate
|
|
1319
1323
|
? (progressUpdate) => {
|
|
@@ -1490,6 +1494,7 @@ async function runParallelPath(data: ExecutionContextData, deps: ExecutorDeps):
|
|
|
1490
1494
|
cwd: ctx.cwd,
|
|
1491
1495
|
currentSessionId: deps.state.currentSessionId!,
|
|
1492
1496
|
currentModelProvider: ctx.model?.provider,
|
|
1497
|
+
currentModel: currentModelFullId(ctx.model),
|
|
1493
1498
|
};
|
|
1494
1499
|
const parallelTasks = tasks.map((t, i) => {
|
|
1495
1500
|
const taskText = params.context === "fork" ? wrapForkTask(taskTexts[i]!) : taskTexts[i]!;
|
|
@@ -1767,6 +1772,7 @@ async function runSinglePath(data: ExecutionContextData, deps: ExecutorDeps): Pr
|
|
|
1767
1772
|
cwd: ctx.cwd,
|
|
1768
1773
|
currentSessionId: deps.state.currentSessionId!,
|
|
1769
1774
|
currentModelProvider: ctx.model?.provider,
|
|
1775
|
+
currentModel: currentModelFullId(ctx.model),
|
|
1770
1776
|
};
|
|
1771
1777
|
return executeAsyncSingle(id, {
|
|
1772
1778
|
agent: params.agent!,
|
|
@@ -1873,6 +1879,7 @@ async function runSinglePath(data: ExecutionContextData, deps: ExecutorDeps): Pr
|
|
|
1873
1879
|
modelOverride,
|
|
1874
1880
|
availableModels,
|
|
1875
1881
|
preferredModelProvider: currentProvider,
|
|
1882
|
+
currentModel: currentModelFullId(ctx.model),
|
|
1876
1883
|
skills: effectiveSkills,
|
|
1877
1884
|
});
|
|
1878
1885
|
if (foregroundControl?.currentIndex === 0) {
|
|
@@ -44,10 +44,11 @@ export function buildModelCandidates(
|
|
|
44
44
|
fallbackModels: string[] | undefined,
|
|
45
45
|
availableModels: AvailableModelInfo[] | undefined,
|
|
46
46
|
preferredProvider?: string,
|
|
47
|
+
currentModel?: string,
|
|
47
48
|
): string[] {
|
|
48
49
|
const seen = new Set<string>();
|
|
49
50
|
const candidates: string[] = [];
|
|
50
|
-
for (const raw of [primaryModel, ...(fallbackModels ?? [])]) {
|
|
51
|
+
for (const raw of [primaryModel, ...(fallbackModels ?? []), currentModel]) {
|
|
51
52
|
if (!raw) continue;
|
|
52
53
|
const normalized = resolveModelCandidate(raw.trim(), availableModels, preferredProvider);
|
|
53
54
|
if (!normalized || seen.has(normalized)) continue;
|
|
@@ -57,6 +58,11 @@ export function buildModelCandidates(
|
|
|
57
58
|
return candidates;
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
export function currentModelFullId(model: { provider: string; id: string } | undefined): string | undefined {
|
|
62
|
+
if (!model) return undefined;
|
|
63
|
+
return `${String(model.provider)}/${model.id}`;
|
|
64
|
+
}
|
|
65
|
+
|
|
60
66
|
const RETRYABLE_MODEL_FAILURE_PATTERNS = [
|
|
61
67
|
/rate\s*limit/i,
|
|
62
68
|
/too many requests/i,
|
|
@@ -484,6 +484,8 @@ export interface RunSyncOptions {
|
|
|
484
484
|
availableModels?: Array<{ provider: string; id: string; fullId: string }>;
|
|
485
485
|
/** Current parent-session provider to prefer for ambiguous bare model ids */
|
|
486
486
|
preferredModelProvider?: string;
|
|
487
|
+
/** Current parent-session model to try after configured fallback models */
|
|
488
|
+
currentModel?: string;
|
|
487
489
|
/** Skills to inject (overrides agent default if provided) */
|
|
488
490
|
skills?: string[];
|
|
489
491
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/web-access",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3-0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for web search, URL fetching, GitHub repo cloning, PDF/video extraction.",
|
|
6
6
|
"contributors": [
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@mozilla/readability": "^0.
|
|
48
|
+
"@mozilla/readability": "^0.6.0",
|
|
49
49
|
"linkedom": "^0.16.0",
|
|
50
50
|
"p-limit": "^6.1.0",
|
|
51
51
|
"turndown": "^7.2.0",
|
|
@@ -190,6 +190,7 @@ export default defineWorkflow("deep-research-codebase")
|
|
|
190
190
|
let plannerModelConfig = {
|
|
191
191
|
model: "openai/gpt-5.5",
|
|
192
192
|
fallbackModels: [
|
|
193
|
+
"openai-codex/gpt-5.5",
|
|
193
194
|
"github-copilot/gpt-5.5",
|
|
194
195
|
"anthropic/claude-opus-4-7",
|
|
195
196
|
"github-copilot/claude-opus-4.7",
|
|
@@ -201,6 +202,7 @@ export default defineWorkflow("deep-research-codebase")
|
|
|
201
202
|
let explorerModelConfig = {
|
|
202
203
|
model: "openai/gpt-5.4-mini",
|
|
203
204
|
fallbackModels: [
|
|
205
|
+
"openai-codex/gpt-5.4-mini",
|
|
204
206
|
"github-copilot/gpt-5.4-mini",
|
|
205
207
|
"anthropic/claude-haiku-4-5",
|
|
206
208
|
"github-copilot/claude-haiku-4.5",
|
|
@@ -157,6 +157,7 @@ export default defineWorkflow("ralph")
|
|
|
157
157
|
let plannerModelConfig = {
|
|
158
158
|
model: "openai/gpt-5.5",
|
|
159
159
|
fallbackModels: [
|
|
160
|
+
"openai-codex/gpt-5.5",
|
|
160
161
|
"github-copilot/gpt-5.5",
|
|
161
162
|
"anthropic/claude-opus-4-7",
|
|
162
163
|
"github-copilot/claude-opus-4.7",
|
|
@@ -168,6 +169,7 @@ export default defineWorkflow("ralph")
|
|
|
168
169
|
let orchestratorModelConfig = {
|
|
169
170
|
model: "openai/gpt-5.5",
|
|
170
171
|
fallbackModels: [
|
|
172
|
+
"openai-codex/gpt-5.5",
|
|
171
173
|
"github-copilot/gpt-5.5",
|
|
172
174
|
"anthropic/claude-sonnet-4-6",
|
|
173
175
|
"github-copilot/claude-sonnet-4.6",
|
|
@@ -179,6 +181,7 @@ export default defineWorkflow("ralph")
|
|
|
179
181
|
let simplifierModelConfig = {
|
|
180
182
|
model: "openai/gpt-5.5",
|
|
181
183
|
fallbackModels: [
|
|
184
|
+
"openai-codex/gpt-5.5",
|
|
182
185
|
"github-copilot/gpt-5.5",
|
|
183
186
|
"anthropic/claude-sonnet-4-6",
|
|
184
187
|
"github-copilot/claude-sonnet-4.6",
|
|
@@ -190,6 +193,7 @@ export default defineWorkflow("ralph")
|
|
|
190
193
|
let reviewerModelConfig = {
|
|
191
194
|
model: "openai/gpt-5.5",
|
|
192
195
|
fallbackModels: [
|
|
196
|
+
"openai-codex/gpt-5.5",
|
|
193
197
|
"github-copilot/gpt-5.5",
|
|
194
198
|
"anthropic/claude-opus-4-7",
|
|
195
199
|
"github-copilot/claude-opus-4.7",
|
|
@@ -201,6 +205,7 @@ export default defineWorkflow("ralph")
|
|
|
201
205
|
let explorerModelConfig = {
|
|
202
206
|
model: "openai/gpt-5.4-mini",
|
|
203
207
|
fallbackModels: [
|
|
208
|
+
"openai-codex/gpt-5.4-mini",
|
|
204
209
|
"github-copilot/gpt-5.4-mini",
|
|
205
210
|
"anthropic/claude-haiku-4-5",
|
|
206
211
|
"github-copilot/claude-haiku-4.5",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/atomic",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3-0",
|
|
4
4
|
"description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"piConfig": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@earendil-works/pi-tui": "^0.74.0",
|
|
48
48
|
"@modelcontextprotocol/ext-apps": "^1.2.2",
|
|
49
49
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
50
|
-
"@mozilla/readability": "^0.
|
|
50
|
+
"@mozilla/readability": "^0.6.0",
|
|
51
51
|
"@silvia-odwyer/photon-node": "^0.3.4",
|
|
52
52
|
"chalk": "^5.5.0",
|
|
53
53
|
"diff": "^8.0.2",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"typebox": "^1.1.24",
|
|
66
66
|
"undici": "^7.19.1",
|
|
67
67
|
"unpdf": "^1.6.2",
|
|
68
|
-
"yaml": "^2.
|
|
68
|
+
"yaml": "^2.9.0",
|
|
69
69
|
"zod": "^3.25.0 || ^4.0.0"
|
|
70
70
|
},
|
|
71
71
|
"overrides": {
|