[object Object]

← back to Designer Wallcoverings

Update Claude model IDs to claude-opus-4-8 (Opus 4.8 upgrade)

3b1cfa98473ea67b90f09249f2102793592778b8 · 2026-05-29 08:21:25 -0700 · Steve

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 3b1cfa98473ea67b90f09249f2102793592778b8
Author: Steve <steve@designerwallcoverings.com>
Date:   Fri May 29 08:21:25 2026 -0700

    Update Claude model IDs to claude-opus-4-8 (Opus 4.8 upgrade)
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 DW-Agents/dw-agents/DWLegalTeam/legal-agent.ts                 |  2 +-
 DW-Agents/dw-agents/accounting-agent.ts                        |  2 +-
 DW-Agents/dw-agents/agent-accounting/accounting-agent.ts       |  2 +-
 DW-Agents/dw-agents/agent-executive-ceo/ceo-dashboard-agent.ts |  2 +-
 DW-Agents/dw-agents/agent-executive-cfo/cfo-dashboard-agent.ts |  2 +-
 DW-Agents/dw-agents/agent-executive-coo/coo-dashboard-agent.ts |  2 +-
 DW-Agents/dw-agents/agent-executive-cto/cto-dashboard-agent.ts |  2 +-
 .../dw-agents/agent-executive-vp-ops/vp-ops-dashboard-agent.ts |  2 +-
 DW-Agents/dw-agents/agent-legal-team/legal-agent.ts            |  2 +-
 DW-Agents/dw-agents/agent-marketing/marketing-agent.ts         |  8 ++++----
 .../agent-purchasing-office/purchasing-office-agent.ts         |  4 ++--
 .../dw-agents/agent-restart-analyzer/restart-analyzer-agent.ts |  2 +-
 DW-Agents/dw-agents/agent-slack/slack-agent.cjs                |  2 +-
 DW-Agents/dw-agents/agent-slack/slack-agent.js                 |  2 +-
 DW-Agents/dw-agents/agent-slack/slack-agent.ts                 |  2 +-
 .../dw-agents/agent-trend-research/trend-research-agent.ts     | 10 +++++-----
 DW-Agents/dw-agents/agent-zendesk-chat/zendesk-chat-agent.ts   |  2 +-
 DW-Agents/dw-agents/architectural-update-agent.ts              |  4 ++--
 DW-Agents/dw-agents/generate-eod-report.ts                     |  2 +-
 DW-Agents/dw-agents/koroseal-fixed-import.ts                   |  2 +-
 DW-Agents/dw-agents/koroseal-import.ts                         |  2 +-
 DW-Agents/dw-agents/marketing-agent.ts                         |  8 ++++----
 DW-Agents/dw-agents/master-hub.ts                              |  4 ++--
 DW-Agents/dw-agents/purchasing-office-agent.ts                 |  4 ++--
 DW-Agents/dw-agents/trend-research-agent.ts                    | 10 +++++-----
 DW-Agents/dw-agents/zendesk-chat-agent.ts                      |  2 +-
 DW-Agents/slack-claude-bot/server-debug.js                     |  2 +-
 DW-Agents/slack-claude-bot/server-socket.js                    |  2 +-
 DW-Agents/slack-claude-bot/server.js                           |  2 +-
 .../app/api/interior-designer-tags/route.ts                    |  2 +-
 .../ImportNewSkufromURL/app/api/vendor-chat/route.ts           |  2 +-
 DW-Programming/ImportNewSkufromURL/check-single-product.ts     |  2 +-
 DW-Programming/ImportNewSkufromURL/dwjs-ai-retag.ts            |  2 +-
 DW-Programming/ImportNewSkufromURL/fix-xpf-products.ts         |  2 +-
 DW-Programming/ImportNewSkufromURL/lib/extract.ts              | 10 +++++-----
 DW-Programming/ImportNewSkufromURL/lib/private-label-ai.ts     |  4 ++--
 DW-Programming/ImportNewSkufromURL/lib/settlement-checker.ts   |  2 +-
 .../ImportNewSkufromURL/scripts/koroseal-enrichment.ts         |  2 +-
 .../ImportNewSkufromURL/update-lincrusta-products.ts           |  2 +-
 DW-Programming/ImportNewSkufromURL/verify-red-batch.ts         |  2 +-
 DW-Programming/ImportNewSkufromURL/verify-red-images.ts        |  2 +-
 DW-Programming/KravetDesignTagger/server.js                    |  2 +-
 DW-Programming/RemoveDuplicatesInShopify/auto-tag-groups.js    |  2 +-
 DW-Programming/RemoveDuplicatesInShopify/recrawl-all-tags.js   |  2 +-
 DW-Programming/RemoveDuplicatesInShopify/server.js             |  2 +-
 DW-Programming/ThibautTagger/server.js                         |  2 +-
 DW-Programming/architectural-updater/lib/update-engine.js      |  2 +-
 DW-Programming/legal-compliance-checker-9878.ts                |  4 ++--
 DW-Programming/schumacher-dwsw-full-updater.ts                 |  2 +-
 DW-Programming/schumacher-dwsw-validator.ts                    |  2 +-
 DW-Programming/update-specific-schumacher.ts                   |  2 +-
 51 files changed, 75 insertions(+), 75 deletions(-)

