Merge native subprocess containment into in-history updates

Preserve both sdk-minimal-in-history and native runner smoke scenarios. Record the current Cordis inspection through the actual upper headless owner while retaining upstream V2 bytes and strict prompt admission semantics.
This commit is contained in:
Tianyi Cui
2026-09-07 18:49:19 +08:00
162 changed files with 8422 additions and 1037 deletions
+108 -3
View File
@@ -775,7 +775,7 @@ def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
"--scenario",
choices=("all", "sdk-default", "sdk-custom", "sdk-minimal", "sdk-minimal-in-history", "sdk-fs-search", "sdk-spawn-node", "sdk-mcp", "sdk-snapshot", "sdk-restart", "sdk-profile-plugin", "sdk-live", "direct"),
choices=("all", "sdk-default", "sdk-custom", "sdk-minimal", "sdk-minimal-in-history", "sdk-fs-search", "sdk-spawn-node", "sdk-mcp", "sdk-snapshot", "sdk-restart", "sdk-profile-plugin", "sdk-live", "runner", "direct"),
default="all",
)
parser.add_argument("--exe", type=Path)
@@ -794,13 +794,20 @@ def main() -> None:
parser.error("--scenario sdk-profile-plugin requires --installed-wheel")
if args.installed_wheel:
args.exe = assert_installed_wheel_environment()
if args.scenario in {"all", "sdk-custom", "sdk-minimal", "sdk-minimal-in-history", "sdk-fs-search", "sdk-spawn-node", "sdk-snapshot", "sdk-restart", "direct"} and args.exe is None:
parser.error("--exe is required for custom, minimal, snapshot, and direct scenarios")
if args.scenario in {"all", "sdk-custom", "sdk-minimal", "sdk-minimal-in-history", "sdk-fs-search", "sdk-spawn-node", "sdk-snapshot", "sdk-restart", "runner", "direct"} and args.exe is None:
parser.error("--exe is required for custom, minimal, fs-search, spawn-node, snapshot, restart, runner, and direct scenarios")
if args.update_snapshots and args.scenario not in {"all", "sdk-minimal", "sdk-minimal-in-history", "sdk-snapshot", "sdk-restart"}:
parser.error("--update-snapshots requires --scenario sdk-minimal, sdk-minimal-in-history, sdk-snapshot, sdk-restart, or all")
if args.exe is not None and not args.exe.is_file():
parser.error(f"runtime executable does not exist: {args.exe}")
if args.scenario in {"all", "runner"}:
assert args.exe is not None
smoke_packaged_runner(args.exe.resolve())
if args.scenario == "runner":
print("smoke-python-runtime: runner passed")
return
if args.scenario == "sdk-live":
smoke_sdk_live()
print("smoke-python-runtime: sdk-live passed")
@@ -1487,6 +1494,104 @@ def smoke_direct(base_url: str, executable: Path) -> None:
assert_session_log(sessions, root, EXPECTED_TEXT)
def smoke_packaged_runner(executable: Path) -> None:
"""Exercise the private subprocess runner through the single-file entry."""
with tempfile.TemporaryDirectory(prefix="dsh-packaged-runner-") as temporary:
root = Path(temporary).resolve()
target_script = (
"import os,sys; "
"ok = (os.getcwd() == os.environ['PACKAGED_RUNNER_EXPECTED_CWD'] "
"and os.environ.get('DSH_SUBPROCESS_RUNNER') == 'target-collision-restored'); "
"sys.exit(7 if ok else 9)"
)
if not IS_WINDOWS:
request_path = root / "launch-request.json"
target_env = dict(os.environ)
target_env["DSH_SUBPROCESS_RUNNER"] = "target-collision-restored"
target_env["PACKAGED_RUNNER_EXPECTED_CWD"] = str(root)
request_path.write_text(
json.dumps({"cwd": str(root), "env": target_env}),
encoding="utf-8",
)
request_path.chmod(0o600)
environment = dict(os.environ)
environment["DSH_SUBPROCESS_RUNNER"] = str(request_path)
result = subprocess.run(
[str(executable), "--", sys.executable, "-c", target_script],
cwd=root,
env=environment,
capture_output=True,
text=True,
timeout=30,
check=False,
)
if result.returncode != 7 or request_path.exists() or (root / "startup-error.json").exists():
raise AssertionError(
"packaged POSIX runner failed: "
f"exit={result.returncode}; stdout={result.stdout!r}; stderr={result.stderr!r}"
)
return
node = shutil.which("node")
if node is None:
raise AssertionError("packaged Windows runner smoke requires node on PATH")
helper = root / "windows-runner-smoke.mjs"
helper.write_text(
"""import { spawn } from 'node:child_process'
const [runtime, target, cwd, targetScript] = process.argv.slice(2)
const child = spawn(runtime, ['--', target, '-c', targetScript], {
cwd,
env: { ...process.env, DSH_SUBPROCESS_RUNNER: 'windows' },
stdio: ['ignore', 'ignore', 'ignore', 'ipc', 'pipe', 'pipe', 'pipe'],
})
const messages = []
let stdout = ''
let stderr = ''
child.stdio[4].destroy()
child.stdio[5].on('data', chunk => { stdout += chunk.toString() })
child.stdio[6].on('data', chunk => { stderr += chunk.toString() })
child.on('message', message => { messages.push(message) })
const result = await new Promise((resolve, reject) => {
child.once('error', reject)
child.once('spawn', () => {
child.send({
type: 'start',
cwd,
env: {
...process.env,
DSH_SUBPROCESS_RUNNER: 'target-collision-restored',
PACKAGED_RUNNER_EXPECTED_CWD: cwd,
},
}, error => { if (error) reject(error) })
})
child.once('close', (exitCode, signal) => { resolve({ exitCode, signal }) })
})
process.stdout.write(JSON.stringify({ ...result, messages, stdout, stderr }))
""",
encoding="utf-8",
)
helper_result = subprocess.run(
[node, str(helper), str(executable), sys.executable, str(root), target_script],
cwd=root,
capture_output=True,
text=True,
timeout=30,
check=False,
)
if helper_result.returncode != 0:
raise AssertionError(f"packaged Windows runner helper failed: {helper_result.stderr}")
observed = json.loads(helper_result.stdout)
expected = {
"exitCode": 0,
"signal": None,
"messages": [{"type": "target-exit", "exitCode": 7}],
"stdout": "",
"stderr": "",
}
if observed != expected:
raise AssertionError(f"packaged Windows runner returned unexpected facts: {observed}")
def is_idle_notification(message: dict[str, object]) -> bool:
"""Return whether a JSON-RPC notification marks a session idle."""
params = message.get("params")