From 45089676d05be026886ac07048c3e97cc561b896 Mon Sep 17 00:00:00 2001 From: Marcel Wege Date: Tue, 8 Sep 2026 13:30:19 +0200 Subject: [PATCH 1/2] fix: price the Claude 5 generation, refresh the default LLM allowlist (0.3.5) omadia core moved its Anthropic catalog to Opus 5 / Sonnet 5 (byte5ai/omadia #1058) and now discovers models live from the vendor API. Two things here still named the previous generation: - usageTelemetry.ts: added exact price entries for claude-opus-5 ($5/$25) and claude-sonnet-5 ($2/$10). Sonnet 5 is CHEAPER than 4.6, so without the exact entry the generic 'sonnet' family fallback would have over-billed it at the old $3/$15 rate. The 4.x entries stay (still billable for pinned deployments). - docker-compose.dev-platform.yaml: DEV_PLATFORM_LLM_ALLOWED_MODELS default now lists the Claude 5 ids first and keeps Opus 4.8; the old `claude-sonnet-4-8` entry never existed as a model id and is gone. This stays an exact-match allowlist of what the CLI reports (a policy input), so it cannot be a class ref. Version 0.3.4 -> 0.3.5 in manifest.yaml, package.json and the lockfile entry (by hand, per scripts/check-lock-sync.mjs). check:lock, typecheck and the plugin test suite pass. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_018UfJ6mYnCjhMb4x2jSNJCW --- docker-compose.dev-platform.yaml | 2 +- package-lock.json | 2 +- packages/plugin/manifest.yaml | 2 +- packages/plugin/package.json | 2 +- packages/plugin/src/host/usageTelemetry.ts | 4 ++++ 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docker-compose.dev-platform.yaml b/docker-compose.dev-platform.yaml index 087588a..a0738f7 100644 --- a/docker-compose.dev-platform.yaml +++ b/docker-compose.dev-platform.yaml @@ -73,7 +73,7 @@ services: # instant, silent-to-the-runner 500 with zero tokens spent. Comma-separated, # exact string match (llmProxy.ts: `policy.allowedModels.includes(model)`) # against whatever `--model` the CLI actually reports in its init message. - DEV_PLATFORM_LLM_ALLOWED_MODELS: ${DEV_PLATFORM_LLM_ALLOWED_MODELS:-claude-opus-4-8[1m],claude-opus-4-8,claude-sonnet-4-8[1m],claude-sonnet-4-8} + DEV_PLATFORM_LLM_ALLOWED_MODELS: ${DEV_PLATFORM_LLM_ALLOWED_MODELS:-claude-opus-5[1m],claude-opus-5,claude-sonnet-5[1m],claude-sonnet-5,claude-opus-4-8[1m],claude-opus-4-8} # Egress allowlist entries every job gets in ADDITION to the middleware # host + its own repo's forge host (deriveJobPolicy.ts). Absent by # default (config.ts), which is correct for a repo needing no package diff --git a/package-lock.json b/package-lock.json index ff05ce5..b112ac7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5436,7 +5436,7 @@ }, "packages/plugin": { "name": "@omadia/dev-platform", - "version": "0.3.4", + "version": "0.3.5", "license": "MIT", "devDependencies": { "@omadia/dev-platform-plugin-api": "*", diff --git a/packages/plugin/manifest.yaml b/packages/plugin/manifest.yaml index 01fd967..2e43319 100644 --- a/packages/plugin/manifest.yaml +++ b/packages/plugin/manifest.yaml @@ -64,7 +64,7 @@ identity: # settled on (specs/470-dev-platform-plugin/plan.md §4.1). There is no # "platform" kind. kind: "extension" - version: "0.3.4" + version: "0.3.5" domain: "dev-platform" description: "Runs autonomous coding jobs against your GitHub repositories. An agent clones a repo into an isolated runner, drives an LLM through an analyze/plan/implement/review pipeline, and opens a pull request — bounded at every step by human approval gates, a diff policy, a per-job cost budget and an egress allowlist. Ships its own operator UI, HTTP routes, chat tools, background workers and nine database tables it migrates itself. Runners execute on Fly Machines or on local Docker; neither ever sees a long-lived credential. Extracted from omadia core into its own installable plugin (epic byte5ai/omadia#470)." authors: diff --git a/packages/plugin/package.json b/packages/plugin/package.json index a3590f8..57d0066 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,6 +1,6 @@ { "name": "@omadia/dev-platform", - "version": "0.3.4", + "version": "0.3.5", "private": true, "type": "module", "main": "dist/plugin.js", diff --git a/packages/plugin/src/host/usageTelemetry.ts b/packages/plugin/src/host/usageTelemetry.ts index 514d34f..44da92f 100644 --- a/packages/plugin/src/host/usageTelemetry.ts +++ b/packages/plugin/src/host/usageTelemetry.ts @@ -62,10 +62,14 @@ export const CACHE_WRITE_MULTIPLIER = 1.25; /** Exact-id price table. Falls through to family matching for anything else. */ const EXACT_PRICES: Readonly> = { // --- Anthropic (input_tokens excludes cached; multiplier-based cache) ------ + 'claude-opus-5': { inputPerMTok: 5, outputPerMTok: 25 }, 'claude-opus-4-8': { inputPerMTok: 5, outputPerMTok: 25 }, 'claude-opus-4-7': { inputPerMTok: 5, outputPerMTok: 25 }, 'claude-opus-4-6': { inputPerMTok: 5, outputPerMTok: 25 }, 'claude-opus-4-5': { inputPerMTok: 5, outputPerMTok: 25 }, + // Sonnet 5 is CHEAPER than 4.6 — without this exact entry the generic + // 'sonnet' family fallback would over-bill it at the old $3/$15 rate. + 'claude-sonnet-5': { inputPerMTok: 2, outputPerMTok: 10 }, 'claude-sonnet-4-6': { inputPerMTok: 3, outputPerMTok: 15 }, 'claude-sonnet-4-5': { inputPerMTok: 3, outputPerMTok: 15 }, 'claude-haiku-4-5': { inputPerMTok: 1, outputPerMTok: 5 }, From 23bf0e60170ce22062c9d0addf9be75a51a79696 Mon Sep 17 00:00:00 2001 From: Marcel Wege Date: Tue, 8 Sep 2026 15:07:48 +0200 Subject: [PATCH 2/2] ci: --legacy-peer-deps for the core plugin-api toolchain install MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "Build @omadia/plugin-api from the sibling checkout" step has been red on every run since core main moved to vite 8 / vitest 4.1: npm 10.9's arborist walks core's peer-dependency web even under --no-workspaces and crashes in #loadPeerSet ("Cannot read properties of null (reading 'edgesOut')") before typescript is installed. Reproduced locally against core main 9d723e39 and its parent d82b42c3 — unrelated to this PR. The step installs two leaf packages and needs no peer resolution, so --legacy-peer-deps skips the walk; verified locally: install succeeds and `tsc -p packages/plugin-api` emits index.d.ts. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_018UfJ6mYnCjhMb4x2jSNJCW --- .github/workflows/ci.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67b29b7..57e5077 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -99,11 +99,19 @@ jobs: # # plugin-api has no dependencies of its own: typescript + @types/node are # the whole toolchain, which is why core's middleware is never installed. + # + # 3. `--legacy-peer-deps`: even with `--no-workspaces`, npm 10.9's + # arborist still walks the peer-dependency web of core's OWN tree + # when building the ideal tree, and since core moved to vite 8 / + # vitest 4.1 that walk dies inside `#loadPeerSet` with + # "Cannot read properties of null (reading 'edgesOut')" — before a + # single byte of typescript is installed. Nothing here needs peer + # resolution (two leaf packages), so skipping it is the whole fix. - name: Build @omadia/plugin-api from the sibling checkout working-directory: odoo-bot/middleware run: | npm install --ignore-scripts --no-save --no-package-lock --no-workspaces \ - typescript@^6.0.2 @types/node@^25.6.0 + --legacy-peer-deps typescript@^6.0.2 @types/node@^25.6.0 ./node_modules/.bin/tsc -p packages/plugin-api test -f packages/plugin-api/dist/index.d.ts