diff --git a/CHANGELOG.md b/CHANGELOG.md index 7107b45..167cfcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] +## [0.4.0] - 2026-08-02 + +Requires [AgentForge](https://github.com/bulletinmybeard/agent-forge) **[≥ 0.14.0](https://github.com/bulletinmybeard/agent-forge/releases/tag/v0.14.0)** for the recap endpoint (`POST /api/sessions/{id}/recap`). + +### Added + +- **Recap**: idle-triggered running summary under the last answer (`useRecap` + `RecapMessage`). After `RECAP_MESSAGE_THRESHOLD` complete user/assistant exchanges since the last recap (default **3**), waits `RECAP_IDLE_MS` of quiet (default **1 min**), then `POST`s the recap endpoint. Backend stores a volatile recap message so it survives reloads; plain text only (no Markdown) + ## [0.3.0] - 2026-07-19 Requires [AgentForge](https://github.com/bulletinmybeard/agent-forge) **≥ 0.13.0** for command permission profiles (`/api/permissions/profiles/*`). Command-permissions overrides (`/api/permissions/commands/*`) remain as in 0.12. diff --git a/README.md b/README.md index e8ff181..a8023a9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [](./LICENSE) [](https://vitejs.dev/) [](https://biomejs.dev/) -[](https://github.com/bulletinmybeard/agent-forge/releases/tag/v0.13.0) +[](https://github.com/bulletinmybeard/agent-forge/releases/tag/v0.14.0) > [!NOTE] > **Experimental!** @@ -15,8 +15,8 @@ AgentForge WebUI is a React SPA for [AgentForge](https://github.com/bulletinmybe It's a pure frontend: it streams the agent's think > act > observe loop over the backend's `/ws/chat` WebSocket and calls its REST API for sessions, uploads, memory, and configs. It does nothing on its own — a running AgentForge backend is required! > [!IMPORTANT] -> **Backend version:** WebUI **0.3.0+** needs [AgentForge **v0.13.0**](https://github.com/bulletinmybeard/agent-forge/releases/tag/v0.13.0) or newer. -> The **Command Permissions** modal (overrides + **profiles**) depends on APIs and schema from that release (`/api/permissions/commands/*`, `/api/permissions/profiles/*`, session `source` filtering, etc.). Older backends will fail those endpoints (e.g. 404). +> **Backend version:** WebUI **0.4.0+** needs [AgentForge **v0.14.0**](https://github.com/bulletinmybeard/agent-forge/releases/tag/v0.14.0) or newer. +> **Recap** depends on `/api/sessions/{id}/recap` from that release. The **Command Permissions** modal (overrides + **profiles**) depends on APIs and schema from v0.13.0 (`/api/permissions/commands/*`, `/api/permissions/profiles/*`, session `source` filtering, etc.). Older backends will fail those endpoints (e.g., 404). ## Features @@ -30,6 +30,7 @@ It's a pure frontend: it streams the agent's think > act > observe loop over the - Botty side panel for passive, in-context suggestions and full semantic-searchable chat session history - Session sidebar, status bar, knowledge bar, memory settings, profile and provider selectors, and a help modal - Context-usage bar with one-click session compaction at the critical threshold +- **Recap**: idle-triggered running summary of the conversation in a muted block under the last answer, persisted so it survives reloads - Eager file uploads: paperclip, clipboard paste, or drag-and-drop with inline thumbnails. Unset attachments persist across reloads - GitHub-flavoured Markdown rendering and a Monaco-based inline prompt editor @@ -38,7 +39,7 @@ It's a pure frontend: it streams the agent's think > act > observe loop over the Prerequisites: - **Node 20.19+** (`engines` in `package.json`) -- A running [AgentForge](https://github.com/bulletinmybeard/agent-forge) backend **[v0.13.0](https://github.com/bulletinmybeard/agent-forge/releases/tag/v0.13.0) or newer** (`scripts/deploy-local.sh` brings the stack up with the web service on `:8200`) +- A running [AgentForge](https://github.com/bulletinmybeard/agent-forge) backend **[v0.14.0](https://github.com/bulletinmybeard/agent-forge/releases/tag/v0.14.0) or newer** (`scripts/deploy-local.sh` brings the stack up with the web service on `:8200`) ```bash npm install diff --git a/package-lock.json b/package-lock.json index fd349d7..f61a8a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "agent-forge-webui", - "version": "0.3.0", + "version": "0.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index deaa5bb..c617abf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agent-forge-webui", - "version": "0.3.0", + "version": "0.4.0", "description": "React SPA front-end for AgentForge — every mode, tool call, and connector in one chat UI", "type": "module", "engines": { diff --git a/src/components/MessageList.jsx b/src/components/MessageList.jsx index 055b4a3..e5755bc 100644 --- a/src/components/MessageList.jsx +++ b/src/components/MessageList.jsx @@ -16,6 +16,7 @@ import FileDiffMessage from "./messages/FileDiffMessage"; import ModelFallbackMessage from "./messages/ModelFallbackMessage"; import MonitorJobMessage from "./messages/MonitorJobMessage"; import QueryMessage from "./messages/QueryMessage"; +import RecapMessage from "./messages/RecapMessage"; import ResearchPlanMessage from "./messages/ResearchPlanMessage"; import ResultMessage from "./messages/ResultMessage"; import RoutingMessage from "./messages/RoutingMessage"; @@ -38,6 +39,7 @@ const MESSAGE_COMPONENTS = { secret_answer: SecretDialog, result: ResultMessage, summary: SummaryMessage, + recap: RecapMessage, error: ErrorMessage, discovery_scope: DiscoveryScopeMessage, discovery_areas: DiscoveryAreaMessage, diff --git a/src/components/messages/RecapMessage.jsx b/src/components/messages/RecapMessage.jsx new file mode 100644 index 0000000..05238cf --- /dev/null +++ b/src/components/messages/RecapMessage.jsx @@ -0,0 +1,16 @@ +export default function RecapMessage({ text }) { + if (!text) return null; + + return ( +
{text}
+