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

3.4 KiB
Raw Permalink Blame History

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:buildpackages/vscode/out/extension.js

Component map

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