diff --git a/AGENTS.md b/AGENTS.md index 7d5d0c2f..21c0a75f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -23,16 +23,22 @@ Workspaces: - `packages/ui` - Shared UI components and stores - `packages/web` - Web runtime, Express server, CLI - `packages/desktop` - Tauri desktop app with native APIs +- `packages/vscode` - VS Code extension with webview UI ### Core Components (UI) -In `packages/ui/src/components/`: ChatContainer, MessageList, ChatMessage, StreamingAnimatedText, ChatInput, FileAttachment, ModelControls, PermissionCard, SessionList, SessionSwitcherDialog, DirectoryTree, DirectoryExplorerDialog, MainLayout, Header, Sidebar, SettingsDialog, AgentsPage, CommandsPage, GitIdentitiesPage, ProvidersPage, SessionsPage, SettingsPage, CommandPalette, HelpDialog, ConfigUpdateOverlay, ContextUsageDisplay, ErrorBoundary, MemoryDebugPanel, MobileOverlayPanel, ThemeDemo, ThemeSwitcher. - -In `packages/ui/src/components/views/`: ChatView, GitView, DiffView, TerminalView. - +In `packages/ui/src/components/chat/`: ChatContainer, ChatEmptyState, ChatErrorBoundary, ChatInput, ChatMessage, FileAttachment, MarkdownRenderer, MessageList, ModelControls, PermissionCard, PermissionRequest, ServerFilePicker, StreamingTextDiff, AgentMentionAutocomplete, CommandAutocomplete, FileMentionAutocomplete. +In `packages/ui/src/components/chat/message/`: MessageBody, MessageHeader, ToolOutputDialog, DiffViewToggle, FadeInOnReveal; parts/ (AssistantTextPart, ReasoningPart, ToolPart, UserTextPart, etc.) +In `packages/ui/src/components/layout/`: MainLayout, Header, Sidebar, SidebarContextSummary, SettingsDialog, VSCodeLayout. +In `packages/ui/src/components/sections/`: AgentsPage, CommandsPage, GitIdentitiesPage, ProvidersPage, SettingsPage (with subsections for agents/, commands/, git-identities/, providers/, settings/). +In `packages/ui/src/components/session/`: DirectoryTree, DirectoryExplorerDialog, SessionDialogs, SessionSidebar. +In `packages/ui/src/components/ui/`: CommandPalette, HelpDialog, ConfigUpdateOverlay, ContextUsageDisplay, ErrorBoundary, MemoryDebugPanel, MobileOverlayPanel, FireworksAnimation, OpenChamberLogo, OpenCodeIcon, ProviderLogo, ScrollShadow, OverlayScrollbar, plus Radix-based primitives (button, dialog, input, select, etc.) +In `packages/ui/src/components/views/`: ChatView, GitView, DiffView, PierreDiffViewer, TerminalView. In `packages/ui/src/components/terminal/`: TerminalViewport +In `packages/ui/src/components/onboarding/`: OnboardingScreen +In `packages/ui/src/components/providers/`: ThemeProvider ### State Management (UI) -In `packages/ui/src/stores/`: ConfigStore, SessionStore, DirectoryStore, UIStore, FileStore, MessageStore, ContextStore, PermissionStore, AgentsStore, CommandsStore, GitIdentitiesStore, TerminalStore +In `packages/ui/src/stores/`: contextStore, fileStore, messageStore, permissionStore, sessionStore, useAgentsStore, useCommandsStore, useConfigStore, useDirectoryStore, useFileSearchStore, useGitIdentitiesStore, useGitStore, useSessionStore, useTerminalStore, useUIStore ### OpenCode SDK Integration (UI) In `packages/ui/src/lib/opencode/`: client.ts wrapper around `@opencode-ai/sdk` with directory-aware API calls, SDK methods (session.*, message.*, agent.*, provider.*, config.*, project.*, path.*), AsyncGenerator SSE streaming (2 retry attempts, 500ms->8s backoff), automatic directory parameter injection. @@ -43,12 +49,15 @@ In `packages/ui/src/hooks/`: useEventStream.ts for real-time SSE connection mana Express server and CLI in `packages/web`: API adapters in `packages/web/src/api`, server in `packages/web/server/index.js` (git/terminal/config), UI bundle imported from `@openchamber/ui`. ### Desktop Runtime (Tauri) -Native desktop app in `packages/desktop`: Tauri backend in `src-tauri/` (Rust), frontend API adapters in `src/api/` (settings, permissions, diagnostics, files, git, terminal, notifications, tools), bridge layer in `src/lib/` for Tauri IPC communication. +Native desktop app in `packages/desktop`: Tauri backend in `src-tauri/` (Rust), frontend API adapters in `src/api/` (settings, permissions, diagnostics, files, git, terminal, notifications, tools, updater), bridge layer in `src/lib/` for Tauri IPC communication. + +### VS Code Extension Runtime +Extension in `packages/vscode`: Extension entry in `src/` (ChatViewProvider, bridge, theme), webview API adapters in `webview/api/` (bridge, editor, files, permissions, settings, tools), webview components in `webview/components/` (ChatPanel, SessionsListView, VSCodeLayout). ## Development Commands ### Code Validation -Always validate changes before committing: +Always validate changes: ```bash pnpm -r type-check # TypeScript validation @@ -60,6 +69,7 @@ pnpm -r build # Production build ```bash pnpm run build # Build all packages pnpm run desktop:build # Build desktop app +pnpm vscode:build # Build VS Code extension ``` ## Key Patterns @@ -77,7 +87,7 @@ In `packages/ui/src/lib/theme/`: TypeScript-based themes (Flexoki Light and Dark In `packages/ui/src/lib/`: Semantic typography with 6 CSS variables, theme-independent scales. **CRITICAL**: Always use semantic typography classes, never hardcoded font sizes. ### Streaming Architecture -SDK-managed SSE with AsyncGenerator, temp->real ID swap, pending-user guards, empty-response detection via `window.__opencodeDebug`. +SDK-managed SSE with AsyncGenerator, temp->real session ID swap (optimistic UI), pendingAssistantParts buffering, empty-response detection via `window.__opencodeDebug`. ## Development Guidelines diff --git a/README.md b/README.md index d98388b3..89a01341 100644 --- a/README.md +++ b/README.md @@ -79,9 +79,17 @@ git clone https://github.com/btriapitsyn/openchamber.git cd openchamber pnpm install -pnpm run dev:web:full # Web development -pnpm run desktop:dev # Desktop development (Tauri) -pnpm run build # Production build +# Web development +pnpm run dev:web:full + +# Desktop app (Tauri) +pnpm desktop:dev + +# VS Code extension +pnpm vscode:build && code --extensionDevelopmentPath="$(pwd)/packages/vscode" + +# Production build +pnpm run build ``` See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines. diff --git a/scripts/bump-version.mjs b/scripts/bump-version.mjs index fe52c2a6..99b03a8c 100644 --- a/scripts/bump-version.mjs +++ b/scripts/bump-version.mjs @@ -60,6 +60,6 @@ console.log(` ${CARGO_TOML}: ${oldCargoVersion} -> ${newVersion}`); console.log(`\nVersion bumped to ${newVersion}`); console.log('\nNext steps:'); console.log(` git add -A`); -console.log(` git commit -m "chore: release v${newVersion}"`); +console.log(` git commit -m "release v${newVersion}"`); console.log(` git tag v${newVersion}`); console.log(` git push origin main --tags`);