hermes-agent/hermes_cli
alt-glitch 9d05f3721d refactor(tui): fetch tree-sitter grammars at runtime instead of vendoring
The OpenTUI engine vendored 10 tree-sitter grammars (.wasm + .scm) under
ui-opentui/parsers/ — ~37k checked-in binary lines, the single biggest
addition in the engine diff. opencode (the production reference) vendors
none: it declares grammars as remote URLs and lets OpenTUI fetch + cache
them. OpenTUI supports this natively via TreeSitterClient's dataPath cache.

Migrate to that model:
- parsers.manifest.json (now under src/boundary/) becomes the URL source of
  truth: each grammar is { filetype, aliases, wasm: <release URL>,
  highlights: <.scm URL> }. Grammar versions stay pinned (same release tags);
  .scm sources follow opencode's per-language choices (parser-repo queries
  for python/html where nvim-treesitter's are parser-incompatible).
- parsers.ts: registerVendoredParsers -> registerRemoteParsers. It points the
  global tree-sitter client's cache at HERMES_TUI_PARSER_CACHE via setDataPath
  BEFORE the client initializes, then addDefaultParsers() with the URL configs.
  Registration does zero network; the fetch is lazy on first use of a language
  and degrades to plain text (never throws) when GitHub is unreachable.
- hermes_cli/main.py sets HERMES_TUI_PARSER_CACHE to
  ~/.hermes/cache/opentui-parsers/ (profile-aware via get_hermes_home).
- git rm -r ui-opentui/parsers/ and drop scripts/update-parsers.mjs.
- parsers.test.tsx asserts URL configs are well-formed + cache-dir behavior
  instead of vendored-file existence.

