Skip to content

Commit 438e0c6

Browse files
Merge branch 'dev' into fix/24286-web-ui-version-mismatch
* upstream/dev: (715 commits) chore: update nix node_modules hashes feat(oauth): unify OAuth callback browser pages (anomalyco#34025) chore: generate refactor(app): replace tab drag handling with dndkit (anomalyco#33880) refactor(app): use dropdown for project selector (anomalyco#33984) chore: update nix node_modules hashes fix(app): bump ghostty-web to prevent terminal resize hangs (anomalyco#34020) chore: generate feat(sdk): expose active sessions (anomalyco#33991) fix(sdk): wake embedded session execution (anomalyco#33992) refactor(opencode): stop legacy v2 event emission (anomalyco#33993) fix(ui): normalize tooltip trigger layout (anomalyco#33979) fix(app): suspend hidden terminal renderer (anomalyco#33990) fix(app): enable auto-accept in session settings (anomalyco#33974) tweak: hide MCP access token prefix (anomalyco#33711) fix(core): refine small model defaults (anomalyco#33926) feat(core): split MCP timeout configuration (anomalyco#33977) fix(app): simplify question prompt (anomalyco#33968) feat(llm): pass strict through tool definitions for Codex parity (anomalyco#33392) chore: generate ...
2 parents 9db2b70 + 219ba24 commit 438e0c6

2,085 files changed

Lines changed: 159729 additions & 87573 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
# web + desktop packages
2-
packages/app/ @adamdotdevin
3-
packages/tauri/ @adamdotdevin
4-
packages/desktop/src-tauri/ @brendonovich
5-
packages/desktop/ @adamdotdevin
2+
packages/app/ @Hona @Brendonovich
3+
packages/desktop/ @Hona @Brendonovich

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ blank_issues_enabled: false
22
contact_links:
33
- name: 💬 Discord Community
44
url: https://discord.gg/opencode
5-
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
5+
about: For support, troubleshooting, how-to questions, and real-time discussion.

.github/ISSUE_TEMPLATE/question.yml

Lines changed: 0 additions & 10 deletions
This file was deleted.

.github/workflows/nix-hashes.yml

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,24 @@ jobs:
5656
BUILD_LOG=$(mktemp)
5757
trap 'rm -f "$BUILD_LOG"' EXIT
5858
59-
# Build with fakeHash to trigger hash mismatch and reveal correct hash
60-
nix build ".#packages.${SYSTEM}.node_modules_updater" --no-link 2>&1 | tee "$BUILD_LOG" || true
59+
HASH=""
60+
MAX_ATTEMPTS=3
61+
for ((ATTEMPT = 1; ATTEMPT <= MAX_ATTEMPTS; ATTEMPT++)); do
62+
# Build with fakeHash to trigger hash mismatch and reveal correct hash
63+
nix build ".#packages.${SYSTEM}.node_modules_updater" --no-link 2>&1 | tee "$BUILD_LOG" || true
6164
62-
# Extract hash from build log with portability
63-
HASH="$(nix run --inputs-from . nixpkgs#gnugrep -- -oP 'got:\s*\Ksha256-[A-Za-z0-9+/=]+' "$BUILD_LOG" | tail -n1 || true)"
65+
HASH="$(nix run --inputs-from . nixpkgs#gnugrep -- -oP 'got:\s*\Ksha256-[A-Za-z0-9+/=]+' "$BUILD_LOG" | tail -n1 || true)"
66+
67+
[ -n "$HASH" ] && break
68+
69+
if [ "$ATTEMPT" -lt "$MAX_ATTEMPTS" ]; then
70+
echo "::warning::Attempt ${ATTEMPT}/${MAX_ATTEMPTS} produced no hash for ${SYSTEM}; retrying in $((ATTEMPT * 10))s"
71+
sleep $((ATTEMPT * 10))
72+
fi
73+
done
6474
6575
if [ -z "$HASH" ]; then
66-
echo "::error::Failed to compute hash for ${SYSTEM}"
76+
echo "::error::Failed to compute hash for ${SYSTEM} after ${MAX_ATTEMPTS} attempts"
6777
cat "$BUILD_LOG"
6878
exit 1
6979
fi

.github/workflows/publish.yml

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ jobs:
9090
id: build
9191
run: |
9292
./packages/opencode/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }}
93+
./packages/cli/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }}
9394
env:
9495
OPENCODE_VERSION: ${{ needs.version.outputs.version }}
9596
OPENCODE_RELEASE: ${{ needs.version.outputs.release }}
@@ -107,6 +108,12 @@ jobs:
107108
with:
108109
name: opencode-cli-windows
109110
path: packages/opencode/dist/opencode-windows*
111+
112+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
113+
with:
114+
name: opencode-preview-cli
115+
path: packages/cli/dist/cli-*
116+
110117
outputs:
111118
version: ${{ needs.version.outputs.version }}
112119

