Repository navigation
Select OpenCode plugin exports from the execution host version - #24662
Conversation
Reuse captured composer readiness on local and paired execution hosts and revoke launching-shell paste anchors. Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
751d58a to
7f2ba67
Compare
9356b67 to
42788e7
Compare
There was a problem hiding this comment.
ℹ️ No critical issues — minor suggestions inline.
Reviewed changes
- Execution-host version probe — new
src/shared/opencode-cli-version.tsparsesopencode --versionand maps it to{ version, pluginApi, promptMode }; newsrc/main/opencode/opencode-cli-version.tsruns a 5s/4KB bounded probe behind a 60s identity-keyed cache. - Launch-capability resolution — new
src/main/opencode/opencode-launch-capabilities.tsresolves the executable natively, via an injected relay resolver, or throughrunWslProcess, rebuilding the guest env fromWSLENV. - Launch wiring — new
src/main/opencode/opencode-pty-launch.tsstrips inheritedORCA_OPENCODE_PLUGIN_API, probes fresh non-remote launches, writes the selection, and removes it fromenvToDeleteso the final provider pass cannot drop it; wired into the desktop and runtime spawn-option builders. - Plugin default export —
src/main/opencode/status-plugin-factory-source.tsnow chooses the callable factory forv1and the object shape otherwise viaprocess.env.ORCA_OPENCODE_PLUGIN_API. - Relay probing —
src/relay/pty-handler.tsprobes its own host and returns optionalopenCodeCapabilities;src/main/providers/pty-spawn-result.tscarries the optional field. - Tests — new parser, probe-cache, capability, and launch-prep suites plus a v1 default-export case, with exact assertions.
deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏
Preserve complete original 27-path contribution and current main credential fields. Private preparation only. Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Preserve complete original 14-path contribution and current main preparation. Keep native startup intent in its later topic. Private preparation only.
Preserve complete original 27-path contribution and current main credential fields. Private preparation only. Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> Restack on selected main a40, retain its jcode launch configuration and record the unchanged jcode fallback lane in the exhaustive test.
Preserve complete original 14-path contribution and current main preparation. Keep native startup intent in its later topic. Private preparation only. Restack on selected main a40, retain its jcode launch configuration and record the unchanged jcode fallback lane in the exhaustive test.
There was a problem hiding this comment.
ℹ️ No critical issues — one minor WSL probe-isolation gap inline.
Reviewed changes
The GitHub diff is inflated by a stale base (nwparker/OpenCode-Launch-Prompts); the authored delta is 25 files, re-read end-to-end. The three findings from the prior pullfrog review at 42788e are all addressed.
- Execution-host version probe —
src/shared/opencode-cli-version.tsparsesopencode --versioninto{ version, pluginApi, promptMode };src/main/opencode/opencode-cli-version.tsruns a 5s/4KB bounded probe behind a 60s identity-keyed cache that now excludes pane-identity keys. - Launch-capability resolution —
src/main/opencode/opencode-launch-capabilities.tsresolves the executable natively, via the injected relay resolver, or throughrunWslProcess, rebuilding the guest env fromWSLENV. - Launch wiring —
src/main/opencode/opencode-pty-launch.tsstrips any inherited selection, probes fresh non-remote launches, writes the probed value, and removes it fromenvToDeleteso the final provider pass cannot drop it; wired into both spawn-option builders. - Plugin default export —
src/main/opencode/status-plugin-factory-source.tsselects the callable factory forv1and the object shape otherwise viaprocess.env.ORCA_OPENCODE_PLUGIN_API. - Relay probing + revive restore — capabilities are persisted on
ManagedPty/SerializedPtyEntryand validated/restored onreviveEntryviaapplyOpenCodePluginSelection. - Invalid TUI config — a typed
InvalidOpenCodeTuiConfigErroris caught so a badtui.json/tui.jsoncno longer blocks the separate server plugin install, while filesystem errors still propagate. - Tests — parser, probe-cache, capability, launch-prep, relay-revive, and invalid-TUI-config suites plus a v1 default-export case, with exact assertions; contract tests pin
ORCA_OPENCODE_PLUGIN_API.
deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
Caution
This PR's new head does not build. src/main/opencode/opencode-pty-launch.ts imports three OpenCode startup-prompt modules that are absent from the tree, so every orcad build job is red on dcec863, and its return-type change also breaks both call sites.
Reviewed changes
Rereviewed the delta since the prior pullfrog review at c401e91 (authored commits ec6686ef, 1dfbd55, dcec863), which folds the OpenCode startup-prompt layer into the execution-host plugin-selection source.
- WSL probe isolation (prior finding addressed) —
probeOpenCodeLaunchCapabilitiesnow rebuilds the guestWSLENVfrom the keys present in the resolved probe env and supplies an explicit empty carrier when none survive, so a key stripped from the probe can no longer be restored through the inherited carrier; a newopencode-wsl-probe-environment.test.tsexercises the production runner boundary, including flags, empty values and concurrent cache reuse. - Startup-prompt intent folded into
prepareOpenCodePtyLaunch— for a verified2.0.16(prefill) fresh launch it reserves a nonce, installs the owned overlay and strips--prompt <body>; the function now returns{ env, command }instead of the env record. - New tests for the startup-prompt gate added to
opencode-pty-launch.test.ts.
deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. 📝 WalkthroughWalkthroughThe changes add OpenCode version and launch capability detection, then use the results to select plugin API behavior for PTY launches. They add notification-source ownership and per-source desktop mute controls, revise macOS updater install and quit handling, and route orchestration sends through a shared API. Other changes update Claude subagent waiting-state reporting, mobile and renderer cleanup, file-opening behavior, managed-account handling, and build and release tooling. Priority: ➖ Normal Merge Risk: 🔵 Low · up to Removing a managed account whose stored ID has different letter casing can leave its profile directory and credentials on disk on case-sensitive filesystems. The earlier OpenCode launch build failures are resolved. This needs a small fix but does not block the main feature work. Security Architecture ReviewSecurity architecture risk: 🟡 Moderate · up to The inspected paths preserve important permission, identity, and failure-recovery safeguards. However, credential inheritance across execution environments and asynchronous recovery behavior have not been fully verified. No introduced security vulnerability was established in the inspected scope. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 4 | ❓ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 24.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 100 functions across 73 files. (160 skipped: 18 unsupported, 142 over the file limit.) ✨ Finishing Touches 💡 1📝 Generate docstrings 💡
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
ℹ️ Review info
⚙️ Run configuration
- Configuration used: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
1f4ba678-21ce-4545-ac50-35fd50ae2f92
📒 Files selected for processing (26)
src/main/ipc/pty/ipc/spawn-options.tssrc/main/ipc/pty/runtime/spawn-options.tssrc/main/opencode/hook-plugin-dispose-host.test.tssrc/main/opencode/hook-plugin-legacy-tui-ownership.test.tssrc/main/opencode/hook-plugin-module-contract.test.tssrc/main/opencode/hook-plugin-opencode2-setup.test.tssrc/main/opencode/hook-service-invalid-tui-config.test.tssrc/main/opencode/hook-service.test.tssrc/main/opencode/opencode-cli-version.test.tssrc/main/opencode/opencode-cli-version.tssrc/main/opencode/opencode-launch-capabilities.test.tssrc/main/opencode/opencode-launch-capabilities.tssrc/main/opencode/opencode-legacy-plugin-loader-fixture.tssrc/main/opencode/opencode-pty-launch.test.tssrc/main/opencode/opencode-pty-launch.tssrc/main/opencode/opencode-wsl-probe-environment.test.tssrc/main/opencode/status-plugin-factory-source.tssrc/main/providers/provider-dispatch.test.tssrc/main/providers/pty-spawn-result.tssrc/relay/opencode-plugin-selection.tssrc/relay/pty-handler-opencode-revive.test.tssrc/relay/pty-handler.tssrc/shared/opencode-cli-version.test.tssrc/shared/opencode-cli-version.tssrc/shared/opencode-tui-config-registration.tssrc/shared/opencode-tui-plugin-install.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Rereviewed the delta since the prior pullfrog review at dcec863 — the merge commit a77cea7f, which resolves both blocking findings from that review.
- Build restored —
prepareOpenCodePtyLaunchis environment-only again (Record<string, string> | undefined); the three imports of the absentopencode-startup-prompt*modules and the{ env, command }return are gone, so both spawn-option callers compile.pnpm tc:nodeis clean. - Startup-prompt layer scoped out — the prefill nonce reservation, owned-overlay install and
--promptstripping were reverted out of this PR (kept in the dependent #24762);grepfinds no remainingopencode-startup-prompt*reference. - Tests reverted in lockstep —
opencode-pty-launch.test.tscallsprepareOpenCodePtyLaunchdirectly and asserts the env record; the WSL probe-environment suite is unchanged. 444 OpenCode and relay tests pass on the checked-out head. - Doc-only wording —
draft-paste-ready-scanner.tsinline timing comment now matches its JSDoc (~3.9s).
The 239-file checkout_pr diff is base drift (main churn against a stale 995715b1 base); the authored surface is the OpenCode caps layer, already reviewed through c401e91.
deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
- Configuration used: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
e02a71b4-bda8-4d91-9daf-220054ae55c6
⛔ Files ignored due to path filters (1)
docs/assets/readme-downloads.svgis excluded by!**/*.svg
📒 Files selected for processing (215)
.github/workflows/macos-updater-tests.ymlREADME.mdcloud/apps/relay/src/host-control-proof-cleanup.test.tscloud/apps/relay/src/host-session-registry.tsconfig/build-plugins/plain-node-entry-guard.tsconfig/reliability-gates.jsoncconfig/scripts/plain-node-entry-guard.test.tsconfig/scripts/stable-release-tag-selection-budget.test.mjsconfig/scripts/stable-release-tags.mjsdocs/readme/README.es.mddocs/readme/README.fr.mddocs/readme/README.ja.mddocs/readme/README.ko.mddocs/readme/README.pt.mddocs/readme/README.zh-CN.mddocs/reference/agent-status-store.mdmobile/rpc-foundation/goldens/lifecycle-inventory-lifecycle.jsonmobile/src/mobile-web-shell/bridge-host-subscription-start-cleanup.test.tsmobile/src/mobile-web-shell/bridge-host-subscriptions.tsmobile/src/platform/native-media-device.tsmobile/src/platform/native-media-stage-cleanup.test.tsmobile/src/session/mobile-file-search-owner-cleanup.test.tsxmobile/src/session/mobile-session-toast-owner-cleanup.test.tsxmobile/src/session/use-mobile-native-chat-file-search.tsmobile/src/session/use-mobile-session-feedback-capabilities.tsmobile/src/test-support/rpc-recording/derived-goldens.tsmobile/src/test-support/rpc-recording/inventory-lifecycle-derivation.test.tsmobile/src/transport/mobile-relay-e2ee-link.tsmobile/src/transport/mobile-relay-error-timer-cleanup.test.tsmobile/src/transport/mobile-relay-pairing-error-timer-cleanup.test.tsmobile/src/transport/mobile-relay-physical-client.tsmobile/src/worktree/agent-row-lineage-parity.test.tsmobile/src/worktree/agent-row-lineage.tssrc/cli/handlers/file.test.tssrc/cli/handlers/file.tssrc/main/claude/__fixtures__/claude-subagent-permission-frames.jsonsrc/main/claude/claude-can-use-tool-test-support.tssrc/main/claude/claude-child-tool-queries.tssrc/main/claude/claude-child-work-decoder.test.tssrc/main/claude/claude-child-work-decoder.tssrc/main/claude/claude-child-work-evidence-retention.test.tssrc/main/claude/claude-child-work-evidence.tssrc/main/claude/claude-journal-translator-contract.tssrc/main/claude/claude-prompt-registry.tssrc/main/claude/claude-structured-control-actions.test.tssrc/main/claude/claude-structured-inbound-control.tssrc/main/claude/claude-structured-journal-prompt-cards.test.tssrc/main/claude/claude-structured-journal-prompts.tssrc/main/claude/claude-structured-journal-translation.tssrc/main/claude/claude-structured-session-adapter.tssrc/main/claude/claude-subagent-linkage.tssrc/main/claude/claude-subagent-permission-request.test.tssrc/main/claude/claude-subagent-roster.tssrc/main/claude/claude-turn-ownership.test.tssrc/main/daemon/daemon-idle-inventory-budget.test.tssrc/main/daemon/daemon-server.tssrc/main/daemon/terminal-host.tssrc/main/macos-update-running-instances.integration.test.tssrc/main/macos-update-running-instances.test.tssrc/main/macos-update-running-instances.tssrc/main/managed-data-accounts/service-enrollment-persistence.test.tssrc/main/managed-data-accounts/service.test.tssrc/main/managed-data-accounts/service.tssrc/main/native-chat/agent-session-wire/structured-agent-session-event-sink-queue.tssrc/main/native-chat/agent-session-wire/structured-agent-session-event-sink.test.tssrc/main/native-chat/agent-session-wire/structured-agent-session-event-sink.tssrc/main/notifications/notification-delivery-service.test.tssrc/main/notifications/notification-delivery-service.tssrc/main/opencode/opencode-pty-launch.test.tssrc/main/opencode/opencode-pty-launch.tssrc/main/persistence/applying-settings/notification-settings-normalization.test.tssrc/main/persistence/applying-settings/onboarding-normalization.tssrc/main/runtime/orca-runtime-files-mobile-explorer-reads.test.tssrc/main/runtime/orchestration/coordinator-task-dispatch.tssrc/main/runtime/orchestration/db/decision-gates/decision-gate-store.tssrc/main/runtime/orchestration/db/dispatch-context/dispatch-completion.tssrc/main/runtime/orchestration/db/dispatch-depth.tssrc/main/runtime/orchestration/db/legacy/legacy-compatibility-candidates.tssrc/main/runtime/orchestration/db/messages/foreign-direct-mailbox-routing.tssrc/main/runtime/orchestration/db/remaining-dispatch-statement-compilation.test.tssrc/main/runtime/orchestration/send-agent-turn-boundary.test.tssrc/main/runtime/orchestration/send-agent-turn-host.test.tssrc/main/runtime/orchestration/send-agent-turn.test.tssrc/main/runtime/orchestration/send-agent-turn.tssrc/main/runtime/orchestration/structured-mailbox-pointer-delivery.tssrc/main/runtime/orchestration/structured-mailbox-pointer-host.test.tssrc/main/runtime/orchestration/structured-mailbox-pointer-host.tssrc/main/runtime/orchestration/structured-pointer-operation-id.test.tssrc/main/runtime/orchestration/structured-pointer-operation-id.tssrc/main/runtime/rpc/methods/orchestration-structured-worker-session.test.tssrc/main/runtime/rpc/methods/orchestration-structured-worker-session.tssrc/main/runtime/rpc/methods/orchestration/federation/federation.tssrc/main/runtime/rpc/methods/orchestration/runs/dispatch-methods.tssrc/main/runtime/rpc/methods/orchestration/worker/deliver-worker-dispatch-preamble.tssrc/main/runtime/runtime-file-commands-constructor.tssrc/main/startup/desktop-startup-ordering.test.tssrc/main/startup/main-process-quit-update-veto.test.tssrc/main/startup/main-process-quit.tssrc/main/updater-events.test.tssrc/main/updater-fallback.tssrc/main/updater-linux-package-recovery-actions.test.tssrc/main/updater-mac-install.tssrc/main/updater-mac-quit-guard.test.tssrc/main/updater-test-harness.tssrc/main/updater.check-failure.test.tssrc/main/updater.check-preflight.test.tssrc/main/updater.fallback.test.tssrc/main/updater.headless-serve-install.test.tssrc/main/updater.install-failure-cause.test.tssrc/main/updater.mac-install.test.tssrc/main/updater/updater-download-install.tssrc/main/updater/updater-install-execution.tssrc/main/updater/updater-menu-checks.tssrc/main/updater/updater-scheduling.tssrc/main/window/dashboard-popout-window.test.tssrc/main/window/dashboard-popout-window.tssrc/main/window/main-window-state-lifecycle.test.tssrc/main/window/main-window-state-lifecycle.tssrc/main/window/main-window-updater-deferred-setup.test.tssrc/main/window/main-window-updater.tssrc/relay/ai-vault-service-cancellation.test.tssrc/relay/ai-vault-service-entry.tssrc/relay/pty-handler-owner-inventory-clone-budget.test.tssrc/relay/pty-handler.tssrc/renderer/src/attention/notification-sources.test.tssrc/renderer/src/attention/notification-sources.tssrc/renderer/src/attention/notification-subject-owner.tssrc/renderer/src/components/UpdateCard.error-card.test.tsxsrc/renderer/src/components/activity/activity-search-query-work-budget.test.tsxsrc/renderer/src/components/activity/activity-thread-grouping.tssrc/renderer/src/components/activity/use-agent-pane-threads.tssrc/renderer/src/components/dashboard-popout/AgentTerminalPreview.frame-lifecycle.test.tsxsrc/renderer/src/components/dashboard-popout/AgentTerminalPreview.settings-lifetime.test.tsxsrc/renderer/src/components/dashboard-popout/AgentTerminalPreview.tsxsrc/renderer/src/components/dashboard-popout/preview-terminal-box-fit-lifecycle.test.tssrc/renderer/src/components/dashboard-popout/preview-terminal-box-fit.tssrc/renderer/src/components/editor/markdown-preview-review-frame-lifecycle.test.tsxsrc/renderer/src/components/editor/markdown-preview-review-timer-cleanup.tssrc/renderer/src/components/editor/use-markdown-preview-foundation.tssrc/renderer/src/components/editor/use-markdown-preview-review-actions.tssrc/renderer/src/components/editor/use-markdown-preview-viewport.tssrc/renderer/src/components/maintenance/update-card/update-card-error-model.tssrc/renderer/src/components/native-chat/StructuredAgentSessionAttentionBridge.test.tsxsrc/renderer/src/components/native-chat/StructuredAgentSessionAttentionBridge.tsxsrc/renderer/src/components/native-chat/structured-attention-dispatch.test.tssrc/renderer/src/components/native-chat/structured-attention-dispatch.tssrc/renderer/src/components/onboarding/use-onboarding-flow-persistence.test.tssrc/renderer/src/components/settings/GeneralUpdateSettingsSection.test.tsxsrc/renderer/src/components/settings/GeneralUpdateSettingsSection.tsxsrc/renderer/src/components/settings/NotificationHostToggles.test.tsxsrc/renderer/src/components/settings/NotificationHostToggles.tsxsrc/renderer/src/components/settings/NotificationsPane.test.tsxsrc/renderer/src/components/settings/NotificationsPane.tsxsrc/renderer/src/components/settings/notification-host-pending-save.test.tsxsrc/renderer/src/components/settings/notifications-search.tssrc/renderer/src/components/settings/use-notification-source-options.tssrc/renderer/src/components/status-bar/resource-manager-exit-render-budget.test.tsxsrc/renderer/src/components/status-bar/resource-session-removal-render-budget.test.tsxsrc/renderer/src/components/status-bar/use-resource-session-inventory.tssrc/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.tssrc/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.tssrc/renderer/src/components/terminal-pane/pty-connection-hook-completion-bell-arbitration.test.tssrc/renderer/src/components/terminal-pane/pty-connection-hook-completion-side-effects.test.tssrc/renderer/src/components/terminal-pane/pty-connection-hook-idle-arbitration.test.tssrc/renderer/src/components/terminal-pane/pty-connection-task-complete-dispatch.test.tssrc/renderer/src/components/terminal-pane/pty-connection-types.tssrc/renderer/src/components/terminal-pane/pty-connection/agent-task-complete-notify.tssrc/renderer/src/components/terminal-pane/pty-connection/pane-pty-visibility-bind.tssrc/renderer/src/components/terminal-pane/pty-output-side-effect-queue-reentrancy.test.tssrc/renderer/src/components/terminal-pane/pty-output-side-effect-queue-retention.test.tssrc/renderer/src/components/terminal-pane/pty-output-side-effect-queue.tssrc/renderer/src/components/terminal-pane/pty-side-effect-pending-census.test.tssrc/renderer/src/components/terminal-pane/pty-side-effect-pending-census.tssrc/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.tssrc/renderer/src/components/terminal-pane/pty-transport.tssrc/renderer/src/components/terminal-pane/terminal-pane-lifecycle-types.tssrc/renderer/src/components/terminal-pane/terminal-pane-mount-cleanup.tssrc/renderer/src/components/terminal-pane/terminal-parked-pty-watcher.tssrc/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.tssrc/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.tssrc/renderer/src/components/terminal-pane/terminal-parked-watcher-registry.tssrc/renderer/src/components/terminal-pane/use-notification-dispatch.tssrc/renderer/src/components/ui/collapsible.tsxsrc/renderer/src/i18n/locales/en.jsonsrc/renderer/src/i18n/locales/es.jsonsrc/renderer/src/i18n/locales/fr.jsonsrc/renderer/src/i18n/locales/ja.jsonsrc/renderer/src/i18n/locales/ko.jsonsrc/renderer/src/i18n/locales/zh.jsonsrc/renderer/src/lib/pane-manager/pane-container-listener-lifecycle.test.tssrc/renderer/src/lib/pane-manager/pane-dom-focus-class-sync-lifecycle.test.tssrc/renderer/src/lib/pane-manager/pane-dom-focus-class-sync.tssrc/renderer/src/web/preload-api/web-preference-normalization.tssrc/shared/agent-session-option-agent-args.tssrc/shared/agent-session-option-catalog-antigravity.tssrc/shared/agent-session-option-catalog-claude-codex.tssrc/shared/agent-session-option-catalog-codebuddy.tssrc/shared/agent-session-option-catalog-gemini-cursor.tssrc/shared/agent-session-option-catalog-grok.test.tssrc/shared/agent-session-option-catalog-grok.tssrc/shared/agent-session-option-catalog-muse.tssrc/shared/agent-session-option-catalog-omp.test.tssrc/shared/agent-session-option-catalog-omp.tssrc/shared/agent-session-option-catalog-removers.test.tssrc/shared/agent-session-option-catalog-types.tssrc/shared/agent-session-option-launch.tssrc/shared/command-option-occurrence.tssrc/shared/draft-paste-ready-scanner.tssrc/shared/main-agent-status-parity.test.tssrc/shared/notification-settings-defaults.tssrc/shared/notification-settings-types.tssrc/shared/notification-source.tssrc/shared/structured-agent-session-outbox.tssrc/shared/structured-agent-session-send-mutation.tssrc/shared/update-status-types.ts
💤 Files with no reviewable changes (5)
- src/main/runtime/orchestration/structured-pointer-operation-id.test.ts
- src/shared/agent-session-option-catalog-muse.ts
- src/shared/agent-session-option-catalog-antigravity.ts
- src/main/runtime/orchestration/structured-mailbox-pointer-delivery.ts
- src/shared/agent-session-option-catalog-codebuddy.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.
Preserve OpenCode launch ownership and location-bound startup claims while inheriting current terminal observations and installer corrections.
|
The previously failing Windows Server 2022 x64 inbox-SSH job now passes on one unchanged, uninstrumented confirmation: original run, attempt 2. Only the failed job was rerun. Its actual checkout remains Root checked the official archive digest and every extracted member, raw job logs, exact source, and private service/account/SSH-child cleanup. Individual CMD/PowerShell process deaths were not separately recorded; loaded profiles and global SSH bootstrap remain bounded by the disposable CI VM. An earlier separately owned opt-in diagnostic control also passed, but neither result identifies the original failure cause or establishes a product input fix. The original timeout evidence remains preserved. |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Rereviewed the delta since the prior pullfrog review at a77cea7 — the merge commit e213fe11, which brings current main (3284b4c7) into the caps layer.
- Merge only, no authored delta —
git diff a77cea7..e213fe11 -- <PR paths>is empty and--cc --name-onlyreports no conflict hunks, so all 23 authored files are byte-identical to the previously approved revision. The 150-file delta ismain's own already-reviewed churn (agent identity, browser annotations, preflight), none of it overlapping the caps layer. - Combined tree verified —
tsc -p config/tsconfig.node.jsonis clean and 47 OpenCode caps/relay tests pass across the 7 focused suites (opencode-pty-launch,opencode-launch-capabilities,opencode-cli-version,opencode-wsl-probe-environment,hook-service-invalid-tui-config,pty-handler-opencode-revive,shared/opencode-cli-version).
The prior review's approval stands. One note for future runs: the incrementalDiffPath range-diff for this merge rendered misleading "removals" of hook-service-invalid-tui-config.test.ts and opencode-tui-config-registration.ts; both files are present and unchanged, so trust the explicit git diff <old> <new> -- <PR paths>, not the range-diff.
deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

ELI5
Different OpenCode versions load different plugin shapes. Orca now chooses the shape supported by the executable that will actually run.
What Changed
Probe the native, WSL or SSH execution host with bounded output and timeout; cache by host, executable and launch environment; preserve optional capabilities across relay restart. Remove stale inherited selections. The existing configuration writer moves into its own module with its locking, write order and ownership checks preserved. Invalid TUI configuration warns and preserves user bytes while allowing the separate server plugin to install.
The WSL version probe now removes carrier entries for settings deliberately deleted from the launch environment and supplies an explicit empty carrier when needed. This prevents the production WSL runner from restoring ambient credentials or config paths. Controlled before cases fail; the corrected runner-boundary cases pass, including flags, empty values and concurrent cache reuse.
Why
Reading the actual CLI version avoids guessed environment flags. Optional metadata supports older paired hosts. A typed invalid-config error limits recovery to the known registration failure; unrelated filesystem failures still propagate.
Linked Issue
Part of #22829; depends on merged #24601. The invalid-TUI follow-up #25031 is merged. Reproduces the loader failure in #16245 and covers the focused factory shape in #16270.
Visual Proof
N/A — background process setup and configuration handling add no rendered controls.
Testing
The qualified
d94a3f2esource passes 253 tests across 22 files, all three desktop typechecks, a production build, formatting, full owned-file quality gates and the configured repository anti-slop scan. Test counts overlap other layers.The current
e213fe11source normally joins this layer with main3284b4c7. Its complete 65-file cumulative scope is retained. It inherits main’s observation-only Build handling and terminal-agent type checks; the repaired OpenCode claim and location checks are unchanged. On this exact commit, 203 tests across 8 files and all three desktop typechecks pass. Independent reviews verify every owned file, every other main file, the normal merge result and the closed test processes. Earlier full quality and build checks remain pinned to their recorded sources; fresh public CI is pending.Installed OpenCode 2.0.16 reproduced lost startup authorization and incorrect inherited configuration. Earlier combined
7c765fdealso retained a native startup failure after authorization and before a primary provider request; its complete cause was not captured. The repaired combinedc8fdfdbeapp then completed fresh and nested Unicode startup turns, used one combined status/prompt overlay, claimed each brief once, preserved the original user configuration and reported canonical working → done. Its genuine worker selected the app’s private CLI and completedworker_doneexactly once. All 319 recorded process incarnations and four private ports closed. Screenshots and actual evidence stay pinned toc8fdfdbeon main2b1acd0d; the current source has separate static checks, without a current-commit runtime claim. The separate historical loader reproduction uses official OpenCode 1.1.23: Orca 1.4.188 fails plugin initialization with HTTP 500; the corrected version-selected plugin returns HTTP 200. The unchanged original Windows CI job also passed its three cells on one rerun; the earlier timeout’s cause remains unproved.Review
Current source
e213fe112c40dd4de53306ca55caa97a7cba447aretains the complete 65-file cumulative contribution; the final stack retains all 124 launch files. Every file outside that scope exactly matches frozen main3284b4c7. The later search and mobile merges on mainf199a20chave no files in this scope; CI will test the combined merge. Normal merges preserve predecessor and contributor ancestry. The OpenCode claim/location repair remains byte-for-byte unchanged from its qualified predecessor.Agent skill upstream boundary
Notes
Retain the complete original capability contribution. Native prompt authorization remains in #24762. The earlier object-only v1 fixture omitted the released callable fallback and does not establish a selector defect.
Related loader and event contributions by @umi008 (#11792), @adityachaudhary99 (#16270), @liobr (#20410), @donniesilalahi (#20458) and @leilei3167 (#22768) are credited.
Checklist