<feed xmlns='http://www.w3.org/2005/Atom'>
<title>newos4/_docs/chat-contract.md, branch main</title>
<subtitle>newOS4 - the browser terminal that runs WebX11 user spaces</subtitle>
<id>https://newos.webx11.duckdns.org/newos4/atom?h=main</id>
<link rel='self' href='https://newos.webx11.duckdns.org/newos4/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/'/>
<updated>2026-10-23T18:54:28+00:00</updated>
<entry>
<title>docs: chat bridge in AGENTS.md, changelog v4.6.72-80, contract deltas</title>
<updated>2026-10-23T18:54:28+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-23T18:54:28+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=b93cd918e967c147b6169fa5bb89241bd7488525'/>
<id>urn:sha1:b93cd918e967c147b6169fa5bb89241bd7488525</id>
<content type='text'>
Contract now documents truncated/cursor semantics, the full code table with retry rules,
503-from-nginx (HTML, retryable), the two-cursor rule, strictly-increasing epoch, and the
security posture in plain words: client-minted tokens mean public write, mitigated but not
closed.
</content>
</entry>
<entry>
<title>feat(newos4): hermes command, auto-poll, chat_hermes tool, token reset (v4.6.73)</title>
<updated>2026-10-23T17:36:52+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-23T17:36:52+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=c9924e45d765b5c28ac0abcf78339b828b4ef0a0'/>
<id>urn:sha1:c9924e45d765b5c28ac0abcf78339b828b4ef0a0</id>
<content type='text'>
Phase C as repo edits (browser edits in _mods/ do not survive a reload).

- `hermes &lt;msg&gt;`: 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).
</content>
</entry>
<entry>
<title>feat(chat): token-scoped chat endpoints, contract, host CLI, old POST retired (v4.6.71 phase B)</title>
<updated>2026-10-23T17:29:31+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-23T17:29:31+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=0d2365ab202ba5c9b1d0604467af0594dc7360de'/>
<id>urn:sha1:0d2365ab202ba5c9b1d0604467af0594dc7360de</id>
<content type='text'>
- api/chat/{lib,post,poll}.php: thread = sha256(token)[0:16]; flock read-modify-write;
  tmp+rename; ms epoch cursor; per-thread + per-IP windows with retry_after_ms;
  401/413/507/405 carry a machine code, only rate_limited is retryable
- _docs/chat-contract.md: frozen shapes, incl. why the cursor is ms and not ts
- scripts/chat.py: list/show/reply, UTC, locked, atomic replace
- api/debug/agent-replies.php POST -&gt; 410 Gone with pointers (one write path)

Measured: 401 no-token, 201+id, poll 1 msg, poll&gt;since 1 new, data/chat 403,
4001 chars 413 (codepoints), 429 with Retry-After 576, round trip via chat.py.
</content>
</entry>
</feed>
