Commit graph

652 commits

Author SHA1 Message Date
Alessandro
98589c6357 Add Editor downloads and archive extraction
Add Download to Editor file actions and safe File Browser extraction for ZIP, TAR, RAR, 7z, and compressed archives. Include archive safety checks, focused regressions, and 7zip in the base image.
2026-07-16 15:14:03 +02:00
Alessandro
4a80d26e3c Fix Editor file picker paths
Normalize File Browser picker paths before opening Editor sessions so container paths are not resolved as /a0/a0/.
2026-07-16 15:02:34 +02:00
Alessandro
cfd0df4a62 Open Launcher Host access from Core
Show a direct Open Host access action when Launcher settings disable the gateway while preserving Reconnect for Core-originated disconnects.

Use the bounded Launcher bridge so Core opens the trusted settings editor instead of re-enabling access itself.
2026-07-16 13:37:42 +02:00
Alessandro
38a5945441 Route Computer Use approval through Launcher
Make /computer-use on and off act on the current Launcher Host access lease while preserving A0 CLI guidance in ordinary WebUI sessions.

Update connector prompts and regressions so permission recovery consistently accounts for both Launcher and CLI entry points.
2026-07-16 13:26:13 +02:00
Alessandro
3c23b9b94e Turn Launcher host Disconnect into Reconnect
Keep the Core host popover open after a hard disconnect and reuse the connection action to restart the owning Launcher tab lease.

Retain the master toggle as the reversible Pause control and cover the bounded bridge contract.
2026-07-16 04:42:01 +02:00
Alessandro
b220d9b64e Keep current project model config inherited
Treat the Current project config selection as inherited when no project-scoped model config exists, even when the UI omits scope metadata.

Cover the browser-normalized save payload so project saves do not create _model_config/config.json.
2026-07-16 03:30:49 +02:00
Alessandro
e2fd320ac6 Polish Launcher host access popover
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
Use the standard compact panel radius and present the emergency gateway action as Disconnect. Keep the plugin contract and focused UI regression coverage aligned.
2026-07-15 15:29:33 +02:00
Alessandro
8fed806a1f Integrate Launcher hosts into sync status
Move the Launcher Host access control into Agent Zero's existing sync-status cluster, render one computer glyph per gateway, and remove the tooltip, expanding label, and animation. Reuse the standard WebUI radius tokens and cover the new extension surface and compact indicator contract with focused tests and DOX updates.
2026-07-15 14:38:01 +02:00
Alessandro
b11a57424e Split Launcher host file permissions
Advertise the file-write gateway capability while preserving legacy Files scopes as read/write access.

Render five Host access switches in Core, enforce read/write/exec dependencies, and cover negotiation and control behavior with focused tests.
2026-07-15 14:12:19 +02:00
Alessandro
3271ff43e3 Report Host access control failures
Use Agent Zero's shared notification system when Launcher gateway mutations fail, then refresh the popover state as before.
2026-07-14 22:43:52 +02:00
Alessandro
df6065d5b1 Polish Launcher host access controls
Keep the Core trigger compact until hover, focus, or open, and use the supported computer glyph for disconnected state. Raise the open popover above the compact Canvas rail so its controls remain unobstructed.
2026-07-14 21:27:09 +02:00
Alessandro
dafe5a33ba Add Launcher host gateway protocol support
Advertise and route a single Launcher gateway, expose acknowledged controls, and add the Launcher-only host status UI with regression coverage.
2026-07-14 17:19:48 +02:00
Alessandro
2e32a2f8dc Accept host-browser discovery endpoints
Preserve explicit endpoint case, accept host:port and HTTP discovery addresses in Browser settings, and keep live-runtime guidance independent of any fixed localhost port.
2026-07-14 16:10:13 +02:00
Alessandro
88e4f4faff Update default main model
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
Use OpenRouter's openai/gpt-5.6-terra model for the global default, Balance preset, and onboarding defaults.
2026-07-13 14:48:02 +02:00
Alessandro
48cba46181 Fix model preset reset flow
Add a confirmed Reset to default action to the preset editor and refresh its draft after resets from either entry point.

