mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 10:16:44 +00:00
Catalog session rows (sidebar context menu + click), the built-in viewer header, and a new "Open Codex/Claude sessions in" preference can launch the native CLI (codex resume / claude --resume) in the operator terminal on the machine that owns the session. - Gateway-local sessions spawn through the existing terminal launch policy (sandbox/enabled gates preserved) with the resume command in the session cwd. - Paired-node sessions run through a new seq-ordered node PTY relay: a duplex node-host command streams PTY output via node.invoke.progress and receives keystrokes/resize via a new node.invoke.input event, behind the unchanged terminal.* client protocol (TerminalSessionManager gains a backend abstraction; node relay reuses the streaming-invoke controller). - Owner boundary: each plugin owns its resume command and builds argv from a validated thread id; the gateway routes node opens through the node command allowlist and plugin invoke policy (no advertisement-only trust), and nodes re-verify session eligibility before spawning. - UI setting catalogOpenTarget + canOpenTerminal capability gate every entry point; capability requires the owning host to actually have the CLI. Node PATH is normalized before command-availability probes, Windows .cmd/.bat shims spawn via ComSpec, and catalog terminal opens reattach persisted tabs before opening the new tab.
13 lines
679 B
TypeScript
13 lines
679 B
TypeScript
// Dependency-free Claude catalog contracts shared by catalog and terminal ownership.
|
|
export const CLAUDE_SESSIONS_LIST_COMMAND = "anthropic.claude.sessions.list.v1";
|
|
export const CLAUDE_SESSION_READ_COMMAND = "anthropic.claude.sessions.read.v1";
|
|
export const CLAUDE_CLI_NODE_RUN_COMMAND = "agent.cli.claude.run.v1";
|
|
export const CLAUDE_TERMINAL_RESUME_COMMAND = "anthropic.claude.terminal.resume.v1";
|
|
|
|
export class ClaudeCatalogParamsError extends Error {}
|
|
|
|
// Desktop sessions share the resumable projects store with CLI sessions.
|
|
export function isResumableClaudeSource(source: string | undefined): boolean {
|
|
return source === "claude-cli" || source === "claude-desktop";
|
|
}
|