diff --git a/DW-Agents/dw-agents/DWLegalTeam/legal-agent.ts b/DW-Agents/dw-agents/DWLegalTeam/legal-agent.ts
index a069e608..63e904f6 100644
--- a/DW-Agents/dw-agents/DWLegalTeam/legal-agent.ts
+++ b/DW-Agents/dw-agents/DWLegalTeam/legal-agent.ts
@@ -2067,7 +2067,7 @@ ANALYSIS:
 [Detailed explanation of your findings]`;
 
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-5-20250929',
+      model: 'claude-opus-4-8',
       max_tokens: 2000,
       messages: [
         {
diff --git a/DW-Agents/dw-agents/accounting-agent.ts b/DW-Agents/dw-agents/accounting-agent.ts
index 0fa09292..683031d7 100644
--- a/DW-Agents/dw-agents/accounting-agent.ts
+++ b/DW-Agents/dw-agents/accounting-agent.ts
@@ -1063,7 +1063,7 @@ When users ask about specific financial data, provide helpful summaries and acti
 Be professional, accurate, and provide clear financial guidance.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       system: systemPrompt,
       messages: req.session.chatHistory
diff --git a/DW-Agents/dw-agents/agent-accounting/accounting-agent.ts b/DW-Agents/dw-agents/agent-accounting/accounting-agent.ts
index aaf27702..ab610573 100644
--- a/DW-Agents/dw-agents/agent-accounting/accounting-agent.ts
+++ b/DW-Agents/dw-agents/agent-accounting/accounting-agent.ts
@@ -1026,7 +1026,7 @@ When users ask about specific financial data, provide helpful summaries and acti
 Be professional, accurate, and provide clear financial guidance.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       system: systemPrompt,
       messages: req.session.chatHistory
diff --git a/DW-Agents/dw-agents/agent-executive-ceo/ceo-dashboard-agent.ts b/DW-Agents/dw-agents/agent-executive-ceo/ceo-dashboard-agent.ts
index 6280266e..aa8fb3f7 100644
--- a/DW-Agents/dw-agents/agent-executive-ceo/ceo-dashboard-agent.ts
+++ b/DW-Agents/dw-agents/agent-executive-ceo/ceo-dashboard-agent.ts
@@ -270,7 +270,7 @@ ${liveContext}`;
     ];
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages
diff --git a/DW-Agents/dw-agents/agent-executive-cfo/cfo-dashboard-agent.ts b/DW-Agents/dw-agents/agent-executive-cfo/cfo-dashboard-agent.ts
index 5d9919ba..592d3df9 100644
--- a/DW-Agents/dw-agents/agent-executive-cfo/cfo-dashboard-agent.ts
+++ b/DW-Agents/dw-agents/agent-executive-cfo/cfo-dashboard-agent.ts
@@ -626,7 +626,7 @@ Be concise, data-driven, and actionable. Present numbers clearly. Flag any conce
     }));
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: chatMessages
diff --git a/DW-Agents/dw-agents/agent-executive-coo/coo-dashboard-agent.ts b/DW-Agents/dw-agents/agent-executive-coo/coo-dashboard-agent.ts
index 12f494d9..6031b59b 100644
--- a/DW-Agents/dw-agents/agent-executive-coo/coo-dashboard-agent.ts
+++ b/DW-Agents/dw-agents/agent-executive-coo/coo-dashboard-agent.ts
@@ -433,7 +433,7 @@ When vendors have low import rates, suggest prioritization.`;
     const chatHistory = (history || req.session.chatHistory).slice(-16);
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1500,
       system: systemPrompt,
       messages: chatHistory.map((m: any) => ({ role: m.role, content: m.content }))
diff --git a/DW-Agents/dw-agents/agent-executive-cto/cto-dashboard-agent.ts b/DW-Agents/dw-agents/agent-executive-cto/cto-dashboard-agent.ts
index f1fc804d..eda6a7f6 100644
--- a/DW-Agents/dw-agents/agent-executive-cto/cto-dashboard-agent.ts
+++ b/DW-Agents/dw-agents/agent-executive-cto/cto-dashboard-agent.ts
@@ -507,7 +507,7 @@ Reference specific vendor tables when discussing data issues.`;
     const chatHistory = (history || req.session.chatHistory).slice(-16);
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1500,
       system: systemPrompt,
       messages: chatHistory.map((m: any) => ({ role: m.role, content: m.content }))
diff --git a/DW-Agents/dw-agents/agent-executive-vp-ops/vp-ops-dashboard-agent.ts b/DW-Agents/dw-agents/agent-executive-vp-ops/vp-ops-dashboard-agent.ts
index 00e06fc2..12e44c8b 100644
--- a/DW-Agents/dw-agents/agent-executive-vp-ops/vp-ops-dashboard-agent.ts
+++ b/DW-Agents/dw-agents/agent-executive-vp-ops/vp-ops-dashboard-agent.ts
@@ -486,7 +486,7 @@ Prioritize server stability and agent uptime above all else.`;
     const chatHistory = (history || req.session.chatHistory).slice(-16);
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1500,
       system: systemPrompt,
       messages: chatHistory.map((m: any) => ({ role: m.role, content: m.content }))
diff --git a/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts b/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
index b7e5016c..c1519d90 100644
--- a/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
+++ b/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
@@ -2336,7 +2336,7 @@ ANALYSIS:
 [Detailed explanation of your findings]`;
 
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-5-20250929',
+      model: 'claude-opus-4-8',
       max_tokens: 2000,
       messages: [
         {
diff --git a/DW-Agents/dw-agents/agent-marketing/marketing-agent.ts b/DW-Agents/dw-agents/agent-marketing/marketing-agent.ts
index ab04df18..69f19735 100644
--- a/DW-Agents/dw-agents/agent-marketing/marketing-agent.ts
+++ b/DW-Agents/dw-agents/agent-marketing/marketing-agent.ts
@@ -2110,7 +2110,7 @@ or HTML/CSS for mobile. Automatically implement older-adult accessibility.
 Be enthusiastic, creative, and marketing-focused in your responses.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       system: systemPrompt,
       messages: req.session.chatHistory
@@ -2254,7 +2254,7 @@ Write an engaging blog post (300-500 words) that includes:
 Make it SEO-friendly and engaging for interior designers and homeowners.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       messages: [{ role: 'user', content: prompt }]
     });
