mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-28 03:30:40 +00:00
feat: promote Agent Skills from experimental to stable
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
139e621410
commit
a4ffc6eb24
28 changed files with 196 additions and 341 deletions
|
|
@ -245,7 +245,6 @@ The `TransportOptions` class allows configuration of how the SDK communicates wi
|
|||
- `allowedTools`: List of tools that are pre-approved for use without additional confirmation
|
||||
- `authType`: Authentication type to use for the session
|
||||
- `includePartialMessages`: Enables receiving partial messages during streaming responses
|
||||
- `skillsEnable`: Enables or disables skills functionality for the session
|
||||
- `turnTimeout`: Timeout for a complete turn of conversation
|
||||
- `messageTimeout`: Timeout for individual messages within a turn
|
||||
- `resumeSessionId`: ID of a previous session to resume
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ Qwen Code uses JSON settings files for persistent configuration. There are four
|
|||
In addition to a project settings file, a project's `.qwen` directory can contain other project-specific files related to Qwen Code's operation, such as:
|
||||
|
||||
- [Custom sandbox profiles](../features/sandbox) (e.g. `.qwen/sandbox-macos-custom.sb`, `.qwen/sandbox.Dockerfile`).
|
||||
- [Agent Skills](../features/skills) (experimental) under `.qwen/skills/` (each Skill is a directory containing a `SKILL.md`).
|
||||
- [Agent Skills](../features/skills) under `.qwen/skills/` (each Skill is a directory containing a `SKILL.md`).
|
||||
|
||||
### Configuration migration
|
||||
|
||||
|
|
@ -359,12 +359,6 @@ LSP server configuration is done through `.lsp.json` files in your project root
|
|||
>
|
||||
> **Note about advanced.tavilyApiKey:** This is a legacy configuration format. For Qwen OAuth users, DashScope provider is automatically available without any configuration. For other authentication types, configure Tavily or Google providers using the new `webSearch` configuration format.
|
||||
|
||||
#### experimental
|
||||
|
||||
| Setting | Type | Description | Default |
|
||||
| --------------------- | ------- | -------------------------------- | ------- |
|
||||
| `experimental.skills` | boolean | Enable experimental Agent Skills | `false` |
|
||||
|
||||
#### mcpServers
|
||||
|
||||
Configures connections to one or more Model-Context Protocol (MCP) servers for discovering and using custom tools. Qwen Code attempts to connect to each configured MCP server to discover available tools. If multiple MCP servers expose a tool with the same name, the tool names will be prefixed with the server alias you defined in the configuration (e.g., `serverAlias__actualToolName`) to avoid conflicts. Note that the system might strip certain schema properties from MCP tool definitions for compatibility. At least one of `command`, `url`, or `httpUrl` must be provided. If multiple are specified, the order of precedence is `httpUrl`, then `url`, then `command`.
|
||||
|
|
@ -534,7 +528,6 @@ Arguments passed directly when running the CLI can override other configurations
|
|||
| `--telemetry-log-prompts` | | Enables logging of prompts for telemetry. | | See [telemetry](../../developers/development/telemetry) for more information. |
|
||||
| `--checkpointing` | | Enables [checkpointing](../features/checkpointing). | | |
|
||||
| `--acp` | | Enables ACP mode (Agent Client Protocol). Useful for IDE/editor integrations like [Zed](../integration-zed). | | Stable. Replaces the deprecated `--experimental-acp` flag. |
|
||||
| `--experimental-skills` | | Enables experimental [Agent Skills](../features/skills) (registers the `skill` tool and loads Skills from `.qwen/skills/` and `~/.qwen/skills/`). | | Experimental. |
|
||||
| `--experimental-lsp` | | Enables experimental [LSP (Language Server Protocol)](../features/lsp) feature for code intelligence (go-to-definition, find references, diagnostics, etc.). | | Experimental. Requires language servers to be installed. |
|
||||
| `--extensions` | `-e` | Specifies a list of extensions to use for the session. | Extension names | If not provided, all available extensions are used. Use the special term `qwen -e none` to disable all extensions. Example: `qwen -e my-extension -e my-other-extension` |
|
||||
| `--list-extensions` | `-l` | Lists all available extensions and exits. | | |
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
export default {
|
||||
commands: 'Commands',
|
||||
'sub-agents': 'SubAgents',
|
||||
skills: 'Skills (Experimental)',
|
||||
skills: 'Skills',
|
||||
headless: 'Headless Mode',
|
||||
checkpointing: {
|
||||
display: 'hidden',
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ Commands for managing AI tools and models.
|
|||
| ---------------- | --------------------------------------------- | --------------------------------------------- |
|
||||
| `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc` |
|
||||
| `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
|
||||
| `/skills` | List and run available skills (experimental) | `/skills`, `/skills <name>` |
|
||||
| `/skills` | List and run available skills | `/skills`, `/skills <name>` |
|
||||
| `/approval-mode` | Change approval mode for tool usage | `/approval-mode <mode (auto-edit)> --project` |
|
||||
| →`plan` | Analysis only, no execution | Secure review |
|
||||
| →`default` | Require approval for edits | Daily use |
|
||||
|
|
|
|||
|
|
@ -189,20 +189,19 @@ qwen -p "Write code" --output-format stream-json --include-partial-messages | jq
|
|||
|
||||
Key command-line options for headless usage:
|
||||
|
||||
| Option | Description | Example |
|
||||
| ---------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------ |
|
||||
| `--prompt`, `-p` | Run in headless mode | `qwen -p "query"` |
|
||||
| `--output-format`, `-o` | Specify output format (text, json, stream-json) | `qwen -p "query" --output-format json` |
|
||||
| `--input-format` | Specify input format (text, stream-json) | `qwen --input-format text --output-format stream-json` |
|
||||
| `--include-partial-messages` | Include partial messages in stream-json output | `qwen -p "query" --output-format stream-json --include-partial-messages` |
|
||||
| `--debug`, `-d` | Enable debug mode | `qwen -p "query" --debug` |
|
||||
| `--all-files`, `-a` | Include all files in context | `qwen -p "query" --all-files` |
|
||||
| `--include-directories` | Include additional directories | `qwen -p "query" --include-directories src,docs` |
|
||||
| `--yolo`, `-y` | Auto-approve all actions | `qwen -p "query" --yolo` |
|
||||
| `--approval-mode` | Set approval mode | `qwen -p "query" --approval-mode auto_edit` |
|
||||
| `--continue` | Resume the most recent session for this project | `qwen --continue -p "Pick up where we left off"` |
|
||||
| `--resume [sessionId]` | Resume a specific session (or choose interactively) | `qwen --resume 123e... -p "Finish the refactor"` |
|
||||
| `--experimental-skills` | Enable experimental Skills (registers the `skill` tool) | `qwen --experimental-skills -p "What Skills are available?"` |
|
||||
| Option | Description | Example |
|
||||
| ---------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------ |
|
||||
| `--prompt`, `-p` | Run in headless mode | `qwen -p "query"` |
|
||||
| `--output-format`, `-o` | Specify output format (text, json, stream-json) | `qwen -p "query" --output-format json` |
|
||||
| `--input-format` | Specify input format (text, stream-json) | `qwen --input-format text --output-format stream-json` |
|
||||
| `--include-partial-messages` | Include partial messages in stream-json output | `qwen -p "query" --output-format stream-json --include-partial-messages` |
|
||||
| `--debug`, `-d` | Enable debug mode | `qwen -p "query" --debug` |
|
||||
| `--all-files`, `-a` | Include all files in context | `qwen -p "query" --all-files` |
|
||||
| `--include-directories` | Include additional directories | `qwen -p "query" --include-directories src,docs` |
|
||||
| `--yolo`, `-y` | Auto-approve all actions | `qwen -p "query" --yolo` |
|
||||
| `--approval-mode` | Set approval mode | `qwen -p "query" --approval-mode auto_edit` |
|
||||
| `--continue` | Resume the most recent session for this project | `qwen --continue -p "Pick up where we left off"` |
|
||||
| `--resume [sessionId]` | Resume a specific session (or choose interactively) | `qwen --resume 123e... -p "Finish the refactor"` |
|
||||
|
||||
For complete details on all available configuration options, settings files, and environment variables, see the [Configuration Guide](../configuration/settings).
|
||||
|
||||
|
|
|
|||
|
|
@ -1,39 +1,12 @@
|
|||
# Agent Skills (Experimental)
|
||||
# Agent Skills
|
||||
|
||||
> Create, manage, and share Skills to extend Qwen Code’s capabilities.
|
||||
> Create, manage, and share Skills to extend Qwen Code's capabilities.
|
||||
|
||||
This guide shows you how to create, use, and manage Agent Skills in **Qwen Code**. Skills are modular capabilities that extend the model’s effectiveness through organized folders containing instructions (and optionally scripts/resources).
|
||||
|
||||
> [!note]
|
||||
>
|
||||
> Skills are currently **experimental** and must be enabled with `--experimental-skills`.
|
||||
This guide shows you how to create, use, and manage Agent Skills in **Qwen Code**. Skills are modular capabilities that extend the model's effectiveness through organized folders containing instructions (and optionally scripts/resources).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Qwen Code (recent version)
|
||||
|
||||
## How to enable
|
||||
|
||||
### Via CLI flag
|
||||
|
||||
```bash
|
||||
qwen --experimental-skills
|
||||
```
|
||||
|
||||
### Via settings.json
|
||||
|
||||
Add to your `~/.qwen/settings.json` or project's `.qwen/settings.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"tools": {
|
||||
"experimental": {
|
||||
"skills": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- Basic familiarity with Qwen Code ([Quickstart](../quickstart.md))
|
||||
|
||||
## What are Agent Skills?
|
||||
|
|
@ -42,7 +15,7 @@ Agent Skills package expertise into discoverable capabilities. Each Skill consis
|
|||
|
||||
### How Skills are invoked
|
||||
|
||||
Skills are **model-invoked** — the model autonomously decides when to use them based on your request and the Skill’s description. This is different from slash commands, which are **user-invoked** (you explicitly type `/command`).
|
||||
Skills are **model-invoked** — the model autonomously decides when to use them based on your request and the Skill's description. This is different from slash commands, which are **user-invoked** (you explicitly type `/command`).
|
||||
|
||||
If you want to invoke a Skill explicitly, use the `/skills` slash command:
|
||||
|
||||
|
|
@ -50,7 +23,7 @@ If you want to invoke a Skill explicitly, use the `/skills` slash command:
|
|||
/skills <skill-name>
|
||||
```
|
||||
|
||||
The `/skills` command is only available when you run with `--experimental-skills`. Use autocomplete to browse available Skills and descriptions.
|
||||
Use autocomplete to browse available Skills and descriptions.
|
||||
|
||||
### Benefits
|
||||
|
||||
|
|
@ -74,7 +47,7 @@ mkdir -p ~/.qwen/skills/my-skill-name
|
|||
Use personal Skills for:
|
||||
|
||||
- Your individual workflows and preferences
|
||||
- Experimental Skills you’re developing
|
||||
- Skills you're developing
|
||||
- Personal productivity helpers
|
||||
|
||||
### Project Skills
|
||||
|
|
@ -153,7 +126,7 @@ python scripts/helper.py input.txt
|
|||
|
||||
## View available Skills
|
||||
|
||||
When `--experimental-skills` is enabled, Qwen Code discovers Skills from:
|
||||
Qwen Code discovers Skills from:
|
||||
|
||||
- Personal Skills: `~/.qwen/skills/`
|
||||
- Project Skills: `.qwen/skills/`
|
||||
|
|
@ -163,10 +136,7 @@ When `--experimental-skills` is enabled, Qwen Code discovers Skills from:
|
|||
|
||||
Extensions can provide custom skills that become available when the extension is enabled. These skills are stored in the extension's `skills/` directory and follow the same format as personal and project skills.
|
||||
|
||||
Extension skills are automatically discovered and loaded when:
|
||||
|
||||
- The extension is installed and enabled
|
||||
- The `--experimental-skills` flag is enabled
|
||||
Extension skills are automatically discovered and loaded when the extension is installed and enabled.
|
||||
|
||||
To see which extensions provide skills, check the extension's `qwen-extension.json` file for a `skills` field.
|
||||
|
||||
|
|
@ -185,7 +155,7 @@ ls ~/.qwen/skills/
|
|||
# List project Skills (if in a project directory)
|
||||
ls .qwen/skills/
|
||||
|
||||
# View a specific Skill’s content
|
||||
# View a specific Skill's content
|
||||
cat ~/.qwen/skills/my-skill/SKILL.md
|
||||
```
|
||||
|
||||
|
|
@ -193,17 +163,17 @@ cat ~/.qwen/skills/my-skill/SKILL.md
|
|||
|
||||
After creating a Skill, test it by asking questions that match your description.
|
||||
|
||||
Example: if your description mentions “PDF files”:
|
||||
Example: if your description mentions "PDF files":
|
||||
|
||||
```text
|
||||
Can you help me extract text from this PDF?
|
||||
```
|
||||
|
||||
The model autonomously decides to use your Skill if it matches the request — you don’t need to explicitly invoke it.
|
||||
The model autonomously decides to use your Skill if it matches the request — you don't need to explicitly invoke it.
|
||||
|
||||
## Debug a Skill
|
||||
|
||||
If Qwen Code doesn’t use your Skill, check these common issues:
|
||||
If Qwen Code doesn't use your Skill, check these common issues:
|
||||
|
||||
### Make the description specific
|
||||
|
||||
|
|
@ -251,7 +221,7 @@ Ensure:
|
|||
Run Qwen Code with debug mode to see Skill loading errors:
|
||||
|
||||
```bash
|
||||
qwen --experimental-skills --debug
|
||||
qwen --debug
|
||||
```
|
||||
|
||||
## Share Skills with your team
|
||||
|
|
@ -260,7 +230,7 @@ You can share Skills through project repositories:
|
|||
|
||||
1. Add the Skill under `.qwen/skills/`
|
||||
2. Commit and push
|
||||
3. Teammates pull the changes and run with `--experimental-skills`
|
||||
3. Teammates pull the changes
|
||||
|
||||
```bash
|
||||
git add .qwen/skills/
|
||||
|
|
@ -301,8 +271,8 @@ git commit -m "Remove unused Skill"
|
|||
|
||||
One Skill should address one capability:
|
||||
|
||||
- Focused: “PDF form filling”, “Excel analysis”, “Git commit messages”
|
||||
- Too broad: “Document processing” (split into smaller Skills)
|
||||
- Focused: "PDF form filling", "Excel analysis", "Git commit messages"
|
||||
- Too broad: "Document processing" (split into smaller Skills)
|
||||
|
||||
### Write clear descriptions
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -110,7 +110,6 @@ export interface CliArgs {
|
|||
allowedTools: string[] | undefined;
|
||||
acp: boolean | undefined;
|
||||
experimentalAcp: boolean | undefined;
|
||||
experimentalSkills: boolean | undefined;
|
||||
experimentalLsp: boolean | undefined;
|
||||
extensions: string[] | undefined;
|
||||
listExtensions: boolean | undefined;
|
||||
|
|
@ -160,7 +159,7 @@ function normalizeOutputFormat(
|
|||
return OutputFormat.TEXT;
|
||||
}
|
||||
|
||||
export async function parseArguments(settings: Settings): Promise<CliArgs> {
|
||||
export async function parseArguments(): Promise<CliArgs> {
|
||||
let rawArgv = hideBin(process.argv);
|
||||
|
||||
// hack: if the first argument is the CLI entry point, remove it
|
||||
|
|
@ -313,15 +312,9 @@ export async function parseArguments(settings: Settings): Promise<CliArgs> {
|
|||
})
|
||||
.option('experimental-skills', {
|
||||
type: 'boolean',
|
||||
description: 'Enable experimental Skills feature',
|
||||
default: (() => {
|
||||
const legacySkills = (
|
||||
settings as Settings & {
|
||||
tools?: { experimental?: { skills?: boolean } };
|
||||
}
|
||||
).tools?.experimental?.skills;
|
||||
return settings.experimental?.skills ?? legacySkills ?? false;
|
||||
})(),
|
||||
description:
|
||||
'Deprecated: Skills are now enabled by default. This flag is ignored.',
|
||||
hidden: true,
|
||||
})
|
||||
.option('experimental-lsp', {
|
||||
type: 'boolean',
|
||||
|
|
@ -959,7 +952,6 @@ export async function loadCliConfig(
|
|||
maxSessionTurns:
|
||||
argv.maxSessionTurns ?? settings.model?.maxSessionTurns ?? -1,
|
||||
experimentalZedIntegration: argv.acp || argv.experimentalAcp || false,
|
||||
experimentalSkills: argv.experimentalSkills || false,
|
||||
listExtensions: argv.listExtensions || false,
|
||||
overrideExtensions: overrideExtensions || argv.extensions,
|
||||
noBrowser: !!process.env['NO_BROWSER'],
|
||||
|
|
|
|||
|
|
@ -1133,28 +1133,6 @@ export function loadSettings(
|
|||
);
|
||||
}
|
||||
|
||||
export function migrateDeprecatedSettings(
|
||||
loadedSettings: LoadedSettings,
|
||||
): void {
|
||||
const processScope = (scope: SettingScope) => {
|
||||
const settings = loadedSettings.forScope(scope).settings;
|
||||
const legacySkills = (
|
||||
settings as Settings & {
|
||||
tools?: { experimental?: { skills?: boolean } };
|
||||
}
|
||||
).tools?.experimental?.skills;
|
||||
if (
|
||||
legacySkills !== undefined &&
|
||||
settings.experimental?.skills === undefined
|
||||
) {
|
||||
loadedSettings.setValue(scope, 'experimental.skills', legacySkills);
|
||||
}
|
||||
};
|
||||
|
||||
processScope(SettingScope.User);
|
||||
processScope(SettingScope.Workspace);
|
||||
}
|
||||
|
||||
export function saveSettings(settingsFile: SettingsFile): void {
|
||||
try {
|
||||
// Ensure the directory exists
|
||||
|
|
|
|||
|
|
@ -1150,16 +1150,6 @@ const SETTINGS_SCHEMA = {
|
|||
description: 'Setting to enable experimental features',
|
||||
showInDialog: false,
|
||||
properties: {
|
||||
skills: {
|
||||
type: 'boolean',
|
||||
label: 'Experimental: Skills',
|
||||
category: 'Experimental',
|
||||
requiresRestart: true,
|
||||
default: false,
|
||||
description:
|
||||
'Enable experimental Agent Skills feature. When enabled, Qwen Code can use Skills from .qwen/skills/ and ~/.qwen/skills/.',
|
||||
showInDialog: true,
|
||||
},
|
||||
visionModelPreview: {
|
||||
type: 'boolean',
|
||||
label: 'Vision Model Preview',
|
||||
|
|
|
|||
|
|
@ -470,7 +470,6 @@ describe('gemini.tsx main function kitty protocol', () => {
|
|||
allowedTools: undefined,
|
||||
acp: undefined,
|
||||
experimentalAcp: undefined,
|
||||
experimentalSkills: undefined,
|
||||
extensions: undefined,
|
||||
listExtensions: undefined,
|
||||
openaiLogging: undefined,
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ export async function main() {
|
|||
const settings = loadSettings();
|
||||
await cleanupCheckpoints();
|
||||
|
||||
let argv = await parseArguments(settings.merged);
|
||||
let argv = await parseArguments();
|
||||
|
||||
// Check for invalid input combinations early to prevent crashes
|
||||
if (argv.promptInteractive && !process.stdin.isTTY) {
|
||||
|
|
|
|||
|
|
@ -335,7 +335,6 @@ export default {
|
|||
'Folder Trust': 'Ordnervertrauen',
|
||||
'Vision Model Preview': 'Vision-Modell-Vorschau',
|
||||
'Tool Schema Compliance': 'Werkzeug-Schema-Konformität',
|
||||
'Experimental: Skills': 'Experimentell: Fähigkeiten',
|
||||
// Settings enum options
|
||||
'Auto (detect from system)': 'Automatisch (vom System erkennen)',
|
||||
Text: 'Text',
|
||||
|
|
|
|||
|
|
@ -351,7 +351,6 @@ export default {
|
|||
'Folder Trust': 'Folder Trust',
|
||||
'Vision Model Preview': 'Vision Model Preview',
|
||||
'Tool Schema Compliance': 'Tool Schema Compliance',
|
||||
'Experimental: Skills': 'Experimental: Skills',
|
||||
// Settings enum options
|
||||
'Auto (detect from system)': 'Auto (detect from system)',
|
||||
Text: 'Text',
|
||||
|
|
|
|||
|
|
@ -365,7 +365,6 @@ export default {
|
|||
'Folder Trust': 'Confiança de Pasta',
|
||||
'Vision Model Preview': 'Visualização de Modelo de Visão',
|
||||
'Tool Schema Compliance': 'Conformidade de Esquema de Ferramenta',
|
||||
'Experimental: Skills': 'Experimental: Habilidades',
|
||||
|
||||
// Settings enum options
|
||||
'Auto (detect from system)': 'Automático (detectar do sistema)',
|
||||
|
|
|
|||
|
|
@ -355,7 +355,6 @@ export default {
|
|||
'Folder Trust': 'Доверие к папке',
|
||||
'Vision Model Preview': 'Визуальная модель (предпросмотр)',
|
||||
'Tool Schema Compliance': 'Соответствие схеме инструмента',
|
||||
'Experimental: Skills': 'Экспериментальное: Навыки',
|
||||
// Варианты перечислений настроек
|
||||
'Auto (detect from system)': 'Авто (определить из системы)',
|
||||
Text: 'Текст',
|
||||
|
|
|
|||
|
|
@ -340,7 +340,6 @@ export default {
|
|||
'Folder Trust': '文件夹信任',
|
||||
'Vision Model Preview': '视觉模型预览',
|
||||
'Tool Schema Compliance': '工具 Schema 兼容性',
|
||||
'Experimental: Skills': '实验性: 技能',
|
||||
// Settings enum options
|
||||
'Auto (detect from system)': '自动(从系统检测)',
|
||||
Text: '文本',
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ export class BuiltinCommandLoader implements ICommandLoader {
|
|||
quitCommand,
|
||||
restoreCommand(this.config),
|
||||
resumeCommand,
|
||||
...(this.config?.getExperimentalSkills?.() ? [skillsCommand] : []),
|
||||
skillsCommand,
|
||||
statsCommand,
|
||||
summaryCommand,
|
||||
themeCommand,
|
||||
|
|
|
|||
|
|
@ -324,7 +324,6 @@ export interface ConfigParameters {
|
|||
outputLanguageFilePath?: string;
|
||||
maxSessionTurns?: number;
|
||||
sessionTokenLimit?: number;
|
||||
experimentalSkills?: boolean;
|
||||
experimentalZedIntegration?: boolean;
|
||||
listExtensions?: boolean;
|
||||
overrideExtensions?: string[];
|
||||
|
|
@ -488,7 +487,6 @@ export class Config {
|
|||
| undefined;
|
||||
private readonly cliVersion?: string;
|
||||
private readonly experimentalZedIntegration: boolean = false;
|
||||
private readonly experimentalSkills: boolean = false;
|
||||
private readonly chatRecordingEnabled: boolean;
|
||||
private readonly loadMemoryFromIncludeDirectories: boolean = false;
|
||||
private readonly importFormat: 'tree' | 'flat';
|
||||
|
|
@ -592,7 +590,6 @@ export class Config {
|
|||
this.sessionTokenLimit = params.sessionTokenLimit ?? -1;
|
||||
this.experimentalZedIntegration =
|
||||
params.experimentalZedIntegration ?? false;
|
||||
this.experimentalSkills = params.experimentalSkills ?? false;
|
||||
this.listExtensions = params.listExtensions ?? false;
|
||||
this.overrideExtensions = params.overrideExtensions;
|
||||
this.noBrowser = params.noBrowser ?? false;
|
||||
|
|
@ -699,11 +696,9 @@ export class Config {
|
|||
this.debugLogger.debug('Extension manager initialized');
|
||||
|
||||
this.subagentManager = new SubagentManager(this);
|
||||
if (this.getExperimentalSkills()) {
|
||||
this.skillManager = new SkillManager(this);
|
||||
await this.skillManager.startWatching();
|
||||
this.debugLogger.debug('Skill manager initialized');
|
||||
}
|
||||
this.skillManager = new SkillManager(this);
|
||||
await this.skillManager.startWatching();
|
||||
this.debugLogger.debug('Skill manager initialized');
|
||||
|
||||
// Load session subagents if they were provided before initialization
|
||||
if (this.sessionSubagents.length > 0) {
|
||||
|
|
@ -1358,10 +1353,6 @@ export class Config {
|
|||
return this.experimentalZedIntegration;
|
||||
}
|
||||
|
||||
getExperimentalSkills(): boolean {
|
||||
return this.experimentalSkills;
|
||||
}
|
||||
|
||||
getListExtensions(): boolean {
|
||||
return this.listExtensions;
|
||||
}
|
||||
|
|
@ -1673,9 +1664,7 @@ export class Config {
|
|||
};
|
||||
|
||||
registerCoreTool(TaskTool, this);
|
||||
if (this.getExperimentalSkills()) {
|
||||
registerCoreTool(SkillTool, this);
|
||||
}
|
||||
registerCoreTool(SkillTool, this);
|
||||
registerCoreTool(LSTool, this);
|
||||
registerCoreTool(ReadFileTool, this);
|
||||
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ The following is a simple example showing how to use the ACP SDK to create a cli
|
|||
public void testSession() throws AgentInitializeException, SessionNewException, IOException {
|
||||
// Create an ACP client with a process transport
|
||||
AcpClient acpClient = new AcpClient(
|
||||
new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills", "-y"})));
|
||||
new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "-y"})));
|
||||
|
||||
try {
|
||||
// Send a prompt to the agent
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ class SessionTest {
|
|||
private static final Logger logger = LoggerFactory.getLogger(SessionTest.class);
|
||||
@Test
|
||||
public void testSession() throws AgentInitializeException, SessionNewException, IOException {
|
||||
AcpClient acpClient = new AcpClient(new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills", "-y"})));
|
||||
AcpClient acpClient = new AcpClient(new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "-y"})));
|
||||
try {
|
||||
acpClient.sendPrompt(Collections.singletonList(new TextContent("你是谁")), new AgentEventConsumer().setContentEventConsumer(new ContentEventSimpleConsumer(){
|
||||
@Override
|
||||
|
|
@ -86,7 +86,7 @@ class SessionTest {
|
|||
@Test
|
||||
void test() throws SessionNewException, AgentInitializeException, IOException {
|
||||
Transport transport = new ProcessTransport(
|
||||
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills", "-y"}));
|
||||
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "-y"}));
|
||||
AcpClient acpClient = new AcpClient(transport, new InitializeRequestParams().setClientCapabilities(
|
||||
new ClientCapabilities()
|
||||
.setTerminal(true)
|
||||
|
|
@ -98,7 +98,7 @@ class SessionTest {
|
|||
@Test
|
||||
void testPermission() throws AgentInitializeException, SessionNewException, IOException {
|
||||
Transport transport = new ProcessTransport(
|
||||
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills"}));
|
||||
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp"}));
|
||||
AcpClient acpClient = new AcpClient(transport, new InitializeRequestParams().setClientCapabilities(
|
||||
new ClientCapabilities()
|
||||
.setTerminal(false)
|
||||
|
|
|
|||
|
|
@ -153,7 +153,6 @@ The `TransportOptions` class allows configuration of how the SDK communicates wi
|
|||
- `allowedTools`: List of tools that are pre-approved for use without additional confirmation
|
||||
- `authType`: Authentication type to use for the session
|
||||
- `includePartialMessages`: Enables receiving partial messages during streaming responses
|
||||
- `skillsEnable`: Enables or disables skills functionality for the session
|
||||
- `turnTimeout`: Timeout for a complete turn of conversation
|
||||
- `messageTimeout`: Timeout for individual messages within a turn
|
||||
- `resumeSessionId`: ID of a previous session to resume
|
||||
|
|
|
|||
|
|
@ -245,7 +245,6 @@ The `TransportOptions` class allows configuration of how the SDK communicates wi
|
|||
- `allowedTools`: List of tools that are pre-approved for use without additional confirmation
|
||||
- `authType`: Authentication type to use for the session
|
||||
- `includePartialMessages`: Enables receiving partial messages during streaming responses
|
||||
- `skillsEnable`: Enables or disables skills functionality for the session
|
||||
- `turnTimeout`: Timeout for a complete turn of conversation
|
||||
- `messageTimeout`: Timeout for individual messages within a turn
|
||||
- `resumeSessionId`: ID of a previous session to resume
|
||||
|
|
|
|||
|
|
@ -57,10 +57,6 @@ public class TransportOptions implements Cloneable {
|
|||
* Whether to include partial messages in responses.
|
||||
*/
|
||||
private Boolean includePartialMessages;
|
||||
/**
|
||||
* Whether to enable skills.
|
||||
*/
|
||||
private Boolean skillsEnable;
|
||||
/**
|
||||
* Timeout for individual turns.
|
||||
*/
|
||||
|
|
@ -298,26 +294,6 @@ public class TransportOptions implements Cloneable {
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets whether skills are enabled.
|
||||
*
|
||||
* @return Whether skills are enabled
|
||||
*/
|
||||
public Boolean getSkillsEnable() {
|
||||
return skillsEnable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether skills are enabled.
|
||||
*
|
||||
* @param skillsEnable Whether skills are enabled
|
||||
* @return This instance for method chaining
|
||||
*/
|
||||
public TransportOptions setSkillsEnable(Boolean skillsEnable) {
|
||||
this.skillsEnable = skillsEnable;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the turn timeout.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -107,10 +107,6 @@ class TransportOptionsAdapter {
|
|||
args.add("--include-partial-messages");
|
||||
}
|
||||
|
||||
if (transportOptions.getSkillsEnable() != null && transportOptions.getSkillsEnable()) {
|
||||
args.add("--experimental-skills");
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(transportOptions.getResumeSessionId())) {
|
||||
args.add("--resume");
|
||||
args.add(transportOptions.getResumeSessionId());
|
||||
|
|
|
|||
|
|
@ -226,7 +226,6 @@ export class ProcessTransport implements Transport {
|
|||
'--output-format',
|
||||
'stream-json',
|
||||
'--channel=SDK',
|
||||
'--experimental-skills',
|
||||
];
|
||||
|
||||
if (this.options.model) {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ export class QwenConnectionHandler {
|
|||
let availableModels: ModelInfo[] | undefined;
|
||||
|
||||
// Build extra CLI arguments (only essential parameters)
|
||||
const extraArgs: string[] = ['--experimental-skills'];
|
||||
const extraArgs: string[] = [];
|
||||
|
||||
await connection.connect(cliEntryPath!, workingDir, extraArgs);
|
||||
|
||||
|
|
|
|||
|
|
@ -13,20 +13,20 @@ icon = "qwen-code.svg"
|
|||
[agent_servers.qwen-code.targets.darwin-aarch64]
|
||||
archive = "https://registry.npmjs.org/@qwen-code/qwen-code/-/qwen-code-0.8.0.tgz"
|
||||
cmd = "node"
|
||||
args = ["./package/cli.js", "--acp", "--experimental-skills"]
|
||||
args = ["./package/cli.js", "--acp"]
|
||||
|
||||
[agent_servers.qwen-code.targets.darwin-x86_64]
|
||||
archive = "https://registry.npmjs.org/@qwen-code/qwen-code/-/qwen-code-0.8.0.tgz"
|
||||
cmd = "node"
|
||||
args = ["./package/cli.js", "--acp", "--experimental-skills"]
|
||||
args = ["./package/cli.js", "--acp"]
|
||||
|
||||
[agent_servers.qwen-code.targets.linux-x86_64]
|
||||
archive = "https://registry.npmjs.org/@qwen-code/qwen-code/-/qwen-code-0.8.0.tgz"
|
||||
cmd = "node"
|
||||
args = ["./package/cli.js", "--acp", "--experimental-skills"]
|
||||
args = ["./package/cli.js", "--acp"]
|
||||
|
||||
[agent_servers.qwen-code.targets.windows-x86_64]
|
||||
archive = "https://registry.npmjs.org/@qwen-code/qwen-code/-/qwen-code-0.8.0.tgz"
|
||||
cmd = "node"
|
||||
args = ["./package/cli.js", "--acp", "--experimental-skills"]
|
||||
args = ["./package/cli.js", "--acp"]
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue