Change log ********** Significant deliveries across Agency repos (newest first). Backlog lives in ``agency-workspace/todo/`` — do not mix the two. **Entry format:** a date heading, then one block per delivery titled with the repos it touched and its date, followed by a short prose summary of what changed and why. No commit SHAs — an entry cannot carry the SHA of the commit that adds it, and a follow-up commit to stamp one is not worth the noise; use ``git log`` when you need the exact revision. Skip routine submodule pointer bumps unless they mark a coordinated release. Build HTML: ``./run document`` → *Change log* in Sphinx. 2026-08-28 ========== agency-ui · agency-django · agency-server · 2026-08-28 3D desktop is an FPS helm, not orbit. Triple glass 2 · 1 · 3 (default curve 70°), world origin at the center pane's bottom edge, seated eye ``{0, -400, 72}``. Space = mouselook + pointer lock (no RMB look). WASD walks; wheel is head height; Ctrl crouches from the current Y. Room is a red floor, two green walls, and one sky plane behind the glass — no desk slab. Stream Deck (apps / helm / log) sits in front of the center pane. Windows carry ``screen`` and hop on release past a hinge; chrome is free in Y. Options **Border zoom** dollies the view near the browser frame. Map: agency-ui#26. 2026-08-27 ========== agency-ui · agency-django · agency-server · 2026-08-27 3D desktop is a penthouse office (street window, desk, virtual glass). Camera is first-person: WASD walks, right-drag or hold Space looks (also over windows — no browser menu). The **3D Interface** window still holds the gizmo. Bot does not move the camera. agency-ui · agency-django · agency-server · 2026-08-27 3D stage applies a real perspective fan: off-center windows tilt toward the vanishing point; the focused one stays almost frontal and comes forward. Window chrome is 90% opaque (title, border, and minimized body). agency-ui · agency-django · agency-server · 2026-08-27 2D minimize shelves windows into a top-right column (quarter viewport width, stacked from the app bar). If the stack does not fit, the whole column scales instead of scrolling. Min / restore / maximize animate. 3D minimize stays a bottom carousel. agency-ui · agency-django · agency-server · 2026-08-27 Drawer chrome: a tools row under the header holds light/dark, mosaic, 3D stage, and a labeled Install button. Those controls leave the app bar (immersive still has min / mosaic / restore / close). Mosaic is not on window title bars. Theme and 3D stay neutral; Install is the only primary-colored control in that row. agency-ui · agency-django · agency-server · 2026-08-27 Window chrome: wheel on maximize changes CSS ``pose.scale`` 5% about the cursor (persisted on F5). Mosaic tiles every open window (carousel included) in a CCTV grid — 2 = split, 4 = 2×2, 5 = 1+4, up to 16 — with the active window in the featured pane. agency-ui · agency-django · agency-server · 2026-08-27 Structured ``pose`` (numbers only; Vue writes one CSS transform) and a thin 3D DSM stage. Chrome pose lives on ``windowsStore`` + the desktop snapshot, not overlay. ``desktop.projection`` is ``flat`` or ``perspective`` (drawer toggle). Open windows stay frontal; minimize on the stage is a bottom carousel. Public-scene pose is reserved for Displays (#22). agency-ui · agency-django · agency-server · 2026-08-27 Bot panels persist a ``UIDocument`` (``/api/ui/panels/``). The palette is the registered schema types; ``create_panel`` / ``patch_panel`` / ``open_panel`` compose and open ``panel.{uuid}``. Reconnect reads REST — the panel does not evaporate with the socket. agency-ui · agency-django · agency-server · 2026-08-27 ``UINode`` is a closed union: missing types (``table``, ``agent-chat``, ``task-progress``, ``lobby-chat``) are in the contract; ``isValidNode`` rejects Vuetify names; ``vue-tsc`` is required CI. Django ``KNOWN_UI_TYPES`` is the same palette. agency-ui · agency-django · agency-server · 2026-08-27 Live UI overlay: ``disabled`` (and the closed live set) is ``entity_id → attrs``, not a patch of the schema tree. The bus projector writes the overlay; reconnect rehydrates ``GET /api/ui/overlay/``. Window geometry stays in ``windowsStore``. agency-ui · agency-django · agency-server · 2026-08-27 UI address space: schema nodes carry ``channel`` + ``uuid`` (and children only ``name``). ``entity_id`` is the Agency Bus topic — no Vue↔path map, no composed channel on the child, no addressing by children index. ``UiRenderer`` injects the prefix; Django emits the same fields (``agency.ui.address``, boot desktop + pinned fixture). agency-django · agency-server · agency-ui · 2026-08-27 **Ephemeral public rooms** (``RoomConsumer``) and **Lobby UI**: WebSocket path ``/channel/room//`` for real-time chat without DB history. Group ``room-``. Auth required (close code 4401 for anonymous). Presence broadcasts unique authenticated users on join/leave. ASGI route in ``framework/server/asgi.py``. UI: ``lobby-chat`` schema type (``AgencyLobbyChat``), singleton window address ``lobby``, desktop icon ``AgencyDesktopLobbyIcon`` with presence badge, Pinia ``lobbyRoom`` store with reconnect backoff. 2026-08-26 ========== agency-django · agency-ui · 2026-08-26 **Users explorer** (staff-only): list / detail split-pane for managing user accounts, preferences, and group assignments. Accessible from the drawer under Configuration (visible only to staff). Components: ``user-explorer`` schema type, ``AgencyUserExplorer`` Vue component, ``users`` Pinia store. Tabs: **Profile** (username, email, name, flags, metadata), **Preferences** (workspace, agent, language, timezone, voice), **Groups** (multi-select chips). Requires backend staff API. agency-django · 2026-08-26 **Staff API** for the Users explorer: new REST endpoints under ``/api/`` requiring ``is_staff=True``. ``/api/users/`` (GET, PATCH) lists and updates User objects; ``/api/users//`` retrieves/updates a specific user; ``/api/users//prefs/`` (GET, PATCH) gives staff access to any user's preferences; ``/api/groups/`` (GET, POST, PATCH) manages auth groups. User fields exposed: ``id``, ``username``, ``email``, ``first_name``, ``last_name``, ``is_active``, ``is_staff``, ``is_superuser``, ``groups``, ``date_joined``, ``last_login``. Password hashes are never exposed. Non-staff users receive **403 Forbidden** on all staff endpoints. agency-django · agency-server · 2026-08-26 Google OAuth production login (``https://agency.nabla.net``). The SPA login page shows **Continuar con Google** (POST ``/accounts/google/login/`` with CSRF) as the primary action; username/password is behind a dev toggle. allauth URLs mount at ``/accounts/`` before the SPA catch-all; callback is ``/accounts/google/login/callback/``. ``boot.py`` syncs ``Site.domain`` from ``DJANGO_ALLOWED_HOSTS`` (or explicit ``DJANGO_SITE_DOMAIN``). ``DJANGO_SECURE_SSL=true`` enables ``ACCOUNT_DEFAULT_HTTP_PROTOCOL='https'`` for TLS-terminated nginx. Production requires a stable ``DJANGO_SECRET_KEY`` shared by all containers (OAuth state lives in the session). ``LoggingSocialAccountAdapter`` logs OAuth errors to ``system.log``. First-admin promotion: on fresh installs with zero superusers, the first Google login is promoted to staff/superuser; ``DJANGO_SUPERUSER_EMAILS`` allowlists additional emails. Host wiring: adapter calls ``maybe_promote_user`` on login; boot calls ``promote_allowlisted_users()``. Helpers and ``promote_superuser`` command in ``agency.auth.staff``. Password bootstrap (``admin/1234``) remains dev-only. agency-server · agency-workspace · 2026-08-26 Veronica's operator entry stays the desktop Agent Face (open ``secretary``). The planned app-bar nabla toggle is cancelled: when an Agent needs attention under covering windows, use the popup stack (``secretary.notify``, HITL, tasks), not a permanent shell button. Backlog: todo 20 Phase 6 + ``todo/next``. 2026-08-25 ========== agency-django · agency-ui · agency-server · 2026-08-25 Veronica can smile on request: ``set_face_expression`` publishes ``agent..face.changed``; the parametric Agent Face (South Park–style discrete eyes and talk mouth) renders it in the chat topbar and desktop icon. agency-django · agency-server · 2026-08-25 Personal Thread chat with image attachments now lists every saved ``photo_id`` (and Media now_playing when relevant) so Veronica calls ``edit_image`` with all references — Kontext multi — instead of only the car on Media. agency-django · agency-ui · agency-server · 2026-08-25 Veronica's window is a persistent personal Thread now, not the ephemeral agent-test socket. One active conversation per user and Agent; **New conversation** archives the previous timeline. REST ``/api/thread/`` is the source of truth, ``/channel/`` projects committed messages, and MCP ``ask_agent`` uses the same service. Mission dispatch from that chat still creates a new Execution Thread and records ``origin_*`` metadata. agency-ui · agency-server · 2026-08-25 Window chrome is one bar: ``AgencyChromeBar`` at 40px, same button type as Veronica Image / Speak. Explorers, secretary chat, execution chat, and Media share it. Light/dark colours live in ``agency-ui/src/theme/agency.ts``. agency-ui · agency-server · 2026-08-25 Agents, Missions, and Tools match Photos chrome: Filter in the list, selected title on the left, run actions on the right (Chat / Agent+play / Sync icon) with hide-detail last. Tools ficha is Properties / Help (Help is a read-only pre). New / Delete / Save sit under the split. agency-django · agency-ui · agency-server · 2026-08-25 Sending two Photos on Veronica no longer kills the agent socket. Daphne's default 1 MiB WebSocket cap closed the connection (1006) before the consumer ran — the UI just showed ``Connected to agent: Veronica`` again. Library drops now send ``photo_ids`` (server reads the files). Daphne ``--websocket_max_message_size`` is 16 MiB for remaining PC base64 drops. agency-django · agency-server · 2026-08-25 ``edit_image`` can compose several Photos into one picture. Drop the robot and the motorcycle on Veronica (up to 4), caption in Spanish or English, Send. She calls ``edit_image`` with ``photo_ids`` and an English prompt. That hits FAL ``fal-ai/flux-pro/kontext/max/multi`` (data URIs — localhost ``/media/`` is not fetchable). One photo still uses LoRA img2img + Comfy fallback. Compose needs ``FAL_KEY``; no local fallback. Existing Veronica instructions are create-only — Sync from code so the tool Help is current. agency-ui · agency-server · 2026-08-25 Photos is a split explorer: origin select in the top bar (like Missions' agent field), list filter, hideable Image / Data detail, Media icon on the chrome. Drag a photo onto Veronica's chat (Chrome dragover now sees the Agency kind MIME). Drop onto the wallpaper pins a thumbnail; drag that onto chat the same way. agency-ui · agency-server · 2026-08-25 Dropping an image on Veronica (icon or chat) attaches it to compose: preview + caption, then Send — it does not go to Media. Media's blue drop outline no longer sticks after a drop (nested window/player hover). agency-ui · agency-server · 2026-08-25 Media has a Download button for the current image. Drag-and-drop uses the same dotted addresses as Agency Bus: ``file.image`` from the PC onto ``desktop.media`` uploads to Photos and plays; onto ``desktop.photos`` it only uploads. Photos list items are ``photo.`` and play on Media. A drop publishes ``.drop.accepted`` so other surfaces can see where it landed. agency-django · agency-ui · agency-server · 2026-08-25 Each Agent has a TTS ``Voice`` (provider + key; Piper catalog seeded at boot). Agent chat and mission auto-speak use that voice. User Options now groups **UI** (theme, language, timezone), **RAG** (workspace), and **Preferences** (active agent + system voice for grave OS lines / speaking as the operator). ``UserPreferences`` also stores ``active_thread``. Legacy ``ttsVoice`` Piper keys still PATCH to the system voice. agency-django · agency-ui · agency-server · 2026-08-25 Veronica can edit the picture on Media. ``edit_image`` takes an English prompt and optional ``photo_id`` / ``strength`` (default 0.35). Empty ``photo_id`` uses the operator now-playing (Photos clicks persist via ``PUT /api/me/media/``; ``show_media`` remembers the same slice). FAL ``flux-lora/image-to-image`` first, then local ComfyUI SD 1.5 img2img. Source aspect is kept (long side ≤ 1024); FAL gets ``{width, height}``, not a square enum. The result is a new Photos row shown on Media — not a txt2img redraw. agency-django · agency-ui · agency-server · 2026-08-25 Agency Map is a desktop window (``map`` schema type): dark **Aire** tiles at low zoom, satellite past 13, a flying cursor with cosine easing, and an optional **Satellite** split pane (lat/lng/alt). Veronica opens it with ``open_window(window='map')``. No Google Maps key — Leaflet + Carto/Esri. Fleet geo (zones, displays-on-map) remains todo 32. agency-django · agency-ui · agency-server · 2026-08-25 System → Info has three sibling collapsibles: **Versions** (Agency), **Inference** (Ollama + NVIDIA GPUs, ComfyUI version from ``/system_stats`` when deployed), and **System** (closed: Host + Python). agency-django · agency-ui · agency-server · 2026-08-25 AgencyMedia is a singleton desktop player (images + YouTube) so Veronica can put media on the operator chrome without a kiosk. ``show_media`` publishes ``desktop.media.now_playing.changed`` and opens the window. Explorer folders Uploads / Generated, letterboxed stage, sidebar header preview (video icon for YouTube — the iframe exists only while Media is visible). Chat thumbs and Photos → Open in Media send the same player. agency-django · agency-ui · agency-server · 2026-08-25 Veronica opens desktop windows over Agency Bus (``desktop.
.visibility.changed``) instead of legacy ``ui.update``. ``open_window`` takes chrome aliases, a Display name (live preview), or a View name (editor). Fantasy display wallpaper no longer loops asking which kiosk: it generates, opens Photos/Displays (or the named preview), and waits. ``LoopDecision.wait`` defaults to operator if the supervisor omits the wait object. agency-django · agency-ui · agency-server · 2026-08-25 System → Info **Versions** is a collapsible: Agency, Ollama (GPUs nested), System, Python. A GPU snapshot line is written to ``system.log`` when it changes. System → Logs SSE is an ops feed (errors, tracebacks, restarts, GPU) with backfill — not live DEBUG. Unhandled Django 500s go to ``django.request`` → ``system.log``. agency-django · agency-ui · agency-server · 2026-08-25 If Ollama is unreachable or only serves embeddings, uncustomized Veronica (and Help / Viewwright) bind to ``gpt-4o-mini`` instead of a dead local model. GPU-back on the next boot restores Ollama. The System window has an **Info** tab: Linux / Python / Django / LangChain versions and NVIDIA GPUs as seen by Ollama (not the WSGI container). agency-django · agency-ui · agency-server · 2026-08-25 The FAL provider seeds image endpoints ``fal-ai/flux-lora`` (FLUX.1 [dev] with LoRAs) and ``fal-ai/flux/schnell``. ``generate_image`` can pin ``model=fal-ai/flux-lora``; otherwise ComfyUI still goes first. Secrets stay in ``FAL_KEY``. Those rows are image models, not chat — the Agent picker hides them. agency-django · agency-ui · agency-server · 2026-08-25 Providers have an explicit **kind** (Ollama, OpenAI, FAL, OpenAI-compatible) and ``api_key_env`` (the variable *name* only). Boot seeds OpenAI with ``gpt-4o-mini`` / ``gpt-4o`` so an Agent can run ChatGPT when ``OPENAI_API_KEY`` is in Compose. Sync uses Ollama ``/api/tags`` or OpenAI ``/v1/models``; FAL is skip. Explorers expose kind, key-present, temperature, and a provider-prefixed model picker. Secrets stay in the environment. agency-django · agency-ui · agency-server · 2026-08-25 Agency is an **installable PWA** (Nabla mark). The operator desktop ships a web app manifest and a root-scoped service worker that precaches hashed Vite assets and ``/offline.html``. Public ``/health/`` exposes ``boot_id`` / ``ui_build``: if the channel drops the SPA shows a wait overlay; if the process identity changed it pops a restart notice and reloads. Same ``boot_id`` only rehydrates. Not a full offline OS — API and sockets stay live. agency-django · agency-ui · agency-server · 2026-08-25 Catalog deltas are canonical Agency Bus envelopes. Django ``Catalog.emit`` publishes ``..catalog.`` on the ``users`` group; the browser adapter is gone. Leftover ``monitor_event`` / ``catalog_changed`` frames are ignored so they cannot double-apply. Presence was already on this path; conversation, HITL, ``secretary.notify`` and tasks still use the inbound ``if/else``. agency-django · agency-ui · agency-server · 2026-08-25 Displays and Views can be **protected** (padlock in the explorers). Agents refuse assign / ``show_image_on_display`` / template edits on a locked resource, and they no longer spray a generated wallpaper onto every kiosk — only the screen the operator named, or a newly commissioned view. Templates compose with ```` (shipped **Clock + photo**). DisplayView namespaces were already ``display.example.*`` / ``display.view.*``. agency-django · agency-server · 2026-08-25 Example mission **Fantasy display wallpaper** (``mission.example.fantasy_wallpaper``): loop that asks Veronica to ``generate_image`` a 1024×768 cinematic fantasy landscape (ComfyUI). Apply with ``show_image_on_display`` only when the operator named a screen — never every kiosk. Continue for another variant; “basta” completes. agency-django · agency-server · 2026-08-25 Veronica can draw color pictures through ComfyUI: ``generate_image`` (default 768×768, max 1024) saves to Photos and can assign a kiosk. Dock icons stay on ``generate_agency_icon`` (128×128 white glyphs). Photo negatives no longer ban color or photography. agency-django · agency-server · 2026-08-25 ``import_display_image`` no longer saves Wikipedia File: HTML as a fake JPEG (nginx then served it as ``image/jpeg`` and the kiosk showed a broken image). Bytes are sniffed; Wikimedia File:/Archivo: pages rewrite to Special:FilePath. agency-django · agency-ui · agency-server · 2026-08-25 Secretary can see in-flight work: ``list_running_work`` / ``get_operator_context`` report running executions and ``wait_for_execution`` pauses (shared across chat windows). Mission-run popups auto-dismiss on success and are reconciled after task-channel reconnect, so container restarts no longer leave a sticky “Mission running…”. Display kiosks and previews reconnect with backoff, send heartbeats, and rehydrate the HTTP snapshot; a Display stays online while any session is still heartbeating. agency-django · agency-ui · agency-server · 2026-08-25 New DisplayViews use namespace ``display.view.*``; the description field stores the operator prompt that generated the template. Veronica calls ``commission_display_view`` (name + prompt) and waits — via LangGraph interrupt, not a worker sleep — for the shipped Viewwright specialist to fill HTML/CSS/JS. ``wait_for_execution`` is the generic form. ``Agent.deep`` / ``create_deep_agent`` remains in-process and is not used for this handoff. Shipped kiosk template **Clock** (``display.example.clock``). ``inspect_displays`` leads with next actions so the secretary cannot stop after a catalog dump. 2026-08-24 ========== agency-django · agency-server · 2026-08-24 Agents can operate kiosks through ``agency.tools.display``: inspect screens and templates, publish a View, assign it with a Scope, mutate live properties, import an image into Photos, or ``show_image_on_display`` as the Media image shortcut. Veronica ships with these tools. Names and slugs are enough; the LLM never builds Channels group names. agency-ui · agency-django · agency-server · 2026-08-24 Display property events stay on the scope channel (``display-scope-*``). Sibling pickers missed the selected thumb because the iframe SDK dropped ``property`` messages before ``subscribe``, and the runtime discarded a whole frame when ``scope_revision`` looked stale. Last-value replay plus per-property revision; ``display-{id}`` stays assignment-only. agency-ui · agency-django · agency-server · 2026-08-24 Displays explorer is screens-only. Each display has Preview / Properties / View tabs: live iframe, name + full-width scope, nested view list with check and pencil. Assignment Save / Delete match other explorers. PATCH and DELETE on ``/api/displays//``. Display templates moved to the Views window (``display-view-explorer``). Admin inlines properties on a scope. agency-ui · agency-django · agency-server · 2026-08-24 Display previews reload when the assignment changes. Opening a screen before assigning a template used to stick on ``No assignment``; property deltas also never arrived because the socket had not joined the scope group. ``display.assignment.changed`` now rehydrates the snapshot and follows the new scope. agency-django · agency-server · 2026-08-24 Example display templates **Media image** and **Media picker** share scope ``image_url`` (nabla-link kiosk / photo-library pair). Billboard reads ``/media`` from the property; the picker lists ``GET /api/photo/`` and ``set``\s the path so every assigned kiosk updates. Boot is create-only by name; picker listing needs an Agency session cookie. agency-ui · agency-server · 2026-08-24 Maximizing a desktop window no longer remounts its body. Explorers (Agents, Missions, Tools, Photos) were re-running ``onMounted`` and jumping back to the first list row. Immersive chrome still hides the in-window title bar. agency-django · agency-server · 2026-08-24 Tool icons map each catalog leaf to a concrete pictogram (``analog clock``, ``pocket calculator``) before SD 1.5. Spanish labels like ``lista agentes`` were producing noise; the clock worked because it is an object CLIP knows. Comfy seeds are random so a batch in the same second no longer clones one glyph. The tool result prints ``Pictogram:`` plus the SD recipe. agency-django · agency-server · 2026-08-24 Icon gen echoes the actual SD prompt, negative and Comfy checkpoint in the tool result. The CLIP prompt is short and subject-first (SD 1.5's 77-token cap was swallowing the old style dump). ``subject`` is a pictogram, not a verb or tool id. agency-django · agency-server · 2026-08-24 ``generate_agency_icon(tool_id=…)`` resolves unique leaves (``create_agent``, ``create agent``) and, on a miss, lists closest catalog ids instead of a dead-end "not found". ``list_catalog_tools`` filters tools without an icon. Example mission ``Generate tool icon`` (``mission.example.tool_icon``) walks that path. agency-django · agency-server · 2026-08-24 Local GPU image gen via Compose ``comfy`` (ComfyUI + SD 1.5 fp16). ``generate_agency_icon`` calls it first; OpenAI / fal remain fallbacks. UI: http://127.0.0.1:8188. First boot downloads ~2 GB into ``agency_comfy``. agency-django · agency-server · 2026-08-24 ``generate_agency_icon`` no longer invents JSON geometry. An image model draws the PNG (ComfyUI on this Linux stack; Ollama ``x/flux2-klein`` when the runtime supports it; otherwise OpenAI Images or fal FLUX). Pixels are keyed to a 128×128 white-on-transparent dock glyph. agency-django · agency-ui · agency-server · 2026-08-24 Tool catalog ids follow the Python path minus ``agency.`` (``tools.secretary.title_user_photo``). Sync renames legacy short ids and keeps agent M2M. The Tools explorer groups by module. Help is read-only and always the Python docstring (Sync / save refresh it). The LLM still calls the function name — OpenAI/Ollama cannot use dots in tool names. agency-django · agency-server · 2026-08-24 Chat attachments already land in Photos before Veronica looks at them. ``title_user_photo`` lets her set a descriptive title afterwards (latest chat upload by default, user-scoped). ``open_window("photos")`` focuses the library. agency-django · agency-ui · agency-server · 2026-08-24 Operator photo library. Chat vision attaches land on disk at ``/media/uploads/user-/upload/`` (and show as thumbs in the bubble, not ``[image]``). Generated glyphs from ``generate_agency_icon`` also copy into ``…/generated/``. Menu → Photos (and a desktop icon) is the explorer; Open puts the picture on the desktop. agency-ui · agency-django · agency-server · 2026-08-24 Mission Control chrome: one Vuetify background/surface palette and 40px bars (window title, explorer header/footer, System/Help toolbars, tabs). Help/Schema and Missions/Agents use ``agency-split``. Missions put a borderless Agent select + Execute in the header; Agents put Open chat there; New sits in the detail footer. The shell app bar is always flat. Desktop maximize still gets restore in the app bar (mobile: min/close). AG Grid rows match the 22px tree. The shell drawer is the only large tab strip. agency-workspace · agency-django · agency-ui · agency-server · 2026-08-24 Authorship and licence across every root: ``pyproject.toml`` claimed ``authors = [{name = "Agency"}]``, ``package.json`` claimed nobody. Both now name Txema Vicente Segura, and each repo carries a proprietary ``LICENSE`` for the ``Proprietary`` that packaging already declared. Sphinx copyright is a ``2025-`` range instead of a bare current year. agency-django · agency-ui · agency-server · 2026-08-24 Agency Bus VS2: Django emits canonical envelopes. Agent presence (``agent..presence.changed``) is published from the Mission runtime and from chat sessions, and reaches the bus with no adapter. The Agent Face now reflects real work instead of playground timers, is keyed by Agent so two portraits agree, and announces its state as text. ``secretaryFace`` retired. agency-ui · agency-django · 2026-08-24 Desktop maximize uses mobile chrome (app bar title + min/close). Ghost maximized windows no longer vanish. ``UserPreferences`` is on ``/admin/`` and ``/system/`` (clear desktop snapshot action). agency-ui · agency-server · 2026-08-24 Agency Bus VS1: typed envelope, ``*``/``**`` topic matcher and in-memory bus in ``agency-ui/src/bus/``. First slice migrated is ``catalog_changed``, now published as ``..catalog.`` with a projector as the single mutation owner. Field names are ``snake_case`` on the wire and in TypeScript. Backlog: ``todo/36-agency-bus.md``. agency-ui · agency-django · 2026-08-24 Desktop chrome: one System icon (channel + API/telemetry pulses); theme toggle on desktop only; mobile app bar hosts min/close. Maximize keeps the window title bar. Desktop icons no longer duplicate the Menu. agency-ui · 2026-08-24 First desktop icon is the active agent's live ``AgencyAgentFace`` (chrome; opens ``secretary``). Drawer header is operator-only. agency-ui · agency-django · 2026-08-24 ``AgencyAgentFace``: 128×128 agent portrait + CSS overlay (idle blink, thinking eyes shut, South Park jaw when speaking). Agents gain an ``icon`` field; Veronica ships a default face. agency-ui · agency-django · 2026-08-24 Secretary chrome: drawer-header eyes open ``agent-interface`` (active agent chat, Veronica by default). Address ``secretary`` / ``agent.me``. agency-server · 2026-08-24 Docs: Mission Control is the Agents / Missions / Executions desktop app, not the Agency system or the whole web desktop. 2026-08-23 ========== agency-django · agency-server · agency-workspace · 2026-08-23 Permissions Phase 1–3: user-scoped Execution/Interruption REST; ThreadConsumer ownership; corpus ``TenantMembership`` + workspace/document filters; ``development/permissions.rst``. agency-django · 2026-08-23 Standalone pytest CI: eager Celery app (``tests/celery_app.py``) and ``LLM_CONTEXT_WINDOW`` in ``tests/settings.py``. agency-django · agency-ui · agency-workspace · 2026-08-23 Resource namespaces Phase 1: ``namespace`` on Mission/Agent/DisplayView, collapsible explorer groups, fixture backfill; display iframe embed fixes. agency-server · 2026-08-23 CSP ``frame-src`` + referrer policy so display views can embed YouTube (and other https iframes) without Chrome “content blocked”. agency-django · agency-ui · agency-server · 2026-08-23 Example display templates boot seed (Counter demo, YouTube video fixture); Displays sidebar live thumb; catalog card test fixes for loop fields. agency-django · agency-ui · agency-server · 2026-08-23 · 9b63e2d ``agency.display`` VS1–VS2: remote displays, view templates, scope mutate, kiosk URL, Displays explorer + editor; HITL answers in mission chat; Vite imported-chunk CSS fix for SPA shell. agency-django · agency-ui · agency-server · 2026-08-23 Veronica phases 2–3: shipped ``system_key``/content-hash boot upsert, secretary instructions + tools (context, dispatch, desktop, ``open_window``, ``show_notification``), user WS ``agency_frame`` + ``secretary.notify``; example missions Help/Dispatch/Open window; ``documentation/veronica.rst``. agency-django · agency-ui · 2026-08-23 Phase 1 active operator: ``UserPreferences.active_agent``, ``get_active_agent(user)``, ``/api/me/prefs/`` ``activeAgentId``, UI selector, Mission explorer preselect, dispatch fallback; ``tests/test_active_agent.py``. agency-django · agency-ui · agency-server · 2026-08-23 Veronica default agent + example missions (boot seed); loop chat during ``waiting``; ``continue_mission`` re-enters loop evaluation; tutorial ``example-missions``. agency-django · agency-server · 2026-08-23 Mission loop evaluator: inject thread transcript into ``evaluate_loop_decision``; reject placeholder ``next_input``; docs updated. agency-server · 2026-08-23 Mission Control docs: loop use cases, design patterns (supervisor / polling / HITL), Portero & form-confirm examples; technical ``mission-loop`` reference. agency-ui · agency-django · agency-server · 2026-08-23 Mission loop: ``loop_prompt``-derived oneshot/loop missions; structured ``LoopDecision``; Celery ``run_loop_iteration``; Execution iteration state; explorer + execution UI (todo **12**). agency-ui · agency-django · agency-server · 2026-08-23 Vision path: camera Ask agent / Portero watch + agent-test image attach; ``AgentConsumer`` multimodal ``images`` gated on ``Model.vision``; boot seeds **Portero** (todo **11**). agency-ui · agency-django · agency-server · 2026-08-23 Mission Control execution window: conversation + collapsible tool steps, Dev raw panes; follow-up chat via ``POST /api/execution//message/`` (Celery ``continue_mission``). HITL remains channel overlay (todo **10**). agency-server · agency-django · agency-ui · 2026-08-23 TTS voice picker: curated Piper catalog (ES/MX/AR + EN); ``ttsVoice`` in user Options / admin prefs; ``POST /api/voice/tts`` accepts ``voice``. agency-server · agency-ui · 2026-08-23 Voice service ``agency_voice`` (faster-whisper STT + Piper TTS) at ``/api/voice/``; agent test chat mic + optional auto-speak. agency-django · agency-server · 2026-08-23 Help docs retrieval is semantic: singlehtml sections indexed in Chroma ``agency_docs``; ``read_agency_help`` embeds the query (no keyword synonyms). agency-server · 2026-08-23 Document authorship: Txema Vicente Segura / Nabla Soluciones Lógicas, S.L. agency-django · agency-server · 2026-08-23 ``read_agency_help`` tool reads Sphinx singlehtml; boot seeds **Help** agent that uses it to answer documentation questions. agency-ui · 2026-08-23 Drawer: Configuration collapsed by default (like User interface); Help under Knowledge base. agency-ui · 2026-08-23 Bottom-right popup stack: HITL pending as sticky cards (no auto-dialog on hydrate); notable Celery tasks show live progress / success / failure toasts. agency-django · agency-ui · 2026-08-23 Tools catalog explorer with uploadable ``ImageField`` icons; agent ficha assigns tools via icon grid + picker; desktop/menu entry under Configuration. agency-ui · agency-server · 2026-08-23 Centralise explorer form CSS in ``explorer.scss`` (``form-top``, ``form-fill-area``, ``list-toolbar``); document styling contract in ``frontend.rst``. agency-django · agency-ui · 2026-08-23 UI i18n via Django gettext: bootstrap ``locale`` + ``messages``; ``UserPreferences.language``; Vue reload on change. agency-ui · 2026-08-23 Shell i18n (en/es); user window **Options** (workspace, language, theme); remove drawer **Options** entry. agency-ui · 2026-08-23 Move drawer **Sites** into ``user.me`` window (**User** · **Sites** tabs). agency-ui · 2026-08-23 App-bar API / Telemetry icons (CRUD + error, catalog Δ); drawer profile header without status cards. agency-ui · 2026-08-23 Drawer profile header (48px avatar, Channel / Telemetry / REST monitors); remove app-bar user avatar. agency-ui · 2026-08-23 Agency desktop typography: 13px window body, compact explorer fields, icon-only System pane toolbars. agency-ui · 2026-08-23 Shell drawer **Windows** tab lists open windows (desktop + mobile); remove top dock tab strip and mobile taskbar. agency-ui · 2026-08-23 Replace WinBox with native ``AgencyWindowFrame``: floating drag/resize, maximize-as-tab, minimize via store (no WinBox min-strip hacks). 2026-08-22 ========== agency-ui / agency-django · 2026-08-22 Agency desktop ``help`` window: embed Sphinx singlehtml without an iframe. agency-ui / agency-django · 2026-08-22 Agency desktop ``camera`` window: webcam preview with device selector. agency-django / agency-ui · 2026-08-22 User preferences: active corpus workspace + Desktop snapshot (``GET/PATCH /api/me/prefs/``); window addresses ``kind`` / ``kind.ref``. agency-django · 2026-08-22 Rename management admin: ``DataSite`` → ``AgencyAdminSite``, mount ``/data/`` → ``/system/``. agency-server · 2026-08-22 Split Development → UI into ``index`` / ``frontend`` / ``schema`` / ``python`` / ``sites``; document agency-ui component registry. agency-server · 2026-08-22 Remove unused Sphinx ``generated/`` autosummary stubs (excluded from build). agency-server · 2026-08-22 Documentation architecture: single responsibility per surface; slim READMEs; ``changes.rst`` policy (no SHA-only follow-up commits); Sphinx remains canonical technical docs. ``f6ece01`` · agency-server · 2026-08-22 21:24 +0200 Narrative Sphinx docs: Architecture, Tutorials (Agent / Mission / HITL), Development → Processes, Framework **RAG**, Reference caption, Concepts, ``./run document-single``. ``e220848`` · agency-django · 2026-08-22 21:24 +0200 Fix corrupted ``ThreadRunner.invoke`` docstring; README links to Sphinx narratives. ``831b14f`` · agency-server · 2026-08-22 20:05 +0200 Sphinx nav: Framework / Development reorg; consolidate Models/Tools autodoc. ``99e22fe`` · agency-server · 2026-08-22 17:58 +0200 Introduce Sphinx change log and English backlog conventions. ``b2074ea`` · agency-django · 2026-08-22 17:44 +0200 CI coverage gate set to **35%**. ``6e8252e`` · agency-django · 2026-08-22 17:42 +0200 Todo **02** (partial): +34 pytest (encoder, groups, execution/corpus API). ``e91f0cf`` · agency-ui · 2026-08-22 17:42 +0200 Todo **02** (partial): vitest ui store, ``applyAgencyEvent``, execution timeline. ``bc1b697`` · agency-django · 2026-08-22 14:08 +0200 Corpus without ``langchain-community``: ``pypdf`` + ``langchain_ollama``; PDF loader tests. ``d367ae3`` · agency-server · 2026-08-22 14:08 +0200 Docker requirements: removed ``langchain-community``. ``bcf9a2b`` · agency-django · 2026-08-22 13:48 +0200 Private repos CI: standalone ``tests/settings.py``; no ``agency-server`` checkout. ``490e9c5`` · agency-django · 2026-08-22 13:43 +0200 Todo **02/03**: REST permissions, WS reconnect, docker marker, expanded suite. ``8cf2ed3`` · agency-ui · 2026-08-22 13:43 +0200 Vitest api/ws/stores/registry; GitHub Actions CI. ``225a866`` · agency-django · 2026-08-22 13:14 +0200 Todo **01** ✅: ``ThreadRunner`` uses ``agent.model``; ``build_chat_model()``; model tests. ``61ad9e2`` · agency-django · 2026-08-22 (same session) Initial pytest suite: factories, mocked runtime/HITL, Celery eager, CI. ``061c16a`` · agency-server · 2026-08-22 11:26 +0200 Sphinx: WebSockets, User Interface; consolidated DEVELOPMENT. .. note:: Entries before this log are not listed here; each repo's git history remains the full source.