diff --git a/CLAUDE.md b/CLAUDE.md index 1c4a5b93..00c46c68 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,7 +35,7 @@ When user says "COM": 1. Increment version in BOTH `package.json` AND `CLAUDE.md` (verify they match with `grep version package.json && grep Version CLAUDE.md`) 2. Run: `git add -A && git commit -m "chore: bump version to X.XXXX" && git push && npm run build && systemctl --user restart claudeman-web` -**Version**: 0.1533 (must match `package.json` for npm publish) +**Version**: 0.1534 (must match `package.json` for npm publish) ## Project Overview diff --git a/package.json b/package.json index f46b4285..6cbd975a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claudeman", - "version": "0.1533", + "version": "0.1534", "description": "The missing control plane for Claude Code - run 20 autonomous agents with real-time monitoring and session persistence", "type": "module", "main": "dist/index.js", diff --git a/src/web/public/index.html b/src/web/public/index.html index 572c9656..fb15d457 100644 --- a/src/web/public/index.html +++ b/src/web/public/index.html @@ -10,8 +10,8 @@ - - + + @@ -1474,6 +1474,6 @@ - + diff --git a/test-tab-debug.mjs b/test-tab-debug.mjs new file mode 100644 index 00000000..bc31f225 --- /dev/null +++ b/test-tab-debug.mjs @@ -0,0 +1,83 @@ +import { chromium } from 'playwright'; +const browser = await chromium.launch({ headless: true }); +const page = await browser.newPage(); +try { + await page.goto('http://localhost:3000', { waitUntil: 'domcontentloaded' }); + await page.waitForTimeout(4000); + + // Check what's actually in localStorage right now (user's real settings) + const stored = await page.evaluate(() => { + try { + return JSON.parse(localStorage.getItem('claudeman-app-settings')); + } catch { return null; } + }); + console.log('Current stored settings:', JSON.stringify(stored, null, 2)); + + // Check the tabs state + const state = await page.evaluate(() => { + const el = document.getElementById('sessionTabs'); + const style = window.getComputedStyle(el); + return { + classList: el.className, + flexWrap: style.flexWrap, + overflowX: style.overflowX, + overflowY: style.overflowY, + maxHeight: style.maxHeight, + height: el.offsetHeight, + scrollHeight: el.scrollHeight, + numTabs: el.querySelectorAll('.session-tab').length, + tabHeights: [...el.querySelectorAll('.session-tab')].map(t => t.offsetHeight), + }; + }); + console.log('Tab container state:', JSON.stringify(state, null, 2)); + + // Now try: set tabTwoRows to false explicitly + console.log('\n--- Setting tabTwoRows=false explicitly ---'); + await page.evaluate(() => { + const s = JSON.parse(localStorage.getItem('claudeman-app-settings') || '{}'); + s.tabTwoRows = false; + localStorage.setItem('claudeman-app-settings', JSON.stringify(s)); + app._cachedAppSettings = null; + app.applyTabWrapSettings(); + }); + await page.waitForTimeout(500); + + const state2 = await page.evaluate(() => { + const el = document.getElementById('sessionTabs'); + const style = window.getComputedStyle(el); + return { + classList: el.className, + flexWrap: style.flexWrap, + height: el.offsetHeight, + }; + }); + console.log('After explicit false:', JSON.stringify(state2, null, 2)); + + // Now try: set tabTwoRows to true + console.log('\n--- Setting tabTwoRows=true ---'); + await page.evaluate(() => { + const s = JSON.parse(localStorage.getItem('claudeman-app-settings') || '{}'); + s.tabTwoRows = true; + localStorage.setItem('claudeman-app-settings', JSON.stringify(s)); + app._cachedAppSettings = null; + app.applyTabWrapSettings(); + }); + await page.waitForTimeout(500); + + const state3 = await page.evaluate(() => { + const el = document.getElementById('sessionTabs'); + const style = window.getComputedStyle(el); + return { + classList: el.className, + flexWrap: style.flexWrap, + height: el.offsetHeight, + }; + }); + console.log('After explicit true:', JSON.stringify(state3, null, 2)); + +} catch (err) { + console.error('Error:', err.message); +} finally { + await browser.close(); + process.exit(0); +}