Resolve the toast helper at action time so resetting model settings cannot abort before removing the preset override. Rename the generic reset action for clarity and add regression coverage.
2026-07-13 14:46:11 +02:00
Alessandro
07e7e1e075 Harden desktop session reliability
Target LibreOffice saves to the requested document window and report whether the file content changed.

Fail fast on dead XFCE startup, probe the live X display, replace session manifests atomically, and decode XWD screenshots through Pillow's raw decoder. Add focused regressions for each path.
2026-07-11 23:25:18 +02:00
Alessandro
fddcc3deea Update default utility model
Some checks failed
Build And Publish Docker Images / plan (push) Has been cancelled
Build And Publish Docker Images / build (push) Has been cancelled
Use OpenRouter's google/gemini-3.1-flash-lite model without the preview suffix for the global default, Balance preset, and onboarding defaults.
2026-07-10 19:41:40 +02:00
Alessandro
948409c244 Clear provider-specific kwargs on provider change
Reset additional parameters together with the custom API base when a model provider changes, preventing stale provider-specific options from leaking into the new provider.

Update the model-config contract and README, and extend the focused frontend regression check.
2026-07-10 19:12:02 +02:00
Alessandro
705a400fe7 Add NVIDIA NIM provider
Register NVIDIA NIM for chat and embedding models through LiteLLM, including hosted model discovery.\n\nExpose NIM in onboarding with API key and documentation links, and cover the provider contract with a focused regression test.
2026-07-10 19:04:27 +02:00
Alessandro
25d906edb7 Harden Gemini CLI container setup
Separate Gemini CLI installation from probing so long installs remain observable. Use Agent Zero secret aliases for GEMINI_API_KEY instead of assuming saved secrets are exported from /a0/usr/.env, with contract coverage.
2026-07-10 18:53:28 +02:00
Alessandro
9837ff3432 Group multiline terminal commands
Execute multiline terminal input as one current-shell compound so intermediate prompts cannot complete queued work early. Preserve shell state and cover Bash and PowerShell grouping with regression tests.
2026-07-10 18:53:19 +02:00
Alessandro
8aad52784b Add Gemini CLI support to Orchestrator
Register Gemini CLI with auth detection and a verified headless workflow. Expose its settings and status metadata, update the plugin contracts and tests, bump the plugin version, and replace the thumbnail.
2026-07-10 18:41:02 +02:00
Alessandro
5660848940 Improve built-in command management
List bundled slash commands in their own section and create same-name project or global overrides when users edit them.

Remove the Commands sidebar shortcut and redundant scope banner, then simplify command cards by dropping badges and argument hints while tightening description typography. Add regression coverage for built-in listing and override precedence.
2026-07-10 17:50:33 +02:00
Alessandro
877d063d3c Polish OAuth model selection
Simplify provider cards and model-slot copy, align model pickers with the main model configuration UI, and infer a sole connected OAuth provider only when it does not silently replace a different saved provider.\n\nAdd focused static coverage for the updated picker and provider-default behavior.
2026-07-10 17:29:10 +02:00
Alessandro
db7b90823e Move preset editor behavior into Alpine store
Create local preset drafts and handle add, remove, and save actions through modelConfig.createPresetEditor so the HTML remains declarative.

Document the project-wide Alpine expression boundary and keep the plugin contract specific to preset editor ownership.
2026-07-10 14:19:23 +02:00
Alessandro
529dc8c465 Keep model presets bound after deletion
Give each preset editor row a stable UI-only key so Alpine does not reuse nested model state after a middle row is removed.

Add a regression guard and document the row identity invariant in the model-config plugin contract.
2026-07-10 14:18:49 +02:00
Alessandro
1a6d0eb614 Ignore removed Time Travel workspaces
Drop queued debounced snapshots when the workspace directory is gone before the timer flushes.

This keeps transient delete/rename races from surfacing as Time Travel snapshot errors while preserving normal snapshot failures for existing workspaces.
2026-07-09 17:26:39 +02:00
Alessandro
1bd741ff7f Migrate saved Venice model config
Repair saved _model_config user config and presets so Venice model slots use chat completions with the Venice system prompt disabled. Leave a0_venice slots untouched and add regression coverage for parsing and slot preservation.
2026-07-09 17:19:33 +02:00
Alessandro
84c13dab01 Add built-in goal management plugin
Adds the always-enabled _goal plugin with per-chat goal storage, WebUI goal strip, /goal slash command, and agent-facing goal tools.

