Keep shared API serialization strict while converting legacy NumPy consolidation scores in the memory dashboard response.
Add regressions for native relevance scores and legacy dashboard metadata without mutating stored documents.
Carry delayed recall results across prompt objects without crossing profile, project, or memory-store scope, and reuse one query embedding across the memory and solution searches.
Expose every bundled memory operation to native Responses models and cover the recall, vector-search, and prompt contracts with regressions.
Store the replacement summary as non-assistant context so provider normalization does not discard it as an orphaned assistant turn.
Cover the compaction-to-history contract with a regression test.
Add a bundled context-window plugin with a composer usage ring, responsive breakdown popover, token counts, percentages, and free-space reporting.
Keep accounting plugin-owned, reuse existing history token counts, cache bounded prompt fragments by content, and expose independent mobile and desktop visibility controls.
Reuse one normalized settings snapshot only while Agent.prepare_prompt builds a prompt, then restore normalize-on-read behavior immediately.
Keep the canonical get_settings function unchanged while prompt-building callers explicitly avoid repeated Git and default resolution.
Expose extension slots beside the model/profile strip and at the end of Interface visibility controls.
Let plugin stores register responsive visibility defaults without coupling shared WebUI components to a specific affordance.
Memory consolidation stores FAISS relevance scores (numpy scalars) in
document metadata. The values get pickled into the docstore and crash
json.dumps with 'Object of type float32 is not JSON serializable' in
helpers/api.py for handlers that return full metadata. Coerce scores to
native floats at the source and serialize responses with default=float.
Install matching Xpra client packages and carry Kali rolling's ATK introspection package into snapshot-based image builds.
Repair self-updated containers by installing the complete Xpra and GTK stack at the installed Xpra version.
Add a Goal mode action to the composer popover that prefills the /goal command, focuses the input, and leaves sending to the user. Cover the prefill-only behavior with a focused plugin test.
Preserve completed SSE output items when the final Codex response envelope omits them so non-streaming utility calls retain their generated text. Add focused regression coverage for the native output-item path.
Keep generic Responses tool schemas provider-neutral and apply the strict text-only response contract at the Codex OAuth request boundary.
Preserve tool-policy filtering by tightening only an already-advertised response tool, with focused regression coverage for both generic and Codex paths.
Ship the built-in ACP session bridge with an editor-hosted A0 CLI transport and a startup migration that removes retired a0_acp installations and scoped overrides.
Persist Browser tab ownership and URLs in the shared KVP store, migrate an existing Chromium session once, and restore tabs automatically for per-chat and shared scopes without showing Chromium's crash advisory.
Add composer-style microphone and arrow controls to the annotation dialog while preserving draft-versus-send voice behavior.
Keep dependency reconciliation, cache migration, and Chromium installation under the Browser hook's single setup lock. Remove the redundant nested installer lock from the Playwright helper.
Route every chat through one persistent Chromium, Xvfb, and Xpra runtime while keeping tab ownership and per-chat limits context-bound.
Share sign-ins across chats, adopt the first requesting legacy profile on upgrade, and close only the owning chat's tabs during reset or removal.
Keep separate and shared tab-strip modes as visibility choices and cover cross-context access, popups, screenshots, startup ownership, and cleanup.
Keep tab loading feedback stable and visible while the interactive Browser starts without waiting for a redundant screenshot.
Add DOM hover feedback, multi-page annotation batches, compact composer-style controls, and shared Whisper draft or send behavior.
Activate the selected Browser preset after the first Browser tool call so follow-up model turns use it.
Clear the temporary override at monologue end and preserve the main model as the safe fallback.
Render the existing Patchright page through an isolated, authenticated Xpra session with CDP screencast and snapshot fallbacks.
Keep Chromium out of fullscreen, synchronize native viewport resizing across canvas and modal handoffs, and remove Xpra decoration and shadow-cursor artifacts.
Move loading feedback into each Browser tab while reserving the footer for actual errors.
Run Chromium headful through Patchright on a private Xvfb display while keeping Agent Zero's page helpers in Patchright's isolated world.
Reconcile the pinned Patchright package and matching architecture-specific Chromium from Browser plugin hooks so fresh Docker images and self-updated installations converge on the same runtime.
Use the shared toast action row and primary button classes for the Test in new chat action. Remove the plugin-specific link styling and cover the shared markup in the focused WebUI regression test.
Replace the legacy guided-profile instructions with screenshot-led Easy and Advanced editor workflows, project availability, and A0 CLI creation.
Document sparse YAML, Markdown, and JSON overrides for identity, prompts, Tool and MCP policy, Skills visibility, and model presets. Refresh adjacent guides and remove obsolete screenshots.
The live desktop renders in an iframe (.office-desktop-frame). Canvas resize is
driven by a global pointermove from the left-edge handle; shrinking sweeps the
cursor across the iframe, which captures the event and freezes the drag. Disable
hit-testing on the frame while right-canvas-resizing is set on <body>.
Time Travel keeps a hidden git repository per workspace under
/a0/usr/.time_travel/workspaces/<id>/repo.git and snapshots on every file
change, but ships no retention: nothing deletes a shadow repository when its
chat or project is removed (chat_remove never touches .time_travel), there is
no delete/prune endpoint in the API or web UI, and a workspace whose 'git add'
ever exceeds GIT_TIMEOUT_SECONDS strands repo.git/index.lock, failing every
later snapshot with 'index.lock: File exists'. Observed on a live instance:
518 shadow repositories / 12 GB, most belonging to long-deleted chats, plus a
permanently wedged workspace.
This adds a throttled retention sweep driven from job_loop:
- Orphans: live workspace paths (project folders, the configured workdir,
per-chat workdirs) are forward-enumerated and hashed with the existing
workspace_id_for derivation; a shadow directory matching none of them is
unreachable from the UI forever and is removed after a grace window.
- Optional age-out: retention_max_age_days (default 0 = keep forever) removes
a live workspace's history when it has had no snapshot in N days. Time
Travel lazily re-initializes an empty history on the next snapshot, so this
is always safe for the feature.
- Stale locks: repo.git/index.lock older than retention_stale_lock_minutes is
removed (git subprocesses are killed at GIT_TIMEOUT_SECONDS, so no
legitimate lock lives that long), un-wedging future snapshots.
- Corrupt-repo set-asides (repo.git.invalid*) past the grace window.
Deletion is refused for any path outside the shadow root. Settings render in
the existing plugin-config pattern (default_config.yaml + webui/config.html,
settings_sections: agent): enable toggle, sweep interval, age-out days,
orphan grace, stale-lock age. Durable evidence lives next to the workspaces
dir: retention.json (running totals + last sweep stamp) and retention.log
(one JSON line per sweep naming everything removed, tail-capped at 1000).
Sweeps run in a worker thread off the event loop, at most one in flight,
default every 6 hours.
Tests: tests/test_time_travel_retention.py (config defaults/clamps, the full
sweep matrix, keep-forever default, disabled no-op, deletion guard, marker
accrual, per-sweep history + cap, throttle, and workspace_id_for parity).
Route remote document downloads through the existing public-only HTTP fetcher so direct and redirected non-public destinations are rejected while public redirects, request headers, proxy isolation, retries, timeouts, and size limits remain intact.
Add focused CVE-2026-4308 regression coverage for private targets and genuine public-fetch compatibility.
Document the optional ui, agent, and api caller context for plugin configuration hooks. Clarify the api default, backwards compatibility, explicit backend opt-in, and that caller context is not an authorization boundary.
Temporarily stash tracked plugin edits while updating. Restore the original checkout and edits if the update cannot reapply them, and surface the conflict beside the Update button. Add isolated Git regression coverage for merge, no-op, and conflict cases.
Add hour-aware output to the shared duration formatter while preserving existing seconds and minutes formatting. Reuse it for the goal elapsed counter and cover both formats with a focused regression test.
Publish goal revisions through the shared state monitor and refresh the Goal UI only when the selected chat or goal state changes.
Keep the local elapsed-time clock, remove recurring API requests, and cover the state-push contract with focused regressions.
Keep profile catalog reads lightweight by detecting sparse editor overrides without building removal plans for every agent.
Use the chat snapshot refresh as the single switch trigger and share concurrent same-context catalog requests while preserving newest-context-wins behavior.
Bring the useful community enhancements into the built-in plugin with a current American voice catalog, speed controls, and in-memory weighted blending while preserving existing voice and speed configuration.
Reuse the singleton Kokoro pipeline, validate blend inputs, show resolved ratios in status views, and cover the native flow with focused regression tests.
Co-authored-by: twilso24 <122656888+twilso24@users.noreply.github.com>
Bundle the five-harness migration workflow under the _migrate_agents namespace, including preview/import safeguards, tests, documentation, WebUI assets, and the corrected upload modal behavior.
Use Agent Zero's blue accent for the active On, Default, or Off segment so the selected permission state is immediately visible in Easy and Advanced modes.
Give Tool Access, Pin to Top, Chat Naming, and Agent Editor distinct 256px artwork aligned with the existing dark plugin gallery. Optimize every JPEG below 20 KB for fast plugin-list rendering.
Let project- or agent-scoped plugins open the shared settings surface even without a custom form. Tool Access can now reach existing scoped configurations while inert Save and Reset actions remain hidden.
Humanize MCP catalog labels with their server names while preserving canonical IDs. Suppress skill discovery prompts when skills_tool is unavailable and move the behaviour_adjustment prompt under the Memory plugin so disabling its implementation also removes its instructions.
Register /permissions in the commands plugin and route WebUI invocations to the current profile's Agent Editor. Reject the internal utility profile and cover discovery plus emitted editor payloads.
Reuse the standard panel and neutral border treatment for active segmented states in Easy and Advanced modes. Remove the editor-specific blue tint and inset outline while preserving a clear selected state in both themes.
Base reset visibility on the sparse removal plan, preserve unrelated profile files, and surface completion feedback without waiting for model-profile refreshes.
Keep saved preset controls and fresh-chat selection synchronized across global and project scopes, including the shared sidebar context race, with focused regressions and updated DOX.
Give Tools, MCPs, and Skills explicit default switches with segmented per-item policy controls while preserving sparse overrides. Simplify Advanced prompt editing around the full-height ACE surface and align the editor contracts and regression coverage.
Centralize omission of the internal default profile in the shared presentation catalog and keep status reporting intact for existing chats. Align Settings, model-switcher, Connector, Telegram, and selector contracts with focused regressions.