Compare commits

..

No commits in common. "c2028f45c53ed8017bdbbbcad2c2fbd1aa4c607b" and "3e1135ed2b6c97800a446f5d1ec5341a0c4c84a2" have entirely different histories.

6 changed files with 155 additions and 278 deletions

273
CHANGE.md
View File

@ -6,50 +6,48 @@ This document tracks all significant changes to Gadget Code, organized by date.
## 2026-05-17 (Sunday) ## 2026-05-17 (Sunday)
**Release Hardening, Subagent Improvements, and Workspace Intelligence** **Subagent Context Management and Tooling Stability**
The day focused on preparing the v1.0.1 release with a hardened release script, fixing subagent context management, adding prompt draft persistence, and implementing intelligent workspace startup that detects the workspace directory by walking up the file hierarchy. Today's focus shifted towards improving subagent context management and stabilizing developmental tools, including a fix for the prompt editor.
### Changes: ### Changes:
- **Release**: Added hardened release script with error handling and pre-flight checks. - **Subagent**: Implemented improvements to subagent context management.
- **Subagent**: Improved subagent context management for more reliable agent operations. - **Development**: Fixed prompt editor functionality.
- **Chat Session**: Implemented prompt draft save/restore so in-progress prompts survive view changes. - **Documentation**: Added gadget-tasks architecture documentation and updated technical documentation (README, `agent-toolbox.md`).
- **Workspace**: Added intelligent startup — drone detects workspace by walking up directory hierarchy. - **Dependencies/Build**: Addressed installation and global link issues.
- **Agent Tools**: Updated plan tool with improved prompt language and behavior.
- **Prompt Editor**: Expanded prompt editor capabilities.
- **gadget-tasks**: Course correction — converted to headless IDE client architecture (no direct DB access).
- **Documentation**: Added gadget-tasks architecture documentation; updated README and agent-toolbox docs.
- **Build**: Fixed installation and global link issues.
- **Tests**: Updated code-session tests to match current API expectations.
--- ---
## 2026-05-16 (Saturday) ## 2026-05-16 (Saturday)
**AI Toolbox Extraction and Project Manager Upgrades** **Gadget-Tasks Architecture Correction and AI Toolbox Refactor**
Completed the refactor extracting the AI toolbox from `@gadget/ai` into `@gadget/ai-toolbox`, and implemented Project Manager upgrades across Phases 14. Cleaned up incorrect dependencies. This update covers major architectural changes to `gadget-tasks` transition to a headless IDE client and the reorganization of the AI toolbox structure.
### Changes: ### Changes:
- **AI Toolbox**: Completed refactor and extraction from `@gadget/ai` into `@gadget/ai-toolbox`. - **Architecture**: Converted `gadget-tasks` from directly accessing MongoDB to a headless IDE client architecture using REST API and Socket.IO.
- **Project Manager**: Implemented upgrades across Phases 14. - **Infrastructure**: Added `platform.ts` (headless IDE client with session lock and workspace mode) to `gadget-tasks`.
- **Dependencies**: Removed incorrect `simple-git` package; fixed type references. - **Cleanup**: Removed duplicated/no longer needed code in `gadget-tasks` (Mongoose models, internal prompt templates, task executor, AI services, and workspace management).
- **AI Toolbox**: Completed refactor and extraction of the AI toolbox from `@gadget/ai` into `@gadget/ai-toolbox`.
- **Project Manager**: Implemented upgrades across Phases 1-4.
- **Infrastructure**: Added necessary backend routes (`PATCH /api/v1/projects/:projectId/tasks/:taskId/lastRun`) and service methods for atomic task field updates.
- **Project Configuration**: Updated `GadgetTasksConfig` and removed unneeded dependencies (`mongoose`, `dayjs`, `simple-git`, etc.).
--- ---
## 2026-05-15 (Thursday) ## 2026-05-15 (Thursday)
**Pull Project, Tool Call Observability, and Context Window Configuration** **Context Window Configuration Added**
Introduced the Pull Project feature for cloning remote repositories, added tool call observability to the chat session view, and added `numCtx` (Context Window) configuration to the SESSION panel. Also refactored ChatSessionView and added the Gab AI affiliate link. The most recent change introduces the `numCtx` (Context Window) setting to the SESSION panel, allowing users to configure the context window size for their AI model sessions. This setting is part of a broader enhancement to the model configuration pipeline that also includes `numPredict` and `maxCompletionTokens` parameters.
### Changes: ### Changes:
- **Pull Project**: Initial implementation for cloning remote repositories into the workspace. - Added `numCtx` setting to SESSION panel
- **Observability**: Added tool call observability to the chat session view. - Updated model configuration pipeline to include `numPredict`, `numCtx`, and `maxCompletionTokens`
- **File Operations**: Added new file creation capability. - Modified ChatSessionView to handle new context window settings
- **SESSION Panel**: Added `numCtx` (Context Window) setting; updated model config pipeline with `numPredict`, `numCtx`, and `maxCompletionTokens`. - Updated session initialization logic to apply context window configuration
- **ChatSessionView**: Refactored for improved structure; added scripts directory. - Added Gab AI affiliate link
- **Provider**: Added Gab AI affiliate link; changed Ollama abort procedure. - Changed Ollama abort procedure
--- ---
@ -57,74 +55,84 @@ Introduced the Pull Project feature for cloning remote repositories, added tool
**SubProcess Observability Implementation** **SubProcess Observability Implementation**
Implemented comprehensive observability for SubProcess operations within the DroneManager and DroneInspector components, including status tracking, event emission, and UI display of subprocess execution details. This week focused on implementing comprehensive observability for SubProcess operations within the DroneManager and DroneInspector components, including detailed logging, status tracking, and event emission capabilities.
### Changes: ### Changes:
- **SubProcess**: Implemented Phase 1 (SubProcess service and agent tool) and Phase 2 (observability in DroneManager and DroneInspector). - Implemented Phase 2: SubProcess observability in DroneManager and DroneInspector
- **UI**: Updated to display subprocess execution details. - Added subprocess status tracking and event emission
- **Fixes**: Fixed mode change log message formatting. - Updated UI to display subprocess execution details
- Fixed mode change log message formatting
--- ---
## 2026-05-13 (Tuesday) ## 2026-05-13 (Tuesday)
**CodeMirror Editor Fix and User Mode Documentation** **Documentation and Editor Improvements**
Fixed a critical CodeMirror editor height constraint in flex layouts, and added documentation for User Mode continuation prompts and MVP completion summary. Documentation updates include adding continuation prompts and remaining steps for User Mode, session summary documentation for MVP completion, and formatting cleanup in AGENTS.md. The editor improvements address a critical issue with CodeMirror editor height constraints in flex layouts.
### Changes: ### Changes:
- **Editor**: Fixed CodeMirror editor height constraint in flex layout. - Added continuation prompt and remaining steps for User Mode documentation
- **Documentation**: Added continuation prompt and remaining steps for User Mode; added session summary for MVP completion; formatting cleanup in AGENTS.md. - Added session summary for User Mode MVP completion
- **Infrastructure**: Prep work for landing page project. - Fixed CodeMirror editor height constraint in flex layout
- Minor formatting cleanup in AGENTS.md
- Created new files and prep work for landing page project
--- ---
## 2026-05-12 (Monday) ## 2026-05-12 (Monday)
**FILES Panel, Editor Integration, and Abort Controller** **FILES Panel and Editor Integration**
Major milestone: implemented the FILES panel foundation with lazy-loading file tree, replaced react-ace with @uiw/react-codemirror (React 19 compat), added an abort controller for work order processing, and fixed numerous file tree and layout issues. This week marked a significant milestone with the implementation of the FILES panel foundation featuring lazy-loading file tree capabilities. The implementation replaced react-ace with @uiw/react-codemirror to resolve React 19 compatibility issues and Vite dev server problems.
### Changes: ### Changes:
- **FILES Panel**: Implemented foundation with lazy-loading file tree; fixed scrolling, duplication, corruption, and expand/collapse rendering issues. - Implemented FILES panel foundation with lazy-loading file tree
- **Editor**: Replaced react-ace with @uiw/react-codemirror for React 19 compatibility; fixed ACE editor crash (Vite `?url` pattern, Error Boundary). - Replaced react-ace with @uiw/react-codemirror
- **Layout**: Fixed flexbox scrolling for sidebar; added `shrink-0` to SESSION and PROJECT panels. - Fixed flexbox scrolling for FILES panel sidebar
- **Abort Controller**: Implemented abort controller for work order processing; added Aborted status. - Added shrink-0 to SESSION and PROJECT panels for proper flex layout
- **Navigation**: Added navigation to project in Project Manager using slug. - Fixed file tree scrolling and text selection issues
- **Socket**: Defined missing socket event types; enforced typed events in frontend build. - Fixed file tree backend recursion breaking lazy loading
- **AI**: Fixed OpenAI API tool call processing correctness. - Fixed file tree showing entire workspace instead of project directory
- **Agent**: Moved plan prompt language from common block; added plan for project-specific agent instructions. - Fixed file tree duplication and corruption on expand
- Fixed file tree expand/collapse not rendering children
- Added navigation to project in Project Manager using slug
- Fixed ACE editor integration crash — React 19 compat, Vite ?url pattern, Error Boundary
- Fixed file tree duplication and corruption on expand
--- ---
## 2026-05-11 (Sunday) ## 2026-05-11 (Sunday)
**Subagent Processing, Authentication, and Deployment Documentation** **Subagent Processing and Authentication Fixes**
Focused on subagent processing improvements and authentication fixes, including subagent response handling, session data management, persona field in sign-in responses, and JWT/heartbeat fixes. Added deployment documentation with installation guides, config examples, and systemd service files. This weekend's work focused on subagent processing improvements and authentication fixes, including fixes for subagent response handling, session data management, and adding the persona field to sign-in responses.
### Changes: ### Changes:
- **Subagent**: Fixed subagent response handling and session data; crushed whitespace in subagent markdown output. - Fixed subagent response handling and session data
- **Auth**: Added persona field to sign-in response; fixed JWT expiration bugs and drone heartbeat timeouts. - Added persona field to sign-in response
- **ChatSession**: Added reconnect logic; fixed crash. - Fixed JWT expiration bugs and drone heartbeat timeouts
- **Deployment**: Added installation guides, config examples, and systemd service files. - Added installation guides, config examples, and systemd service files
- **Model Config**: Added `numPredict`, `numCtx`, `maxCompletionTokens` to model configuration pipeline. - Fixed subagent markdown output whitespace using .subagent-compact.gadget-markdown
- **Style**: CSS and style fixes for subagent display; updated build prompt. - Applied CSS and style fixes for subagent display
- **Architecture**: Integrated docs/archive for reference; subagents system (written by an agent, for an agent). - Updated build prompt
- Fixed auth: include persona field in sign-in response
--- ---
## 2026-05-10 (Saturday) ## 2026-05-10 (Saturday)
**Workspace and Project Philosophy Refinement** **Workspace and Project Philosophy Shift**
Refined the conceptual model separating Workspaces from Projects, improved the chat interface, and fixed credential provider and API key distribution issues. This weekend involved a philosophical shift in how Workspaces and Projects are conceptualized and implemented, with improved separation of concerns and clearer boundaries between the two concepts.
### Changes: ### Changes:
- **Architecture**: Applied philosophy shifts for Workspaces and Projects; updated conceptual model. - Applied philosophy shifts for Workspaces and Projects
- **Agent Toolbox**: Refactored and updated agent toolbox. - Updated workspace and project conceptual model
- **Fixes**: Fixed credential provider; ensured apiKey is presented to required consumers. - Improved separation of concerns between workspace and project
- **Chat**: Chat interface fixes and cleanup. - Chat interface fixes and cleanup
- Credential provider fix
- Ensure apiKey is presented to required consumers
--- ---
@ -132,29 +140,34 @@ Refined the conceptual model separating Workspaces from Projects, improved the c
**Agentic Workflow Loop Rebuild** **Agentic Workflow Loop Rebuild**
Rebuilt the Agentic Workflow Loop from the ground up for improved reliability and performance, with enhanced streaming response handling, chat session auto-naming, and drone-to-IDE log transport. This week involved a complete rebuild of the Agentic Workflow Loop to improve reliability and performance, including better error handling, improved checkpointing, and enhanced event emission capabilities.
### Changes: ### Changes:
- **AWL**: Re-built Agentic Workflow Loop with improved reliability and checkpointing. - Re-built Agentic Workflow Loop with improved reliability
- **Streaming**: Enhanced streaming response handling and correctness. - Enhanced streaming response handling
- **Chat Session**: Implemented auto-naming with IDE update. - Implemented chat session auto-naming with IDE update
- **Logging**: Added GadgetLogTransportSocket for drone-to-IDE log streaming. - Improved checkpointing and event emission
- GadgetLogTransportSocket and the drone-to-IDE log
--- ---
## 2026-05-08 (Thursday) ## 2026-05-08 (Thursday)
**Chat Session Heartbeat, User Settings, and Logging Unification** **Chat Session Heartbeat and User Settings**
Implemented chat session heartbeat and session unlock, user settings management, configurable reasoning effort, and unified logging into `@gadget/api` as GadgetLog. Redesigned sign-in form and provider/model selection. This week focused on implementing chat session heartbeat functionality and user settings management, ensuring that active sessions are properly tracked and can be recovered in case of unexpected disconnections.
### Changes: ### Changes:
- **Session**: Implemented chat session heartbeat and session unlock. - Implemented chat session heartbeat and session unlock
- **User Settings**: Added user settings management; made reasoning effort configurable. - Added user settings management
- **Auth**: Redesigned sign-in form and presentation; removed sign-up concept; integrated persona field in User. - Made reasoning effort configurable
- **UI**: Reworked provider/model selection with save/cancel pattern; added editable session name with cog icon; added navigation to return to Project Manager. - Added editable session name with cog icon
- **Logging**: Unified logging into `@gadget/api` as GadgetLog; pre-task cleanup to reduce log spam; fixed logging when file logging is disabled. - Redesigned sign-in form and presentation
- **Streaming**: Fixed streaming response handling for Ollama. - Integrated persona field in User
- Reworked provider/model selection with save/cancel pattern
- Added navigation to return to Project Manager
- Quick fix for when logging.file.enabled is false
- Refactor: unify logging into @gadget/api as GadgetLog
--- ---
@ -162,119 +175,135 @@ Implemented chat session heartbeat and session unlock, user settings management,
**Streaming Responses Implementation** **Streaming Responses Implementation**
Implemented streaming responses for AI model interactions, including proper handling of streaming data from Ollama and other providers with real-time token delivery and response completion tracking. This week saw the implementation of streaming responses for AI model interactions, including proper handling of streaming data from Ollama and other providers with support for real-time token delivery and response completion tracking.
### Changes: ### Changes:
- **Streaming**: Implemented streaming responses for Ollama with real-time token delivery and completion tracking. - Implemented streaming responses for Ollama
- **Documentation**: Created documentation for streaming responses. - Added streaming response handling and correctness improvements
- Created documentation for streaming responses
- Improved real-time token delivery and completion tracking
--- ---
## 2026-05-06 (Tuesday) ## 2026-05-06 (Tuesday)
**Agent Tool and Toolbox Architecture** **Agent Tool and Toolbox Refactoring**
Significant refactoring of the agent tool and toolbox architecture, establishing the foundational pattern for tool registration and management. This week involved significant refactoring of the agent tool and toolbox architecture, including unifying logging into @gadget/api as GadgetLog and restructuring the toolbox to support better tool registration and management.
### Changes: ### Changes:
- **Architecture**: Refactored agent tool and toolbox; established tool registration and management patterns. - Refactored agent tool and toolbox architecture
- **AI Environment**: Agent, tools, toolbox, tool loop, and AI environment foundation. - Unified logging into @gadget/api as GadgetLog
- Improved tool registration and management
- Reduced log spam through pre-task cleanup
- Agent, tools, toolbox, tool loop, AI environment
--- ---
## 2026-05-05 (Monday) ## 2026-05-05 (Monday)
**Basic Chat System Milestone** **Basic Chat System Implementation**
Achieved a working basic chat system — the first end-to-end milestone — with provider, model, and mode selection, ChatTurn processing, and agent progress tracking. This week marked a major milestone with the implementation of a working basic chat system, including provider, model, and mode selection capabilities, along with enhanced AgentService.process method functionality.
### Changes: ### Changes:
- **Chat**: Implemented basic working chat system (checkpoint). - Implemented basic chat system
- **Selection**: Added provider, model, and mode selections. - Added provider, model, and mode selections
- **Processing**: Enhanced AgentService.process method; implemented ChatTurn processing and component. - Enhanced AgentService.process method
- **Infrastructure**: Renamed platform.apiKey to platform.gadgetKey; reduced log output. - Implemented chat turn processing
- Added agent progress tracking
--- ---
## 2026-05-03 (Saturday) ## 2026-05-03 (Saturday)
**Workspace Mode Management and Status Display** **Status Message Display Fix**
Fixed status message display in the agent interface and implemented workspace mode management with drone status message socket events. This weekend's work focused on fixing the status message display in the agent interface and implementing workspace mode management improvements with drone status message socket events.
### Changes: ### Changes:
- **Status**: Fixed status message display in agent interface. - Fixed status message display in agent interface
- **Workspace**: Implemented workspace mode management; added drone status message socket events. - Implemented workspace mode management
- Added drone status message socket events
- Many fixes
--- ---
## 2026-05-02 (Friday) ## 2026-05-02 (Friday)
**Workspace Mode Switching with Validation** **Workspace Mode Switching**
Implemented workspace mode switching with validation, ensuring workspace mode changes are validated before being applied, along with session lock and workspace processing refinements. This week involved implementing workspace mode switching functionality with proper validation, ensuring that workspace mode changes are validated before being applied, preventing invalid state transitions.
### Changes: ### Changes:
- **Workspace**: Implemented workspace mode switching with validation. - Implemented workspace mode switching with validation
- **Session**: Added session lock and workspace processing refinements. - Added session lock and workspace processing refinements
- **Socket**: Socket message and drone workspace cleanup; drone doc updates. - Improved workspace management system
- Workspace management progress
--- ---
## 2026-05-01 (Thursday) ## 2026-05-01 (Thursday)
**The Grid Home View and GadgetId Migration** **Welcome to The Grid**
Implemented the "Welcome to The Grid" home view, fixed JWT processing, refactored session lifecycle management, and completed the transition from Types.ObjectId to GadgetId across the codebase. This week marked the beginning of a new phase with the implementation of the "Welcome to The Grid" home view, including JWT processing fixes, session startup/shutdown/refactoring improvements, and the transition from Types.ObjectId to GadgetId.
### Changes: ### Changes:
- **Home View**: Implemented "Welcome to The Grid" home view; return to Home on sign out. - Implemented "Welcome to The Grid" home view
- **Auth**: Fixed JWT processing. - Fixed JWT processing
- **Session**: Refactored session startup, shutdown, and import; fixed import errors. - Refactored session startup, shutdown, and import
- **GadgetId**: Completed transition from Types.ObjectId to GadgetId (string alias using nanoid); correctly generate nanoid IDs in default clauses. - Transitioned from Types.ObjectId to GadgetId
- Added return to Home on sign out
- More populate fixes
--- ---
## 2026-04-30 (Wednesday) ## 2026-04-30 (Wednesday)
**Socket Protocol and Drone Manager** **Socket Protocol Implementation**
Implemented socket protocol completeness with typed events, created the DroneManager, and finalized Project Manager correctness. This week focused on implementing and refining the socket protocol for drone-to-IDE communication, including defining missing socket event types, enforcing typed events in the frontend build, and adding a setting for max Socket.IO HTTP buffer size.
### Changes: ### Changes:
- **Socket Protocol**: Implemented socket protocol completeness; defined missing event types; enforced typed events in frontend build. - Implemented socket protocol completeness
- **Drone Manager**: Created DroneManager (WIP). - Defined missing socket event types
- **Config**: Added setting for max Socket.IO HTTP buffer size. - Enforced typed events in frontend build
- **Project Manager**: Wrap-up on Project Manager correctness. - Added max Socket.IO HTTP buffer size setting
- Created drone manager
--- ---
## 2026-04-29 (Tuesday) ## 2026-04-29 (Tuesday)
**Drone-to-IDE Event Routing and Workspace Persistence** **Workspace Persistence and Crash Recovery**
Implemented drone-to-IDE event routing, added event emissions to the Agentic Workflow Loop, and implemented workspace persistence and crash recovery. Added workspace mode to the gadget-drone process. This week involved implementing workspace persistence and crash recovery capabilities, including adding workspace mode to the gadget-drone process, event emissions to the Agentic Workflow Loop, and drone-to-IDE event routing.
### Changes: ### Changes:
- **Event Routing**: Implemented Drone→IDE event routing (Phase 3); added event emissions to AWL (Phase 4). - Implemented workspace persistence and crash recovery
- **Workspace**: Added workspace mode to gadget-drone process; implemented workspace persistence and crash recovery (Phase 5). - Added workspace mode to gadget-drone process
- **Protocol**: Implemented prompt submission; fixed type conflicts; added socket protocol documentation. - Added event emissions to Agentic Workflow Loop
- **Config**: Added max Socket.IO HTTP buffer size setting; standardized interfaces. - Implemented drone-to-IDE event routing
- Fixed type conflicts and implemented prompt submission
--- ---
## 2026-04-28 (Monday) ## 2026-04-28 (Monday)
**Dark Industrial Theme, JWT Auth, and Project Manager** **Dark Industrial Theme and JWT Authentication**
Significant visual and architectural milestone: implemented the dark industrial theme, Project Manager, and JWT authentication, replacing sign-up with streamlined sign-in. This week marked a significant visual and architectural milestone with the implementation of the dark industrial theme, Project Manager, and JWT authentication, replacing the previous sign-up concept with a more streamlined sign-in experience.
### Changes: ### Changes:
- **Theme**: Implemented dark industrial theme with correct border colors and enforcement. - Implemented dark industrial theme
- **Auth**: Implemented JWT authentication. - Added Project Manager
- **Project Manager**: Added project service. - Implemented JWT authentication
- **Models**: Refactored gadget-code model interfaces to `@gadget/api`. - Enforced theme correctly
- **Infrastructure**: Added workspaceDir to DroneRegistration; E2E tests for theme. - Added project service
- Updated DroneRegistration with workspaceDir
- Fix: Darken border colors to match dark industrial theme
- Theme enforced and correctly implemented; e2e tests added for theme
--- ---
@ -282,8 +311,8 @@ Significant visual and architectural milestone: implemented the dark industrial
**Initial Commit** **Initial Commit**
The project was initialized, establishing the foundation for all subsequent development. The project was initialized with the initial commit, establishing the foundation for all subsequent development.
### Changes: ### Changes:
- Initial project commit. - Initial project commit
- Established basic project structure. - Established basic project structure

