fix: robust agent-to-tab connection lines with persistent parent tracking

- Add --session-id flag to Claude CLI startup so Claudeman and Claude share the same session ID
- Set claudeSessionId immediately on session start (no waiting for JSON messages)
- Add persistent subagentParentMap to store agent-to-tab associations permanently
- Add /api/subagent-parents endpoints for server-side persistence
- Add fallback: use active session when claudeSessionId matching fails
- Connection lines now reliably connect agent windows to their parent tabs
- Survives page refresh, reconnect, and server restart

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
arkon
2026-01-29 14:56:11 +01:00
co-authored by Claude Opus 4.5
parent 28f37d9d7c
commit b13b725bd8
6 changed files with 424 additions and 122 deletions
+31
View File
@@ -2956,6 +2956,37 @@ NOW: Generate the implementation plan for the task above. Think step by step.`;
}
});
// ============ Subagent Parent Associations ============
// Persists which TAB each agent window connects to.
// This is the PERMANENT record of agent -> tab associations.
const parentMapPath = join(homedir(), '.claudeman', 'subagent-parents.json');
this.app.get('/api/subagent-parents', async () => {
try {
if (existsSync(parentMapPath)) {
const content = readFileSync(parentMapPath, 'utf-8');
return JSON.parse(content);
}
} catch (err) {
console.error('Failed to read subagent parent map:', err);
}
return {};
});
this.app.put('/api/subagent-parents', async (req) => {
const parentMap = req.body as Record<string, string>;
try {
const dir = dirname(parentMapPath);
if (!existsSync(dir)) {
mkdirSync(dir, { recursive: true });
}
writeFileSync(parentMapPath, JSON.stringify(parentMap, null, 2));
return { success: true };
} catch (err) {
return createErrorResponse(ApiErrorCode.OPERATION_FAILED, getErrorMessage(err));
}
});
// ============ Screen Management Endpoints ============
// Get all tracked screens with stats