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 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 },