mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-31 00:29:24 +00:00
refactor: architecture improvements for contributor velocity (#198)
* refactor: split large files and consolidate test stubs for contributor velocity - Extract 7 Database sub-traits (ConversationStore, JobStore, SandboxStore, RoutineStore, ToolFailureStore, SettingsStore, WorkspaceStore) with Database as a supertrait combining them all - Split libsql_backend.rs (2769 lines) into src/db/libsql/ directory with one file per sub-trait implementation - Split config.rs (1753 lines) into src/config/ directory with 16 domain files - Consolidate 3 duplicate test LLM stubs into shared StubLlm in src/testing.rs - Split server.rs handlers into src/channels/web/handlers/ directory - Extract main.rs init phases into AppBuilder (src/app.rs) - Add developer setup script (scripts/dev-setup.sh) Co-Authored-By: Claude Opus 4.6 <[email protected]> * refactor: move heartbeat test from examples/ to tests/ Convert standalone example binary into a proper #[ignore] integration test, matching the convention of the other integration tests. Co-Authored-By: Claude Opus 4.6 <[email protected]> * style: fix rustfmt formatting for CI Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: address PR review comments from Copilot - tunnel.rs: replace .ok().flatten() with ? to propagate env var errors - secrets.rs: remove misleading "process-wide cache" comment - database.rs: use uppercase "DATABASE_URL" in error key - testing.rs: gate harness tests with #[cfg(feature = "libsql")] Co-Authored-By: Claude Opus 4.6 <[email protected]> --------- Co-authored-by: Illia Polosukhin <[email protected]> Co-authored-by: Claude Opus 4.6 <[email protected]>
This commit is contained in:
co-authored by
Illia Polosukhin
Claude Opus 4.6
parent
6330f1b27a
commit
ffb1cc9be8
+6
-37
@@ -449,48 +449,17 @@ mod tests {
|
||||
use tower::ServiceExt;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::error::LlmError;
|
||||
use crate::llm::{
|
||||
CompletionRequest, CompletionResponse, ToolCompletionRequest, ToolCompletionResponse,
|
||||
};
|
||||
use crate::orchestrator::auth::TokenStore;
|
||||
use crate::orchestrator::job_manager::{ContainerJobConfig, ContainerJobManager};
|
||||
use crate::testing::StubLlm;
|
||||
|
||||
use super::*;
|
||||
|
||||
/// Stub LLM provider that panics if called (tests only exercise routing/auth).
|
||||
struct StubLlm;
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl crate::llm::LlmProvider for StubLlm {
|
||||
fn model_name(&self) -> &str {
|
||||
"stub"
|
||||
}
|
||||
fn cost_per_token(&self) -> (rust_decimal::Decimal, rust_decimal::Decimal) {
|
||||
(rust_decimal::Decimal::ZERO, rust_decimal::Decimal::ZERO)
|
||||
}
|
||||
async fn complete(&self, _req: CompletionRequest) -> Result<CompletionResponse, LlmError> {
|
||||
Err(LlmError::RequestFailed {
|
||||
provider: "stub".into(),
|
||||
reason: "not implemented".into(),
|
||||
})
|
||||
}
|
||||
async fn complete_with_tools(
|
||||
&self,
|
||||
_req: ToolCompletionRequest,
|
||||
) -> Result<ToolCompletionResponse, LlmError> {
|
||||
Err(LlmError::RequestFailed {
|
||||
provider: "stub".into(),
|
||||
reason: "not implemented".into(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn test_state() -> OrchestratorState {
|
||||
let token_store = TokenStore::new();
|
||||
let jm = ContainerJobManager::new(ContainerJobConfig::default(), token_store.clone());
|
||||
OrchestratorState {
|
||||
llm: Arc::new(StubLlm),
|
||||
llm: Arc::new(StubLlm::default()),
|
||||
job_manager: Arc::new(jm),
|
||||
token_store,
|
||||
job_event_tx: None,
|
||||
@@ -722,7 +691,7 @@ mod tests {
|
||||
.await;
|
||||
|
||||
let state = OrchestratorState {
|
||||
llm: Arc::new(StubLlm),
|
||||
llm: Arc::new(StubLlm::default()),
|
||||
job_manager: Arc::new(jm),
|
||||
token_store,
|
||||
job_event_tx: None,
|
||||
@@ -757,7 +726,7 @@ mod tests {
|
||||
let token_store = TokenStore::new();
|
||||
let jm = ContainerJobManager::new(ContainerJobConfig::default(), token_store.clone());
|
||||
let state = OrchestratorState {
|
||||
llm: Arc::new(StubLlm),
|
||||
llm: Arc::new(StubLlm::default()),
|
||||
job_manager: Arc::new(jm),
|
||||
token_store: token_store.clone(),
|
||||
job_event_tx: Some(tx),
|
||||
@@ -812,7 +781,7 @@ mod tests {
|
||||
let token_store = TokenStore::new();
|
||||
let jm = ContainerJobManager::new(ContainerJobConfig::default(), token_store.clone());
|
||||
let state = OrchestratorState {
|
||||
llm: Arc::new(StubLlm),
|
||||
llm: Arc::new(StubLlm::default()),
|
||||
job_manager: Arc::new(jm),
|
||||
token_store: token_store.clone(),
|
||||
job_event_tx: Some(tx),
|
||||
@@ -860,7 +829,7 @@ mod tests {
|
||||
let token_store = TokenStore::new();
|
||||
let jm = ContainerJobManager::new(ContainerJobConfig::default(), token_store.clone());
|
||||
let state = OrchestratorState {
|
||||
llm: Arc::new(StubLlm),
|
||||
llm: Arc::new(StubLlm::default()),
|
||||
job_manager: Arc::new(jm),
|
||||
token_store: token_store.clone(),
|
||||
job_event_tx: Some(tx),
|
||||
|
||||
Reference in New Issue
Block a user