Verified end-to-end on Node 26.3: type-check + lint clean, full ui-opentui
suite (821 tests) green, and a built smoke proves first-use fetch -> cache ->
10 real highlights, cache-hit on rerun, and graceful plain-text degrade when
the grammar URLs are unreachable.
2026-06-16 19:12:21 +05:30
..
dashboard_auth tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
proxy
…
subcommands fix(gateway): block shell gateway run when a service supervises the profile 2026-06-14 08:42:06 -07:00
__init__.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
_parser.py Merge remote-tracking branch 'origin/main' into feat/opentui-native-engine 2026-06-15 15:59:30 +05:30
_subprocess_compat.py fix(windows): retry watcher Popen without breakaway when parent job denies it, plus regression tests for the breakaway bit (#40956) 2026-06-07 01:21:58 -07:00
active_sessions.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
auth.py fix(auth): preserve Codex pool-only rate-limit state 2026-06-16 05:56:11 -07:00
auth_commands.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
azure_detect.py
…
backup.py fix: harden WhatsApp target alias salvage 2026-06-15 05:51:47 -07:00
banner.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
blueprint_cmd.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
browser_connect.py
…
build_info.py
…
bundles.py
…
callbacks.py
…
checkpoints.py
…
claw.py
…
cli_agent_setup_mixin.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
cli_commands_mixin.py feat(delegation): async background subagents via delegate_task(background=true) (#40946) 2026-06-15 13:33:12 -07:00
cli_output.py
…
clipboard.py
…
codex_models.py
…
codex_runtime_plugin_migration.py
…
codex_runtime_switch.py
…
colors.py
…
commands.py fix(slack): route /debug via /hermes to restore Telegram-parity (#47248) 2026-06-16 06:20:01 -07:00
completion.py
…
config.py feat(gateway): rename to tool_progress_grouping, add config/docs/tests 2026-06-16 05:49:24 -07:00
container_boot.py fix(docker): skip gateway reconciliation in dashboard container (autodetect) (#46293) 2026-06-15 20:51:48 +10:00
copilot_auth.py
…
cron.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
curator.py
…
curses_ui.py
…
dashboard_register.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
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): recognize nvidia as vendor-slug-accepting provider 2026-06-15 12:24:46 -07:00
dump.py fix(dump): report effective terminal backend in `hermes debug` 2026-06-15 12:31:23 -07:00
env_loader.py
…
fallback_cmd.py
…
fallback_config.py
…
gateway.py fix(gateway): scope early duplicate guard to pid file 2026-06-14 08:42:06 -07:00
gateway_windows.py fix(gateway,windows): reliability — JOB breakaway + status --deep probes + test-leak fix (#40909) 2026-06-06 19:53:58 -07:00
goals.py
…
gui_uninstall.py feat: uninstall the Chat GUI without removing the agent (CLI + desktop UI) (#40355) 2026-06-06 18:22:38 -07:00
hooks.py
…
inventory.py fix(inventory): deduplicate models between user-defined and aggregator providers 2026-06-15 12:25:41 -07:00
kanban.py fix(kanban): isolate board override per concurrent call 2026-06-04 07:39:53 -07:00
kanban_db.py fix(kanban): pin assigned profile toolsets for workers (#45590) 2026-06-13 05:50:09 -07:00
kanban_decompose.py docs(kanban): clarify decomposer profile roles 2026-06-06 19:29:00 -07:00
kanban_diagnostics.py
…
kanban_specify.py fix: guard int(os.getenv()) casts against malformed env vars (#40598) 2026-06-07 06:14:24 -07:00
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 refactor(tui): fetch tree-sitter grammars at runtime instead of vendoring 2026-06-16 19:12:21 +05:30
managed_uv.py fix(update/windows): don't return _UvResult on Windows (subprocess argv crash) (#39820) 2026-06-05 07:54:08 -05:00
mcp_catalog.py fix(mcp): block exfil-shaped stdio server configs (#46083) 2026-06-14 04:24:14 -07:00
mcp_config.py fix(mcp): block suspicious stdio configs before probe (#46112) 2026-06-14 04:46:54 -07:00
mcp_picker.py
…
mcp_security.py fix(mcp): block exfil-shaped stdio server configs (#46083) 2026-06-14 04:24:14 -07:00
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
middleware.py fix(middleware): single-use next_call guard + deepcopy-safe request copies 2026-06-06 23:07:25 +05:30
migrate.py
…
model_catalog.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
model_cost_guard.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
model_normalize.py fix(gemini): strip native self prefixes before generateContent (#36141) 2026-06-13 13:47:08 -07:00
model_setup_flows.py fix(kimi): surface K2.7 Code in native picker (#46309) 2026-06-14 14:01:03 -07:00
model_switch.py fix(model): show bare custom endpoints in gateway picker (#45597) 2026-06-13 06:05:30 -07:00
models.py fix(kimi): surface K2.7 Code in native picker (#46309) 2026-06-14 14:01:03 -07:00
nous_account.py feat(billing): /credits command — balance + portal top-up handoff (#44776) 2026-06-12 08:51:10 +00:00
nous_subscription.py fix(whatsapp-cloud): review follow-ups for #43921 2026-06-11 07:51:01 -07:00
oneshot.py
…
pairing.py
…
partial_compress.py
…
platforms.py
…
plugins.py fix(desktop): keep composer usable during reconnect (#45488) 2026-06-13 02:36:09 -07:00
plugins_cmd.py fix(plugins): normalize browser-pasted GitHub repo URLs (#33539) 2026-06-13 13:23:59 -07:00
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 fix(dist): stop USER_OWNED_EXCLUDE from filtering nested directories 2026-06-07 21:50:57 -07:00
profiles.py fix(s6): register profile gateways without auto-starting (#46266) 2026-06-15 11:43:23 +10:00
prompt_size.py
…
providers.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
psutil_android.py
…
pt_input_extras.py
…
pty_bridge.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
relaunch.py
…
runtime_provider.py fix(providers): support anthropic proxy v1 endpoints 2026-06-14 02:09:16 -07:00
secret_prompt.py
…
secrets_cli.py fix(secrets): fail early with clear error when bitwarden setup runs without TTY (#40571) 2026-06-06 18:36:40 -07:00
security_advisories.py
…
security_audit.py
…
send_cmd.py fix(send): helpful error when --file gets a binary; document MEDIA: attachments (#45116) 2026-06-12 11:48:06 -07:00
service_manager.py fix(s6): clear stale log lock before startup (#46289) 2026-06-15 14:10:51 +10:00
session_listing.py fix: harden salvaged session and browser improvements 2026-06-15 07:46:34 -07:00
session_recap.py
…
setup.py feat(zai): add GLM-5.2 with verified 1M context window 2026-06-14 13:50:36 -07:00
setup_whatsapp_cloud.py fix(whatsapp-cloud): review follow-ups for #43921 2026-06-11 07:51:01 -07:00
skills_config.py fix(skills): apply global|platform disabled union to all resolution sites 2026-06-14 22:54:54 +05:30
skills_hub.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
skin_engine.py
…
slack_cli.py
…
status.py Merge commit '6110aed9b' into feat/whatsapp-cloud-api 2026-06-10 21:39:22 -04:00
stdio.py
…
suggestions_cmd.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
telegram_managed_bot.py Add CLI Telegram QR onboarding 2026-06-05 03:20:10 -07:00
timeouts.py
…
tips.py fix: make profile subprocess HOME policy explicit 2026-06-14 03:20:21 -07:00
tools_config.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
uninstall.py feat: uninstall the Chat GUI without removing the agent (CLI + desktop UI) (#40355) 2026-06-06 18:22:38 -07:00
voice.py
…
web_server.py fix(desktop): open remote-gateway artifacts via authenticated download (#46895) 2026-06-15 23:50:19 -05:00
webhook.py
…
win_pty_bridge.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
write_approval_commands.py tests: pin ink engine in _make_tui_argv npm-bootstrap tests (post-merge semantic fix) 2026-06-12 10:32:40 +05:30
xai_retirement.py
…