Skip to content

v1.3.0 — OpenRouter, live pricing, response cache, Claude 5 + GPT-5.6 defaults

Latest

Choose a tag to compare

@0xDarkMatter 0xDarkMatter released this 08 Sep 08:37
· 1 commit to main since this release

Added

  • Per-query cost in API mode (-g / -c): each provider block, the header
    panel and the Completed in footer show the dollar figure derived from the
    OpenRouter catalog and the response's token metrics, and --json gains
    responses.<provider>.cost_usd plus meta.total_cost_usd (providers +
    judge). An unpriceable model is omitted rather than shown as $0.00, and a
    total ending in + means at least one response could not be priced. CLI mode
    shows nothing about dollars because it is subscription-billed. --raw and
    --brief are unchanged.
  • --budget <usd> for batch mode (also CONCLAVE_BATCH_BUDGET): stops
    dispatching new items once cumulative estimated spend reaches the cap,
    lets in-flight items finish, and exits non-zero with a summary naming the
    cap, the completed count and the skipped count. Undispatched items stay out
    of the checkpoint so --resume continues the run. Because cost is measured
    post-hoc, overshoot by up to --workers items is expected.
  • Opt-in response cache: --cache[=TTL] (24h by default) or
    CONCLAVE_CACHE_TTL=<hours> reuses an identical provider response instead of
    paying for it twice; --no-cache overrides an env-enabled cache. The key is
    a sha256 of the mode, provider, model and the full prompt including file and
    stdin context, so any context change is a miss. A hit is tagged (cached) in
    the progress line and provider block, carries cached: true in --json, and
    costs nothing. Judge synthesis is never cached. Works in CLI and API mode;
    batch mode honours it per item. conclave cache stats and
    conclave cache clear manage the store. ADR-011.
  • make check: one gate running go vet, gofmt -l, go test and
    conclave models --check, plus a .github/workflows/check.yml running the
    same on ubuntu-latest and windows-latest.
  • Tests for internal/batch, which had none: item parsing (malformed line
    skipped, missing id assigned, duplicate id dropped), worker fan-out,
    rate-limit retry and retry exhaustion, checkpoint resume, cost estimation
    precedence, and the budget stop, plus checkpoint_test.go for
    load/append/corrupt-line handling.
  • Runtime pricing catalog (internal/pricing): conclave caches OpenRouter's
    public models feed under the user cache directory, refreshes it in the
    background once per CONCLAVE_PRICING_TTL hours (default 24), and never
    blocks a query on the network once a cache exists. CONCLAVE_NO_PRICING=1
    disables it. ADR-009.
  • Model drift warning: when a configured model id is not in the catalog,
    conclave prints one stderr line naming the newest listed alternative and
    proceeds. Suppressed under --json, --raw, -q.
  • conclave models [provider] [--check|--refresh|--json|--all] to inspect
    current ids, context sizes and API prices, and to gate releases
    (--check exits 2 when a compiled default is missing, 3 when the catalog is unreachable).
  • OpenRouter as an API-mode backend: in -g mode any provider token written
    as an OpenRouter slug (deepseek/deepseek-v4-pro, anthropic/claude-opus-5)
    routes through openrouter.ai/api/v1/chat/completions, with the slug as
    both provider name and model id. Works in the provider list and --judge;
    --all never auto-includes OpenRouter models. Key OPENROUTER_API_KEY
    (env, .env, or OS keyring); conclave init and keyring list know it.
    Preflight checks /auth/key and reports an exhausted spend limit as "no
    credit". Drift warnings, display names and batch cost estimates resolve
    the slug directly in the pricing catalog. CLI mode rejects slash tokens
    (API-only, pay-as-you-go). ADR-010.
  • The judge is now resolved (and preflighted) before the panel runs, so a
    judge that cannot be built fails before any provider is paid for. A
    slash-routed judge that is not in the OpenRouter catalog is refused
    outright (--skip-preflight sends it anyway); panel members only warn.
  • Provider lists are trimmed ("a, b" works); malformed slugs (/model,
    model/) and a bare openrouter token get specific errors; an
    OpenRouter error envelope inside an HTTP 200 surfaces as an error.

