chore: Resolve merge conflict with main (openclaw + qwen + windsurf)

- Combine windsurf scope support from this branch with openclaw/qwen targets from main
- Update resolve-output.ts utility to handle openclaw/qwen with openclawHome/qwenHome/pluginName
- Add openclawHome/qwenHome args to install.ts and convert.ts
- Register openclaw and qwen in targets/index.ts alongside windsurf
- Add openclaw/qwen coverage to resolve-output.test.ts (4 new tests → 288 total)
- Update README to document all 10 targets including windsurf and openclaw

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Kieran Klaassen
2026-03-01 14:53:42 -08:00
17 changed files with 1297 additions and 11 deletions

52
src/types/openclaw.ts Normal file
View File

@@ -0,0 +1,52 @@
export type OpenClawPluginManifest = {
id: string
name: string
kind: "tool"
configSchema?: {
type: "object"
additionalProperties: boolean
properties: Record<string, OpenClawConfigProperty>
required?: string[]
}
uiHints?: Record<string, OpenClawUiHint>
skills?: string[]
}
export type OpenClawConfigProperty = {
type: string
description?: string
default?: unknown
}
export type OpenClawUiHint = {
label: string
sensitive?: boolean
placeholder?: string
}
export type OpenClawSkillFile = {
name: string
content: string
/** Subdirectory path inside skills/ (e.g. "agent-native-reviewer") */
dir: string
}
export type OpenClawCommandRegistration = {
name: string
description: string
acceptsArgs: boolean
/** The prompt body that becomes the command handler response */
body: string
}
export type OpenClawBundle = {
manifest: OpenClawPluginManifest
packageJson: Record<string, unknown>
entryPoint: string
skills: OpenClawSkillFile[]
/** Skill directories to copy verbatim (original Claude skills with references/) */
skillDirCopies: { sourceDir: string; name: string }[]
commands: OpenClawCommandRegistration[]
/** openclaw.json fragment for MCP servers */
openclawConfig?: Record<string, unknown>
}

48
src/types/qwen.ts Normal file
View File

@@ -0,0 +1,48 @@
export type QwenExtensionConfig = {
name: string
version: string
mcpServers?: Record<string, QwenMcpServer>
contextFileName?: string
commands?: string
skills?: string
agents?: string
settings?: QwenSetting[]
}
export type QwenMcpServer = {
command?: string
args?: string[]
env?: Record<string, string>
cwd?: string
}
export type QwenSetting = {
name: string
description: string
envVar: string
sensitive?: boolean
}
export type QwenAgentFile = {
name: string
content: string
format: "yaml" | "markdown"
}
export type QwenSkillDir = {
sourceDir: string
name: string
}
export type QwenCommandFile = {
name: string
content: string
}
export type QwenBundle = {
config: QwenExtensionConfig
agents: QwenAgentFile[]
commandFiles: QwenCommandFile[]
skillDirs: QwenSkillDir[]
contextFile?: string
}