Skip to content
Draft
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
8c15fea
test(install-surfaces): stop execFileNoThrow mock leaking into later …
0xfandom Jun 22, 2026
aed42df
fix: treat 5xx HTML overload pages as retryable provider_unavailable …
euxaristia Jun 22, 2026
091571f
fix(provider): Add Xiaomi MiMo token plan provider (#1751)
jatmn Jun 22, 2026
820015f
fix(bg): prefer exact session names over ID prefixes (#1753)
chioarub Jun 22, 2026
38b0e27
fix(opencode-go): sync model catalog with opencode.ai/go (#1745)
euxaristia Jun 23, 2026
c2467ee
feat(atlas-cloud): add GLM 5.2 to vendor catalog (#1755)
kevincodex1 Jun 23, 2026
dd4c4ab
feat(api): add OpenAI-compatible credential pool failover (#1706)
jatmn Jun 23, 2026
a23014b
fix(atlas-cloud): sync static catalog with live /models metadata (#1754)
jatmn Jun 23, 2026
dc6a778
feat: auto-detect and persist project conventions to wiki (#1010)
kevincodex1 Jun 23, 2026
bcf9421
feat(permissions): allow npm/bun/tsc --version as read-only (#1759)
kevincodex1 Jun 23, 2026
4dee44a
feat(ux): long-turn visibility + default-on stream hang safety net (#…
kevincodex1 Jun 23, 2026
3eb57c6
fix: upgrade shell-quote 1.8.3 -> 1.8.4 (CVE-2026-9277) (#1764)
Gravirei Jun 24, 2026
9c0d5c6
fix(deps): remove deprecated uuid install path by replacing vertex-sd…
Gravirei Jun 24, 2026
1b1dfcf
Feat/ads sponsored tips (#1674)
kevincodex1 Jun 24, 2026
adafde3
feat(integrations): add GLM 5.2 as an Opengateway-routed model (#1772)
kevincodex1 Jun 24, 2026
39604fe
chore(main): release 0.20.0 (#1684)
github-actions[bot] Jun 24, 2026
66ddbec
fix(bridge): match loopback hostname exactly in HTTPS credential guar…
0xfandom Jun 24, 2026
3fb718f
fix(worktree): base agent isolation worktree on parent HEAD, not orig…
0xfandom Jun 24, 2026
adcf5e5
fix(permissions): bound the speculativeChecks cache with FIFO evictio…
euxaristia Jun 24, 2026
02d43b6
fix: surface swallowed error in plan file write (#1725)
euxaristia Jun 24, 2026
669ecdf
fix: prevent recursive debounce infinite loop in team memory sync (#1…
euxaristia Jun 24, 2026
701b68c
fix(query): prevent spurious Windows interruption prompt by passing '…
euxaristia Jun 24, 2026
28bbec4
fix(memory): bound memory-directory scanning work (#1757)
chioarub Jun 24, 2026
d32b6f0
fix(update): stop false "development build" block on npm installs wit…
kevincodex1 Jun 24, 2026
bd00b3b
fix(bg): stream session logs with bounded memory (#1762)
chioarub Jun 25, 2026
b8c3464
chore(deps): clean npm install — fix CVEs, silence warnings (#1782)
kevincodex1 Jun 25, 2026
db66f41
fix(resume): tolerate malformed legacy attachment records (#1768)
chioarub Jun 25, 2026
263f07e
chore(main): release 0.20.1 (#1774)
github-actions[bot] Jun 25, 2026
cb689cc
feat(effort): Add model-level reasoning effort routing (#1780)
jatmn Jun 25, 2026
3157ee7
Fix slash command suggestion filtering (#1664)
chioarub Jun 25, 2026
6fdb1d0
fix(bg): preserve provider env-file values during prompt detection (#…
chioarub Jun 25, 2026
a1a3cfc
perf(integrations): load descriptor catalog lazily on first registry …
kevincodex1 Jun 25, 2026
a723540
perf(build): minify the CLI bundle (whitespace + syntax, keep identif…
kevincodex1 Jun 25, 2026
13f7401
perf(repl): batch streaming text, cache normalize, coalesce config wr…
kevincodex1 Jun 25, 2026
82fd237
fix(env-file): collapse escaped backslashes in quoted values (#1773)
0xfandom Jun 25, 2026
40faf25
fix(atlas-cloud): vendor to gateway catalog correction and added reas…
jatmn Jun 25, 2026
0071454
Update Xiaomi MiMo v2.5 catalog reasoning (#1788)
jatmn Jun 25, 2026
22fa5b4
fix(copilot): auto-refresh Copilot token on 401 instead of only showi…
Gravirei Jun 25, 2026
a5a8ccc
fix: auto-continuation overly biased toward Claude-style output — bre…
rayss868 Jun 26, 2026
618e901
fix(hicap): improve model catalog and effort routing (#1790)
jatmn Jun 26, 2026
2083d1c
fix(openai-shim): recover GLM/Qwen XML tool calls emitted as text (#1…
kevincodex1 Jun 26, 2026
4704cbc
fix(core): join multi-block message text with a real newline (#1793)
0xghost42 Jun 26, 2026
9c29811
feat(claude): add Opus 4.8 model support (#1769)
euxaristia Jun 26, 2026
0b40000
fix(bash): correct off-by-one in truncated-line count (#1786)
Pablosinyores Jun 26, 2026
eea0a1a
feat(cli): add headless heartbeat for print mode (#1789)
chioarub Jun 27, 2026
6f794f4
fix(xAI): Update xAI model metadata and effort handling (#1795)
jatmn Jun 27, 2026
13cf30a
fix(moonshot): Add verified Kimi effort metadata (#1796)
jatmn Jun 27, 2026
ab8645d
fix: OpenClaude native launcher after Linux install (#1798)
jatmn Jun 27, 2026
320d63c
fix(compaction): skip microcompact when compaction is off (#1800)
chioarub Jun 27, 2026
8023356
feat(session): harden fork-session branching (#1801)
chioarub Jun 27, 2026
a474933
feat(report): generate deterministic session task reports (#1802)
chioarub Jun 29, 2026
ff8d47d
fix(status-line): estimate usage for unsupported providers (#1803)
jatmn Jun 29, 2026
b15660e
chore: remove unused atomic chat python helper (#1804)
jatmn Jun 29, 2026
259c7ec
fix(ollama): preserve chat history with native context (#1805)
jatmn Jun 29, 2026
9bf6aa2
feat(session): add branch command for conversation forks (#1808)
chioarub Jun 29, 2026
8859c5d
fix(plugins): treat prototype-shadowing marketplace names as not foun…
0xfandom Jun 30, 2026
1cdca1c
fix(remote-session): match ingress host by hostname, not raw substrin…
0xfandom Jun 30, 2026
5a79697
feat: add /set-context-window and /clear-context-window commands (#1810)
keyarr Jun 30, 2026
185ffea
fix(ollama): cap qwen3-coder-next:cloud output at 32768 (#1814)
0xfandom Jun 30, 2026
d0843be
fix(compaction): make snip nudges model-aware (#1816)
chioarub Jun 30, 2026
985984b
feat(ClinePass): add gateway provider with usage support (#1818)
jatmn Jun 30, 2026
1827d84
feat(agents): add per-agent step limits (#1815)
chioarub Jun 30, 2026
a7945e5
fix(plugins): keep marketplace reconciliation prototype-safe (#1821)
0xfandom Jun 30, 2026
c1a9dad
fix(claude): make stream watchdog deterministic (#1823)
chioarub Jun 30, 2026
64955db
chore(main): release 0.21.0 (#1783)
github-actions[bot] Jun 30, 2026
166d0ce
feat(resume): group branched sessions in picker (#1824)
chioarub Jun 30, 2026
8182a46
feat(report): render task reports as markdown (#1826)
chioarub Jun 30, 2026
f6ecee0
chore: remove unused Python helper suite (#1827)
jatmn Jun 30, 2026
bb61d84
fix(openai-shim): wire stream controller abort (#1828)
chioarub Jun 30, 2026
67227cf
fix(openai-shim): recover stalled provider streams (#1817)
chioarub Jul 1, 2026
deb4176
fix(openai-shim): strip `store` when baseUrl points at Mistral (#1047)
0xfandom Jul 1, 2026
0c9b814
fix(bash): surface rolled-output file path on non-zero exit (#1359) (…
0xfandom Jul 1, 2026
784d9a9
fix(format): show sub-second durations with one decimal instead of "0…
0xghost42 Jul 1, 2026
b73a879
fix(memoryscan): abort remaining workers when one throws on iterator …
code2ahm Jul 1, 2026
5b1db55
feat(lsp): expose captured diagnostics (#1813)
chioarub Jul 2, 2026
ac2b575
Fix shell abort classification for Bash and PowerShell (#1688)
chioarub Jul 2, 2026
e6019d3
fix(model): resolve [1m]-tagged aliases when 1M context is disabled (…
0xfandom Jul 2, 2026
17f4a5b
fix(plugins): match reserved-marketplace git URL owner by host, not s…
0xfandom Jul 3, 2026
069febb
fix(gitdiff): count in-hunk lines that start with ++ or -- in raw dif…
0xfandom Jul 3, 2026
d03b6a8
fix(codex): make Codex alias lookup prototype-safe (#1833)
0xfandom Jul 3, 2026
b9b5685
fix(permissions): make legacy tool-name alias lookup prototype-safe (…
0xfandom Jul 3, 2026
d1530c2
fix(query): clean up lifecycle tool tracking (#1845)
chioarub Jul 4, 2026
00b8c15
fix: governance controls for memory and git attribution (#1806)
jatmn Jul 5, 2026
5226fb9
fix(query): configure hard max and abort reasons (#1850)
chioarub Jul 5, 2026
68fcb91
fix(bash): use indexOf instead of lastIndexOf for multi-flag shell pr…
jatmn Jul 5, 2026
2ac20c7
fix(clipboard): use .NET Clipboard.GetImage() for Windows raw bitmap …
jatmn Jul 5, 2026
354feb4
fix(memory): prevent reported idle retention paths (#1856)
jatmn Jul 5, 2026
77c0a0d
feat(ux): honest feedback pass — visible retries, statusline truncati…
kevincodex1 Jul 5, 2026
203f055
fix(build): shim jsxDEV when bundling production React — TUI rendered…
kevincodex1 Jul 5, 2026
cd1cf3c
fix(bash): share parser analysis across checks (#1735)
chioarub Jul 6, 2026
cd13a61
fix(memory): recover from autocompact overflow failures (#1858)
jatmn Jul 6, 2026
9700bd3
fix(lsp): suppress empty diagnostic deliveries (#1859)
chioarub Jul 6, 2026
ad796e0
fix: bound profiler performance entries (#1865)
chioarub Jul 6, 2026
62fa7d4
fix(api): quiet expected side-task aborts (#1868)
chioarub Jul 6, 2026
6038681
chore(main): release 0.22.0 (#1832)
github-actions[bot] Jul 6, 2026
214ee3d
feat(skills): add local skill CLI support (#1162)
anandh8x Jul 6, 2026
e9a3c30
feat(skills): add PDF generation skill with native TypeScript impleme…
euxaristia Jul 7, 2026
e2bbb02
feat: smart auto-routing (per-turn simple-vs-strong model selection) …
beardthelion Jul 7, 2026
4a60c0f
fix: guard convertToLogOption against empty transcript (#1723)
euxaristia Jul 7, 2026
1bd273d
fix: isolate OpenClaude config from Claude Code (#1875)
techbrewboss Jul 7, 2026
766d3f8
fix(compact): count string message content (#847)
LifeJiggy Jul 7, 2026
f292b05
fix: await main() in cli entrypoint to prevent premature exit in Node…
3kin0x Jul 7, 2026
8369f20
feat(provider): add AI/ML API provider (#863)
D1m7asis Jul 7, 2026
fb40d49
feat: add repo map codebase intelligence (#1867)
jatmn Jul 7, 2026
11f4661
fix(lsp): coalesce diagnostic bursts (#1861)
chioarub Jul 7, 2026
7d86174
fix(diff): guard diff language detection against prototype-chain file…
0xfandom Jul 7, 2026
78a4b99
[codex] Enable Windows long paths for worktrees (#1729)
euxaristia Jul 7, 2026
885bd81
fix(hicap): add missing hicap-claude-opus-4.7 catalog entry (#1797)
euxaristia Jul 7, 2026
4be017b
fix: resolve zai-compatible config for all GLM remote models (#1752)
euxaristia Jul 7, 2026
2a506f9
added tencent hy3 to opengateway available models (#1876)
kevincodex1 Jul 7, 2026
2edec9a
fix(deps): ship a zero-warning, minimal install (#1784)
kevincodex1 Jul 7, 2026
b8c8b24
fix(opencode-go): surface clear error on subscription quota exhaustio…
euxaristia Jul 7, 2026
338f9ad
chore(main): release 0.23.0 (#1870)
github-actions[bot] Jul 7, 2026
db01038
feat(model-picker): surface inactive provider profiles in /model (#11…
0xfandom Jul 7, 2026
8599560
fix(websearch): add built-in provider request timeouts (#1874)
chioarub Jul 7, 2026
8d90849
fix(diff): don't overcount new-file additions by the trailing newline…
0xfandom Jul 7, 2026
2308881
fix(websearch): match allowed/blocked domains case-insensitively (#1872)
0xfandom Jul 7, 2026
5afd4f4
fix(tokens): include attachments in incremental cache key (#800)
LifeJiggy Jul 7, 2026
c3db07f
feat(codex-oauth): manual callback URL paste for SSH / remote session…
0xfandom Jul 7, 2026
aa936cd
Centralize credential redaction in src/utils/redaction.ts + channel g…
Gravirei Jul 7, 2026
a5b2779
feat(settings): add settings-based subscription override and agy term…
euxaristia Jul 7, 2026
67bebbd
fix(bg): match background-session command args on token boundaries (#…
Pablosinyores Jul 7, 2026
a46046e
fix(proxy): bypass subdomains for a bare NO_PROXY domain entry (#1848)
0xfandom Jul 7, 2026
f7d472e
fix(provider): add Use Anthropic option to switch back from third-par…
0xghost42 Jul 7, 2026
5105dff
fix(config): recover from a healthy backup when the global config is …
0xghost42 Jul 7, 2026
2f98208
fix(command-semantics): treat linter exit 1 as violations, not an err…
0xghost42 Jul 7, 2026
aac2d8c
fix(openai-shim): guard tool-arg field lookup against prototype keys …
0xfandom Jul 7, 2026
fb11372
feat: add ultrathink keyword detection and ultracode effort level (#1…
adityachaudhary99 Jul 8, 2026
780f703
fix(installer): gate native-binary install behind NATIVE_PACKAGE_URL …
kevincodex1 Jul 8, 2026
e204d5a
feat(doctor): add WebSearch backend diagnostics (#1884)
chioarub Jul 8, 2026
9a53290
feat(aimlapi): add guided top-up and key provisioning (#1886)
Lookoff-AIMLAPI Jul 8, 2026
3b41cf3
fix(command-semantics): cover remaining linter runner exits (#1700)
adityachaudhary99 Jul 8, 2026
ae9a765
fix(env): align WebSearch and Ollama env docs (#1904)
chioarub Jul 8, 2026
de751f3
fix(editor): guard editor-override lookup against prototype keys (#1915)
0xfandom Jul 8, 2026
06e0ae6
feat(settings): per-model context_window and max_output_tokens overri…
0xfandom Jul 8, 2026
2047fb2
fix(query-guard): exclude human-interaction wait from session timeout…
Hanxcellent Jul 9, 2026
cde6e09
fix(read): report zero lines for an empty file (#1881)
0xfandom Jul 9, 2026
de97295
fix(nvidia-nim): enable reasoning template kwargs (#1893)
jatmn Jul 9, 2026
e086e8c
fix(safety): relax over-restrictive safety checks for benign coding t…
jatmn Jul 9, 2026
e42aeb3
refactor(messages): extract tool pairing helpers (1 of 8) (#1898)
jatmn Jul 9, 2026
fc568b9
refactor(messages): extract streaming helpers (2 of 8) (#1899)
jatmn Jul 9, 2026
a154f71
refactor(messages): extract normalization helpers (3 of 8) (#1900)
jatmn Jul 9, 2026
6602076
refactor(messages): extract system factories (6 of 8) (#1903)
jatmn Jul 9, 2026
3f85b25
fix(commands): escape named-argument names before building the regex …
0xfandom Jul 9, 2026
eeed68f
feat(provider): add Cloudflare Workers AI integration (#1100) (#1178)
0xfandom Jul 9, 2026
eb5d719
refactor(messages): extract basic factories (5 of 8) (#1902)
jatmn Jul 9, 2026
87c457c
fix(diff): count dropped lines correctly in truncated diff snippet (#…
0xfandom Jul 9, 2026
07dd90d
refactor(messages): extract plan mode rendering (7 of 8) (#1905)
jatmn Jul 10, 2026
7995b9f
fix(powershell): make CMDLET_PATH_CONFIG prototype-safe (#1913)
0xfandom Jul 10, 2026
218064e
fix(clipboard): fall back to image retrieval after Windows probe fail…
jatmn Jul 10, 2026
6d6b8de
refactor(messages): extract API cleanup helpers (8 of 8) (#1906)
jatmn Jul 10, 2026
2259c80
fix(shim): don't infer Z.AI tool_stream for non-catalog GLM gateways …
0xghost42 Jul 10, 2026
64d164d
fix(tools): keep HY3 tool schemas inline (#1923)
jatmn Jul 10, 2026
9e06951
refactor(messages): extract content helpers (4 of 8) (#1901)
jatmn Jul 10, 2026
b588c26
fix(effort): keep effort indicator visible in prompt footer (#1919)
Hanxcellent Jul 10, 2026
5918e33
fix(model): default NVIDIA NIM main loop model (#1928)
jatmn Jul 10, 2026
4f971a1
fix(permissions): resolve relative worktree edit paths (#1930)
jatmn Jul 10, 2026
4faf666
fix: keep footer mounted across slash suggestions (#1943)
Hanxcellent Jul 11, 2026
0369c86
fix(diff): number diff-snippet hunks by their new-file position (#1917)
0xfandom Jul 11, 2026
ffc5a6e
fix(gitdiff): apply the 1MB diff cap in bytes, not UTF-16 char length…
0xfandom Jul 11, 2026
2448ea9
fix(query): warn before repeated tool failures stop (#1927)
jatmn Jul 12, 2026
9bf9926
fix(mcp): preserve ":-" inside ${VAR:-default} default values (#1933)
0xfandom Jul 13, 2026
2970b5f
fix(context): order pruned messages by envelope timestamp, not phanto…
0xfandom Jul 13, 2026
85cf2ac
fix(update): avoid upstream package commands for custom builds (#1944)
chioarub Jul 13, 2026
0dc622e
test(cli): clean skills temp directories (#1946)
jatmn Jul 13, 2026
2da3e4c
docs: clarify pre-PR contributor checklist (#1920)
adityachaudhary99 Jul 14, 2026
6b2a1d8
test(websearch): allow shared timeout test lock wait (#1959)
jatmn Jul 14, 2026
af0885d
fix(bg): revalidate process identity before signals (#1937)
chioarub Jul 14, 2026
c11c88b
perf: bound file IO concurrency (#1948)
GautamBytes Jul 14, 2026
ed3927d
fix(editor): account for NFC boundary composition in insert offset (#…
0xfandom Jul 14, 2026
f961ae7
fix: suspend footer work during ctrl-c feedback (#1963)
Hanxcellent Jul 14, 2026
9fc8806
fix(cache): use a monotonic clock for conversation-cache LRU recency …
0xfandom Jul 14, 2026
2ff93a1
chore(main): release 0.24.0 (#1883)
github-actions[bot] Jul 14, 2026
7b9e477
fix(memdir): enforce entrypoint cap in bytes, not UTF-16 char length …
0xfandom Jul 15, 2026
d683e85
feat(buddy): hero pixel-art companions with signature Enter animation…
kevincodex1 Jul 15, 2026
1464821
Chore/readme cleanup (#1976)
kevincodex1 Jul 15, 2026
1d053b2
fix(resume): read the session tag from its own entry, not a tool's ta…
0xfandom Jul 15, 2026
a327815
fix(query): bound per-turn latency growth in long REPL sessions (#194…
jatmn Jul 15, 2026
626c487
feat(statusline): show token counts in context bar (ctx 74K/200K (37%…
iHardRock Jul 15, 2026
46e8056
fix(provider): support custom Anthropic bearer auth (#1929)
jatmn Jul 16, 2026
1f20e92
fix(permissions): enforce read-only plan mode (#1938)
chioarub Jul 16, 2026
487cae7
fix(api): self-heal `tool_stream` rejection from non-Z.AI gateways (#…
jatmn Jul 16, 2026
507ba4b
perf(tools): preserve UTF-8-safe head and tail in persisted previews …
chioarub Jul 16, 2026
7ad96e9
test: isolate flaky smoke assertions (#1978)
jatmn Jul 16, 2026
2516eef
test: restore compact mock isolation (#1979)
jatmn Jul 16, 2026
47123b4
test: restore global mock isolation (#1980)
jatmn Jul 16, 2026
0effa0f
test: seal mock.module leaks in awaySummary and diff smoke tests (#1981)
jatmn Jul 17, 2026
de76950
feat(provider): route GPT-5.6 models to the OpenAI Responses API (#1961)
clacy44 Jul 18, 2026
eb72c77
fix(repl): add correction context after interruption (#1936)
chioarub Jul 18, 2026
3808d19
fix(api): enforce API_TIMEOUT_MS for OpenAI-compatible headers (#1940)
chioarub Jul 19, 2026
86fb6db
fix(session-title): ignore API error responses (#1992)
Hanxcellent Jul 19, 2026
630fc2d
fix(compaction): honor disabled auto-compact under memory pressure (#…
jatmn Jul 19, 2026
1ddb7d6
test: isolate PowerShell governance policy settings (#2000)
jatmn Jul 19, 2026
5399a11
fix(openai): compress tool history on Responses requests (#1958)
chioarub Jul 20, 2026
7674d4d
feat(aimlapi): provider foundation (1/5) — config, catalog, ambient-k…
Lookoff-AIMLAPI Jul 20, 2026
ca7a7e0
feat(install): enforce and guard the zero-warning npm install contrac…
kevincodex1 Jul 20, 2026
cb460e5
feat(codex): add GPT-5.6 family models and fix saved-model rehydratio…
kevincodex1 Jul 20, 2026
83d54b0
feat(perf): tier1 token optimization — universal tool compression, do…
kevincodex1 Jul 20, 2026
fff83a1
feat(onboarding): first-run experience for third-party providers (#1864)
kevincodex1 Jul 20, 2026
8f81e48
feat: add LongCat as first-class OpenAI-compatible provider (#1986)
jatmn Jul 20, 2026
e3fb051
feat(kimi): add Kimi K3 context variants (#1989)
jatmn Jul 20, 2026
722e0c3
fix(output-style): resolve style names by own-property (#2023)
0xfandom Jul 20, 2026
0a9bc18
chore(main): release 0.25.0 (#1973)
github-actions[bot] Jul 20, 2026
a6b3d7a
fix(bridge): truncate derived session titles on grapheme boundaries (…
0xfandom Jul 22, 2026
4bb94d0
refactor(openai-shim): extract stream control (#2002)
jatmn Jul 22, 2026
5f6c608
fix(fs): tolerate EPERM from mkdir on Windows drive roots (#2026)
Suyun114 Jul 22, 2026
df85369
refactor(openai-shim): extract provider compatibility (#2003)
jatmn Jul 22, 2026
ed6f538
Initial plan
Copilot Jul 22, 2026
18dc768
Apply remaining changes
Copilot Jul 22, 2026
603dc08
refactor: optimize memory directory scanning with concurrent file rea…
Edwardmaster7 Jul 22, 2026
86eadf9
feat: add configurable max turn limits for REPL and background agents…
Edwardmaster7 Jul 22, 2026
725e4a7
feat: add reasoning effort support to Gemini models and expand model …
Edwardmaster7 Jul 23, 2026
56e1f14
refactor: remove xhigh reasoning level from Gemini model configuration
Edwardmaster7 Jul 23, 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
  •  
  •  
  •  
77 changes: 71 additions & 6 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@
# ANTHROPIC_API_KEY=sk-ant-your-key-here
# ANTHROPIC_MODEL=claude-sonnet-4-5 (optional)
# ANTHROPIC_BASE_URL=https://api.anthropic.com (optional)
# ANTHROPIC_AUTH_TOKEN=your-provider-token (custom Bearer endpoints)
#
# Option 1b — Custom Anthropic-compatible API (Bearer auth):
# ANTHROPIC_BASE_URL=https://your-provider.example
# ANTHROPIC_AUTH_TOKEN=your-provider-token
# ANTHROPIC_MODEL=your-model-name
#
# Option 2 — OpenAI:
# CLAUDE_CODE_USE_OPENAI=1
Expand Down Expand Up @@ -175,6 +181,8 @@ ANTHROPIC_API_KEY=sk-ant-your-key-here
# -----------------------------------------------------------------------------
# CLAUDE_CODE_USE_OPENAI=1
# OPENAI_API_KEY=sk-your-key-here
# Optional: rotate across multiple OpenAI-compatible API keys on auth/quota/rate-limit failures.
# OPENAI_API_KEYS=sk-key-a,sk-key-b
# OPENAI_MODEL=gpt-4o
# For DeepSeek, set:
# OPENAI_BASE_URL=https://api.deepseek.com/v1
Expand All @@ -192,13 +200,33 @@ ANTHROPIC_API_KEY=sk-ant-your-key-here
# For Hicap, use the OpenAI-compatible route flag above and set:
# HICAP_API_KEY=your-hicap-key-here
# OPENAI_BASE_URL=https://api.hicap.ai/v1
# OPENAI_MODEL=claude-opus-4.7
# OPENAI_MODEL=claude-opus-4.8
# For AI/ML API, the key alone enables the OpenAI-compatible route:
# AIMLAPI_API_KEY=your-aimlapi-key-here
# OPENAI_BASE_URL=https://api.aimlapi.com/v1
# OPENAI_MODEL=gpt-4o

# Use a custom OpenAI-compatible endpoint (optional — defaults to api.openai.com)
# OPENAI_BASE_URL=https://api.openai.com/v1
# Choose the OpenAI-compatible API surface (optional — defaults to chat_completions)
# Supported: chat_completions, responses
# Choose the OpenAI-compatible API surface (optional).
# Supported: chat_completions, responses, responses_compat
# Left unset, GPT-5.4/5.5/5.6 models (mini/nano variants excluded) on
# api.openai.com or Azure OpenAI are auto-routed to responses (they reject
# function tools + reasoning_effort on chat_completions); everything else
# defaults to chat_completions. Set this to override: an explicit
# chat_completions wins over the model auto-detection, but a provider
# catalog's requiredApiFormat still takes precedence over it. GPT-5.6 omits
# reasoning effort on this fallback because chat_completions rejects it with tools.
# OPENAI_API_FORMAT=chat_completions
# Force Azure-style URL and api-key-header handling for
# custom or private Azure endpoints whose hostname would not otherwise match
# (APIM-fronted, private link). Note: this also widens the GPT-5.4/5.5/5.6
# responses auto-route above to ANY base URL — do not set it against gateways
# that lack /v1/responses.
# On Azure, OPENAI_MODEL is your deployment name; if it is not the model id
# (e.g. production-coding), the model-name auto-route cannot recognize it —
# set OPENAI_API_FORMAT=responses explicitly for gpt-5.4/5.5/5.6 deployments.
# OPENAI_AZURE_STYLE=1
# Choose a custom auth header for OpenAI-compatible providers (optional).
# Authorization defaults to Bearer; custom headers default to the raw API key.
# Set OPENAI_AUTH_HEADER_VALUE when the header value differs from OPENAI_API_KEY.
Expand Down Expand Up @@ -249,6 +277,7 @@ ANTHROPIC_API_KEY=sk-ant-your-key-here
# OPENAI_BASE_URL=http://localhost:11434/v1
# OPENAI_API_KEY=ollama
# OPENAI_MODEL=llama3.2
# OPENCLAUDE_OLLAMA_NUM_CTX=32768 — request-level Ollama context window

# -----------------------------------------------------------------------------
# Option 6: LM Studio (local models)
Expand Down Expand Up @@ -350,6 +379,34 @@ ANTHROPIC_API_KEY=sk-ant-your-key-here
# OPENAI_MODEL=accounts/fireworks/models/llama-v3p1-70b-instruct


# -----------------------------------------------------------------------------
# Option 13: LongCat
# -----------------------------------------------------------------------------
# LongCat is Meituan's OpenAI-compatible API for LongCat-2.0.
# Get your API key from https://longcat.chat/platform/api_keys
# Docs: https://longcat.chat/platform/docs/
#
# CLAUDE_CODE_USE_OPENAI=1
# LONGCAT_API_KEY=your-longcat-key-here
# OPENAI_BASE_URL=https://api.longcat.chat/openai/v1
# OPENAI_MODEL=LongCat-2.0
#
# Or run: openclaude --provider longcat
# Or configure interactively with /provider


# -----------------------------------------------------------------------------
# Option 14: ClinePass
# -----------------------------------------------------------------------------
# ClinePass is an AI model gateway with usage limits (5hr, weekly, monthly).
# Get your API key from https://app.cline.bot/dashboard/subscription?personal=true
# Models include DeepSeek, Qwen, GLM, Kimi, MiMo, and MiniMax.
#
# CLINE_API_KEY=your-cline-api-key-here
# CLINE_API_MODEL=cline-pass/deepseek-v4-flash (optional, default)
#
# Usage limits are displayed via /usage command.

# =============================================================================
# OPTIONAL TUNING
# =============================================================================
Expand Down Expand Up @@ -398,8 +455,15 @@ ANTHROPIC_API_KEY=sk-ant-your-key-here
# Turn on whichever audience you're debugging; both can run together.
# OPENCLAUDE_LOG_TOKEN_USAGE=verbose

# Custom timeout for API requests in milliseconds (default: varies)
# API_TIMEOUT_MS=60000
# Time-to-response-headers deadline for OpenAI-compatible API requests
# in milliseconds (default: 600000, or 10 minutes). Use a safe positive
# integer; invalid values use the default and values above 2147483647 are capped.
# This runtime setting must be exported from your shell or launcher; the
# provider env-file loader intentionally ignores runtime/debug knobs.
# This covers generic OpenAI-compatible requests, direct GitHub Copilot
# Responses, and Copilot chat-to-Responses fallback requests. First-party
# Codex OAuth Responses and the Anthropic SDK retain their existing handling.
# API_TIMEOUT_MS=600000

# Enable debug logging
# CLAUDE_DEBUG=1
Expand Down Expand Up @@ -478,6 +542,7 @@ ANTHROPIC_API_KEY=sk-ant-your-key-here
# you must explicitly set WEB_SEARCH_PROVIDER=custom.
#
# WEB_SEARCH_PROVIDER=auto
# WEB_SEARCH_TIMEOUT_SEC=15 — built-in search provider timeout in seconds (default 15)

# ── Built-in custom API presets ─────────────────────────────────────
#
Expand Down Expand Up @@ -512,7 +577,7 @@ ANTHROPIC_API_KEY=sk-ant-your-key-here
# The custom provider enforces security guardrails by default.
# Override these only if you understand the risks.
#
# WEB_CUSTOM_TIMEOUT_SEC=15 — request timeout in seconds (default 15)
# WEB_CUSTOM_TIMEOUT_SEC=120 — request timeout in seconds (default 120)
# WEB_CUSTOM_MAX_BODY_KB=300 — max POST body size in KB (default 300)
# WEB_CUSTOM_ALLOW_ARBITRARY_HEADERS=false — set "true" to use non-standard headers
# WEB_CUSTOM_ALLOW_HTTP=false — set "true" to allow http:// URLs
Expand Down
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ CODE_OF_CONDUCT* text
*.xml text
*.csv text
*.sql text
*.scm text eol=lf

# Graphics (binary)
*.png binary
Expand Down
51 changes: 51 additions & 0 deletions .github/workflows/install-hygiene.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Daily zero-warning-install watch on the PUBLISHED package.
#
# The published tarball ships no lockfile, so even with exact-pinned direct
# dependencies the registry can drift under us after a release: a transitive
# dependency gets deprecated (npm prints the deprecation on every user
# install), a platform-specific optional package (@vscode/ripgrep-*) changes,
# or a new npm version alters behavior. None of that touches a file in this
# repo, so no PR or release gate can catch it — only re-verifying the real
# `npm install -g @gitlawb/openclaude@latest` against the live registry does.
#
# The OS matrix matters: each platform resolves a different ripgrep optional
# package, so a Linux-only check is blind to what macOS/Windows users install.
name: Install hygiene

on:
schedule:
- cron: '17 6 * * *' # daily, off the top-of-hour rush
workflow_dispatch:

permissions:
contents: read

jobs:
verify-published-install:
name: ${{ matrix.os }} / Node ${{ matrix.node-version }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node-version: [22, 24]
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ matrix.node-version }}

- name: Set up Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version-file: .bun-version

# The verify script only uses node builtins + scripts/externalsValidation
# (relative import) — no bun install needed, keeping the matrix cheap.
- name: Verify published package installs clean
run: bun run scripts/verify-clean-install.ts --published
18 changes: 4 additions & 14 deletions .github/workflows/pr-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ permissions:
jobs:
smoke-and-tests:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [22, "24.11.x"]

steps:
- name: Check out repository
Expand All @@ -22,32 +25,19 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 22
node-version: ${{ matrix.node-version }}

- name: Set up Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version-file: .bun-version

- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: "3.12"
cache: "pip"
cache-dependency-path: python/requirements.txt

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Smoke and full unit test suite
run: bun run check

- name: Install Python test dependencies
run: python -m pip install -r python/requirements.txt

- name: Python unit tests
run: python -m pytest -q python/tests

- name: Suspicious PR intent scan
env:
PR_SCAN_BASE: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || 'origin/main' }}
Expand Down
51 changes: 48 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,50 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
release-type: node

# Zero-warning install gate: pack the release tag and install it globally in
# a sandbox (cold + upgrade scenarios) on the supported Node floor (22 →
# npm 10) and current (24 → npm 11), whose warning output differs. Publish
# is blocked unless the real `npm install -g` experience is clean.
install-verify:
name: Verify clean npm install (Node ${{ matrix.node-version }})
needs: release-please
if: ${{ needs.release-please.outputs.release_created == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
fail-fast: false
matrix:
node-version: [22, 24]
steps:
- name: Checkout release tag
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ needs.release-please.outputs.tag_name }}
persist-credentials: false

- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ matrix.node-version }}

- name: Set up Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version-file: .bun-version

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Build
run: bun run build

- name: Verify zero-warning global install
run: bun run install:verify

publish-npm:
name: Publish to npm
needs: release-please
needs: [release-please, install-verify]
if: ${{ needs.release-please.outputs.release_created == 'true' }}
runs-on: ubuntu-latest
environment: release
Expand Down Expand Up @@ -68,8 +109,12 @@ jobs:
- name: Smoke test
run: bun run smoke

- name: Dry-run package
run: npm pack --dry-run
# Final install-hygiene gate on the publishing machine itself (the
# install-verify job covered Node 22/24 already); packs with
# --ignore-scripts to reuse the dist/ built above. Supersedes the old
# `npm pack --dry-run` (contents are asserted inside the verify).
- name: Verify zero-warning global install
run: bun run install:verify

- name: Clear token auth for trusted publishing
run: |
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ __pycache__/
agent.log
plan/
.tmp
.tmp-*
temp_reference/

# Added by ggshield
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.19.0"
".": "0.25.0"
}
8 changes: 0 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ The installed CLI runs on Node.js `>=22.0.0`. Bun is used for source builds, scr
- React + Ink for terminal UI.
- Bun lockfile and Bun scripts for development workflows.
- Node runtime for the built CLI.
- Python exists for legacy/local-provider helper code. Do not add new Python code or expand Python-based features unless a maintainer explicitly approves that direction.

Common libraries and patterns:

Expand All @@ -44,7 +43,6 @@ Common libraries and patterns:
- `src/tasks/` - local, remote, workflow, and monitor task handling.
- `docs/integrations/` - provider integration guidance.
- `web/` - documentation website.
- `python/` - legacy/local-provider helper code and tests; maintain existing code here, but prefer TypeScript for new implementation.

## Validation

Expand All @@ -69,12 +67,6 @@ bun run test:provider
bun run test:provider-recommendation
```

Python checks, only when touching existing Python helper code:

```bash
python -m pytest -q python/tests
```

Web checks, when touching `web/`:

```bash
Expand Down
Loading
Loading