@@ -2399,7 +2399,7 @@ app.post('/api/generate/social', requireGlobalAuth, async (req, res) => {
     };
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 512,
       messages: [{ role: 'user', content: prompts[platform] || prompts.instagram }]
     });
@@ -2523,7 +2523,7 @@ ${guide}
 Write the post content only. Do not include any preamble or explanation. For Instagram, put hashtags on a separate line at the end.`;
 
       const aiResponse = await anthropic.messages.create({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 1024,
         messages: [{ role: 'user', content: prompt }]
       });
diff --git a/DW-Agents/dw-agents/agent-purchasing-office/purchasing-office-agent.ts b/DW-Agents/dw-agents/agent-purchasing-office/purchasing-office-agent.ts
index d436aa12..590b4d2d 100755
--- a/DW-Agents/dw-agents/agent-purchasing-office/purchasing-office-agent.ts
+++ b/DW-Agents/dw-agents/agent-purchasing-office/purchasing-office-agent.ts
@@ -1184,7 +1184,7 @@ Be detailed, clear, and always include dates and prices when relevant.`;
 
     // Call Claude API
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048, // Increased for detailed responses with dates/prices
       system: systemPrompt,
       messages: req.session.chatHistory.map(msg => ({
@@ -1259,7 +1259,7 @@ Recent context:
 Provide actionable insights and specific recommendations.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       messages: [{
         role: 'user',
diff --git a/DW-Agents/dw-agents/agent-restart-analyzer/restart-analyzer-agent.ts b/DW-Agents/dw-agents/agent-restart-analyzer/restart-analyzer-agent.ts
index 37128d21..926661dc 100644
--- a/DW-Agents/dw-agents/agent-restart-analyzer/restart-analyzer-agent.ts
+++ b/DW-Agents/dw-agents/agent-restart-analyzer/restart-analyzer-agent.ts
@@ -203,7 +203,7 @@ Format the response in clear markdown with sections and bullet points.`;
 
   try {
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 4096,
       messages: [{
         role: 'user',
diff --git a/DW-Agents/dw-agents/agent-slack/slack-agent.cjs b/DW-Agents/dw-agents/agent-slack/slack-agent.cjs
index 46ab59a1..d05d541a 100644
--- a/DW-Agents/dw-agents/agent-slack/slack-agent.cjs
+++ b/DW-Agents/dw-agents/agent-slack/slack-agent.cjs
@@ -234,7 +234,7 @@ async function askClaude(message, channelId) {
     try {
         const history = conversationHistory.get(channelId) || [];
         const body = {
-            model: 'claude-sonnet-4-20250514', max_tokens: 1024,
+            model: 'claude-opus-4-8', max_tokens: 1024,
             system: `You are Claude, an AI assistant in the Designer Wallcoverings Slack workspace. Help with Shopify product management, vendor data, AI analysis, and business operations. Server: 45.61.58.125. Be concise, use Slack formatting.`,
             messages: [...history.slice(-10), { role: 'user', content: message }]
         };
diff --git a/DW-Agents/dw-agents/agent-slack/slack-agent.js b/DW-Agents/dw-agents/agent-slack/slack-agent.js
index 75ed39d6..69983287 100644
--- a/DW-Agents/dw-agents/agent-slack/slack-agent.js
+++ b/DW-Agents/dw-agents/agent-slack/slack-agent.js
@@ -229,7 +229,7 @@ async function askClaude(message, channelId) {
     try {
         const history = conversationHistory.get(channelId) || [];
         const body = {
-            model: 'claude-sonnet-4-20250514', max_tokens: 1024,
+            model: 'claude-opus-4-8', max_tokens: 1024,
             system: `You are Claude, an AI assistant in the Designer Wallcoverings Slack workspace. Help with Shopify product management, vendor data, AI analysis, and business operations. Server: 45.61.58.125. Be concise, use Slack formatting.`,
             messages: [...history.slice(-10), { role: 'user', content: message }]
         };
diff --git a/DW-Agents/dw-agents/agent-slack/slack-agent.ts b/DW-Agents/dw-agents/agent-slack/slack-agent.ts
index a049eb88..2c989684 100644
--- a/DW-Agents/dw-agents/agent-slack/slack-agent.ts
+++ b/DW-Agents/dw-agents/agent-slack/slack-agent.ts
@@ -232,7 +232,7 @@ async function askClaude(message: string, channelId: string): Promise<string> {
   try {
     const history = conversationHistory.get(channelId) || [];
     const body = {
-      model: 'claude-sonnet-4-20250514', max_tokens: 1024,
+      model: 'claude-opus-4-8', max_tokens: 1024,
       system: `You are Claude, an AI assistant in the Designer Wallcoverings Slack workspace. Help with Shopify product management, vendor data, AI analysis, and business operations. Server: 45.61.58.125. Be concise, use Slack formatting.`,
       messages: [...history.slice(-10), { role: 'user', content: message }]
     };
diff --git a/DW-Agents/dw-agents/agent-trend-research/trend-research-agent.ts b/DW-Agents/dw-agents/agent-trend-research/trend-research-agent.ts
index 5a30e690..8f5b9fa9 100644
--- a/DW-Agents/dw-agents/agent-trend-research/trend-research-agent.ts
+++ b/DW-Agents/dw-agents/agent-trend-research/trend-research-agent.ts
@@ -1064,7 +1064,7 @@ When users ask about trends, provide detailed analysis with actionable insights.
 Be professional, insightful, and provide strategic recommendations based on market data.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       system: systemPrompt,
       messages: req.session.chatHistory
@@ -1151,7 +1151,7 @@ Generate a detailed Trend Forecast Report with:
 Format the report professionally with clear sections and actionable insights.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: [{ role: 'user', content: 'Generate a comprehensive Trend Forecast Report based on current market data.' }]
@@ -1216,7 +1216,7 @@ ${currentTrends.slice(0, 3).map(t => `- ${t.name}: ${t.description}`).join('\n')
 Generate a detailed competitor analysis with strategic insights and actionable recommendations.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: [{ role: 'user', content: 'Generate a comprehensive Competitor Analysis Report.' }]
@@ -1286,7 +1286,7 @@ Generate a comprehensive Vendor Performance Report with:
 Format professionally with actionable insights.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: [{ role: 'user', content: 'Generate a comprehensive Vendor Performance Report.' }]
@@ -1357,7 +1357,7 @@ Generate a strategic Market Opportunities Report with:
 Focus on actionable, profitable opportunities aligned with current capabilities.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: [{ role: 'user', content: 'Generate a comprehensive Market Opportunities Report.' }]
diff --git a/DW-Agents/dw-agents/agent-zendesk-chat/zendesk-chat-agent.ts b/DW-Agents/dw-agents/agent-zendesk-chat/zendesk-chat-agent.ts
index 479c716a..4391a31b 100644
--- a/DW-Agents/dw-agents/agent-zendesk-chat/zendesk-chat-agent.ts
+++ b/DW-Agents/dw-agents/agent-zendesk-chat/zendesk-chat-agent.ts
@@ -1471,7 +1471,7 @@ When helping with responses:
 Be helpful, supportive, and provide excellent customer service guidance.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       system: systemPrompt,
       messages: req.session.chatHistory
diff --git a/DW-Agents/dw-agents/architectural-update-agent.ts b/DW-Agents/dw-agents/architectural-update-agent.ts
index df427af7..358fa96c 100644
--- a/DW-Agents/dw-agents/architectural-update-agent.ts
+++ b/DW-Agents/dw-agents/architectural-update-agent.ts
@@ -331,7 +331,7 @@ function formatTitle(patternName: string, color: string | null, mfrNumber: strin
 async function analyzeColorsWithAI(imageUrl: string, productTitle: string): Promise<any> {
   try {
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       messages: [{
         role: 'user',
@@ -4280,7 +4280,7 @@ app.post('/api/chat', async (req, res) => {
     }
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 500,
       system: `You are the Architectural Update Agent AI assistant. You help with:
 - Updating commercial wallcovering products to Architectural Wallcoverings branding
diff --git a/DW-Agents/dw-agents/generate-eod-report.ts b/DW-Agents/dw-agents/generate-eod-report.ts
index 1147f365..36a187b0 100644
--- a/DW-Agents/dw-agents/generate-eod-report.ts
+++ b/DW-Agents/dw-agents/generate-eod-report.ts
@@ -195,7 +195,7 @@ Format the report in clean markdown with clear sections and bullet points.`;
 
   try {
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 4096,
       messages: [{
         role: 'user',
diff --git a/DW-Agents/dw-agents/koroseal-fixed-import.ts b/DW-Agents/dw-agents/koroseal-fixed-import.ts
index dfa2a2a4..b73ab49d 100644
--- a/DW-Agents/dw-agents/koroseal-fixed-import.ts
+++ b/DW-Agents/dw-agents/koroseal-fixed-import.ts
@@ -129,7 +129,7 @@ async function analyzeImageForTags(imageUrl: string): Promise<string[]> {
     const base64Image = Buffer.from(imageBuffer).toString('base64');
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 500,
       messages: [{
         role: 'user',
diff --git a/DW-Agents/dw-agents/koroseal-import.ts b/DW-Agents/dw-agents/koroseal-import.ts
index dfa2a2a4..b73ab49d 100644
--- a/DW-Agents/dw-agents/koroseal-import.ts
+++ b/DW-Agents/dw-agents/koroseal-import.ts
@@ -129,7 +129,7 @@ async function analyzeImageForTags(imageUrl: string): Promise<string[]> {
     const base64Image = Buffer.from(imageBuffer).toString('base64');
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 500,
       messages: [{
         role: 'user',
diff --git a/DW-Agents/dw-agents/marketing-agent.ts b/DW-Agents/dw-agents/marketing-agent.ts
index 9a147fab..1cc249ce 100644
--- a/DW-Agents/dw-agents/marketing-agent.ts
+++ b/DW-Agents/dw-agents/marketing-agent.ts
@@ -1992,7 +1992,7 @@ When creating content:
 Be professional, sophisticated, and magazine-editorial in your approach.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 4096, // Increased for longer blog posts
       system: systemPrompt,
       messages: req.session.chatHistory
@@ -2136,7 +2136,7 @@ Write an engaging blog post (300-500 words) that includes:
 Make it SEO-friendly and engaging for interior designers and homeowners.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       messages: [{ role: 'user', content: prompt }]
     });
@@ -2184,7 +2184,7 @@ app.post('/api/generate/social', async (req, res) => {
     };
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 512,
       messages: [{ role: 'user', content: prompts[platform] || prompts.instagram }]
     });
@@ -2368,7 +2368,7 @@ Create marketing content for this task. Determine the best format (blog, social,
     }
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 4096,
       messages: [{ role: 'user', content: prompt }]
     });
diff --git a/DW-Agents/dw-agents/master-hub.ts b/DW-Agents/dw-agents/master-hub.ts
index 97cb439b..0f415961 100644
--- a/DW-Agents/dw-agents/master-hub.ts
+++ b/DW-Agents/dw-agents/master-hub.ts
@@ -530,7 +530,7 @@ Be helpful, concise, and direct users to the right agent dashboard when needed.`
     ] as const;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: req.session.chatHistory,
@@ -604,7 +604,7 @@ Be helpful, concise, and direct users to the right agent dashboard when needed.`
 
         // Get final response
         const finalResponse = await anthropic.messages.create({
-          model: 'claude-sonnet-4-20250514',
+          model: 'claude-opus-4-8',
           max_tokens: 2048,
           system: systemPrompt,
           messages: req.session.chatHistory
diff --git a/DW-Agents/dw-agents/purchasing-office-agent.ts b/DW-Agents/dw-agents/purchasing-office-agent.ts
index 9621e8cd..61a1d606 100644
--- a/DW-Agents/dw-agents/purchasing-office-agent.ts
+++ b/DW-Agents/dw-agents/purchasing-office-agent.ts
@@ -1122,7 +1122,7 @@ Be detailed, clear, and always include dates and prices when relevant.`;
     let assistantMessage = '';
     try {
       const response = await anthropic.messages.create({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 2048, // Increased for detailed responses with dates/prices
         system: systemPrompt,
         messages: req.session.chatHistory.map(msg => ({
@@ -1282,7 +1282,7 @@ Provide actionable insights and specific recommendations.`;
     let research = '';
     try {
       const response = await anthropic.messages.create({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 2048,
         messages: [{
           role: 'user',
diff --git a/DW-Agents/dw-agents/trend-research-agent.ts b/DW-Agents/dw-agents/trend-research-agent.ts
index 47d05bd0..97f0af8d 100644
--- a/DW-Agents/dw-agents/trend-research-agent.ts
+++ b/DW-Agents/dw-agents/trend-research-agent.ts
@@ -991,7 +991,7 @@ When users ask about trends, provide detailed analysis with actionable insights.
 Be professional, insightful, and provide strategic recommendations based on market data.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       system: systemPrompt,
       messages: req.session.chatHistory
@@ -1111,7 +1111,7 @@ Generate a detailed Trend Forecast Report with:
 Format the report professionally with clear sections and actionable insights.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: [{ role: 'user', content: 'Generate a comprehensive Trend Forecast Report based on current market data.' }]
@@ -1177,7 +1177,7 @@ ${currentTrends.slice(0, 3).map(t => `- ${t.name}: ${t.description}`).join('\n')
 Generate a detailed competitor analysis with strategic insights and actionable recommendations.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: [{ role: 'user', content: 'Generate a comprehensive Competitor Analysis Report.' }]
@@ -1248,7 +1248,7 @@ Generate a comprehensive Vendor Performance Report with:
 Format professionally with actionable insights.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: [{ role: 'user', content: 'Generate a comprehensive Vendor Performance Report.' }]
@@ -1320,7 +1320,7 @@ Generate a strategic Market Opportunities Report with:
 Focus on actionable, profitable opportunities aligned with current capabilities.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 2048,
       system: systemPrompt,
       messages: [{ role: 'user', content: 'Generate a comprehensive Market Opportunities Report.' }]
diff --git a/DW-Agents/dw-agents/zendesk-chat-agent.ts b/DW-Agents/dw-agents/zendesk-chat-agent.ts
index 4c97432d..4c831fb5 100644
--- a/DW-Agents/dw-agents/zendesk-chat-agent.ts
+++ b/DW-Agents/dw-agents/zendesk-chat-agent.ts
@@ -1528,7 +1528,7 @@ When helping with responses:
 Be helpful, supportive, and provide excellent customer service guidance.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       system: systemPrompt,
       messages: req.session.chatHistory
diff --git a/DW-Agents/slack-claude-bot/server-debug.js b/DW-Agents/slack-claude-bot/server-debug.js
index 6e4c1486..278d4966 100644
--- a/DW-Agents/slack-claude-bot/server-debug.js
+++ b/DW-Agents/slack-claude-bot/server-debug.js
@@ -52,7 +52,7 @@ app.post('/slack/events', async (req, res) => {
     try {
       // Call Claude
       const response = await anthropic.messages.create({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 1024,
         system: 'You are Claude, a helpful AI assistant in Slack. Be concise.',
         messages: [{ role: 'user', content: text || 'Hello' }]
diff --git a/DW-Agents/slack-claude-bot/server-socket.js b/DW-Agents/slack-claude-bot/server-socket.js
index 9c7c6353..6880c79a 100644
--- a/DW-Agents/slack-claude-bot/server-socket.js
+++ b/DW-Agents/slack-claude-bot/server-socket.js
@@ -51,7 +51,7 @@ Be concise but helpful. Use Slack formatting (*bold*, _italic_, \`code\`).
 If asked to run commands or update products, explain what you would do but note you need terminal access for actual changes.`;
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       system: systemPrompt,
       messages: [
diff --git a/DW-Agents/slack-claude-bot/server.js b/DW-Agents/slack-claude-bot/server.js
index 1c1ea40b..5570da2a 100644
--- a/DW-Agents/slack-claude-bot/server.js
+++ b/DW-Agents/slack-claude-bot/server.js
@@ -141,7 +141,7 @@ Be concise but helpful. Use Slack formatting (*bold*, _italic_, \`code\`).
 If asked to run commands or update products, explain what you would do but note you need terminal access for actual changes.`;
 
       const response = await anthropic.messages.create({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 1024,
         system: systemPrompt,
         messages: [
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/interior-designer-tags/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/interior-designer-tags/route.ts
index 21f93f26..017e8d69 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/interior-designer-tags/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/interior-designer-tags/route.ts
@@ -105,7 +105,7 @@ async function analyzeImageWithClaude(imageUrl: string, productTitle?: string):
       : 'Analyze this wallcovering product image and generate interior designer tags.';
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       messages: [
         {
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts
index bd3a7956..4a97d9d8 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts
@@ -217,7 +217,7 @@ export async function POST(request: NextRequest) {
 
     try {
       const response = await anthropic.messages.create({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 400,
         temperature: 0.3,
         system: systemPrompt,
diff --git a/DW-Programming/ImportNewSkufromURL/check-single-product.ts b/DW-Programming/ImportNewSkufromURL/check-single-product.ts
index c036cb68..46f05adb 100644
--- a/DW-Programming/ImportNewSkufromURL/check-single-product.ts
+++ b/DW-Programming/ImportNewSkufromURL/check-single-product.ts
@@ -16,7 +16,7 @@ async function analyzeImage(imageUrl: string, productTitle: string) {
   const base64Image = Buffer.from(imageBuffer).toString('base64');
 
   const message = await anthropic.messages.create({
-    model: 'claude-sonnet-4-0',
+    model: 'claude-opus-4-8',
     max_tokens: 500,
     messages: [
       {
diff --git a/DW-Programming/ImportNewSkufromURL/dwjs-ai-retag.ts b/DW-Programming/ImportNewSkufromURL/dwjs-ai-retag.ts
index 86aff4e1..462ca5a0 100644
--- a/DW-Programming/ImportNewSkufromURL/dwjs-ai-retag.ts
+++ b/DW-Programming/ImportNewSkufromURL/dwjs-ai-retag.ts
@@ -423,7 +423,7 @@ Return ONLY valid JSON:
     const mediaType = product.imageUrl.toLowerCase().includes('.png') ? 'image/png' : 'image/jpeg';
 
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       messages: [{
         role: 'user',
diff --git a/DW-Programming/ImportNewSkufromURL/fix-xpf-products.ts b/DW-Programming/ImportNewSkufromURL/fix-xpf-products.ts
index 444de6a0..81bf8f3b 100644
--- a/DW-Programming/ImportNewSkufromURL/fix-xpf-products.ts
+++ b/DW-Programming/ImportNewSkufromURL/fix-xpf-products.ts
@@ -128,7 +128,7 @@ async function analyzeColorsInImage(imageUrl: string): Promise<ColorAnalysis> {
     const mediaType = imageUrl.toLowerCase().endsWith('.png') ? 'image/png' : 'image/jpeg';
 
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-0',
+      model: 'claude-opus-4-8',
       max_tokens: 800,
       messages: [{
         role: 'user',
diff --git a/DW-Programming/ImportNewSkufromURL/lib/extract.ts b/DW-Programming/ImportNewSkufromURL/lib/extract.ts
index 23f6e831..44bfdab2 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/extract.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/extract.ts
@@ -463,7 +463,7 @@ Extract the product data as JSON following the exact schema above.`;
         timestamp: new Date().toISOString(),
         event: 'ai_extraction_attempt',
         provider: 'anthropic',
-        model: 'claude-sonnet-4-0',
+        model: 'claude-opus-4-8',
         attempt,
         maxAttempts: MAX_ANTHROPIC_ATTEMPTS,
         modelInfo: 'Using Anthropic Claude Sonnet 4.0 as GUARANTEED fallback',
@@ -471,7 +471,7 @@ Extract the product data as JSON following the exact schema above.`;
 
       const message = await rateLimitedAnthropicRequest(() =>
         anthropic.messages.create({
-          model: 'claude-sonnet-4-0',
+          model: 'claude-opus-4-8',
           max_tokens: 4096,
           temperature: 0,
           system: SYSTEM_PROMPT,
@@ -490,7 +490,7 @@ Extract the product data as JSON following the exact schema above.`;
         timestamp: new Date().toISOString(),
         event: 'ai_extraction_response',
         provider: 'anthropic',
-        model: 'claude-sonnet-4-0',
+        model: 'claude-opus-4-8',
         attempt,
         durationMs: Date.now() - startTime,
         responseLength: responseText.length,
@@ -514,7 +514,7 @@ Extract the product data as JSON following the exact schema above.`;
         timestamp: new Date().toISOString(),
         event: 'ai_extraction_success',
         provider: 'anthropic',
-        model: 'claude-sonnet-4-0',
+        model: 'claude-opus-4-8',
         attempt,
         imageCount: validated.images.length,
         tagCount: validated.tags.length,
@@ -540,7 +540,7 @@ Extract the product data as JSON following the exact schema above.`;
         timestamp: new Date().toISOString(),
         event: 'ai_extraction_error',
         provider: 'anthropic',
-        model: 'claude-sonnet-4-0',
+        model: 'claude-opus-4-8',
         attempt,
         error: lastError.message,
         isLastAttempt,
diff --git a/DW-Programming/ImportNewSkufromURL/lib/private-label-ai.ts b/DW-Programming/ImportNewSkufromURL/lib/private-label-ai.ts
index 2d4f70cb..ca112c1b 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/private-label-ai.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/private-label-ai.ts
@@ -143,14 +143,14 @@ Remember: The content must be completely unique and original. Think of this as d
     console.log(JSON.stringify({
       timestamp: new Date().toISOString(),
       event: 'private_label_ai_request_start',
-      model: 'claude-sonnet-4-0'
+      model: 'claude-opus-4-8'
     }));
 
     // Get Anthropic client (lazy initialization ensures env vars are loaded)
     const anthropic = getAnthropicClient();
 
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-0',
+      model: 'claude-opus-4-8',
       max_tokens: 2000,
       messages: [
         {
diff --git a/DW-Programming/ImportNewSkufromURL/lib/settlement-checker.ts b/DW-Programming/ImportNewSkufromURL/lib/settlement-checker.ts
index ce482a4f..ada467d5 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/settlement-checker.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/settlement-checker.ts
@@ -116,7 +116,7 @@ Now analyze this product image:`;
     const { base64, mediaType } = await fetchImageAsBase64(imageUrl);
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-5-20250929',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       messages: [
         {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/koroseal-enrichment.ts b/DW-Programming/ImportNewSkufromURL/scripts/koroseal-enrichment.ts
index 410c8559..d67d8f64 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/koroseal-enrichment.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/koroseal-enrichment.ts
@@ -350,7 +350,7 @@ async function analyzeWithClaude(imageUrl: string): Promise<ImageAnalysis | null
     const anthropic = new Anthropic({ apiKey: ANTHROPIC_API_KEY });
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       messages: [{
         role: 'user',
diff --git a/DW-Programming/ImportNewSkufromURL/update-lincrusta-products.ts b/DW-Programming/ImportNewSkufromURL/update-lincrusta-products.ts
index 4425dec6..3564364e 100644
--- a/DW-Programming/ImportNewSkufromURL/update-lincrusta-products.ts
+++ b/DW-Programming/ImportNewSkufromURL/update-lincrusta-products.ts
@@ -165,7 +165,7 @@ HTML to extract from:
 ${html}`;
 
   const message = await anthropic.messages.create({
-    model: "claude-sonnet-4-5-20250929",
+    model: "claude-opus-4-8",
     max_tokens: 4096,
     messages: [
       {
diff --git a/DW-Programming/ImportNewSkufromURL/verify-red-batch.ts b/DW-Programming/ImportNewSkufromURL/verify-red-batch.ts
index 6e9b5c83..aea1b196 100644
--- a/DW-Programming/ImportNewSkufromURL/verify-red-batch.ts
+++ b/DW-Programming/ImportNewSkufromURL/verify-red-batch.ts
@@ -117,7 +117,7 @@ async function analyzeImageForRedColor(imageUrl: string): Promise<{ hasRed: bool
     else if (imageUrl.includes('.webp')) mediaType = 'image/webp';
 
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-0',
+      model: 'claude-opus-4-8',
       max_tokens: 500,
       messages: [
         {
diff --git a/DW-Programming/ImportNewSkufromURL/verify-red-images.ts b/DW-Programming/ImportNewSkufromURL/verify-red-images.ts
index 3355873e..01a4ae5a 100644
--- a/DW-Programming/ImportNewSkufromURL/verify-red-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/verify-red-images.ts
@@ -103,7 +103,7 @@ async function analyzeImageForRedColor(imageUrl: string): Promise<{ hasRed: bool
     else if (imageUrl.includes('.webp')) mediaType = 'image/webp';
 
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-0',
+      model: 'claude-opus-4-8',
       max_tokens: 500,
       messages: [
         {
diff --git a/DW-Programming/KravetDesignTagger/server.js b/DW-Programming/KravetDesignTagger/server.js
index 3822afa0..9f2a90cb 100644
--- a/DW-Programming/KravetDesignTagger/server.js
+++ b/DW-Programming/KravetDesignTagger/server.js
@@ -92,7 +92,7 @@ async function analyzeImageWithClaude(imageUrl, productTitle) {
         'anthropic-version': '2023-06-01'
       },
       body: JSON.stringify({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 1200,
         messages: [{
           role: 'user',
diff --git a/DW-Programming/RemoveDuplicatesInShopify/auto-tag-groups.js b/DW-Programming/RemoveDuplicatesInShopify/auto-tag-groups.js
index cf3329ab..6c3b90cb 100644
--- a/DW-Programming/RemoveDuplicatesInShopify/auto-tag-groups.js
+++ b/DW-Programming/RemoveDuplicatesInShopify/auto-tag-groups.js
@@ -40,7 +40,7 @@ async function analyzeImage(imageUrl, productTitle) {
         'anthropic-version': '2023-06-01'
       },
       body: JSON.stringify({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 800,
         messages: [{
           role: 'user',
diff --git a/DW-Programming/RemoveDuplicatesInShopify/recrawl-all-tags.js b/DW-Programming/RemoveDuplicatesInShopify/recrawl-all-tags.js
index acbee4c8..83f3a3a4 100644
--- a/DW-Programming/RemoveDuplicatesInShopify/recrawl-all-tags.js
+++ b/DW-Programming/RemoveDuplicatesInShopify/recrawl-all-tags.js
@@ -44,7 +44,7 @@ async function analyzeImage(imageUrl, productTitle) {
         'anthropic-version': '2023-06-01'
       },
       body: JSON.stringify({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 1000,
         messages: [{
           role: 'user',
diff --git a/DW-Programming/RemoveDuplicatesInShopify/server.js b/DW-Programming/RemoveDuplicatesInShopify/server.js
index ae7fc34c..2b8365f9 100644
--- a/DW-Programming/RemoveDuplicatesInShopify/server.js
+++ b/DW-Programming/RemoveDuplicatesInShopify/server.js
@@ -69,7 +69,7 @@ async function analyzeImageWithClaude(imageUrl) {
       'anthropic-version': '2023-06-01'
     },
     body: JSON.stringify({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 500,
       messages: [{
         role: 'user',
diff --git a/DW-Programming/ThibautTagger/server.js b/DW-Programming/ThibautTagger/server.js
index c44d361e..bdfed200 100644
--- a/DW-Programming/ThibautTagger/server.js
+++ b/DW-Programming/ThibautTagger/server.js
@@ -92,7 +92,7 @@ async function analyzeImageWithClaude(imageUrl, productTitle) {
         'anthropic-version': '2023-06-01'
       },
       body: JSON.stringify({
-        model: 'claude-sonnet-4-20250514',
+        model: 'claude-opus-4-8',
         max_tokens: 1200,
         messages: [{
           role: 'user',
diff --git a/DW-Programming/architectural-updater/lib/update-engine.js b/DW-Programming/architectural-updater/lib/update-engine.js
index 4ebfa7ad..5719b396 100644
--- a/DW-Programming/architectural-updater/lib/update-engine.js
+++ b/DW-Programming/architectural-updater/lib/update-engine.js
@@ -253,7 +253,7 @@ function formatTitle(patternName, color, mfrNumber) {
 async function analyzeColorsWithAI(imageUrl, productTitle) {
   try {
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       messages: [{
         role: 'user',
diff --git a/DW-Programming/legal-compliance-checker-9878.ts b/DW-Programming/legal-compliance-checker-9878.ts
index 41444460..6d40b223 100644
--- a/DW-Programming/legal-compliance-checker-9878.ts
+++ b/DW-Programming/legal-compliance-checker-9878.ts
@@ -99,7 +99,7 @@ async function checkCompliance(url: string): Promise<ComplianceCheck> {
 
     // Use Claude to analyze for compliance
     const message = await anthropic.messages.create({
-      model: 'claude-sonnet-4-5-20250929',
+      model: 'claude-opus-4-8',
       max_tokens: 2000,
       messages: [
         {
@@ -761,7 +761,7 @@ app.post('/api/chat', async (req, res) => {
       console.log(`\n💬 Chat: General question - ${message.substring(0, 50)}...`);
 
       const response = await anthropic.messages.create({
-        model: 'claude-sonnet-4-5-20250929',
+        model: 'claude-opus-4-8',
         max_tokens: 1000,
         messages: [
           {
diff --git a/DW-Programming/schumacher-dwsw-full-updater.ts b/DW-Programming/schumacher-dwsw-full-updater.ts
index edc8f4bf..2debdef4 100644
--- a/DW-Programming/schumacher-dwsw-full-updater.ts
+++ b/DW-Programming/schumacher-dwsw-full-updater.ts
@@ -324,7 +324,7 @@ async function scrapeSchumacherProduct(page: Page, sku: string): Promise<Schumac
 async function analyzeImageForTags(imageUrl: string, productTitle: string): Promise<string[]> {
   try {
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       messages: [{
         role: 'user',
diff --git a/DW-Programming/schumacher-dwsw-validator.ts b/DW-Programming/schumacher-dwsw-validator.ts
index 74c25175..f073f8a5 100644
--- a/DW-Programming/schumacher-dwsw-validator.ts
+++ b/DW-Programming/schumacher-dwsw-validator.ts
@@ -371,7 +371,7 @@ async function analyzeImageForTags(imageUrl: string, productTitle: string): Prom
     console.log(`   🎨 Analyzing image with AI...`);
 
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 1024,
       messages: [{
         role: 'user',
diff --git a/DW-Programming/update-specific-schumacher.ts b/DW-Programming/update-specific-schumacher.ts
index 145726a1..9dfd9b74 100644
--- a/DW-Programming/update-specific-schumacher.ts
+++ b/DW-Programming/update-specific-schumacher.ts
@@ -133,7 +133,7 @@ async function scrapeSchumacherProduct(page: Page, sku: string): Promise<Schumac
 async function analyzeImageWithAI(imageUrl: string): Promise<string[]> {
   try {
     const response = await anthropic.messages.create({
-      model: 'claude-sonnet-4-20250514',
+      model: 'claude-opus-4-8',
       max_tokens: 500,
       messages: [{
         role: 'user',

← 6114227d Update Claude model IDs to claude-opus-4-8 (Opus 4.8 upgrade  ·  back to Designer Wallcoverings  ·  security: strip hardcoded dw_admin DSN password -> env-first f19be762 →