@@ -318,6 +325,7 @@ jobs:
318325
run: bun run build
319326
working-directory: packages/desktop
320327
env:
328+
NODE_OPTIONS: --max-old-space-size=4096
321329
OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
322330
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
323331
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
@@ -327,9 +335,9 @@ jobs:
327335
VITE_SENTRY_ENVIRONMENT: ${{ (github.ref_name == 'beta' && 'beta') || 'production' }}
328336
VITE_SENTRY_RELEASE: desktop@${{ needs.version.outputs.version }}
329337

330-
- name: Package and publish
338+
- name: Package
331339
if: needs.version.outputs.release
332-
run: npx electron-builder ${{ matrix.settings.platform_flag }} --publish always --config electron-builder.config.ts
340+
run: npx electron-builder ${{ matrix.settings.platform_flag }} --publish never --config electron-builder.config.ts
333341
working-directory: packages/desktop
334342
timeout-minutes: 60
335343
env:
@@ -349,11 +357,9 @@ jobs:
349357
env:
350358
OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
351359

352-
- name: Create and upload macOS .app.tar.gz
360+
- name: Create macOS .app.tar.gz
353361
if: runner.os == 'macOS' && needs.version.outputs.release
354362
working-directory: packages/desktop/dist
355-
env:
356-
GH_TOKEN: ${{ steps.committer.outputs.token }}
357363
run: |
358364
if [[ "${{ matrix.settings.target }}" == "x86_64-apple-darwin" ]]; then
359365
APP_DIR="mac"
@@ -371,7 +377,6 @@ jobs:
371377
exit 1
372378
fi
373379
tar -czf "$OUT_NAME" -C "$(dirname "$APP_PATH")" "$(basename "$APP_PATH")"
374-
gh release upload "v${{ needs.version.outputs.version }}" "$OUT_NAME" --clobber --repo "${{ needs.version.outputs.repo }}"
375380
376381
- name: Verify signed Windows Electron artifacts
377382
if: runner.os == 'Windows'
@@ -446,12 +451,24 @@ jobs:
446451
name: opencode-cli-signed-windows
447452
path: packages/opencode/dist
448453

454+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
455+
with:
456+
name: opencode-preview-cli
457+
path: packages/cli/dist
458+
449459
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
450460
if: needs.version.outputs.release
451461
with:
452462
pattern: latest-yml-*
453463
path: /tmp/latest-yml
454464

