Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
657 commits
Select commit Hold shift + click to select a range
d7737bf
docs(ui-tui): fix file paths, add billing command, update file map
alelpoan Jun 21, 2026
b6f03ab
docs(ui-tui): add billing.step_up.verification event + perfPane.tsx t…
teknium1 Jun 21, 2026
8e4d2fd
docs(plugins): document acting from hooks via ctx.profile_name + disp…
teknium1 Jun 21, 2026
7502d38
fix(windows): prefer cmd npm shim on PATH fallback
helix4u Jun 21, 2026
5b45fb2
fix(security): sanitize kanban markdown html
zapabob Jun 5, 2026
537ad9e
fix(cli): guard missing ui-tui workspace before TUI launch
konsisumer Jun 19, 2026
db097fb
fix(cli): auto-restore a deleted ui-tui workspace from git before TUI…
teknium1 Jun 21, 2026
6902eb3
fix(cli): make ZIP-update directory replace atomic so it can't delete…
teknium1 Jun 21, 2026
09a96ba
fix(gateway): pause Telegram typing before stream finalize
LeonSGP43 Jun 21, 2026
f726908
fix(desktop/windows): stop in-app update from cascading into a backen…
teknium1 Jun 21, 2026
a4b1554
fix(whatsapp): normalize bare phone targets to JIDs before bridge send
sgaofen Jun 21, 2026
ed3d12a
fix(security): fail-closed when WebSocket peer is empty in loopback mode
memosr Jun 5, 2026
99f3072
fix(model-switch): a failed in-place swap must be a no-op, not a dead…
teknium1 Jun 21, 2026
bb77a8b
fix(gateway): respawn unmapped Windows gateways after update (#50090)…
teknium1 Jun 21, 2026
824c9d3
fix(config): alias model.api_base -> model.base_url for custom provid…
teknium1 Jun 21, 2026
a9c8025
fix(approval): honor interrupt in blocking gateway approval wait (#8697)
panghuer023 Jun 21, 2026
4cff036
test(approval): regression for interrupt-unblocks-approval; AUTHOR_MAP
teknium1 Jun 21, 2026
b7f6cb9
fix(email): resolve IMAP/SMTP host from config and validate before co…
devorun Jun 20, 2026
e921c4f
chore(release): map devorun salvage author email
teknium1 Jun 21, 2026
f79e0a7
fix(email): mark missing-config as non-retryable + reject blank env v…
teknium1 Jun 21, 2026
b5b8a4c
fix(gateway): respect adapter decline of fresh-final to prevent doubl…
liuhao1024 Jun 21, 2026
ed96669
fix(security): handle IPv6 scope IDs in URL safety checks to prevent …
sprmn24 May 25, 2026
87ab373
test(url-safety): cover IPv6 scope-ID strip + fail-closed in URL guards
teknium1 Jun 21, 2026
a60abf2
feat(loop-guard): mono-tool spiral detection with escalated interrupt…
Da-Mikey Jun 21, 2026
6f0ecf3
fix(redact): mask all Authorization schemes and x-api-key style headers
devorun Jun 21, 2026
bb59075
Merge pull request #50398 from helix4u/fix/windows-npm-path-fallback
ethernet8023 Jun 21, 2026
c8eb7cf
fix: V-009 security vulnerability
orbisai0security Apr 14, 2026
3a6a43c
fix(V-009): reject path traversal in SessionEntry.from_dict and harde…
orbisai0security Jun 5, 2026
aa2aac6
fix(V-009): reject Windows drive-letter paths in session field valida…
orbisai0security Jun 5, 2026
4d4ba08
refactor(session): simplify traversal guard to a helper + logger, har…
teknium1 Jun 21, 2026
624580e
fix(browser): verify daemon identity before orphan reaper kills a PID…
teknium1 Jun 21, 2026
745c4db
feat(desktop/windows): show update-in-progress feedback before the de…
teknium1 Jun 21, 2026
7785655
fix(desktop): keep the floating composer in-bounds so it can't be los…
OutThisLife Jun 21, 2026
c11ae82
fix(codex): seed app-server sessions with configured cwd
jplew Jun 4, 2026
8fcb813
fix(security): harden smart approval guard against prompt injection
Dusk1e Jun 21, 2026
242ec45
fix(gateway): don't lazy-install SDKs for unconfigured platforms on s…
xxxigm Jun 21, 2026
29176ff
test(gateway): cover no eager platform install on startup sweep
xxxigm Jun 21, 2026
8baa4e9
feat(cli): add native Antigravity OAuth provider
pmos69 May 20, 2026
b7a912e
fix(antigravity): bake in public OAuth client + default project fallback
teknium1 Jun 21, 2026
37c37c9
fix(antigravity): register google-antigravity ProviderProfile + AUTHO…
teknium1 Jun 21, 2026
c768c4b
fix(antigravity): move model flow to model_setup_flows + stop bare-al…
teknium1 Jun 21, 2026
16aeba1
fix(desktop): clamp composer peel-off under cursor
OutThisLife Jun 21, 2026
bef1d3e
fix(desktop): filter undefined entries in AttachmentList to prevent r…
liuhao1024 Jun 21, 2026
84fcbbf
fix(security): quote HERMES_TIMEZONE in remote code execution to prev…
Dusk1e Apr 12, 2026
13ce811
fix: show desktop approval fallback (#46548)
itsflownium Jun 21, 2026
1ec4fcf
Merge pull request #50466 from NousResearch/bb/composer-popout-bounds
OutThisLife Jun 21, 2026
1f6994d
chore(release): add AUTHOR_MAP entry for #45205 salvage (EtherAura)
teknium1 Jun 21, 2026
e5e2583
fix(desktop): relaunch on Linux after in-app update instead of hangin…
EtherAura Jun 21, 2026
84e1d31
refactor(kanban): fold worker/orchestrator skills into injected guida…
teknium1 Jun 22, 2026
e447723
fix(process-registry): re-validate PID identity before killing host p…
valentt Jun 10, 2026
77fdbbf
fix(whatsapp): validate bridge PID identity before killing stale pidf…
valentt Jun 10, 2026
069ab40
fix(whatsapp): only kill LISTENers when freeing the bridge port, neve…
valentt Jun 10, 2026
615a8e6
fix(whatsapp): add missing re import + fix test import path after ada…
teknium1 Jun 21, 2026
0fb3b13
chore: add valentt to AUTHOR_MAP for #43846 salvage
teknium1 Jun 21, 2026
1cefc2a
test(whatsapp): fix port-spares-client test race (listen before annou…
teknium1 Jun 21, 2026
012f40c
fix(status): cross-platform start-time fingerprint via psutil fallback
teknium1 Jun 22, 2026
b6d2ac1
feat(mem0): add self-hosted support via MEM0_HOST / host config
Apr 21, 2026
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
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
c993e6e
feat(evolution): run processing chain every 4h (raise throughput vs b…
Lexus2016 Jun 22, 2026
bb30fce
Merge pull request #461 from Lexus2016/evolution/processing-cadence-4h
Lexus2016 Jun 22, 2026
1b893c1
feat(evolution): generation backlog gate — throttle FEATURES, never BUGS
Lexus2016 Jun 22, 2026
f36b045
fix(backlog-gate): reword note to avoid false 'open(' footgun match
Lexus2016 Jun 22, 2026
9ddfaf9
Merge pull request #462 from Lexus2016/evolution/generation-backlog-gate
Lexus2016 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
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
b9e3dd3
feat: bootstrap evolution GitHub labels during cron registration (#469)
Lexus2016 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
8593a3e
feat: wire cron failure digest into CLI user turn (Closes #433) (#476)
Lexus2016 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
7f86041
fix(evolution): unblock analysis/implementation/integration stages by…
Da-Mikey Jun 23, 2026
351afd3
docs(computer-use): document Windows UIPI elevated-window limitation …
teknium1 Jun 23, 2026
b4c4224
fix(memory): harden TQMemory for client installs — stable project_id,…
Lexus2016 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
9dc973d
chore(actions)(deps): bump actions/checkout from 6.0.2 to 7.0.0 (#471)
dependabot[bot] Jun 23, 2026
05e4d87
chore(actions)(deps): bump azure/login from 2.3.0 to 3.0.0 (#472)
dependabot[bot] Jun 23, 2026
a0471e2
fix(ci): only run supplychain checks in pr
ethernet8023 Jun 23, 2026
ae70125
chore(actions)(deps): bump actions/create-github-app-token (#473)
dependabot[bot] Jun 23, 2026
7cafa44
chore(actions)(deps): bump docker/setup-buildx-action (#474)
dependabot[bot] 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
7f628ef
Merge upstream/main (286 commits) — sync 2026-06-23
Lexus2016 Jun 23, 2026
f0a7df0
fix(sync): CI failures from upstream-merge — test API mismatch + attr…
Lexus2016 Jun 23, 2026
d8aaab8
fix(sync): restore lost fork streak-classification in terminal_tool.p…
Lexus2016 Jun 23, 2026
3e09f1f
Merge pull request #487 from Lexus2016/sync/upstream-2026-06-23
Lexus2016 Jun 23, 2026
93293ac
feat(evolution): cached-digest provider pre-flight for cron stages, m…
Lexus2016 Jun 24, 2026
27896a5
feat(evolution): capability-aware selection — analysis throttles effo…
Lexus2016 Jun 24, 2026
12cbc51
fix(#478): pass api_error to fallback activation for rate-limit/auth …
Lexus2016 Jun 24, 2026
21ba4d3
fix(cron): stable prompt_cache_key so recurring jobs reuse the warm c…
Lexus2016 Jun 24, 2026
14a49d4
Disable thinking mode for cron sessions by default (#508)
Da-Mikey Jun 24, 2026
0ddd04e
feat(honcho): circuit breaker for dialectic queries (#511)
Lexus2016 Jun 24, 2026
3834d41
feat(memory): structured size errors + compact action (Closes #515, C…
Lexus2016 Jun 25, 2026
26f9712
feat(evolution): deterministic effort budget — metric script owns 1.5…
Lexus2016 Jun 25, 2026
28f4f46
fix(provider): structured rate-limit/billing failover diagnostics (Cl…
Lexus2016 Jun 25, 2026
d225115
fix(evolution): register_evolution_cron no longer crashes reconciling…
Lexus2016 Jun 25, 2026
e6c5fdf
feat(evolution): deterministic selection-budget gate — catch illegal/…
Lexus2016 Jun 25, 2026
5739563
feat(evolution): close-validator gate — catch fabricated already-exis…
Lexus2016 Jun 25, 2026
3ee6bdd
test(tui-gateway): de-flake test_session_create_no_race_keeps_worker_…
Lexus2016 Jun 25, 2026
a05e4e1
feat(evolution): deterministic merge-gate — policy + atomic self-merg…
Lexus2016 Jun 25, 2026
59502d3
feat(memory): per-apply_batch memory_char_limit override behind confi…
Lexus2016 Jun 25, 2026
0f38606
feat(aux): health ping at session start (Closes #522) (#542)
Lexus2016 Jun 26, 2026
25a2fff
feat(cron): structured timeout failure summary with category, provide…
Lexus2016 Jun 26, 2026
c56c6c7
test: fix stale percentage-clamp guard broken by effective_limit rena…
Lexus2016 Jun 26, 2026
3a91a89
fix(watchdog): suppress phantom upstream-lag alarm on shallow clones …
Lexus2016 Jun 26, 2026
8f8bb1f
feat(watchdog): edge-trigger pipeline-health alerts to end daily repe…
Lexus2016 Jun 26, 2026
853e01f
feat(watchdog): detect silent-freeze divergence + idempotent [UPSTREA…
Lexus2016 Jun 26, 2026
3677cfe
feat(cron): shrink Hydra orchestrator prompt to avoid API timeouts (#…
Lexus2016 Jun 26, 2026
a975346
feat: save undelivered content to fallback file on platform delivery …
Da-Mikey Jun 26, 2026
29ac896
feat(agent): learn from user corrections — lean Phase 1 (per-user, en…
Lexus2016 Jun 26, 2026
f03fcda
feat: Telegram adapter send/poll circuit breaker
Jun 27, 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