diff --git a/DIVERGENCES.md b/DIVERGENCES.md index 47e3cdc1d5..d98eab69af 100644 --- a/DIVERGENCES.md +++ b/DIVERGENCES.md @@ -46,7 +46,9 @@ upstream maintainers — see README → Syncing with upstream for why and how. | `packages/tui/src/component/dialog-provider.tsx`, `packages/tui/src/component/dialog-model.tsx`, `packages/opencode/src/cli/cmd/providers.ts` | Filter `opencode`/`opencode-go` out of provider pickers and the `/model` dialog (model list + Favorites/Recent; the model dialog's opencode-first sort became a plain name sort) | Upstream's hosted offerings (Zen/Go) are detours for gateway users. | Keep our filters. | | `packages/tui/src/component/prompt/index.tsx` | Gated the prompt footer's model/provider indicator on `useConnected()` (the shared "a real provider is configured" predicate) | Don't advertise the free hosted Zen default (e.g. "Big Pickle · OpenCode Zen") in the footer while nothing is configured — same rationale and predicate as `app.tsx`'s startup gate and the provider/model filters. A configured gateway/real provider, or a deliberately-authenticated opencode/opencode-go, still shows its model. | Keep the extra `Show` condition; take upstream's surrounding changes. | | `packages/app/index.html` | `` → "CoDev Code" | Web UI tab title. | Keep our title. | -| `packages/app/src/pages/layout.tsx`, `packages/app/src/pages/layout-new.tsx` | Dropped the `<TabsInfoPopup />` mount and its import from both layouts (added upstream in v1.17.18); `HelpButton` stays. `help-button.tsx` itself is left upstream — `TabsInfoPopup` remains defined/exported there, just unmounted (tree-shaken out of the build). | `TabsInfoPopup` is a dev-channel-only "Introducing Tabs" promo whose `muted autoplay loop` `<video>` mounts on every layout render. The fork's Windows e2e runs on GPU-less GitHub-hosted runners (software GPU — see the runner-swap row), where continuous video decode wedges the GPU command buffer (`kTransientFailure`), making the whole app-e2e suite flaky and ~3–5× slower. It never ships (release builds use a non-`dev` `CODEV_CHANNEL`), so unmounting it costs users nothing. | Keep ours: don't re-add the `<TabsInfoPopup />` mount or restore it to the import. Leave upstream's `help-button.tsx` (incl. the `TabsInfoPopup` definition) untouched so it never conflicts. | +| `packages/app/src/pages/layout.tsx`, `packages/app/src/pages/layout-new.tsx` | Dropped the `<TabsInfoPopup />` mount and its import from both layouts (added upstream in v1.17.18); `HelpButton` stays. | `TabsInfoPopup` is a dev-channel-only "Introducing Tabs" promo whose `muted autoplay loop` `<video>` mounts on every layout render. The fork's Windows e2e runs on GPU-less GitHub-hosted runners (software GPU — see the runner-swap row), where continuous video decode wedges the GPU command buffer (`kTransientFailure`), making the whole app-e2e suite flaky and ~3–5× slower. It never ships (release builds use a non-`dev` `CODEV_CHANNEL`), so unmounting it costs users nothing. | Keep ours: don't re-add the `<TabsInfoPopup />` mount or restore it to the import. | +| `packages/app/src/components/help-button.tsx` | Removed the `TabsInfoPopup` component, its `introducing-tabs.mp4` import, and the imports only it used; `HelpButton` stays. (The file's `VITE_OPENCODE_CHANNEL` → `VITE_CODEV_CHANNEL` gates follow the env-var rename row.) | The popup is upstream's temporary, OpenCode-branded "Introducing Tabs" promo (upstream's own comment says it's removable after the rollout), already unmounted per the row above; removing the definition lets the 13 MB video be deleted (row below). | Keep our removal; take upstream's changes to `HelpButton`. If upstream mounts `TabsInfoPopup` somewhere new, drop that mount per the row above. When upstream deletes the popup itself, this row and the two rows around it retire. | +| `packages/app/src/assets/help/` (introducing-tabs.mp4, placeholder.png — whole directory) | Deleted | The 13 MB promo video's only consumer was the removed `TabsInfoPopup` (row above) and it bloats every clone; `placeholder.png` is referenced by nothing. | Keep deleted (`git rm` the upstream side of modify/delete conflicts). | | `packages/app/src/desktop-menu.ts`, `packages/app/src/components/windows-app-menu.tsx` | App-menu label "OpenCode" → "CoDev Code" | Visible menu branding. | Keep our labels. | | `packages/desktop/src/main/index.ts`, `packages/desktop/src/main/windows.ts` | APP_NAMES + window title → "CoDev Code" (Dev/Beta variants too) | Desktop app display name. | Keep our names. | | `packages/desktop/electron-builder.config.ts` | `productName` ×3 → "CoDev Code…"; artifactName → `codev-code-desktop-…`; protocol display name | Installer/product branding. appId (`ai.opencode.desktop`) and the `opencode://` deep-link scheme stay upstream — identity plumbing wired into main/index.ts and app deep-links; do not rename casually. | Keep our names; take upstream's other config. | diff --git a/packages/app/src/assets/help/introducing-tabs.mp4 b/packages/app/src/assets/help/introducing-tabs.mp4 deleted file mode 100644 index 2bcc8aeef6..0000000000 Binary files a/packages/app/src/assets/help/introducing-tabs.mp4 and /dev/null differ diff --git a/packages/app/src/assets/help/placeholder.png b/packages/app/src/assets/help/placeholder.png deleted file mode 100644 index c651d06cc9..0000000000 Binary files a/packages/app/src/assets/help/placeholder.png and /dev/null differ diff --git a/packages/app/src/components/help-button.tsx b/packages/app/src/components/help-button.tsx index b0561b13ce..ce5b2c7d39 100644 --- a/packages/app/src/components/help-button.tsx +++ b/packages/app/src/components/help-button.tsx @@ -1,11 +1,4 @@ -import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon" -import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2" -import { createSignal, Show } from "solid-js" -import { createStore } from "solid-js/store" -import { Drawer, DrawerClose, DrawerContent } from "@/components/ui/drawer" import { usePlatform } from "@/context/platform" -import introducingTabsVideo from "@/assets/help/introducing-tabs.mp4" -import { Persist, persisted } from "@/utils/persist" const helpIcon = ( <svg @@ -51,94 +44,3 @@ export function HelpButton() { </a> ) } - -// can remove this after the tabs rollout has been out for a while -export function TabsInfoPopup() { - if (import.meta.env.VITE_CODEV_CHANNEL !== "dev") return null - - const [state, setState] = persisted(Persist.global("tabsInfoPopup"), createStore({ dismissed: false })) - // setState({ dismissed: false }) // for testing - const [drawerOpen, setDrawerOpen] = createSignal(false) - - return ( - <Drawer open={drawerOpen()} onOpenChange={setDrawerOpen} side="right"> - <Show when={!state.dismissed}> - <div - class="fixed bottom-14 right-5 z-50 h-[240px] w-[192px] rounded-[8px] bg-v2-background-bg-base p-1 shadow-[var(--v2-elevation-floating)]" - aria-label="Introducing Tabs. A faster, more intuitive way to work." - > - <button - type="button" - aria-label="Dismiss Tabs information" - class="absolute top-3 right-3 z-10 size-5 flex items-center justify-center rounded-[4px] bg-[rgba(0,0,0,0.4)]" - onClick={() => setState("dismissed", true)} - > - <svg - width="16" - height="16" - viewBox="0 0 16 16" - fill="none" - xmlns="http://www.w3.org/2000/svg" - aria-hidden="true" - > - <path d="M4.25 11.75L11.75 4.25M11.75 11.75L4.25 4.25" stroke="white" /> - </svg> - </button> - <button - type="button" - class="relative block h-[232px] w-[184px] cursor-pointer overflow-hidden rounded-[4px] text-left" - onClick={() => { - setState("dismissed", true) - setDrawerOpen(true) - }} - > - <video - src={introducingTabsVideo} - class="absolute inset-0 h-full w-full object-cover" - loop - muted - autoplay - playsinline - aria-hidden="true" - onContextMenu={(event) => event.preventDefault()} - /> - <div class="absolute inset-x-0 bottom-0 flex w-full flex-col items-start gap-1.5 bg-[linear-gradient(180deg,rgba(0,0,0,0)_0%,#000000_100%)] px-3 py-5"> - <p class="w-full select-none text-[13px] font-[530] leading-none tracking-[-0.04px] text-[#FFFFFF]"> - Introducing Tabs - </p> - <p class="w-full select-none text-[13px] font-[440] leading-[140%] tracking-[-0.04px] text-[#808080]"> - A faster, more intuitive way to work. - </p> - </div> - </button> - </div> - </Show> - <DrawerContent> - <div class="flex h-[52px] w-full shrink-0 items-center gap-4 self-stretch border-b border-v2-border-border-muted p-4"> - <p class="min-h-0 min-w-0 flex-1 text-[13px] font-[530] leading-5 tracking-[-0.04px] tabular-nums text-v2-text-text-muted"> - June 16 - </p> - <DrawerClose - as={IconButtonV2} - type="button" - size="small" - variant="ghost-muted" - aria-label="Close" - icon={<IconV2 name="xmark-small" />} - /> - </div> - <div class="relative flex w-full flex-col items-start gap-6 p-8"> - <p class="w-full shrink-0 self-stretch text-[21px] font-[610] leading-6 tracking-[-0.37px] tabular-nums text-v2-text-text-base"> - Introducing Tabs Navigation. - </p> - <p class="w-full flex-1 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-base"> - We've introduced tabs as the primary navigation in OpenCode. Your most important session are now pinned at - the top of your screen at all times. No more hunting through menus or losing your place mid-session. Switch - contexts instantly, pick up exactly where you left off, and keep your focus where it belongs: on the - sessions. - </p> - </div> - </DrawerContent> - </Drawer> - ) -}