feat: add orchestrator execution engine, observability panel, and LSP document caching

Wire FlowExecutor into orchestrator routes for actual flow execution with
pause/resume/stop lifecycle management. Add CLI session audit system with
audit-routes backend and Observability tab in IssueHub frontend. Introduce
cli-session-mux for cross-workspace session routing and QueueSendToOrchestrator
UI component. Normalize frontend API response handling for { data: ... }
wrapper format and propagate projectPath through flow hooks.

In codex-lens, add per-server opened-document cache in StandaloneLspManager
to avoid redundant didOpen notifications (using didChange for updates), and
skip warmup delay for already-warmed LSP server instances in ChainSearchEngine.
This commit is contained in:
catlog22
2026-02-11 15:38:33 +08:00
parent d0cdee2e68
commit 5a9e54fd70
35 changed files with 5325 additions and 77 deletions

View File

@@ -177,6 +177,14 @@ export class CliSessionManager {
return Array.from(this.sessions.values()).map(({ pty: _pty, buffer: _buffer, bufferBytes: _bytes, ...rest }) => rest);
}
getProjectRoot(): string {
return this.projectRoot;
}
hasSession(sessionKey: string): boolean {
return this.sessions.has(sessionKey);
}
getSession(sessionKey: string): CliSession | null {
const session = this.sessions.get(sessionKey);
if (!session) return null;
@@ -398,3 +406,15 @@ export function getCliSessionManager(projectRoot: string = process.cwd()): CliSe
managersByRoot.set(resolved, created);
return created;
}
/**
* Find the manager that owns a given sessionKey.
* Useful for cross-workspace routing (tmux-like send) where the executor
* may not share the same workflowDir/projectRoot as the target session.
*/
export function findCliSessionManager(sessionKey: string): CliSessionManager | null {
for (const manager of managersByRoot.values()) {
if (manager.hasSession(sessionKey)) return manager;
}
return null;
}