Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
475c04a
ws examples
Hendler Feb 11, 2026
f42ac84
48 tasks completed across 10 phases (Phase 2.10 deferred as planned):
Hendler Feb 12, 2026
aca42cf
Here's the final scorecard:
Hendler Feb 12, 2026
2fcffbe
cleanup
Hendler Feb 12, 2026
4c04a8c
cleanup
Hendler Feb 12, 2026
584847a
educed hot-path cloning in Rust signing/verification:
Hendler Feb 17, 2026
dff0fc3
key change
Hendler Feb 17, 2026
1ad6a92
security update, see changelog
Hendler Feb 17, 2026
d98b0ef
Implemented both requested tracks.
Hendler Feb 17, 2026
2e0905d
changelog
Hendler Feb 18, 2026
4f9b578
---
Hendler Feb 18, 2026
28a08d5
doc cleanup
Hendler Feb 18, 2026
41eb122
JACS HAI Cleanup — Complete
Hendler Feb 18, 2026
022e248
verified-registry is implemented in runtime but not allowed by the ag…
Hendler Feb 18, 2026
ada8827
fixes
Hendler Feb 18, 2026
1f3d7fb
ignore
Hendler Feb 18, 2026
361ab48
http fixes
Hendler Feb 18, 2026
ec0440d
Enforced verification for parsed object bodies in Express/Koa middlew…
Hendler Feb 18, 2026
df1c319
docs
Hendler Feb 19, 2026
72b464e
security
Hendler Feb 19, 2026
93d0161
security checks
Hendler Feb 19, 2026
bef34ae
test
Hendler Feb 19, 2026
00a60e3
different workflow for tests
Hendler Feb 19, 2026
db05cfa
npm tests
Hendler Feb 19, 2026
6e5fed8
cleanup
Hendler Feb 19, 2026
2cf8ad1
plan updated
Hendler Feb 19, 2026
6f04d2c
security issues
Hendler Feb 19, 2026
ec9cf62
more security
Hendler Feb 19, 2026
f12cd9b
added storage tests, more security
Hendler Feb 20, 2026
7f58b35
tests
Hendler Feb 20, 2026
93d5681
security
Hendler Feb 20, 2026
e9a563a
more dbs
Hendler Feb 20, 2026
6f8b5c2
storage option
Hendler Feb 20, 2026
ef4543b
home brow, other install options
Hendler Feb 20, 2026
0ffc283
rename
Hendler Feb 22, 2026
c9217d3
cli install
Hendler Feb 25, 2026
650f216
Worked for 7m 39s
Hendler Feb 25, 2026
5f0c91d
mcp tests
Hendler Feb 25, 2026
5937fe5
import path
Hendler Feb 25, 2026
e79871f
book
Hendler Feb 25, 2026
85f8405
update docs
Hendler Feb 25, 2026
1b7cc3b
lots of fixes for quickstart, proper algo defaults
Hendler Feb 26, 2026
1fa65a5
test fixtures
Hendler Feb 27, 2026
099f294
name
Hendler Feb 28, 2026
4615997
email signature attachment
Hendler Mar 1, 2026
125b75d
Execution Summary: Email Signing Issues
Hendler Mar 1, 2026
6347c9c
Task #16 — Chain validity gates overall message validity (verify.rs)
Hendler Mar 1, 2026
0b23431
email sig ntests
Hendler Mar 1, 2026
b270e2b
fix
Hendler Mar 1, 2026
4b5cac7
test fixes
Hendler Mar 1, 2026
b47f436
email
Hendler Mar 1, 2026
5da9ab5
email
Hendler Mar 1, 2026
59a0d9a
docs
Hendler Mar 1, 2026
a4da1df
standards
Hendler Mar 1, 2026
5fcee0c
JACS library (~/personal/JACS) — 5 files:
Hendler Mar 1, 2026
f84a33a
clean up email verification
Hendler Mar 2, 2026
6323a02
test enhancements
Hendler Mar 2, 2026
315c359
better and better email
Hendler Mar 2, 2026
347edab
ignore
Hendler Mar 2, 2026
9417cf9
book
Hendler Mar 2, 2026
deca8d7
cleanup
Hendler Mar 2, 2026
12b79c8
workflow
Hendler Mar 2, 2026
2e3917a
key rotation
Hendler Mar 2, 2026
6a337cb
more secure path/document usage
Hendler Mar 2, 2026
0b08336
rests
Hendler Mar 2, 2026
23d87c9
tests
Hendler Mar 3, 2026
c5b8e93
enc ideas
Hendler Mar 3, 2026
bdb2c1d
notes
Hendler Mar 3, 2026
60e9ae2
more planning
Hendler Mar 3, 2026
ea3a07d
filepath security
Hendler Mar 3, 2026
c71ddd1
upgrades
Hendler Mar 4, 2026
f036622
plan
Hendler Mar 4, 2026
cd227bb
upgrade
Hendler Mar 4, 2026
f6cfa63
some conflict
Hendler Mar 5, 2026
2a457d5
attestation
Hendler Mar 5, 2026
e50275c
a2a trust
Hendler Mar 5, 2026
033c972
fixing a2a setup
Hendler Mar 5, 2026
a948ffc
attestation fixes
Hendler Mar 5, 2026
f625e01
P0 — TrustLevel snake_case serialization
Hendler Mar 5, 2026
3c601f7
┌──────┬────────────────────────────────────────────────────────────…
Hendler Mar 5, 2026
d2a32b8
│ TASK_024 (docs deprecation) │ COMPLETED — Python API ref, Node A…
Hendler Mar 5, 2026
c0bab88
Rust A2A delegation — fixed broken verify, trust levels
Hendler Mar 5, 2026
41ea2a5
doc cleanup
Hendler Mar 5, 2026
a1ea624
dry
Hendler Mar 5, 2026
273e1b5
cleanup docs and clients
Hendler Mar 5, 2026
55aefbc
a2a
Hendler Mar 6, 2026
ed13e76
cleanup
Hendler Mar 6, 2026
fb29ca3
tests
Hendler Mar 6, 2026
1538221
fix
Hendler Mar 6, 2026
6e4bc9f
fix homebrew
Hendler Mar 6, 2026
bba7e7b
jacs tests
Hendler Mar 6, 2026
0a2b9db
tests
Hendler Mar 6, 2026
e423ad8
fix: remove duplicate --locked flag from Homebrew formula
Hendler Mar 6, 2026
b525998
tests
Hendler Mar 6, 2026
f306fa9
fix: homebrew smoke test - remove mcp subcommand check, soft-fail haisdk
Hendler Mar 6, 2026
40a6a9f
fix go
Hendler Mar 6, 2026
4a38223
mcp work
Hendler Mar 6, 2026
e4c7b65
fmt
Hendler Mar 6, 2026
0533d31
clit tests
Hendler Mar 6, 2026
40e2d84
rust mcp as a lib
Hendler Mar 6, 2026
4db4b6d
more jacs integrations
Hendler Mar 6, 2026
ed2936c
DRYer mcp
Hendler Mar 6, 2026
41cff22
mcp tests
Hendler Mar 6, 2026
98a7801
CI
Hendler Mar 6, 2026
70e03f2
mcp tests
Hendler Mar 6, 2026
1484bf5
documents on mcp
Hendler Mar 6, 2026
4f2a178
remove failing dep
Hendler Mar 6, 2026
9b61e04
fix
Hendler Mar 6, 2026
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
  •  
  •  
  •  
