Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
f5008a6
fix(github): stop PR-status requests from starving startup connection…
btriapitsyn Jun 28, 2026
cfc38ef
fix(opencode): never auto-attach to a pre-existing OpenCode instance
btriapitsyn Jun 28, 2026
d7392bd
fix(opencode): never expose a port we don't manage to the process killer
btriapitsyn Jun 28, 2026
8ad3252
docs(changelog): add unreleased entries for startup and OpenCode atta…
btriapitsyn Jun 28, 2026
2488a36
chore: updated changelog
btriapitsyn Jun 28, 2026
5c92b8c
fix(sidebar): preserve explicit session selection on stale worktree d…
bashrusakh Jun 28, 2026
e2c5da6
fix(sync): stop watchdog redundant resyncs on healthy event stream (#…
tomzx Jun 28, 2026
3801dfc
fix(deps): update dependency @pierre/diffs to v1.3.0-beta.6 (#1789)
renovate[bot] Jun 28, 2026
b0631c8
chore(deps): update oven/bun docker tag to v1.3.14 (#1786)
renovate[bot] Jun 28, 2026
bf51a7e
chore(deps): update cloudflare/cloudflared docker digest to 6d91c12 (…
renovate[bot] Jun 28, 2026
861a448
fix(worktree): subagent sessions kept when deleting worktree group fr…
bashrusakh Jun 28, 2026
b6eef18
feat(#1766): support OpenCode steer delivery / follow-up behavior set…
bashrusakh Jun 28, 2026
7b1bed5
docs(changelog): add unreleased entries for follow-up behavior, sessi…
btriapitsyn Jun 28, 2026
9f1ad46
fix(settings): move Follow-up behavior radio group next to the other …
btriapitsyn Jun 28, 2026
2156551
fix(settings): shorten Follow-up behavior option labels to Steer / Queue
btriapitsyn Jun 28, 2026
e6e3c9d
docs(vscode-changelog): add unreleased entries for follow-up behavior…
btriapitsyn Jun 28, 2026
4513bd0
fix(git): don't log an error when status is requested for a deleted d…
btriapitsyn Jun 28, 2026
77bc2cc
fix(github): add a per-request timeout to all Octokit calls
btriapitsyn Jun 28, 2026
f029897
feat(github): detect rate limiting and pause PR status calls during c…
btriapitsyn Jun 28, 2026
431b9c6
perf(github): resolve remote candidates and repo metadata concurrently
btriapitsyn Jun 28, 2026
9209dc4
fix(github): skip PR status resolution for a directory that no longer…
btriapitsyn Jun 28, 2026
f933996
release v1.13.8
btriapitsyn Jun 28, 2026
04fbcb4
fix(vscode): avoid writing null agent config fields
btriapitsyn Jun 29, 2026
ea04cb4
chore: remove vacation notice from README
btriapitsyn Jun 29, 2026
fb015d7
fix: prevent embedded JSON examples from rendering as result cards
btriapitsyn Jun 29, 2026
ec094e6
feat(desktop): support remote runtime headers
btriapitsyn Jun 29, 2026
181764b
feat(desktop): proxy realtime requests with runtime headers
btriapitsyn Jun 29, 2026
a7cfa4a
fix: restore desktop remote authentication
btriapitsyn Jun 29, 2026
fb4fc49
chore: update changelog for desktop remote instances
btriapitsyn Jun 29, 2026
34808b7
fix(chat): hold bottom on first session open while late async content…
btriapitsyn Jun 29, 2026
78ac35d
fix(chat): disable markdown file-reference probing on mobile
btriapitsyn Jun 29, 2026
a3c0296
fix(chat): stop Thinking stream from fighting chat scroll
btriapitsyn Jun 30, 2026
f2f2498
perf(stores): defer safeStorage writes off the interaction path (#1941)
tomzx Jun 30, 2026
868f72a
ci: add merge-conflict label automation workflow (#1942)
tomzx Jul 1, 2026
bf8f39f
feat: native iOS & Android mobile apps (Capacitor) (#1954)
btriapitsyn Jul 1, 2026
e2e6ec7
feat: add Clack-based local dev helper
btriapitsyn Jul 1, 2026
dcbec91
fix: recover chat state after idle reconnects
btriapitsyn Jul 1, 2026
d351f20
feat(pr-review): add risk score to review comment output (#1943)
tomzx Jul 1, 2026
fee944d
fix: recover mobile and sync state after resume
btriapitsyn Jul 1, 2026
da155e2
feat(desktop): add keep-awake setting
btriapitsyn Jul 1, 2026
8535be8
fix: enable connection link generation for desktop app
btriapitsyn Jul 1, 2026
59cd362
fix: restore iOS QR code scanning
btriapitsyn Jul 1, 2026
e2a7b3a
feat: improve mobile header and toast placement
btriapitsyn Jul 1, 2026
4b987c5
fix: build VS Code extension correctly from oc-dev
btriapitsyn Jul 1, 2026
cf36b55
fix: clear stale busy state after session recovery
btriapitsyn Jul 1, 2026
b099ff4
chore: remove bundled IBM Plex fonts
btriapitsyn Jul 1, 2026
453fe77
fix: reject OpenCode desktop app as CLI
btriapitsyn Jul 1, 2026
d7759bd
feat(desktop): bundle pinned OpenCode CLI
btriapitsyn Jul 2, 2026
94aa7ac
release v1.13.9
btriapitsyn Jul 2, 2026
0ee55a1
fix(ci): run OpenCode CLI version step in bash
btriapitsyn Jul 2, 2026
ffcbe2c
fix: prevent mobile session resync flicker
btriapitsyn Jul 2, 2026
4f3a7fd
fix: stabilize chat history prepend scroll preservation on mobile and…
btriapitsyn Jul 2, 2026
862975b
feat(chat): migrate history list to @tanstack/react-virtual with dete…
btriapitsyn Jul 3, 2026
1c77fc2
feat(ui): unify list virtualization on @tanstack/react-virtual and po…
btriapitsyn Jul 3, 2026
7416728
feat(voice): first-class voice input and local TTS across web, deskto…
btriapitsyn Jul 3, 2026
fc7ec05
feat(mobile): transform-based keyboard choreography on iOS
btriapitsyn Jul 4, 2026
a9afc35
feat(mobile): collapsed pill composer and mobile input redesign
btriapitsyn Jul 4, 2026
8f8f4e0
feat(mobile): synchronized pill composer transitions and draft screen…
btriapitsyn Jul 4, 2026
19cae4b
fix(mobile): steady overlay entrance while the keyboard dismisses
btriapitsyn Jul 4, 2026
df3a869
perf(mobile): constant-viewport chat scroller across keyboard transit…
btriapitsyn Jul 4, 2026
03859d1
fix(chat): hide the load-older button once history is confirmed complete
btriapitsyn Jul 4, 2026
c0eeafa
fix(mobile): restore the password unlock page in mobile browsers
btriapitsyn Jul 4, 2026
9d9450f
fix(mobile): open the keyboard from the pill in browsers and draft un…
btriapitsyn Jul 4, 2026
7ce4dc6
docs: describe unreleased changes relative to the released version
btriapitsyn Jul 4, 2026
c01ae97
fix(chat): send preset starters directly instead of staging them in t…
btriapitsyn Jul 4, 2026
da60307
feat(mobile): autocomplete redesign for touch surfaces
btriapitsyn Jul 4, 2026
77b4a07
fix(mobile): hold the boot-matched splash while the browser connects
btriapitsyn Jul 5, 2026
034257b
fix(mobile): browser composer keyboard handling on chat and draft scr…
btriapitsyn Jul 5, 2026
c35ea1a
fix(desktop): recognize the LAN-bound local server when tagging clien…
btriapitsyn Jul 5, 2026
5edd728
fix(desktop): prefer the user's OpenCode install over the bundled CLI
btriapitsyn Jul 5, 2026
909a746
fix(opencode): robust Windows CLI discovery and launch across surfaces
btriapitsyn Jul 5, 2026
2faaf18
fix(chat): route abort to the session's own OpenCode instance
btriapitsyn Jul 5, 2026
90edbea
docs: changelog for the abort, desktop auth, and Windows CLI fixes
btriapitsyn Jul 5, 2026
2199cfa
fix(tooltip): update styles for tooltip content and arrow to use elev…
btriapitsyn Jul 5, 2026
7d412ff
release v1.14.0
btriapitsyn Jul 5, 2026
1eae711
feat: small-model utility calls on existing OpenCode providers (#2049)
btriapitsyn Jul 5, 2026
c4e4c8f
fix: run deployed web CLI from Bun global install
btriapitsyn Jul 5, 2026
a53e991
fix(auth): narrow mobile auth fallback (#2046)
bashrusakh Jul 5, 2026
24f648d
fix(capacitor): validate mobile connection on app resume
btriapitsyn Jul 5, 2026
3378b84
feat: add temporary sidebar share opinion prompt
btriapitsyn Jul 5, 2026
50b8504
fix: preserve chat composer focus on mobile keyboard
btriapitsyn Jul 5, 2026
1a457df
fix: update button removal notice duration in ShareOpinionDialog
btriapitsyn Jul 5, 2026
e91a046
feat(chat): recognize file:start-end as a clickable reference (#2000)
catan271 Jul 5, 2026
0e4b4ed
fix: compute first changed diff line from patch hunks
btriapitsyn Jul 5, 2026
e1b1181
fix(vscode): restore previous view when exiting settings (closes #177…
catan271 Jul 6, 2026
0a5953a
fix(vscode): persist model favorites (#1995)
catan271 Jul 6, 2026
f61eb30
feat: add load earlier support to chat timeline
btriapitsyn Jul 6, 2026
8009ab8
fix(sidebar): add project sort modes
bashrusakh Jul 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 7 additions & 1 deletion .agents/skills/locale-ui-patterns/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,16 @@ User-facing UI text must go through `@/lib/i18n`; do not hardcode English string

Use this skill for any React UI change that adds or edits visible text, accessible labels, placeholders, tooltips, toasts, dialogs, settings labels, navigation labels, or empty/error states.

## Translate everything immediately (no English placeholders)

Every key you add to a non-English dictionary MUST contain a real translation in that language — never the English source string as a stand-in. There is NO "leave it in English for now" convention in this project; if an agent told you there was, it was wrong. Copying the English value into `es.ts`/`fr.ts`/`ko.ts`/`pl.ts`/`pt-BR.ts`/`uk.ts`/`zh-CN.ts`/`zh-TW.ts` is a defect, not a deferral. The app ships every locale at once, so an untranslated key is a visible bug for those users.

If you genuinely cannot translate a language, say so explicitly to the user instead of silently pasting English. Do not invent a fallback policy.

## Required Flow

1. Add or reuse a key in `packages/ui/src/lib/i18n/messages/en.ts`.
2. Add the same key to every non-English dictionary in `packages/ui/src/lib/i18n/messages/`.
2. Add the same key — fully translated, not the English text — to every non-English dictionary in `packages/ui/src/lib/i18n/messages/`.
3. In components, call `const { t } = useI18n()` from `@/lib/i18n` and render `t('key')`.
4. For locale names or language picker labels, use `label(locale)` from `useI18n()`.
5. Keep locale state in `packages/ui/src/lib/i18n/*`; do not add locale fields to broad stores like `useUIStore`.
Expand Down
69 changes: 69 additions & 0 deletions .agents/skills/serve-sim/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
---
name: serve-sim
description: Use when working with the OpenChamber iOS Simulator app without opening Xcode - boot/install/launch the Capacitor iOS app, start a browser stream, tap/type/gesture/rotate, inspect accessibility, or hand a simulator URL to the user.
---

# serve-sim

Use `serve-sim` to stream and control a booted Apple Simulator from the terminal. It captures the simulator framebuffer, serves a browser preview, and exposes CLI controls for taps, typing, gestures, hardware buttons, rotation, memory warnings, permissions, camera injection, and accessibility inspection.

## OpenChamber Defaults

- Mobile package: `packages/mobile`
- iOS bundle id: `com.openchamber.app`
- Headless env wrapper: `packages/mobile/scripts/with-mobile-env.mjs`
- iOS simulator helper: `packages/mobile/scripts/ios-sim.mjs`
- Preferred scripts:
- `bun run mobile:build:ios:simulator`
- `bun run mobile:sim:run`
- `bun run mobile:sim:serve`
- `bun run mobile:sim:list`
- `bun run mobile:sim:kill`

## Workflow

1. Build the simulator app without opening Xcode:
```sh
bun run mobile:build:ios:simulator
```

2. Boot a simulator if needed, install, and launch the app:
```sh
bun run mobile:sim:run
```

3. Start the browser stream in detached JSON mode:
```sh
bun run mobile:sim:serve
```
Surface the returned `url` to the user. It normally starts at `http://localhost:3200`.

4. Stop helpers when finished unless the user asks to keep them running:
```sh
bun run mobile:sim:kill
```

## Direct CLI Controls

- Tap normalized coordinates: `bunx serve-sim tap 0.5 0.5`
- Type focused text: `bunx serve-sim type "hello"`
- Hardware home: `bunx serve-sim button home`
- Rotate: `bunx serve-sim rotate portrait`
- List streams: `bunx serve-sim --list -q`
- Accessibility tree: `curl http://localhost:3100/ax`

Coordinates are normalized `0..1`, not pixels. Prefer `tap` for simple taps; do not emulate taps using separate `gesture` begin/end commands because that can register as long press.

## Preconditions

- macOS host.
- Xcode installed; use `DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer` if `xcode-select` points at CommandLineTools.
- Node 18+.
- At least one simulator can be booted with `xcrun simctl`.

## Anti-Patterns

- Do not open Xcode just to build/install/launch during agent work; use the scripts above.
- Do not parse human output from `serve-sim`; use `-q` for JSON.
- Do not leave helper streams running unintentionally.
- Do not guess coordinates after accessibility lookup fails; report the missing target instead.
19 changes: 18 additions & 1 deletion .github/workflows/build-macos-arm64-dmg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,25 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: "20"
node-version: "22"

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Get bundled OpenCode CLI version
id: opencode_cli_version
run: |
VERSION=$(node -p "require('./package.json').dependencies['@opencode-ai/sdk']")
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Cache bundled OpenCode CLI artifact
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: packages/electron/.cache/opencode-cli
key: opencode-cli-${{ runner.os }}-arm64-${{ steps.opencode_cli_version.outputs.version }}
restore-keys: |
opencode-cli-${{ runner.os }}-arm64-

- name: Install Apple Certificate
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
Expand Down Expand Up @@ -68,9 +82,12 @@ jobs:
ELECTRON_BUILDER_ARCH: arm64
run: |
bun run build:web-assets
bun run prepare:opencode-cli
bun run verify:opencode-cli
bun run bundle:main
bun run rebuild:native
./node_modules/.bin/electron-builder --mac --arm64 --publish=never
bun run verify:opencode-cli:packaged

- name: Prepare DMG artifact
run: |
Expand Down
31 changes: 31 additions & 0 deletions .github/workflows/label-merge-conflict.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: label-merge-conflict

on:
push:
branches: [main]
pull_request_target:
types: [opened, synchronize, reopened]
workflow_dispatch:

permissions: {}

jobs:
label:
if: ${{ github.repository == 'openchamber/openchamber' }}
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Generate bot app token
id: app-token
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2.2.2
with:
app-id: ${{ secrets.OC_REVIEW_APP_ID }}
private-key: ${{ secrets.OC_REVIEW_APP_PRIVATE_KEY }}

- name: Label pull requests with merge conflicts
uses: eps1lon/actions-label-merge-conflict@0273be72a0bbd58fcd71d0d6c02c209b50d1e5e1 # v3.1.0
with:
dirtyLabel: "merge-conflict:true"
repoToken: ${{ steps.app-token.outputs.token }}
2 changes: 1 addition & 1 deletion .github/workflows/oc-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
node-version: '22'

- name: Install dependencies
run: bun install --frozen-lockfile
Expand Down
52 changes: 48 additions & 4 deletions .github/workflows/release-desktop-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,25 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
node-version: '22'

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Get bundled OpenCode CLI version
id: opencode_cli_version
run: |
VERSION=$(node -p "require('./package.json').dependencies['@opencode-ai/sdk']")
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Cache bundled OpenCode CLI artifact
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: packages/electron/.cache/opencode-cli
key: opencode-cli-${{ runner.os }}-${{ matrix.arch }}-${{ steps.opencode_cli_version.outputs.version }}
restore-keys: |
opencode-cli-${{ runner.os }}-${{ matrix.arch }}-

- name: Install Apple Certificate
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
Expand Down Expand Up @@ -101,12 +115,15 @@ jobs:
ELECTRON_BUILDER_ARCH: ${{ matrix.arch }}
run: |
bun run build:web-assets
bun run prepare:opencode-cli
bun run verify:opencode-cli
bun run bundle:main
# npmRebuild=false in package.json, so electron-builder won't
# recompile native deps on its own. Rebuild against the target
# Electron ABI before packaging, matching the release workflow.
bun run rebuild:native
bunx electron-builder --mac --${{ matrix.arch }} --publish=never
bun run verify:opencode-cli:packaged

- name: Verify signature + entitlements + notarization
run: |
Expand Down Expand Up @@ -165,7 +182,10 @@ jobs:
build-windows-electron:
if: ${{ inputs.build_windows }}
name: Build Windows Electron (x64)
runs-on: windows-latest
# Match the production release workflow. windows-latest currently resolves
# to a runner with Visual Studio 18, which this Electron/node-gyp stack does
# not detect correctly.
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
Expand All @@ -186,15 +206,37 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
node-version: '22'

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Get bundled OpenCode CLI version
id: opencode_cli_version
shell: bash
run: |
VERSION=$(node -p "require('./package.json').dependencies['@opencode-ai/sdk']")
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Cache bundled OpenCode CLI artifact
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: packages/electron/.cache/opencode-cli
key: opencode-cli-${{ runner.os }}-${{ matrix.arch }}-${{ steps.opencode_cli_version.outputs.version }}
restore-keys: |
opencode-cli-${{ runner.os }}-${{ matrix.arch }}-

- name: Build web assets
working-directory: packages/electron
run: bun run build:web-assets

- name: Prepare bundled OpenCode CLI
working-directory: packages/electron
shell: bash
run: |
bun run prepare:opencode-cli
bun run verify:opencode-cli

- name: Bundle main process
working-directory: packages/electron
run: bun run bundle:main
Expand All @@ -210,7 +252,9 @@ jobs:
- name: Build Windows app
working-directory: packages/electron
shell: bash
run: node ./scripts/package.mjs --win --${{ matrix.arch }} --publish=never
run: |
node ./scripts/package.mjs --win --${{ matrix.arch }} --publish=never
bun run verify:opencode-cli:packaged

- name: Upload Windows installable artifacts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Expand Down
52 changes: 47 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
node-version: '22'
registry-url: 'https://registry.npmjs.org'

- name: Install dependencies
Expand Down Expand Up @@ -141,11 +141,26 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
node-version: '22'

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Get bundled OpenCode CLI version
id: opencode_cli_version
shell: bash
run: |
VERSION=$(node -p "require('./package.json').dependencies['@opencode-ai/sdk']")
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Cache bundled OpenCode CLI artifact
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: packages/electron/.cache/opencode-cli
key: opencode-cli-${{ runner.os }}-${{ matrix.arch }}-${{ steps.opencode_cli_version.outputs.version }}
restore-keys: |
opencode-cli-${{ runner.os }}-${{ matrix.arch }}-

- name: Install Apple Certificate
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
Expand Down Expand Up @@ -179,13 +194,16 @@ jobs:
ELECTRON_BUILDER_ARCH: ${{ matrix.arch }}
run: |
bun run build:web-assets
bun run prepare:opencode-cli
bun run verify:opencode-cli
bun run bundle:main
# npmRebuild=false in package.json, so electron-builder won't
# recompile native deps on its own — we must rebuild against the
# target Electron ABI before packaging, otherwise better-sqlite3/
# node-pty/bun-pty crash on require inside the packaged app.
bun run rebuild:native
bunx electron-builder --mac --${{ matrix.arch }} --publish=never
bun run verify:opencode-cli:packaged

- name: Verify signature + entitlements + notarization
run: |
Expand Down Expand Up @@ -270,15 +288,37 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
node-version: '22'

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Get bundled OpenCode CLI version
id: opencode_cli_version
shell: bash
run: |
VERSION=$(node -p "require('./package.json').dependencies['@opencode-ai/sdk']")
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Cache bundled OpenCode CLI artifact
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: packages/electron/.cache/opencode-cli
key: opencode-cli-${{ runner.os }}-${{ matrix.arch }}-${{ steps.opencode_cli_version.outputs.version }}
restore-keys: |
opencode-cli-${{ runner.os }}-${{ matrix.arch }}-

- name: Build web assets
working-directory: packages/electron
run: bun run build:web-assets

- name: Prepare bundled OpenCode CLI
working-directory: packages/electron
shell: bash
run: |
bun run prepare:opencode-cli
bun run verify:opencode-cli

- name: Bundle main process
working-directory: packages/electron
run: bun run bundle:main
Expand All @@ -294,7 +334,9 @@ jobs:
- name: Build Windows app
working-directory: packages/electron
shell: bash
run: node ./scripts/package.mjs --win --${{ matrix.arch }} --publish=never
run: |
node ./scripts/package.mjs --win --${{ matrix.arch }} --publish=never
bun run verify:opencode-cli:packaged

- name: Upload installer to release
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2.6.2
Expand Down Expand Up @@ -323,7 +365,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
node-version: '22'

- name: Download per-arch latest-mac.yml
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/vscode-extension.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
node-version: '22'

- name: Install dependencies
run: bun install --frozen-lockfile
Expand Down
Loading