Skip to main content

theway_core/
lib.rs

1//! Runtime engine used by `theway-daemon`.
2//!
3//! This crate owns the agent loop, harness, typed sessions, compaction, lifecycle
4//! hooks, the execution seam, and multiagent orchestration. Concrete tools,
5//! persistence backends, and protocol servers live outside core and are composed
6//! by the daemon.
7
8//! Self-alias so ported modules keep their `use theway_core::...` import paths unchanged.
9extern crate self as theway_core;
10
11pub mod agent;
12pub mod executor;
13pub mod observability;
14pub mod types;
15
16// Public surface — mirrors `packages/agent/src/index.ts`.
17pub use agent::context_cache::{
18    CONTEXT_CHUNK_SIZE, ContextCacheTracker, PrefixHitEstimate, PrefixHitResult,
19    canonical_context_bytes,
20};
21pub use agent::model_request::{NormalizedGenerationOptions, NormalizedModelRequestDraft};
22pub use agent::{
23    Agent, AgentOptions, AgentRunError, LOOP_EVENT_BROADCAST_CAPACITY, LoopListener,
24    LoopSyncCallback,
25};
26pub use observability::{
27    ErrorCategory, NoopRuntimeObserver, ObservationContent, ObservationContext, OperationDetail,
28    OperationFinished, OperationId, OperationKind, OperationOutcome, OperationScope,
29    OperationStarted, RuntimeMeasurements, RuntimeObservation, RuntimeObserver,
30    noop_runtime_observer,
31};
32pub use types::{
33    AfterToolCallContext, AfterToolCallHook, AfterToolCallResult, AgentContext, AgentLoopConfig,
34    AgentLoopTurnUpdate, AgentMessage, AgentState, AgentTool, AgentToolCall, AgentToolError,
35    AgentToolResult, AgentToolUpdate, BeforeToolCallContext, BeforeToolCallHook,
36    BeforeToolCallResult, ControlPlanePromptDecision, ControlPlanePromptRequest, ConvertToLlm,
37    CustomMessage, GetApiKey, LoopEvent, MessageQueueProvider, OnControlPlanePromptHook,
38    PermissionClassification, PrepareNextTurnContext, PrepareNextTurnHook, QueueMode,
39    ShouldStopAfterTurnContext, ShouldStopHook, StreamFn, ThinkingLevel, ToolExecutionMode,
40    TransformContext, TransformMessage, TransformModelRequest, default_convert_to_llm,
41};
42
43#[cfg(feature = "harness")]
44pub mod multiagent;
45
46#[cfg(feature = "harness")]
47pub use agent::assembly::{
48    AgentHarness, AgentHarnessOptions, DEFAULT_TURN_CONTINUATION_CAP, OnTurnEndContext,
49    OnTurnEndHook, ReloadSkillsError, ReloadSkillsFn, SESSION_EVENT_BROADCAST_CAPACITY,
50    SessionEvent, SessionListener, TurnEndAction, TurnEndDecision,
51};
52#[cfg(feature = "harness")]
53pub use agent::compaction::{
54    branch_summarization::{BranchSummaryResult, summarize_branch},
55    compaction::{
56        CompactionPreparation, CompactionResult, CompactionSettings, ContextUsageEstimate,
57        CutPointResult, DEFAULT_COMPACTION_SETTINGS, GenerateSummaryOutput, GenerateSummaryRequest,
58        SUMMARIZATION_SYSTEM_PROMPT, SummarizeError, calculate_context_tokens, compact,
59        estimate_context_tokens, estimate_tokens, find_cut_point, find_turn_start_index,
60        generate_summary, get_last_assistant_usage, prepare_compaction, serialize_conversation,
61        should_compact,
62    },
63};
64#[cfg(feature = "harness")]
65pub use agent::cost::{
66    CostSnapshot, CostTracker, full_breakdown as cost_full_breakdown,
67    one_line_summary as cost_one_line_summary,
68};
69#[cfg(feature = "harness")]
70pub use agent::messages;
71#[cfg(feature = "harness")]
72pub use agent::permission::{PermissionCategory, PermissionDecision, PermissionPolicy};
73#[cfg(feature = "harness")]
74pub use agent::runtime_extensions::{
75    ExtensionModelContextItem, ExtensionModelContextProjection,
76    ExtensionModelContextProjectionError, NoopRuntimeExtensionPort, NoopSessionExtensionStatePort,
77    PersistentSessionExtensionStatePort, RuntimeCompactionExtensionPort, RuntimeExtensionContext,
78    RuntimeExtensionDomain, RuntimeExtensionInvocation, RuntimeExtensionPort,
79    RuntimeExtensionResult, RuntimeExtensionScopeAllocator, RuntimeExtensionScopeKind,
80    RuntimeMessageExtensionPort, RuntimeRequestExtensionPort, RuntimeRunExtensionPort,
81    RuntimeSessionExtensionPort, RuntimeToolExtensionPort, ScopeAllocationError,
82    SessionExtensionStateError, SessionExtensionStatePort, ValidatedGateResult,
83    ValidatedObserveResult, ValidatedRegisterResult, ValidatedRuntimeExtensionResult,
84    ValidatedTransformResult,
85};
86#[cfg(feature = "harness")]
87pub use agent::session::{
88    memory_repo::MemorySessionRepo,
89    memory_storage::MemorySessionStorage,
90    persistent_storage::{PersistentSessionStorage, decode_session_entry, encode_session_entry},
91    repo_utils::{
92        ForkOptions, ForkPosition, create_session_id, create_timestamp, get_entries_to_fork,
93        to_session,
94    },
95    session::{
96        BranchSummaryInput, COMPACT_CONTEXT_CUSTOM_TYPE, CompactContext, JsonlSessionMetadata,
97        SESSION_GRAPH_STATE_CUSTOM_TYPE, Session, SessionContext, SessionContextModel,
98        SessionGraphState, SessionImportOrigin, SessionMetadata, SessionStorage, SessionTreeEntry,
99        SubagentJobSnapshot, build_session_context, latest_session_graph_state,
100    },
101};
102#[cfg(feature = "harness")]
103pub use agent::skills::{
104    LoadSkillsOutput, format_skill_invocation, load_skills, load_sourced_skills,
105};
106#[cfg(feature = "harness")]
107pub use agent::system_prompt::format_skills_for_system_prompt;
108#[cfg(feature = "harness")]
109pub use agent::types::{
110    ExecOptions, ExecOutput, ExecResult, ExecutionEnv, ExecutionError, ExecutionErrorCode,
111    FileError, FileErrorCode, FileInfo, FileKind, FsResult, PromptTemplate, SessionError,
112    SessionErrorCode, Skill, SkillDiagnostic, SkillDiagnosticCode, SkillFrontmatter, SkillSource,
113};