26 changes: 26 additions & 0 deletions .github/homebrew-templates/haisdk.rb.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class Haisdk < Formula
include Language::Python::Virtualenv

desc "HAI SDK CLI for JACS registration and attestation workflows"
homepage "https://github.com/HumanAssisted/haisdk"
url "__HAISDK_SDIST_URL__"
sha256 "__HAISDK_SHA256__"
license "MIT"

depends_on "python@3.12"
depends_on "httpx"
depends_on "cryptography"
depends_on "jacs"

def install
python = Formula["python@3.12"].opt_bin/"python3.12"
venv = virtualenv_create(libexec, python, system_site_packages: true)
venv.pip_install buildpath
bin.install_symlink libexec/"bin/haisdk"
end

test do
assert_match "HAI SDK CLI", shell_output("#{bin}/haisdk --help")
assert_match "jacs version:", shell_output("#{Formula["jacs"].opt_bin}/jacs version")
end
end
18 changes: 18 additions & 0 deletions .github/homebrew-templates/jacs.rb.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
class Jacs < Formula
desc "JSON Agent Communication Standard command-line interface"
homepage "https://github.com/HumanAssisted/JACS"
url "https://crates.io/api/v1/crates/jacs/__JACS_VERSION__/download"
sha256 "__JACS_SHA256__"
license "Apache-2.0"