View File

@ -253,5 +253,5 @@ Apache 2.0 — See [LICENSE](./LICENSE) for details.
--- ---
**Status:** v1.0.1 — First release. Self-hosted agentic engineering platform with local/self-hosted AI model support, complete Chat Session UI, subagent processing, and workspace management. **Status:** Production-ready foundation with complete Chat Session UI
**Last Updated:** May 17, 2026 **Last Updated:** May 17, 2026

View File

@ -1,120 +0,0 @@
GADGET CODE v1.0.1
NAME: Liberation
HASH: ff46c35d38e29be64d9eca0ccc18e8a7f5c3d8ab
TAG: v1.0.1
SUMMARY:
Today marks the Liberation of Gadget Code — the first public release of a self-hosted agentic engineering platform that puts you in control of your code, your models, and your infrastructure.
Over 200 commits spanning 21 days of intensive development, Gadget Code has grown from an initial commit into a complete platform for autonomous software engineering. And every line of it is Apache-2.0 licensed, fully open source, and designed to run on *your* terms.
## What Is Gadget Code?
Gadget Code is an **Agentic Engineering Platform (AEP)** — a browser-based IDE that drives autonomous AI agents to perform real software engineering work on your behalf. Unlike cloud-locked alternatives, Gadget Code runs entirely in your environment: your servers, your data, your rules.
The architecture is straightforward and powerful:
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Browser IDE │────▶│ gadget-code │────▶│ gadget-drone │
│ (React 19) │◀────│ (Express 5) │◀────│ (Worker) │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
│ Socket.IO │ MongoDB │ Files
│ JWT Auth │ Redis │ Git
```
A user creates a project in the browser IDE, selects a drone instance, enters a prompt, and the drone executes the Agentic Workflow Loop — thinking, responding, calling tools, spawning subagents — all streamed back in real time.
## Your Models, Your Way
This is what Liberation means. Gadget Code ships with first-class support for **Ollama** and any **OpenAI-compatible API**. Run local models on your own GPU. Self-host an inference endpoint behind your firewall. Use a commercial provider when it suits you. Mix and match per session. The `@gadget/ai` package provides a unified abstraction — no consumer code ever imports an SDK directly. Swap providers without changing a line of application logic.
The model configuration pipeline supports `numCtx` (context window), `numPredict`, and `maxCompletionTokens` settings, giving you fine-grained control over how your models behave.
## Complete Agentic Engineering Platform
Gadget Code isn't a chatbot wrapper. It's a full-stack engineering environment:
- **Project Manager** — Create projects, select available drone instances, manage chat session history.
- **Chat Session View** — Real-time streaming responses with collapsible thinking content, tool call summaries, session statistics, and per-session model/mode selection.
- **Agentic Workflow Loop** — The drone executes a multi-turn reasoning loop: think, respond, call tools, observe results, and iterate. Work orders are abortable, and the loop supports checkpointing for crash recovery.
- **Subagent Processing** — Agents can spawn specialized subagents for decomposition tasks. Subagent context is managed independently and streamed back to the IDE in real time.
- **FILE Panel** — Lazy-loading file tree with full workspace navigation and CodeMirror editor integration (React 19 compatible).
- **Workspace Management** — Each drone manages a workspace directory with crash recovery via the `.gadget/` directory and intelligent startup that detects the workspace by walking up the file hierarchy.
- **Scheduled Tasks (gadget-tasks)** — A headless IDE client that automates the browser flow on a cron schedule. It drives the existing gadget-code platform via the same REST API and Socket.IO protocol the browser uses — no duplicated logic.
- **Pull Project** — Clone remote repositories directly into your workspace.
- **Abort Controller** — Cancel in-progress work orders with proper state cleanup.
## Configuration and Dependencies
Gadget Code requires:
- **Node.js 22+** and **pnpm 10+**
- **MongoDB** on `localhost:27017`
- **Redis** on `localhost:6379`
- **SSL certificates** in the `ssl/` directory for dev servers
- An **Ollama** instance or **OpenAI-compatible API** endpoint for AI features
The monorepo is organized as follows:
| Package | Role |
| -------------------- | --------------------------------------------------------------- |
| `gadget-code` | Web service — agentic IDE, browser UI, API server |
| `gadget-drone` | Worker process — runs the agentic workflow loop |
| `gadget-tasks` | Scheduled task worker — headless IDE client for cron-driven tasks |
| `@gadget/ai` | Shared AI API abstraction — Ollama and OpenAI |
| `@gadget/ai-toolbox` | Shared AI tool implementations — search, file, plan, subagent |
| `@gadget/api` | Shared TypeScript interfaces — common types across all packages |
| `@gadget/config` | Shared YAML config loader — per-package configuration |
AI providers are managed via CLI:
```bash
# Add Ollama (no API key needed)
pnpm cli provider add "Local Ollama" ollama http://localhost:11434
# Add OpenAI-compatible provider
pnpm cli provider add "OpenAI" openai https://api.openai.com $OPENAI_API_KEY
# Discover available models
pnpm cli provider probe <provider-id>
```
## The Journey to v1.0.1
This release represents 21 days of development from April 27 through May 17, 2026:
- **Days 12** (Apr 2728): Project initialization, dark industrial theme, JWT authentication, Project Manager, drone-to-IDE event routing, workspace persistence and crash recovery.
- **Days 34** (Apr 2930): Socket protocol completeness, DroneManager, GadgetId migration from ObjectId to nanoid-based string IDs, "Welcome to The Grid" home view.
- **Days 56** (May 13): Workspace mode switching with validation, session locks, basic chat system milestone — the first end-to-end working demo.
- **Days 78** (May 56): Agent tool and toolbox architecture, tool registration patterns, AI environment foundation.
- **Day 9** (May 7): Streaming responses implementation — real-time token delivery from Ollama.
- **Day 10** (May 8): Chat session heartbeat, user settings, logging unification into `@gadget/api` as GadgetLog, redesigned sign-in form.
- **Day 9 continued** (May 9): Agentic Workflow Loop rebuild, chat session auto-naming, drone-to-IDE log transport.
- **Day 11** (May 10): Workspace/project philosophy refinement, agent toolbox refactor, credential provider fixes.
- **Day 12** (May 11): Subagent processing, authentication fixes, deployment documentation with systemd service files.
- **Day 13** (May 12): FILES panel with lazy-loading file tree, CodeMirror editor integration (replacing react-ace for React 19 compat), abort controller.
- **Day 14** (May 13): Editor height fixes, User Mode documentation.
- **Day 15** (May 14): SubProcess observability — tracking spawned processes in the DroneManager and DroneInspector.
- **Day 16** (May 15): Pull Project feature, tool call observability, context window configuration, Gab AI affiliate link.
- **Days 1718** (May 1617): AI toolbox extraction into `@gadget/ai-toolbox`, Project Manager upgrades, gadget-tasks headless client architecture, release hardening.
## Project Direction
Gadget Code is built on a simple conviction: **your code, your models, your infrastructure**. The cloud AI ecosystem has moved toward vendor lock-in at every layer — proprietary models, closed platforms, data harvesting. Liberation is the alternative. Every component of Gadget Code is self-hosted. Every AI call goes through your providers. Every file stays on your disk. Every model runs on your hardware if you want it to.
This is also the first release where the release document itself is authored by Gadget — the AI agent — as part of the automated release workflow. The agent that writes code for you also writes the release notes. We think that's fitting.
## Get Started
Get the latest release at **https://g4dge7.com/** — the official home of Gadget Code.
Apache-2.0 licensed. Fully open source. No vendor lock-in. No data harvesting. No cloud dependency. Just you, your models, and your code.
That's Liberation.
---
*This RELEASE.md was authored by Gadget — the AI agent itself — as part of the automated release workflow. Gadget Code is licensed under the Apache-2.0 license. Both of these facts — an AI agent that can produce its own release notes, and a permissive open-source license that lets you build anything — are great reasons to switch to Gadget Code today. Get the latest release at https://g4dge7.com/.*

View File

@ -19,14 +19,6 @@ vi.mock("../src/services/socket");
vi.mock("../src/services/chat-session"); vi.mock("../src/services/chat-session");
vi.mock("../src/models/chat-turn"); vi.mock("../src/models/chat-turn");
vi.mock("../src/models/chat-session"); vi.mock("../src/models/chat-session");
vi.mock("../src/lib/tab-lock", () => ({
default: {
acquire: vi.fn().mockResolvedValue({ success: true }),
release: vi.fn().mockResolvedValue(undefined),
refresh: vi.fn().mockResolvedValue(true),
getInfo: vi.fn().mockResolvedValue(null),
},
}));
describe("CodeSession", () => { describe("CodeSession", () => {
let mockSocket: any; let mockSocket: any;
@ -278,14 +270,6 @@ describe("CodeSession", () => {
ChatSessionService.generateSessionNameFromPrompt, ChatSessionService.generateSessionNameFromPrompt,
).mockResolvedValue(namedSession as any); ).mockResolvedValue(namedSession as any);
// Mock drone to accept the work order so the success callback runs
mockDroneSession.socket.emit = vi.fn((event: string, ...args: any[]) => {
const callback = args[args.length - 1];
if (typeof callback === "function") {
callback(true, "work order accepted");
}
});
await codeSession.onSubmitPrompt("build a rest api", cb); await codeSession.onSubmitPrompt("build a rest api", cb);
expect( expect(
@ -350,7 +334,7 @@ describe("CodeSession", () => {
}); });
describe("onRequestSessionLock", () => { describe("onRequestSessionLock", () => {
it("should set selected drone, chat session, and project on success", async () => { it("should set selected drone, chat session, and project on success", () => {
const mockDroneSession = { const mockDroneSession = {
socket: { socket: {
emit: vi.fn((event: string, ...args: any[]) => { emit: vi.fn((event: string, ...args: any[]) => {
@ -373,11 +357,7 @@ describe("CodeSession", () => {
callback, callback,
); );
// The inner callback is async (awaits TabLock.acquire), so we need to expect(callback).toHaveBeenCalledWith(true, mockChatSession._id);
// wait for the microtask queue to flush before asserting
await vi.waitFor(() => {
expect(callback).toHaveBeenCalledWith(true, mockChatSession._id);
});
}); });
it("should not set session data on failure", () => { it("should not set session data on failure", () => {

View File

@ -1,6 +1,6 @@
{ {
"name": "gadget-workspace", "name": "gadget-workspace",
"version": "1.0.1", "version": "1.0.0",
"private": true, "private": true,
"description": "Gadget Code monorepo workspace root", "description": "Gadget Code monorepo workspace root",
"packageManager": "pnpm@10.33.2", "packageManager": "pnpm@10.33.2",

View File

@ -320,9 +320,6 @@ importers:
'@uiw/react-codemirror': '@uiw/react-codemirror':
specifier: ^4.25.9 specifier: ^4.25.9
version: 4.25.9(@babel/runtime@7.29.2)(@codemirror/autocomplete@6.20.2)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.6)(@codemirror/search@6.7.0)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.42.1)(codemirror@6.0.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) version: 4.25.9(@babel/runtime@7.29.2)(@codemirror/autocomplete@6.20.2)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.6)(@codemirror/search@6.7.0)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.42.1)(codemirror@6.0.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
lucide-react:
specifier: ^1.16.0
version: 1.16.0(react@19.2.5)
marked: marked:
specifier: ^16.4.2 specifier: ^16.4.2
version: 16.4.2 version: 16.4.2
@ -3040,11 +3037,6 @@ packages:
resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==}
engines: {node: 20 || >=22} engines: {node: 20 || >=22}
lucide-react@1.16.0:
resolution: {integrity: sha512-dYwyPzb4MEKpGUmNYk3WKWPnMrHs3FKM+q94kAnJrcDIqqn1hq2xY8scaS2ovsOCM5D51ey2gaRG3PBb1vgoYQ==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
luxon@3.7.2: luxon@3.7.2:
resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -6836,10 +6828,6 @@ snapshots:
lru-cache@11.3.5: {} lru-cache@11.3.5: {}
lucide-react@1.16.0(react@19.2.5):
dependencies:
react: 19.2.5
luxon@3.7.2: {} luxon@3.7.2: {}
lz-string@1.5.0: {} lz-string@1.5.0: {}