feat: complete Epic 1 production foundation

This commit is contained in:
2026-08-25 01:24:11 +03:00
parent 767428436d
commit 182bde8ac0
298 changed files with 35719 additions and 5299 deletions
@@ -1,12 +1,16 @@
use std::collections::BTreeMap;
use std::time::Instant;
use crank_community_mcp::manifest::{analyze_published_tool_catalog, tool_definitions};
use crank_community_mcp::manifest::{
analyze_published_tool_catalog, catalog_tool_definitions, tool_definitions,
};
use crank_core::{
ExecutionConfig, HttpMethod, Operation, OperationId, OperationSecurityLevel, OperationStatus,
Protocol, RestTarget, Target, ToolDescription, WorkspaceId,
Protocol, RestTarget, Target, ToolAccessMode, ToolDescription, ToolSelectionPolicy,
WorkspaceId,
};
use crank_mapping::MappingSet;
use crank_registry::{PublishedAgentTool, RegistryOperation};
use crank_registry::{PublishedAgentCatalog, PublishedAgentTool, RegistryOperation};
use crank_schema::{Schema, SchemaKind};
use serde_json::json;
use time::{OffsetDateTime, format_description::well_known::Rfc3339};
@@ -71,6 +75,57 @@ fn catalog_budget_uses_the_same_definitions_as_tools_list() {
assert!(!analysis.budget.exceeds_recommended_budget);
}
#[test]
fn agent_catalog_discovery_profile_handles_200_agents_2000_operations_under_budget() {
const AGENT_COUNT: usize = 200;
const TOOLS_PER_AGENT: usize = 10;
const P95_BUDGET_MS: u128 = 150;
let mut durations = Vec::with_capacity(AGENT_COUNT);
let mut total_definitions = 0usize;
let started = Instant::now();
for agent_index in 0..AGENT_COUNT {
let tools = (0..TOOLS_PER_AGENT)
.map(|tool_index| {
let mut tool = published_tool();
tool.agent_id = format!("agent_{agent_index:03}").into();
tool.agent_slug = format!("agent-{agent_index:03}");
tool.operation.id =
OperationId::new(format!("op_{agent_index:03}_{tool_index:03}"));
tool.tool_name = format!("tool_{agent_index:03}_{tool_index:03}");
tool.tool_title = format!("Tool {agent_index:03}-{tool_index:03}");
tool
})
.collect::<Vec<_>>();
let catalog = PublishedAgentCatalog {
agent_version: 1,
catalog_revision: format!("agent-{agent_index:03}-revision-1"),
tool_selection_policy: ToolSelectionPolicy {
mode: ToolAccessMode::Direct,
..Default::default()
},
tools,
};
let catalog_started = Instant::now();
let definitions = catalog_tool_definitions(&catalog);
durations.push(catalog_started.elapsed());
total_definitions += definitions.len();
}
durations.sort_unstable();
let p95 = durations[((durations.len() * 95).div_ceil(100)).saturating_sub(1)];
assert_eq!(total_definitions, AGENT_COUNT * TOOLS_PER_AGENT);
assert!(
p95.as_millis() <= P95_BUDGET_MS,
"agent catalog discovery p95={}ms total={}ms",
p95.as_millis(),
started.elapsed().as_millis()
);
}
fn published_tool() -> PublishedAgentTool {
PublishedAgentTool {
workspace_id: WorkspaceId::new("ws_01"),