Uh oh!
There was an error while loading. Please reload this page.
Consolidation: upstream v1.18.10 + all fork follow-ups (workbench split, webview bridges, ADR 0001) - #106
Merged
Merged
Conversation
Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com>
Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com>
Requested by: @thdxr (dax via Slack)
…(#37562) Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
Co-authored-by: tobwen <1864057+tobwen@users.noreply.github.com>
Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com>
Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com>
Co-authored-by: opencode <noreply@opencode.ai>
471-commit fork sync: 78 conflicted paths resolved — mechanical (versions, lockfile) by policy, ~40 files hand-merged. Upstream's session-ui restructure, review/diffs side panel, controller-driven composer + settings, AppNodeBuilder test harness, bounded SSE stream + heartbeat all adopted; amicode identity re-applied (branding, KaTeX macros, AmicoSpinner sites, vault tab, entity rail card dispatch, titlebar tab strip, prompt-agnostic cassette matcher). Fork's markdown polish + entity-rail message-timeline mounts intentionally dropped with upstream's deleted files — ports tracked as follow-ups. DebugBar stays deleted; showSessionProgressBar row dropped (consumer gone). Verified: typecheck green (ui, session-ui, app, opencode, server, desktop); tests green (ui amicode 358, session-ui moved modules 11, opencode transform 397, llm-native-recorded 3+1skip).
…tream event contract - locales: fill 72 amicode-era English keys into all 17 app locales as English fallbacks (upstream's strict i18n parity test now demands every key in every locale; placeholders preserved verbatim). Non-English translations remain deliberately unreviewed per AMICODE-PATCHES.md. - prompt.ts silent-turn guard: fire only on reasoning-bearing turns with no error — a mid-stream provider explosion records finish 'unknown' with no error and no reasoning, and upstream's run-process tests lock 'end the run' for exactly that shape. Guard's live-bug target (reasoning-only turns on open-weight models) unchanged; turn-output tests green. - server/handlers/event.ts: revert to upstream's native per-event-location contract (bounded stream + heartbeat). Upstream superseded the fork's connection-pinned streams; the app's event-reducer already filters per-directory client-side. Full opencode suite: 24 fails remain = 23 pre-existing fork WIP tests (pasqal connections 8, amicode widgets 15 — fail identically on origin/local/amicode) + 1 upstream-flaky PTY timing test (flakes on clean upstream at the same rate on this machine).
…ine + port normalizeDisplayMath
The merge deleted the fork's message-timeline.tsx with upstream's rewrite,
orphaning the mounts that lived there. Re-mounted into
pages/session/timeline/message-timeline.tsx (same sticky header slot):
- AmicodeEntityRail (System/Formulation/Run chips) with full widgetHost,
fetch props, onAsk bridge (ask-card buttons can submit again),
onInspectRun, retry/unavailable labels
- the ring-2 entity dialog (AmicodeEntityView) with open-gated resources
- ContextTreePanel (the brain), folded into the header as before
Verified not lost (alive elsewhere): RunWindow + WidgetPreviewCard render
inside card.tsx's tool dispatch; the markdown CSS polish converged
independently upstream (heading hierarchy + inline-code chips already in
session-ui's markdown.css — no port needed).
Ported normalizeDisplayMath (mid-line-opened multi-line $$ display math)
into session-ui's markdown-stream + wired into the block parse path, with
the fork's pure-function tests. Typecheck green app+session-ui; markdown
suites 39 pass.
Note: packages/app SSR test failures ('use' not found in solid-js/web
server build) reproduce identically on clean upstream on this machine —
bun/solid-js environment issue, not merge-related.… amicode/merge-upstream-dev
…model + receipt-currency Brings in the harmonic wave indicator (AmicoWave — thinking line carries the wave, H-mark static; tool-status-title de-shimmered), collapsed identical receipt runs (receipt-runs.ts), AmicoSkillChip, Quantizing/Obsidianing thinking words, system-card physics rows, receipt-currency fix. Conflicts: AMICODE-PATCHES.md (union both entries), session-ui message-part.tsx (union upstream's useV2Actions threading with the branch's count threading), tool-status-title import (branch's de-shimmer). New shims: amicode-receipt, amicode-receipt-runs (session-ui imports through the components wildcard as usual).
…r open-external bridge Upstream's openExternal platform method gains the branch's framed-context postMessage route (sandboxed webview can't window.open). The branch's global installLinkBridge interceptor is dropped — patch #25's markdown-delegated setupExternalLinks already handles chat anchors without double-firing.
…l card Warrant chip + Inspect Run button on the rail, approval card (warrant transport deliberately off onAsk — provenance stays out of the chat), rail warrants/onApprove props wired through the timeline mount with /amicode/warrants fetch + /amicode/approve POST + ledger-driven refetch. Union with HEAD's INLINE_KINDS receipt import and beta-tag CSS.
… system-card physics rows, KaTeX dedupe The parallel stack to pr/amico-working-indicator; message-part conflicts all resolved to the already-merged union (useV2Actions + count + shims). Net-new content: system-render physics rows + Hamiltonian render + equation dedupe (the spine and aside-lane commits cancel against their own reverts).
…-typed lookup in the silent-turn guard
…unt in the new timeline Root cause of 'harmonics thinking indicator missing': the working lane lived in AssistantParts, which upstream's new timeline never renders (Message → AssistantMessageDisplay has its own part loop). AssistantParts was dead code, so rolldown DCE'd it and the whole amicode-thinking/amico-wave import chain out of the bundle. The new-architecture working indicator is the Thinking row (TextShimmer) — the Amico thinking line (AmicoWave glyph + gerund + elapsed/tokens) now mounts there, with turn tokens computed from the turn's assistant messages. AmicoMark static beside it (pr design: wave carries the motion).
…view, patch #11 parity) The legacy composer's ⌘V bridge survived the merge but upstream's v2 composer is what the new layout renders — its paste path had no bridge hooks, so paste was dead in the webview. session-ui attachments gains readClipboardText + a handleFramedPaste method (image-first precedence, same as handlePaste); interaction.ts intercepts ⌘V in framed contexts; the app wires the bridge (bridge-first image read with platform fallback, text via readClipboardViaBridge).
…ver the wordmark Upstream's NewSessionView renders the giant full-width WordmarkV2 only; the fork's composition (MarkDetailed w-24 + small Logo, Kimi-clean ordering, patches 594d117/75aca7c83) lost its mark when the page moved to upstream's structure. Restores MarkDetailed (the H-robot, neutral ink) above a w-52 wordmark — composer-as-hero, matching the fork's design exactly.
The chip row was pinned to the screen bottom (merge-artifact mount) with a mostly static set. Now it rides inside NewSessionView's hero flow (brand → composer → chips, the Kimi ordering) via a gettingStarted slot, and the set is computed: Resume (most recent problem) → Warm-start (recent with a pulse entity) → Retry (recent run without a pulse) → static starters padding to 3, capped at 4. Static-only when the profile is fresh. AmicodeStarterChips accepts a computed list with the legacy static path as fallback.
The design-of-record for fixing the titlebar's three right-side buttons: vault = global drawer (session tab retired), right column = Work Column with diffs as full-width file tabs, status popover re-anchored honestly. Tracking: #105
… bridge, drop zones, e2e The fork side of the Chat Deck: SplitProvider + WorkbenchProvider wrap the v2 shell; pane-namespaced persisted tab stores (tabs:<paneId>); openPath/ closePath cross-pane tab commands; tab-drag bridging (pane-bridge) with the parent's tab mirror resolving drops; workbench panel + split frame; titlebar sessions-panel toggle (S1.4), ellipsized pane tabs (FM4/S1.3). Playwright: pane-boot-watch, workbench-drops, workbench-panes.
Brings the deck's fork-side machinery (feat/workbench-split, 7dc4a8e — SplitProvider/WorkbenchProvider, pane-namespaced tab stores, openPath/ closePath cross-pane tab commands, tab-drag bridging, workbench panel + split frame, 3 Playwright specs) onto the merged 1.18.10 base. Conflict resolutions (semantic, all typechecked): - app.tsx: providers grafted onto SharedProviders around the route tree — covers legacy + v2 shells (createSimpleContext.use throws providerless). - tabs.tsx: pane-namespacing composed with the merge's Persist.window scope and migrateTabs module; openPath drops dirBase64 (SessionTab lost the field post-merge); base64Encode import dropped (HEAD rewrote sessionHasOpenTab without it). - entry.tsx: kept the merge's adjudicated openExternal bridge; the WIP's openLink + installLinkBridge were deliberately NOT carried (double-fire, comment in situ); back/forward Platform slots no longer exist upstream. - new-session/home/session: kept the merge's controller structure; added only the deck's postRouteInfo route-label bridges. - workbench-panel.tsx: sync().child — useServerSync is an accessor post-merge.
…nner, context menu copyTextToClipboard (ui twin of the app's bridge helper) rewires the message-part copy button, which was dead in the sandboxed iframe; ConnectionBanner surfaces a dead server instead of an endless thinking wave; webview-context-menu; markdown/terminal/server-sdk bridge touch-ups; en+zh i18n keys.
Triage results (fix/webview-bridges, 60d0242 — 14 files, +361): LIVE, kept: - copyTextToClipboard: session-ui twin (ui exports only components/*.tsx, so util/clipboard is unreachable across the boundary); rewires the message-part copy button, tool-error-card copy, and markdown code-block copy — all dead in the sandboxed iframe. - ConnectionBanner + streamStatus: composed onto the merge's protocol-aware (v1/v2) SSE subscription; banner accessors fixed for the post-merge shape. - webview-context-menu; select-text selectors for text/user-message/reasoning parts; en+zh i18n keys. SUPERSEDED, dropped: - openLink/installLinkBridge/back/forward Platform slots (merge adjudicated openExternal; upstream dropped the slots). - 15s SSE heartbeat timer (upstream's bounded SSE heartbeat governs liveness; two abort clocks would fight). - ui/markdown.tsx edit (file moved to session-ui; change ported there).
…ales The ConnectionBanner keys landed in en+zh only; the strict parity test demands every English key in every locale — English fallbacks, verbatim, per the merge's parity policy.
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Consolidation: upstream v1.18.10 + all fork follow-ups (the "where we are now" PR)
This lands the entire current state of Amicode's app on
local/amicodein one merge: the sst/opencode v1.17.3 → v1.18.10 upstream merge (1,229 upstream commits, merge-base 2026-06-10) plus every fork follow-up since, including the work that until today only existed as uncommitted WIP on one laptop. ~1,300 commits ahead oflocal/amicode; fast-forwardable. The running 0.1.2 extension vendors this exact tree (built frombcefef8a1).What's in it
AMICODE-PATCHES.md(78 conflicts resolved by policy; session-ui package split adopted; fork's branding/KaTeX/entity-rail/titlebar strip kept).feat/workbench-split, merged ase7cf0cca0) — the fork side of the Chat Deck:SplitProvider/WorkbenchProvideronSharedProviders, pane-namespaced tab stores (tabs:<paneId>),openPath/closePathcross-pane tab commands, tab-drag bridging, workbench panel + split frame, 3 new Playwright specs (pane-boot-watch, workbench-drops, workbench-panes).fix/webview-bridges, merged as437c37778) —copyTextToClipboard(session-ui twin) reviving dead copy buttons in the sandboxed iframe;ConnectionBanner+streamStatusso a dead server stops reading as an endless thinking wave; webview context menu; text-selection selectors. Superseded hunks (openLink/installLinkBridge, 15s heartbeat timer) deliberately dropped — see commit message.docs/adr/) — one home per chrome surface (the titlebar-buttons design-of-record, Titlebar chrome: one home per surface (vault drawer · Work Column · status popover) #105) +CONTEXT.mdchrome glossary.connectionLost/reconnectedEnglish fallbacks in all 16 missing locales.Supersedes (their commits are all in here — close on merge)
Build recipe (unchanged, from AMICODE-PATCHES.md)
bun 1.3.14 with
~/.bun/binon PATH (tree-sitter-powershell's node-gyp re-invokesbunby name — plain~/.bun/bin/bun installfails);OPENCODE_CHANNEL=devfor the channel gate.Verification (this branch, this machine)
bun run typecheckclean inpackages/appandpackages/session-ui(e2e tsconfig too)env -u OPENCODE_CONFIG_CONTENT -u OPENCODE_SERVER_PASSWORD bun test …): 756/756 green — the env unset is required from an Amicode shell or skill/permission fixtures breakKnown reds (pre-existing — do not chase them here)
origin/local/amicode(WIP features)httpapi-v2-pty"serves location-wrapped PTY routes" times out ~1-in-3 on clean upstream on this machine