Skip to content

Commit 273e1b5

Browse files
committed
cleanup docs and clients
1 parent a1ea624 commit 273e1b5

File tree

27 files changed

+317
-63
lines changed

27 files changed

+317
-63
lines changed

USECASES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ This document describes fictional but detailed scenarios for using JACS. Each se
5656
1. **Create a JACS agent.** Locally create and configure the agent (e.g. `jacs init` or Python/Node/Go `create`/`load`). Ensure you have the agent’s public key and identity (e.g. agent ID, public key hash).
5757
2. **Get an HAI API key.** Obtain an API key from HAI.ai (e.g. https://hai.ai or https://hai.ai/developers). Set `HAI_API_KEY` in the environment or pass it to the registration call.
5858
3. **Register the agent.** Use the HAI registration flow:
59+
60+
> **Note:** The registration functions below (`register_with_hai`, `registerWithHai`, etc.) are provided by the separate [haisdk](https://github.com/HumanAssisted/haisdk) package, not by the core `jacs` library. Install `haisdk` alongside `jacs` for HAI platform workflows.
61+
5962
- **Python:** Use the `register_with_hai` example or `register_new_agent()` from `jacs.hai` (see `jacspy/examples/register_with_hai.py` and `jacspy/examples/hai_quickstart.py`). Quick path: `hai_quickstart.py` can create and register in one step.
6063
- **Node:** `registerWithHai()` (jacsnpm).
6164
- **Go:** `RegisterWithHai()` (jacsgo).

docs/jacsbook.pdf

9.07 KB
Binary file not shown.

jacs/docs/jacsbook/book/advanced/storage.html

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,12 @@ <h2 id="available-backends"><a class="header" href="#available-backends">Availab
180180
<div class="table-wrapper"><table><thead><tr><th>Backend</th><th>Config Value</th><th>Description</th></tr></thead><tbody>
181181
<tr><td>Filesystem</td><td><code>fs</code></td><td>Local file storage (default)</td></tr>
182182
<tr><td>AWS S3</td><td><code>aws</code></td><td>Amazon S3 object storage</td></tr>
183-
<tr><td>HAI Cloud</td><td><code>hai</code></td><td>HAI managed storage</td></tr>
183+
<tr><td>HAI Cloud</td><td><code>hai</code></td><td>HTTP object store via <code>HAI_STORAGE_URL</code></td></tr>
184184
<tr><td>PostgreSQL</td><td><code>database</code></td><td>PostgreSQL with JSONB queries (requires <code>database</code> feature)</td></tr>
185+
<tr><td>Rusqlite</td><td><code>rusqlite</code></td><td>Embedded SQLite (requires <code>rusqlite-storage</code> feature)</td></tr>
186+
<tr><td>DuckDB</td><td><code>duckdb</code></td><td>Embedded analytical DB (requires <code>duckdb-storage</code> feature)</td></tr>
187+
<tr><td>Redb</td><td><code>redb</code></td><td>Pure-Rust embedded KV (requires <code>redb-storage</code> feature)</td></tr>
188+
<tr><td>SurrealDB</td><td><code>surrealdb</code></td><td>Multi-model DB with SurrealQL (requires <code>surrealdb-storage</code> feature)</td></tr>
185189
</tbody></table>
186190
</div>
187191
<h2 id="configuration"><a class="header" href="#configuration">Configuration</a></h2>
@@ -329,25 +333,19 @@ <h3 id="example-1"><a class="header" href="#example-1">Example</a></h3>
329333
}))
330334
</code></pre>
331335
<h2 id="hai-cloud-storage-hai"><a class="header" href="#hai-cloud-storage-hai">HAI Cloud Storage (hai)</a></h2>
332-
<p>Managed storage provided by HAI.</p>
336+
<p>HTTP object store pointed at <code>HAI_STORAGE_URL</code>. This backend uses <code>object_store::http::HttpStore</code> under the hood — it is a generic HTTP store, not a managed platform.</p>
337+
<p>For HAI platform registration, attestation, and key discovery, use the separate <a href="https://github.com/HumanAssisted/haisdk">haisdk</a> package.</p>
333338
<h3 id="configuration-3"><a class="header" href="#configuration-3">Configuration</a></h3>
334339
<pre><code class="language-json">{
335340
"jacs_default_storage": "hai"
336341
}
337342
</code></pre>
338-
<h3 id="features"><a class="header" href="#features">Features</a></h3>
339-
<ul>
340-
<li>Managed infrastructure</li>
341-
<li>Built-in agent registry</li>
342-
<li>Cross-organization document sharing</li>
343-
<li>Integrated DNS verification</li>
344-
</ul>
343+
<pre><code class="language-bash">export HAI_STORAGE_URL="https://storage.hai.ai/v1"
344+
</code></pre>
345345
<h3 id="use-cases-2"><a class="header" href="#use-cases-2">Use Cases</a></h3>
346346
<ul>
347-
<li>Multi-agent ecosystems</li>
348-
<li>Cross-organization collaboration</li>
349-
<li>Managed deployments</li>
350-
<li>Integration with HAI services</li>
347+
<li>Remote document storage via HTTP</li>
348+
<li>Integration with HAI storage endpoints</li>
351349
</ul>
352350
<h2 id="postgresql-database-storage-database"><a class="header" href="#postgresql-database-storage-database">PostgreSQL Database Storage (database)</a></h2>
353351
<p>The <code>database</code> storage backend stores JACS documents in PostgreSQL, enabling JSONB queries, pagination, and agent-based lookups while preserving cryptographic signatures.</p>
@@ -447,6 +445,32 @@ <h3 id="considerations-2"><a class="header" href="#considerations-2">Considerati
447445
<li>Compile-time feature flag (<code>database</code>)</li>
448446
<li>Network dependency on PostgreSQL server</li>
449447
</ul>
448+
<h2 id="embedded-database-backends"><a class="header" href="#embedded-database-backends">Embedded Database Backends</a></h2>
449+
<p>Four lightweight embedded database backends are available behind feature flags. None require an external server.</p>
450+
<h3 id="rusqlite-rusqlite-storage"><a class="header" href="#rusqlite-rusqlite-storage">Rusqlite (<code>rusqlite-storage</code>)</a></h3>
451+
<p>Embedded SQLite via rusqlite with WAL mode enabled. Pinned to rusqlite v0.31.</p>
452+
<pre><code class="language-bash">cargo build --features rusqlite-storage
453+
cargo test --features rusqlite-storage-tests
454+
</code></pre>
455+
<p><strong>When to use:</strong> You want SQL queries on a single-file database with no external dependencies.</p>
456+
<h3 id="duckdb-duckdb-storage"><a class="header" href="#duckdb-duckdb-storage">DuckDB (<code>duckdb-storage</code>)</a></h3>
457+
<p>Embedded analytical database with JSON path queries.</p>
458+
<pre><code class="language-bash">cargo build --features duckdb-storage
459+
cargo test --features duckdb-storage-tests
460+
</code></pre>
461+
<p><strong>When to use:</strong> You need analytical queries or columnar storage over signed documents.</p>
462+
<h3 id="redb-redb-storage"><a class="header" href="#redb-redb-storage">Redb (<code>redb-storage</code>)</a></h3>
463+
<p>Pure-Rust embedded key-value store. No C dependencies.</p>
464+
<pre><code class="language-bash">cargo build --features redb-storage
465+
cargo test --features redb-storage-tests
466+
</code></pre>
467+
<p><strong>When to use:</strong> You want the simplest embedded backend with zero non-Rust dependencies.</p>
468+
<h3 id="surrealdb-surrealdb-storage"><a class="header" href="#surrealdb-surrealdb-storage">SurrealDB (<code>surrealdb-storage</code>)</a></h3>
469+
<p>Multi-model database with SurrealQL. Uses <code>kv-mem</code> for in-memory mode.</p>
470+
<pre><code class="language-bash">cargo build --features surrealdb-storage
471+
cargo test --features surrealdb-storage-tests
472+
</code></pre>
473+
<p><strong>When to use:</strong> You want a multi-model query language or plan to scale to a SurrealDB cluster later.</p>
450474
<h2 id="in-memory-storage"><a class="header" href="#in-memory-storage">In-Memory Storage</a></h2>
451475
<p>For testing and temporary operations, documents can be created without saving:</p>
452476
<pre><code class="language-python"># Create document without saving
@@ -471,6 +495,10 @@ <h2 id="storage-selection-guide"><a class="header" href="#storage-selection-guid
471495
<tr><td>Cloud deployment</td><td><code>aws</code></td></tr>
472496
<tr><td>High availability</td><td><code>aws</code></td></tr>
473497
<tr><td>Multi-organization</td><td><code>hai</code></td></tr>
498+
<tr><td>Embedded SQL queries</td><td><code>rusqlite</code></td></tr>
499+
<tr><td>Analytical queries</td><td><code>duckdb</code></td></tr>
500+
<tr><td>Zero C-dep embedded KV</td><td><code>redb</code></td></tr>
501+
<tr><td>Multi-model queries</td><td><code>surrealdb</code></td></tr>
474502
<tr><td>Testing</td><td>In-memory (no_save)</td></tr>
475503
</tbody></table>
476504
</div>

