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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
40 changes: 33 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,44 @@

## 0.4.0
- WASM
- [] machine fingerprinting v2

## 0.3.4
- upgrade pqcrypto https://github.com/rustpq/pqcrypto/issues/79
- [] upgrade pqcrypto https://github.com/rustpq/pqcrypto/issues/79
- [] RBAC integration with header
- [] RBAC enforcement from server. If shared, new version is pinned.
- [] diff versions
- [] bucket integration
- [] task review
- [] make sure config directory is in isolated location, like with key
- [] don't store "jacs_private_key_password": in config, don't display
- [] domain to header, and related verification
- [] refactor API so easier to use from higher level libraries - create agent, load agent, save document, create document, update document, sign
- more complete python implementation
- pass document string or document id - with optional version instead of string
- load document whatever storage config is
- function test output metadata about current config and current agent

## jacspy cleanup

## jacs-mcp 0.1.0

- [] integrate with server
- [] integration test with client
- [] https://github.com/modelcontextprotocol/specification/discussions

# COMPLETED

## jacs 0.3.3
- [x] change project to workspace
- [x] basic python integration
- [x] upgraded to edition = "2024" rust-version = "1.85"
- [x] separate public key location from private key location
- [x] cli review and tests
- [x] TEST init agent without needing configs in filesystem by checking that needed ENV variables are set

## 0.3.3
- [] MCP integration
- [] TEST init agent without needing configs in filesystem by checking that needed ENV variables are set
- [] separate public key location from private key location
- [] refactor API so easier to use from higher level libraries - create agent, load agent, save document, create document, update document


# COMPLETED

