swarm-engine-core 0.1.6

Core types and orchestration for SwarmEngine
Documentation
//! Exploration System - 探索アルゴリズム (V2)
//!
//! # 設計方針: Tree 探索モデル
//!
//! ExplorationSpace は **Tree 探索モデル** を採用している。
//!
//! ## Agent タスクの特性
//!
//! Agent のタスクは以下の2種類に大別される:
//!
//! - **Look 系**: 情報取得(WebSearch, Grep, ReadFile, Fetch...)
//! - **Check 系**: 成功/失敗判定(Affection & Check)
//!
//! ```text
//! Look(A) → Expand → Check(A', B'...)
//!                   ├─ Success → Done
//!                   └─ Fail → Look(C) → Expand → Check(C'...)
//! ```
//!
//! ## なぜ Tree で十分か
//!
//! - Agent の Tool 呼び出しは **同じ (Action, Target, Args) を繰り返しても結果は変わらない**
//! - Network/Flaky は Tool 内部でリトライ処理
//! - だから **dedup_key による重複排除** が正しく機能する
//! - **状態 = (Action, Target, Args)** で十分(Position 不要)
//!
//! ## 迷路問題との違い
//!
//! 迷路のような問題は Tree モデルには向かない:
//!
//! - 迷路: 同じ位置に「戻る」ことに意味がある(バックトラック)
//! - Agent: 同じ状態に「戻る」ことに意味がない
//!
//! 迷路を解くには Position を状態に含める必要があるが、
//! 実際の Agent タスク(DeepSearch, Coding, Security Audit 等)では不要。
//!
//! # モジュール構成
//!
//! - `space`: 探索空間 V2(統合レイヤー)
//! - `map`: 探索マップの抽象層(`ExplorationMap` trait)
//! - `mutation`: MutationInput/MapUpdate(入力→Map操作変換)
//! - `node_rules`: 純粋な遷移制約(ドメイン非依存)
//! - `types`: 共通型定義(ExplorationTarget, NodeId 等)
//! - `dependency_planner`: アクション依存グラフの計画

pub mod dependency_planner;
pub mod llm_provider;
pub mod map;
pub mod mutation;
pub mod node_rules;
pub mod operator;
pub mod provider;
pub mod selection;
pub mod space;
pub mod types;

pub use dependency_planner::{
    build_graph_from_action_order, DependencyEdge, DependencyGraph, DependencyGraphBuilder,
    DependencyGraphError, DependencyGraphProvider, DependencyPlanner, DependencyPromptGenerator,
    GraphNavigator, LearnedDependencyProvider, LlmDependencyResponse, LlmEdge, SelectResult,
    StaticDependencyPlanner, VotingStrategy,
};
// V2 で必要な共通型のみ re-export
pub use llm_provider::{
    AdaptiveLlmOperatorProvider, ReviewPolicy, StrategyAdvice, StrategyAdviceError,
    StrategyAdvisor, StrategyContext,
};
pub use map::{
    AddResult, ExplorationMap, GraphExplorationMap, GraphMap, GraphMapUpdate, HierarchicalMap,
    MapApplyResult, MapEdge, MapEdgeId, MapError, MapNode, MapNodeId, MapNodeState, MapResult,
};
pub use mutation::{
    ActionExtractor, ActionNodeData, ExplorationResult, MapUpdate, MapUpdateResult, MutationInput,
};
pub use node_rules::{NodeRules, Rules};
pub use operator::{
    // Operator core
    ConfigurableOperator,
    FifoOperator,
    MutationLogic,
    Operator,
    RulesBasedMutation,
    Ucb1Operator,
};
pub use provider::{
    // Provider
    AdaptiveOperatorProvider,
    ConfigBasedOperatorProvider,
    OperatorConfig,
    OperatorProvider,
    ProviderContext,
};
pub use selection::{
    // Dynamic wrapper
    AnySelection,
    // Selection implementations
    Fifo,
    FifoSelection,
    Greedy,
    GreedySelection,
    // SelectionKind enum
    SelectionKind,
    // SelectionLogic trait
    SelectionLogic,
    Thompson,
    ThompsonSelection,
    Ucb1,
    Ucb1Selection,
};
pub use space::{ConfigurableSpace, ExplorationSpaceV2};
pub use types::{EdgeId, ExplorationTarget, NodeId, TrialPolicy};

// ============================================================================
// ID Conversions (V1 ↔ V2)
// ============================================================================

impl From<MapNodeId> for NodeId {
    fn from(id: MapNodeId) -> Self {
        NodeId(id.0)
    }
}

impl From<NodeId> for MapNodeId {
    fn from(id: NodeId) -> Self {
        MapNodeId(id.0)
    }
}