Commit graph

99 commits

Author SHA1 Message Date
frdel
93d1131ce1 Unify WebUI icons and fix message collapsing
Introduce the x-icon custom element and migrate first-party WebUI and bundled plugin markup while retaining legacy Material icon compatibility. Defer icon-font readiness until the splash-installed document is parsed so Firefox does not leave icons transparent. Centralize chat message collapse handling, avoid false Show More controls on short user messages, and align grouped-message pagination styling. Update DOX and add regression coverage for the icon and collapse behavior.
2026-07-31 13:32:41 +00:00
frdel
bebe6826cf Improve WebUI bundling, manifest and stop command
Some checks failed
Build And Publish Docker Images / plan (push) Has been cancelled
Build And Publish Docker Images / build (push) Has been cancelled
Introduce a WebUI extension manifest and rewrite the asset bundler/server to support caller-supplied entry sets, extension-injected entries, and negotiated gzip. Key changes: add get_webui_extension_manifest() to helpers/extension, refactor Stop logic into stop_context() and reuse it from the connector `/stop` command, and add a new `/rename` slash command for chat naming. ui_bundler now accepts entry_urls, includes enabled extension entry files, raises the embedded text file size limit to 512 KiB, computes per-entry-set cache keys, and returns a bundle version based on the bundle signature. ui_server applies Starlette GZip middleware, adds routes (/, /index.html, /ui/index, /safe), serves splash/safe documents, injects the serialized webui_extension_manifest into the rendered index, and streamlines the /ui/asset-bundle endpoint with ETag and gzip handling. Also add multiple WebUI assets and fonts, new/updated plugin command YAML and Python command handlers, and corresponding tests covering bundling, commands, chat naming, and WebUI behaviors. Documentation (.dox.md) updated to reflect the new runtime contracts and guidance.
2026-07-29 19:49:07 +02:00
frdel
b6be345a56 Chat rendering/pagination, Add chat-naming and pin-to-top plugins
Refactor of messages.js to support lazy rendering.
Move chat rename functionality out of core and into a new _chat_naming plugin, and add a built-in _pin_to_top plugin for sidebar pinning. The chat-naming plugin includes API handlers, prompts, helper logic for selecting user messages and budgeted Utility Model calls, a python monologue_start extension, web UI (modal, store, config, sidebar action), and comprehensive tests. Removed the old core renaming extension and deprecated prompts/tests. Also added pin-to-top plugin files (API, helpers, webui store, tests/docs) and updated various AGENTS.md docs to reflect the new plugins and lifecycle clarifications. Minor UI/js tweak: reorder speak/copy buttons in browser tool handler and add a new webui message-window.js along with related webui/store/component updates and test adjustments.
2026-07-29 08:17:50 +02:00
frdel
2ec52e1968 Add /stop API and stop-button UI/behavior
Introduce a /stop API handler (api/stop.py) and its DOX to cancel an AgentContext run without deleting the context; it clears pause state, progress and logs an info step. Add tests for stopping behavior, chat working animation, and sidebar timestamp/spacing (tests/*). Update helpers/git._format_git_timestamp to emit UTC timestamps without a timezone suffix and add a test for it. Implement stop-related UI/UX: input-store.js gains a stop state, activateSendButton(), and stopAgent() to call /stop; chat-bar-input.html updates the send button markup, aria-label and stop styles. Update sidebar/chat list CSS to add the working-bubble animation, adjust chat row layout and action-button visibility, and left-sidebar/bottom styling (nowrap timestamp). Modify messages.js to hide kvps.finished from display and complete the active process group when finished. Minor welcome-composer and documentation updates to reflect these behaviors.
2026-07-28 09:26:06 +02:00
Alessandro
3ac63c6166 Add responsive interface control visibility
Add an Interface settings section with independent mobile and desktop toggles for the project selector, clock, connection status, and right canvas rail.

Persist the visibility map in instance settings, apply it at the shared WebUI surfaces, preserve existing defaults, and cover the contract with focused regression tests and DOX updates.
2026-07-10 19:38:19 +02:00
Alessandro
0e262f7b87 Refresh welcome screen and composer
Some checks are pending
Build And Publish Docker Images / plan (push) Waiting to run
Build And Publish Docker Images / build (push) Blocked by required conditions
Rework the welcome screen around the shared new-chat composer, renewed quick actions, discovery cards, OAuth accounts, and dedicated system resources panel.

Restore static button colors and neutral surfaces, move microphone state feedback onto the icon, and keep Rubik/code-font composer behavior.

Add focused static regressions for the welcome composer, OAuth discovery panel, and speech button contract.
2026-06-22 15:12:20 +02:00
Alessandro
b704a0e3f5 Add inspectable parallel tool calls
Some checks are pending
Build And Publish Docker Images / plan (push) Waiting to run
Build And Publish Docker Images / build (push) Blocked by required conditions
- add a parallel wrapper and runtime for concurrent background tool calls
- run parallel call_subordinate jobs as child chats with visible subagent steps that match normal subordinate args
- render parallel child tool steps with normal tool-call args while keeping job handles in wrapper results and prompt extras
- group parallel child chats in the sidebar with persistent accordion and caret behavior
- add prompt, extension, DOX, and regression coverage
2026-06-12 15:23:14 +02:00
frdel
e138e33ca9 Add file-level DOX docs & update AGENTS indexes
Add comprehensive file-level DOX documentation across the repo and update directory AGENTS.md indexes. Many new `*.py.dox.md` files were added under api, helpers, tools, plugins, extensions, webui, and other dirs to document endpoint purpose, ownership, runtime contracts, work guidance, and verification. Several AGENTS.md files were created or updated (agents profiles, api, docker, extensions, helpers, plugins, skills, webui components, etc.) to list child DOX files and clarify documentation/work guidance. Also add example and bundled profile DOX files (agent0, default, developer, hacker, researcher) and minor updates to helpers/dirty_json.py and its tests. These changes improve on-disk documentation coverage and establish the convention that each direct runtime file should have a matching `*.dox.md` describing its contracts and verification steps.
2026-06-08 12:41:53 +02:00
Alessandro
67224672e8 Add Remote Control tunnel providers
Rename the Remote Link UI and user-facing messages to Remote Control.

Refactor tunnel startup into provider helpers, remove ngrok support, and keep Cloudflare Tunnel, Microsoft Dev Tunnels, Serveo, and Tailscale wired through the Remote Control selector.

Add provider-time binary preparation, Tailscale userspace tailscaled startup, Tailscale login URL display, Microsoft Dev Tunnel progress feedback, and focused regression coverage for the Remote Control provider flows.
2026-05-28 22:33:29 +02:00
Alessandro
675afa8dee Refactor speech stack into built-in Kokoro TTS and Whisper STT plugins
Some checks are pending
Build And Publish Docker Images / plan (push) Waiting to run
Build And Publish Docker Images / build (push) Blocked by required conditions
Split the legacy core speech stack into two built-in, independently toggleable plugins: `_kokoro_tts` for TTS and `_whisper_stt` for STT.

This refactor keeps dependency installation and bootstrap concerns in Docker/bootstrap/preload, while moving speech-specific tooling, APIs, prompts, UI, and runtime behavior into the plugins. Core now exposes engine-agnostic `tts-service` and `stt-service` brokers, with browser-native TTS preserved as the fallback when Kokoro is disabled.

Included in this change:
- add built-in `_kokoro_tts` plugin with plugin-owned synth API, config, status UI, and provider registration
- add built-in `_whisper_stt` plugin with plugin-owned transcribe API, mic runtime, device UI, prompt injection, and provider registration
- remove legacy core speech APIs/helpers/settings/UI and delete unused `webui/js/speech_browser.js`
- replace the old hardcoded speech settings section with a generic voice surface backed by plugin extensions
- update preload/docs/tests to match the new plugin-owned speech architecture

Behavioral intent:
- both plugins are built-in but not `always_enabled`
- users can now hot-switch TTS and STT independently
- browser TTS remains available when `_kokoro_tts` is off
- Whisper mic UI only appears when `_whisper_stt` is enabled
2026-05-21 05:41:59 +02:00
Deimos AI
cb64826076 feat(webui): add chats-header-controls x-extension hook point
Adds <x-extension id="chats-header-controls"> to the chats list
section-header-row, enabling plugins to inject controls (sort toggles,
view switches) into the chats header area.

This follows the established x-extension pattern used throughout the
sidebar (sidebar-chats-list-start, sidebar-chats-list-end, etc.) and
aligns with the plugin extension architecture introduced in PR #998.
2026-05-12 16:30:48 +02:00
Alessandro
f6bc52201d Redesign first-run onboarding
Introduce a guided Cloud versus Local first-run modal with provider selection, account connection, model picking, and a ready state.\n\nAdd the reusable discovery auto-modal trigger, chat-created startup checks, onboarding-owned provider presentation metadata and assets, OAuth affordances, local provider guidance, and model-search hardening.\n\nKeep runtime provider data centralized while preserving onboarding-specific copy, logos, and docs links in the onboarding plugin.

Update onboarding.html

Update onboarding.html
2026-05-09 07:46:36 +02:00
Alessandro
704c0e9daf Polish sidebar task actions
Move Remote Link and Space Agent into the sidebar dropdown while removing their right-canvas rail actions.

Rename Scheduler-facing UI to Tasks and collapse Chat Actions behind a persisted dropdown accordion.
2026-05-02 17:34:24 +02:00
Alessandro
ae94f158df Make Time Travel modal-only
Add a Time Travel entry directly under Files in the sidebar dropdown and route it through the existing modal. Stop Time Travel from registering or mounting a right-canvas surface, and keep modal refresh tied to the modal state.
2026-05-02 17:20:05 +02:00
Alessandro
dae502bc1d ux: trigger focus on chat input after new chat and ctx switch 2026-03-27 12:12:26 +01:00
Alessandro
ad736a831e ui: hide unavailable sidebar quick actions
Save Chat, Clear Chat, and Logout used to stay visible as disabled dropdown rows (dimmed). They now use x-show so entries only appear when a chat is selected or the user is logged in.
2026-03-26 12:07:18 +01:00
Alessandro
517c8352c5 fix for dropdown confirm handler 2026-03-26 12:06:17 +01:00
Alessandro
8333f5b276 ui: plus menu for additional chat actions
Replace the paperclip and the separate bottom action row with a single + control that opens an upward panel next to the chat input box. Menu content stays in bottom-actions.html so chat-input-bottom-actions-start / end extension points are unchanged for plugins using these slots.

Added Files to the left sidebar dropdown for easy nav.

polish plus menu for extra chat actions
2026-03-26 11:55:14 +01:00
Alessandro
c7b97c17f0 refactor sidebar header for improved dropdown functionality
- Replace dropdownOpen state management with store-based methods for better state handling.
- Update event listeners for click and keydown actions to utilize the sidebar store.
- Adjust dropdown visibility and close actions to ensure consistent behavior across menu items.
2026-03-25 14:28:23 +01:00
frdel
295f2f6c89 Update header-icons.html 2026-03-24 19:38:09 +01:00
frdel
4d32432d54 Remove memory quick action extension, increase header icons dropdown shadow
- Delete memory-entry.html extension from sidebar quick actions
- Increase dropdown box-shadow from `0 2px 8px rgba(0,0,0,0.1)` to `0 2px 13px 2px rgba(0,0,0,0.3)`
2026-03-24 19:37:33 +01:00
Alessandro
1cc055c7d8 frontend: quick actions redesign; collapsible wrapper 2026-03-24 18:09:48 +01:00
Alessandro
90eba8554d enhance header icons layout; update logo
- Increased the top margin of the left sidebar from 3.5rem to 5rem for improved spacing.
- Refactored header icons section by introducing a new logo bar and reorganizing action buttons for better accessibility and layout consistency.
- Removed redundant logo container and integrated its functionality into the new logo bar.
- Updated styles for buttons and logo to enhance visual appearance and interaction feedback.

adjust left sidebar margin and enhance header icons layout

- Increased the top margin of the left sidebar from 5rem to 6rem for improved spacing.
- Refactored the header icons section by consolidating the logo and toolbar into a single header panel for better accessibility and layout consistency.
- Updated styles for buttons and the logo to enhance visual appearance and interaction feedback.
2026-03-23 17:57:18 +01:00
Alessandro
848937f1ce ui: full logo in sidebar; new chat icon update 2026-03-18 15:58:41 +01:00
frdel
7eb6d5b19a refactor: optimize WebSocket handler lifecycle and fix extension asset path handling
- Change `_active_handlers` from list of tuples to dict mapping paths to handler instances
- Cache handler instances on connect instead of recreating them for each event
- Reuse cached instances in `_dispatch` instead of instantiating new ones
- Remove redundant handler instantiation in `_on_disconnect`
- Add type ignore comments for socketio event decorators
- Fix extension asset path construction to use proper directory variable
2026-03-17 17:00:40 +01:00
Alessandro
e03569ef7d extension friendly bottom and quick actions CSS 2026-03-10 15:26:59 +01:00
frdel
1b89a0d359 Add tool request validation and plugin change notifications
Introduce validate_tool_request() extensible method in agent.py to validate tool request structure (dict with tool_name string and tool_args dict fields) before processing. Add after_plugin_change() helper in helpers/plugins.py that clears cache and sends a frontend reload notification (throttled to display_time interval) with a reload button. Update plugin installer install/delete flows to call after_plugin_change(). Extend notification
2026-03-10 13:08:48 +01:00
frdel
d02dda3667 BIG PYTHON REFACTOR
Python scripts moved out of python/ folder to root to be unified with plugins

+ frontend extension around api calls
2026-03-05 17:28:11 +01:00
Jan Tomášek
0ef4025244
Merge pull request #1186 from keyboardstaff/plugin-scan-plugin
feat: Add Plugin Scanner plugin
2026-03-02 18:48:02 +01:00
frdel
0372c05f2b Move exception handling to extensions
Refactors exception handling to use extension points and plugins. Moves InterventionException and HandledException into python/helpers/errors and routes exceptions from Agent (monologue and outer loops) through extension call points (monologue_exception, message_loop_exception, context_chain_exception) instead of inline handling. Removes inlined retry/critical logic and adds an error_retry plugin (reset counter + retry extension) as the retry implementation; also adds monologue_exception extensions to handle repairable, intervention, and critical exceptions. Adjusts extension hook naming in python/helpers/extension, adds agent-presence guards to several memory extensions, prevents a direct agent.handle_critical_exception call in TaskScheduler, renames a test file location, and fixes a webui modal path.
2026-03-02 16:51:39 +01:00
keyboardstaff
934836a821 feat: add plugin-scan plugin 2026-02-28 00:44:49 -08:00
frdel
5acb733b9e Refactor plugin/project helpers; add plugin UI
Major refactor of plugin and project helper APIs and add a plugin management UI.

Key changes:
- Rename project meta helpers from get_project_meta_folder -> get_project_meta and update callers across many modules (projects, memory, skills_import, secrets, subagents, skills).
- Overhaul python/helpers/plugins.py: introduce PluginMetadata and PluginListItem (Pydantic), new get_plugins_list/get_enhanced_plugins_list, support for reading plugin config (config.json), enable/disable logic (.enabled/.disabled), get_enabled_plugin_paths(), and helpers to find/read/save plugin assets. Plugin discovery now supports webui/main/config detection.
- Use enabled-plugin-aware lookups in subagents, extension loading, and other places (plugins.get_enabled_plugin_paths / get_enhanced_plugins_list used instead of previous list_plugins/get_plugin_paths where appropriate).
- Add API endpoint python/api/plugins_list.py to return JSON plugin lists.
- Add frontend plugin management UI: web components webui/components/plugins/list/plugin-list.html and pluginListStore.js; wire quick-actions button to open the plugins modal.
- Add new webui assets and config pages for example_agent and memory plugins; add plugins/plugin.json metadata for example_agent and memory.
- Memory plugin fixes: updated calls to use get_project_meta and adjusted memory path helpers to use project meta layout.
- File helper: add read_file_json to read JSON files directly.
- run_ui: tightened plugin asset serving security (only serve from plugin webui or plugin extensions/webui), added unified _serve_plugin_asset helper, and load plugin API handlers using enhanced plugin list.
- Small fixes: adjustments to parse_prompt/read_prompt/tool lookup to use updated subagents.get_paths signature, extension loader now uses enabled plugin paths, and web UI extensions JS updated to expect string paths.

These changes centralize project meta handling, improve plugin discovery and enable/disable behavior, and add a basic plugin management UI and API.
2026-02-19 17:20:14 +01:00
Alessandro
d65fada385 add extension points for chat, sidebar, and modal shell
- Introduced new extension points in various chat components: `chat-input`, `chat-top`, and `chat-bar`.
- Added extension points for sidebar components: `sidebar-start`, `sidebar-end`, and others.
- Updated modal structure with extension points for better integration.
- Updated documentation in README.md to reflect current sidebar, input, chat, welcome, and modal surfaces.
- Added tests for web UI extension surfaces to ensure proper integration and functionality.
2026-02-17 18:23:36 +01:00
Alessandro
addd0abeee quick-actions css fix; tooltips in plugins 2026-02-17 14:12:02 +01:00
frdel
39a81d0d5d Refactor memory imports; add Alpine move directives
Cleanup and refactor memory plugin imports to use plugins.memory.helpers.memory directly (remove sys.path hacks) and adjust related tools (memory_load, memory_save, memory_delete, memory_forget). Move the memory quick-action entry to a new start extension file and update quick-actions HTML to remove obsolete extension points and rename the dropdown end id. Update JS extension caller to forward multiple arguments (rest params) and add several Alpine directives (move-to-start, move-to-end, move-to, move-before, move-after) plus selector helpers to support dynamic element repositioning. Also removed an unused python/__init__.py and minor whitespace/comment cleanups.
2026-02-17 11:42:12 +01:00
frdel
3918133cbf plugins - frontend PoC 2026-02-16 20:01:25 +01:00
Alessandro
d69e30adc6 simplification and further memory decoupling
components.js restore
plugins tools fix
restore agent.py
2026-02-15 03:25:33 +01:00
3clyp50
54fb4746a4 initial plugins effort; memory system PoC
plugin manifest update
add memory plugin PoC files
offload memory prompts
cleanup imports
extract memory UI
fix paths
plugin docs
2026-02-14 17:05:37 +01:00
frdel
181135f58a Settings polishing, logout button 2026-02-05 22:02:49 +01:00
3clyp50
817c580b36 no-scrollbar utility class
single scrollbar in modals
2026-02-01 20:28:23 +01:00
frdel
4932e12546 WebSocket merge 2026-02-01 16:07:45 +01:00
frdel
1c83af8837 welcome screen polishing. 2026-01-31 17:47:09 +01:00
frdel
0094aff20f fixing scrolling, markdown, subordinates 2026-01-30 15:21:54 +01:00
frdel
1581d7d12f context.running to identify chat process 2026-01-30 09:54:31 +01:00
frdel
52404a776a preferences polishing 2026-01-29 21:48:55 +01:00
3clyp50
042f2d1393 add "list" to step expansion modes
When you select LIST mode:
applyModeSteps("list", showUtils) is called
- Groups expand because: mode !== "collapsed" → "list" !== "collapsed" ✓
- Steps stay collapsed because: mode === "expanded" → "list" === "expanded" ✗
- During streaming, steps don't auto-expand because the condition checks for detailMode === "current", which is false.

This is why we only need one line for this new modality to work.
2026-01-29 20:00:38 +01:00
frdel
f63df9f4eb chat rendering refactor - work in progress 2026-01-25 19:12:34 +01:00
3clyp50
23beed94de message handling refactor #1 2026-01-23 14:13:02 +01:00
3clyp50
211e9ac3bf confirm handler for restart btn 2026-01-22 09:59:43 +01:00
3clyp50
8e73cbcb1d defaultCollapsed leftover for proc-grp 2026-01-22 09:54:04 +01:00