docs: complete wiki updates — model-selection, guide, sl/ translations
This commit is contained in:
parent
b3891a8e01
commit
6c8bf8944f
19 changed files with 57 additions and 57 deletions
|
|
@ -82,7 +82,7 @@ static linking on FreeBSD (no `openssl-sys` dependency).
|
|||
| `colibri-daemon` | Always-on socket server, session/agent lifecycle, jail spawner |
|
||||
| `colibri-client` | Typed Unix-socket client + operator CLI tools |
|
||||
| `colibri-glasspane-tui` | ratatui dashboard — live pane supervision |
|
||||
| `colibri-store` | Embedded SQLite coordination (task board, agents, skills) |
|
||||
| `colibri-ledger` | Embedded SQLite coordination (task board, agents, skills) |
|
||||
| `colibri-skills` | Skills catalog (read-only consumer of reviewed skill artifacts) |
|
||||
| `colibri-mcp` | MCP bridge for editor integration + external MCP host (jailed) |
|
||||
| `clawdie` | Host installer/deployer: ZFS layout + `clawdie` service (FreeBSD/Linux) |
|
||||
|
|
|
|||
30
Cargo.lock
generated
30
Cargo.lock
generated
|
|
@ -303,7 +303,7 @@ version = "0.12.0"
|
|||
dependencies = [
|
||||
"colibri-daemon",
|
||||
"colibri-glasspane",
|
||||
"colibri-store",
|
||||
"colibri-ledger",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.18",
|
||||
|
|
@ -328,9 +328,9 @@ dependencies = [
|
|||
"colibri-contracts",
|
||||
"colibri-deepseek",
|
||||
"colibri-glasspane",
|
||||
"colibri-ledger",
|
||||
"colibri-runtime",
|
||||
"colibri-skills",
|
||||
"colibri-store",
|
||||
"colibri-vault",
|
||||
"dashmap",
|
||||
"reqwest",
|
||||
|
|
@ -387,6 +387,19 @@ dependencies = [
|
|||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colibri-ledger"
|
||||
version = "0.12.0"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"colibri-skills",
|
||||
"rusqlite",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.18",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colibri-mcp"
|
||||
version = "0.12.0"
|
||||
|
|
@ -434,19 +447,6 @@ dependencies = [
|
|||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colibri-store"
|
||||
version = "0.12.0"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"colibri-skills",
|
||||
"rusqlite",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.18",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colibri-vault"
|
||||
version = "0.12.0"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
[workspace]
|
||||
members = ["crates/colibri-contracts", "crates/colibri-deepseek", "crates/colibri-runtime", "crates/colibri-glasspane", "crates/colibri-daemon", "crates/colibri-client", "crates/colibri-glasspane-tui", "crates/colibri-store", "crates/colibri-skills", "crates/colibri-mcp", "crates/colibri-vault", "crates/colibri-zfs", "crates/colibri-pf", "crates/colibri-deploy", "crates/clawdie"]
|
||||
members = ["crates/colibri-contracts", "crates/colibri-deepseek", "crates/colibri-runtime", "crates/colibri-glasspane", "crates/colibri-daemon", "crates/colibri-client", "crates/colibri-glasspane-tui", "crates/colibri-ledger", "crates/colibri-skills", "crates/colibri-mcp", "crates/colibri-vault", "crates/colibri-zfs", "crates/colibri-pf", "crates/colibri-deploy", "crates/clawdie"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.12.0"
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ bhyve VMs, Bastille jails) or as a standalone daemon on Linux.
|
|||
| `colibri-daemon` | Always-on Unix socket server, task dispatch, session lifecycle |
|
||||
| `colibri-client` | Typed Unix-socket client + operator CLI |
|
||||
| `colibri-glasspane-tui` | ratatui live dashboard (FreeBSD-native) |
|
||||
| `colibri-store` | Embedded SQLite coordination (task board, agents, cost tracking) |
|
||||
| `colibri-ledger` | Embedded SQLite coordination (task board, agents, cost tracking) |
|
||||
| `colibri-skills` | Skills catalog crate |
|
||||
| `clawdie` | Host installer/deployer: ZFS layout + `clawdie` service (FreeBSD/Linux) |
|
||||
|
||||
|
|
|
|||
|
|
@ -24,4 +24,4 @@ tokio = { version = "1", features = ["io-util", "macros", "net", "rt-multi-threa
|
|||
[dev-dependencies]
|
||||
tokio = { version = "1", features = ["fs", "io-util", "macros", "net", "rt-multi-thread", "time"] }
|
||||
uuid = { version = "1", features = ["v4"] }
|
||||
colibri-store = { path = "../colibri-store" }
|
||||
colibri-ledger = { path = "../colibri-ledger" }
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ colibri-contracts = { path = "../colibri-contracts" }
|
|||
colibri-deepseek = { path = "../colibri-deepseek" }
|
||||
colibri-glasspane = { path = "../colibri-glasspane" }
|
||||
colibri-runtime = { path = "../colibri-runtime" }
|
||||
colibri-store = { path = "../colibri-store" }
|
||||
colibri-ledger = { path = "../colibri-ledger" }
|
||||
colibri-skills = { path = "../colibri-skills" }
|
||||
colibri-vault = { path = "../colibri-vault" }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
//! colibri-store — Embedded SQLite coordination database.
|
||||
//! colibri-ledger — Embedded SQLite coordination database.
|
||||
//!
|
||||
//! Implements Decision #1 from `docs/COLIBRI-CUTOVER-PLAN.md`:
|
||||
//! authoritative task-board lifecycle, agent registry, and skills catalog
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ colibri-daemon — Unix-socket server (the always-on supervisor)
|
|||
| Crate | Role |
|
||||
| ----------------------- | --------------------------------------------------------- |
|
||||
| `colibri-daemon` | Socket server, agent lifecycle, scheduler loop |
|
||||
| `colibri-store` | Embedded SQLite — tasks, agents, tenants, skills |
|
||||
| `colibri-ledger` | Embedded SQLite — tasks, agents, tenants, skills |
|
||||
| `colibri-glasspane` | Agent state machine (Idle → Working → Done/Error/Stalled) |
|
||||
| `colibri-glasspane-tui` | ratatui dashboard — live pane supervision |
|
||||
| `colibri-client` | CLI (`colibri status`, `colibri spawn`, `colibri tasks`) |
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
**Architecture:** New `eval.rs` module with `eval_task_locally()` → `tokio::spawn` in `record_task_completion()`. Upserts a second TaskEval row with `eval_mode: "local-llm"`, overwriting the agent self-report's `correctness_check` with PASS/FAIL from the local model.
|
||||
|
||||
**Tech Stack:** Rust, tokio::spawn, std::process::Command (ollama), colibri-store TaskEval
|
||||
**Tech Stack:** Rust, tokio::spawn, std::process::Command (ollama), colibri-ledger TaskEval
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -257,7 +257,7 @@ Replace lines 381-401 (the agent self-report eval block) with:
|
|||
|
||||
```rust
|
||||
// T2.x Phase 1: Write eval record (agent self-report mode)
|
||||
let agent_eval = colibri_store::TaskEval {
|
||||
let agent_eval = colibri_ledger::TaskEval {
|
||||
task_id: task_id.to_string(),
|
||||
agent_id: Some(agent_id.to_string()),
|
||||
eval_mode: "agent".to_string(),
|
||||
|
|
@ -286,7 +286,7 @@ Replace lines 381-401 (the agent self-report eval block) with:
|
|||
use crate::eval::eval_task_locally;
|
||||
match eval_task_locally(&task_id_owned, &task_desc_owned) {
|
||||
Some(attempt) => {
|
||||
let local_eval = colibri_store::TaskEval {
|
||||
let local_eval = colibri_ledger::TaskEval {
|
||||
task_id: task_id_owned.clone(),
|
||||
agent_id: Some(agent_id.to_string()),
|
||||
eval_mode: "local-llm".to_string(),
|
||||
|
|
@ -299,7 +299,7 @@ Replace lines 381-401 (the agent self-report eval block) with:
|
|||
evaluated_at: chrono::Utc::now().to_rfc3339(),
|
||||
};
|
||||
// Re-open store — we're in a different thread
|
||||
if let Ok(store) = colibri_store::Store::open(&store_path) {
|
||||
if let Ok(store) = colibri_ledger::Store::open(&store_path) {
|
||||
if let Err(e) = store.write_task_eval(&local_eval) {
|
||||
warn!(task_id = %task_id_owned, error = %e, "failed to write local eval");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ Colibri speaks 5 protocols today:
|
|||
| **MCP JSON-RPC** | `crates/colibri-mcp/src/lib.rs` | 570 | Editor integration + external MCP host |
|
||||
| **MCP-over-SSH** | `packaging/mother/` (3 files) | 437 | Mother hive entrypoint (forced-command allowlist + node register) |
|
||||
| **JSONL** | `crates/colibri-glasspane/src/lib.rs` | 1,186 | Agent subprocess stdout events |
|
||||
| **SQL** | `crates/colibri-store/src/lib.rs` + `crates/colibri-store/src/schema.rs` | 1,150 | Local coordination (tasks, agents, skills, tenants) |
|
||||
| **SQL** | `crates/colibri-ledger/src/lib.rs` + `crates/colibri-ledger/src/schema.rs` | 1,150 | Local coordination (tasks, agents, skills, tenants) |
|
||||
|
||||
**Total protocol surface: ~5,324 lines.**
|
||||
|
||||
|
|
@ -108,7 +108,7 @@ With A2A: cost data is a typed message part (`application/json+cost`). The forma
|
|||
| **Unix socket wire protocol** (`crates/colibri-daemon/src/socket.rs`) | A2A is cross-node HTTP. Local daemon control needs IPC — Unix socket is faster, auth-free (filesystem permissions), and doesn't need a network stack. | 0 |
|
||||
| **Spawner** (`crates/colibri-daemon/src/spawner.rs`) | A2A routes tasks to existing agents. Colibri _creates_ agents by spawning subprocesses. A2A has no process lifecycle concept. | 0 |
|
||||
| **Glasspane** (`crates/colibri-glasspane/src/lib.rs`) | A2A doesn't watch subprocess stdout. Glasspane is a PTY observer — it reads JSONL from child processes. A2A operates one layer above. | 0 |
|
||||
| **Store** (`crates/colibri-store/src/lib.rs`) | A2A doesn't replace local SQLite coordination. Each node needs local persistence for task board, agents, skills — A2A is the _transport_, not the _database_. | 0 |
|
||||
| **Store** (`crates/colibri-ledger/src/lib.rs`) | A2A doesn't replace local SQLite coordination. Each node needs local persistence for task board, agents, skills — A2A is the _transport_, not the _database_. | 0 |
|
||||
| **MCP editor bridge** | A2A is agent-to-agent. MCP is human-to-tool. Different protocols for different directions. They coexist. | 0 |
|
||||
| **Contracts schemas** (`crates/colibri-contracts/src/lib.rs`) | A2A uses JSON Schema for input validation. Colibri's contracts are already compatible — no change needed. | 0 |
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ finished_at) onto the task row. MCP exposes `colibri_get_task_cost` for
|
|||
agents to query historical cost data (e.g., "what model is cheapest for
|
||||
this workload?").
|
||||
|
||||
→ [`crates/colibri-store/src/lib.rs`](../../crates/colibri-store/src/lib.rs)
|
||||
→ [`crates/colibri-ledger/src/lib.rs`](../../crates/colibri-ledger/src/lib.rs)
|
||||
(`TaskCost`, `set_task_cost`),
|
||||
[`crates/colibri-glasspane/src/lib.rs`](../../crates/colibri-glasspane/src/lib.rs)
|
||||
(`PaneUsage`, `add_cost`),
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
| `clawdie-system-probe` | Collects GPU, RAM, CPU, disks, ZFS, WiFi, Vulkan, Colibri status | No ollama/llama.cpp probing |
|
||||
| `node-register-mcp` | UPSERTs hw_profile into `hive_nodes` on join | No UUID generation at join time |
|
||||
| `crates/colibri-daemon/src/scheduler.rs` | Cron/interval/one-shot jobs, capability matching stubs | No cost-aware routing, no hive awareness |
|
||||
| `colibri-store` | Local SQLite `agents` table with UUID (v4 random) | UUID is session-local, not hive-stable |
|
||||
| `colibri-ledger` | Local SQLite `agents` table with UUID (v4 random) | UUID is session-local, not hive-stable |
|
||||
| T1.5 cost tracking | Per-task cost captured in local SQLite | No hive-level cost aggregation |
|
||||
|
||||
## Design Goals
|
||||
|
|
@ -380,7 +380,7 @@ The capability matrix, stable UUIDs, and local LLM probes are the foundation —
|
|||
| `colibri_query_hive_capabilities` MCP tool | colibri-mcp |
|
||||
| `colibri_dispatch_to_node` MCP tool | colibri-mcp |
|
||||
| `hive-routing` skill | `.agent/skills/` |
|
||||
| `Task.routing` JSONB field in colibri-store | colibri-store |
|
||||
| `Task.routing` JSONB field in colibri-ledger | colibri-ledger |
|
||||
| Mother-side routing score as PostgreSQL function (optional — only if agent-driven routing proves insufficient) | mother_schema.sql |
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -354,7 +354,7 @@ task arrives at scheduler
|
|||
| Local eval: spawn local LLM with eval prompt | colibri-daemon | ~60 |
|
||||
| Fallback logic: self-report → local → cloud → skipped | colibri-daemon | ~40 |
|
||||
| Eval job scheduler (async, fire-and-forget) | colibri-daemon | ~30 |
|
||||
| Eval result merge into task_eval | colibri-store | ~20 |
|
||||
| Eval result merge into task_eval | colibri-ledger | ~20 |
|
||||
|
||||
**Total:** ~180 lines, 3 days.
|
||||
|
||||
|
|
@ -383,7 +383,7 @@ task arrives at scheduler
|
|||
| Deliverable | Where | Lines |
|
||||
| --------------------------------------------------- | -------------- | ----- |
|
||||
| Cloud eval: call Claude/DeepSeek with eval prompt | colibri-daemon | ~50 |
|
||||
| Cost accounting: eval_cost_usd added to task_eval | colibri-store | ~10 |
|
||||
| Cost accounting: eval_cost_usd added to task_eval | colibri-ledger | ~10 |
|
||||
| Feedback loop: eval results → routing weight update | colibri-daemon | ~30 |
|
||||
| Eval aggregation: 5-minute rollup of success rates | colibri-mcp | ~25 |
|
||||
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ uspeh, finished_at) v vrstico opravila. MCP izpostavlja
|
|||
`colibri_get_task_cost` za poizvedbe agentov o zgodovinskih stroških (npr.
|
||||
"kateri model je najcenejši za to delovno obremenitev?").
|
||||
|
||||
→ [`crates/colibri-store/src/lib.rs`](../../crates/colibri-store/src/lib.rs)
|
||||
→ [`crates/colibri-ledger/src/lib.rs`](../../crates/colibri-ledger/src/lib.rs)
|
||||
(`TaskCost`, `set_task_cost`),
|
||||
[`crates/colibri-glasspane/src/lib.rs`](../../crates/colibri-glasspane/src/lib.rs)
|
||||
(`PaneUsage`, `add_cost`)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ Vse veščine si delijo eno tabelo `skills` s stolpci `name`, `description`,
|
|||
(`"soul"`, `"agent"`, `"channel"`). Brez gnezdenja, brez različic, brez
|
||||
odvisnosti med veščinami. To ustreza trenutnemu obsegu (~50 veščin).
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
### Uvoz ob zagonu, ne sproti
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@ description: "Koordinacijska shramba Colibri — ena sama podatkovna zbirka SQLi
|
|||
Colibrijeva koordinacijska shramba je ena sama podatkovna zbirka SQLite v
|
||||
lasti storitve `colibri`. Hrani tablo opravil, register agentov in veščin ter
|
||||
preslikavo najemnikov trezorja. Ni predpomnilnik — je trajno stanje. Večina
|
||||
pisanj gre skozi API vtičnice procesa v ozadju, vendar shema pripada `colibri-store`.
|
||||
pisanj gre skozi API vtičnice procesa v ozadju, vendar shema pripada `colibri-ledger`.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
→ `crates/colibri-store/src/lib.rs`
|
||||
→ `crates/colibri-ledger/src/lib.rs`
|
||||
|
||||
## Odločitve
|
||||
|
||||
|
|
@ -39,7 +39,7 @@ Te niso nastavljive med izvajanjem. Če bomo kdaj potrebovali drugačna jamstva
|
|||
glede trajnosti ali sočasnosti, naj bo to eksplicitno, namesto da bi povezava
|
||||
podedovala privzetke.
|
||||
|
||||
→ `crates/colibri-store/src/lib.rs` (`Store::open`)
|
||||
→ `crates/colibri-ledger/src/lib.rs` (`Store::open`)
|
||||
|
||||
### Samo idempotentne migracije
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ navzdol; razvoj sheme so aditivne tabele in stolpci. Če bo kdaj potrebna
|
|||
destruktivna migracija, mora biti to nameren ročni korak, dokumentiran v
|
||||
predaji.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
### Štiri tabele za štiri skrbi
|
||||
|
||||
|
|
@ -64,7 +64,7 @@ Opravila nosijo tuji ključ `agent_id` v `agents`. Vsako drugo razmerje je
|
|||
ohlapno — veščine niso povezane z agenti, najemniki pa so referencirani po
|
||||
svojem `tenant_id` v ukazih vtičnice in kljukah za oskrbo.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
### Omejitev CHECK stanja opravila je vir resnice
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ svojem `tenant_id` v ukazih vtičnice in kljukah za oskrbo.
|
|||
Enum `TaskStatus` v Rustu ga zrcali, vendar je podatkovna zbirka zadnje
|
||||
preverjanje. Ukaz, ki poskusi vstaviti neznano stanje, pade ob času pisanja.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
### Zmožnosti agenta shranjene kot JSON, ne normalizirane
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ bi dodali zapletenost sheme brez izboljšanja moči poizvedb.
|
|||
Če metapodatki zmožnosti zrastejo (uteži, različice, zahtevane veščine),
|
||||
lahko to kasneje razcepimo; trenutna shema namenoma ostaja pragmatična.
|
||||
|
||||
→ `crates/colibri-store/src/lib.rs` (`register_agent`)
|
||||
→ `crates/colibri-ledger/src/lib.rs` (`register_agent`)
|
||||
|
||||
### Najemniki kodirajo preslikavo 1:1:1 ječa/trezor/zbirka
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ Stolpec `status` najemnika sledi življenjskemu ciklu:
|
|||
`provisioned → active → stopped → destroyed`. Neodvisen je od tega, ali
|
||||
proces ječe teče; upravljanje življenjskega cikla je ločena skrb.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs` (komentarji na `tenants`)
|
||||
→ `crates/colibri-ledger/src/schema.rs` (komentarji na `tenants`)
|
||||
|
||||
### Privzeta pot podatkovne zbirke je specifična za platformo
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ FreeBSD privzeto uporablja `/var/db`, ker je to običajni imenik za lokalno
|
|||
stanje storitev. Linuxov padec spoštuje XDG, tako da je razvoj na delovni
|
||||
postaji normalen.
|
||||
|
||||
→ `crates/colibri-store/src/lib.rs` (`default_db_path`)
|
||||
→ `crates/colibri-ledger/src/lib.rs` (`default_db_path`)
|
||||
|
||||
### Izvoz JSON za varnostne kopije in paritetne teste
|
||||
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ administracije in preživi ponovne zagone procesa v ozadju brez ločenega življ
|
|||
cikla. Matično vozlišče uporablja PostgreSQL za hive register, ker je
|
||||
večnajemniško; lokalni proces v ozadju je enouporabniški (single user/operator).
|
||||
|
||||
→ [`crates/colibri-store/src/lib.rs`](../../crates/colibri-store/src/lib.rs)
|
||||
→ [`crates/colibri-ledger/src/lib.rs`](../../crates/colibri-ledger/src/lib.rs)
|
||||
|
||||
## Glej tudi
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@
|
|||
Colibri's coordination store is a single SQLite database owned by the `colibri`
|
||||
service. It holds the task board, the registry of agents and skills, and the
|
||||
vault tenant map. It is not a cache — it is durable state. Most writes happen
|
||||
through the daemon's socket API, but the schema belongs to `colibri-store`.
|
||||
through the daemon's socket API, but the schema belongs to `colibri-ledger`.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
→ `crates/colibri-store/src/lib.rs`
|
||||
→ `crates/colibri-ledger/src/lib.rs`
|
||||
|
||||
## Decisions
|
||||
|
||||
|
|
@ -35,7 +35,7 @@ These are not configurable at runtime. If we ever need different durability or
|
|||
concurrency guarantees, we should make it explicit rather than letting the
|
||||
connection inherit defaults.
|
||||
|
||||
→ `crates/colibri-store/src/lib.rs` (`Store::open`)
|
||||
→ `crates/colibri-ledger/src/lib.rs` (`Store::open`)
|
||||
|
||||
### Idempotent migrations only
|
||||
|
||||
|
|
@ -44,7 +44,7 @@ indexes, so repeated runs are safe. We do not ship downward migrations; schema
|
|||
evolution is additive tables and columns. If a destructive migration is ever
|
||||
needed, it must be a deliberate manual step documented in a handoff.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
### Four tables for four concerns
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ Tasks carry an `agent_id` foreign key into `agents`. Every other relationship is
|
|||
loose — skills are not linked to agents, and tenants are referenced by their
|
||||
`tenant_id` in socket commands and provisioning hooks.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
### Task-status CHECK constraint is the source of truth
|
||||
|
||||
|
|
@ -67,7 +67,7 @@ loose — skills are not linked to agents, and tenants are referenced by their
|
|||
The Rust `TaskStatus` enum mirrors it, but the database is the final gate. A
|
||||
command that tries to insert an unknown status fails at write time.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs`
|
||||
→ `crates/colibri-ledger/src/schema.rs`
|
||||
|
||||
### Agent capabilities stored as JSON, not normalized
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ complexity without improving query power.
|
|||
If capability metadata grows (weights, versions, required skills), we can split
|
||||
it later; the current schema intentionally stays pragmatic.
|
||||
|
||||
→ `crates/colibri-store/src/lib.rs` (`register_agent`)
|
||||
→ `crates/colibri-ledger/src/lib.rs` (`register_agent`)
|
||||
|
||||
### Tenants encode the 1:1:1 jail/vault/collection map
|
||||
|
||||
|
|
@ -92,7 +92,7 @@ The tenant `status` column tracks the lifecycle:
|
|||
`provisioned → active → stopped → destroyed`. It is independent of whether the
|
||||
jail process is running; lifecycle management is a separate concern.
|
||||
|
||||
→ `crates/colibri-store/src/schema.rs` (comments on `tenants`)
|
||||
→ `crates/colibri-ledger/src/schema.rs` (comments on `tenants`)
|
||||
|
||||
### Default database path is platform-specific
|
||||
|
||||
|
|
@ -107,7 +107,7 @@ FreeBSD defaults to `/var/db` because that is the conventional local-state
|
|||
directory for services. The Linux fallback respects XDG, so development on a
|
||||
workstation feels normal.
|
||||
|
||||
→ `crates/colibri-store/src/lib.rs` (`default_db_path`)
|
||||
→ `crates/colibri-ledger/src/lib.rs` (`default_db_path`)
|
||||
|
||||
### JSON export for backups and parity tests
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ coordination state. SQLite is zero-config, zero-admin, and survives daemon
|
|||
restarts without a separate lifecycle. The mother node uses PostgreSQL for the
|
||||
hive registry because it's multi-tenant; the local daemon is single-tenant.
|
||||
|
||||
→ [`crates/colibri-store/src/lib.rs`](../../crates/colibri-store/src/lib.rs)
|
||||
→ [`crates/colibri-ledger/src/lib.rs`](../../crates/colibri-ledger/src/lib.rs)
|
||||
|
||||
## See also
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue