mirror of
https://github.com/cline/cline.git
synced 2026-09-21 05:10:09 +08:00
* refactor: centralize tool handler registration and filter by allowed tools - Create centralized toolHandlersMap for all tool handler instantiation - Add registerToolHandlers method to register only allowed tools from config - Filter subagent tools to only include allowed tools from allowedTools config - Remove scattered tool handler registration logic in favor of single source of truth - Improve maintainability by consolidating tool handler creation in one place This refactoring ensures subagents only have access to explicitly allowed tools and makes the tool registration process more maintainable and consistent. It also improves separation of concerns by having the coordinator manage all tool handler registration, while the executor focuses on orchestration. The allowedTools parameter enables runtime filtering of available tools for different contexts. Also update PromptRegistry to load synchronous and simplify variant lookup - Convert async load() to synchronous, called in constructor as both loadVariants and loadComponents are not async functions - Remove health check logic and loaded state tracking - Extract getVariant() method with proper generic fallback - Add getComponents() accessor and simplify component loading - Convert variant/component loaders from async to synchronous - Remove unnecessary await calls throughout the codebase - Add PromptRegistry tests for variant resolution and components * fix test * feat: add AgentConfigLoader for file-based agent configs Add AgentConfigLoader singleton to manage agent configurations loaded from YAML files in the agents directory. Supports hot-reloading via file watcher, validates config schema with Zod, and integrates with extension lifecycle (StateManager initialization and tearDown disposal). * add tests * add missing export * update tests * feat(tools): implement dynamic tool registration for subagents Updates the tool system to support dynamically registered subagents as individual tools. - Modifies `ClineToolSet` to generate specific tool definitions for configured subagents via `AgentConfigLoader`. - Updates `parseAssistantMessageV2` to use `getToolUseNames()` instead of a static list, enabling the parser to recognize dynamic tool tags. - Replaces the generic `USE_SUBAGENTS` tool with specific subagent instances when available in the system prompt context. * update config path and refine tool descriptions - Relocate the subagent configuration directory from `~/.cline/data/agents` to `~/Documents/Cline/Agents` to improve user accessibility. - Update subagent tool descriptions and parameter instructions in the system prompt to be more descriptive and helpful for the model. * revert unrelated changes * revert unrelated changes * update unit test * fix: await AgentConfigLoader initialization before StateManager completes Ensure agent configs are fully loaded during StateManager initialization by awaiting the `ready()` promise. Previously, `AgentConfigLoader` was instantiated without waiting for the initial load to complete, causing potential race conditions where configs might not be available when needed. - Add `initialLoadPromise` field to track the async initial load - Expose a `ready()` method to allow callers to await initialization - Await `AgentConfigLoader.getInstance().ready()` in StateManager * set previousRequestTotalTokens
205 lines
5.5 KiB
JSON
205 lines
5.5 KiB
JSON
// A launch configuration that compiles the extension and then opens it inside a new window
|
|
// Use IntelliSense to learn about possible attributes.
|
|
// Hover to view descriptions of existing attributes.
|
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
{
|
|
"version": "0.2.0",
|
|
"configurations": [
|
|
{
|
|
"name": "Run Extension (production)",
|
|
"type": "extensionHost",
|
|
"request": "launch",
|
|
"args": [
|
|
"--extensionDevelopmentPath=${workspaceFolder}",
|
|
"--disable-workspace-trust",
|
|
"--disable-extension",
|
|
"saoudrizwan.claude-dev", // Avoid conflicts with installed Cline
|
|
"--disable-extension",
|
|
"saoudrizwan.cline-nightly", // Avoid conflicts with installed Cline Nightly
|
|
"${workspaceFolder}",
|
|
"--disable-extensions"
|
|
],
|
|
"outFiles": [
|
|
"${workspaceFolder}/dist/**/*.js"
|
|
],
|
|
"preLaunchTask": "${defaultBuildTask}",
|
|
"envFile": "${workspaceFolder}/.env",
|
|
"env": {
|
|
"IS_DEV": "true",
|
|
"DEV_WORKSPACE_FOLDER": "${workspaceFolder}",
|
|
"CLINE_ENVIRONMENT": "production"
|
|
}
|
|
},
|
|
{
|
|
"name": "Run Extension (staging)",
|
|
"type": "extensionHost",
|
|
"request": "launch",
|
|
"args": [
|
|
"--extensionDevelopmentPath=${workspaceFolder}",
|
|
"--disable-workspace-trust",
|
|
"--disable-extension",
|
|
"saoudrizwan.claude-dev", // Avoid conflicts with installed Cline
|
|
"--disable-extension",
|
|
"saoudrizwan.cline-nightly", // Avoid conflicts with installed Cline Nightly
|
|
"${workspaceFolder}"
|
|
],
|
|
"outFiles": [
|
|
"${workspaceFolder}/dist/**/*.js"
|
|
],
|
|
"preLaunchTask": "${defaultBuildTask}",
|
|
"envFile": "${workspaceFolder}/.env",
|
|
"env": {
|
|
"IS_DEV": "true",
|
|
"DEV_WORKSPACE_FOLDER": "${workspaceFolder}",
|
|
"CLINE_ENVIRONMENT": "staging"
|
|
}
|
|
},
|
|
{
|
|
"name": "Run Extension (local)",
|
|
"type": "extensionHost",
|
|
"request": "launch",
|
|
"args": [
|
|
"--extensionDevelopmentPath=${workspaceFolder}",
|
|
"--disable-workspace-trust",
|
|
"--disable-extension",
|
|
"saoudrizwan.claude-dev", // Avoid conflicts with installed Cline
|
|
"--disable-extension",
|
|
"saoudrizwan.cline-nightly", // Avoid conflicts with installed Cline Nightly
|
|
"${workspaceFolder}"
|
|
],
|
|
"outFiles": [
|
|
"${workspaceFolder}/dist/**/*.js"
|
|
],
|
|
"preLaunchTask": "${defaultBuildTask}",
|
|
"envFile": "${workspaceFolder}/.env",
|
|
"env": {
|
|
"IS_DEV": "true",
|
|
"DEV_WORKSPACE_FOLDER": "${workspaceFolder}",
|
|
"CLINE_ENVIRONMENT": "local"
|
|
}
|
|
},
|
|
{
|
|
"name": "Run Extension (Fresh Install Mode)",
|
|
"type": "extensionHost",
|
|
"request": "launch",
|
|
"runtimeExecutable": "${execPath}",
|
|
"args": [
|
|
"--user-data-dir=${workspaceFolder}/dist/tmp/user",
|
|
"--profile-temp",
|
|
"--sync=off",
|
|
"--disable-extension",
|
|
"saoudrizwan.claude-dev", // Avoid conflicts with installed Cline
|
|
"--disable-extension",
|
|
"saoudrizwan.cline-nightly", // Avoid conflicts with installed Cline Nightly
|
|
"--extensionDevelopmentPath=${workspaceFolder}",
|
|
"${workspaceFolder}"
|
|
],
|
|
"outFiles": [
|
|
"${workspaceFolder}/dist/**/*.js"
|
|
],
|
|
"preLaunchTask": "clean-tmp-user",
|
|
"internalConsoleOptions": "openOnSessionStart",
|
|
"postDebugTask": "stop",
|
|
"envFile": "${workspaceFolder}/.env",
|
|
"env": {
|
|
"IS_DEV": "true",
|
|
"TEMP_PROFILE": "true",
|
|
"DEV_WORKSPACE_FOLDER": "${workspaceFolder}",
|
|
"CLINE_ENVIRONMENT": "production"
|
|
}
|
|
},
|
|
{
|
|
"type": "node",
|
|
"request": "launch",
|
|
"name": "Debug Test Standalone Core Api Server (test:sca-server)",
|
|
"skipFiles": [
|
|
"<node_internals>/**"
|
|
],
|
|
"sourceMaps": true,
|
|
"resolveSourceMapLocations": [
|
|
"${workspaceFolder}/**",
|
|
"!**/node_modules/**"
|
|
],
|
|
"cwd": "${workspaceFolder}",
|
|
"outFiles": [
|
|
"${workspaceFolder}/dist/**/*.js",
|
|
"${workspaceFolder}/dist-standalone/**/*.js"
|
|
],
|
|
"preLaunchTask": "compile-standalone",
|
|
"runtimeExecutable": "npx",
|
|
"runtimeArgs": [
|
|
"tsx"
|
|
],
|
|
"program": "scripts/test-standalone-core-api-server.ts",
|
|
"envFile": "${workspaceFolder}/.env",
|
|
"env": {
|
|
"PROTOBUS_PORT": "26040",
|
|
"HOSTBRIDGE_PORT": "26041",
|
|
"WORKSPACE_DIR": "${workspaceFolder}",
|
|
"E2E_TEST": "true",
|
|
"CLINE_ENVIRONMENT": "local"
|
|
},
|
|
"console": "integratedTerminal",
|
|
"internalConsoleOptions": "neverOpen"
|
|
},
|
|
{
|
|
"type": "node",
|
|
"request": "launch",
|
|
"name": "Debug Current Test File",
|
|
"skipFiles": [
|
|
"<node_internals>/**"
|
|
],
|
|
"sourceMaps": true,
|
|
"resolveSourceMapLocations": [
|
|
"${workspaceFolder}/**",
|
|
"!**/node_modules/**"
|
|
],
|
|
"cwd": "${workspaceFolder}",
|
|
"runtimeExecutable": "npx",
|
|
"runtimeArgs": [
|
|
"mocha"
|
|
],
|
|
"args": [
|
|
"--require",
|
|
"ts-node/register",
|
|
"--require",
|
|
"source-map-support/register",
|
|
"--require",
|
|
"./src/test/requires.ts",
|
|
"--exit",
|
|
"${file}"
|
|
],
|
|
"envFile": "${workspaceFolder}/.env",
|
|
"env": {
|
|
"TS_NODE_PROJECT": "./tsconfig.unit-test.json",
|
|
"NODE_ENV": "test",
|
|
"IS_DEV": "true",
|
|
"CLINE_ENVIRONMENT": "local"
|
|
},
|
|
"console": "integratedTerminal",
|
|
"internalConsoleOptions": "openOnSessionStart"
|
|
},
|
|
{
|
|
"name": "Open Storybook",
|
|
"type": "node",
|
|
"request": "launch",
|
|
"runtimeExecutable": "npm",
|
|
"runtimeArgs": [
|
|
"run",
|
|
"storybook"
|
|
],
|
|
"cwd": "${workspaceFolder}/webview-ui",
|
|
"console": "integratedTerminal",
|
|
"internalConsoleOptions": "neverOpen",
|
|
"serverReadyAction": {
|
|
"pattern": "Local:.*http://localhost:([0-9]+)",
|
|
"uriFormat": "http://localhost:%s",
|
|
"action": "openExternally"
|
|
},
|
|
"env": {
|
|
"IS_DEV": "true"
|
|
}
|
|
}
|
|
]
|
|
}
|