Expose l'orchestration IdeA comme serveur MCP par-dessus le même OrchestratorService::dispatch, avec repli fichier .ideai/requests pour les CLI sans MCP. v3 réduite à la surface MCP : la messagerie inter-agents et la corrélation requête↔réponse étaient déjà résolues par §17 (send_blocking). - M0 capacité MCP sur le profil (McpCapability/McpConfigStrategy/McpTransport) - M1 injection conf MCP au LaunchAgent + prose adaptée selon la surface - M2 serveur/adapter MCP (JSON-RPC 2.0 maison ; outils idea_*) + ListAgents - M3 câblage par projet (registre mcp_servers jumeau du watcher) - M4 observabilité UI : OrchestratorRequestProcessed.source = file|mcp + badge Trois portes d'entrée (fichier, MCP, UI) → un seul dispatch ; aucun nouveau port applicatif ; MCP confiné à l'adapter infra. Tous lots verts (cycle §3). Cadrage : .ideai/briefs/orchestration-v3-cadrage.md ; ARCHITECTURE.md §14.3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
45 lines
2.3 KiB
TOML
45 lines
2.3 KiB
TOML
[package]
|
|
name = "infrastructure"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
rust-version.workspace = true
|
|
description = "IdeA — infrastructure layer: concrete adapters implementing the domain ports (fs, event bus, clock, id)."
|
|
|
|
[dependencies]
|
|
domain = { workspace = true }
|
|
# The orchestrator filesystem watcher (driving adapter, ARCHITECTURE §14.3) drives
|
|
# the application's `OrchestratorService`; infrastructure may depend on application.
|
|
application = { workspace = true }
|
|
# `process` (additive) powers LocalProcessSpawner; the workspace baseline keeps
|
|
# rt/macros/sync/fs/io-util.
|
|
tokio = { workspace = true, features = ["process", "time"] }
|
|
uuid = { workspace = true }
|
|
async-trait = { workspace = true }
|
|
# Ergonomic error enums for the MCP adapter (tool-mapping / transport errors).
|
|
thiserror = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
portable-pty = "0.9"
|
|
git2 = { workspace = true }
|
|
# Filesystem change notifications used to *wake* the orchestrator poll loop early
|
|
# (the poll loop remains the robust cross-platform correctness guarantee).
|
|
notify = "6"
|
|
# Optional HTTP client for the real `localServer`/`api` embedders (LOT C1a,
|
|
# §14.5.3). `default-features = false` + `rustls-tls` keeps it OpenSSL-free so the
|
|
# AppImage stays portable; pulled in *only* under the `vector-http` feature so the
|
|
# zero-dependency default (`none` strategy) compiles nothing extra.
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"], optional = true }
|
|
# Optional in-process ONNX embedder (LOT C1b, §14.5.3). rustls all the way down
|
|
# (HF model download + ort binaries fetched at build time, NOT load-dynamic) so the
|
|
# AppImage stays self-contained and OpenSSL-free. Pulled in *only* under the
|
|
# `vector-onnx` feature; the zero-dependency default compiles nothing extra.
|
|
fastembed = { version = "5", default-features = false, features = ["hf-hub-rustls-tls", "ort-download-binaries-rustls-tls"], optional = true }
|
|
|
|
[features]
|
|
# Real HTTP-backed embedders (`localServer` Ollama/llama.cpp, `api` OpenAI/Voyage…).
|
|
# OFF by default: the founding posture is `none` ⇒ naïve recall, zero dependency.
|
|
vector-http = ["dep:reqwest"]
|
|
# Real in-process ONNX embedder (`localOnnx`). OFF by default, same posture.
|
|
vector-onnx = ["dep:fastembed"]
|