docs: add 11 new documentation files across all categories

New reference docs:
- agents/ref-btmsg.md: inter-agent messaging schema and CLI
- agents/ref-bttask.md: kanban task board operations
- providers/ref-providers.md: Claude/Codex/Ollama/Aider comparison
- config/ref-settings.md: (already committed)

New guides:
- contributing/dual-repo-workflow.md: community vs commercial repos
- plugins/guide-developing.md: Web Worker sandbox API and publishing

New pro docs:
- pro/features/knowledge-base.md: persistent memory + symbol graph
- pro/features/git-integration.md: context injection + branch policy
- pro/marketplace/README.md: 13 plugins catalog

Split files:
- architecture/data-model.md: from architecture.md (schemas, layout)
- production/hardening.md: from production.md (supervisor, sandbox, WAL)
- production/features.md: from production.md (FTS5, plugins, secrets, audit)
This commit is contained in:
Hibryda 2026-03-17 04:18:05 +01:00
parent 8251321dac
commit b6c1d4b6af
11 changed files with 2198 additions and 0 deletions

View file

@ -0,0 +1,184 @@
# Provider Reference
Agents Orchestrator supports 4 agent providers. Each provider has its own sidecar
runner, message adapter, and capability set. Providers are selected per-project
in `groups.json` or via the Settings tab.
## Provider summary
| Provider | ID | Default Model | Sidecar Runner | API |
|----------|----|---------------|----------------|-----|
| Claude Code | `claude` | claude-opus-4-6 | `claude-runner.mjs` | Claude Agent SDK |
| Codex CLI | `codex` | gpt-5.4 | `codex-runner.mjs` | @openai/codex-sdk |
| Ollama | `ollama` | qwen3:8b | `ollama-runner.mjs` | REST (localhost:11434) |
| Aider | `aider` | openrouter/anthropic/claude-sonnet-4 | `aider-runner.mjs` | OpenRouter / direct |
## Capabilities
Each provider declares capabilities that gate UI features:
| Capability | Claude | Codex | Ollama | Aider |
|------------|--------|-------|--------|-------|
| `hasProfiles` | Yes | No | No | No |
| `hasSkills` | Yes | No | No | No |
| `hasModelSelection` | Yes | Yes | Yes | Yes |
| `hasSandbox` | No | Yes | No | No |
| `supportsSubagents` | Yes | No | No | No |
| `supportsCost` | Yes | No | No | No |
| `supportsResume` | Yes | Yes | No | No |
When a capability is `false`, the corresponding UI element is hidden. For
example, profile selectors and skill autocomplete only appear for Claude.
## Provider type
```typescript
type ProviderId = 'claude' | 'codex' | 'ollama' | 'aider';
```
Defined in `src/lib/providers/types.ts`.
## Provider selection
Set `provider` on a `ProjectConfig` in `groups.json`:
```json
{
"id": "my-project",
"name": "My Project",
"cwd": "/home/user/code/project",
"provider": "codex",
"model": "o3"
}
```
If omitted, defaults to `claude`.
## Claude Code
- **Source:** `src/lib/providers/claude.ts`
- **Runner:** `sidecar/claude-runner.ts` (compiled to `sidecar/dist/claude-runner.mjs`)
- **SDK:** `@anthropic-ai/claude-agent-sdk` `query()` function
- **CLI detection:** Auto-detects Claude CLI at startup. Checks paths in order:
`~/.local/bin/claude`, `~/.claude/local/claude`, `/usr/local/bin/claude`,
`/usr/bin/claude`, then `which claude`. Agent errors immediately if not found.
- **Config dir:** Override with `CLAUDE_CONFIG_DIR` for multi-account setups.
Mapped to `claude_config_dir` in `AgentQueryOptions`.
Available models:
| Model ID | Label |
|----------|-------|
| `claude-opus-4-6` | Opus 4.6 |
| `claude-sonnet-4-6` | Sonnet 4.6 |
| `claude-haiku-4-5-20251001` | Haiku 4.5 |
## Codex CLI
- **Source:** `src/lib/providers/codex.ts`
- **Runner:** `sidecar/codex-runner.ts` (compiled to `sidecar/dist/codex-runner.mjs`)
- **SDK:** `@openai/codex-sdk` (dynamic import; graceful failure if not installed)
- **Sandbox:** Maps agor sandbox settings to Codex approval modes.
- **Env:** Requires `OPENAI_API_KEY`.
Available models:
| Model ID | Label |
|----------|-------|
| `gpt-5.4` | GPT-5.4 |
| `o3` | o3 |
| `o4-mini` | o4-mini |
## Ollama
- **Source:** `src/lib/providers/ollama.ts`
- **Runner:** `sidecar/ollama-runner.ts` (compiled to `sidecar/dist/ollama-runner.mjs`)
- **API:** Direct HTTP to `localhost:11434` (native fetch, zero external deps)
- **Prereq:** Ollama must be running locally before starting an agent session.
Available models:
| Model ID | Label |
|----------|-------|
| `qwen3:8b` | Qwen3 8B |
| `qwen3:32b` | Qwen3 32B |
| `llama3.3:70b` | Llama 3.3 70B |
| `deepseek-r1:14b` | DeepSeek R1 14B |
| `codellama:13b` | Code Llama 13B |
## Aider
- **Source:** `src/lib/providers/aider.ts`
- **Runner:** `sidecar/aider-runner.ts` (compiled to `sidecar/dist/aider-runner.mjs`)
- **Routing:** Supports OpenRouter, OpenAI direct, Anthropic direct, and Ollama
local models via model ID prefixes.
- **Env:** Requires `OPENROUTER_API_KEY` for OpenRouter models, `OPENAI_API_KEY`
for OpenAI direct, `ANTHROPIC_API_KEY` for Anthropic direct.
- **Autonomous mode:** Supports `restricted` (surfaces commands for approval) and
`autonomous` (auto-executes with audit logging) via `autonomousMode` project
config.
Available models:
| Model ID | Label |
|----------|-------|
| `openrouter/anthropic/claude-sonnet-4` | Claude Sonnet 4 (OpenRouter) |
| `openrouter/anthropic/claude-haiku-4` | Claude Haiku 4 (OpenRouter) |
| `openrouter/openai/gpt-4.1` | GPT-4.1 (OpenRouter) |
| `openrouter/openai/o3` | o3 (OpenRouter) |
| `openrouter/google/gemini-2.5-pro` | Gemini 2.5 Pro (OpenRouter) |
| `openrouter/deepseek/deepseek-r1` | DeepSeek R1 (OpenRouter) |
| `openrouter/meta-llama/llama-4-maverick` | Llama 4 Maverick (OpenRouter) |
| `anthropic/claude-sonnet-4-5-20250514` | Claude Sonnet 4.5 (direct) |
| `o3` | o3 (OpenAI direct) |
| `ollama/qwen3:8b` | Qwen3 8B (Ollama) |
## Sidecar architecture
Each provider has a runner script compiled to a standalone ESM bundle in
`sidecar/dist/`. The sidecar communicates with the Rust backend via stdio
NDJSON.
Build all runners:
```bash
npm run build:sidecar
```
### Provider routing
`SidecarManager.resolve_sidecar_for_provider(provider)` selects the runner file
based on `ProviderId`. The sidecar process runs under Deno (preferred, faster
startup) with Node.js as fallback.
### Environment stripping
The sidecar strips provider-specific environment variables to prevent
cross-contamination. The function `strip_provider_env_var()` in
`agor-core/src/sidecar.rs` filters the process environment:
- **Stripped:** `CLAUDE_*`, `CODEX_*`, `OLLAMA_*` (and similar provider vars)
- **Preserved:** `CLAUDE_CODE_EXPERIMENTAL_*` (whitelist for experimental flags)
- **Preserved:** Standard vars (`HOME`, `PATH`, `USER`, `SHELL`, `TERM`,
`XDG_*`, `RUST_LOG`, etc.)
This is applied in two layers:
1. **Rust:** `env_clear()` + filtered `clean_env` on the spawned process
2. **JavaScript:** Runner SDK `env` option for provider-specific overrides
## Message adapters
Each provider has a message adapter that parses provider-specific output into a
common `AgentMessage` format:
| Provider | Adapter | Tests |
|----------|---------|-------|
| Claude | `src/lib/adapters/claude-messages.ts` | 25 tests |
| Codex | `src/lib/adapters/codex-messages.ts` | 19 tests |
| Ollama | `src/lib/adapters/ollama-messages.ts` | 11 tests |
| Aider | `sidecar/aider-parser.ts` | 72 tests |
Adapters are registered in `src/lib/adapters/message-adapters.ts` and routed by
`ProviderId`. The dispatcher (`src/lib/agent-dispatcher.ts`) delegates to the
correct adapter based on the session's provider.