Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
213 commits
Select commit Hold shift + click to select a range
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
1f2de53
fix(ai): parse compatible reasoning deltas (#37558)
opencode-agent[bot] Jul 18, 2026
7d4496e
test(core): stabilize shell progress test (#37643)
opencode-agent[bot] Jul 18, 2026
5f437a0
feat(codemode): native coercion parity in interpreter (#37608)
rekram1-node Jul 18, 2026
d625bc8
feat(core): publish pending MCP status during connect (#37605)
rekram1-node Jul 18, 2026
4e56998
fix(cli): harden managed service election (#37645)
kitlangton Jul 18, 2026
0d68b0b
fix(tui): style interrupted compaction neutrally (#37655)
opencode-agent[bot] Jul 18, 2026
33f1b26
fix(codemode): stop leaking undefined into tool arguments (#37652)
rekram1-node Jul 18, 2026
fe9b051
feat(core): allow MCP Code Mode opt-out (#37681)
opencode-agent[bot] Jul 18, 2026
4e85a37
fix(tui): auto-approve permissions in auto mode
thdxr Jul 18, 2026
c310ef8
fix(core): authorize relative external paths (#37689)
kitlangton Jul 18, 2026
584fdef
fix(simulation): render screenshot symbol glyphs (#37691)
kitlangton Jul 19, 2026
57ff575
fix(core): safely recover malformed tool input (#37698)
kitlangton Jul 19, 2026
a288cb5
fix(core): continue after malformed tool input (#37701)
kitlangton Jul 19, 2026
ba0bbda
fix(core): preserve the first terminal failure (#37705)
kitlangton Jul 19, 2026
cbcf191
fix(core): detach disposed MCP registrations from root scope (#37660)
rekram1-node Jul 19, 2026
cf6e5b3
mini: fix shell tool output display (#37711)
simonklee Jul 19, 2026
3f5ad84
cli: extract run from mini package (#37737)
simonklee Jul 19, 2026
c50554d
mini: move frontend into tui package (#37754)
simonklee Jul 19, 2026
04f0a77
feat(ai): add OpenAI image generation (#37714)
opencode-agent[bot] Jul 19, 2026
d5669ca
docs(codemode): streamline README (#37769)
rekram1-node Jul 19, 2026
fe9a936
feat(server): expose runtime MCP controls over HTTP (#37712)
rekram1-node Jul 19, 2026
bef6cfb
feat(client): support opaque payload schemas (#37773)
opencode-agent[bot] Jul 19, 2026
f05d2ab
fix(tui): load root sessions in switcher (#37784)
opencode-agent[bot] Jul 19, 2026
86a468c
fix(tui): move agent cycling to shift-tab (#37706)
opencode-agent[bot] Jul 19, 2026
edc93ce
feat(simulation): expose semantic UI snapshots (#37802)
kitlangton Jul 19, 2026
71cb419
fix(simulation): validate semantic click identity (#37808)
kitlangton Jul 19, 2026
925c242
mini: add reconnect, forms, and shared targets (#37811)
simonklee Jul 19, 2026
6d32bc9
feat(simulation): control arbitrary tool lifecycles (#37816)
kitlangton Jul 19, 2026
fe0c74f
fix(cli): accept updated service on restart
thdxr Jul 19, 2026
391cfbc
fix(codemode): align string, array, and Date behavior (#37775)
rekram1-node Jul 20, 2026
2b8d199
fix(ai): buffer partial tool call identity (#37847)
opencode-agent[bot] Jul 20, 2026
b9525b5
fix(ai): expand context overflow patterns (#37848)
opencode-agent[bot] Jul 20, 2026
8b5655e
fix(ai): preserve compatible reasoning details (#37708)
rekram1-node Jul 20, 2026
deee40c
fix(codemode): parse canonical index keys (#37851)
rekram1-node Jul 20, 2026
0eb71d0
refactor(tui): extract shared frontend helpers (#37868)
simonklee Jul 20, 2026
75c7ac6
tui/mini: consolidate stream and panel internals (#37903)
simonklee Jul 20, 2026
a9895a1
fix(tui/mini): idle footer when session idles (#37910)
simonklee Jul 20, 2026
6702ce0
fix(tui): soften theme scale extremes (#37555)
jlongster Jul 20, 2026
3f4fb3f
fix(tui): show opencode2 continuation command (#37933)
opencode-agent[bot] Jul 20, 2026
7be95bc
feat(tui): support single-mode themes (#37930)
jlongster Jul 20, 2026
c7aa47c
feat(tui): implement session timeline
thdxr Jul 20, 2026
3da0dea
feat(codemode): expand standard library parity (#37943)
rekram1-node Jul 20, 2026
e8b19af
fix(tui): adapt file badge accent to theme mode (#37953)
jlongster Jul 20, 2026
6d50023
feat(codemode): complete regexp and math parity (#37955)
rekram1-node Jul 20, 2026
98c2907
feat(codemode): complete date parity (#37960)
rekram1-node Jul 20, 2026
61b7caa
fix(tui): make migrated selected background transparent (#37967)
opencode-agent[bot] Jul 20, 2026
f971aa0
refactor(server): inject database options
thdxr Jul 20, 2026
0aa4031
refactor(core): inject models options
thdxr Jul 20, 2026
79d0077
feat(tui): add categorical theme hues (#37985)
jlongster Jul 20, 2026
0b2e2cb
fix(core): ignore empty provider api keys
thdxr Jul 20, 2026
17c1e9b
refactor(ai): infer image provider options (#37948)
opencode-agent[bot] Jul 20, 2026
0c18d06
feat(codemode): add groupBy parity (#37992)
rekram1-node Jul 20, 2026
df1f42d
feat(ai): add xAI image generation (#37778)
opencode-agent[bot] Jul 20, 2026
642950a
fix(cli): isolate bun updater cache
thdxr Jul 20, 2026
8cb9361
feat(ai): add Google image generation (#37781)
opencode-agent[bot] Jul 20, 2026
c0ba62b
refactor(tui): expose theme colors as properties (#37995)
jlongster Jul 20, 2026
4c9a430
chore: merge dev into v2 (#37996)
opencode-agent[bot] Jul 20, 2026
fa4ec98
feat(ai): add Z.ai image generation (#37780)
opencode-agent[bot] Jul 20, 2026
e93fa06
feat(ai): support image-guided generation (#37998)
opencode-agent[bot] Jul 20, 2026
a2c4c7a
refactor(tui): migrate diff viewer to V2 theme (#37999)
jlongster Jul 20, 2026
455b5d3
fix(core): match dev patch behavior (#37709)
rekram1-node Jul 20, 2026
f5a487f
feat(codemode): add Set method parity (#38000)
rekram1-node Jul 20, 2026
ace77a5
refactor(server): centralize server options
thdxr Jul 21, 2026
0409e68
refactor(server): inject runtime options
thdxr Jul 21, 2026
9445b4d
refactor(server): inject config options
thdxr Jul 21, 2026
407ac2d
refactor(server): migrate host options
thdxr Jul 21, 2026
43c0838
refactor: isolate legacy flags
thdxr Jul 21, 2026
fc7e4cf
fix(server): preserve v1 auth compatibility
thdxr Jul 21, 2026
44b6938
removed packages/opencode
thdxr Jul 21, 2026
39fdd67
fix: remove legacy sdk from ci builds
thdxr Jul 21, 2026
065b108
feat(codemode): support JSON callbacks (#38006)
rekram1-node Jul 21, 2026
09a38f1
fix(server): allow authenticated CORS preflight (#38026)
Brendonovich Jul 21, 2026
63e2054
fix(core): improve patch errors (#38016)
rekram1-node Jul 21, 2026
a81c04f
feat(codemode): support labeled control flow (#38035)
rekram1-node Jul 21, 2026
eb4ff91
fix(core): compose successive patch updates (#38034)
rekram1-node Jul 21, 2026
96dc560
fix(core): accept padded patch markers (#38036)
rekram1-node Jul 21, 2026
e770415
fix(core): normalize CRLF patch lines (#38038)
rekram1-node Jul 21, 2026
7111f93
feat(codemode): support bounded async iteration (#38040)
rekram1-node Jul 21, 2026
fd97d78
test(app): stabilize offset observer test (#38044)
opencode-agent[bot] Jul 21, 2026
592ef74
mini: settle on wait and durable pending (#37984)
simonklee Jul 21, 2026
dd50d45
refactor(tui): simplify mini footer status line (#38112)
simonklee Jul 21, 2026
7243bd9
fix: preserve runtime option defaults (#38118)
thdxr Jul 21, 2026
e081075
refactor: extract shared util package (#37828)
thdxr Jul 21, 2026
cf2c1bf
refactor(core): break plugin host cycle (#38120)
opencode-agent[bot] Jul 21, 2026
3304e79
fix(tui): prevent autocomplete search flicker (#38128)
thdxr Jul 21, 2026
3ea8895
fix(core): enforce patch EOF anchors (#38039)
rekram1-node Jul 21, 2026
8d80365
refactor(codemode): simplify model-facing wording (#38042)
rekram1-node Jul 21, 2026
cf651bc
feat(cli): port ACP to V2 (#37907)
nexxeln Jul 21, 2026
69d7c2a
feat(util): configure package publishing (#38129)
thdxr Jul 21, 2026
023f76f
fix(core): refresh model catalog every five minutes (#38142)
opencode-agent[bot] Jul 21, 2026
99b2e78
fix(tui): improve responsive footer details (#38116)
simonklee Jul 21, 2026
dbfbb13
fix(core): authorize patch move destinations (#38133)
rekram1-node Jul 21, 2026
6f4b950
feat(codemode): support custom async iterators (#38141)
rekram1-node Jul 21, 2026
dd6c95f
mini: add quiet transcript settings (#38152)
simonklee Jul 21, 2026
9c38358
refactor: centralize client identity (#38148)
thdxr Jul 21, 2026
caf727e
fix(core): filter unsupported media inputs (#38145)
opencode-agent[bot] Jul 21, 2026
0405670
refactor(core): move database path policy (#38159)
thdxr Jul 21, 2026
6ec17e5
fix(core): align patch Unicode matching (#38160)
rekram1-node Jul 21, 2026
c4fa5e6
mini: add turn summary visibility setting (#38153)
simonklee Jul 21, 2026
7ec1b6e
feat(core): deliver CodeMode catalog through instructions (#38003)
rekram1-node Jul 21, 2026
e8d273a
mini: add monochrome ASCII mode (#38173)
simonklee Jul 21, 2026
128e255
fix(core): use shared app node import (#38181)
opencode-agent[bot] Jul 21, 2026
e6607fb
fix(core): authorize symlinks by lexical path (#38180)
opencode-agent[bot] Jul 21, 2026
77d3289
chore: merge dev into v2 (#38182)
opencode-agent[bot] Jul 21, 2026
1ea9137
fix(core): identify spawned subagents (#38189)
thdxr Jul 21, 2026
2ed8fe5
mini: add hideable footer details (#38192)
simonklee Jul 21, 2026
8de40be
feat(plugin): expose app metadata (#38179)
thdxr Jul 21, 2026
c2351e3
fix(ci): skip legacy artifacts on v2
thdxr Jul 21, 2026
c944048
feat(updates): add release control service
thdxr Jul 21, 2026
da35eac
fix(sdk): build without legacy sources
thdxr Jul 22, 2026
b665cfc
chore: sync upstream v2
shuv1337 Jul 22, 2026
a0a6963
fix(core): discover Copilot API endpoint (#38184)
rekram1-node Jul 22, 2026
871395a
chore: sync upstream v2 updates
shuv1337 Jul 22, 2026
3cae308
chore: sync latest upstream v2
shuv1337 Jul 22, 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
  •  
  •  
  •  
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
2 changes: 1 addition & 1 deletion .github/last-synced-tag
Original file line number Diff line number Diff line change
@@ -1 +1 @@
83cfafc8842c959f7ab794e9634b65a646b6a3f4
a0a6963beb7bc9b613380cb3a608ee887dfdbe1e
2 changes: 2 additions & 0 deletions .github/workflows/pr-management.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:

jobs:
check-duplicates:
if: github.repository == 'anomalyco/opencode'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: read
Expand Down Expand Up @@ -72,6 +73,7 @@ jobs:
fi

add-contributor-label:
if: github.repository == 'anomalyco/opencode'
runs-on: ubuntu-latest
permissions:
pull-requests: write
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/pr-standards.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:

jobs:
check-standards:
if: github.repository == 'anomalyco/opencode'
runs-on: ubuntu-latest
permissions:
contents: read
Expand Down Expand Up @@ -153,6 +154,7 @@ jobs:
console.log('PR meets all standards');

check-compliance:
if: github.repository == 'anomalyco/opencode'
runs-on: ubuntu-latest
permissions:
contents: read
Expand Down
75 changes: 71 additions & 4 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,25 +90,34 @@ jobs:
opencode-app-id: ${{ vars.OPENCODE_APP_ID }}
opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }}

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

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

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

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: github.ref_name != 'v2'
with:
name: opencode-cli-windows
path: packages/opencode/dist/opencode-windows*
Expand All @@ -121,6 +130,55 @@ 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
Expand Down Expand Up @@ -413,6 +471,7 @@ jobs:
needs:
- version
- build-cli
- build-node-cli
- sign-cli-windows
- build-electron
if: always() && !failure() && !cancelled()
Expand Down Expand Up @@ -441,11 +500,13 @@ jobs:
registry-url: "https://registry.npmjs.org"

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

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

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

- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
if: needs.version.outputs.release
with:
Expand Down
14 changes: 14 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,20 @@ jobs:
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
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ node_modules
playground
tmp
dist
dist-node
ts-dist
.turbo
.typecheck-profiles
Expand All @@ -25,6 +26,7 @@ Session.vim
a.out
target
.scripts
.cache
.direnv/

# Local dev files
Expand Down
2 changes: 1 addition & 1 deletion .opencode/command/translate.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: translate English to other languages
model: opencode/claude-opus-4-8
model: opencode/gpt-5.6-sol
---

run git diff and translate changed english doc and UI copy files to other international languages. Translate all languages in parallel to save time.
Expand Down
10 changes: 4 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- 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.
- Do not modify `packages/opencode` unless the user explicitly asks for V1 work. `packages/opencode` is the V1 implementation and is present for reference only. New implementation changes should land in the V2 package set: `packages/core`, `packages/cli`, `packages/server`, `packages/protocol`, `packages/schema`, and related generated client surfaces when required.
- Implementation changes should land in the V2 package set: `packages/core`, `packages/cli`, `packages/server`, `packages/protocol`, `packages/schema`, and related generated client surfaces when required. The deleted V1 `packages/opencode` tree is available from `fork-v1-final` when historical reference is needed.
- The default branch in this repo is `dev`.
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

Expand All @@ -19,8 +19,6 @@ Valid types are `feat`, `fix`, `docs`, `chore`, `refactor`, and `test`. Scopes a

Examples: `fix(tui): simplify thinking toggle styling`, `docs: update contributing guide`, `chore(sdk): regenerate types`.

Never bypass Git hooks. Do not use `--no-verify` or otherwise disable, skip, or circumvent commit or push hooks. If a hook fails, fix the failure or stop and report it to the user.

## Style Guide

### General Principles
Expand Down Expand Up @@ -146,11 +144,11 @@ const table = sqliteTable("session", {

- 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`.
- Tests cannot run from repo root (guard: `do-not-run-tests-from-root`); run from package dirs like `packages/core` or `packages/cli`.

## Type Checking

- Always run `bun typecheck` from package directories (e.g., `packages/opencode`), never `tsc` directly.
- Always run `bun typecheck` from package directories (e.g., `packages/core`), never `tsc` directly.

## V2 Session Core

Expand All @@ -173,4 +171,4 @@ const table = sqliteTable("session", {
- The fork tracks `upstream/v2` on `integration-v2`; `integration` and tag `fork-v1-final` are the frozen V1 rollback line.
- Record upstream sync state in `.github/last-synced-tag` as a V2 commit SHA.
- The CLI binary and npm package are named `shuvcode`.
- Keep `packages/core/src/global.ts` `app = "opencode"` for XDG path compatibility.
- Keep `packages/util/src/global.ts` `app = "opencode"` for XDG path compatibility.
Loading
Loading