mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-15 09:01:14 +00:00
Add get_commands RPC for headless clients (#995)
* Add get_commands RPC for headless clients Headless clients like Emacs can now query which commands are available. Previously they could only discover file-based prompt templates by scanning the filesystem; extension commands and skills were invisible. The response includes each command's name, description, and source (extension, template, or skill). Commands appear in the same order as the TUI's autocomplete: extension commands first, then templates, then skills. Built-in TUI commands (/settings, /fork, etc.) are excluded since they require the interactive UI. Commands like /compact have dedicated RPC equivalents instead. * Add location and path to get_commands response Clients can show where commands come from (user/project/path) and display file paths in tooltips. The data is already available on templates and skills - just exposing it.
This commit is contained in:
parent
c67b582fc4
commit
0ad189f12a
6 changed files with 135 additions and 3 deletions
|
|
@ -612,6 +612,47 @@ Response:
|
|||
|
||||
Returns `{"text": null}` if no assistant messages exist.
|
||||
|
||||
### Commands
|
||||
|
||||
#### get_commands
|
||||
|
||||
Get available commands (extension commands, prompt templates, and skills). These can be invoked via the `prompt` command by prefixing with `/`.
|
||||
|
||||
```json
|
||||
{"type": "get_commands"}
|
||||
```
|
||||
|
||||
Response:
|
||||
```json
|
||||
{
|
||||
"type": "response",
|
||||
"command": "get_commands",
|
||||
"success": true,
|
||||
"data": {
|
||||
"commands": [
|
||||
{"name": "session-name", "description": "Set or clear session name", "source": "extension", "path": "/home/user/.pi/agent/extensions/session.ts"},
|
||||
{"name": "fix-tests", "description": "Fix failing tests", "source": "template", "location": "project", "path": "/home/user/myproject/.pi/agent/prompts/fix-tests.md"},
|
||||
{"name": "skill:brave-search", "description": "Web search via Brave API", "source": "skill", "location": "user", "path": "/home/user/.pi/agent/skills/brave-search/SKILL.md"}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Each command has:
|
||||
- `name`: Command name (invoke with `/name`)
|
||||
- `description`: Human-readable description (optional for extension commands)
|
||||
- `source`: What kind of command:
|
||||
- `"extension"`: Registered via `pi.registerCommand()` in an extension
|
||||
- `"template"`: Loaded from a prompt template `.md` file
|
||||
- `"skill"`: Loaded from a skill directory (name is prefixed with `skill:`)
|
||||
- `location`: Where it was loaded from (optional, not present for extensions):
|
||||
- `"user"`: User-level (`~/.pi/agent/`)
|
||||
- `"project"`: Project-level (`./.pi/agent/`)
|
||||
- `"path"`: Explicit path via CLI or settings
|
||||
- `path`: Absolute file path to the command source (optional)
|
||||
|
||||
**Note**: Built-in TUI commands (`/settings`, `/hotkeys`, etc.) are not included. They are handled only in interactive mode and would not execute if sent via `prompt`.
|
||||
|
||||
## Events
|
||||
|
||||
Events are streamed to stdout as JSON lines during agent operation. Events do NOT include an `id` field (only responses do).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue