mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-12 13:52:15 +00:00
Window title: a render-nothing <TerminalChrome> tracks session.info — the
native renderer.setTerminalTitle (frame-safe, zig-side OSC emit) shows
'{session title} — Hermes' once the session is titled, 'Hermes Agent' until
then. The user's previous title is bracketed with the XTWINOPS title stack
(save on boot, best-effort restore on quit). Gateway: _session_info now
carries the live title (DB row, pending_title fallback) and a session.info
refresh follows every title change — pending-title application, the
auto-title worker landing (via maybe_auto_title's title_callback), and
session.title renames — so the window retitles without waiting for the
next turn.
Notifications: when the TUI starts waiting on the user — any blocking
prompt (clarify/approval/sudo/secret/confirm) or turn completion — three
dialect sequences go out through renderer.writeOut: OSC 9 (iTerm2/wezterm),
OSC 99 (kitty), OSC 777 (urxvt/foot); terminals ignore what they don't
speak. Suppressed while the terminal reports focused (core's mode-1004
focus/blur events; until a first blur proves reporting works, notify
unconditionally). HERMES_TUI_NOTIFY=0/false/off kills notifications; the
title is not gated. All text is OSC-sanitized (control chars stripped,
777's semicolon fields spliced-proof, length-capped).
13 new TUI tests (pure shaping/sequences/env gate + store-edge wiring via
an injected seam) and 2 gateway tests (title resolution order, thread-safe
refresh emitter). Live-smoked: tmux pane_title shows 'Hermes Agent' from
the native title path.
42 lines
1.3 KiB
JSON
42 lines
1.3 KiB
JSON
{
|
|
"name": "@hermes/ui-opentui",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"description": "Native OpenTUI engine for Hermes (Solid + Effect-at-boundary, from scratch). Ink (ui-tui/) stays the shipping default.",
|
|
"scripts": {
|
|
"type-check": "tsc --noEmit",
|
|
"lint": "eslint .",
|
|
"lint:fix": "eslint . --fix",
|
|
"fmt": "prettier --write src",
|
|
"fix": "prettier --write src && eslint . --fix",
|
|
"build": "node scripts/build.mjs",
|
|
"start": "node --experimental-ffi --no-warnings dist/main.js",
|
|
"test": "vitest run",
|
|
"check": "bash scripts/check.sh",
|
|
"dev": "node scripts/build.mjs && node --experimental-ffi --no-warnings dist/main.js"
|
|
},
|
|
"dependencies": {
|
|
"@opentui/core": "0.4.0",
|
|
"@opentui/keymap": "0.4.0",
|
|
"@opentui/solid": "0.4.0",
|
|
"effect": "4.0.0-beta.78",
|
|
"fuzzysort": "^3.1.0",
|
|
"solid-js": "1.9.12"
|
|
},
|
|
"devDependencies": {
|
|
"@babel/core": "^7.29.7",
|
|
"@babel/preset-typescript": "^7.29.7",
|
|
"@effect/vitest": "^4.0.0-beta.78",
|
|
"@eslint/js": "^9",
|
|
"@types/node": "^24",
|
|
"babel-preset-solid": "^1.9.12",
|
|
"esbuild": "^0.28.0",
|
|
"eslint": "^9",
|
|
"eslint-plugin-unused-imports": "^4",
|
|
"prettier": "^3",
|
|
"typescript": "^5",
|
|
"typescript-eslint": "^8",
|
|
"vitest": "^4.1.8"
|
|
}
|
|
}
|