@agentvault/secure-channel 0.1.0 → 0.1.1
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/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +145 -0
- package/dist/cli.js.map +1 -0
- package/package.json +8 -2
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { SecureChannel } from "./channel.js";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { createInterface } from "node:readline";
|
|
5
|
+
// --- Parse args ---
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
const flags = {};
|
|
8
|
+
for (const arg of args) {
|
|
9
|
+
const match = arg.match(/^--(\w[\w-]*)=(.+)$/);
|
|
10
|
+
if (match) {
|
|
11
|
+
flags[match[1]] = match[2];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const token = flags["token"] || process.env.AGENTVAULT_INVITE_TOKEN;
|
|
15
|
+
const name = flags["name"] || process.env.AGENTVAULT_AGENT_NAME || "CLI Agent";
|
|
16
|
+
const dataDir = flags["data-dir"] || process.env.AGENTVAULT_DATA_DIR || "./agentvault-data";
|
|
17
|
+
const apiUrl = flags["api-url"] || process.env.AGENTVAULT_API_URL || "https://api.agentvault.chat";
|
|
18
|
+
if (!token) {
|
|
19
|
+
console.error(`
|
|
20
|
+
AgentVault Secure Channel CLI
|
|
21
|
+
|
|
22
|
+
Usage:
|
|
23
|
+
npx @agentvault/secure-channel --token=YOUR_INVITE_TOKEN
|
|
24
|
+
|
|
25
|
+
Options:
|
|
26
|
+
--token=TOKEN Invite token from the AgentVault dashboard (required on first run)
|
|
27
|
+
--name=NAME Agent display name (default: "CLI Agent")
|
|
28
|
+
--data-dir=PATH Directory for persistent state (default: ./agentvault-data)
|
|
29
|
+
--api-url=URL API endpoint (default: https://api.agentvault.chat)
|
|
30
|
+
|
|
31
|
+
Environment variables:
|
|
32
|
+
AGENTVAULT_INVITE_TOKEN Same as --token
|
|
33
|
+
AGENTVAULT_AGENT_NAME Same as --name
|
|
34
|
+
AGENTVAULT_DATA_DIR Same as --data-dir
|
|
35
|
+
AGENTVAULT_API_URL Same as --api-url
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
npx @agentvault/secure-channel --token=av_tok_abc123 --name="My Agent"
|
|
39
|
+
`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
// --- State display ---
|
|
43
|
+
const stateMessages = {
|
|
44
|
+
idle: "Initializing...",
|
|
45
|
+
enrolling: "Enrolling with server...",
|
|
46
|
+
polling: "Waiting for owner approval (check your dashboard)...",
|
|
47
|
+
activating: "Approved! Setting up encryption...",
|
|
48
|
+
connecting: "Connecting secure channel...",
|
|
49
|
+
ready: "Secure channel is live! Type a message and press Enter to send.",
|
|
50
|
+
disconnected: "Disconnected — reconnecting...",
|
|
51
|
+
error: "Error occurred.",
|
|
52
|
+
};
|
|
53
|
+
// --- Start channel ---
|
|
54
|
+
const channel = new SecureChannel({
|
|
55
|
+
inviteToken: token,
|
|
56
|
+
dataDir: resolve(dataDir),
|
|
57
|
+
apiUrl,
|
|
58
|
+
agentName: name,
|
|
59
|
+
onMessage: (plaintext, metadata) => {
|
|
60
|
+
const time = new Date(metadata.timestamp).toLocaleTimeString();
|
|
61
|
+
console.log(`\n [${time}] Owner: ${plaintext}`);
|
|
62
|
+
process.stdout.write("\n> ");
|
|
63
|
+
},
|
|
64
|
+
onStateChange: (state) => {
|
|
65
|
+
console.log(`\n ${stateMessages[state]}`);
|
|
66
|
+
if (state === "polling" && channel.fingerprint) {
|
|
67
|
+
console.log(` Fingerprint: ${channel.fingerprint}`);
|
|
68
|
+
console.log(" Verify this matches the fingerprint shown in your dashboard.");
|
|
69
|
+
}
|
|
70
|
+
if (state === "ready") {
|
|
71
|
+
console.log(" Messages are end-to-end encrypted. The server cannot read them.\n");
|
|
72
|
+
process.stdout.write("> ");
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
channel.on("error", (err) => {
|
|
77
|
+
console.error(`\n Error: ${err.message}`);
|
|
78
|
+
});
|
|
79
|
+
console.log(`
|
|
80
|
+
╔══════════════════════════════════════════════╗
|
|
81
|
+
║ AgentVault Secure Channel ║
|
|
82
|
+
║ ║
|
|
83
|
+
║ Agent: ${name.padEnd(37)}║
|
|
84
|
+
║ API: ${apiUrl.padEnd(37)}║
|
|
85
|
+
╚══════════════════════════════════════════════╝
|
|
86
|
+
`);
|
|
87
|
+
await channel.start();
|
|
88
|
+
// --- Interactive input ---
|
|
89
|
+
const rl = createInterface({
|
|
90
|
+
input: process.stdin,
|
|
91
|
+
output: process.stdout,
|
|
92
|
+
prompt: "> ",
|
|
93
|
+
});
|
|
94
|
+
rl.on("line", async (line) => {
|
|
95
|
+
const msg = line.trim();
|
|
96
|
+
if (!msg) {
|
|
97
|
+
rl.prompt();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (msg === "/quit" || msg === "/exit") {
|
|
101
|
+
console.log("\n Shutting down...");
|
|
102
|
+
await channel.stop();
|
|
103
|
+
rl.close();
|
|
104
|
+
process.exit(0);
|
|
105
|
+
}
|
|
106
|
+
if (msg === "/status") {
|
|
107
|
+
console.log(` State: ${channel.state}`);
|
|
108
|
+
console.log(` Device: ${channel.deviceId ?? "not enrolled"}`);
|
|
109
|
+
console.log(` Fingerprint: ${channel.fingerprint ?? "n/a"}`);
|
|
110
|
+
console.log(` Conversation: ${channel.conversationId ?? "n/a"}`);
|
|
111
|
+
rl.prompt();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (msg === "/help") {
|
|
115
|
+
console.log(" Commands:");
|
|
116
|
+
console.log(" /status — Show connection status");
|
|
117
|
+
console.log(" /quit — Disconnect and exit");
|
|
118
|
+
console.log(" /help — Show this help");
|
|
119
|
+
console.log(" Anything else is sent as a message to the owner.");
|
|
120
|
+
rl.prompt();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (channel.state !== "ready") {
|
|
124
|
+
console.log(" Channel is not ready yet. Wait for the owner to approve.");
|
|
125
|
+
rl.prompt();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
await channel.send(msg);
|
|
130
|
+
const time = new Date().toLocaleTimeString();
|
|
131
|
+
console.log(` [${time}] You: ${msg}`);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
console.error(` Failed to send: ${err.message}`);
|
|
135
|
+
}
|
|
136
|
+
rl.prompt();
|
|
137
|
+
});
|
|
138
|
+
// Graceful shutdown
|
|
139
|
+
process.on("SIGINT", async () => {
|
|
140
|
+
console.log("\n Shutting down...");
|
|
141
|
+
await channel.stop();
|
|
142
|
+
rl.close();
|
|
143
|
+
process.exit(0);
|
|
144
|
+
});
|
|
145
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentvault/secure-channel",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,7 +10,13 @@
|
|
|
10
10
|
"test": "vitest run",
|
|
11
11
|
"test:watch": "vitest"
|
|
12
12
|
},
|
|
13
|
-
"
|
|
13
|
+
"bin": {
|
|
14
|
+
"agentvault": "dist/cli.js",
|
|
15
|
+
"secure-channel": "dist/cli.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
14
20
|
"publishConfig": {
|
|
15
21
|
"access": "public"
|
|
16
22
|
},
|