Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 36 additions & 36 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@
}
},
"dependencies": {
"@anthropic-ai/claude-code": "2.1.285",
"@anthropic-ai/claude-code": "2.1.301",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
Expand Down
8 changes: 4 additions & 4 deletions src/shared/agent-registry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { isKnownModel } from './pricing'
* a miss here costs a broken tab rather than a silent mischarge — still
* worth catching at build time.
*
* Derived from @anthropic-ai/claude-code 2.1.285. Re-derive after
* Derived from @anthropic-ai/claude-code 2.1.301. Re-derive after
* bumping the pin — stop at `;` rather than `]`, or the bracketed
* `sonnet[1m]` entries truncate the array mid-token:
* strings -a node_modules/@anthropic-ai/claude-code-*\/claude \
Expand All @@ -33,13 +33,13 @@ const BUNDLED_CLI_ALIASES = new Set([
'opusplan'
])

/** What each offered alias resolved to under the bundled 2.1.285 binary.
/** What each offered alias resolved to under the bundled 2.1.301 binary.
* `opusplan` is listed at its non-planning model, which is what a normal
* turn bills against. */
const ALIAS_RESOLVES_TO: Record<string, string> = {
opus: 'claude-opus-5-5',
sonnet: 'claude-sonnet-5-5',
haiku: 'claude-haiku-4-5-20251001',
haiku: 'claude-haiku-5-5',
fable: 'claude-fable-5-1',
best: 'claude-fable-5-1',
opusplan: 'claude-sonnet-5-5'
Expand Down Expand Up @@ -72,7 +72,7 @@ describe('CLAUDE_MODEL_ALIASES', () => {
// The alias is never what gets billed — the CLI resolves it and the
// resolved id is what lands in the transcript and reaches priceFor.
// So every alias target needs pricing, or a session silently costs $0.
// Read out of the bundled 2.1.285 binary's `init` event; re-derive
// Read out of the bundled 2.1.301 binary's `init` event; re-derive
// after bumping the pin with:
// claude --model <alias> -p x --output-format stream-json --verbose
for (const resolved of Object.values(ALIAS_RESOLVES_TO)) {
Expand Down
6 changes: 6 additions & 0 deletions src/shared/pricing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ const RATES: Record<string, ModelRate> = {
'claude-sonnet-4-6': { in: 3, out: 15 },
'claude-sonnet-4-5': { in: 3, out: 15 },
'claude-sonnet-4': { in: 3, out: 15 },
// Haiku 5.5 is the only model priced by prompt length: a request whose
// prompt exceeds 100k tokens bills at 5x these rates ($0.50/$2.50). We
// only carry the base tier — rateFor keys off the model id alone and has
// no access to the request's token count, so long-context Haiku sessions
// under-report. Accepted over billing $0 for an unpriced model.
'claude-haiku-5-5': { in: 0.10, out: 0.50 },
'claude-haiku-4-5': { in: 1, out: 5 },
// OpenAI (used by Codex)
'o3': { in: 10, out: 40, reasoning: 40 },
Expand Down
Loading