Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
632 commits
Select commit Hold shift + click to select a range
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
6e55ddd
fix(config): load configs across git boundaries (#36568)
opencode-agent[bot] Jul 12, 2026
09a6cec
refactor(tui): remove code concealment toggle
thdxr Jul 12, 2026
7e9b9cb
docs: document TUI config migration
thdxr Jul 12, 2026
f112a73
fix(core): load config across git boundaries (#36577)
opencode-agent[bot] Jul 13, 2026
c0ed010
fix(tui): show background shell completion (#36534)
kitlangton Jul 13, 2026
397993e
fix(client): preserve compatible background service (#36583)
kitlangton Jul 13, 2026
a4b91d3
fix(tui): align skills dialog copy (#36592)
kitlangton Jul 13, 2026
64ca9b8
refactor(core): replace deferred tool option with codemode (#36560)
rekram1-node Jul 13, 2026
58201a3
fix: standardize MCP server copy (#36598)
kitlangton Jul 13, 2026
3d545f9
fix(tui): restore clicked reverted prompt (#36567)
opencode-agent[bot] Jul 13, 2026
8daf912
feat(tui): add settings dialog
kitlangton Jul 13, 2026
20af1f5
refactor(tui): compact settings values
thdxr Jul 13, 2026
fe3b2e8
sync
thdxr Jul 13, 2026
a43de3f
tui: remove legacy V1 CLI TUI integration to simplify startup
thdxr Jul 13, 2026
828a4b3
fix(codemode): align array callback behavior (#36584)
rekram1-node Jul 13, 2026
339fd50
fix(tui): preserve modal focus across dialog replacement (#36656)
opencode-agent[bot] Jul 13, 2026
823bc20
fix(tui): use gray list highlights (#36669)
opencode-agent[bot] Jul 13, 2026
3533047
sync
thdxr Jul 13, 2026
50a1add
fix(tui): open model selector at top (#36679)
opencode-agent[bot] Jul 13, 2026
2987c30
revert(tui): restore list highlights (#36680)
opencode-agent[bot] Jul 13, 2026
b980f74
refactor(tui): reuse dialog select for settings
thdxr Jul 13, 2026
4e74f77
delete context.md
thdxr Jul 13, 2026
775fce0
refactor(tui): consolidate settings in cli config
thdxr Jul 13, 2026
9db5073
fix(plugin): retain legacy kv api shape
thdxr Jul 13, 2026
685f887
docs: clarify embedded sdk roadmap
thdxr Jul 13, 2026
8c1808a
fix(tui): standardize OpenCode product casing (#36717)
kitlangton Jul 13, 2026
3bc9242
fix(www): generate collections before typecheck (#36730)
kitlangton Jul 13, 2026
a2f5a0d
fix(core): compact after tool settlement (#36718)
kitlangton Jul 13, 2026
41349ff
fix(tui): run dialog actions without selection (#36711)
kitlangton Jul 13, 2026
2096ada
refactor(tui): remove unused subagent formatters (#36732)
kitlangton Jul 13, 2026
af8480b
fix(tui): pin queued compaction below output (#36738)
kitlangton Jul 13, 2026
90a87b2
refactor(tui): remove legacy sync context
thdxr Jul 13, 2026
ed1636e
fix(tui): clamp dialog selection after options shrink (#36712)
kitlangton Jul 13, 2026
748b0d8
refactor(tui): remove subtle syntax styles (#36746)
jlongster Jul 13, 2026
4c45a5c
refactor(tui): extract system theme generation (#36753)
jlongster Jul 13, 2026
36f8cb7
refactor(tui): remove legacy sdk client
thdxr Jul 13, 2026
ecb5754
refactor(codemode): rename Sandbox terminology to CodeMode (#36768)
rekram1-node Jul 13, 2026
fbe7f26
fix(core): clamp compaction output budget (#36745)
opencode-agent[bot] Jul 13, 2026
ce2e301
feat(tui): style background subagent indicator (#36751)
kitlangton Jul 13, 2026
358d474
refactor(cli): remove legacy sdk dependency
thdxr Jul 13, 2026
547e014
chore(codemode): run tests in CI (#36772)
rekram1-node Jul 13, 2026
6963f2f
fix(cli): update mini tests for v2 types (#36779)
rekram1-node Jul 13, 2026
c15e348
test(codemode): make promise tests deterministic (#36780)
rekram1-node Jul 13, 2026
5cf24bf
tui: prevent crash when opening session switcher from an active session
thdxr Jul 14, 2026
2a08cd3
refactor(core): simplify plugin entrypoint resolution
thdxr Jul 14, 2026
9b8282a
feat(plugin): add v2 tui entrypoint
thdxr Jul 14, 2026
aa8fc42
fix(core): add session correlation header (#36842)
opencode-agent[bot] Jul 14, 2026
ea386fb
feat(llm): add compatible responses provider (#35908)
nexxeln Jul 14, 2026
26e27c7
fix(tui): distinguish asynchronous UI states (#36759)
kitlangton Jul 14, 2026
634386f
chore: merge dev into v2 (#36770)
opencode-agent[bot] Jul 14, 2026
a6b5cf9
fix(tui): refresh MCP status for active location (#36882)
rekram1-node Jul 14, 2026
40fedf0
fix(llm): port provider retry classification (#36887)
nexxeln Jul 14, 2026
cd9be63
fix(tui): hide initial instruction sync (#36891)
opencode-agent[bot] Jul 14, 2026
5c5579e
fix(llm): reject unterminated provider streams (#36881)
kitlangton Jul 14, 2026
4a93972
feat(tui): add v2 plugin runtime
thdxr Jul 14, 2026
b2741d2
fix(tui): preserve legacy keybind lookup
thdxr Jul 14, 2026
b67bed0
feat(tui): port diff viewer to v2 plugins
thdxr Jul 14, 2026
0165455
feat(tui): group sequential thinking (#36901)
opencode-agent[bot] Jul 14, 2026
6039f54
fix(tui): refine thinking block styling
thdxr Jul 14, 2026
915be9b
feat(plugin): add tool progress reporting
thdxr Jul 14, 2026
f4f7612
fix(core): support OpenAI pro mode (#36896)
rekram1-node Jul 14, 2026
a32c480
refactor(tui): centralize active location
thdxr Jul 14, 2026
0d4f979
chore: merge dev into v2 (#36918)
opencode-agent[bot] Jul 14, 2026
ea89a2f
feat(codemode): unify callback acceptance and support built-in refere…
rekram1-node Jul 14, 2026
ece2b16
feat: expose background service lifecycle (#36895)
kitlangton Jul 14, 2026
a149a61
fix(tui): harden reasoning groups (#36913)
kitlangton Jul 14, 2026
947566f
refactor(simulation): scope Drive lifecycle with Effect (#36908)
kitlangton Jul 14, 2026
2508a74
refactor(tui): make data sync owner-driven
thdxr Jul 14, 2026
d88faeb
fix(core): restore xAI OAuth in v2 (#36955)
rekram1-node Jul 14, 2026
fca3bca
test(tui): wait for connection before tool event (#36958)
opencode-agent[bot] Jul 14, 2026
563f6a6
refactor(codemode): simplify tools types (#36941)
rekram1-node Jul 14, 2026
9a25673
feat(tui): add V2 theme system (#36950)
jlongster Jul 15, 2026
387bff8
feat(tui): stream shell tool output
thdxr Jul 15, 2026
05fdbcc
fix(cli): rename bash tool to shell
thdxr Jul 15, 2026
ba1f3d3
perf(codemode): batch OpenAPI query parameters (#36978)
rekram1-node Jul 15, 2026
72cf7f1
fix(core): restore default model headers (#36975)
rekram1-node Jul 15, 2026
ff3442c
refactor(tui): extract V1 theme definitions (#36969)
jlongster Jul 15, 2026
94a23b8
refactor(tui): centralize location state
thdxr Jul 15, 2026
2cb2f9d
refactor(tui): simplify location and command contexts
thdxr Jul 15, 2026
7eb7fe0
fix(core): expand reasoning option variants (#36894)
rekram1-node Jul 15, 2026
00093c7
feat(tui): show session location below prompt
thdxr Jul 15, 2026
e8964ce
refactor(tui): remove hidden command metadata
thdxr Jul 15, 2026
c1d2d7a
feat(session): support directory moves from slash commands
thdxr Jul 15, 2026
ce636da
feat(core): include session ID in instructions
thdxr Jul 15, 2026
39f1336
refactor(tui): remove home screen tips
thdxr Jul 15, 2026
09cd744
tui: remove "Plugins reloaded" toast to reduce UI noise during plugin…
thdxr Jul 15, 2026
83cfafc
fix(tui): mount toast at app root
thdxr Jul 15, 2026
35f1490
feat(simulation): expose normalized terminal frames (#37135)
kitlangton Jul 15, 2026
36f8a1e
fix(tui): summarize deleted patch files (#37134)
opencode-agent[bot] Jul 15, 2026
e8bd386
fix(simulation): align vertical box drawing (#37137)
kitlangton Jul 15, 2026
f5dd181
refactor(cli): define server connection boundary (#37133)
kitlangton Jul 15, 2026
22334b9
fix(codemode): canonicalize dotted tool paths (#36994)
rekram1-node Jul 15, 2026
4f12980
feat(llm): add compatible and vertex provider entrypoints (#36900)
nexxeln Jul 15, 2026
75bc611
refactor(client): simplify local service lifecycle
thdxr Jul 15, 2026
ec8ee60
refactor(client): rename service start to ensure
thdxr Jul 15, 2026
b6ccb66
fix(core): bound default search results (#37154)
kitlangton Jul 15, 2026
bb15b16
refactor(ai): rename llm package
thdxr Jul 15, 2026
3fdd12f
feat(ai): publish package
thdxr Jul 15, 2026
b95a5dc
fix(tui): remove shell expansion hint
thdxr Jul 15, 2026
f2f5eb6
feat(plugin): restore ai request hook
thdxr Jul 15, 2026
f92d847
refactor(plugin): scope context hook to session (#37175)
opencode-agent[bot] Jul 15, 2026
5e2e0d6
feat(simulation): add endpoint handshake protocol (#37157)
kitlangton Jul 15, 2026
0cfa7b3
ignore: adjust agents md
rekram1-node Jul 15, 2026
fd19fa8
fix(codemode): linearize reference walks (#37179)
rekram1-node Jul 15, 2026
a772767
refactor(api): scope oauth operations by integration
thdxr Jul 15, 2026
b5177ad
feat(api): add command authentication attempts
thdxr Jul 15, 2026
720f062
refactor(core): select system prompts through plugins (#37181)
rekram1-node Jul 15, 2026
7624c4f
chore: merge dev into v2 (#37170)
opencode-agent[bot] Jul 15, 2026
b4be28d
tweak: adjust compaction to clearly indicate the convo history (#37195)
rekram1-node Jul 16, 2026
dc7e0f6
refactor(core): extract session context loading (#37203)
kitlangton Jul 16, 2026
0a5530d
fix(plugin): make tool values structural (#37202)
kitlangton Jul 16, 2026
6bf92aa
feat(tui): suggest settings command (#37205)
opencode-agent[bot] Jul 16, 2026
5fb0470
feat(api): add experimental wellknown connections
thdxr Jul 16, 2026
4678bd1
feat(plugin): expose synthetic session input (#37212)
kitlangton Jul 16, 2026
282f3f7
refactor(ai): separate Vertex API routes (#37275)
nexxeln Jul 16, 2026
75f9fd5
feat(ai): add Vertex Chat entrypoint (#37281)
nexxeln Jul 16, 2026
198ca74
feat(ai): add Vertex Responses entrypoint (#37286)
nexxeln Jul 16, 2026
d01dfa5
fix(core): limit v2 subagent nesting depth (#37291)
opencode-agent[bot] Jul 16, 2026
a5b28c2
refactor(core): rename guidance modules (#37207)
kitlangton Jul 16, 2026
5fcef67
feat(tui): migrate core surfaces to V2 themes (#37145)
jlongster Jul 16, 2026
fc37ae4
refactor(core): split instruction observation and commit (#37208)
kitlangton Jul 16, 2026
eec6cd5
test(core): cover mcp instruction producer (#37303)
kitlangton Jul 16, 2026
4829308
fix(core): preserve logical step across retries (#37316)
kitlangton Jul 16, 2026
06a2592
fix(tui): align subagent navigation copy (#37319)
opencode-agent[bot] Jul 16, 2026
56c0658
refactor(core): extract session model request preparation (#37210)
kitlangton Jul 16, 2026
7388e69
chore(codemode): update interpreter support
rekram1-node Jul 16, 2026
7ab8a08
sync
thdxr Jul 16, 2026
60c7f84
feat(codemode): support void and Object.is (#37332)
rekram1-node Jul 16, 2026
2ad6c42
feat(core): normalize tool and attachment images at settlement (#37141)
rekram1-node Jul 16, 2026
041cda9
fix(tui): label only detached subagents as background (#37306)
kitlangton Jul 16, 2026
ad8e6b1
feat(codemode): support property deletion (#37335)
rekram1-node Jul 16, 2026
65a42fd
fix(core): debounce state reloads
thdxr Jul 16, 2026
72af084
refactor(core): make state transforms synchronous
thdxr Jul 16, 2026
c764732
feat(codemode): expand destructuring support (#37342)
rekram1-node Jul 16, 2026
7a7075d
feat(tui): refine V2 theme colors (#37346)
jlongster Jul 16, 2026
103f764
feat(core): add provider policy enforcement
thdxr Jul 16, 2026
e4a1683
feat(core): add transient session generation (#37330)
kitlangton Jul 16, 2026
a7cf21e
refactor(core): move wellknown refresh to config
thdxr Jul 16, 2026
0d3b6d4
fix(tui): restore expandable tool hover state
thdxr Jul 16, 2026
4f60bde
feat(tui): add message navigation shortcuts
StarpTech Jul 16, 2026
91b4634
fix(tui): remove debug theme toggle (#37359)
jlongster Jul 16, 2026
8a70d70
revert(tui): remove message navigation shortcuts
StarpTech Jul 16, 2026
5ee4c10
feat(tui): add message navigation shortcuts (#37362)
StarpTech Jul 16, 2026
ac1b802
fix(tui): restore selected action styling, fix subagent list (#37371)
jlongster Jul 16, 2026
88b8883
feat(tui): resolve action state priority (#37373)
jlongster Jul 16, 2026
e916b99
chore: merge dev into v2 (#37370)
opencode-agent[bot] Jul 16, 2026
b4a4ef0
refactor(tui): remove legacy keymap layer (#37206)
opencode-agent[bot] Jul 16, 2026
3098605
refactor(tui): remove secondary action styles (#37378)
jlongster Jul 16, 2026
331533d
fix(cli): isolate server request traces (#37395)
StarpTech Jul 16, 2026
f76e182
fix(tui): derive session surface colors from hues (#37401)
jlongster Jul 17, 2026
4a7f760
fix(tui): preserve prompt footer actions (#37180)
kitlangton Jul 17, 2026
faf9646
fix(core): initialize provider state before catalog transforms (#37419)
kitlangton Jul 17, 2026
9123844
fix(codemode): enforce lexical temporal dead zones (#37358)
rekram1-node Jul 17, 2026
73567f3
feat(core): record title and compaction usage in session totals (#37441)
rekram1-node Jul 17, 2026
27e1692
fix: rm used config
rekram1-node Jul 17, 2026
a1b274e
node v2 cli support (#36309)
simonklee Jul 17, 2026
42e2dde
fix(cli): prevent Node stdout EPIPE failures
simonklee Jul 17, 2026
3db4458
feat(session): expose transient generation API (#37433)
kitlangton Jul 17, 2026
2180fb8
ci: fix node publish multi-arch install (#37497)
simonklee Jul 17, 2026
b26d948
feat(tui): add hovered theme state (#37404)
jlongster Jul 17, 2026
44f7bb7
chore: upgrade Effect to beta.98 (#37498)
kitlangton Jul 17, 2026
6517514
test(tui): await diff tree context readiness (#37501)
opencode-agent[bot] Jul 17, 2026
f847040
fix(cli): stabilize Windows ARM64 Node builds (#37503)
simonklee Jul 17, 2026
d67e035
refactor(tui): migrate leaf views to V2 themes (#37510)
jlongster Jul 17, 2026
bd79e24
fix(tui): raise neutral permission backgrounds (#37513)
jlongster Jul 17, 2026
9b3a465
fix(core): clarify user-executed shell history (#37515)
opencode-agent[bot] Jul 17, 2026
48adb95
feat(tui): expose session header slot (#37520)
kitlangton Jul 17, 2026
bce9c63
feat(tui): expose session composer top slot (#37518)
kitlangton Jul 17, 2026
677526d
refactor(tui): migrate dialog views to V2 themes (#37516)
jlongster Jul 17, 2026
3fc06ac
fix(simulation): normalize named key presses (#37523)
kitlangton Jul 17, 2026
5d5b33f
cli: rename node package to opencode-node (#37528)
simonklee Jul 17, 2026
4bc8faa
feat(core): add tool namespaces (#37529)
rekram1-node Jul 17, 2026
f2a4011
fix(cli): restore plugin list diagnostics (#37540)
opencode-agent[bot] Jul 17, 2026
c7a7900
refactor(tui): migrate workflow views to V2 themes (#37526)
jlongster Jul 17, 2026
87d5b27
feat(codemode): project OpenAPI schema directions (#37361)
rekram1-node Jul 17, 2026
fafb04e
feat(tui): track hue source identity (#37550)
jlongster Jul 17, 2026
987242b
fix(core): honor OAuth attempt expiration (#37557)
rekram1-node Jul 17, 2026
6ea8247
fix(cli): elect managed service by port bind (#37572)
opencode-agent[bot] Jul 17, 2026
60ce33c
fix(cli): simplify service registration lease (#37576)
opencode-agent[bot] Jul 17, 2026
22c23cb
fix(cli): reduce startup overhead
thdxr Jul 18, 2026
c4830c1
fix(core): defer cyclic layer dependencies
thdxr Jul 18, 2026
f2579c4
docs: allow trusted cli installation
thdxr Jul 18, 2026
08a7080
fix(tui): exit composer picker with up arrow (#37601)
rekram1-node Jul 18, 2026
cd3cca0
feat(core): add runtime MCP controls (#37308)
opencode-agent[bot] Jul 18, 2026
deb5b14
test(ai): record MiniMax messages compatibility (#37604)
rekram1-node Jul 18, 2026
529d55b
fix(core): remove session import cycle (#37596)
opencode-agent[bot] Jul 18, 2026
d4eebad
feat(session): expose toolChoice via PromptInput and agent config
paperview Jul 18, 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
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .changeset/calm-services-start.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@opencode-ai/client": patch
"@opencode-ai/protocol": patch
"@opencode-ai/cli": patch
---

Expose background-service lifecycle status, preserve one process-held owner through startup and failure, reconnect TUIs without activating replacement, and stop exact service instances gracefully.
5 changes: 5 additions & 0 deletions .changeset/calm-sessions-header.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@opencode-ai/cli": patch
---

Expose a TUI plugin slot at the top of the session view.
7 changes: 7 additions & 0 deletions .changeset/clean-sessions-generate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@opencode-ai/client": patch
"@opencode-ai/plugin": patch
"@opencode-ai/protocol": patch
---

Expose transient, read-only session generation through the HTTP API, generated clients, and V2 plugin session context.
5 changes: 5 additions & 0 deletions .changeset/fresh-composers-slot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@opencode-ai/cli": patch
---

Expose a TUI plugin slot above the session composer.
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
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
65 changes: 63 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 @@ -117,12 +121,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 +274,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 +462,7 @@ jobs:
needs:
- version
- build-cli
- build-node-cli
- sign-cli-windows
- build-electron
if: always() && !failure() && !cancelled()
Expand Down Expand Up @@ -447,6 +501,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 All @@ -456,6 +511,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
29 changes: 24 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 @@ -69,18 +70,36 @@ jobs:
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Verify compiled service lifecycle
if: always()
timeout-minutes: 10
working-directory: packages/cli
run: |
bun run script/build.ts --single --skip-install
bun run script/service-smoke.ts

- name: Setup Node build runtime
if: always()
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "26.4.0"

- name: Verify Node build
if: always()
timeout-minutes: 15
working-directory: packages/cli
run: |
bun run script/build-node.ts --single --skip-install --outdir=dist/node
bun run script/service-smoke.ts --node

- 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
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
Loading
Loading