From 6b51315eb12eac2d20564346b0caf892c6b16608 Mon Sep 17 00:00:00 2001 From: Eyejoker Date: Fri, 29 May 2026 03:56:19 +0900 Subject: [PATCH] chore: update Claude agent SDK --- .env.example | 6 +++--- apps/dashboard/src/i18n.ts | 16 +++++++------- apps/dashboard/src/settings-options.test.ts | 13 +++++++++++ apps/dashboard/src/settings-options.ts | 2 +- docs/configuration.md | 7 +++--- runners/agent-runner/bun.lock | 24 ++++++++++----------- runners/agent-runner/package.json | 4 ++-- src/message-agent-executor.test.ts | 2 +- 8 files changed, 44 insertions(+), 30 deletions(-) diff --git a/.env.example b/.env.example index dd6ace4..80b00b3 100644 --- a/.env.example +++ b/.env.example @@ -23,7 +23,7 @@ GROQ_API_KEY= # Voice transcription (Groq Whisper, free: ASSISTANT_NAME=claude # Trigger name (@claude) # --- Claude model --- -CLAUDE_MODEL=claude-opus-4-7 # Claude model +CLAUDE_MODEL=claude-opus-4-8 # Claude model CLAUDE_EFFORT=high # Claude effort level CLAUDE_THINKING=adaptive # Claude thinking mode @@ -81,11 +81,11 @@ STATUS_CHANNEL_ID= # Discord channel ID for live status updat # OWNER_EFFORT=xhigh # Owner effort override # OWNER_FALLBACK_ENABLED=true # Fall back to codex on Claude failure (default: true) # -# REVIEWER_MODEL=claude-opus-4-7 # Reviewer model override +# REVIEWER_MODEL=claude-opus-4-8 # Reviewer model override # REVIEWER_EFFORT=high # Reviewer effort override # REVIEWER_FALLBACK_ENABLED=true # Fall back to codex on Claude failure (default: true) # -# ARBITER_MODEL=claude-sonnet-4-6 # Arbiter model override +# ARBITER_MODEL=claude-opus-4-8 # Arbiter model override # ARBITER_EFFORT=high # Arbiter effort override # ARBITER_FALLBACK_ENABLED=true # Fall back to codex on Claude failure (default: true) diff --git a/apps/dashboard/src/i18n.ts b/apps/dashboard/src/i18n.ts index 9752662..906e681 100644 --- a/apps/dashboard/src/i18n.ts +++ b/apps/dashboard/src/i18n.ts @@ -531,7 +531,7 @@ export const messages = { modelDefault: '기본값 (.env 상속)', modelCustom: '직접 입력…', modelCustomLabel: '모델 ID', - modelPlaceholder: '예: gpt-5.5, claude-opus-4-7', + modelPlaceholder: '예: gpt-5.5, claude-opus-4-8', groupCodex: 'Codex', groupClaude: 'Claude', groupCustom: '사용자 지정', @@ -561,7 +561,7 @@ export const messages = { '~/.codex/config.toml [features].fast_mode — GPT 5.5 등에서 응답 속도를 높입니다. 사용량이 더 듭니다.', claudeFast: 'Claude', claudeFastHint: - '~/.claude/settings.json fastMode — Opus 4.x(4.6·4.7 등)에서 세션 settings.json으로 동기화됩니다.', + '~/.claude/settings.json fastMode — Opus 4.8에서 세션 settings.json으로 동기화됩니다.', fastModeApplyHint: '스택 재시작 없이 다음 Codex/Claude 작업부터 적용됩니다.', goal: 'Goals (/goal)', @@ -964,7 +964,7 @@ export const messages = { modelDefault: 'Default (.env)', modelCustom: 'Custom…', modelCustomLabel: 'Model ID', - modelPlaceholder: 'e.g. gpt-5.5, claude-opus-4-7', + modelPlaceholder: 'e.g. gpt-5.5, claude-opus-4-8', groupCodex: 'Codex', groupClaude: 'Claude', groupCustom: 'Custom', @@ -994,7 +994,7 @@ export const messages = { '~/.codex/config.toml [features].fast_mode — faster responses on GPT 5.5 and newer; higher usage.', claudeFast: 'Claude', claudeFastHint: - '~/.claude/settings.json fastMode — synced into session settings.json for Opus 4.x (4.6, 4.7, …).', + '~/.claude/settings.json fastMode — synced into session settings.json for Opus 4.8.', fastModeApplyHint: 'Applies on the next Codex/Claude run. No stack restart required.', goal: 'Goals (/goal)', @@ -1393,7 +1393,7 @@ export const messages = { modelDefault: '默认 (.env)', modelCustom: '自定义…', modelCustomLabel: '模型 ID', - modelPlaceholder: '例如 gpt-5.5, claude-opus-4-7', + modelPlaceholder: '例如 gpt-5.5, claude-opus-4-8', groupCodex: 'Codex', groupClaude: 'Claude', groupCustom: '自定义', @@ -1421,7 +1421,7 @@ export const messages = { '~/.codex/config.toml [features].fast_mode — GPT 5.5 等更快响应,用量更高。', claudeFast: 'Claude', claudeFastHint: - '~/.claude/settings.json fastMode — 同步到会话 settings.json,适用于 Opus 4.x(4.6、4.7 等)。', + '~/.claude/settings.json fastMode — 同步到会话 settings.json,适用于 Opus 4.8。', fastModeApplyHint: '无需重启栈,下次 Codex/Claude 任务起生效。', goal: 'Goals (/goal)', goalHint: @@ -1821,7 +1821,7 @@ export const messages = { modelDefault: 'デフォルト (.env)', modelCustom: 'カスタム…', modelCustomLabel: 'モデル ID', - modelPlaceholder: '例: gpt-5.5, claude-opus-4-7', + modelPlaceholder: '例: gpt-5.5, claude-opus-4-8', groupCodex: 'Codex', groupClaude: 'Claude', groupCustom: 'カスタム', @@ -1851,7 +1851,7 @@ export const messages = { '~/.codex/config.toml [features].fast_mode — GPT 5.5 などで応答を高速化。使用量は増えます。', claudeFast: 'Claude', claudeFastHint: - '~/.claude/settings.json fastMode — セッション settings.json に同期。Opus 4.x(4.6・4.7 等)向け。', + '~/.claude/settings.json fastMode — セッション settings.json に同期。Opus 4.8 向け。', fastModeApplyHint: 'スタック再起動不要。次の Codex/Claude 実行から反映されます。', goal: 'Goals (/goal)', diff --git a/apps/dashboard/src/settings-options.test.ts b/apps/dashboard/src/settings-options.test.ts index cd4a950..68483cd 100644 --- a/apps/dashboard/src/settings-options.test.ts +++ b/apps/dashboard/src/settings-options.test.ts @@ -1,9 +1,12 @@ import { describe, expect, it } from 'vitest'; import { + PRESET_MODELS, + buildModelOptions, effortValuesForAgent, formatEffortOption, isEffortSupported, + isPresetModel, } from './settings-options'; describe('settings-options effort', () => { @@ -29,3 +32,13 @@ describe('settings-options effort', () => { expect(formatEffortOption('', '기본값')).toBe('기본값'); }); }); + +describe('settings-options models', () => { + it('offers Claude Opus 4.8 as the only Claude preset', () => { + expect(PRESET_MODELS.claude).toEqual(['claude-opus-4-8']); + expect(buildModelOptions('')).toContain('claude-opus-4-8'); + expect(isPresetModel('claude-opus-4-8')).toBe(true); + expect(isPresetModel('claude-opus-4-7')).toBe(false); + expect(isPresetModel('claude-opus-4-6')).toBe(false); + }); +}); diff --git a/apps/dashboard/src/settings-options.ts b/apps/dashboard/src/settings-options.ts index b795f4b..7d91d69 100644 --- a/apps/dashboard/src/settings-options.ts +++ b/apps/dashboard/src/settings-options.ts @@ -1,6 +1,6 @@ export const PRESET_MODELS = { codex: ['gpt-5.5', 'gpt-5.5-pro', 'gpt-5.4', 'gpt-5.3-codex'], - claude: ['claude-opus-4-7', 'claude-opus-4-6', 'claude-sonnet-4-6'], + claude: ['claude-opus-4-8'], } as const; export type AgentType = 'claude-code' | 'codex'; diff --git a/docs/configuration.md b/docs/configuration.md index 1e7f473..4fc1cd3 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -30,7 +30,8 @@ REVIEWER_AGENT_TYPE=claude-code # ARBITER_AGENT_TYPE=claude-code # provider 기본 모델 -CLAUDE_MODEL=claude-opus-4-7 +# 공식 Claude API 모델 ID입니다. +CLAUDE_MODEL=claude-opus-4-8 CLAUDE_EFFORT=high CLAUDE_THINKING=adaptive CODEX_MODEL=gpt-5.5 @@ -41,11 +42,11 @@ OWNER_MODEL=gpt-5.5 OWNER_EFFORT=xhigh OWNER_FALLBACK_ENABLED=true -REVIEWER_MODEL=claude-opus-4-7 +REVIEWER_MODEL=claude-opus-4-8 REVIEWER_EFFORT=high REVIEWER_FALLBACK_ENABLED=true -ARBITER_MODEL=claude-sonnet-4-6 +ARBITER_MODEL=claude-opus-4-8 ARBITER_EFFORT=high ARBITER_FALLBACK_ENABLED=true ``` diff --git a/runners/agent-runner/bun.lock b/runners/agent-runner/bun.lock index 2a675d6..d6166c7 100644 --- a/runners/agent-runner/bun.lock +++ b/runners/agent-runner/bun.lock @@ -5,8 +5,8 @@ "": { "name": "ejclaw-agent-runner", "dependencies": { - "@anthropic-ai/claude-agent-sdk": "0.3.149", - "@anthropic-ai/sdk": "0.98.0", + "@anthropic-ai/claude-agent-sdk": "0.3.153", + "@anthropic-ai/sdk": "0.100.0", "@modelcontextprotocol/sdk": "1.29.0", "cron-parser": "^5.0.0", "ejclaw-runners-shared": "file:../shared", @@ -19,25 +19,25 @@ }, }, "packages": { - "@anthropic-ai/claude-agent-sdk": ["@anthropic-ai/claude-agent-sdk@0.3.149", "", { "optionalDependencies": { "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.149", "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.149", "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.149", "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.149", "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.149", "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.149", "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.149", "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.149" }, "peerDependencies": { "@anthropic-ai/sdk": ">=0.93.0", "@modelcontextprotocol/sdk": "^1.29.0", "zod": "^4.0.0" } }, "sha512-ww8KgEA0SHo39C2XEmHPl1jK8qoumpeUNVOKf6Og0BNfocnwZspC+KNd+x3RyTjREgzJyHpafqlGdCQRrhI7xw=="], + "@anthropic-ai/claude-agent-sdk": ["@anthropic-ai/claude-agent-sdk@0.3.153", "", { "optionalDependencies": { "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.153", "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.153", "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.153", "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.153", "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.153", "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.153", "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.153", "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.153" }, "peerDependencies": { "@anthropic-ai/sdk": ">=0.93.0", "@modelcontextprotocol/sdk": "^1.29.0", "zod": "^4.0.0" } }, "sha512-+WYWQ5ih2dOuiJY4yql5pje3w8iA+aS7eZXJSFo6LZxmEiH4nV4n/fjhJCWPcqyo7TdvhAjS2cPqwIslNw3c7A=="], - "@anthropic-ai/claude-agent-sdk-darwin-arm64": ["@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.149", "", { "os": "darwin", "cpu": "arm64" }, "sha512-dcUEASmmIeoWs3pLhg8H0jukh9q/Y5nQjW44uS8kzw5i5ILCx6OPZL6EF/fN1Gr02WHen55E8ib6gi8BwW+gZA=="], + "@anthropic-ai/claude-agent-sdk-darwin-arm64": ["@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.153", "", { "os": "darwin", "cpu": "arm64" }, "sha512-4K2K/n/qikp24ufO38owSEj5RPMWjBmf83BSUxLlzOhOXt7dHXs1CitmY9ZYM58Wmn3qhJs9DaS//ptO1siskQ=="], - "@anthropic-ai/claude-agent-sdk-darwin-x64": ["@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.149", "", { "os": "darwin", "cpu": "x64" }, "sha512-m71JnignoO90t5ayHcTh1gn3xjDKxsfXhhjXeUD8FpNINadBZNUTi7CmnaSSTDaaE2gP2RZZxYiFGVeGAvGaYA=="], + "@anthropic-ai/claude-agent-sdk-darwin-x64": ["@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.153", "", { "os": "darwin", "cpu": "x64" }, "sha512-kY5DPMAK+ZkphoIUjOiP6sSB57Lw2H1RUNK2HVEDowagbl9T47DSbkjYE4NWYqfy22aebPj02VAIbFfFmYxnMw=="], - "@anthropic-ai/claude-agent-sdk-linux-arm64": ["@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.149", "", { "os": "linux", "cpu": "arm64" }, "sha512-tugae9TmfTRaYJLYb34mVMNB6nd3r1tOmxOE1b078wGGrInigPJZTA3VTgk247oBHfbMgA6CHBA0csSDRCkoPA=="], + "@anthropic-ai/claude-agent-sdk-linux-arm64": ["@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.153", "", { "os": "linux", "cpu": "arm64" }, "sha512-XoIP6xJn+QlfBta96yfxdtaeJ/BstA2S9abZJYeWs/wwNjQNWs83repg/v1VPuGn7i44teSzLtzoAv9t1w4Ybg=="], - "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": ["@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.149", "", { "os": "linux", "cpu": "arm64" }, "sha512-TaXG46Qi12mu+ublo6Vmci0XyOiWpxWJTd4vkmPVAqMqOrebHOx5F2FCT3bvTyZgm+BhMCE8N0V1tuto+dG96w=="], + "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": ["@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.153", "", { "os": "linux", "cpu": "arm64" }, "sha512-5fD6MagyX+1tZdpVjZ6rN178pR7K10c+JyTsEh4HUJR3tnVO9uZYcmEcsKLX1TjWX+mz5+TW9rwDP5AMHXsjNA=="], - "@anthropic-ai/claude-agent-sdk-linux-x64": ["@anthropic-ai/claude-agent-sdk-linux-x64@0.3.149", "", { "os": "linux", "cpu": "x64" }, "sha512-ZRhy/WekfHk0xsVjPpbBXk/4/qCgbgF3+JUEBMbV9nZH5CqHe5QnzREExlm/1HrcV9s3rKcsGuDNLdtvMwk80g=="], + "@anthropic-ai/claude-agent-sdk-linux-x64": ["@anthropic-ai/claude-agent-sdk-linux-x64@0.3.153", "", { "os": "linux", "cpu": "x64" }, "sha512-U2eY8iBLF0vrvuHnh33UA3LA/aIVgSk2Pw5KY7N5lH5fYzcnDBoT8bG32lelQIoaUDY0znOWIc0vqN5/Yih51w=="], - "@anthropic-ai/claude-agent-sdk-linux-x64-musl": ["@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.149", "", { "os": "linux", "cpu": "x64" }, "sha512-FAbwrZ4d/NNLboDCdFuowxF6K9YU5ewftjNl+uAmC9EFWHNLtQ0GfKs3r8+9GH5zZABWb75fj4U0t4d1QoeCwg=="], + "@anthropic-ai/claude-agent-sdk-linux-x64-musl": ["@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.153", "", { "os": "linux", "cpu": "x64" }, "sha512-4o+1RnNAL31iZDDT46AWl/t5lUSVJ5Gq8o2IxPgNBltPHAL3aUmTTDLxjDb+gFVEyegyy9FwK0yPJGpNp4CxKA=="], - "@anthropic-ai/claude-agent-sdk-win32-arm64": ["@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.149", "", { "os": "win32", "cpu": "arm64" }, "sha512-93RfvshOC8aXrsnCP4NOLIRwgp7ihHFiZZtbD0TC8oywqjqPrVo5F+U/rFjIu37pfbKRqbnaBNVkGGjzrUePIw=="], + "@anthropic-ai/claude-agent-sdk-win32-arm64": ["@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.153", "", { "os": "win32", "cpu": "arm64" }, "sha512-GQsZTvf4pJVVAgaXwpN/W7RpO7dtUd3VCM3zxD7RQ1X+Dc8tUNPMWr7JCHEYwrUWiS1jeSjLOsrAuRFopSP43Q=="], - "@anthropic-ai/claude-agent-sdk-win32-x64": ["@anthropic-ai/claude-agent-sdk-win32-x64@0.3.149", "", { "os": "win32", "cpu": "x64" }, "sha512-bCh2rbPtmFDqKcPTq2QybTsqGMlknqIWnderC3mA6xwC/7PQizaLm0JR2EF4UFXdqACdjY+3MPlNdurFfjV03g=="], + "@anthropic-ai/claude-agent-sdk-win32-x64": ["@anthropic-ai/claude-agent-sdk-win32-x64@0.3.153", "", { "os": "win32", "cpu": "x64" }, "sha512-t/+IEFLsp+fY1G5EZhzVBNKI1mm28rPNcyrlJHy3wCbl1aA/Myd7mWnNCRckDGENZz4V7KyqCslLsCt5gT2iPg=="], - "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.98.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1", "standardwebhooks": "^1.0.0" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-N7aXtCvC5g6T1Y4V29lJjceu/zTkVkIZF0jdBvagr0TRFHuKeImffalGWEfqZKrvjH+IQbzJWw6TmSmUzrlMgg=="], + "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.100.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1", "standardwebhooks": "^1.0.0" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-cAm3aXm6qAiHIvHxyIIGd6tVmsD2gDqlc2h0R20ijNUzGgVnIN822bit4mKbF6CkuV7qIrLQIPoAepHEpanrQQ=="], "@babel/runtime": ["@babel/runtime@7.29.2", "", {}, "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="], diff --git a/runners/agent-runner/package.json b/runners/agent-runner/package.json index d64c081..87c07ab 100644 --- a/runners/agent-runner/package.json +++ b/runners/agent-runner/package.json @@ -10,8 +10,8 @@ "start": "bun dist/index.js" }, "dependencies": { - "@anthropic-ai/claude-agent-sdk": "0.3.149", - "@anthropic-ai/sdk": "0.98.0", + "@anthropic-ai/claude-agent-sdk": "0.3.153", + "@anthropic-ai/sdk": "0.100.0", "@modelcontextprotocol/sdk": "1.29.0", "cron-parser": "^5.0.0", "ejclaw-runners-shared": "file:../shared", diff --git a/src/message-agent-executor.test.ts b/src/message-agent-executor.test.ts index d1eef0c..7dcdd6f 100644 --- a/src/message-agent-executor.test.ts +++ b/src/message-agent-executor.test.ts @@ -672,7 +672,7 @@ describe('runAgentForGroup room memory', () => { }); const config = await import('./config.js'); vi.mocked(config.getRoleModelConfig).mockReturnValue({ - model: 'claude-opus-4-6', + model: 'claude-opus-4-8', effort: 'high', fallbackEnabled: true, });