depends_on "rust" => :build

def install
system "cargo", "install", *std_cargo_args(path: "."), "--features", "cli"
end

test do
assert_match "jacs version: #{version}", shell_output("#{bin}/jacs version")
assert_match "Usage: jacs [COMMAND]", shell_output("#{bin}/jacs --help")
end
end
70 changes: 70 additions & 0 deletions .github/workflows/components.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Workspace Components (jacs-mcp, jacsgo)

on:
push:
branches: ["main"]
paths:
- "jacs-mcp/**"
- "jacsgo/**"
- "jacs/**"
- "binding-core/**"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/components.yml"
pull_request:
branches: ["main"]
paths:
- "jacs-mcp/**"
- "jacsgo/**"
- "jacs/**"
- "binding-core/**"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/components.yml"
workflow_dispatch:

env:
CARGO_TERM_COLOR: always

jobs:
test-jacs-mcp:
name: Test jacs-mcp
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.93"

- name: Run jacs-mcp tests
run: cargo test -p jacs-mcp --verbose

test-jacsgo:
name: Test jacsgo
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.93"

- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.21"

- name: Run jacsgo tests
working-directory: jacsgo
run: GOCACHE=/tmp/jacs-go-cache make test

- name: Build jacsgo examples
working-directory: jacsgo
run: GOCACHE=/tmp/jacs-go-cache make examples
70 changes: 70 additions & 0 deletions .github/workflows/homebrew.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Homebrew Install Smoke Tests

on:
push:
branches: ["main"]
pull_request:
workflow_dispatch:

jobs:
macos-brew-install:
runs-on: macos-latest
env:
HOMEBREW_NO_AUTO_UPDATE: "1"
steps:
- uses: actions/checkout@v4

- name: Build local JACS formula from current checkout
run: |
set -euo pipefail
version="$(grep '^version = ' jacs/Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')"
archive="$RUNNER_TEMP/jacs-homebrew-src.tar.gz"
formula="$RUNNER_TEMP/jacs.rb"
git archive --format=tar.gz --output "$archive" HEAD
sha256="$(shasum -a 256 "$archive" | awk '{print $1}')"
cat > "$formula" <<EOF
class Jacs < Formula
desc "JSON Agent Communication Standard command-line interface"
homepage "https://github.com/HumanAssisted/JACS"
url "file://$archive"
version "$version"
sha256 "$sha256"
license "Apache-2.0"

depends_on "rust" => :build

def install
system "cargo", "install", *std_cargo_args(path: "jacs"), "--features", "cli"
end

test do
assert_match "jacs version: #{version}", shell_output("#{bin}/jacs version")
assert_match "Usage: jacs [COMMAND]", shell_output("#{bin}/jacs --help")
end
end
EOF

