From bfa5fbdf010aa7c5b5888833806d71f956e03f2d Mon Sep 17 00:00:00 2001 From: nil957 <1733443062@qq.com> Date: Tue, 10 Mar 2026 04:01:12 +0800 Subject: [PATCH 01/21] fix(write-file): use error.message instead of error.msg in catch block (#467) Co-authored-by: Javis --- packages/agent-runtime/src/tools/handlers/tool/write-file.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/agent-runtime/src/tools/handlers/tool/write-file.ts b/packages/agent-runtime/src/tools/handlers/tool/write-file.ts index 4aa716641d..59a57802ee 100644 --- a/packages/agent-runtime/src/tools/handlers/tool/write-file.ts +++ b/packages/agent-runtime/src/tools/handlers/tool/write-file.ts @@ -139,7 +139,7 @@ export const handleWriteFile = (async ( return { tool: 'write_file' as const, path, - error: `Error: Failed to process the write_file block. ${typeof error === 'string' ? error : error.msg}`, + error: `Error: Failed to process the write_file block. ${typeof error === 'string' ? error : error.message}`, } }) .then(async (fileProcessingResult) => ({ From cbd8af2132b6b8a685704cdf120ef7f8f68ffc93 Mon Sep 17 00:00:00 2001 From: nil957 <1733443062@qq.com> Date: Tue, 10 Mar 2026 04:01:36 +0800 Subject: [PATCH 02/21] fix(cli): check publish command at argv[2] position only (#468) Co-authored-by: Javis --- cli/src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/src/index.tsx b/cli/src/index.tsx index 23fbd079a3..3b274c286d 100644 --- a/cli/src/index.tsx +++ b/cli/src/index.tsx @@ -189,7 +189,7 @@ async function main(): Promise { } = parseArgs() const isLoginCommand = process.argv[2] === 'login' - const isPublishCommand = process.argv.includes('publish') + const isPublishCommand = process.argv[2] === 'publish' const hasAgentOverride = Boolean(agent?.trim()) await initializeApp({ cwd }) From 3a02b504f8b07bc2f350f78d658345b7b8f0deaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=90=8D?= <13774486042@163.com> Date: Tue, 10 Mar 2026 04:05:07 +0800 Subject: [PATCH 03/21] fix: improve environment validation error messages (#461) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 陈家名 Co-authored-by: 陈家名 Co-authored-by: James Grugett --- README.md | 13 +++++++++++++ common/src/env.ts | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 275ed31cdc..4c5eaf9dec 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,19 @@ Learn more about the SDK [here](https://www.npmjs.com/package/@codebuff/sdk). **SDK**: Build Codebuff into your applications. Create custom tools, integrate with CI/CD, or embed coding assistance into your products. +## Advanced Usage + +### Custom Agent Workflows + +Create your own agents with specialized workflows using the `/init` command: + +```bash +codebuff +/init +``` + +This creates a custom agent structure in `.agents/` that you can customize. + ## Contributing to Codebuff We ❤️ contributions from the community - whether you're fixing bugs, tweaking our agents, or improving documentation. diff --git a/common/src/env.ts b/common/src/env.ts index f9328f91c2..0e30987b72 100644 --- a/common/src/env.ts +++ b/common/src/env.ts @@ -2,7 +2,8 @@ import { clientEnvSchema, clientProcessEnv } from './env-schema' const parsedEnv = clientEnvSchema.safeParse(clientProcessEnv) if (!parsedEnv.success) { - throw parsedEnv.error + console.error('Environment validation failed:', parsedEnv.error.errors) + throw new Error(`Invalid environment configuration: ${parsedEnv.error.message}`) } export const env = parsedEnv.data From b46ac0d096558f4f14480342f59f4e11981f59c4 Mon Sep 17 00:00:00 2001 From: Wooram Son Date: Tue, 10 Mar 2026 05:07:47 +0900 Subject: [PATCH 04/21] fix: preserve MCP tool params when MCP schemas are rendered as allOf (#459) --- .../__tests__/prompts-schema-handling.test.ts | 25 +++++++++++++++++++ packages/agent-runtime/src/tools/prompts.ts | 23 ++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/packages/agent-runtime/src/__tests__/prompts-schema-handling.test.ts b/packages/agent-runtime/src/__tests__/prompts-schema-handling.test.ts index 999d45e0f8..60970db02d 100644 --- a/packages/agent-runtime/src/__tests__/prompts-schema-handling.test.ts +++ b/packages/agent-runtime/src/__tests__/prompts-schema-handling.test.ts @@ -1,5 +1,6 @@ import { TEST_AGENT_RUNTIME_IMPL } from '@codebuff/common/testing/impl/agent-runtime' import { describe, test, expect, mock } from 'bun:test' +import { convertJsonSchemaToZod } from 'zod-from-json-schema' import { z } from 'zod/v4' import { buildAgentToolInputSchema, buildAgentToolSet } from '../templates/prompts' @@ -172,6 +173,30 @@ describe('Schema handling error recovery', () => { expect(description).toContain('content') }) + test('buildToolDescription preserves MCP params when schema is represented as allOf', () => { + const mcpSchema = convertJsonSchemaToZod({ + type: 'object', + properties: { + name: { type: 'string' }, + }, + required: ['name'], + additionalProperties: false, + }) + + const description = buildToolDescription({ + toolName: 'greet__greet', + schema: mcpSchema, + description: 'Call greet', + endsAgentStep: true, + }) + + expect(description).toContain('greet__greet') + expect(description).toContain('Params: {') + expect(description).toContain('allOf') + expect(description).toContain('name') + expect(description).not.toContain('Params: None') + }) + test('getToolSet handles custom tools with problematic schemas', async () => { // Create a custom tool definition with a schema that can't be converted const customToolDefs = { diff --git a/packages/agent-runtime/src/tools/prompts.ts b/packages/agent-runtime/src/tools/prompts.ts index a191412996..c87aaf875d 100644 --- a/packages/agent-runtime/src/tools/prompts.ts +++ b/packages/agent-runtime/src/tools/prompts.ts @@ -53,6 +53,27 @@ function toJsonSchemaSafe(schema: z.ZodType): Record { } } +function hasMeaningfulJsonSchema(jsonSchema: Record): boolean { + const properties = jsonSchema.properties + if (properties && typeof properties === 'object' && Object.keys(properties).length > 0) { + return true + } + + for (const key of ['allOf', 'anyOf', 'oneOf']) { + const value = jsonSchema[key] + if (Array.isArray(value) && value.length > 0) { + return true + } + } + + const required = jsonSchema.required + if (Array.isArray(required) && required.length > 0) { + return true + } + + return false +} + function paramsSection(params: { schema: z.ZodType; endsAgentStep: boolean }) { const { schema, endsAgentStep } = params const safeSchema = ensureJsonSchemaCompatible(schema) @@ -68,7 +89,7 @@ function paramsSection(params: { schema: z.ZodType; endsAgentStep: boolean }) { const jsonSchema = toJsonSchemaSafe(schemaWithEndsAgentStepParam) delete jsonSchema.description delete jsonSchema['$schema'] - const paramsDescription = Object.keys(jsonSchema.properties ?? {}).length + const paramsDescription = hasMeaningfulJsonSchema(jsonSchema) ? JSON.stringify(jsonSchema, null, 2) : 'None' From 80c472b422fdfa2ed63973a72150bd73454a8596 Mon Sep 17 00:00:00 2001 From: Ayorinde Adunse <39989192+ayorindeadunse@users.noreply.github.com> Date: Mon, 9 Mar 2026 21:09:08 +0100 Subject: [PATCH 05/21] docs:made modification to CONTRIBUTING.md to assist first timers in local setup. (#458) --- CONTRIBUTING.md | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f77449e838..0b0ac4f6db 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,12 +25,35 @@ Before you begin, you'll need to install a few tools: ```bash # Copy the example file cp .env.example .env.local - + # Edit .env.local and update DATABASE_URL to match Docker: # DATABASE_URL=postgresql://manicode_user_local:secretpassword_local@localhost:5432/manicode_db_local ``` - > **Team members**: For shared secrets management, see the [Infisical Setup Guide](./INFISICAL_SETUP_GUIDE.md). +### Required local env changes + +The `.env.example` provides defaults. When you create ` .env.local` make sure to update the following important fields for local development: + +- **OPEN_ROUTER_API_KEY**: set to your OpenRouter key (used for LLM calls). Example: + - `OPEN_ROUTER_API_KEY=sk-or-v1-...` +- **GRAVITY_API_KEY**: optional; use `test` for ad/analytics testing in dev. +- **PORT**: the example defaults to `4242`. This repo commonly runs on `3000` during development — set `PORT=3000` if you want the web app on `http://localhost:3000`. +- **NEXTAUTH_URL**: when using port 3000 set `NEXTAUTH_URL=http://localhost:3000` to ensure OAuth callbacks work. +- **CODEBUFF_GITHUB_ID** / **CODEBUFF_GITHUB_SECRET**: your GitHub OAuth app credentials — required to sign in locally via GitHub. +- **DATABASE_URL**: confirm this points to your local Docker Postgres (default is fine for the built-in Docker setup): + - `DATABASE_URL=postgresql://manicode_user_local:secretpassword_local@localhost:5432/manicode_db_local` +- **CODEBUFF_API_KEY**: optional CLI fallback — you can `export CODEBUFF_API_KEY=` for CLI commands. + +Notes / gotchas: + +- After editing `.env.local` you must restart the dev server (`bun run start-web`) — environment variables are loaded at startup. +- If you use OpenRouter, ensure the account associated with your API key has credits (OpenRouter will return 402 Payment Required otherwise). +- If you see Postgres role errors during migrations, re-create the DB and wait for it to fully initialize: + ```bash + cd packages/internal/src/db && docker compose down -v && docker compose up --wait + ``` + +> **Team members**: For shared secrets management, see the [Infisical Setup Guide](./INFISICAL_SETUP_GUIDE.md). 3. **Install dependencies**: @@ -39,7 +62,6 @@ Before you begin, you'll need to install a few tools: ``` 4. **Setup a Github OAuth app** - 1. Follow these instructions to set up a [Github OAuth app](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app) 2. Add your Github client ID and secret to `.env.local`: @@ -63,7 +85,6 @@ Before you begin, you'll need to install a few tools: Now, you should be able to run the CLI and send commands, but it will error out because you don't have any credits. 6. **Giving yourself credits**: - 1. Log into Codebuff at [http://localhost:3000/login](http://localhost:3000/login) 2. Then give yourself lots of credits. Be generous, you're the boss now! @@ -97,7 +118,6 @@ In order to run the CLI from other directories, you need to first publish the ag ``` - Repeat this until there are no more errors. - - As of the time of writing, the command required is: ```bash From b46330a6941a643010dc7d472de414c6bf299501 Mon Sep 17 00:00:00 2001 From: Qiaochu Hu <110hqc@gmail.com> Date: Tue, 10 Mar 2026 04:10:27 +0800 Subject: [PATCH 06/21] fix: preserve line breaks in expanded thinking content (#456) --- cli/src/components/thinking.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cli/src/components/thinking.tsx b/cli/src/components/thinking.tsx index 87731d48dd..bc1ab10e08 100644 --- a/cli/src/components/thinking.tsx +++ b/cli/src/components/thinking.tsx @@ -39,7 +39,7 @@ export const Thinking = memo( } const width = Math.max(10, availableWidth ?? contentMaxWidth) - // Normalize content to single line for consistent preview + // Normalize content to single line for consistent preview (but preserve in expanded mode) const normalizedContent = content.replace(/\n+/g, ' ').trim() // Account for "..." prefix (3 chars) when calculating line widths const effectiveWidth = width - 3 @@ -48,6 +48,8 @@ export const Thinking = memo( effectiveWidth, PREVIEW_LINE_COUNT, ) + // In expanded mode, preserve original line breaks for proper markdown rendering + const expandedContent = content.replace(/\n\n+/g, '\n\n').trim() const showFull = thinkingCollapseState === 'expanded' const showPreview = thinkingCollapseState === 'preview' && lines.length > 0 @@ -94,7 +96,7 @@ export const Thinking = memo( }} attributes={TextAttributes.ITALIC} > - {content} + {expandedContent} )} From 528b39f53c90d44bca51f91081a5ccdbb583d48d Mon Sep 17 00:00:00 2001 From: Salman Chishti Date: Mon, 9 Mar 2026 20:12:25 +0000 Subject: [PATCH 07/21] Upgrade GitHub Actions to latest versions (#454) Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com> --- .github/workflows/cli-release-prod.yml | 2 +- .github/workflows/cli-release-staging.yml | 2 +- .github/workflows/npm-app-release-legacy.yml | 2 +- .github/workflows/npm-app-release-prod.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cli-release-prod.yml b/.github/workflows/cli-release-prod.yml index 4977037bd8..07906161ac 100644 --- a/.github/workflows/cli-release-prod.yml +++ b/.github/workflows/cli-release-prod.yml @@ -103,7 +103,7 @@ jobs: path: cli/release/ - name: Create GitHub Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.prepare-and-commit-prod.outputs.new_version }} name: Release v${{ needs.prepare-and-commit-prod.outputs.new_version }} diff --git a/.github/workflows/cli-release-staging.yml b/.github/workflows/cli-release-staging.yml index 9f25be4198..fe6ce7ae95 100644 --- a/.github/workflows/cli-release-staging.yml +++ b/.github/workflows/cli-release-staging.yml @@ -176,7 +176,7 @@ jobs: path: cli/release-staging/ - name: Create GitHub Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.prepare-and-commit-staging.outputs.new_version }} name: Codecane v${{ needs.prepare-and-commit-staging.outputs.new_version }} (Staging) diff --git a/.github/workflows/npm-app-release-legacy.yml b/.github/workflows/npm-app-release-legacy.yml index 370bd2ba93..c9c475b991 100644 --- a/.github/workflows/npm-app-release-legacy.yml +++ b/.github/workflows/npm-app-release-legacy.yml @@ -100,7 +100,7 @@ jobs: path: npm-app/release/ - name: Create GitHub Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.prepare-and-commit-legacy.outputs.new_version }} name: Release v${{ needs.prepare-and-commit-legacy.outputs.new_version }} diff --git a/.github/workflows/npm-app-release-prod.yml b/.github/workflows/npm-app-release-prod.yml index 5722da2f54..b6ad95a170 100644 --- a/.github/workflows/npm-app-release-prod.yml +++ b/.github/workflows/npm-app-release-prod.yml @@ -100,7 +100,7 @@ jobs: path: npm-app/release/ - name: Create GitHub Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.prepare-and-commit-prod.outputs.new_version }} name: Release v${{ needs.prepare-and-commit-prod.outputs.new_version }} From e173efa8dd2989f37a2346b5ba480a0ee10881e2 Mon Sep 17 00:00:00 2001 From: Salman Chishti Date: Mon, 9 Mar 2026 20:15:30 +0000 Subject: [PATCH 08/21] Upgrade GitHub Actions for Node 24 compatibility (#453) Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com> --- .github/workflows/buffbench.yml | 4 ++-- .github/workflows/ci.yml | 20 ++++++++++---------- .github/workflows/cli-release-build.yml | 12 ++++++------ .github/workflows/cli-release-prod.yml | 16 ++++++++-------- .github/workflows/cli-release-staging.yml | 16 ++++++++-------- .github/workflows/evals.yml | 4 ++-- .github/workflows/mirror-dot-agents.yml | 2 +- .github/workflows/nightly-e2e.yml | 6 +++--- .github/workflows/nightly-evals.yml | 4 ++-- .github/workflows/npm-app-release-build.yml | 6 +++--- .github/workflows/npm-app-release-legacy.yml | 16 ++++++++-------- .github/workflows/npm-app-release-prod.yml | 16 ++++++++-------- .github/workflows/sdk-release.yml | 4 ++-- 13 files changed, 63 insertions(+), 63 deletions(-) diff --git a/.github/workflows/buffbench.yml b/.github/workflows/buffbench.yml index c5340994ae..ac48369956 100644 --- a/.github/workflows/buffbench.yml +++ b/.github/workflows/buffbench.yml @@ -9,7 +9,7 @@ jobs: timeout-minutes: 360 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Bun uses: oven-sh/setup-bun@v2 @@ -17,7 +17,7 @@ jobs: bun-version: '1.3.5' - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6f5ce2951f..f3fb94f612 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Bun uses: oven-sh/setup-bun@v2 @@ -26,7 +26,7 @@ jobs: bun-version: '1.3.5' - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules @@ -98,7 +98,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Bun uses: oven-sh/setup-bun@v2 @@ -106,7 +106,7 @@ jobs: bun-version: '1.3.5' - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules @@ -191,7 +191,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Bun uses: oven-sh/setup-bun@v2 @@ -199,7 +199,7 @@ jobs: bun-version: '1.3.5' - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules @@ -266,7 +266,7 @@ jobs: - 5432:5432 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Bun uses: oven-sh/setup-bun@v2 @@ -274,7 +274,7 @@ jobs: bun-version: '1.3.5' - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules @@ -354,7 +354,7 @@ jobs: - 5432:5432 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Bun uses: oven-sh/setup-bun@v2 @@ -362,7 +362,7 @@ jobs: bun-version: '1.3.5' - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules diff --git a/.github/workflows/cli-release-build.yml b/.github/workflows/cli-release-build.yml index 871694148c..4df1a1a8d8 100644 --- a/.github/workflows/cli-release-build.yml +++ b/.github/workflows/cli-release-build.yml @@ -56,7 +56,7 @@ jobs: arch: arm64 runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ inputs.checkout-ref || github.sha }} @@ -64,7 +64,7 @@ jobs: - name: Download staging metadata if: inputs.artifact-name != '' - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: ${{ inputs.artifact-name }} path: cli/release-staging/ @@ -191,7 +191,7 @@ jobs: tar -czf ${{ inputs.binary-name }}-${{ matrix.target }}.tar.gz -C cli/bin "$BINARY_FILE" - name: Upload binary artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ inputs.binary-name }}-${{ matrix.target }} path: ${{ inputs.binary-name }}-${{ matrix.target }}.tar.gz @@ -199,7 +199,7 @@ jobs: build-windows-binary: runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ inputs.checkout-ref || github.sha }} @@ -207,7 +207,7 @@ jobs: - name: Download staging metadata if: inputs.artifact-name != '' - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: ${{ inputs.artifact-name }} path: cli/release-staging/ @@ -326,7 +326,7 @@ jobs: tar -czf ${{ inputs.binary-name }}-win32-x64.tar.gz -C cli/bin "$BINARY_FILE" - name: Upload binary artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ inputs.binary-name }}-win32-x64 path: ${{ inputs.binary-name }}-win32-x64.tar.gz diff --git a/.github/workflows/cli-release-prod.yml b/.github/workflows/cli-release-prod.yml index 07906161ac..d6531fc14b 100644 --- a/.github/workflows/cli-release-prod.yml +++ b/.github/workflows/cli-release-prod.yml @@ -26,7 +26,7 @@ jobs: outputs: new_version: ${{ steps.bump_version.outputs.new_version }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: token: ${{ secrets.GITHUB_TOKEN }} @@ -68,7 +68,7 @@ jobs: git push origin "v${{ steps.bump_version.outputs.new_version }}" - name: Upload updated package - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: updated-package path: cli/release/ @@ -89,15 +89,15 @@ jobs: needs: [prepare-and-commit-prod, build-prod-binaries] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Download all binary artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: path: binaries/ - name: Download updated package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: updated-package path: cli/release/ @@ -137,16 +137,16 @@ jobs: contents: read id-token: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Download updated package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: updated-package path: cli/release/ - name: Set up Node.js for npm publishing - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 24 registry-url: https://registry.npmjs.org/ diff --git a/.github/workflows/cli-release-staging.yml b/.github/workflows/cli-release-staging.yml index fe6ce7ae95..617e7f38ff 100644 --- a/.github/workflows/cli-release-staging.yml +++ b/.github/workflows/cli-release-staging.yml @@ -22,7 +22,7 @@ jobs: outputs: new_version: ${{ steps.bump_version.outputs.new_version }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: token: ${{ secrets.GITHUB_TOKEN }} ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} @@ -111,7 +111,7 @@ jobs: git push origin "v${{ steps.bump_version.outputs.new_version }}" - name: Upload staging metadata - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: cli-staging-metadata path: cli/release-staging/ @@ -131,7 +131,7 @@ jobs: needs: [prepare-and-commit-staging, build-staging-binaries] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} @@ -165,12 +165,12 @@ jobs: fi - name: Download all binary artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: path: binaries/ - name: Download staging metadata - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: cli-staging-metadata path: cli/release-staging/ @@ -211,18 +211,18 @@ jobs: contents: read id-token: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} - name: Download CLI staging package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: cli-staging-metadata path: cli/release-staging/ - name: Set up Node.js with npm registry - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' registry-url: 'https://registry.npmjs.org' diff --git a/.github/workflows/evals.yml b/.github/workflows/evals.yml index 967718db59..de7cceae11 100644 --- a/.github/workflows/evals.yml +++ b/.github/workflows/evals.yml @@ -10,7 +10,7 @@ jobs: timeout-minutes: 360 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Check commit message id: check_commit @@ -34,7 +34,7 @@ jobs: - name: Cache dependencies if: ${{ steps.check_commit.outputs.should_run_evals == 'true' }} - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules diff --git a/.github/workflows/mirror-dot-agents.yml b/.github/workflows/mirror-dot-agents.yml index 024c56dc57..67bb820186 100644 --- a/.github/workflows/mirror-dot-agents.yml +++ b/.github/workflows/mirror-dot-agents.yml @@ -9,7 +9,7 @@ jobs: mirror: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/nightly-e2e.yml b/.github/workflows/nightly-e2e.yml index ddf1a710c8..1e25c5fc54 100644 --- a/.github/workflows/nightly-e2e.yml +++ b/.github/workflows/nightly-e2e.yml @@ -12,7 +12,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Bun uses: oven-sh/setup-bun@v2 @@ -20,7 +20,7 @@ jobs: bun-version: '1.3.5' - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules @@ -74,7 +74,7 @@ jobs: - name: Upload Playwright report on failure if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: playwright-report path: debug/playwright-report/ diff --git a/.github/workflows/nightly-evals.yml b/.github/workflows/nightly-evals.yml index 5bef546ebf..a8a776d75f 100644 --- a/.github/workflows/nightly-evals.yml +++ b/.github/workflows/nightly-evals.yml @@ -12,7 +12,7 @@ jobs: timeout-minutes: 360 # 6 hours is the max for any hosted github action steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Bun uses: oven-sh/setup-bun@v2 @@ -20,7 +20,7 @@ jobs: bun-version: '1.3.5' - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | node_modules diff --git a/.github/workflows/npm-app-release-build.yml b/.github/workflows/npm-app-release-build.yml index 2c2ac106e8..486716d0de 100644 --- a/.github/workflows/npm-app-release-build.yml +++ b/.github/workflows/npm-app-release-build.yml @@ -58,14 +58,14 @@ jobs: arch: x64 runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ inputs.checkout-ref || github.sha }} - uses: ./.github/actions/setup-project - name: Download updated package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: ${{ inputs.artifact-name }} path: ${{ inputs.artifact-name == 'updated-staging-package' && 'npm-app/release-staging/' || 'npm-app/release/' }} @@ -126,7 +126,7 @@ jobs: tar -czf ${{ inputs.binary-name }}-${{ matrix.target }}.tar.gz -C npm-app/bin $BINARY_FILE - name: Upload binary artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ inputs.binary-name }}-${{ matrix.target }} path: ${{ inputs.binary-name }}-${{ matrix.target }}.* diff --git a/.github/workflows/npm-app-release-legacy.yml b/.github/workflows/npm-app-release-legacy.yml index c9c475b991..61032ce932 100644 --- a/.github/workflows/npm-app-release-legacy.yml +++ b/.github/workflows/npm-app-release-legacy.yml @@ -23,7 +23,7 @@ jobs: outputs: new_version: ${{ steps.bump_version.outputs.new_version }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: token: ${{ secrets.GITHUB_TOKEN }} @@ -65,7 +65,7 @@ jobs: git push origin "v${{ steps.bump_version.outputs.new_version }}" - name: Upload updated package - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: updated-package path: npm-app/release-legacy/ @@ -86,15 +86,15 @@ jobs: needs: [prepare-and-commit-legacy, build-legacy-binaries] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Download all binary artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: path: binaries/ - name: Download updated package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: updated-package path: npm-app/release/ @@ -134,16 +134,16 @@ jobs: contents: read id-token: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Download updated package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: updated-package path: npm-app/release-legacy/ - name: Set up Node.js for npm publishing - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20 registry-url: https://registry.npmjs.org/ diff --git a/.github/workflows/npm-app-release-prod.yml b/.github/workflows/npm-app-release-prod.yml index b6ad95a170..03676ccde8 100644 --- a/.github/workflows/npm-app-release-prod.yml +++ b/.github/workflows/npm-app-release-prod.yml @@ -23,7 +23,7 @@ jobs: outputs: new_version: ${{ steps.bump_version.outputs.new_version }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: token: ${{ secrets.GITHUB_TOKEN }} @@ -65,7 +65,7 @@ jobs: git push origin "v${{ steps.bump_version.outputs.new_version }}" - name: Upload updated package - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: updated-package path: npm-app/release/ @@ -86,15 +86,15 @@ jobs: needs: [prepare-and-commit-prod, build-prod-binaries] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Download all binary artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: path: binaries/ - name: Download updated package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: updated-package path: npm-app/release/ @@ -134,16 +134,16 @@ jobs: contents: read id-token: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Download updated package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: updated-package path: npm-app/release/ - name: Set up Node.js for npm publishing - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20 registry-url: https://registry.npmjs.org/ diff --git a/.github/workflows/sdk-release.yml b/.github/workflows/sdk-release.yml index df33725fef..2c59fa55ea 100644 --- a/.github/workflows/sdk-release.yml +++ b/.github/workflows/sdk-release.yml @@ -24,7 +24,7 @@ jobs: outputs: new_version: ${{ steps.bump_version.outputs.new_version }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: token: ${{ secrets.GITHUB_TOKEN }} @@ -94,7 +94,7 @@ jobs: bun run verify - name: Set up Node.js for npm publishing - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 24 registry-url: https://registry.npmjs.org/ From 52fed9057d17d1ea50fc221d055d918862ba074e Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 14:39:19 -0700 Subject: [PATCH 09/21] script to run freebuff cli --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index beaa8e4da6..c95ac6e682 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "format": "prettier --write \"**/*.{ts,tsx,json,md}\"", "release:cli": "bun run --cwd=cli release", "release:sdk": "bun run --cwd=sdk release", + "dev:freebuff": "FREEBUFF_MODE=true bun --cwd cli dev", "release:freebuff": "bun run --cwd=freebuff release", "clean-ts": "find . -name '*.tsbuildinfo' -type f -delete && find . -name '.next' -type d -exec rm -rf {} + 2>/dev/null || true && find . -name 'node_modules' -type d -exec rm -rf {} + 2>/dev/null || true && bun install", "typecheck": "bun scripts/check-env-architecture.ts && bun --filter='*' run typecheck && echo '✅ All type checks passed!'", From dcc4d340b8ee16919c942986254a9cf3b51538f4 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 14:39:37 -0700 Subject: [PATCH 10/21] freebuff: Don't show modes as slash commands --- cli/src/data/slash-commands.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/cli/src/data/slash-commands.ts b/cli/src/data/slash-commands.ts index 8dbf91fd81..5beeb21c5f 100644 --- a/cli/src/data/slash-commands.ts +++ b/cli/src/data/slash-commands.ts @@ -22,12 +22,14 @@ export interface SlashCommand { insertText?: string } -// Generate mode commands from the AGENT_MODES constant -const MODE_COMMANDS: SlashCommand[] = AGENT_MODES.map((mode) => ({ - id: `mode:${mode.toLowerCase()}`, - label: `mode:${mode.toLowerCase()}`, - description: `Switch to ${mode} mode`, -})) +// Generate mode commands from the AGENT_MODES constant (excluded in Freebuff) +const MODE_COMMANDS: SlashCommand[] = IS_FREEBUFF + ? [] + : AGENT_MODES.map((mode) => ({ + id: `mode:${mode.toLowerCase()}`, + label: `mode:${mode.toLowerCase()}`, + description: `Switch to ${mode} mode`, + })) const FREEBUFF_REMOVED_COMMAND_IDS = new Set([ 'connect:claude', From 6da2dd4e3680b5d62a6e57a98c69cec8d7cf07c2 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 14:40:02 -0700 Subject: [PATCH 11/21] Fix type error --- common/src/env.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/env.ts b/common/src/env.ts index 0e30987b72..3258241bb1 100644 --- a/common/src/env.ts +++ b/common/src/env.ts @@ -2,7 +2,7 @@ import { clientEnvSchema, clientProcessEnv } from './env-schema' const parsedEnv = clientEnvSchema.safeParse(clientProcessEnv) if (!parsedEnv.success) { - console.error('Environment validation failed:', parsedEnv.error.errors) + console.error('Environment validation failed:', parsedEnv.error.issues) throw new Error(`Invalid environment configuration: ${parsedEnv.error.message}`) } From 5624135ddfb39d9dbcd59674bb1c7c7ecbc90c6b Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 14:44:46 -0700 Subject: [PATCH 12/21] Fix to not log debug cache in prod --- packages/agent-runtime/src/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/agent-runtime/src/constants.ts b/packages/agent-runtime/src/constants.ts index f410dec1cc..d2981d4562 100644 --- a/packages/agent-runtime/src/constants.ts +++ b/packages/agent-runtime/src/constants.ts @@ -8,4 +8,4 @@ export const globalStopSequence = `${JSON.stringify(endsAgentStepParam)}` * bun scripts/compare-cache-debug.ts * to diff sequential requests and find what's breaking prompt caching. */ -export const CACHE_DEBUG_FULL_LOGGING = true +export const CACHE_DEBUG_FULL_LOGGING = false From 3cce2223013e7dc93426f910b5a0f7d877387b0a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 21:46:48 +0000 Subject: [PATCH 13/21] Bump version to 1.0.627 --- cli/release/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/release/package.json b/cli/release/package.json index 101a5f3228..646da9843a 100644 --- a/cli/release/package.json +++ b/cli/release/package.json @@ -1,6 +1,6 @@ { "name": "codebuff", - "version": "1.0.626", + "version": "1.0.627", "description": "AI coding agent", "license": "MIT", "bin": { From 01abbbcbb7951023796b7879734ee47b6ca17c32 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 14:53:47 -0700 Subject: [PATCH 14/21] Fix streaming --- sdk/src/impl/llm.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sdk/src/impl/llm.ts b/sdk/src/impl/llm.ts index 5d58f7e100..2e6e7624ed 100644 --- a/sdk/src/impl/llm.ts +++ b/sdk/src/impl/llm.ts @@ -386,13 +386,6 @@ export async function* promptAiSdkStream( }, }) - const requestMetadata = await response.request - emitCacheDebugProviderRequest({ - callback: params.onCacheDebugProviderRequestBuilt, - provider: getModelProvider(aiSDKModel), - rawBody: requestMetadata.body, - }) - const stopSequenceHandler = new StopSequenceHandler(params.stopSequences) // Track if we've yielded any content - if so, we can't safely fall back @@ -587,6 +580,13 @@ export async function* promptAiSdkStream( const responseValue = await response.response const messageId = responseValue.id + const requestMetadata = await response.request + emitCacheDebugProviderRequest({ + callback: params.onCacheDebugProviderRequestBuilt, + provider: getModelProvider(aiSDKModel), + rawBody: requestMetadata.body, + }) + // Skip cost tracking for Claude OAuth (user is on their own subscription) if (!isClaudeOAuth) { const providerMetadataResult = await response.providerMetadata From 7ea4c3992910af3c3af030fd2761e710e0a4a500 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 21:54:31 +0000 Subject: [PATCH 15/21] Bump version to 1.0.628 --- cli/release/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/release/package.json b/cli/release/package.json index 646da9843a..9aa06bb83e 100644 --- a/cli/release/package.json +++ b/cli/release/package.json @@ -1,6 +1,6 @@ { "name": "codebuff", - "version": "1.0.627", + "version": "1.0.628", "description": "AI coding agent", "license": "MIT", "bin": { From 7f3bc20e42ffe0365cce013b2a1aac4c26e27129 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 22:04:55 +0000 Subject: [PATCH 16/21] Bump Freebuff version to 0.0.4 --- freebuff/cli/release/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebuff/cli/release/package.json b/freebuff/cli/release/package.json index 10e3835633..0c903e3d91 100644 --- a/freebuff/cli/release/package.json +++ b/freebuff/cli/release/package.json @@ -1,6 +1,6 @@ { "name": "freebuff", - "version": "0.0.3", + "version": "0.0.4", "description": "The world's strongest free coding agent", "license": "MIT", "bin": { From 1e7f8d99599ad3a4ed0c5f3b0f699d1ef4bec538 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 15:02:26 -0700 Subject: [PATCH 17/21] Don't include /init in freebuff --- cli/src/data/slash-commands.ts | 1 + freebuff/SPEC.md | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/src/data/slash-commands.ts b/cli/src/data/slash-commands.ts index 5beeb21c5f..806aa89e64 100644 --- a/cli/src/data/slash-commands.ts +++ b/cli/src/data/slash-commands.ts @@ -42,6 +42,7 @@ const FREEBUFF_REMOVED_COMMAND_IDS = new Set([ 'agent:gpt-5', 'image', 'publish', + 'init', ]) const ALL_SLASH_COMMANDS: SlashCommand[] = [ diff --git a/freebuff/SPEC.md b/freebuff/SPEC.md index 7156d67c67..8d2881e13b 100644 --- a/freebuff/SPEC.md +++ b/freebuff/SPEC.md @@ -91,7 +91,6 @@ Freebuff only supports **FREE mode**. All mode-related features are stripped. | Command | Notes | |---|---| | `/help` | Modified help content (see §6) | -| `/init` | Create knowledge.md | | `/new` (+ `/clear`, `/reset`, `/n`, `/c`) | Clear conversation | | `/history` (+ `/chats`) | Browse past conversations | | `/feedback` (+ `/bug`, `/report`) | Share feedback | @@ -278,7 +277,7 @@ These features work identically in Freebuff: - **Agent mentions** (`@agents`) — Use available agents (free-tier agents only) - **Bash mode** — Run terminal commands - **Image attachments** — Attach and paste images -- **Knowledge files** — `knowledge.md`, `/init` +- **Knowledge files** — `knowledge.md` - **Chat history** — `/history`, resume conversations - **Feedback** — `/feedback` command - **Theme** — Light/dark toggle From 912e3f22946a59049ffd9e94fc7a1dd29afe6e99 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 15:24:39 -0700 Subject: [PATCH 18/21] freebuff: remove extra command line args --- cli/src/index.tsx | 63 ++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/cli/src/index.tsx b/cli/src/index.tsx index 3b274c286d..62579dba34 100644 --- a/cli/src/index.tsx +++ b/cli/src/index.tsx @@ -101,38 +101,51 @@ type ParsedArgs = { function parseArgs(): ParsedArgs { const program = new Command() - program - .name(IS_FREEBUFF ? 'freebuff' : 'codebuff') - .description(IS_FREEBUFF ? 'Freebuff - Free AI coding assistant' : 'Codebuff CLI - AI-powered coding assistant') - .version(loadPackageVersion(), '-v, --version', 'Print the CLI version') - .option( - '--agent ', - 'Run a specific agent id (skips loading local .agents overrides)', - ) - .option('--clear-logs', 'Remove any existing CLI log files before starting') - .option( - '--continue [conversation-id]', - 'Continue from a previous conversation (optionally specify a conversation id)', - ) - .option( - '--cwd ', - 'Set the working directory (default: current directory)', - ) - - if (!IS_FREEBUFF) { + if (IS_FREEBUFF) { + // Freebuff: simplified CLI - no prompt args, no agent override, no clear-logs + program + .name('freebuff') + .description('Freebuff - Free AI coding assistant') + .version(loadPackageVersion(), '-v, --version', 'Print the CLI version') + .option( + '--continue [conversation-id]', + 'Continue from a previous conversation (optionally specify a conversation id)', + ) + .option( + '--cwd ', + 'Set the working directory (default: current directory)', + ) + .helpOption('-h, --help', 'Show this help message') + .parse(process.argv) + } else { + // Codebuff: full CLI with all options program + .name('codebuff') + .description('Codebuff CLI - AI-powered coding assistant') + .version(loadPackageVersion(), '-v, --version', 'Print the CLI version') + .option( + '--agent ', + 'Run a specific agent id (skips loading local .agents overrides)', + ) + .option('--clear-logs', 'Remove any existing CLI log files before starting') + .option( + '--continue [conversation-id]', + 'Continue from a previous conversation (optionally specify a conversation id)', + ) + .option( + '--cwd ', + 'Set the working directory (default: current directory)', + ) .option('--free', 'Start in FREE mode') .option('--lite', 'Start in FREE mode (deprecated, use --free)') .option('--max', 'Start in MAX mode') .option('--plan', 'Start in PLAN mode') + .helpOption('-h, --help', 'Show this help message') + .argument('[prompt...]', 'Initial prompt to send to the agent') + .allowExcessArguments(true) + .parse(process.argv) } - program - .helpOption('-h, --help', 'Show this help message') - .argument('[prompt...]', 'Initial prompt to send to the agent') - .allowExcessArguments(true) - .parse(process.argv) - const options = program.opts() const args = program.args From 09bb841dc9b3839b8dc022e34f25c25d3998ccf2 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 15:43:12 -0700 Subject: [PATCH 19/21] Update base2-free to use regular tools instead of agents that run multiple tool calls in parallel --- agents/base2/base2.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/agents/base2/base2.ts b/agents/base2/base2.ts index 021e58e5e4..8f2781f67c 100644 --- a/agents/base2/base2.ts +++ b/agents/base2/base2.ts @@ -68,13 +68,16 @@ export function createBase2( !noAskUser && 'ask_user', 'skill', 'set_output', + isFree && 'code_search', + isFree && 'list_directory', + isFree && 'glob', ), spawnableAgents: buildArray( !isMax && 'file-picker', isMax && 'file-picker-max', - 'code-searcher', - 'directory-lister', - 'glob-matcher', + !isFree && 'code-searcher', + !isFree && 'directory-lister', + !isFree && 'glob-matcher', 'researcher-web', 'researcher-docs', isFree ? 'commander-lite' : 'commander', From 4083833eddf2a0e9f8a3eccde66ae4ba1b4e99cd Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 9 Mar 2026 15:47:20 -0700 Subject: [PATCH 20/21] freebuff: no propose tools --- agents/base2/base2.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agents/base2/base2.ts b/agents/base2/base2.ts index 8f2781f67c..31ffa89439 100644 --- a/agents/base2/base2.ts +++ b/agents/base2/base2.ts @@ -63,8 +63,8 @@ export function createBase2( !isFast && !noAskUser && 'suggest_followups', 'str_replace', 'write_file', - 'propose_str_replace', - 'propose_write_file', + !isFree && 'propose_str_replace', + !isFree && 'propose_write_file', !noAskUser && 'ask_user', 'skill', 'set_output', From 7d5f9c65edefa0ad86a9ed616b822fcbe6414a8f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 22:48:07 +0000 Subject: [PATCH 21/21] Bump Freebuff version to 0.0.5 --- freebuff/cli/release/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebuff/cli/release/package.json b/freebuff/cli/release/package.json index 0c903e3d91..f0e21a6392 100644 --- a/freebuff/cli/release/package.json +++ b/freebuff/cli/release/package.json @@ -1,6 +1,6 @@ { "name": "freebuff", - "version": "0.0.4", + "version": "0.0.5", "description": "The world's strongest free coding agent", "license": "MIT", "bin": {