Commit Graph

35032 Commits

Author SHA1 Message Date
teknium1
437116f949 chore(contributors): map catalog submitter email to GitHub login 2026-09-14 21:05:36 -07:00
thanhan-a17
63839f98fc feat(plugin-catalog): add grill-tab community plugin
Tab-to-grill a draft in the Desktop composer: one high-leverage decision per rung with a
recommended answer, then a faithful execution brief placed in the composer for review.
Owner-submitted; no self-updater; empty capability block matches register() at the pin.
2026-09-14 21:05:36 -07:00
Teknium
209c2770d2 Merge pull request #111469 from NousResearch/ci/osv-scan-non-blocking
CI: the advisory OSV scan no longer gates merges
2026-09-14 21:02:24 -07:00
teknium1
2de17e5d40 feat(plugin-catalog): default shelf is Desktop, catch-all is General; categorise today's six entries
Teknium's call: most community submissions are Desktop panes, so an entry
without a category lands on the Desktop shelf; "other" becomes "general" for
plugins that genuinely span areas. Shelf order puts Desktop first. The six
entries merged today (pets-all, newswire, auto-titler, live-voice,
metamask-wallet, web-octen) get explicit categories.
2026-09-14 21:00:29 -07:00
teknium1
55dbd7f6e1 feat(plugin-catalog): shelve the catalog by category (Memory, Desktop, Platforms, …)
The catalog page was one undifferentiated grid filtered only by tier, so a
memory provider sat between two Desktop panes. Entries now carry an optional
``category`` (memory | desktop | platform | web | tools | voice | automation |
models | other, default other) that the loader, the admission validator and
the site extractor all understand.

/docs/plugins renders one shelf per category in browse mode, a category pill
row under the tier pills, a clickable category chip on every card, and a
results bar (active category, count, clear) when a filter or search flattens
the view. ``hermes plugins catalog`` gains a Category column and groups by it.
All 18 shipped entries are categorised. Unknown categories fail admission
(same contract as tier) so a typo cannot create a phantom shelf.
2026-09-14 21:00:29 -07:00
teknium1
f5a457ad5b fix(tools): one-shot linger waits for a completion that is mid-publish
`ProcessRegistry._move_to_finished` pops the session out of `_running`, then
saves the receipt, releases handles and writes the checkpoint, and only THEN
enqueues the completion and sets `_completion_event`. A quiet one-shot parent
whose turn ends inside that window called `wait_for_pending_completions`,
found nothing in `_running`, drained an empty queue and exited without the
follow-up turn. That is the CI flake in
tests/tools/test_completed_process_results.py::test_headless_terminal_result_survives_cli_exit
(`follow_ups == []`), which also hit unrelated branches.

Consider `_finished` sessions whose event is not yet set as pending too.

