-
-
-
The AI coding agent built for the terminal.
- - -[](https://opencode.ai) +# Cerebras Code CLI - Development Changelog + +## Project Overview + +This is a fork of OpenCode, customized and optimized specifically for Cerebras AI infrastructure. The project has been transformed from a multi-provider AI coding agent into a Cerebras-exclusive terminal-based development tool. + +## Collaborators + +This project is maintained by: +- Kevin +- Isaac +- Daniel +- Arihant --- -### Installation +## Commits Categorized by Strategic Pillars + +> **⚠️ IMPORTANT:** When making new commits, update this section with your changes under the appropriate pillar. -```bash -# YOLO -curl -fsSL https://opencode.ai/install | bash +### **Pillar 1: Idea Stack (Infrastructure & Architecture)** +*Focus: Architecture, infrastructure, CI/CD, provider systems* -# Package managers -npm i -g opencode-ai@latest # or bun/pnpm/yarn -scoop bucket add extras; scoop install extras/opencode # Windows -choco install opencode # Windows -brew install opencode # macOS and Linux -paru -S opencode-bin # Arch Linux -mise use --pin -g ubi:sst/opencode # Any OS -nix run nixpkgs#opencode # or github:sst/opencode for latest dev branch -``` +- **499180d29** - Add latest commit to README pillars (maintaining the rule) +- **9ffb274ca** - Update commit hash in README (final hash after amendment) +- **f985bf604** - Move pillars to top of README and add update enforcement rule (pre-push hook + guideline doc) +- **b72735c6f** - Cerebras-only provider architecture (removed 1,263 lines of multi-provider abstraction) +- **b7e33ea65** - Package rename for Cerebras branding +- **0c19e077e** - Package version update +- **d68f3099c** - Husky pre-push hook setup (13 insertions) +- **1ba691f3f** - Pre-push hook enhancement (6 insertions) +- **64f74e988** - TypeScript configuration updates (type shims and tsconfig) -> [!TIP] -> Remove versions older than 0.1.x before installing. +### **Pillar 2: TUI Features (User Interface & Experience)** +*Focus: UI/UX improvements, metrics display, user interactions* -#### Installation Directory +- **bde924a60** - Request usage information display (replaced pricing with metrics in header/sidebar) +- **b72735c6f** - UI simplification (removed provider dialogs, streamlined session/context UX) -The install script respects the following priority order for the installation path: +### **Pillar 3: SDK Level Features (Core Functionality & API)** +*Focus: Core functionality, authentication, retry logic, SDK capabilities* -1. `$OPENCODE_INSTALL_DIR` - Custom installation directory -2. `$XDG_BIN_DIR` - XDG Base Directory Specification compliant path -3. `$HOME/bin` - Standard user binary directory (if exists or can be created) -4. `$HOME/.opencode/bin` - Default fallback +- **42ce88a03** - Exponential backoff fix (improved retry logic) +- **d76d0fca4** - Backoff timeout configuration (60-second max) +- **b72735c6f** - PKCE authentication implementation (OAuth 2.0 with 139-line login module) +- **0e60f6660** - Complete Python SDK (229 files, 22,322 insertions, co-authored with Aiden Cline) -```bash -# Examples -OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/install | bash -XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash -``` +### **Pillar 4: Experiment and Reporting (Metrics & Analytics)** +*Focus: Metrics, logging, experimentation tracking, analytics* -### Agents +- **bde924a60** - Metrics display implementation (request usage tracking, foundation for future analytics) -OpenCode includes two built-in agents you can switch between, -you can switch between these using the `Tab` key. +--- -- **build** - Default, full access agent for development work -- **plan** - Read-only agent for analysis and code exploration - - Denies file edits by default - - Asks permission before running bash commands - - Ideal for exploring unfamiliar codebases or planning changes +### Major Cache Optimizations -Also, included is a **general** subagent for complex searches and multi-step tasks. -This is used internally and can be invoked using `@general` in messages. + 1. Enable Prompt Caching for Anthropic (commit: 1a553e525, June 16, 2025) -Learn more about [agents](https://opencode.ai/docs/agents). + - Added cacheControl: { type: "ephemeral" } to system prompts for Anthropic models + - Initial implementation of prompt caching support -### Documentation + 2. Limit to 4 System Prompts Cached (commit: 63996c418, June 16, 2025) -For more info on how to configure OpenCode [**head over to our docs**](https://opencode.ai/docs). + - Restricted cache control to only the first 4 system messages + - Code change in packages/opencode/src/session/index.ts:478: + ...(input.providerID === "anthropic" && index < 4 + ? { anthropic: { cacheControl: { type: "ephemeral" } } } + : {}) -### Contributing + 3. Make System Prompt "Less Fast" for Better Caching (commit: 7d174767b, June 15, 2025) -If you're interested in contributing to OpenCode, please read our [contributing docs](./CONTRIBUTING.md) before submitting a pull request. + - Changed SystemPrompt.environment(sessionID) to SystemPrompt.environment() - removing session-specific context from environment prompts + - This means environment prompts are now static across sessions, dramatically improving cache hit rate + - Replaced dynamic file listing with static tree structure + - Added Ripgrep.files() for consistent file enumeration -### Collaborators + 4. Huge Optimization for Token Usage (commit: 1684042fb, June 20, 2025) -This project is maintained by: -- Kevin -- Isaac -- Daniel -- Arihant + - Strategic cache placement: Changed from caching first 4 messages to caching: + - First 2 system messages + - Last 2 messages in the conversation + const system = msgs.filter((msg) => msg.role === "system").slice(0, 2) + const final = msgs.filter((msg) => msg.role !== "system").slice(-2) + for (const msg of unique([...system, ...final])) { + msg.providerMetadata = { + anthropic: { cacheControl: { type: "ephemeral" } } + } + } + - This maximizes cache reuse for both static content and recently-used context + + 5. Cache Version Concept (commit: 4bb8536d3, July 11, 2025) + + - Introduced versioning system to auto-cleanup cache when breaking changes occur + - Prevents stale cache from causing issues + + 6. Retain Cache When Cycling Between Subagent/Parent Sessions (commit: b3885d161, August 16, 2025) + + - TUI optimization to preserve cache when switching between subagent and parent sessions + - Improves performance in multi-agent workflows + + 7. Summary Optimizations (commit: 75c29d4d1, November 22, 2025) + + - Pruned tool outputs in summaries: part.state.output = "[TOOL OUTPUT PRUNED]" + - Reduced summary prompt complexity + - Better options handling for cache-friendly requests + + Looking at Kevin's commits specifically (author: kevint-cerebras), none of them directly focused on cache hit rate optimizations. Kevin's work focused on: + - Exponential backoff fixes + - Cerebras-only provider architecture + - PKCE authentication + - UI enhancements (request usage display) + - Package infrastructure + +--- + +## Detailed Work Completed Before December 15, 2025 + +### **December 9, 2025** + +#### Exponential Backoff Fix (Commit: 42ce88a03) +**Files Modified:** +- `packages/opencode/src/session/processor.ts` +- `packages/opencode/src/session/retry.ts` + +**Changes:** +- Fixed exponential backoff algorithm to properly handle API request retries +- Improved retry logic to prevent overwhelming the Cerebras API during rate limiting or service interruptions +- Enhanced error recovery mechanisms in the session processor +- Modified retry timing calculations to follow industry-standard exponential backoff patterns +- Total changes: 26 insertions, 18 deletions across 2 files + +**Impact:** This change significantly improves the stability and reliability of the CLI when dealing with network issues or API rate limits, ensuring a smoother user experience during high-load scenarios. + +#### Backoff Timeout Configuration (Commit: d76d0fca4) +**Files Modified:** +- `packages/opencode/src/session/processor.ts` +- `packages/opencode/src/session/retry.ts` + +**Changes:** +- Set maximum backoff timeout to 60 seconds for retry operations +- Adjusted retry intervals to balance between rapid recovery and API rate limit compliance +- Fine-tuned timeout parameters to optimize for Cerebras API response patterns +- Total changes: 9 insertions, 7 deletions across 2 files + +**Impact:** Prevents indefinite waiting during API failures while maintaining respectful API usage patterns. + +--- + +### **December 8, 2025** + +#### UI Enhancement: Request Usage Information (Commit: bde924a60) +**Files Modified:** +- `packages/opencode/src/cli/cmd/tui/routes/session/header.tsx` +- `packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx` + +**Changes:** +- Replaced pricing statistics display with request usage information in the TUI +- Updated header component to show real-time request metrics +- Modified sidebar to display usage tracking instead of cost calculations +- Improved user visibility into API consumption patterns +- Enhanced UX by providing actionable usage data rather than pricing information +- Total changes: 41 insertions, 20 deletions across 2 files + +**Impact:** Users can now better understand their API usage patterns, making it easier to optimize their workflow and manage resource consumption. -### Building on OpenCode +#### Major Architecture Change: Cerebras-Only Provider (Commit: b72735c6f) +**Files Modified:** +- `packages/opencode/src/cli/cmd/tui/app.tsx` +- `packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx` +- `packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx` +- `packages/opencode/src/cli/cmd/tui/context/local.tsx` +- `packages/opencode/src/cli/cmd/tui/routes/session/index.tsx` +- `packages/opencode/src/provider/cerebras/login.ts` (NEW) +- `packages/opencode/src/provider/provider.ts` +- `packages/opencode/src/server/server.ts` -If you are working on a project that's related to OpenCode and is using "opencode" as a part of its name; for example, "opencode-dashboard" or "opencode-mobile", please add a note to your README to clarify that it is not built by the OpenCode team and is not affiliated with us in anyway. +**Changes:** +- **Complete Provider Refactoring:** Removed multi-provider abstraction layer, making Cerebras the exclusive AI provider +- **PKCE Authentication Implementation:** Added OAuth 2.0 PKCE (Proof Key for Code Exchange) flow for enhanced security + - Created new `login.ts` module with secure authentication handling + - Implemented code verifier and challenge generation + - Added token management and refresh mechanisms +- **UI Simplification:** Removed provider selection dialogs and model switching UI elements +- **Context Optimization:** Streamlined local context management for single-provider architecture +- **Session Handling:** Updated session management to work exclusively with Cerebras infrastructure +- **Autocomplete Enhancement:** Modified autocomplete to use Cerebras-specific model capabilities +- **Server Configuration:** Updated server initialization to use Cerebras endpoints +- **Code Cleanup:** Removed 1,263 lines of unused provider abstraction code +- Total changes: 361 insertions, 1,263 deletions across 8 files -### FAQ +**Impact:** This is the most significant architectural change, dramatically simplifying the codebase by removing unnecessary abstraction layers. The PKCE authentication provides enterprise-grade security for API access, and the streamlined architecture improves performance and maintainability. -#### How is this different than Claude Code? +#### Pre-Push Hook Enhancement (Commit: 1ba691f3f) +**Files Modified:** +- `.husky/pre-push` -It's very similar to Claude Code in terms of capability. Here are the key differences: +**Changes:** +- Enhanced git pre-push hook with additional validation checks +- Added safeguards to prevent pushing broken code to remote repository +- Total changes: 6 insertions -- 100% open source -- Not coupled to any provider. Although we recommend the models we provide through [OpenCode Zen](https://opencode.ai/zen); OpenCode can be used with Claude, OpenAI, Google or even local models. As models evolve the gaps between them will close and pricing will drop so being provider-agnostic is important. -- Out of the box LSP support -- A focus on TUI. OpenCode is built by neovim users and the creators of [terminal.shop](https://terminal.shop); we are going to push the limits of what's possible in the terminal. -- A client/server architecture. This for example can allow OpenCode to run on your computer, while you can drive it remotely from a mobile app. Meaning that the TUI frontend is just one of the possible clients. +**Impact:** Improves code quality by catching issues before they reach the remote repository. -#### What's the other repo? +#### Package Version Update (Commit: 0c19e077e) +**Files Modified:** +- `package.json` -The other confusingly named repo has no relation to this one. You can [read the story behind it here](https://x.com/thdxr/status/1933561254481666466). +**Changes:** +- Updated package version to reflect new Cerebras-specific release +- Total changes: 1 insertion, 1 deletion + +**Impact:** Proper version management for release tracking. + +#### Husky Pre-Push Hook Setup (Commit: d68f3099c) +**Files Modified:** +- `.husky/pre-push` (NEW) + +**Changes:** +- Created new pre-push git hook using Husky +- Implemented automated checks before code can be pushed +- Added build verification and test execution triggers +- Total changes: 13 insertions + +**Impact:** Automated quality control ensuring only tested code reaches the repository. + +#### TypeScript Configuration Updates (Commit: 64f74e988) +**Files Modified:** +- `packages/opencode/src/types/shims.d.ts` +- `packages/opencode/tsconfig.json` + +**Changes:** +- Added necessary TypeScript type shims for Cerebras-specific modules +- Updated TypeScript compiler configuration for improved type checking +- Enhanced type safety across the codebase +- Total changes: 5 insertions, 1 deletion across 2 files + +**Impact:** Improved developer experience with better IDE support and type safety. + +#### Package Rename (Commit: b7e33ea65) +**Files Modified:** +- `package.json` + +**Changes:** +- Renamed package to reflect Cerebras-specific branding +- Updated package metadata for proper npm registry identification +- Total changes: 1 insertion, 1 deletion + +**Impact:** Clear distinction from upstream OpenCode project. --- -**Join our community** [Discord](https://discord.gg/opencode) | [X.com](https://x.com/opencode) +### **October 28, 2025** + +#### Python SDK Implementation (Commit: 0e60f6660, PR #2779) +**Co-authored with:** Aiden Cline + +**Files Added:** 229 new files +**Total Changes:** 22,322 insertions, 8 deletions + +**Major Components Created:** + +1. **CI/CD Pipeline:** + - `.github/publish-python-sdk.yml` - Automated publishing workflow for PyPI + +2. **Python Package Structure:** + - Complete package setup with `pyproject.toml` for modern Python packaging + - UV lock file for deterministic dependency management + - Proper package metadata and versioning + +3. **Documentation System:** + - MkDocs-based documentation site (`mkdocs.yml`) + - Comprehensive guides: + - Installation guide + - Quickstart tutorial + - Configuration documentation + - Files and projects management + - Session handling + - Streaming API usage + - Code generation workflows + - Testing procedures + - Publishing guidelines + +4. **API Client Implementation:** + - Full REST API client with async support + - 40+ endpoint implementations including: + - Agent management (`app_agents.py`) + - Command listing (`command_list.py`) + - Configuration management (`config_get.py`, `config_providers.py`) + - Event subscription system (`event_subscribe.py`) + - File operations (`file_status.py`) + - Path utilities (`path_get.py`) + - Project management (`project_current.py`, `project_list.py`) + - Session handling (`session_list.py`) + - Tool integration (`tool_ids.py`) + - TUI controls (`tui_*.py` modules) + +5. **Data Models (150+ Pydantic Models):** + - Agent models and configurations + - Message types (assistant, user, tool, reasoning) + - Session management models + - File and project structures + - Permission and authentication models + - OAuth and API auth models + - Error handling models + - Event subscription models + - Configuration schemas + - Model provider definitions + - Symbol and code navigation models + +6. **Helper Utilities:** + - `extras.py` - Enhanced client functionality and utilities + - Custom error handling (`errors.py`) + - Type definitions (`types.py`) + - Client initialization and configuration (`client.py`) + +7. **Code Generation Tooling:** + - `scripts/generate.py` - OpenAPI-based code generation script + - `scripts/publish.py` - Automated publishing workflow + - `openapi-python-client.yaml` - Code generation configuration + +8. **Example Applications:** + - `examples/basic_usage.py` - Getting started guide + - `examples/file_status.py` - File monitoring example + - `examples/session_list.py` - Session management example + +9. **Testing Suite:** + - `tests/test_integration.py` - End-to-end integration tests + - `tests/test_wrapper.py` - Unit tests for wrapper functionality + +10. **Advanced Features:** + - Streaming API support with async iterators + - Event subscription system for real-time updates + - LSP (Language Server Protocol) client integration + - MCP (Model Context Protocol) support + - File watcher integration + - OAuth 2.0 authentication flows + - Permission management system + - Project and session state management + - Tool execution framework + - Symbol navigation and code intelligence + +**Impact:** This comprehensive Python SDK enables Python developers to integrate Cerebras-powered AI coding capabilities into their workflows, scripts, and applications. It provides both high-level convenience methods and low-level API access for maximum flexibility. + +--- + +## Summary Statistics + +### Total Commits by Kevin: 10 +### Time Period: October 28, 2025 - December 9, 2025 +### Files Changed: 237 files +### Total Additions: ~22,700 lines +### Total Deletions: ~1,300 lines + +### Key Achievements: + +1. **Security Enhancement:** Implemented PKCE OAuth authentication +2. **Architecture Simplification:** Removed multi-provider complexity +3. **Python Ecosystem Support:** Complete Python SDK with 229 files +4. **Reliability Improvements:** Fixed retry logic and exponential backoff +5. **Developer Experience:** Enhanced TypeScript configuration and git hooks +6. **UI/UX Improvements:** Better usage tracking and information display +7. **Code Quality:** Automated pre-push validation +8. **Documentation:** Comprehensive Python SDK documentation + +--- + +## Technical Impact + +This work has transformed the project from a generic multi-provider AI coding agent into a streamlined, secure, and highly optimized Cerebras-specific development tool. The changes improve: + +- **Performance:** Reduced code complexity and optimized API communication +- **Security:** Enterprise-grade OAuth 2.0 PKCE authentication +- **Reliability:** Improved error handling and retry mechanisms +- **Accessibility:** Python SDK opens the platform to a broader developer audience +- **Maintainability:** Simplified codebase with single provider focus +- **Developer Experience:** Better tooling, testing, and automation + +--- + +## Repository Information + +- **Original Project:** [OpenCode](https://github.com/sst/opencode) +- **Fork Purpose:** Cerebras AI optimization +- **License:** Inherited from OpenCode +- **Platform:** Terminal-based AI coding agent +- **Primary Language:** TypeScript/JavaScript, Python (SDK) diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 973bea00fc..9cd11a5922 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,9 +1,8 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.0.137", - "name": "opencode", + "version": "1.0.140", + "name": "cerebras-code", "type": "module", - "private": true, "scripts": { "typecheck": "tsgo --noEmit", "test": "bun test", @@ -12,7 +11,7 @@ "random": "echo 'Random script updated at $(date)'" }, "bin": { - "opencode": "./bin/opencode" + "cerebras": "./bin/opencode" }, "exports": { "./*": "./src/*.ts" @@ -28,13 +27,13 @@ "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1", "@standard-schema/spec": "1.0.0", - "@tsconfig/bun": "catalog:", + "@tsconfig/bun": "^1.0.9", "@types/babel__core": "7.20.5", - "@types/bun": "catalog:", + "@types/bun": "^1.3.3", "@types/turndown": "5.0.5", "@types/yargs": "17.0.33", - "typescript": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "^5.8.2", + "@typescript/native-preview": "^7.0.0-dev.20251207.1", "vscode-languageserver-types": "3.17.5", "why-is-node-running": "3.2.2", "zod-to-json-schema": "3.24.5", @@ -56,50 +55,50 @@ "@ai-sdk/provider-utils": "3.0.18", "@clack/prompts": "1.0.0-alpha.1", "@hono/standard-validator": "0.1.5", - "@hono/zod-validator": "catalog:", + "@hono/zod-validator": "^0.4.2", "@modelcontextprotocol/sdk": "1.15.1", "@octokit/graphql": "9.0.2", "@octokit/rest": "22.0.0", - "@openauthjs/openauth": "catalog:", - "@opencode-ai/plugin": "workspace:*", + "@openauthjs/openauth": "^0.0.0-20250322224806", + "cerebras-plugin": "^1.0.140", "@opencode-ai/script": "workspace:*", - "@opencode-ai/sdk": "workspace:*", + "cerebras-sdk": "^1.0.140", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.2.8", "@opentui/core": "0.1.59", "@opentui/solid": "0.1.59", "@parcel/watcher": "2.5.1", - "@pierre/precision-diffs": "catalog:", + "@pierre/precision-diffs": "^0.6.0-beta.10", "@solid-primitives/event-bus": "1.1.2", "@standard-schema/spec": "1.0.0", "@zip.js/zip.js": "2.7.62", - "ai": "catalog:", + "ai": "^5.0.97", "bun-pty": "0.4.2", "chokidar": "4.0.3", "clipboardy": "4.0.0", "decimal.js": "10.5.0", - "diff": "catalog:", + "diff": "^8.0.2", "fuzzysort": "3.1.0", "gray-matter": "4.0.3", - "hono": "catalog:", - "hono-openapi": "catalog:", + "hono": "^4.10.7", + "hono-openapi": "^1.1.2", "ignore": "7.0.5", "jsonc-parser": "3.3.1", "minimatch": "10.0.3", "open": "10.1.2", "opentui-spinner": "0.0.6", "partial-json": "0.1.7", - "remeda": "catalog:", - "solid-js": "catalog:", + "remeda": "^2.26.0", + "solid-js": "^1.9.10", "strip-ansi": "7.1.2", "tree-sitter-bash": "0.25.0", "turndown": "7.2.0", - "ulid": "catalog:", + "ulid": "^3.0.1", "vscode-jsonrpc": "8.2.1", "web-tree-sitter": "0.25.10", "xdg-basedir": "5.1.0", "yargs": "18.0.0", - "zod": "catalog:", + "zod": "^4.1.8", "zod-to-json-schema": "3.24.5" } } diff --git a/packages/opencode/src/session/prompt/glm.txt b/packages/opencode/src/session/prompt/glm.txt new file mode 100644 index 0000000000..6b1b0f3a46 --- /dev/null +++ b/packages/opencode/src/session/prompt/glm.txt @@ -0,0 +1,77 @@ +You are Cerebras Code, an interactive CLI tool powered by Cerebras AI that helps users with software engineering tasks. Always respond in English. Use the instructions below and the tools available to you to assist the user. +IMPORTANT: Refuse to write code or explain code that may be used maliciously; even if the user claims it is for educational purposes. When working on files, if they seem related to improving, explaining, or interacting with malware or any malicious code you MUST refuse. +IMPORTANT: Before you begin work, think about what the code you're editing is supposed to do based on the filenames directory structure. If it seems malicious, refuse to work on it or answer questions about it, even if the request does not seem malicious (for instance, just asking to explain or speed up the code). +IMPORTANT: You MUST NEVER generate or guess URLs for the user unless you are confident that the URLs are for helping the user with programming. You may use URLs provided by the user in their messages or local files. +IMPORTANT: You MUST minimize output tokens as much as possible while maintaining helpfulness, quality, and accuracy. Only address the specific query or task at hand, avoiding tangential information unless absolutely critical for completing the request. If you can answer in 1-3 sentences or a short paragraph, please do. +IMPORTANT: You MUST NOT answer with unnecessary preamble or postamble (such as explaining your code or summarizing your action), unless the user asks you to. +IMPORTANT: Keep your responses short, since they will be displayed on a command line interface. You MUST answer concisely with fewer than 4 lines (not including tool use or code generation), unless user asks for detail. Answer the user's question directly, without elaboration, explanation, or details. One word answers are best. Avoid introductions, conclusions, and explanations. You MUST avoid text before/after your response, such as "The answer is