1#![allow(clippy::result_large_err, clippy::cloned_ref_to_slice_refs)]
2
3pub mod a2a;
4pub mod agent_events;
5pub mod agent_sessions;
6pub mod bridge;
7pub mod checkpoint;
8mod chunk;
9mod compiler;
10pub mod connectors;
11pub mod event_log;
12pub mod events;
13mod http;
14pub mod jsonrpc;
15pub mod llm;
16pub mod llm_config;
17pub mod mcp;
18pub mod mcp_card;
19pub mod mcp_registry;
20pub mod mcp_server;
21pub mod metadata;
22pub mod observability;
23pub mod orchestration;
24pub mod record_filter;
25pub mod runtime_paths;
26pub mod schema;
27pub mod secrets;
28pub mod skills;
29pub mod stdlib;
30pub mod stdlib_modules;
31pub mod store;
32pub mod tool_annotations;
33pub mod tracing;
34pub mod triggers;
35pub mod trust_graph;
36pub mod value;
37pub mod visible_text;
38mod vm;
39pub mod workspace_path;
40
41pub use checkpoint::register_checkpoint_builtins;
42pub use chunk::*;
43pub use compiler::*;
44pub use connectors::{
45 active_connector_client, clear_active_connector_clients,
46 cron::{CatchupMode, CronConnector},
47 hmac::verify_hmac_signed,
48 install_active_connector_clients, postprocess_normalized_event, ActivationHandle, ClientError,
49 Connector, ConnectorClient, ConnectorCtx, ConnectorError, ConnectorMetricsSnapshot,
50 ConnectorRegistry, GenericWebhookConnector, GitHubConnector, MetricsRegistry,
51 PostNormalizeOutcome, ProviderPayloadSchema, RateLimitConfig, RateLimiterFactory, RawInbound,
52 SlackConnector, TriggerBinding, TriggerKind, TriggerRegistry, WebhookSignatureVariant,
53};
54pub use http::{register_http_builtins, reset_http_state};
55pub use llm::register_llm_builtins;
56pub use llm::trigger_predicate::TriggerPredicateBudget;
57pub use mcp::{
58 connect_mcp_server, connect_mcp_server_from_json, connect_mcp_server_from_spec,
59 register_mcp_builtins,
60};
61pub use mcp_card::{fetch_server_card, load_server_card_from_path, CardError};
62pub use mcp_registry::{
63 active_handle as mcp_active_handle, ensure_active as mcp_ensure_active,
64 get_registration as mcp_get_registration, install_active as mcp_install_active,
65 is_registered as mcp_is_registered, register_servers as mcp_register_servers,
66 release as mcp_release, reset as mcp_reset_registry, snapshot_status as mcp_snapshot_status,
67 sweep_expired as mcp_sweep_expired, RegisteredMcpServer, RegistryStatus,
68};
69pub use mcp_server::{
70 take_mcp_serve_prompts, take_mcp_serve_registry, take_mcp_serve_resource_templates,
71 take_mcp_serve_resources, tool_registry_to_mcp_tools, McpServer,
72};
73pub use metadata::{register_metadata_builtins, register_scan_builtins};
74pub use record_filter::{normalize_record_filter_expression, CompiledRecordFilter};
75pub use stdlib::hitl::{
76 append_hitl_response, HitlHostResponse, HITL_APPROVALS_TOPIC, HITL_DUAL_CONTROL_TOPIC,
77 HITL_ESCALATIONS_TOPIC, HITL_QUESTIONS_TOPIC,
78};
79pub use stdlib::host::{clear_host_call_bridge, set_host_call_bridge, HostCallBridge};
80pub use stdlib::secret_scan::{
81 append_secret_scan_audit, audit_secret_scan_active, scan_content as secret_scan_content,
82 SecretFinding, SECRET_SCAN_AUDIT_TOPIC,
83};
84pub use stdlib::template::{
85 lookup_prompt_consumers, lookup_prompt_span, prompt_render_indices, record_prompt_render_index,
86 PromptSourceSpan, PromptSpanKind,
87};
88pub use stdlib::{
89 register_agent_stdlib, register_core_stdlib, register_io_stdlib, register_vm_stdlib,
90};
91pub use store::register_store_builtins;
92pub use triggers::{
93 append_dispatch_cancel_request, begin_in_flight, binding_version_as_of, clear_dispatcher_state,
94 clear_trigger_registry, drain, dynamic_deregister, dynamic_register, finish_in_flight,
95 install_manifest_triggers, parse_flow_control_duration, pin_trigger_binding, provider_metadata,
96 redact_headers, register_provider_schema, registered_provider_metadata,
97 registered_provider_schema_names, reset_provider_catalog, resolve_live_or_as_of,
98 resolve_live_trigger_binding, resolve_trigger_binding_as_of, run_trigger_harness_fixture,
99 snapshot_dispatcher_stats, snapshot_trigger_bindings, unpin_trigger_binding,
100 DispatchCancelRequest, DispatchError, DispatchOutcome, DispatchStatus, Dispatcher,
101 DispatcherDrainReport, DispatcherStatsSnapshot, HeaderRedactionPolicy, InboxIndex,
102 ProviderCatalog, ProviderCatalogError, ProviderId, ProviderMetadata, ProviderOutboundMethod,
103 ProviderPayload, ProviderRuntimeMetadata, ProviderSchema, ProviderSecretRequirement,
104 RecordedTriggerBinding, RetryPolicy, SignatureStatus, SignatureVerificationMetadata, TenantId,
105 TraceId, TriggerBatchConfig, TriggerBindingSnapshot, TriggerBindingSource, TriggerBindingSpec,
106 TriggerConcurrencyConfig, TriggerDebounceConfig, TriggerDispatchOutcome, TriggerEvent,
107 TriggerEventId, TriggerExpressionSpec, TriggerFlowControlConfig, TriggerHandlerSpec,
108 TriggerHarnessResult, TriggerId, TriggerMetricsSnapshot, TriggerPredicateSpec,
109 TriggerPriorityOrderConfig, TriggerRateLimitConfig, TriggerRegistryError, TriggerRetryConfig,
110 TriggerSingletonConfig, TriggerState, TriggerThrottleConfig, DEFAULT_INBOX_RETENTION_DAYS,
111 TRIGGERS_LIFECYCLE_TOPIC, TRIGGER_ATTEMPTS_TOPIC, TRIGGER_CANCEL_REQUESTS_TOPIC,
112 TRIGGER_DLQ_TOPIC, TRIGGER_INBOX_CLAIMS_TOPIC, TRIGGER_INBOX_ENVELOPES_TOPIC,
113 TRIGGER_INBOX_LEGACY_TOPIC, TRIGGER_OPERATION_AUDIT_TOPIC, TRIGGER_OUTBOX_TOPIC,
114 TRIGGER_TEST_FIXTURES,
115};
116pub use trust_graph::{
117 append_active_trust_record, append_trust_record, query_trust_records,
118 resolve_agent_autonomy_tier, summarize_trust_records, topic_for_agent, AutonomyTier,
119 TrustAgentSummary, TrustOutcome, TrustQueryFilters, TrustRecord, OPENTRUSTGRAPH_SCHEMA_V0,
120 TRUST_GRAPH_GLOBAL_TOPIC, TRUST_GRAPH_TOPIC_PREFIX,
121};
122pub use value::*;
123pub use vm::*;
124
125pub fn compile_source(source: &str) -> Result<Chunk, String> {
130 let program = harn_parser::check_source_strict(source).map_err(|e| e.to_string())?;
131 Compiler::new().compile(&program).map_err(|e| e.to_string())
132}
133
134pub fn json_schema_for_type_expr(type_expr: &harn_parser::TypeExpr) -> Option<serde_json::Value> {
135 let schema = compiler::Compiler::type_expr_to_schema_value(type_expr)?;
136 let json_schema = schema::schema_to_json_schema_value(&schema).ok()?;
137 Some(llm::vm_value_to_json(&json_schema))
138}
139
140pub fn json_schema_for_typed_params(params: &[harn_parser::TypedParam]) -> serde_json::Value {
141 let mut properties = serde_json::Map::new();
142 let mut required = Vec::new();
143
144 for param in params {
145 let param_schema = param
146 .type_expr
147 .as_ref()
148 .and_then(json_schema_for_type_expr)
149 .unwrap_or_else(|| serde_json::json!({}));
150 if param.default_value.is_none() {
151 required.push(serde_json::Value::String(param.name.clone()));
152 }
153 properties.insert(param.name.clone(), param_schema);
154 }
155
156 let mut schema = serde_json::Map::new();
157 schema.insert(
158 "type".to_string(),
159 serde_json::Value::String("object".to_string()),
160 );
161 schema.insert(
162 "properties".to_string(),
163 serde_json::Value::Object(properties),
164 );
165 if !required.is_empty() {
166 schema.insert("required".to_string(), serde_json::Value::Array(required));
167 }
168 serde_json::Value::Object(schema)
169}
170
171pub fn reset_thread_local_state() {
173 llm::reset_llm_state();
174 llm_config::clear_user_overrides();
175 http::reset_http_state();
176 event_log::reset_active_event_log();
177 stdlib::reset_stdlib_state();
178 connectors::clear_active_connector_clients();
179 orchestration::clear_runtime_hooks();
180 triggers::clear_dispatcher_state();
181 triggers::clear_trigger_registry();
182 events::reset_event_sinks();
183 agent_events::reset_all_sinks();
184 agent_sessions::reset_session_store();
185 mcp_registry::reset();
186}