-
Notifications
You must be signed in to change notification settings - Fork 2
Add SolidJS GUI with agent execution and session management #192
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Complete removal of LLM client, provider, and agent code from manager. This functionality has been extracted to nocodo-llm-sdk and nocodo-agents crates for better separation of concerns and reusability. Changes: - Delete 6 implementation files (llm_agent.rs, llm_client.rs, schema_provider.rs, etc.) - Remove LLM agent from AppState and application initialization - Drop 3 database tables (llm_agent_sessions, llm_agent_messages, llm_agent_tool_calls) - Remove 10 database methods for LLM operations - Remove LLM auto-start logic from work handlers - Remove LLM enhancement from project command discovery - Remove 4 LLM model structs from shared-types - Remove LLM-related WebSocket messages - Delete 3 LLM-focused integration test files - Clean up test helpers and fixtures Total: -4,148 lines across 20 files Manager now focuses solely on work/project management and is ready for fresh integration with nocodo-agents crate. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add comprehensive task plans for removing LLM agent code from manager and desktop app crates. Documents the extraction of LLM functionality into dedicated nocodo-llm-sdk and nocodo-agents crates. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Removes tool calls functionality that calls non-existent API endpoints and depends on LlmAgentToolCall type removed from manager and shared-types. Prepares desktop-app for clean integration with nocodo-agents.
Implements comprehensive Hacker News API download manager with dual fetch modes, parallel processing, and SQLite storage for efficient data collection. Features: - Dual fetch modes (story type: top/new/best/ask/show/job/all, or fetch-all from max ID) - Parallel downloads with configurable batch size (default 20) - SQLite storage with automatic schema creation - State tracking to prevent duplicate downloads - Recursive comment and user fetching - All HN item types supported (stories, comments, polls, jobs) Files added: - manager-tools/src/types/hackernews.rs: Request/Response types - manager-tools/src/hackernews/client.rs: HTTP client for HN API - manager-tools/src/hackernews/storage.rs: SQLite operations - manager-tools/src/hackernews/schema.rs: DB schema initialization - manager-tools/src/hackernews/fetcher.rs: Parallel fetching logic - manager-tools/src/hackernews/mod.rs: Main executor Files modified: - manager-tools/Cargo.toml: Added reqwest dependency - manager-tools/src/lib.rs: Exported hackernews module - manager-tools/src/tool_executor.rs: Added HN request handling - manager-tools/src/types/core.rs: Added HN variants to enums - manager-tools/src/types/mod.rs: Exported HN types Task completed: manager-tools/tasks/add-hackernews-download-manager.md
- Add items_failed and users_failed tracking to FetchStats - Add depth limiting for recursive comment fetching (max_depth param, default: 5) - Enable foreign key constraints in SQLite schema - Add index on fetch_queue.queued_at for TTL-based cleanup - Fix db_path default from empty string to /tmp/hackernews.db - Add charset feature to reqwest dependency for proper text handling - Update error handlers to track and report failed fetches
Add a standalone CLI tool to test the HackerNews download manager without integrating it into the full manager system. The binary supports all fetch modes (top, new, best, ask, show, job, all, fetch-all) with configurable batch size, max depth, and database path. Also updates the default database path to ~/.local/share/nocodo/hackernews.db for consistency with the manager's data storage approach.
- Add info-level logging for downloaded items and users with IDs - Add debug-level logging for skipped items/users (already in DB) - Add warn-level logging for failed downloads (replaced eprintln!) - Show batch progress: "Fetching N items at depth X" - Fix thread-safety: wrap HnStorage in Arc for concurrent access - Fix storage layer: use Arc<Mutex<Connection>> with proper locking Logging format: - Items: "Downloaded story 12345 by username" - Users: "Downloaded user foo (karma: 1234)" - Skipped: "Skipping item 12345 (already exists, depth=0)" (debug) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Rename agent-runner to codebase-analysis-runner - Remove --agent option (now only handles codebase-analysis) - Remove --database-path option (uses in-memory database by default) - Remove SqliteAnalysisAgent references from factory - Add create_codebase_analysis_agent() function for dedicated creation - Add HackerNewsResponse match arm in format_tool_response()
Add query and reflect modes to the SQLite tool, following the existing HackerNews dual-mode pattern. This allows the tool to both execute SQL queries and introspect database schema without requiring users to write SQL queries for common schema inspection tasks. Changes: - Add SqliteMode enum with Query and Reflect variants - Update Sqlite3ReaderRequest to use mode field instead of query field - Add build_reflection_query helper with 5 targets: tables, schema, table_info, indexes, views - Add mode dispatch logic in execute_sqlite3_reader - Update documentation with dual-mode examples - Add comprehensive test coverage for both modes - Re-export SqliteMode from types module
…tegration Extended the SQLite dual-mode pattern with additional reflection capabilities and full LLM-facing schema support: **New Reflection Targets:** - foreign_keys: Inspect foreign key relationships (requires table_name) - stats: Database statistics and table counts **Agent-Side Integration:** - Updated LLM schema to expose dual-mode pattern (query and reflect modes) - LLMs can now use all 7 reflection targets: tables, schema, table_info, indexes, views, foreign_keys, stats - Enhanced tool description for better LLM understanding **Documentation Improvements:** - Added 6 comprehensive usage examples covering both modes - Examples for: basic SELECT, PRAGMA statements, discover tables, inspect schema, check foreign keys, and database statistics **Testing:** - Added 3 new tests for foreign_keys and stats targets - All 10 tests passing with comprehensive coverage **Minor Changes:** - Applied rustfmt to HackerNews module files - Added SqliteAnalysisAgent factory function - Updated type descriptions to include new reflection targets 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Make SqliteAnalysisAgent::new() async to perform schema discovery at initialization - Add schema discovery using reflect mode (discover tables, DDL statements) - Parse reflection output to extract table names and CREATE statements - Update system prompt generation to include discovered schema - Explain both query and reflect modes to LLM in system prompt - Make factory function async to await agent initialization - Update CLI runner to use async factory - Add comprehensive unit tests for schema parsing functions Schema discovery happens once at agent initialization, providing LLM with upfront context about database structure. LLM can still use reflect mode at runtime for detailed introspection of tables, indexes, foreign keys, etc.
Documents the completed implementation of reflect mode for schema discovery in the SQLite analysis agent. Includes changes made, benefits, technical details, testing coverage, and success criteria.
- Removed SqliteMode::Reflect option, keeping only query mode - Simplified tool schema: LLM now provides just SQL statements - Agent automatically wraps queries in query mode internally - Removed schema discovery, reflect parsing functions and tests - Updated system prompt to use PRAGMA for schema introspection - Simplified LLM interface for better user experience
Include available table names in the system prompt to provide immediate schema awareness to the LLM, reducing the need for initial discovery queries. Also adds system prompt logging to the runner for debugging.
Creates minimal API service for agent platform using llm-sdk, tools, and agents crates. Implements single /providers endpoint that dynamically lists all available LLM providers and models with metadata by scanning llm-sdk rather than using hardcoded data. Organized with handlers module for future extensibility. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Introduces /agents endpoint that returns available agents with metadata (id, name, description, enabled status). Currently lists only the SQLite Analysis Agent as the sole enabled agent. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add config column to agent_sessions table for agent-specific configuration - Update create_session to accept optional config parameter - Create session before agent execution to return reliable session_id - Store db_path in config field for sqlite agent - Move create_llm_client and initialize_database to helper modules - Remove fragile get_latest_session_id function that queried by user_prompt
Rewrite desktop application using Slint UI framework with Material design components. The new app features a clean shell with left sidebar navigation, main content area, and status bar. Key changes: - Replace old desktop-app implementation with Slint 1.14 - Add app shell with sidebar (Settings link), main content area, and status bar - Use VerticalLayout/HorizontalLayout for edge-to-edge layout without margins - Set minimum 800px height for main content area - Configure Slint build system with build.rs The app uses winit backend with Skia renderer (falls back to FemtoVG) for hardware-accelerated rendering on macOS. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Renamed the desktop-app folder to nocodo-desktop to match the package name in Cargo.toml. Updated workspace configuration accordingly. Made the application window fully resizable by adding min/max constraints for both width and height (600-3000px horizontally, 830-2000px vertically). This allows users to resize the window by dragging edges while maintaining minimum size requirements for the sidebar and content area. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added window size constraints to enable full resizability: - Width: 600-3000px range - Height: 830-2000px range (maintaining 800px minimum for content area + 30px status bar) - Initial size: 1024x900px The window can now be resized by dragging edges or corners while respecting minimum dimensions for the sidebar and main content area. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add Settings page UI to nocodo-desktop that displays provider names and API keys - Add API connection to fetch settings from nocodo-api on startup - Add NOCODO_API_URL environment variable for API endpoint configuration (default: http://127.0.0.1:8080) - Add mask_api_key function to nocodo-api that masks API keys after first 6 characters, limited to max 40 chars - Update /settings endpoint to return masked API keys instead of raw keys
- Create theme.slint with DesktopSizes, DesktopTypography, DesktopColors - Refactor appwindow.slint to use design tokens instead of hardcoded values - Add component-examples.slint with reusable UI components - Add DESIGN_SYSTEM.md reference guide 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add AgentInfo and AgentsResponse to shared-types for API/desktop consistency - Create new Chats page with centered, responsive textarea (5 rows) - Add agent selection dropdown populated from /agents API endpoint - Textarea automatically grows/shrinks between 300px-800px based on window size - Filter to show only enabled agents in dropdown - Set Chats as default landing page 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Replace fixed db_path parameter with flexible AgentConfig enum to support different agent types with compile-time type checking. Added codebase analysis agent handler alongside existing SQLite agent. - Move AgentExecutionRequest to shared-types with AgentConfig enum - Add SqliteAgentConfig and CodebaseAnalysisAgentConfig structs - Update execute_sqlite_agent to use AgentConfig::Sqlite variant - Add execute_codebase_analysis_agent handler for codebase analysis
- Wrap fixed-width API key entries in HorizontalLayout with alignment: start - Add min-width: 0 to root Rectangle to prevent content-based shrinking - Remove temporary Settings2 page used for debugging - Pattern matches ChatsPage layout structure for consistent full-width behavior 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Document the HorizontalLayout wrapper pattern for fixed-width content to prevent parent layout shrinking. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Chats page: Use spacers for centering to allow textarea expansion up to max-width - Settings page: Fix text overflow with TextOverflow.elide and explicit positioning - Add compact layout patterns to DEVELOP.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Created a new integration test that validates the GET /agents/sessions/{session_id} endpoint by inserting mock chat history data directly into the test database. The test simulates a complete SQLite agent conversation with messages and tool calls, validating that the endpoint correctly retrieves and formats the data.
Key features:
- Tests the chat history endpoint independently without coupling to agent execution
- Validates session metadata, messages array (with correct order), and tool_calls array
- Uses direct database insertion to test message/tool persistence logic
- Provides a reference for what a complete agent conversation should look like
- Make Database.connection field public to allow test access - Add Serialize derive to AgentExecutionRequest for test serialization - Format setup_test_app function for better readability
- Add Start button to Chats page with agent selection tracking - Integrate agent execution API calls (SQLite and Codebase Analysis) - Add loading state to chat detail page with visual indicator - Remove dummy chat data and load real session messages from API - Add callback handlers for agent execution workflow - Use hardcoded defaults: hackernews.db for SQLite, current dir for codebase analysis The Start button triggers immediate navigation to chat detail page, shows loading indicator while agent executes, then displays the actual chat history from the session API endpoint. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add API endpoint GET /agents/sessions to list recent sessions - Add SessionListItem and SessionListResponse types to shared-types - Add ChatListItem struct to desktop UI types - Add fetch_sessions() function in desktop app - Add scrollable chat list below form in ChatsPage - Display user prompt (truncated to 3 lines), agent name, and date - Single column Twitter-like layout with hover states - Auto-load sessions on app startup 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Modified Agent trait execute method to take session_id parameter - Updated SqliteAnalysisAgent and CodebaseAnalysisAgent to use provided session_id - Updated API handlers to pass session_id to agents - Fixed tests and runners to properly create and pass sessions This ensures API requests are properly saved to the single database session instead of creating duplicate sessions.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…gents, Settings; remove routing and pages for single blank page
…rt_to ts-rs 8.1.0 doesn't have export_to method. Changed to use export_to_string() and added clean_type function to remove import statements when combining all types into a single types.ts file.
- Configure DaisyUI using CSS @plugin directive with theme support - Add @source directives to specify content paths for Tailwind - Implement Layout component with navigation bar - Add routing for Home and Agents pages using SolidJS Router root prop - Fix navigation links using A component for client-side routing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Created Home page with hero layout using DaisyUI - Created Agents page that fetches from /agents API endpoint - Display agents in responsive card grid with enabled/disabled badges - Handle loading and error states with DaisyUI components - Use types from shared-types (AgentInfo, AgentsResponse)
- Add SolidJS + Vite configuration with TypeScript - Configure Tailwind CSS v4 with DaisyUI component library - Implement responsive navigation with Home, Projects, Agents, Settings - Add routing with @solidjs/router - Include development tools and build setup
- Add prettier dependency to GUI app - Create .prettierrc configuration file - Format all code files with prettier - Set up pre-commit hook to enforce formatting - Add format scripts to package.json
Implement Settings page at /settings route with API keys configuration section. Add TypeScript exports for SettingsResponse, ApiKeyConfig, and UpdateApiKeysRequest types. Update routing in app.tsx and generate TypeScript types from shared-types crate. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add TypeScript exports for session-related types (SessionMessage, SessionToolCall, SessionResponse, etc.) - Create homepage with centered textarea for prompts, agent dropdown, and Run Agent button - Add dynamic configuration fields based on selected agent (database path for SQLite, codebase path for analysis) - Create session details page displaying session info, messages timeline, and tool calls - Add route /session/:id for viewing session details - Generate updated TypeScript types from Rust shared-types Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
API now returns session_id immediately and executes agents in background using tokio::spawn. GUI polls session endpoint every 2 seconds while status is 'running' to display live progress with spinner indicator. Polling stops automatically when execution completes or fails. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Extract navigation into separate Navigation component - Add Sessions page that lists recent sessions from API - Display session cards with agent name, user prompt, and humanized time - Add proper routing for /sessions endpoint - Use existing shared TypeScript types for session data
📊 Code Complexity Analysis
💡 Suggestion: This is a large PR with 11571 added lines. Consider:
Automated analysis by GitHub Actions |
🤖 Automated Code Review SummaryThis automated review was generated to help ensure code quality and security standards. Rust Code Analysis
TypeScript/JavaScript Code AnalysisSecurity Analysis
Recommendations
This review was automatically generated. Please address any issues before merging. |
Deploying nocodo with
|
| Latest commit: |
3e7bfc0
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://e7c5d7b5.nocodo.pages.dev |
| Branch Preview URL: | https://prepare-manager-for-agent-pl.nocodo.pages.dev |
Summary
Changes
Technical Details