Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
901 commits
Select commit Hold shift + click to select a range
fe9a936
feat(server): expose runtime MCP controls over HTTP (#37712)
rekram1-node Jul 19, 2026
bef6cfb
feat(client): support opaque payload schemas (#37773)
opencode-agent[bot] Jul 19, 2026
f05d2ab
fix(tui): load root sessions in switcher (#37784)
opencode-agent[bot] Jul 19, 2026
86a468c
fix(tui): move agent cycling to shift-tab (#37706)
opencode-agent[bot] Jul 19, 2026
edc93ce
feat(simulation): expose semantic UI snapshots (#37802)
kitlangton Jul 19, 2026
71cb419
fix(simulation): validate semantic click identity (#37808)
kitlangton Jul 19, 2026
925c242
mini: add reconnect, forms, and shared targets (#37811)
simonklee Jul 19, 2026
6d32bc9
feat(simulation): control arbitrary tool lifecycles (#37816)
kitlangton Jul 19, 2026
fe0c74f
fix(cli): accept updated service on restart
thdxr Jul 19, 2026
391cfbc
fix(codemode): align string, array, and Date behavior (#37775)
rekram1-node Jul 20, 2026
2b8d199
fix(ai): buffer partial tool call identity (#37847)
opencode-agent[bot] Jul 20, 2026
b9525b5
fix(ai): expand context overflow patterns (#37848)
opencode-agent[bot] Jul 20, 2026
8b5655e
fix(ai): preserve compatible reasoning details (#37708)
rekram1-node Jul 20, 2026
deee40c
fix(codemode): parse canonical index keys (#37851)
rekram1-node Jul 20, 2026
0eb71d0
refactor(tui): extract shared frontend helpers (#37868)
simonklee Jul 20, 2026
75c7ac6
tui/mini: consolidate stream and panel internals (#37903)
simonklee Jul 20, 2026
a9895a1
fix(tui/mini): idle footer when session idles (#37910)
simonklee Jul 20, 2026
6702ce0
fix(tui): soften theme scale extremes (#37555)
jlongster Jul 20, 2026
3f4fb3f
fix(tui): show opencode2 continuation command (#37933)
opencode-agent[bot] Jul 20, 2026
7be95bc
feat(tui): support single-mode themes (#37930)
jlongster Jul 20, 2026
c7aa47c
feat(tui): implement session timeline
thdxr Jul 20, 2026
3da0dea
feat(codemode): expand standard library parity (#37943)
rekram1-node Jul 20, 2026
e8b19af
fix(tui): adapt file badge accent to theme mode (#37953)
jlongster Jul 20, 2026
6d50023
feat(codemode): complete regexp and math parity (#37955)
rekram1-node Jul 20, 2026
98c2907
feat(codemode): complete date parity (#37960)
rekram1-node Jul 20, 2026
61b7caa
fix(tui): make migrated selected background transparent (#37967)
opencode-agent[bot] Jul 20, 2026
f971aa0
refactor(server): inject database options
thdxr Jul 20, 2026
0aa4031
refactor(core): inject models options
thdxr Jul 20, 2026
79d0077
feat(tui): add categorical theme hues (#37985)
jlongster Jul 20, 2026
0b2e2cb
fix(core): ignore empty provider api keys
thdxr Jul 20, 2026
17c1e9b
refactor(ai): infer image provider options (#37948)
opencode-agent[bot] Jul 20, 2026
0c18d06
feat(codemode): add groupBy parity (#37992)
rekram1-node Jul 20, 2026
df1f42d
feat(ai): add xAI image generation (#37778)
opencode-agent[bot] Jul 20, 2026
642950a
fix(cli): isolate bun updater cache
thdxr Jul 20, 2026
8cb9361
feat(ai): add Google image generation (#37781)
opencode-agent[bot] Jul 20, 2026
c0ba62b
refactor(tui): expose theme colors as properties (#37995)
jlongster Jul 20, 2026
4c9a430
chore: merge dev into v2 (#37996)
opencode-agent[bot] Jul 20, 2026
fa4ec98
feat(ai): add Z.ai image generation (#37780)
opencode-agent[bot] Jul 20, 2026
e93fa06
feat(ai): support image-guided generation (#37998)
opencode-agent[bot] Jul 20, 2026
a2c4c7a
refactor(tui): migrate diff viewer to V2 theme (#37999)
jlongster Jul 20, 2026
455b5d3
fix(core): match dev patch behavior (#37709)
rekram1-node Jul 20, 2026
f5a487f
feat(codemode): add Set method parity (#38000)
rekram1-node Jul 20, 2026
ace77a5
refactor(server): centralize server options
thdxr Jul 21, 2026
0409e68
refactor(server): inject runtime options
thdxr Jul 21, 2026
9445b4d
refactor(server): inject config options
thdxr Jul 21, 2026
407ac2d
refactor(server): migrate host options
thdxr Jul 21, 2026
43c0838
refactor: isolate legacy flags
thdxr Jul 21, 2026
fc7e4cf
fix(server): preserve v1 auth compatibility
thdxr Jul 21, 2026
44b6938
removed packages/opencode
thdxr Jul 21, 2026
39fdd67
fix: remove legacy sdk from ci builds
thdxr Jul 21, 2026
065b108
feat(codemode): support JSON callbacks (#38006)
rekram1-node Jul 21, 2026
09a38f1
fix(server): allow authenticated CORS preflight (#38026)
Brendonovich Jul 21, 2026
63e2054
fix(core): improve patch errors (#38016)
rekram1-node Jul 21, 2026
a81c04f
feat(codemode): support labeled control flow (#38035)
rekram1-node Jul 21, 2026
eb4ff91
fix(core): compose successive patch updates (#38034)
rekram1-node Jul 21, 2026
96dc560
fix(core): accept padded patch markers (#38036)
rekram1-node Jul 21, 2026
e770415
fix(core): normalize CRLF patch lines (#38038)
rekram1-node Jul 21, 2026
7111f93
feat(codemode): support bounded async iteration (#38040)
rekram1-node Jul 21, 2026
fd97d78
test(app): stabilize offset observer test (#38044)
opencode-agent[bot] Jul 21, 2026
592ef74
mini: settle on wait and durable pending (#37984)
simonklee Jul 21, 2026
dd50d45
refactor(tui): simplify mini footer status line (#38112)
simonklee Jul 21, 2026
7243bd9
fix: preserve runtime option defaults (#38118)
thdxr Jul 21, 2026
e081075
refactor: extract shared util package (#37828)
thdxr Jul 21, 2026
cf2c1bf
refactor(core): break plugin host cycle (#38120)
opencode-agent[bot] Jul 21, 2026
3304e79
fix(tui): prevent autocomplete search flicker (#38128)
thdxr Jul 21, 2026
3ea8895
fix(core): enforce patch EOF anchors (#38039)
rekram1-node Jul 21, 2026
8d80365
refactor(codemode): simplify model-facing wording (#38042)
rekram1-node Jul 21, 2026
cf651bc
feat(cli): port ACP to V2 (#37907)
nexxeln Jul 21, 2026
69d7c2a
feat(util): configure package publishing (#38129)
thdxr Jul 21, 2026
023f76f
fix(core): refresh model catalog every five minutes (#38142)
opencode-agent[bot] Jul 21, 2026
99b2e78
fix(tui): improve responsive footer details (#38116)
simonklee Jul 21, 2026
dbfbb13
fix(core): authorize patch move destinations (#38133)
rekram1-node Jul 21, 2026
6f4b950
feat(codemode): support custom async iterators (#38141)
rekram1-node Jul 21, 2026
dd6c95f
mini: add quiet transcript settings (#38152)
simonklee Jul 21, 2026
9c38358
refactor: centralize client identity (#38148)
thdxr Jul 21, 2026
caf727e
fix(core): filter unsupported media inputs (#38145)
opencode-agent[bot] Jul 21, 2026
0405670
refactor(core): move database path policy (#38159)
thdxr Jul 21, 2026
6ec17e5
fix(core): align patch Unicode matching (#38160)
rekram1-node Jul 21, 2026
c4fa5e6
mini: add turn summary visibility setting (#38153)
simonklee Jul 21, 2026
7ec1b6e
feat(core): deliver CodeMode catalog through instructions (#38003)
rekram1-node Jul 21, 2026
e8d273a
mini: add monochrome ASCII mode (#38173)
simonklee Jul 21, 2026
128e255
fix(core): use shared app node import (#38181)
opencode-agent[bot] Jul 21, 2026
e6607fb
fix(core): authorize symlinks by lexical path (#38180)
opencode-agent[bot] Jul 21, 2026
77d3289
chore: merge dev into v2 (#38182)
opencode-agent[bot] Jul 21, 2026
1ea9137
fix(core): identify spawned subagents (#38189)
thdxr Jul 21, 2026
2ed8fe5
mini: add hideable footer details (#38192)
simonklee Jul 21, 2026
8de40be
feat(plugin): expose app metadata (#38179)
thdxr Jul 21, 2026
c2351e3
fix(ci): skip legacy artifacts on v2
thdxr Jul 21, 2026
c944048
feat(updates): add release control service
thdxr Jul 21, 2026
da35eac
fix(sdk): build without legacy sources
thdxr Jul 22, 2026
a0a6963
fix(core): discover Copilot API endpoint (#38184)
rekram1-node Jul 22, 2026
f683eef
feat(core): add session warming
thdxr Jul 22, 2026
c821d49
feat(updates): add artifact build endpoints
thdxr Jul 22, 2026
e84938b
fix(core): make session warming observable
thdxr Jul 22, 2026
c8a4045
feat(codemode): support generator functions (#38172)
rekram1-node Jul 22, 2026
80dc21d
fix(cli): use hosted updater API (#38223)
opencode-agent[bot] Jul 22, 2026
6b9136e
fix(tui): inherit elevated tool theme (#38224)
jlongster Jul 22, 2026
59ad593
fix(core): reduce snapshot repository setup (#38162)
opencode-agent[bot] Jul 22, 2026
69c05ae
feat(codemode): assimilate promise thenables (#38237)
rekram1-node Jul 22, 2026
23483ea
feat(ai): support custom reasoning fields (#38227)
rekram1-node Jul 22, 2026
ca6da05
fix(tui): show skill name in mini tool output (#38250)
simonklee Jul 22, 2026
691a7d9
feat(tui): add compact command to mini (#38251)
simonklee Jul 22, 2026
8bb1cfa
fix: defer catalog validation to session execution (#38258)
simonklee Jul 22, 2026
6e826f3
fix(tui): hide project commands from mini palette (#38259)
simonklee Jul 22, 2026
ced3d5e
fix(tui): submit prompt when resuming session (#38260)
simonklee Jul 22, 2026
0e08b73
fix(tui): set mini terminal title on Linux (#38261)
simonklee Jul 22, 2026
794137b
refactor(tui): narrow mini compatibility surfaces (#38262)
simonklee Jul 22, 2026
dc9fd12
test(cli): cover interactive command flags (#38273)
simonklee Jul 22, 2026
58d18be
oc mini v2 (#38278)
simonklee Jul 22, 2026
648183c
fix(tui): quiet hidden mini footer (#38279)
simonklee Jul 22, 2026
a3e2cc0
feat(tui): add mini agent switching (#38287)
simonklee Jul 22, 2026
e12ec86
fix(tui): render mini markdown in mono mode (#38313)
simonklee Jul 22, 2026
5841b04
tui: resolve default mini footer agent (#38315)
simonklee Jul 22, 2026
8fad133
feat(tui): add mini splash setting (#38317)
simonklee Jul 22, 2026
4204b9d
fix(tui): show providers in Mini model search (#38321)
simonklee Jul 22, 2026
5a9ed4d
fix: make tool progress live-only (#38217)
kitlangton Jul 22, 2026
0347481
test(core): stabilize wellknown event subscriptions (#38331)
opencode-agent[bot] Jul 22, 2026
aea36d7
fix(tui): prevent duplicate message forks (#38240)
opencode-agent[bot] Jul 22, 2026
dba5da7
fix(tui): restore shell mode styling (#38231)
jlongster Jul 22, 2026
b91dd78
test(core): remove source text assertions (#38342)
opencode-agent[bot] Jul 22, 2026
7a1f976
feat(core): compact durable tool metadata (#38343)
kitlangton Jul 22, 2026
89e3141
fix(core): preserve cache for session generation
thdxr Jul 22, 2026
532292b
fix(core): reject malformed patch hunks (#38188)
rekram1-node Jul 22, 2026
8a36abd
feat(tui): add developer debug bar (#38359)
jlongster Jul 22, 2026
2271f9b
feat(ai): support PDF inputs (#38253)
rekram1-node Jul 22, 2026
88f572c
refactor(tui): migrate selection views to V2 theme (#38001)
jlongster Jul 22, 2026
5913c1d
chore: merge dev into v2 (#38377)
opencode-agent[bot] Jul 22, 2026
4e067a2
test(core): remove duplicate patch integration tests (#38389)
opencode-agent[bot] Jul 22, 2026
36979c9
test(core): consolidate provider factory coverage (#38390)
opencode-agent[bot] Jul 22, 2026
b6e14b5
refactor(tui): finish V2 theme migration (#38383)
jlongster Jul 22, 2026
381f6c4
docs(tui): add generated V2 theme reference (#38396)
jlongster Jul 22, 2026
a817fe5
fix(schema): loosen agent color response
thdxr Jul 22, 2026
d86f732
refactor(tui): generate syntax from V2 theme (#38397)
jlongster Jul 23, 2026
48bcbd0
fix(ai): handle incomplete responses without reasons (#38374)
rekram1-node Jul 23, 2026
203b9f5
fix(core): load dynamic models for generation (#38401)
kitlangton Jul 23, 2026
f1f0f47
fix(core): migrate named agent colors (#38414)
jlongster Jul 23, 2026
6e8aefc
fix(ai): normalize Bedrock cache usage (#38427)
opencode-agent[bot] Jul 23, 2026
b6f85c2
fix(core): default custom model capabilities (#38449)
opencode-agent[bot] Jul 23, 2026
52c98a4
mini: add replay settings to cli config (#38487)
simonklee Jul 23, 2026
5b1321a
feat(tui): add turn token usage diagnostics (#38398)
jlongster Jul 23, 2026
bbe985b
chore(cli): upgrade acp sdk (#38316)
nexxeln Jul 23, 2026
833dd2e
refactor(tui): simplify turn usage reduction (#38514)
jlongster Jul 23, 2026
466b75b
feat(cli): expand acp v1 support (#38325)
nexxeln Jul 23, 2026
8f3465c
refactor(tui): load native V2 themes (#38430)
jlongster Jul 23, 2026
74e92f7
refactor(ai): remove unused response format (#38540)
opencode-agent[bot] Jul 23, 2026
ad596fb
chore(core): upgrade fff to 0.10.1 (#38545)
opencode-agent[bot] Jul 23, 2026
360e7b4
feat(tui): expose debug settings (#38546)
opencode-agent[bot] Jul 23, 2026
18fccac
fix(tui): preserve first message in new sessions (#38542)
opencode-agent[bot] Jul 23, 2026
2c81412
fix(ai): keep tools when Anthropic tool_choice is none (#38553)
rekram1-node Jul 23, 2026
2a9f8e3
fix(tui): manage focus in devtools panels (#38555)
opencode-agent[bot] Jul 23, 2026
193f6be
fix(ai): keep tools when Gemini tool choice is none (#38556)
rekram1-node Jul 23, 2026
8cac010
fix(core): stop forcing toolChoice none on session.generate (#38557)
rekram1-node Jul 23, 2026
79c1544
refactor(tools): unify tool APIs and result handling (#38367)
kitlangton Jul 23, 2026
02f2725
chore: merge dev into v2 (#38563)
opencode-agent[bot] Jul 23, 2026
e7ecee5
fix(core): isolate tool hook outcomes (#38571)
kitlangton Jul 23, 2026
6401eea
feat(ai): preserve raw finish reasons (#38423)
rekram1-node Jul 23, 2026
8d9727b
fix(core): improve patch errors (#38369)
rekram1-node Jul 23, 2026
bb3f4cc
fix(codemode): stabilize catalog ordering (#38588)
kitlangton Jul 24, 2026
c228fc4
fix(core): stabilize tool definition ordering (#38590)
kitlangton Jul 24, 2026
7456598
fix(core): share one tool snapshot per request (#38596)
kitlangton Jul 24, 2026
ee69a91
docs: add ideal pseudocode skill (#38611)
opencode-agent[bot] Jul 24, 2026
65c5c7e
feat(ai): round-trip Anthropic redacted thinking blocks (#38614)
rekram1-node Jul 24, 2026
ea010ab
feat(ai): round-trip Bedrock redacted reasoning (#38623)
rekram1-node Jul 24, 2026
00f063b
mini: pack statusline by content width (#38646)
simonklee Jul 24, 2026
4184149
mini: monochrome rendered markdown only (#38656)
simonklee Jul 24, 2026
edaee14
mini: reserve headroom before showing usage (#38659)
simonklee Jul 24, 2026
c5680a2
refactor(ai): make OpenAI Responses extend Open Responses (#38681)
nexxeln Jul 24, 2026
c06186a
fix(ai): forward Anthropic provider options (#38694)
nexxeln Jul 24, 2026
d90da82
refactor(ai): normalize provider option parsing (#38695)
nexxeln Jul 24, 2026
0374d29
refactor(ai): colocate provider options (#38698)
nexxeln Jul 24, 2026
35d31d8
refactor(ai): remove dead LLM exports (#38700)
nexxeln Jul 24, 2026
0f3c301
refactor(core): simplify session runner loop and pending input scopes…
kitlangton Jul 24, 2026
835149e
refactor(core): select small model without sorting (#38707)
kitlangton Jul 24, 2026
6e4a972
refactor(core): clean up callModel readability (#38706)
kitlangton Jul 24, 2026
c64d813
fix(core): report truncated glob results (#38631)
rekram1-node Jul 24, 2026
4605308
feat(core): render CodeMode catalog deltas from structured snapshots …
rekram1-node Jul 24, 2026
5aa276c
refactor(core): mint assistant message identity before the step runs …
kitlangton Jul 24, 2026
4f201f8
fix(ai): align Bedrock stream handling (#38712)
rekram1-node Jul 24, 2026
7ab3dd0
refactor(core): unify tool fiber bookkeeping into one owned structure…
kitlangton Jul 24, 2026
68ef893
fix(core): start all suspended sessions promptly (#38720)
kitlangton Jul 24, 2026
2200d10
refactor(core): name the unsettled-tool sweep scope and untangle host…
kitlangton Jul 24, 2026
9b640cf
test(core): remove flaky npm install test (#38729)
opencode-agent[bot] Jul 24, 2026
993f046
fix(ai): layer prompt cache breakpoints (#38725)
kitlangton Jul 24, 2026
5ae2d6d
refactor(core): settle declined tool calls durably with typed reasons…
kitlangton Jul 24, 2026
423fad7
fix(core): authorize external glob paths (#38714)
rekram1-node Jul 24, 2026
b09a066
fix(ai): report OpenAI cache writes (#38735)
kitlangton Jul 24, 2026
ee5460a
fix(codemode): report interrupted tool calls (#38741)
rekram1-node Jul 24, 2026
3193f3a
fix(tui): flag likely cache busts accurately (#38727)
kitlangton Jul 24, 2026
d66d0cb
fix(core): clarify Code Mode tool availability (#38745)
rekram1-node Jul 24, 2026
49bec25
fix(ai): align Anthropic stream handling (#38733)
rekram1-node Jul 24, 2026
b317471
fix(core): stream Code Mode tool progress (#38718)
rekram1-node Jul 24, 2026
d1d9701
refactor(core): move static Code Mode guidance (#38746)
rekram1-node Jul 24, 2026
13b6845
fix(core): scope MCP execute guidance to Code Mode (#38753)
rekram1-node Jul 24, 2026
c7d7f61
fix(ai): preserve Anthropic usage metadata (#38751)
rekram1-node Jul 24, 2026
1291dc1
fix(core): clarify code mode tool boundary (#38785)
rekram1-node Jul 25, 2026
454145f
fix(tui): preserve workspace while reconnecting (#38788)
opencode-agent[bot] Jul 25, 2026
8281489
fix(tui): preserve workspace while reconnecting (#38788)
opencode-agent[bot] Jul 25, 2026
b2afb35
refactor(core): settle steps lock-free by joining tool fibers first (…
kitlangton Jul 25, 2026
33390cc
fix(core): keep execute tool cache stable (#38783)
rekram1-node Jul 25, 2026
02c66c5
docs(core): fix OpenCode skill links
thdxr Jul 25, 2026
cce8bb0
fix(core): clarify empty Code Mode guidance (#38883)
rekram1-node Jul 25, 2026
c5bf4ed
fix(ai): preserve response message phases (#38777)
rekram1-node Jul 25, 2026
1e35d33
fix(codemode): search nested namespaces (#38887)
rekram1-node Jul 25, 2026
f753103
fix(core): reject file glob roots (#38890)
rekram1-node Jul 25, 2026
9eea5bc
fix(core): tweak glob tool description/parameters (#38899)
rekram1-node Jul 25, 2026
7d8f1bd
tweak(core): simplify skill tool description (#38900)
rekram1-node Jul 25, 2026
203a061
feat(www): migrate docs to Blume
thdxr Jul 26, 2026
56a9c01
fix(www): mark deploy script as module
thdxr Jul 26, 2026
9840f63
chore(www): simplify worker routes
thdxr Jul 26, 2026
c7871e1
fix(www): remove deployment environment gate
thdxr Jul 26, 2026
2ddc91a
fix(tui): show shell working directory in prompt
thdxr Jul 26, 2026
efb629a
feat(core): add pluggable web search (#35558)
nexxeln Jul 26, 2026
79c7e94
fix(core): clarify custom question answers (#38919)
rekram1-node Jul 26, 2026
7affee5
fix(core): harden grep search behavior (#38922)
rekram1-node Jul 26, 2026
28f4284
fix(www): canonicalize production routes
thdxr Jul 26, 2026
8086540
refactor(sdk): remove local legacy package
thdxr Jul 26, 2026
0fd73a2
fix(core): align grep behavior and guidance (#38999)
rekram1-node Jul 26, 2026
8db7487
refactor(core): consolidate tool architecture
thdxr Jul 27, 2026
5592f52
fix(app): update remote sdk contracts
thdxr Jul 27, 2026
863645c
test(core): update grep error assertion
thdxr Jul 27, 2026
4216d35
fix(server): declare schema dependency (#39043)
rekram1-node Jul 27, 2026
93cb113
fix(util): declare node tracing dependency (#39050)
rekram1-node Jul 27, 2026
9b49e7b
test(core): implement catalog host model list (#39053)
rekram1-node Jul 27, 2026
0261f04
fix(core): handle oversized ripgrep matches
thdxr Jul 27, 2026
f14d78a
tui: skip abort on mini session close (#39067)
simonklee Jul 27, 2026
766aaf4
tui: add settings to command palette search (#39058)
simonklee Jul 27, 2026
9a55d12
tui: render mini compaction boundaries (#39103)
simonklee Jul 27, 2026
9977ef0
refactor(core): tag read outputs (#39122)
rekram1-node Jul 27, 2026
7d4de3d
fix(core): clarify web search provider prompt (#39123)
nexxeln Jul 27, 2026
65d2a4e
feat(core): improve read tool parity (#39126)
rekram1-node Jul 27, 2026
1f2c59a
fix(core): commit state before finalize publishes (#38983)
kitlangton Jul 27, 2026
33e3d1e
fix(core): tolerate missing tool input schemas (#39130)
opencode-agent[bot] Jul 27, 2026
02c37c4
feat(core): expose config changes stream (#39131)
kitlangton Jul 27, 2026
7eb51d0
feat(core): diagnose prompt cache prefix changes (#39139)
kitlangton Jul 27, 2026
f570080
fix(tui): preserve subagent list position (#39156)
opencode-agent[bot] Jul 27, 2026
713658c
test(core): add config and watcher test services (#39157)
kitlangton Jul 27, 2026
92807d0
feat(core): reload commands from config change feed (#39160)
kitlangton Jul 27, 2026
856c569
feat(core): reload agents from config change feed (#39167)
kitlangton Jul 27, 2026
1b39d36
fix(core): align command reload pipeline and repair plugin fixture (#…
kitlangton Jul 27, 2026
6da2f3c
feat(core): improve read model output (#39146)
rekram1-node Jul 27, 2026
4e4cf9e
refactor(tui): extract event stream connection (#38872)
jlongster Jul 27, 2026
4f622fa
fix(tui): reference inferred hues in migrated themes (#39183)
jlongster Jul 27, 2026
3112431
fix(core): simplify tool schemas (#39184)
rekram1-node Jul 27, 2026
9200e35
feat(core): improve edit tool guidance (#39198)
rekram1-node Jul 27, 2026
8b4b0d6
feat(core): reload discovered plugins from source edits (#39174)
kitlangton Jul 27, 2026
4333a44
refactor(core): manage watcher lifecycle with RcMap (#39203)
kitlangton Jul 28, 2026
f15398e
feat(core): improve edit tool output (#39211)
rekram1-node Jul 28, 2026
470e360
test(core): align tool contract expectations (#39172)
kitlangton Jul 28, 2026
775f24f
test(core): add native watcher command reload test (#39216)
kitlangton Jul 28, 2026
9dc68e9
fix(core): bound ripgrep search execution with default wall-clock dea…
loulanyue Jul 28, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
packages/core/migration/**/snapshot.json linguist-generated
packages/core/src/database/migration.gen.ts linguist-generated
packages/core/src/**/*.txt text eol=lf
6 changes: 5 additions & 1 deletion .github/TEAM_MEMBERS
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
adamdotdevin
arvsrn
Brendonovich
fwang
Hona
Expand All @@ -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 number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ inputs:
runs:
using: "composite"
steps:
# node-gyp@latest (invoked via bunx for native install scripts) requires Node >=22;
# some runner images ship an older system Node on PATH
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "24"

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

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

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

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

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

const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
Expand Down
37 changes: 37 additions & 0 deletions .github/workflows/deploy-www.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: deploy-www

on:
push:
branches:
- dev
- v2
workflow_dispatch:

concurrency:
group: deploy-www-${{ github.ref_name }}
cancel-in-progress: false

permissions:
contents: read

jobs:
deploy:
if: github.repository == 'anomalyco/opencode' && (github.ref_name == 'dev' || github.ref_name == 'v2')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0

- uses: ./.github/actions/setup-bun

- name: Build
working-directory: packages/www
run: bun run build
env:
BLUME_ENV: ${{ github.ref_name == 'v2' && 'production' || 'dev' }}
CLOUDFLARE_ENV: ${{ github.ref_name == 'v2' && 'production' || 'dev' }}

- name: Deploy
working-directory: packages/www
run: bun run deploy
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
46 changes: 45 additions & 1 deletion .github/workflows/duplicate-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,31 @@ jobs:
with:
fetch-depth: 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

This project has three issue templates that every issue MUST use one of:
Expand Down
84 changes: 78 additions & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
branches:
- ci
- dev
- v2
- beta
- fix/npm-native-binary-install
- snapshot-*
Expand All @@ -31,6 +32,9 @@ permissions:
contents: write
packages: write

env:
OPENCODE_CHANNEL: ${{ (github.ref_name == 'v2' && 'next') || '' }}

jobs:
version:
runs-on: blacksmith-4vcpu-ubuntu-2404
Expand Down Expand Up @@ -86,25 +90,34 @@ jobs:
opencode-app-id: ${{ vars.OPENCODE_APP_ID }}
opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }}

- name: Build
- name: Build legacy CLI
if: github.ref_name != 'v2'
run: ./packages/opencode/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }}
env:
OPENCODE_VERSION: ${{ needs.version.outputs.version }}
OPENCODE_RELEASE: ${{ needs.version.outputs.release }}
GH_REPO: ${{ needs.version.outputs.repo }}
GH_TOKEN: ${{ steps.committer.outputs.token }}

- name: Build preview CLI
id: build
run: |
./packages/opencode/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }}
./packages/cli/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }}
run: ./packages/cli/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }}
env:
OPENCODE_VERSION: ${{ needs.version.outputs.version }}
OPENCODE_RELEASE: ${{ needs.version.outputs.release }}
GH_REPO: ${{ needs.version.outputs.repo }}
GH_TOKEN: ${{ steps.committer.outputs.token }}

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: github.ref_name != 'v2'
with:
name: opencode-cli
path: |
packages/opencode/dist/opencode-darwin*
packages/opencode/dist/opencode-linux*

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: github.ref_name != 'v2'
with:
name: opencode-cli-windows
path: packages/opencode/dist/opencode-windows*
Expand All @@ -117,12 +130,61 @@ jobs:
outputs:
version: ${{ needs.version.outputs.version }}

build-node-cli:
needs: version
if: github.repository == 'anomalyco/opencode'
strategy:
fail-fast: false
matrix:
settings:
- target: linux-arm64
host: blacksmith-4vcpu-ubuntu-2404-arm
- target: linux-x64
host: blacksmith-4vcpu-ubuntu-2404
- target: darwin-arm64
host: macos-26
- target: windows-arm64
host: blacksmith-4vcpu-windows-2025
- target: windows-x64
host: blacksmith-4vcpu-windows-2025
runs-on: ${{ matrix.settings.host }}
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0

- uses: ./.github/actions/setup-bun
with:
install-flags: --os=* --cpu=*

- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "26.4.0"

- name: Build
run: bun packages/cli/script/build-node.ts --target=${{ matrix.settings.target }} --skip-install --outdir=dist/node
env:
OPENCODE_VERSION: ${{ needs.version.outputs.version }}
OPENCODE_RELEASE: ${{ needs.version.outputs.release }}

- name: Verify service lifecycle
if: matrix.settings.target != 'windows-arm64'
working-directory: packages/cli
run: bun run script/service-smoke.ts --node

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: opencode-node-cli-${{ matrix.settings.target }}
path: packages/cli/dist/node/cli-node-*
if-no-files-found: error

sign-cli-windows:
needs:
- build-cli
- version
runs-on: blacksmith-4vcpu-windows-2025
if: github.repository == 'anomalyco/opencode'
if: github.repository == 'anomalyco/opencode' && github.ref_name != 'v2'
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
Expand Down Expand Up @@ -221,7 +283,7 @@ jobs:
needs:
- build-cli
- version
if: github.repository == 'anomalyco/opencode'
if: github.repository == 'anomalyco/opencode' && github.ref_name != 'v2'
continue-on-error: false
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
Expand Down Expand Up @@ -409,6 +471,7 @@ jobs:
needs:
- version
- build-cli
- build-node-cli
- sign-cli-windows
- build-electron
if: always() && !failure() && !cancelled()
Expand Down Expand Up @@ -437,16 +500,19 @@ jobs:
registry-url: "https://registry.npmjs.org"

- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
if: github.ref_name != 'v2'
with:
name: opencode-cli
path: packages/opencode/dist

- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
if: github.ref_name != 'v2'
with:
name: opencode-cli-windows
path: packages/opencode/dist

- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
if: github.ref_name != 'v2'
with:
name: opencode-cli-signed-windows
path: packages/opencode/dist
Expand All @@ -456,6 +522,12 @@ jobs:
name: opencode-preview-cli
path: packages/cli/dist

- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
pattern: opencode-node-cli-*
path: packages/cli/dist/node
merge-multiple: true

- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
if: needs.version.outputs.release
with:
Expand Down
Loading
Loading