diff options
Diffstat (limited to 'GLOSSARY.md')
| -rw-r--r-- | GLOSSARY.md | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/GLOSSARY.md b/GLOSSARY.md index 4ca083c..70660d9 100644 --- a/GLOSSARY.md +++ b/GLOSSARY.md @@ -30,6 +30,8 @@ | **vision** (capability) | Whether a model can natively accept image input (multimodal). On the wire as `ModelMetadata.vision?: boolean` (`GET /models` `modelInfo[name].vision`). `true` (e.g. any `kimi/*` model) → image chunks are passed through to the provider natively. Absent/`false` (e.g. `umans/glm-5.2`) → the server's **vision handoff** gives the model a numbered placeholder + the `consult_vision` tool. The FE shows a vision badge in the model picker; it does NOT decide handoff (server-owned). | multimodal, image support | | **vision handoff** | The server-owned mechanism by which a NON-vision model still reasons about a pasted image. A non-vision model gets a NUMBERED PLACEHOLDER text chunk alongside the persisted `image` chunk, then calls the `consult_vision` tool (which opens a NEW conversation tab with a vision-capable model, attaches the image + question, and returns the vision model's answer). The persisted user message keeps the original `image` chunk (the FE renders it) AND the placeholder text. When a vision-capable model has more than `imageLimit` images in history, image **compaction** transcribes the oldest to `[Compacted image]: <description>` text chunks (the `image` chunk stays for rendering). All these are regular `text` chunks — the FE renders them as-is. Distinct from a vision-capable model, which receives the image natively. | image transcription, vision relay | | **consult_vision** | A tool available to all models that defers image analysis to a vision-capable model: it opens a NEW conversation tab (with a vision model, e.g. Kimi), attaches the image (by `imageIds` from a pasted placeholder, or by `path` from disk) + a `question`, and returns the conversation id + the vision model's answer (suggesting the dispatch CLI for follow-ups). Replaces the former `read_image` tool. Rendered generically like any tool call/result (by `toolName`). | read_image (former), vision tool | +| **Named Agent** | A user-curated, persisted model preset: a friendly `name` bound to one canonical `<provider-or-credential>/<model>` identifier (`NamedAgent` = `{ id, name, model }`). NOT a running agent or conversation — it is configuration. Editable in a sidebar view; drives the synthetic "Named Agents" provider in the model picker + the `list_agent_models`/`summon_agent` agent tools. Global user config (not per-workspace). | preset, model shortcut, aliased model | +| **Named Agent snapshot** | The `NamedAgentSelectionSnapshot` (`{ namedAgentId, namedAgentName, model }`) a conversation retains when it was selected via a Named Agent. `model` is the raw provider/model the conversation uses; the id/name freeze HOW it was selected so later edits/removal of the shared Named Agent do NOT retroactively change an existing conversation (plan §7). Absent for a raw-model selection. | frozen selection, selection record | ## Frontend-specific | Term | Meaning | Aliases to avoid | @@ -41,6 +43,7 @@ | **surface catalog** | The list of available surfaces (metadata) the FE fetches to discover them (`GET /surfaces`). | capability manifest | | **view** | RESERVED — the old-Dispatch sidebar affordance (settings / feature views); a FUTURE FE concept, NOT a surface. | (do not reuse) | | **tab** | A FE workspace slot in the tab strip that *references* one open conversation — holds its `conversationId`, the selected **model name**, and a derived title. Distinct from the conversation itself (the backend thread): closing a tab forgets it LOCALLY (drops the slot + evicts its FE cache); the conversation persists server-side. Open tabs + the active tab are persisted locally. | (do not conflate with **conversation**) | +| **subagent group** / **tab group parent** | The tab grid's purely VISUAL nesting: a tab whose `tabGroupParentId` (backend-owned, EFFECTIVE value — an explicit user override, else the lineage `parentConversationId`) names another open tab renders inside that tab's subagent group (a darker box; the group parent's card is double-width). Users regroup via the tab menu (right-click / touch-and-hold) → `PUT /conversations/:id/tab-group`; synced by `conversation.tabGroupChanged`. Never affects lineage, manageability or agent behaviour. | (do not conflate with lineage **parentConversationId**) | | **feature module** | A self-contained FE feature (chat, history explorer, …); feature-as-a-library, composed at the root. | — | | **composition root** | The single place (`src/app/`) that imports + wires feature modules + the surface host. | — | | **surface interpreter** | The generic renderer: field kind → component. Knows kinds, never surface ids. | — | @@ -50,4 +53,5 @@ | **unload** | Drop the oldest COMMITTED chunks from the in-memory transcript (and DOM) past the **chat limit** — in BULK (`ceil(limit/4)` per pass, deferred while the reader is scrolled up), never one-per-delta (old Dispatch's scroll-jump bug). Purely local: the IndexedDB cache and the server keep everything; `TranscriptState.hiddenBeforeSeq` is the watermark. Distinct from the conversation-cache's cross-conversation **eviction**. | evict (reserved for the cross-conversation cache), prune, drop | | **show earlier** | The affordance at the top of a transcript with unloaded history ("Show earlier messages"): pages one unload-unit back in — local cache first, then the server (CR-5 `?beforeSeq=&limit=`) when the cache doesn't reach far enough back — preserving the reader's scroll position. Offered whenever the loaded window starts above seq 1 (the [email protected] 1-based gap-free seq contract). | load more, pagination | | **workspaces** | A URL-driven grouping of conversations that owns a **default cwd**. The root path `/` lists workspaces; `/<id>` opens one (visiting a nonexistent id creates it — create-on-miss). Each conversation belongs to exactly one workspace; the always-present `"default"` workspace is the fallback for unassigned/legacy conversations. Tabs are scoped per workspace (filtered client-side). Backend-owned (`[email protected]` `Workspace`); a conversation's cwd inherits `workspace.defaultCwd` when its own is unset. Distinct from the per-conversation cwd+LSP module (`features/cwd-lsp`, formerly `features/workspace`). | project, space | -| **starred** | A workspace flag (`Workspace.starred: boolean`, defaults `false`) that grants its agents PRIORITY in the concurrency limiter queue — they jump ahead of agents from non-starred workspaces, oldest-agent-first within each group. Takes effect immediately for already-queued agents (backend-owned). Toggled via dedicated `PUT`/`DELETE /workspaces/:id/star` endpoints (no body; create-on-miss; `PUT /workspaces/:id` does NOT accept `starred`). The FE sorts starred workspaces to the top of the home list (the display echo of their concurrency priority) and toggles optimistically with error revert. | favorited, pinned (and do NOT call it "priority" — priority is the EFFECT, starred is the FLAG) | +| **starred** | A workspace flag (`Workspace.starred: boolean`, defaults `false`) that grants its agents PRIORITY in the concurrency limiter queue — they jump ahead of agents from non-starred workspaces, oldest-agent-first within each group. Takes effect immediately for already-queued agents (backend-owned). Toggled via dedicated `PUT`/`DELETE /workspaces/:id/star` endpoints (no body; create-on-miss; `PUT /workspaces/:id` does NOT accept `starred`). The home grid renders starred workspaces with a tint (the display echo of their concurrency priority); the FE toggles optimistically with error revert. | favorited, pinned (and do NOT call it "priority" — priority is the EFFECT, starred is the FLAG) | +| **home tile** | One workspace's cell on the home page's Win8-Start-style **tile grid** (`features/workspaces`, branch `feature/win8-tiles-home`) — NOT the layout feature's nested split-tree tile (`features/layout` TileRoot). Rendered from an orientation-independent persisted layout (localStorage `dispatch.workspaces.tiles`: `{ version: 1, tiles: [{ id, colSpan, rowSpan, order }] }` — manual order + requested spans only, NEVER positions): `geometryFor(width, height)` picks WIDE (4 fixed ~120px rows, column-wise flow, 4×2 span cap) or TALL (2 columns, row-wise flow, 2×2 cap), and `pack` re-derives every position (the only order→coordinates transform). Spans render-clamped per geometry; the persisted span is untouched. Drag-to-reorder edits the ORDER; resize uses an insert-table picker; a tile's click opens the workspace, right-click/long-press selects it (action bar). | (do not conflate with the layout split-tree tile), card | |