Repro: a 6s sleep before the enqueue plus a 2s delay before the parent's first
wait fails the E2E 2/2 on main and passes 2/2 with this change.
2026-09-14 20:44:56 -07:00
teknium1
dfc28b61a0 chore(contributors): map catalog submitter email to GitHub login 2026-09-14 19:38:14 -07:00
teknium1
d53c629785 chore(contributors): map maintainer noreply email 2026-09-14 19:38:14 -07:00
dongxu0413
603bc6ed44 feat(plugins): add Octen web provider catalog entry 2026-09-14 19:38:14 -07:00
teknium1
110baa095b chore(contributors): map catalog submitter email(s) to GitHub login 2026-09-14 19:27:57 -07:00
MartinLeclercq
50551b24fa feat(plugin-catalog): add metamask-wallet community entry
MetaMask Agent Wallet for Hermes, pinned at v0.4.0 (b56d6bb): chat-only setup, reads,
approval-gated transfers/swaps/signatures, gated Guard Mode policy editor, background 2FA
watcher. Keys stay in MetaMask (server-wallet TEE or BYOK). 11 tools, 2 hooks, no env vars.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 19:27:57 -07:00
teknium1
a9eb8b5efb chore(contributors): map catalog submitter email(s) to GitHub login 2026-09-14 19:27:27 -07:00
Nacho
b0bc5f54ad plugin-catalog: pin hermes-live-voice to v0.2.1 (5f0022b) — audit fixes for the review in that repo's issue #1 2026-09-14 19:27:27 -07:00
Nacho
268c83dfed Update pin (quota UX) 2026-09-14 19:27:27 -07:00
Nacho
0dee630108 Update pin (barge-in hotfix) 2026-09-14 19:27:27 -07:00
Nacho
543fd29a8a Update pin (barge-in) 2026-09-14 19:27:27 -07:00
Nacho
86ab52310f Update pin (voice indicator cleanup) 2026-09-14 19:27:27 -07:00
Nacho
ae20ae725d Update pin (self-contained vendored fallback) 2026-09-14 19:27:27 -07:00
Nacho
ad862495a1 Update pin (mute/connect fix) 2026-09-14 19:27:27 -07:00
Nacho
ae6e572074 Update pin to v0.2.0 (delegation hardening + voice UX) 2026-09-14 19:27:27 -07:00
Synero
913ce5b64a feat(plugin-catalog): add hermes-live-voice (community) 2026-09-14 19:27:27 -07:00
teknium1
1b9cb18359 chore(contributors): map catalog submitter email(s) to GitHub login 2026-09-14 19:26:54 -07:00
Tony Simons
b415a18153 plugin catalog: bump hermes-newswire pin (authorship fix rebased history) 2026-09-14 19:26:54 -07:00
Tony Simons
cd14f06dbf plugin catalog: add community plugin hermes-newswire
Breaking-news ticker for Hermes Desktop (RSS/Atom/JSON-Feed strip above
the statusbar; feed search + discovery; per-source favicons; grouping
modes; offline cache; in-app reading; zero API keys / model tokens).
Owner-submitted. Validated: 'hermes plugins validate' 10/10 checks;
102-test suite + ESM render smoke. Pinned 10ea9ba (repo published today —
2-week pin-maturity window flagged in the PR body for maintainer call).
2026-09-14 19:26:54 -07:00
teknium1
d16765a4b4 chore(contributors): map catalog submitter email(s) to GitHub login 2026-09-14 19:26:23 -07:00
poponline63
144942734e Add hermes-pets-all to the plugin catalog 2026-09-14 19:26:23 -07:00
Jeffrey Quesnelle
d08032655f Merge pull request #111423 from NousResearch/feat/local-engine-update-prompt
feat(local-models): prefer b10964 and add one-click engine updates
2026-09-14 22:25:46 -04:00
teknium1
5db6d40874 ci: stop the advisory OSV scan from gating merges
osv-scanner.yml documents itself as detection-only (fail-on-vuln: false,
findings land in the Security tab) yet all-checks-pass listed it in needs,
so any failure result blocked the merge. In practice the failures are not
vulnerabilities: the "Upload to code-scanning" step hits GitHub's
per-installation API rate limit whenever several PRs run at once, and a
merge train of catalog entries went red on it across the board. The scan
still runs on every PR and weekly on main; it just reports instead of gating.
2026-09-14 19:15:00 -07:00
Vocllum
a982d2c882 feat(plugin-catalog): add hermes-auto-titler (community) 2026-09-14 19:13:48 -07:00
emozilla
c89b1d1318 test(desktop): complete SDK gateway routing mock 2026-09-14 22:12:53 -04:00
emozilla
de5a1da632 feat(desktop): add one-click local engine updates 2026-09-14 21:49:14 -04:00
emozilla
e9e363c856 feat(local-runtime): prefer llama.cpp b10964 2026-09-14 21:49:13 -04:00
teknium1
2179a279ae fix(desktop): dragging a link from a browser attaches an @url chip
Dropping a link out of a browser onto the Desktop composer toasted
"Drop files — Could not attach <title>.url" and attached nothing. A browser
link drag carries `text/uri-list` plus, on Windows, a virtual `<title>.url`
shortcut File (`.webloc` on macOS) that has no on-disk path. The drop
pipeline only understood Files and in-app paths: the path-less stub went to
the upload branch, `attachContextFilePath('')` returned false, and the user
had to copy/paste the URL instead.

`extractDroppedFiles` now reads `text/uri-list`, drops the path-less
shortcut stub when a link is present, and emits `{ url }` entries;
`droppedFileInlineRef` turns them into the same `@url:` chip the "+ → Add
URL" dialog and paste-linkify produce, so every drop surface (composer
form, text box, conversation area, edit composer) gets it for free.
`dragHasAttachments` accepts `text/uri-list` so the form-level enter/over
handlers claim the drag at all. A path-less *image* dragged off a web page
keeps its bytes and wins over the link to its own src.
2026-09-14 18:06:05 -07:00
teknium1
9326d9cdc4 fix(bot-mode): show the current thread and newest unresolved failure
Attribute drive-level errors to the thread being drained, not the send
that created the queue. Reinsert repeat member failures in recency order
so the collapsed activity row cannot show an older sibling failure.

Cover both invariants and the repeated-refusal sequence in native Desktop.
Thanks to @kvnloo for identifying both review findings.
2026-09-14 17:35:04 -07:00
teknium1
3040c87ac1 fix(bot-mode): do not retry failures from already queued sends
Keep failed-member exclusion across the room queue, rather than resetting
it per pending thread. A new user action after failure still permits a new
attempt. Share the drain activity epoch so a skipped queued thread cannot
hide the preceding member failure.

Proven red in real Electron: hold transport refusal, enqueue same-thread
and cross-thread sends, then release; old head submits three times, fixed
head once. Strengthen follow-up evidence with distinct provider replies,
exact public log order/count, and per-input inference counts.
2026-09-14 17:35:04 -07:00
teknium1
92a65be069 chore: keep Desktop version bump scoped to its package 2026-09-14 17:35:04 -07:00
teknium1
e80642df60 fix(bot-mode): keep group follow-ups ordered and late answers visible
Serialize room drives through their actual member completion, freeze input
watermarks by retained entry identity, and share the same completion path
with handoff continuations. Stop discards queued work without releasing an
active owner early; rename follows the existing room binding.

Observe stranded replies for the hard-cap duration plus grace after the
foreground wait, and retain unresolved failures in collapsed Activity.
Never automatically retry an ambiguous failed submit within the same drive.

Adapted from the queue and boundary approach in #92041 by @enwaiax and
harvest-budget approach in #107193 by @Finn763; #106502 by @wadib identified
failed-submit watermark consumption. The implementation retains current
numeric watermark storage, room lifecycle bindings and serial round limits.

Related: #92003, #105247, #100026
2026-09-14 17:35:04 -07:00
Teknium
9975fd56be Merge pull request #111320 from NousResearch/docs/plugin-catalog-no-self-update
Plugin catalog: no self-updaters instead of a 2-week pin age, enforced in CI
2026-09-14 17:34:43 -07:00
teknium1
42602bd12a docs(computer-use): skill matches the driver's current vocabulary
The skill described a SOM overlay burned into the screenshot, a driver-side
`capture` tool, and manual symlinking of the cua-driver skill pack; users
who read the driver's own docs then called raw MCP tools (`capture`,
bare `element_index`) and hit "no reviewed risk classification" and
`snapshot_id_required`. State plainly that `computer_use(action=...)` is a
wrapper vocabulary the driver never sees, that `element=N` is translated to
the snapshot token, what a `stale` refusal means, how text-only models get
vision (auxiliary.vision routing / mode=ax), and the Windows WindowsApps
doctor failure. `cua-driver skills install` links into ~/.hermes/skills now.
2026-09-14 17:34:31 -07:00
teknium1
a4d474777f fix(computer-use): doctor diagnoses a denied cua-driver spawn instead of crashing
On Windows the Hermes venv interpreter cannot CreateProcess a binary under
C:\Program Files\WindowsApps (WinError 5) even though the shell resolves it,
so `hermes computer-use doctor` died with a raw PermissionError traceback
from _open_mcp. Catch the spawn OSError and print what failed, why the tool
may still work (PATH resolves another copy), and the fix (reinstall outside
WindowsApps or HERMES_CUA_DRIVER_CMD), exit 2.
2026-09-14 17:34:31 -07:00
teknium1
45da78d645 test(computer-use): element click carries the token from the live schema alone
Invariant through the real click() path on the modern tools/list shape
(no capabilities[] array, element_token only in inputSchema); red on main.
2026-09-14 17:34:31 -07:00
Jeff J Hunter
65625dfe87 fix(computer_use): attach element_token when the driver schema accepts it
cua-driver 0.21 refuses a bare element_index:

    click: bare element_index is not accepted; pass element_token,
    or snapshot_id together with element_index

_maybe_attach_element_token gated solely on the trycua/cua#1961 capability
vocabulary. 0.21 stopped publishing per-tool capability sets — every tool
reports an empty set — while still accepting element_token in its input
schema. The gate therefore fails closed on 0.21.x and we send the bare
index, so the driver rejects the call.

The effect is total: every element-targeted click is refused, leaving
agents with only blind pixel coordinates. Observed against cua-driver
0.21.0 on X11, where a capture returned 762 elements with 762 tokens
cached and every subsequent click still failed with snapshot_id_required.

Check the live input schema first — supports_input_property() already
exists for exactly this, and its docstring notes it "deliberately inspects
tools/list rather than ... requiring a capability token the driver never
shipped". The capability check is retained as a fallback so drivers that
did ship the vocabulary are unaffected.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-14 17:34:31 -07:00
Adolanium
9a6eb21a88 fix(catalog): pin hermes-tailscale without self-updater 2026-09-14 17:32:15 -07:00
Adolanium
3bec474211 feat(catalog): add hermes-tailscale community plugin 2026-09-14 17:32:15 -07:00
Adolanium
d4dbac6dc4 fix(catalog): pin hermes-ssh without self-updater 2026-09-14 17:31:46 -07:00
Adolanium
cb84ee770f feat(catalog): add hermes-ssh community plugin 2026-09-14 17:31:46 -07:00
teknium1
8f7853188f fix(cron): keep deferred delivery exceptions from aborting ticks
Catch unexpected delivery exceptions after claim, retain diagnostics and continue
sibling admissions without authorizing replay. Preserve indefinite retention.

Reproduced PermissionError at target traversal after discovery. Native Electron
controlled-fault A/B confirms the healthy sibling settles and renders once.
2026-09-14 17:29:32 -07:00
teknium1
002ee41cfc fix(cron): keep unowned Bot Chat delivery on its resolved home
Extend deferred dispatch's destination pin to ordinary CLI fallback, so
custom-root and active-profile changes cannot redirect a checked target.
Refuse a missing destination before launch and name the target on failure.
Replace the old env-clearing expectation with two behavioral invariants
and retain the native Electron custom-root reproduction.

Adapted from the root-boundary fix and diagnosis in #104066.
Related #104055, #104066.

Co-authored-by: fangliquanflq <fangliquan@qq.com>
2026-09-14 17:29:32 -07:00
teknium1
3b0fe0cc2b fix(cron): keep deferred Bot Chat delivery bound to admission
Carry the original destination home and delivery ID into deferred drain and
its child, rather than re-resolving a mutable profile/root. Missing destinations
fail closed; supported-owner handoffs remain transferred, not ambiguous failures.
Capture the producer root before the background thread starts, and retain/log
malformed JSON without stopping healthy admissions or the whole cron tick.

Two invariants reproduced failures on the published head. Real Electron root
change and malformed-record cases are red before and green after; nested DM
control remains passing. No automatic retry of claimed or uncertain turns.
2026-09-14 17:29:32 -07:00
teknium1
6af84ead60 test(cron): retain native Bot Chat delivery reproduction 2026-09-14 17:29:32 -07:00