1M context window
- Available for Fable 5.1, Fable 5, Opus and Opus 4.6.
+ Available for Fable 5.1, Fable 5, Opus 5.5, Opus and Opus 4.6.
@@ -2189,6 +2191,7 @@
+
@@ -2204,6 +2207,7 @@
+
@@ -2215,6 +2219,7 @@
+
@@ -2226,6 +2231,7 @@
+
@@ -2237,6 +2243,7 @@
+
diff --git a/src/web/public/settings-ui.js b/src/web/public/settings-ui.js
index 30a1b3dd..6c5208e8 100644
--- a/src/web/public/settings-ui.js
+++ b/src/web/public/settings-ui.js
@@ -987,7 +987,7 @@ Object.assign(CodemanApp.prototype, {
desc.textContent = inert
? 'The selected model has no 1M variant.'
: base
- ? 'Available for Fable 5.1, Fable 5, Opus and Opus 4.6.'
+ ? 'Available for Fable 5.1, Fable 5, Opus 5.5, Opus and Opus 4.6.'
: 'With no model pinned, this starts new sessions on Opus with a 1M window.';
}
},
diff --git a/test/app-settings-structure.test.ts b/test/app-settings-structure.test.ts
index 813f3610..4dc7dc05 100644
--- a/test/app-settings-structure.test.ts
+++ b/test/app-settings-structure.test.ts
@@ -123,7 +123,13 @@ describe('App Settings modal structure', () => {
const select = modal.match(/id="appSettingsClaudeModel"([\s\S]*?)<\/select>/)?.[1] ?? '';
// The cards render the base models; the [1m] rows exist so that base + the
// context switch can compose back into a real claudeModel value.
- for (const value of ['opus[1m]', 'claude-fable-5[1m]', 'claude-fable-5-1[1m]', 'claude-opus-4-6[1m]']) {
+ for (const value of [
+ 'opus[1m]',
+ 'claude-fable-5[1m]',
+ 'claude-fable-5-1[1m]',
+ 'claude-opus-5-5[1m]',
+ 'claude-opus-4-6[1m]',
+ ]) {
expect(select).toContain(`value="${value}"`);
}
expect(select).toContain('data-ctx="1"');
@@ -148,6 +154,22 @@ describe('App Settings modal structure', () => {
}
});
+ it('models: offers Opus 5.5 as a card and to task routing', () => {
+ const modal = settingsModal();
+ const select = modal.match(/id="appSettingsClaudeModel"([\s\S]*?)<\/select>/)?.[1] ?? '';
+ expect(select).toMatch(/value="claude-opus-5-5"[^>]*data-ctx="1"/);
+ for (const id of [
+ 'appSettingsDefaultModel',
+ 'appSettingsModelExplore',
+ 'appSettingsModelImplement',
+ 'appSettingsModelTest',
+ 'appSettingsModelReview',
+ ]) {
+ const routing = modal.match(new RegExp(`id="${id}"([\\s\\S]*?)`))?.[1] ?? '';
+ expect(routing, `${id} does not offer Opus 5.5`).toContain('value="claude-opus-5-5"');
+ }
+ });
+
it('has retired the modal-tab chrome everywhere, not just here', () => {
// Session Options and Add Case moved onto this same `set-*` surface, so the
// old tab classes have no users left. A reappearance means a modal drifted