# hewliyang/office-agents architecture

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

- Interactive diagram: https://gitdiagram.com/hewliyang/office-agents
- Repository: https://github.com/hewliyang/office-agents

## Overview

Office Agents is a monorepo of AI chat add-ins for Excel, PowerPoint, and Word, backed by a shared SDK and Svelte chat UI. A user opens an Office task pane, chats with an agent, and the agent uses app-specific tools to inspect or change the active document; settings, sessions, skills, and files support that workflow. The SDK also offers shell/VFS commands, web search and fetch, OAuth, and storage. A local bridge can inspect and invoke a live add-in during development. Unsampled tool families are represented at their source directories; their internal calls are not inferred.

Main entry points: [`packages/excel/src/taskpane/components/app.svelte`](https://github.com/hewliyang/office-agents/blob/main/packages/excel/src/taskpane/components/app.svelte) (Excel task pane), [`packages/powerpoint/src/taskpane/components/app.svelte`](https://github.com/hewliyang/office-agents/blob/main/packages/powerpoint/src/taskpane/components/app.svelte) (PowerPoint task pane), [`packages/word/src/taskpane/components/app.svelte`](https://github.com/hewliyang/office-agents/blob/main/packages/word/src/taskpane/components/app.svelte) (Word task pane), [`packages/core/src/chat/chat-interface.svelte`](https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/chat-interface.svelte) (Chat interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_apps["Office Add-ins"]
  node_excelpane["Excel task pane<br/>[app.svelte]"]
  node_pptpane["PowerPoint task pane<br/>[app.svelte]"]
  node_wordpane["Word task pane<br/>[app.svelte]"]
  node_exceladapter["Excel adapter<br/>[adapter.ts]"]
  node_pptadapter["PowerPoint adapter<br/>[adapter.ts]"]
  node_wordadapter["Word adapter<br/>[adapter.ts]"]
  node_exceltools["Spreadsheet tools"]
  node_ppttools["Slide tools"]
  node_wordtools["Document tools"]
  node_pptx["OOXML utilities<br/>[slide-zip.ts]"]
end

subgraph group_chat["Chat Experience"]
  node_chatui["Chat interface"]
  node_filesui["File panel<br/>[files-panel.svelte]"]
  node_settingsui["Settings panel"]
  node_controller["Chat controller<br/>[chat-controller.ts]"]
end

subgraph group_sdk["Agent SDK"]
  node_runtime["Agent runtime<br/>[runtime.ts]"]
  node_context["Agent context<br/>[context.ts]"]
  node_commands["VFS commands<br/>[custom-commands.ts]"]
  node_search["Web search<br/>[search.ts]"]
  node_storage[("Session storage<br/>[db.ts]")]
end

subgraph group_bridge["Developer Bridge"]
  node_bridgeclient["Bridge client<br/>[client.ts]"]
  node_bridgeserver["Bridge server<br/>[server.ts]"]
  node_bridgecli["Bridge CLI<br/>[cli.ts]"]
end

subgraph group_integration["External Services"]
  node_providers{{"LLM providers"}}
  node_webservices{{"Search providers"}}
end

node_user(("Office user"))
node_office{{"Microsoft Office"}}

node_user -->|"opens"| node_excelpane
node_user -->|"opens"| node_pptpane
node_user -->|"opens"| node_wordpane
node_excelpane -->|"configures"| node_exceladapter
node_pptpane -->|"configures"| node_pptadapter
node_wordpane -->|"configures"| node_wordadapter
node_excelpane -->|"renders"| node_chatui
node_pptpane -->|"renders"| node_chatui
node_wordpane -->|"renders"| node_chatui
node_exceladapter -->|"creates"| node_exceltools
node_pptadapter -->|"creates"| node_ppttools
node_wordadapter -->|"creates"| node_wordtools
node_ppttools -.->|"uses"| node_pptx
node_chatui -.->|"delegates"| node_controller
node_controller -->|"invokes"| node_runtime
node_excelpane -->|"creates"| node_context
node_pptpane -->|"creates"| node_context
node_wordpane -->|"creates"| node_context
node_context -->|"loads"| node_commands
node_commands -->|"calls"| node_search
node_search -->|"queries"| node_webservices
node_runtime -.->|"connects"| node_providers
node_runtime -.->|"persists"| node_storage
node_exceladapter -.->|"reads and writes"| node_office
node_pptadapter -.->|"reads and writes"| node_office
node_wordadapter -.->|"reads and writes"| node_office
node_excelpane -->|"starts in development"| node_bridgeclient
node_pptpane -->|"starts in development"| node_bridgeclient
node_wordpane -->|"starts in development"| node_bridgeclient
node_bridgecli -.->|"controls"| node_bridgeserver
node_bridgeclient -.->|"connects"| node_bridgeserver

click node_excelpane "https://github.com/hewliyang/office-agents/blob/main/packages/excel/src/taskpane/components/app.svelte"
click node_pptpane "https://github.com/hewliyang/office-agents/blob/main/packages/powerpoint/src/taskpane/components/app.svelte"
click node_wordpane "https://github.com/hewliyang/office-agents/blob/main/packages/word/src/taskpane/components/app.svelte"
click node_exceladapter "https://github.com/hewliyang/office-agents/blob/main/packages/excel/src/lib/adapter.ts"
click node_pptadapter "https://github.com/hewliyang/office-agents/blob/main/packages/powerpoint/src/lib/adapter.ts"
click node_wordadapter "https://github.com/hewliyang/office-agents/blob/main/packages/word/src/lib/adapter.ts"
click node_exceltools "https://github.com/hewliyang/office-agents/tree/main/packages/excel/src/lib/tools"
click node_ppttools "https://github.com/hewliyang/office-agents/tree/main/packages/powerpoint/src/lib/tools"
click node_wordtools "https://github.com/hewliyang/office-agents/tree/main/packages/word/src/lib/tools"
click node_pptx "https://github.com/hewliyang/office-agents/blob/main/packages/powerpoint/src/lib/pptx/slide-zip.ts"
click node_chatui "https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/chat-interface.svelte"
click node_filesui "https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/files-panel.svelte"
click node_settingsui "https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/settings-panel.svelte"
click node_controller "https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/chat-controller.ts"
click node_runtime "https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/runtime.ts"
click node_context "https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/context.ts"
click node_commands "https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/vfs/custom-commands.ts"
click node_search "https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/web/search.ts"
click node_storage "https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/storage/db.ts"
click node_bridgeclient "https://github.com/hewliyang/office-agents/blob/main/packages/bridge/src/client.ts"
click node_bridgeserver "https://github.com/hewliyang/office-agents/blob/main/packages/bridge/src/server.ts"
click node_bridgecli "https://github.com/hewliyang/office-agents/blob/main/packages/bridge/src/cli.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_excelpane,node_pptpane,node_wordpane,node_exceladapter,node_pptadapter,node_wordadapter,node_exceltools,node_ppttools,node_wordtools,node_pptx,node_user toneBlue
class node_chatui,node_filesui,node_settingsui,node_controller toneAmber
class node_runtime,node_context,node_commands,node_search,node_storage toneMint
class node_bridgeclient,node_bridgeserver,node_bridgecli toneRose
class node_providers,node_webservices,node_office toneIndigo
```

## Components

### Office Add-ins

- [Excel task pane](https://github.com/hewliyang/office-agents/blob/main/packages/excel/src/taskpane/components/app.svelte): `packages/excel/src/taskpane/components/app.svelte`
- [PowerPoint task pane](https://github.com/hewliyang/office-agents/blob/main/packages/powerpoint/src/taskpane/components/app.svelte): `packages/powerpoint/src/taskpane/components/app.svelte`
- [Word task pane](https://github.com/hewliyang/office-agents/blob/main/packages/word/src/taskpane/components/app.svelte): `packages/word/src/taskpane/components/app.svelte`
- [Excel adapter](https://github.com/hewliyang/office-agents/blob/main/packages/excel/src/lib/adapter.ts): `packages/excel/src/lib/adapter.ts`
- [PowerPoint adapter](https://github.com/hewliyang/office-agents/blob/main/packages/powerpoint/src/lib/adapter.ts): `packages/powerpoint/src/lib/adapter.ts`
- [Word adapter](https://github.com/hewliyang/office-agents/blob/main/packages/word/src/lib/adapter.ts): `packages/word/src/lib/adapter.ts`
- [Spreadsheet tools](https://github.com/hewliyang/office-agents/tree/main/packages/excel/src/lib/tools): `packages/excel/src/lib/tools`
- [Slide tools](https://github.com/hewliyang/office-agents/tree/main/packages/powerpoint/src/lib/tools): `packages/powerpoint/src/lib/tools`
- [Document tools](https://github.com/hewliyang/office-agents/tree/main/packages/word/src/lib/tools): `packages/word/src/lib/tools`
- [OOXML utilities](https://github.com/hewliyang/office-agents/blob/main/packages/powerpoint/src/lib/pptx/slide-zip.ts): `packages/powerpoint/src/lib/pptx/slide-zip.ts`

### Chat Experience

- [Chat interface](https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/chat-interface.svelte): `packages/core/src/chat/chat-interface.svelte`
- [File panel](https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/files-panel.svelte): `packages/core/src/chat/files-panel.svelte`
- [Settings panel](https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/settings-panel.svelte): `packages/core/src/chat/settings-panel.svelte`
- [Chat controller](https://github.com/hewliyang/office-agents/blob/main/packages/core/src/chat/chat-controller.ts): `packages/core/src/chat/chat-controller.ts`

### Agent SDK

- [Agent runtime](https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/runtime.ts): `packages/sdk/src/runtime.ts`
- [Agent context](https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/context.ts): `packages/sdk/src/context.ts`
- [VFS commands](https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/vfs/custom-commands.ts): `packages/sdk/src/vfs/custom-commands.ts`
- [Web search](https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/web/search.ts): `packages/sdk/src/web/search.ts`
- [Session storage](https://github.com/hewliyang/office-agents/blob/main/packages/sdk/src/storage/db.ts): `packages/sdk/src/storage/db.ts`

### Developer Bridge

- [Bridge client](https://github.com/hewliyang/office-agents/blob/main/packages/bridge/src/client.ts): `packages/bridge/src/client.ts`
- [Bridge server](https://github.com/hewliyang/office-agents/blob/main/packages/bridge/src/server.ts): `packages/bridge/src/server.ts`
- [Bridge CLI](https://github.com/hewliyang/office-agents/blob/main/packages/bridge/src/cli.ts): `packages/bridge/src/cli.ts`

### External Services

- **LLM providers**
- **Search providers**

### Other components

- **Office user**
- **Microsoft Office**

## Connections

- Office user → Excel task pane: opens
- Office user → PowerPoint task pane: opens
- Office user → Word task pane: opens
- Excel task pane → Excel adapter: configures (evidence: `packages/excel/src/taskpane/components/app.svelte`)
- PowerPoint task pane → PowerPoint adapter: configures (evidence: `packages/powerpoint/src/taskpane/components/app.svelte`)
- Word task pane → Word adapter: configures (evidence: `packages/word/src/taskpane/components/app.svelte`)
- Excel task pane → Chat interface: renders (evidence: `packages/excel/src/taskpane/components/app.svelte`)
- PowerPoint task pane → Chat interface: renders (evidence: `packages/powerpoint/src/taskpane/components/app.svelte`)
- Word task pane → Chat interface: renders (evidence: `packages/word/src/taskpane/components/app.svelte`)
- Excel adapter → Spreadsheet tools: creates (evidence: `packages/excel/src/lib/adapter.ts`)
- PowerPoint adapter → Slide tools: creates (evidence: `packages/powerpoint/src/lib/adapter.ts`)
- Word adapter → Document tools: creates (evidence: `packages/word/src/lib/adapter.ts`)
- Slide tools → OOXML utilities: uses (evidence: `packages/powerpoint/src/lib/tools/edit-slide-text.ts`)
- Chat interface → Chat controller: delegates
- Chat controller → Agent runtime: invokes (evidence: `packages/core/src/chat/chat-controller.ts`)
- Excel task pane → Agent context: creates (evidence: `packages/excel/src/taskpane/components/app.svelte`)
- PowerPoint task pane → Agent context: creates (evidence: `packages/powerpoint/src/taskpane/components/app.svelte`)
- Word task pane → Agent context: creates (evidence: `packages/word/src/taskpane/components/app.svelte`)
- Agent context → VFS commands: loads (evidence: `packages/sdk/src/context.ts`)
- VFS commands → Web search: calls (evidence: `packages/sdk/src/vfs/custom-commands.ts`)
- Web search → Search providers: queries (evidence: `packages/sdk/src/web/search.ts`)
- Agent runtime → LLM providers: connects
- Agent runtime → Session storage: persists
- Excel adapter → Microsoft Office: reads and writes
- PowerPoint adapter → Microsoft Office: reads and writes
- Word adapter → Microsoft Office: reads and writes
- Excel task pane → Bridge client: starts in development (evidence: `packages/excel/src/taskpane/components/app.svelte`)
- PowerPoint task pane → Bridge client: starts in development (evidence: `packages/powerpoint/src/taskpane/components/app.svelte`)
- Word task pane → Bridge client: starts in development (evidence: `packages/word/src/taskpane/components/app.svelte`)
- Bridge CLI → Bridge server: controls
- Bridge client → Bridge server: connects
