moltyjacs 0.3.0 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +219 -58
  2. package/dist/a2a.d.ts +19 -0
  3. package/dist/a2a.d.ts.map +1 -0
  4. package/dist/a2a.js +151 -0
  5. package/dist/a2a.js.map +1 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +61 -40
  8. package/dist/cli.js.map +1 -1
  9. package/dist/gateway/wellknown.d.ts.map +1 -1
  10. package/dist/gateway/wellknown.js +118 -5
  11. package/dist/gateway/wellknown.js.map +1 -1
  12. package/dist/index.d.ts +9 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +53 -5
  15. package/dist/index.js.map +1 -1
  16. package/dist/jacs-config.d.ts +17 -0
  17. package/dist/jacs-config.d.ts.map +1 -0
  18. package/dist/jacs-config.js +80 -0
  19. package/dist/jacs-config.js.map +1 -0
  20. package/dist/password.d.ts +15 -0
  21. package/dist/password.d.ts.map +1 -0
  22. package/dist/password.js +137 -0
  23. package/dist/password.js.map +1 -0
  24. package/dist/setup.d.ts +1 -1
  25. package/dist/setup.d.ts.map +1 -1
  26. package/dist/setup.js +31 -24
  27. package/dist/setup.js.map +1 -1
  28. package/dist/tools/documents.d.ts.map +1 -1
  29. package/dist/tools/documents.js +27 -26
  30. package/dist/tools/documents.js.map +1 -1
  31. package/dist/tools/hai.d.ts +4 -33
  32. package/dist/tools/hai.d.ts.map +1 -1
  33. package/dist/tools/hai.js +4 -147
  34. package/dist/tools/hai.js.map +1 -1
  35. package/dist/tools/index.d.ts +118 -0
  36. package/dist/tools/index.d.ts.map +1 -1
  37. package/dist/tools/index.js +1893 -567
  38. package/dist/tools/index.js.map +1 -1
  39. package/dist/tools/openclaw.d.ts +16 -0
  40. package/dist/tools/openclaw.d.ts.map +1 -0
  41. package/dist/tools/openclaw.js +53 -0
  42. package/dist/tools/openclaw.js.map +1 -0
  43. package/marketplace.json +45 -3
  44. package/openclaw.plugin.json +4 -4
  45. package/package.json +10 -6
  46. package/src/skills/jacs/SKILL.md +334 -20
package/README.md CHANGED
@@ -1,10 +1,12 @@
1
1
  # moltyjacs
2
2
 
