You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Configure timeout: OpenCode's embedded JS runtime doesn't deliver stdin.write() to child process #1
The configure request times out after 30s on every startup. The aft binary spawns successfully but never receives the NDJSON command on stdin. After 3 restart attempts, the plugin gives up entirely.
[aft-plugin] Spawning binary: aft (cwd: /home/user)
[aft-plugin] [aft] started, pid XXXX
[aft-plugin] Request "configure" (id=1) timed out after 30000ms — restarting bridge
[aft-plugin] Max restarts (3) reached, giving up.
Root cause (upstream)
This is a bug in OpenCode's embedded JS runtime (Go-based), not in the AFT plugin or binary. OpenCode's implementation of child_process.spawn() has a buffering issue where stdin.write() data is accepted but never flushed to the child process.
Since the root cause is in OpenCode's stdio pipe handling, the AFT plugin could potentially work around it by using an alternative IPC mechanism instead of stdin/stdout pipes:
Unix domain socket
Temp file polling
Named pipe (FIFO)
TCP localhost
This would bypass OpenCode's broken child_process.spawn() stdin implementation entirely.
Impact
The plugin is completely non-functional - all AFT tools fail because the bridge can never complete the initial configure handshake. The tools register successfully with OpenCode but every actual invocation triggers the configure flow which always times out.
Activity
ualtinok commentedon Apr 9, 2026
This should be fixed in 0.10.1, let me know if it occurs again.
fix: address second council audit — 33 confirmed findings + Oracle fo…
fix(lsp): close v0.17.0 audit-3 supply-chain gaps
fix(lsp): expand watched-config detection, surface true FileChangeType
fix(bash,imports): permission gate before bg, byte-safe truncate, ses…
test(plugins): real-bridge resilience e2e (#21, #1, #4, #14)
feat(format): expose formatter_timeout_secs through configure()
fix(format): run auto_format on appendContent edits
fix(opencode-plugin): pin URL fetch DNS resolution (#1)
fix(opencode-plugin): organize URL fetch imports (#1)
feat(doctor): auto-fix ONNX issues + binary cache clear + skip incomp…
fix(bash_background): v0.21.1 audit batch — IO+lock, GC, canonicaliza…
fix(tests): kill watcher-arming + bash-background + mtime races
test: fix false-green honesty gaps in test framework
fix(search): honest interpreted_as on fallback paths + drop hidden le…
test(imports): golden-parity characterization corpus (Stream M safety…
fix(inspect,lsp): status-bar honesty — no fabricated zeros, full dele…
fix(inspect): never fabricate Tier-2 zeros in the status bar (#1)
bench(codegraph-vs-aft-agent): fix transcript+config harness bugs, ad…
merge: bounded top-K search, dedupe drains, fuzzy/read/stdout hot-pat…
fix(configure): background the warm search-index verify (primary conf…
fix(bridge): classify raw-path subc failures by connection liveness, …
fix(subc): harden SubcTransport client/route lifecycle (audit B-#1..5,#7
fix(subc): close forced-drain double-deliver + re-nudge-strand races …
fix(subc): close 3 regressions found re-auditing the round-1 delivery…
fix(subc): close stale-generation + task-id-width holes (round-3 re-a…
fix(subc): close the stale-teardown class by construction (round-4 re…
mason: bound cancellation liveness probes (cortexkit#1)