# a-fig/accordion architecture

> Architecture diagram of the GitHub repository a-fig/accordion, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-04). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/a-fig/accordion
- Repository: https://github.com/a-fig/accordion

## Overview

Accordion is a pi extension with a SvelteKit map UI: it parses or receives live agent context, presents it for inspection and steering, then applies reversible folds under shared rules. The extension owns live-session state and conductor execution; the UI mirrors that state and communicates through the live protocol. Conductors propose edits, while the shared engine enforces protection, locks, digests, and wire-safe updates. The README documents five strategies and browser/desktop, discovery, multi-session, and agent-recall capabilities. Some UI and live wiring is unsampled, so those links are included only where documented or indexed.

Main entry points: [`extension/accordion.ts`](https://github.com/a-fig/accordion/blob/main/extension/accordion.ts) (pi extension), [`core/conductor/contract.ts`](https://github.com/a-fig/accordion/blob/main/core/conductor/contract.ts) (Conductor contract), [`core/conductor/registry.ts`](https://github.com/a-fig/accordion/blob/main/core/conductor/registry.ts) (Conductor registry), [`core/conductor/liveHost.ts`](https://github.com/a-fig/accordion/blob/main/core/conductor/liveHost.ts) (Conductor host)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Map and controls"]
  node_map["Context map<br/>[ContextMap.svelte]"]
  node_appstate["Reactive session store<br/>[store.svelte.ts]"]
  node_session["Session parsing<br/>[session.svelte.ts]"]
  node_liveui["Live session UI<br/>[registry.ts]"]
end

subgraph group_live["Live extension"]
  node_extension["pi extension<br/>[accordion.ts]"]
  node_livehost["Conductor host<br/>[liveHost.ts]"]
  node_protocol["Live protocol<br/>[protocol.ts]"]
end

subgraph group_engine["Shared context engine"]
  node_truth[("Canonical context state<br/>[truth.ts]")]
  node_wire["Message wire bridge<br/>[wire.ts]"]
  node_ops["Edit operations<br/>[ops.ts]"]
  node_digest["Fold digests<br/>[digest.ts]"]
  node_locks["Involvement locks<br/>[locks.ts]"]
  node_tokens["Token estimation<br/>[tokens.ts]"]
end

subgraph group_conductors["Conductor strategies"]
  node_registry["Conductor registry<br/>[registry.ts]"]
  node_contract["Conductor contract<br/>[contract.ts]"]
  node_aged["Aged summary strategy"]
  node_compaction["Naive compaction"]
  node_handoff["Handoff strategy<br/>[handoff.ts]"]
  node_doorman["Doorman strategy<br/>[doorman.ts]"]
  node_thermo["Thermocline strategy<br/>[thermocline.ts]"]
  node_policy["Thermocline policy<br/>[policy.ts]"]
  node_triptych["Triptych strategy<br/>[triptych.ts]"]
end

node_person(("User / agent operator"))
node_pi(("pi session"))
node_model(("Completion model"))

node_person -->|"steers context"| node_map
node_map -->|"reads and edits"| node_appstate
node_session -->|"loads session"| node_appstate
node_pi -->|"provides session"| node_extension
node_extension -->|"maintains state"| node_truth
node_extension -->|"maps messages"| node_wire
node_extension -->|"serves clients"| node_protocol
node_extension -->|"registers strategies"| node_registry
node_extension -->|"hosts strategies"| node_livehost
node_livehost -->|"reads and writes"| node_truth
node_livehost -->|"implements"| node_contract
node_livehost -->|"requests completion"| node_model
node_map -->|"reads steering status"| node_liveui
node_registry -->|"uses interface"| node_contract
node_compaction -->|"reuses strategy base"| node_aged
node_handoff -->|"reuses strategy base"| node_aged
node_thermo -->|"uses policy"| node_policy
node_aged -->|"implements strategy"| node_contract
node_thermo -->|"implements strategy"| node_contract
node_triptych -.->|"implements strategy"| node_contract
node_doorman -.->|"implements strategy"| node_contract
node_truth -->|"applies edits"| node_ops
node_truth -->|"derives folded content"| node_digest
node_digest -->|"estimates digest size"| node_tokens
node_protocol -->|"sanitizes edit requests"| node_ops
node_extension -->|"supports discovery and sessions"| node_liveui
node_person -->|"recalls folded context"| node_extension
node_registry -->|"registers strategy"| node_doorman
node_registry -->|"registers strategy"| node_compaction
node_registry -->|"registers strategy"| node_handoff

click node_map "https://github.com/a-fig/accordion/blob/main/app/src/lib/ui/map/ContextMap.svelte"
click node_appstate "https://github.com/a-fig/accordion/blob/main/app/src/lib/engine/store.svelte.ts"
click node_session "https://github.com/a-fig/accordion/blob/main/app/src/lib/session.svelte.ts"
click node_liveui "https://github.com/a-fig/accordion/blob/main/app/src/lib/live/registry.ts"
click node_extension "https://github.com/a-fig/accordion/blob/main/extension/accordion.ts"
click node_livehost "https://github.com/a-fig/accordion/blob/main/core/conductor/liveHost.ts"
click node_protocol "https://github.com/a-fig/accordion/blob/main/core/protocol.ts"
click node_truth "https://github.com/a-fig/accordion/blob/main/core/truth.ts"
click node_wire "https://github.com/a-fig/accordion/blob/main/core/wire.ts"
click node_ops "https://github.com/a-fig/accordion/blob/main/core/ops.ts"
click node_digest "https://github.com/a-fig/accordion/blob/main/core/digest.ts"
click node_locks "https://github.com/a-fig/accordion/blob/main/core/locks.ts"
click node_tokens "https://github.com/a-fig/accordion/blob/main/core/tokens.ts"
click node_registry "https://github.com/a-fig/accordion/blob/main/core/conductor/registry.ts"
click node_contract "https://github.com/a-fig/accordion/blob/main/core/conductor/contract.ts"
click node_aged "https://github.com/a-fig/accordion/blob/main/conductors/in-process/agedSummaryConductor.ts"
click node_compaction "https://github.com/a-fig/accordion/blob/main/conductors/in-process/compaction-naive/compaction-naive.ts"
click node_handoff "https://github.com/a-fig/accordion/blob/main/conductors/in-process/handoff/handoff.ts"
click node_doorman "https://github.com/a-fig/accordion/blob/main/conductors/in-process/doorman/doorman.ts"
click node_thermo "https://github.com/a-fig/accordion/blob/main/conductors/ws/thermocline/thermocline.ts"
click node_policy "https://github.com/a-fig/accordion/blob/main/conductors/ws/thermocline/policy.ts"
click node_triptych "https://github.com/a-fig/accordion/blob/main/conductors/ws/triptych/triptych.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_map,node_appstate,node_session,node_liveui,node_person toneBlue
class node_extension,node_livehost,node_protocol toneAmber
class node_truth,node_wire,node_ops,node_digest,node_locks,node_tokens toneMint
class node_registry,node_contract,node_aged,node_compaction,node_handoff,node_doorman,node_thermo,node_policy,node_triptych toneRose
class node_pi,node_model toneIndigo
```

## Components

### Map and controls

- [Context map](https://github.com/a-fig/accordion/blob/main/app/src/lib/ui/map/ContextMap.svelte): `app/src/lib/ui/map/ContextMap.svelte`
- [Reactive session store](https://github.com/a-fig/accordion/blob/main/app/src/lib/engine/store.svelte.ts): `app/src/lib/engine/store.svelte.ts`
- [Session parsing](https://github.com/a-fig/accordion/blob/main/app/src/lib/session.svelte.ts): `app/src/lib/session.svelte.ts`
- [Live session UI](https://github.com/a-fig/accordion/blob/main/app/src/lib/live/registry.ts): `app/src/lib/live/registry.ts`

### Live extension

- [pi extension](https://github.com/a-fig/accordion/blob/main/extension/accordion.ts): `extension/accordion.ts`
- [Conductor host](https://github.com/a-fig/accordion/blob/main/core/conductor/liveHost.ts): `core/conductor/liveHost.ts`
- [Live protocol](https://github.com/a-fig/accordion/blob/main/core/protocol.ts): `core/protocol.ts`

### Shared context engine

- [Canonical context state](https://github.com/a-fig/accordion/blob/main/core/truth.ts): `core/truth.ts`
- [Message wire bridge](https://github.com/a-fig/accordion/blob/main/core/wire.ts): `core/wire.ts`
- [Edit operations](https://github.com/a-fig/accordion/blob/main/core/ops.ts): `core/ops.ts`
- [Fold digests](https://github.com/a-fig/accordion/blob/main/core/digest.ts): `core/digest.ts`
- [Involvement locks](https://github.com/a-fig/accordion/blob/main/core/locks.ts): `core/locks.ts`
- [Token estimation](https://github.com/a-fig/accordion/blob/main/core/tokens.ts): `core/tokens.ts`

### Conductor strategies

- [Conductor registry](https://github.com/a-fig/accordion/blob/main/core/conductor/registry.ts): `core/conductor/registry.ts`
- [Conductor contract](https://github.com/a-fig/accordion/blob/main/core/conductor/contract.ts): `core/conductor/contract.ts`
- [Aged summary strategy](https://github.com/a-fig/accordion/blob/main/conductors/in-process/agedSummaryConductor.ts): `conductors/in-process/agedSummaryConductor.ts`
- [Naive compaction](https://github.com/a-fig/accordion/blob/main/conductors/in-process/compaction-naive/compaction-naive.ts): `conductors/in-process/compaction-naive/compaction-naive.ts`
- [Handoff strategy](https://github.com/a-fig/accordion/blob/main/conductors/in-process/handoff/handoff.ts): `conductors/in-process/handoff/handoff.ts`
- [Doorman strategy](https://github.com/a-fig/accordion/blob/main/conductors/in-process/doorman/doorman.ts): `conductors/in-process/doorman/doorman.ts`
- [Thermocline strategy](https://github.com/a-fig/accordion/blob/main/conductors/ws/thermocline/thermocline.ts): `conductors/ws/thermocline/thermocline.ts`
- [Thermocline policy](https://github.com/a-fig/accordion/blob/main/conductors/ws/thermocline/policy.ts): `conductors/ws/thermocline/policy.ts`
- [Triptych strategy](https://github.com/a-fig/accordion/blob/main/conductors/ws/triptych/triptych.ts): `conductors/ws/triptych/triptych.ts`

### Other components

- **User / agent operator**
- **pi session**
- **Completion model**

## Connections

- User / agent operator → Context map: steers context (evidence: `README.md`)
- Context map → Reactive session store: reads and edits (evidence: `app/src/lib/ui/map/ContextMap.svelte`)
- Session parsing → Reactive session store: loads session (evidence: `app/src/lib/session.svelte.ts`)
- pi session → pi extension: provides session (evidence: `README.md`)
- pi extension → Canonical context state: maintains state (evidence: `extension/accordion.ts`)
- pi extension → Message wire bridge: maps messages (evidence: `extension/accordion.ts`)
- pi extension → Live protocol: serves clients (evidence: `extension/accordion.ts`)
- pi extension → Conductor registry: registers strategies (evidence: `extension/accordion.ts`)
- pi extension → Conductor host: hosts strategies (evidence: `extension/accordion.ts`)
- Conductor host → Canonical context state: reads and writes (evidence: `core/conductor/liveHost.ts`)
- Conductor host → Conductor contract: implements (evidence: `core/conductor/liveHost.ts`)
- Conductor host → Completion model: requests completion
- Context map → Live session UI: reads steering status (evidence: `app/src/lib/ui/map/ContextMap.svelte`)
- Conductor registry → Conductor contract: uses interface (evidence: `core/conductor/registry.ts`)
- Naive compaction → Aged summary strategy: reuses strategy base (evidence: `conductors/in-process/compaction-naive/compaction-naive.ts`)
- Handoff strategy → Aged summary strategy: reuses strategy base (evidence: `conductors/in-process/handoff/handoff.ts`)
- Thermocline strategy → Thermocline policy: uses policy (evidence: `conductors/ws/thermocline/thermocline.ts`)
- Aged summary strategy → Conductor contract: implements strategy (evidence: `conductors/in-process/agedSummaryConductor.ts`)
- Thermocline strategy → Conductor contract: implements strategy (evidence: `conductors/ws/thermocline/thermocline.ts`)
- Triptych strategy → Conductor contract: implements strategy
- Doorman strategy → Conductor contract: implements strategy
- Canonical context state → Edit operations: applies edits (evidence: `core/ops.ts`)
- Canonical context state → Fold digests: derives folded content (evidence: `core/truth.ts`)
- Fold digests → Token estimation: estimates digest size (evidence: `core/digest.ts`)
- Live protocol → Edit operations: sanitizes edit requests (evidence: `core/protocol.ts`)
- pi extension → Live session UI: supports discovery and sessions (evidence: `README.md`)
- User / agent operator → pi extension: recalls folded context (evidence: `README.md`)
- Conductor registry → Doorman strategy: registers strategy (evidence: `core/conductor/registry.ts`)
- Conductor registry → Naive compaction: registers strategy (evidence: `core/conductor/registry.ts`)
- Conductor registry → Handoff strategy: registers strategy (evidence: `core/conductor/registry.ts`)