Includes command-picker integration, focused plugin tests, and the generated 256x256 thumbnail asset.
2026-07-09 17:09:08 +02:00
Alessandro
9c9a4e00ca Add built-in slash commands plugin
Introduce the _commands plugin with command storage, picker UI, bundled canonical command pack, and legacy migration into the built-in namespace.

Polish the Web UI picker behavior, hide WebUI-only-inappropriate commands from the popover, make /models always open model configuration, and add regression coverage for command CRUD, plugin discovery, migration, canonical names, hidden commands, and picker flows.
2026-07-09 16:00:30 +02:00
Alessandro
f64b6490c5 Add bundled Orchestrator plugin
Promote the terminal agent work into the built-in plugins tree as _orchestrator with Orchestrator branding and the orchestrator skill.

Include adapter status APIs, settings UI, per-agent skill references, thumbnail asset, tests, and DOX coverage for the bundled plugin.
2026-07-09 13:18:44 +02:00
Alessandro
f1787b65f5 Fix code execution PTY reset hangs
Start local PTY shells in a new process session and make close() escalate from SIGTERM to SIGKILL when a foreground command refuses to exit. This keeps code_execution_tool reset from blocking indefinitely on stuck terminal processes.\n\nAdd regression coverage for closing a TERM-resistant shell and document the reset lifecycle contract.
2026-07-09 03:29:52 +02:00
Alessandro
5f14435093 Normalize Codex Responses input shape
Ensure the Codex OAuth Responses proxy forwards list-shaped input for empty continuation turns while preserving string prompts as user input items. Add regression coverage for the gpt-5.5 continuation case and document the proxy contract.
2026-07-09 02:41:03 +02:00
Alessandro
6dfe33c493 Fix Codex OAuth request metadata
Send current Codex client metadata and compatibility headers on proxied Responses requests so ChatGPT OAuth calls pass upstream call checks.

Return Codex model slugs as the primary list while preserving model metadata for descriptions in the OAuth settings UI.
2026-07-08 15:08:44 +02:00
Alessandro
f8b06e0b12 Remove legacy skill prompt cleanup
Delete the empty active-skills prompt extension and its unused prompt template now that selected skills are loaded through chat history instead of protocol. Stop clearing legacy loaded_skills keys from protocol/extras in the loaded-skills hook while keeping history reattachment for compacted skill bodies.
2026-07-08 12:42:43 +02:00
Alessandro
dea64ddad0 Load skills into chat history
Switch the Skills catalog UI/API from scope-wide prompt pins to current-chat history loading, and remove user-facing removal of loaded skills.

Disable legacy active-skill prompt injection so forgotten scope config no longer inflates new-chat prompts.
2026-07-08 01:52:22 +02:00
Alessandro
ad148f24cc Fix Responses state after history compaction
Clear the active Responses provider continuation when automatic history compression or manual chat compaction rewrites local history, while preserving stored response IDs for cleanup.

Add focused regressions for both compression paths so compacted chats do not keep stale provider-side context.
2026-07-07 16:59:49 +02:00
Alessandro
96fd5fc2b2 Ignore browser key handling for local editable targets
Prevent Browser keyboard capture from preventing chat composer typing when focus is in editable fields (including contenteditable).
2026-07-07 15:15:36 +02:00
Alessandro
afa5231a5a Refine BYOB host browser endpoint selection
Reduce Browser Settings host-browser choices to automatic and advertised debug endpoints, with a validated Custom endpoint input and faster inventory refresh.

Update Browser docs and regressions to document the custom endpoint workflow and CLI websocket selection.
2026-07-05 19:59:30 +02:00
Alessandro
c719134537 Document host browser debugging setup
Add Browser Settings guidance for supported Chromium-family remote debugging pages, including Opera and explicit remote-debugging endpoint fallback.

