Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.9.11

(unreleased)

## 0.9.10

(unreleased)
Expand Down
4 changes: 2 additions & 2 deletions binding-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jacs-binding-core"
version = "0.9.10"
version = "0.9.11"
edition = "2024"
rust-version = "1.93"
resolver = "3"
Expand All @@ -19,7 +19,7 @@ attestation = ["jacs/attestation"]
pq-tests = []

[dependencies]
jacs = { version = "0.9.10", path = "../jacs" }
jacs = { version = "0.9.11", path = "../jacs" }
serde_json = "1.0"
base64 = "0.22.1"
serde = { version = "1.0", features = ["derive"] }
Expand Down
6 changes: 3 additions & 3 deletions jacs-cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jacs-cli"
version = "0.9.10"
version = "0.9.11"
edition = "2024"
rust-version = "1.93"
description = "JACS CLI: command-line interface for JSON AI Communication Standard"
Expand All @@ -23,8 +23,8 @@ attestation = ["jacs/attestation"]
keychain = ["jacs/keychain"]

[dependencies]
jacs = { version = "0.9.10", path = "../jacs" }
jacs-mcp = { version = "0.9.10", path = "../jacs-mcp", features = ["mcp", "full-tools"], optional = true }
jacs = { version = "0.9.11", path = "../jacs" }
jacs-mcp = { version = "0.9.11", path = "../jacs-mcp", features = ["mcp", "full-tools"], optional = true }
clap = { version = "4.5.4", features = ["derive", "cargo"] }
rpassword = "7.3.1"
reqwest = { version = "0.13.2", default-features = false, features = ["blocking", "json", "rustls"] }
Expand Down
4 changes: 2 additions & 2 deletions jacs-duckdb/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jacs-duckdb"
version = "0.1.4"
version = "0.1.5"
edition = "2024"
rust-version.workspace = true
description = "DuckDB storage backend for JACS documents"
Expand All @@ -13,7 +13,7 @@ keywords = ["cryptography", "json", "duckdb", "storage"]
categories = ["database", "data-structures"]

[dependencies]
jacs = { version = "0.9.10", path = "../jacs", default-features = false }
jacs = { version = "0.9.11", path = "../jacs", default-features = false }
duckdb = { version = "1.4", features = ["bundled", "json"] }
serde_json = "1.0"

