From a657e0303a83b76c2a48f8964ae3029d56cf76e1 Mon Sep 17 00:00:00 2001 From: Josh <24302717+JPrier@users.noreply.github.com> Date: Fri, 19 Dec 2025 19:02:09 -0500 Subject: [PATCH] Add Rust workspace scaffolding and tooling --- .gitignore | 6 ++++- .treeagent_cache/graphs/.gitkeep | 0 Cargo.lock | 41 +++++++++++++++++++++++++++++ Cargo.toml | 17 ++++++++++++ Makefile | 11 +++++++- crates/treeagent-model/Cargo.toml | 9 +++++++ crates/treeagent-model/src/lib.rs | 25 ++++++++++++++++++ crates/treeagent-runtime/Cargo.toml | 10 +++++++ crates/treeagent-runtime/src/lib.rs | 35 ++++++++++++++++++++++++ crates/treeagent/Cargo.toml | 11 ++++++++ crates/treeagent/src/main.rs | 20 ++++++++++++++ crates/treeagentc/Cargo.toml | 10 +++++++ crates/treeagentc/src/main.rs | 17 ++++++++++++ scripts/dev.sh | 18 +++++++++++++ templates/graph-runner/.gitkeep | 0 templates/graph-runner/README.md | 3 +++ 16 files changed, 231 insertions(+), 2 deletions(-) create mode 100644 .treeagent_cache/graphs/.gitkeep create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 crates/treeagent-model/Cargo.toml create mode 100644 crates/treeagent-model/src/lib.rs create mode 100644 crates/treeagent-runtime/Cargo.toml create mode 100644 crates/treeagent-runtime/src/lib.rs create mode 100644 crates/treeagent/Cargo.toml create mode 100644 crates/treeagent/src/main.rs create mode 100644 crates/treeagentc/Cargo.toml create mode 100644 crates/treeagentc/src/main.rs create mode 100755 scripts/dev.sh create mode 100644 templates/graph-runner/.gitkeep create mode 100644 templates/graph-runner/README.md diff --git a/.gitignore b/.gitignore index de92942..f15ae89 100644 --- a/.gitignore +++ b/.gitignore @@ -198,4 +198,8 @@ cython_debug/ .ai_slop/ # Ignore obsolete agent_nodes directory src/agent_nodes/ -checkpoints/ \ No newline at end of file +checkpoints/ + +# TreeAgent graph cache (keep directory structure only) +.treeagent_cache/graphs/* +!.treeagent_cache/graphs/.gitkeep diff --git a/.treeagent_cache/graphs/.gitkeep b/.treeagent_cache/graphs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..31956b5 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,41 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "treeagent" +version = "0.1.0" +dependencies = [ + "anyhow", + "treeagent-model", + "treeagent-runtime", +] + +[[package]] +name = "treeagent-model" +version = "0.1.0" +dependencies = [ + "anyhow", +] + +[[package]] +name = "treeagent-runtime" +version = "0.1.0" +dependencies = [ + "anyhow", + "treeagent-model", +] + +[[package]] +name = "treeagentc" +version = "0.1.0" +dependencies = [ + "anyhow", + "treeagent-model", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..5b814bf --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,17 @@ +[workspace] +members = [ + "crates/treeagent", + "crates/treeagentc", + "crates/treeagent-runtime", + "crates/treeagent-model", +] +resolver = "2" + +[workspace.package] +authors = ["TreeAgent Developers"] +edition = "2021" +license = "MIT" +version = "0.1.0" + +[workspace.dependencies] +anyhow = "1.0" diff --git a/Makefile b/Makefile index 6770bfb..ae171cb 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,16 @@ -.PHONY: swe-sanity swe-one +.PHONY: swe-build swe-check swe-test swe-sanity swe-one INSTANCE ?= sympy__sympy-20590 DATASET ?= princeton-nlp/SWE-bench_Lite +swe-build: + cargo build --workspace + +swe-check: + cargo check --workspace + +swe-test: + cargo test --workspace + swe-sanity: python -m pip install -q swebench treeagent-swebench sanity --dataset $(DATASET) --instance-id $(INSTANCE) --namespace '' diff --git a/crates/treeagent-model/Cargo.toml b/crates/treeagent-model/Cargo.toml new file mode 100644 index 0000000..1b49c41 --- /dev/null +++ b/crates/treeagent-model/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "treeagent-model" +authors.workspace = true +edition.workspace = true +license.workspace = true +version.workspace = true + +[dependencies] +anyhow.workspace = true diff --git a/crates/treeagent-model/src/lib.rs b/crates/treeagent-model/src/lib.rs new file mode 100644 index 0000000..586168c --- /dev/null +++ b/crates/treeagent-model/src/lib.rs @@ -0,0 +1,25 @@ +#[derive(Debug, Default, Clone, PartialEq, Eq)] +pub struct GraphSpec { + name: String, +} + +impl GraphSpec { + pub fn new(name: impl Into) -> Self { + Self { name: name.into() } + } + + pub fn name(&self) -> &str { + &self.name + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn stores_name() { + let spec = GraphSpec::new("example"); + assert_eq!(spec.name(), "example"); + } +} diff --git a/crates/treeagent-runtime/Cargo.toml b/crates/treeagent-runtime/Cargo.toml new file mode 100644 index 0000000..9d89d03 --- /dev/null +++ b/crates/treeagent-runtime/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "treeagent-runtime" +authors.workspace = true +edition.workspace = true +license.workspace = true +version.workspace = true + +[dependencies] +anyhow.workspace = true +treeagent-model = { path = "../treeagent-model" } diff --git a/crates/treeagent-runtime/src/lib.rs b/crates/treeagent-runtime/src/lib.rs new file mode 100644 index 0000000..21a1db5 --- /dev/null +++ b/crates/treeagent-runtime/src/lib.rs @@ -0,0 +1,35 @@ +use treeagent_model::GraphSpec; + +#[derive(Debug, Default, Clone)] +pub struct WorkspaceRuntime { + graph_spec: GraphSpec, +} + +impl WorkspaceRuntime { + pub fn new(name: impl Into) -> Self { + Self { + graph_spec: GraphSpec::new(name), + } + } + + pub fn summary(&self) -> String { + format!("TreeAgent runtime initialized for graph '{}'", self.graph_spec.name()) + } + + pub fn print_summary(&self) -> anyhow::Result<()> { + println!("{}", self.summary()); + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn summary_mentions_runtime() { + let runtime = WorkspaceRuntime::new("demo"); + let summary = runtime.summary(); + assert!(summary.contains("TreeAgent runtime initialized for graph 'demo'")); + } +} diff --git a/crates/treeagent/Cargo.toml b/crates/treeagent/Cargo.toml new file mode 100644 index 0000000..746bc6b --- /dev/null +++ b/crates/treeagent/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "treeagent" +authors.workspace = true +edition.workspace = true +license.workspace = true +version.workspace = true + +[dependencies] +anyhow.workspace = true +treeagent-runtime = { path = "../treeagent-runtime" } +treeagent-model = { path = "../treeagent-model" } diff --git a/crates/treeagent/src/main.rs b/crates/treeagent/src/main.rs new file mode 100644 index 0000000..41c238a --- /dev/null +++ b/crates/treeagent/src/main.rs @@ -0,0 +1,20 @@ +use treeagent_runtime::WorkspaceRuntime; + +fn main() { + let runtime = WorkspaceRuntime::default(); + runtime + .print_summary() + .expect("failed to start the TreeAgent runtime"); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn runtime_runs() { + let runtime = WorkspaceRuntime::default(); + let summary = runtime.summary(); + assert!(summary.contains("TreeAgent runtime")); + } +} diff --git a/crates/treeagentc/Cargo.toml b/crates/treeagentc/Cargo.toml new file mode 100644 index 0000000..6773222 --- /dev/null +++ b/crates/treeagentc/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "treeagentc" +authors.workspace = true +edition.workspace = true +license.workspace = true +version.workspace = true + +[dependencies] +anyhow.workspace = true +treeagent-model = { path = "../treeagent-model" } diff --git a/crates/treeagentc/src/main.rs b/crates/treeagentc/src/main.rs new file mode 100644 index 0000000..596b2fa --- /dev/null +++ b/crates/treeagentc/src/main.rs @@ -0,0 +1,17 @@ +use treeagent_model::GraphSpec; + +fn main() { + let spec = GraphSpec::new("client"); + println!("treeagentc targeting graph: {}", spec.name()); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn client_initializes_graph_spec() { + let spec = GraphSpec::new("client-spec"); + assert_eq!(spec.name(), "client-spec"); + } +} diff --git a/scripts/dev.sh b/scripts/dev.sh new file mode 100755 index 0000000..cb0a84d --- /dev/null +++ b/scripts/dev.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT_DIR" + +COMMAND=${1:-help} +case "$COMMAND" in + build) + cargo build --workspace ;; + test) + cargo test --workspace ;; + check) + cargo check --workspace ;; + help|*) + echo "Usage: $0 {build|test|check}" >&2 + exit 1 ;; +esac diff --git a/templates/graph-runner/.gitkeep b/templates/graph-runner/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/templates/graph-runner/README.md b/templates/graph-runner/README.md new file mode 100644 index 0000000..959b167 --- /dev/null +++ b/templates/graph-runner/README.md @@ -0,0 +1,3 @@ +# Graph runner templates + +This directory is reserved for graph runner code generation templates used by the Rust workspace. Add renderer-specific template files here to drive code generation workflows.