Skip to content

Sync provider/plugin upstream behaviors#33

Merged
Astro-Han merged 2 commits into
devfrom
codex/chore-sync-provider-plugin
Apr 19, 2026
Merged

Sync provider/plugin upstream behaviors#33
Astro-Han merged 2 commits into
devfrom
codex/chore-sync-provider-plugin

Conversation

@Astro-Han

@Astro-Han Astro-Han commented Apr 19, 2026

Copy link
Copy Markdown
Owner

Summary

Align the PR3 provider/plugin slice of issue #27 with upstream v1.4.11 behavior, while keeping the diff inside provider/plugin-owned files and tests.

This PR:

  • omits maxOutputTokens for OpenAI reasoning models on cloudflare-ai-gateway
  • normalizes sparse models.dev provider entries so required response fields get safe defaults
  • normalizes Anthropic and Vertex Anthropic assistant messages when text trails tool calls
  • adds Opus 4.7 adaptive reasoning coverage for gateway, Anthropic, and Bedrock
  • carries the upstream Azure store=true provider behavior and locks it with a regression test so this sync item is explicit in PR3 instead of implicit in later drift
  • pins ghostty-web to an immutable Git commit so bun install --frozen-lockfile stays reproducible in CI

Why

Issue #27 was split so PR3 only owns provider/plugin behavior work and directly owned tests. This keeps the review surface honest after PR #31 instead of hiding runtime bridge migration inside a provider/plugin-named PR.

The CI follow-up is intentionally small: this repo cannot use a moving Git dependency ref like github:anomalyco/ghostty-web#main while enforcing a frozen lockfile, because upstream branch movement makes installs non-reproducible.

Related Issue

Refs #27

How To Verify

bun install --frozen-lockfile
bun --cwd packages/opencode test test/provider test/plugin
bun run --cwd packages/opencode typecheck
bun run --cwd packages/opencode build
bun turbo typecheck
bun turbo test:ci

Screenshots or Recordings

N/A, no visible UI changes.

Checklist

  • I ran the relevant verification steps
  • I tested visible changes manually when needed
  • I am targeting the dev branch

@Astro-Han Astro-Han merged commit b03b8ee into dev Apr 19, 2026
9 checks passed
@Astro-Han Astro-Han deleted the codex/chore-sync-provider-plugin branch April 19, 2026 06:44
Astro-Han added a commit that referenced this pull request May 9, 2026
Slice 10 of issue #440 — full composer + dock + model picker rewrite. 38 commits squashed.

## Highlights

- **Composer joined-card shell**: new DockCard + DockSegment primitives in @opencode-ai/ui, dock widgets share the L34 joined-card layout. Hybrid composer shell renders permission UI inline.
- **prompt-input.tsx 1602 → ~570 lines**: split into prompt-input/{store-types, editor-serialize, editor-imperatives, comment-routing, history-navigation, popover-controllers, editor-input, keydown, model-controls}. No behavior change — all factories injected via deps; popover↔editor-input cycle resolved via mutable forward-ref.
- **DockWidgetHeader unified**: single 36px collapsed header with 30px chev IconButton (3+3 breathing) — consolidates Followup, Revert, Todo widgets.
- **DOCK_MOTION contract**: composer/dock/widgets share `{ visualDuration: 0.3, bounce: 0 }` via packages/app/src/pages/session/composer/motion.ts. Aligns with global useSpring convention.
- **Model picker rewrite**: variant control merged into model trigger; thinking-level promoted from separate popover to inline section. `[data-picker-content]` guard prevents nested popover dismiss.
- **Send button + ContextUsage parity**: 30px outer / 16px inner glyph, theme-locked colors, larger stop glyph.
- **Followup defaults to queue mode**: drops the legacy steer override.
- **Control heights**: single 30px dense tier across composer; sidebar trailing actions step down to 26 per nesting rule.
- **Picker contracts**: tighter padding, narrower width (340), dropped sticky labels.

## Post-review fixes (CI + 2 review rounds)

- Critical: DockCard manual classList merge (single key with spaces) was throwing DOMException InvalidCharacterError — replaced with Solid native class+classList co-rendering.
- CI typecheck: PopoverControllers types aligned with upstream solid-list `Accessor<string | null>` (was `undefined`).
- CI e2e: dropped stale `prompt-variant-control` selector (variant folded into model picker).
- Send button e2e contract: 32 → 30px to match dense tier.
- Editor serialize: fixed double-newline regression for blank rows.
- Keydown: removed dead `if (stopping())` branches (both arms identical).
- Custom slash command id includes source to prevent workspace+user collision.
- Model trigger label: pinned to `min-w-[80px] max-w-[180px]` to balance short names ("GPT-5.5") vs long ("DeepSeek V4 Pro") without jiggling the workspace control.

## Systemic finding (tracked under #34)

PawWork sets `html { font: var(--type-body) }` → root font-size 13px. This means **Tailwind rem-based units render at 81% of their pixel-named values**: `h-9` = 29.25px, not 36px. Multiple visual bugs in this slice (chev clipping, header height) traced back to this. Remediation: use absolute pixels (`h-[36px]`) for grid-pinned heights; avoid Tailwind's pixel-named scale for 4pt-grid alignment. DESIGN.md docs debt to be filed under #34.

## Hand-test backlog (open after merge)

- #32 dark theme regression sweep
- #33 single-prompt E2E

## Files of note

- packages/ui/src/components/dock-card.tsx (new)
- packages/app/src/pages/session/composer/{motion.ts, use-dock-collapse.ts, dock-widget-header.tsx, session-composer-region.tsx, session-todo-dock.tsx}
- packages/app/src/components/prompt-input/* (9 new files)
- packages/app/e2e/composer/composer-slice-10.spec.ts (new)

Closes part of #440.
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