Drop Deno from the agents and spawn child processes directly #22
Reference in New Issue
Block a user
Delete Branch "drop-deno"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stacked on #21: this branch now sits on top of
alias-targets(#21), which restored main's pre-split source layout (src/run.tsetc.) and carries the lint/notes cleanup. Merge #21 first; this PR's own commits are the last three (Spawn child processes directly...,Stop installing Deno in the action, and a note-count fix). The earlieragent-*.ts/run-context.tssplit no longer exists, so the spawn changes were re-applied tosrc/run.ts;src/child.tsand the tests are unchanged in substance.Merge order: merge this only AFTER the app migration PRs have landed: home #54, eximium #27, stockvibe #18, brain #6, memona-home #47, and memona #1182. This action runs live from
@mainin those repos, and after this PR the bot no longer installs Deno, so it could not check a repo that still uses Deno.Changes
action.ymlno longer installsdenoalongside the agent CLIs. The AGENTS.md sentence and the decision note about keeping Deno for Deno repos are removed.src/command.ts, the rebuiltDeno.CommandAPI, is gone. Each call site now callsspawnfromnode:child_processwith explicitstdio,uid/gid, and the fullenv.src/child.tsholds the two pieces every call site shares:exitCode(child)settles onexitand reports a signal as 128 + signo. It rejects on a failed start, with the rejection pre-caught so it isn't reported as unhandled.echo(stream, chunk)writes and waits fordrainwhen the buffer is full.src/errors.tsstays because it isn't specific to the shim (isNotFoundhas six callers). Its Deno comment and themakeTempFile"as Deno did" comment are removed.retryInvalidTokenandCodexAttemptnow take an exitcodeinstead of a{ success, code }status.Behavior
"ignore"for every child (git config,npx skills,codex login status, device login,codex exec, Claude, OpenCode), so an agent CLI can't hang waiting for input. Onlycodex login --with-api-keypipes the token in.runAgentCommand,codex login status) now use"ignore"instead of being buffered.execFile: nothing usesexecFile, so there is no 1 MiBmaxBufferlimit, and piped output is still read as a stream.Tests
src/child.test.tscovers exit codes, signal → 137, resolving on exit while a grandchild still holds the pipes open, and rejection when the command is missing.spawnSync.auth.test.tsuses exit codes.workflow.test.tsnow checks thataction.ymldoesn't install Deno.vp checkis clean.vp testpasses 61 tests with 5 root-only tests skipped locally, and all 66 pass as root in anode:24-bookwormcontainer.🤖 Generated with Claude Code
@bot
✅ Approved
Node child-process migration is ready to merge.
Strengths
Migration
Explicit stdio, sanitized environments, profile UID/GID isolation, signal exit codes, and stream backpressure preserve the action's intended runtime behavior.
Checks
Passed
npx vp checknpx vp test— 61 passed, 5 root-only skipped locallyCheck / check (pull_request)— successful; it runs all 66 tests as rootNotes
CI status
The failed
Agents / agent (pull_request)status is the canceled duplicate automation run and is not a project check.@bot
✅ Approved
Node child-process migration is ready to merge.
Strengths
Migration
exitCodepreserves signal exit semantics and resolves onexit, while the added tests cover failure-to-start and grandchild-held pipes.Issues
None
No Critical, Important, or Minor findings.
Recommendations
None
No follow-up changes recommended.
Assessment
Ready
Checks
Passed
npx vp checknpx vp test— 61 passed, 5 root-only skipped in this non-root runnerCheck / check (pull_request)— successful on50328ca; its root job runs all 66 testsDeclined to judge
None
No behavior was set aside.
tsconfig.json already sets "strict": true and a scratch implicit-any/unchecked-null file fails vp check, so no strictness changes were needed.
50328caac5toa2de4a5d6dFinal audit: rebased this branch onto #21 (alias-targets), whose size-revert deleted the agent-*.ts/run-context.ts split this PR edited, so the two PRs conflicted. Re-applied the spawn/child.ts changes to the restored src/run.ts, removed src/command.ts and the shim note, dropped Deno from action.yml, AGENTS.md and the decisions note. vp check clean; vp test 61 passed + 5 skipped locally, all 66 pass as root in node:24-bookworm (podman). Old head kept locally as backup/drop-deno-pre-stack (
50328ca). bot-agents has no UI, so no browser smoke test.@bot
✅ Approved
npx vp check;npx vp test(61 passed, 5 root-only skipped locally).Review notes
Strengths:
spawncall sites retain explicit profile UID/GID, isolated environment, and deliberate stdio.exitCodepreserves exit and signal semantics and covers failed starts.No blocking or minor findings.
a2de4a5d6dto0ee3ac7687Rebased onto #21's tsconfig strictness commit; no new fixes needed, vp check/test pass.
0ee3ac7687to75045b18c975045b18c9toe360df3163Rebased onto alias-targets after its engines removal; vp check and vp test pass.
e360df3163to479c469ed0Rebased onto alias-targets with allowUnreachableCode and allowUnusedLabels off; vp check and vp test pass.
@bot
✅ Approved
Node child-process migration is ready to merge.
Checks
Passed
npx vp checknpx vp test— 61 passed, 5 root-only skipped in this non-root runnerCheck / check (pull_request)— successful on479c469git diff --checkStrengths
Migration
spawncalls retain sanitized environments, profile UID/GID isolation, deliberate stdio, and signal exit semantics.exitCodecovers normal exits, signals, failed starts, and pipe lifetime behavior.Issues
None
No Critical, Important, or Minor findings.
Recommendations
None
No follow-up changes recommended.
Assessment
Ready
Declined to judge
None
No behavior was set aside.
479c469ed0to6e8fbc5255Rebased onto alias-targets after its AGENTS.md wording fix; vp check and vp test pass.
@bot
✅ Approved
Direct child-process execution and Deno removal are ready.
Checks
Checks and review scope
npx vp checkpassed.npx vp testpassed: 61 passed, 5 root-only skipped locally.Check / check (pull_request).006bbe6through head6e8fbc5range and the repository rules.Strengths
Process handling and coverage
spawncalls retain profile UID/GID and sanitized environments.Issues
No blocking issues
Recommendations
None
Assessment
Ready to merge
6e8fbc5255to7d1ca6e285Rebased onto alias-targets after its notes fixes; vp check and vp test pass.
@bot
✅ Approved
Summary
Tests
vp checkvp test— 61 passed, 5 root-only skipped locallyReview notes
Strengths
Issues
Recommendations
Declined to judge
Assessment
7d1ca6e285to2b98445acfRebased onto alias-targets after the plugin rename in the notes; vp check and vp test pass.
@bot
✅ Approved
Direct Node child-process migration is ready to merge.
Checks
Passed
npx vp checknpx vp test— 56 passed, 5 root-only skipped locallyCheck / check (pull_request)— successful on2b98445006bbe6to head2b98445review, policy scan, and whitespace checkReview
Findings
spawnuse retains explicit stdio, sanitized environments, and profile UID/GID isolation.2b98445acftofbc92aca77