Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1449 commits
Select commit Hold shift + click to select a range
589ef16
refactor(app): split home view controllers (#38607)
Brendonovich Jul 24, 2026
5ce89dc
chore: generate
opencode-agent[bot] Jul 24, 2026
d07323e
feat(app): migrate discovery workflows (#38465)
Brendonovich Jul 24, 2026
2ea4bb7
chore: generate
opencode-agent[bot] Jul 24, 2026
a48912c
fix(app): restore directory-scoped session status for v1 servers (#38…
Brendonovich Jul 24, 2026
55f4a26
fix(app): preserve paginated timeline order (#38641)
Brendonovich Jul 24, 2026
3819848
feat(app): support current review data (#38460)
Brendonovich Jul 24, 2026
bce2992
chore: generate
opencode-agent[bot] Jul 24, 2026
ce7f54d
fix(app): make prompt input agent toggle reactive (#38653)
Brendonovich Jul 24, 2026
57ddfeb
fix(app): classify existing web profiles for layout transition (#38117)
dleopold Jul 24, 2026
c4545ab
chore: generate
opencode-agent[bot] Jul 24, 2026
91ed256
refactor(app): resolve server protocol state (#38648)
Brendonovich Jul 24, 2026
80a4fe8
fix(app): remove diff rendering from file-specific tabs (#38662)
Brendonovich Jul 24, 2026
3337495
chore: generate
opencode-agent[bot] Jul 24, 2026
aaa42fe
fix(app): isolate v2 servers from legacy layout (#38649)
Brendonovich Jul 24, 2026
67a0478
fix(app): gate config permission auto-accept (#38650)
Brendonovich Jul 24, 2026
ad78ef5
feat(app): support current pty transport (#38463)
Brendonovich Jul 24, 2026
ae4be98
chore: generate
opencode-agent[bot] Jul 24, 2026
b628066
fix(app): preserve inline file mentions (#38663)
Brendonovich Jul 24, 2026
9ba82a1
fix(app): gate legacy server features (#38651)
Brendonovich Jul 24, 2026
66495a2
chore: generate
opencode-agent[bot] Jul 24, 2026
909db63
fix(app): restore optimistic timeline state (#38693)
Brendonovich Jul 24, 2026
e639969
fix(opencode): preserve grep symlink paths (#38581)
remixz Jul 24, 2026
f516651
fix(opencode): preserve grep symlink paths (#38581)
remixz Jul 24, 2026
e62b09e
zen: opus 5
fwang Jul 24, 2026
553b42f
Merge branch 'dev' of github.com:anomalyco/opencode into dev
fwang Jul 24, 2026
4b19ea2
fix(llm): preserve response message phases (#38452)
rekram1-node Jul 24, 2026
53669ca
chore: generate
opencode-agent[bot] Jul 24, 2026
7840562
fix(llm): revert response message phases (#38761)
rekram1-node Jul 24, 2026
2b2aacc
fix(provider): generalize Claude adaptive thinking (#38757)
rekram1-node Jul 24, 2026
a85d8d2
sync release versions for v1.18.5
Jul 24, 2026
065dc27
fix(core): branch-keyed repository cache with gated reference readine…
kitlangton Jul 25, 2026
5e2a625
chore: generate
opencode-agent[bot] Jul 25, 2026
9e8b217
fix(app): refresh V1 providers after auth (#38786)
opencode-agent[bot] Jul 25, 2026
2b2b69d
fix(app): refresh V1 MCP state (#38816)
Brendonovich Jul 25, 2026
0a6637e
chore(app): vendor v2 client snapshot (#38818)
Brendonovich Jul 25, 2026
7534d23
chore: update nix node_modules hashes
opencode-agent[bot] Jul 25, 2026
7d8195e
fix(ui): keep mutable selects open (#39027)
ProdigyRahul Jul 27, 2026
1ad63cf
sync release versions for v1.18.6
Jul 27, 2026
759f6af
fix(app): add scroll to project selector dropdown (#39016)
david1gp Jul 27, 2026
7ffc22c
chore: generate
opencode-agent[bot] Jul 27, 2026
9ca2b44
Connect provider e2e test (#39039)
Brendonovich Jul 27, 2026
de78da8
chore: generate
opencode-agent[bot] Jul 27, 2026
09afffe
fix(app): preserve shadowed command owners (#39044)
Brendonovich Jul 27, 2026
a9afed0
fix(desktop): remove titlebar inset in fullscreen (#38793)
Hona Jul 27, 2026
35075bb
fix(desktop): install Electron before development (#39052)
Hona Jul 27, 2026
bc2d3df
sync release versions for v1.18.7
Jul 27, 2026
b06768a
feat(app): add project selector shortcut (#39074)
Brendonovich Jul 27, 2026
4469cec
refactor(app): move prompt effects into controller (#39073)
Brendonovich Jul 27, 2026
0b4edfc
chore: generate
opencode-agent[bot] Jul 27, 2026
e1c4194
refactor(app): extract tab rename adapter (#39079)
Brendonovich Jul 27, 2026
4f62295
fix(app): contain right panel suspense (#39080)
Brendonovich Jul 27, 2026
d10524f
merge: upstream/dev sync to 2026-07-27 (167 commits, upstream v1.18.7)
lacymorrow Jul 27, 2026
a3ff777
fix(deps): restore pre-merge lockfile resolutions floated by conflict…
lacymorrow Jul 27, 2026
60669d4
docs: add 2026-07-27 sync entry to UPSTREAM_SYNC.md history
lacymorrow Jul 27, 2026
55b0211
feat(desktop): use bg layer 4 for v2 switch (#39085)
usrnk1 Jul 27, 2026
78f5764
fix(console): stabilize brand download icons in Safari (#39151)
opencode-agent[bot] Jul 27, 2026
a9bebd3
docs(zen): add Kimi K3 (#39152)
MrMushrooooom Jul 27, 2026
8e8d38c
fix(app): prevent freeze when closing projects (#39158)
Brendonovich Jul 27, 2026
8dc539b
fix(core): correct MCP environment field in built-in skill (#39175)
OpeOginni Jul 27, 2026
40e4d73
fix(console): avoid Safari brand icon repaint (#39154)
opencode-agent[bot] Jul 27, 2026
7ae1be5
fix(desktop): use channel database in local runs (#39209)
Hona Jul 28, 2026
1274408
fix(desktop): install AppStream metainfo in Linux packages (#36872)
develop7 Jul 28, 2026
91508f6
chore: generate
opencode-agent[bot] Jul 28, 2026
c39ad38
fix(app): refresh global provider state (#39220)
Brendonovich Jul 28, 2026
970c382
chore: generate
opencode-agent[bot] Jul 28, 2026
284e970
fix(app): use blue for server status attention (#39217)
Brendonovich Jul 28, 2026
029f5aa
chore: bump gitlab-ai-provider to 6.12.0 (#39096)
vglafirov Jul 28, 2026
b72d7b6
refactor(app): separate model selector controller and view (#39084)
Brendonovich Jul 28, 2026
3cc7016
chore: generate
opencode-agent[bot] Jul 28, 2026
3f9dad3
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
237e694
fix(app): expand Windows file tree folders (#39249)
opencode-agent[bot] Jul 28, 2026
87db7a7
fix(app): follow visual tab order (#39241)
Brendonovich Jul 28, 2026
9c8060d
refactor(app): extract keybind settings controller (#39226)
Brendonovich Jul 28, 2026
921b1c6
feat(mcp): upgrade client SDK to v2 (#39247)
rekram1-node Jul 28, 2026
d50b9e8
chore: generate
opencode-agent[bot] Jul 28, 2026
5e39051
fix(provider): omit deprecated Gemini sampling defaults (#38924)
opencode-agent[bot] Jul 28, 2026
172d08c
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
c3be6c4
fix(mcp): honor callback port in debug (#39259)
rekram1-node Jul 28, 2026
484f00e
fix(mcp): recover expired SDK sessions (#39265)
rekram1-node Jul 28, 2026
c8487ba
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
8021dbd
sync release versions for v1.18.8
Jul 28, 2026
d46be56
refactor(app): thin new session composition (#39227)
Brendonovich Jul 28, 2026
7dae9a1
chore: generate
opencode-agent[bot] Jul 28, 2026
95636bd
feat(desktop): collapse model provider sections (#39283)
usrnk1 Jul 28, 2026
8c81f9a
refactor(app): extract v2 settings controllers (#39228)
Brendonovich Jul 28, 2026
1ead8d8
fix(app): localize home session suspense (#39285)
Brendonovich Jul 28, 2026
9e432a6
feat(desktop): add opt-in v2 sidecar (#39286)
Brendonovich Jul 28, 2026
7c89824
fix(desktop): patch @dnd-kit/solid to preserve core scroll plugins (#…
roborew Jul 28, 2026
be93cec
fix(app): guard reentrant Solid cleanup (#39261)
opencode-agent[bot] Jul 28, 2026
e158758
chore: generate
opencode-agent[bot] Jul 28, 2026
7336cc5
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
017a597
feat(desktop): remove v2 vertical menu borders (#39317)
usrnk1 Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
982a904
fix(mcp): restore legacy SDK compatibility (#39373)
rekram1-node Jul 28, 2026
d8a9d8a
chore: generate
opencode-agent[bot] Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
f256a4c
fix(app): preserve agent picker for existing users (#39300)
Brendonovich Jul 29, 2026
8cbea4f
chore: generate
opencode-agent[bot] Jul 29, 2026
e8b0992
fix(app): defer model variant selector (#39445)
Brendonovich Jul 29, 2026
035a5a1
feat(desktop): refine tab states (#39472)
usrnk1 Jul 29, 2026
7565e03
chore: generate
opencode-agent[bot] Jul 29, 2026
02f50a6
chore: bump gitlab-ai-provider to 6.12.1 (#39490)
vglafirov Jul 29, 2026
a6f7fe7
docs(ecosystem): add opencode-tavily plugin (#38709)
lakshyaag-tavily Jul 29, 2026
1e17856
chore: update nix node_modules hashes
opencode-agent[bot] Jul 29, 2026
341c64c
feat: discover Modal models (#39066)
devennavani Jul 30, 2026
f720490
fix(console): add public fetch compatibility flag
fwang Jul 30, 2026
73009f0
feat(app): update arrow buttons in review tab top bar (#39469)
arvsrn Jul 30, 2026
a9eda2e
feat(app): migrate to solid-sonner (#39519)
arvsrn Jul 30, 2026
5b11635
feat(app): always show new session button (#39520)
arvsrn Jul 30, 2026
eca5e68
feat(app): disallow duplicate attachments (#39464)
arvsrn Jul 30, 2026
005bf08
feat(app): fix file tree button bg (#38629)
arvsrn Jul 30, 2026
a277557
chore: generate
opencode-agent[bot] Jul 30, 2026
3dbce3d
feat(app): adds fades to file tree (#38549)
arvsrn Jul 30, 2026
c5cf416
feat(app): fix composer attachment fades (#38547)
arvsrn Jul 30, 2026
c08350b
chore: update nix node_modules hashes
opencode-agent[bot] Jul 30, 2026
ac53806
fix(app): repair malformed persisted tabs (#39645)
OpeOginni Jul 30, 2026
ff0382e
chore: generate
opencode-agent[bot] Jul 30, 2026
a4f25a9
fix: use OpenCode model catalog URL (#39672)
opencode-agent[bot] Jul 30, 2026
8c38d26
sync release versions for v1.18.10
Jul 30, 2026
a1ab489
fix(provider): widen interleaved reasoning fields (#39556)
opencode-agent[bot] Jul 30, 2026
c1ee3c6
fix(opencode): stop MCP SSE error reconnect loops (#39697)
rekram1-node Jul 30, 2026
3f239b3
chore: update nix node_modules hashes
opencode-agent[bot] Jul 30, 2026
ceb4890
docs: add Modal provider setup (#39710)
devennavani Jul 30, 2026
e024e2e
fix(app): align debug gutter text (#39782)
Hona Jul 31, 2026
7ea343c
fix(app): prevent file tree tab clipping (#39770)
OpeOginni Jul 31, 2026
d3f30df
fix(app): open legacy picker at home (#39804)
opencode-agent[bot] Jul 31, 2026
db4dbaa
fix(app): prevent stale session tab reads (#39767)
OpeOginni Jul 31, 2026
da59457
feat(go): add GPT 5.6 Luna content (#39812)
MrMushrooooom Jul 31, 2026
2039c90
fix(desktop): open external links in system browser (#39820)
Hona Jul 31, 2026
d4ad650
chore: generate
opencode-agent[bot] Jul 31, 2026
ad82616
chore: update nix node_modules hashes
opencode-agent[bot] Jul 31, 2026
2df47ee
deepseek v4 flash
fwang Jul 31, 2026
14f0bf6
chore: generate
opencode-agent[bot] Jul 31, 2026
4087cf1
fix(go): restore limits graph axis (#39870)
MrMushrooooom Jul 31, 2026
e4bd975
chore: generate
opencode-agent[bot] Jul 31, 2026
d80e86b
go: document data policy per model
fwang Jul 31, 2026
d0a7ca6
go: document data policy per model
fwang Jul 31, 2026
19231fc
chore: generate
opencode-agent[bot] Jul 31, 2026
f67e80c
fix(app): prevent stale prompt control reads (#39842)
OpeOginni Aug 1, 2026
0eac096
sync release versions for v1.18.11
Aug 1, 2026
bb6bec9
zen: update doc
fwang Aug 1, 2026
32f278b
Merge branch 'dev' of github.com:anomalyco/opencode into dev
fwang Aug 1, 2026
0891ecd
docs(go): update DeepSeek privacy policy (#40120)
MrMushrooooom Aug 2, 2026
01624c8
chore: generate
opencode-agent[bot] Aug 2, 2026
1882c33
fix gemini reasoning tokens not counted
fwang Aug 2, 2026
d4b85f8
fix(app): skip legacy config reads for v2 (#40211)
resetsix Aug 3, 2026
c88facb
chore: generate
opencode-agent[bot] Aug 3, 2026
9f9fbf8
fix(app): clear stale timeline errors (#39465)
Brendonovich Aug 3, 2026
e9e7472
docs(go): add Qwen3.8 Max (#40228)
MrMushrooooom Aug 3, 2026
3016830
fix(app): search every known project in the open project dialog (#40202)
NumerousJLs Aug 3, 2026
ef7f712
fix slow queries
fwang Aug 3, 2026
28d0637
chore: generate
opencode-agent[bot] Aug 3, 2026
8de7a3c
fix slow queries
fwang Aug 3, 2026
3307f99
fix(ci): reuse imported macOS keychain (#40221)
opencode-agent[bot] Aug 3, 2026
6ff0ade
perf(app): fix composer lag via buffered blob draft storage (#40207)
Hona Aug 3, 2026
53fd029
fix slow queries
fwang Aug 3, 2026
9465a6c
Merge branch 'dev' of github.com:anomalyco/opencode into dev
fwang Aug 3, 2026
89130db
chore: update nix node_modules hashes
opencode-agent[bot] Aug 3, 2026
e917c12
docs: remove obsolete vouch system section (#40266)
MagnumGoYB Aug 3, 2026
9535a8f
fix(ui): update OpenRouter logo (#40313)
opencode-agent[bot] Aug 3, 2026
87481f2
fix: gpt-5.5+ in combination with azure fails with reasoningEffort (#…
frederiknsgo Aug 3, 2026
7becbbf
feat(app): refine diff viewer (#40285)
arvsrn Aug 3, 2026
b0b1149
test(opencode): cover Azure completion reasoning (#40340)
opencode-agent[bot] Aug 3, 2026
def14d9
Revert "fix slow queries"
fwang Aug 4, 2026
7fe9938
sync release versions for v1.18.12
Aug 4, 2026
7e94dda
fix(github): include pull request identity in context (#40363)
opencode-agent[bot] Aug 4, 2026
0efa33c
feat(desktop): expand and audit locale translations (#40362)
opencode-agent[bot] Aug 4, 2026
b005a15
chore: generate
opencode-agent[bot] Aug 4, 2026
638788f
fix(app): move markdown parsing to worker (#40356)
Hona Aug 4, 2026
26aefa6
chore: update nix node_modules hashes
opencode-agent[bot] Aug 4, 2026
0c380f3
feat(app): support locale plural rules (#40370)
opencode-agent[bot] Aug 4, 2026
60e23fe
chore: generate
opencode-agent[bot] Aug 4, 2026
6c32991
feat(app): add minimal RTL support (#40372)
opencode-agent[bot] Aug 4, 2026
e857350
feat(i18n): localize hardcoded application copy (#40377)
opencode-agent[bot] Aug 4, 2026
edc8d1d
chore: generate
opencode-agent[bot] Aug 4, 2026
c75e3b5
fix(app): supply fallback session titles (#40385)
Brendonovich Aug 4, 2026
8721a27
fix(app): complete shared RTL primitives (#40388)
opencode-agent[bot] Aug 4, 2026
c387fe1
feat(app): add debug layout direction toggle (#40393)
Hona Aug 4, 2026
6c97a46
fix(stats): hide zero-usage countries (#40400)
opencode-agent[bot] Aug 4, 2026
de1bd36
fix(app): correct RTL layout interactions (#40410)
Hona Aug 4, 2026
dc67b7a
docs: add Poolside provider setup (#39187)
amyduquette Aug 4, 2026
44614c7
fix(acp): drain updates before end turn (#40422)
nexxeln Aug 4, 2026
aefaf14
sync release versions for v1.18.13
Aug 4, 2026
703d09f
fix(server): don't forward host directory to remote workspace (#40136)
jamesmurdza Aug 4, 2026
f0afb67
fix(server): log upstream 5xx bodies from proxied workspace requests …
jamesmurdza Aug 4, 2026
e4beff1
merge: upstream/dev sync to 2026-08-04 (upstream v1.18.13)
lacymorrow Aug 4, 2026
d37fdb1
docs: add 2026-08-04 sync entry to UPSTREAM_SYNC.md history
lacymorrow Aug 4, 2026
98dd65c
fix(app): collapse deletion-only edit parts (#40536)
opencode-agent[bot] Aug 5, 2026
66fdd51
docs: add RTL development skill (#40543)
Hona Aug 5, 2026
cb88db6
tweak(opencode): make xAI OAuth device-only to reduce confusion w/ he…
rekram1-node Aug 5, 2026
5b4fb1f
chore: generate
opencode-agent[bot] Aug 5, 2026
9f38562
fix(opencode): include cache writes in ACP usage (#40450)
opencode-agent[bot] Aug 5, 2026
82a5796
test(app): harden flaky e2e synchronization (#40556)
Hona Aug 5, 2026
b8ea3ea
chore: generate
opencode-agent[bot] Aug 5, 2026
2f17fc9
docs(zen): add LongCat free model (#40585)
MrMushrooooom Aug 5, 2026
4a57013
fix(app): show pending tool details (#40603)
opencode-agent[bot] Aug 5, 2026
f929f8f
refactor(opencode): simplify retry error matching (#40694)
rekram1-node Aug 5, 2026
61aefc0
fix(opencode): expand retryable error patterns (#40707)
rekram1-node Aug 5, 2026
057b5a9
chore: generate
opencode-agent[bot] Aug 5, 2026
b84c63d
fix(stats): reduce html payloads
adamdotdevin Aug 5, 2026
3355b78
chore: generate
opencode-agent[bot] Aug 5, 2026
709c195
fix(opencode): preserve compatible stream errors (#40718)
rekram1-node Aug 5, 2026
082fe93
chore: generate
opencode-agent[bot] Aug 5, 2026
b1f8cc0
chore: update nix node_modules hashes
opencode-agent[bot] Aug 5, 2026
146720e
fix(stats): improve page speed
adamdotdevin Aug 5, 2026
04513d9
chore: generate
opencode-agent[bot] Aug 5, 2026
ebf6fc0
sync release versions for v1.18.14
Aug 5, 2026
23bbc5c
fix(server): allow blob attachments in web UI (#40692)
rexdotsh Aug 5, 2026
24470e5
fix(desktop): embed version in server sidecar (#40764)
Hona Aug 5, 2026
f1adabc
feat(app): export session as json from ui (#40781)
Hona Aug 6, 2026
b8bd889
chore: generate
opencode-agent[bot] Aug 6, 2026
847771f
fix log processor
fwang Aug 6, 2026
f6c5afe
fix(desktop): disable packaged console logging (#40794)
opencode-agent[bot] Aug 6, 2026
def7220
fix(tui): support copying over ssh with `set-clipboard on` tmux confi…
ayubun Aug 6, 2026
b379d71
fix(stats): update github stars
adamdotdevin Aug 6, 2026
03bff65
fix(app): update homepage stats
adamdotdevin Aug 6, 2026
dc898ca
sync
fwang Aug 6, 2026
69f2cba
chore: generate
opencode-agent[bot] Aug 6, 2026
b7f9363
fix(opencode): serialize orphaned compaction history (#40800)
opencode-agent[bot] Aug 7, 2026
8d65dbd
fix(app): complete translation coverage (#40981)
opencode-agent[bot] Aug 7, 2026
31c5c4e
fix(app): keep locale names native (#40985)
opencode-agent[bot] Aug 7, 2026
d468201
fix(opencode): use file times for truncation cleanup (#40987)
opencode-agent[bot] Aug 7, 2026
a54a693
fix(opencode): use chronological message boundaries (#40991)
opencode-agent[bot] Aug 7, 2026
db581e4
fix(opencode): order legacy message loop by time (#40990)
opencode-agent[bot] Aug 7, 2026
20750c3
fix(web): order shared messages by creation time (#40995)
opencode-agent[bot] Aug 7, 2026
8bf5062
feat(tui): add cursor style configuration (#32295)
dangooddd Aug 7, 2026
28bcc0e
fix(app): sort sessions by persisted time (#41000)
opencode-agent[bot] Aug 7, 2026
23cc677
fix(tui): order messages by creation time (#40994)
opencode-agent[bot] Aug 7, 2026
9113255
fix(app): order stored messages by creation time (#41001)
opencode-agent[bot] Aug 7, 2026
5aa5cb3
fix(app): use chronological message boundaries (#41006)
opencode-agent[bot] Aug 7, 2026
4abddbb
feat(go): promote DeepSeek V4 Flash usage (#40988)
MrMushrooooom Aug 7, 2026
741244b
feat(app): add global locale coverage (#40992)
opencode-agent[bot] Aug 7, 2026
3255297
sync
fwang Aug 7, 2026
265472e
fix(ui): use tokens for button loading state (#40884)
arvsrn Aug 7, 2026
1ec6bdc
sync release versions for v1.18.15
Aug 7, 2026
b467518
fix(desktop): preserve macOS app on window close (#40974)
opencode-agent[bot] Aug 7, 2026
5347b5e
fix(app): register new home projects (#41018)
Brendonovich Aug 7, 2026
be25c90
docs(zen): replace Ling Flash with Tiny (#41027)
MrMushrooooom Aug 7, 2026
b05a0d1
fix(i18n): use 词元 instead of 令牌 for token in zh locale (#40977)
Speechlessmanbilibili Aug 7, 2026
284214c
feat(app): open project menu on right-click (#41013)
arvsrn Aug 7, 2026
2ea728f
fix(app): populate project picker from home (#41158)
Brendonovich Aug 8, 2026
fe82a1b
chore: generate
opencode-agent[bot] Aug 8, 2026
38e10eb
fix(opencode): ignore unknown config fields (#41312)
opencode-agent[bot] Aug 8, 2026
0bff28d
fix(stats): fall back after full sync failure (#41411)
opencode-agent[bot] Aug 9, 2026
d90532a
sync release versions for v1.18.16
Aug 10, 2026
941e71d
fix(app): use current default model (#38603)
Brendonovich Aug 10, 2026
c2c3910
merge: upstream/dev sync to 2026-08-10 (upstream v1.18.16)
lacymorrow Aug 10, 2026
ae82a72
docs: add 2026-08-10 sync entry to UPSTREAM_SYNC.md history
lacymorrow Aug 10, 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
  •  
  •  
  •  
6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All @@ -8,12 +9,15 @@ jlongster
kitlangton
kommander
lacymorrow
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
RhysSullivan
simonklee
thdxr
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ inputs:
runs:
using: "composite"
steps:
# node-gyp@latest (invoked via bunx for native install scripts) requires Node >=22;
# some runner images ship an older system Node on PATH
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "24"

- name: Get baseline download URL
id: bun-url
shell: bash
Expand Down
38 changes: 38 additions & 0 deletions .github/workflows/compliance-close.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,48 @@ jobs:

const now = Date.now();
const twoHours = 2 * 60 * 60 * 1000;
const orgMemberAssociations = new Set(['OWNER', 'MEMBER']);
const agentLogin = 'opencode-agent[bot]';
const { data: file } = await github.rest.repos.getContent({
owner: context.repo.owner,
repo: context.repo.repo,
path: '.github/TEAM_MEMBERS',
ref: 'dev',
});
const teamMembers = new Set(
Buffer.from(file.content, 'base64')
.toString()
.split('\n')
.map((line) => line.trim().toLowerCase())
.filter(Boolean)
);

function isExempt(item) {
const login = item.user?.login?.toLowerCase();
return (
login === agentLogin ||
orgMemberAssociations.has(item.author_association) ||
(login && teamMembers.has(login))
);
}

for (const item of items) {
const isPR = !!item.pull_request;
const kind = isPR ? 'PR' : 'issue';
const login = item.user?.login;

if (isExempt(item)) {
core.info(`Skipping ${kind} #${item.number}; author ${login || 'unknown'} is exempt`);
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: item.number,
name: 'needs:compliance',
});
} catch (e) {}
continue;
}

const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
Expand Down
46 changes: 45 additions & 1 deletion .github/workflows/duplicate-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,31 @@ jobs:
with:
fetch-depth: 1

- name: Check exempt issue author
id: author
run: |
LOGIN="${{ github.event.issue.user.login }}"
ASSOCIATION="${{ github.event.issue.author_association }}"

if [ "$LOGIN" = "opencode-agent[bot]" ] ||
[ "$ASSOCIATION" = "OWNER" ] ||
[ "$ASSOCIATION" = "MEMBER" ] ||
grep -qxiF "$LOGIN" .github/TEAM_MEMBERS; then
echo "skip=true" >> "$GITHUB_OUTPUT"
echo "Skipping issue automation for exempt author: $LOGIN ($ASSOCIATION)"
else
echo "skip=false" >> "$GITHUB_OUTPUT"
fi

- uses: ./.github/actions/setup-bun
if: steps.author.outputs.skip != 'true'

- name: Install opencode
if: steps.author.outputs.skip != 'true'
run: curl -fsSL https://opencode.ai/install | bash

- name: Check duplicates and compliance
if: steps.author.outputs.skip != 'true'
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -38,6 +57,7 @@ jobs:
opencode run -m opencode/claude-sonnet-4-6 "A new issue has been created:

Issue number: ${{ github.event.issue.number }}
Issue author association: ${{ github.event.issue.author_association }}

Lookup this issue with gh issue view ${{ github.event.issue.number }}.

Expand All @@ -49,6 +69,8 @@ jobs:

Check whether the issue follows our contributing guidelines and issue templates.

If the issue author association is OWNER or MEMBER, skip this compliance check. Do not add the needs:compliance label for organization-owned issues.

This project has three issue templates that every issue MUST use one of:

1. Bug Report - requires a Description field with real content
Expand Down Expand Up @@ -83,7 +105,7 @@ jobs:

Based on your findings, post a SINGLE comment on issue #${{ github.event.issue.number }}. Build the comment as follows:

If the issue is NOT compliant, start the comment with:
If the issue is NOT compliant and the author association is not OWNER or MEMBER, start the comment with:
<!-- issue-compliance -->
Then explain what needs to be fixed and that they have 2 hours to edit the issue before it is automatically closed. Also add the label needs:compliance to the issue using: gh issue edit ${{ github.event.issue.number }} --add-label needs:compliance

Expand Down Expand Up @@ -129,12 +151,31 @@ jobs:
with:
fetch-depth: 1

- name: Check exempt issue author
id: author
run: |
LOGIN="${{ github.event.issue.user.login }}"
ASSOCIATION="${{ github.event.issue.author_association }}"

if [ "$LOGIN" = "opencode-agent[bot]" ] ||
[ "$ASSOCIATION" = "OWNER" ] ||
[ "$ASSOCIATION" = "MEMBER" ] ||
grep -qxiF "$LOGIN" .github/TEAM_MEMBERS; then
echo "skip=true" >> "$GITHUB_OUTPUT"
echo "Skipping issue automation for exempt author: $LOGIN ($ASSOCIATION)"
else
echo "skip=false" >> "$GITHUB_OUTPUT"
fi

- uses: ./.github/actions/setup-bun
if: steps.author.outputs.skip != 'true'

- name: Install opencode
if: steps.author.outputs.skip != 'true'
run: curl -fsSL https://opencode.ai/install | bash

- name: Recheck compliance
if: steps.author.outputs.skip != 'true'
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -148,9 +189,12 @@ jobs:
}
run: |
opencode run -m opencode/claude-sonnet-4-6 "Issue #${{ github.event.issue.number }} was previously flagged as non-compliant and has been edited.
Issue author association: ${{ github.event.issue.author_association }}

Lookup this issue with gh issue view ${{ github.event.issue.number }}.

If the issue author association is OWNER or MEMBER, remove the needs:compliance label if present, delete the previous compliance comment if present, and do not post a new comment.

Re-check whether the issue now follows our contributing guidelines and issue templates.

This project has three issue templates that every issue MUST use one of:
Expand Down
8 changes: 2 additions & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,6 @@ jobs:

build-electron:
needs:
- build-cli
- version
if: github.repository == 'anomalyco/opencode'
continue-on-error: false
Expand Down Expand Up @@ -315,16 +314,14 @@ jobs:
env:
OPENCODE_VERSION: ${{ needs.version.outputs.version }}
OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
OPENCODE_CLI_ARTIFACT: ${{ (runner.os == 'Windows' && 'opencode-cli-windows') || 'opencode-cli' }}
RUST_TARGET: ${{ matrix.settings.target }}
GH_TOKEN: ${{ github.token }}
GITHUB_RUN_ID: ${{ github.run_id }}

- name: Build
run: bun run build
working-directory: packages/desktop
env:
NODE_OPTIONS: --max-old-space-size=4096
OPENCODE_VERSION: ${{ needs.version.outputs.version }}
OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand All @@ -342,8 +339,7 @@ jobs:
env:
OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
GH_TOKEN: ${{ steps.committer.outputs.token }}
CSC_LINK: ${{ secrets.APPLE_CERTIFICATE }}
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
CSC_KEYCHAIN: build.keychain
APPLE_API_KEY: ${{ runner.temp }}/apple-api-key.p8
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,32 @@ jobs:
with:
fetch-depth: 1

- name: Check exempt issue author
id: author
run: |
LOGIN="${{ github.event.issue.user.login }}"
ASSOCIATION="${{ github.event.issue.author_association }}"

if [ "$LOGIN" = "opencode-agent[bot]" ] ||
[ "$ASSOCIATION" = "OWNER" ] ||
[ "$ASSOCIATION" = "MEMBER" ] ||
grep -qxiF "$LOGIN" .github/TEAM_MEMBERS; then
echo "skip=true" >> "$GITHUB_OUTPUT"
echo "Skipping issue automation for exempt author: $LOGIN ($ASSOCIATION)"
else
echo "skip=false" >> "$GITHUB_OUTPUT"
fi

- name: Setup Bun
if: steps.author.outputs.skip != 'true'
uses: ./.github/actions/setup-bun

- name: Install opencode
if: steps.author.outputs.skip != 'true'
run: curl -fsSL https://opencode.ai/install | bash

- name: Triage issue
if: steps.author.outputs.skip != 'true'
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .opencode/command/translate.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: translate English to other languages
model: opencode/claude-opus-4-8
model: opencode/gpt-5.6-sol
---

run git diff and translate changed english doc and UI copy files to other international languages. Translate all languages in parallel to save time.
Expand Down
63 changes: 63 additions & 0 deletions .opencode/skills/rtl-aware-development/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
name: rtl-aware-development
description: OpenCode Desktop should be RTL-aware. Use when implementing or reviewing RTL/LTR behavior in the web app, desktop app, CSS, menus, scrolling, resizing, icons, mixed-direction text, or Electron title bars.
---

# RTL-Aware Development

Treat direction as independent from language. Test English in both directions as well as real RTL and mixed-script content.

## Guidelines

- Set `lang` and `dir` on the document, and propagate direction through component providers used by portaled menus and popovers. Do not change the selected locale merely to force RTL.
- Keep DOM and focus order semantic. Flexbox and Grid already follow `dir`; do not add `row-reverse`, CSS `order`, or reversed markup just to mirror a layout.
- Prefer logical CSS for semantic layout. Reserve physical coordinates for pointer positions, canvas geometry, native window controls, and other genuinely physical placement.

```css
/* Avoid */
padding-left: 12px;
right: 0;
border-right: 1px solid;
text-align: left;

/* Prefer */
padding-inline-start: 12px;
inset-inline-end: 0;
border-inline-end: 1px solid;
text-align: start;
```

- Isolate mixed-direction text. Use `dir="auto"` or `<bdi>` for unknown text; keep code, URLs, IDs, and filesystem paths LTR without forcing the surrounding component LTR.

```html
<span class="file-row"><bdi dir="auto">README.md</bdi></span> <bdi dir="ltr"><code>C:\src\app.ts</code></bdi>
```

- Mirror directional meaning, not every image. Back/forward, previous/next, disclosure, indentation, and directional progress may need mirroring. Do not mirror brands, clocks, media controls, charts, or text. Reverse physical gradients, `translateX`, SVG transforms, and animation deltas explicitly.
- Map interactions through direction. `clientX` remains physical; resizing a logical edge needs an RTL-aware delta. Logical previous/next keyboard controls may swap ArrowLeft/ArrowRight. Follow the relevant WAI-ARIA widget pattern.
- Do not assume LTR scrolling. RTL `scrollLeft` can start at `0` and become negative. Prefer `scrollIntoView({ inline: "nearest" })` or a tested direction-normalizing helper.
- For Electron title bars, prefer native caption controls and use `titleBarOverlay` plus `env(titlebar-area-*)` for the safe content rectangle. Keep Windows/macOS native-control avoidance and `trafficLightPosition` physical; keep app navigation inside that rectangle logical. Mark interactive titlebar children `app-region: no-drag`.
- Verify behavior, not screenshots alone. Check computed styles, pseudo-element geometry, hit zones, focus order, keyboard behavior, submenu direction, zoom/scaling, and both LTR and RTL scroll endpoints.

## Test Matrix

- English + LTR
- English + forced RTL
- A real RTL locale + RTL
- Mixed RTL/LTR content, long labels, numbers, code, and paths
- Keyboard, pointer resize, scrolling, menus/submenus, and Electron titlebar controls in both directions

## References

- [RTL Styling 101, Ahmad Shadeed](https://rtlstyling.com/posts/rtl-styling/)
- [CSS-Tricks: RTL Styling 101](https://css-tricks.com/rtl-styling-101/)
- [CSS-Tricks: CSS Logical Properties and Values](https://css-tricks.com/css-logical-properties-and-values/)
- [W3C: Structural markup and right-to-left text](https://www.w3.org/International/questions/qa-html-dir)
- [W3C: Inline bidirectional markup](https://www.w3.org/International/articles/inline-bidi-markup/)
- [MDN: CSS logical properties and values](https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Logical_properties_and_values)
- [MDN: `dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/dir)
- [MDN: `scrollLeft`](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft)
- [web.dev: Logical properties](https://web.dev/learn/css/logical-properties/)
- [Electron: Custom title bar](https://www.electronjs.org/docs/latest/tutorial/custom-title-bar)
- [WAI-ARIA: Window splitter pattern](https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/)
- [Kobalte: I18n Provider](https://kobalte.dev/docs/core/components/i18n-provider/)
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { tool } from "@opencode-ai/plugin"
const TEAM = {
tui: ["kommander", "simonklee"],
desktop_web: ["Hona", "Brendonovich"],
core: ["jlongster", "rekram1-node", "nexxeln", "kitlangton", "starptech"],
core: ["jlongster", "rekram1-node", "nexxeln", "kitlangton"],
inference: ["fwang", "MrMushrooooom", "starptech"],
windows: ["Hona"],
} as const
Expand Down
27 changes: 0 additions & 27 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -252,33 +252,6 @@ These are not strictly enforced, they are just general guidelines:

For net-new functionality, start with a design conversation. Open an issue describing the problem, your proposed approach (optional), and why it belongs in OpenCode. The core team will help decide whether it should move forward; please wait for that approval instead of opening a feature PR directly.

## Trust & Vouch System

This project uses [vouch](https://github.com/mitchellh/vouch) to manage contributor trust. The vouch list is maintained in [`.github/VOUCHED.td`](.github/VOUCHED.td).

### How it works

- **Vouched users** are explicitly trusted contributors.
- **Denounced users** are explicitly blocked. Issues and pull requests from denounced users are automatically closed. If you have been denounced, you can request to be unvouched by reaching out to a maintainer on [Discord](https://opencode.ai/discord)
- **Everyone else** can participate normally — you don't need to be vouched to open issues or PRs.

### For maintainers

Collaborators with write access can manage the vouch list by commenting on any issue:

- `vouch` — vouch for the issue author
- `vouch @username` — vouch for a specific user
- `denounce` — denounce the issue author
- `denounce @username` — denounce a specific user
- `denounce @username <reason>` — denounce with a reason
- `unvouch` / `unvouch @username` — remove someone from the list

Changes are committed automatically to `.github/VOUCHED.td`.

### Denouncement policy

Denouncement is reserved for users who repeatedly submit low-quality AI-generated contributions, spam, or otherwise act in bad faith. It is not used for disagreements or honest mistakes.

## Issue Requirements

All issues **must** use one of our issue templates:
Expand Down
2 changes: 1 addition & 1 deletion README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,4 @@ OpenCode 内置两种 Agent,可用 `Tab` 键快速切换:

---

**加入我们的社区** [飞书](https://applink.feishu.cn/client/chat/chatter/add_by_link?link_token=738j8655-cd59-4633-a30a-1124e0096789&qr_code=true) | [X.com](https://x.com/opencode)
**加入我们的社区** [飞书](https://applink.feishu.cn/client/chat/chatter/add_by_link?link_token=52ao9352-5623-4fa0-b7dd-3407c392c1af&qr_code=true) | [X.com](https://x.com/opencode)
2 changes: 1 addition & 1 deletion README.zht.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,4 @@ OpenCode 內建了兩種 Agent,您可以使用 `Tab` 鍵快速切換。

---

**加入我們的社群** [飞书](https://applink.feishu.cn/client/chat/chatter/add_by_link?link_token=738j8655-cd59-4633-a30a-1124e0096789&qr_code=true) | [X.com](https://x.com/opencode)
**加入我們的社群** [飞书](https://applink.feishu.cn/client/chat/chatter/add_by_link?link_token=52ao9352-5623-4fa0-b7dd-3407c392c1af&qr_code=true) | [X.com](https://x.com/opencode)
Loading
Loading