Expand Down
6 changes: 3 additions & 3 deletions jacs-mcp/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jacs-mcp"
version = "0.9.10"
version = "0.9.11"
edition = "2024"
rust-version = "1.93"
description = "MCP server for JACS: data provenance and cryptographic signing of agent state"
Expand Down Expand Up @@ -45,8 +45,8 @@ tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }
rmcp = { version = "0.12", features = ["client", "server", "transport-io", "transport-child-process", "macros"], optional = true }
tokio = { version = "1", features = ["rt-multi-thread", "macros", "process", "time"], optional = true }
jacs = { version = "0.9.10", path = "../jacs", default-features = true }
jacs-binding-core = { version = "0.9.10", path = "../binding-core", features = ["a2a"] }
jacs = { version = "0.9.11", path = "../jacs", default-features = true }
jacs-binding-core = { version = "0.9.11", path = "../binding-core", features = ["a2a"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
schemars = "1.0"
Expand Down
2 changes: 1 addition & 1 deletion jacs-mcp/contract/jacs-mcp-contract.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"server": {
"name": "jacs-mcp",
"title": "JACS MCP Server",
"version": "0.9.10",
"version": "0.9.11",
"website_url": "https://humanassisted.github.io/JACS/",
"instructions": "This MCP server provides data provenance and cryptographic signing for agent state files and agent-to-agent messaging. Agent state tools: jacs_sign_state (sign files), jacs_verify_state (verify integrity), jacs_load_state (load with verification), jacs_update_state (update and re-sign), jacs_list_state (list signed docs), jacs_adopt_state (adopt external files). Memory tools: jacs_memory_save (save a memory), jacs_memory_recall (search memories by query), jacs_memory_list (list all memories), jacs_memory_forget (soft-delete a memory), jacs_memory_update (update an existing memory). Messaging tools: jacs_message_send (create and sign a message), jacs_message_update (update and re-sign a message), jacs_message_agree (co-sign/agree to a message), jacs_message_receive (verify and extract a received message). Agent management: jacs_create_agent (create new agent with keys), jacs_reencrypt_key (rotate private key password). A2A artifacts: jacs_wrap_a2a_artifact (sign artifact with provenance), jacs_verify_a2a_artifact (verify wrapped artifact), jacs_assess_a2a_agent (assess remote agent trust level). A2A discovery: jacs_export_agent_card (export Agent Card), jacs_generate_well_known (generate .well-known documents), jacs_export_agent (export full agent JSON). Trust store: jacs_trust_agent (add agent to trust store), jacs_untrust_agent (remove from trust store, requires JACS_MCP_ALLOW_UNTRUST=true), jacs_list_trusted_agents (list all trusted agent IDs), jacs_is_trusted (check if agent is trusted), jacs_get_trusted_agent (get trusted agent JSON). Attestation: jacs_attest_create (create signed attestation with claims), jacs_attest_verify (verify attestation, optionally with evidence checks), jacs_attest_lift (lift signed document into attestation), jacs_attest_export_dsse (export attestation as DSSE envelope). Security: jacs_audit (read-only security audit and health checks). Audit trail: jacs_audit_log (record events as signed audit entries), jacs_audit_query (search audit trail by action, target, time range), jacs_audit_export (export audit trail as signed bundle). Search: jacs_search (unified search across all signed documents)."
},
Expand Down
82 changes: 54 additions & 28 deletions jacs-mcp/src/jacs_tools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4170,35 +4170,61 @@ mod tests {
"tools() count should match total_tool_count()"
);

// Core tools are always present (core-tools is in default features)
assert!(names.contains(&"jacs_sign_state"));
assert!(names.contains(&"jacs_verify_state"));
assert!(names.contains(&"jacs_load_state"));
assert!(names.contains(&"jacs_update_state"));
assert!(names.contains(&"jacs_list_state"));
assert!(names.contains(&"jacs_adopt_state"));
assert!(names.contains(&"jacs_create_agent"));
assert!(names.contains(&"jacs_reencrypt_key"));
assert!(names.contains(&"jacs_audit"));
assert!(names.contains(&"jacs_audit_log"));
assert!(names.contains(&"jacs_audit_query"));
assert!(names.contains(&"jacs_audit_export"));
// Core tool families — present when their feature flag is enabled
// (all included via core-tools in default features)
#[cfg(feature = "state-tools")]
{
assert!(names.contains(&"jacs_sign_state"));
assert!(names.contains(&"jacs_verify_state"));
assert!(names.contains(&"jacs_load_state"));
assert!(names.contains(&"jacs_update_state"));
assert!(names.contains(&"jacs_list_state"));
assert!(names.contains(&"jacs_adopt_state"));
}

#[cfg(feature = "document-tools")]
{
assert!(names.contains(&"jacs_create_agent"));
assert!(names.contains(&"jacs_sign_document"));
assert!(names.contains(&"jacs_verify_document"));
}

#[cfg(feature = "key-tools")]
{
assert!(names.contains(&"jacs_reencrypt_key"));
assert!(names.contains(&"jacs_export_agent_card"));
assert!(names.contains(&"jacs_generate_well_known"));
assert!(names.contains(&"jacs_export_agent"));
}

#[cfg(feature = "audit-tools")]
{
assert!(names.contains(&"jacs_audit"));
assert!(names.contains(&"jacs_audit_log"));
assert!(names.contains(&"jacs_audit_query"));
assert!(names.contains(&"jacs_audit_export"));
}

#[cfg(feature = "search-tools")]
assert!(names.contains(&"jacs_search"));
assert!(names.contains(&"jacs_sign_document"));
assert!(names.contains(&"jacs_verify_document"));
assert!(names.contains(&"jacs_export_agent_card"));
assert!(names.contains(&"jacs_generate_well_known"));
assert!(names.contains(&"jacs_export_agent"));
assert!(names.contains(&"jacs_trust_agent"));
assert!(names.contains(&"jacs_untrust_agent"));
assert!(names.contains(&"jacs_list_trusted_agents"));
assert!(names.contains(&"jacs_is_trusted"));
assert!(names.contains(&"jacs_get_trusted_agent"));
assert!(names.contains(&"jacs_memory_save"));
assert!(names.contains(&"jacs_memory_recall"));
assert!(names.contains(&"jacs_memory_list"));
assert!(names.contains(&"jacs_memory_forget"));
assert!(names.contains(&"jacs_memory_update"));

#[cfg(feature = "trust-tools")]
{
assert!(names.contains(&"jacs_trust_agent"));
assert!(names.contains(&"jacs_untrust_agent"));
assert!(names.contains(&"jacs_list_trusted_agents"));
assert!(names.contains(&"jacs_is_trusted"));
assert!(names.contains(&"jacs_get_trusted_agent"));
}

#[cfg(feature = "memory-tools")]
{
assert!(names.contains(&"jacs_memory_save"));
assert!(names.contains(&"jacs_memory_recall"));
assert!(names.contains(&"jacs_memory_list"));
assert!(names.contains(&"jacs_memory_forget"));
assert!(names.contains(&"jacs_memory_update"));
}

// Advanced tools conditionally present based on feature flags
#[cfg(feature = "messaging-tools")]
Expand Down
8 changes: 4 additions & 4 deletions jacs-postgresql/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jacs-postgresql"
version = "0.1.4"
version = "0.1.5"
edition = "2024"
rust-version.workspace = true
description = "PostgreSQL storage backend for JACS documents"
Expand All @@ -13,15 +13,15 @@ keywords = ["cryptography", "json", "postgresql", "storage"]
categories = ["database", "data-structures"]

[dependencies]
jacs = { version = "0.9.10", path = "../jacs", default-features = false }
jacs = { version = "0.9.11", path = "../jacs", default-features = false }
sqlx = { version = "0.8.6", default-features = false, features = ["runtime-tokio-rustls", "postgres"] }
tokio = { version = "1.0", features = ["rt-multi-thread"] }
serde_json = "1.0"
tracing = "0.1"

[dev-dependencies]
serial_test = "3.2.0"
testcontainers = "0.26"
testcontainers-modules = { version = "0.14", features = ["postgres"] }
testcontainers = "0.27"
testcontainers-modules = { version = "0.15", features = ["postgres"] }
tokio = { version = "1.0", features = ["rt-multi-thread", "macros", "time"] }
serde_json = "1.0"
4 changes: 2 additions & 2 deletions jacs-redb/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jacs-redb"
version = "0.1.4"
version = "0.1.5"
edition = "2024"
rust-version.workspace = true
readme.workspace = true
Expand All @@ -13,7 +13,7 @@ categories.workspace = true
description = "Redb (pure-Rust embedded KV) storage backend for JACS documents"

[dependencies]
jacs = { version = "0.9.10", path = "../jacs", default-features = false }
jacs = { version = "0.9.11", path = "../jacs", default-features = false }
redb = "3.1"
chrono = "0.4.40"
serde_json = "1.0"
Expand Down
4 changes: 2 additions & 2 deletions jacs-surrealdb/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jacs-surrealdb"
version = "0.1.4"
version = "0.1.5"
edition = "2024"
rust-version.workspace = true
description = "SurrealDB storage backend for JACS documents"
Expand All @@ -13,7 +13,7 @@ keywords = ["cryptography", "json", "surrealdb", "storage"]
categories = ["database", "data-structures"]

[dependencies]
jacs = { version = "0.9.10", path = "../jacs", default-features = false }
jacs = { version = "0.9.11", path = "../jacs", default-features = false }
surrealdb = { version = "3.0.2", default-features = false, features = ["kv-mem"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
Expand Down
6 changes: 3 additions & 3 deletions jacs/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jacs"
version = "0.9.10"
version = "0.9.11"
edition = "2024"
rust-version = "1.93"
resolver = "3"
Expand Down Expand Up @@ -128,8 +128,8 @@ tempfile = "3.19.1"
serial_test = "3.2.0"
futures = "0.3"
tokio = { version = "1.0", features = ["rt-multi-thread", "macros", "time"] }
testcontainers = "0.26"
testcontainers-modules = { version = "0.14", features = ["minio"] }
testcontainers = "0.27"
testcontainers-modules = { version = "0.15", features = ["minio"] }
reqwest = { version = "0.13.2", default-features = false, features = ["rustls"] }

[lib]
Expand Down
Loading
Loading