Some checks failed
CI — Test & Build / Test & Build (push) Has been cancelled
- Implemented a status bar item for LexAI with dynamic status updates (ready, processing, notReady). - Created a suggestion panel for displaying and interacting with AI-generated suggestions. - Added functionality for accepting, regenerating, and discarding suggestions within the suggestion zone. - Introduced configuration options for writing style, prompt patterns, personas, and formats. - Integrated progress indicators for long-running tasks and improved user feedback. - Established TypeScript configuration for the vscode package.
63 lines
3.4 KiB
Markdown
63 lines
3.4 KiB
Markdown
# Architecture
|
||
|
||
> The current system and its important boundaries. Describe what *is*, not aspirations.
|
||
|
||
## System at a glance
|
||
|
||
- **Shape:** dual client surfaces (Chrome MV3 extension + VS Code extension) sharing portable LLM core; no LexAI backend
|
||
- **Stack:** TypeScript; Chrome via WXT ^0.20 + React 18; VS Code via `packages/vscode` (esbuild bundle); Node 22
|
||
- **Data stores:** Chrome `chrome.storage.local` (encrypted key + prefs); VS Code Secret Storage (API key) + `lexai.*` settings
|
||
- **Hosting / deploy target:** Chrome Web Store (Gitea CI); VS Code Marketplace not wired yet (local VSIX / extension host)
|
||
- **Build / release:** Chrome `npm run build` → `.output/chrome-mv3/`; VS Code `npm run vscode:build` → `packages/vscode/out/extension.js`
|
||
|
||
## Component map
|
||
|
||
```text
|
||
shared: src/lib/{providers,actions,types} (+ crypto/messaging Chrome-only)
|
||
|
||
Chrome:
|
||
content.ts ──ANALYZE_TEXT──> background.ts ──fetch──> provider API
|
||
options/popup (React) ──storage──> chrome.storage.local
|
||
|
||
VS Code:
|
||
extension.ts (commands/menus) ──callProvider──> provider API
|
||
│ ▲
|
||
└── secrets / settings ────────┘
|
||
```
|
||
|
||
| Component | Responsibility | Owns (paths) | Talks to | Notes |
|
||
| --- | --- | --- | --- | --- |
|
||
| Shared core | Actions, prompts, provider adapters | `src/lib/providers.ts`, `actions.ts`, `types.ts` | Provider HTTPS APIs | No Chrome/VS Code imports |
|
||
| Chrome content | Selection, toolbar/modal, replace | `entrypoints/content.ts` | Background via messaging | DOM timing; `data-lexai` |
|
||
| Chrome background | Decrypt key, call providers, menus | `entrypoints/background.ts` | `chrome.storage`, providers | CORS + key isolation |
|
||
| Chrome Options/Popup | Settings + standalone analyze | `entrypoints/options`, `popup` | Storage + background | React; inline styles |
|
||
| VS Code extension | Commands, context menu, replace | `packages/vscode/src/**` | SecretStorage, settings, providers | Bundles `@lib` via esbuild |
|
||
| Chrome crypto/messaging | tweetnacl key path; safe chrome wrappers | `src/lib/crypto.ts`, `messaging.ts` | `chrome.*` | Not used by VS Code |
|
||
|
||
## Boundaries and contracts
|
||
|
||
- **Trust boundaries:** page DOM (Chrome) and editor buffer (VS Code) are untrusted text; API key never logged; only user’s chosen provider receives text/key
|
||
- **Message contract (Chrome):** `ANALYZE_TEXT` (payload + flat), `COPY_AS`, `LIST_MODELS` — see `src/lib/types.ts`
|
||
- **VS Code commands:** `lexai.{fix,rephrase,shorten,expand,explain,prompt,setApiKey,clearApiKey,showStatus}`
|
||
- **Internal imports:** VS Code may import `@lib/providers|actions|types` only — not `crypto` / `messaging`
|
||
- **External dependencies:** OpenAI, Anthropic, Groq, OpenRouter chat + models endpoints
|
||
|
||
## Data model (essentials)
|
||
|
||
- **Config:** provider, model, writing style, keyProvider
|
||
- **Sensitive:** API key — Chrome encrypted blob + encKey; VS Code Secret Storage
|
||
- **Legacy:** Chrome plaintext `apiKey` fallback until migrated
|
||
|
||
## Cross-cutting concerns
|
||
|
||
- **Authn/z:** none (BYO key)
|
||
- **Observability:** console debug in Chrome replace path (pre-release); VS Code notifications
|
||
- **Feature flags:** none
|
||
- **Config:** Chrome storage schema; VS Code `contributes.configuration` `lexai.*`
|
||
|
||
## Open architectural risks
|
||
|
||
- Chrome and VS Code settings are not synced
|
||
- VS Code v1 has no Prompt Builder / Copy As / floating toolbar
|
||
- Relocating Chrome into `packages/chrome` deferred — root remains the WXT app
|