11 Commits

Author SHA1 Message Date
KoNit-K 9af62e7ef0 fix(dashboard): skip unreadable plugin manifests 2026-09-15 18:48:59 -07:00
Teknium 41b4555ed9 feat(plugins): catalog is the sole discovery system — re-port onto main's layout
- hermes_cli/plugins_cmd_catalog.py: new sibling owning resolution, the
  .hermes-catalog.json provenance sidecar, search/info/validate, re-pin on
  update, and the dashboard/TUI payload builders. plugins_cmd.py only
  gains the hooks (cmd_install catalog branch, cmd_update / dashboard
  update re-pin, dashboard_install_plugin catalog_name + kill list,
  dispatch entries); the community index (plugin_index.py) is gone.
- hermes_cli/plugin_catalog.py: catalog_dir parameter replaces the
  test-only HERMES_PLUGIN_CATALOG_DIR env var; live refresh reads ONE
  published document (/docs/api/plugin-catalog.json, 6h cache, in-tree
  fallback) instead of the unauthenticated GitHub contents API (60 req/h,
  1 request per entry); in-tree and live removals are unioned so a stale
  cache can never un-block.
- Catalog route lives in web_routers/dashboard_ui.py (the facade is off
  limits); _plugin_runtime_status shared from web_server_dashboard.py;
  hub rows carry removed_reason. TUI plugins.manage gains catalog_name
  install, catalog row fields and an update action.
- plugin_validate: the probe context honours ctx.get_config defaults
  (real plugins do int(ctx.get_config("timeout", 180)) in register()).
- Installed-state merge matches through the sidecar's catalog_name
  first — catalog names rarely equal manifest names.
- extract-plugins.py emits plugin-catalog.json; deploy-site triggers on
  plugin-catalog/** so entry merges republish it.
2026-09-09 04:38:01 -07:00
杨瑾 1538c8bd94 refactor(desktop): use dashboard late-binding seam 2026-09-05 16:30:35 +05:30
thinkingsheep 1866921d33 fix(desktop): serve the current SSH session token 2026-09-05 16:30:35 +05:30
Teknium 5f1feb5344 simplify(compat): web_server — drop 221 re-exports (config/status/shutil/run_in_threadpool, lifecycle, 13 web_server_<concern> blocks, 47 route-handler legacy re-exports); web_deps.late()/LateState() take an owning-module arg; concern modules import each other directly (62 lazy sites) 2026-09-03 14:21:32 -07:00
Teknium 7a33369e81 simplify(compat): interrupt — drop _ThreadAwareEventProxy/_interrupt_event legacy alias, repoint 2 test files
No runtime consumer read the proxy (terminal_tool/environments call is_interrupted()/set_interrupt()
directly); its only users were tests patching tools.interrupt._interrupt_event, which had no effect on
the code under test. tools/terminal_tool.py's own re-export of the name is owned by another worker.
2026-09-03 14:00:59 -07:00
Teknium c93ace77c2 simplify(compat): config/runtime_provider/plugins/commands/secrets_cli/kanban — drop 96 re-exports (incl. PEP 562 facades) + 3 aliases (get_pre_tool_call_directive/_block_message, get_telegram_handler_factories), repoint 56 callers + 50 test files 2026-09-03 14:00:17 -07:00
Teknium e83816a4d1 review-fix(comments): restore lost #NNNN rationale comments across non-test source (mechanical sweep, condensed, code unchanged)
For each issue anchor present in BASE 63279301bc non-test .py and absent on HEAD, the BASE comment/docstring block was re-attached at the HEAD location of the code it explained (matched by the distinctive code line / enclosing def). Sentences already covered by an existing HEAD comment were deduped; the issue number always survives. Insert-only: no code lines changed.
2026-09-03 09:44:26 -07:00
Teknium 92f5453213 refactor(web_server_config): _select() builder for schema overrides; small defensive-layer collapses
CONFIG_SCHEMA / _SCHEMA_OVERRIDES JSON md5-identical to base (key order kept).
tr_hug layout pass on all three modules (ast.dump-verified).
2026-09-02 21:23:32 -07:00
Teknium 7c113cd426 refactor(web_server): simplify config/dashboard/memory helper modules
- web_server_config: _apply_model_assignment_sync (224 LOC) split into
  main/aux phase helpers (_resolve_assignment_credentials,
  _apply_nous_gateway_defaults, _register_custom_endpoint, _stale_aux_pins,
  _cron_model_impact); _infer_type -> table; schema option lookups unified
  via _schema_select_options; docstrings compacted (every WHY kept).
- web_server_dashboard: mount_spa asset-rewrite loops, shared no-store/
  headless constants; theme normaliser uses _dict_field/_nonempty_str/
  _css_ident predicates; plugin discovery split into search-dirs + entry
  builder; hub auth hint extracted; API-mount gate -> _plugin_api_mount_skip_reason.
- web_server_memory: status ladder -> _memory_provider_status, kind
  inference -> _schema_field_kind, small defensive-layer collapses.
Golden corpus (48 fixtures, old vs new) identical; route table identical.
2026-09-02 21:11:37 -07:00
Teknium 2497ec5126 refactor(web_server): extract dashboard SPA/theme/plugin-hub cluster to web_server_dashboard 2026-09-02 15:33:48 -07:00