{ "name": "claude-dev", "displayName": "Cline", "description": "Autonomous coding agent right in your IDE, capable of creating/editing files, running commands, using the browser, and more with your permission every step of the way.", "version": "4.0.0", "icon": "assets/icons/icon.png", "engines": { "vscode": "^1.84.0" }, "author": { "name": "Cline Bot Inc." }, "license": "Apache-2.0", "publisher": "saoudrizwan", "repository": { "type": "git", "url": "https://github.com/cline/cline" }, "homepage": "https://cline.bot", "categories": [ "AI", "Chat", "Programming Languages", "Education", "Snippets", "Testing" ], "keywords": [ "cline", "claude", "dev", "mcp", "openrouter", "coding", "agent", "autonomous", "chatgpt", "sonnet", "ai", "llama" ], "activationEvents": [ "onLanguage", "onUri", "onStartupFinished" ], "main": "./dist/extension.js", "contributes": { "icons": { "cline-icon": { "description": "cline", "default": { "fontPath": "assets/icons/cline-bot.woff", "fontCharacter": "\\e900" } } }, "walkthroughs": [ { "id": "ClineWalkthrough", "title": "Meet Cline, your new coding partner", "description": "Cline codes like a developer because it thinks like one. Here are 5 ways to put it to work:", "steps": [ { "id": "welcome", "title": "Start with a Goal, Not Just a Prompt", "description": "Tell Cline what you want to achieve. It plans, asks, and then codes, like a true partner.", "media": { "markdown": "walkthrough/step1.md" } }, { "id": "learn", "title": "Let Cline Learn Your Codebase", "description": "Point Cline to your project. It builds understanding to make smart, context-aware changes.", "media": { "markdown": "walkthrough/step2.md" } }, { "id": "advanced-features", "title": "Always Use the Best AI Models", "description": "Cline empowers you with State-of-the-Art AI, connecting to top models (Anthropic, Gemini, OpenAI & more).", "media": { "markdown": "walkthrough/step3.md" } }, { "id": "mcp", "title": "Extend with Powerful Tools (MCP)", "description": "Connect to databases, APIs, and other external tools through MCP.", "media": { "markdown": "walkthrough/step4.md" } }, { "id": "getting-started", "title": "You're Always in Control", "description": "Review Cline's plans and diffs. Approve changes before they happen. No surprises.", "media": { "markdown": "walkthrough/step5.md" }, "content": { "path": "walkthrough/step5.md" } } ] } ], "viewsContainers": { "activitybar": [ { "id": "claude-dev-ActivityBar", "title": "Cline", "icon": "assets/icons/icon.svg" } ] }, "views": { "claude-dev-ActivityBar": [ { "type": "webview", "id": "claude-dev.SidebarProvider", "name": "", "icon": "assets/icons/icon.svg" } ] }, "commands": [ { "command": "cline.plusButtonClicked", "title": "New Task", "icon": "$(add)" }, { "command": "cline.mcpButtonClicked", "title": "MCP Servers", "icon": "$(server)" }, { "command": "cline.marketplaceButtonClicked", "title": "Customize", "icon": "$(wrench)" }, { "command": "cline.historyButtonClicked", "title": "History", "icon": "$(history)" }, { "command": "cline.accountButtonClicked", "title": "Account", "icon": "$(account)" }, { "command": "cline.settingsButtonClicked", "title": "Settings", "icon": "$(settings-gear)" }, { "command": "cline.dev.createTestTasks", "title": "Create Test Tasks", "category": "Cline", "when": "cline.isDevMode" }, { "command": "cline.dev.expireMcpOAuthTokens", "title": "Expire MCP OAuth Tokens (for testing)", "category": "Cline", "when": "cline.isDevMode" }, { "command": "cline.addToChat", "title": "Add to Cline", "category": "Cline" }, { "command": "cline.addTerminalOutputToChat", "title": "Add to Cline", "category": "Cline" }, { "command": "cline.focusChatInput", "title": "Jump to Chat Input", "category": "Cline" }, { "command": "cline.generateGitCommitMessage", "title": "Generate Commit Message with Cline", "category": "Cline", "icon": "$(cline-icon)" }, { "command": "cline.abortGitCommitMessage", "title": "Generate Commit Message with Cline - Stop", "category": "Cline", "icon": "$(debug-stop)" }, { "command": "cline.explainCode", "title": "Explain with Cline", "category": "Cline" }, { "command": "cline.improveCode", "title": "Improve with Cline", "category": "Cline" }, { "command": "cline.jupyterGenerateCell", "title": "Generate Jupyter Cell with Cline", "category": "Cline", "icon": "$(sparkle)" }, { "command": "cline.jupyterExplainCell", "title": "Explain Jupyter Cell with Cline", "category": "Cline", "icon": "$(question)" }, { "command": "cline.jupyterImproveCell", "title": "Improve Jupyter Cell with Cline", "category": "Cline", "icon": "$(lightbulb)" }, { "command": "cline.openWalkthrough", "title": "Open Walkthrough", "category": "Cline" }, { "command": "cline.reconstructTaskHistory", "title": "Reconstruct Task History", "category": "Cline" } ], "keybindings": [ { "command": "cline.addToChat", "key": "cmd+'", "mac": "cmd+'", "win": "ctrl+'", "linux": "ctrl+'", "when": "editorHasSelection" }, { "command": "cline.generateGitCommitMessage", "when": "config.git.enabled && scmProvider == git" }, { "command": "cline.focusChatInput", "key": "cmd+'", "mac": "cmd+'", "win": "ctrl+'", "linux": "ctrl+'", "when": "!editorHasSelection" } ], "menus": { "view/title": [ { "command": "cline.plusButtonClicked", "group": "navigation@1", "when": "view == claude-dev.SidebarProvider" }, { "command": "cline.marketplaceButtonClicked", "group": "navigation@2", "when": "view == claude-dev.SidebarProvider" }, { "command": "cline.historyButtonClicked", "group": "navigation@3", "when": "view == claude-dev.SidebarProvider" }, { "command": "cline.accountButtonClicked", "group": "navigation@5", "when": "view == claude-dev.SidebarProvider" }, { "command": "cline.settingsButtonClicked", "group": "navigation@6", "when": "view == claude-dev.SidebarProvider" } ], "editor/context": [ { "command": "cline.addToChat", "group": "navigation", "when": "editorHasSelection" } ], "terminal/context": [ { "command": "cline.addTerminalOutputToChat", "group": "navigation" } ], "scm/title": [ { "command": "cline.generateGitCommitMessage", "group": "navigation", "when": "config.git.enabled && scmProvider == git && !cline.isGeneratingCommit" }, { "command": "cline.abortGitCommitMessage", "group": "navigation", "when": "config.git.enabled && scmProvider == git && cline.isGeneratingCommit" } ], "notebook/toolbar": [ { "command": "cline.jupyterGenerateCell", "group": "navigation/add@1", "when": "notebookType == 'jupyter-notebook'" } ], "notebook/cell/title": [ { "command": "cline.jupyterExplainCell", "group": "inline@1", "when": "notebookType == 'jupyter-notebook'" }, { "command": "cline.jupyterImproveCell", "group": "inline@2", "when": "notebookType == 'jupyter-notebook'" } ], "commandPalette": [ { "command": "cline.generateGitCommitMessage", "when": "config.git.enabled && !cline.isGeneratingCommit" }, { "command": "cline.abortGitCommitMessage", "when": "config.git.enabled && cline.isGeneratingCommit" } ] }, "configuration": { "title": "Cline", "properties": {} } }, "scripts": { "vscode:prepublish": "bun run package", "compile": "bun run check-types && bun run lint && bun esbuild.mjs", "compile-standalone": "bun run check-types && bun run lint && bun esbuild.mjs --standalone", "postcompile-standalone": "node scripts/package-standalone.mjs", "dev": "bun run protos && bun run watch", "watch": "bun run --parallel watch:esbuild watch:tsc", "watch:esbuild": "bun esbuild.mjs --watch", "watch:tsc": "tsc --noEmit --watch --project tsconfig.json", "package": "bun run check-types && bun run build:webview && bun run lint && bun esbuild.mjs --production", "protos": "node scripts/build-proto.mjs", "protos-python": "node scripts/build-python-proto.mjs", "download-ripgrep": "node scripts/download-ripgrep.mjs", "postprotos": "biome format --config-path ./biome.jsonc src/shared/proto src/core/controller src/hosts/ webview-ui/src/services src/generated --write --no-errors-on-unmatched", "clean:build": "rimraf dist dist-standalone webview-ui/build src/generated out/", "clean:deps": "rimraf node_modules webview-ui/node_modules", "clean:all": "bun run clean:build && bun run clean:deps", "compile-tests": "node ./scripts/build-tests.js", "watch-tests": "tsc -p . -w --outDir out", "check-types": "bun run protos && bunx tsc --noEmit && cd webview-ui && bunx tsc --noEmit", "lint": "biome lint --config-path ./biome.jsonc --no-errors-on-unmatched --files-ignore-unknown=true --diagnostic-level=error && bun run lint:proto", "lint:proto": "bash ./scripts/proto-lint.sh", "analyze:unused": "bunx --yes knip --config knip.json --include files,exports,types,enumMembers,duplicates", "analyze:unused:prod": "bunx --yes knip --config knip.json --production --include files,exports,types,enumMembers,dependencies", "analyze:unused:fix-exports": "node scripts/remove-unused-exports.mjs --apply", "analyze:unused:fix-exports:dry": "node scripts/remove-unused-exports.mjs", "format": "biome format --config-path ./biome.jsonc --changed --since main --no-errors-on-unmatched --files-ignore-unknown=true --diagnostic-level=error --semicolons=as-needed", "format:fix": "biome check --config-path ./biome.jsonc --changed --since main --no-errors-on-unmatched --files-ignore-unknown=true --write --semicolons=as-needed", "fix:all": "biome check --config-path ./biome.jsonc --no-errors-on-unmatched --files-ignore-unknown=true --write --diagnostic-level=error --unsafe --semicolons=as-needed", "ci:check-all": "bun run --parallel check-types lint format", "ci:build": "bun run protos && bun run build:webview && bun esbuild.mjs && bun run compile-tests", "pretest": "bun run compile && bun run compile-tests && bun run compile-standalone && bun run lint", "test": "bun run test:unit && bun run test:integration", "test:integration": "bun run compile-tests && vscode-test", "test:unit": "bun scripts/run-bun-unit-tests.ts", "test:vitest": "vitest run --config vitest.config.ts", "test:vitest:watch": "vitest --config vitest.config.ts", "test:bun": "bun scripts/run-bun-tests.ts", "test:bun:unit": "bun scripts/run-bun-unit-tests.ts", "test:coverage": "bun run compile-tests && vscode-test --coverage", "test:sca-server": "bun --watch scripts/test-standalone-core-api-server.ts", "test:tp-orchestrator": "bun scripts/testing-platform-orchestrator.ts", "dev:mcp-oauth-test-server": "bun src/dev/mcp-oauth-test-server/server.ts", "e2e": "playwright test -c playwright.config.ts", "test:e2e:build": "vsce package --no-dependencies --allow-package-secrets sendgrid --out dist/e2e.vsix", "test:e2e": "playwright install && bun run test:e2e:build && node src/test/e2e/utils/build.mjs && playwright test", "test:e2e:optimal": "bun run test:e2e:build && node src/test/e2e/utils/build.mjs && playwright test", "test:e2e:ui": "bun scripts/interactive-playwright.ts", "install:all": "bun install", "dev:webview": "node scripts/clean-webview-vite-cache.mjs && cd webview-ui && bun run dev", "build:webview": "bun run protos && cd webview-ui && bun run build", "test:webview": "cd webview-ui && bun run test", "publish:marketplace": "node scripts/publish-marketplace.mjs", "publish:marketplace:prerelease": "node scripts/publish-marketplace.mjs --pre-release", "publish:marketplace:nightly": "node ./scripts/publish-nightly.mjs", "docs": "cd docs && bun run dev", "docs:check-links": "cd docs && bun run check", "docs:rename-file": "cd docs && bun run rename", "report-issue": "node scripts/report-issue.js", "storybook": "cd webview-ui && bun run storybook", "eval:smoke:run": "bun evals/smoke-tests/run-smoke-tests.ts" }, "lint-staged": { "src/shared/storage/state-keys.ts": [ "node scripts/generate-state-proto.mjs", "git add apps/vscode/proto/cline/state.proto" ], "*": [ "biome check --write --staged --no-errors-on-unmatched --files-ignore-unknown=true --semicolons=as-needed" ] }, "devDependencies": { "@biomejs/biome": "^2.3.14", "@bufbuild/buf": "^1.54.0", "@microsoft/tui-test": "0.0.1", "@types/better-sqlite3": "^7.6.13", "@types/chai": "^5.0.1", "@types/clone-deep": "^4.0.4", "@types/get-folder-size": "^3.0.4", "@types/js-yaml": "^4.0.9", "@types/mocha": "^10.0.7", "@types/node": "20.x", "@types/pdf-parse": "^1.1.4", "@types/picomatch": "^4.0.2", "@types/shell-quote": "^1.7.5", "@types/should": "^11.2.0", "@types/sinon": "^21.0.0", "@types/turndown": "^5.0.5", "@types/vscode": "1.84.0", "@vscode/test-cli": "^0.0.12", "@vscode/test-electron": "^2.5.2", "@vscode/vsce": "^3.6.0", "c8": "^10.1.3", "chai": "^4.3.10", "chalk": "5.6.2", "dotenv": "^17.2.3", "esbuild": "^0.25.0", "glob": "^11.0.0", "grpc-tools": "^1.13.0", "lint-staged": "^16.1.0", "minimatch": "^3.0.3", "minimist": "^1.2.8", "mocha": "^11.7.4", "playwright": "^1.55.1", "prebuild-install": "^7.1.3", "protoc-gen-ts": "^0.8.7", "rimraf": "^6.0.1", "should": "^13.2.3", "sinon": "^21.0.3", "tar": "^7.5.2", "tree-kill": "^1.2.2", "ts-proto": "^2.6.1", "tsconfig-paths": "^4.2.0", "typescript": "^5.4.5", "vitest": "^4.0.17" }, "dependencies": { "@anthropic-ai/sdk": "^0.37.0", "@bufbuild/protobuf": "^2.2.5", "@cline/agents": "workspace:*", "@cline/core": "workspace:*", "@cline/llms": "workspace:*", "@cline/shared": "workspace:*", "@google/genai": "^1.30.0", "@grpc/grpc-js": "^1.9.15", "@grpc/proto-loader": "^0.7.13", "@grpc/reflection": "^1.0.4", "@modelcontextprotocol/sdk": "^1.25.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.56.0", "@opentelemetry/core": "^2.1.0", "@opentelemetry/exporter-logs-otlp-grpc": "^0.56.0", "@opentelemetry/exporter-logs-otlp-http": "^0.56.0", "@opentelemetry/exporter-logs-otlp-proto": "^0.56.0", "@opentelemetry/exporter-metrics-otlp-grpc": "^0.56.0", "@opentelemetry/exporter-metrics-otlp-http": "^0.56.0", "@opentelemetry/exporter-metrics-otlp-proto": "^0.56.0", "@opentelemetry/exporter-prometheus": "^0.56.0", "@opentelemetry/exporter-trace-otlp-http": "^0.56.0", "@opentelemetry/instrumentation": "^0.205.0", "@opentelemetry/instrumentation-http": "^0.205.0", "@opentelemetry/resources": "^1.30.1", "@opentelemetry/sdk-logs": "^0.56.0", "@opentelemetry/sdk-metrics": "^1.30.1", "@opentelemetry/sdk-node": "^0.56.0", "@opentelemetry/sdk-trace-base": "^2.1.0", "@opentelemetry/sdk-trace-node": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.37.0", "@playwright/test": "^1.55.1", "@streamparser/json": "^0.0.22", "@tailwindcss/vite": "^4.1.14", "@types/uuid": "^10.0.0", "@vscode/codicons": "^0.0.36", "archiver": "^7.0.1", "aws4fetch": "^1.0.20", "axios": "1.16.1", "better-sqlite3": "^12.4.1", "cheerio": "^1.0.0", "chokidar": "^4.0.1", "chrome-launcher": "^1.1.2", "clone-deep": "^4.0.1", "default-shell": "^2.2.0", "diff": "8.0.4", "exceljs": "^4.4.0", "execa": "^9.5.2", "fast-deep-equal": "^3.1.3", "fzf": "^0.5.2", "get-folder-size": "^5.0.0", "globby": "^14.0.2", "grpc-health-check": "^2.0.2", "iconv-lite": "^0.6.3", "ignore": "^7.0.3", "image-size": "^2.0.2", "isbinaryfile": "^5.0.2", "js-yaml": "^4.1.1", "jschardet": "^3.1.4", "json5": "^2.2.3", "jwt-decode": "^4.0.0", "mammoth": "^1.11.0", "nanoid": "^5.1.6", "nice-grpc": "^2.1.12", "nice-grpc-common": "^2.0.3", "node-machine-id": "^1.1.12", "open": "^10.1.2", "open-graph-scraper": "^6.9.0", "openai": "^6.21.0", "os-name": "^6.0.0", "p-mutex": "^1.0.0", "p-timeout": "^6.1.4", "p-wait-for": "^5.0.2", "pdf-parse": "^1.1.1", "picomatch": "^4.0.3", "posthog-node": "^5.8.0", "puppeteer-chromium-resolver": "^23.0.0", "puppeteer-core": "^23.4.0", "reconnecting-eventsource": "^1.6.4", "serialize-error": "^11.0.3", "shell-quote": "^1.8.3", "simple-git": "3.36.0", "strip-ansi": "^7.1.2", "tailwindcss": "^4.1.14", "ts-morph": "^25.0.1", "turndown": "^7.2.0", "ulid": "^2.4.0", "undici": "^7.26.0", "uuid": "^11.1.0", "vscode-uri": "^3.1.0", "zod": "^4.3.6" }, "c8": { "reporter": [ "lcov", "html" ], "exclude": [ "**/testing-platform/**", "**/webview-ui/**", "**/.vscode-test/**", "**/node_modules/**", "node_modules", "**/dist-standalone/src/**", "**/dist-standalone/vsce-extension/https:/**", "**/dist-standalone/vsce-extension/**", "**/dist-standalone/https:/**", "**/dist-standalone/LIB/src/**", "**/dist-standalone/pdfjs-dist/**", "**/*.d.ts", "**/*.{test,spec}.{js,jsx,ts,tsx,mjs,cjs}", "**/__tests__/**", "**/test/**", "**/tests/**", "**/.nyc_output/**", "**/tests-results/**", "src/test/**", "**/src/xml/**", "**/standalone/**", "**/src/generated/**", "dist" ], "all": true, "exclude-after-remap": true } }