Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
447 commits
Select commit Hold shift + click to select a range
62af66a
fix(tui): distinguish variant switch notices (#35315)
kitlangton Jul 4, 2026
9daa4d8
fix(tui): reconcile session state after reconnect (#35262)
kitlangton Jul 4, 2026
610e618
fix(tui): clear completed background shell status (#35320)
kitlangton Jul 4, 2026
945d1c8
fix(core): bound recursive file watching (#35323)
kitlangton Jul 4, 2026
8f4b62e
fix(core): report missing search paths (#35337)
kitlangton Jul 4, 2026
c590e27
feat(core): add grouped and deferred tool registration (#35232)
rekram1-node Jul 4, 2026
b99759c
fix(core): enforce mcp tool permissions (#35345)
rekram1-node Jul 4, 2026
ba07481
fix(run): restore subprocess output contracts
simonklee Jul 4, 2026
57fb3e5
fix(run): align mini with current session contracts (#35354)
simonklee Jul 4, 2026
d65ecd4
feat(core): expose deferred tools through execute (#35361)
rekram1-node Jul 4, 2026
b8efb33
feat(codemode): add OpenAPI tool adapter (#35362)
rekram1-node Jul 4, 2026
bb3b6a2
fix(protocol): expose MCP tool change events (#35373)
kitlangton Jul 5, 2026
905123b
fix(protocol): keep internal events off SSE (#35378)
kitlangton Jul 5, 2026
44b182f
fix(core): validate scalar newtypes (#35381)
kitlangton Jul 5, 2026
29e8502
fix(tui): align integration empty state (#35414)
rekram1-node Jul 5, 2026
391aa38
test(core): serve skill fixtures locally (#35429)
rekram1-node Jul 5, 2026
f950497
refactor(codemode): remove generic agent tool (#35420)
rekram1-node Jul 5, 2026
f9d1d3b
refactor(codemode): namespace public types (#35435)
rekram1-node Jul 5, 2026
a9b7bd9
feat(core): manage configurable plugin generations
thdxr Jul 5, 2026
c3d26c4
feat(core): improve runtime observability
thdxr Jul 5, 2026
a759788
feat(server): add loaded locations debug endpoint
thdxr Jul 5, 2026
baacb2e
fix(core): tolerate invalid OTLP configuration
thdxr Jul 5, 2026
08741f6
fix(core): scope observability to server
thdxr Jul 5, 2026
6ffecf9
fix(core): reload local plugins on file changes
thdxr Jul 5, 2026
33cb536
feat(plugin): publish generation updates
thdxr Jul 5, 2026
7b88de4
chore(client): publish client package
thdxr Jul 5, 2026
652e8ff
fix(client): resolve codegen workspace version
thdxr Jul 5, 2026
5bcf8d5
feat(tui): render session forms (#35421)
rekram1-node Jul 6, 2026
780c99b
refactor(core): route questions through forms (#35422)
rekram1-node Jul 6, 2026
50a762e
fix(mcp): preserve metadata across paginated tools (#35500)
rekram1-node Jul 6, 2026
4e019ba
fix(core): expose MCP output schemas to code mode (#35502)
rekram1-node Jul 6, 2026
e6e951b
docs: rebuild v2 documentation
thdxr Jul 6, 2026
eed23d8
feat(api): publish v2 reference
thdxr Jul 6, 2026
147da5d
test(opencode): update project service stub
thdxr Jul 6, 2026
fb75ea2
mini: fix default model (#35515)
simonklee Jul 6, 2026
32cf36d
mini migrate to v2 (#35526)
simonklee Jul 6, 2026
0bba8c7
cli/mini: fix run failure handling (#35539)
simonklee Jul 6, 2026
41d11a8
cli: demote version mismatch to warning for now (#35548)
simonklee Jul 6, 2026
175d200
V2 opentui upgrade (#35544)
simonklee Jul 6, 2026
7f008df
fix(codemode): improve prompting (#35509)
rekram1-node Jul 6, 2026
04e8801
fix(tui): soften interrupted step styling (#35466)
opencode-agent[bot] Jul 6, 2026
5b2d90a
feat(codemode): expand standard library support (#35566)
rekram1-node Jul 6, 2026
f406fed
fix(cli): ignore version mismatch on reconnect
thdxr Jul 6, 2026
4cee5bd
refactor(codemode): split interpreter and stdlib (#35572)
rekram1-node Jul 6, 2026
ff499c3
refactor(api): remove watermark sync surface
thdxr Jul 6, 2026
f9442e7
test(opencode): update active session mock
thdxr Jul 6, 2026
06dcf3f
fix(tui): remove committed undo messages
thdxr Jul 6, 2026
2830176
fix(plugin): reload late SDK plugins (#35576)
kitlangton Jul 6, 2026
f2f6243
refactor(core): unify live event subscriptions (#35578)
kitlangton Jul 6, 2026
1a52e11
refactor(core): remove unused session watermarks (#35579)
kitlangton Jul 6, 2026
91f1815
refactor(core): rename system context to instructions (#35583)
kitlangton Jul 6, 2026
c13f06c
feat(tui): use canonical prompt attachments
thdxr Jul 6, 2026
4d100de
feat(core): resolve prompt attachments
thdxr Jul 6, 2026
36d17c3
fix(sdk): expose prompt input contract
thdxr Jul 6, 2026
6ffe61b
feat(simulation): isolate filesystem and disconnect llm (#35590)
jlongster Jul 6, 2026
dc99c60
feat(v2): expose canonical schema contracts (#35595)
kitlangton Jul 6, 2026
0e1c041
fix(codemode): align mutable JavaScript semantics (#35598)
kitlangton Jul 6, 2026
d603eed
feat(codemode): support destructuring assignment (#35600)
kitlangton Jul 6, 2026
e57d9ca
feat(core): flatten provider config and load native packages (#35563)
nexxeln Jul 6, 2026
f87998f
fix(cli): align prompt attachment mentions
thdxr Jul 6, 2026
9e0d397
chore: merge dev into v2 (#35591)
rekram1-node Jul 6, 2026
9c2842b
fix(tui): track pending session inputs
thdxr Jul 6, 2026
f044def
fix(tui): detect backgrounded subagents
thdxr Jul 6, 2026
754dd57
fix(codemode): preserve async callback semantics (#35603)
kitlangton Jul 6, 2026
8942f97
sync
thdxr Jul 6, 2026
df47187
fix(codemode): reject Promise.all immediately (#35604)
kitlangton Jul 6, 2026
ba24037
feat(codemode): math parity (#35609)
rekram1-node Jul 6, 2026
8dc9ac0
fix(tui): sync v2 terminal title (#35610)
rekram1-node Jul 6, 2026
b046bbe
feat(codemode): support loop sequence syntax (#35618)
kitlangton Jul 6, 2026
bf01264
feat(core): finalize session event lifecycle (#35272)
kitlangton Jul 6, 2026
984430c
chore: add typecheck profiling (#35622)
rekram1-node Jul 6, 2026
bfdbf43
fix(core): clarify MCP timeout budgets (#35626)
rekram1-node Jul 6, 2026
e312f0d
fix(tui): provide location for home mentions
thdxr Jul 6, 2026
96717c1
feat(tui): improve session fork handling
thdxr Jul 6, 2026
c0ea1a4
feat(tui): support session deletion
thdxr Jul 6, 2026
79301fb
chore(cli): inline build sourcemaps
thdxr Jul 6, 2026
7668eb7
fix(tui): normalize attachment labels
thdxr Jul 6, 2026
5979038
fix(core): support unlimited shell timeouts
thdxr Jul 6, 2026
fd4497e
fix(tui): route shell termination by location
thdxr Jul 6, 2026
bb6ee0a
docs(codemode): document loop syntax (#35631)
kitlangton Jul 6, 2026
bd94765
docs: add v2 configuration reference
thdxr Jul 7, 2026
04b6734
feat(core): add durable compaction barrier (#35371)
kitlangton Jul 7, 2026
fcb1d4b
feat(simulation): add named drive instances (#35648)
jlongster Jul 7, 2026
93b7ca9
fix(tui): align switch reminders (#35637)
opencode-agent[bot] Jul 7, 2026
b6a2912
refactor(simulation): type RPC request payloads (#35734)
jlongster Jul 7, 2026
e3a39b2
fix(core): lower failed reasoning to text (#35735)
kitlangton Jul 7, 2026
f488089
fix: preserve compaction files and classify Z.AI overflow (#35747)
rekram1-node Jul 7, 2026
8deb0e5
fix(core): preserve SDK plugins across location eviction (#35725)
kitlangton Jul 7, 2026
dd1c007
docs
thdxr Jul 7, 2026
6c065ca
feat(simulation): render driven UI screenshots and videos (#35739)
jlongster Jul 7, 2026
b2ce195
fix(core): normalize Location.Ref keys in LocationServiceMap (#35757)
kitlangton Jul 7, 2026
d0733f8
fix(codemode): return final top-level expression (#35759)
opencode-agent[bot] Jul 7, 2026
66a8d83
feat(core): support MCP resources (#35656)
rekram1-node Jul 7, 2026
1fb2837
feat(codemode): expand numeric standard library (#35749)
rekram1-node Jul 7, 2026
cb18a42
docs(codemode): clarify implicit return guidance (#35763)
opencode-agent[bot] Jul 7, 2026
3e57b43
feat(session): support admit-only synthetic messages (#35774)
jlongster Jul 7, 2026
947bbf9
feat(mcp): expose resource catalog API (#35773)
rekram1-node Jul 7, 2026
f86e1cc
fix(codemode): preserve collection value identity (#35776)
rekram1-node Jul 7, 2026
da68e28
feat(tui): wire move session command (#35203)
jlongster Jul 7, 2026
81f6e06
feat: enable background subagents by default
kitlangton Jul 7, 2026
910e37f
fix: update v2 session usage metrics (#35468)
rekram1-node Jul 7, 2026
5db320b
refactor: rename apply_patch tool
thdxr Jul 7, 2026
52ad916
fix(tui): restore permissions on reconnect
thdxr Jul 7, 2026
9c54291
fix(tui): restore forms on reconnect
kitlangton Jul 7, 2026
3100701
fix(tui): restore prompt context usage (#35795)
rekram1-node Jul 7, 2026
521ea87
fix(core): retain reasoning delta state (#35758)
kitlangton Jul 7, 2026
e25a724
test(tui): cover patch diff display aliases (#35810)
kitlangton Jul 7, 2026
4f976bc
feat(plugin): add session request hook (#35794)
thdxr Jul 7, 2026
e1abf59
fix(core): provide PluginHooks in plugin test layer (#35811)
thdxr Jul 8, 2026
3379e44
refactor(core): rename ApplyPatchTool to PatchTool
thdxr Jul 8, 2026
eb661e6
fix(core): settle unadvertised tool calls and repair session hook tes…
kitlangton Jul 8, 2026
d27746e
test(core): simplify runner test fixtures (#35832)
kitlangton Jul 8, 2026
ed6ad27
refactor(schema): apply session review decisions (#35793)
kitlangton Jul 8, 2026
e96c24c
test(core): fix mutable plugin fixture (#35837)
opencode-agent[bot] Jul 8, 2026
ed4f833
fix(core): preserve provider metadata namespaces (#35817)
opencode-agent[bot] Jul 8, 2026
8d00a51
feat(simulation): support multiple tool calls (#35861)
jlongster Jul 8, 2026
86e3828
fix(core): watch location only when vcs is present
thdxr Jul 8, 2026
cc29f86
fix(tui): paginate session history
thdxr Jul 8, 2026
3cbcd8d
feat(llm): complete provider package entrypoints (#35907)
nexxeln Jul 8, 2026
bf15c97
Revert "fix(tui): paginate session history"
Jul 8, 2026
4d2b06f
docs: prohibit bypassing git hooks
thdxr Jul 8, 2026
c6156f1
feat(simulation): stream UI recordings (#35909)
jlongster Jul 8, 2026
8b634e4
refactor(tui): simplify client data state
thdxr Jul 8, 2026
05e8d5b
fix(core): preserve prompt attachment order (#35921)
rekram1-node Jul 8, 2026
3dd2909
feat(http-recorder): sync recorder v0.3 (#35619)
kitlangton Jul 8, 2026
dd842f9
fix(cli): elect one service process
thdxr Jul 8, 2026
b3cf749
fix(tui): show resolved skill name
thdxr Jul 8, 2026
e1d72fa
fix(simulation): stabilize screenshot artifacts (#35933)
jlongster Jul 8, 2026
09553d4
refactor(simulation): remove filesystem layers (#35938)
jlongster Jul 8, 2026
5b39972
fix(core): await initial plugin readiness (#35755)
kitlangton Jul 8, 2026
cedf365
feat(tui): add structured logging
thdxr Jul 8, 2026
88925ec
fix(tui): allow callers without log sink
thdxr Jul 8, 2026
99e5230
feat(core): discover ecosystem skill directories (#35956)
jlongster Jul 8, 2026
212c9f9
test(codemode): add Test262 string coverage (#35940)
rekram1-node Jul 8, 2026
19f42f7
feat(v2/cli): add console login (#35969)
simonklee Jul 8, 2026
79415f6
feat(tui): revamp session export (#35971)
jlongster Jul 8, 2026
b44a981
feat(core): global form support (#35959)
rekram1-node Jul 8, 2026
ec8eea7
test(codemode): add Test262 array coverage (#35965)
rekram1-node Jul 8, 2026
7698a5e
feat: add server link sharing
thdxr Jul 8, 2026
2347f4d
fix(tui): simplify server link title
thdxr Jul 8, 2026
687dbba
chore: merge dev into v2 (#35962)
opencode-agent[bot] Jul 8, 2026
0590819
fix(server): absorb healthy event bursts
kitlangton Jul 9, 2026
7eea971
fix(tui): restore prompt after undo (#35987)
rekram1-node Jul 9, 2026
984cab7
feat(core): generalize session input inbox (#36005)
kitlangton Jul 9, 2026
be7a684
refactor(cli): unify server endpoint handling
thdxr Jul 9, 2026
cccd013
refactor(cli): centralize server resolution
thdxr Jul 9, 2026
67f2393
refactor(cli): parse variants from model refs
thdxr Jul 9, 2026
d4155f2
refactor(cli): simplify mini arguments
thdxr Jul 9, 2026
7feefb6
refactor: remove todo tool (#35989)
rekram1-node Jul 9, 2026
389c866
docs(codemode): add interpreter doc (#36026)
rekram1-node Jul 9, 2026
aa0e626
fix(core): defer permission rejection cleanup (#36067)
kitlangton Jul 9, 2026
855a956
feat(simulation): add literal screen text matching (#36085)
jlongster Jul 9, 2026
b642f9c
feat(tui): log event stream connections (#35973)
jlongster Jul 9, 2026
85fdb3b
refactor(core): optimize location startup
thdxr Jul 9, 2026
6fb5267
refactor(tui): rename link concept to pair
thdxr Jul 9, 2026
a271817
test(core): align models dev snapshot fixtures
thdxr Jul 9, 2026
c91604d
chore(opencode): suppress dead v1 model types
thdxr Jul 9, 2026
6524dfc
feat(core): resume suspended sessions after service restart (#36105)
kitlangton Jul 9, 2026
cc686ab
fix(cli): unify server resolution
thdxr Jul 9, 2026
33c0cc2
fix: synchronize remote data refreshes
thdxr Jul 9, 2026
4c80c23
fix(tui): reconcile refreshed messages
thdxr Jul 9, 2026
0ac8f91
fix(core): restore catalog status schema export
thdxr Jul 9, 2026
bd0dffd
fix(llm): preserve nested OpenAI stream errors (#36130)
harshmathurx Jul 9, 2026
8fe78c8
fix(core): restore plugins after failed activation
thdxr Jul 9, 2026
9ff7ef3
fix(tui): handle session search fetch failures without crashing (#36149)
kitlangton Jul 9, 2026
e2eed76
refactor(tui): migrate v2 calls to new client
thdxr Jul 9, 2026
f6f0a5c
docs: expand user guides
thdxr Jul 9, 2026
99156c1
feat(cli): export frontend logs over OTLP (#36152)
jlongster Jul 9, 2026
a72992e
feat(core): session.pending.list API with pending-only session_pendin…
kitlangton Jul 9, 2026
a774637
chore: merge dev into v2 (#36144)
opencode-agent[bot] Jul 9, 2026
1004fbb
docs: expand OpenCode 2 beta guides
thdxr Jul 9, 2026
629b304
fix(core): continue after configured permission denial (#36155)
rekram1-node Jul 9, 2026
2db7ccb
fix(core): restore resilient compaction (#36163)
rekram1-node Jul 10, 2026
4a006b1
refactor(core): derive config watches from entries
thdxr Jul 10, 2026
3785edd
fix(core): preserve admitted tool generations (#36177)
kitlangton Jul 10, 2026
b452368
refactor(core): simplify tool admission flow (#36180)
kitlangton Jul 10, 2026
761f373
fix(plugin): restore package publishing
thdxr Jul 10, 2026
8f04a09
refactor(plugin): remove protocol dependency
thdxr Jul 10, 2026
d54038b
docs(v2): consolidate specifications (#36186)
kitlangton Jul 10, 2026
efeff63
refactor(plugin): simplify promise tool declarations
thdxr Jul 10, 2026
2a4b298
refactor(plugin): include name in promise tools
thdxr Jul 10, 2026
fbb0fdf
fix(plugin): select plugins by id
thdxr Jul 10, 2026
6a85f0d
feat(client): add root promise entrypoint
thdxr Jul 10, 2026
a6449cb
refactor(form): model links as fields (#36129)
rekram1-node Jul 10, 2026
39cceeb
fix(codemode): return promises from combinators (#35782)
rekram1-node Jul 10, 2026
0d6ccd2
docs: add build overview
thdxr Jul 10, 2026
278c510
refactor(core): simplify session runner bookkeeping (#36200)
kitlangton Jul 10, 2026
c867e66
feat(plugin): add promise plugin cleanup
thdxr Jul 10, 2026
76d7a11
docs: expand opencode skill guidance
thdxr Jul 10, 2026
accaa79
docs: clarify opencode skill references
thdxr Jul 10, 2026
41d0a9f
fix(tui): hide editor context from transcript (#36264)
kitlangton Jul 10, 2026
cf5e0ad
fix(core): simplify compaction semantics (#36267)
kitlangton Jul 10, 2026
b7b941c
fix(tui): unify pending tool styling (#36278)
kitlangton Jul 10, 2026
768a69b
sync
thdxr Jul 10, 2026
96a9731
feat(core): replace instruction checkpoints with value-delta sync (#3…
kitlangton Jul 10, 2026
6216dba
docs: simplify intro page
thdxr Jul 10, 2026
be18f22
feat(simulation): record viewport resizes (#36306)
jlongster Jul 10, 2026
9028c2d
docs: clarify beta binary and MCP route
thdxr Jul 10, 2026
43ecf3f
chore: merge dev into v2 (#36312)
opencode-agent[bot] Jul 10, 2026
1c67004
fix(cli): show background server startup status
thdxr Jul 10, 2026
feaec7a
fix overloaded models issue
thdxr Jul 10, 2026
b87bb44
fix(client): generate standalone promise DTOs
thdxr Jul 10, 2026
20e37e7
fix(plugin): adapt promise host wire values
thdxr Jul 10, 2026
5b2715d
refactor(plugin): simplify promise adapter imports
thdxr Jul 10, 2026
d3f4695
docs: add opencode-drive skill (#36319)
jlongster Jul 10, 2026
0bb24a4
fix(core): defer snapshot repository discovery (#36290)
kitlangton Jul 10, 2026
8e76adb
feat(codemode): support promise chaining with .then/.catch/.finally (…
rekram1-node Jul 10, 2026
6b3c4f5
refactor(core): combine git discovery queries (#36321)
kitlangton Jul 10, 2026
0eaa75e
fix(tui): total root session family cost
thdxr Jul 10, 2026
aca3b78
fix(core): publish skill source updates
thdxr Jul 11, 2026
a4a9483
fix(core): skip unchanged plugin activation
thdxr Jul 11, 2026
6ce62bd
feat(tui): open subagents with down
thdxr Jul 11, 2026
ed6c117
fix(tui): retain leader subagent shortcut
thdxr Jul 11, 2026
d1550cb
feat(core): port GitHub Copilot OAuth (#36336)
opencode-agent[bot] Jul 11, 2026
637282f
fix(tui): make composer close action discoverable (#36337)
thdxr Jul 11, 2026
5920235
fix(tui): fork messages with agent attachments (#36338)
thdxr Jul 11, 2026
fe09a2e
feat(codemode): support Promise.any and new Promise construction (#36…
rekram1-node Jul 11, 2026
00ab94c
fix(tui): stabilize compaction completion (#36435)
kitlangton Jul 11, 2026
c7ceccf
fix(core): skip fff for aggregate locations (#36437)
kitlangton Jul 11, 2026
5945a8d
fix(tui): restore queued compaction indicator (#36440)
kitlangton Jul 11, 2026
e3f7637
feat(tui): add semantic file path truncation (#36352)
kitlangton Jul 11, 2026
66b9cc7
fix(client): accept larger SSE events (#36442)
kitlangton Jul 11, 2026
04f9b15
fix(core): include child session id in background subagent start text…
rekram1-node Jul 11, 2026
1ccaca8
feat(cli): update preflight UI while replacing the background service…
kitlangton Jul 11, 2026
6eeeb4b
feat(codemode): make search a global built-in and rewrite README (#36…
rekram1-node Jul 11, 2026
b9f39dd
fix(core): disable unused fff content caches (#36452)
opencode-agent[bot] Jul 11, 2026
75e8fd4
test(codemode): drop leftover $codemode references (#36451)
rekram1-node Jul 11, 2026
56a7c06
fix(cli): hand update completion directly to the TUI (#36455)
kitlangton Jul 11, 2026
2a7e32c
refactor(tui): remove legacy sdk surfaces
thdxr Jul 11, 2026
1956497
fix(client): loosen opaque promise outputs
thdxr Jul 11, 2026
c073387
refactor(tui): use default client export
thdxr Jul 11, 2026
0fa9e50
refactor(tui): reduce legacy sync usage
thdxr Jul 11, 2026
de86d73
feat(tui): add v2 plugin context
thdxr Jul 11, 2026
ec07ee5
feat(tui): add plugin route api
thdxr Jul 11, 2026
8f904c8
fix(cli): load v2 tui config (#36466)
opencode-agent[bot] Jul 11, 2026
ac1ddc3
refactor(tui): simplify config and tool display
thdxr Jul 11, 2026
02e2277
fix(tui): lower durable event log level (#36479)
kitlangton Jul 12, 2026
8e657c7
fix(core): settle malformed tool input on failure (#36477)
kitlangton Jul 12, 2026
e22e3b8
fix(cli): keep update preflight through TUI loading (#36475)
kitlangton Jul 12, 2026
5414697
fix(tui): show background subagent completion (#36530)
kitlangton Jul 12, 2026
7913c4a
refactor(server): share event stream encoding (#36484)
kitlangton Jul 12, 2026
430750e
fix(tui): remove unsupported MCP toggle (#36531)
opencode-agent[bot] Jul 12, 2026
49cb73b
refactor(codemode): split runtime into focused interpreter modules (#…
rekram1-node Jul 12, 2026
1e17202
chore: merge dev into v2 (#36556)
opencode-agent[bot] Jul 12, 2026
3568dd1
feat(tui): add managed config interface
thdxr Jul 12, 2026
b2bdab2
fix(tui): preserve legacy host compatibility
thdxr Jul 12, 2026
3c60470
refactor(codemode): remove tool concurrency cap (#36545)
rekram1-node Jul 12, 2026
f8f8cc9
refactor(tui): simplify config context
thdxr Jul 12, 2026
9c0cc1a
feat(tui): add settings dialog
kitlangton Jul 13, 2026
a5afd61
refactor(tui): compact settings values
thdxr Jul 13, 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
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .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
7 changes: 7 additions & 0 deletions .github/actions/setup-bun/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ inputs:
runs:
using: "composite"
steps:
# node-gyp@latest (invoked via bunx for native install scripts) requires Node >=22;
# some runner images ship an older system Node on PATH
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "24"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

This project has three issue templates that every issue MUST use one of:
Expand Down
9 changes: 7 additions & 2 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 @@ -122,7 +126,7 @@ jobs:
- 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 +225,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 @@ -447,6 +451,7 @@ jobs:
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 Down
7 changes: 2 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- dev
- v2
pull_request:
workflow_dispatch:

Expand Down Expand Up @@ -74,13 +75,9 @@ jobs:
working-directory: packages/client
run: bun run check:generated

- name: Run HttpApi exerciser gates
if: runner.os == 'Linux'
working-directory: packages/opencode
run: bun run test:httpapi

e2e:
name: e2e (${{ matrix.settings.name }})
if: github.ref_name != 'v2' && github.head_ref != 'v2'
strategy:
fail-fast: false
matrix:
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/triage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,32 @@ jobs:
with:
fetch-depth: 1

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

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

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

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

- name: Triage issue
if: steps.author.outputs.skip != 'true'
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/typecheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: typecheck

on:
push:
branches: [dev]
branches: [dev, v2]
pull_request:
branches: [dev]
branches: [dev, v2]
workflow_dispatch:

jobs:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ tmp
dist
ts-dist
.turbo
.typecheck-profiles
**/.serena
.serena/
**/.omo
Expand Down
Loading
Loading