hermes-agent/hermes_cli
Teknium 580d924097 perf(desktop): make session-id search SQL-bounded, not O(n)
search_sessions_by_id previously fetched up to 10k sessions via
list_sessions_rich and filtered them in Python — O(n) per keystroke.
Push the id match into SQL instead.

- list_sessions_rich gains an optional id_query param: a case-insensitive
  LIKE pushed into the outer WHERE, matched against each surfaced row's id
  AND every id in its forward compression chain (via the existing chain
  CTE). Searching a compression root id or a tip id both resolve to the
  same projected conversation. LIKE wildcards in the needle are escaped.
- search_sessions_by_id now fetches only matching rows (limit*4) and ranks
  exact > prefix > substring in Python over that small set.
- web_server /api/sessions/search: route ID matches and content matches
  through one lineage-keyed dedup helper so an id-hit and a content-hit on
  the same conversation collapse to a single result (the contributor's
  version keyed ID hits by raw sid and content hits by root, which could
  double-list a compression tip).
- command-center haystack also matches _lineage_root_id for parity.

E2E verified against a real DB: exact match over 3000+ sessions
materializes 1 row in Python (was ~3000), 5ms; root-id resolves to tip;
LIKE-wildcard escaping holds.

Follow-up to @0xharryriddle's feat(desktop): search sessions by id.
2026-06-04 07:49:34 -07:00
..
dashboard_auth fix(dashboard-auth): don't abort verify chain on one provider's ProviderError 2026-06-04 03:23:45 -07:00
proxy
…
__init__.py
…
_parser.py feat(cli): configurable default interface (cli vs tui) 2026-06-02 20:49:44 -05:00
_subprocess_compat.py
…
auth.py fix(cli): honor global-root active_provider fallback for named profiles 2026-06-04 07:08:30 -07:00
auth_commands.py fix(auth): set active_provider after hermes auth add qwen-oauth 2026-06-04 05:58:33 -07:00
azure_detect.py
…
backup.py
…
banner.py fix(mcp): banner shows 'disabled' not 'failed' for enabled:false servers (#38204) 2026-06-03 05:41:13 -07:00
browser_connect.py
…
build_info.py
…
bundles.py
…
callbacks.py
…
checkpoints.py
…
claw.py fix: batch of small robustness/correctness fixes from @kyssta-exe 2026-06-01 19:51:03 -07:00
cli_output.py
…
clipboard.py
…
codex_models.py
…
codex_runtime_plugin_migration.py
…
codex_runtime_switch.py
…
colors.py
…
commands.py feat(tui): single /model command + unified Sessions overlay (#37112) 2026-06-01 22:28:36 -04:00
completion.py fix: batch of small robustness/correctness fixes from @kyssta-exe 2026-06-01 19:51:03 -07:00
config.py feat(dashboard-auth): add BasicAuthProvider username/password plugin 2026-06-04 01:02:25 -07:00
container_boot.py
…
copilot_auth.py
…
cron.py
…
curator.py
…
curses_ui.py feat(cli): ranked fuzzy search in the curses model picker 2026-06-01 16:58:58 -07:00
dashboard_register.py fix(dashboard): honor --portal-url / HERMES_DASHBOARD_PORTAL_URL override in register 2026-06-04 00:17:57 -07:00
debug.py feat(dashboard): add Debug Share to the System page (#38600) 2026-06-03 19:37:04 -07:00
default_soul.py
…
dep_ensure.py
…
dingtalk_auth.py
…
doctor.py fix(doctor): detect + repair stale HERMES_MAX_ITERATIONS .env ghost shadowing config.yaml (#38222) 2026-06-03 06:38:40 -07:00
dump.py
…
env_loader.py
…
fallback_cmd.py
…
fallback_config.py
…
gateway.py fix(cli): launchd KeepAlive unconditional restart (#37388) 2026-06-04 05:38:12 -07:00
gateway_windows.py fix(gateway-windows): anchor detached/startup cwd at HERMES_HOME 2026-06-03 19:37:29 -07:00
goals.py
…
hooks.py
…
inventory.py feat(desktop): inline model picker in the status bar 2026-06-02 19:09:41 -05:00
kanban.py fix(kanban): isolate board override per concurrent call 2026-06-04 07:39:53 -07:00
kanban_db.py fix(kanban): isolate board override per concurrent call 2026-06-04 07:39:53 -07:00
kanban_decompose.py
…
kanban_diagnostics.py
…
kanban_specify.py
…
kanban_swarm.py
…
logs.py feat(debug): include desktop.log in hermes debug share / /debug / hermes logs (#38203) 2026-06-03 05:41:35 -07:00
main.py fix(desktop): purge electron cache unconditionally, not via stdlib zipfile gate 2026-06-04 07:17:33 -07:00
managed_uv.py fix(update): harden venv rebuild + verify core deps after install 2026-06-04 06:05:41 -07:00
mcp_catalog.py
…
mcp_config.py fix(mcp): resolve ${ENV} in discovery probe so header auth works (#38571) 2026-06-03 17:49:39 -07:00
mcp_picker.py
…
mcp_startup.py
…
memory_setup.py fix(memory): fall back to pip when uv is unavailable (salvage #5954) (#38668) 2026-06-04 14:03:02 +10:00
migrate.py
…
model_catalog.py
…
model_normalize.py
…
model_switch.py fix(model-picker): stop routing OpenAI selection to OpenRouter (#37175) 2026-06-01 20:27:41 -07:00
models.py feat(desktop): inline model picker in the status bar 2026-06-02 19:09:41 -05:00
nous_account.py
…
nous_subscription.py
…
oneshot.py
…
pairing.py
…
partial_compress.py
…
platforms.py
…
plugins.py feat(observability): observer-grade telemetry hooks + NeMo-Relay plugin 2026-06-03 06:36:46 -07:00
plugins_cmd.py
…
portal_cli.py feat(cli): make `hermes portal` run the full quick-setup Nous flow (model picker) 2026-06-04 02:20:31 +05:30
profile_describer.py
…
profile_distribution.py
…
profiles.py
…
prompt_size.py
…
providers.py fix(model-picker): OpenAI shows curated models; OpenRouter no longer phantom-shows (#37404) 2026-06-02 06:31:37 -07:00
psutil_android.py
…
pt_input_extras.py
…
pty_bridge.py fix(dashboard): clamp PTY resize dimensions for WSL2 winsize garbage (#38200) 2026-06-03 09:00:16 -07:00
relaunch.py
…
runtime_provider.py
…
secret_prompt.py
…
secrets_cli.py
…
security_advisories.py
…
security_audit.py
…
send_cmd.py
…
service_manager.py
…
session_recap.py
…
setup.py fix(cli): harden `hermes portal` SystemExit handling + finish model-pick doc sweep 2026-06-04 02:33:33 +05:30
skills_config.py
…
skills_hub.py feat(skills): fix browse cap, add source links + copy buttons + category cleanup (#37143) 2026-06-01 19:52:28 -07:00
skin_engine.py
…
slack_cli.py
…
status.py feat(cli): make `hermes portal` the human-readable Portal onboarding alias 2026-06-04 01:19:28 +05:30
stdio.py
…
timeouts.py
…
tips.py feat(dashboard): always enable embedded chat; remove dashboard --tui flag 2026-06-04 03:03:35 -07:00
tools_config.py fix(tools): stop hermes tools reporting kanban as removed (#38918) 2026-06-04 03:31:43 -07:00
uninstall.py fix(installer): symlink bundled node/npm into command bin dir for FHS root installs 2026-06-04 02:31:49 -07:00
voice.py
…
web_server.py perf(desktop): make session-id search SQL-bounded, not O(n) 2026-06-04 07:49:34 -07:00
webhook.py
…
xai_retirement.py
…