Sort le serveur HTTP/WS de `app-tauri` vers un crate `web-server` autonome,
exposant le binaire `idea-serve` qui sert le client web sans aucune dépendance
GUI. Le cœur (use cases, DTO, events) devient partagé entre deux driving
adapters : le desktop Tauri et le serveur headless.
Structure :
- `crates/web-server` : lib + bin `idea-serve`, consomme `backend::{dto, events}`.
- `crates/backend` : `dto.rs` et `events.rs` deviennent le propriétaire canonique
des DTO/events transport-neutres (arbitrage Architect : pas de crate contrat
dédié, `backend` est déjà le composition root transport-neutre).
- `crates/app-tauri` : `dto.rs` réduit à un shim de ré-export, `events.rs` réduit
au relais Tauri (souscription au bus + emit), `server.rs` vidé au profit du
crate partagé.
- `Cargo.toml`/`Cargo.lock` : `web-server` ajouté aux membres du workspace.
Frontière respectée : les DTO de `backend` ne tirent ni Tauri, ni HTTP/WS, ni
Axum/Hyper, ni UI ; `domain`/`application` n'en dépendent pas. Le frontend est
inchangé (`git diff 506d589...HEAD -- frontend` vide).
`web_server::run_embedded(...)` est le point d'extension prévu pour #68 (le
desktop consommera `web-server` comme lib plutôt que d'en forker le serveur).
QA (exécution réelle, re-vérifiée avant merge) :
- `cargo test -p backend` 41 passed · `-p web-server` 55 passed · `-p app-tauri`
35 passed, 0 échec.
- Invariant headless : `ldd target/debug/idea-serve` ne tire aucun
webkit/javascriptcore/gtk/gdk/soup/tauri/wry, là où `app-tauri` les tire bien.
- Validation live utilisateur : `idea-serve` démarre, sert le SPA, le contrôle
d'origine strict tient, accès distant OK via reverse proxy.
- Les 10 échecs `openai_compat` de `cargo test --workspace` sont préexistants sur
`506d589` (bind réseau interdit par la sandbox), hors périmètre.
Squash de `82e8e77` (commit de sûreté « état intermédiaire non figé », qui
rapatriait le travail réalisé par erreur sur la branche de #69) et de `ddbea7b`
(déduplication des DTO events, comblant l'écart annoncé par le premier). Les deux
n'avaient de sens qu'ensemble : ce commit fige le contrat que le premier laissait
explicitement ouvert. Arbre identique bit pour bit à `ddbea7b` ; historique
d'origine conservé sur `backup/ticket65-pre-squash-ddbea7b`.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
59 lines
2.0 KiB
TOML
59 lines
2.0 KiB
TOML
[package]
|
|
name = "app-tauri"
|
|
version = "0.3.0"
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
rust-version.workspace = true
|
|
description = "IdeA — Tauri v2 shell: composition root (DI), IPC commands/events, PTY↔Channel bridge."
|
|
|
|
# The library carries all the wiring so it is unit-testable; the binary is a
|
|
# thin entry point.
|
|
[lib]
|
|
name = "app_tauri_lib"
|
|
crate-type = ["lib", "cdylib", "staticlib"]
|
|
|
|
[[bin]]
|
|
name = "app-tauri"
|
|
path = "src/main.rs"
|
|
|
|
[build-dependencies]
|
|
tauri-build = { workspace = true }
|
|
|
|
[dependencies]
|
|
domain = { workspace = true }
|
|
application = { workspace = true }
|
|
infrastructure = { workspace = true }
|
|
backend = { workspace = true }
|
|
web-server = { workspace = true }
|
|
tauri = { workspace = true }
|
|
tauri-plugin-dialog = { workspace = true }
|
|
# `io-std` gives the headless `mcp-server` bridge access to
|
|
# `tokio::io::{stdin,stdout}`; `net` is used only by the `--serve` HTTP adapter.
|
|
tokio = { workspace = true, features = ["io-std", "rt", "net"] }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
uuid = { workspace = true }
|
|
base64 = "0.22"
|
|
bytes = "1.11"
|
|
cookie = "0.18"
|
|
http = "1.4"
|
|
http-body-util = "0.1"
|
|
# `AppAgentResumer` implements the application's async `AgentResumer` port (LS7).
|
|
async-trait = { workspace = true }
|
|
# Cross-OS local IPC for the MCP loopback transport (M5a): Unix domain socket
|
|
# (Linux/macOS) + Windows named pipe behind one async API, no network port. Pulled
|
|
# in only here (the transport is an app-tauri/infra concern); its `tokio` feature
|
|
# keeps us off tokio's `net` feature workspace-wide.
|
|
interprocess = { version = "2.4", features = ["tokio"] }
|
|
|
|
[features]
|
|
# Passthrough toggles to enable the real embedders in an IDE build. OFF by default
|
|
# (founding posture: `none` ⇒ naïve recall, zero dependency).
|
|
vector-http = ["infrastructure/vector-http", "backend/vector-http"]
|
|
vector-onnx = ["infrastructure/vector-onnx", "backend/vector-onnx"]
|
|
|
|
[dev-dependencies]
|
|
uuid = { workspace = true }
|
|
async-trait = { workspace = true }
|