mirror of
https://github.com/cline/cline.git
synced 2026-10-25 10:26:36 +08:00
* fix(vscode): persist rule toggle state for SDK loader * fix(vscode): confine rule toggle frontmatter writes and preserve authored YAML - Only write rule documents the SDK loader actually reads (.md, .markdown, .txt, or the bare .clinerules file) that resolve, through symlinks, to a regular file inside the scope's rules root (global Rules dir or the workspace .clinerules). Anything else keeps the extension-state toggle only. - Edit the top-level `disabled` entry line by line instead of re-dumping the YAML block, so comments, key order, quoting, CRLF line endings and a UTF-8 BOM survive a toggle. Re-parse before writing and leave the file untouched if the result would not parse. Skills share the helper and get the same. - Reconcile extension state with frontmatter on rules refresh: toggles turned off before this fix are written to the file so SDK sessions honor them, and a file disabled by hand wins over a stale enabled toggle. * fix(vscode): write rule toggles into every rule root the panel scans Rebase adjustment: since the rules panel now scans both .clinerules and .cline/rules plus every global location the shared resolver knows, the frontmatter write and the state<->frontmatter reconcile take the same directory lists instead of the two hardcoded roots. * fix(vscode): make rule files authoritative for toggles after a one-time back-fill - Match the SDK's disabled precedence: a boolean `disabled` wins, `enabled: false` only counts when `disabled` is absent. - Recognize quoted frontmatter keys when editing the disabled line. - Return written/skipped/failed from the frontmatter write; on failure the toggle handler reverts the state toggle and returns the reverted map so the panel keeps showing what the SDK loads. - Back-fill state toggles into frontmatter once, behind a new global state flag; afterwards the file is the source of truth for the panel in both directions, so removing `disabled` from a file re-enables the rule. - Only write files the SDK loader reads: direct children of a rule root, or the single legacy .clinerules file. * fix(vscode): back-fill rule toggles per workspace and accept uppercase YAML booleans - The one-time back-fill marker is now keyed per scope (global, and one entry per workspace path), so a workspace opened after another one was migrated still gets its pre-fix off toggles written into its rule files instead of having them flipped on by the file-wins reconcile. - The enabled: false matcher accepts False and FALSE, which both YAML parsers in play read as boolean false, so re-enabling removes those lines too. * fix(vscode): keep the workspace back-fill marker in workspace state Each window holds its own copy of global state and the last writer wins per key, so two windows migrating different workspaces could erase each other's marker in the shared record. The global marker is a plain flag again and the workspace marker moves to workspace state, keyed by workspace path, which is per window and never shared. * fix(vscode): report a rule toggle as failed when the file could not be edited safely The frontmatter helper returns the document unchanged both when it already carries the requested state and when it cannot be edited safely (malformed YAML, or an edit that would not re-parse). The write wrapper treated both as success, so the toggle handler kept the new state while the SDK kept loading the old one. An unchanged document now counts as written only if it parses and already matches the requested state; otherwise the handler reverts. * fix(vscode): retry a failed rule back-fill and keep comments after inline disabled values - A back-fill write that fails (read-only file, malformed frontmatter) keeps the off toggle and leaves the scope's migration marker unset, so the next refresh retries instead of treating the unwritten file as re-enabled. - An entry with an inline scalar value is a single line, so an indented comment after `disabled: true` is no longer removed with it. * fix(vscode): track the rule back-fill per rule instead of per scope A scope-wide migration marker forced a choice between two failure modes: mark the scope done after a failed back-fill (the unwritten rule turns on), or keep the whole scope pending (a rule the user re-enabled by hand gets back-filled again). Each rule now records whether its file is authoritative. A rule joins that set when state and file agree, when the file disables it, when its back-fill succeeds, or when the toggle handler writes it; only a rule whose back-fill failed stays pending and is retried on the next refresh. The global set lives in global state and the workspace set in workspace state, replacing the unreleased scope markers. Also handle an inline disabled value that continues on later lines (a flow collection or a split quoted string) by taking lines until the entry parses. * fix(vscode): keep global rule authority records in their own settings file Every window caches global state and persists its whole snapshot, so a window that started before another one back-filled a global rule kept no record of it. After the user re-enabled that rule by editing its file, refreshing the stale window back-filled it again. The global records now live in settings/cline-rules-frontmatter-authority.json, re-read on every refresh and merged on every write, so windows only ever add to them. Records for deleted rule files are dropped on write. Workspace records stay in workspace state, which is a separate file per workspace. * fix(vscode): make the rule file the only source of truth for rule toggles Drop the one-time back-fill of toggles saved before the toggle wrote frontmatter. Telling such a toggle apart from a rule the user re-enabled by editing its file needs per-rule history, and every place to keep it (scope flags, global state, workspace state, a settings file) failed across multiple windows, crashes, or hand edits. The Rules panel now shows what the frontmatter says on every refresh, and the toggle writes it. A rule switched off before this fix shows as on after upgrading, which is what the SDK has been loading, and is switched off once more. Removes the per-rule authority records, the authority settings file, and the localClineRulesFrontmatterAuthoritative workspace key. The multi-layout refresh test now marks its disabled fixtures in frontmatter. * fix(vscode): verify the requested state before reporting a toggle write The rule and skill write paths trusted the frontmatter editor's output. An edit that left a disabling flag the editor did not recognize (for example a legacy `enabled: false` whose value is on the next line) was written and reported as success, so the panel showed the rule or skill as on while the SDK still excluded it. Both paths now re-parse the edited document and treat anything not in the requested state as a failure, so the rule toggle handler reverts and the skill write reports false without writing. * fix(vscode): edit rule and skill frontmatter by YAML source range The line-based editor guessed entry boundaries from line shapes. It missed a legacy `enabled: false` whose value sits on the next line, matched `disabled:` lines inside multi-line string values (changing unrelated metadata while still producing valid YAML), and dropped comments on and around the flag. The editor now parses the frontmatter with the SDK loader's YAML parser and splices only the source ranges of the top-level `disabled` and `enabled` entries. Disabling sets an existing value or appends `disabled: true`. Enabling removes those entries, or flips the value in place when the entry carries a comment so the comment survives. Anything the SDK would reject (invalid YAML, duplicate keys, non-boolean flags) is left untouched, and an edit is discarded unless every other value is unchanged and the result is in the requested state. The Rules panel reads state with the same parser. Declares `yaml` (already a workspace dependency through @cline/core) as a direct dependency of apps/vscode. * test(vscode): mock @cline/core before it is loaded in the bun harness The preload imported the real @cline/core to read its export names and then mocked it. Mocking an already-loaded module makes bun re-link the graph, and that re-link leaves a slice of @cline/shared's source-tree exports undefined (stripUtf8Bom among them) for everything under sdk/packages/core, which resolves @cline/shared to shared/src through core's tsconfig paths. Any real SDK function the stub re-exports then threw when called from a test. The export names now come from a child process, cached on the built package's mtime, the mock is registered first, and the stub and @cline/llms are imported after it. * fix(vscode): let the SDK parser decide a rule's enabled state The extension kept its own copy of the SDK's rules for reading a rule file's enabled state, and every review round found a case where the copy and the SDK disagreed: flag precedence, uppercase booleans, non-boolean values, and now frontmatter that is not a mapping, which the SDK loads as having no metadata but the copy treated as unloadable. A rule starting with a markdown divider line could not be switched off. The Rules panel, both write paths, and the editor now ask parseRuleConfigFromMarkdown / parseSkillConfigFromMarkdown from @cline/core, so they cannot disagree with what the SDK loads, now or after the SDK changes. The editor still parses the block as a YAML document, but only to locate the source ranges it edits. A file with non-mapping frontmatter is disabled by adding a disabled: true block above it, and re-enabling restores it exactly. A comment-only block gets the flag appended inside it. A file the SDK does not load at all (unparseable frontmatter, non-boolean flag, empty body) now shows as off in the panel, since nothing from it reaches the model; switching it on fails and reverts, with the reason logged. The bun test stub re-exports the two parsers from the SDK source. --------- Co-authored-by: 33modeling <33modeling@gmail.com>
588 lines
18 KiB
JSON
588 lines
18 KiB
JSON
{
|
|
"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.1.25",
|
|
"icon": "assets/icons/icon.png",
|
|
"engines": {
|
|
"vscode": "^1.101.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"
|
|
}
|
|
],
|
|
"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 lint && bun run build:production",
|
|
"build:production": "bun run build:webview && 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 && bun run check-types:compat && cd webview-ui && bunx tsc --noEmit",
|
|
"check-types:compat": "bunx tsc --project tsconfig.vscode-compat.json --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:cloud": "vitest run --config vitest.cloud.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",
|
|
"dev:cloud-sessions": "bun src/dev/local-cloud-server.ts",
|
|
"e2e": "playwright test -c playwright.config.ts",
|
|
"test:e2e": "bun run build:production && 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": "22.15.1",
|
|
"@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.101.0",
|
|
"@types/ws": "^8.18.1",
|
|
"@vscode/test-cli": "^0.0.12",
|
|
"@vscode/test-electron": "^3.1.0",
|
|
"@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",
|
|
"ws": "^8.20.0"
|
|
},
|
|
"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-trace-otlp-grpc": "^0.56.0",
|
|
"@opentelemetry/exporter-trace-otlp-http": "^0.56.0",
|
|
"@opentelemetry/exporter-trace-otlp-proto": "^0.56.0",
|
|
"@opentelemetry/resources": "^1.30.1",
|
|
"@opentelemetry/sdk-logs": "^0.56.0",
|
|
"@opentelemetry/sdk-metrics": "^1.30.1",
|
|
"@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.20.0",
|
|
"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.3.2",
|
|
"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.29.0",
|
|
"uuid": "^11.1.0",
|
|
"vscode-uri": "^3.1.0",
|
|
"yaml": "^2.8.2",
|
|
"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
|
|
}
|
|
}
|