Commit graph

2965 commits

Author SHA1 Message Date
Alessandro
ff2a5b9c9c fix(docker): load the signed Xpra ARM64 package index
Some checks failed
Build And Publish Docker Images / plan (push) Has been cancelled
Build And Publish Docker Images / build (push) Has been cancelled
2026-10-13 17:23:11 +02:00
Alessandro
a251f6275b fix(browser): remove tooltips from quick settings
Remove overlapping zoom hints and extension path/action tooltips from the
Browser quick settings popover. Preserve accessible control labels and
document the tooltip-free popover contract.

Validation: focused quick-settings regression passed; live served HTML
retains accessible labels without tooltip titles; git diff --check passed.
Visual hover verification was unavailable because the in-app browser could
not connect. The full suite was not run.
2026-10-13 16:36:29 +02:00
Alessandro
ba4d547c74 Update Launcher README links to v1.9
Point the root README platform downloads and release notes link at the upcoming Launcher v1.9 release using the deterministic asset URLs.
2026-10-13 16:33:01 +02:00
Alessandro
815b717784 fix(sidebar): reveal children of selected subagents
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
When a selected subagent delegated again, snapshot hydration expanded its
ancestors but left its own children hidden. Apply the existing automatic
expansion at every depth while preserving manual collapse and stable row
identities.

Add regression coverage for arriving children, repeated snapshots, and manual
collapse at multiple depths, and update the sidebar contract.

Verification: 119 focused tests passed. Live WebUI checks from a fresh Opus QA
chat covered direct, nested, and parallel delegation, running indicators,
manual collapse, and reopening a selected subagent.
2026-10-13 16:21:41 +02:00
Alessandro
f72945e70c fix(llm): enable Venice cache routing and custom provider overrides
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
Venice and Agent Zero API missed automatic cache hints because the transport
only recognized a fixed set of provider routes. Default both to stable
prompt_cache_key routing and expose a0_prompt_cache_mode through the existing
Additional parameters field for custom providers.

Support cache keys, cache_control markers, automatic detection, and disabling
automatic hints. Preserve explicit caller keys, keep marked requests on Chat
Completions, and strip the internal control before either provider API call.
Document the configuration and add regression and installed-SDK HTTP coverage.

Validation: 316 targeted tests passed in the live Docker framework runtime;
git diff --check passed. Full suite and upstream cache-hit measurements were
not run.
2026-10-13 15:48:32 +02:00
Alessandro
c946b3c347 fix(model-config): keep selector menus within viewport
Cap preset and agent profile menus to the space above the selector when
opening or resizing the window. Keep the full scroll track reachable
without changing its width, and preserve shared overflow positioning.

Add browser regression coverage for short viewports, resize, native
scrollbar dragging, wheel scrolling, and preset selection through overflow.
Update the plugin contracts and README.

Validation: 11 focused tests passed; live UI verified at localhost:32081.
2026-10-13 15:09:06 +02:00
Alessandro Frau
29288a8acc
Merge pull request #1931 from gf239/fix/model-presets-stale
fix(model-config): reload presets before the preset editor opens
2026-10-13 14:33:58 +02:00
Alessandro
3d187a81a5 test: isolate saved chat pruning regression
Replace the module-stubbing test file with a snapshot regression that saves a
real chat after the saved-ID listing is captured. This covers the first-save
race without leaking fake core modules into later tests.

Keep deletion and unsaved-chat coverage in a temporary chat directory, and
document the disk recheck in the persistence and snapshot helper DOX.

Validation: 24 focused tests passed in the Docker framework runtime. The new
regression fails when the disk recheck is removed. Helper DOX coverage and
git diff --check passed.
2026-10-13 14:03:22 +02:00
Alessandro Frau
d4e1c85352
Merge pull request #1948 from Li-john1021/fix/1947-prune-stale-saved-context
fix: re-check disk before pruning a just-saved chat context
2026-10-13 14:00:02 +02:00
Alessandro
cab075307e fix(chat-naming): validate names before marking them manual
Validate custom /rename names before setting the persisted manual-name flag. A rejected name must leave automatic naming enabled.