Fixed

  • Batch mode no longer discards a result that has already been paid for. A
    worker whose send raced a cancelled context threw the result away, so an item
    that had been queried and billed left no output line, no checkpoint entry and
    no trace it had run. Results are now always handed to the writer.

  • An interrupted batch exits non-zero and says how many items were not
    dispatched. It previously exited 0, letting a pipeline read a partial JSONL
    as the complete answer.

  • Provider decorators no longer hide a provider's auth check. Embedding the
    Provider interface does not promote the optional Preflighter, so wrapping
    a provider silently skipped its preflight; every decorator now implements
    Unwrap and RunPreflight follows the chain.

  • The response cache no longer deletes an entry before replacing it, which
    opened a window where a concurrent reader saw nothing, and it no longer leaks
    a temp file when the replacement is refused.

  • --budget warns when it cannot bind: on a non-batch query, where it does
    nothing, and when the pricing catalog is unavailable, where estimates cover
    only the built-in providers.

  • Batch mode no longer checkpoints items that a cancellation stopped from ever
    running, which made --resume skip them permanently.

  • A batch run now keeps a checkpoint even without --resume, so the resume
    hint printed by the budget-stop and interrupt summaries is actually true.

  • Error paths in batch mode now carry the spend they incurred, so a failing
    judge model no longer makes --budget unenforceable.

  • --json gains meta.total_cost_partial, marking a total that understates
    the real spend because something could not be priced. The styled output
    already showed this as a trailing +.

  • Runtime failures no longer print the whole usage block after the error,
    which buried the batch summaries. Argument misuse still shows usage.

  • conclave models --check exits 2 on real drift and 3 when the catalog is
    unreachable, so make check and CI branch on the code instead of matching
    message text.

  • --json now reports the timeout actually in force as
    execution.timeout_seconds. The field existed but was never populated, so it
    always read 0 regardless of -t.

  • gemini CLI mode: pass -p (gemini-cli 0.58 treats a positional prompt as
    interactive mode and never returns headless) and --skip-trust plus
    GEMINI_CLI_TRUST_WORKSPACE=true (exit 55 in any un-trusted directory).
    When gemini-cli still fails on auth (Google retired the free Code Assist
    OAuth tier it defaults to) and a GEMINI_API_KEY is present, the query
    falls back to the direct Gemini API with the same model. Set
    security.auth.selectedType to gemini-api-key in ~/.gemini/settings.json
    to keep the CLI route.

  • Preflight budget raised 2s → 5s; claude/codex cold starts on Windows were
    tripping it. codex login status prints to stderr, which the old check
    never read.

  • Auto-init no longer runs when stdin is not a terminal. A subprocess with
    no provider keys visible used to block forever on an invisible prompt and
    look like a 110s+ hang.

  • openai CLI-mode preflight asks codex login status before demanding
    OPENAI_API_KEY, so ChatGPT-subscription users are no longer rejected.
    Remediation text for gemini/openai now says which mode needs what.

Changed

  • Default models bumped (all verified live 2026-09-08): openai
    gpt-5.5gpt-5.6-sol, claude claude-opus-4-8claude-opus-5,
    grok grok-4-1-fast-reasoninggrok-4.6 (the only id the grok CLI
    offers), glm glm-5.2glm-5.3. Cheap models: grok → grok-build-0.1,
    glm → glm-5.3-flash. conclave models --check now passes clean.
  • Batch-mode cost estimates now use live per-model prices from the catalog;
    the hardcoded table in internal/batch/processor.go is demoted to an
    offline fallback (and its gpt-5-nano input price corrected 0.10 → 0.05).
  • docs/MODEL_REGISTRY.md refreshed against the 2026-09-08 feed: GPT-5.6
    Sol/Terra/Luna, Claude Fable 5 / 5.1, Opus 5, Sonnet 5, Gemini 3.5–3.8
    Flash, Grok 4.20–4.6 and Build 0.1, GLM 5.3 / 5.3 Flash. Notes that all
    prices are API-mode only. Adds a Drift Watch section: grok-4-1-fast-*
    and glm-4.6v-flashx are no longer listed on OpenRouter.
  • Line endings pinned to LF via .gitattributes for .go, .md, .yml and
    the Makefile, so gofmt agrees on Windows and Linux. A fresh worktree on an
    autocrlf machine can still show CRLF until re-checked out; see
    docs/CHECK_GATE.md landmines.
  • make check enumerates Go files via go list instead of gofmt -l ., which
    recursed into nested .claude/worktrees/* checkouts and failed on other
    sessions' files.
  • Makefile VERSION now tracks the release (it reported 1.1.0 for 1.2.0 code).