465+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
466+
if: needs.version.outputs.release
467+
with:
468+
pattern: opencode-desktop-*
469+
path: /tmp/desktop
470+
merge-multiple: true
471+
455472
- name: Setup git committer
456473
id: committer
457474
uses: ./.github/actions/setup-git-committer
@@ -478,6 +495,19 @@ jobs:
478495
git config --global user.name "opencode"
479496
ssh-keyscan -H aur.archlinux.org >> ~/.ssh/known_hosts || true
480497
498+
- name: Upload desktop release assets
499+
if: needs.version.outputs.release
500+
env:
501+
GH_TOKEN: ${{ steps.committer.outputs.token }}
502+
run: |
503+
shopt -s nullglob
504+
files=(/tmp/desktop/*.{exe,blockmap,dmg,zip,AppImage,deb,rpm} /tmp/desktop/*.app.tar.gz)
505+
if (( ${#files[@]} == 0 )); then
506+
echo "No desktop release assets found"
507+
exit 1
508+
fi
509+
gh release upload "v${{ needs.version.outputs.version }}" "${files[@]}" --clobber --repo "${{ needs.version.outputs.repo }}"
510+
481511
- run: ./script/publish.ts
482512
env:
483513
OPENCODE_VERSION: ${{ needs.version.outputs.version }}

.github/workflows/storybook.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ on:
99
- "bun.lock"
1010
- "packages/storybook/**"
1111
- "packages/ui/**"
12+
- "packages/session-ui/**"
1213
pull_request:
1314
branches: [dev]
1415
paths:
@@ -17,6 +18,7 @@ on:
1718
- "bun.lock"
1819
- "packages/storybook/**"
1920
- "packages/ui/**"
21+
- "packages/session-ui/**"
2022
workflow_dispatch:
2123

2224
concurrency:

.github/workflows/test.yml

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -64,35 +64,21 @@ jobs:
6464
turbo-${{ runner.os }}-
6565
6666
- name: Run unit tests
67-
run: bun turbo test:ci
67+
timeout-minutes: 20
68+
run: GITHUB_ACTIONS=false bun turbo test
6869
env:
6970
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}
7071

72+
- name: Check generated client
73+
if: runner.os == 'Linux'
74+
working-directory: packages/client
75+
run: bun run check:generated
76+
7177
- name: Run HttpApi exerciser gates
7278
if: runner.os == 'Linux'
7379
working-directory: packages/opencode
7480
run: bun run test:httpapi
7581

76-
- name: Publish unit reports
77-
if: always()
78-
uses: mikepenz/action-junit-report@bccf2e31636835cf0874589931c4116687171386 # v6.4.0
79-
with:
80-
report_paths: packages/*/.artifacts/unit/junit.xml
81-
check_name: "unit results (${{ matrix.settings.name }})"
82-
detailed_summary: true
83-
include_time_in_summary: true
84-
fail_on_failure: false
85-
86-
- name: Upload unit artifacts
87-
if: always()
88-
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
89-
with:
90-
name: unit-${{ matrix.settings.name }}-${{ github.run_attempt }}
91-
include-hidden-files: true
92-
if-no-files-found: ignore
93-
retention-days: 7
94-
path: packages/*/.artifacts/unit/junit.xml
95-
9682
e2e:
9783
name: e2e (${{ matrix.settings.name }})
9884
strategy:
@@ -118,7 +104,8 @@ jobs:
118104
- name: Setup Node
119105
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
120106
with:
121-
node-version: "24"
107+
# Playwright 1.59 hangs while extracting Chromium with Node 24.16.
108+
node-version: "24.15"
122109

123110
- name: Setup Bun
124111
uses: ./.github/actions/setup-bun
@@ -150,7 +137,6 @@ jobs:
150137
run: bun --cwd packages/app test:e2e:local
151138
env:
152139
CI: true
153-
PLAYWRIGHT_JUNIT_OUTPUT: e2e/junit-${{ matrix.settings.name }}.xml
154140
timeout-minutes: 30
155141

156142
- name: Upload Playwright artifacts
@@ -161,6 +147,5 @@ jobs:
161147
if-no-files-found: ignore
162148
retention-days: 7
163149
path: |
164-
packages/app/e2e/junit-*.xml
165150
packages/app/e2e/test-results
166151
packages/app/e2e/playwright-report

.opencode/agent/triage.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
mode: primary
33
hidden: true
4-
model: opencode/gpt-5.4-nano
4+
model: opencode/gpt-5.4-mini
55
color: "#44BA81"
66
tools:
77
"*": false

.opencode/opencode.jsonc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,15 @@
22
"$schema": "https://opencode.ai/config.json",
33
"provider": {},
44
"permission": {},
5-
"reference": {
6-
"effect": "github.com/Effect-TS/effect-smol",
5+
"references": {
6+
"effect": {
7+
"repository": "github.com/Effect-TS/effect-smol",
8+
"description": "Use for Effect v4 and effect-smol implementation details",
9+
},
10+
"opencode-local": {
11+
"path": "~/.local/share/opencode",
12+
"description": "Contains opencode logs and data",
13+
},
714
},
815
"mcp": {},
916
"tools": {

.prettierignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
sst-env.d.ts
22
packages/desktop/src/bindings.ts
3+
packages/client/src/generated/
4+
packages/client/src/generated-effect/

0 commit comments

Comments
 (0)