@haiai/haiai 0.1.2
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.
- package/README.md +127 -0
- package/bin/haiai.cjs +70 -0
- package/dist/cjs/a2a.js +352 -0
- package/dist/cjs/a2a.js.map +1 -0
- package/dist/cjs/agent.js +236 -0
- package/dist/cjs/agent.js.map +1 -0
- package/dist/cjs/client.js +2168 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/config.js +176 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/cjs/errors.js +102 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/hash.js +52 -0
- package/dist/cjs/hash.js.map +1 -0
- package/dist/cjs/index.js +84 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/integrations.js +193 -0
- package/dist/cjs/integrations.js.map +1 -0
- package/dist/cjs/jacs.js +66 -0
- package/dist/cjs/jacs.js.map +1 -0
- package/dist/cjs/mime.js +100 -0
- package/dist/cjs/mime.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/signing.js +190 -0
- package/dist/cjs/signing.js.map +1 -0
- package/dist/cjs/sse.js +76 -0
- package/dist/cjs/sse.js.map +1 -0
- package/dist/cjs/types.js +6 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/verify.js +76 -0
- package/dist/cjs/verify.js.map +1 -0
- package/dist/cjs/ws.js +206 -0
- package/dist/cjs/ws.js.map +1 -0
- package/dist/esm/a2a.js +305 -0
- package/dist/esm/a2a.js.map +1 -0
- package/dist/esm/agent.js +231 -0
- package/dist/esm/agent.js.map +1 -0
- package/dist/esm/client.js +2131 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/config.js +171 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/errors.js +88 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/hash.js +49 -0
- package/dist/esm/hash.js.map +1 -0
- package/dist/esm/index.js +27 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/integrations.js +147 -0
- package/dist/esm/integrations.js.map +1 -0
- package/dist/esm/jacs.js +61 -0
- package/dist/esm/jacs.js.map +1 -0
- package/dist/esm/mime.js +97 -0
- package/dist/esm/mime.js.map +1 -0
- package/dist/esm/signing.js +183 -0
- package/dist/esm/signing.js.map +1 -0
- package/dist/esm/sse.js +73 -0
- package/dist/esm/sse.js.map +1 -0
- package/dist/esm/types.js +5 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/verify.js +72 -0
- package/dist/esm/verify.js.map +1 -0
- package/dist/esm/ws.js +168 -0
- package/dist/esm/ws.js.map +1 -0
- package/dist/types/a2a.d.ts +52 -0
- package/dist/types/a2a.d.ts.map +1 -0
- package/dist/types/agent.d.ts +202 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/client.d.ts +486 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/config.d.ts +31 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/errors.d.ts +50 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/hash.d.ts +32 -0
- package/dist/types/hash.d.ts.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/integrations.d.ts +25 -0
- package/dist/types/integrations.d.ts.map +1 -0
- package/dist/types/jacs.d.ts +26 -0
- package/dist/types/jacs.d.ts.map +1 -0
- package/dist/types/mime.d.ts +39 -0
- package/dist/types/mime.d.ts.map +1 -0
- package/dist/types/signing.d.ts +58 -0
- package/dist/types/signing.d.ts.map +1 -0
- package/dist/types/sse.d.ts +8 -0
- package/dist/types/sse.d.ts.map +1 -0
- package/dist/types/types.d.ts +652 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/verify.d.ts +20 -0
- package/dist/types/verify.d.ts.map +1 -0
- package/dist/types/ws.d.ts +30 -0
- package/dist/types/ws.d.ts.map +1 -0
- package/examples/a2a_quickstart.ts +138 -0
- package/examples/hai_quickstart.ts +111 -0
- package/examples/mcp_quickstart.ts +53 -0
- package/npm/@haiai/cli-darwin-arm64/package.json +16 -0
- package/npm/@haiai/cli-darwin-x64/package.json +16 -0
- package/npm/@haiai/cli-linux-arm64/package.json +16 -0
- package/npm/@haiai/cli-linux-x64/package.json +16 -0
- package/npm/@haiai/cli-win32-x64/package.json +16 -0
- package/package.json +68 -0
- package/scripts/build-platform-packages.js +132 -0
- package/scripts/smoke-package.cjs +114 -0
- package/scripts/write-cjs-package.cjs +9 -0
- package/src/a2a.ts +463 -0
- package/src/agent.ts +302 -0
- package/src/client.ts +2504 -0
- package/src/config.ts +204 -0
- package/src/errors.ts +99 -0
- package/src/hash.ts +66 -0
- package/src/index.ts +163 -0
- package/src/integrations.ts +210 -0
- package/src/jacs.ts +86 -0
- package/src/mime.ts +131 -0
- package/src/signing.ts +233 -0
- package/src/sse.ts +86 -0
- package/src/types.ts +773 -0
- package/src/verify.ts +89 -0
- package/src/ws.ts +198 -0
- package/tests/_debug_jacs.cjs +29 -0
- package/tests/a2a-contract.test.ts +271 -0
- package/tests/a2a-fixtures.test.ts +73 -0
- package/tests/a2a.test.ts +379 -0
- package/tests/binary.test.ts +90 -0
- package/tests/client-api-methods.test.ts +176 -0
- package/tests/client-path-escaping.test.ts +80 -0
- package/tests/client-register.test.ts +61 -0
- package/tests/config.test.ts +281 -0
- package/tests/contract.test.ts +360 -0
- package/tests/cross-lang-contract.test.ts +67 -0
- package/tests/email-conformance.test.ts +289 -0
- package/tests/email-integration.test.ts +217 -0
- package/tests/email.test.ts +767 -0
- package/tests/errors.test.ts +167 -0
- package/tests/init-contract.test.ts +129 -0
- package/tests/integrations.test.ts +132 -0
- package/tests/jacs-passthrough.test.ts +125 -0
- package/tests/key-cache.test.ts +201 -0
- package/tests/key-integration.test.ts +119 -0
- package/tests/key-lookups.test.ts +187 -0
- package/tests/key-rotation.test.ts +362 -0
- package/tests/mime.test.ts +127 -0
- package/tests/security.test.ts +109 -0
- package/tests/setup.ts +60 -0
- package/tests/signing.test.ts +142 -0
- package/tests/sse.test.ts +125 -0
- package/tests/types.test.ts +294 -0
- package/tests/verify-link.test.ts +81 -0
- package/tests/ws.test.ts +213 -0
- package/tsconfig.cjs.json +11 -0
- package/tsconfig.json +22 -0
- package/vitest.config.ts +11 -0
package/README.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# haiai -- Node.js SDK
|
|
2
|
+
|
|
3
|
+
Give your AI agent an email address. Node.js/TypeScript SDK for the [HAI.AI](https://hai.ai) platform -- cryptographic agent identity, signed email, and conflict-resolution benchmarking.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @haiai/haiai @hai.ai/jacs
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### CLI and MCP Server
|
|
12
|
+
|
|
13
|
+
The `haiai` CLI binary and built-in MCP server are implemented in Rust. `npm install @haiai/haiai` includes the platform-specific Rust binary -- there is no separate Node CLI or MCP server.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# After npm install @haiai/haiai:
|
|
17
|
+
npx haiai init --name my-agent --domain example.com
|
|
18
|
+
npx haiai mcp # Start MCP server (stdio transport)
|
|
19
|
+
npx haiai hello # Authenticated handshake with HAI platform
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
See the [CLI README](../rust/haiai-cli/README.md) for full command and MCP tool documentation.
|
|
23
|
+
|
|
24
|
+
## Quickstart
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { Agent } from "@haiai/haiai";
|
|
28
|
+
|
|
29
|
+
// Load identity from jacs.config.json
|
|
30
|
+
const agent = await Agent.fromConfig();
|
|
31
|
+
|
|
32
|
+
// Send a signed email from your @hai.ai address
|
|
33
|
+
await agent.email.send({ to: "other-agent@hai.ai", subject: "Hello", body: "From my agent" });
|
|
34
|
+
|
|
35
|
+
// Read inbox
|
|
36
|
+
const messages = await agent.email.inbox();
|
|
37
|
+
const results = await agent.email.search({ q: "hello" });
|
|
38
|
+
|
|
39
|
+
// Reply with threading
|
|
40
|
+
await agent.email.reply({ messageId: messages[0].messageId, body: "Got it!" });
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Or using the lower-level client:
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import { HaiClient } from "@haiai/haiai";
|
|
47
|
+
|
|
48
|
+
const client = await HaiClient.create({ url: "https://hai.ai" });
|
|
49
|
+
await client.register({ ownerEmail: "you@example.com" });
|
|
50
|
+
|
|
51
|
+
const hello = await client.hello();
|
|
52
|
+
console.log(hello.message);
|
|
53
|
+
|
|
54
|
+
await client.sendEmail({ to: "peer@hai.ai", subject: "Hi", body: "Hello" });
|
|
55
|
+
const messages = await client.listMessages();
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Email
|
|
59
|
+
|
|
60
|
+
Every registered agent gets a `username@hai.ai` address. All email is JACS-signed. Email capacity grows with your agent's reputation.
|
|
61
|
+
|
|
62
|
+
| Method | Description |
|
|
63
|
+
|--------|-------------|
|
|
64
|
+
| `agent.email.send()` | Send a signed email |
|
|
65
|
+
| `agent.email.inbox()` | List inbox messages |
|
|
66
|
+
| `agent.email.search()` | Search by query, sender, date, label |
|
|
67
|
+
| `agent.email.reply()` | Reply with threading |
|
|
68
|
+
| `agent.email.forward()` | Forward a message |
|
|
69
|
+
| `agent.email.status()` | Account limits and capacity |
|
|
70
|
+
|
|
71
|
+
## Framework Integration
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import {
|
|
75
|
+
createJacsLangchainTools, // LangChain tool creation
|
|
76
|
+
langgraphWrapToolCall, // LangGraph tool wrapper
|
|
77
|
+
langgraphToolNode, // LangGraph tool node
|
|
78
|
+
createJacsMcpTransportProxy, // MCP transport proxy
|
|
79
|
+
getJacsMcpToolDefinitions, // MCP tool definitions
|
|
80
|
+
registerJacsMcpTools, // Register MCP tools
|
|
81
|
+
createAgentSdkToolWrapper, // Agent SDK wrapper
|
|
82
|
+
} from "@haiai/haiai";
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## A2A Integration
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { getA2AIntegration, signArtifact, verifyArtifact, exportAgentCard } from "@haiai/haiai";
|
|
89
|
+
|
|
90
|
+
const a2a = await getA2AIntegration(jacsClient, { trustPolicy: "verified" });
|
|
91
|
+
const signed = await signArtifact(jacsClient, { taskId: "t-1", input: "hello" }, "task");
|
|
92
|
+
const verified = await verifyArtifact(jacsClient, signed);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Trust Levels
|
|
96
|
+
|
|
97
|
+
| Level | Name | Requirements | What You Get |
|
|
98
|
+
|-------|------|-------------|--------------|
|
|
99
|
+
| 1 | **Registered** | JACS keypair | Cryptographic identity, @hai.ai email |
|
|
100
|
+
| 2 | **Verified** | DNS TXT record | Verified identity badge |
|
|
101
|
+
| 3 | **HAI Certified** | HAI.AI co-signing | Public leaderboard, highest trust |
|
|
102
|
+
|
|
103
|
+
## Dual Build
|
|
104
|
+
|
|
105
|
+
The package ships both ESM and CJS builds. `import` and `require` both work.
|
|
106
|
+
|
|
107
|
+
## Requirements
|
|
108
|
+
|
|
109
|
+
- Node.js 18+
|
|
110
|
+
- A JACS keypair (generated via `haiai init` or programmatically)
|
|
111
|
+
|
|
112
|
+
## Environment Variables
|
|
113
|
+
|
|
114
|
+
| Variable | Description |
|
|
115
|
+
|----------|-------------|
|
|
116
|
+
| `JACS_PRIVATE_KEY_PASSWORD` | Password for the agent's private key |
|
|
117
|
+
| `HAI_URL` | HAI.AI API base URL (default: `https://hai.ai`) |
|
|
118
|
+
|
|
119
|
+
## Links
|
|
120
|
+
|
|
121
|
+
- [HAI.AI Developer Docs](https://hai.ai/dev)
|
|
122
|
+
- [SDK Repository](https://github.com/HumanAssisted/haiai)
|
|
123
|
+
- [JACS](https://github.com/HumanAssisted/jacs)
|
|
124
|
+
|
|
125
|
+
## License
|
|
126
|
+
|
|
127
|
+
Apache-2.0 OR MIT
|
package/bin/haiai.cjs
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Binary wrapper for the haiai Rust CLI.
|
|
6
|
+
*
|
|
7
|
+
* Resolution order:
|
|
8
|
+
* 1. HAIAI_BINARY_PATH environment variable
|
|
9
|
+
* 2. Platform-specific @haiai/cli-{os}-{arch} optional dependency
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const { execFileSync } = require("child_process");
|
|
13
|
+
const { existsSync } = require("fs");
|
|
14
|
+
const path = require("path");
|
|
15
|
+
|
|
16
|
+
const PLATFORMS = {
|
|
17
|
+
"darwin-arm64": "@haiai/cli-darwin-arm64",
|
|
18
|
+
"darwin-x64": "@haiai/cli-darwin-x64",
|
|
19
|
+
"linux-x64": "@haiai/cli-linux-x64",
|
|
20
|
+
"linux-arm64": "@haiai/cli-linux-arm64",
|
|
21
|
+
"win32-x64": "@haiai/cli-win32-x64",
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
function getBinaryName() {
|
|
25
|
+
return process.platform === "win32" ? "haiai.exe" : "haiai";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function findBinary() {
|
|
29
|
+
// 1. Check env override
|
|
30
|
+
if (process.env.HAIAI_BINARY_PATH) {
|
|
31
|
+
const envPath = process.env.HAIAI_BINARY_PATH;
|
|
32
|
+
if (existsSync(envPath)) return envPath;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 2. Check platform-specific optional dependency
|
|
36
|
+
const platformKey = `${process.platform}-${process.arch}`;
|
|
37
|
+
const pkgName = PLATFORMS[platformKey];
|
|
38
|
+
if (pkgName) {
|
|
39
|
+
try {
|
|
40
|
+
const pkgDir = path.dirname(require.resolve(`${pkgName}/package.json`));
|
|
41
|
+
const binPath = path.join(pkgDir, "bin", getBinaryName());
|
|
42
|
+
if (existsSync(binPath)) return binPath;
|
|
43
|
+
} catch {
|
|
44
|
+
// Package not installed — fall through
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const binary = findBinary();
|
|
52
|
+
|
|
53
|
+
if (binary) {
|
|
54
|
+
// Exec the native binary — replaces this process
|
|
55
|
+
try {
|
|
56
|
+
execFileSync(binary, process.argv.slice(2), {
|
|
57
|
+
stdio: "inherit",
|
|
58
|
+
env: process.env,
|
|
59
|
+
});
|
|
60
|
+
} catch (err) {
|
|
61
|
+
process.exit(err.status ?? 1);
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
console.error(
|
|
65
|
+
"haiai: native binary not found for this platform.\n" +
|
|
66
|
+
`Platform: ${process.platform}-${process.arch}\n` +
|
|
67
|
+
"Install the correct @haiai/cli-* package or set HAIAI_BINARY_PATH."
|
|
68
|
+
);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
package/dist/cjs/a2a.js
ADDED
|
@@ -0,0 +1,352 @@
|
|
|
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.getA2AIntegration = getA2AIntegration;
|
|
37
|
+
exports.quickstartA2A = quickstartA2A;
|
|
38
|
+
exports.exportAgentCard = exportAgentCard;
|
|
39
|
+
exports.signArtifact = signArtifact;
|
|
40
|
+
exports.verifyArtifact = verifyArtifact;
|
|
41
|
+
exports.createChainOfCustody = createChainOfCustody;
|
|
42
|
+
exports.generateWellKnownDocuments = generateWellKnownDocuments;
|
|
43
|
+
exports.assessRemoteAgent = assessRemoteAgent;
|
|
44
|
+
exports.trustA2AAgent = trustA2AAgent;
|
|
45
|
+
exports.mergeAgentJsonWithAgentCard = mergeAgentJsonWithAgentCard;
|
|
46
|
+
exports.registerWithAgentCard = registerWithAgentCard;
|
|
47
|
+
exports.onMediatedBenchmarkJob = onMediatedBenchmarkJob;
|
|
48
|
+
const node_util_1 = require("node:util");
|
|
49
|
+
const integrations_js_1 = require("./integrations.js");
|
|
50
|
+
function isMissingModuleError(error, moduleName) {
|
|
51
|
+
if (!error || typeof error !== 'object') {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const code = error.code;
|
|
55
|
+
if (code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND') {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
const message = error.message ?? '';
|
|
59
|
+
if (message.includes(`Cannot find package '${moduleName}'`)) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
if (message.includes(`Cannot find module '${moduleName}'`)) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
if (message.includes(`Failed to load url ${moduleName}`)) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
async function loadOptionalModule(moduleName, feature, installHint) {
|
|
71
|
+
try {
|
|
72
|
+
return await Promise.resolve(`${moduleName}`).then(s => __importStar(require(s)));
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (isMissingModuleError(error, moduleName)) {
|
|
76
|
+
throw new integrations_js_1.JacsModuleError(`Optional dependency '${moduleName}' is required for ${feature}. ${installHint}`);
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function getRequiredFunction(moduleName, moduleObj, name) {
|
|
82
|
+
const value = moduleObj[name];
|
|
83
|
+
if (typeof value !== 'function') {
|
|
84
|
+
throw new integrations_js_1.JacsModuleError(`Module '${moduleName}' does not export function '${name}'. ` +
|
|
85
|
+
`Received: ${(0, node_util_1.inspect)(value, { depth: 1 })}`);
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
function getRequiredClass(moduleName, moduleObj, name) {
|
|
90
|
+
const value = moduleObj[name];
|
|
91
|
+
if (typeof value !== 'function') {
|
|
92
|
+
throw new integrations_js_1.JacsModuleError(`Module '${moduleName}' does not export class '${name}'. ` +
|
|
93
|
+
`Received: ${(0, node_util_1.inspect)(value, { depth: 1 })}`);
|
|
94
|
+
}
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
const A2A_HINT = "Install with: npm install @hai.ai/jacs";
|
|
98
|
+
const A2A_MODULE = '@hai.ai/jacs/a2a';
|
|
99
|
+
async function callIntegrationMethod(integration, methodName, args) {
|
|
100
|
+
const method = integration[methodName];
|
|
101
|
+
if (typeof method !== 'function') {
|
|
102
|
+
throw new integrations_js_1.JacsModuleError(`A2A integration missing method '${methodName}'. Received: ${(0, node_util_1.inspect)(method, { depth: 1 })}`);
|
|
103
|
+
}
|
|
104
|
+
return method.apply(integration, args);
|
|
105
|
+
}
|
|
106
|
+
function asRecord(value, label) {
|
|
107
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
108
|
+
throw new integrations_js_1.JacsModuleError(`${label} must be an object`);
|
|
109
|
+
}
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
function stringifyAgentJson(agentJson) {
|
|
113
|
+
if (typeof agentJson === 'string') {
|
|
114
|
+
return agentJson;
|
|
115
|
+
}
|
|
116
|
+
return JSON.stringify(agentJson);
|
|
117
|
+
}
|
|
118
|
+
function resolveCardProfile(agentCard) {
|
|
119
|
+
const metadata = agentCard.metadata;
|
|
120
|
+
if (metadata && typeof metadata === 'object') {
|
|
121
|
+
const profile = metadata.a2aProfile;
|
|
122
|
+
if (typeof profile === 'string' && profile.trim() !== '') {
|
|
123
|
+
return profile;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const protocolVersions = agentCard.protocolVersions;
|
|
127
|
+
if (Array.isArray(protocolVersions) && typeof protocolVersions[0] === 'string' && protocolVersions[0].trim() !== '') {
|
|
128
|
+
return protocolVersions[0];
|
|
129
|
+
}
|
|
130
|
+
const supportedInterfaces = agentCard.supportedInterfaces;
|
|
131
|
+
if (Array.isArray(supportedInterfaces)) {
|
|
132
|
+
for (const entry of supportedInterfaces) {
|
|
133
|
+
if (!entry || typeof entry !== 'object')
|
|
134
|
+
continue;
|
|
135
|
+
const version = entry.protocolVersion;
|
|
136
|
+
if (typeof version === 'string' && version.trim() !== '') {
|
|
137
|
+
return version;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return '0.4.0';
|
|
142
|
+
}
|
|
143
|
+
function valueAsString(record, key) {
|
|
144
|
+
const value = record[key];
|
|
145
|
+
return typeof value === 'string' ? value : '';
|
|
146
|
+
}
|
|
147
|
+
function mergeOptions(value) {
|
|
148
|
+
const out = {};
|
|
149
|
+
for (const [k, v] of Object.entries(value)) {
|
|
150
|
+
if (v !== undefined) {
|
|
151
|
+
out[k] = v;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return out;
|
|
155
|
+
}
|
|
156
|
+
function assertRequiredIdentityField(value, fieldName) {
|
|
157
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
158
|
+
throw new integrations_js_1.JacsModuleError(`quickstartA2A requires non-empty '${fieldName}'`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Build a JACS A2A integration instance from a caller-provided JACS client.
|
|
163
|
+
*
|
|
164
|
+
* The JACS client is typically an instance of `JacsClient` from `@hai.ai/jacs/client`.
|
|
165
|
+
*/
|
|
166
|
+
async function getA2AIntegration(jacsClient, options = {}) {
|
|
167
|
+
const mod = await loadOptionalModule(A2A_MODULE, 'A2A integration', A2A_HINT);
|
|
168
|
+
const IntegrationClass = getRequiredClass(A2A_MODULE, mod, 'JACSA2AIntegration');
|
|
169
|
+
return new IntegrationClass(jacsClient, options.trustPolicy);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Delegate to `JACSA2AIntegration.quickstart(...)` from `@hai.ai/jacs/a2a`.
|
|
173
|
+
*/
|
|
174
|
+
async function quickstartA2A(options) {
|
|
175
|
+
assertRequiredIdentityField(options.name, 'name');
|
|
176
|
+
assertRequiredIdentityField(options.domain, 'domain');
|
|
177
|
+
assertRequiredIdentityField(options.description, 'description');
|
|
178
|
+
const mod = await loadOptionalModule(A2A_MODULE, 'A2A quickstart', A2A_HINT);
|
|
179
|
+
const IntegrationClass = getRequiredClass(A2A_MODULE, mod, 'JACSA2AIntegration');
|
|
180
|
+
const quickstart = getRequiredFunction(A2A_MODULE, IntegrationClass, 'quickstart');
|
|
181
|
+
return quickstart(mergeOptions({
|
|
182
|
+
...options,
|
|
183
|
+
algorithm: options.algorithm ?? 'pq2025',
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
async function exportAgentCard(jacsClient, agentData, options = {}) {
|
|
187
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
188
|
+
return callIntegrationMethod(integration, 'exportAgentCard', [agentData]);
|
|
189
|
+
}
|
|
190
|
+
async function signArtifact(jacsClient, artifact, artifactType, parentSignatures = null, options = {}) {
|
|
191
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
192
|
+
return callIntegrationMethod(integration, 'signArtifact', [artifact, artifactType, parentSignatures]);
|
|
193
|
+
}
|
|
194
|
+
async function verifyArtifact(jacsClient, wrappedArtifact, options = {}) {
|
|
195
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
196
|
+
return callIntegrationMethod(integration, 'verifyWrappedArtifact', [wrappedArtifact]);
|
|
197
|
+
}
|
|
198
|
+
async function createChainOfCustody(jacsClient, artifacts, options = {}) {
|
|
199
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
200
|
+
return callIntegrationMethod(integration, 'createChainOfCustody', [artifacts]);
|
|
201
|
+
}
|
|
202
|
+
async function generateWellKnownDocuments(jacsClient, agentCard, jwsSignature, publicKeyB64, agentData, options = {}) {
|
|
203
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
204
|
+
return callIntegrationMethod(integration, 'generateWellKnownDocuments', [agentCard, jwsSignature, publicKeyB64, agentData]);
|
|
205
|
+
}
|
|
206
|
+
async function assessRemoteAgent(jacsClient, agentCardJson, options = {}) {
|
|
207
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
208
|
+
return callIntegrationMethod(integration, 'assessRemoteAgent', [agentCardJson]);
|
|
209
|
+
}
|
|
210
|
+
async function trustA2AAgent(jacsClient, agentCardJson, options = {}) {
|
|
211
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
212
|
+
return callIntegrationMethod(integration, 'trustA2AAgent', [agentCardJson]);
|
|
213
|
+
}
|
|
214
|
+
function mergeAgentJsonWithAgentCard(agentJson, agentCard) {
|
|
215
|
+
const base = typeof agentJson === 'string'
|
|
216
|
+
? JSON.parse(agentJson)
|
|
217
|
+
: { ...agentJson };
|
|
218
|
+
const card = asRecord(agentCard, 'agentCard');
|
|
219
|
+
base.a2aAgentCard = card;
|
|
220
|
+
if (base.skills === undefined && Array.isArray(card.skills)) {
|
|
221
|
+
base.skills = card.skills;
|
|
222
|
+
}
|
|
223
|
+
if (base.capabilities === undefined && card.capabilities && typeof card.capabilities === 'object') {
|
|
224
|
+
base.capabilities = card.capabilities;
|
|
225
|
+
}
|
|
226
|
+
const metadata = (base.metadata && typeof base.metadata === 'object')
|
|
227
|
+
? { ...base.metadata }
|
|
228
|
+
: {};
|
|
229
|
+
metadata.a2aProfile = resolveCardProfile(card);
|
|
230
|
+
metadata.a2aSkillsCount = Array.isArray(card.skills) ? card.skills.length : 0;
|
|
231
|
+
base.metadata = metadata;
|
|
232
|
+
return JSON.stringify(base);
|
|
233
|
+
}
|
|
234
|
+
async function registerWithAgentCard(haiClient, jacsClient, agentData, options = {}) {
|
|
235
|
+
const clientRecord = asRecord(haiClient, 'haiClient');
|
|
236
|
+
const register = getRequiredFunction('HaiClient', clientRecord, 'register');
|
|
237
|
+
const exportKeys = clientRecord.exportKeys;
|
|
238
|
+
const cardRaw = await exportAgentCard(jacsClient, agentData, options);
|
|
239
|
+
const agentCard = asRecord(cardRaw, 'agentCard');
|
|
240
|
+
let baseAgentJson;
|
|
241
|
+
if (options.agentJson !== undefined) {
|
|
242
|
+
baseAgentJson = options.agentJson;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
baseAgentJson = {
|
|
246
|
+
jacsId: valueAsString(agentData, 'jacsId') || valueAsString(clientRecord, 'jacsId'),
|
|
247
|
+
name: valueAsString(agentData, 'jacsName') || valueAsString(clientRecord, 'agentName'),
|
|
248
|
+
jacsVersion: valueAsString(agentData, 'jacsVersion') || '1.0.0',
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
const mergedAgentJson = mergeAgentJsonWithAgentCard(baseAgentJson, agentCard);
|
|
252
|
+
let publicKeyPem = options.publicKeyPem;
|
|
253
|
+
if (!publicKeyPem && typeof exportKeys === 'function') {
|
|
254
|
+
const exported = exportKeys.apply(clientRecord);
|
|
255
|
+
if (exported && typeof exported === 'object') {
|
|
256
|
+
const candidate = exported.publicKeyPem;
|
|
257
|
+
if (typeof candidate === 'string' && candidate.length > 0) {
|
|
258
|
+
publicKeyPem = candidate;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const registration = await register.apply(clientRecord, [mergeOptions({
|
|
263
|
+
ownerEmail: options.ownerEmail,
|
|
264
|
+
domain: options.domain,
|
|
265
|
+
description: options.description,
|
|
266
|
+
agentJson: mergedAgentJson,
|
|
267
|
+
publicKeyPem,
|
|
268
|
+
})]);
|
|
269
|
+
return {
|
|
270
|
+
registration,
|
|
271
|
+
agentCard,
|
|
272
|
+
agentJson: mergedAgentJson,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
async function onMediatedBenchmarkJob(haiClient, jacsClient, handler, options = {}) {
|
|
276
|
+
const clientRecord = asRecord(haiClient, 'haiClient');
|
|
277
|
+
const onBenchmarkJob = getRequiredFunction('HaiClient', clientRecord, 'onBenchmarkJob');
|
|
278
|
+
const submitResponse = getRequiredFunction('HaiClient', clientRecord, 'submitResponse');
|
|
279
|
+
const sendEmail = clientRecord.sendEmail;
|
|
280
|
+
const verifyInboundArtifact = options.verifyInboundArtifact ?? false;
|
|
281
|
+
const enforceTrustPolicy = options.enforceTrustPolicy ?? false;
|
|
282
|
+
const maxReconnectAttempts = options.maxReconnectAttempts ?? 0;
|
|
283
|
+
const transport = options.transport ?? 'sse';
|
|
284
|
+
let attempts = 0;
|
|
285
|
+
while (true) {
|
|
286
|
+
try {
|
|
287
|
+
await onBenchmarkJob.apply(clientRecord, [async (job) => {
|
|
288
|
+
const data = asRecord(job.data ?? {}, 'benchmark job data');
|
|
289
|
+
const jobId = valueAsString(data, 'job_id') || valueAsString(data, 'run_id') || valueAsString(job, 'runId');
|
|
290
|
+
if (!jobId) {
|
|
291
|
+
throw new integrations_js_1.JacsModuleError('benchmark job missing job_id/run_id');
|
|
292
|
+
}
|
|
293
|
+
if (enforceTrustPolicy) {
|
|
294
|
+
const remoteCard = data.remoteAgentCard ?? data.remote_agent_card ?? data.agentCard;
|
|
295
|
+
if (!remoteCard) {
|
|
296
|
+
throw new integrations_js_1.JacsModuleError('remote agent card required when trust enforcement is enabled');
|
|
297
|
+
}
|
|
298
|
+
const trust = await assessRemoteAgent(jacsClient, remoteCard, options);
|
|
299
|
+
if (trust.allowed !== true) {
|
|
300
|
+
const reason = typeof trust.reason === 'string' ? trust.reason : 'unknown reason';
|
|
301
|
+
throw new integrations_js_1.JacsModuleError(`trust policy rejected remote agent: ${reason}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
if (verifyInboundArtifact) {
|
|
305
|
+
const inbound = data.a2aTask ?? data.a2a_task;
|
|
306
|
+
if (!inbound) {
|
|
307
|
+
throw new integrations_js_1.JacsModuleError('inbound a2a task required when signature verification is enabled');
|
|
308
|
+
}
|
|
309
|
+
const verification = await verifyArtifact(jacsClient, inbound, options);
|
|
310
|
+
if (verification.valid !== true) {
|
|
311
|
+
const err = typeof verification.error === 'string' ? verification.error : 'unknown verification failure';
|
|
312
|
+
throw new integrations_js_1.JacsModuleError(`inbound a2a task signature invalid: ${err}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
const taskPayload = {
|
|
316
|
+
type: 'benchmark_job',
|
|
317
|
+
jobId,
|
|
318
|
+
scenarioId: data.scenario_id ?? data.scenarioId ?? null,
|
|
319
|
+
config: data.config ?? null,
|
|
320
|
+
};
|
|
321
|
+
const taskArtifact = await signArtifact(jacsClient, taskPayload, 'task', null, options);
|
|
322
|
+
const resultPayload = await handler(taskArtifact);
|
|
323
|
+
const resultArtifact = await signArtifact(jacsClient, resultPayload, 'task-result', [taskArtifact], options);
|
|
324
|
+
const messageValue = resultPayload.message;
|
|
325
|
+
const message = typeof messageValue === 'string' ? messageValue : JSON.stringify(resultPayload);
|
|
326
|
+
await submitResponse.apply(clientRecord, [jobId, message, {
|
|
327
|
+
metadata: {
|
|
328
|
+
a2aTask: taskArtifact,
|
|
329
|
+
a2aResult: resultArtifact,
|
|
330
|
+
},
|
|
331
|
+
processingTimeMs: 0,
|
|
332
|
+
}]);
|
|
333
|
+
if (options.notifyEmail && typeof sendEmail === 'function') {
|
|
334
|
+
const subject = options.emailSubject ?? `A2A mediated result for job ${jobId}`;
|
|
335
|
+
await sendEmail.apply(clientRecord, [{
|
|
336
|
+
to: options.notifyEmail,
|
|
337
|
+
subject,
|
|
338
|
+
body: `Signed A2A artifact:\n\n${JSON.stringify(resultArtifact, null, 2)}`,
|
|
339
|
+
}]);
|
|
340
|
+
}
|
|
341
|
+
}, { transport }]);
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
if (attempts >= maxReconnectAttempts) {
|
|
346
|
+
throw error;
|
|
347
|
+
}
|
|
348
|
+
attempts += 1;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=a2a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a.js","sourceRoot":"","sources":["../../src/a2a.ts"],"names":[],"mappings":"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"}
|