Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2161 commits
Select commit Hold shift + click to select a range
3b97580
tweak: ensure read tool uses fs/promises for all paths (#14027)
rekram1-node Feb 17, 2026
bad394c
chore: remove leftover patch (#13749)
akronb Feb 17, 2026
5512231
fix(tui): style scrollbox for permission and sidebar (#12752)
akronb Feb 17, 2026
ad3c192
tui: exit cleanly without hanging after session ends
thdxr Feb 17, 2026
bca793d
ci: ensure triage adds acp label (#14039)
rekram1-node Feb 17, 2026
a344a76
chore: generate
opencode-agent[bot] Feb 17, 2026
c56f4aa
refactor: simplify redundant ternary in updateMessage (#13954)
yikayiyo Feb 17, 2026
ad92181
feat: add Kilo as a native provider (#13765)
Nomadcxx Feb 17, 2026
572a037
chore: generate
opencode-agent[bot] Feb 17, 2026
0ca7554
fix: dont autoload kilo (#14052)
rekram1-node Feb 18, 2026
25f3eef
fix: ensure explore subagent has external_directory perm set to ask i…
rekram1-node Feb 18, 2026
1109a28
ci: add nix-eval workflow for cross-platform flake evaluation (#12175)
jerome-benoit Feb 18, 2026
e96f638
fix(opencode): fix Clojure syntax highlighting (#13453)
finalfantasia Feb 18, 2026
6eb043a
ci: allow commits on top of beta PRs (#11924)
gigamonster256 Feb 18, 2026
5aeb305
desktop: temporarily disable wsl
Brendonovich Feb 18, 2026
6cd3a59
desktop: cleanup
Brendonovich Feb 18, 2026
3394402
chore: cleanup
adamdotdevin Feb 18, 2026
cc86a64
tui: simplify mode toggle icon styling
iamdavidhill Feb 18, 2026
c34ad72
chore: cleanup
adamdotdevin Feb 18, 2026
fbe9669
fix: use group-hover for file tree icon color swap at all nesting levels
iamdavidhill Feb 18, 2026
e132dd2
chore: cleanup
adamdotdevin Feb 18, 2026
e4b548f
docs: add policy about AI-generated security reports
thdxr Feb 18, 2026
00c2387
chore: cleanup (#14113)
adamdotdevin Feb 18, 2026
2611c35
fix(app): lower threshold for diff hiding
adamdotdevin Feb 18, 2026
1bb8574
app: refactor server management backend (#13813)
Brendonovich Feb 18, 2026
6b29896
feat: Add centralized filesystem module for Bun.file migration (#14117)
thdxr Feb 18, 2026
3aaf29b
chore: update nix node_modules hashes
opencode-agent[bot] Feb 18, 2026
4a58235
desktop: fix isLocal
Brendonovich Feb 18, 2026
f8904e3
desktop: handle sidecar key in projectsKey
Brendonovich Feb 18, 2026
d27dbfe
fix(cli): session list --max-count not honored, shows too few session…
mharris717 Feb 18, 2026
83b7d8e
feat: GitLab Duo - bump gitlab-ai-provider to 3.6.0 (adds Sonnet 4.6)…
vglafirov Feb 18, 2026
fc1addb
ignore: tweak contributing md (#14168)
rekram1-node Feb 18, 2026
38572b8
feat: add Julia language server support (#14129)
zarly Feb 18, 2026
37b24f4
refactor: migrate index.ts from Bun.file() to Filesystem module (#14160)
thdxr Feb 18, 2026
91a3ee6
chore: update nix node_modules hashes
opencode-agent[bot] Feb 18, 2026
3d189b4
refactor: migrate file/ripgrep.ts from Bun.file()/Bun.write() to File…
thdxr Feb 18, 2026
a5c15a2
core: allow readJson to be called without explicit type parameter
thdxr Feb 18, 2026
472d01f
refactor: migrate cli/cmd/run.ts from Bun.file() to Filesystem/stat m…
thdxr Feb 18, 2026
b714bb2
ci: switch to standard GitHub cache action for Bun dependencies
thdxr Feb 18, 2026
a500eaa
refactor: migrate format/formatter.ts from Bun.file() to Filesystem m…
thdxr Feb 18, 2026
82a323e
refactor: migrate cli/cmd/github.ts from Bun.write() to Filesystem mo…
thdxr Feb 18, 2026
ef155f3
refactor: migrate file/index.ts from Bun.file() to Filesystem module …
thdxr Feb 18, 2026
8f4a72c
refactor: migrate config/markdown.ts from Bun.file() to Filesystem mo…
thdxr Feb 18, 2026
e0e8b94
refactor: migrate uninstall.ts from Bun.file()/Bun.write() to Filesys…
thdxr Feb 18, 2026
c88ff3c
refactor: migrate src/bun/index.ts from Bun.file()/Bun.write() to Fil…
thdxr Feb 18, 2026
eb3f337
refactor: migrate clipboard.ts from Bun.file() to Filesystem module (…
thdxr Feb 18, 2026
5638b78
refactor: migrate editor.ts from Bun.file()/Bun.write() to Filesystem…
thdxr Feb 18, 2026
d447b76
fix(github): emit PROMPT_TOO_LARGE error on context overflow (#14166)
elithrar Feb 18, 2026
3f60a6c
chore: cleanup
adamdotdevin Feb 18, 2026
ef14f64
chore: cleanup
adamdotdevin Feb 18, 2026
8408e47
chore: cleanup
adamdotdevin Feb 18, 2026
72c12d5
chore: cleanup
adamdotdevin Feb 18, 2026
be2e6f1
fix(opencode): update pasteImage to only increment count when the pre…
OpeOginni Feb 18, 2026
8bf06cb
refactor: migrate src/global/index.ts from Bun.file() to Filesystem m…
thdxr Feb 18, 2026
24a9841
zen: update sst version
fwang Feb 18, 2026
c6bd320
chore: update nix node_modules hashes
opencode-agent[bot] Feb 18, 2026
42aa28d
chore: cleanup (#14181)
adamdotdevin Feb 18, 2026
1133d87
chore: cleanup
adamdotdevin Feb 18, 2026
de25703
fix(app): terminal cross-talk (#14184)
adamdotdevin Feb 18, 2026
1aa18c6
feat(plugin): pass sessionID and callID to shell.env hook input (#13662)
tesdal Feb 18, 2026
2d7c9c9
chore: generate
opencode-agent[bot] Feb 18, 2026
d6331cf
Update colors.css
iamdavidhill Feb 18, 2026
12016c8
oc-2 theme init
iamdavidhill Feb 18, 2026
5d69f00
button style tweaks
iamdavidhill Feb 18, 2026
24ce49d
fix(ui): add previous smoke colors
iamdavidhill Feb 18, 2026
0888c02
tweak(ui): file tree background color
iamdavidhill Feb 18, 2026
9110e6a
tweak(ui): share button border
iamdavidhill Feb 18, 2026
f20c0bf
tweak(ui): unify titlebar expanded button background
iamdavidhill Feb 18, 2026
e5d52e4
tweak(ui): align pill tabs pressed background
iamdavidhill Feb 18, 2026
4db2d94
tweak(ui): shrink filetree tab height
iamdavidhill Feb 18, 2026
0873908
tweak(ui): theme color updates
iamdavidhill Feb 18, 2026
1f9be63
tweak(ui): use weak border and base icon color for secondary
iamdavidhill Feb 18, 2026
6d69ad5
tweak(ui): update oc-2 secondary button colors
iamdavidhill Feb 18, 2026
bcca253
tweak(ui): hover and active styles for title bar buttons
iamdavidhill Feb 18, 2026
3690caf
tweak(ui): hover and active styles for title bar buttons
iamdavidhill Feb 18, 2026
4e95984
tweak(ui): hover and active styles for filetree tabs
iamdavidhill Feb 18, 2026
09286cc
tweak(ui): oc-2 theme updates
iamdavidhill Feb 18, 2026
2f56761
tweak(ui): expanded color state on titlebar buttons
iamdavidhill Feb 18, 2026
db4ff89
Update oc-2.json
iamdavidhill Feb 18, 2026
1ed4a98
tweak(ui): remove pressed transition for secondary buttons
iamdavidhill Feb 18, 2026
431f534
tweak(ui): search button style
iamdavidhill Feb 18, 2026
c7a79f1
Update icon-button.css
iamdavidhill Feb 18, 2026
e42cc85
Update oc-2.json
iamdavidhill Feb 18, 2026
d730d8b
tweak(ui): shrink review diff style toggle
iamdavidhill Feb 18, 2026
1571246
tweak(ui): use default cursor for segmented control
iamdavidhill Feb 18, 2026
1b67339
Update radio-group.css
iamdavidhill Feb 18, 2026
06b2304
tweak(ui): override for the radio group in the review
iamdavidhill Feb 18, 2026
31e964e
Update oc-2.json
iamdavidhill Feb 18, 2026
bb6d1d5
tweak(ui): adjust review diff style hover radius
iamdavidhill Feb 18, 2026
47b4de3
tweak(ui): tighten review header action spacing
iamdavidhill Feb 18, 2026
ba919fb
tweak(ui): shrink review expand/collapse width
iamdavidhill Feb 18, 2026
50923f0
tweak(ui): remove pressed scale for secondary buttons
iamdavidhill Feb 18, 2026
d8a4a12
Update oc-2.json
iamdavidhill Feb 18, 2026
7faa8cb
tweak(ui): reduce review panel padding
iamdavidhill Feb 18, 2026
dec7827
chore: generate
opencode-agent[bot] Feb 18, 2026
c71f4d4
Update oc-2.json
iamdavidhill Feb 18, 2026
d5971e2
refactor: migrate src/cli/cmd/import.ts from Bun.file() to Filesystem…
thdxr Feb 18, 2026
898bcde
refactor: migrate src/cli/cmd/agent.ts from Bun.file()/Bun.write() to…
thdxr Feb 18, 2026
3cde93b
refactor: migrate src/auth/index.ts from Bun.file()/Bun.write() to Fi…
thdxr Feb 18, 2026
a2469d9
refactor: migrate src/acp/agent.ts from Bun.file() to Filesystem modu…
thdxr Feb 18, 2026
e37a908
refactor: migrate src/cli/cmd/session.ts from Bun.file() to statSync …
thdxr Feb 18, 2026
a4b36a7
refactor: migrate src/file/time.ts from Bun.file() to stat (#14141)
thdxr Feb 18, 2026
ec7c72d
tweak(ui): restyle reasoning blocks
iamdavidhill Feb 18, 2026
2589eb2
tweak(app): shorten prompt mode toggle tooltips
iamdavidhill Feb 18, 2026
cfea5c7
tweak(app): delay prompt mode toggle tooltip
iamdavidhill Feb 18, 2026
d366a14
refactor: migrate src/lsp/server.ts from Bun.file()/Bun.write() to Fi…
thdxr Feb 18, 2026
87c1637
fix(lsp): use HashiCorp releases API for installing terraform-ls (#14…
edubxb Feb 18, 2026
7033b4d
fix(win32): Sidecar spawning a window (#14197)
Hona Feb 18, 2026
639d1dd
chore: add compliance checks for issues and PRs with recheck on edit …
R44VC0RP Feb 18, 2026
b909679
chore: generate
opencode-agent[bot] Feb 18, 2026
b75a897
refactor: migrate src/lsp/client.ts from Bun.file() to Filesystem mod…
thdxr Feb 18, 2026
97520c8
refactor: migrate src/provider/models.ts from Bun.file()/Bun.write() …
thdxr Feb 18, 2026
48dfa45
refactor: migrate src/util/log.ts from Bun.file() to Node.js fs modul…
thdxr Feb 18, 2026
6fb4f2a
refactor: migrate src/cli/cmd/tui/thread.ts from Bun.file() to Filesy…
thdxr Feb 18, 2026
5d12eb9
refactor: migrate src/shell/shell.ts from Bun.file() to statSync (#14…
thdxr Feb 18, 2026
359360a
refactor: migrate src/provider/provider.ts from Bun.file() to Filesys…
thdxr Feb 18, 2026
ae39853
refactor: migrate src/session/instruction.ts from Bun.file() to Files…
thdxr Feb 18, 2026
5fe237a
refactor: migrate src/skill/discovery.ts from Bun.file()/Bun.write() …
thdxr Feb 18, 2026
088eac9
fix: opencode run crashing, and show errored tool calls in output (#1…
rekram1-node Feb 18, 2026
c162074
chore: skip PR standards checks for PRs created before Feb 18 2026 6P…
R44VC0RP Feb 18, 2026
57b63ea
refactor: migrate src/session/prompt.ts from Bun.file() to Filesystem…
thdxr Feb 19, 2026
a8347c3
refactor: migrate src/storage/db.ts from Bun.file() to statSync (#14124)
thdxr Feb 19, 2026
9e6cb89
refactor: migrate src/mcp/auth.ts from Bun.file()/Bun.write() to File…
thdxr Feb 19, 2026
819d09e
refactor: migrate src/storage/json-migration.ts from Bun.file() to Fi…
thdxr Feb 19, 2026
a624871
refactor: migrate src/storage/storage.ts from Bun.file()/Bun.write() …
thdxr Feb 19, 2026
bd52ce5
refactor: migrate remaining tool files from Bun.file() to Filesystem/…
thdxr Feb 19, 2026
270b807
refactor: migrate src/tool/edit.ts from Bun.file() to Filesystem modu…
thdxr Feb 19, 2026
36bc07a
refactor: migrate src/tool/write.ts from Bun.file() to Filesystem mod…
thdxr Feb 19, 2026
14c0989
refactor: migrate src/tool/read.ts from Bun.file() to Filesystem modu…
thdxr Feb 19, 2026
ba53c56
tweak(ui): combine diffs in review into one group
iamdavidhill Feb 18, 2026
9c7629c
Update oc-2.json
iamdavidhill Feb 18, 2026
4a8bdc3
tweak(ui): group edited files list styling
iamdavidhill Feb 18, 2026
fd61be4
tweak(ui): show added diff counts in review
iamdavidhill Feb 18, 2026
a301051
tweak(ui): tighten review diff file info gap
iamdavidhill Feb 18, 2026
40f00cc
tweak(ui): use chevron icons for review diff rows
iamdavidhill Feb 19, 2026
4404954
tweak(ui): add open-file tooltip icon
iamdavidhill Feb 19, 2026
3d0f240
tweak(app): tighten prompt dock padding
iamdavidhill Feb 19, 2026
5d8664c
tweak(app): adjust session turn horizontal padding
iamdavidhill Feb 19, 2026
6042785
tweak(ui): rtl-truncate edited file paths
iamdavidhill Feb 19, 2026
802ccd3
tweak(ui): rotate collapsible chevron icon
iamdavidhill Feb 19, 2026
3a07dd8
refactor: migrate src/project/project.ts from Bun.file() to Filesyste…
thdxr Feb 19, 2026
568eccb
Revert: all refactor commits migrating from Bun.file() to Filesystem …
thdxr Feb 19, 2026
d620455
app: deduplicate allServers list
Brendonovich Feb 19, 2026
11a3783
tui: ensure onExit callback fires after terminal output is written
thdxr Feb 19, 2026
3a416f6
sdk: fix nested exports transformation in publish script
thdxr Feb 19, 2026
1893473
fix: token substitution in OPENCODE_CONFIG_CONTENT (alternate take) (…
ariane-emory Feb 19, 2026
4b878f6
chore: generate
opencode-agent[bot] Feb 19, 2026
308e500
tweak: bake in the aws and google auth pkgs (#14241)
rekram1-node Feb 19, 2026
c7b3534
chore: update nix node_modules hashes
opencode-agent[bot] Feb 19, 2026
d07f099
fix(app): terminal rework (#14217)
adamdotdevin Feb 19, 2026
885d716
desktop: fetch defaultServer at top level
Brendonovich Feb 19, 2026
d2d5f3c
app: fix typecheck
Brendonovich Feb 19, 2026
38f7071
chore: cleanup
adamdotdevin Feb 18, 2026
8ebdbe0
fix(core): text files missclassified as binary
adamdotdevin Feb 19, 2026
338393c
fix(app): accordion styles
adamdotdevin Feb 19, 2026
0fcba68
chore: cleanup
adamdotdevin Feb 19, 2026
02a9495
Remove use of Bun.file (#14215)
thdxr Feb 19, 2026
08a2d00
zen: gemini 3.1 pro
fwang Feb 19, 2026
6b8902e
fix(app): navigate to last session on project nav
adamdotdevin Feb 19, 2026
56dda4c
chore: cleanup
adamdotdevin Feb 19, 2026
3c21735
refactor: migrate from Bun.Glob to npm glob package
thdxr Feb 19, 2026
f2858a4
chore: cleanup
adamdotdevin Feb 19, 2026
50883cc
app: make localhost urls work in isLocal
Brendonovich Feb 19, 2026
af72010
Revert "refactor: migrate from Bun.Glob to npm glob package"
thdxr Feb 19, 2026
850402f
chore: update nix node_modules hashes
opencode-agent[bot] Feb 19, 2026
91f8dd5
chore: update nix node_modules hashes
opencode-agent[bot] Feb 19, 2026
5364ab7
tweak: add support for medium reasoning w/ gemini 3.1 (#14316)
rekram1-node Feb 19, 2026
7e35d0c
core: bump ai sdk packages for google, google vertex, anthropic, bedr…
rekram1-node Feb 19, 2026
cb8b74d
refactor: migrate from Bun.Glob to npm glob package (#14317)
thdxr Feb 19, 2026
8b99648
chore: update nix node_modules hashes
opencode-agent[bot] Feb 19, 2026
00c0798
test: fix discovery test to boot up server instead of relying on 3rd …
rekram1-node Feb 19, 2026
1867f1a
chore: generate
opencode-agent[bot] Feb 19, 2026
b64d076
docs(ko): improve wording in ecosystem, enterprise, formatters, and g…
Seungjun0906 Feb 19, 2026
190d295
fix(core): normalize file.status paths relative to instance dir (#14207)
shantur Feb 19, 2026
3d9f6c0
feat(i18n): update Japanese translations to WSL integration (#13160)
taroj1205 Feb 19, 2026
7fb2081
chore: cleanup
adamdotdevin Feb 19, 2026
7729c6d
chore: cleanup
adamdotdevin Feb 19, 2026
40a939f
chore: cleanup
adamdotdevin Feb 19, 2026
f8dad0a
fix(app): terminal issues (#14329)
adamdotdevin Feb 19, 2026
49cc872
chore: refactor composer/dock components (#14328)
adamdotdevin Feb 19, 2026
c76a814
chore: cleanup
adamdotdevin Feb 19, 2026
1a1437e
fix(github): action branch detection and 422 handling (#14322)
elithrar Feb 19, 2026
04cf2b8
release: v1.2.7
Feb 19, 2026
dd011e8
fix(app): clear todos on abort
adamdotdevin Feb 19, 2026
7a42ecd
chore: cleanup
adamdotdevin Feb 19, 2026
824ab4c
feat(tui): add custom tool and mcp call responses visible and collaps…
yanosh-k Feb 19, 2026
193013a
feat(opencode): support adaptive thinking for claude sonnet 4.6 (#14283)
tctev Feb 19, 2026
686dd33
chore: generate
opencode-agent[bot] Feb 19, 2026
fca0166
fix(app): black screen on launch with sidecar server
adamdotdevin Feb 19, 2026
f2090b2
release: v1.2.8
Feb 19, 2026
cb5a0de
core: remove User-Agent header assertion from LLM test to fix failing…
thdxr Feb 19, 2026
d32dd4d
docs: update providers layout and Windows sidebar label
jayair Feb 19, 2026
ae50f24
fix(web): correct config import path in Korean enterprise docs
thdxr Feb 20, 2026
01d5187
remove unnecessary deep clones from session loop and LLM stream (#14354)
thdxr Feb 20, 2026
8ad60b1
Use structuredClone instead of remeda's clone (#14351)
mhart Feb 20, 2026
d2d7a37
fix: add missing id/sessionID/messageID to MCP tool attachments (#14345)
NatChung Feb 20, 2026
998c8bf
tweak(ui): stabilize collapsible chevron hover
iamdavidhill Feb 19, 2026
a3181d5
tweak(ui): nudge edited files chevron
iamdavidhill Feb 19, 2026
ae98be8
fix(desktop): restore settings header mask
iamdavidhill Feb 20, 2026
63a469d
tweak(ui): refine session feed spacing
iamdavidhill Feb 20, 2026
8b99ac6
tweak(ui): tone down reasoning emphasis
iamdavidhill Feb 20, 2026
8d781b0
tweak(ui): adjust session feed spacing
iamdavidhill Feb 20, 2026
1a329ba
fix: issue from structuredClone addition by using unwrap (#14359)
rekram1-node Feb 20, 2026
1eb6caa
release: v1.2.9
Feb 20, 2026
b305039
Merge remote-tracking branch 'upstream/dev' into lash
lacymorrow Feb 20, 2026
04a634a
test: merge test files into a single file (#14366)
rekram1-node Feb 20, 2026
d86c108
docs: clarify tool name collision precedence (#14313)
rmk40 Feb 20, 2026
1c2416b
desktop: don't spawn sidecar if default is localhost server
Brendonovich Feb 20, 2026
4432148
sdk: build to dist/ instead of dist/src (#14383)
Brendonovich Feb 20, 2026
296250f
release: v1.2.10
Feb 20, 2026
a04e4e8
chore: cleanup
adamdotdevin Feb 20, 2026
93615be
fix(cli): missing plugin deps cause TUI to black screen (#14432)
elithrar Feb 20, 2026
7e1051a
fix(ui): show full turn duration in assistant meta (#14378)
nexxeln Feb 20, 2026
ac0b37a
fix(snapshot): respect info exclude in snapshot staging (#13495)
nexxeln Feb 20, 2026
1de1260
fix(ui): preserve url slashes for root workspace (#14294)
nexxeln Feb 20, 2026
2410593
fix(github): support variant in github action and opencode github run…
elithrar Feb 20, 2026
7e0e35a
chore: update agent
adamdotdevin Feb 20, 2026
4e9ef3e
fix(app): terminal issues (#14435)
adamdotdevin Feb 20, 2026
7e681b0
fix(app): large text pasted into prompt-input causes main thread lock
adamdotdevin Feb 20, 2026
7419ebc
feat: add list sessions for all sessions (experimental) (#14038)
R44VC0RP Feb 20, 2026
7867ba4
chore: generate
opencode-agent[bot] Feb 20, 2026
92ab421
desktop: bring back -i in sidecar arguments
Brendonovich Feb 20, 2026
ce17f9d
desktop: publish betas to separate repo (#14376)
Brendonovich Feb 20, 2026
9c5bbba
fix(app): patch tool renders like edit tool
adamdotdevin Feb 20, 2026
c79f1a7
cache platform binary in postinstall for faster startup (#14396)
rekram1-node Feb 20, 2026
1ffed2f
Revert "cache platform binary in postinstall for faster startup" (#14…
rekram1-node Feb 20, 2026
0ce61c8
fix(app): stay pinned with auto-scroll on todos/questions/perms
adamdotdevin Feb 20, 2026
2a904ec
feat(app): show/hide reasoning summaries
adamdotdevin Feb 20, 2026
1e48d7f
zen: gpt safety_identifier
fwang Feb 20, 2026
fe89bed
wip(app): custom scroll view
adamdotdevin Feb 20, 2026
c09d3dd
chore: cleanup
adamdotdevin Feb 20, 2026
46361cf
fix(app): session review re-rendering too aggressively
adamdotdevin Feb 20, 2026
1d9f05e
cache platform binary in postinstall for faster startup (#14467)
rekram1-node Feb 20, 2026
950df3d
ci: temporarily disable assigning of issues to rekram1-node (#14486)
rekram1-node Feb 20, 2026
ce27637
fix(app): better sound effect disabling ux
adamdotdevin Feb 20, 2026
58ad435
chore: cleanup
adamdotdevin Feb 20, 2026
f07e877
fix(app): remove double-border in share button
adamdotdevin Feb 20, 2026
5a1aca9
docs: add Bangla README translation (#14331)
tuhin-cmd Feb 21, 2026
d0ce295
chore: generate
opencode-agent[bot] Feb 21, 2026
e77b2cf
wip: zen lite
fwang Feb 21, 2026
b75a27d
chore: cleanup
adamdotdevin Feb 21, 2026
6d58d89
fix: e2e test outdated
adamdotdevin Feb 21, 2026
206d81e
desktop: beta icon
Brendonovich Feb 21, 2026
38c5667
merge upstream/dev: pull in v1.2.10 features while preserving lash sh…
lacymorrow Feb 21, 2026
c45ab71
chore: locale specific glossaries
adamdotdevin Feb 20, 2026
dbf2c45
chore: updated locale glossaries and docs sync workflow
adamdotdevin Feb 21, 2026
a41c81d
docs(ko): improve wording in gitlab, ide, index, keybinds, and lsp do…
Seungjun0906 Feb 21, 2026
13616e3
Update VOUCHED list
github-actions[bot] Feb 22, 2026
faac606
wip: save uncommitted changes from lash branch
lacymorrow Feb 22, 2026
e8d5735
merge upstream/dev: resolve conflicts favoring upstream translations …
lacymorrow Feb 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
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# web + desktop packages
packages/app/ @adamdotdevin
packages/tauri/ @adamdotdevin
packages/desktop/src-tauri/ @brendonovich
packages/desktop/ @adamdotdevin
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
blank_issues_enabled: true
blank_issues_enabled: false
contact_links:
- name: 💬 Discord Community
url: https://discord.gg/opencode
Expand Down
22 changes: 22 additions & 0 deletions .github/VOUCHED.td
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Vouched contributors for this project.
#
# See https://github.com/mitchellh/vouch for details.
#
# Syntax:
# - One handle per line (without @), sorted alphabetically.
# - Optional platform prefix: platform:username (e.g., github:user).
# - Denounce with minus prefix: -username or -platform:username.
# - Optional details after a space following the handle.
adamdotdevin
-agusbasari29 AI PR slop
ariane-emory
-florianleibert
fwang
iamdavidhill
jayair
kitlangton
kommander
r44vc0rp
rekram1-node
-spider-yamet clawdbot/llm psychosis, spam pinging the team
thdxr
15 changes: 6 additions & 9 deletions .github/actions/setup-bun/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,17 @@ description: "Setup Bun with caching and install dependencies"
runs:
using: "composite"
steps:
- name: Mount Bun Cache
uses: useblacksmith/stickydisk@v1
with:
key: ${{ github.repository }}-bun-cache-${{ runner.os }}
path: ~/.bun

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version-file: package.json

- name: Cache ~/.bun
id: cache-bun
uses: actions/cache@v4
with:
path: ~/.bun
key: ${{ runner.os }}-bun-${{ hashFiles('package.json') }}-${{ hashFiles('bun.lockb', 'bun.lock') }}
restore-keys: |
${{ runner.os }}-bun-${{ hashFiles('package.json') }}-

- name: Install dependencies
run: bun install
shell: bash
43 changes: 43 additions & 0 deletions .github/actions/setup-git-committer/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: "Setup Git Committer"
description: "Create app token and configure git user"
inputs:
opencode-app-id:
description: "OpenCode GitHub App ID"
required: true
opencode-app-secret:
description: "OpenCode GitHub App private key"
required: true
outputs:
token:
description: "GitHub App token"
value: ${{ steps.apptoken.outputs.token }}
app-slug:
description: "GitHub App slug"
value: ${{ steps.apptoken.outputs.app-slug }}
runs:
using: "composite"
steps:
- name: Create app token
id: apptoken
uses: actions/create-github-app-token@v2
with:
app-id: ${{ inputs.opencode-app-id }}
private-key: ${{ inputs.opencode-app-secret }}
owner: ${{ github.repository_owner }}

- name: Configure git user
run: |
slug="${{ steps.apptoken.outputs.app-slug }}"
git config --global user.name "${slug}[bot]"
git config --global user.email "${slug}[bot]@users.noreply.github.com"
shell: bash

- name: Clear checkout auth
run: |
git config --local --unset-all http.https://github.com/.extraheader || true
shell: bash

- name: Configure git remote
run: |
git remote set-url origin https://x-access-token:${{ steps.apptoken.outputs.token }}@github.com/${{ github.repository }}
shell: bash
4 changes: 4 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
### What does this PR do?

Please provide a description of the issue (if there is one), the changes you made to fix it, and why they work. It is expected that you understand why your changes work and if you do not understand why at least say as much so a maintainer knows how much to value the PR.

**If you paste a large clearly AI generated description here your PR may be IGNORED or CLOSED!**

### How did you verify your code works?
33 changes: 33 additions & 0 deletions .github/workflows/beta.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: beta

on:
workflow_dispatch:
schedule:
- cron: "0 * * * *"

jobs:
sync:
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Bun
uses: ./.github/actions/setup-bun

- name: Setup Git Committer
id: setup-git-committer
uses: ./.github/actions/setup-git-committer
with:
opencode-app-id: ${{ vars.OPENCODE_APP_ID }}
opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }}

- name: Sync beta branch
env:
GH_TOKEN: ${{ steps.setup-git-committer.outputs.token }}
run: bun script/beta.ts
235 changes: 235 additions & 0 deletions .github/workflows/close-stale-prs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
name: close-stale-prs

on:
workflow_dispatch:
inputs:
dryRun:
description: "Log actions without closing PRs"
type: boolean
default: false
schedule:
- cron: "0 6 * * *"

permissions:
contents: read
issues: write
pull-requests: write

jobs:
close-stale-prs:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Close inactive PRs
uses: actions/github-script@v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const DAYS_INACTIVE = 60
const MAX_RETRIES = 3

// Adaptive delay: fast for small batches, slower for large to respect
// GitHub's 80 content-generating requests/minute limit
const SMALL_BATCH_THRESHOLD = 10
const SMALL_BATCH_DELAY_MS = 1000 // 1s for daily operations (≤10 PRs)
const LARGE_BATCH_DELAY_MS = 2000 // 2s for backlog (>10 PRs) = ~30 ops/min, well under 80 limit

const startTime = Date.now()
const cutoff = new Date(Date.now() - DAYS_INACTIVE * 24 * 60 * 60 * 1000)
const { owner, repo } = context.repo
const dryRun = context.payload.inputs?.dryRun === "true"

core.info(`Dry run mode: ${dryRun}`)
core.info(`Cutoff date: ${cutoff.toISOString()}`)

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}

async function withRetry(fn, description = 'API call') {
let lastError
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
try {
const result = await fn()
return result
} catch (error) {
lastError = error
const isRateLimited = error.status === 403 &&
(error.message?.includes('rate limit') || error.message?.includes('secondary'))

if (!isRateLimited) {
throw error
}

// Parse retry-after header, default to 60 seconds
const retryAfter = error.response?.headers?.['retry-after']
? parseInt(error.response.headers['retry-after'])
: 60

// Exponential backoff: retryAfter * 2^attempt
const backoffMs = retryAfter * 1000 * Math.pow(2, attempt)

core.warning(`${description}: Rate limited (attempt ${attempt + 1}/${MAX_RETRIES}). Waiting ${backoffMs / 1000}s before retry...`)

await sleep(backoffMs)
}
}
core.error(`${description}: Max retries (${MAX_RETRIES}) exceeded`)
throw lastError
}

const query = `
query($owner: String!, $repo: String!, $cursor: String) {
repository(owner: $owner, name: $repo) {
pullRequests(first: 100, states: OPEN, after: $cursor) {
pageInfo {
hasNextPage
endCursor
}
nodes {
number
title
author {
login
}
createdAt
commits(last: 1) {
nodes {
commit {
committedDate
}
}
}
comments(last: 1) {
nodes {
createdAt
}
}
reviews(last: 1) {
nodes {
createdAt
}
}
}
}
}
}
`

const allPrs = []
let cursor = null
let hasNextPage = true
let pageCount = 0

while (hasNextPage) {
pageCount++
core.info(`Fetching page ${pageCount} of open PRs...`)

const result = await withRetry(
() => github.graphql(query, { owner, repo, cursor }),
`GraphQL page ${pageCount}`
)

allPrs.push(...result.repository.pullRequests.nodes)
hasNextPage = result.repository.pullRequests.pageInfo.hasNextPage
cursor = result.repository.pullRequests.pageInfo.endCursor

core.info(`Page ${pageCount}: fetched ${result.repository.pullRequests.nodes.length} PRs (total: ${allPrs.length})`)

// Delay between pagination requests (use small batch delay for reads)
if (hasNextPage) {
await sleep(SMALL_BATCH_DELAY_MS)
}
}

core.info(`Found ${allPrs.length} open pull requests`)

const stalePrs = allPrs.filter((pr) => {
const dates = [
new Date(pr.createdAt),
pr.commits.nodes[0] ? new Date(pr.commits.nodes[0].commit.committedDate) : null,
pr.comments.nodes[0] ? new Date(pr.comments.nodes[0].createdAt) : null,
pr.reviews.nodes[0] ? new Date(pr.reviews.nodes[0].createdAt) : null,
].filter((d) => d !== null)

const lastActivity = dates.sort((a, b) => b.getTime() - a.getTime())[0]

if (!lastActivity || lastActivity > cutoff) {
core.info(`PR #${pr.number} is fresh (last activity: ${lastActivity?.toISOString() || "unknown"})`)
return false
}

core.info(`PR #${pr.number} is STALE (last activity: ${lastActivity.toISOString()})`)
return true
})

if (!stalePrs.length) {
core.info("No stale pull requests found.")
return
}

core.info(`Found ${stalePrs.length} stale pull requests`)

// ============================================
// Close stale PRs
// ============================================
const requestDelayMs = stalePrs.length > SMALL_BATCH_THRESHOLD
? LARGE_BATCH_DELAY_MS
: SMALL_BATCH_DELAY_MS

core.info(`Using ${requestDelayMs}ms delay between operations (${stalePrs.length > SMALL_BATCH_THRESHOLD ? 'large' : 'small'} batch mode)`)

let closedCount = 0
let skippedCount = 0

for (const pr of stalePrs) {
const issue_number = pr.number
const closeComment = `Closing this pull request because it has had no updates for more than ${DAYS_INACTIVE} days. If you plan to continue working on it, feel free to reopen or open a new PR.`

if (dryRun) {
core.info(`[dry-run] Would close PR #${issue_number} from ${pr.author?.login || 'unknown'}: ${pr.title}`)
continue
}

try {
// Add comment
await withRetry(
() => github.rest.issues.createComment({
owner,
repo,
issue_number,
body: closeComment,
}),
`Comment on PR #${issue_number}`
)

// Close PR
await withRetry(
() => github.rest.pulls.update({
owner,
repo,
pull_number: issue_number,
state: "closed",
}),
`Close PR #${issue_number}`
)

closedCount++
core.info(`Closed PR #${issue_number} from ${pr.author?.login || 'unknown'}: ${pr.title}`)

// Delay before processing next PR
await sleep(requestDelayMs)
} catch (error) {
skippedCount++
core.error(`Failed to close PR #${issue_number}: ${error.message}`)
}
}

const elapsed = Math.round((Date.now() - startTime) / 1000)
core.info(`\n========== Summary ==========`)
core.info(`Total open PRs found: ${allPrs.length}`)
core.info(`Stale PRs identified: ${stalePrs.length}`)
core.info(`PRs closed: ${closedCount}`)
core.info(`PRs skipped (errors): ${skippedCount}`)
core.info(`Elapsed time: ${elapsed}s`)
core.info(`=============================`)
Loading
Loading