feat: rich configurable chat (composer, per-answer activity & usage, history, workspace, i18n) + 3-tab demo with chess (0.0.10) - #15
Merged
Conversation
…orkspace, i18n
- AgentChat: every answer keeps its steps, tool calls (≈tokens, duration,
returned images), thoughts, subagents and consent decisions; tokens by kind
per answer and in total; saved chats in IndexedDB (ChatHistoryStore,
useChatHistory, ChatHistoryList) and a workspace panel over the core's
VirtualFileSystem (FilesPanel, useVirtualFiles). Side panels overlay a narrow
panel. Configurable: show* props, labels (AgentLabelsProvider), render props,
slots, swappable components, theme, classNames.
- AgentComposer: notices, "+" / Ctrl+V / drag & drop (self, window or a ref)
for images, PDFs and files with capability checks and optional conversion,
image downscaling before upload, slash commands (built-ins + skills), run
timer, running agents, model + thinking chip, consent chip, speech to text.
- Reducer: per-message activity, tool timing, totalUsage, load action.
- useAgent: run(goal, { images, files, attachments, label }), sessionId,
loadChat; useMcpServers for several MCP servers.
- Demo: three tabs (notes, MCP servers, chess vs agent with worker
subagents), agent + chat UI settings, Russian labels, PDF → Markdown via
@dudko.dev/pdf-to-md-core, a shared workspace with fs_* tools.
- Tests: chat helpers/labels/history/reducer units; e2e for several MCP
servers and the agent against a scripted Gemini endpoint.
- Docs: docs/chat.md, README, demo README, CLAUDE.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A7jHa5Pim4ufrdgxg561G5
…rlay over the zone - Composer menus are placed fixed next to their anchor (above when there is room), so a panel's overflow can't clip them; .awr-chat no longer sets container-type (it made the panel the containing block for fixed menus) — narrow mode is the JS-measured .awr-chat--narrow class. - The toolbar keeps one row: the model chip shrinks with an ellipsis, and a narrow composer (compactWidth) shows icons and numbers only. - Header usage is compact on a narrow panel; ContextMeter hides when empty; side-panel headers leave room for the close button; touch targets grow on coarse pointers and the input is 16px (no iOS zoom). - The drop overlay covers the whole drop zone (window, panel or composer). - Demo: Markdown answers via renderContent, a wider chat column, scrollable tabs on phones, the board before the chat on the chess tab. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A7jHa5Pim4ufrdgxg561G5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A7jHa5Pim4ufrdgxg561G5
The chat builds on the core's 0.0.20 surface (VirtualFileSystem, attachments, consent, tool search, subagents, context editing): peer floor >=0.0.20, devDependency ^0.0.20 in the library and the demo. Checked against the published 0.0.20: typecheck, format, build, unit tests, demo typecheck and build, and the 12 Playwright e2e flows. Version 0.0.10. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A7jHa5Pim4ufrdgxg561G5
siarheidudko
marked this pull request as ready for review
October 3, 2026 00:45
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds a full chat UI on top of the
@dudko.dev/agent-webfeatures. The guide isdocs/chat.md; the README and CLAUDE.md are updated. Releases as 0.0.10 and depends on@dudko.dev/agent-web0.0.20 (peer>=0.0.20).<AgentChat>Transcript
Saved chats and workspace
ChatHistoryStore,useChatHistory,ChatHistoryList. A chat id doubles as the agent's memory session.VirtualFileSystem:FilesPanel,useVirtualFiles.Configurability
show*props for every part.labelsand<AgentLabelsProvider>for i18n; counted phrases are functions, so plurals work in any language.renderContent,renderToolCall,renderMessage,renderAttachment,renderApproval.slots, swappablecomponents,theme,classNames.Layout
<AgentComposer>convertFile(e.g. PDF → Markdown); images are downscaled to ≤1.15 MP before upload.Hooks and reducer
useAgentadds:run(goal, { images, files, attachments, label }), consent,compact,sessionId,loadChat.useMcpServers(several MCP servers) anduseSpeechToText.totalUsage, and aloadaction.Demo
Three tabs:
@dudko.dev/pdf-to-md-core, andfs_*tools over a shared workspace.Also an Agent settings panel (consent, thinking, limits, compaction, skills, chat UI toggles, theme, Russian labels) and Markdown answers through
renderContent.Merge order
dudko-dev/agent— released as 0.0.31.dudko-dev/agent-web— released as 0.0.20.Checks (against the published
@dudko.dev/agent-web@0.0.20)npm run test:e2e: 12/12. MCP: several servers, the OAuth round-trip, reconnect after a reload, an unreachable server. Agent, against a scripted Gemini endpoint: tool calls and tokens, chat history, images, drop on the window, consent, slash commands, the chess trigger, Russian labels.🤖 Generated with Claude Code
https://claude.ai/code/session_01A7jHa5Pim4ufrdgxg561G5