Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
569 commits
Select commit Hold shift + click to select a range
83c12f3
chore: update nix node_modules hashes
opencode-agent[bot] Jun 2, 2026
7dd2306
refactor(opencode): improve startup time by 38% (#30453)
StarpTech Jun 2, 2026
1acdc48
chore: generate
opencode-agent[bot] Jun 2, 2026
70a2e84
fix(opencode): patch empty Gemini replay messages (#30463)
rekram1-node Jun 2, 2026
b93963e
chore: generate
opencode-agent[bot] Jun 2, 2026
604a5f7
refactor(core): consolidate filesystem services (#30447)
thdxr Jun 2, 2026
cb587b6
chore: generate
opencode-agent[bot] Jun 2, 2026
30cff95
run: enable interactive replay by default (#30465)
simonklee Jun 2, 2026
113e7be
chore: update nix node_modules hashes
opencode-agent[bot] Jun 2, 2026
ca2acc4
refactor(opencode): remove JSON storage migration (#30461)
thdxr Jun 2, 2026
b12bc87
chore: generate
opencode-agent[bot] Jun 2, 2026
dc216e8
chore: update nix node_modules hashes
opencode-agent[bot] Jun 2, 2026
0543fd2
fix(tui): stop idle background task spinner (#30484)
rekram1-node Jun 3, 2026
8345255
refactor(core): move v1 schemas into core (#30473)
thdxr Jun 3, 2026
6003217
chore: generate
opencode-agent[bot] Jun 3, 2026
70cd4bf
fix: task id passed to background job for continuation (#30485)
rekram1-node Jun 3, 2026
7a66eae
chore: generate
opencode-agent[bot] Jun 3, 2026
147c6c4
feat(core): project copying and tracking directories (#30139)
jlongster Jun 3, 2026
0294342
chore: generate
opencode-agent[bot] Jun 3, 2026
42173bc
fix(opencode): preserve signed thinking during anthropic reorder (#30…
rekram1-node Jun 3, 2026
a763a14
Revert "fix(opencode): preserve signed thinking during anthropic reor…
rekram1-node Jun 3, 2026
5940304
fix: rm tool reorder logic from old bug (#30483)
rekram1-node Jun 3, 2026
1111fdc
chore: generate
opencode-agent[bot] Jun 3, 2026
2538c0d
feat(app): polish home projects list UI (#30436)
arvsrn Jun 3, 2026
134a5c8
feat(app): polish select-v2 component (#30446)
arvsrn Jun 3, 2026
a3b97d9
fix(github): enforce existing git author identity (#30507)
ulises-jeremias Jun 3, 2026
a444410
feat(app): new update button (#30460)
arvsrn Jun 3, 2026
01cc475
fix(opencode): fallback to sh for curl upgrade (#30499)
ulises-jeremias Jun 3, 2026
707166a
fix(ui): render whole-file patches as complete diffs (#30516)
Brendonovich Jun 3, 2026
c36a433
chore: generate
opencode-agent[bot] Jun 3, 2026
c6f6843
feat(app): add servers tab to settings dialog (#29675)
Brendonovich Jun 3, 2026
932fb6c
refactor(core): consolidate pty service (#30537)
nexxeln Jun 3, 2026
b6f76e2
chore: generate
opencode-agent[bot] Jun 3, 2026
06eecc5
tui: truncate sidebar file paths (#30531)
simonklee Jun 3, 2026
56ec4b6
chore: update nix node_modules hashes
opencode-agent[bot] Jun 3, 2026
7af6eaf
feat(stats): add geo breakdown (#30456)
adamdotdevin Jun 3, 2026
0c31beb
chore: generate
opencode-agent[bot] Jun 3, 2026
5970f78
chore: update nix node_modules hashes
opencode-agent[bot] Jun 3, 2026
89b26e8
fix(acp): classify apply_patch as edit (#30564)
nexxeln Jun 3, 2026
fc62b3d
fix(acp): classify task as think (#30565)
nexxeln Jun 3, 2026
e707e41
fix(acp): include external directory permission context (#30567)
nexxeln Jun 3, 2026
8851e4d
fix(acp): clean read tool display content (#30569)
nexxeln Jun 3, 2026
f4851e3
fix(tui): route question responses by session directory (#30578)
jlongster Jun 3, 2026
d08feda
fix(stats): serve stats og image from banner
adamdotdevin Jun 3, 2026
400f0fb
docs(go): add Qwen3.7 Plus model (#30594)
MrMushrooooom Jun 3, 2026
7f8412e
fix(openai): preserve websocket idle state (#30586)
rekram1-node Jun 3, 2026
1520b0d
refactor(core): remove ai sdk option fields (#30581)
thdxr Jun 3, 2026
a0e4db3
chore: generate
opencode-agent[bot] Jun 3, 2026
5900345
test(core): cover v1 provider option lowering (#30599)
thdxr Jun 3, 2026
af63834
chore: generate
opencode-agent[bot] Jun 3, 2026
11dbd15
refactor(core): nest model api id (#30603)
thdxr Jun 3, 2026
9991a33
fix(core): expose azure openai xhigh efforts (#30620)
rekram1-node Jun 3, 2026
889e0f9
feat(core): add skill registry and file agent loading (#30617)
thdxr Jun 3, 2026
a41f774
chore: generate
opencode-agent[bot] Jun 3, 2026
36234c4
chore: update nix node_modules hashes
opencode-agent[bot] Jun 3, 2026
2c32f7e
fix(stats): count all go usage
adamdotdevin Jun 3, 2026
d3d4335
chore: remove zed extension and automation (#30628)
rekram1-node Jun 3, 2026
ee74dd8
fix(opencode): preserve variant for delegated tasks (#30630)
rekram1-node Jun 3, 2026
fa6ea8b
zen: update nvidia tos
fwang Jun 3, 2026
0b796c5
fix(opencode): route SAP AI Core reasoning variants through modelPara…
jerome-benoit Jun 3, 2026
04b38ce
chore: generate
opencode-agent[bot] Jun 3, 2026
f62ba5e
fix(app): hide unavailable titlebar update (#30642)
Hona Jun 3, 2026
55bafa2
feat(app): v2 thinking level selector (#30646)
Hona Jun 4, 2026
c352677
fix(app,ui): session review reactivity and VCS query cache (#30660)
Brendonovich Jun 4, 2026
76ee87e
feat(core): add embedded v2 session runtime and tool foundation (#30632)
kitlangton Jun 4, 2026
b0a9294
chore: generate
opencode-agent[bot] Jun 4, 2026
b6305cb
chore: update nix node_modules hashes
opencode-agent[bot] Jun 4, 2026
9251e5d
docs: correct compaction prune default (#30670)
rekram1-node Jun 4, 2026
2a33add
fix(opencode): avoid shell cancel race (#30641)
rekram1-node Jun 4, 2026
9f42bd4
feat: bump bedrock and add proper mantle support for openai models th…
rekram1-node Jun 4, 2026
74a27db
test: wait for shell truncation readiness (#30679)
rekram1-node Jun 4, 2026
51fd7c0
chore: update nix node_modules hashes
opencode-agent[bot] Jun 4, 2026
70bb710
refactor(opencode): clean up task tool prompts (#30687)
rekram1-node Jun 4, 2026
1ff1910
feat(core): add command registry (#30624)
thdxr Jun 4, 2026
30ec231
chore: generate
opencode-agent[bot] Jun 4, 2026
69cfc44
fix(acp): replay loaded session transcript (#30645)
opencode-agent[bot] Jun 4, 2026
caea930
fix(core): reset pre-launch session projections (#30728)
kitlangton Jun 4, 2026
6d4f3b4
feat(tui): improve experimental session switcher (#30738)
nexxeln Jun 4, 2026
7e09660
fix(opencode): respect disabled auto compaction on overflow (#30749)
nexxeln Jun 4, 2026
f5d1ae6
zen: nemotron 3 ultra
fwang Jun 4, 2026
789e4d5
fix(enterprise): install hono standard validator peer (#30740)
opencode-agent[bot] Jun 4, 2026
7f54b1b
fix build
thdxr Jun 4, 2026
9f3a0fe
chore: update nix node_modules hashes
opencode-agent[bot] Jun 4, 2026
94c49b2
make scripts executable
thdxr Jun 4, 2026
cb65926
fix(tui): show toast when variant_list keybind used with no variants …
ariane-emory Jun 4, 2026
21a0fdd
fix(opencode): `ACP.loadSession` should replay all messages (#30761)
imnotlxy Jun 4, 2026
730ea6d
fix(opencode): attribute task child agent on creation (#30786)
rekram1-node Jun 4, 2026
5b14fb4
fix(tui): add Vue syntax highlighting (#30802)
rekram1-node Jun 4, 2026
e45e0e1
fix: bump @openrouter/ai-sdk-provider to 2.9.0 (#30800)
colinhacks Jun 4, 2026
ba1b660
feat(core): moving sessions (#30640)
jlongster Jun 4, 2026
fe5ac30
chore: generate
opencode-agent[bot] Jun 4, 2026
cc9b73b
tweak: background agent prompting to avoid polling issues (#30790)
rekram1-node Jun 4, 2026
e464999
upgrade opentui to 0.3.2 (#30748)
kommander Jun 4, 2026
1071807
chore: update nix node_modules hashes
opencode-agent[bot] Jun 4, 2026
b1a7ee5
feat(desktop): surface local server startup failures (#30822)
Hona Jun 4, 2026
057958c
ci: publish
thdxr Jun 4, 2026
76ecf2e
refactor(core): make v2 session inputs event sourced (#30785)
kitlangton Jun 4, 2026
ab5a12d
chore: generate
opencode-agent[bot] Jun 4, 2026
f011d77
fix(llm): normalize OpenAI function tool schemas
kitlangton Jun 4, 2026
134f413
chore: generate
opencode-agent[bot] Jun 4, 2026
47f3d8b
feat(stats): refresh stats routes and homepage (#30419)
adamdotdevin Jun 5, 2026
46e9863
fix(stats): sort metric charts by top usage
adamdotdevin Jun 4, 2026
773d33e
feat(core): add public native API (#30828)
kitlangton Jun 5, 2026
7555700
chore: generate
opencode-agent[bot] Jun 5, 2026
605ae48
feat(app): color themes (#30824)
arvsrn Jun 5, 2026
9211ef7
chore: generate
opencode-agent[bot] Jun 5, 2026
17ba553
sync release versions for v1.16.0
Jun 5, 2026
64dc6d3
feat(core): attach global native tools (#30832)
kitlangton Jun 5, 2026
39babcb
chore: generate
opencode-agent[bot] Jun 5, 2026
2859ce6
feat(core): add Snowflake Cortex provider (#29901)
kameshsampath Jun 5, 2026
c47cb28
chore: generate
opencode-agent[bot] Jun 5, 2026
1af8daf
feat(core): persist v2 session context epochs (#30789)
kitlangton Jun 5, 2026
8c0edca
chore: generate
opencode-agent[bot] Jun 5, 2026
3003867
feat(tui): allow backgrounding synchronous subagents (#30488)
kitlangton Jun 5, 2026
5426478
fix(app): improve tab handling (#30669)
Brendonovich Jun 5, 2026
0a36433
chore: generate
opencode-agent[bot] Jun 5, 2026
b375890
fix(tui): prioritize models slash autocomplete (#30848)
rekram1-node Jun 5, 2026
3cf1cef
fix(tui): route permission replies to session directory (#30851)
opencode-agent[bot] Jun 5, 2026
b01eb22
fix(cli): harden daemon lifecycle (#30844)
thdxr Jun 5, 2026
7ae856a
chore: generate
opencode-agent[bot] Jun 5, 2026
7f33576
feat(app): improve desktop multi-server support (#30678)
Hona Jun 5, 2026
f6197ce
chore: generate
opencode-agent[bot] Jun 5, 2026
9431356
fix(app): handle tab overflow and scrolling in titlebar (#30886)
Brendonovich Jun 5, 2026
c613c33
fix(app): tab overflow (#30894)
Brendonovich Jun 5, 2026
b278e49
tui: guard path formatting inputs (#30469)
simonklee Jun 5, 2026
0c0d193
opencode/run: refresh themes after terminal reloads (#30917)
simonklee Jun 5, 2026
a468680
chore: generate
opencode-agent[bot] Jun 5, 2026
dc985ff
fix(tui): fall back to local cwd when editor spawns in attach mode (#…
pcadena-lila Jun 5, 2026
d721fc0
docs: update Go Qwen tiered pricing (#30936)
MrMushrooooom Jun 5, 2026
edbe228
chore: generate
opencode-agent[bot] Jun 5, 2026
7a4d183
feat(tui): add diff hunk navigation (#30935)
nexxeln Jun 5, 2026
a136caa
chore: rm fuzzy search on references (#30931)
nexxeln Jun 5, 2026
a261b55
fix: use mapError instead of orDie for context snapshot decoding (#30…
weiconghe Jun 5, 2026
0ee7cfa
fix(core): recover corrupted models cache (#30947)
nexxeln Jun 5, 2026
48106b7
chore: bun install (#30968)
rekram1-node Jun 5, 2026
1e216e1
fix(opencode): resolve Bedrock hang by using node build conditions (#…
alblez Jun 5, 2026
5c8eb0a
fix(workflows): retry nix-hashes compute-hash on transient failure (#…
jerome-benoit Jun 5, 2026
a8adfb6
fix(stats): scroll model charts to latest on mobile
adamdotdevin Jun 5, 2026
236cfcb
fix(opencode): prevent destructive edit matches (#30932)
nexxeln Jun 5, 2026
fff36b7
chore: generate
opencode-agent[bot] Jun 5, 2026
02a5ae6
fix(core): respect v2 default agents (#30969)
kitlangton Jun 5, 2026
e9aa33d
chore: generate
opencode-agent[bot] Jun 5, 2026
5d7157f
test(opencode): remove disposal event wait race (#30971)
rekram1-node Jun 5, 2026
f8cf8fa
test(opencode): remove shell timeout output race (#30974)
rekram1-node Jun 5, 2026
cc487dd
fix(opencode): gate reasoning summaries by provider (#30973)
rekram1-node Jun 5, 2026
3f64b5e
feat(core): admit v2 skill guidance (#30843)
kitlangton Jun 5, 2026
76a81ac
fix(workflows): serialize desktop release uploads (#30978)
rekram1-node Jun 5, 2026
9b09075
fix(stats): add mobile chart end spacing
adamdotdevin Jun 5, 2026
8ad44cd
chore: generate
opencode-agent[bot] Jun 5, 2026
41bd912
sync release versions for v1.16.2
Jun 5, 2026
12e3886
feat(core): interrupt v2 session execution (#30850)
kitlangton Jun 5, 2026
f26a9e8
chore: generate
opencode-agent[bot] Jun 5, 2026
d2204e0
feat(core): honor default session models (#30982)
kitlangton Jun 5, 2026
3151e22
fix(core): harden model selection edges (#30987)
kitlangton Jun 5, 2026
ecdfcd9
fix(tui): show current location in working copies; order by created; …
jlongster Jun 5, 2026
a7bd1cd
chore: generate
opencode-agent[bot] Jun 5, 2026
beae729
feat(core): compact v2 session context (#30986)
kitlangton Jun 5, 2026
3bbf8c8
fix(opencode): terminate help output with newline (#30992)
rekram1-node Jun 5, 2026
ca9bf7a
fix(opencode): honor Bedrock Mantle config (#31001)
rekram1-node Jun 5, 2026
0bdd9aa
fix(core): preserve model request semantics (#30990)
kitlangton Jun 5, 2026
760d523
chore: generate
opencode-agent[bot] Jun 5, 2026
a9094fd
feat(core): bound v2 tool output (#30999)
kitlangton Jun 5, 2026
7ebc7ff
chore: generate
opencode-agent[bot] Jun 5, 2026
05d1104
fix(core): scope Vertex provider transforms (#31004)
kitlangton Jun 5, 2026
a57fb32
feat(core): expose session model switching (#31011)
kitlangton Jun 5, 2026
c814f84
fix(tui): update tool spacing before layout
kitlangton Jun 5, 2026
820c984
fix(core): recover v2 context overflow (#31005)
kitlangton Jun 5, 2026
025e1ac
fix(core): validate public session model switches (#31012)
kitlangton Jun 5, 2026
f591bf5
feat(tui): delete working copies from move dialog (#31017)
jlongster Jun 5, 2026
969bb90
chore: generate
opencode-agent[bot] Jun 5, 2026
499a8a4
fix(tui): bootstrap new project copies (#31019)
jlongster Jun 5, 2026
a645615
fix(opencode): limit generated project copy names (#31022)
jlongster Jun 5, 2026
d5b2056
fix(tui): inject reminder after moving session (#31027)
jlongster Jun 5, 2026
015e79f
fix(session): respect directory filter with workspaces (#30804)
rexdotsh Jun 5, 2026
e3a55db
feat(app): improve servers UI (#30961)
arvsrn Jun 5, 2026
93a58f5
chore: generate
opencode-agent[bot] Jun 5, 2026
24347f3
feat(app): updates to project avatar (#30964)
arvsrn Jun 5, 2026
9ed17da
chore: generate
opencode-agent[bot] Jun 5, 2026
1fd9c77
feat(app): sessions list improvements (#30941)
arvsrn Jun 5, 2026
3e704d0
chore: generate
opencode-agent[bot] Jun 5, 2026
7c6adcf
fix(core): scope v2 prompt cache by session (#31036)
opencode-agent[bot] Jun 5, 2026
b36b859
fix(stats): filter market share to go
adamdotdevin Jun 5, 2026
f750dea
fix(app): increase project session limit and add scrolling (#31035)
Hona Jun 5, 2026
83dca45
fix(core): make V2 reads media-aware and binary-safe (#31038)
kitlangton Jun 5, 2026
fa2b63f
chore: update nix node_modules hashes
opencode-agent[bot] Jun 6, 2026
3f0ef9b
feat(opencode): add search to auth logout command (#31053)
rekram1-node Jun 6, 2026
ba57718
feat(opencode): support non-interactive MCP add (#31054)
rekram1-node Jun 6, 2026
54f4974
feat(http-recorder): prepare public beta release (#31018)
kitlangton Jun 6, 2026
ceccde7
refactor(core): simplify filesystem mutation protocol (#31059)
kitlangton Jun 6, 2026
147169e
refactor(core): simplify filesystem read protocol (#31058)
kitlangton Jun 6, 2026
4ac4df4
chore: update nix node_modules hashes
opencode-agent[bot] Jun 6, 2026
09d9cf0
refactor(core): simplify search root protocol (#31060)
kitlangton Jun 6, 2026
bd7eb06
feat: desktop v2 everything WSL (#23407)
Hona Jun 6, 2026
1399323
chore: generate
opencode-agent[bot] Jun 6, 2026
747b8da
fix(core): bound prompt cache session keys (#31062)
kitlangton Jun 6, 2026
4814ab3
fix(core): enforce V2 tool permissions (#31061)
kitlangton Jun 6, 2026
7d3d80f
feat(opencode): fff search tools (#27802)
dmtrKovalenko Jun 6, 2026
77963d8
chore: generate
opencode-agent[bot] Jun 6, 2026
4519a1d
chore: update nix node_modules hashes
opencode-agent[bot] Jun 6, 2026
b9131aa
fix: background agent prompting, lets kill this sleep behavior oml (#…
rekram1-node Jun 6, 2026
0875203
test: fix tool test (#31163)
rekram1-node Jun 6, 2026
06d7840
docs: fix MCP header interpolation example to {env:VAR} (#31078)
fancive Jun 6, 2026
effd27b
chore(http-recorder): disable release automation (#31160)
kitlangton Jun 7, 2026
660a00d
refactor(core): unify v2 tool architecture (#31168)
kitlangton Jun 7, 2026
807c804
fix(core): use static tool type imports (#31170)
kitlangton Jun 7, 2026
12acb9a
docs(v2): update permission rule naming (#31167)
kitlangton Jun 7, 2026
10d1e04
fix(core): isolate image normalization (#31165)
kitlangton Jun 7, 2026
48c26fa
fix(test): release Windows search handles (#31172)
kitlangton Jun 7, 2026
eb9a683
fix(core): harden unified tool runtime (#31171)
kitlangton Jun 7, 2026
1025540
test(core): cover managed output read permissions (#31166)
kitlangton Jun 7, 2026
53ff1b5
fix(core): preserve session failure causes
kitlangton Jun 7, 2026
fe0c4f8
refactor(server): canonicalize service API (#31049)
thdxr Jun 7, 2026
155e1f2
chore: generate
opencode-agent[bot] Jun 7, 2026
31c099b
chore: update nix node_modules hashes
opencode-agent[bot] Jun 7, 2026
f20655b
fix(tui): sort connect providers alphabetically (#30891)
robertDouglass Jun 7, 2026
9b4d5b0
feat(desktop): make updates persistent and responsive (#31191)
Hona Jun 7, 2026
7a2c49e
chore: generate
opencode-agent[bot] Jun 7, 2026
106f8e9
refactor(tui): extract standalone package (#31193)
thdxr Jun 7, 2026
21a644f
chore: generate
opencode-agent[bot] Jun 7, 2026
f240497
chore: update nix node_modules hashes
opencode-agent[bot] Jun 7, 2026
a29deb1
fix(app): refresh directory MCP status (#31194)
Hona Jun 7, 2026
2181472
feat(desktop): open attachments in active project (#31192)
Hona Jun 7, 2026
472b331
chore: generate
opencode-agent[bot] Jun 7, 2026
2006259
fix(desktop): style home session scrollbar (#31202)
Hona Jun 7, 2026
e82542b
fix(desktop): disable hidden agent cycling (#31207)
Hona Jun 7, 2026
233427f
test(core): cover skill directory output (#31263)
rekram1-node Jun 7, 2026
aacdb34
fix(opencode): avoid duplicate skill catalog (#31269)
rekram1-node Jun 7, 2026
8ff4013
chore(opencode): update MCP SDK to 1.29.0 (#31268)
rekram1-node Jun 7, 2026
c495635
chore: generate
opencode-agent[bot] Jun 7, 2026
914a643
chore: update nix node_modules hashes
opencode-agent[bot] Jun 7, 2026
07808be
run: make minimal mode more minimal (#31227)
simonklee Jun 7, 2026
3867fa2
chore: generate
opencode-agent[bot] Jun 7, 2026
b1d14ac
chore: update web and desktop code owners (#31289)
Hona Jun 8, 2026
65a3f7f
fix(desktop): few WSL bugs (#31095)
neriousy Jun 8, 2026
4d09a71
chore: generate
opencode-agent[bot] Jun 8, 2026
b5cb9aa
fix(opencode): respect MCP server capabilities (#31271)
rekram1-node Jun 8, 2026
4863aed
console: update email
fwang Jun 8, 2026
79ea379
zen: fix
fwang Jun 8, 2026
685a894
fix(opencode): include acp pending tool input (#31321)
nexxeln Jun 8, 2026
bea56fe
fix(lsp): resolve JDTLS root to topmost pom.xml in Java Maven multi-m…
areyouok Jun 8, 2026
d46af9c
chore: generate
opencode-agent[bot] Jun 8, 2026
0050134
fix(session): merge per-call tool rules into session permission (#30529)
remorses Jun 8, 2026
1772e8e
docs(go): update MiniMax M3 pricing (#31350)
MrMushrooooom Jun 8, 2026
64998f4
LAC-2281: Lash Upstream Sync — 2026-06-01 (256 commits)
lacymorrow Jun 16, 2026
a885a0a
merge: Merge upstream/dev 2026-06-08 (303 commits)
lacymorrow Jun 16, 2026
3c651ba
Merge pull request #27 from lacymorrow/LAC-2336/upstream-sync-2026-06-08
lacymorrow Jun 16, 2026
2602aff
sync: merge upstream/dev catch-up (629 commits) (#31)
lacymorrow Jun 29, 2026
6b9228d
fix(test): resolve shell/cwd unit-test failures surfaced by GitHub-ho…
lacymorrow Jul 9, 2026
e58d745
merge: LAC-2385 runner switch so CI runs on GitHub-hosted runners
lacymorrow Jul 9, 2026
994d129
fix(test): repair remaining unit (linux) failures on GitHub-hosted ru…
lacymorrow Jul 9, 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
  •  
  •  
  •  
Prev Previous commit
Next Next commit
sync: merge upstream/dev catch-up (629 commits) (#31)
* fix(app): mount shortcuts per titlebar tab (anomalyco#33567)

* fix(tui): normalize autocomplete attachments

* refactor(core): drop filesystem entry mime

* fix(app): use fixed titlebar tab widths (anomalyco#33572)

* refactor(schema): extract shared public schemas (anomalyco#33571)

* chore: update nix node_modules hashes

* fix(app): throttle directory tree loading (anomalyco#33576)

* refactor(core): remove schema forwarding facades (anomalyco#33577)

* fix(app): create scoped drafts from home (anomalyco#33578)

* feat(cli): add API request command

* fix(tui): sort model picker by release date (anomalyco#33558)

* chore: generate

* fix(app): clear viewed session notifications (anomalyco#33574)

* fix(app): route new sessions through tabs (anomalyco#33582)

* fix(mcp): bind oauth callback to IPv4 loopback (anomalyco#30022)

* fix(opencode): restore v1 account config (anomalyco#33590)

Co-authored-by: Test <[email protected]>

* refactor(app): simplify layout hierarchy (anomalyco#33588)

* fix(mcp): restore legacy tool names (anomalyco#33593)

* fix(skill): emit base directory as filesystem path, not file:// URL (anomalyco#33580)

Co-authored-by: Aiden Cline <[email protected]>

* chore: generate

* fix(mcp): prevent resource key collisions (anomalyco#33596)

* feat(app): update all components to use v2 tokens (anomalyco#33598)

* chore: generate

* deps: update OpenTUI to 0.4.2 (anomalyco#33610)

* chore: update nix node_modules hashes

* fix(app): make session navigation stable and fast (anomalyco#33569)

Co-authored-by: Brendan Allan <[email protected]>

* chore: generate

* fix(app): share synced session data (anomalyco#33624)

* refactor(app): rename cached context accessors (anomalyco#33627)

* ci: notify the current Discord alert role

* feat(console): add support actions (anomalyco#33492)

* feat(tui): add diff viewer keybind (anomalyco#33365)

* chore: generate

* fix(app): always apply safe area insets (anomalyco#33619)

* feat(tui): add main branch source to diff mode (anomalyco#30942)

* fix(enterprise): use delete for remove share

* tui: fix multi-day duration formatting (anomalyco#33651)

Report elapsed days and remaining hours instead of showing zero days and
the total duration as hours.

Close anomalyco#32957
Close anomalyco#32956

* docs(llm): propose AI library design (anomalyco#33666)

* chore: generate

* refactor(ui): isolate session components (anomalyco#33670)

* chore: update nix node_modules hashes

* zen: migrate to new inference

* fix(stats): strip locale prefixes from data routes

* refactor(stats): simplify locale prefix stripping

* feat(mcp): append server instructions to context (anomalyco#32490)

Co-authored-by: Aiden Cline <[email protected]>

* chore: generate

* fix(mcp): hide denied resource template tool (anomalyco#33686)

* refactor(core): simplify model requests

* feat(core): generate model variants

* chore: generate

* zen: track model tier in stats

* fix: restore dev CI (anomalyco#33701)

* tui: remove logo animation (anomalyco#33633)

Render branding as a static logo to avoid continuous redraws and mouse-driven visual effects.

* sync release versions for v1.17.10

* refactor(schema): extract public event definitions (anomalyco#33579)

* chore: generate

* chore: update nix node_modules hashes

* docs: add GMI Cloud provider entry to providers directory (anomalyco#32914)

* fix(opencode): always print MCP OAuth URL (anomalyco#33716)

* fix(core): scope fff broad scanning

* fix(core): disable fff broad scanning

* fix(core): handle unavailable fff index

* fix(core): preserve unconfigured console models

* fix(core): lower OpenAI text verbosity

* feat(core): add session snapshot and revert system (anomalyco#33226)

* chore: generate

* fix(app): remove session loading stripe (anomalyco#33649)

Co-authored-by: Test <[email protected]>

* refactor(protocol): extract server contracts (anomalyco#33708)

* refactor(app): centralize session state (anomalyco#33641)

* chore: generate

* fix(app): clear late session notifications (anomalyco#33753)

Co-authored-by: Test <[email protected]>

* chore: update nix node_modules hashes

* feat(sdk): add HttpApi clients and embedded host (anomalyco#33445)

* chore: generate

* chore: update nix node_modules hashes

* fix(app): separate provider lifetimes and reactive ownership (anomalyco#33739)

* chore: generate

* refactor(app): lift parent session navigation (anomalyco#33782)

* chore: generate

* feat(app): draggable tabs (anomalyco#31364)

Co-authored-by: LukeParkerDev <[email protected]>

* chore: generate

* feat(app): ui improvements (anomalyco#32438)

Co-authored-by: LukeParkerDev <[email protected]>

* chore: generate

* fix(app): close missing session tabs (anomalyco#33785)

* fix(app): preserve todo dock across sessions (anomalyco#33778)

* fix(app): remove produce default values in server session state (anomalyco#33793)

* fix(app): update all v1 new-session icons (anomalyco#32017)

Co-authored-by: LukeParkerDev <[email protected]>

* fix(storybook): support prompt state capture (anomalyco#33798)

* feat(app): no sesssions empty state (anomalyco#33315)

* chore: generate

* feat(app): restyle v2 jump-to-latest button (anomalyco#33809)

* fix(app): improve home action availability (anomalyco#33805)

* fix(app): restore tab layout consistency (anomalyco#33804)

* fix(app): reveal tab avatar on hover (anomalyco#33824)

Co-authored-by: Test <[email protected]>

* feat(app): add Chrome tab cycle shortcuts (anomalyco#33838)

* Revert "deps: update OpenTUI to 0.4.2 (anomalyco#33610)" (anomalyco#33842)

* fix(app): use project server for prompt drafts (anomalyco#33850)

* chore: update nix node_modules hashes

* fix(client): exclude generated files from formatting (anomalyco#33832)

Co-authored-by: Test <[email protected]>

* feat(ui): publish ui package (anomalyco#33681)

* sync release versions for v1.17.11

* fix(app): hide mobile titlebar setting in production (anomalyco#33894)

* chore: update nix node_modules hashes

* feat(server): add permission request endpoints (anomalyco#33774)

* chore: generate

* feat(app): improve titlebar tab layout (anomalyco#33914)

* feat(stats): add i18n support (anomalyco#33693)

* fix(app): suspend while recent models load (anomalyco#33921)

* chore: generate

* docs(schema): document package conventions (anomalyco#33768)

* fix(app): restore new layout shortcuts (anomalyco#33929)

* refactor(schema): normalize module patterns (anomalyco#33770)

* chore: generate

* zen: migrate to new inference

* zen: new inference

* fix(app): adjust home search and header layout (anomalyco#33923)

* fix(tui): load root sessions in session switcher (anomalyco#33931)

Request root sessions before applying the session list limit so child
sessions cannot crowd roots out of the switcher.

Keep the synchronized cache available while requests are pending or fail,
reconcile results with live updates, and retain current and pinned sessions.
Preserve selection by session ID when asynchronous results reorder the list.

Closes anomalyco#16270
Closes anomalyco#32725

* fix(app): persist home project selection (anomalyco#33935)

* chore: generate

* refactor(schema): tighten public contracts (anomalyco#33771)

* chore: generate

* refactor(schema): isolate v1 contracts (anomalyco#33769)

* feat(app): group prompt projects by server (anomalyco#33941)

* feat(sdk): restore session runtime operations (anomalyco#33777)

* chore: generate

* refactor(core): support tiered layer nodes (anomalyco#33937)

* chore: generate

* fix(app): use tab-scoped servers in sessions (anomalyco#33946)

* fix(app): enable composer shortcuts on drafts (anomalyco#33956)

* refactor(app): split session composer (anomalyco#33954)

* chore: generate

* fix(mcp): scope auth status to server URL (anomalyco#33924)

* chore: generate

* feat(llm): pass strict through tool definitions for Codex parity (anomalyco#33392)

* fix(app): simplify question prompt (anomalyco#33968)

Co-authored-by: Test <[email protected]>

* feat(core): split MCP timeout configuration (anomalyco#33977)

Co-authored-by: Test <[email protected]>

* fix(core): refine small model defaults (anomalyco#33926)

* tweak: hide MCP access token prefix (anomalyco#33711)

* fix(app): enable auto-accept in session settings (anomalyco#33974)

* fix(app): suspend hidden terminal renderer (anomalyco#33990)

Co-authored-by: Test <[email protected]>

* fix(ui): normalize tooltip trigger layout (anomalyco#33979)

Co-authored-by: Test <[email protected]>
Co-authored-by: Brendan Allan <[email protected]>

* refactor(opencode): stop legacy v2 event emission (anomalyco#33993)

* fix(sdk): wake embedded session execution (anomalyco#33992)

* feat(sdk): expose active sessions (anomalyco#33991)

* chore: generate

* fix(app): bump ghostty-web to prevent terminal resize hangs (anomalyco#34020)

Co-authored-by: Luke Parker <[email protected]>

* chore: update nix node_modules hashes

* refactor(app): use dropdown for project selector (anomalyco#33984)

* refactor(app): replace tab drag handling with dndkit (anomalyco#33880)

Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>

* chore: generate

* feat(oauth): unify OAuth callback browser pages (anomalyco#34025)

* chore: update nix node_modules hashes

* feat(app): refine session UI styling (anomalyco#33860)

Co-authored-by: Brendan Allan <[email protected]>

* chore: generate

* core: prevent UI imports compiling TSX source

* fix(tui): preserve renderer initialization errors (anomalyco#33996)

Co-authored-by: Shoubhit Dash <[email protected]>

* fix(opencode): preserve skill resource paths (anomalyco#34052)

* fix(core): refresh cached remote skills (anomalyco#34059)

* fix(acp): surface prompt errors (anomalyco#34061)

* feat(app): updates to design system (anomalyco#34066)

* fix(acp): skip resume transcript replay (anomalyco#34070)

* fix(mcp): refresh credentials on reauthentication (anomalyco#33717)

* tweak: update OAuth callback branding (anomalyco#34081)

* fix(llm): omit stateless response item ids (anomalyco#34027)

* fix(core): enlarge OAuth callback card (anomalyco#34082)

* feat(app): add new session workspace controls (anomalyco#34085)

* fix(app): consolidate add project action (anomalyco#34086)

* fix(acp): enrich permission prompts (anomalyco#34079)

* docs(providers): document blacklist and whitelist model filtering (anomalyco#33792)

* fix(app): wait for persisted home state before reading collapsed state (anomalyco#34088)

* fix(acp): send partial completed tool updates (anomalyco#34091)

* fix(data): canonicalize locale pages

* docs: route enterprise contact links (anomalyco#34080)

* fix(data): clarify unchanged rank

* feat(stats): add clickable section headings (anomalyco#34095)

* chore: generate

* fix(core): resolve prompt attachment mime types

* chore: generate

* fix(core): authorize external read paths

* fix(llm): end reasoning before responses

* chore: generate

* fix(app): animate prompt selectors after loading (anomalyco#34101)

* feat(api): add finite durable session history pages (anomalyco#34097)

* chore: generate

* fix(app): slow tooltip display for models (anomalyco#30745)

Co-authored-by: affanali2k3 <[email protected]>

* chore: update nix node_modules hashes

* feat(sdk): expose live event stream (anomalyco#34098)

* chore: generate

* fix(app): centralize notification state (anomalyco#34105)

* zen: new inference

* fix: apply lash-specific patches after upstream merge

- Fix SolidJS accessor usage in question-dock (sdk → sdk())
- Remove dead session-prompt-dock.tsx (no imports, replaced by composer)
- Update bun.lock

* fix(tui): use generated event union (anomalyco#34118)

Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <[email protected]>

* fix(app): keep bare slash as plain inline code (anomalyco#34122)

Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <[email protected]>

* fix(app): hide home session archive action (anomalyco#34136)

Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <[email protected]>

* refactor(core): separate out location node functionality and integrate into v2 (anomalyco#34119)

* chore: generate

* fix(mcp): surface OAuth completion errors (anomalyco#34145)

* fix(mcp): request refresh token scope (anomalyco#34125)

* chore: update nix node_modules hashes

* fix(app): migrate composer tooltips to v2 (anomalyco#34147)

Co-authored-by: Jay V <[email protected]>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>

* feat(core): port v2 runtime fixes onto dev

Cherry-picks the packages/core changes from the v2 branch onto dev:
- combined ordered stdout/stderr in AppProcess + bash structured output
- edit/apply-patch return FileDiff info with status and line stats
- ignore no-op model switches; record reasoning timestamps
- return unexpected local tool defects to the model and continue
- keep OAuth account metadata out of request bodies
- nest OpenAI reasoning effort/summary options
- load OpenCode provider config asynchronously; batch plugin boot
- export latest public event manifest

Includes the supporting schema reasoning time field and regenerated
client/SDK types.

* chore: generate

* fix(opencode): allow empty provider config default (anomalyco#34167)

Co-authored-by: Aiden Cline <[email protected]>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>

* chore: update nix node_modules hashes

* fix(app): space home sessions from scrollbar (anomalyco#34132)

Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <[email protected]>

* fix(ui): make select hover feedback immediate (anomalyco#34121)

Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <[email protected]>

* feat(app): update home screen alignment + markdown styles (anomalyco#34172)

* fix(desktop): recognize normal auth metadata input prompts in connect provider dialog (anomalyco#33024)

* fix(app): reconcile session pages with concurrent events (anomalyco#34042)

* chore: generate

* fix(app): batch new session tab navigation (anomalyco#34196)

* feat(app): minor visual updates (anomalyco#34205)

* refactor(core): make node build bind maps conditionally (anomalyco#34218)

* feat(app): new debug bar (anomalyco#34237)

* chore: generate

* fix(tui): register `prompt.skills` keybinds (anomalyco#34180)

* refactor(core): rename app node modules (anomalyco#34238)

* chore: generate

* test(core): cover app node builder graphs (anomalyco#34244)

* refactor(core): move session test to nodes (anomalyco#34245)

* chore: generate

* refactor(core): move more tests to nodes (anomalyco#34248)

* chore: generate

* fix(app): transition draft project updates (anomalyco#34252)

* fix(sdk): preserve V2Event name for SSE streams (anomalyco#34171)

* chore: update nix node_modules hashes

* feat(client): generate complete protocol client (anomalyco#34164)

* fix(app): disable `add project` when given server is offline (anomalyco#34294)

* fix(desktop): avoid destroyed window permission checks (anomalyco#34300)

* zen: new inference

* zen: update alert role

* fix(mcp): reconnect after OAuth even when server is disabled

Closes anomalyco#33915

* fix(mcp): clarify debug oauth probe (anomalyco#34350)

* feat(desktop): Display stored totals for Tokens and Cost in Desktop Session Context (anomalyco#28887)

* chore: generate

* fix(app): wrap model.set in startTransition (anomalyco#34351)

* chore: generate

* feat(tui): integrate ServerAuth headers into transport configuration for external served TUI thread (anomalyco#29876)

* refactor(core): refine layer node replacements (anomalyco#34377)

* chore: generate

* test(core): fix layer node replacement type expectation (anomalyco#34386)

Co-authored-by: Aiden Cline <[email protected]>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>

* fix(app): disable empty server chevron (anomalyco#34292)

* zen: budget

* zen: budget

* feat(app): sticky session list header (anomalyco#34220)

Co-authored-by: Brendan Allan <[email protected]>

* feat(app): show loader on session hover (anomalyco#34224)

* chore: generate

* fix(tui): use V2Event after upstream SSE name preservation (anomalyco#34171)

Upstream renamed the SSE event union back to `V2Event` (no `V2Event1`
suffix). Drop the alias import.

LAC-2490

---------

Co-authored-by: Brendan Allan <[email protected]>
Co-authored-by: Dax Raad <[email protected]>
Co-authored-by: Kit Langton <[email protected]>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <[email protected]>
Co-authored-by: Yufeng He <[email protected]>
Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Test <[email protected]>
Co-authored-by: Chris Yuan <[email protected]>
Co-authored-by: Aiden Cline <[email protected]>
Co-authored-by: Aarav Sareen <[email protected]>
Co-authored-by: Simon Klee <[email protected]>
Co-authored-by: Luke Parker <[email protected]>
Co-authored-by: Brendan Allan <[email protected]>
Co-authored-by: vimtor <[email protected]>
Co-authored-by: Shoubhit Dash <[email protected]>
Co-authored-by: Frank <[email protected]>
Co-authored-by: Adam <[email protected]>
Co-authored-by: 4rcadia <[email protected]>
Co-authored-by: opencode <[email protected]>
Co-authored-by: Isaac Huang <[email protected]>
Co-authored-by: Dax <[email protected]>
Co-authored-by: James Long <[email protected]>
Co-authored-by: usrnk1 <[email protected]>
Co-authored-by: Ariane Emory <[email protected]>
Co-authored-by: Stefan Avram <[email protected]>
Co-authored-by: Affan Ali <[email protected]>
Co-authored-by: affanali2k3 <[email protected]>
Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <[email protected]>
Co-authored-by: Jay V <[email protected]>
Co-authored-by: OpeOginni <[email protected]>
Co-authored-by: Ben Guthrie <[email protected]>
Co-authored-by: Filip <[email protected]>
Co-authored-by: Max Anderson <[email protected]>
  • Loading branch information
commit 2602afff3538be63cfb8ddf75eaeb0e9552515c9
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question.
about: For support, troubleshooting, how-to questions, and real-time discussion.
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/question.yml

This file was deleted.

1 change: 1 addition & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ jobs:
run: bun run build
working-directory: packages/desktop
env:
NODE_OPTIONS: --max-old-space-size=4096
OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/storybook.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
pull_request:
branches: [dev]
paths:
Expand All @@ -17,6 +18,7 @@ on:
- "bun.lock"
- "packages/storybook/**"
- "packages/ui/**"
- "packages/session-ui/**"
workflow_dispatch:

concurrency:
Expand Down
32 changes: 8 additions & 24 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,35 +65,20 @@ jobs:

- name: Run unit tests
timeout-minutes: 20
run: bun turbo test:ci --log-order=stream --log-prefix=task
run: GITHUB_ACTIONS=false bun turbo test
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

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

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

- name: Publish unit reports
if: always()
uses: mikepenz/action-junit-report@bccf2e31636835cf0874589931c4116687171386 # v6.4.0
with:
report_paths: packages/*/.artifacts/unit/junit.xml
check_name: "unit results (${{ matrix.settings.name }})"
detailed_summary: true
include_time_in_summary: true
fail_on_failure: false

- name: Upload unit artifacts
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: unit-${{ matrix.settings.name }}-${{ github.run_attempt }}
include-hidden-files: true
if-no-files-found: ignore
retention-days: 7
path: packages/*/.artifacts/unit/junit.xml

e2e:
name: e2e (${{ matrix.settings.name }})
strategy:
Expand All @@ -119,7 +104,8 @@ jobs:
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "24"
# Playwright 1.59 hangs while extracting Chromium with Node 24.16.
node-version: "24.15"

- name: Setup Bun
uses: ./.github/actions/setup-bun
Expand Down Expand Up @@ -151,7 +137,6 @@ jobs:
run: bun --cwd packages/app test:e2e:local
env:
CI: true
PLAYWRIGHT_JUNIT_OUTPUT: e2e/junit-${{ matrix.settings.name }}.xml
timeout-minutes: 30

- name: Upload Playwright artifacts
Expand All @@ -162,6 +147,5 @@ jobs:
if-no-files-found: ignore
retention-days: 7
path: |
packages/app/e2e/junit-*.xml
packages/app/e2e/test-results
packages/app/e2e/playwright-report
2 changes: 1 addition & 1 deletion .opencode/agent/triage.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
mode: primary
hidden: true
model: opencode/gpt-5.4-nano
model: opencode/gpt-5.4-mini
color: "#44BA81"
tools:
"*": false
Expand Down
11 changes: 9 additions & 2 deletions .opencode/opencode.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,15 @@
"$schema": "https://opencode.ai/config.json",
"provider": {},
"permission": {},
"reference": {
"effect": "github.com/Effect-TS/effect-smol",
"references": {
"effect": {
"repository": "github.com/Effect-TS/effect-smol",
"description": "Use for Effect v4 and effect-smol implementation details",
},
"opencode-local": {
"path": "~/.local/share/opencode",
"description": "Contains opencode logs and data",
},
},
"mcp": {},
"tools": {
Expand Down
2 changes: 2 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
sst-env.d.ts
packages/desktop/src/bindings.ts
packages/client/src/generated/
packages/client/src/generated-effect/
17 changes: 13 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
- After changing the public Protocol or Server `HttpApi`, run `bun run generate` from `packages/client`. Do not edit `src/generated` or `src/generated-effect` directly.
- Keep runtime dependencies directed from Schema to Core and Protocol, then from Core and Protocol to Server. Client runtime code may depend on Schema and Protocol but never Core or Server; `sdk-next` composes Client, Core, and Server.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

## Branch Names

Use a short branch name of at most three words, separated by hyphens. Do not use slashes or type prefixes such as `feat/` or `fix/`.

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

## Commits and PR Titles

Use conventional commit-style messages and PR titles: `type(scope): summary`.
Expand All @@ -22,6 +30,7 @@ Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributi
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
- In `src/config`, follow the existing self-export pattern at the top of the file (for example `export * as ConfigAgent from "./agent"`) when adding a new config module.
- In Effect generators, bind services to named variables before calling methods. Do not use nested service yields such as `yield* (yield* Foo.Service).bar()`.

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

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

## Testing

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

Expand All @@ -146,7 +155,7 @@ const table = sqliteTable("session", {
- Keep `SessionExecution` process-global and Session-ID based. Its local implementation owns the process-local Session coordinator and discovers placement through `SessionStore` plus `LocationServiceMap.get(session.location)` only when a drain starts; no layer should take a Session ID. V2 interruption targets the active process-local ownership chain for that Session; idle or missing interruption is a no-op.
- Keep `SessionRunner`, model resolution, tool registry, permissions, and filesystem Location-scoped. Omitted `Location.workspaceID` means implicit-local placement; explicit workspace identity remains reserved for future placement semantics.
- Preserve one explicit `llm.stream(request)` call per provider turn and reload projected history before durable continuation. Do not bridge through legacy `SessionPrompt.loop(...)` or delegate orchestration to an in-memory tool loop.
- Keep local Session drains process-local until clustering is implemented. `SessionRunCoordinator` joins explicit same-Session resumes, coalesces prompt wakeups, and allows different Sessions to run concurrently. Advisory wakes drain eligible durable inbox rows only; post-crash activity recovery requires a separate explicit design before it may retry provider work.
- Keep delivery vocabulary explicit. Prompts steer by default and coalesce into the active activity at the next safe provider-turn boundary. Explicit `queue` inputs open FIFO future activities one at a time after the active activity settles.
- Keep local Session drains process-local until clustering is implemented. `SessionRunCoordinator` joins explicit same-Session resumes, coalesces prompt wakeups, and allows different Sessions to run concurrently. Advisory wakes drain eligible durable inbox rows only; post-crash continuation recovery requires a separate explicit design before it may retry provider work. A drain has no durable identity or transcript boundary.
- Keep delivery vocabulary explicit. Prompts steer by default and promote at the next safe provider-turn boundary while the current drain requires continuation. An explicit `queue` input remains pending until the Session would otherwise become idle; promote one queued input at that boundary, then reevaluate continuation before promoting another. Promoting any new user input resets the selected agent's provider-turn allowance; a batch of steers resets it once.
- Keep EventV2 replay owner claims separate from clustered Session execution ownership.
- Keep the System Context algebra, registry, and built-ins in `src/system-context`; keep Context Source producers with their observed domains, and keep Session History selection plus Context Epoch persistence Session-owned.
Loading
Loading