From 36fb7988cbdb37b26cde898b564f9ce1d65ee3cb Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Sat, 27 Dec 2025 22:58:43 -0300 Subject: [PATCH] refactor: Move AutoTask system from basic/keywords to auto_task module - Move app_generator, intent_classifier, intent_compiler, autotask_api, designer_ai, ask_later, auto_task, safety_layer to src/auto_task/ - Create auto_task/mod.rs with exports and route configuration - Update imports in moved files - Update main.rs to use auto_task::configure_autotask_routes - Keep table_definition in keywords (shared utility) --- .../APP_GENERATOR_PROMPT.md | 0 .../keywords => auto_task}/app_generator.rs | 0 .../keywords => auto_task}/ask_later.rs | 0 .../keywords => auto_task}/auto_task.rs | 2 +- .../keywords => auto_task}/autotask_api.rs | 10 +-- .../keywords => auto_task}/designer_ai.rs | 0 .../intent_classifier.rs | 4 +- .../keywords => auto_task}/intent_compiler.rs | 0 src/auto_task/mod.rs | 77 +++++++++++++++++++ .../keywords => auto_task}/safety_layer.rs | 0 src/basic/keywords/mod.rs | 75 ------------------ src/lib.rs | 1 + src/main.rs | 2 +- 13 files changed, 87 insertions(+), 84 deletions(-) rename src/{basic/keywords => auto_task}/APP_GENERATOR_PROMPT.md (100%) rename src/{basic/keywords => auto_task}/app_generator.rs (100%) rename src/{basic/keywords => auto_task}/ask_later.rs (100%) rename src/{basic/keywords => auto_task}/auto_task.rs (99%) rename src/{basic/keywords => auto_task}/autotask_api.rs (99%) rename src/{basic/keywords => auto_task}/designer_ai.rs (100%) rename src/{basic/keywords => auto_task}/intent_classifier.rs (99%) rename src/{basic/keywords => auto_task}/intent_compiler.rs (100%) create mode 100644 src/auto_task/mod.rs rename src/{basic/keywords => auto_task}/safety_layer.rs (100%) diff --git a/src/basic/keywords/APP_GENERATOR_PROMPT.md b/src/auto_task/APP_GENERATOR_PROMPT.md similarity index 100% rename from src/basic/keywords/APP_GENERATOR_PROMPT.md rename to src/auto_task/APP_GENERATOR_PROMPT.md diff --git a/src/basic/keywords/app_generator.rs b/src/auto_task/app_generator.rs similarity index 100% rename from src/basic/keywords/app_generator.rs rename to src/auto_task/app_generator.rs diff --git a/src/basic/keywords/ask_later.rs b/src/auto_task/ask_later.rs similarity index 100% rename from src/basic/keywords/ask_later.rs rename to src/auto_task/ask_later.rs diff --git a/src/basic/keywords/auto_task.rs b/src/auto_task/auto_task.rs similarity index 99% rename from src/basic/keywords/auto_task.rs rename to src/auto_task/auto_task.rs index 90a0edd2d..e80198e21 100644 --- a/src/basic/keywords/auto_task.rs +++ b/src/auto_task/auto_task.rs @@ -447,4 +447,4 @@ impl Default for TaskSchedule { } } -use crate::basic::keywords::safety_layer::SimulationResult; +use crate::auto_task::safety_layer::SimulationResult; diff --git a/src/basic/keywords/autotask_api.rs b/src/auto_task/autotask_api.rs similarity index 99% rename from src/basic/keywords/autotask_api.rs rename to src/auto_task/autotask_api.rs index 5c6773d9b..d42021402 100644 --- a/src/basic/keywords/autotask_api.rs +++ b/src/auto_task/autotask_api.rs @@ -1,9 +1,9 @@ -use crate::basic::keywords::auto_task::{ +use crate::auto_task::auto_task::{ AutoTask, AutoTaskStatus, ExecutionMode, PendingApproval, PendingDecision, TaskPriority, }; -use crate::basic::keywords::intent_classifier::IntentClassifier; -use crate::basic::keywords::intent_compiler::IntentCompiler; -use crate::basic::keywords::safety_layer::{SafetyLayer, SimulationResult}; +use crate::auto_task::intent_classifier::IntentClassifier; +use crate::auto_task::intent_compiler::IntentCompiler; +use crate::auto_task::safety_layer::{SafetyLayer, SimulationResult}; use crate::shared::state::AppState; use axum::{ extract::{Path, Query, State}, @@ -1340,7 +1340,7 @@ fn create_auto_task_from_plan( pending_decisions: Vec::new(), pending_approvals: Vec::new(), risk_summary: None, - resource_usage: crate::basic::keywords::auto_task::ResourceUsage::default(), + resource_usage: crate::auto_task::auto_task::ResourceUsage::default(), error: None, rollback_state: None, session_id: session.id.to_string(), diff --git a/src/basic/keywords/designer_ai.rs b/src/auto_task/designer_ai.rs similarity index 100% rename from src/basic/keywords/designer_ai.rs rename to src/auto_task/designer_ai.rs diff --git a/src/basic/keywords/intent_classifier.rs b/src/auto_task/intent_classifier.rs similarity index 99% rename from src/basic/keywords/intent_classifier.rs rename to src/auto_task/intent_classifier.rs index e8d6304dc..e31aed792 100644 --- a/src/basic/keywords/intent_classifier.rs +++ b/src/auto_task/intent_classifier.rs @@ -12,8 +12,8 @@ //! - GOAL: "increase sales 20%" → Autonomous LLM loop with metrics //! - TOOL: "when I say X, do Y" → Voice/chat command -use crate::basic::keywords::app_generator::AppGenerator; -use crate::basic::keywords::intent_compiler::IntentCompiler; +use crate::auto_task::app_generator::AppGenerator; +use crate::auto_task::intent_compiler::IntentCompiler; use crate::shared::models::UserSession; use crate::shared::state::AppState; use chrono::{DateTime, Utc}; diff --git a/src/basic/keywords/intent_compiler.rs b/src/auto_task/intent_compiler.rs similarity index 100% rename from src/basic/keywords/intent_compiler.rs rename to src/auto_task/intent_compiler.rs diff --git a/src/auto_task/mod.rs b/src/auto_task/mod.rs new file mode 100644 index 000000000..af298687a --- /dev/null +++ b/src/auto_task/mod.rs @@ -0,0 +1,77 @@ +pub mod app_generator; +pub mod ask_later; +pub mod auto_task; +pub mod autotask_api; +pub mod designer_ai; +pub mod intent_classifier; +pub mod intent_compiler; +pub mod safety_layer; + +pub use app_generator::{ + AppGenerator, AppStructure, GeneratedApp, GeneratedPage, GeneratedScript, PageType, ScriptType, + SyncResult, +}; +pub use ask_later::{ask_later_keyword, PendingInfoItem}; +pub use auto_task::{AutoTask, AutoTaskStatus, ExecutionMode, TaskPriority}; +pub use autotask_api::{ + apply_recommendation_handler, cancel_task_handler, classify_intent_handler, + compile_intent_handler, create_and_execute_handler, execute_plan_handler, execute_task_handler, + get_approvals_handler, get_decisions_handler, get_pending_items_handler, get_stats_handler, + get_task_logs_handler, list_tasks_handler, pause_task_handler, resume_task_handler, + simulate_plan_handler, simulate_task_handler, submit_approval_handler, submit_decision_handler, + submit_pending_item_handler, +}; +pub use designer_ai::DesignerAI; +pub use intent_classifier::{ClassifiedIntent, IntentClassifier, IntentType}; +pub use intent_compiler::{CompiledIntent, IntentCompiler}; +pub use safety_layer::{AuditEntry, ConstraintCheckResult, SafetyLayer, SimulationResult}; + +pub fn configure_autotask_routes() -> axum::Router> { + use axum::routing::{get, post}; + + axum::Router::new() + .route("/api/autotask/create", post(create_and_execute_handler)) + .route("/api/autotask/classify", post(classify_intent_handler)) + .route("/api/autotask/compile", post(compile_intent_handler)) + .route("/api/autotask/execute", post(execute_plan_handler)) + .route( + "/api/autotask/simulate/:plan_id", + post(simulate_plan_handler), + ) + .route("/api/autotask/list", get(list_tasks_handler)) + .route("/api/autotask/stats", get(get_stats_handler)) + .route("/api/autotask/:task_id/pause", post(pause_task_handler)) + .route("/api/autotask/:task_id/resume", post(resume_task_handler)) + .route("/api/autotask/:task_id/cancel", post(cancel_task_handler)) + .route( + "/api/autotask/:task_id/simulate", + post(simulate_task_handler), + ) + .route( + "/api/autotask/:task_id/decisions", + get(get_decisions_handler), + ) + .route( + "/api/autotask/:task_id/decide", + post(submit_decision_handler), + ) + .route( + "/api/autotask/:task_id/approvals", + get(get_approvals_handler), + ) + .route( + "/api/autotask/:task_id/approve", + post(submit_approval_handler), + ) + .route("/api/autotask/:task_id/execute", post(execute_task_handler)) + .route("/api/autotask/:task_id/logs", get(get_task_logs_handler)) + .route( + "/api/autotask/recommendations/:rec_id/apply", + post(apply_recommendation_handler), + ) + .route("/api/autotask/pending", get(get_pending_items_handler)) + .route( + "/api/autotask/pending/:item_id", + post(submit_pending_item_handler), + ) +} diff --git a/src/basic/keywords/safety_layer.rs b/src/auto_task/safety_layer.rs similarity index 100% rename from src/basic/keywords/safety_layer.rs rename to src/auto_task/safety_layer.rs diff --git a/src/basic/keywords/mod.rs b/src/basic/keywords/mod.rs index 4a7b17cd7..872680954 100644 --- a/src/basic/keywords/mod.rs +++ b/src/basic/keywords/mod.rs @@ -5,12 +5,8 @@ pub mod add_suggestion; pub mod agent_reflection; pub mod ai_tools; pub mod api_tool_generator; -pub mod app_generator; pub mod app_server; pub mod arrays; -pub mod ask_later; -pub mod auto_task; -pub mod autotask_api; pub mod book; pub mod bot_memory; pub mod clear_kb; @@ -24,7 +20,6 @@ pub mod crm; pub mod data_operations; pub mod datetime; pub mod db_api; -pub mod designer_ai; pub mod episodic_memory; pub mod errors; pub mod file_operations; @@ -37,8 +32,6 @@ pub mod hear_talk; pub mod http_operations; pub mod human_approval; pub mod import_export; -pub mod intent_classifier; -pub mod intent_compiler; pub mod kb_statistics; pub mod knowledge_graph; pub mod last; @@ -60,7 +53,6 @@ pub mod print; pub mod procedures; pub mod qrcode; pub mod remember; -pub mod safety_layer; pub mod save_from_unstructured; pub mod send_mail; pub mod send_template; @@ -87,77 +79,10 @@ pub mod weather; pub mod web_data; pub mod webhook; -pub use app_generator::{ - AppGenerator, GeneratedApp, GeneratedPage, GeneratedScript, PageType, SyncResult, -}; pub use app_server::configure_app_server_routes; -pub use auto_task::{AutoTask, AutoTaskStatus, ExecutionMode, TaskPriority}; pub use db_api::configure_db_routes; -pub use designer_ai::{DesignerAI, DesignerContext, ModificationResult, ModificationType}; -pub use intent_classifier::{ClassifiedIntent, IntentClassifier, IntentResult, IntentType}; -pub use intent_compiler::{CompiledIntent, ExecutionPlan, IntentCompiler, PlanStep}; pub use mcp_client::{McpClient, McpRequest, McpResponse, McpServer, McpTool}; pub use mcp_directory::{McpDirectoryScanResult, McpDirectoryScanner, McpServerConfig}; -pub use safety_layer::{AuditEntry, ConstraintCheckResult, SafetyLayer, SimulationResult}; - -pub use autotask_api::{ - apply_recommendation_handler, cancel_task_handler, classify_intent_handler, - compile_intent_handler, create_and_execute_handler, execute_plan_handler, execute_task_handler, - get_approvals_handler, get_decisions_handler, get_pending_items_handler, get_stats_handler, - get_task_logs_handler, list_tasks_handler, pause_task_handler, resume_task_handler, - simulate_plan_handler, simulate_task_handler, submit_approval_handler, submit_decision_handler, - submit_pending_item_handler, -}; - -pub fn configure_autotask_routes() -> axum::Router> { - use axum::routing::{get, post}; - - axum::Router::new() - .route("/api/autotask/create", post(create_and_execute_handler)) - .route("/api/autotask/classify", post(classify_intent_handler)) - .route("/api/autotask/compile", post(compile_intent_handler)) - .route("/api/autotask/execute", post(execute_plan_handler)) - .route( - "/api/autotask/simulate/:plan_id", - post(simulate_plan_handler), - ) - .route("/api/autotask/list", get(list_tasks_handler)) - .route("/api/autotask/stats", get(get_stats_handler)) - .route("/api/autotask/:task_id/pause", post(pause_task_handler)) - .route("/api/autotask/:task_id/resume", post(resume_task_handler)) - .route("/api/autotask/:task_id/cancel", post(cancel_task_handler)) - .route( - "/api/autotask/:task_id/simulate", - post(simulate_task_handler), - ) - .route( - "/api/autotask/:task_id/decisions", - get(get_decisions_handler), - ) - .route( - "/api/autotask/:task_id/decide", - post(submit_decision_handler), - ) - .route( - "/api/autotask/:task_id/approvals", - get(get_approvals_handler), - ) - .route( - "/api/autotask/:task_id/approve", - post(submit_approval_handler), - ) - .route("/api/autotask/:task_id/execute", post(execute_task_handler)) - .route("/api/autotask/:task_id/logs", get(get_task_logs_handler)) - .route( - "/api/autotask/recommendations/:rec_id/apply", - post(apply_recommendation_handler), - ) - .route("/api/autotask/pending", get(get_pending_items_handler)) - .route( - "/api/autotask/pending/:item_id", - post(submit_pending_item_handler), - ) -} pub fn get_all_keywords() -> Vec { vec![ diff --git a/src/lib.rs b/src/lib.rs index aee735ee3..f828cd093 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +pub mod auto_task; pub mod basic; pub mod core; pub mod multimodal; diff --git a/src/main.rs b/src/main.rs index 23722bac7..4181275ea 100644 --- a/src/main.rs +++ b/src/main.rs @@ -212,7 +212,7 @@ async fn run_axum_server( api_router = api_router.merge(botserver::designer::configure_designer_routes()); api_router = api_router.merge(botserver::basic::keywords::configure_db_routes()); api_router = api_router.merge(botserver::basic::keywords::configure_app_server_routes()); - api_router = api_router.merge(botserver::basic::keywords::configure_autotask_routes()); + api_router = api_router.merge(botserver::auto_task::configure_autotask_routes()); #[cfg(feature = "whatsapp")] {