## 0.3.2
- [x] add common clause to Apache 2.0
Expand Down
117 changes: 10 additions & 107 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,115 +1,18 @@
[package]
name = "jacs"
version = "0.3.2"
edition = "2021"
include = [
"src/**/*",
"schemas/agent/v1/agent.schema.json",
"schemas/header/v1/header.schema.json",
"schemas/components/files/v1/files.schema.json",
"schemas/components/signature/v1/signature.schema.json",
"schemas/components/agreement/v1/agreement.schema.json",
"schemas/components/unit/v1/unit.schema.json",
"schemas/components/action/v1/action.schema.json",
"schemas/components/service/v1/service.schema.json",
"schemas/components/tool/v1/tool.schema.json",
"schemas/components/contact/v1/contact.schema.json",
"schemas/components/component/v1/component.schema.json",
"schemas/message/v1/message.schema.json",
"schemas/node/v1/node.schema.json",
"schemas/program/v1/program.schema.json",
"schemas/eval/v1/eval.schema.json",
"schemas/task/v1/task.schema.json",
"jacs.config.schema.json",
"examples/*.json",
"Cargo.toml",
"README.md",
"LICENSE",
"build.rs",
"CHANGELOG.md",
"basic-schemas.png",
"benches/sign_and_check_sig.rs",
"schemas/components/embedding/v1/embedding.schema.json",
[workspace]
members = [
"jacs",
# "mcp-server",
"jacspy"
]
description = "JACS JSON AI Communication Standard"
resolver = "3"
rust-version = "1.85"


readme = "README.md"
authors = ["HAI.AI <engineering@hai.io>"]
license = "Apache-2.0"
license = "Apache-2.0 with Common Clause v1.0"
homepage = "https://humanassisted.github.io/JACS"
repository = "https://github.com/HumanAssisted/JACS"
keywords = ["cryptography", "json", "ai", "data", "ml-ops"]
categories = ["cryptography", "text-processing", "data-structures" ]
build = "build.rs"


[dependencies]
base64 = "0.22.1"
chrono = "0.4.40"
jsonschema = { version = "0.29", features = ["resolve-http", "resolve-file"] }
log = "0.4.27"
pem = "3.0.5"
rand = "0.9.0"
rsa = { version= "0.9.8", features= ["sha2", "pem"]}
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
signature = "2.2.0"
url = "2.5.4"
sha2 = "0.10.8"
phf = { version = "0.11.3", features = ["macros"] }
strum = "0.27.1"
strum_macros = "0.27.0"
secrecy = "0.10.3"
aes-gcm = "0.10.3"
clap = "4.5.35"
regex = "1.11.1"
mime_guess = "2.0.5"
flate2 = "1.1.1"
encoding_rs = "0.8.35"
difference = "2.0.0"
rpassword = "7.3.1"
validator = "0.20.0"
uuid = { version = "1.16.0", features = ["v4", "v7", "js"] }
env_logger = "0.11.8"
futures-util = "0.3.31"
referencing = "0.29.1"
futures-executor = "0.3.31"
# libp2p = "0.55.0"
# [target.'cfg(target_os = "macos")'.dependencies]
# pqcrypto-mldsa = { version = "0.1", default-features = false, features = ["serialization"] }

# [target.'cfg(not(target_os = "macos"))'.dependencies]
# pqcrypto-mldsa = { version = "0.1", features = ["serialization"] }


[dev-dependencies]
color-eyre = "0.6"
criterion = "0.5.1"
mdbook = "0.4.48"


[lib]
crate-type = ["cdylib", "rlib"]

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
pqcrypto = "0.17.0"
pqcrypto-dilithium = {version = "0.5.0", features=["serialization"] }
pqcrypto-traits = "0.3.5"
ring = "0.17.9"
reqwest = { version ="0.12.12", features = ["blocking", "json"] }
walkdir = "2.5.0"
object_store = { version ="0.12.0", features = ["serde","serde_json", "aws", "http"] }

[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = "0.2.100"
web-sys = { version = "0.3", features = ["Storage", "Window"] }

[[bin]]
name = "jacs"
path = "src/bin/cli.rs"

[[bench]]
name = "sign_and_check_sig"
harness = false

[package.metadata.cargo-install]
bin = ["jacs"]
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
“Commons Clause” License Condition v1.0

Software: JACS
License: Apache 2.0
License: Apache 2.0 with Common Clause v1.0
Licensor: Human Assisted Intelligence, LLC
Link: https://commonsclause.com/

Expand Down
32 changes: 32 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
.PHONY: build-jacspy build-jacspy-mac build-jacspy-linux build-jacs test

build-jacspy: build-jacspy-mac build-jacspy-linux

build-jacspy-mac:
$(info PYTHON_INCLUDE: $(PYTHON_INCLUDE))
$(info PYTHON_LIB: $(PYTHON_LIB))
echo $(PYTHON_INCLUDE)
echo $(PYTHON_LIB)
cd jacspy && env PYTHON_INCLUDE=$(PYTHON_INCLUDE) PYTHON_LIB=$(PYTHON_LIB) cargo build --release
cp target/release/libjacspy.dylib jacspy/jacspy.so

build-jacspy-linux:
docker pull python:3.11-bookworm
docker buildx build --tag "jacs-build" -f ./jacspy/Dockerfile . ;\
docker run --rm -v "$(PWD)/jacspy/linux:/output" jacs-build cp /usr/src/jacspy/target/release/libjacspy.so /output/jacspy.so;

build-jacs:
cd jacs && cargo install --path . --force
/Users/jonathan.hendler/.cargo/bin/jacs --help
/Users/jonathan.hendler/.cargo/bin/jacs version

test-jacs:
cd jacs && RUST_BACKTRACE=1 cargo test -- --nocapture

test-jacspy:
cd jacspy && cargo test -- --nocapture

test: test-jacs test-jacspy
# --test agent_tests --test document_tests --test key_tests --test task_tests --test agreement_test --test create_agent_test


15 changes: 12 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,18 @@

Welcome to JACS (JSON Agent Communication Standard), a verifiable document format for AI agents.

JACS documents enable more trusted data sharing between AI agents and Human UIs.
JACS documents enable more trusted data sharing between AI agents and Human UIs.

** NOTE: Current version 0.3.2 *ALPHA* .
Usage modes are:

1. cli tool to bootstrap an agent or documents
2. Rust integration
3. Python integration
4. MCP server
5. TODO: npm module (typescript)


** NOTE: Current version 0.3.3 *ALPHA* .

JACS is a JSON document format for creating secure, verifiable documents that AI agents, ML pipelines, SaaS services, and UIs can exchange and process. The goal of JACS is to ensure that these documents remain unchanged (immutable), produce the same verification result every time (idempotent), and can be used flexibly by software.

Expand Down Expand Up @@ -75,4 +84,4 @@ For development you may want `cargo install cargo-outdated` and `cargo instal
Then start reading the [usage docs](https://humanassisted.github.io/JACS/)

------
2024 https://hai.ai
2024, 2025 https://hai.ai
1 change: 0 additions & 1 deletion docs/jacsbook/book/searchindex.js

This file was deleted.

1 change: 0 additions & 1 deletion docs/jacsbook/book/searchindex.json

This file was deleted.

6 changes: 6 additions & 0 deletions jacs-mcp/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[package]
name = "jacs-mcp"
version = "0.1.0"
edition = "2024"

[dependencies]
3 changes: 3 additions & 0 deletions jacs-mcp/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}
19 changes: 19 additions & 0 deletions jacs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Cargo
# will have compiled files and executables
debug/
target/
.idea

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk

# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb

jacs.config.json
.DS_Store
tests/fixtures/documents/*
Loading