Files
LexAI/docs/ARCHITECTURE.md
john kevin asprec 8bc529ef2d
Some checks failed
CI — Test & Build / Test & Build (push) Has been cancelled
feat: add LexAI status bar and suggestion panel
- 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.
2026-08-13 18:06:45 +08:00

63 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 users 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