Skip to content

feat(drive): upgrade Effect to 4.0.1 and refresh V2 dependencies - #122

Merged
kitlangton merged 1 commit into
mainfrom
modernize-release
Oct 10, 2026
Merged

kitlangton merged 1 commit into
mainfrom
modernize-release

Conversation

@kitlangton

Copy link
Copy Markdown
Contributor

Closes #104
Closes #115
Closes #116
Closes #117
Closes #121

Why

OpenCode V2 moved to Effect 4.0.1 and expanded its schema and UI surfaces (Integration.ExternalMethod, Unicode ellipses …, grouped exploration rows for web tools, and updated question review tabs). Meanwhile, opencode-drive 2.1.3 remained pinned to effect@4.0.0-rc.112, @opencode/client@0.0.0-dev-19767, and Bun 1.4.0, and opencode-drive check / run only mapped dist/*.d.ts under paths["effect/*"] — causing directory-index exports such as effect/http to bypass path mapping and fail with TS2719: Two different types with this name exist in installed consumers.

What Changes

Surface Before After
Effect & @opencode/client effect@4.0.0-rc.112, @opencode/client@0.0.0-dev-19767, effect/unstable/* imports effect@4.0.1, @opencode/client@0.0.0-dev-20807, top-level effect/cli, effect/http, effect/process, effect/rpc imports
Script & program typechecking (tooling.ts) paths["effect/*"] mapped only dist/*.d.ts and spawned bin/tsgo.js, failing on effect/http and newer @typescript/native-preview paths["effect/*"] maps both dist/*.d.ts and dist/*/index.d.ts, and spawns lib/tsgo.js
Catalog V2 capture (apps/catalog) openNewSession and tool scenarios waited for ASCII ... (Ask anything..., Writing command..., Fetching from the web..., Searching web...), Review heading, and wrote legacy .opencode/tui.json Waits for editor focus + Ask anything, ellipsis-agnostic markers, exploration group labels (1 fetch, 1 search), Validation: Focused, and configures themes via V2 tuiConfig
Recording terminal replay (@wterm/ghostty 0.5.4) Forwarded raw core.getCursor() object Projects { row, col, visible } to preserve the CapturedFrame contract
Examples & manual scripts examples/simple.ts waited for a second title llm.send; examples/serve.ts and session-switching.ts passed V1 filePath to read Removed dead title llm.send and updated read tool inputs to V2 path

Scope

Updates root, packages/drive, and apps/catalog dependencies (effect 4.0.1, @opencode/client 0.0.0-dev-20807, Bun 1.4.2, @typescript/native-preview 7.0.0-dev.20260707.2, TypeScript 7.0.2, Vitest 5.0.3, @wterm/* 0.5.4, Motion 14.1.0, @napi-rs/canvas 1.0.11, oxlint 1.87.0, React 19.3.0, Wrangler 4.149.0) and adds the minor changeset for the upcoming release. @fontsource/noto-sans-math remains pinned at 5.2.8 because 5.2.9+ upstream dropped the math subset required by font-coverage.test.ts.

Verification

bun install --frozen-lockfile
bun run check
bun run test

# Live OpenCode V2 verification (origin/v2 at 4617210822)
OPENCODE_DRIVE_DEV=/path/to/opencode OPENCODE_DRIVE_MEDIA_DIR=$PWD/.drive-output \
  bun run --cwd packages/drive drive run test/manual/current-v2.ts
bun run --cwd packages/drive drive start --name tui-interaction-lifecycle \
  --script test/manual/tui-regressions/interaction-lifecycle.ts --dev "$OPENCODE_DEV"
OPENCODE_DRIVE_DB=restart.sqlite bun run --cwd packages/drive drive start --name tui-server-restart \
  --script test/manual/tui-regressions/server-restart.ts --dev "$OPENCODE_DEV"
bun run --cwd packages/drive drive start --name tui-quiescence \
  --script test/manual/tui-regressions/quiescence.ts --dev "$OPENCODE_DEV"
for scenario in ordered coalesce consumed cancelled rollback; do
  OPENCODE_DRIVE_COMPACT_CASE="$scenario" OPENCODE_DRIVE_COLS=100 \
    bun run --cwd packages/drive drive start --daemon --name "compact-$scenario-100" \
    --script test/manual/tui-regressions/compact-admission.ts --dev "$OPENCODE_DEV"
done
OPENCODE_DRIVE_SEED=42 OPENCODE_DRIVE_STEPS=18 \
  bun run --cwd packages/drive drive start --name padding-gauntlet \
  --script test/manual/tui-regressions/padding-gauntlet.ts --dev "$OPENCODE_DEV"
bun run --cwd packages/drive drive start --name tui-plugin-registry \
  --script test/manual/tui-regressions/plugin-registry.ts --dev "$OPENCODE_DEV"

# Catalog capture against current V2 (#117)
for flow in read-file-lifecycle shell-lifecycle web-lifecycle question-lifecycle; do
  bun run catalog:capture -- --opencode "$OPENCODE_DEV" --revision origin/v2 --flow "$flow" --jobs 1
done
  • bun run check: 0 lint warnings, 0 typecheck errors across packages/drive and apps/catalog.
  • bun run test: 277 Effect/unit tests, 62 CLI integration tests, and 40 catalog tests pass.
  • Clean consumer tarball test: opencode-drive check and opencode-drive run succeed both standalone and alongside a mismatched top-level effect install, and opencode.integration.list() decodes Integration.ExternalMethod.
  • All V2 regression probes (current-v2, interaction-lifecycle, server-restart, quiescence, all 5 compact-admission cases, padding-gauntlet, plugin-registry) and catalog capture flows (read-file-lifecycle, shell-lifecycle, web-lifecycle, question-lifecycle) pass against origin/v2 (multi-tool-interleavings fails on origin/v2 with the expected metadata.hidden server bug and passes against anomalyco/opencode#54090).

@kitlangton
kitlangton merged commit 6109ce4 into main Oct 10, 2026
1 check passed
@kitlangton
kitlangton deleted the modernize-release branch October 10, 2026 22:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment