From c9924e45d765b5c28ac0abcf78339b828b4ef0a0 Mon Sep 17 00:00:00 2001 From: Agando Date: Fri, 23 Oct 2026 19:36:52 +0200 Subject: feat(newos4): hermes command, auto-poll, chat_hermes tool, token reset (v4.6.73) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase C as repo edits (browser edits in _mods/ do not survive a reload). - `hermes `: sends through the chat endpoint and always prints an outcome β€” 'πŸ“¨ Sending…' then either 'βœ… sent id=… epoch=…' or a coded error with a hint (429 retry later, 503 host busy, 401 run hermes-reset). `feedback` stays as the alias. - NOT named `chat`: ChatStudioModule already registers `chat` and dispatch walks modules in order, so a second `chat` was silently unreachable. Found by test, not by reading. - `hermes-poll` / `feedback-inbox`, `hermes-reset` (token rotation). - Poller: 30 s, paused while the tab is hidden, polls on visibilitychange, first poll adopts the cursor and prints nothing, cursor persisted in webx11_chat_state. - `chat_hermes` tool: send + read from inside the agent loop. - Contract/help updated for the rename. Acceptance: 'hermes acceptance test' in the browser, reply written host-side with scripts/chat.py, appeared in the terminal by itself 30 s later with no command typed (cursor 1792776973800). --- _docs/chat-contract.md | 8 +- help.html | 22 ++++ main.html | 6 +- modules/core/core-bundle.js | 205 ++++++++++++++++++++++++++++---- modules/core/module-aiassist.js | 49 ++++++++ modules/core/module-debug-supervisor.js | 156 ++++++++++++++++++++---- modules/core/module-loader.js | 2 +- 7 files changed, 390 insertions(+), 58 deletions(-) diff --git a/_docs/chat-contract.md b/_docs/chat-contract.md index ee2d006..6f94d79 100644 --- a/_docs/chat-contract.md +++ b/_docs/chat-contract.md @@ -83,8 +83,12 @@ relay cron. A conversation is not an archive. ## What this replaces -`feedback ` and `chat ` are the **same code path**; `feedback` is a deprecated alias. -Neither writes to the bug-report intake any more. `chat-poll` = `feedback-inbox`. +`feedback ` and `hermes ` are the **same code path**; `feedback` is the legacy alias, +`hermes` the explicit one. Neither writes to the bug-report intake any more. + +The command is **not** called `chat`: `ChatStudioModule` already registers `chat` (it toggles the +chat overlay) and command dispatch walks modules in order, so a second `chat` is unreachable. +`hermes-poll` = `feedback-inbox`; `hermes-reset` rotates the token. `POST /api/debug/agent-replies.php` is retired in favour of this contract: after the acceptance round trip it answers `410 Gone` with a pointer to `/api/chat/post.php`. One write path, one truth. diff --git a/help.html b/help.html index 8967db2..b120822 100644 --- a/help.html +++ b/help.html @@ -1688,6 +1688,28 @@ listmods

πŸ“‹ Changelog

+
+
v4.6.71 β€” October 2026 + chat bridge
+
    +
  • Chat with Hermes from the terminal. hermes <message> + (alias: feedback) sends to the operator channel and prints the message id. + Replies appear by themselves within 30 seconds; hermes-poll checks immediately.
  • +
  • Contract first. Shapes, error codes and the millisecond cursor live in + _docs/chat-contract.md. A wrong token is 401, oversize text is + 413 (rejected, never trimmed), rate limits are 429 with + retry_after_ms.
  • +
  • One write path. feedback no longer files a bug report; + the old replies endpoint answers 410 Gone. hermes-reset rotates + the browser's token and starts a fresh thread.
  • +
  • The in-page agent can ask too. New tool chat_hermes β€” + send a question, read the answer on a later step.
  • +
  • Server side. Per-thread and per-IP rate windows, atomic writes, + data/chat/ unreachable from the web. Host CLI: + scripts/chat.py list|show|reply.
  • +
+
+
v4.6.57–68 β€” October 20262026-10-23
    diff --git a/main.html b/main.html index 5107a40..7337fae 100644 --- a/main.html +++ b/main.html @@ -1349,13 +1349,13 @@ - + - + - +