Merge Codex Remote Control support
This commit is contained in:
@@ -349,15 +349,45 @@ def start_agent(cfg, agent, *, force=False):
|
||||
if backend.get("remote_control"):
|
||||
parts.append(_render_template(backend.get("remote_control_flag",
|
||||
"--remote-control '{session}'"), {"session": session}))
|
||||
if backend.get("remote_addr"):
|
||||
remote_values = {
|
||||
"addr": backend["remote_addr"], "session": session, "model": model,
|
||||
"dir": shlex.quote(cwd),
|
||||
}
|
||||
parts.append(_render_template(
|
||||
backend.get("remote_addr_flag", "--remote '{addr}'"), remote_values))
|
||||
remote_cwd_flag = backend.get("remote_cwd_flag", "-C {dir}")
|
||||
if remote_cwd_flag:
|
||||
parts.append(_render_template(remote_cwd_flag, remote_values))
|
||||
if model:
|
||||
parts.append(_render_template(backend.get("model_flag", "--model '{model}'"), {"model": model}))
|
||||
if backend.get("flags"):
|
||||
parts.append(backend["flags"])
|
||||
parts.append(f"\"$(cat '{kf}')\"")
|
||||
cmd = " ".join(p for p in parts if p)
|
||||
# Some interactive CLIs need an idempotent service prepared before their TUI starts.
|
||||
# The Codex backend starts the shared app-server here, while remote_addr above makes the
|
||||
# pane's TUI a client of that daemon so both local and Remote UIs share one thread writer.
|
||||
if backend.get("preamble"):
|
||||
preamble = _render_template(backend["preamble"], {
|
||||
"bin": backend["bin"], "session": session, "model": model,
|
||||
"dir": shlex.quote(cwd),
|
||||
})
|
||||
cmd = f"{preamble} && {cmd}"
|
||||
log(f"starting {session} ({agent['backend']}, kind={agent['kind']}, phase={pid}, "
|
||||
f"model={model or 'default'}{', resume' if rid else ''})")
|
||||
new_session(session, cwd, cmd, log_path)
|
||||
# An unattended TUI may present a deterministic first-run gate before it processes the
|
||||
# prompt already supplied on argv (Codex asks whether to trust a new project directory).
|
||||
# Backends opt in with both the screen regex and response; nothing is accepted implicitly.
|
||||
startup_re = backend.get("startup_prompt_re")
|
||||
if startup_re:
|
||||
time.sleep(int(backend.get("startup_prompt_delay", 2)))
|
||||
if re.search(startup_re, capture_pane(session, 40), re.I):
|
||||
_run(["tmux", "send-keys", "-t", TP(session), "-l", "--",
|
||||
str(backend.get("startup_prompt_response", ""))])
|
||||
_run(["tmux", "send-keys", "-t", TP(session),
|
||||
backend.get("submit_key", "Enter")])
|
||||
|
||||
def start_service(cfg, svc):
|
||||
session = svc["session"]
|
||||
|
||||
Reference in New Issue
Block a user