fix: wizard open detection for plan subagent windows

- Changed wizard modal detection from checking non-existent 'hidden' class
  and inline style.display to correctly checking for '.active' class
- This fixes plan subagent windows not appearing during Ralph wizard
  plan generation
- Also fixes connection lines between wizard, plan agents, and subagents

chore: bump version to 0.1405

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
arkon
2026-01-28 00:45:37 +01:00
co-authored by Claude Opus 4.5
parent 78eb771745
commit 8c75dcdebc
3 changed files with 18 additions and 10 deletions
+15 -5
View File
@@ -16,13 +16,15 @@ When user says "COM":
1. Increment version in BOTH `package.json` AND `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.1404 (must match `package.json`)
**Version**: 0.1405 (must match `package.json`)
## Project Overview
Claudeman is a Claude Code session manager with web interface and autonomous Ralph Loop. Spawns Claude CLI via PTY, streams via SSE, supports respawn cycling for 24+ hour autonomous runs.
**Tech Stack**: TypeScript (ES2022/NodeNext, strict mode with `noUnusedLocals`, `noUnusedParameters`, `noImplicitReturns`), Node.js, Fastify, node-pty, xterm.js
**Tech Stack**: TypeScript (ES2022/NodeNext, strict mode), Node.js, Fastify, node-pty, xterm.js
**TypeScript Strictness**: `noUnusedLocals`, `noUnusedParameters`, `noImplicitReturns`, `noImplicitOverride`, `noFallthroughCasesInSwitch`, `allowUnreachableCode: false`
**Requirements**: Node.js 18+, Claude CLI, GNU Screen
@@ -34,12 +36,13 @@ Claudeman is a Claude Code session manager with web interface and autonomous Ral
# Development
npx tsx src/index.ts web # Dev server (RECOMMENDED)
npx tsx src/index.ts web --https # With TLS for notifications
npx tsc --noEmit # Type check
npm run typecheck # Type check
# Testing
npx vitest run # All tests
npx vitest run test/<file>.test.ts # Single file
npm run test:e2e # Browser E2E tests
npm run test:coverage # With coverage report
npm run test:e2e # Browser E2E (run `npx playwright install chromium` first)
# Production
npm run build
@@ -47,6 +50,13 @@ systemctl --user restart claudeman-web
journalctl --user -u claudeman-web -f
```
## Binaries
| Binary | Purpose |
|--------|---------|
| `claudeman` | Main CLI and web server |
| `claudeman-mcp` | MCP server for Claude Desktop integration |
## Architecture
### Core Files
@@ -101,7 +111,7 @@ journalctl --user -u claudeman-web -f
**E2E tests**: Use Playwright. Run `npx playwright install chromium` first. See `test/e2e/fixtures/` for helpers. E2E config provides ports, timeouts, and helpers.
**Test config**: Vitest runs with `globals: true` (no imports needed for `describe`/`it`/`expect`) and `fileParallelism: false` (files run sequentially to respect screen limits).
**Test config**: Vitest runs with `globals: true` (no imports needed for `describe`/`it`/`expect`) and `fileParallelism: false` (files run sequentially to respect screen limits). Test timeout is 30s, teardown timeout is 60s.
**Test safety**: `test/setup.ts` provides:
- Screen concurrency limiter (max 10)
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "claudeman",
"version": "0.1404",
"version": "0.1405",
"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",
+2 -4
View File
@@ -8109,8 +8109,7 @@ class ClaudemanApp {
// Check if Ralph wizard modal is open
const wizardModal = document.getElementById('ralphWizardModal');
const wizardOpen = wizardModal && !wizardModal.classList.contains('hidden') &&
wizardModal.style.display !== 'none';
const wizardOpen = wizardModal?.classList.contains('active');
const wizardContent = wizardOpen ? wizardModal.querySelector('.modal-content') : null;
// Collect visible regular subagent windows for connection logic
@@ -8360,8 +8359,7 @@ class ClaudemanApp {
// Check if Ralph wizard modal is open - if so, position windows on the sides
const wizardModal = document.getElementById('ralphWizardModal');
const wizardOpen = wizardModal && !wizardModal.classList.contains('hidden') &&
wizardModal.style.display !== 'none';
const wizardOpen = wizardModal?.classList.contains('active');
let startX, startY, maxCols;