Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
301 commits
Select commit Hold shift + click to select a range
47d2ab1
release: v1.3.7
Mar 30, 2026
3c32013
fix: preserve image attachments when selecting slash commands (#19771)
MrMushrooooom Mar 30, 2026
8e4bab5
update plugin themes when plugin was updated (#20052)
kommander Mar 30, 2026
14f9e21
pluggable home footer (#20057)
kommander Mar 30, 2026
314ef4f
[Emergency GATE] Ctrl+C fallback + command standardization + upstream…
YumaKakuya Mar 30, 2026
b479488
[Emergency GATE] Fix upstream issue draft: useInput→useKeyboard + sto…
YumaKakuya Mar 30, 2026
c2f7822
chore(app): cleanup (#20062)
adamdotdevin Mar 30, 2026
9f3c2bd
fix: agent value passed to chat.params and chat.headers hooks was not…
rekram1-node Mar 30, 2026
fa95a61
Refactor into plugin loader and do not enforce (#20112)
kommander Mar 30, 2026
c5442d4
refactor(session): effectify SessionPrompt service (#19483)
kitlangton Mar 30, 2026
c8389cf
chore: generate
opencode-agent[bot] Mar 30, 2026
e3e1e9a
fix(Opencode): Bump ai-sdk/xai to 3.0.75 to fix tool calls (#20123)
Jaaneek Mar 30, 2026
054f4be
zen: add safety identifier
fwang Mar 30, 2026
2ed756c
fix(session): restore busy route handling and add regression coverage…
kitlangton Mar 30, 2026
e7ff0f1
zen: qwen3.6 plus
fwang Mar 30, 2026
f2dd774
zen: qwen3.6 plus
fwang Mar 30, 2026
fe120e3
chore: update nix node_modules hashes
opencode-agent[bot] Mar 30, 2026
48e97b4
release: v1.3.8
Mar 30, 2026
e6f6f7a
refactor: replace Filesystem util with AppFileSystem service (#20127)
kitlangton Mar 30, 2026
ea88044
chore: generate
opencode-agent[bot] Mar 30, 2026
39a47c9
wip: zen
fwang Mar 30, 2026
58f6062
wip: zen
fwang Mar 30, 2026
1de0645
fix(plugin): properly resolve entrypoints without leading dot (#20140)
Hona Mar 30, 2026
057848d
release: v1.3.9
Mar 30, 2026
93fad99
smarter changelog (#20138)
Hona Mar 31, 2026
bf77729
fix(theme): darken muted text in catppuccin tui themes (#20161)
kitlangton Mar 31, 2026
a898c2e
refactor(storage): effectify Storage service (#20132)
kitlangton Mar 31, 2026
5321f75
[GATE-P2-2] Integration fixes + E2E tests — CEO CONDITIONAL PASS
YumaKakuya Mar 31, 2026
3df18dc
refactor(provider): effectify Provider service (#20160)
kitlangton Mar 31, 2026
71b2069
chore: generate
opencode-agent[bot] Mar 31, 2026
2cc738f
wip: zen
fwang Mar 31, 2026
c5ab433
[GATE-P3-0] Fork merge upstream v1.3.3 → v1.3.6
YumaKakuya Mar 31, 2026
4935b99
[GATE-P3-0] Fix normalizer.ts email regex: bounded quantifiers (RFC 5…
YumaKakuya Mar 31, 2026
befbeda
fix(session): subagents not being clickable (#20263)
thdxr Mar 31, 2026
fbe96af
[GATE-P3-1] Consent Integrity — implementation + partial test results
YumaKakuya Mar 31, 2026
b1e89c3
release: v1.3.10
Mar 31, 2026
1fcb920
upgrade opentui to 0.1.93 (#19950)
kommander Mar 31, 2026
2e78fde
ensure pinned plugin versions and do not run package scripts on insta…
kommander Mar 31, 2026
85c1692
chore: use paid zen model in e2e
adamdotdevin Mar 31, 2026
25a2b73
warn only and ignore plugins without entrypoints, default config via …
kommander Mar 31, 2026
8c2e2ec
chore: e2e model
adamdotdevin Mar 31, 2026
7342e65
chore: update nix node_modules hashes
opencode-agent[bot] Mar 31, 2026
2daf4b8
feat: add a dedicated system prompt for Kimi models (#20259)
Yuxin-Dong Mar 31, 2026
6e61a46
chore: skip 2 tests
adamdotdevin Mar 31, 2026
2929774
chore: rm harcoded model definition from codex plugin (#20294)
rekram1-node Mar 31, 2026
434d82b
test: update model test fixture (#20182)
rekram1-node Mar 31, 2026
567a911
refactor(session): simplify LLM stream by replacing queue with fromAs…
thdxr Mar 31, 2026
beab4cc
release: v1.3.11
Mar 31, 2026
4dd866d
fix: rm exclusion of ai-sdk/azure in transform.ts, when we migrated t…
rekram1-node Mar 31, 2026
26cc924
feat: enable prompt caching and cache token tracking for google-verte…
major Mar 31, 2026
d6d4446
Update VOUCHED list
github-actions[bot] Mar 31, 2026
779a636
[GATE-P3-2] VOID — LLM Translation implementation (DO NOT ADOPT)
YumaKakuya Mar 31, 2026
1812130
upgrade opentui to 0.1.94 (#20357)
kommander Mar 31, 2026
892bdeb
release: v1.3.12
Mar 31, 2026
53330a5
Update VOUCHED list
github-actions[bot] Mar 31, 2026
0c03a3e
test: migrate prompt tests to HTTP mock LLM server (#20304)
kitlangton Mar 31, 2026
954a6ca
refactor(session): effectify SessionSummary service (#20142)
kitlangton Mar 31, 2026
3fc0367
refactor(session): effectify SessionRevert service (#20143)
kitlangton Mar 31, 2026
9b09a7e
chore: generate
opencode-agent[bot] Mar 31, 2026
4280307
chore: update nix node_modules hashes
opencode-agent[bot] Mar 31, 2026
4b4b783
upgrade opentui to 0.1.95 (#20369)
kommander Mar 31, 2026
6314f09
release: v1.3.13
Apr 1, 2026
181b5f6
refactor(prompt): use Provider service in effect layers (#20167)
kitlangton Apr 1, 2026
7532d99
test: finish HTTP mock processor coverage (#20372)
kitlangton Apr 1, 2026
ca376a4
chore: update nix node_modules hashes
opencode-agent[bot] Apr 1, 2026
c8ecd64
test(app): add mock llm e2e fixture (#20375)
kitlangton Apr 1, 2026
f2bb992
[GATE-P3-1] Consent Integrity — test redesign + UX fixes (CEO PASS 16…
YumaKakuya Apr 1, 2026
3fa4e8a
[SSS-001] Phase A: Foundation — anonymizer hardening, bounded quantif…
YumaKakuya Apr 1, 2026
289dc78
[SSS-001] Phase B: Infrastructure — canonicalize, dictionary, quality…
YumaKakuya Apr 1, 2026
7f57d94
[SSS-001] Phase C: Safety Gate — stage4 verification + translation queue
YumaKakuya Apr 1, 2026
da76453
[SSS-001] Phase D: Integration — hooks rewiring with canonicalize/que…
YumaKakuya Apr 1, 2026
8fe94ea
[SSS-001] Phase E: Test Hardening — 51+ tests, FRAUD/HOLLOW replaced,…
YumaKakuya Apr 1, 2026
0d1c2c3
[SSS-001] QA Fix: L3 body cancel, A1-A8 exact-match assertions, anony…
YumaKakuya Apr 1, 2026
faea063
[SSS-001] QA Fix #6c: Stage 4 isProtected exact match (CEO/CTO direct…
YumaKakuya Apr 1, 2026
506dd75
electron: port mergeShellEnv logic from tauri (#20192)
Brendonovich Apr 1, 2026
bc095c7
[GATE-4] T12: B7 severity/category DB lookup — add explicit test cove…
YumaKakuya Apr 1, 2026
1df5ad4
app: try to hide autofill popups in prompt input (#20197)
Brendonovich Apr 1, 2026
47a6761
fix(session): add keyboard support to question dock (#20439)
nexxeln Apr 1, 2026
a3a6cf1
feat(comments): support file mentions (#20447)
nexxeln Apr 1, 2026
9a1c9ae
test(app): route prompt e2e through mock llm (#20383)
kitlangton Apr 1, 2026
44f8301
perf(review): defer offscreen diff mounts (#20469)
nexxeln Apr 1, 2026
5fd833a
refactor: standardize InstanceState variable name to state (#20267)
kitlangton Apr 1, 2026
d58004a
fall back to first agent if last used agent is not available
thdxr Apr 1, 2026
38d2276
test(e2e): isolate prompt tests with per-worker backend (#20464)
kitlangton Apr 1, 2026
0a125e5
chore: generate
opencode-agent[bot] Apr 1, 2026
897d83c
refactor(init): tighten AGENTS guidance (#20422)
nexxeln Apr 1, 2026
a9c85b7
refactor(shell): use Effect ChildProcess for shell command execution …
kitlangton Apr 1, 2026
2f405da
refactor: use Effect services instead of async facades in provider, a…
kitlangton Apr 1, 2026
ef538c9
chore: generate
opencode-agent[bot] Apr 1, 2026
f9e71ec
chore: update nix node_modules hashes
opencode-agent[bot] Apr 1, 2026
d1e0a46
Update VOUCHED list
github-actions[bot] Apr 1, 2026
c559af5
test(app): migrate more e2e suites to isolated backend (#20505)
kitlangton Apr 1, 2026
c619cae
fix(account): coalesce concurrent console token refreshes (#20503)
kitlangton Apr 1, 2026
f3f728e
test(app): fix isolated backend follow-ups (#20513)
kitlangton Apr 1, 2026
d7481f4
wip: zen
fwang Apr 1, 2026
c9326fc
refactor: replace BunProc with Npm module using @npmcli/arborist (#18…
thdxr Apr 1, 2026
eabf3ca
zen: sync
fwang Apr 1, 2026
880c0a7
fix: normalize filepath in FileTime to prevent Windows path mismatch …
JosXa Apr 1, 2026
cc30bfc
resolve subpath only packages for plugins (#20555)
kommander Apr 1, 2026
fa96cb9
Fix selection expansion by retaining focused input selections during …
Hona Apr 1, 2026
1fcfb69
feat: add new provider plugin hook for resolving models and sync mode…
rekram1-node Apr 1, 2026
f7f41dc
fix(tui): apply scroll configuration uniformly across all scrollboxes…
Hona Apr 1, 2026
802d165
chore(tui): clean up scroll config follow-up (#20561)
Hona Apr 1, 2026
48db7cf
fix(opencode): batch snapshot revert without reordering (#20564)
kitlangton Apr 1, 2026
d9d4f89
fix(test): auto-acknowledge tool-result follow-ups in mock LLM server…
kitlangton Apr 1, 2026
4214ae2
chore: generate
opencode-agent[bot] Apr 1, 2026
26fb6b8
refactor: add Effect-returning versions of MessageV2 functions (#20374)
kitlangton Apr 1, 2026
e4ff1ea
refactor(bash): use Effect ChildProcess for bash tool execution (#20496)
kitlangton Apr 1, 2026
854484b
chore: generate
opencode-agent[bot] Apr 1, 2026
f6fd43e
Refactor plugin/config loading, add theme-only plugin package support…
kommander Apr 1, 2026
92f8e03
fix(test): use effect helper in snapshot race test (#20567)
kitlangton Apr 2, 2026
b1c0748
refactor(revert): yield SessionSummary.Service directly (#20541)
kitlangton Apr 2, 2026
c526caa
fix: show model display name in message footer and transcript (#20539)
kitlangton Apr 2, 2026
8a8f7b3
flock npm.add (#20557)
kommander Apr 2, 2026
00d6841
fix(account): refresh console tokens before expiry (#20558)
kitlangton Apr 2, 2026
0cad775
chore: add User-Agent headers for Cloudflare providers (#20538)
mchenco Apr 2, 2026
e148b31
fix(build): replace require() with dynamic import() in cross-spawn-sp…
kitlangton Apr 2, 2026
789d86f
chore: generate
opencode-agent[bot] Apr 2, 2026
df1c6c9
tui: add consent dialog when sharing for the first time (#20525)
rekram1-node Apr 2, 2026
a09b086
test(app): block real llm calls in e2e prompts (#20579)
kitlangton Apr 2, 2026
0bae38c
refactor(instruction): migrate to Effect service pattern (#20542)
kitlangton Apr 2, 2026
2e8e278
fix(cli): use simple logo in CLI (#20585)
kitlangton Apr 2, 2026
733a3bd
fix(core): prevent agent loop from stopping after tool calls with Ope…
valenvivaldi Apr 2, 2026
5daf2fa
fix(session): compaction agent responds in same language as conversat…
aaron-he-zhu Apr 2, 2026
916afb5
refactor(account): share token freshness helper (#20591)
kitlangton Apr 2, 2026
336d28f
fix(cli): restore colored help logo (#20592)
kitlangton Apr 2, 2026
d66e6dc
feat(opencode): Add Venice AI package as dependency (#20570)
dpuyosa Apr 2, 2026
ebaa99a
chore: generate
opencode-agent[bot] Apr 2, 2026
811c7e2
cli: update usage exceeded error
fwang Apr 2, 2026
a6f524c
chore: update nix node_modules hashes
opencode-agent[bot] Apr 2, 2026
0f48899
fix(node): set OPENCODE_CHANNEL during build (#20616)
Brendonovich Apr 2, 2026
db93891
zen: friendly trial ended message
fwang Apr 2, 2026
30cd548
[GATE-P3-3/P3-4] Data Foundation + B6 fix + sync-ready + E2E tests
YumaKakuya Apr 2, 2026
d540d36
refactor: simplify solid reactivity across app and web (#20497)
nexxeln Apr 2, 2026
327f625
use solid-primitives/resize-observer across web code (#20613)
Brendonovich Apr 2, 2026
69d047a
cleanup event listeners with solid-primitives/event-listener (#20619)
Brendonovich Apr 2, 2026
ec3ae17
chore: update nix node_modules hashes
opencode-agent[bot] Apr 2, 2026
23c8656
refactor: split up models.dev and config model definitions to prevent…
rekram1-node Apr 2, 2026
57a5236
chore: generate
opencode-agent[bot] Apr 2, 2026
291a857
feat: add optional messageID to ShellInput (#20657)
noamzbr Apr 2, 2026
159ede2
chore: generate
opencode-agent[bot] Apr 2, 2026
510a1e8
ignore: fix typecheck in dev (#20702)
rekram1-node Apr 2, 2026
c3dfd08
fix(format): use biome format instead of check to prevent import remo…
BYK Apr 2, 2026
10ca1ac
tweak: add abort signal timeout to the github copilot model fetch to …
rekram1-node Apr 2, 2026
93a1393
Add MiMo-V2 models to Go UI and docs (#20709)
MrMushrooooom Apr 2, 2026
3faabda
refactor(format): update formatter interface to return command from e…
thdxr Apr 2, 2026
c4b3971
app: unify auto scroll ref handling (#20716)
Brendonovich Apr 2, 2026
92e820f
go: add mimo
fwang Apr 2, 2026
966d9cf
electron: add basic context menu for inspect element (#20723)
Brendonovich Apr 2, 2026
7e32f80
feat: add macOS managed preferences support for enterprise MDM deploy…
lennyvaknine43 Apr 2, 2026
f0a9ebf
chore: generate
opencode-agent[bot] Apr 2, 2026
1989704
feat(acp): Add messageID and emit user_message_chunk on prompt/comman…
noamzbr Apr 2, 2026
3638911
chore: generate
opencode-agent[bot] Apr 2, 2026
c3ef69c
test(app): add a golden path for mocked e2e prompts (#20593)
kitlangton Apr 2, 2026
f151c66
chore: update nix node_modules hashes
opencode-agent[bot] Apr 2, 2026
ae7b49b
docs(effect): refresh migration status (#20665)
kitlangton Apr 2, 2026
b5b5f7e
test(opencode): remove temporary e2e url repro (#20729)
kitlangton Apr 2, 2026
6dfb304
refactor(app): unexport internal e2e helpers (#20730)
kitlangton Apr 2, 2026
f549fde
test(app): emit junit artifacts for playwright (#20732)
kitlangton Apr 2, 2026
5e1b513
refactor(todo): effectify session todo (#20595)
kitlangton Apr 2, 2026
29f7dc0
Adds TUI prompt traits, refs, and plugin slots (#20741)
kommander Apr 2, 2026
bf26c08
chore: update nix node_modules hashes
opencode-agent[bot] Apr 2, 2026
6e1400f
dialog aware prompt cursor (#20753)
kommander Apr 2, 2026
7f45943
fix(opencode): honor model limit.input overrides (#16306)
ykswang Apr 3, 2026
8942fc2
refactor(effect): prune unused facades (#20748)
kitlangton Apr 3, 2026
38014fe
fix: rm dynamic part from bash tool description again to restore cach…
rekram1-node Apr 3, 2026
8e9e79d
refactor(share): effectify share next (#20596)
kitlangton Apr 3, 2026
eb6f1da
fix: call models.dev once instead of twice on start (#20765)
Hona Apr 3, 2026
81d3ac3
fix: prevent Tool.define() wrapper accumulation on object-defined too…
jpcarranza94 Apr 3, 2026
8daeacc
chore: generate
opencode-agent[bot] Apr 3, 2026
aa2239d
add automatic heap snapshots for high-memory cli processes (#20788)
thdxr Apr 3, 2026
e89527c
feat: Send x-session-affinity and x-parent-session-id headers (#20744)
kflansburg Apr 3, 2026
7b8dc80
fix(sdk): handle Windows opencode spawn and shutdown (#20772)
Hona Apr 3, 2026
500dcfc
chore: update nix node_modules hashes
opencode-agent[bot] Apr 3, 2026
4c46102
Merge upstream/dev into dev (Phase 3→4 boundary, V3P2-5)
YumaKakuya Apr 3, 2026
f32e0b1
[P4-0] Restore Core patches + post-merge fixes
YumaKakuya Apr 3, 2026
00e34cf
[P4-0] Add latency measurement instrumentation to provider.ts
YumaKakuya Apr 3, 2026
98ee0e8
[P4-0] P8 latency fix: stderr passthrough + timeout reduction + model…
YumaKakuya Apr 3, 2026
59a81a9
[P4-0] PM Briefing v2: P8 PASS + Upstream PR handoff
YumaKakuya Apr 3, 2026
d62257a
[P4-0] Tier 1 Release Blockers: sudo detection + COFFER_PATH + test p…
YumaKakuya Apr 4, 2026
1329ddd
[P4-1] Branding: OpenCode → Hatch. in TUI user-facing text
YumaKakuya Apr 4, 2026
bcee4ae
[P4-1] T1-T3: Claude Code OAuth Provider plugin
YumaKakuya Apr 4, 2026
247b439
[P4-1] Token refresh + getValidToken (TOKEN-002 v2)
YumaKakuya Apr 4, 2026
58cf382
[P4-1] T5: claude-sub unit tests (9 tests)
YumaKakuya Apr 4, 2026
d6093e4
[P4-1] Custom fetch for OAuth Bearer auth (TOKEN-002 v2)
YumaKakuya Apr 4, 2026
cd7212e
[P4-1] QA fixes + Hatch. logo branding
YumaKakuya Apr 4, 2026
45b4004
[P4-1] U6/U7/F5: Plugin path fix + hatch-tui export
YumaKakuya Apr 4, 2026
346abed
[GATE-4] Batch 1 U1-U5: Hatch. branding in TUI
YumaKakuya Apr 4, 2026
54abdb6
[GATE-4] Batch 1-5 MUST FIX: branding, safety, mask, OAuth, hatch cmd
YumaKakuya Apr 4, 2026
24c6d60
[GATE-4] C6: Plugin loader Solid JSX fix + Coffer onboarding resilience
YumaKakuya Apr 4, 2026
8be9ea5
[GATE-4] C5: --dangerously-skip-permissions CLI flag + AGENTS.md cons…
YumaKakuya Apr 5, 2026
95c03cd
[GATE-4] AGENTS.md: Add C5 Core Patch + authority clarification (PmoQ…
YumaKakuya Apr 5, 2026
94744f9
[GATE-4] C5: Add --auto alias for --dangerously-skip-permissions
YumaKakuya Apr 5, 2026
b9e5984
[GATE-4] Integration tests: danger detection 17 + mask 13 + pipeline …
YumaKakuya Apr 5, 2026
62cc9e2
[GATE-4] N8: billing hash SHA-256 verification test for claude-sub fetch
YumaKakuya Apr 5, 2026
dc2bd77
[GATE-P4-3] Batch 1: C7 tool.execute.after MCP timing fix + F1 subshe…
YumaKakuya Apr 5, 2026
29dd4d1
[GATE-P4-3] Batch 2: F10 hash-before-numeric reorder + F11 git hash d…
YumaKakuya Apr 5, 2026
cc8e977
[GATE-P4-3] Batch 3: F7 regexCache size cap (256) + F8 composite cach…
YumaKakuya Apr 5, 2026
ae08742
[GATE-P4-3] Batch 4: F26 recursion guard + F20 dead code + F5 quote f…
YumaKakuya Apr 5, 2026
94c28de
[GATE-P4-2] T0-T5: TursoSyncProvider implementation + production wiri…
YumaKakuya Apr 5, 2026
25d13d2
[GATE-P4-2] T6-T8: F-1 download merge fix + TursoSyncProvider tests (…
YumaKakuya Apr 5, 2026
3dde560
[HOTFIX] Fix Claude token cache never clearing after refresh failure
YumaKakuya Apr 6, 2026
454e516
[GATE-P4-3] PmoQa findings fix: F1-NOTE recursion depth + L1 console.…
YumaKakuya Apr 6, 2026
9d00fc4
[GATE-P4] Claude OAuth browser login: Authorization Code + PKCE flow
YumaKakuya Apr 6, 2026
54ef649
[GATE-P4] Claude OAuth: auto-open browser + fix no-credentials early …
YumaKakuya Apr 6, 2026
5aab996
[GATE-P4] Claude OAuth: revert auto-open browser (user picks browser …
YumaKakuya Apr 6, 2026
7de196d
[GATE-P4] Claude OAuth: fix redirect_uri path to /callback
YumaKakuya Apr 6, 2026
13d10db
[R-011] fetch.ts: update expired-token error message to /connect flow
YumaKakuya Apr 6, 2026
bf7b3a1
[R-011] token.ts: elevate refresh failure logs to error with diagnost…
YumaKakuya Apr 6, 2026
caac92a
[R-011] token.test.ts: add refreshAccessToken diagnostic log tests (F2)
YumaKakuya Apr 6, 2026
33f9993
[HOTFIX] R-011 F1+F2: claude-sub error message + refresh diagnostic l…
YumaKakuya Apr 6, 2026
ab201f5
[TB-028] token.ts: wrap getValidToken with Flock.withLock + atomic write
YumaKakuya Apr 7, 2026
c8f7595
[TB-028] PmoQa Stage B: token Flock + atomic write tests (T1-T7)
YumaKakuya Apr 7, 2026
cf7a622
[Route-F] claude-cc-proxy plugin: replace claude-sub OAuth path with …
YumaKakuya Apr 8, 2026
8a7241d
[Route-F] claude-cc-proxy: fix B-10 MCP scope allowlist semantic (rem…
YumaKakuya Apr 8, 2026
03ca524
[Route-F] claude-cc-proxy: forward body.model + body.system to CC sub…
YumaKakuya Apr 8, 2026
e2019e1
[Route-F] claude-cc-proxy: per-model daemon Map (Loop 3, R-014 fix)
YumaKakuya Apr 8, 2026
35d372b
Route G: remove feedback fingerprint from anthropic.txt
YumaKakuya Apr 9, 2026
be3eb29
Route G+: rename env field to avoid fingerprint trigger
YumaKakuya Apr 9, 2026
2ccb7ea
fix(claude-sub): remove Claude Code identity spoofing + unlock websea…
YumaKakuya Apr 9, 2026
df5345c
Remove Claude Code-specific Task tool / specialized agents instructio…
YumaKakuya Apr 10, 2026
1520243
Fix WebSearch hallucination: tool_result stripping + safety mask bypass
YumaKakuya Apr 10, 2026
7f82648
WIP: P4-4 Coffer TUI flows (unlock/store/retrieve/recover, 6-step onb…
YumaKakuya Apr 10, 2026
50a6ed0
feat(tool): implement ToolSearch tool (CTO-D-064)
YumaKakuya Apr 10, 2026
5b0cacf
fix(tool): normalize snake_case tool params to camelCase (CTO-D-065)
YumaKakuya Apr 10, 2026
12d188e
fix(tool): accept offset=0 in Read tool as start-of-file (CTO-D-066)
YumaKakuya Apr 10, 2026
4582c69
fix(proxy): remove system prompt injection + skip permissions + pre-w…
YumaKakuya Apr 10, 2026
c0bff32
fix coffer recover verification and slash autocomplete
YumaKakuya Apr 10, 2026
8123758
fix(proxy): suppress tool_use blocks from CC daemon SSE (CTO-D-069)
YumaKakuya Apr 10, 2026
10a8f2c
test(proxy): wire.ts 28-case test suite for CTO-D-069 tool_use suppress
YumaKakuya Apr 10, 2026
4e56b7c
docs: CTO-D-070 Brief — Route G (claude-sub restore) implementation plan
YumaKakuya Apr 10, 2026
4a077f7
fix(plugin): restore claude-sub auth, deactivate Route F (CTO-D-070)
YumaKakuya Apr 10, 2026
64944d5
diag(prompt): add loop-exit-check diagnostic log (CTO instruction)
YumaKakuya Apr 10, 2026
3f54045
feat(proxy): inject CLAUDE_CODE_OAUTH_TOKEN env to CC daemon
YumaKakuya Apr 10, 2026
7edb178
fix(claude-sub): align CC_VERSION and beta with CC 2.1.101
YumaKakuya Apr 10, 2026
3ad0608
fix(claude-sub): hardcode cch=00000 to match CC 2.1.101 billing header
YumaKakuya Apr 10, 2026
35ecf58
fix(claude-sub): remove (external, cli) from user-agent
YumaKakuya Apr 10, 2026
39a20d7
fix(claude-sub): CC OAuth billing alignment + model normalization + A…
YumaKakuya Apr 10, 2026
58daaa3
fix: resolve TypeScript compile errors blocking Hatch startup
YumaKakuya Apr 11, 2026
57b8980
fix(tui): auto-set OPENTUI_FORCE_WCWIDTH=1 on WSL to prevent SIGABRT
YumaKakuya Apr 11, 2026
70dc566
feat(tool): deferred tool loading for CC OAuth to avoid 57KB schema l…
YumaKakuya Apr 11, 2026
cff71bf
docs: incident report for Hatch startup recovery 2026-04-11
YumaKakuya Apr 11, 2026
89408ef
chore(prompt): rename OpenCode → Hatch. in anthropic.txt identity
YumaKakuya Apr 11, 2026
af998bb
feat(prompt): expand Anthropic tool allowlist to 8 builtin (γ-4 ceili…
YumaKakuya Apr 11, 2026
a60065d
fix(tool): harden task tool against subagent_type hallucination (TB-041)
YumaKakuya Apr 12, 2026
a0b8572
fix(tool): use camelCase in task.ts zod schema to match normalizeToCa…
YumaKakuya Apr 12, 2026
84bd25b
fix(tool): register MultiEditTool in tool registry (TB-042)
YumaKakuya Apr 12, 2026
fa01fe8
fix(tui): restore slash command execution on autocomplete Enter (TB-040)
YumaKakuya Apr 12, 2026
586cd40
test: add fs.rename spy in claude-sub beforeEach
YumaKakuya Apr 15, 2026
b2fb562
fix: rename subagent_type/task_id to subagentType/taskId at call sites
YumaKakuya Apr 15, 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: 4 additions & 1 deletion .github/VOUCHED.td
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ adamdotdevin
-agusbasari29 AI PR slop
ariane-emory
-atharvau AI review spamming literally every PR
-borealbytes
-danieljoshuanazareth
-danieljoshuanazareth
edemaine
Expand All @@ -21,8 +22,10 @@ jayair
kitlangton
kommander
-opencode2026
-opencodeengineer bot that spams issues
r44vc0rp
rekram1-node
-robinmordasiewicz
-spider-yamet clawdbot/llm psychosis, spam pinging the team
thdxr
-OpenCodeEngineer bot that spams issues
-toastythebot
5 changes: 3 additions & 2 deletions .github/workflows/docs-locale-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ on:

jobs:
sync-locales:
if: github.actor != 'opencode-agent[bot]'
if: false
#if: github.actor != 'opencode-agent[bot]'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: write
Expand All @@ -34,7 +35,7 @@ jobs:
- name: Compute changed English docs
id: changes
run: |
FILES=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- 'packages/web/src/content/docs/*.mdx' || true)
FILES=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- ':(glob)packages/web/src/content/docs/*.mdx' || true)
if [ -z "$FILES" ]; then
echo "has_changes=false" >> "$GITHUB_OUTPUT"
echo "No English docs changed in push range"
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/nix-hashes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ on:
- "patches/**"
- ".github/workflows/nix-hashes.yml"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
# Native runners required: bun install cross-compilation flags (--os/--cpu)
# do not produce byte-identical node_modules as native installs.
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ jobs:

- name: Run unit tests
run: bun turbo test
env:
# Bun 1.3.11 intermittently crashes on Windows during test teardown
# inside the native @parcel/watcher binding. Unit CI does not rely on
# the live watcher backend there, so disable it for that platform.
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

e2e:
name: e2e (${{ matrix.settings.name }})
Expand Down Expand Up @@ -100,15 +105,17 @@ 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
if: failure()
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-${{ matrix.settings.name }}-${{ github.run_attempt }}
if-no-files-found: ignore
retention-days: 7
path: |
packages/app/e2e/junit-*.xml
packages/app/e2e/test-results
packages/app/e2e/playwright-report
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ target

# Local dev files
opencode-dev
UPCOMING_CHANGELOG.md
logs/
*.bun-build
tsconfig.tsbuildinfo
63 changes: 43 additions & 20 deletions .opencode/command/changelog.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,46 @@
---
model: opencode/kimi-k2.5
model: opencode/gpt-5.4
---

create UPCOMING_CHANGELOG.md

it should have sections

```
## TUI

## Desktop

## Core

## Misc
```

fetch the latest github release for this repository to determine the last release version.

find each PR that was merged since the last release

for each PR spawn a subagent to summarize what the PR was about. focus on user facing changes. if it was entirely internal or code related you can ignore it. also skip docs updates. each subagent should append its summary to UPCOMING_CHANGELOG.md into the appropriate section.
Create `UPCOMING_CHANGELOG.md` from the structured changelog input below.
If `UPCOMING_CHANGELOG.md` already exists, ignore its current contents completely.
Do not preserve, merge, or reuse text from the existing file.

The input already contains the exact commit range since the last non-draft release.
The commits are already filtered to the release-relevant packages and grouped into
the release sections. Do not fetch GitHub releases, PRs, or build your own commit list.
The input may also include a `## Community Contributors Input` section.

Before writing any entry you keep, inspect the real diff with
`git show --stat --format='' <hash>` or `git show --format='' <hash>` so you can
understand the actual code changes and not just the commit message (they may be misleading).
Do not use `git log` or author metadata when deciding attribution.

Rules:

- Write the final file with sections in this order:
`## Core`, `## TUI`, `## Desktop`, `## SDK`, `## Extensions`
- Only include sections that have at least one notable entry
- Keep one bullet per commit you keep
- Skip commits that are entirely internal, CI, tests, refactors, or otherwise not user-facing
- Start each bullet with a capital letter
- Prefer what changed for users over what code changed internally
- Do not copy raw commit prefixes like `fix:` or `feat:` or trailing PR numbers like `(#123)`
- Community attribution is deterministic: only preserve an existing `(@username)` suffix from the changelog input
- If an input bullet has no `(@username)` suffix, do not add one
- Never add a new `(@username)` suffix from `git show`, commit authors, names, or email addresses
- If no notable entries remain and there is no contributor block, write exactly `No notable changes.`
- If no notable entries remain but there is a contributor block, omit all release sections and return only the contributor block
- If the input contains `## Community Contributors Input`, append the block below that heading to the end of the final file verbatim
- Do not add, remove, rewrite, or reorder contributor names or commit titles in that block
- Do not derive the thank-you section from the main summary bullets
- Do not include the heading `## Community Contributors Input` in the final file
- Focus on writing the least words to get your point across - users will skim read the changelog, so we should be precise

**Importantly, the changelog is for users (who are at least slightly technical), they may use the TUI, Desktop, SDK, Plugins and so forth. Be thorough in understanding flow on effects may not be immediately apparent. e.g. a package upgrade looks internal but may patch a bug. Or a refactor may also stabilise some race condition that fixes bugs for users. The PR title/body + commit message will give you the authors context, usually containing the outcome not just technical detail**

<changelog_input>

!`bun script/raw-changelog.ts $ARGUMENTS`

</changelog_input>
24 changes: 23 additions & 1 deletion .opencode/opencode.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,33 @@
},
},
"permission": {
"read": "allow",
"edit": {
"*": "allow",
"packages/opencode/migration/*": "deny",
},
"glob": "allow",
"grep": "allow",
"list": "allow",
"bash": "allow",
"task": "allow",
"external_directory": "allow",
"todowrite": "allow",
"question": "allow",
"webfetch": "allow",
"websearch": "allow",
"codesearch": "allow",
"lsp": "allow",
"skill": "allow",
},
"plugin": ["/home/yuma/hatch-v3/packages/hatch-safety"],
"mcp": {
"coffer": {
"type": "local",
"command": ["/home/yuma/coffer-standalone/coffer", "mcp-server"],
"enabled": true
}
},
"mcp": {},
"tools": {
"github-triage": false,
"github-pr-search": false,
Expand Down
86 changes: 81 additions & 5 deletions .opencode/plugins/tui-smoke.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/** @jsxImportSource @opentui/solid */
import { useKeyboard, useTerminalDimensions } from "@opentui/solid"
import { useKeyboard, useTerminalDimensions, type JSX } from "@opentui/solid"
import { RGBA, VignetteEffect } from "@opentui/core"
import type {
TuiKeybindSet,
Expand Down Expand Up @@ -615,7 +615,7 @@ const Modal = (props: {
)
}

const home = (input: Cfg): TuiSlotPlugin => ({
const home = (api: TuiPluginApi, input: Cfg) => ({
slots: {
home_logo(ctx) {
const map = ctx.theme.current
Expand Down Expand Up @@ -649,6 +649,82 @@ const home = (input: Cfg): TuiSlotPlugin => ({
</box>
)
},
home_prompt(ctx, value) {
const skin = look(ctx.theme.current)
type Prompt = (props: {
workspaceID?: string
visible?: boolean
disabled?: boolean
onSubmit?: () => void
hint?: JSX.Element
right?: JSX.Element
showPlaceholder?: boolean
placeholders?: {
normal?: string[]
shell?: string[]
}
}) => JSX.Element
type Slot = (
props: { name: string; mode?: unknown; children?: JSX.Element } & Record<string, unknown>,
) => JSX.Element | null
const ui = api.ui as TuiPluginApi["ui"] & { Prompt: Prompt; Slot: Slot }
const Prompt = ui.Prompt
const Slot = ui.Slot
const normal = [
`[SMOKE] route check for ${input.label}`,
"[SMOKE] confirm home_prompt slot override",
"[SMOKE] verify prompt-right slot passthrough",
]
const shell = ["printf '[SMOKE] home prompt\n'", "git status --short", "bun --version"]
const hint = (
<box flexShrink={0} flexDirection="row" gap={1}>
<text fg={skin.muted}>
<span style={{ fg: skin.accent }}>•</span> smoke home prompt
</text>
</box>
)

return (
<Prompt
workspaceID={value.workspace_id}
hint={hint}
right={
<box flexDirection="row" gap={1}>
<Slot name="home_prompt_right" workspace_id={value.workspace_id} />
<Slot name="smoke_prompt_right" workspace_id={value.workspace_id} label={input.label} />
</box>
}
placeholders={{ normal, shell }}
/>
)
},
home_prompt_right(ctx, value) {
const skin = look(ctx.theme.current)
const id = value.workspace_id?.slice(0, 8) ?? "none"
return (
<text fg={skin.muted}>
<span style={{ fg: skin.accent }}>{input.label}</span> home:{id}
</text>
)
},
session_prompt_right(ctx, value) {
const skin = look(ctx.theme.current)
return (
<text fg={skin.muted}>
<span style={{ fg: skin.accent }}>{input.label}</span> session:{value.session_id.slice(0, 8)}
</text>
)
},
smoke_prompt_right(ctx, value) {
const skin = look(ctx.theme.current)
const id = typeof value.workspace_id === "string" ? value.workspace_id.slice(0, 8) : "none"
const label = typeof value.label === "string" ? value.label : input.label
return (
<text fg={skin.muted}>
<span style={{ fg: skin.accent }}>{label}</span> custom:{id}
</text>
)
},
home_bottom(ctx) {
const skin = look(ctx.theme.current)
const text = "extra content in the unified home bottom slot"
Expand Down Expand Up @@ -706,8 +782,8 @@ const block = (input: Cfg, order: number, title: string, text: string): TuiSlotP
},
})

const slot = (input: Cfg): TuiSlotPlugin[] => [
home(input),
const slot = (api: TuiPluginApi, input: Cfg): TuiSlotPlugin[] => [
home(api, input),
block(input, 50, "Smoke above", "renders above internal sidebar blocks"),
block(input, 250, "Smoke between", "renders between internal sidebar blocks"),
block(input, 650, "Smoke below", "renders below internal sidebar blocks"),
Expand Down Expand Up @@ -848,7 +924,7 @@ const tui: TuiPlugin = async (api, options, meta) => {
])

reg(api, value, keys)
for (const item of slot(value)) {
for (const item of slot(api, value)) {
api.slots.register(item)
}
}
Expand Down
1 change: 1 addition & 0 deletions .opencode/tui.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"$schema": "https://opencode.ai/tui.json",
"plugin": [
"/home/yuma/hatch-v3/packages/hatch-tui",
[
"./plugins/tui-smoke.tsx",
{
Expand Down
Loading
Loading