jacs/docs/jacsbook/book/integrations/a2a.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,6 @@ <h2 id="current-runtime-differences"><a class="header" href="#current-runtime-di
288288
<li><strong>Python</strong>: <code>jacs.a2a_server</code> is the clearest full discovery story.</li>
289289
<li><strong>Node.js</strong>: <code>jacsA2AMiddleware()</code> serves five <code>.well-known</code> routes from Express, but the generated <code>jwks.json</code> and <code>jacs-pubkey.json</code> payloads are still placeholder metadata. <code>listen()</code> is intentionally smaller and only suitable for demos.</li>
290290
</ul>
291-
<p>Those gaps are tracked outside the book in <code>docs/missing-features.md</code>.</p>
292291
<h2 id="example-paths-in-this-repo"><a class="header" href="#example-paths-in-this-repo">Example Paths In This Repo</a></h2>
293292
<ul>
294293
<li><code>jacs-mcp/README.md</code></li>

jacs/docs/jacsbook/book/print.html

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11575,8 +11575,12 @@ <h2 id="available-backends"><a class="header" href="#available-backends">Availab
1157511575
<div class="table-wrapper"><table><thead><tr><th>Backend</th><th>Config Value</th><th>Description</th></tr></thead><tbody>
1157611576
<tr><td>Filesystem</td><td><code>fs</code></td><td>Local file storage (default)</td></tr>
1157711577
<tr><td>AWS S3</td><td><code>aws</code></td><td>Amazon S3 object storage</td></tr>
11578-
<tr><td>HAI Cloud</td><td><code>hai</code></td><td>HAI managed storage</td></tr>
11578+
<tr><td>HAI Cloud</td><td><code>hai</code></td><td>HTTP object store via <code>HAI_STORAGE_URL</code></td></tr>
1157911579
<tr><td>PostgreSQL</td><td><code>database</code></td><td>PostgreSQL with JSONB queries (requires <code>database</code> feature)</td></tr>
11580+
<tr><td>Rusqlite</td><td><code>rusqlite</code></td><td>Embedded SQLite (requires <code>rusqlite-storage</code> feature)</td></tr>
11581+
<tr><td>DuckDB</td><td><code>duckdb</code></td><td>Embedded analytical DB (requires <code>duckdb-storage</code> feature)</td></tr>
11582+
<tr><td>Redb</td><td><code>redb</code></td><td>Pure-Rust embedded KV (requires <code>redb-storage</code> feature)</td></tr>
11583+
<tr><td>SurrealDB</td><td><code>surrealdb</code></td><td>Multi-model DB with SurrealQL (requires <code>surrealdb-storage</code> feature)</td></tr>
1158011584
</tbody></table>
1158111585
</div>
1158211586
<h2 id="configuration-11"><a class="header" href="#configuration-11">Configuration</a></h2>
@@ -11724,25 +11728,19 @@ <h3 id="example-5"><a class="header" href="#example-5">Example</a></h3>
1172411728
}))
1172511729
</code></pre>
1172611730
<h2 id="hai-cloud-storage-hai"><a class="header" href="#hai-cloud-storage-hai">HAI Cloud Storage (hai)</a></h2>
11727-
<p>Managed storage provided by HAI.</p>
11731+
<p>HTTP object store pointed at <code>HAI_STORAGE_URL</code>. This backend uses <code>object_store::http::HttpStore</code> under the hood — it is a generic HTTP store, not a managed platform.</p>
11732+
<p>For HAI platform registration, attestation, and key discovery, use the separate <a href="https://github.com/HumanAssisted/haisdk">haisdk</a> package.</p>
1172811733
<h3 id="configuration-14"><a class="header" href="#configuration-14">Configuration</a></h3>
1172911734
<pre><code class="language-json">{
1173011735
"jacs_default_storage": "hai"
1173111736
}
1173211737
</code></pre>
11733-
<h3 id="features"><a class="header" href="#features">Features</a></h3>
11734-
<ul>
11735-
<li>Managed infrastructure</li>
11736-
<li>Built-in agent registry</li>
11737-
<li>Cross-organization document sharing</li>
11738-
<li>Integrated DNS verification</li>
11739-
</ul>
11738+
<pre><code class="language-bash">export HAI_STORAGE_URL="https://storage.hai.ai/v1"
11739+
</code></pre>
1174011740
<h3 id="use-cases-7"><a class="header" href="#use-cases-7">Use Cases</a></h3>
1174111741
<ul>
11742-
<li>Multi-agent ecosystems</li>
11743-
<li>Cross-organization collaboration</li>
11744-
<li>Managed deployments</li>
11745-
<li>Integration with HAI services</li>
11742+
<li>Remote document storage via HTTP</li>
11743+
<li>Integration with HAI storage endpoints</li>
1174611744
</ul>
1174711745
<h2 id="postgresql-database-storage-database"><a class="header" href="#postgresql-database-storage-database">PostgreSQL Database Storage (database)</a></h2>
1174811746
<p>The <code>database</code> storage backend stores JACS documents in PostgreSQL, enabling JSONB queries, pagination, and agent-based lookups while preserving cryptographic signatures.</p>
@@ -11842,6 +11840,32 @@ <h3 id="considerations-5"><a class="header" href="#considerations-5">Considerati
1184211840
<li>Compile-time feature flag (<code>database</code>)</li>
1184311841
<li>Network dependency on PostgreSQL server</li>
1184411842
</ul>
11843+
<h2 id="embedded-database-backends"><a class="header" href="#embedded-database-backends">Embedded Database Backends</a></h2>
11844+
<p>Four lightweight embedded database backends are available behind feature flags. None require an external server.</p>
11845+
<h3 id="rusqlite-rusqlite-storage"><a class="header" href="#rusqlite-rusqlite-storage">Rusqlite (<code>rusqlite-storage</code>)</a></h3>
11846+
<p>Embedded SQLite via rusqlite with WAL mode enabled. Pinned to rusqlite v0.31.</p>
11847+
<pre><code class="language-bash">cargo build --features rusqlite-storage
11848+
cargo test --features rusqlite-storage-tests
11849+
</code></pre>
11850+
<p><strong>When to use:</strong> You want SQL queries on a single-file database with no external dependencies.</p>
11851+
<h3 id="duckdb-duckdb-storage"><a class="header" href="#duckdb-duckdb-storage">DuckDB (<code>duckdb-storage</code>)</a></h3>
11852+
<p>Embedded analytical database with JSON path queries.</p>
11853+
<pre><code class="language-bash">cargo build --features duckdb-storage
11854+
cargo test --features duckdb-storage-tests
11855+
</code></pre>
11856+
<p><strong>When to use:</strong> You need analytical queries or columnar storage over signed documents.</p>
11857+
<h3 id="redb-redb-storage"><a class="header" href="#redb-redb-storage">Redb (<code>redb-storage</code>)</a></h3>
11858+
<p>Pure-Rust embedded key-value store. No C dependencies.</p>
11859+
<pre><code class="language-bash">cargo build --features redb-storage
11860+
cargo test --features redb-storage-tests
11861+
</code></pre>
11862+
<p><strong>When to use:</strong> You want the simplest embedded backend with zero non-Rust dependencies.</p>
11863+
<h3 id="surrealdb-surrealdb-storage"><a class="header" href="#surrealdb-surrealdb-storage">SurrealDB (<code>surrealdb-storage</code>)</a></h3>
11864+
<p>Multi-model database with SurrealQL. Uses <code>kv-mem</code> for in-memory mode.</p>
11865+
<pre><code class="language-bash">cargo build --features surrealdb-storage
11866+
cargo test --features surrealdb-storage-tests
11867+
</code></pre>
11868+
<p><strong>When to use:</strong> You want a multi-model query language or plan to scale to a SurrealDB cluster later.</p>
1184511869
<h2 id="in-memory-storage"><a class="header" href="#in-memory-storage">In-Memory Storage</a></h2>
1184611870
<p>For testing and temporary operations, documents can be created without saving:</p>
1184711871
<pre><code class="language-python"># Create document without saving
@@ -11866,6 +11890,10 @@ <h2 id="storage-selection-guide"><a class="header" href="#storage-selection-guid
1186611890
<tr><td>Cloud deployment</td><td><code>aws</code></td></tr>
1186711891
<tr><td>High availability</td><td><code>aws</code></td></tr>
1186811892
<tr><td>Multi-organization</td><td><code>hai</code></td></tr>
11893+
<tr><td>Embedded SQL queries</td><td><code>rusqlite</code></td></tr>
11894+
<tr><td>Analytical queries</td><td><code>duckdb</code></td></tr>
11895+
<tr><td>Zero C-dep embedded KV</td><td><code>redb</code></td></tr>
11896+
<tr><td>Multi-model queries</td><td><code>surrealdb</code></td></tr>
1186911897
<tr><td>Testing</td><td>In-memory (no_save)</td></tr>
1187011898
</tbody></table>
1187111899
</div>
@@ -13666,7 +13694,6 @@ <h2 id="current-runtime-differences"><a class="header" href="#current-runtime-di
1366613694
<li><strong>Python</strong>: <code>jacs.a2a_server</code> is the clearest full discovery story.</li>
1366713695
<li><strong>Node.js</strong>: <code>jacsA2AMiddleware()</code> serves five <code>.well-known</code> routes from Express, but the generated <code>jwks.json</code> and <code>jacs-pubkey.json</code> payloads are still placeholder metadata. <code>listen()</code> is intentionally smaller and only suitable for demos.</li>
1366813696
</ul>
13669-
<p>Those gaps are tracked outside the book in <code>docs/missing-features.md</code>.</p>
1367013697
<h2 id="example-paths-in-this-repo-3"><a class="header" href="#example-paths-in-this-repo-3">Example Paths In This Repo</a></h2>
1367113698
<ul>
1367213699
<li><code>jacs-mcp/README.md</code></li>
@@ -18056,7 +18083,8 @@ <h4 id="hai-remote-storage-hai"><a class="header" href="#hai-remote-storage-hai"
1805618083
<ul>
1805718084
<li><code>HAI_STORAGE_URL</code> - HAI.ai storage service endpoint</li>
1805818085
</ul>
18059-
<p><strong>Best for:</strong> Integration with HAI.ai platform services</p>
18086+
<p>This is an HTTP object store backend. Full HAI platform workflows (registration, attestation, key discovery) require the separate <a href="https://github.com/HumanAssisted/haisdk">haisdk</a> package.</p>
18087+
<p><strong>Best for:</strong> Remote document storage via HTTP</p>
1806018088
<h4 id="memory-storage-memory"><a class="header" href="#memory-storage-memory">Memory Storage (<code>"memory"</code>)</a></h4>
1806118089
<pre><code class="language-json">{
1806218090
"jacs_default_storage": "memory"

jacs/docs/jacsbook/book/reference/configuration.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,8 @@ <h4 id="hai-remote-storage-hai"><a class="header" href="#hai-remote-storage-hai"
526526
<ul>
527527
<li><code>HAI_STORAGE_URL</code> - HAI.ai storage service endpoint</li>
528528
</ul>
529-
<p><strong>Best for:</strong> Integration with HAI.ai platform services</p>
529+
<p>This is an HTTP object store backend. Full HAI platform workflows (registration, attestation, key discovery) require the separate <a href="https://github.com/HumanAssisted/haisdk">haisdk</a> package.</p>
530+
<p><strong>Best for:</strong> Remote document storage via HTTP</p>
530531
<h4 id="memory-storage-memory"><a class="header" href="#memory-storage-memory">Memory Storage (<code>"memory"</code>)</a></h4>
531532
<pre><code class="language-json">{
532533
"jacs_default_storage": "memory"

jacs/docs/jacsbook/book/searchindex.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jacs/docs/jacsbook/book/searchindex.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)