a854096c35
* feat(server): add ACP base provider with Claude ACP integration Implement a generic Agent Client Protocol (ACP) base provider that any ACP-compatible agent can extend with minimal code. Includes a concrete Claude ACP implementation via @agentclientprotocol/claude-agent-acp with full parity to the existing Claude Code provider. The base handles subprocess lifecycle, streaming translation, permission bridging, terminal/fs callbacks, listModels, loadSession/resume, and mode/model management. The concrete class only specifies the command, modes, and availability check. * fix: update lockfile signatures and Nix hash * feat: add Copilot ACP provider, eliminate hardcoded provider unions, fix ACP streaming bugs Add Copilot as an ACP provider (copilot --acp), with real modes and models discovered from the ACP server. Fix two ACP base bugs: duplicate assistant text (emit deltas not cumulative) and idle→running→stuck (fire-and-return startTurn). Replace all hardcoded provider string unions with string/manifest- derived values so adding a provider only requires: impl class, manifest entry, registry factory, icon, and E2E config. Add provider docs and Copilot icon. * fix: update lockfile signatures and Nix hash * feat(app): add OpenCode provider icon --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
336 lines
10 KiB
JSON
336 lines
10 KiB
JSON
{
|
|
"$ref": "#/definitions/PaseoConfigV1",
|
|
"definitions": {
|
|
"PaseoConfigV1": {
|
|
"type": "object",
|
|
"properties": {
|
|
"version": {
|
|
"type": "number",
|
|
"const": 1
|
|
},
|
|
"daemon": {
|
|
"type": "object",
|
|
"properties": {
|
|
"listen": {
|
|
"type": "string"
|
|
},
|
|
"allowedHosts": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean",
|
|
"const": true
|
|
},
|
|
{
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"mcp": {
|
|
"type": "object",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"cors": {
|
|
"type": "object",
|
|
"properties": {
|
|
"allowedOrigins": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"relay": {
|
|
"type": "object",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"endpoint": {
|
|
"type": "string"
|
|
},
|
|
"publicEndpoint": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"app": {
|
|
"type": "object",
|
|
"properties": {
|
|
"baseUrl": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"providers": {
|
|
"type": "object",
|
|
"properties": {
|
|
"openai": {
|
|
"type": "object",
|
|
"properties": {
|
|
"apiKey": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"local": {
|
|
"type": "object",
|
|
"properties": {
|
|
"modelsDir": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"agents": {
|
|
"type": "object",
|
|
"properties": {
|
|
"providers": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"command": {
|
|
"anyOf": [
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"mode": {
|
|
"type": "string",
|
|
"const": "default"
|
|
}
|
|
},
|
|
"required": ["mode"],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"mode": {
|
|
"type": "string",
|
|
"const": "append"
|
|
},
|
|
"args": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": ["mode"],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"mode": {
|
|
"type": "string",
|
|
"const": "replace"
|
|
},
|
|
"argv": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": ["mode", "argv"],
|
|
"additionalProperties": false
|
|
}
|
|
]
|
|
},
|
|
"env": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"propertyNames": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"features": {
|
|
"type": "object",
|
|
"properties": {
|
|
"dictation": {
|
|
"type": "object",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"stt": {
|
|
"type": "object",
|
|
"properties": {
|
|
"provider": {
|
|
"allOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"enum": ["openai", "local"]
|
|
}
|
|
]
|
|
},
|
|
"model": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"confidenceThreshold": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"voiceMode": {
|
|
"type": "object",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"llm": {
|
|
"type": "object",
|
|
"properties": {
|
|
"provider": {
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"stt": {
|
|
"type": "object",
|
|
"properties": {
|
|
"provider": {
|
|
"$ref": "#/definitions/PaseoConfigV1/properties/features/properties/dictation/properties/stt/properties/provider"
|
|
},
|
|
"model": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"tts": {
|
|
"type": "object",
|
|
"properties": {
|
|
"provider": {
|
|
"$ref": "#/definitions/PaseoConfigV1/properties/features/properties/dictation/properties/stt/properties/provider"
|
|
},
|
|
"model": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"voice": {
|
|
"type": "string",
|
|
"enum": ["alloy", "echo", "fable", "onyx", "nova", "shimmer"]
|
|
},
|
|
"speakerId": {
|
|
"type": "integer"
|
|
},
|
|
"speed": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"log": {
|
|
"type": "object",
|
|
"properties": {
|
|
"level": {
|
|
"type": "string",
|
|
"enum": ["trace", "debug", "info", "warn", "error", "fatal"]
|
|
},
|
|
"format": {
|
|
"type": "string",
|
|
"enum": ["pretty", "json"]
|
|
},
|
|
"console": {
|
|
"type": "object",
|
|
"properties": {
|
|
"level": {
|
|
"$ref": "#/definitions/PaseoConfigV1/properties/log/properties/level"
|
|
},
|
|
"format": {
|
|
"$ref": "#/definitions/PaseoConfigV1/properties/log/properties/format"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"file": {
|
|
"type": "object",
|
|
"properties": {
|
|
"level": {
|
|
"$ref": "#/definitions/PaseoConfigV1/properties/log/properties/level"
|
|
},
|
|
"path": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"rotate": {
|
|
"type": "object",
|
|
"properties": {
|
|
"maxSize": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"maxFiles": {
|
|
"type": "integer",
|
|
"exclusiveMinimum": 0
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
}
|