- name: Set up local Homebrew tap
run: |
tap_dir="$(brew --repository)/Library/Taps/humanassisted/homebrew-jacs"
mkdir -p "$tap_dir/Formula"
cp "$RUNNER_TEMP/jacs.rb" "$tap_dir/Formula/jacs.rb"
cp ./Formula/haisdk.rb "$tap_dir/Formula/"

- name: Install JACS formula
run: brew install humanassisted/jacs/jacs

- name: Smoke test JACS CLI
run: |
jacs version
jacs --help

- name: Install HAISDK formula (HEAD)
continue-on-error: true
run: brew install --HEAD humanassisted/jacs/haisdk

- name: Smoke test HAISDK CLI
continue-on-error: true
run: |
haisdk --help
haisdk register --help
22 changes: 16 additions & 6 deletions .github/workflows/nodejs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ name: Node.js (jacsnpm)

on:
push:
branches: [ "main" ]
branches: [ "master" ]
paths:
- 'jacsnpm/**'
- 'jacs/**' # jacsnpm depends on jacs
- 'binding-core/**' # jacsnpm verifyStandalone depends on binding-core
- '.github/workflows/nodejs.yml'
pull_request:
branches: [ "main" ]
branches: [ "master" ]
paths:
- 'jacsnpm/**'
- 'jacs/**' # jacsnpm depends on jacs
Expand Down Expand Up @@ -60,12 +60,22 @@ jobs:
JACS_DATA_DIRECTORY: /tmp/does-not-exist
JACS_KEY_DIRECTORY: /tmp/does-not-exist
JACS_DEFAULT_STORAGE: memory
JACS_KEY_RESOLUTION: hai
JACS_KEY_RESOLUTION: local
run: npm run test:cross-language

- name: Run tests
- name: Run tests (parallel, excluding cross-language already covered above)
working-directory: jacsnpm
run: npm test
run: npm run test:ci

- name: Smoke test quickstart example
working-directory: jacsnpm
env:
JACS_PRIVATE_KEY_PASSWORD: TestP@ss123!#
run: |
set -euo pipefail
TMP_EXAMPLE_DIR=$(mktemp -d)
cd "${TMP_EXAMPLE_DIR}"
node "${GITHUB_WORKSPACE}/jacsnpm/examples/quickstart.js"

- name: Smoke test packed npm install
working-directory: jacsnpm
Expand All @@ -76,4 +86,4 @@ jobs:
cd /tmp/jacs-npm-smoke
npm init -y >/dev/null
npm install "${GITHUB_WORKSPACE}/jacsnpm/${PACKAGE_TGZ}" --ignore-scripts
node -e "require('@hai.ai/jacs'); require('@hai.ai/jacs/simple'); require('@hai.ai/jacs/mcp'); require('@hai.ai/jacs/a2a'); console.log('smoke imports ok')"
node -e "require('jacs'); require('jacs/simple'); require('jacs/mcp'); require('jacs/a2a'); console.log('smoke imports ok')"
9 changes: 4 additions & 5 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Python (jacs)

on:
push:
branches: [ "main" ]
branches: [ "master" ]
pull_request:
branches: [ "main" ]
branches: [ "master" ]
workflow_dispatch: # Allows manual triggering

env:
Expand Down Expand Up @@ -39,9 +39,9 @@ jobs:
cd /workspace/jacspy && \
/opt/python/cp311-cp311/bin/python3.11 -m venv .venv && \
source .venv/bin/activate && \
pip install maturin pytest pytest-asyncio && \
pip install maturin pytest pytest-asyncio pytest-xdist && \
pip install fastmcp mcp starlette && \
make test-python"
PYTEST_XDIST_WORKERS=4 make test-python-parallel"

- name: Verify sdist build on PR/push
working-directory: jacspy
Expand Down Expand Up @@ -91,7 +91,6 @@ jobs:
/tmp/jacs-wheel-smoke/bin/python - <<'PY'
import jacs
import jacs.simple
import jacs.hai
print("wheel smoke imports ok")
PY

Expand Down
Loading
Loading