diff --git a/Cargo.lock b/Cargo.lock index ed52384..ef50325 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,59 +3,59 @@ version = 4 [[package]] -name = "agentic-core" +name = "agentic-praxis" version = "0.1.0" dependencies = [ - "async-stream", + "agentic-server-core", +] + +[[package]] +name = "agentic-server" +version = "0.1.0" +dependencies = [ + "agentic-server-core", "axum", "bytes", - "chrono", + "clap", "criterion", "either", "futures", "http", - "indexmap", "reqwest", "serde", "serde_json", - "serde_yaml", - "serde_yml", - "sqlx", "thiserror", "tokio", + "tokio-tungstenite", + "tokio-util", + "tower-http", "tracing", + "tracing-subscriber", "uuid", ] [[package]] -name = "agentic-praxis" +name = "agentic-server-core" version = "0.1.0" dependencies = [ - "agentic-core", -] - -[[package]] -name = "agentic-server" -version = "0.1.0" -dependencies = [ - "agentic-core", + "async-stream", "axum", "bytes", - "clap", + "chrono", "criterion", "either", "futures", "http", + "indexmap", "reqwest", "serde", "serde_json", + "serde_yaml", + "serde_yml", + "sqlx", "thiserror", "tokio", - "tokio-tungstenite", - "tokio-util", - "tower-http", "tracing", - "tracing-subscriber", "uuid", ] diff --git a/Cargo.toml b/Cargo.toml index 333ffbc..3086e33 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ all = { level = "deny", priority = -1 } pedantic = { level = "warn", priority = -1 } [workspace.dependencies] -agentic-core = { path = "crates/agentic-core" } +agentic-core = { package = "agentic-server-core", path = "crates/agentic-server-core", version = "0.1.0" } async-stream = "0.3" axum = { version = "0.8", features = ["ws"] } either = "1" diff --git a/crates/agentic-praxis/Cargo.toml b/crates/agentic-praxis/Cargo.toml index da28e70..7d3aa97 100644 --- a/crates/agentic-praxis/Cargo.toml +++ b/crates/agentic-praxis/Cargo.toml @@ -5,6 +5,7 @@ version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true +publish = false [dependencies] agentic-core.workspace = true diff --git a/crates/agentic-core/Cargo.toml b/crates/agentic-server-core/Cargo.toml similarity index 88% rename from crates/agentic-core/Cargo.toml rename to crates/agentic-server-core/Cargo.toml index cddb069..07a41ae 100644 --- a/crates/agentic-core/Cargo.toml +++ b/crates/agentic-server-core/Cargo.toml @@ -1,10 +1,18 @@ [package] -name = "agentic-core" +name = "agentic-server-core" description = "Framework-agnostic core library for agentic-api" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true +exclude = [ + "agentic_api.db*", + "benches/**", + "tests/**", +] + +[lib] +name = "agentic_core" [dependencies] async-stream.workspace = true diff --git a/crates/agentic-core/benches/accumulator_throughput.rs b/crates/agentic-server-core/benches/accumulator_throughput.rs similarity index 100% rename from crates/agentic-core/benches/accumulator_throughput.rs rename to crates/agentic-server-core/benches/accumulator_throughput.rs diff --git a/crates/agentic-core/benches/benches.rs b/crates/agentic-server-core/benches/benches.rs similarity index 100% rename from crates/agentic-core/benches/benches.rs rename to crates/agentic-server-core/benches/benches.rs diff --git a/crates/agentic-core/benches/cassettes/reasoning-and-tool-call-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml b/crates/agentic-server-core/benches/cassettes/reasoning-and-tool-call-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/benches/cassettes/reasoning-and-tool-call-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml rename to crates/agentic-server-core/benches/cassettes/reasoning-and-tool-call-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml diff --git a/crates/agentic-core/benches/cassettes/reasoning-and-tool-call-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml b/crates/agentic-server-core/benches/cassettes/reasoning-and-tool-call-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml similarity index 100% rename from crates/agentic-core/benches/cassettes/reasoning-and-tool-call-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml rename to crates/agentic-server-core/benches/cassettes/reasoning-and-tool-call-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml diff --git a/crates/agentic-core/benches/executor_throughput.rs b/crates/agentic-server-core/benches/executor_throughput.rs similarity index 100% rename from crates/agentic-core/benches/executor_throughput.rs rename to crates/agentic-server-core/benches/executor_throughput.rs diff --git a/crates/agentic-core/benches/storage_concurrent.rs b/crates/agentic-server-core/benches/storage_concurrent.rs similarity index 100% rename from crates/agentic-core/benches/storage_concurrent.rs rename to crates/agentic-server-core/benches/storage_concurrent.rs diff --git a/crates/agentic-core/benches/storage_crud.rs b/crates/agentic-server-core/benches/storage_crud.rs similarity index 100% rename from crates/agentic-core/benches/storage_crud.rs rename to crates/agentic-server-core/benches/storage_crud.rs diff --git a/crates/agentic-core/migrations/0001_initial.sql b/crates/agentic-server-core/migrations/0001_initial.sql similarity index 100% rename from crates/agentic-core/migrations/0001_initial.sql rename to crates/agentic-server-core/migrations/0001_initial.sql diff --git a/crates/agentic-core/migrations/0002_add_placeholders.sql b/crates/agentic-server-core/migrations/0002_add_placeholders.sql similarity index 100% rename from crates/agentic-core/migrations/0002_add_placeholders.sql rename to crates/agentic-server-core/migrations/0002_add_placeholders.sql diff --git a/crates/agentic-core/src/config.rs b/crates/agentic-server-core/src/config.rs similarity index 100% rename from crates/agentic-core/src/config.rs rename to crates/agentic-server-core/src/config.rs diff --git a/crates/agentic-core/src/error.rs b/crates/agentic-server-core/src/error.rs similarity index 100% rename from crates/agentic-core/src/error.rs rename to crates/agentic-server-core/src/error.rs diff --git a/crates/agentic-core/src/events/mod.rs b/crates/agentic-server-core/src/events/mod.rs similarity index 100% rename from crates/agentic-core/src/events/mod.rs rename to crates/agentic-server-core/src/events/mod.rs diff --git a/crates/agentic-core/src/events/normalize.rs b/crates/agentic-server-core/src/events/normalize.rs similarity index 100% rename from crates/agentic-core/src/events/normalize.rs rename to crates/agentic-server-core/src/events/normalize.rs diff --git a/crates/agentic-core/src/events/types.rs b/crates/agentic-server-core/src/events/types.rs similarity index 100% rename from crates/agentic-core/src/events/types.rs rename to crates/agentic-server-core/src/events/types.rs diff --git a/crates/agentic-core/src/executor/accumulator.rs b/crates/agentic-server-core/src/executor/accumulator.rs similarity index 100% rename from crates/agentic-core/src/executor/accumulator.rs rename to crates/agentic-server-core/src/executor/accumulator.rs diff --git a/crates/agentic-core/src/executor/engine.rs b/crates/agentic-server-core/src/executor/engine.rs similarity index 100% rename from crates/agentic-core/src/executor/engine.rs rename to crates/agentic-server-core/src/executor/engine.rs diff --git a/crates/agentic-core/src/executor/error.rs b/crates/agentic-server-core/src/executor/error.rs similarity index 100% rename from crates/agentic-core/src/executor/error.rs rename to crates/agentic-server-core/src/executor/error.rs diff --git a/crates/agentic-core/src/executor/gateway.rs b/crates/agentic-server-core/src/executor/gateway.rs similarity index 100% rename from crates/agentic-core/src/executor/gateway.rs rename to crates/agentic-server-core/src/executor/gateway.rs diff --git a/crates/agentic-core/src/executor/inference.rs b/crates/agentic-server-core/src/executor/inference.rs similarity index 100% rename from crates/agentic-core/src/executor/inference.rs rename to crates/agentic-server-core/src/executor/inference.rs diff --git a/crates/agentic-core/src/executor/mod.rs b/crates/agentic-server-core/src/executor/mod.rs similarity index 100% rename from crates/agentic-core/src/executor/mod.rs rename to crates/agentic-server-core/src/executor/mod.rs diff --git a/crates/agentic-core/src/executor/modes/conversation.rs b/crates/agentic-server-core/src/executor/modes/conversation.rs similarity index 100% rename from crates/agentic-core/src/executor/modes/conversation.rs rename to crates/agentic-server-core/src/executor/modes/conversation.rs diff --git a/crates/agentic-core/src/executor/modes/mod.rs b/crates/agentic-server-core/src/executor/modes/mod.rs similarity index 100% rename from crates/agentic-core/src/executor/modes/mod.rs rename to crates/agentic-server-core/src/executor/modes/mod.rs diff --git a/crates/agentic-core/src/executor/modes/response.rs b/crates/agentic-server-core/src/executor/modes/response.rs similarity index 100% rename from crates/agentic-core/src/executor/modes/response.rs rename to crates/agentic-server-core/src/executor/modes/response.rs diff --git a/crates/agentic-core/src/executor/persist.rs b/crates/agentic-server-core/src/executor/persist.rs similarity index 100% rename from crates/agentic-core/src/executor/persist.rs rename to crates/agentic-server-core/src/executor/persist.rs diff --git a/crates/agentic-core/src/executor/rehydrate.rs b/crates/agentic-server-core/src/executor/rehydrate.rs similarity index 100% rename from crates/agentic-core/src/executor/rehydrate.rs rename to crates/agentic-server-core/src/executor/rehydrate.rs diff --git a/crates/agentic-core/src/executor/request.rs b/crates/agentic-server-core/src/executor/request.rs similarity index 100% rename from crates/agentic-core/src/executor/request.rs rename to crates/agentic-server-core/src/executor/request.rs diff --git a/crates/agentic-core/src/executor/upstream.rs b/crates/agentic-server-core/src/executor/upstream.rs similarity index 100% rename from crates/agentic-core/src/executor/upstream.rs rename to crates/agentic-server-core/src/executor/upstream.rs diff --git a/crates/agentic-core/src/lib.rs b/crates/agentic-server-core/src/lib.rs similarity index 100% rename from crates/agentic-core/src/lib.rs rename to crates/agentic-server-core/src/lib.rs diff --git a/crates/agentic-core/src/proxy.rs b/crates/agentic-server-core/src/proxy.rs similarity index 100% rename from crates/agentic-core/src/proxy.rs rename to crates/agentic-server-core/src/proxy.rs diff --git a/crates/agentic-core/src/readiness.rs b/crates/agentic-server-core/src/readiness.rs similarity index 100% rename from crates/agentic-core/src/readiness.rs rename to crates/agentic-server-core/src/readiness.rs diff --git a/crates/agentic-core/src/storage/conversation.rs b/crates/agentic-server-core/src/storage/conversation.rs similarity index 100% rename from crates/agentic-core/src/storage/conversation.rs rename to crates/agentic-server-core/src/storage/conversation.rs diff --git a/crates/agentic-core/src/storage/mod.rs b/crates/agentic-server-core/src/storage/mod.rs similarity index 100% rename from crates/agentic-core/src/storage/mod.rs rename to crates/agentic-server-core/src/storage/mod.rs diff --git a/crates/agentic-core/src/storage/models/conversation.rs b/crates/agentic-server-core/src/storage/models/conversation.rs similarity index 100% rename from crates/agentic-core/src/storage/models/conversation.rs rename to crates/agentic-server-core/src/storage/models/conversation.rs diff --git a/crates/agentic-core/src/storage/models/item.rs b/crates/agentic-server-core/src/storage/models/item.rs similarity index 100% rename from crates/agentic-core/src/storage/models/item.rs rename to crates/agentic-server-core/src/storage/models/item.rs diff --git a/crates/agentic-core/src/storage/models/mod.rs b/crates/agentic-server-core/src/storage/models/mod.rs similarity index 100% rename from crates/agentic-core/src/storage/models/mod.rs rename to crates/agentic-server-core/src/storage/models/mod.rs diff --git a/crates/agentic-core/src/storage/models/response.rs b/crates/agentic-server-core/src/storage/models/response.rs similarity index 100% rename from crates/agentic-core/src/storage/models/response.rs rename to crates/agentic-server-core/src/storage/models/response.rs diff --git a/crates/agentic-core/src/storage/pool.rs b/crates/agentic-server-core/src/storage/pool.rs similarity index 100% rename from crates/agentic-core/src/storage/pool.rs rename to crates/agentic-server-core/src/storage/pool.rs diff --git a/crates/agentic-core/src/storage/response.rs b/crates/agentic-server-core/src/storage/response.rs similarity index 100% rename from crates/agentic-core/src/storage/response.rs rename to crates/agentic-server-core/src/storage/response.rs diff --git a/crates/agentic-core/src/storage/schema.rs b/crates/agentic-server-core/src/storage/schema.rs similarity index 100% rename from crates/agentic-core/src/storage/schema.rs rename to crates/agentic-server-core/src/storage/schema.rs diff --git a/crates/agentic-core/src/storage/types/conversation.rs b/crates/agentic-server-core/src/storage/types/conversation.rs similarity index 100% rename from crates/agentic-core/src/storage/types/conversation.rs rename to crates/agentic-server-core/src/storage/types/conversation.rs diff --git a/crates/agentic-core/src/storage/types/errors.rs b/crates/agentic-server-core/src/storage/types/errors.rs similarity index 100% rename from crates/agentic-core/src/storage/types/errors.rs rename to crates/agentic-server-core/src/storage/types/errors.rs diff --git a/crates/agentic-core/src/storage/types/item.rs b/crates/agentic-server-core/src/storage/types/item.rs similarity index 100% rename from crates/agentic-core/src/storage/types/item.rs rename to crates/agentic-server-core/src/storage/types/item.rs diff --git a/crates/agentic-core/src/storage/types/mod.rs b/crates/agentic-server-core/src/storage/types/mod.rs similarity index 100% rename from crates/agentic-core/src/storage/types/mod.rs rename to crates/agentic-server-core/src/storage/types/mod.rs diff --git a/crates/agentic-core/src/storage/types/response.rs b/crates/agentic-server-core/src/storage/types/response.rs similarity index 100% rename from crates/agentic-core/src/storage/types/response.rs rename to crates/agentic-server-core/src/storage/types/response.rs diff --git a/crates/agentic-core/src/tool/codex.rs b/crates/agentic-server-core/src/tool/codex.rs similarity index 100% rename from crates/agentic-core/src/tool/codex.rs rename to crates/agentic-server-core/src/tool/codex.rs diff --git a/crates/agentic-core/src/tool/function.rs b/crates/agentic-server-core/src/tool/function.rs similarity index 100% rename from crates/agentic-core/src/tool/function.rs rename to crates/agentic-server-core/src/tool/function.rs diff --git a/crates/agentic-core/src/tool/handler.rs b/crates/agentic-server-core/src/tool/handler.rs similarity index 100% rename from crates/agentic-core/src/tool/handler.rs rename to crates/agentic-server-core/src/tool/handler.rs diff --git a/crates/agentic-core/src/tool/mod.rs b/crates/agentic-server-core/src/tool/mod.rs similarity index 100% rename from crates/agentic-core/src/tool/mod.rs rename to crates/agentic-server-core/src/tool/mod.rs diff --git a/crates/agentic-core/src/tool/normalize.rs b/crates/agentic-server-core/src/tool/normalize.rs similarity index 100% rename from crates/agentic-core/src/tool/normalize.rs rename to crates/agentic-server-core/src/tool/normalize.rs diff --git a/crates/agentic-core/src/tool/registry.rs b/crates/agentic-server-core/src/tool/registry.rs similarity index 100% rename from crates/agentic-core/src/tool/registry.rs rename to crates/agentic-server-core/src/tool/registry.rs diff --git a/crates/agentic-core/src/tool/web_search.rs b/crates/agentic-server-core/src/tool/web_search.rs similarity index 100% rename from crates/agentic-core/src/tool/web_search.rs rename to crates/agentic-server-core/src/tool/web_search.rs diff --git a/crates/agentic-core/src/types/event.rs b/crates/agentic-server-core/src/types/event.rs similarity index 100% rename from crates/agentic-core/src/types/event.rs rename to crates/agentic-server-core/src/types/event.rs diff --git a/crates/agentic-core/src/types/io/input.rs b/crates/agentic-server-core/src/types/io/input.rs similarity index 100% rename from crates/agentic-core/src/types/io/input.rs rename to crates/agentic-server-core/src/types/io/input.rs diff --git a/crates/agentic-core/src/types/io/mod.rs b/crates/agentic-server-core/src/types/io/mod.rs similarity index 100% rename from crates/agentic-core/src/types/io/mod.rs rename to crates/agentic-server-core/src/types/io/mod.rs diff --git a/crates/agentic-core/src/types/io/output.rs b/crates/agentic-server-core/src/types/io/output.rs similarity index 100% rename from crates/agentic-core/src/types/io/output.rs rename to crates/agentic-server-core/src/types/io/output.rs diff --git a/crates/agentic-core/src/types/io/tools.rs b/crates/agentic-server-core/src/types/io/tools.rs similarity index 100% rename from crates/agentic-core/src/types/io/tools.rs rename to crates/agentic-server-core/src/types/io/tools.rs diff --git a/crates/agentic-core/src/types/io/usage.rs b/crates/agentic-server-core/src/types/io/usage.rs similarity index 100% rename from crates/agentic-core/src/types/io/usage.rs rename to crates/agentic-server-core/src/types/io/usage.rs diff --git a/crates/agentic-core/src/types/mod.rs b/crates/agentic-server-core/src/types/mod.rs similarity index 100% rename from crates/agentic-core/src/types/mod.rs rename to crates/agentic-server-core/src/types/mod.rs diff --git a/crates/agentic-core/src/types/request_response.rs b/crates/agentic-server-core/src/types/request_response.rs similarity index 100% rename from crates/agentic-core/src/types/request_response.rs rename to crates/agentic-server-core/src/types/request_response.rs diff --git a/crates/agentic-core/src/types/tools/mod.rs b/crates/agentic-server-core/src/types/tools/mod.rs similarity index 100% rename from crates/agentic-core/src/types/tools/mod.rs rename to crates/agentic-server-core/src/types/tools/mod.rs diff --git a/crates/agentic-core/src/types/tools/params.rs b/crates/agentic-server-core/src/types/tools/params.rs similarity index 100% rename from crates/agentic-core/src/types/tools/params.rs rename to crates/agentic-server-core/src/types/tools/params.rs diff --git a/crates/agentic-core/src/utils/common.rs b/crates/agentic-server-core/src/utils/common.rs similarity index 100% rename from crates/agentic-core/src/utils/common.rs rename to crates/agentic-server-core/src/utils/common.rs diff --git a/crates/agentic-core/src/utils/mod.rs b/crates/agentic-server-core/src/utils/mod.rs similarity index 100% rename from crates/agentic-core/src/utils/mod.rs rename to crates/agentic-server-core/src/utils/mod.rs diff --git a/crates/agentic-core/tests/accumulator_cassette_test.rs b/crates/agentic-server-core/tests/accumulator_cassette_test.rs similarity index 100% rename from crates/agentic-core/tests/accumulator_cassette_test.rs rename to crates/agentic-server-core/tests/accumulator_cassette_test.rs diff --git a/crates/agentic-core/tests/cassettes/README.md b/crates/agentic-server-core/tests/cassettes/README.md similarity index 100% rename from crates/agentic-core/tests/cassettes/README.md rename to crates/agentic-server-core/tests/cassettes/README.md diff --git a/crates/agentic-core/tests/cassettes/codex/codex-direct-vllm-http-flat-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-direct-vllm-http-flat-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-direct-vllm-http-flat-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-direct-vllm-http-flat-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-direct-vllm-http-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-direct-vllm-http-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-direct-vllm-http-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-direct-vllm-http-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-gateway-http-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-gateway-http-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-gateway-http-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-gateway-http-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-gateway-http-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-gateway-http-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-gateway-http-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-gateway-http-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-gateway-websocket-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-gateway-websocket-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-gateway-websocket-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-gateway-websocket-function-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-gateway-websocket-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-gateway-websocket-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-gateway-websocket-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-gateway-websocket-namespace-tool-Qwen-Qwen3.6-35B-A3B-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-openai-https-function-tool-gpt-4o-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-openai-https-function-tool-gpt-4o-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-openai-https-function-tool-gpt-4o-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-openai-https-function-tool-gpt-4o-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-openai-https-namespace-tool-gpt-4o-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-openai-https-namespace-tool-gpt-4o-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-openai-https-namespace-tool-gpt-4o-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-openai-https-namespace-tool-gpt-4o-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-openai-websocket-function-tool-gpt-4o-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-openai-websocket-function-tool-gpt-4o-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-openai-websocket-function-tool-gpt-4o-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-openai-websocket-function-tool-gpt-4o-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/codex-openai-websocket-namespace-tool-gpt-4o-streaming.yaml b/crates/agentic-server-core/tests/cassettes/codex/codex-openai-websocket-namespace-tool-gpt-4o-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/codex-openai-websocket-namespace-tool-gpt-4o-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/codex/codex-openai-websocket-namespace-tool-gpt-4o-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/codex/tools/direct_vllm_flat_namespace_tool.json b/crates/agentic-server-core/tests/cassettes/codex/tools/direct_vllm_flat_namespace_tool.json similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/tools/direct_vllm_flat_namespace_tool.json rename to crates/agentic-server-core/tests/cassettes/codex/tools/direct_vllm_flat_namespace_tool.json diff --git a/crates/agentic-core/tests/cassettes/codex/tools/function_tool.json b/crates/agentic-server-core/tests/cassettes/codex/tools/function_tool.json similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/tools/function_tool.json rename to crates/agentic-server-core/tests/cassettes/codex/tools/function_tool.json diff --git a/crates/agentic-core/tests/cassettes/codex/tools/namespace_tool.json b/crates/agentic-server-core/tests/cassettes/codex/tools/namespace_tool.json similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/tools/namespace_tool.json rename to crates/agentic-server-core/tests/cassettes/codex/tools/namespace_tool.json diff --git a/crates/agentic-core/tests/cassettes/codex/tools/tool_outputs.json b/crates/agentic-server-core/tests/cassettes/codex/tools/tool_outputs.json similarity index 100% rename from crates/agentic-core/tests/cassettes/codex/tools/tool_outputs.json rename to crates/agentic-server-core/tests/cassettes/codex/tools/tool_outputs.json diff --git a/crates/agentic-core/tests/cassettes/events/function-call-vllm-gemma4.yaml b/crates/agentic-server-core/tests/cassettes/events/function-call-vllm-gemma4.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/events/function-call-vllm-gemma4.yaml rename to crates/agentic-server-core/tests/cassettes/events/function-call-vllm-gemma4.yaml diff --git a/crates/agentic-core/tests/cassettes/events/text-only-vllm-gemma4.yaml b/crates/agentic-server-core/tests/cassettes/events/text-only-vllm-gemma4.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/events/text-only-vllm-gemma4.yaml rename to crates/agentic-server-core/tests/cassettes/events/text-only-vllm-gemma4.yaml diff --git a/crates/agentic-core/tests/cassettes/reasoning/responses/reasoning-single-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/reasoning/responses/reasoning-single-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/reasoning/responses/reasoning-single-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/reasoning/responses/reasoning-single-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/reasoning/responses/reasoning-single-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml b/crates/agentic-server-core/tests/cassettes/reasoning/responses/reasoning-single-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/reasoning/responses/reasoning-single-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/reasoning/responses/reasoning-single-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/reasoning/responses/reasoning-single-openai-gpt-oss-20b-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/reasoning/responses/reasoning-single-openai-gpt-oss-20b-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/reasoning/responses/reasoning-single-openai-gpt-oss-20b-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/reasoning/responses/reasoning-single-openai-gpt-oss-20b-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/reasoning/responses/reasoning-single-openai-gpt-oss-20b-streaming.yaml b/crates/agentic-server-core/tests/cassettes/reasoning/responses/reasoning-single-openai-gpt-oss-20b-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/reasoning/responses/reasoning-single-openai-gpt-oss-20b-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/reasoning/responses/reasoning-single-openai-gpt-oss-20b-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/record_cassette.py b/crates/agentic-server-core/tests/cassettes/record_cassette.py similarity index 100% rename from crates/agentic-core/tests/cassettes/record_cassette.py rename to crates/agentic-server-core/tests/cassettes/record_cassette.py diff --git a/crates/agentic-core/tests/cassettes/record_codex_cli_tool_call_cassettes.sh b/crates/agentic-server-core/tests/cassettes/record_codex_cli_tool_call_cassettes.sh similarity index 100% rename from crates/agentic-core/tests/cassettes/record_codex_cli_tool_call_cassettes.sh rename to crates/agentic-server-core/tests/cassettes/record_codex_cli_tool_call_cassettes.sh diff --git a/crates/agentic-core/tests/cassettes/record_reasoning_cassettes.sh b/crates/agentic-server-core/tests/cassettes/record_reasoning_cassettes.sh similarity index 100% rename from crates/agentic-core/tests/cassettes/record_reasoning_cassettes.sh rename to crates/agentic-server-core/tests/cassettes/record_reasoning_cassettes.sh diff --git a/crates/agentic-core/tests/cassettes/record_text_only_cassettes.sh b/crates/agentic-server-core/tests/cassettes/record_text_only_cassettes.sh similarity index 100% rename from crates/agentic-core/tests/cassettes/record_text_only_cassettes.sh rename to crates/agentic-server-core/tests/cassettes/record_text_only_cassettes.sh diff --git a/crates/agentic-core/tests/cassettes/record_tool_call_cassettes.sh b/crates/agentic-server-core/tests/cassettes/record_tool_call_cassettes.sh similarity index 100% rename from crates/agentic-core/tests/cassettes/record_tool_call_cassettes.sh rename to crates/agentic-server-core/tests/cassettes/record_tool_call_cassettes.sh diff --git a/crates/agentic-core/tests/cassettes/text_only/conversation/conv-isolation-gpt-4o-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-isolation-gpt-4o-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/conversation/conv-isolation-gpt-4o-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-isolation-gpt-4o-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/conversation/conv-multi-branch-multi-turn-gpt-4o-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-multi-branch-multi-turn-gpt-4o-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/conversation/conv-multi-branch-multi-turn-gpt-4o-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-multi-branch-multi-turn-gpt-4o-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/conversation/conv-multi-turn-single-branch-gpt-4o-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-multi-turn-single-branch-gpt-4o-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/conversation/conv-multi-turn-single-branch-gpt-4o-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-multi-turn-single-branch-gpt-4o-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/conversation/conv-store-false-followup-gpt-4o-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-store-false-followup-gpt-4o-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/conversation/conv-store-false-followup-gpt-4o-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-store-false-followup-gpt-4o-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/conversation/conv-two-turn-gpt-4o-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-two-turn-gpt-4o-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/conversation/conv-two-turn-gpt-4o-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-two-turn-gpt-4o-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/conversation/conv-two-turn-gpt-4o-streaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-two-turn-gpt-4o-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/conversation/conv-two-turn-gpt-4o-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/conversation/conv-two-turn-gpt-4o-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/responses/resp-no-store-gpt-4o-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/responses/resp-no-store-gpt-4o-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/responses/resp-no-store-gpt-4o-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/responses/resp-no-store-gpt-4o-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/responses/resp-single-gpt-4o-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/responses/resp-single-gpt-4o-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/responses/resp-single-gpt-4o-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/responses/resp-single-gpt-4o-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/responses/resp-single-gpt-4o-streaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/responses/resp-single-gpt-4o-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/responses/resp-single-gpt-4o-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/responses/resp-single-gpt-4o-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/responses/resp-two-turn-gpt-4o-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/responses/resp-two-turn-gpt-4o-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/responses/resp-two-turn-gpt-4o-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/responses/resp-two-turn-gpt-4o-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/text_only/responses/resp-two-turn-gpt-4o-streaming.yaml b/crates/agentic-server-core/tests/cassettes/text_only/responses/resp-two-turn-gpt-4o-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/text_only/responses/resp-two-turn-gpt-4o-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/text_only/responses/resp-two-turn-gpt-4o-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/gateway_web_search_then_codex_namespace.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/gateway_web_search_then_codex_namespace.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/gateway_web_search_then_codex_namespace.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/gateway_web_search_then_codex_namespace.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_3turn.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_3turn.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_3turn.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_3turn.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_3turn_streaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_3turn_streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_3turn_streaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_3turn_streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_5turn.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_5turn.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_5turn.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_5turn.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_branch.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_branch.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_branch.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_branch.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_parallel.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_parallel.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_parallel.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_parallel.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_tool_output_only.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_tool_output_only.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_tool_output_only.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/openai_responses_tool_calls_tool_output_only.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/pipeline_tool_outputs.json b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/pipeline_tool_outputs.json similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/pipeline_tool_outputs.json rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/pipeline_tool_outputs.json diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/pipeline_tools.json b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/pipeline_tools.json similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/pipeline_tools.json rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/pipeline_tools.json diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/record.sh b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/record.sh similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/record.sh rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/record.sh diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_3turn.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_3turn.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_3turn.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_3turn.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_3turn_streaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_3turn_streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_3turn_streaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_3turn_streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_5turn.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_5turn.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_5turn.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_5turn.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_branch.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_branch.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_branch.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_branch.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_parallel.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_parallel.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_parallel.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_parallel.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_tool_output_only.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_tool_output_only.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_tool_output_only.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/multi_turn/responses_tool_calls_tool_output_only.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tool-call-auto-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-auto-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tool-call-auto-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-auto-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tool-call-auto-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-auto-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tool-call-auto-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-auto-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tool-call-named-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-named-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tool-call-named-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-named-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tool-call-named-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-named-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tool-call-named-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-named-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tool-call-none-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-none-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tool-call-none-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-none-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tool-call-none-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-none-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tool-call-none-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-none-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tool-call-required-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-required-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tool-call-required-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-required-Qwen-Qwen3-30B-A3B-FP8-nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tool-call-required-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml b/crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-required-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tool-call-required-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml rename to crates/agentic-server-core/tests/cassettes/tool_calls/tool-call-required-Qwen-Qwen3-30B-A3B-FP8-streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/tool_calls/tools.json b/crates/agentic-server-core/tests/cassettes/tool_calls/tools.json similarity index 100% rename from crates/agentic-core/tests/cassettes/tool_calls/tools.json rename to crates/agentic-server-core/tests/cassettes/tool_calls/tools.json diff --git a/crates/agentic-core/tests/cassettes/web_search/gpt_oss_web_search_nonstreaming.yaml b/crates/agentic-server-core/tests/cassettes/web_search/gpt_oss_web_search_nonstreaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/web_search/gpt_oss_web_search_nonstreaming.yaml rename to crates/agentic-server-core/tests/cassettes/web_search/gpt_oss_web_search_nonstreaming.yaml diff --git a/crates/agentic-core/tests/cassettes/web_search/gpt_oss_web_search_streaming.yaml b/crates/agentic-server-core/tests/cassettes/web_search/gpt_oss_web_search_streaming.yaml similarity index 100% rename from crates/agentic-core/tests/cassettes/web_search/gpt_oss_web_search_streaming.yaml rename to crates/agentic-server-core/tests/cassettes/web_search/gpt_oss_web_search_streaming.yaml diff --git a/crates/agentic-core/tests/cassettes/web_search/tools.json b/crates/agentic-server-core/tests/cassettes/web_search/tools.json similarity index 100% rename from crates/agentic-core/tests/cassettes/web_search/tools.json rename to crates/agentic-server-core/tests/cassettes/web_search/tools.json diff --git a/crates/agentic-core/tests/dispatch_loop_cassette_test.rs b/crates/agentic-server-core/tests/dispatch_loop_cassette_test.rs similarity index 100% rename from crates/agentic-core/tests/dispatch_loop_cassette_test.rs rename to crates/agentic-server-core/tests/dispatch_loop_cassette_test.rs diff --git a/crates/agentic-core/tests/event_normalizer_test.rs b/crates/agentic-server-core/tests/event_normalizer_test.rs similarity index 100% rename from crates/agentic-core/tests/event_normalizer_test.rs rename to crates/agentic-server-core/tests/event_normalizer_test.rs diff --git a/crates/agentic-core/tests/stateful_conversation_integration.rs b/crates/agentic-server-core/tests/stateful_conversation_integration.rs similarity index 100% rename from crates/agentic-core/tests/stateful_conversation_integration.rs rename to crates/agentic-server-core/tests/stateful_conversation_integration.rs diff --git a/crates/agentic-core/tests/stateful_responses_integration.rs b/crates/agentic-server-core/tests/stateful_responses_integration.rs similarity index 100% rename from crates/agentic-core/tests/stateful_responses_integration.rs rename to crates/agentic-server-core/tests/stateful_responses_integration.rs diff --git a/crates/agentic-core/tests/storage_integration.rs b/crates/agentic-server-core/tests/storage_integration.rs similarity index 100% rename from crates/agentic-core/tests/storage_integration.rs rename to crates/agentic-server-core/tests/storage_integration.rs diff --git a/crates/agentic-core/tests/support/mod.rs b/crates/agentic-server-core/tests/support/mod.rs similarity index 100% rename from crates/agentic-core/tests/support/mod.rs rename to crates/agentic-server-core/tests/support/mod.rs diff --git a/crates/agentic-core/tests/tool_normalization_test.rs b/crates/agentic-server-core/tests/tool_normalization_test.rs similarity index 100% rename from crates/agentic-core/tests/tool_normalization_test.rs rename to crates/agentic-server-core/tests/tool_normalization_test.rs diff --git a/crates/agentic-core/tests/web_search_tool_test.rs b/crates/agentic-server-core/tests/web_search_tool_test.rs similarity index 100% rename from crates/agentic-core/tests/web_search_tool_test.rs rename to crates/agentic-server-core/tests/web_search_tool_test.rs diff --git a/docs/adr/ADR-03_gateway_integration.md b/docs/adr/ADR-03_gateway_integration.md index 42372f8..623ce5e 100644 --- a/docs/adr/ADR-03_gateway_integration.md +++ b/docs/adr/ADR-03_gateway_integration.md @@ -25,11 +25,11 @@ Note: ADR-01 decided on Python as the project language. PR #23 transitioned the Praxis is the primary gateway for agentic-api. It is a Rust-native, early-stage proxy with a co-development opportunity — agentic-api is an early adopter that validates Praxis's integration model with a real agentic workload. -The out-of-the-box version of agentic-api ships a set of Praxis filters (each implementing `HttpFilter`) that compose the agentic loop, with each filter backed by an `agentic-core` public function. Praxis's filter chain with branch support orchestrates the loop — including branching back on tool calls. In standalone mode (no gateway), `execute()` composes the same functions with plain Rust control flow. The key requirement is that consumers can customize the loop — adding, removing, or reordering filters — by calling the same public functions (requires recompilation, not dynamic). +The out-of-the-box version of agentic-api ships a set of Praxis filters (each implementing `HttpFilter`) that compose the agentic loop, with each filter backed by an `agentic-server-core` public function. Praxis's filter chain with branch support orchestrates the loop — including branching back on tool calls. In standalone mode (no gateway), `execute()` composes the same functions with plain Rust control flow. The key requirement is that consumers can customize the loop — adding, removing, or reordering filters — by calling the same public functions (requires recompilation, not dynamic). ### The integration question -The loop steps are implemented as plain Rust public functions in `agentic-core`. When integrated with Praxis, each function is wrapped in an `HttpFilter` and composed into a filter chain — using Praxis's branch chains to handle tool-call loops. In standalone mode, `execute()` composes the same functions with plain Rust control flow. Because the functions are plain Rust with no gateway-specific API, they could support other gateways in the future. +The loop steps are implemented as plain Rust public functions in `agentic-server-core`. When integrated with Praxis, each function is wrapped in an `HttpFilter` and composed into a filter chain — using Praxis's branch chains to handle tool-call loops. In standalone mode, `execute()` composes the same functions with plain Rust control flow. Because the functions are plain Rust with no gateway-specific API, they could support other gateways in the future. --- @@ -72,10 +72,10 @@ The loop steps are implemented as plain Rust public functions in `agentic-core`. | # | Decision | Status | |---|----------|--------| -| D1 | Core orchestration logic is a Rust library crate (`agentic-core`) that exposes each loop step as a public function — plain Rust, no gateway-specific API | Proposed | -| D2 | The agentic loop is composed by calling `agentic-core` public functions — in Praxis, each function is an `HttpFilter` in a filter chain with branch support; in standalone mode, `execute()` composes them with plain Rust control flow | Proposed | -| D3 | Response store, conversation manager, tool registry, and MCP client are implemented natively in Rust within `agentic-core` | Proposed | -| D4 | Praxis integrates via `agentic-praxis`, which wraps each `agentic-core` function in an `HttpFilter` — composed into a filter chain with branches for tool-call looping | Proposed | +| D1 | Core orchestration logic is a Rust library crate (`agentic-server-core`) that exposes each loop step as a public function — plain Rust, no gateway-specific API | Proposed | +| D2 | The agentic loop is composed by calling `agentic-server-core` public functions — in Praxis, each function is an `HttpFilter` in a filter chain with branch support; in standalone mode, `execute()` composes them with plain Rust control flow | Proposed | +| D3 | Response store, conversation manager, tool registry, and MCP client are implemented natively in Rust within `agentic-server-core` | Proposed | +| D4 | Praxis integrates via `agentic-praxis`, which wraps each `agentic-server-core` function in an `HttpFilter` — composed into a filter chain with branches for tool-call looping | Proposed | | D5 | Standalone mode (axum binary) is first-class — same core functions, different hosting | Proposed | --- @@ -87,7 +87,7 @@ agentic-api/ Cargo.toml # [workspace] crates/ - agentic-core/ # Layer 1: pure library + agentic-server-core/ # Layer 1: pure library Cargo.toml # [lib], deps: tokio, reqwest, serde, sqlx src/ lib.rs @@ -102,17 +102,17 @@ agentic-api/ host.rs # Sandboxed host tools agentic-server/ # Layer 2: axum standalone binary - Cargo.toml # depends on agentic-core + Cargo.toml # depends on agentic-server-core src/ main.rs # CLI, axum server, vLLM subprocess mgmt agentic-praxis/ # Layer 3: Praxis adapter - Cargo.toml # depends on agentic-core + praxis + Cargo.toml # depends on agentic-server-core + praxis src/ - lib.rs # HttpFilter impls: each wraps an agentic-core function + lib.rs # HttpFilter impls: each wraps an agentic-server-core function ``` -### Layer 1: `agentic-core` +### Layer 1: `agentic-server-core` The core crate exposes each step of the agentic loop as an individual public function. This allows consumers to compose steps with their own logic (e.g. rate limiting before tool invocation, custom guardrails between inference and response assembly). @@ -141,14 +141,14 @@ Thin axum wrapper. Parses HTTP, calls `agentic_core::execute()`, streams the res ### Layer 3: `agentic-praxis` -The Praxis integration crate. Each `agentic-core` public function is wrapped in an `HttpFilter` implementation. The out-of-the-box configuration assembles these filters into a filter chain with branch support for tool-call looping. Consumers who need a custom loop (e.g. adding rate limiting before tool invocation, or inserting guardrails between inference and assembly) reconfigure the filter chain — adding, removing, or reordering filters. +The Praxis integration crate. Each `agentic-server-core` public function is wrapped in an `HttpFilter` implementation. The out-of-the-box configuration assembles these filters into a filter chain with branch support for tool-call looping. Consumers who need a custom loop (e.g. adding rate limiting before tool invocation, or inserting guardrails between inference and assembly) reconfigure the filter chain — adding, removing, or reordering filters. -Praxis depends on `agentic-praxis` as a crate, which transitively brings in `agentic-core`: +Praxis depends on `agentic-praxis` as a crate, which transitively brings in `agentic-server-core`: ```toml # In Praxis's Cargo.toml or a downstream build [dependencies] -agentic-praxis = "0.1" # pulls in agentic-core automatically +agentic-praxis = "0.1" # pulls in agentic-server-core automatically ``` agentic-api publishes releases on its own schedule. Praxis bumps the version when ready. @@ -163,7 +163,7 @@ agentic-api publishes releases on its own schedule. Praxis bumps the version whe Client → Praxis (auth, rate-limit, routing) → agentic-server │ ▼ - agentic-core + agentic-server-core │ ▼ vLLM / llm-d @@ -171,30 +171,30 @@ Client → Praxis (auth, rate-limit, routing) → agentic-server Praxis sees agentic-api as an HTTP backend — the same way it sees vLLM. For stateful requests (`previous_response_id`, tools), Praxis routes to agentic-api. For stateless pass-through, Praxis routes directly to vLLM. -Alternatively, Praxis can link `agentic-praxis` in-process, with each `agentic-core` function as an `HttpFilter` in the filter chain — eliminating the network hop while keeping the same core logic: +Alternatively, Praxis can link `agentic-praxis` in-process, with each `agentic-server-core` function as an `HttpFilter` in the filter chain — eliminating the network hop while keeping the same core logic: ``` Client → Praxis (auth, rate-limit, routing, agentic-praxis filters) → vLLM │ - agentic-core + agentic-server-core (in-process) ``` -Both modes use the same `agentic-core` code. The choice is a deployment decision, not an architecture decision. +Both modes use the same `agentic-server-core` code. The choice is a deployment decision, not an architecture decision. ### Standalone (development) ``` Client → agentic-server (axum) → vLLM (subprocess or external) │ - agentic-core + agentic-server-core ``` No gateway. Single binary. `agentic-api serve ` or `agentic-api --llm-api-base `. ### Other gateways (future) -Praxis is what we start with. Because `agentic-core` functions are plain Rust with no gateway-specific API, supporting other gateways in the future is possible without changes to the core. +Praxis is what we start with. Because `agentic-server-core` functions are plain Rust with no gateway-specific API, supporting other gateways in the future is possible without changes to the core. --- @@ -202,13 +202,13 @@ Praxis is what we start with. Because `agentic-core` functions are plain Rust wi ### Same functions, different orchestrators -`agentic-core` exposes each loop step as a public function. Who orchestrates the loop depends on the deployment context: +`agentic-server-core` exposes each loop step as a public function. Who orchestrates the loop depends on the deployment context: #### In Praxis -Each `agentic-core` function is wrapped in an `HttpFilter`. Praxis's filter chain orchestrates the loop — with branch chains handling tool-call re-entry. +Each `agentic-server-core` function is wrapped in an `HttpFilter`. Praxis's filter chain orchestrates the loop — with branch chains handling tool-call re-entry. -**Filter implementations** — thin wrappers that delegate to `agentic-core`: +**Filter implementations** — thin wrappers that delegate to `agentic-server-core`: ```rust struct InferenceFilter { vllm_url: String } @@ -281,7 +281,7 @@ request arrives → response to client ``` -Each filter is a thin wrapper (~10 lines). All domain logic lives in `agentic-core`. Consumers customize the loop by editing YAML to add/remove/reorder/reconfigure filters that are already registered in the Praxis binary (for example, inserting a guardrail filter between inference and tool dispatch). Adding a brand-new custom filter implementation requires registering it in code and rebuilding the Praxis binary. This uses Praxis's filter chain and branch constructs natively ([praxis#354](https://github.com/praxis-proxy/praxis/issues/354)). +Each filter is a thin wrapper (~10 lines). All domain logic lives in `agentic-server-core`. Consumers customize the loop by editing YAML to add/remove/reorder/reconfigure filters that are already registered in the Praxis binary (for example, inserting a guardrail filter between inference and tool dispatch). Adding a brand-new custom filter implementation requires registering it in code and rebuilding the Praxis binary. This uses Praxis's filter chain and branch constructs natively ([praxis#354](https://github.com/praxis-proxy/praxis/issues/354)). #### In standalone mode @@ -295,7 +295,7 @@ Client → agentic-server (axum) → response to client ``` -This is the development and community-friendly mode. Anyone can use `agentic-core` as a library without Praxis or any specific gateway. +This is the development and community-friendly mode. Anyone can use `agentic-server-core` as a library without Praxis or any specific gateway. #### Comparison @@ -307,7 +307,7 @@ This is the development and community-friendly mode. Anyone can use `agentic-cor | Gateway dependency | Praxis | None | | Testing | `cargo test` on functions + Praxis filter chain for integration | `cargo test` on functions directly | -Both use the same `agentic-core` public functions — the domain logic is always in `agentic-core`, only the orchestrator differs. +Both use the same `agentic-server-core` public functions — the domain logic is always in `agentic-server-core`, only the orchestrator differs. ### Why three layers @@ -355,22 +355,22 @@ MODE 3: Production (in-process) ### PR #24 — Rust proxy gateway -PR #24 will become the foundation of `agentic-core` and `agentic-server`. The proxy logic, configuration, error handling, and CLI it introduces will evolve into the layered crate structure. The standalone `serve` mode remains first-class in `agentic-server`. Benchmarks stay. +PR #24 will become the foundation of `agentic-server-core` and `agentic-server`. The proxy logic, configuration, error handling, and CLI it introduces will evolve into the layered crate structure. The standalone `serve` mode remains first-class in `agentic-server`. Benchmarks stay. The workspace migration (flat crate → workspace with `crates/`) is a follow-up after PR #24 merges. PR #24 ships as-is — it's correct and complete for the current scope. ### PR #27 — Praxis filter-based architecture -PR #27 decomposes the agentic loop into multiple Praxis filters (`responses_proxy`, `agentic_loop`, `state_hydration`, `tool_dispatch`). This ADR aligns with that direction — each step is an `HttpFilter` in the filter chain — but with a key difference: the domain logic lives in `agentic-core` public functions, not in Praxis-specific filter implementations. PR #27's filter decomposition should be reworked so each filter delegates to an `agentic-core` function rather than implementing the logic directly. +PR #27 decomposes the agentic loop into multiple Praxis filters (`responses_proxy`, `agentic_loop`, `state_hydration`, `tool_dispatch`). This ADR aligns with that direction — each step is an `HttpFilter` in the filter chain — but with a key difference: the domain logic lives in `agentic-server-core` public functions, not in Praxis-specific filter implementations. PR #27's filter decomposition should be reworked so each filter delegates to an `agentic-server-core` function rather than implementing the logic directly. --- ## Implications -- **Workspace migration.** The current flat crate structure (`src/`) will migrate to a Cargo workspace with `crates/agentic-core`, `crates/agentic-server`, and `crates/agentic-praxis`. This happens after PR #24 merges as a separate refactoring PR. -- **Core API design.** The `agentic-core` public API (individual step functions, `execute()`, domain types) needs careful design — it's the contract that Praxis and any custom loop wiring depends on. +- **Workspace migration.** The current flat crate structure (`src/`) will migrate to a Cargo workspace with `crates/agentic-server-core`, `crates/agentic-server`, and `crates/agentic-praxis`. This happens after PR #24 merges as a separate refactoring PR. +- **Core API design.** The `agentic-server-core` public API (individual step functions, `execute()`, domain types) needs careful design — it's the contract that Praxis and any custom loop wiring depends on. - **Praxis co-development.** We contribute `agentic-praxis` and work with the Praxis team to validate the integration model. agentic-api is an early adopter that exercises Praxis's capabilities with a real agentic workload. -- **State services.** Response store (ADR-02), conversation manager, and tool registry are implemented natively in Rust within `agentic-core`. No external Python services in the request path. +- **State services.** Response store (ADR-02), conversation manager, and tool registry are implemented natively in Rust within `agentic-server-core`. No external Python services in the request path. --- @@ -384,4 +384,4 @@ PR #27 decomposes the agentic loop into multiple Praxis filters (`responses_prox 4. **In-process vs service mode trade-offs.** Mode 2 (service) adds ~1ms per loop iteration but gives process isolation and independent scaling. Mode 3 (in-process) eliminates the hop but shares failure domains. Which is the default recommendation for production? -5. **Separate tools crate.** Tools currently live in `agentic-core`. If a tool implementation requires non-Rust-native dependencies (C bindings, external libraries), it may make sense to split tools into a separate `agentic-tools` crate to avoid polluting `agentic-core`'s dependency tree. Revisit when tool implementations land. +5. **Separate tools crate.** Tools currently live in `agentic-server-core`. If a tool implementation requires non-Rust-native dependencies (C bindings, external libraries), it may make sense to split tools into a separate `agentic-tools` crate to avoid polluting `agentic-server-core`'s dependency tree. Revisit when tool implementations land. diff --git a/docs/design/core-public-api.md b/docs/design/core-public-api.md index fb92954..c5a11f4 100644 --- a/docs/design/core-public-api.md +++ b/docs/design/core-public-api.md @@ -1,4 +1,4 @@ -# Design: `agentic-core` Public API +# Design: `agentic-server-core` Public API > Status: Active — implementation in progress > References: [ADR-03](../adr/ADR-03_gateway_integration.md), [Issue #42](https://github.com/vllm-project/agentic-api/issues/42), [Praxis #354](https://github.com/praxis-proxy/praxis/issues/354) @@ -42,12 +42,12 @@ Each phase = one PR with tests. Phases are ordered by dependency. ### Phase 1: SSE Event Normalizer Module (lands on main — no PR #46 dependency) -**PR scope:** New `events/` module in `agentic-core` — separate from executor, no dependency on PR #46. +**PR scope:** New `events/` module in `agentic-server-core` — separate from executor, no dependency on PR #46. Per @maralbahari's feedback ([PR #46 discussion](https://github.com/vllm-project/agentic-api/pull/46#discussion_r3352104210)): the SSE event handling should be a **separate core module** to avoid bloating the accumulator. Design draws from PydanticAI's `StreamedResponse._process_event()`. ``` -crates/agentic-core/src/ +crates/agentic-server-core/src/ events/ mod.rs // pub mod normalize; pub mod types; types.rs // SSEEventType (28+ variants) + typed EventPayload enum diff --git a/docs/design/mcp-gateway-integration.md b/docs/design/mcp-gateway-integration.md index 32b78ed..d6e493a 100644 --- a/docs/design/mcp-gateway-integration.md +++ b/docs/design/mcp-gateway-integration.md @@ -1,6 +1,6 @@ # MCP Gateway Integration -Target: `crates/agentic-core/` +Target: `crates/agentic-server-core/` Reference: [mcp handlers](https://github.com/openai/codex/tree/main/codex-rs/core/src/tools/handlers), [rmcp-client](https://github.com/openai/codex/tree/main/codex-rs/rmcp-client), [turn.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/session/turn.rs), [rust-sdk README](https://github.com/modelcontextprotocol/rust-sdk#readme) ---