3
- JACS cryptographic provenance plugin for OpenClaw.
3
+ **Sign it. Prove it.** JACS cryptographic provenance plugin for OpenClaw.
4
+
5
+ [Which integration should I use?](https://humanassisted.github.io/JACS/getting-started/decision-tree.html) | [Full JACS documentation](https://humanassisted.github.io/JACS/)
4
6
 
5
7
  ## Why use JACS?
6
8
 
7
- **So your OpenClaw agent can be trustedand can trust others.** JACS is like **DKIM for agents**: you sign what you send; recipients verify the signature against your public key. It’s **decentralized**—no single authority. You publish your key (DNS, optional HAI.ai); others fetch and verify. Without it, nothing you say or do can be proven. With JACS you sign messages, commitments, and state; anyone with your public key can verify they came from you and weren’t altered. You get proof of origin, integrity, and accountability. Other agents can discover your key via DNS or HAI.ai and verify your documents; you verify theirs with `jacs_verify_auto` and optional trust levels (domain, attested). Keys and signed payloads stay local; you send the same signed JSON over any channel (WhatsApp, HTTP, MCP). **Use it whenever another agent or human needs to trust that you said or agreed to something.**
9
+ **So your OpenClaw agent can be trusted -- and can trust others.** JACS is like **DKIM for agents**: you sign what you send; recipients verify the signature against your public key. It is **decentralized** -- no single authority. You publish your key (DNS, optional HAI.ai); others fetch and verify. Without it, nothing you say or do can be proven. With JACS you sign messages, commitments, and state; anyone with your public key can verify they came from you and were not altered. You get proof of origin, integrity, and accountability. Other agents can discover your key via DNS or HAI.ai and verify your documents; you verify theirs with `jacs_verify_auto` and optional trust levels (domain, attested). Keys and signed payloads stay local; you send the same signed JSON over any channel (WhatsApp, HTTP, MCP). **Use it whenever another agent or human needs to trust that you said or agreed to something.**
8
10
 
9
11
  ## Overview
10
12
 
@@ -13,7 +15,13 @@ moltyjacs adds post-quantum cryptographic signatures to your OpenClaw agent comm
13
15
  - **Document signing** - Sign any document with your agent's cryptographic identity
14
16
  - **Verification** - Verify documents from other agents
15
17
  - **Agent discovery** - Publish and discover agents via well-known endpoints and DNS
18
+ - **A2A interoperability** - Export Agent Cards, wrap A2A artifacts with JACS provenance, and assess remote A2A trust
16
19
  - **Multi-party agreements** - Create and manage agreements requiring multiple signatures
20
+ - **Agent state** - Sign and track memory, skills, plans, configs, and hooks
21
+ - **Commitments** - Track agreements and obligations between agents with lifecycle management
22
+ - **Todo lists** - Private, signed work tracking with goals and tasks
23
+ - **Conversations** - Signed message threads between agents
24
+ - **HAI platform features** - Hello/auth checks, username lifecycle, mailbox/email workflow, key registry lookups, and benchmark orchestration
17
25
 
18
26
  ## Installation
19
27
 
@@ -43,21 +51,62 @@ openclaw plugins install https://github.com/HumanAssisted/moltyjacs
43
51
 
44
52
  ## Quick Start
45
53
 
46
- 1. Initialize JACS with key generation:
54
+ 1. Configure exactly one private-key password source (env is the developer default):
55
+ ```bash
56
+ # Option A (recommended for local dev)
57
+ export JACS_PRIVATE_KEY_PASSWORD='use-a-strong-password'
58
+
59
+ # Option B (recommended for containers/CI secrets mounts)
60
+ export JACS_PASSWORD_FILE=/run/secrets/jacs_password
61
+
62
+ # Option C (CLI convenience, init only)
63
+ # openclaw jacs init --password-file /run/secrets/jacs_password
64
+ ```
65
+
66
+ 2. Initialize JACS with key generation:
47
67
  ```bash
48
68
  openclaw jacs init
49
69
  ```
50
70
 
51
- 2. Sign a document:
71
+ 3. Sign a document:
52
72
  ```bash
53
73
  openclaw jacs sign document.json
54
74
  ```
55
75
 
56
- 3. Verify a signed document:
76
+ 4. Verify a signed document:
57
77
  ```bash
58
78
  openclaw jacs verify signed-document.json
59
79
  ```
60
80
 
81
+ 5. Bootstrap trust with another agent (tool flow):
82
+ - Sender runs `jacs_share_public_key` and `jacs_share_agent`
83
+ - Receiver runs `jacs_trust_agent_with_key` with the shared `agentJson` and `publicKeyPem`
84
+
85
+ ### Direct JACS SDK Quick Start (outside this plugin)
86
+
87
+ For direct `@hai.ai/jacs/client` or `@hai.ai/jacs/simple` usage, first-time quickstart now requires identity (`name` and `domain`):
88
+
89
+ ```ts
90
+ import { JacsClient } from "@hai.ai/jacs/client";
91
+
92
+ const client = await JacsClient.quickstart({
93
+ name: "my-agent",
94
+ domain: "agent.example.com",
95
+ // optional; defaults to pq2025
96
+ algorithm: "pq2025",
97
+ });
98
+ ```
99
+
100
+ ## JACS Workspace Compatibility
101
+
102
+ For coordinated local development, `moltyjacs` now resolves `@hai.ai/jacs` from the sibling `../JACS/jacsnpm` workspace so its A2A surface matches the current `haiai` wrapper contract. The JACS Node API remains **async-first**. All NAPI operations return Promises by default; sync variants use a `Sync` suffix (e.g. `loadSync` vs `load`). moltyjacs uses the async API for setup (`agent.load()`, `createAgent()`) and the sync API for hot-path operations (`signRequest`, `verifyResponse`) that must run on the V8 thread.
103
+
104
+ Recent JACS updates relevant to moltyjacs:
105
+ - Direct `quickstart()` usage in `@hai.ai/jacs/client` and `@hai.ai/jacs/simple` now requires identity inputs (`name` and `domain`) for first-time agent creation.
106
+ - Default algorithm across JACS is `pq2025`.
107
+ - Trust/bootstrap surfaces now include `trustAgentWithKey` / `trust_agent_with_key`, `sharePublicKey` / `share_public_key`, and `shareAgent` / `share_agent`.
108
+ - A2A surfaces now include Agent Card export, wrapped-artifact signing/verification, and generated well-known discovery documents.
109
+
61
110
  ## CLI Commands
62
111
 
63
112
  | Command | Description |
@@ -69,40 +118,157 @@ openclaw plugins install https://github.com/HumanAssisted/moltyjacs
69
118
  | `openclaw jacs hash <string>` | Hash a string |
70
119
  | `openclaw jacs dns-record <domain>` | Generate DNS TXT record for discovery |
71
120
  | `openclaw jacs lookup <domain>` | Look up another agent's info |
72
- | `openclaw jacs register [--api-key <key>] [--preview]` | Register this agent with HAI.ai for attested trust level |
121
+ | `openclaw jacs register [--preview]` | Register this agent with HAI.ai for attested trust level |
73
122
  | `openclaw jacs attestation [domain]` | Check attestation status for this agent or another by domain |
74
123
  | `openclaw jacs claim [level]` | Set or view verification claim (includes DNS/HAI proof details) |
75
124
 
76
125
  ## HAI.ai registration
77
126
 
78
- To get an attested trust level, register your agent with HAI.ai once: run `openclaw jacs register`. You must set the `HAI_API_KEY` environment variable or pass `--api-key`. Use `--preview` to see what would be sent without registering. After registration, use `openclaw jacs attestation` to check your (or another agent's) attestation status, and `openclaw jacs claim <level>` to set or view your verification claim. `verified` now requires DNS TXT hash verification (domain configured + published hash matches your public key). See [Configuration](#configuration) and [Security](#security) for related options.
127
+ To get an attested trust level, register your agent with HAI.ai once: run `openclaw jacs register`. Registration uses JACS-signed authentication (no API key needed). Use `--preview` to see what would be sent without registering. After registration, use `openclaw jacs attestation` to check your (or another agent's) attestation status, and `openclaw jacs claim <level>` to set or view your verification claim. `verified` now requires DNS TXT hash verification (domain configured + published hash matches your public key). See [Configuration](#configuration) and [Security](#security) for related options.
79
128
 
80
129
  ## Agent Tools
81
130
 
82
131
  When used with an AI agent, these tools are available:
83
132
 
133
+ ### Core signing and verification
134
+
84
135
  | Tool | Purpose |
85
136
  |------|---------|
86
137
  | `jacs_sign` | Sign a document (returns signed doc; when small enough, includes `verification_url` for sharing) |
87
138
  | `jacs_verify_link` | Get a shareable verification URL for a signed document (for https://hai.ai/jacs/verify) |
88
139
  | `jacs_verify` | Verify a self-signed document |
89
- | `jacs_verify_auto` | Verify any document (auto-fetches keys) |
140
+ | `jacs_verify_standalone` | Verify any signed document without JACS init (no agent required) |
141
+ | `jacs_verify_auto` | Verify any document (auto-fetches keys, supports trust levels) |
142
+ | `jacs_verify_dns` | Verify agent identity via DNS TXT record |
90
143
  | `jacs_fetch_pubkey` | Fetch another agent's public key |
91
144
  | `jacs_verify_with_key` | Verify with a specific public key |
145
+ | `jacs_hash` | Hash content |
146
+ | `jacs_identity` | Get your identity info |
147
+ | `jacs_share_public_key` | Share your current public key PEM for trust bootstrap |
148
+ | `jacs_share_agent` | Share your self-signed agent document for trust establishment |
149
+ | `jacs_trust_agent_with_key` | Trust an agent document using an explicit public key PEM |
150
+ | `jacs_audit` | Run read-only JACS security audit |
151
+
152
+ ### A2A interoperability
153
+
154
+ | Tool | Purpose |
155
+ |------|---------|
156
+ | `jacs_a2a_export_agent_card` | Export this agent as an A2A Agent Card |
157
+ | `jacs_a2a_sign_artifact` | Wrap an A2A task/message/result with JACS provenance |
158
+ | `jacs_a2a_verify_artifact` | Verify a wrapped A2A artifact |
159
+ | `jacs_a2a_assess_remote_agent` | Apply A2A trust policy to a remote Agent Card |
160
+ | `jacs_a2a_trust_agent` | Add a remote Agent Card to the local trust store |
161
+ | `jacs_a2a_generate_well_known` | Generate A2A discovery documents for `/.well-known` serving |
162
+
163
+ ### Discovery and trust
164
+
165
+ | Tool | Purpose |
166
+ |------|---------|
92
167
  | `jacs_dns_lookup` | Look up DNS TXT record |
93
- | `jacs_lookup_agent` | Get complete agent info |
168
+ | `jacs_lookup_agent` | Get complete agent info (well-known + DNS + HAI.ai) |
169
+ | `jacs_verify_hai_registration` | Verify HAI.ai registration for an agent |
170
+ | `jacs_get_attestation` | Get full attestation status for an agent |
171
+ | `jacs_set_verification_claim` | Set verification claim level |
172
+
173
+ ### HAI platform integration
174
+
175
+ | Tool | Purpose |
176
+ |------|---------|
177
+ | `jacs_hai_hello` | Call HAI hello endpoint with JACS auth |
178
+ | `jacs_hai_test_connection` | Test HAI connectivity without mutating state |
179
+ | `jacs_hai_register` | Register this agent with HAI |
180
+ | `jacs_hai_check_username` | Check HAI username availability |
181
+ | `jacs_hai_claim_username` | Claim username for an agent |
182
+ | `jacs_hai_update_username` | Rename claimed username |
183
+ | `jacs_hai_delete_username` | Release claimed username |
184
+ | `jacs_hai_verify_document` | Verify signed document via HAI public verifier |
185
+ | `jacs_hai_get_verification` | Get advanced verification/badge by agent ID |
186
+ | `jacs_hai_verify_agent_document` | Run advanced verification using an agent document |
187
+ | `jacs_hai_fetch_remote_key` | Fetch remote key from HAI key registry |
188
+ | `jacs_hai_verify_agent` | Multi-level agent verification (signature + DNS + HAI) |
189
+ | `jacs_hai_send_email` | Send email from this agent mailbox |
190
+ | `jacs_hai_list_messages` | List mailbox messages |
191
+ | `jacs_hai_get_message` | Retrieve one mailbox message by ID |
192
+ | `jacs_hai_mark_message_read` | Mark message as read |
193
+ | `jacs_hai_mark_message_unread` | Mark message as unread |
194
+ | `jacs_hai_delete_message` | Delete mailbox message |
195
+ | `jacs_hai_search_messages` | Search mailbox with filters |
196
+ | `jacs_hai_get_unread_count` | Get unread mailbox count |
197
+ | `jacs_hai_reply` | Reply to a message ID |
198
+ | `jacs_hai_get_email_status` | Get mailbox status/limits |
199
+ | `jacs_hai_free_chaotic_run` | Run free benchmark tier |
200
+ | `jacs_hai_dns_certified_run` | Run DNS-certified benchmark flow (returns checkout URL when pending) |
201
+ | `jacs_hai_submit_response` | Submit benchmark job response |
202
+ | `jacs_hai_benchmark_run` | Run legacy benchmark endpoint by name/tier |
203
+
204
+ ### Agreements
205
+
206
+ | Tool | Purpose |
207
+ |------|---------|
94
208
  | `jacs_create_agreement` | Create multi-party agreement |
95
209
  | `jacs_sign_agreement` | Sign an agreement |
96
210
  | `jacs_check_agreement` | Check agreement status |
97
- | `jacs_hash` | Hash content |
98
- | `jacs_identity` | Get your identity info |
99
- | `jacs_audit` | Run read-only JACS security audit |
211
+
212
+ ### Agent state
213
+
214
+ | Tool | Purpose |
215
+ |------|---------|
216
+ | `jacs_create_agentstate` | Create signed agent state (memory, skill, plan, config, hook) |
217
+ | `jacs_sign_file_as_state` | Sign a file as agent state with path reference and hash |
218
+ | `jacs_verify_agentstate` | Verify an agent state document |
219
+
220
+ ### Commitments
221
+
222
+ | Tool | Purpose |
223
+ |------|---------|
224
+ | `jacs_create_commitment` | Create a signed commitment |
225
+ | `jacs_update_commitment` | Update commitment status or fields |
226
+ | `jacs_dispute_commitment` | Dispute a commitment with a reason |
227
+ | `jacs_revoke_commitment` | Revoke a commitment with a reason |
228
+
229
+ ### Todo lists
230
+
231
+ | Tool | Purpose |
232
+ |------|---------|
233
+ | `jacs_create_todo` | Create a signed todo list |
234
+ | `jacs_add_todo_item` | Add an item to a todo list |
235
+ | `jacs_update_todo_item` | Update a todo item |
236
+
237
+ ### Conversations
238
+
239
+ | Tool | Purpose |
240
+ |------|---------|
241
+ | `jacs_start_conversation` | Create the first signed message payload in a new thread |
242
+ | `jacs_send_message` | Create a signed message payload in an existing thread |
243
+
244
+ ## MCP and Message Transport
245
+
246
+ `jacs_start_conversation` and `jacs_send_message` create signed JACS message payloads. They do **not** perform delivery/transport by themselves.
247
+
248
+ Use this pattern for agent-to-agent messaging:
249
+
250
+ 1. Create/sign payload (`jacs_start_conversation` or `jacs_send_message`)
251
+ 2. Deliver the returned signed JSON over your chosen channel (MCP, HTTP, queue, chat bridge, etc.)
252
+ 3. Verify on receipt (`jacs_verify_auto`, `jacs_verify_standalone`, or `jacs_verify_with_key`)
253
+
254
+ For custom Node MCP servers, JACS supports transport-level integration via `@hai.ai/jacs/mcp`:
255
+
256
+ - `createJACSTransportProxy(...)` for automatic signing/verification at transport boundaries
257
+ - `registerJacsTools(...)` to expose JACS operations as MCP tools
258
+ - Expanded trust/bootstrap MCP/LangChain tools include `jacs_share_public_key`, `jacs_share_agent`, and `jacs_trust_agent_with_key`
259
+
260
+ This OpenClaw plugin does not automatically intercept all host MCP traffic; use explicit JACS tools or host transport middleware/adapters.
100
261
 
101
262
  ## Well-Known Endpoints
102
263
 
103
264
  Your agent exposes these endpoints:
104
265
 
266
+ - `GET /.well-known/agent-card.json` - A2A Agent Card for discovery
267
+ - `GET /.well-known/jwks.json` - A2A/JACS JWKS for verifier interoperability
268
+ - `GET /.well-known/jacs-agent.json` - JACS agent descriptor
269
+ - `GET /.well-known/jacs-extension.json` - JACS A2A extension descriptor
105
270
  - `GET /.well-known/jacs-pubkey.json` - Your public key
271
+ - `GET /jacs/agent` - Current self-signed JACS agent document
106
272
  - `GET /jacs/status` - Health check
107
273
  - `POST /jacs/verify` - Public verification (this agent)
108
274
  - `GET /jacs/attestation` - Full attestation status (trust level, HAI registration, DNS verification)
@@ -118,33 +284,40 @@ Configure via `openclaw.plugin.json`:
118
284
  ```json
119
285
  {
120
286
  "keyAlgorithm": "pq2025",
121
- "autoSign": false,
122
- "autoVerify": true,
123
287
  "agentName": "My Agent",
124
288
  "agentDescription": "Description",
125
289
  "agentDomain": "agent.example.com"
126
290
  }
127
291
  ```
128
292
 
293
+ `autoSign` and `autoVerify` are accepted for backward compatibility but are deprecated no-ops in `moltyjacs`.
294
+
129
295
  `agentId` is set automatically when you run `openclaw jacs init` and is not edited in the config file.
130
296
 
297
+ JACS key filenames are read from `jacs.config.json`:
298
+ - `jacs_agent_public_key_filename` (default: `jacs.public.pem`)
299
+ - `jacs_agent_private_key_filename` (default: `jacs.private.pem.enc`)
300
+
131
301
  ### Environment variables
132
302
 
133
303
  | Variable | Purpose |
134
304
  |----------|---------|
135
- | `JACS_PRIVATE_KEY_PASSWORD` | Password for the encrypted private key; required for signing when not prompted (e.g. headless/CI). |
136
- | `HAI_API_KEY` | Used by `openclaw jacs register`; can be passed via `--api-key` instead. |
137
- | `HAI_API_URL` | Optional override for HAI API base URL (default `https://api.hai.ai`). |
305
+ | `JACS_PRIVATE_KEY_PASSWORD` | Password for the encrypted private key; developer-default source for local/headless usage. |
306
+ | `JACS_PASSWORD_FILE` | Path to a file containing the private-key password (newline allowed at end of file). |
138
307
 
139
- The key password is generated at `openclaw jacs init` and must be stored securely.
308
+ Configure exactly one password source. If multiple password sources are set, initialization fails closed to avoid ambiguity.
309
+ On Unix-like systems, password files must be owner-only (for example `chmod 600 /run/secrets/jacs_password`).
140
310
 
141
311
  ### Key Algorithms
142
312
 
143
313
  - `pq2025` (default) - Post-quantum ML-DSA-87
144
- - `pq-dilithium` - Dilithium
145
314
  - `ring-Ed25519` - Ed25519
146
315
  - `RSA-PSS` - RSA with PSS padding
147
316
 
317
+ ## Cross-Language Compatibility
318
+
319
+ Documents signed by moltyjacs (Node.js) can be verified by Rust or Python agents, and vice versa. Cross-language interop is tested on every commit with Ed25519 and post-quantum (ML-DSA-87) algorithms. See the [JACS cross-language tests](https://github.com/HumanAssisted/JACS/tree/main/jacs/tests/cross_language) for details.
320
+
148
321
  ## Security
149
322
 
150
323
  - Private keys are encrypted with AES-256-GCM
@@ -152,8 +325,33 @@ The key password is generated at `openclaw jacs init` and must be stored securel
152
325
  - Default algorithm (pq2025) provides quantum resistance
153
326
  - DNS records enable DNSSEC-backed identity verification
154
327
 
328
+ ## Development
329
+
330
+ ```bash
331
+ # Install dependencies
332
+ npm install
333
+
334
+ # Build
335
+ npm run build
336
+
337
+ # Watch mode
338
+ npm run watch
339
+
340
+ # Run unit tests (uses mocked JACS module)
341
+ npm test
342
+
343
+ # Run integration tests (requires real @hai.ai/jacs native binary)
344
+ npm run test:integration
345
+
346
+ # Test local installation
347
+ openclaw plugins install . --link
348
+ openclaw plugins list
349
+ ```
350
+
155
351
  ## Publishing
156
352
 
353
+ CI publishes on push of a tag `v*` (e.g. `v0.8.0`). **Publish [@hai.ai/jacs](https://www.npmjs.com/package/@hai.ai/jacs) from the [JACS](https://github.com/HumanAssisted/JACS) repo first** (tag `npm/v*`), then tag and push moltyjacs so the build can resolve the dependency.
354
+
157
355
  ### To npm
158
356
 
159
357
  ```bash
@@ -173,51 +371,14 @@ Or publish to both npm and ClawHub:
173
371
  npm run publish:all
174
372
  ```
175
373
 
176
- ### Manual ClawHub Publishing
177
-
178
- 1. Install the ClawHub CLI:
179
- ```bash
180
- npm install -g clawhub
181
- ```
182
-
183
- 2. Publish the plugin:
184
- ```bash
185
- clawhub publish .
186
- ```
187
-
188
- 3. Sync updates:
189
- ```bash
190
- clawhub sync
191
- ```
192
-
193
- ## Development
194
-
195
- ```bash
196
- # Install dependencies
197
- npm install
198
-
199
- # Build
200
- npm run build
201
-
202
- # Watch mode
203
- npm run watch
204
-
205
- # Test local installation
206
- openclaw plugins install . --link
207
- openclaw plugins list
208
- ```
209
-
210
- ## Publishing
211
-
212
- CI publishes on push of a tag `v*` (e.g. `v0.3.0`). **Publish [@hai.ai/jacs](https://www.npmjs.com/package/@hai.ai/jacs) from the [JACS](https://github.com/HumanAssisted/JACS) repo first** (tag `npm/v*`), then tag and push moltyjacs so the build can resolve the dependency.
213
-
214
374
  ## License
215
375
 
216
376
  MIT License - see [LICENSE](LICENSE)
217
377
 
218
378
  ## Links
219
379
  - [HAI.AI](https://hai.ai)
220
- - [JACS Documentation](https://github.com/HumanAssisted/JACS/)
380
+ - [JACS Documentation](https://humanassisted.github.io/JACS/)
381
+ - [Decision Tree](https://humanassisted.github.io/JACS/getting-started/decision-tree.html)
221
382
  - [OpenClaw](https://docs.openclaw.ai)
222
383
  - [ClawHub](https://www.clawhub.com)
223
384
  - [GitHub](https://github.com/HumanAssisted/moltyjacs)
package/dist/a2a.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import type { OpenClawPluginAPI } from "./index";
2
+ export type A2ATrustPolicy = "open" | "verified" | "strict";
3
+ export declare function exportA2AAgentCard(api: OpenClawPluginAPI, trustPolicy?: A2ATrustPolicy): Promise<{
4
+ agentCard: Record<string, unknown>;
5
+ agentData: Record<string, unknown>;
6
+ }>;
7
+ export declare function signA2AArtifact(api: OpenClawPluginAPI, artifact: Record<string, unknown>, artifactType: string, parentSignatures?: Record<string, unknown>[] | null, trustPolicy?: A2ATrustPolicy): Promise<Record<string, unknown>>;
8
+ export declare function verifyA2AArtifact(api: OpenClawPluginAPI, wrappedArtifact: string | Record<string, unknown>, trustPolicy?: A2ATrustPolicy): Promise<Record<string, unknown>>;
9
+ export declare function assessRemoteA2AAgent(api: OpenClawPluginAPI, agentCard: string | Record<string, unknown>, trustPolicy?: A2ATrustPolicy): Promise<Record<string, unknown>>;
10
+ export declare function trustRemoteA2AAgent(api: OpenClawPluginAPI, agentCard: string | Record<string, unknown>, trustPolicy?: A2ATrustPolicy): Promise<Record<string, unknown>>;
11
+ export declare function generateA2AWellKnownDocuments(api: OpenClawPluginAPI, options?: {
12
+ trustPolicy?: A2ATrustPolicy;
13
+ jwsSignature?: string;
14
+ }): Promise<{
15
+ documents: Record<string, Record<string, unknown>>;
16
+ agentCard: Record<string, unknown>;
17
+ agentData: Record<string, unknown>;
18
+ }>;
19
+ //# sourceMappingURL=a2a.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../src/a2a.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGjD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAqE5D,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,iBAAiB,EACtB,WAAW,GAAE,cAAqC,GACjD,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAMrF;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,YAAY,EAAE,MAAM,EACpB,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAW,EACzD,WAAW,GAAE,cAAqC,GACjD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,iBAAiB,EACtB,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjD,WAAW,GAAE,cAAqC,GACjD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAIlC;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,iBAAiB,EACtB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,WAAW,GAAE,cAAqC,GACjD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAIlC;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,iBAAiB,EACtB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,WAAW,GAAE,cAAqC,GACjD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKlC;AAED,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,iBAAiB,EACtB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC;IACT,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC,CAyBD"}
package/dist/a2a.js ADDED
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.exportA2AAgentCard = exportA2AAgentCard;
37
+ exports.signA2AArtifact = signA2AArtifact;
38
+ exports.verifyA2AArtifact = verifyA2AArtifact;
39
+ exports.assessRemoteA2AAgent = assessRemoteA2AAgent;
40
+ exports.trustRemoteA2AAgent = trustRemoteA2AAgent;
41
+ exports.generateA2AWellKnownDocuments = generateA2AWellKnownDocuments;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const client_1 = require("@hai.ai/jacs/client");
45
+ const haiai_1 = require("@haiai/haiai");
46
+ const jacs_config_1 = require("./jacs-config");
47
+ const DEFAULT_TRUST_POLICY = "verified";
48
+ const jacsClientCache = new Map();
49
+ function getConfigPath(api) {
50
+ return path.join(api.runtime.homeDir, ".openclaw", "jacs", "jacs.config.json");
51
+ }
52
+ function getKeysDir(api) {
53
+ return path.join(api.runtime.homeDir, ".openclaw", "jacs_keys");
54
+ }
55
+ function parseAgentIdAndVersion(value) {
56
+ if (!value || typeof value !== "string") {
57
+ return {};
58
+ }
59
+ const [agentId, version] = value.split(":");
60
+ return {
61
+ agentId: agentId || undefined,
62
+ version: version || undefined,
63
+ };
64
+ }
65
+ function resolveConfiguredPublicKey(api, configPath) {
66
+ const runtimeKey = api.runtime.jacs?.getPublicKey();
67
+ if (typeof runtimeKey === "string" && runtimeKey.trim() !== "") {
68
+ return runtimeKey;
69
+ }
70
+ const config = (0, jacs_config_1.readJacsConfig)(configPath);
71
+ const publicKeyPath = (0, jacs_config_1.resolvePublicKeyPath)(getKeysDir(api), config);
72
+ if (!fs.existsSync(publicKeyPath)) {
73
+ throw new Error(`Public key not found at ${publicKeyPath}`);
74
+ }
75
+ return fs.readFileSync(publicKeyPath, "utf-8");
76
+ }
77
+ function resolveAgentData(api, configPath) {
78
+ const config = (0, jacs_config_1.readJacsConfig)(configPath);
79
+ const { agentId, version } = parseAgentIdAndVersion(config?.jacs_agent_id_and_version);
80
+ return {
81
+ jacsId: api.config.agentId || api.runtime.jacs?.getAgentId() || agentId || "unknown-agent",
82
+ jacsName: api.config.agentName || "OpenClaw JACS Agent",
83
+ jacsDescription: api.config.agentDescription || "OpenClaw agent with JACS cryptographic provenance",
84
+ jacsVersion: version || "1",
85
+ jacsAgentDomain: api.config.agentDomain,
86
+ jacsAgentType: "ai",
87
+ keyAlgorithm: api.config.keyAlgorithm || config?.jacs_agent_key_algorithm || "pq2025",
88
+ };
89
+ }
90
+ async function getJacsClient(configPath) {
91
+ const cached = jacsClientCache.get(configPath);
92
+ if (cached) {
93
+ return cached;
94
+ }
95
+ const client = new client_1.JacsClient({ configPath });
96
+ if (typeof client.loadSync === "function") {
97
+ client.loadSync(configPath);
98
+ }
99
+ else {
100
+ await client.load(configPath);
101
+ }
102
+ jacsClientCache.set(configPath, client);
103
+ return client;
104
+ }
105
+ async function exportA2AAgentCard(api, trustPolicy = DEFAULT_TRUST_POLICY) {
106
+ const configPath = getConfigPath(api);
107
+ const client = await getJacsClient(configPath);
108
+ const agentData = resolveAgentData(api, configPath);
109
+ const agentCard = await (0, haiai_1.exportAgentCard)(client, agentData, { trustPolicy });
110
+ return { agentCard, agentData };
111
+ }
112
+ async function signA2AArtifact(api, artifact, artifactType, parentSignatures = null, trustPolicy = DEFAULT_TRUST_POLICY) {
113
+ const configPath = getConfigPath(api);
114
+ const client = await getJacsClient(configPath);
115
+ return (0, haiai_1.signArtifact)(client, artifact, artifactType, parentSignatures, {
116
+ trustPolicy,
117
+ });
118
+ }
119
+ async function verifyA2AArtifact(api, wrappedArtifact, trustPolicy = DEFAULT_TRUST_POLICY) {
120
+ const configPath = getConfigPath(api);
121
+ const client = await getJacsClient(configPath);
122
+ return (0, haiai_1.verifyArtifact)(client, wrappedArtifact, { trustPolicy });
123
+ }
124
+ async function assessRemoteA2AAgent(api, agentCard, trustPolicy = DEFAULT_TRUST_POLICY) {
125
+ const configPath = getConfigPath(api);
126
+ const client = await getJacsClient(configPath);
127
+ return (0, haiai_1.assessRemoteAgent)(client, agentCard, { trustPolicy });
128
+ }
129
+ async function trustRemoteA2AAgent(api, agentCard, trustPolicy = DEFAULT_TRUST_POLICY) {
130
+ const configPath = getConfigPath(api);
131
+ const client = await getJacsClient(configPath);
132
+ const result = await (0, haiai_1.trustA2AAgent)(client, agentCard, { trustPolicy });
133
+ return { trusted: true, result };
134
+ }
135
+ async function generateA2AWellKnownDocuments(api, options) {
136
+ const trustPolicy = options?.trustPolicy ?? DEFAULT_TRUST_POLICY;
137
+ const configPath = getConfigPath(api);
138
+ const client = await getJacsClient(configPath);
139
+ const { agentCard, agentData } = await exportA2AAgentCard(api, trustPolicy);
140
+ const publicKeyPem = resolveConfiguredPublicKey(api, configPath);
141
+ const publicKeyB64 = Buffer.from(publicKeyPem, "utf-8").toString("base64");
142
+ const documents = await (0, haiai_1.generateWellKnownDocuments)(client, agentCard, options?.jwsSignature ?? "", publicKeyB64, agentData, { trustPolicy });
143
+ if (!options?.jwsSignature) {
144
+ const cardDoc = documents["/.well-known/agent-card.json"];
145
+ if (cardDoc && Array.isArray(cardDoc.signatures) && cardDoc.signatures.length === 0) {
146
+ delete cardDoc.signatures;
147
+ }
148
+ }
149
+ return { documents, agentCard, agentData };
150
+ }
151
+ //# sourceMappingURL=a2a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a.js","sourceRoot":"","sources":["../src/a2a.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAiC,MAAM,SAAS,CAAC;AAWhF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,WAAW,CA+mB/D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAiC,MAAM,SAAS,CAAC;AAehF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,WAAW,CA6nB/D"}