Update BYOB docs and troubleshooting to clarify that browser inventory comes from the connected A0 CLI and requires reconnecting the CLI after authorizing a browser.
2026-07-05 18:59:23 +02:00
Alessandro
7168f0984e Refresh BYOB browser inventory
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
Poll connected A0 CLI host-browser metadata while Browser Settings is open so newly authorized endpoints appear without saving or reopening.

Extend Browser Settings labels and remote-debugging guidance for Brave, Opera, Vivaldi, and Chromium-family host browsers with regression coverage.
2026-07-04 19:22:57 +02:00
Alessandro
7298a88fda Add BYOB host browser selection
Add host_browser_selection config normalization, Browser Settings UI choices from CLI-advertised inventory, and browser_selection forwarding through connector browser operations.

Expose host browser ids, labels, and available_browsers through A0 connector metadata and the browser_runtime API, with regression coverage for selection normalization.
2026-07-04 18:33:58 +02:00
Alessandro
d018177927 Add configurable Browser tab scope
Expose Browser settings for separate per-chat tabs versus a shared tab strip, and surface the existing maximum-tabs-per-chat cap. Make viewer WebSocket payloads carry the selected tab scope so the Browser panel can render the right tab list without guessing.

Keep the default scoped per chat, preserve the shared mode as an opt-in fallback, and cover both paths with Browser regression tests.
2026-07-04 16:52:39 +02:00
Alessandro
9bfa3b5c81 Fix Browser viewer input after stream restarts
Notify screencast consumers when a stream is stopped so the WebSocket frame supervisor restarts after viewport-driven screencast resets.

Keep the active canvas as the frame/input surface and avoid replacing live screencasts with click snapshots, preserving hover, click, and wheel feedback.

Tested: conda run -n a0 pytest tests/test_browser_agent_regressions.py -q
2026-07-04 16:21:46 +02:00
Alessandro
153ffcc221 Harden browser frame push completion paths
Wake the WebSocket screencast supervisor when the runtime frame task stops before delivering a consumer frame, and keep fatal frame exits eligible for normal CDP teardown.

Avoid resizing the Browser canvas backing store on every frame when bitmap dimensions are unchanged, preventing unnecessary clears and reallocations.
2026-07-03 11:22:23 +02:00
Alessandro
69fb0fca2a Smooth browser viewer rendering and frame push
Render live browser screencast frames through a canvas/ImageBitmap path while keeping the existing image/data-url path for snapshots and fallback rendering.

Attach WebSocket streams as runtime screencast consumers so delivered frames are pushed to the server loop and acknowledged after emit, removing the per-frame read_screencast_frame runtime round trip.
2026-07-03 11:06:14 +02:00
Alessandro
277bcd0783 Prevent browser frame stretch on resize
Keep the live browser frame proportional while the viewer is being resized by using contain sizing instead of stretching the stale frame to the transient surface shape.

Update the regression guard so the viewer contract pins the proportional render path.
2026-07-03 03:16:11 +02:00
Alessandro
727a840e10 Keep WebUI browser frames on base64 fallback
Disable WebUI binary-frame negotiation until its Socket.IO client reconstructs frame attachments as real Blob, ArrayBuffer, or typed-array values.

Reject placeholder binary payloads instead of wrapping them into broken image blobs, preserving the slim-frame path through base64 frames.

Document the transport constraint and pin the fallback behavior in browser regression coverage.
2026-07-03 02:15:54 +02:00
Alessandro
91b3bc9613 Slim browser viewer frame transport
Negotiate binary and slim screencast frames so updated clients avoid base64-in-JSON and repeated viewer metadata on every frame.

Clamp screencast capture to the subscriber viewport and DPR, lower streaming JPEG quality while preserving snapshot quality, and teach the client to manage binary frame URLs safely.

Document the browser viewer performance plan and update regression coverage for the new transport contract.
2026-07-03 01:49:07 +02:00
Alessandro
686e039d1b Wait for Browser screencast frames
Replace the WebSocket viewer frame pump's idle poll with read_screencast_frame so live screencast delivery follows the producer cadence instead of a 50 ms sleep cycle.

Keep idle-page timeouts inside the stream loop to avoid screencast restart flashes, and update the Browser regression test to pin the blocking read path and timeout handling.
2026-07-03 01:25:56 +02:00