Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
710 commits
Select commit Hold shift + click to select a range
452a725
fix(mem0): address PR review — restore docstrings, keep api_key required
May 4, 2026
73340d8
chore: add buihongduc132 to AUTHOR_MAP for mem0 salvage
teknium1 Jun 22, 2026
2b3a4f0
fix(agent): strip stale reasoning_content when falling back to a stri…
teknium1 Jun 22, 2026
0a7ae28
fix(compressor): remove logging.basicConfig from library class __init__
annguyenNous Jun 22, 2026
9bf9a9f
fix(swe-runner): move logging.basicConfig out of Runner __init__ into…
teknium1 Jun 22, 2026
7726ce3
fix(security): close hermes-0day MCP-persistence attack surface
teknium1 Jun 22, 2026
eb51c18
fix(docker): replace dashboard --insecure with basic-auth provider
teknium1 Jun 22, 2026
f45ace9
feat(security): startup security posture audit (warn-on-load)
teknium1 Jun 22, 2026
41fe086
style(security-audit): add explicit encoding to read_text calls (ruff…
teknium1 Jun 22, 2026
8cecaf0
feat(process): escalate SIGTERM->SIGKILL on host-pid termination afte…
teknium1 Jun 22, 2026
8cbb34b
chore: map tkwong co-author email for #15008 SIGKILL-escalation credit
teknium1 Jun 22, 2026
8cfcbd3
fix(process): SIGKILL the whole tree on escalation, not just wait_pro…
teknium1 Jun 22, 2026
5bf23ff
fix(banner): don't advertise toolsets/skills the agent wasn't given (…
teknium1 Jun 22, 2026
7130d60
feat(providers): remove google-gemini-cli + google-antigravity OAuth …
teknium1 Jun 22, 2026
0768ed3
docs(agents): fix stale platform adapter path in token-lock note
TutkuEroglu Jun 21, 2026
4c1934d
docs: repoint remaining stale gateway/platforms adapter refs to plugi…
teknium1 Jun 22, 2026
b0a2598
fix(terminal): make hermes install dir reachable in subshell PATH (#5…
teknium1 Jun 22, 2026
95d53c3
feat(cli): /reasoning full — show complete thinking, not 10-line clam…
teknium1 Jun 22, 2026
9e96e70
feat(cli): /prompt — compose your next prompt in $EDITOR (#50509)
teknium1 Jun 22, 2026
e448b21
feat(dashboard): interactive auth setup on no-provider non-loopback b…
teknium1 Jun 22, 2026
6202fdf
fix(container): detect dashboard role under s6-overlay v3 (#49196) (#…
benbarclay Jun 22, 2026
de6b3ae
fix(terminal): bridge docker_extra_args to TERMINAL_DOCKER_EXTRA_ARGS…
benbarclay Jun 22, 2026
4314d45
fix(gateway): accept any inbound file type across all messaging platf…
teknium1 Jun 22, 2026
b5bd66e
fix(telegram): observed/replied group docs of any type are cached too
teknium1 Jun 22, 2026
4b09903
fix Nous auth refresh for idle agents
shannonsands Jun 18, 2026
74f0dd6
feat(cli): Ctrl+G submits the edited draft on save (TUI parity) (#50560)
teknium1 Jun 22, 2026
2455e18
Make email pairing opt-in
shannonsands Jun 18, 2026
5dae502
Address email pairing review feedback
shannonsands Jun 18, 2026
b9b4756
fix dashboard chat session titles
shannonsands Jun 22, 2026
5ff11a6
feat(cli): /timestamps command + timestamps in /history (#50506)
teknium1 Jun 22, 2026
ab22317
Merge pull request #50214 from kshitijk4poor/salvage/desktop-rename-b…
kshitijk4poor Jun 22, 2026
47b6b4c
fix #39550: detect token-only compression success
davidgut1982 Jun 20, 2026
87b60ae
no-mistakes(review): guard token-delta status msg on actual compressi…
davidgut1982 Jun 20, 2026
ebd38e1
test(agent): regression for token-only compression progress (#39550, …
kshitijk4poor Jun 22, 2026
a61baa9
feat(desktop): PR-style file diffs in chat
OutThisLife Jun 22, 2026
c6fbd5a
style(desktop): lead --dt-font-mono with bundled JetBrains Mono
OutThisLife Jun 22, 2026
ac128af
feat(desktop): syntax-highlight inline diffs via Shiki
OutThisLife Jun 22, 2026
64a507d
feat(relay): handle passthrough_forward over the WS (Phase 5 §5.1, ga…
benbarclay Jun 22, 2026
33efff0
Merge pull request #50726 from NousResearch/salvage/compression-token…
kshitijk4poor Jun 22, 2026
61c266b
style(desktop): soften dark-mode syntax highlighting
OutThisLife Jun 22, 2026
b08ee8a
fix(agent): count tokens, not just rows, as preflight compression pro…
jackjin1997 Jun 9, 2026
3545d29
refactor(auth): drop dead select() fallback in anthropic pool resolver
kshitijk4poor Jun 22, 2026
2649f73
Merge pull request #50062 from NousResearch/salvage/cron-missed-grace…
kshitijk4poor Jun 22, 2026
f509d65
Merge pull request #50109 from NousResearch/salvage/f5-disabled-bundl…
kshitijk4poor Jun 22, 2026
69de036
fix(agent): align preflight token-progress floor to 5% (#23767, #39548)
kshitijk4poor Jun 22, 2026
b9f3024
Merge pull request #50112 from NousResearch/salvage/f5-cron-storage-root
kshitijk4poor Jun 22, 2026
04a1d9e
feat(desktop): PR-style file diffs in chat (#50731)
OutThisLife Jun 22, 2026
74a5905
fix(cron): layer enabled MCP servers onto per-job enabled_toolsets
sherman-yang Jun 21, 2026
5bd3dae
chore(release): add sherman-yang to AUTHOR_MAP
kshitijk4poor Jun 21, 2026
5342ecc
Merge remote-tracking branch 'origin/main' into bb/pets
OutThisLife Jun 22, 2026
21541ce
Merge pull request #50108 from NousResearch/salvage/f4m1-anthropic-pool
kshitijk4poor Jun 22, 2026
aa83213
Merge pull request #50740 from NousResearch/salvage/preflight-token-p…
kshitijk4poor Jun 22, 2026
0e87c0a
Merge pull request #50117 from NousResearch/salvage/f5-cron-mcp-per-job
kshitijk4poor Jun 22, 2026
72f75f8
fix(compressor): count tool_call envelope in tail-budget token estima…
basilalshukaili Jun 10, 2026
b4cb33c
chore(release): map basilalshukaili@gmail.com in AUTHOR_MAP
kshitijk4poor Jun 22, 2026
b2c84a1
fix(agent): defer preflight compaction until real usage after a compa…
kshitijk4poor Jun 22, 2026
1f28b1a
fix(gateway): redact credentials from approval prompts before sending…
kshitijk4poor Jun 22, 2026
065946d
Merge pull request #50762 from NousResearch/salvage/defer-preflight-a…
kshitijk4poor Jun 22, 2026
75a70d9
feat(relay): forward a stable instance id at self-provision (Phase 6 …
benbarclay Jun 22, 2026
623b21b
fix(compress): reserve output tokens in the compaction threshold (#23…
kshitijk4poor Jun 22, 2026
a904ff1
Merge pull request #50781 from NousResearch/salvage/output-token-rese…
kshitijk4poor Jun 22, 2026
8845f33
fix(security): restrict dashboard plugin backend import to bundled pl…
egilewski Jun 11, 2026
2e779d1
feat(mem0): v3 API, OSS mode, update/delete tools, telemetry & review…
kartik-mem0 Jun 22, 2026
eecb5b9
fix(update): don't count across shallow-clone boundary (bogus '12492 …
teknium1 Jun 22, 2026
86e4521
fix(delivery): make cron output truncation configurable + adapter-aware
ScotterMonk Jun 21, 2026
e9cd8c5
fix(delivery): drop env-var knob, flag all chunking adapters
teknium1 Jun 22, 2026
da498ed
chore(release): map ScotterMonk for PR #50145 salvage
teknium1 Jun 22, 2026
ef6492b
fix(gateway): cold-start installed Windows gateway after update when …
teknium1 Jun 22, 2026
a6ce9b2
fix(picker): keep flat-namespace reseller first-party models in deskt…
teknium1 Jun 22, 2026
d4fa2db
fix(desktop): show all of a provider's models when searching the comp…
teknium1 Jun 22, 2026
ff85af3
feat(goals): /goal wait <pid> — park the loop on a background process…
teknium1 Jun 22, 2026
17dfc6b
fix(desktop): set AppUserModelID on Windows so notifications fire (#5…
teknium1 Jun 22, 2026
f2e3754
feat(computer_use): cross-platform cua-driver (macOS/Windows/Linux)
f-trycua Jun 22, 2026
e3505c7
fix(computer_use): reconcile Linux gate with stale "gated off" comments
teknium1 Jun 22, 2026
38c56a1
fix(computer_use): probe cua-driver-rs release tag, not monorepo rele…
teknium1 Jun 22, 2026
70e7132
fix(openviking): gate memory writes and add viking_forget
ehz0ah Jun 19, 2026
c7e0501
fix(openviking): drain memory mirror workers on shutdown
ehz0ah Jun 22, 2026
027cb64
fix(memory): fail closed on unclear write results
ehz0ah Jun 22, 2026
b1b2027
refactor(memory): move write-mirror gating behind MemoryManager inter…
teknium1 Jun 22, 2026
2617946
fix(delegation): emit high-concurrency cost warning once per process …
teknium1 Jun 22, 2026
4966268
fix(slack): honor documented `mention_patterns` wake words
devorun Jun 22, 2026
441bd6d
fix(slack): split csv mention pattern fallback
iaji Jun 22, 2026
ed711e1
chore: add iaji to AUTHOR_MAP for salvaged Slack mention_patterns fix
teknium1 Jun 22, 2026
f1e6d39
feat(computer_use): disable cua-driver telemetry by default, add opt-…
teknium1 Jun 22, 2026
e2bea0a
refactor(security): centralize non-bundled plugin sources in one cons…
kshitijk4poor Jun 22, 2026
5937b95
Merge pull request #50773 from NousResearch/salvage/43719-dashboard-p…
kshitijk4poor Jun 22, 2026
79f270f
fix(desktop): portal floating composer to body so it can't be clipped…
OutThisLife Jun 22, 2026
aff5ae6
fix(desktop): move composer out of contain wrapper instead of portaling
OutThisLife Jun 22, 2026
ea5fa50
fix(desktop): clamp floating composer to the thread area, not the who…
OutThisLife Jun 22, 2026
de7ad8b
fix(desktop): guarantee out-of-bounds composer is reclamped on load
OutThisLife Jun 22, 2026
7dece1d
Merge pull request #50977 from NousResearch/bb/composer-fixed-portal
OutThisLife Jun 22, 2026
ff08e60
feat(skills): add cloudflare-temporary-deploy optional skill (#50849)
teknium1 Jun 22, 2026
2ba1cfe
feat(goals): completion contracts for /goal — evidence-based judging …
teknium1 Jun 22, 2026
5250335
fix(computer-use): route CuaDriver vision capture via get_window_state
jeeves-assistant Jun 22, 2026
30e5d00
feat(computer-use): add whole-screen/desktop capture target
teknium1 Jun 22, 2026
4849a8e
hermes_state: add SessionDB.delete_telegram_topic_binding (#31501)
xxxigm May 24, 2026
142a575
gateway/telegram: prune stale DM topic binding on Thread-not-found (#…
xxxigm May 24, 2026
11246db
tests: regression coverage for stale topic-binding prune (#31501)
xxxigm May 24, 2026
6681f28
fix(telegram): disable DM topic mode when last binding is pruned
teknium1 Jun 22, 2026
2a58fee
fix(api): allow dashboard updates for git checkouts in containers (#5…
austinpickett Jun 22, 2026
791c992
fix(model_switch): route typed configured models off openai-codex (#4…
harjothkhara Jun 22, 2026
f721d2c
fix(image/video gen): make schema delivery instruction platform-neutr…
teknium1 Jun 22, 2026
5f1d23c
fix(computer-use): delete broken pre-install asset probe; trust the u…
f-trycua Jun 22, 2026
0f741ce
fix(tests): update cua install tests for cross-platform support
teknium1 Jun 22, 2026
3972701
fix(agent): complete final text on last turn
helix4u Jun 22, 2026
ae7e857
fix(cron): deliver max-iteration fallback reports
helix4u Jun 22, 2026
91c465f
test(discord): add regression test for 100-command sync limit
infinitycrew39 Jun 22, 2026
e9b86f3
fix(discord): delete obsolete slash commands before creating new ones
teknium1 Jun 22, 2026
100e7be
fix(security): deny root-level credential stores in media delivery
kshitijk4poor Jun 22, 2026
3147cbb
fix(memory): apply /memory approve against a fresh store when no live…
maxmilian Jun 15, 2026
0e69cd4
fix(memory): honor configured char limits in the no-agent on-disk store
kshitijk4poor Jun 22, 2026
c080b2d
fix(gateway): redact credentials from TUI approval prompts (#48456)
kshitijk4poor Jun 22, 2026
15880da
fix(file_tools): resolve tilde using profile home for file operations…
Tranquil-Flow Jun 19, 2026
660e36f
fix(cron): scope job execution to its owning profile (#32091 follow-u…
teknium1 Jun 22, 2026
87c4a5e
feat(background-review): aux-model selector for the self-improvement …
teknium1 Jun 22, 2026
0223ea5
feat(computer-use): surface macOS permission preflight in the desktop
OutThisLife Jun 22, 2026
807b696
fix(computer-use): vision capture returns an image on cua-driver >=0.5.x
OutThisLife Jun 22, 2026
2dfcead
feat(computer-use): make the preflight cross-platform (win/linux)
OutThisLife Jun 22, 2026
3c1058e
fix(computer-use): set stdin=DEVNULL on cua-driver subprocess calls
OutThisLife Jun 22, 2026
a6b670d
fix(desktop): avoid stack overflow on embedded image replay
OutThisLife Jun 22, 2026
88e1364
fix(agent): shrink anthropic-native image history
OutThisLife Jun 22, 2026
b90f1e4
Merge pull request #51093 from NousResearch/bb/desktop-string-stack-o…
OutThisLife Jun 22, 2026
9bacd7d
Merge pull request #51096 from NousResearch/bb/desktop-oversized-imag…
OutThisLife Jun 22, 2026
3fffecb
feat(desktop): add timeline rail for long chat threads
OutThisLife Jun 22, 2026
6780cee
Merge pull request #51072 from NousResearch/bb/desktop-computer-use
OutThisLife Jun 22, 2026
760fd95
Merge pull request #51078 from NousResearch/bb/fix-vision-capture
OutThisLife Jun 22, 2026
116331d
Merge pull request #51094 from NousResearch/bb/desktop-thread-timeline
OutThisLife Jun 22, 2026
833710d
Merge remote-tracking branch 'origin/main' into pr-50994
OutThisLife Jun 22, 2026
672ea1f
Merge pull request #50994 from NousResearch/hermes/hermes-9fb04abd
OutThisLife Jun 23, 2026
ba9e3a4
feat(memory): Honcho OAuth connect — desktop and CLI flows + token re…
erosika Jun 23, 2026
cb17a9e
fix(desktop): stop auto-opening tool previews
OutThisLife Jun 23, 2026
d0af7fc
feat(desktop): detect tool previews into composer status stack
OutThisLife Jun 23, 2026
48a8f84
fix(desktop): toggle preview rail and open in browser
OutThisLife Jun 23, 2026
7daa6d8
style(desktop): soften inline code and expanded tool chrome
OutThisLife Jun 23, 2026
2a10b83
Merge pull request #51103 from NousResearch/bb/desktop-tool-preview-c…
OutThisLife Jun 23, 2026
bb7ff7d
revert(cron): return cron job storage to per-profile (reverts #32117 …
teknium1 Jun 23, 2026
af7b7f6
feat(agent): expose coding-context project facts as structured data +…
OutThisLife Jun 23, 2026
211ba9c
feat(agent): one-shot LLM helper + llm.oneshot gateway RPC (#51261)
OutThisLife Jun 23, 2026
45bc4fb
feat(relay): declare relevance policy to the connector + document the…
benbarclay Jun 23, 2026
2196584
fix(slack): transcribe in-app voice messages (audio/mp4) instead of f…
benbarclay Jun 23, 2026
5ecf3bf
fix(slack): report ext-matched audio mimetype for rerouted voice clips
kshitijk4poor Jun 23, 2026
351afd3
docs(computer-use): document Windows UIPI elevated-window limitation …
teknium1 Jun 23, 2026
45540cf
ci: run only the lanes a PR affects (python/frontend/site)
OutThisLife Jun 19, 2026
2977e74
ci: build Docker on main + release only, never on PRs
OutThisLife Jun 19, 2026
56b4ef7
ci: make dependency installs resilient to transient flakes
OutThisLife Jun 19, 2026
05c896c
ci: refactor paths & clones
ethernet8023 Jun 23, 2026
c820eb6
ci: remove unused windows installer job
ethernet8023 Jun 23, 2026
a0471e2
fix(ci): only run supplychain checks in pr
ethernet8023 Jun 23, 2026
9fd2b2c
fix(desktop): replace native title tooltips with styled Tip component
wnuuee1 Jun 23, 2026
0089bd8
fix(ci): classify should default to no MCP
ethernet8023 Jun 23, 2026
97888fe
fix(install): drop system-browser fallback + auto-repair stale snap o…
xxxigm Jun 22, 2026
f32be44
test(install): assert no system-browser auto-detect + snap override r…
xxxigm Jun 22, 2026
6cc07b6
feat(discord): render reasoning as -# subtext via display.reasoning_s…
teknium1 Jun 23, 2026
70d28b6
feat(cli): track background subagents in the status bar (#51441)
teknium1 Jun 23, 2026
da80ac0
feat(slack): add --no-assistant flag to manifest generation
victor-kyriazakos Jun 23, 2026
72bfc48
feat(tui): track background subagents in the status bar (#51485)
teknium1 Jun 23, 2026
221cd60
feat: add reasoning_effort support to ollama-cloud provider
s010mn May 20, 2026
64131bf
chore: add s010mn to AUTHOR_MAP for PR #29221 salvage
teknium1 Jun 23, 2026
23c4737
fix(mcp): skip killpg when child shares gateway's process group (#47134)
kyssta-exe Jun 16, 2026
0205085
fix(tui): preserve live session identity across compression (#49041)
konsisumer Jun 19, 2026
e155ca2
Merge pull request #51507 from NousResearch/salvage/47134-mcp-killpg-…
kshitijk4poor Jun 23, 2026
aaa2e2c
Merge pull request #51509 from NousResearch/salvage/49041-compression…
kshitijk4poor Jun 23, 2026
4b7f382
fix(telegram): wire platform_httpx_limits into general-pool HTTPXRequ…
kshitijk4poor Jun 23, 2026
190b01c
fix(agent): persist tool calls before turn-end flush
konsisumer Jun 20, 2026
e32ebc6
feat(skills): /learn — distill a reusable skill from anything you des…
teknium1 Jun 23, 2026
9e924f7
Merge pull request #51539 from NousResearch/salvage/49045-toolcall-pe…
kshitijk4poor Jun 23, 2026
74265c8
Merge pull request #51541 from NousResearch/salvage/31599-telegram-cl…
kshitijk4poor Jun 23, 2026
292a456
fix(agent): handle concurrent tool submit shutdown
helix4u Jun 23, 2026
0c79992
fix(gateway): preserve _session_tasks on guard mismatch to enable sta…
Jun 23, 2026
5511fcf
chore(release): map manusjs email to manus-use GitHub login
kshitijk4poor Jun 23, 2026
b56aafc
Merge pull request #51554 from kshitijk4poor/chore/authormap-manusjs
kshitijk4poor Jun 23, 2026
89538d4
Merge pull request #51553 from NousResearch/salvage/48300-stale-sessi…
kshitijk4poor Jun 23, 2026
807bdc1
fix(gateway): prevent double dispatch of Discord messages via thread-…
Jun 23, 2026
0ba1dfe
fix(gateway): refuse model switch on stale checkout to avoid env_floa…
fyzanshaik Jun 23, 2026
433db17
fix(windows): harden gateway scheduled task (#45610)
lEWFkRAD Jun 23, 2026
40fddc9
feat(relay): Phase 5 §5.3 going-idle / buffered-flip primitive (gatew…
benbarclay Jun 23, 2026
e495b33
Merge remote-tracking branch 'origin/main' into bb/pets-merge
OutThisLife Jun 24, 2026
6afeea2
harden(pets): host-pin asset downloads + sanitize slug paths
OutThisLife Jun 24, 2026
6ef6794
Merge pull request #46464 from NousResearch/bb/pets
OutThisLife Jun 24, 2026
6e88f7b
feat(relay): Phase 5 Unit C — wake primitive (gateway side) (#51595)
benbarclay Jun 24, 2026
3e50836
fix(update): avoid source-building uv on Termux
sjh9714 Jun 4, 2026
667a9f5
fix(update): reuse an existing PATH uv on Termux before pip
pefontana Jun 18, 2026
4ea3096
chore(release): map jinhyuk9714 to AUTHOR_MAP for attribution check
pefontana Jun 19, 2026
935f2bc
docs(relay): add §3.4 — obligations on a future scale-to-zero behavio…
benbarclay Jun 24, 2026
23683c3
fix(installer): re-resolve Python fallback at venv stage on Windows (…
xxxigm Jun 22, 2026
34bd6a0
test(installer): lock Python-fallback propagation into the venv stage…
xxxigm Jun 22, 2026
06cbc3b
fix(photon): recover degraded upstream stream
helix4u Jun 22, 2026
0952acb
fix(photon): label upstream CatchUpEvents failures
SidUParis Jun 21, 2026
b60260c
chore(release): add SidUParis to AUTHOR_MAP for salvaged PR #50071
teknium1 Jun 23, 2026
7f1c278
fix(photon): intercept console.log so 'stream interrupted' bursts esc…
teknium1 Jun 23, 2026
60d3b8c
fix(docker): restore config backups after failed boot migration
LeonSGP43 Jun 24, 2026
a39283b
test(docker): assert boot migration keeps .env byte-identical across …
teknium1 Jun 24, 2026
8e7e104
fix(cron): tell the user TUI/CLI cron jobs are local-only at create t…
teknium1 Jun 24, 2026
d539cd9
fix(config): write config.yaml as UTF-8 to stop emoji/personality cor…
teknium1 Jun 24, 2026
044996e
fix(gateway): track no-systemd restart runtimes
wgu9 Jun 23, 2026
3d56807
fix(gateway): actively reap no-systemd gateway orphan before restart
teknium1 Jun 24, 2026
c39b2b5
fix(tui): stop a cwd package named utils/proxy/ui from crashing the g…
teknium1 Jun 24, 2026
78e122a
feat(cron): warn when gateway not running on cron create/list (#51696)
teknium1 Jun 24, 2026
d93d0ae
fix(cron): anchor naive schedule timestamps to configured timezone (#…
teknium1 Jun 24, 2026
776f68e
fix(gateway): exit 78 (EX_CONFIG) on fatal startup errors, s6 finish …
francescomucio Jun 23, 2026
366c2a3
fix(gateway): propagate fatal-config exit code through start_gateway …
teknium1 Jun 24, 2026
fa2f0bf
chore(release): add francescomucio to AUTHOR_MAP for salvaged PR #51357
teknium1 Jun 24, 2026
31bced1
fix(profiles): detect a separate-process gateway in profile status
benbarclay Jun 24, 2026
0d4cecb
fix(cron): avoid provider package shadowing core cron
uperLu Jun 22, 2026
901165b
fix(cron): complete plugins.cron_providers rename in 2 missed test files
teknium1 Jun 24, 2026
050bd01
fix(dashboard): serve uvicorn on SelectorEventLoop on Windows (#50641…
teknium1 Jun 24, 2026
f504aec
fix(profiles): clone auth.json so OAuth credentials carry to cloned p…
teknium1 Jun 24, 2026
281a439
fix(desktop): guard composer mutations when the composer core isn't b…
teknium1 Jun 24, 2026
dbe14ce
feat(gateway): configure Telegram command menu priority
thestral123 Jun 24, 2026
d4be583
fix(telegram): raise default command-menu cap to 60 so skills stay vi…
teknium1 Jun 24, 2026
3dfbc0a
chore(release): map thestral123 author email for PR #42021 salvage
teknium1 Jun 24, 2026
284d06c
fix(delegation): use target_model for bedrock api_mode routing (#49095)
kyssta-exe Jun 19, 2026
53f8386
test(delegation): regression for bedrock Claude target_model api_mode…
teknium1 Jun 24, 2026
81d2dc5
fix(agent): close tool-call sequence on interrupt to prevent role alt…
kyssta-exe Jun 19, 2026
0957d77
test(agent): cover interrupt tool-tail alternation close (#48879)
teknium1 Jun 24, 2026
7ff48a6
fix(discord): check pairing store for component button auth
liuhao1024 Jun 22, 2026
0ef86fe
docs(sessions): clarify sessions.json is the gateway routing index, n…
teknium1 Jun 24, 2026
4aa7933
fix(matrix): use member_count as DM signal for named DM rooms
justemu Jun 24, 2026
be78fbd
Revert "fix(profiles): clone auth.json so OAuth credentials carry to …
teknium1 Jun 24, 2026
2ee6449
fix(anthropic): use platform.claude.com for OAuth token exchange
yusekiotacode Jun 18, 2026
ba50787
test(anthropic-oauth): cover login token-endpoint host + fallback
teknium1 Jun 24, 2026
47fccc0
refactor(dashboard): remove the dead tools box from the chat sidebar …
teknium1 Jun 24, 2026
73a20a6
fix(telegram): clip mid-stream overflow instead of splitting (#48648)
Tranquil-Flow Jun 21, 2026
abc3662
fix(gateway): detect launchd in /restart service-manager probe (#43475)
chazmaniandinkle Jun 11, 2026
98224ce
chore: add chazmaniandinkle to AUTHOR_MAP for PR #43888 salvage
teknium1 Jun 24, 2026
a911bcd
docs: stop recommending pip install; curl installer is the only suppo…
teknium1 Jun 24, 2026
3c75e11
fix(browser): validate agent-browser is runnable, not just present (#…
teknium1 Jun 24, 2026
c93b9f9
feat(relay): terminal 4401 (opt-out) → clean "Relay disabled" state
benbarclay Jun 24, 2026
8446c15
docs(chronos): pin hop-1 auth to the hosted-agent bootstrap token
benbarclay Jun 24, 2026
33926eb
fix(cli): honor non-interactive context in prompt_yes_no
xxxigm Jun 24, 2026
89540d5
test(cli): cover non-interactive prompt_yes_no fallback
xxxigm Jun 24, 2026
66a0907
fix(desktop): keep configured onboarding state on fallback runtime pr…
infinitycrew39 Jun 23, 2026
7243111
test(desktop): cover fallback timeout onboarding downgrade regression
infinitycrew39 Jun 23, 2026
d398076
fix(desktop): show non-blocking notification on fallback runtime probe
kshitijk4poor Jun 24, 2026
a4a74ca
fix(desktop): use notify() with stable id for fallback notification
kshitijk4poor Jun 24, 2026
f0c5d81
fix(gateway): offload handoff watcher SessionDB polling off the event…
r266-tech Jun 24, 2026
721cf54
fix(gateway): offload /model provider-listing off the event loop (#41…
liuhao1024 Jun 24, 2026
ab9134b
feat(openviking): add full recall prefetch policy
kshitijk4poor Jun 24, 2026
4f521a5
Merge pull request #51898 from kshitijk4poor/salvage/openviking-recal…
kshitijk4poor Jun 24, 2026
7634488
Merge pull request #51889 from NousResearch/salvage/41289-model-cmd-a…
kshitijk4poor Jun 24, 2026
d68a133
Merge pull request #51890 from NousResearch/salvage/40695-handoff-wat…
kshitijk4poor Jun 24, 2026
6879d77
fix(gateway): consume was_auto_reset so /model survives session auto-…
x7peeps Jun 22, 2026
ae20c3f
Merge pull request #51025 from NousResearch/salvage/cron-autoreset-ov…
kshitijk4poor Jun 24, 2026
1a174df
fix(models): gate openai-codex/xai-oauth soft-accept to family-shaped…
kshitijk4poor Jun 24, 2026
2187fd8
Merge pull request #51027 from NousResearch/salvage/typed-model-routing
kshitijk4poor Jun 24, 2026
b85c460
fix(tui): targeted save_config_value for model persistence (#48305)
kyssta-exe Jun 24, 2026
1a435a6
fix(model-switch): prevent custom-provider misattribution in model pi…
Elshayib Jun 24, 2026
fce2af7
chore(release): add Elshayib to AUTHOR_MAP (PR #48351)
kshitijk4poor Jun 24, 2026
f477f89
Merge pull request #51043 from NousResearch/salvage/tui-config-destru…
kshitijk4poor Jun 24, 2026
4568ffa
fix: skip mountinfo container check on WSL (Docker Desktop false posi…
luxles Jun 24, 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
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@
# Get your token at: https://huggingface.co/settings/tokens
# Required permission: "Make calls to Inference Providers"
# HF_TOKEN=
# HF_BASE_URL=https://router.huggingface.co/v1 # Override default base URL
# OPENCODE_GO_BASE_URL=https://opencode.ai/zen/go/v1 # Override default base URL

# =============================================================================
Expand Down Expand Up @@ -411,6 +412,9 @@ IMAGE_TOOLS_DEBUG=false
# Groq API key (free tier — used for Whisper STT in voice mode)
# GROQ_API_KEY=

# ElevenLabs API key (cloud STT/TTS — Scribe transcription)
# ELEVENLABS_API_KEY=

# =============================================================================
# STT PROVIDER SELECTION
# =============================================================================
Expand Down
62 changes: 62 additions & 0 deletions .github/actions/detect-changes/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Detect affected areas
description: >-
Classify a PR's changed files into CI work lanes (python, frontend, site,
scan, deps, mcp_catalog) so the orchestrator can conditionally call only
the sub-workflows a PR can affect. Outputs are always "true" on push/dispatch
events and fail open (everything "true") when the diff cannot be computed.

outputs:
python:
description: Run Python tests / ruff / ty / windows-footguns.
value: ${{ steps.classify.outputs.python }}
frontend:
description: Run the TypeScript typecheck matrix + desktop build.
value: ${{ steps.classify.outputs.frontend }}
docker_meta:
description: Docker setup and meta files have changed.
value: ${{ steps.classify.outputs.docker_meta }}
site:
description: Build the Docusaurus docs site.
value: ${{ steps.classify.outputs.site }}
scan:
description: Run the supply-chain critical-pattern scanner.
value: ${{ steps.classify.outputs.scan }}
deps:
description: Check pyproject.toml dependency upper bounds.
value: ${{ steps.classify.outputs.deps }}
mcp_catalog:
description: Require MCP catalog security review label.
value: ${{ steps.classify.outputs.mcp_catalog }}

runs:
using: composite
steps:
- name: Classify changed files
id: classify
shell: bash
env:
GH_TOKEN: ${{ github.token }}
REPO: ${{ github.repository }}
EVENT_NAME: ${{ github.event_name }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
set -euo pipefail

# Only pull_request events are gated. Other events (push, release,
# dispatch) leave CHANGED empty, so the classifier fails open and every
# lane runs. Post-merge / on-demand validation is never weakened.
if [ "$EVENT_NAME" = "pull_request" ]; then
# Use the compare endpoint with the pinned base/head SHAs from the
# event payload instead of the "current PR files" endpoint. The SHAs
# are frozen at trigger time, so the file list is deterministic even
# if the PR receives a new push between trigger and detect.
CHANGED="$(gh api \
--paginate \
"repos/${REPO}/compare/${BASE_SHA}...${HEAD_SHA}" \
--jq '.files[].filename' || true)"
fi

echo "Changed files:"
printf '%s\n' "${CHANGED:-(none)}"
printf '%s\n' "${CHANGED:-}" | python3 scripts/ci/classify_changes.py
50 changes: 50 additions & 0 deletions .github/actions/retry/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Retry a flaky command
description: >-
Run a shell command, retrying on non-zero exit. For dependency installs
(npm ci, uv sync) whose only failures are transient network/toolchain
flakes — a node-gyp header fetch, a registry blip — so CI self-heals
instead of needing a manual re-run.

inputs:
command:
description: Shell command to run (and retry).
required: true
attempts:
description: Max attempts before giving up.
default: "3"
delay:
description: Seconds to wait between attempts.
default: "10"
working-directory:
description: Directory to run in.
default: "."

runs:
using: composite
steps:
- shell: bash
working-directory: ${{ inputs.working-directory }}
# command goes through env, never interpolated into the script body, so
# a command with quotes/specials can't break or inject into the runner.
env:
_CMD: ${{ inputs.command }}
_ATTEMPTS: ${{ inputs.attempts }}
_DELAY: ${{ inputs.delay }}
run: |
set -uo pipefail
n=0
while :; do
n=$((n + 1))
echo "::group::attempt $n/$_ATTEMPTS: $_CMD"
if bash -c "$_CMD"; then
echo "::endgroup::"
exit 0
fi
echo "::endgroup::"
if [ "$n" -ge "$_ATTEMPTS" ]; then
echo "::error::failed after $n attempts: $_CMD"
exit 1
fi
echo "::warning::attempt $n failed; retrying in ${_DELAY}s: $_CMD"
sleep "$_DELAY"
done
100 changes: 0 additions & 100 deletions .github/workflows/build-windows-installer.yml

This file was deleted.

146 changes: 146 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
name: CI

# Orchestrator workflow. Runs ``detect-changes`` once, then conditionally
# calls the sub-workflows that a PR can actually affect. A final
# ``all-checks-pass`` gate job aggregates results so branch protection only
# needs to require a single check.
#
# Sub-workflows are triggered via ``workflow_call`` and keep their own job
# definitions, matrices, and concurrency settings. They no longer have
# ``push:`` / ``pull_request:`` triggers of their own — everything flows
# through this file.

on:
pull_request:
branches: [main]
push:
branches: [main]

permissions:
contents: read
pull-requests: write # needed by lint (PR comment) + supply-chain (PR comment)
actions: read # needed by osv-scanner (SARIF upload)
security-events: write # needed by osv-scanner (SARIF upload)

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
# ─────────────────────────────────────────────────────────────────────
# detect: run the classifier once. Every downstream job reads its outputs
# to decide whether to run. On push/dispatch the classifier fails open
# (all lanes true) so post-merge validation is never weakened.
# ─────────────────────────────────────────────────────────────────────
detect:
runs-on: ubuntu-latest
outputs:
python: ${{ steps.classify.outputs.python }}
frontend: ${{ steps.classify.outputs.frontend }}
site: ${{ steps.classify.outputs.site }}
scan: ${{ steps.classify.outputs.scan }}
deps: ${{ steps.classify.outputs.deps }}
docker_meta: ${{ steps.classify.outputs.docker_meta }}
mcp_catalog: ${{ steps.classify.outputs.mcp_catalog }}
event_name: ${{ github.event_name }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Detect affected areas
id: classify
uses: ./.github/actions/detect-changes

# ─────────────────────────────────────────────────────────────────────
# Lane-gated sub-workflows. Each runs in parallel after detect finishes.
# Skipped workflows (if condition is false) don't spin up runners.
# ─────────────────────────────────────────────────────────────────────
tests:
needs: detect
if: needs.detect.outputs.python == 'true'
uses: ./.github/workflows/tests.yml

lint:
needs: detect
if: needs.detect.outputs.python == 'true'
uses: ./.github/workflows/lint.yml
with:
event_name: ${{ needs.detect.outputs.event_name }}

typecheck:
needs: detect
if: needs.detect.outputs.frontend == 'true'
uses: ./.github/workflows/typecheck.yml

docs-site:
needs: detect
if: needs.detect.outputs.site == 'true'
uses: ./.github/workflows/docs-site-checks.yml

history-check:
needs: detect
if: needs.detect.outputs.event_name == 'pull_request'
uses: ./.github/workflows/history-check.yml

contributor-check:
needs: detect
if: needs.detect.outputs.python == 'true'
uses: ./.github/workflows/contributor-check.yml

uv-lockfile:
needs: detect
uses: ./.github/workflows/uv-lockfile-check.yml

docker-lint:
needs: detect
if: needs.detect.outputs.docker_meta == 'true'
uses: ./.github/workflows/docker-lint.yml

supply-chain:
needs: detect
if: needs.detect.outputs.event_name == 'pull_request' && (needs.detect.outputs.scan == 'true' || needs.detect.outputs.deps == 'true' || needs.detect.outputs.mcp_catalog == 'true')
uses: ./.github/workflows/supply-chain-audit.yml
with:
event_name: ${{ needs.detect.outputs.event_name }}
scan: ${{ needs.detect.outputs.scan == 'true' }}
deps: ${{ needs.detect.outputs.deps == 'true' }}
mcp_catalog: ${{ needs.detect.outputs.mcp_catalog == 'true' }}

osv-scanner:
needs: detect
uses: ./.github/workflows/osv-scanner.yml

# ─────────────────────────────────────────────────────────────────────
# Gate: runs after everything. ``if: always()`` ensures it reports a
# status even when some deps were skipped. Only actual ``failure``
# results cause it to fail; ``skipped`` is treated as success.
#
# Branch protection should require ONLY this check.
# ─────────────────────────────────────────────────────────────────────
all-checks-pass:
name: All required checks pass
needs:
- tests
- lint
- typecheck
- docs-site
- history-check
- contributor-check
- uv-lockfile
- docker-lint
- supply-chain
- osv-scanner
if: always()
runs-on: ubuntu-latest
steps:
- name: Evaluate job results
env:
RESULTS: ${{ toJSON(needs.*.result) }}
run: |
echo "$RESULTS" | python3 -c "
import json, sys
results = json.load(sys.stdin)
failed = [r for r in results if r == 'failure']
if failed:
print(f'::error::{len(failed)} job(s) failed')
sys.exit(1)
print('All checks passed (or were skipped)')
"
Loading