mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-28 18:19:28 +00:00
* fix(desktop): hide persisted agent-only history scaffolding Filter verification-stop nudges and context-compaction handoffs at the stored-history mapper boundary. Preserve a real reply when a compaction handoff shares its stored message. * test(desktop): build persisted E2E sessions through the real agent Drive tui_gateway.entry over its stdio JSON-RPC transport against the mock provider, wait for real completion events, and persist normal session history through AIAgent and SessionDB. Migrate resume and hidden-history coverage, including real compression and live verify-on-stop scaffolding, then remove the unused direct SessionDB import scripts. * fix(desktop): use the provisioned Python for real-session E2Es Run the stdio gateway through uv's synced project environment outside the Nix dev shell, while retaining the fully provisioned Nix Python when the shell advertises HERMES_PYTHON_SRC_ROOT. * fix(nix): expose the provisioned Python environment to uv Mark the Nix-built Python environment active in the dev shell so the shared E2E session builder can always run through `uv run --active --no-sync`. * fix(timeline): persist typed display events * fix(timeline): strip display-only fields from provider payloads, preserve through rewrites, fix /resume display history Three review findings from PR #69771: 1. Provider payload leak: display_kind and display_metadata were forwarded to the provider API as unknown message fields. Strict OpenAI-compatible backends can reject the next request after a model switch or resumed typed event. Strip both from the per-request api_msg copy in conversation_loop alongside the existing api_content pop. 2. Rewrite/import data loss: _insert_message_rows preserved display_kind but silently dropped display_metadata. After replace_messages, archive_and_compact, or session import, async-delegation completion events lost their task counts and fell back to generic display text. Add display_metadata to the INSERT columns and bind tuple. 3. CLI /resume stale recap: startup --resume A set _resume_display_history from A's lineage. A subsequent in-session /resume B loaded B only into conversation_history via get_messages_as_conversation, leaving the stale A display projection. _display_resumed_history preferentially read the stale attribute, showing A's recap for B. Switch /resume to get_resume_conversations and update _resume_display_history alongside conversation_history. Tests: 890 Python (5 files), 35 desktop TS — all green. * feat(tui): render typed display events as ◈ markers in the Ink TUI The TUI was not handling display_kind at all — model switch markers and async delegation completions rendered as opaque user messages with the full [System: ...] text, and hidden compaction handoffs were visible. Wire display_kind through the full TUI chain: - _history_to_messages (tui_gateway/server.py) forwards display_kind and display_metadata to the gateway transcript payload. - GatewayTranscriptMessage (gatewayTypes.ts) gains both fields. - Msg.kind (types.ts) gains 'event' value. - toTranscriptMessages (domain/messages.ts) maps: - hidden → skip entirely - model_switch → event "model changed" - async_delegation_complete → event "N background agents finished" (or "background agent work finished" without metadata) - messageGroup (blockLayout.ts) routes event to its own group, with SELF_SPACED + PAINTS_TRAILING_GAP so it owns its margins. - messageLine.tsx renders event-kind as a dim ◈ marker with no gutter, matching the CLI's ◈ event rendering. - 4 new TUI tests for hidden/model_switch/async_delegation mapping. TUI typecheck: clean. TUI lint: 0 errors (2 pre-existing warnings). TUI tests: 9 passed (1 pre-existing failure on main, unrelated). |
||
|---|---|---|
| .. | ||
| activeSessionSwitcher.test.ts | ||
| appChromeStatusRule.test.tsx | ||
| appChromeStatusRuleDevCredits.test.tsx | ||
| approvalAction.test.ts | ||
| asCommandDispatch.test.ts | ||
| billingStepUp.test.tsx | ||
| blockLayout.test.ts | ||
| brandingMcpCount.test.ts | ||
| bundleNoAsyncEsmDeadlock.test.ts | ||
| charts.test.ts | ||
| clipboard.test.ts | ||
| completionApply.test.ts | ||
| constants.test.ts | ||
| createGatewayEventHandler.test.ts | ||
| createSlashHandler.test.ts | ||
| cursorDriftRegression.test.ts | ||
| details.test.ts | ||
| emoji.test.ts | ||
| externalLink.test.ts | ||
| forceTruecolor.test.ts | ||
| gatewayClient.test.ts | ||
| gatewayRecovery.test.ts | ||
| gracefulExit.test.ts | ||
| journeyCommand.test.ts | ||
| loaders.test.ts | ||
| markdown.test.ts | ||
| mathUnicode.test.ts | ||
| memoryMonitor.test.ts | ||
| messageLine.test.ts | ||
| messages.test.ts | ||
| modelPicker.test.ts | ||
| orchestratorPromptSession.test.ts | ||
| osc52.test.ts | ||
| overlayPrimitives.test.ts | ||
| parentLog.test.ts | ||
| paths.test.ts | ||
| petPane.test.tsx | ||
| platform.test.ts | ||
| precisionWheel.test.ts | ||
| prompt.test.ts | ||
| providers.test.ts | ||
| reasoning.test.ts | ||
| rpc.test.ts | ||
| scroll.test.ts | ||
| slashParity.test.ts | ||
| spawnHistoryStore.test.ts | ||
| stateIsolation.test.ts | ||
| statusBarTicker.test.ts | ||
| statusRule.test.ts | ||
| streamingMarkdown.test.ts | ||
| subagentTree.test.ts | ||
| submissionCore.test.ts | ||
| subscriptionCommand.test.ts | ||
| subscriptionOverlay.test.tsx | ||
| syntax.test.ts | ||
| terminalModes.test.ts | ||
| terminalParity.test.ts | ||
| terminalSetup.test.ts | ||
| termux.test.ts | ||
| termuxComposerLayout.test.ts | ||
| text.test.ts | ||
| textInputBurstInput.test.ts | ||
| textInputCursorSourceOfTruth.test.ts | ||
| textInputFastEcho.test.ts | ||
| textInputLineNav.test.ts | ||
| textInputPassThrough.test.ts | ||
| textInputRightClick.test.ts | ||
| textInputWrap.test.ts | ||
| theme.test.ts | ||
| themeBoot.test.ts | ||
| topupCommand.test.ts | ||
| turnControllerNotice.test.ts | ||
| turnStore.test.ts | ||
| usageCommand.test.ts | ||
| useBatteryPoll.test.ts | ||
| useCompletion.test.ts | ||
| useComposerState.test.ts | ||
| useConfigSync.test.ts | ||
| useInputHandlers.test.ts | ||
| useQueue.test.ts | ||
| userWidgets.test.ts | ||
| useSessionLifecycle.test.ts | ||
| useVirtualHistoryHeights.test.ts | ||
| viewport.test.ts | ||
| viewportStore.test.ts | ||
| virtualHeights.test.ts | ||
| virtualHistoryClamp.test.ts | ||
| virtualHistoryOffsetCache.test.ts | ||
| weatherApp.test.ts | ||
| wheelAccel.test.ts | ||
| widgetGrid.test.ts | ||
| widgetGridComponent.test.tsx | ||
| widgetSdk.test.ts | ||