Add a regression test for a name exceeding the 200-character limit.
2026-10-13 13:48:31 +02:00
Alessandro Frau
229b671ace
Merge pull request #1949 from Li-john1021/fix/1941-preserve-manual-chat-name
fix(chat-naming): preserve manual names under always mode
2026-10-13 13:46:36 +02:00
Alessandro Frau
fae1abacce
Merge pull request #1946 from GreifMax/fix_folder_download_naming
fix: name single-folder downloads correctly
2026-10-13 13:23:55 +02:00
Li-john1021
3e87172178 fix(chat-naming): preserve manual names under always mode (#1941) 2026-10-13 13:30:28 +08:00
Li-john1021
29361a84eb fix: re-check disk before pruning a just-saved chat context
saved_chat_ids() can be stale relative to a concurrent first
save_tmp_chat(), so _prune_missing_saved_contexts removed flagged
contexts whose chat.json was already on disk. Confirm with
chat_file_exists() before AgentContext.remove().

Fixes #1947
2026-10-13 10:00:12 +08:00
GreifMax
17f06bfcdc fix(files): name single-folder downloads after the folder
The File Browser's selected-files download flow zips any selection
that is not a single file and always applies the generic
agent-zero-selected-<count>-<stamp>.zip archive name, so downloading
one folder produced agent-zero-selected-1-<date>-<time>.zip instead
of <folder>.zip.

Name single-directory downloads after the folder in both the local and
remote branches of prepare_files_download; true multi-selections keep
the timestamped generic name. Add regression tests for both cases.
2026-10-12 21:58:36 +02:00
Alessandro
bea0c16d50 Overlap embedding warm-up with startup watchdogs
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
Run initialization end hooks while embedding preload continues, then invoke
startup completion to perform the existing bounded wait and start MCP/jobs
before HTTP. Preserve initialization and preload extension skip controls,
best-effort failures, and the ten-second additional wait limit.

Five balanced cached-model boots per version reduced median HTTP readiness
from 17.063s to 15.907s (1.156s, 6.8%) and boot-to-first-token from 19.075s to
18.051s (1.024s, 5.4%). Useful overlap increased from 2.390s to 6.059s.
Post-Send latency increased by 0.146s in this sample; local preparation
increased by 0.025s. Models were warm before HTTP in all five candidate runs.

Validation: 24 focused framework tests passed, including actual ten-second
construction and encoding stalls, deterministic end-hook/warmup overlap,
and extension skip/error paths. The clean live restart returned HTTP 200
and completed preload before HTTP. Temporary probes and benchmark chats
were removed.
2026-10-12 17:57:20 +02:00
Alessandro
cc098d3e98 Speed up chat restoration and bound embedding warm-up
Some checks failed
Build And Publish Docker Images / plan (push) Has been cancelled
Build And Publish Docker Images / build (push) Has been cancelled
Reuse Git version metadata within each chat-load operation and pass saved
message token counts into reconstruction. Preserve per-agent settings and
credential reads, initialization hooks, profiles and legacy token behavior.

Give the existing deferred embedding preload up to 10 extra seconds after
chat restoration, within extensible init_a0. Continue startup on timeout or
task failure while allowing unfinished model loading to complete.

Across five trials per version with the same chat workload and a cached
embedding model, median HTTP readiness after the restart command returned
fell from 38.1 to 27.8 seconds: 10.3 seconds saved, or 27% less waiting.
Boot-to-first-token fell from 42.7 to 33.4 seconds. Post-send first-token
latency did not improve in this sample (4.709 to 5.108 seconds).

Validation: 146 focused framework tests passed, followed by 20 preload tests
including seven new edge cases. Real ten-second stalled-loading/inference
checks and offline missing/cached-model checks passed. Five DeferredTask
lifecycle tests passed separately; an existing test-order failure when
combined with preload imports also reproduces without the new cases.

Fresh-install performance was not measured; the full repository suite was
not run.
2026-10-11 19:27:39 +02:00
Alessandro
2afffe8edc Overlap embedding warm-up with chat restoration
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
Load sentence-transformers on the existing cache miss and construct the
preloaded model off the shared background event loop. Start warm-up before
chat restoration inside extensible init_a0, preserving start-hook control
and sharing the loaded model with ordinary runtime requests.

Remove unused speech preload imports and dead warm-up functions. Seed APT
indexes only when absent, skipping the refresh on normal container boots.
Keep the existing Python tunnel service and its provider lifecycle.

Validation: 49 focused framework tests passed, including extension-hook
short-circuit behavior, concurrent embedding-cache reuse, APT cache states,
tunnel behavior and CSRF origins. Three cold Fable chat trials per version:
median submit-to-first-token 9.588s -> 4.234s;
local preparation 6.904s -> 1.197s;
HTTP readiness 42.637s -> 41.139s;
boot-to-first-token 52.093s -> 46.657s.
Provider timing varies; these are local repeated measurements. The live
baseline already omitted APT refresh, so it receives no timing credit.
2026-10-10 16:36:08 +02:00
Alessandro
298cb2c05d Speed up chat loading and guard selector refresh races
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
Run model/profile, context-usage and goal display refreshes independently
of snapshot rendering so chat switches do not wait for their API calls.

Guard refreshes and save completions by request sequence and selected chat.
Pending saves still finish for their original chat, while late responses
cannot replace the current selector state or finish a newer loading cycle.
Add deterministic pending-request and save-race regressions and update
the owning plugin contracts.

Validation: 94 focused tests passed for the loading change, followed by
47 focused tests after the model/profile race fixes. Live checks at
localhost:32081 covered delayed API responses, rapid chat switching,
late profile/preset/clear saves, and desktop/mobile behavior.
2026-10-10 14:10:35 +02:00
Alessandro
ce48667e98 Add Paradee as the default voice in Local TTS
Some checks failed
Build And Publish Docker Images / plan (push) Has been cancelled
Build And Publish Docker Images / build (push) Has been cancelled
Offer Paradee Heart alongside Kokoro voices in the existing bundled TTS
plugin. Default unconfigured settings to Paradee while preserving saved
Kokoro voices, blends, speed and activation choices. Switching engines
replaces the voice selection without a separate plugin or startup dialog.

Add lazy CPU ONNX synthesis with cached, pinned model assets and split
long input without dropping phonemes. Make status and preload follow the
selected engine, and present both engines through the Local TTS UI.

Prepare Paradee dependencies in hooks.py on plugin install/update,
enabled-plugin startup and re-enable. Reuse installed packages, preserve
browser fallback on setup failure and keep requirements.txt unchanged.
Update plugin documentation and regression coverage.

Validation: 44 focused tests passed in both host and Docker framework
runtimes. Live synthesis and voice-picker switching passed on localhost:32081.
git diff --check passed. Fresh-image builds and actual missing-package
installation were not tested.
2026-10-08 21:36:02 +02:00
Alessandro
fe24597a6a Fix plugin precedence in subordinate profile settings
The profile-settings hook merged a priority-first lookup list with
last-value-wins updates, allowing bundled settings to overwrite community
plugins and higher user/project scopes.

Merge plugin-wide settings, bundled profile, plugin profiles, user profile,
project settings and project profile from low to high priority. Use the
existing stable root-priority sort within each plugin layer, preserving
same-root discovery order, activation scope and cached lookup lists.

Add a failing-before/passing-after regression for both plugin layers,
scoped overrides, fallback, malformed settings and profile/MCP inheritance.
Strengthen metadata override tests with community plugins enabled and
update the agent-init contract.

Validation: 207 focused local tests and 18 precedence tests in the Docker
framework runtime passed. Two isolated fresh-context initialization smoke
checks passed in Docker. git diff --check passed.
2026-10-08 16:42:58 +02:00
Alessandro
a4e65d4721 Fix user plugin precedence in provider and profile merges
User-first discovery let last-value-wins merges overwrite community
provider and profile definitions with bundled values. Apply bundled root
groups first in provider loading, profile loading and catalogs, and Agent
Editor metadata.

Share the existing root-priority key and use stable sorting at merge sites,
preserving same-root order and cached lookup lists. Add collision, fallback,
scoped-override and prompt/schema/dispatch regressions, and update DOX.

Validation: 206 focused tests and 17 checks against the bind-mounted Docker
framework runtime passed. git diff --check and helper DOX coverage passed.
2026-10-08 15:51:32 +02:00
Alessandro Frau
573f3c2e05
Merge pull request #1943 from TerminallyLazy/codex/plugin-asset-precedence
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
fix: honor user-first plugin asset precedence
2026-10-08 15:13:04 +02:00
lazy
14c38f4ea7 fix: prioritize user plugin assets over bundled plugins 2026-10-08 05:26:22 -04:00
Alessandro
5a1698ce62 Simplify Browser quick settings and expand browser configuration
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
Keep quick settings focused on the model preset, Host/Container choice,
native page zoom, and installed Chrome extensions. Show a dimmed host
configuration link only in Host mode, and match the Browser and Zoom
labels to the preset label.

Move extension creation, installation, and review into Browser config.
Open Chromium management pages for browsing data, history, passwords,
autofill, extensions, and downloads through the existing Browser surface.
Honor native download folder and save-dialog preferences, and add
annotation screenshots as an opt-in setting that defaults off.

Update the Browser contracts and regression coverage. Validation: 201
browser/tool tests and 29 host-connector tests passed, with the host suite
isolated from existing module stubs. Live checks on localhost:32083
covered settings navigation, runtime selection, zoom, annotation attachments,
download preferences, matching typography, and narrow layouts.
2026-10-08 01:14:08 +02:00
Alessandro
cb93ed055b Fix disappearing chats when Sidebar Folders is disabled
Another plugin could import the disabled folders store, registering a
replacement list view even though the folders UI was absent. This hid
the standard chat and task lists while their data remained intact.

Register view and sorting callbacks when each list extension mounts and
remove them on unmount, preserving other plugins' callbacks. Reuse the
existing component lifecycle hooks without adding work per chat or snapshot.

Add regression coverage for indirect imports, filter cleanup, remounting,
and preservation of other plugins' sorting. Document the lifecycle contract.

Validation: frontend checks and 13 focused pytest tests passed. Live WebUI
checks covered disable/re-enable, folder/flat switching, nested selection,
and component unmount cleanup at localhost:32081.
2026-10-08 00:37:29 +02:00
Alessandro
33b5397023 Polish stop icon with a filled rounded square
Render the shared stop icon as a solid, subtly rounded square using currentColor and CSS clipping. Preserve icon sizing, inherited colors, and the font-loading visibility guard, and document the shared styling contract.

Validation: both WebUI icon tests passed; visually checked the live UI at desktop and mobile sizes in dark and light themes.
2026-10-08 00:22:45 +02:00
Alessandro
186acbc58c Show success feedback when copying OAuth device codes
Reuse the shared button-feedback helper to briefly show a green checkmark after copying a sign-in code, while preserving existing notifications and automatic reset.

Cover successful copies, clipboard failures, and missing codes in the reconnect regression test; update plugin documentation.

Validation: 218 OAuth tests and 3 plugin scan tests passed, along with the Node reconnect test and a live UI check of clipboard contents, success styling, and icon reset.
2026-10-07 23:57:22 +02:00
Alessandro
935fb5cdcc Add context window display controls and price currency selection
Add plugin settings to toggle the full context breakdown and each provider
usage row. Match price typography to the cache and token summary rows.

Keep USD amounts unchanged without exchange-rate requests. Convert non-USD
prices using validated Frankfurter rates cached for 24 hours, with dated
tooltips and an explicit USD fallback when a rate is unavailable. Preserve
stored provider usage and back off failed lookups for five minutes.

Validation: 20 context-window plugin tests pass. Verified settings persistence,
EUR price rendering, USD fallback, and exchange-rate lookup against the live
Docker runtime at localhost:32081.
2026-10-07 23:31:54 +02:00
Alessandro
429946fba4 Fix Responses prompt caching in long conversations
Retain each completed local Responses turn's masked extras in result
metadata and replay them at their original boundary. This keeps growing
tool and user turns from discarding cacheable prompt prefixes.

Preserve replay eligibility, secret masking and history summaries, and
include retained extras in Responses compression accounting. Chat
Completions and fallback requests retain their existing behavior.

Validation: 238 targeted tests passed in the framework runtime. A live
GPT-6.1 Sol conversation reached 131,099 input tokens with 130,176 cached
(99.3%) on a user follow-up.
2026-10-07 18:18:51 +02:00
Alessandro
5a4b4130b2 Use native LiteLLM routes for core providers
Route Nebius, Venice chat, Z.AI/Coding and OpenRouter embeddings through
LiteLLM's native integrations. Retain the Token Factory and Coding endpoint
overrides, OpenRouter attribution, and Venice/proxy embedding fallbacks.
Keep Cerebras and Z.AI model-list URLs in listing metadata while allowing
LiteLLM to supply inference defaults and Copilot request headers.

Merge YAML-declared extra_body defaults, legacy top-level values and explicit
nested overrides in the shared provider-default loader. This preserves saved
Venice settings without provider-specific branches in the model-config plugin.

Validation: 114 focused SDK, API-key, onboarding, model-search and preset tests
passed in the port-32081 framework runtime with LiteLLM 1.104.0. Native routes
were checked over loopback HTTP without paid provider calls; the restarted
service returned HTTP 200 and loaded the updated provider definitions.
2026-10-07 15:30:09 +02:00
Alessandro
b91384f4fb Upgrade LiteLLM and OpenAI with framework startup migration
Update LiteLLM to 1.104.0, OpenAI to 2.54.0, and python-dotenv to 1.2.2.
Raise shared security floors for aiohttp, anyio, urllib3, filelock, fsspec,
and multidict while retaining the compatible OpenAI 2.x SDK line.

Use the existing startup_migration hook to apply the same requirements to
v2.x Docker instances updating to v2.14. Read versions from requirements.txt,
install only when requirements are unmet, and reuse restart_process() to
load the upgraded SDKs before serving requests. Skip current and non-Docker
environments, bound installation time, and propagate installation failures.

Add installed-SDK HTTP tests for Chat Completions, Responses, streaming,
tools, state, usage, fallback, embeddings, and Anthropic cache markers.
Cover dependency migration, restart behavior, and installation failures.

Validation:
- 70 focused dependency, SDK, and self-update tests passed.
- Docker startup upgraded the v2.0-v2.13 SDK pins and became healthy in
  24 seconds, with exactly one dependency installation and process restart.
- An already-current startup performed no installation or extra restart.
- pip check passed; live Codex Responses and Moonshot Chat Completions
  tasks and follow-ups validated the upgraded SDK versions.
2026-10-07 14:50:32 +02:00
Alessandro
e3269ed6d1 chore(oauth): pin Codex client version to 0.160.1
Update the default Codex client version from 0.159.2 to 0.160.1 for upstream request headers and model catalog discovery. Document explicit pinning for each adopted version while preserving saved settings overrides.

Validation: 90 tests passed across tests/test_oauth_codex.py and tests/test_plugin_scan_prompt.py; git diff --check passed.
2026-10-07 13:08:57 +02:00
Alessandro
52744fe7b1 Fix sidebar folder lag during activity and focus updates
Replace repeated full-context family scans with a fresh parent-child index shared within each grouping and filter pass.

Retain unchanged configuration, ordering, project lists and rendered sections to avoid unnecessary sidebar reconciliation. Preserve reactive row metadata, nested family pins, sorting, filters and collapse behavior without a persistent cache.

Add frontend regressions and document the state-identity contracts. Verified the frontend suite, 33 focused Python tests and 17 live browser checks. In a local 274-chat sample, median activity updates fell from about 67 ms to 15 ms; unchanged focus refreshes produced zero sidebar DOM mutations.
2026-10-06 21:31:33 +02:00
Alessandro
27b7df8917 Restore full-response repeat checks for native 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
Compare public commentary together with canonical function calls when
recording and checking the previous response. This restores the historical
full-message policy for native turns, so changed or missing commentary
can distinguish otherwise identical calls.

Keep canonical call history, masking, provider metadata and state
advancement intact. Exclude provider IDs and separate reasoning from the
comparison; identical public text and calls remain guarded.

Cover commentary changes and absence, call changes and batches, provider
metadata round trips, and legacy thoughts/headline behavior. Update the
owning contracts. Verified with 177 passing tests, four recorded Mac
warning replays and a live two-call drill using the Codex II preset.
2026-10-06 18:49:30 +02:00
Alessandro
ad5bebbea5 Send complete SSH commands without blocking the event loop
Paramiko Channel.send can accept only part of a command. Ignoring its byte
count truncated large inputs, including heredocs whose closing delimiters
never reached the shell.

Use sendall through asyncio.to_thread and route shell initialization through
the same send path. Close the SSH connection when an in-flight send is
cancelled so partial input cannot contaminate later commands. Cancellation
intentionally discards that SSH session and its shell state.

Add regressions for multi-packet Unicode delivery and blocked-window
responsiveness/cancellation, and document the SSH send contract.

Validation: 24 focused tests passed. Real Paramiko transport and container
OpenSSH probes delivered complete large single/nested heredocs and preserved
shell state across terminal, Python and Node.js calls. No local TTY, prompt
readiness, tool-dispatch, or platform-specific heredoc workaround changes.
2026-10-06 18:49:30 +02:00
Alessandro
95ba588abc Fix native Windows TTY cleanup
Choose graceful or forced termination inside the existing process helper so
Windows never evaluates the POSIX-only SIGKILL constant. Pass SIGTERM to
pywinpty.kill(), whose native API requires an explicit signal argument.
Keep POSIX process-group TERM-then-KILL escalation and cleanup unchanged.

Cover normal close, forced escalation, kill, and destructor cleanup with a
Windows-shaped process adapter. All 22 focused TTY/pager tests pass, and a
native Windows 11 probe verifies state preservation, destructor termination,
fresh-shell close, and normal asyncio shutdown.
2026-10-06 18:49:30 +02:00
Alessandro
c58061f0ee Keep terminal I/O from blocking shared event loops
Use nonblocking POSIX PTY reads and buffered, cooperative writes so a full
terminal or stale readiness notification cannot stall other chats. Discard
a shell on cancellation only while command bytes remain unsent, preserving
shell state after a fully drained send.

Use best-effort synchronous destruction instead of reentering asyncio;
explicit close retains the existing awaited cleanup and signal escalation.

Add isolated regression checks for payload integrity, loop responsiveness,
partial and complete-send cancellation, descriptor reuse, cross-thread
cleanup, and destruction. Document the terminal lifecycle contracts.

Validation: 28 focused terminal, parallel-lifetime, and pager tests passed.
Four real Codex II chats also completed concurrent Linux terminal, Python,
and Node workloads with 29.87 seconds of overlap and intact shell state.
2026-10-06 18:49:30 +02:00
Alessandro
4dceb49211 fix(computer-use): start host sessions on the first action
Some checks failed
Build And Publish Docker Images / plan (push) Has been cancelled
Build And Publish Docker Images / build (push) Has been cancelled
Start a missing chat session and resume the requested desktop action within
the same tool call. Limit recovery to one session-required response on the
same host and context, preserving approval checks and explicit session IDs.

Update host prompts to begin with an observation and add Linux X11/XWayland
guidance for verified focus, viewer scaling, popup handling, slow input,
and visual verification. Keep the internal Docker/Xpra desktop separate.

Validation: 26 Core prompt/metadata checks passed locally and in the live
framework environment; 42 focused connector tool tests passed. Native GUI
acceptance was not rerun because host Computer Use was disabled.
2026-10-02 18:03:32 +02:00
Alessandro
60c940fd03 fix(model-config): detect Claude models across providers
Some checks failed
Build And Publish Docker Images / plan (push) Has been cancelled
Build And Publish Docker Images / build (push) Has been cancelled
The Anthropic thoughts-prompt hook previously activated only when the
provider or model name contained "anthropic". Claude models exposed by
third-party or OpenAI-compatible providers without that identifier
therefore missed the prompt adaptation.

Extend the existing detection with a case-insensitive "claude" match
in the effective main model name, regardless of provider. Preserve the
existing "anthropic" match in either the provider or model name.

Keep the public-action-summary substitutions and prompt scope unchanged.
Preserve shared prompt templates, the thoughts JSON field, saved history,
custom wording, and native protocol projection. Do not change transport
error handling or suppress provider content-policy errors.

Add regression coverage for Claude-only model names across OpenRouter,
OpenAI-compatible, Vertex AI, Bedrock, and generic providers, plus mixed
case and negative cases. Update the plugin contract and README.

Validation:
- Reproduced five failing Claude-only cases before the fix.
- Passed 99 targeted prompt, model-config, and onboarding tests using
  /opt/venv-a0/bin/python.
- Passed git diff --check.

Live A0 API/provider behavior was not retested; this fixes the detection
gap but does not establish that every provider refusal is resolved.
2026-09-30 19:03:54 +02:00
Alessandro Frau
421730f118
Merge pull request #1736 from RemyLoveLogicAI/dev-workflow/1731-litellm-reasoning-fallback
Rebased onto ready and resolved the transport conflict, including the missing closing parenthesis. Preserves current reasoning filtering and tool-call handling. Includes focused regression coverage and documentation; 126 tests passed.
2026-09-30 16:48:20 +02:00
Alessandro
2715fed8f8 test(models): cover Chat Completions reasoning fallback
Cover streaming and complete messages, legacy-field precedence, empty or missing reasoning, and encrypted-reasoning filtering. Document the transport contract.

Validation: transport, Responses architecture, encrypted-reasoning, and refusal suites passed (126 tests); git diff --check passed.
2026-09-30 16:47:56 +02:00
Jeremy Jones
9aca3adbb8 fix: add reasoning field fallback in ChatCompletionsTransport.parse (#1731) 2026-09-30 16:47:28 +02:00
Alessandro
af74550409 fix(oauth): pin Codex client version to 0.159.2
Update the bundled Codex version used for upstream request headers and model discovery from 0.155.1 to 0.159.2.

Clarify that blank version overrides probe the installed CLI and do not discover new releases. Saved settings continue to take precedence.

Validation: 221 OAuth and plugin scan tests passed. The live runtime resolved 0.159.2 after updating its saved override, and model discovery returned 11 models.
2026-09-30 16:18:38 +02:00
Alessandro
50832e0229 Persist sidebar project, status, and activity filters
The sidebar saved View and Sort by, but kept Project, Status, and Last activity
only in memory. Reloading reset those three controls to their defaults.

Store the filters in the existing Sidebar Folders configuration and reuse its
save/load API. Preserve the empty No project value, apply safe defaults to
missing or malformed settings, and keep the menu open when changing filters.
Changing view or sort retains the selected filters.

Update defaults, documentation, and frontend regression coverage for saving,
reloading, fallback values, and menu behavior.

Validation: frontend checks and seven focused Python tests passed. Live native
dropdown checks confirmed named-project and No-project selections survive
reloads, including after changing view and sort. Original runtime settings
were restored afterward.
2026-09-30 16:13:10 +02:00
Alessandro
f4700b4256 Track direct subordinate execution with its own context task
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
Direct delegation awaited the child's monologue without assigning a task to
its separate context. Child chats therefore appeared idle while working and
could not be stopped independently through the normal context controls.

Run direct delegation through the child's existing AgentContext.run_task and
await its result. Propagate caller cancellation to the child, while treating
a child-only Stop as a recoverable error for the parent. Preserve inline
execution for legacy shared-context agents and existing parallel job ownership.

Add lifecycle coverage for direct and nested completion, failure, parent/child
Stop, intervention, and legacy execution. Update profile test doubles and the
tool's ownership documentation.

Validation: 121 focused checks passed; the nine lifecycle cases also passed
in the container framework runtime. Live UI checks verified Working/Paused
transitions, child reuse, completion, and parent recovery after child-only Stop.
2026-09-30 15:55:03 +02:00
Alessandro
c550092b6d Fix chat activity timestamps at the history write boundary
History writes updated Agent.last_message, while sidebar snapshots and saved
chats read AgentContext.last_message. Continuing a chat could therefore leave
its activity timestamp unchanged.

Update the context timestamp in the shared history writer. Preserve explicitly
supplied timestamps across initialization hooks so greeting history does not
make restored chats appear newly active.

Add regression coverage for user, AI, tool, and warning messages in parent and
child contexts, including serialization and continued activity after reload.
Document ownership of the activity timestamp.

Validation: 15 focused tests passed, plus the new regression in the container's
framework runtime. Two live UI messages advanced Thread+ activity timestamps
while preserving creation time; saved JSON and the reloaded UI matched.
2026-09-30 15:41:18 +02:00
gf239
b8905741d0 Reload model presets before the preset editor opens
The preset editor builds its draft as soon as it renders. The store's
loaded flags stay set after the first open, so later opens showed the
previous preset list and fell back to Default when the requested preset
was new. Saving that stale draft deleted presets created elsewhere:
another tab, the API, or a plugin.

Reload the global presets and resolve the initial preset in an
open_modal_before hook, so every open starts from fresh data, including
/presets, which opens the modal without openPresetEditor(). The modal
now appears after that reload; the editor still renders at once from the
fresh store data, so its footer stays pinned.

Verified with a behavioural regression test and the full suite (2171
passed, including the new test; the same 5 failures as 0efb0d4f).

Fixes #1928

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 02:29:59 +00:00
Alessandro
0efb0d4f8f Improve scheduler prompt editing and support optional YAML
Some checks failed
Build And Publish Docker Images / plan (push) Has been cancelled
Build And Publish Docker Images / build (push) Has been cancelled
Give task prompts full-width, resizable fields and an expanded view in
the shared modal stack. Preserve drafts on failed saves and keep actions
in the pinned footer.

Honor the selected initial task state and inherit only the active chat's
project. Support existing tasks.yaml files through the existing helpers,
with JSON remaining the default and taking precedence. Do not migrate
existing task files or change scheduler execution logic.

Validation:
- 28 focused scheduler, timezone, and tool-contract checks passed.
- 8 checks passed in the Docker framework runtime.
- Live desktop/mobile creation, editing, deletion, and storage checks.
2026-09-24 00:59:39 +02:00
Alessandro
50db781a4d Reduce browser startup and rendering overhead
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
Avoid starting Chromium for empty tab listings while preserving saved-tab
restoration. Honor navigation readiness without redundant load waits or
fixed pauses, and let WebUI navigation return at document commit.

Skip automatic history screenshots for inspection, evaluation, and batches
containing only those actions. Read page metadata in one evaluation and
report the actual loading state. Reuse the native viewer display size when
no resize is requested, preventing page zoom from enlarging and clipping
frames during navigation.

Update browser documentation and regression coverage. Validated 194 browser
regression/output tests and 29 host-browser tests in separate runs, plus
live WebUI navigation, pointer input, screenshots, and repeated reloads.
Local test-page medians improved from 474 to 83 ms for navigation and from
82 to 19 ms for content reads.
2026-09-23 23:38:37 +02:00