Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
47fc6f2
fix(app): preserve mentions during paste (#37940)
opencode-agent[bot] Jul 20, 2026
4872c48
fix(app): complete mentions at cursor (#37941)
opencode-agent[bot] Jul 20, 2026
96ff82a
fix(console): remove desktop promo overlay
opencode-agent[bot] Jul 20, 2026
d36a2d8
sync release versions for v1.18.4
Jul 20, 2026
4cc0224
fix(opencode): display proper session import errors (#36258)
OpeOginni Jul 20, 2026
5a8ee27
fix(provider): update muse-spark reasoning default and system prompt …
mreso Jul 20, 2026
3033afb
fix(provider): normalize Mistral family tool call IDs (#37982)
rekram1-node Jul 20, 2026
849c259
docs: generalize session title model description (#37986)
rekram1-node Jul 20, 2026
2d2339d
feat(app): draggable project rows (#38055)
arvsrn Jul 21, 2026
cb562b2
chore: generate
opencode-agent[bot] Jul 21, 2026
abc4b83
Zen: gemini 3.6 flash and 3.5 flash lite
fwang Jul 21, 2026
21c4c93
fix(ui): improve progress circle contrast (#38101)
dbpolito Jul 21, 2026
b513faf
fix(app): support nested slash command autocomplete (#38097)
dbpolito Jul 21, 2026
5f241f1
chore: generate
opencode-agent[bot] Jul 21, 2026
0317531
zen: add laguna-2-2.1
fwang Jul 21, 2026
c40e3e7
zen: add security check
fwang Jul 21, 2026
76ced54
chore: generate
opencode-agent[bot] Jul 21, 2026
4438f69
zen: add security check
fwang Jul 21, 2026
130038e
fix(app): defer unavailable notification state (#38186)
opencode-agent[bot] Jul 22, 2026
c9db6e9
fix(app): show running shell command (#38080)
opencode-agent[bot] Jul 22, 2026
0a601cf
fix(docs): correct Kimi K2.7 Code request limits (#38248)
MrMushrooooom Jul 22, 2026
50eee1f
fix(provider): correct MiniMax M3 thinking variants (#38330)
rekram1-node Jul 22, 2026
411eff7
feat(go): add Hy3 to Go model lineup (#38349)
MrMushrooooom Jul 22, 2026
542ba88
fix(provider): select prompt cache keys by SDK (#38424)
rekram1-node Jul 23, 2026
fada1a5
fix(provider): serialize Mistral prompt cache keys (#38448)
rekram1-node Jul 23, 2026
92cede0
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
e45210c
chore(app): vendor v2 promise client (#38467)
Brendonovich Jul 23, 2026
84c79c1
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
d03e0c5
feat(app): add dual-server compatibility (#38462)
Brendonovich Jul 23, 2026
347510a
chore: generate
opencode-agent[bot] Jul 23, 2026
e59ba24
feat(app): support current event transport (#38464)
Brendonovich Jul 23, 2026
62e4641
chore: generate
opencode-agent[bot] Jul 23, 2026
20589d6
fix(provider): preserve Mistral reasoning history (#38453)
rekram1-node Jul 23, 2026
743f641
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
204f48d
docs(zen): add Ling 3.0 Flash free model (#38503)
MrMushrooooom Jul 24, 2026
37c263e
feat(app): project current server state (#38459)
Brendonovich Jul 24, 2026
adba484
chore: generate
opencode-agent[bot] Jul 24, 2026
db88c42
fix(app): hydrate v1 session progress (#38606)
Brendonovich Jul 24, 2026
ce9a875
feat(app): render current session timeline (#38466)
Brendonovich Jul 24, 2026
090a26a
chore: generate
opencode-agent[bot] Jul 24, 2026
29af2e3
feat(app): migrate session interactions (#38461)
Brendonovich Jul 24, 2026
386afb7
chore: generate
opencode-agent[bot] Jul 24, 2026
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
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
d39df3d
feat(amicode): approval state machine + ledger transport (S3, partial)
aarontrowbridge Jul 27, 2026
78ee045
fix(amicode): superseded receipts render captured diff, not the live …
aarontrowbridge Jul 27, 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
271edc3
feat(amicode): the in-chat approval card, end to end
aarontrowbridge Jul 28, 2026
42a1098
fix(amicode): a receipt is informative or inert, never a dead link
aarontrowbridge Jul 28, 2026
37aaac0
feat(amicode): warrant status on the rail (S4)
aarontrowbridge 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
f086433
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
358d2ae
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
4691a0b
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
7a7bcff
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
3b7b3b4
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge 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
fdab7d9
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
158f522
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2270998
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
f2090dd
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
5176a69
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
b6981f6
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
17c6755
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
899c0cb
feat(amicode): lift skill activations out of the conversation into an…
aarontrowbridge Jul 28, 2026
06a811c
Revert "feat(amicode): lift skill activations out of the conversation…
aarontrowbridge Jul 28, 2026
8e11411
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0793fd6
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
5db2191
test(amicode): pure span detection for the transcript rail
aarontrowbridge Jul 28, 2026
51716cd
feat(amicode): draw Amico's transcript spine over the turn span
aarontrowbridge Jul 28, 2026
21647f5
fix(amicode): bump the spine to 45% — 30% at 1px was near-invisible
aarontrowbridge Jul 28, 2026
cff7b55
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
bf5dfa4
revert: abandon the Amico transcript spine
aarontrowbridge Jul 28, 2026
fbd13e3
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
79b5ee4
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
4e64894
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
e4e0133
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
7332fc0
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 2026
2b80981
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 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
cb4a891
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
60f7c92
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
e3b62cd
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
0b58499
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
38690c5
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge Jul 28, 2026
d7899ac
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
7d3573f
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2585413
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
ca2437c
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
b6d150c
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
68aca7b
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
7d45579
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
f4fd3e7
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0421013
feat(amicode): add Quantizing and Obsidianing to the thinking-word ro…
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
f47828a
fix(amicode): route external link clicks over open-external postMessa…
aarontrowbridge 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
042634f
merge: sync sst/opencode dev @ 1.18.10 (19231fce4b) into local/amicode
aarontrowbridge Aug 1, 2026
fb6587f
merge follow-up: i18n parity fills, silent-turn guard refinement, ups…
aarontrowbridge Aug 1, 2026
86bd804
docs: log the 1.18.10 upstream sync in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
9ffe8f4
recovery: re-mount the amicode session surfaces into upstream's timel…
aarontrowbridge Aug 1, 2026
7ec8517
Merge remote-tracking branch 'origin/ann/thinking-words-updated' into…
aarontrowbridge Aug 1, 2026
0a03b56
Merge branch 'feat/amicode-system-card-model' into amicode/merge-upst…
aarontrowbridge Aug 1, 2026
91a4c8f
Merge branch 'fix/amicode-receipt-currency' into amicode/merge-upstre…
aarontrowbridge Aug 1, 2026
b61d294
merge: pr/amico-working-indicator + ann/thinking-words + system-card-…
aarontrowbridge Aug 1, 2026
8856b4e
merge: kate/context-tree-vault-zoom — route framed external links ove…
aarontrowbridge Aug 1, 2026
46e5342
merge: feat/warrant-receipts-captured — capability warrants + approva…
aarontrowbridge Aug 1, 2026
36d2759
merge: feat/harmonic-wave-indicator — recorded-Hamiltonian rendering,…
aarontrowbridge Aug 1, 2026
72057c9
docs: log the feature-branch recovery in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
b532642
fix: typecheck — use lastAssistant.error (typed) instead of the union…
aarontrowbridge Aug 1, 2026
bcefef8
fix(css): close the beta-tag dark-scheme rule (brace eaten by the war…
aarontrowbridge Aug 1, 2026
b1a0626
fix: mount the thinking line on the Thinking row — the wave's live mo…
aarontrowbridge Aug 1, 2026
2c878f5
fix: wire the clipboard bridge into the v2 composer (paste in the web…
aarontrowbridge Aug 1, 2026
ebfc529
feat: restore the brand hero on the new-session view — H-robot mark o…
aarontrowbridge Aug 1, 2026
f044bda
feat: chips move under the composer, ranked from problem history
aarontrowbridge Aug 1, 2026
9b1e078
docs: ADR 0001 — one home per chrome surface + chrome glossary terms
aarontrowbridge Aug 1, 2026
7dc4a8e
feat(amicode): workbench split panes — split/workbench contexts, pane…
aarontrowbridge Aug 1, 2026
e7cf0cc
merge: workbench split panes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
60d0242
fix(amicode): webview bridge fixes — ui clipboard util, connection ba…
aarontrowbridge Aug 1, 2026
437c377
merge: webview bridge fixes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
e4ceaae
fix(i18n): connectionLost/reconnected fallbacks in the 16 missing loc…
aarontrowbridge Aug 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All@@ -7,11 +8,14 @@ jayair
jlongster
kitlangton
kommander
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
thdxr
simonklee
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -316,15 +315,13 @@ 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_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All@@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,10 +79,15 @@ jobs:

- name: Run unit tests
timeout-minutes: 45
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Check generated client
if: runner.os == 'Linux'
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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
4 changes: 1 addition & 3 deletions .opencode/opencode.jsonc
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
"reference": {
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line numberDiff line numberDiff 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
2 changes: 2 additions & 0 deletions .prettierignore
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- 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.
- 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.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

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

Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- 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.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

Expand DownExpand Up@@ -131,7 +140,7 @@ const table = sqliteTable("session", {

## Testing

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

Expand All@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- 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.
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
47fc6f2
fix(app): preserve mentions during paste (#37940)
opencode-agent[bot] Jul 20, 2026
4872c48
fix(app): complete mentions at cursor (#37941)
opencode-agent[bot] Jul 20, 2026
96ff82a
fix(console): remove desktop promo overlay
opencode-agent[bot] Jul 20, 2026
d36a2d8
sync release versions for v1.18.4
Jul 20, 2026
4cc0224
fix(opencode): display proper session import errors (#36258)
OpeOginni Jul 20, 2026
5a8ee27
fix(provider): update muse-spark reasoning default and system prompt …
mreso Jul 20, 2026
3033afb
fix(provider): normalize Mistral family tool call IDs (#37982)
rekram1-node Jul 20, 2026
849c259
docs: generalize session title model description (#37986)
rekram1-node Jul 20, 2026
2d2339d
feat(app): draggable project rows (#38055)
arvsrn Jul 21, 2026
cb562b2
chore: generate
opencode-agent[bot] Jul 21, 2026
abc4b83
Zen: gemini 3.6 flash and 3.5 flash lite
fwang Jul 21, 2026
21c4c93
fix(ui): improve progress circle contrast (#38101)
dbpolito Jul 21, 2026
b513faf
fix(app): support nested slash command autocomplete (#38097)
dbpolito Jul 21, 2026
5f241f1
chore: generate
opencode-agent[bot] Jul 21, 2026
0317531
zen: add laguna-2-2.1
fwang Jul 21, 2026
c40e3e7
zen: add security check
fwang Jul 21, 2026
76ced54
chore: generate
opencode-agent[bot] Jul 21, 2026
4438f69
zen: add security check
fwang Jul 21, 2026
130038e
fix(app): defer unavailable notification state (#38186)
opencode-agent[bot] Jul 22, 2026
c9db6e9
fix(app): show running shell command (#38080)
opencode-agent[bot] Jul 22, 2026
0a601cf
fix(docs): correct Kimi K2.7 Code request limits (#38248)
MrMushrooooom Jul 22, 2026
50eee1f
fix(provider): correct MiniMax M3 thinking variants (#38330)
rekram1-node Jul 22, 2026
411eff7
feat(go): add Hy3 to Go model lineup (#38349)
MrMushrooooom Jul 22, 2026
542ba88
fix(provider): select prompt cache keys by SDK (#38424)
rekram1-node Jul 23, 2026
fada1a5
fix(provider): serialize Mistral prompt cache keys (#38448)
rekram1-node Jul 23, 2026
92cede0
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
e45210c
chore(app): vendor v2 promise client (#38467)
Brendonovich Jul 23, 2026
84c79c1
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
d03e0c5
feat(app): add dual-server compatibility (#38462)
Brendonovich Jul 23, 2026
347510a
chore: generate
opencode-agent[bot] Jul 23, 2026
e59ba24
feat(app): support current event transport (#38464)
Brendonovich Jul 23, 2026
62e4641
chore: generate
opencode-agent[bot] Jul 23, 2026
20589d6
fix(provider): preserve Mistral reasoning history (#38453)
rekram1-node Jul 23, 2026
743f641
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
204f48d
docs(zen): add Ling 3.0 Flash free model (#38503)
MrMushrooooom Jul 24, 2026
37c263e
feat(app): project current server state (#38459)
Brendonovich Jul 24, 2026
adba484
chore: generate
opencode-agent[bot] Jul 24, 2026
db88c42
fix(app): hydrate v1 session progress (#38606)
Brendonovich Jul 24, 2026
ce9a875
feat(app): render current session timeline (#38466)
Brendonovich Jul 24, 2026
090a26a
chore: generate
opencode-agent[bot] Jul 24, 2026
29af2e3
feat(app): migrate session interactions (#38461)
Brendonovich Jul 24, 2026
386afb7
chore: generate
opencode-agent[bot] Jul 24, 2026
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
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
d39df3d
feat(amicode): approval state machine + ledger transport (S3, partial)
aarontrowbridge Jul 27, 2026
78ee045
fix(amicode): superseded receipts render captured diff, not the live …
aarontrowbridge Jul 27, 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
271edc3
feat(amicode): the in-chat approval card, end to end
aarontrowbridge Jul 28, 2026
42a1098
fix(amicode): a receipt is informative or inert, never a dead link
aarontrowbridge Jul 28, 2026
37aaac0
feat(amicode): warrant status on the rail (S4)
aarontrowbridge 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
f086433
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
358d2ae
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
4691a0b
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
7a7bcff
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
3b7b3b4
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge 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
fdab7d9
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
158f522
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2270998
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
f2090dd
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
5176a69
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
b6981f6
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
17c6755
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
899c0cb
feat(amicode): lift skill activations out of the conversation into an…
aarontrowbridge Jul 28, 2026
06a811c
Revert "feat(amicode): lift skill activations out of the conversation…
aarontrowbridge Jul 28, 2026
8e11411
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0793fd6
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
5db2191
test(amicode): pure span detection for the transcript rail
aarontrowbridge Jul 28, 2026
51716cd
feat(amicode): draw Amico's transcript spine over the turn span
aarontrowbridge Jul 28, 2026
21647f5
fix(amicode): bump the spine to 45% — 30% at 1px was near-invisible
aarontrowbridge Jul 28, 2026
cff7b55
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
bf5dfa4
revert: abandon the Amico transcript spine
aarontrowbridge Jul 28, 2026
fbd13e3
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
79b5ee4
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
4e64894
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
e4e0133
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
7332fc0
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 2026
2b80981
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 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
cb4a891
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
60f7c92
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
e3b62cd
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
0b58499
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
38690c5
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge Jul 28, 2026
d7899ac
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
7d3573f
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2585413
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
ca2437c
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
b6d150c
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
68aca7b
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
7d45579
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
f4fd3e7
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0421013
feat(amicode): add Quantizing and Obsidianing to the thinking-word ro…
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
f47828a
fix(amicode): route external link clicks over open-external postMessa…
aarontrowbridge 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
042634f
merge: sync sst/opencode dev @ 1.18.10 (19231fce4b) into local/amicode
aarontrowbridge Aug 1, 2026
fb6587f
merge follow-up: i18n parity fills, silent-turn guard refinement, ups…
aarontrowbridge Aug 1, 2026
86bd804
docs: log the 1.18.10 upstream sync in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
9ffe8f4
recovery: re-mount the amicode session surfaces into upstream's timel…
aarontrowbridge Aug 1, 2026
7ec8517
Merge remote-tracking branch 'origin/ann/thinking-words-updated' into…
aarontrowbridge Aug 1, 2026
0a03b56
Merge branch 'feat/amicode-system-card-model' into amicode/merge-upst…
aarontrowbridge Aug 1, 2026
91a4c8f
Merge branch 'fix/amicode-receipt-currency' into amicode/merge-upstre…
aarontrowbridge Aug 1, 2026
b61d294
merge: pr/amico-working-indicator + ann/thinking-words + system-card-…
aarontrowbridge Aug 1, 2026
8856b4e
merge: kate/context-tree-vault-zoom — route framed external links ove…
aarontrowbridge Aug 1, 2026
46e5342
merge: feat/warrant-receipts-captured — capability warrants + approva…
aarontrowbridge Aug 1, 2026
36d2759
merge: feat/harmonic-wave-indicator — recorded-Hamiltonian rendering,…
aarontrowbridge Aug 1, 2026
72057c9
docs: log the feature-branch recovery in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
b532642
fix: typecheck — use lastAssistant.error (typed) instead of the union…
aarontrowbridge Aug 1, 2026
bcefef8
fix(css): close the beta-tag dark-scheme rule (brace eaten by the war…
aarontrowbridge Aug 1, 2026
b1a0626
fix: mount the thinking line on the Thinking row — the wave's live mo…
aarontrowbridge Aug 1, 2026
2c878f5
fix: wire the clipboard bridge into the v2 composer (paste in the web…
aarontrowbridge Aug 1, 2026
ebfc529
feat: restore the brand hero on the new-session view — H-robot mark o…
aarontrowbridge Aug 1, 2026
f044bda
feat: chips move under the composer, ranked from problem history
aarontrowbridge Aug 1, 2026
9b1e078
docs: ADR 0001 — one home per chrome surface + chrome glossary terms
aarontrowbridge Aug 1, 2026
7dc4a8e
feat(amicode): workbench split panes — split/workbench contexts, pane…
aarontrowbridge Aug 1, 2026
e7cf0cc
merge: workbench split panes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
60d0242
fix(amicode): webview bridge fixes — ui clipboard util, connection ba…
aarontrowbridge Aug 1, 2026
437c377
merge: webview bridge fixes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
e4ceaae
fix(i18n): connectionLost/reconnected fallbacks in the 16 missing loc…
aarontrowbridge Aug 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All@@ -7,11 +8,14 @@ jayair
jlongster
kitlangton
kommander
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
thdxr
simonklee
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -316,15 +315,13 @@ 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_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All@@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,10 +79,15 @@ jobs:

- name: Run unit tests
timeout-minutes: 45
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Check generated client
if: runner.os == 'Linux'
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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
4 changes: 1 addition & 3 deletions .opencode/opencode.jsonc
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
"reference": {
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line numberDiff line numberDiff 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
2 changes: 2 additions & 0 deletions .prettierignore
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- 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.
- 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.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

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

Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- 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.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

Expand DownExpand Up@@ -131,7 +140,7 @@ const table = sqliteTable("session", {

## Testing

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

Expand All@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- 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.
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
47fc6f2
fix(app): preserve mentions during paste (#37940)
opencode-agent[bot] Jul 20, 2026
4872c48
fix(app): complete mentions at cursor (#37941)
opencode-agent[bot] Jul 20, 2026
96ff82a
fix(console): remove desktop promo overlay
opencode-agent[bot] Jul 20, 2026
d36a2d8
sync release versions for v1.18.4
Jul 20, 2026
4cc0224
fix(opencode): display proper session import errors (#36258)
OpeOginni Jul 20, 2026
5a8ee27
fix(provider): update muse-spark reasoning default and system prompt …
mreso Jul 20, 2026
3033afb
fix(provider): normalize Mistral family tool call IDs (#37982)
rekram1-node Jul 20, 2026
849c259
docs: generalize session title model description (#37986)
rekram1-node Jul 20, 2026
2d2339d
feat(app): draggable project rows (#38055)
arvsrn Jul 21, 2026
cb562b2
chore: generate
opencode-agent[bot] Jul 21, 2026
abc4b83
Zen: gemini 3.6 flash and 3.5 flash lite
fwang Jul 21, 2026
21c4c93
fix(ui): improve progress circle contrast (#38101)
dbpolito Jul 21, 2026
b513faf
fix(app): support nested slash command autocomplete (#38097)
dbpolito Jul 21, 2026
5f241f1
chore: generate
opencode-agent[bot] Jul 21, 2026
0317531
zen: add laguna-2-2.1
fwang Jul 21, 2026
c40e3e7
zen: add security check
fwang Jul 21, 2026
76ced54
chore: generate
opencode-agent[bot] Jul 21, 2026
4438f69
zen: add security check
fwang Jul 21, 2026
130038e
fix(app): defer unavailable notification state (#38186)
opencode-agent[bot] Jul 22, 2026
c9db6e9
fix(app): show running shell command (#38080)
opencode-agent[bot] Jul 22, 2026
0a601cf
fix(docs): correct Kimi K2.7 Code request limits (#38248)
MrMushrooooom Jul 22, 2026
50eee1f
fix(provider): correct MiniMax M3 thinking variants (#38330)
rekram1-node Jul 22, 2026
411eff7
feat(go): add Hy3 to Go model lineup (#38349)
MrMushrooooom Jul 22, 2026
542ba88
fix(provider): select prompt cache keys by SDK (#38424)
rekram1-node Jul 23, 2026
fada1a5
fix(provider): serialize Mistral prompt cache keys (#38448)
rekram1-node Jul 23, 2026
92cede0
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
e45210c
chore(app): vendor v2 promise client (#38467)
Brendonovich Jul 23, 2026
84c79c1
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
d03e0c5
feat(app): add dual-server compatibility (#38462)
Brendonovich Jul 23, 2026
347510a
chore: generate
opencode-agent[bot] Jul 23, 2026
e59ba24
feat(app): support current event transport (#38464)
Brendonovich Jul 23, 2026
62e4641
chore: generate
opencode-agent[bot] Jul 23, 2026
20589d6
fix(provider): preserve Mistral reasoning history (#38453)
rekram1-node Jul 23, 2026
743f641
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
204f48d
docs(zen): add Ling 3.0 Flash free model (#38503)
MrMushrooooom Jul 24, 2026
37c263e
feat(app): project current server state (#38459)
Brendonovich Jul 24, 2026
adba484
chore: generate
opencode-agent[bot] Jul 24, 2026
db88c42
fix(app): hydrate v1 session progress (#38606)
Brendonovich Jul 24, 2026
ce9a875
feat(app): render current session timeline (#38466)
Brendonovich Jul 24, 2026
090a26a
chore: generate
opencode-agent[bot] Jul 24, 2026
29af2e3
feat(app): migrate session interactions (#38461)
Brendonovich Jul 24, 2026
386afb7
chore: generate
opencode-agent[bot] Jul 24, 2026
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
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
d39df3d
feat(amicode): approval state machine + ledger transport (S3, partial)
aarontrowbridge Jul 27, 2026
78ee045
fix(amicode): superseded receipts render captured diff, not the live …
aarontrowbridge Jul 27, 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
271edc3
feat(amicode): the in-chat approval card, end to end
aarontrowbridge Jul 28, 2026
42a1098
fix(amicode): a receipt is informative or inert, never a dead link
aarontrowbridge Jul 28, 2026
37aaac0
feat(amicode): warrant status on the rail (S4)
aarontrowbridge 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
f086433
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
358d2ae
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
4691a0b
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
7a7bcff
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
3b7b3b4
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge 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
fdab7d9
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
158f522
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2270998
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
f2090dd
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
5176a69
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
b6981f6
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
17c6755
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
899c0cb
feat(amicode): lift skill activations out of the conversation into an…
aarontrowbridge Jul 28, 2026
06a811c
Revert "feat(amicode): lift skill activations out of the conversation…
aarontrowbridge Jul 28, 2026
8e11411
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0793fd6
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
5db2191
test(amicode): pure span detection for the transcript rail
aarontrowbridge Jul 28, 2026
51716cd
feat(amicode): draw Amico's transcript spine over the turn span
aarontrowbridge Jul 28, 2026
21647f5
fix(amicode): bump the spine to 45% — 30% at 1px was near-invisible
aarontrowbridge Jul 28, 2026
cff7b55
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
bf5dfa4
revert: abandon the Amico transcript spine
aarontrowbridge Jul 28, 2026
fbd13e3
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
79b5ee4
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
4e64894
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
e4e0133
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
7332fc0
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 2026
2b80981
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 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
cb4a891
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
60f7c92
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
e3b62cd
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
0b58499
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
38690c5
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge Jul 28, 2026
d7899ac
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
7d3573f
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2585413
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
ca2437c
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
b6d150c
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
68aca7b
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
7d45579
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
f4fd3e7
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0421013
feat(amicode): add Quantizing and Obsidianing to the thinking-word ro…
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
f47828a
fix(amicode): route external link clicks over open-external postMessa…
aarontrowbridge 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
042634f
merge: sync sst/opencode dev @ 1.18.10 (19231fce4b) into local/amicode
aarontrowbridge Aug 1, 2026
fb6587f
merge follow-up: i18n parity fills, silent-turn guard refinement, ups…
aarontrowbridge Aug 1, 2026
86bd804
docs: log the 1.18.10 upstream sync in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
9ffe8f4
recovery: re-mount the amicode session surfaces into upstream's timel…
aarontrowbridge Aug 1, 2026
7ec8517
Merge remote-tracking branch 'origin/ann/thinking-words-updated' into…
aarontrowbridge Aug 1, 2026
0a03b56
Merge branch 'feat/amicode-system-card-model' into amicode/merge-upst…
aarontrowbridge Aug 1, 2026
91a4c8f
Merge branch 'fix/amicode-receipt-currency' into amicode/merge-upstre…
aarontrowbridge Aug 1, 2026
b61d294
merge: pr/amico-working-indicator + ann/thinking-words + system-card-…
aarontrowbridge Aug 1, 2026
8856b4e
merge: kate/context-tree-vault-zoom — route framed external links ove…
aarontrowbridge Aug 1, 2026
46e5342
merge: feat/warrant-receipts-captured — capability warrants + approva…
aarontrowbridge Aug 1, 2026
36d2759
merge: feat/harmonic-wave-indicator — recorded-Hamiltonian rendering,…
aarontrowbridge Aug 1, 2026
72057c9
docs: log the feature-branch recovery in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
b532642
fix: typecheck — use lastAssistant.error (typed) instead of the union…
aarontrowbridge Aug 1, 2026
bcefef8
fix(css): close the beta-tag dark-scheme rule (brace eaten by the war…
aarontrowbridge Aug 1, 2026
b1a0626
fix: mount the thinking line on the Thinking row — the wave's live mo…
aarontrowbridge Aug 1, 2026
2c878f5
fix: wire the clipboard bridge into the v2 composer (paste in the web…
aarontrowbridge Aug 1, 2026
ebfc529
feat: restore the brand hero on the new-session view — H-robot mark o…
aarontrowbridge Aug 1, 2026
f044bda
feat: chips move under the composer, ranked from problem history
aarontrowbridge Aug 1, 2026
9b1e078
docs: ADR 0001 — one home per chrome surface + chrome glossary terms
aarontrowbridge Aug 1, 2026
7dc4a8e
feat(amicode): workbench split panes — split/workbench contexts, pane…
aarontrowbridge Aug 1, 2026
e7cf0cc
merge: workbench split panes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
60d0242
fix(amicode): webview bridge fixes — ui clipboard util, connection ba…
aarontrowbridge Aug 1, 2026
437c377
merge: webview bridge fixes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
e4ceaae
fix(i18n): connectionLost/reconnected fallbacks in the 16 missing loc…
aarontrowbridge Aug 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All@@ -7,11 +8,14 @@ jayair
jlongster
kitlangton
kommander
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
thdxr
simonklee
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -316,15 +315,13 @@ 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_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All@@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,10 +79,15 @@ jobs:

- name: Run unit tests
timeout-minutes: 45
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Check generated client
if: runner.os == 'Linux'
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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
4 changes: 1 addition & 3 deletions .opencode/opencode.jsonc
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
"reference": {
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line numberDiff line numberDiff 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
2 changes: 2 additions & 0 deletions .prettierignore
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- 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.
- 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.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

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

Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- 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.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

Expand DownExpand Up@@ -131,7 +140,7 @@ const table = sqliteTable("session", {

## Testing

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

Expand All@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- 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.
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
47fc6f2
fix(app): preserve mentions during paste (#37940)
opencode-agent[bot] Jul 20, 2026
4872c48
fix(app): complete mentions at cursor (#37941)
opencode-agent[bot] Jul 20, 2026
96ff82a
fix(console): remove desktop promo overlay
opencode-agent[bot] Jul 20, 2026
d36a2d8
sync release versions for v1.18.4
Jul 20, 2026
4cc0224
fix(opencode): display proper session import errors (#36258)
OpeOginni Jul 20, 2026
5a8ee27
fix(provider): update muse-spark reasoning default and system prompt …
mreso Jul 20, 2026
3033afb
fix(provider): normalize Mistral family tool call IDs (#37982)
rekram1-node Jul 20, 2026
849c259
docs: generalize session title model description (#37986)
rekram1-node Jul 20, 2026
2d2339d
feat(app): draggable project rows (#38055)
arvsrn Jul 21, 2026
cb562b2
chore: generate
opencode-agent[bot] Jul 21, 2026
abc4b83
Zen: gemini 3.6 flash and 3.5 flash lite
fwang Jul 21, 2026
21c4c93
fix(ui): improve progress circle contrast (#38101)
dbpolito Jul 21, 2026
b513faf
fix(app): support nested slash command autocomplete (#38097)
dbpolito Jul 21, 2026
5f241f1
chore: generate
opencode-agent[bot] Jul 21, 2026
0317531
zen: add laguna-2-2.1
fwang Jul 21, 2026
c40e3e7
zen: add security check
fwang Jul 21, 2026
76ced54
chore: generate
opencode-agent[bot] Jul 21, 2026
4438f69
zen: add security check
fwang Jul 21, 2026
130038e
fix(app): defer unavailable notification state (#38186)
opencode-agent[bot] Jul 22, 2026
c9db6e9
fix(app): show running shell command (#38080)
opencode-agent[bot] Jul 22, 2026
0a601cf
fix(docs): correct Kimi K2.7 Code request limits (#38248)
MrMushrooooom Jul 22, 2026
50eee1f
fix(provider): correct MiniMax M3 thinking variants (#38330)
rekram1-node Jul 22, 2026
411eff7
feat(go): add Hy3 to Go model lineup (#38349)
MrMushrooooom Jul 22, 2026
542ba88
fix(provider): select prompt cache keys by SDK (#38424)
rekram1-node Jul 23, 2026
fada1a5
fix(provider): serialize Mistral prompt cache keys (#38448)
rekram1-node Jul 23, 2026
92cede0
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
e45210c
chore(app): vendor v2 promise client (#38467)
Brendonovich Jul 23, 2026
84c79c1
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
d03e0c5
feat(app): add dual-server compatibility (#38462)
Brendonovich Jul 23, 2026
347510a
chore: generate
opencode-agent[bot] Jul 23, 2026
e59ba24
feat(app): support current event transport (#38464)
Brendonovich Jul 23, 2026
62e4641
chore: generate
opencode-agent[bot] Jul 23, 2026
20589d6
fix(provider): preserve Mistral reasoning history (#38453)
rekram1-node Jul 23, 2026
743f641
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
204f48d
docs(zen): add Ling 3.0 Flash free model (#38503)
MrMushrooooom Jul 24, 2026
37c263e
feat(app): project current server state (#38459)
Brendonovich Jul 24, 2026
adba484
chore: generate
opencode-agent[bot] Jul 24, 2026
db88c42
fix(app): hydrate v1 session progress (#38606)
Brendonovich Jul 24, 2026
ce9a875
feat(app): render current session timeline (#38466)
Brendonovich Jul 24, 2026
090a26a
chore: generate
opencode-agent[bot] Jul 24, 2026
29af2e3
feat(app): migrate session interactions (#38461)
Brendonovich Jul 24, 2026
386afb7
chore: generate
opencode-agent[bot] Jul 24, 2026
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
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
d39df3d
feat(amicode): approval state machine + ledger transport (S3, partial)
aarontrowbridge Jul 27, 2026
78ee045
fix(amicode): superseded receipts render captured diff, not the live …
aarontrowbridge Jul 27, 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
271edc3
feat(amicode): the in-chat approval card, end to end
aarontrowbridge Jul 28, 2026
42a1098
fix(amicode): a receipt is informative or inert, never a dead link
aarontrowbridge Jul 28, 2026
37aaac0
feat(amicode): warrant status on the rail (S4)
aarontrowbridge 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
f086433
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
358d2ae
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
4691a0b
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
7a7bcff
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
3b7b3b4
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge 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
fdab7d9
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
158f522
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2270998
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
f2090dd
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
5176a69
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
b6981f6
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
17c6755
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
899c0cb
feat(amicode): lift skill activations out of the conversation into an…
aarontrowbridge Jul 28, 2026
06a811c
Revert "feat(amicode): lift skill activations out of the conversation…
aarontrowbridge Jul 28, 2026
8e11411
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0793fd6
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
5db2191
test(amicode): pure span detection for the transcript rail
aarontrowbridge Jul 28, 2026
51716cd
feat(amicode): draw Amico's transcript spine over the turn span
aarontrowbridge Jul 28, 2026
21647f5
fix(amicode): bump the spine to 45% — 30% at 1px was near-invisible
aarontrowbridge Jul 28, 2026
cff7b55
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
bf5dfa4
revert: abandon the Amico transcript spine
aarontrowbridge Jul 28, 2026
fbd13e3
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
79b5ee4
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
4e64894
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
e4e0133
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
7332fc0
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 2026
2b80981
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 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
cb4a891
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
60f7c92
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
e3b62cd
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
0b58499
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
38690c5
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge Jul 28, 2026
d7899ac
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
7d3573f
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2585413
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
ca2437c
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
b6d150c
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
68aca7b
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
7d45579
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
f4fd3e7
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0421013
feat(amicode): add Quantizing and Obsidianing to the thinking-word ro…
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
f47828a
fix(amicode): route external link clicks over open-external postMessa…
aarontrowbridge 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
042634f
merge: sync sst/opencode dev @ 1.18.10 (19231fce4b) into local/amicode
aarontrowbridge Aug 1, 2026
fb6587f
merge follow-up: i18n parity fills, silent-turn guard refinement, ups…
aarontrowbridge Aug 1, 2026
86bd804
docs: log the 1.18.10 upstream sync in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
9ffe8f4
recovery: re-mount the amicode session surfaces into upstream's timel…
aarontrowbridge Aug 1, 2026
7ec8517
Merge remote-tracking branch 'origin/ann/thinking-words-updated' into…
aarontrowbridge Aug 1, 2026
0a03b56
Merge branch 'feat/amicode-system-card-model' into amicode/merge-upst…
aarontrowbridge Aug 1, 2026
91a4c8f
Merge branch 'fix/amicode-receipt-currency' into amicode/merge-upstre…
aarontrowbridge Aug 1, 2026
b61d294
merge: pr/amico-working-indicator + ann/thinking-words + system-card-…
aarontrowbridge Aug 1, 2026
8856b4e
merge: kate/context-tree-vault-zoom — route framed external links ove…
aarontrowbridge Aug 1, 2026
46e5342
merge: feat/warrant-receipts-captured — capability warrants + approva…
aarontrowbridge Aug 1, 2026
36d2759
merge: feat/harmonic-wave-indicator — recorded-Hamiltonian rendering,…
aarontrowbridge Aug 1, 2026
72057c9
docs: log the feature-branch recovery in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
b532642
fix: typecheck — use lastAssistant.error (typed) instead of the union…
aarontrowbridge Aug 1, 2026
bcefef8
fix(css): close the beta-tag dark-scheme rule (brace eaten by the war…
aarontrowbridge Aug 1, 2026
b1a0626
fix: mount the thinking line on the Thinking row — the wave's live mo…
aarontrowbridge Aug 1, 2026
2c878f5
fix: wire the clipboard bridge into the v2 composer (paste in the web…
aarontrowbridge Aug 1, 2026
ebfc529
feat: restore the brand hero on the new-session view — H-robot mark o…
aarontrowbridge Aug 1, 2026
f044bda
feat: chips move under the composer, ranked from problem history
aarontrowbridge Aug 1, 2026
9b1e078
docs: ADR 0001 — one home per chrome surface + chrome glossary terms
aarontrowbridge Aug 1, 2026
7dc4a8e
feat(amicode): workbench split panes — split/workbench contexts, pane…
aarontrowbridge Aug 1, 2026
e7cf0cc
merge: workbench split panes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
60d0242
fix(amicode): webview bridge fixes — ui clipboard util, connection ba…
aarontrowbridge Aug 1, 2026
437c377
merge: webview bridge fixes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
e4ceaae
fix(i18n): connectionLost/reconnected fallbacks in the 16 missing loc…
aarontrowbridge Aug 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All@@ -7,11 +8,14 @@ jayair
jlongster
kitlangton
kommander
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
thdxr
simonklee
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -316,15 +315,13 @@ 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_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All@@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,10 +79,15 @@ jobs:

- name: Run unit tests
timeout-minutes: 45
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Check generated client
if: runner.os == 'Linux'
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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
4 changes: 1 addition & 3 deletions .opencode/opencode.jsonc
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
"reference": {
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line numberDiff line numberDiff 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
2 changes: 2 additions & 0 deletions .prettierignore
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- 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.
- 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.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

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

Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- 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.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

Expand DownExpand Up@@ -131,7 +140,7 @@ const table = sqliteTable("session", {

## Testing

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

Expand All@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- 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.
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
47fc6f2
fix(app): preserve mentions during paste (#37940)
opencode-agent[bot] Jul 20, 2026
4872c48
fix(app): complete mentions at cursor (#37941)
opencode-agent[bot] Jul 20, 2026
96ff82a
fix(console): remove desktop promo overlay
opencode-agent[bot] Jul 20, 2026
d36a2d8
sync release versions for v1.18.4
Jul 20, 2026
4cc0224
fix(opencode): display proper session import errors (#36258)
OpeOginni Jul 20, 2026
5a8ee27
fix(provider): update muse-spark reasoning default and system prompt …
mreso Jul 20, 2026
3033afb
fix(provider): normalize Mistral family tool call IDs (#37982)
rekram1-node Jul 20, 2026
849c259
docs: generalize session title model description (#37986)
rekram1-node Jul 20, 2026
2d2339d
feat(app): draggable project rows (#38055)
arvsrn Jul 21, 2026
cb562b2
chore: generate
opencode-agent[bot] Jul 21, 2026
abc4b83
Zen: gemini 3.6 flash and 3.5 flash lite
fwang Jul 21, 2026
21c4c93
fix(ui): improve progress circle contrast (#38101)
dbpolito Jul 21, 2026
b513faf
fix(app): support nested slash command autocomplete (#38097)
dbpolito Jul 21, 2026
5f241f1
chore: generate
opencode-agent[bot] Jul 21, 2026
0317531
zen: add laguna-2-2.1
fwang Jul 21, 2026
c40e3e7
zen: add security check
fwang Jul 21, 2026
76ced54
chore: generate
opencode-agent[bot] Jul 21, 2026
4438f69
zen: add security check
fwang Jul 21, 2026
130038e
fix(app): defer unavailable notification state (#38186)
opencode-agent[bot] Jul 22, 2026
c9db6e9
fix(app): show running shell command (#38080)
opencode-agent[bot] Jul 22, 2026
0a601cf
fix(docs): correct Kimi K2.7 Code request limits (#38248)
MrMushrooooom Jul 22, 2026
50eee1f
fix(provider): correct MiniMax M3 thinking variants (#38330)
rekram1-node Jul 22, 2026
411eff7
feat(go): add Hy3 to Go model lineup (#38349)
MrMushrooooom Jul 22, 2026
542ba88
fix(provider): select prompt cache keys by SDK (#38424)
rekram1-node Jul 23, 2026
fada1a5
fix(provider): serialize Mistral prompt cache keys (#38448)
rekram1-node Jul 23, 2026
92cede0
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
e45210c
chore(app): vendor v2 promise client (#38467)
Brendonovich Jul 23, 2026
84c79c1
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
d03e0c5
feat(app): add dual-server compatibility (#38462)
Brendonovich Jul 23, 2026
347510a
chore: generate
opencode-agent[bot] Jul 23, 2026
e59ba24
feat(app): support current event transport (#38464)
Brendonovich Jul 23, 2026
62e4641
chore: generate
opencode-agent[bot] Jul 23, 2026
20589d6
fix(provider): preserve Mistral reasoning history (#38453)
rekram1-node Jul 23, 2026
743f641
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
204f48d
docs(zen): add Ling 3.0 Flash free model (#38503)
MrMushrooooom Jul 24, 2026
37c263e
feat(app): project current server state (#38459)
Brendonovich Jul 24, 2026
adba484
chore: generate
opencode-agent[bot] Jul 24, 2026
db88c42
fix(app): hydrate v1 session progress (#38606)
Brendonovich Jul 24, 2026
ce9a875
feat(app): render current session timeline (#38466)
Brendonovich Jul 24, 2026
090a26a
chore: generate
opencode-agent[bot] Jul 24, 2026
29af2e3
feat(app): migrate session interactions (#38461)
Brendonovich Jul 24, 2026
386afb7
chore: generate
opencode-agent[bot] Jul 24, 2026
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
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
d39df3d
feat(amicode): approval state machine + ledger transport (S3, partial)
aarontrowbridge Jul 27, 2026
78ee045
fix(amicode): superseded receipts render captured diff, not the live …
aarontrowbridge Jul 27, 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
271edc3
feat(amicode): the in-chat approval card, end to end
aarontrowbridge Jul 28, 2026
42a1098
fix(amicode): a receipt is informative or inert, never a dead link
aarontrowbridge Jul 28, 2026
37aaac0
feat(amicode): warrant status on the rail (S4)
aarontrowbridge 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
f086433
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
358d2ae
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
4691a0b
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
7a7bcff
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
3b7b3b4
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge 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
fdab7d9
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
158f522
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2270998
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
f2090dd
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
5176a69
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
b6981f6
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
17c6755
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
899c0cb
feat(amicode): lift skill activations out of the conversation into an…
aarontrowbridge Jul 28, 2026
06a811c
Revert "feat(amicode): lift skill activations out of the conversation…
aarontrowbridge Jul 28, 2026
8e11411
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0793fd6
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
5db2191
test(amicode): pure span detection for the transcript rail
aarontrowbridge Jul 28, 2026
51716cd
feat(amicode): draw Amico's transcript spine over the turn span
aarontrowbridge Jul 28, 2026
21647f5
fix(amicode): bump the spine to 45% — 30% at 1px was near-invisible
aarontrowbridge Jul 28, 2026
cff7b55
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
bf5dfa4
revert: abandon the Amico transcript spine
aarontrowbridge Jul 28, 2026
fbd13e3
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
79b5ee4
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
4e64894
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
e4e0133
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
7332fc0
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 2026
2b80981
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 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
cb4a891
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
60f7c92
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
e3b62cd
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
0b58499
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
38690c5
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge Jul 28, 2026
d7899ac
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
7d3573f
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2585413
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
ca2437c
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
b6d150c
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
68aca7b
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
7d45579
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
f4fd3e7
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0421013
feat(amicode): add Quantizing and Obsidianing to the thinking-word ro…
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
f47828a
fix(amicode): route external link clicks over open-external postMessa…
aarontrowbridge 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
042634f
merge: sync sst/opencode dev @ 1.18.10 (19231fce4b) into local/amicode
aarontrowbridge Aug 1, 2026
fb6587f
merge follow-up: i18n parity fills, silent-turn guard refinement, ups…
aarontrowbridge Aug 1, 2026
86bd804
docs: log the 1.18.10 upstream sync in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
9ffe8f4
recovery: re-mount the amicode session surfaces into upstream's timel…
aarontrowbridge Aug 1, 2026
7ec8517
Merge remote-tracking branch 'origin/ann/thinking-words-updated' into…
aarontrowbridge Aug 1, 2026
0a03b56
Merge branch 'feat/amicode-system-card-model' into amicode/merge-upst…
aarontrowbridge Aug 1, 2026
91a4c8f
Merge branch 'fix/amicode-receipt-currency' into amicode/merge-upstre…
aarontrowbridge Aug 1, 2026
b61d294
merge: pr/amico-working-indicator + ann/thinking-words + system-card-…
aarontrowbridge Aug 1, 2026
8856b4e
merge: kate/context-tree-vault-zoom — route framed external links ove…
aarontrowbridge Aug 1, 2026
46e5342
merge: feat/warrant-receipts-captured — capability warrants + approva…
aarontrowbridge Aug 1, 2026
36d2759
merge: feat/harmonic-wave-indicator — recorded-Hamiltonian rendering,…
aarontrowbridge Aug 1, 2026
72057c9
docs: log the feature-branch recovery in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
b532642
fix: typecheck — use lastAssistant.error (typed) instead of the union…
aarontrowbridge Aug 1, 2026
bcefef8
fix(css): close the beta-tag dark-scheme rule (brace eaten by the war…
aarontrowbridge Aug 1, 2026
b1a0626
fix: mount the thinking line on the Thinking row — the wave's live mo…
aarontrowbridge Aug 1, 2026
2c878f5
fix: wire the clipboard bridge into the v2 composer (paste in the web…
aarontrowbridge Aug 1, 2026
ebfc529
feat: restore the brand hero on the new-session view — H-robot mark o…
aarontrowbridge Aug 1, 2026
f044bda
feat: chips move under the composer, ranked from problem history
aarontrowbridge Aug 1, 2026
9b1e078
docs: ADR 0001 — one home per chrome surface + chrome glossary terms
aarontrowbridge Aug 1, 2026
7dc4a8e
feat(amicode): workbench split panes — split/workbench contexts, pane…
aarontrowbridge Aug 1, 2026
e7cf0cc
merge: workbench split panes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
60d0242
fix(amicode): webview bridge fixes — ui clipboard util, connection ba…
aarontrowbridge Aug 1, 2026
437c377
merge: webview bridge fixes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
e4ceaae
fix(i18n): connectionLost/reconnected fallbacks in the 16 missing loc…
aarontrowbridge Aug 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All@@ -7,11 +8,14 @@ jayair
jlongster
kitlangton
kommander
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
thdxr
simonklee
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -316,15 +315,13 @@ 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_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All@@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,10 +79,15 @@ jobs:

- name: Run unit tests
timeout-minutes: 45
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Check generated client
if: runner.os == 'Linux'
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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
4 changes: 1 addition & 3 deletions .opencode/opencode.jsonc
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
"reference": {
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line numberDiff line numberDiff 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
2 changes: 2 additions & 0 deletions .prettierignore
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- 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.
- 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.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

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

Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- 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.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

Expand DownExpand Up@@ -131,7 +140,7 @@ const table = sqliteTable("session", {

## Testing

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

Expand All@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- 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.
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
47fc6f2
fix(app): preserve mentions during paste (#37940)
opencode-agent[bot] Jul 20, 2026
4872c48
fix(app): complete mentions at cursor (#37941)
opencode-agent[bot] Jul 20, 2026
96ff82a
fix(console): remove desktop promo overlay
opencode-agent[bot] Jul 20, 2026
d36a2d8
sync release versions for v1.18.4
Jul 20, 2026
4cc0224
fix(opencode): display proper session import errors (#36258)
OpeOginni Jul 20, 2026
5a8ee27
fix(provider): update muse-spark reasoning default and system prompt …
mreso Jul 20, 2026
3033afb
fix(provider): normalize Mistral family tool call IDs (#37982)
rekram1-node Jul 20, 2026
849c259
docs: generalize session title model description (#37986)
rekram1-node Jul 20, 2026
2d2339d
feat(app): draggable project rows (#38055)
arvsrn Jul 21, 2026
cb562b2
chore: generate
opencode-agent[bot] Jul 21, 2026
abc4b83
Zen: gemini 3.6 flash and 3.5 flash lite
fwang Jul 21, 2026
21c4c93
fix(ui): improve progress circle contrast (#38101)
dbpolito Jul 21, 2026
b513faf
fix(app): support nested slash command autocomplete (#38097)
dbpolito Jul 21, 2026
5f241f1
chore: generate
opencode-agent[bot] Jul 21, 2026
0317531
zen: add laguna-2-2.1
fwang Jul 21, 2026
c40e3e7
zen: add security check
fwang Jul 21, 2026
76ced54
chore: generate
opencode-agent[bot] Jul 21, 2026
4438f69
zen: add security check
fwang Jul 21, 2026
130038e
fix(app): defer unavailable notification state (#38186)
opencode-agent[bot] Jul 22, 2026
c9db6e9
fix(app): show running shell command (#38080)
opencode-agent[bot] Jul 22, 2026
0a601cf
fix(docs): correct Kimi K2.7 Code request limits (#38248)
MrMushrooooom Jul 22, 2026
50eee1f
fix(provider): correct MiniMax M3 thinking variants (#38330)
rekram1-node Jul 22, 2026
411eff7
feat(go): add Hy3 to Go model lineup (#38349)
MrMushrooooom Jul 22, 2026
542ba88
fix(provider): select prompt cache keys by SDK (#38424)
rekram1-node Jul 23, 2026
fada1a5
fix(provider): serialize Mistral prompt cache keys (#38448)
rekram1-node Jul 23, 2026
92cede0
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
e45210c
chore(app): vendor v2 promise client (#38467)
Brendonovich Jul 23, 2026
84c79c1
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
d03e0c5
feat(app): add dual-server compatibility (#38462)
Brendonovich Jul 23, 2026
347510a
chore: generate
opencode-agent[bot] Jul 23, 2026
e59ba24
feat(app): support current event transport (#38464)
Brendonovich Jul 23, 2026
62e4641
chore: generate
opencode-agent[bot] Jul 23, 2026
20589d6
fix(provider): preserve Mistral reasoning history (#38453)
rekram1-node Jul 23, 2026
743f641
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
204f48d
docs(zen): add Ling 3.0 Flash free model (#38503)
MrMushrooooom Jul 24, 2026
37c263e
feat(app): project current server state (#38459)
Brendonovich Jul 24, 2026
adba484
chore: generate
opencode-agent[bot] Jul 24, 2026
db88c42
fix(app): hydrate v1 session progress (#38606)
Brendonovich Jul 24, 2026
ce9a875
feat(app): render current session timeline (#38466)
Brendonovich Jul 24, 2026
090a26a
chore: generate
opencode-agent[bot] Jul 24, 2026
29af2e3
feat(app): migrate session interactions (#38461)
Brendonovich Jul 24, 2026
386afb7
chore: generate
opencode-agent[bot] Jul 24, 2026
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
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
d39df3d
feat(amicode): approval state machine + ledger transport (S3, partial)
aarontrowbridge Jul 27, 2026
78ee045
fix(amicode): superseded receipts render captured diff, not the live …
aarontrowbridge Jul 27, 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
271edc3
feat(amicode): the in-chat approval card, end to end
aarontrowbridge Jul 28, 2026
42a1098
fix(amicode): a receipt is informative or inert, never a dead link
aarontrowbridge Jul 28, 2026
37aaac0
feat(amicode): warrant status on the rail (S4)
aarontrowbridge 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
f086433
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
358d2ae
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
4691a0b
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
7a7bcff
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
3b7b3b4
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge 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
fdab7d9
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
158f522
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2270998
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
f2090dd
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
5176a69
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
b6981f6
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
17c6755
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
899c0cb
feat(amicode): lift skill activations out of the conversation into an…
aarontrowbridge Jul 28, 2026
06a811c
Revert "feat(amicode): lift skill activations out of the conversation…
aarontrowbridge Jul 28, 2026
8e11411
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0793fd6
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
5db2191
test(amicode): pure span detection for the transcript rail
aarontrowbridge Jul 28, 2026
51716cd
feat(amicode): draw Amico's transcript spine over the turn span
aarontrowbridge Jul 28, 2026
21647f5
fix(amicode): bump the spine to 45% — 30% at 1px was near-invisible
aarontrowbridge Jul 28, 2026
cff7b55
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
bf5dfa4
revert: abandon the Amico transcript spine
aarontrowbridge Jul 28, 2026
fbd13e3
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
79b5ee4
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
4e64894
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
e4e0133
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
7332fc0
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 2026
2b80981
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 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
cb4a891
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
60f7c92
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
e3b62cd
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
0b58499
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
38690c5
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge Jul 28, 2026
d7899ac
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
7d3573f
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2585413
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
ca2437c
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
b6d150c
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
68aca7b
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
7d45579
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
f4fd3e7
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0421013
feat(amicode): add Quantizing and Obsidianing to the thinking-word ro…
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
f47828a
fix(amicode): route external link clicks over open-external postMessa…
aarontrowbridge 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
042634f
merge: sync sst/opencode dev @ 1.18.10 (19231fce4b) into local/amicode
aarontrowbridge Aug 1, 2026
fb6587f
merge follow-up: i18n parity fills, silent-turn guard refinement, ups…
aarontrowbridge Aug 1, 2026
86bd804
docs: log the 1.18.10 upstream sync in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
9ffe8f4
recovery: re-mount the amicode session surfaces into upstream's timel…
aarontrowbridge Aug 1, 2026
7ec8517
Merge remote-tracking branch 'origin/ann/thinking-words-updated' into…
aarontrowbridge Aug 1, 2026
0a03b56
Merge branch 'feat/amicode-system-card-model' into amicode/merge-upst…
aarontrowbridge Aug 1, 2026
91a4c8f
Merge branch 'fix/amicode-receipt-currency' into amicode/merge-upstre…
aarontrowbridge Aug 1, 2026
b61d294
merge: pr/amico-working-indicator + ann/thinking-words + system-card-…
aarontrowbridge Aug 1, 2026
8856b4e
merge: kate/context-tree-vault-zoom — route framed external links ove…
aarontrowbridge Aug 1, 2026
46e5342
merge: feat/warrant-receipts-captured — capability warrants + approva…
aarontrowbridge Aug 1, 2026
36d2759
merge: feat/harmonic-wave-indicator — recorded-Hamiltonian rendering,…
aarontrowbridge Aug 1, 2026
72057c9
docs: log the feature-branch recovery in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
b532642
fix: typecheck — use lastAssistant.error (typed) instead of the union…
aarontrowbridge Aug 1, 2026
bcefef8
fix(css): close the beta-tag dark-scheme rule (brace eaten by the war…
aarontrowbridge Aug 1, 2026
b1a0626
fix: mount the thinking line on the Thinking row — the wave's live mo…
aarontrowbridge Aug 1, 2026
2c878f5
fix: wire the clipboard bridge into the v2 composer (paste in the web…
aarontrowbridge Aug 1, 2026
ebfc529
feat: restore the brand hero on the new-session view — H-robot mark o…
aarontrowbridge Aug 1, 2026
f044bda
feat: chips move under the composer, ranked from problem history
aarontrowbridge Aug 1, 2026
9b1e078
docs: ADR 0001 — one home per chrome surface + chrome glossary terms
aarontrowbridge Aug 1, 2026
7dc4a8e
feat(amicode): workbench split panes — split/workbench contexts, pane…
aarontrowbridge Aug 1, 2026
e7cf0cc
merge: workbench split panes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
60d0242
fix(amicode): webview bridge fixes — ui clipboard util, connection ba…
aarontrowbridge Aug 1, 2026
437c377
merge: webview bridge fixes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
e4ceaae
fix(i18n): connectionLost/reconnected fallbacks in the 16 missing loc…
aarontrowbridge Aug 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All@@ -7,11 +8,14 @@ jayair
jlongster
kitlangton
kommander
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
thdxr
simonklee
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -316,15 +315,13 @@ 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_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All@@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,10 +79,15 @@ jobs:

- name: Run unit tests
timeout-minutes: 45
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Check generated client
if: runner.os == 'Linux'
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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
4 changes: 1 addition & 3 deletions .opencode/opencode.jsonc
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
"reference": {
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line numberDiff line numberDiff 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
2 changes: 2 additions & 0 deletions .prettierignore
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- 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.
- 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.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

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

Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- 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.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

Expand DownExpand Up@@ -131,7 +140,7 @@ const table = sqliteTable("session", {

## Testing

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

Expand All@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- 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.
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
47fc6f2
fix(app): preserve mentions during paste (#37940)
opencode-agent[bot] Jul 20, 2026
4872c48
fix(app): complete mentions at cursor (#37941)
opencode-agent[bot] Jul 20, 2026
96ff82a
fix(console): remove desktop promo overlay
opencode-agent[bot] Jul 20, 2026
d36a2d8
sync release versions for v1.18.4
Jul 20, 2026
4cc0224
fix(opencode): display proper session import errors (#36258)
OpeOginni Jul 20, 2026
5a8ee27
fix(provider): update muse-spark reasoning default and system prompt …
mreso Jul 20, 2026
3033afb
fix(provider): normalize Mistral family tool call IDs (#37982)
rekram1-node Jul 20, 2026
849c259
docs: generalize session title model description (#37986)
rekram1-node Jul 20, 2026
2d2339d
feat(app): draggable project rows (#38055)
arvsrn Jul 21, 2026
cb562b2
chore: generate
opencode-agent[bot] Jul 21, 2026
abc4b83
Zen: gemini 3.6 flash and 3.5 flash lite
fwang Jul 21, 2026
21c4c93
fix(ui): improve progress circle contrast (#38101)
dbpolito Jul 21, 2026
b513faf
fix(app): support nested slash command autocomplete (#38097)
dbpolito Jul 21, 2026
5f241f1
chore: generate
opencode-agent[bot] Jul 21, 2026
0317531
zen: add laguna-2-2.1
fwang Jul 21, 2026
c40e3e7
zen: add security check
fwang Jul 21, 2026
76ced54
chore: generate
opencode-agent[bot] Jul 21, 2026
4438f69
zen: add security check
fwang Jul 21, 2026
130038e
fix(app): defer unavailable notification state (#38186)
opencode-agent[bot] Jul 22, 2026
c9db6e9
fix(app): show running shell command (#38080)
opencode-agent[bot] Jul 22, 2026
0a601cf
fix(docs): correct Kimi K2.7 Code request limits (#38248)
MrMushrooooom Jul 22, 2026
50eee1f
fix(provider): correct MiniMax M3 thinking variants (#38330)
rekram1-node Jul 22, 2026
411eff7
feat(go): add Hy3 to Go model lineup (#38349)
MrMushrooooom Jul 22, 2026
542ba88
fix(provider): select prompt cache keys by SDK (#38424)
rekram1-node Jul 23, 2026
fada1a5
fix(provider): serialize Mistral prompt cache keys (#38448)
rekram1-node Jul 23, 2026
92cede0
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
e45210c
chore(app): vendor v2 promise client (#38467)
Brendonovich Jul 23, 2026
84c79c1
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
d03e0c5
feat(app): add dual-server compatibility (#38462)
Brendonovich Jul 23, 2026
347510a
chore: generate
opencode-agent[bot] Jul 23, 2026
e59ba24
feat(app): support current event transport (#38464)
Brendonovich Jul 23, 2026
62e4641
chore: generate
opencode-agent[bot] Jul 23, 2026
20589d6
fix(provider): preserve Mistral reasoning history (#38453)
rekram1-node Jul 23, 2026
743f641
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
204f48d
docs(zen): add Ling 3.0 Flash free model (#38503)
MrMushrooooom Jul 24, 2026
37c263e
feat(app): project current server state (#38459)
Brendonovich Jul 24, 2026
adba484
chore: generate
opencode-agent[bot] Jul 24, 2026
db88c42
fix(app): hydrate v1 session progress (#38606)
Brendonovich Jul 24, 2026
ce9a875
feat(app): render current session timeline (#38466)
Brendonovich Jul 24, 2026
090a26a
chore: generate
opencode-agent[bot] Jul 24, 2026
29af2e3
feat(app): migrate session interactions (#38461)
Brendonovich Jul 24, 2026
386afb7
chore: generate
opencode-agent[bot] Jul 24, 2026
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
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
d39df3d
feat(amicode): approval state machine + ledger transport (S3, partial)
aarontrowbridge Jul 27, 2026
78ee045
fix(amicode): superseded receipts render captured diff, not the live …
aarontrowbridge Jul 27, 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
271edc3
feat(amicode): the in-chat approval card, end to end
aarontrowbridge Jul 28, 2026
42a1098
fix(amicode): a receipt is informative or inert, never a dead link
aarontrowbridge Jul 28, 2026
37aaac0
feat(amicode): warrant status on the rail (S4)
aarontrowbridge 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
f086433
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
358d2ae
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
4691a0b
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
7a7bcff
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
3b7b3b4
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge 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
fdab7d9
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
158f522
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2270998
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
f2090dd
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
5176a69
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
b6981f6
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
17c6755
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
899c0cb
feat(amicode): lift skill activations out of the conversation into an…
aarontrowbridge Jul 28, 2026
06a811c
Revert "feat(amicode): lift skill activations out of the conversation…
aarontrowbridge Jul 28, 2026
8e11411
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0793fd6
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
5db2191
test(amicode): pure span detection for the transcript rail
aarontrowbridge Jul 28, 2026
51716cd
feat(amicode): draw Amico's transcript spine over the turn span
aarontrowbridge Jul 28, 2026
21647f5
fix(amicode): bump the spine to 45% — 30% at 1px was near-invisible
aarontrowbridge Jul 28, 2026
cff7b55
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
bf5dfa4
revert: abandon the Amico transcript spine
aarontrowbridge Jul 28, 2026
fbd13e3
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
79b5ee4
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
4e64894
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
e4e0133
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
7332fc0
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 2026
2b80981
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 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
cb4a891
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
60f7c92
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
e3b62cd
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
0b58499
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
38690c5
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge Jul 28, 2026
d7899ac
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
7d3573f
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2585413
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
ca2437c
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
b6d150c
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
68aca7b
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
7d45579
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
f4fd3e7
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0421013
feat(amicode): add Quantizing and Obsidianing to the thinking-word ro…
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
f47828a
fix(amicode): route external link clicks over open-external postMessa…
aarontrowbridge 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
042634f
merge: sync sst/opencode dev @ 1.18.10 (19231fce4b) into local/amicode
aarontrowbridge Aug 1, 2026
fb6587f
merge follow-up: i18n parity fills, silent-turn guard refinement, ups…
aarontrowbridge Aug 1, 2026
86bd804
docs: log the 1.18.10 upstream sync in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
9ffe8f4
recovery: re-mount the amicode session surfaces into upstream's timel…
aarontrowbridge Aug 1, 2026
7ec8517
Merge remote-tracking branch 'origin/ann/thinking-words-updated' into…
aarontrowbridge Aug 1, 2026
0a03b56
Merge branch 'feat/amicode-system-card-model' into amicode/merge-upst…
aarontrowbridge Aug 1, 2026
91a4c8f
Merge branch 'fix/amicode-receipt-currency' into amicode/merge-upstre…
aarontrowbridge Aug 1, 2026
b61d294
merge: pr/amico-working-indicator + ann/thinking-words + system-card-…
aarontrowbridge Aug 1, 2026
8856b4e
merge: kate/context-tree-vault-zoom — route framed external links ove…
aarontrowbridge Aug 1, 2026
46e5342
merge: feat/warrant-receipts-captured — capability warrants + approva…
aarontrowbridge Aug 1, 2026
36d2759
merge: feat/harmonic-wave-indicator — recorded-Hamiltonian rendering,…
aarontrowbridge Aug 1, 2026
72057c9
docs: log the feature-branch recovery in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
b532642
fix: typecheck — use lastAssistant.error (typed) instead of the union…
aarontrowbridge Aug 1, 2026
bcefef8
fix(css): close the beta-tag dark-scheme rule (brace eaten by the war…
aarontrowbridge Aug 1, 2026
b1a0626
fix: mount the thinking line on the Thinking row — the wave's live mo…
aarontrowbridge Aug 1, 2026
2c878f5
fix: wire the clipboard bridge into the v2 composer (paste in the web…
aarontrowbridge Aug 1, 2026
ebfc529
feat: restore the brand hero on the new-session view — H-robot mark o…
aarontrowbridge Aug 1, 2026
f044bda
feat: chips move under the composer, ranked from problem history
aarontrowbridge Aug 1, 2026
9b1e078
docs: ADR 0001 — one home per chrome surface + chrome glossary terms
aarontrowbridge Aug 1, 2026
7dc4a8e
feat(amicode): workbench split panes — split/workbench contexts, pane…
aarontrowbridge Aug 1, 2026
e7cf0cc
merge: workbench split panes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
60d0242
fix(amicode): webview bridge fixes — ui clipboard util, connection ba…
aarontrowbridge Aug 1, 2026
437c377
merge: webview bridge fixes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
e4ceaae
fix(i18n): connectionLost/reconnected fallbacks in the 16 missing loc…
aarontrowbridge Aug 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All@@ -7,11 +8,14 @@ jayair
jlongster
kitlangton
kommander
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
thdxr
simonklee
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -316,15 +315,13 @@ 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_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All@@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,10 +79,15 @@ jobs:

- name: Run unit tests
timeout-minutes: 45
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Check generated client
if: runner.os == 'Linux'
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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
4 changes: 1 addition & 3 deletions .opencode/opencode.jsonc
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
"reference": {
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line numberDiff line numberDiff 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
2 changes: 2 additions & 0 deletions .prettierignore
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- 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.
- 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.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

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

Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- 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.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

Expand DownExpand Up@@ -131,7 +140,7 @@ const table = sqliteTable("session", {

## Testing

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

Expand All@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- 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.
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
47fc6f2
fix(app): preserve mentions during paste (#37940)
opencode-agent[bot] Jul 20, 2026
4872c48
fix(app): complete mentions at cursor (#37941)
opencode-agent[bot] Jul 20, 2026
96ff82a
fix(console): remove desktop promo overlay
opencode-agent[bot] Jul 20, 2026
d36a2d8
sync release versions for v1.18.4
Jul 20, 2026
4cc0224
fix(opencode): display proper session import errors (#36258)
OpeOginni Jul 20, 2026
5a8ee27
fix(provider): update muse-spark reasoning default and system prompt …
mreso Jul 20, 2026
3033afb
fix(provider): normalize Mistral family tool call IDs (#37982)
rekram1-node Jul 20, 2026
849c259
docs: generalize session title model description (#37986)
rekram1-node Jul 20, 2026
2d2339d
feat(app): draggable project rows (#38055)
arvsrn Jul 21, 2026
cb562b2
chore: generate
opencode-agent[bot] Jul 21, 2026
abc4b83
Zen: gemini 3.6 flash and 3.5 flash lite
fwang Jul 21, 2026
21c4c93
fix(ui): improve progress circle contrast (#38101)
dbpolito Jul 21, 2026
b513faf
fix(app): support nested slash command autocomplete (#38097)
dbpolito Jul 21, 2026
5f241f1
chore: generate
opencode-agent[bot] Jul 21, 2026
0317531
zen: add laguna-2-2.1
fwang Jul 21, 2026
c40e3e7
zen: add security check
fwang Jul 21, 2026
76ced54
chore: generate
opencode-agent[bot] Jul 21, 2026
4438f69
zen: add security check
fwang Jul 21, 2026
130038e
fix(app): defer unavailable notification state (#38186)
opencode-agent[bot] Jul 22, 2026
c9db6e9
fix(app): show running shell command (#38080)
opencode-agent[bot] Jul 22, 2026
0a601cf
fix(docs): correct Kimi K2.7 Code request limits (#38248)
MrMushrooooom Jul 22, 2026
50eee1f
fix(provider): correct MiniMax M3 thinking variants (#38330)
rekram1-node Jul 22, 2026
411eff7
feat(go): add Hy3 to Go model lineup (#38349)
MrMushrooooom Jul 22, 2026
542ba88
fix(provider): select prompt cache keys by SDK (#38424)
rekram1-node Jul 23, 2026
fada1a5
fix(provider): serialize Mistral prompt cache keys (#38448)
rekram1-node Jul 23, 2026
92cede0
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
e45210c
chore(app): vendor v2 promise client (#38467)
Brendonovich Jul 23, 2026
84c79c1
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
d03e0c5
feat(app): add dual-server compatibility (#38462)
Brendonovich Jul 23, 2026
347510a
chore: generate
opencode-agent[bot] Jul 23, 2026
e59ba24
feat(app): support current event transport (#38464)
Brendonovich Jul 23, 2026
62e4641
chore: generate
opencode-agent[bot] Jul 23, 2026
20589d6
fix(provider): preserve Mistral reasoning history (#38453)
rekram1-node Jul 23, 2026
743f641
chore: update nix node_modules hashes
opencode-agent[bot] Jul 23, 2026
204f48d
docs(zen): add Ling 3.0 Flash free model (#38503)
MrMushrooooom Jul 24, 2026
37c263e
feat(app): project current server state (#38459)
Brendonovich Jul 24, 2026
adba484
chore: generate
opencode-agent[bot] Jul 24, 2026
db88c42
fix(app): hydrate v1 session progress (#38606)
Brendonovich Jul 24, 2026
ce9a875
feat(app): render current session timeline (#38466)
Brendonovich Jul 24, 2026
090a26a
chore: generate
opencode-agent[bot] Jul 24, 2026
29af2e3
feat(app): migrate session interactions (#38461)
Brendonovich Jul 24, 2026
386afb7
chore: generate
opencode-agent[bot] Jul 24, 2026
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
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
d39df3d
feat(amicode): approval state machine + ledger transport (S3, partial)
aarontrowbridge Jul 27, 2026
78ee045
fix(amicode): superseded receipts render captured diff, not the live …
aarontrowbridge Jul 27, 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
271edc3
feat(amicode): the in-chat approval card, end to end
aarontrowbridge Jul 28, 2026
42a1098
fix(amicode): a receipt is informative or inert, never a dead link
aarontrowbridge Jul 28, 2026
37aaac0
feat(amicode): warrant status on the rail (S4)
aarontrowbridge 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
f086433
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
358d2ae
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
4691a0b
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
7a7bcff
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
7edefb3
chore(mcp): upgrade client to 2.0.0 (#39369)
opencode-agent[bot] Jul 28, 2026
3b7b3b4
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge 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
fdab7d9
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
f28d72d
chore: update nix node_modules hashes
opencode-agent[bot] Jul 28, 2026
158f522
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2270998
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
f2090dd
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
a45c2b9
sync release versions for v1.18.9
Jul 28, 2026
5176a69
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
b6981f6
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
17c6755
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
899c0cb
feat(amicode): lift skill activations out of the conversation into an…
aarontrowbridge Jul 28, 2026
06a811c
Revert "feat(amicode): lift skill activations out of the conversation…
aarontrowbridge Jul 28, 2026
8e11411
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0793fd6
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
5db2191
test(amicode): pure span detection for the transcript rail
aarontrowbridge Jul 28, 2026
51716cd
feat(amicode): draw Amico's transcript spine over the turn span
aarontrowbridge Jul 28, 2026
21647f5
fix(amicode): bump the spine to 45% — 30% at 1px was near-invisible
aarontrowbridge Jul 28, 2026
cff7b55
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
bf5dfa4
revert: abandon the Amico transcript spine
aarontrowbridge Jul 28, 2026
fbd13e3
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
79b5ee4
feat(amicode): per-component physics rows on the system card
aarontrowbridge Jul 28, 2026
4e64894
feat(amicode): extend the system card's physics rows
aarontrowbridge Jul 28, 2026
e4e0133
feat(amicode): render the recorded Hamiltonian; stop inferring one of…
aarontrowbridge Jul 28, 2026
7332fc0
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 2026
2b80981
test(amicode): dedupe the KaTeX sweep — render each distinct equation…
aarontrowbridge Jul 29, 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
cb4a891
feat(amicode): pure geometry + timing for the harmonic wave indicator
aarontrowbridge Jul 28, 2026
60f7c92
test(amicode): close two mutation-proven gaps in the wave geometry tests
aarontrowbridge Jul 28, 2026
e3b62cd
docs(amicode): record that the climb indexes wavelengths, not harmoni…
aarontrowbridge Jul 28, 2026
0b58499
feat(amicode): AmicoWave component; retire the amc-text-shimmer treat…
aarontrowbridge Jul 28, 2026
38690c5
refactor(amicode): rename the pure module to wave-geometry, dropping …
aarontrowbridge Jul 28, 2026
d7899ac
fix(amicode): use the theme's ink token for the wave; tighten the CSS…
aarontrowbridge Jul 28, 2026
7d3573f
docs(amicode): AmicoWave stories — scheme contrast and multi-instance…
aarontrowbridge Jul 28, 2026
2585413
feat(amicode): thinking line carries the harmonic wave; H-mark goes s…
aarontrowbridge Jul 28, 2026
ca2437c
fix(fork): drop TextShimmer from tool-status-title, keep the word morph
aarontrowbridge Jul 28, 2026
b6d150c
feat(amicode): collapse consecutive identical receipt cards into one …
aarontrowbridge Jul 28, 2026
68aca7b
fix(amicode): say 'Skill' when a skill activates, and stop it shimmering
aarontrowbridge Jul 28, 2026
7d45579
feat(amicode): render skill activations as an Amico chip
aarontrowbridge Jul 28, 2026
f4fd3e7
feat(amicode): give an opened skill file its own surface
aarontrowbridge Jul 28, 2026
0421013
feat(amicode): add Quantizing and Obsidianing to the thinking-word ro…
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
f47828a
fix(amicode): route external link clicks over open-external postMessa…
aarontrowbridge 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
042634f
merge: sync sst/opencode dev @ 1.18.10 (19231fce4b) into local/amicode
aarontrowbridge Aug 1, 2026
fb6587f
merge follow-up: i18n parity fills, silent-turn guard refinement, ups…
aarontrowbridge Aug 1, 2026
86bd804
docs: log the 1.18.10 upstream sync in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
9ffe8f4
recovery: re-mount the amicode session surfaces into upstream's timel…
aarontrowbridge Aug 1, 2026
7ec8517
Merge remote-tracking branch 'origin/ann/thinking-words-updated' into…
aarontrowbridge Aug 1, 2026
0a03b56
Merge branch 'feat/amicode-system-card-model' into amicode/merge-upst…
aarontrowbridge Aug 1, 2026
91a4c8f
Merge branch 'fix/amicode-receipt-currency' into amicode/merge-upstre…
aarontrowbridge Aug 1, 2026
b61d294
merge: pr/amico-working-indicator + ann/thinking-words + system-card-…
aarontrowbridge Aug 1, 2026
8856b4e
merge: kate/context-tree-vault-zoom — route framed external links ove…
aarontrowbridge Aug 1, 2026
46e5342
merge: feat/warrant-receipts-captured — capability warrants + approva…
aarontrowbridge Aug 1, 2026
36d2759
merge: feat/harmonic-wave-indicator — recorded-Hamiltonian rendering,…
aarontrowbridge Aug 1, 2026
72057c9
docs: log the feature-branch recovery in AMICODE-PATCHES.md
aarontrowbridge Aug 1, 2026
b532642
fix: typecheck — use lastAssistant.error (typed) instead of the union…
aarontrowbridge Aug 1, 2026
bcefef8
fix(css): close the beta-tag dark-scheme rule (brace eaten by the war…
aarontrowbridge Aug 1, 2026
b1a0626
fix: mount the thinking line on the Thinking row — the wave's live mo…
aarontrowbridge Aug 1, 2026
2c878f5
fix: wire the clipboard bridge into the v2 composer (paste in the web…
aarontrowbridge Aug 1, 2026
ebfc529
feat: restore the brand hero on the new-session view — H-robot mark o…
aarontrowbridge Aug 1, 2026
f044bda
feat: chips move under the composer, ranked from problem history
aarontrowbridge Aug 1, 2026
9b1e078
docs: ADR 0001 — one home per chrome surface + chrome glossary terms
aarontrowbridge Aug 1, 2026
7dc4a8e
feat(amicode): workbench split panes — split/workbench contexts, pane…
aarontrowbridge Aug 1, 2026
e7cf0cc
merge: workbench split panes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
60d0242
fix(amicode): webview bridge fixes — ui clipboard util, connection ba…
aarontrowbridge Aug 1, 2026
437c377
merge: webview bridge fixes into the 1.18.10 consolidation
aarontrowbridge Aug 1, 2026
e4ceaae
fix(i18n): connectionLost/reconnected fallbacks in the 16 missing loc…
aarontrowbridge Aug 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All@@ -7,11 +8,14 @@ jayair
jlongster
kitlangton
kommander
ludvigrask
MrMushrooooom
nexxeln
R44VC0RP
rekram1-node
thdxr
simonklee
Slickstef11
usrnk1
vimtor
starptech
StarpTech
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -316,15 +315,13 @@ 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_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All@@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,10 +79,15 @@ jobs:

- name: Run unit tests
timeout-minutes: 45
run: bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test --output-logs=errors-only --log-order=grouped --log-prefix=task
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Check generated client
if: runner.os == 'Linux'
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff 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
4 changes: 1 addition & 3 deletions .opencode/opencode.jsonc
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
// TODO: flip back to `references` once a release containing the v1 `reference` migration ships.
// The release pipeline runs the latest published opencode against this file, which only knows `reference`.
"reference": {
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line numberDiff line numberDiff 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
2 changes: 2 additions & 0 deletions .prettierignore
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- 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.
- 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.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

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

Examples: `session-recovery`, `fix-scroll-state`, `regenerate-sdk`.

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All@@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- 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.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

Expand DownExpand Up@@ -131,7 +140,7 @@ const table = sqliteTable("session", {

## Testing

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

Expand All@@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- 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.
Loading
Loading