Skip to content

Commit e91c1aa

Browse files
Merge branch 'dev' into fix/desktop-open-link-protocol-validation
* upstream/dev: (454 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 3ed7c10 + 219ba24 commit e91c1aa

1,407 files changed

Lines changed: 95311 additions & 88124 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/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/publish.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ jobs:
325325
run: bun run build
326326
working-directory: packages/desktop
327327
env:
328+
NODE_OPTIONS: --max-old-space-size=4096
328329
OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
329330
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
330331
SENTRY_ORG: ${{ vars.SENTRY_ORG }}

.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: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,15 @@ jobs:
6565
6666
- name: Run unit tests
6767
timeout-minutes: 20
68-
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
68+
run: GITHUB_ACTIONS=false bun turbo test
6969
env:
7070
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}
7171

72+
- name: Check generated client
73+
if: runner.os == 'Linux'
74+
working-directory: packages/client
75+
run: bun run check:generated
76+
7277
- name: Run HttpApi exerciser gates
7378
if: runner.os == 'Linux'
7479
working-directory: packages/opencode
@@ -99,7 +104,8 @@ jobs:
99104
- name: Setup Node
100105
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
101106
with:
102-
node-version: "24"
107+
# Playwright 1.59 hangs while extracting Chromium with Node 24.16.
108+
node-version: "24.15"
103109

104110
- name: Setup Bun
105111
uses: ./.github/actions/setup-bun

.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: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
"$schema": "https://opencode.ai/config.json",
33
"provider": {},
44
"permission": {},
5-
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
6-
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
7-
"reference": {
5+
"references": {
86
"effect": {
97
"repository": "github.com/Effect-TS/effect-smol",
108
"description": "Use for Effect v4 and effect-smol implementation details",

.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/

AGENTS.md

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1-
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
1+
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
2+
- After changing the public Protocol or Server `HttpApi`, run `bun run generate` from `packages/client`. Do not edit `src/generated` or `src/generated-effect` directly.
3+
- Keep runtime dependencies directed from Schema to Core and Protocol, then from Core and Protocol to Server. Client runtime code may depend on Schema and Protocol but never Core or Server; `sdk-next` composes Client, Core, and Server.
24
- The default branch in this repo is `dev`.
35
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.
46

7+
## Branch Names
8+
9+
Use a short branch name of at most three words, separated by hyphens. Do not use slashes or type prefixes such as `feat/` or `fix/`.
10+
11+
Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.
12+
513
## Commits and PR Titles
614

715
Use conventional commit-style messages and PR titles: `type(scope): summary`.
@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
2230
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
2331
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
2432
- In `src/config`, follow the existing self-export pattern at the top of the file (for example `export * as ConfigAgent from "./agent"`) when adding a new config module.
33+
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.
2534

2635
Reduce total variable count by inlining when a value is only used once.
2736

@@ -131,7 +140,7 @@ const table = sqliteTable("session", {
131140

132141
## Testing
133142

134-
- Avoid mocks as much as possible
143+
- Avoid mocks as much as possible, you shouldn't be using globalThis.\* at all unless it's the only option.
135144
- Test actual implementation, do not duplicate logic into tests
136145
- Tests cannot run from repo root (guard: `do-not-run-tests-from-root`); run from package dirs like `packages/opencode`.
137146

@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
146155
- Keep `SessionExecution` process-global and Session-ID based. Its local implementation owns the process-local Session coordinator and discovers placement through `SessionStore` plus `LocationServiceMap.get(session.location)` only when a drain starts; no layer should take a Session ID. V2 interruption targets the active process-local ownership chain for that Session; idle or missing interruption is a no-op.
147156
- Keep `SessionRunner`, model resolution, tool registry, permissions, and filesystem Location-scoped. Omitted `Location.workspaceID` means implicit-local placement; explicit workspace identity remains reserved for future placement semantics.
148157
- Preserve one explicit `llm.stream(request)` call per provider turn and reload projected history before durable continuation. Do not bridge through legacy `SessionPrompt.loop(...)` or delegate orchestration to an in-memory tool loop.
149-
- Keep local Session drains process-local until clustering is implemented. `SessionRunCoordinator` joins explicit same-Session resumes, coalesces prompt wakeups, and allows different Sessions to run concurrently. Advisory wakes drain eligible durable inbox rows only; post-crash activity recovery requires a separate explicit design before it may retry provider work.
150-
- Keep delivery vocabulary explicit. Prompts steer by default and coalesce into the active activity at the next safe provider-turn boundary. Explicit `queue` inputs open FIFO future activities one at a time after the active activity settles.
158+
- Keep local Session drains process-local until clustering is implemented. `SessionRunCoordinator` joins explicit same-Session resumes, coalesces prompt wakeups, and allows different Sessions to run concurrently. Advisory wakes drain eligible durable inbox rows only; post-crash continuation recovery requires a separate explicit design before it may retry provider work. A drain has no durable identity or transcript boundary.
159+
- Keep delivery vocabulary explicit. Prompts steer by default and promote at the next safe provider-turn boundary while the current drain requires continuation. An explicit `queue` input remains pending until the Session would otherwise become idle; promote one queued input at that boundary, then reevaluate continuation before promoting another. Promoting any new user input resets the selected agent's provider-turn allowance; a batch of steers resets it once.
151160
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
152161
- Keep the System Context algebra, registry, and built-ins in `src/system-context`; keep Context Source producers with their observed domains, and keep Session History selection plus Context Epoch persistence Session-owned.

0 commit comments

Comments
 (0)