Skip to content

Preserve OpenCode reasoning and recorded patches in native history - #24790

Merged
nwparker merged 22 commits into
mainfrom
nwparker/fix-opencode-history-fidelity-13287
Oct 4, 2026
Merged

nwparker merged 22 commits into
mainfrom
nwparker/fix-opencode-history-fidelity-13287

Conversation

@nwparker

@nwparker nwparker commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 11 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1234 $\color{#cf222e}{\Huge{\mathbf{−}}}$​10 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1224
Prod 10 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​320 $\color{#cf222e}{\Huge{\mathbf{−}}}$​89 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​231

ELI5

OpenCode history keeps reasoning with its answer and shows recorded patches. Large histories fit the mobile connection, and a reply too large to display gets a quiet notice instead of looking like an answer.

What Changed

All 13 accepted fidelity paths remain included. Both SQLite readers keep their existing row/page limits and project an omission as a system notice with the existing presentation key. Desktop uses its existing translations; mobile uses the existing shared English copy and muted text token.

The RPC path budgets sanitized JSON while retaining complete database-row groups, and adjusts pagination when older groups do not fit. A new optional row cursor keeps reasoning, answer and omission together; old peers retain the existing ID fallback. Existing frame types and lifecycle handling remain in use. The strict template-literal warning is fixed by capturing the checked update time before mapping.

Why

The reader's 16 MiB guard does not ensure a response fits the mobile connection's 4 MiB limit. Applying the existing history-page byte budget after sanitization bounds the actual payload without splitting recorded content or adding another transport. Existing notice presentation and mobile styles supply the display behavior.

Linked Issue

Refs #13287, with credit to Adnan Khan (@akhan157). This PR preserves its complete 21-file fidelity fix and the ancestry of the accepted work. The broader original contribution in #13287, mobile-display #14185 and Korean-input #19156 remain open.

Visual Proof

Fresh 430×900 hidden-renderer proof uses genuine installed OpenCode2.0.16 records and production mobile components: the complete final41-row pair and matching oversized-reply notice before/after. The notice before image uses the original producer/UI module over the same genuine database inside the current hidden app; it is not a separate old app or physical phone. Fresh inspected screenshots.

Oversized reply Before After
Genuine installed CLI records Before After

Complete final41-row pair.

Earlier fidelity screenshots remain historical evidence:

View Before After
Desktop reasoning and answer, installed 2.0.16 Before After
Desktop recorded patch, official 1.18.30 Before After
Paired mobile reasoning and answer, installed 2.0.16 Before After
Paired mobile recorded patch, official 1.18.30 Before After

Earlier pair-window before/after separately compares the original40-row cutoff with the corrected41-row window.

Testing

  • CI exposed three stale oversized-row expectations in the production shared-worker test. The exact published-source control reproduced all three failures. The corrected test checks the system notice role and presentation metadata; all six worker controls pass, retaining row identity, repeat-read equality, and older-page checks. Only that fixture changed after the 20-path runtime qualification; formatting, lint, and all six changed-line gates pass.

  • Fresh real installed OpenCode2.0.16:15 successful standalone turns and a separate >2 MiB reply in empty private HOME/all4XDG/temp/userData, using a deterministic loopback model. The CLI wrote its own database records.

  • Exact qualified f63:75 mobile tests, four production typechecks, build, test-typecheck ratchet, formatting/lint/changed-line gates and source contracts pass. The unchanged host source/tests pass152 tests on the immediate test-consolidation predecessor.

  • Production serialized-RPC stress rejects4,612,861 bytes before; after it admits2,030,250 bytes and paginates all2,402 IDs without splitting groups. This synthetic SQLite control is separate from genuine CLI history; no live socket1013 close is claimed.

  • Fresh genuine-data pipeline and hidden430×900 rendered pair/notice proof pass. Task-owned capture processes/app exited and provider/CDP/proof ports closed.

The fresh watcher emits snapshot41 → appended1 → replacement41. A separately labeled appended-delivery replay uses the genuine final pair; it is a controlled frame, not this run's actual watcher delivery. Direct RPC/JSON checks and hidden production-component captures do not establish a physical device, relay/WebSocket or SSH run.

Review

The branch now includes main 94f5669 in 6b8cafb. All 21 reviewed files and all 20 product files covered by the earlier OpenCode evidence keep their exact preceding postimages; every other main file is preserved. Independent full-source and artifact reviews pass. Fresh Node/CLI/web and production mobile TypeScript 6 typechecks pass, together with 105 focused tests across seven desktop suites. The desktop runner excluded the requested mobile pair-window test, so it is not counted. The initial mobile typecheck lacked ordinary generated assets; the five existing generators completed successfully, and only that failed typecheck was repeated. Earlier full quality, installed OpenCode 2.0.16 and hidden-renderer receipts remain tied to their tested sources. Fresh public CI covers this composition before merge. The broader work in #13287 remains open.

Agent skill upstream boundary

  • Not applicable; no upstream skill-installer material is copied or translated.

Notes

The executed platform is macOS. Existing optional-field fallback and frame types support mixed-version peers; host execution and folder-workspace behavior are preserved. Linux/Windows rendering, physical iOS/Android and SSH pairing were not exercised.

Checklist

  • Complete 21-file fidelity fix preserved, with user-facing behavior and mechanism explained.
  • Fresh notice before/after and pair screenshots attached and independently inspected.
  • Independently reviewed for correctness, read limits and wire compatibility.
  • Cross-platform, SSH and folder-workspace impact considered.
  • Fresh public CI passes on the published composition.

nwparker and others added 11 commits October 2, 2026 02:44
OpenCode database and synthetic row paths are not text transcripts. Use the
vault preview or captured pane context, preserving actual transcript paths
containing a hash and supporting both OpenCode lanes and Windows paths.

Adapted the intent of #11859 and extended it to actual installed v2 vault rows.

Co-authored-by: mrcha033 <mrcha033@users.noreply.github.com>
Reuse the bounded AI Vault SQLite worker for v1 and v2 session pages and live updates. Keep terminal input as the real execution path and pace OpenCode Stop through its two-Escape interrupt.

Co-authored-by: xodmd45-ctrl <xodmd45-ctrl@users.noreply.github.com>
Separate genuine reasoning from answer blocks in both native SQLite schemas and retain recorded patches as completed patch tools. Keep each database row together at page boundaries so the existing raw-row cursors cannot drop half of a mixed row.

Adapted from @akhan157's OpenCode native history work in #13287 at bb661d1; retains the current bounded reader and account discovery instead of restoring the older capture and cursor implementation.

Verified against genuine private installed 2.0.16 and official 1.18.30 CLI ingestion.

Co-authored-by: Adnan Khan <adnank11427@gmail.com>
Preserve the native reader's bounded OpenCode row groups in paired reads and snapshot/replacement frames so a second presentation-count slice cannot drop reasoning while advancing the database cursor. Sort derived reasoning before its answer under the same provider timestamp while retaining journal order.

These two boundaries were reproduced with genuine installed 2.0.16 and official 1.18.30 sessions in a hidden desktop renderer and the current mobile view over an actual authenticated encrypted pairing.

Completes the semantic presentation from @akhan157's #13287 without importing its older clipping or cursor implementation.

Co-authored-by: Adnan Khan <adnank11427@gmail.com>

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No critical issues — one minor client-side finding inline.

Reviewed changes

  • Reasoning split in the reader — opencodeMessages now returns a reasoning message (<id>:reasoning) before the answer, drops the reasoning text out of the answer's blocks, and maps patch parts to completed tool-call blocks carrying { hash, files }.
  • Pair-preserving pagination — the v1 reader extends a page's retained slice so a raw-row cursor never lands inside a reasoning/answer pair; v2 pushes both messages per row atomically; a pair is counted as one cursor unit.
  • Shared transcript ordering — compareNativeChatMessagesByTime sorts a :reasoning message immediately before its answer using the base id, keeping provider timestamps authoritative.
  • RPC window exemption — windowForClient skips count-windowing for OpenCode (opencode and opencode2 both resolve to opencode) so pairs reach desktop and mobile intact.
  • Tests — semantic-fidelity (v1/v2 paging, streaming replace/append), read-bounds, comparator-order, and paired RPC-page suites.

ℹ️ Nitpicks

  • No test covers the reasoning-only → reasoning+answer transition, where a row's reasoning id changes from row.id to row.id:reasoning. The existing streaming test mutates the answer of an already-mixed() row, so a regression in the id-swap path would not fail it.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

Comment thread src/main/runtime/rpc/methods/native-chat.ts Outdated
Compose the complete original fidelity component with the reviewed live-window pair correction on frozen current main. Retain native row placeholders, normalized limits, and aggregate byte guards.

Original report and reasoning fix: @adnanmujkanovic (#13287).
Original-Public-Head: b5937bc
Reviewed-Focused-Fix: b9a92b6
Component-Common-Core: 581e9ae
Frozen-Main: a2896f5
@nwparker

nwparker commented Oct 3, 2026

Copy link
Copy Markdown
Contributor Author

The complete 13-file fidelity change now preserves the native reader's oversized-row and page limits. Reasoning/answer pairs also remain together at a live mobile window cutoff.

These retained hidden Electron screenshots use genuine installed OpenCode 2.0.16 records and the production mobile session hook/components, with controlled frame delivery. They compare the original 40-row cutoff with the corrected 41-row window. They are from the earlier focused pair-window build, not a fresh current-main renderer run or physical mobile device.

Before After
Before: answer loses its reasoning After: reasoning and answer remain together

Fresh current-main validation ran 15 actual installed CLI turns in an empty private profile. The production read/subscription/RPC/sanitization/mobile merger pipeline retained all 41 expected messages and unique IDs. The actual stream emitted a replacement frame; the old raw-count merger also passes that replacement path. A separately labeled controlled appended-delivery replay of the same genuine records reproduces old40/new41. No live pairing/relay/device proof is claimed for this fresh run.

@nwparker
nwparker changed the base branch from nwparker/OpenCode-Native-Chat to main October 3, 2026 09:20

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No new critical issues — one minor consistency suggestion inline.

Reviewed changes

  • Oversized-row handling in both readers — the SQL now measures row bytes with length(CAST(data AS BLOB)) against OPENCODE_TRANSCRIPT_MAX_ROW_BYTES, and an oversized message/part row materializes a history-item-too-large text block instead of throwing the page away.
  • Pair-aware live-window bound — boundNativeChatWindow keeps the preceding reasoning when the cutoff would split it from a matching answer (at most limit + 1), via the extracted nativeChatSemanticRowId also used by the comparator.
  • Tests — added oversized-row paging (v1/v2), native-chat-merge-pairs, and mobile-native-chat-pair-window coverage; updated the streaming semantic-fidelity case.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

Comment thread src/main/native-chat/transcript-opencode-part-blocks.ts Outdated
@coderabbitai

coderabbitai Bot commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

📝 Walkthrough

Walkthrough

OpenCode transcript parsing emits separate reasoning, content, and omission messages. SQLite readers attach transcript offsets and keep messages from the same row together during pagination. Shared ordering and windowing use semantic row identity to preserve complete pairs. RPC pages and append batches use byte bounds for OpenCode. Mobile rendering displays marked history-size notices as selectable, scaled text. Native runtime rebuild timeouts depend on the module and platform.

Priority: ➖ Normal

Merge Risk: 🔵 Low · up to 43c87

Users with a malformed OpenCode TUI config may not get the status plugin installed or refreshed because the new TUI registration error aborts the install step. The fix is localized; otherwise the change looks mergeable.

Security Architecture Review

Security architecture risk: 🔵 Low · up to 43c87

The inspected changes add checks around session identity and repository writes. No newly exploitable security issue was established, but session cleanup and recovery behavior and some remote compatibility paths remain incompletely verified.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The checked hook attack path requires access to the listener token and reaches status caches, session-to-pane attribution and forwarding to clients. The supported exposure spans multiple panes and sessions within one listener. These paths do not establish cross-tenant access, cloud privileges or arbitrary command execution.

Trust Boundaries and Controls

  • observed — Relay TUI admission rejects retired physical panes and requires the managed launch token when one is available. Without an expected token, the compatibility result preserves the poster: normalization does not borrow the creator's identity or update its token cache, and live request handling does not create a TUI binding.
  • observed — Known-session reattribution preserves the stored pane and worktree and substitutes the stored owner's launch token. Local status disposition then enforces destination retirement and token fences. Suppressed physical TUI admission returns before that reattribution.

Resilience and Maintainability Implications

  • observed — Repository-write eligibility is checked across asynchronous maintenance phases and again after command admission, before spawning. Failed starts release admission, and the adapter releases repository ownership in cleanup paths. Already-started pack operations are allowed to finish rather than being interrupted while owning their locks.

Hardening Proposals

  • proposed — Specify and test the intended ownership transition when a creator pane is retired and the same session is later reported from another live pane, distinguishing legitimate resumption from stale replay. Also establish whether binding must be reverted when final legacy-status admission rejects an event. These would close lifecycle proof gaps; neither failure is established here.
🚥 Pre-merge checks | ✅ 4 | ❓ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ❓ Inconclusive Docstring coverage is 14.10% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 78 functions across 76 files. (72 skipped… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the main change: preserving OpenCode reasoning and recorded patches in native history.
Description check ✅ Passed The description covers the required explanation, changes, rationale, issue context, visual proof, testing, review, platform considerations, and checklist. It also clearly states that fresh public CI i…
Full details: Docstring Coverage

Explanation

Docstring coverage is 14.10% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 78 functions across 76 files. (72 skipped: 2 unsupported, 70 over the file limit.)

✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 4995651d-81d9-4ebb-92cb-903a580d794f
📥 Commits

Reviewing files that changed from the base of the PR and between 2fc517c and 7323d83.

📒 Files selected for processing (13)
  • mobile/src/session/mobile-native-chat-pair-window.test.ts
  • src/main/native-chat/transcript-opencode-part-blocks.ts
  • src/main/native-chat/transcript-opencode-read-bounds.test.ts
  • src/main/native-chat/transcript-opencode-semantic-fidelity.test.ts
  • src/main/native-chat/transcript-opencode-sqlite-query.ts
  • src/main/native-chat/transcript-opencode2-sqlite.ts
  • src/main/runtime/rpc/methods/native-chat-opencode-semantic-pages.test.ts
  • src/main/runtime/rpc/methods/native-chat.ts
  • src/shared/native-chat-merge-pairs.test.ts
  • src/shared/native-chat-merge.ts
  • src/shared/native-chat-reasoning-order.test.ts
  • src/shared/native-chat-transcript-projection.ts
  • src/shared/native-chat-types.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.

Comment thread src/main/runtime/rpc/methods/native-chat.ts Outdated
@nwparker

nwparker commented Oct 3, 2026

Copy link
Copy Markdown
Contributor Author

The exact 7323d83 source is now based on main and merges cleanly. Temporarily closing and reopening to trigger the normal PR and mobile checks: the earlier synchronize event had conflicts against the old native stack, and the base edit does not trigger these workflows. The branch and reviewed source are retained.

@nwparker nwparker closed this Oct 3, 2026
@nwparker nwparker reopened this Oct 3, 2026
@nwparker

nwparker commented Oct 3, 2026

Copy link
Copy Markdown
Contributor Author

Fresh installed OpenCode 2.0.16 wrote the actual conversation records under private profiles. These unedited 430×900 CDP screenshots render production mobile components in a hidden Orca app on exact f63bf8e; published 2a4fc79 retains all20 qualified postimages unchanged. The before notice is an exact732 producer/consumer module control over the same genuine database in the current hidden app. This is a controlled local model and renderer proof; it does not claim a physical phone, relay/WebSocket or SSH run.

Before: oversized genuine reply looks like an answer

After: oversized genuine reply uses the muted host notice

After: the final41 rows begin with a complete reasoning and answer pair

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes (since the prior pullfrog review at 7323d830f5):

  • Omitted rows render as localized system notices — the oversize placeholder now travels as its own role: 'system' message carrying a history-item-too-large presentation key (opencodeMessages + agentSessionHostStatusBody), and v2's sealed-row branch forces the system role. Mobile renders any host-status presentation block as selectable muted text; desktop routes it to NativeChatNoticeRow. This addresses the prior inline finding (transcript-opencode-part-blocks.ts:51).
  • OpenCode RPC pages are byte-bounded, not just count-bounded — new native-chat-rpc-page-bounds.ts keeps whole row groups newest-first under HISTORY_PAGE_CONTENT_BUDGET_BYTES, substitutes one system notice for an oversized newest group, and re-points beforeOffset; live appends are split into per-frame batches on the same budget, with lifecycle attached to the last batch only.
  • Row grouping is now cursor-aware — transcriptOffset is added to every OpenCode message, nativeChatMessagesShareTranscriptRow groups by it (falling back to the :reasoning id convention for older projections), and boundNativeChatWindow walks back over whole rows so a live cutoff never splits reasoning/answer/omission.
  • Reader pagination keeps split rows intact — v1 extends the retained slice while a cut lands mid-row; v2 emits each row's messages atomically; both stamp transcriptOffset and reuse nativeChatSemanticRowId in the comparator.
  • Tests — new byte-budget, semantic-page, pair-window, merge-pair, reasoning-order and mobile-notice coverage exercises the real SQLite readers, RPC serializer and E2EE admission with exact-value assertions.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes (since the prior pullfrog review at 2a4fc79):

  • Worker oversize-notice expectations corrected — the parametrized v1-message/v1-part/v2-message case in session-scanner-opencode-native-worker.test.ts now asserts the omitted-row message is role: 'system' and carries presentation: 'history-item-too-large', matching the producer that landed in 2a4fc79. Test-only change; the suite passes (6/6) on the checked-out head.

ℹ️ Unrelated red check

The mobile web app bundle job is red at this head (config/scripts/mobile-web-app-html-preview-render.test.mjs:619, a missing frame-src CSP report) while the parent commit 2a4fc79 passed it. This PR neither touches that test nor any CSP source, and this commit only edits a worker test, so the failure does not appear to be caused by the delta — it reads as a browser-test flake.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

Preserve all21 accepted source postimages, original13 plus reviewed extensions and worker fixture.
No owned-path overlap exists with current main; all unowned main entries remain exact.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 661e143e-7373-4893-9b92-a1bdb9d421b7
📥 Commits

Reviewing files that changed from the base of the PR and between 1c33cdc and 43c8773.

📒 Files selected for processing (126)
  • .github/workflows/pr.yml
  • config/build-plugins/jsonc-parser-esm.ts
  • config/scripts/build-relay.mjs
  • config/scripts/git-binary-compatibility-workflow.test.mjs
  • config/scripts/mobile-web-app-html-preview-render.test.mjs
  • config/scripts/mobile-web-app-preview-arm-driver.mjs
  • config/scripts/pr-code-change-scope.mjs
  • config/scripts/runtime-serve-terminal-smoke.mjs
  • docs/reference/jcode-hook-events.md
  • src/cli/handlers/search.test.ts
  • src/main/agent-hooks/server-opencode-tui-identity.test.ts
  • src/main/agent-hooks/server/server-ingest-normalization.ts
  • src/main/agent-hooks/server/server-runtime-env.ts
  • src/main/ai-vault-search/session-search-agent-compatibility.test.ts
  • src/main/ai-vault-search/session-search-scope-entry-points.test.ts
  • src/main/ai-vault-search/session-search-scope-service.test.ts
  • src/main/ai-vault-search/session-search-service-registry.test.ts
  • src/main/ai-vault-search/session-search-service-registry.ts
  • src/main/git/command-runner/git-exec-file.ts
  • src/main/git/command-runner/git-exec-options.ts
  • src/main/git/local-repo-ref-maintenance-probe-retry.test.ts
  • src/main/git/local-repo-ref-maintenance.test.ts
  • src/main/git/local-repo-ref-maintenance.ts
  • src/main/git/remove-worktree-branch-cleanup.test.ts
  • src/main/git/repo-maintenance-admission.test.ts
  • src/main/git/repo-pack-index-maintenance.test.ts
  • src/main/git/repo-pack-index-maintenance.ts
  • src/main/git/runner-network-ssh-policy.test.ts
  • src/main/git/runner-wsl-network-ssh-policy.test.ts
  • src/main/git/source-control/branch-compare.ts
  • src/main/git/status-branch-compare-real-ref.test.ts
  • src/main/git/status-branch-compare.test.ts
  • src/main/git/worktree-branch-removal-host.test.ts
  • src/main/git/worktree-branch-removal.ts
  • src/main/git/worktree-preparation-discard-real-git.test.ts
  • src/main/git/worktree-preparation-discard.ts
  • src/main/git/worktree-preparation-lock-real-git.test.ts
  • src/main/git/worktree-preparation-lock.test.ts
  • src/main/git/worktree-preparation-lock.ts
  • src/main/git/worktree-rebase-update-refs-real-git.test.ts
  • src/main/git/worktree-sparse-checkout-cache.ts
  • src/main/ipc/ai-vault-search.test.ts
  • src/main/ipc/filesystem/filesystem-git-pull-request-generation-handlers.ts
  • src/main/jcode/hook-gate-script.test.ts
  • src/main/jcode/hook-service.ts
  • src/main/opencode/hook-plugin-legacy-tui-ownership.test.ts
  • src/main/opencode/hook-service-legacy-acl.test.ts
  • src/main/opencode/hook-service.test.ts
  • src/main/opencode/opencode-legacy-plugin-loader-fixture.ts
  • src/main/opencode/opencode-legacy-tui-fixture.ts
  • src/main/opencode/status-plugin-delivery-source.ts
  • src/main/opencode/status-plugin-endpoint-source.ts
  • src/main/opencode/status-plugin-legacy-tui-source.ts
  • src/main/opencode/status-plugin-post-source.ts
  • src/main/opencode/status-plugin-runtime-state-source.ts
  • src/main/opencode/status-plugin-shared-server-capability.test.ts
  • src/main/opencode2/status-plugin-setup-source.ts
  • src/main/opencode2/status-plugin-tui-source.ts
  • src/main/providers/ssh-git-provider.ts
  • src/main/providers/ssh-review-draft-context.test.ts
  • src/main/providers/ssh-review-draft-context.ts
  • src/main/runtime/rpc/methods/ai-vault-search.test.ts
  • src/main/runtime/runtime-git-generation-context.ts
  • src/main/ssh/relay-native-dependency-coverage.test.ts
  • src/main/text-generation/pull-request-context.ts
  • src/main/zsh-scoped-histfile.live-shell.test.ts
  • src/main/zsh-startup-hook-pty-harness.ts
  • src/preload/api/ai-vault-bridge.ts
  • src/relay/agent-hook-endpoint-coordinates.ts
  • src/relay/agent-hook-opencode-tui-identity.test.ts
  • src/relay/agent-hook-request.ts
  • src/relay/agent-hook-server-contract.ts
  • src/relay/agent-hook-server.ts
  • src/relay/agent-hook-spool-ingest.ts
  • src/relay/fs-handler-ripgrep-fallback.test.ts
  • src/relay/fs-list-files-fallback-chain.ts
  • src/relay/git-handler-branch-cleanup.test.ts
  • src/relay/git-handler-branch-cleanup.ts
  • src/relay/git-handler-branch-compare.test.ts
  • src/relay/git-handler-branch-diff.test.ts
  • src/relay/git-handler-diff-read-coalescing.test.ts
  • src/relay/git-handler-object-diff-operations.ts
  • src/relay/git-handler-ops.ts
  • src/relay/git-handler-registration.ts
  • src/relay/git-handler-review-draft.test.ts
  • src/relay/git-handler-utils.ts
  • src/relay/git-review-draft-binary-compatibility.test.ts
  • src/relay/pty-handler-agent-launch-token.test.ts
  • src/relay/pty-handler.ts
  • src/relay/relay-agent-hook-runtime.ts
  • src/relay/relay-endpoint-credential-publication.test.ts
  • src/relay/session-search-transport.test.ts
  • src/relay/skill-upload-multi-relay.integration.test.ts
  • src/relay/subprocess.test.ts
  • src/renderer/src/web/preload-api/web-ai-vault-search-compat.test.ts
  • src/shared/agent-hook-listener-opencode-tui-identity.test.ts
  • src/shared/agent-hook-listener-relay-dependency.test.ts
  • src/shared/agent-hook-listener.ts
  • src/shared/agent-hook-listener/endpoint-publication.ts
  • src/shared/agent-hook-listener/opencode-session-registry.ts
  • src/shared/agent-hook-spool.ts
  • src/shared/ai-vault-search-agent-compatibility.ts
  • src/shared/ai-vault-search-agent-history.test.ts
  • src/shared/ai-vault-search-client.ts
  • src/shared/ai-vault-search-contract.test.ts
  • src/shared/ai-vault-search-contract.ts
  • src/shared/ai-vault-search-qoder-client.test.ts
  • src/shared/child-process/__fixtures__/child-process-import-allowlist.txt
  • src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt
  • src/shared/child-process/windows-console-visibility.test.ts
  • src/shared/git-binary-compatibility.test.ts
  • src/shared/git-change-list.test.ts
  • src/shared/git-change-list.ts
  • src/shared/git-resolution-binary-compatibility.test-cases.ts
  • src/shared/git-ssh-policy-env.test.ts
  • src/shared/git-ssh-policy-env.ts
  • src/shared/git-worktree-admin.test.ts
  • src/shared/git-worktree-admin.ts
  • src/shared/opencode-tui-config-registration.test.ts
  • src/shared/opencode-tui-config-registration.ts
  • src/shared/opencode-tui-plugin-install.ts
  • src/shared/repo-maintenance-schedule.ts
  • src/shared/repo-ref-maintenance-policy.ts
  • src/shared/repo-ref-maintenance.ts
  • src/shared/review-draft-context-error.ts
  • tests/e2e/cross-version-wire/qoder-history-search-downgrade.unit.test.ts
💤 Files with no reviewable changes (4)
  • src/shared/child-process/fixtures/child-process-import-allowlist.txt
  • src/shared/child-process/fixtures/windows-console-visibility-allowlist.txt
  • src/shared/ai-vault-search-qoder-client.test.ts
  • src/relay/git-handler-utils.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

Comment thread src/shared/opencode-tui-plugin-install.ts
nwparker and others added 2 commits October 3, 2026 16:37
Preserve every accepted component postimage and all unowned main entries.
Retain the public component ancestry and prior source-qualified proof.
@nwparker
nwparker merged commit f199a20 into main Oct 4, 2026
34 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant