Commit Graph

39353 Commits

Author SHA1 Message Date
ethernet
ce3d042f0c Merge remote-tracking branch 'origin/main' into ethie/pm-clean 2026-09-19 23:08:38 -04:00
ethernet
119bc61c3b fix: read text files with encoding=utf-8-sig in modules merged from main 2026-09-19 22:57:45 -04:00
ethernet
e1576d06a6 Merge remote-tracking branch 'origin/main' into ethie/pm-clean
Resolved toward the branch: PM provisions uv/python (main's install.ps1 uv-shim
salvage + its test and workflow steps dropped), the shim re-exec stays retired,
package.json carries no electron-builder block (afterExtract identity stamp wired
into electron-builder.config.cjs instead; after-pack.mjs keeps signing only),
Desktop workspace-deps helpers stay retired. Main's scratch-dir bootstrap
(export_scratch_tmp_env) is taken and re-run after profile resolution.
2026-09-19 22:57:07 -04:00
teknium1
ec015c906c fix(plugin-guard): plural test-file names and delegation prose are not attack shapes
Two install-scan false positives from catalog intake, each red on the real pinned tree:

* memory-review (apoapostolov/hermes-agent-awesome-plugins@b270520, plugins/memory-review):
  tests_state.py:86 holds '/etc/passwd' in a quoted traversal-probe list and scored
  system_passwd_access:critical -> dangerous (unoverridable). The test-tree name rule only knew
  test_*.py / *_test.py; a single-module plugin without a tests/ dir names its file tests_*.py.
  Accept the plural prefix/suffix so the quoted fixture is a note, exactly as tests/test_x.py is.
* pstack (Cloeille/pstack@ac5e5ab, #116381 pin): skills/poteto-mode/SKILL.md:128
  'Send subagents the minimum context they need' hit context_exfil:high. Handing context to the
  agent's own subagent is an in-process handoff; the bare-'context' branch now skips a
  subagent/worker/delegate recipient named right after the verb. External destinations, bare
  'your context', and 'send agents your context' still match.

Two tightenings guard the widened test-file surface (both pre-existing gaps, now closed):
  - _EXEC_ON_LINE gains open(: open('/etc/passwd') in a test steps down once (high, confirmable)
    instead of reading as quoted data (medium, note).
  - the JS regex-literal lexer accepts only real flags [dgimsuvy]; with [a-z]* an unquoted Unix
    path lexed as /etc/ + flags 'passwd', so 'cat /etc/passwd | curl ...' in a test script was inert.

PLUGIN_SCANNER_VERSION plugin-guard-v6 -> v7 so cached verdicts re-scan.
2026-09-19 19:41:42 -07:00
Teknium
eeb85107f9 Merge pull request #116215 from aydnOktay/catalog/source-tray
feat(plugin-catalog): add source-tray community plugin
2026-09-19 19:33:03 -07:00
brooklyn!
4d14aaf477 feat(desktop): expose hide code diffs in appearance settings 2026-09-19 21:19:12 -05:00
brooklyn!
0f2c27152d feat(desktop): keep edit counts when code diffs are hidden 2026-09-19 21:19:12 -05:00
teknium1
913d409832 chore(plugin-catalog): disclosure line (catalog review) 2026-09-19 19:14:41 -07:00
trajectoire-regis[bot]
1764d01b7d feat(catalog): add hermes-structured-aux-models plugin entry
Adds one plugin-catalog entry for trajectoire-ai/hermes-structured-aux-models,
a `kind: model-provider` plugin that registers the `structured-aux` provider.

The plugin accepts the OpenAI-shaped `chat.completions.create()` call Hermes'
auxiliary client makes and translates it into a bounded Jev decision request on
OpenRouter, mapping the typed answer back — so auxiliary tasks (approval, MCP
sampling, compression) get a bounded decision instead of a free-form chat
prompt. It fails open: any request it cannot express as a decision raises, so
Hermes falls back to the operator's own auxiliary provider.

- tier: community, category: models
- pin: e5c49b081ad04adca2ee3edc601b09ede6cee4c5 (v0.1.0, repo released)
- capabilities: no tools, hooks or middleware registered; no required env vars
  (the OpenRouter credential resolves env -> profile .env -> Hermes credential
  pool, so no duplicate secret is demanded at install time)
- requires_hermes: ">=0.21" — the plugin seams were verified against v0.21.0

Verified locally against the admission gate at the pinned sha:
`python3 scripts/validate_plugin_catalog.py plugin-catalog/` -> OK: 187 files valid
`hermes plugins validate --install-deps <dir>` -> Validation passed (13/13 checks,
security scan: safe, capability probe: registered provider structured-aux)
2026-09-19 19:14:41 -07:00
apoapostolov
55f2b988f2 feat(plugin-catalog): pin rss-reader public edition 2026-09-19 19:13:44 -07:00
Apostol Apostolov
b492618163 chore(plugin-catalog): repin rss-reader 1.0.5 2026-09-19 19:13:44 -07:00
Apostol Apostolov
f7849016b3 chore(plugin-catalog): repin rss-reader 1.0.5 2026-09-19 19:13:44 -07:00
Apostol Apostolov
9c1ef6bfcf feat(plugin-catalog): pin rss-reader 1.0.5 fix 2026-09-19 19:13:44 -07:00
Apostol Apostolov
f9073eff76 feat(plugin-catalog): bump rss-reader to 1.0.5 2026-09-19 19:13:44 -07:00
Apostol Apostolov
23bb584b96 feat(plugin-catalog): pin rss-reader 1.0.4 2026-09-19 19:13:44 -07:00
Apostol Apostolov
633b065abb feat(plugin-catalog): pin rss-reader catalog card 2026-09-19 19:13:44 -07:00
Apostol Apostolov
250d8a89d1 feat(plugin-catalog): pin rss-reader 1.0.4
Bump sha to 7e39b1159a377d473bb47af1be8a3a1d42f307f5 (empty Unread view on the last post).
2026-09-19 19:13:44 -07:00
Apostol Apostolov
05e580ff62 feat(plugin-catalog): add rss-reader 2026-09-19 19:13:44 -07:00
teknium1
cdbbbfd882 chore(plugin-catalog): disclosure line (catalog review) 2026-09-19 19:13:07 -07:00
apoapostolov
a7f63109e6 feat(plugin-catalog): pin provider-status public edition 2026-09-19 19:13:07 -07:00
Apostol Apostolov
3ee2d10098 feat(plugin-catalog): pin provider-status catalog card 2026-09-19 19:13:07 -07:00
Apostol Apostolov
97f731020b feat(plugin-catalog): add provider-status 2026-09-19 19:13:07 -07:00
Brendan Ryan
4abd595f2a fix(plugins): update MPP catalog pin and payment disclosure 2026-09-19 19:12:30 -07:00
Brendan Ryan
f2a85c16f7 feat(plugins): add the Tempo MPP catalog entry
Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
2026-09-19 19:12:30 -07:00
teknium1
f69161d437 chore(plugin-catalog): contributor map (catalog review) 2026-09-19 19:11:53 -07:00
Me
b22ebf4833 fix(catalog): pin reviewed Corpus kit and disclose marketing and PII 2026-09-19 19:11:53 -07:00
Me
63e8d3e32c chore(catalog): re-pin corpus to 5e1a5a7 (checkout/handoff copy fix) 2026-09-19 19:11:53 -07:00
Me
38bae549c6 feat(catalog): add Corpus plugin entry 2026-09-19 19:11:53 -07:00
teknium1
33bbd49fc6 chore(plugin-catalog): disclosure line, category -> tools (catalog review) 2026-09-19 19:11:16 -07:00
Abhilash Reddi
4666ce6d83 feat(plugin-catalog): add Adspirer 2026-09-19 19:11:16 -07:00
teknium1
2062388b64 chore(plugin-catalog): contributor map (catalog review) 2026-09-19 19:09:03 -07:00
Chloé
14802a586c fix(plugin-catalog): update pstack maintainer Zoeille → Cloeille
GitHub username changed. Updates repo URL, maintainer, docs_url,
contributor email, and pins sha to latest commit.
2026-09-19 19:09:03 -07:00
VGFreakXBL
58bc617c8b feat(plugin-catalog): add sticky-notes community plugin
Pin VGFreakXBL/hermes-sticky-notes at v0.2.0. Desktop-only SDK plugin
(no tools, hooks, env). Owner submission.
2026-09-19 19:08:27 -07:00
teknium1
95a183c6f5 chore(plugin-catalog): contributor map (catalog review) 2026-09-19 19:07:50 -07:00
tobenwarrior
2e58fb3b04 feat(plugin-catalog): add provider-copy community plugin
One-time, explicit copy of provider credentials from one profile to other
profiles from a desktop page. Owner submission (rule 5): repo and tag v1.0.1
pinned at 1599d21d1bce11d94424f749531dadf8d619f42c.
2026-09-19 19:07:50 -07:00
Sahil-SS9
c29e6b2f4b fix(plugin-catalog): re-pin hermes-project-stewardship to 4f733a8
The pin merged in #115599 (eb1ac9b) carries a security gap found during that
review: the run_command_evaluator capability was never consulted, because
AutonomyPolicy was never constructed anywhere in src/. A project at autonomy
level 0 still executed command-type objective evaluators, since the security
allowlist constrains which executable may run and never whether running is
permitted at all.

4f733a8 wires the policy in and fails closed below level 3.

Verified at the new sha against a clean NousResearch/hermes-agent main
checkout: doctor_plugin ok with no findings, read_declaration resolves both
deps from pyproject. Upstream repo gates all pass.
2026-09-19 19:07:20 -07:00
teknium1
30de041b01 docs: explain the three gateway connection-failure replies
The chat reply now differs for an interrupted connection, a refused/unroutable
endpoint and a cause-free SDK connection error; the FAQ names each wording and
what to do about it so a user reading one on Telegram/Discord/Slack knows
whether to restart the model server or just /retry (#116323).
2026-09-19 18:24:11 -07:00
Halldrix
6d2765b755 fix(gateway): anchor errno/winerror connection markers with word boundaries 2026-09-19 18:24:11 -07:00
Lei-k
37c15650a7 fix(gateway): distinguish interrupted and unreachable model connections
Split the single connection row of the gateway's shaped provider-error reply
into three: an interrupted established connection (reset/EOF/RemoteProtocolError),
a refused/unroutable endpoint (the case #86570 wrote the "not running or is
unreachable" wording for), and a cause-free SDK ``APIConnectionError`` that
supports neither diagnosis. A reset says nothing about whether the endpoint is
up, so telling the user to restart a server that just answered sends them to
debug the wrong thing (#116323).

Selectively adapted from Lei-k/hermes-agent#16 (497cc47556b1) via PR #109701,
rebased onto the current reply contract (rate-limit > auth > policy > connection,
every reply names a slash command, no operator jargon).
2026-09-19 18:24:11 -07:00
Teknium
8a92051f20 Merge pull request #116328 from NousResearch/fix/boa-w3-new-reports-cron-codex
fix(cron): missing-credential preflight verdict names the profile and HERMES_HOME it read (#116213)
2026-09-19 14:33:58 -07:00
Teknium
059b3d416f Merge pull request #116353 from NousResearch/boa-w3-recovery
Transient provider outages no longer end the turn: bounded auto-recovery ladder after retries and fallback, visible on CLI/TUI/gateway/API/cron (#85426, #107307)
2026-09-19 14:33:20 -07:00
Teknium
8e0828a39c Merge pull request #116346 from NousResearch/fix/boa-w3-new-reports-aux-openai
auxiliary provider "openai" routes identically on every aux path; dead review routes are reported (#116055, salvage #116083)
2026-09-19 14:32:59 -07:00
Teknium
b6f8f8eb1f Merge pull request #116345 from NousResearch/boa-w3-small-b
Video generation tools no longer let the agent pick the model; video_gen.model is the only selector (Refs #83080)
2026-09-19 14:32:37 -07:00
Teknium
abc21bb427 Merge pull request #116344 from NousResearch/boa-w3-session-guard
session.create refuses a model its provider cannot serve instead of a dead first turn (#96817, salvage #96845)
2026-09-19 14:32:15 -07:00
Teknium
b5fcf635dc Merge pull request #116343 from NousResearch/boa-w3-codex-thread
Codex app-server thread survives an API-server restart: thread id persisted per session and thread/resume'd, fail-closed to a fresh thread (#100531, salvage #103352)
2026-09-19 14:31:55 -07:00
Teknium
d180fc4311 Merge pull request #116340 from NousResearch/feat/codex-browser-pkce-login
Codex login gains an opt-in browser PKCE flow on localhost:1455; device code stays default (#95743, salvage #97058)
2026-09-19 14:31:35 -07:00
Teknium
5322b4e637 Merge pull request #116335 from NousResearch/boa-w3-small
Exhausted connect retries now say which host, how many attempts and how large the request was (CLI, TUI/Desktop, gateway)
2026-09-19 14:31:14 -07:00
Teknium
1372de375a Merge pull request #116329 from NousResearch/fix/boa-w3-new-reports-codex-proxy-ctx
fix(context): proxied Codex routes (custom codex_responses provider, HERMES_CODEX_BASE_URL) resolve the 272K Codex window, not the 1.05M direct-API catalog (#116191, credit #116199 #116262)
2026-09-19 14:30:54 -07:00
teknium1
50e9cd7bd5 fix(plugin-guard): two intake false positives — regex literal <script, allowlist "printenv"
Desktop lint: /<script[\s\S]*?<\/script>/gi in a feed sanitiser scored as
'script injection' and failed pinned-source-validate for rss-reader. Mask
JS regex literals for the markup-shaped rule only; <script in a string
literal (an innerHTML payload) and createElement('script') still fail.

Install scanner: "printenv" as a whole-string entry of a read-only
allowlist (frozenset({..., "printenv"})) fired dump_all_env high →
caution on hermes-jev. Extend the literal-token demotion: a token that is
the ENTIRE quoted literal on a line that executes nothing steps down like
an alternation member; "sudo" inside subprocess.run([...]) and
os.system("printenv") keep high.

A/B vs origin/main: attack probes identical (23 rows), in-tree sweep 319
entries 0 worse/0 changed; both new tests red on base. Bumps
PLUGIN_SCANNER_VERSION to v6 so cached caution verdicts refresh.

Signed-off-by: teknium1 <teknium1@users.noreply.github.com>
2026-09-19 14:30:36 -07:00
Teknium
60e166cbf5 Merge pull request #116326 from NousResearch/fix/responses-turn-boundary-anchor
Chained /v1/responses turns no longer replay earlier tool calls or double the stored history after history repair/compaction (#89891, rebuild of #70695)
2026-09-19 14:30:05 -07:00