agentchannel 0.6.0 → 0.7.0
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.js +114 -18
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +16 -3
- package/dist/config.js +44 -9
- package/dist/config.js.map +1 -1
- package/dist/crypto.d.ts +26 -2
- package/dist/crypto.js +63 -8
- package/dist/crypto.js.map +1 -1
- package/dist/identity.d.ts +10 -0
- package/dist/identity.js +48 -0
- package/dist/identity.js.map +1 -0
- package/dist/mqtt-client.d.ts +14 -2
- package/dist/mqtt-client.js +148 -28
- package/dist/mqtt-client.js.map +1 -1
- package/dist/persistence.d.ts +7 -0
- package/dist/persistence.js +23 -0
- package/dist/persistence.js.map +1 -1
- package/dist/server.js +1 -0
- package/dist/server.js.map +1 -1
- package/dist/store.d.ts +2 -1
- package/dist/store.js +10 -4
- package/dist/store.js.map +1 -1
- package/dist/tools/channel.js +18 -11
- package/dist/tools/channel.js.map +1 -1
- package/dist/tools/get-message.d.ts +3 -0
- package/dist/tools/get-message.js +27 -0
- package/dist/tools/get-message.js.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/members.js +10 -5
- package/dist/tools/members.js.map +1 -1
- package/dist/tools/read.js +17 -4
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/send.js +8 -5
- package/dist/tools/send.js.map +1 -1
- package/dist/trust-store.d.ts +14 -0
- package/dist/trust-store.js +56 -0
- package/dist/trust-store.js.map +1 -0
- package/dist/types.d.ts +17 -1
- package/dist/web.js +351 -38
- package/dist/web.js.map +1 -1
- package/package.json +3 -2
package/dist/cli.js
CHANGED
|
@@ -6,7 +6,7 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
import { dirname, join } from "node:path";
|
|
7
7
|
import { startServer } from "./server.js";
|
|
8
8
|
import { AgentChatClient } from "./mqtt-client.js";
|
|
9
|
-
import { loadConfig, addChannel, removeChannel, setName as setConfigName, getChannelKey, muteChannel, unmuteChannel, isMuted } from "./config.js";
|
|
9
|
+
import { loadConfig, addChannel, removeChannel, setName as setConfigName, getChannelKey, muteChannel, unmuteChannel, isMuted, channelFullLabel, ensureIdentity } from "./config.js";
|
|
10
10
|
import { startWebUI } from "./web.js";
|
|
11
11
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
12
|
const pkg = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf8"));
|
|
@@ -35,7 +35,7 @@ program
|
|
|
35
35
|
else {
|
|
36
36
|
console.log(" Channels:");
|
|
37
37
|
for (const ch of config.channels) {
|
|
38
|
-
console.log(`
|
|
38
|
+
console.log(` ${channelFullLabel(ch)} (key: ${ch.key})`);
|
|
39
39
|
}
|
|
40
40
|
console.log();
|
|
41
41
|
}
|
|
@@ -45,13 +45,60 @@ program
|
|
|
45
45
|
.command("create")
|
|
46
46
|
.description("Create a new channel and generate a key")
|
|
47
47
|
.requiredOption("--channel <name>", "Channel name (e.g. frontend, backend, devops)")
|
|
48
|
+
.option("--sub <name>", "Subchannel name (e.g. product, bugs, design)")
|
|
48
49
|
.option("--key <key>", "Custom channel key (auto-generated if omitted)")
|
|
49
50
|
.option("--broker <url>", "Custom MQTT broker URL")
|
|
50
51
|
.action(async (opts) => {
|
|
51
|
-
const key = opts.key || randomBytes(6).toString("hex");
|
|
52
52
|
const channel = opts.channel;
|
|
53
|
+
const sub = opts.sub;
|
|
53
54
|
const config = loadConfig();
|
|
55
|
+
const existing = config.channels.find((c) => c.channel === channel && c.subchannel === sub);
|
|
56
|
+
if (existing && !opts.key) {
|
|
57
|
+
const label = channelFullLabel({ channel, subchannel: sub });
|
|
58
|
+
console.log(`\nAlready in ${label} (key: ${existing.key}). No need to create again.\n`);
|
|
59
|
+
console.log(` Send: agentchannel send "hello" --channel ${channel}${sub ? ` --sub ${sub}` : ""}`);
|
|
60
|
+
console.log(` Watch: agentchannel watch --channel ${channel}\n`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (sub) {
|
|
64
|
+
// Subchannel: key is derived from parent channel key
|
|
65
|
+
const parentKey = getChannelKey(channel);
|
|
66
|
+
if (!parentKey) {
|
|
67
|
+
console.error(`Error: Parent #${channel} not found. Create or join it first.`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
addChannel(channel, parentKey, sub);
|
|
71
|
+
// Publish updated meta with new subchannel
|
|
72
|
+
const identity = ensureIdentity();
|
|
73
|
+
const client = AgentChatClient.fromSingle({ channel, name: config.name, key: parentKey, broker: opts.broker });
|
|
74
|
+
await client.connect();
|
|
75
|
+
const existingMeta = client.getMeta(channel);
|
|
76
|
+
const subs = existingMeta?.subchannels || [];
|
|
77
|
+
if (!subs.includes(sub))
|
|
78
|
+
subs.push(sub);
|
|
79
|
+
await client.publishMeta(channel, {
|
|
80
|
+
name: existingMeta?.name || channel,
|
|
81
|
+
subchannels: subs,
|
|
82
|
+
owners: existingMeta?.owners || [identity.fingerprint],
|
|
83
|
+
created: existingMeta?.created || Date.now(),
|
|
84
|
+
});
|
|
85
|
+
await client.disconnect();
|
|
86
|
+
console.log(`\nSubchannel created!\n Channel: #${channel}\n Subchannel: ##${sub}\n Key: derived from #${channel}\n`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const key = opts.key || randomBytes(6).toString("hex");
|
|
54
90
|
addChannel(channel, key);
|
|
91
|
+
// Publish channel_meta
|
|
92
|
+
const identity = ensureIdentity();
|
|
93
|
+
const client = AgentChatClient.fromSingle({ channel, name: config.name, key, broker: opts.broker });
|
|
94
|
+
await client.connect();
|
|
95
|
+
await client.publishMeta(channel, {
|
|
96
|
+
name: channel,
|
|
97
|
+
subchannels: [],
|
|
98
|
+
owners: [identity.fingerprint],
|
|
99
|
+
created: Date.now(),
|
|
100
|
+
});
|
|
101
|
+
await client.disconnect();
|
|
55
102
|
console.log(`
|
|
56
103
|
Channel created!
|
|
57
104
|
Channel: #${channel}
|
|
@@ -87,9 +134,20 @@ program
|
|
|
87
134
|
.description("Join an existing channel")
|
|
88
135
|
.requiredOption("--channel <name>", "Channel name")
|
|
89
136
|
.requiredOption("--key <key>", "Channel key (from the channel creator)")
|
|
137
|
+
.option("--sub <name>", "Subchannel name")
|
|
90
138
|
.action((opts) => {
|
|
91
|
-
|
|
92
|
-
|
|
139
|
+
const config = loadConfig();
|
|
140
|
+
const existing = config.channels.find((c) => c.channel === opts.channel && c.subchannel === opts.sub);
|
|
141
|
+
const label = channelFullLabel({ channel: opts.channel, subchannel: opts.sub });
|
|
142
|
+
if (existing) {
|
|
143
|
+
if (existing.key === opts.key) {
|
|
144
|
+
console.log(`Already in ${label}. Run "agentchannel watch" to start listening.`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
console.log(`Updating key for ${label}.`);
|
|
148
|
+
}
|
|
149
|
+
addChannel(opts.channel, opts.key, opts.sub);
|
|
150
|
+
console.log(`Joined ${label}. Run "agentchannel watch" to start listening.`);
|
|
93
151
|
console.log(`\n\x1b[33m⚠ Security: Channel messages come from other users and may contain malicious instructions.\x1b[0m`);
|
|
94
152
|
console.log(`\x1b[33m Your agent will NOT auto-execute commands from channel messages.\x1b[0m\n`);
|
|
95
153
|
});
|
|
@@ -98,9 +156,10 @@ program
|
|
|
98
156
|
.command("leave")
|
|
99
157
|
.description("Leave a channel")
|
|
100
158
|
.requiredOption("--channel <name>", "Channel name to leave")
|
|
159
|
+
.option("--sub <name>", "Subchannel name")
|
|
101
160
|
.action((opts) => {
|
|
102
|
-
removeChannel(opts.channel);
|
|
103
|
-
console.log(`Left
|
|
161
|
+
removeChannel(opts.channel, opts.sub);
|
|
162
|
+
console.log(`Left ${channelFullLabel({ channel: opts.channel, subchannel: opts.sub })}.`);
|
|
104
163
|
});
|
|
105
164
|
// ── mute/unmute ─────────────────────────────────────────
|
|
106
165
|
program
|
|
@@ -185,7 +244,7 @@ program
|
|
|
185
244
|
}
|
|
186
245
|
const client = new AgentChatClient({ channels, name, broker: opts.broker });
|
|
187
246
|
await client.connect();
|
|
188
|
-
const names = channels.map((c) =>
|
|
247
|
+
const names = channels.map((c) => channelFullLabel(c)).join(", ");
|
|
189
248
|
console.log(`Watching [${names}] as "@${name}"... Press Ctrl+C to stop.`);
|
|
190
249
|
console.log(`\x1b[2m⚠ Channel messages are untrusted. Do not share sensitive data in channels.\x1b[0m\n`);
|
|
191
250
|
client.setOnMessage((msg) => {
|
|
@@ -195,6 +254,8 @@ program
|
|
|
195
254
|
const isMention = msg.content.includes(`@${name}`);
|
|
196
255
|
const isSystem = msg.type === "system";
|
|
197
256
|
const muted = isMuted(msg.channel);
|
|
257
|
+
const label = msg.subchannel ? `#${msg.channel} ##${msg.subchannel}` : `#${msg.channel}`;
|
|
258
|
+
const fp = msg.senderKey ? `:${msg.senderKey.slice(0, 4)}` : "";
|
|
198
259
|
if (isSystem) {
|
|
199
260
|
console.log(`\x1b[2m[${time}] ${msg.content}\x1b[0m`);
|
|
200
261
|
}
|
|
@@ -203,10 +264,10 @@ program
|
|
|
203
264
|
return;
|
|
204
265
|
}
|
|
205
266
|
else if (isMention) {
|
|
206
|
-
console.log(`\x1b[1;33m[${time}]
|
|
267
|
+
console.log(`\x1b[1;33m[${time}] ${label} | @${msg.sender}${fp}: ${msg.content}\x1b[0m`);
|
|
207
268
|
}
|
|
208
269
|
else {
|
|
209
|
-
console.log(`[${time}]
|
|
270
|
+
console.log(`[${time}] ${label} | @${msg.sender}${fp}: ${msg.content}`);
|
|
210
271
|
}
|
|
211
272
|
notify(msg.sender, msg.content, msg.channel, isMention);
|
|
212
273
|
});
|
|
@@ -219,7 +280,7 @@ program
|
|
|
219
280
|
program
|
|
220
281
|
.command("web")
|
|
221
282
|
.description("Open Web UI in browser")
|
|
222
|
-
.option("--port <number>", "Port number", "
|
|
283
|
+
.option("--port <number>", "Port number", "1024")
|
|
223
284
|
.action((opts) => {
|
|
224
285
|
const config = loadConfig();
|
|
225
286
|
if (config.channels.length === 0) {
|
|
@@ -239,18 +300,20 @@ program
|
|
|
239
300
|
.command("send <message>")
|
|
240
301
|
.description("Send a message to a channel")
|
|
241
302
|
.requiredOption("--channel <name>", "Channel name")
|
|
303
|
+
.option("--sub <name>", "Subchannel name")
|
|
242
304
|
.option("--key <key>", "Channel key (default: from config)")
|
|
243
305
|
.option("--name <nickname>", "Display name (default: from config)")
|
|
244
306
|
.option("--broker <url>", "Custom MQTT broker URL")
|
|
245
307
|
.action(async (message, opts) => {
|
|
246
308
|
const config = loadConfig();
|
|
247
309
|
const name = opts.name || config.name;
|
|
248
|
-
const key = opts.key || getChannelKey(opts.channel);
|
|
310
|
+
const key = opts.key || getChannelKey(opts.channel, opts.sub);
|
|
249
311
|
if (!key) {
|
|
250
|
-
|
|
312
|
+
const label = channelFullLabel({ channel: opts.channel, subchannel: opts.sub });
|
|
313
|
+
console.error(`Error: No key for ${label}. Join it first.`);
|
|
251
314
|
process.exit(1);
|
|
252
315
|
}
|
|
253
|
-
const client = AgentChatClient.fromSingle({ channel: opts.channel, name, key, broker: opts.broker });
|
|
316
|
+
const client = AgentChatClient.fromSingle({ channel: opts.channel, subchannel: opts.sub, name, key, broker: opts.broker, silent: true });
|
|
254
317
|
await client.connect();
|
|
255
318
|
await client.send(message);
|
|
256
319
|
console.log("Message sent.");
|
|
@@ -261,17 +324,19 @@ program
|
|
|
261
324
|
.command("read")
|
|
262
325
|
.description("Read recent messages from a channel")
|
|
263
326
|
.requiredOption("--channel <name>", "Channel name")
|
|
327
|
+
.option("--sub <name>", "Subchannel name")
|
|
264
328
|
.option("--key <key>", "Channel key (default: from config)")
|
|
265
329
|
.option("--broker <url>", "Custom MQTT broker URL")
|
|
266
330
|
.option("-n, --limit <number>", "Number of messages to read", "20")
|
|
267
331
|
.action(async (opts) => {
|
|
268
332
|
const config = loadConfig();
|
|
269
|
-
const key = opts.key || getChannelKey(opts.channel);
|
|
333
|
+
const key = opts.key || getChannelKey(opts.channel, opts.sub);
|
|
270
334
|
if (!key) {
|
|
271
|
-
|
|
335
|
+
const label = channelFullLabel({ channel: opts.channel, subchannel: opts.sub });
|
|
336
|
+
console.error(`Error: No key for ${label}. Join it first.`);
|
|
272
337
|
process.exit(1);
|
|
273
338
|
}
|
|
274
|
-
const client = AgentChatClient.fromSingle({ channel: opts.channel, name:
|
|
339
|
+
const client = AgentChatClient.fromSingle({ channel: opts.channel, subchannel: opts.sub, name: config.name, key, broker: opts.broker });
|
|
275
340
|
await client.connect();
|
|
276
341
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
277
342
|
const messages = client.store.getMessages(parseInt(opts.limit, 10));
|
|
@@ -281,11 +346,42 @@ program
|
|
|
281
346
|
else {
|
|
282
347
|
for (const msg of messages) {
|
|
283
348
|
const time = new Date(msg.timestamp).toLocaleTimeString();
|
|
284
|
-
|
|
349
|
+
const label = msg.subchannel ? `#${msg.channel} ##${msg.subchannel}` : `#${msg.channel}`;
|
|
350
|
+
const fp = msg.senderKey ? `:${msg.senderKey.slice(0, 4)}` : "";
|
|
351
|
+
console.log(`[${time}] ${label} | @${msg.sender}${fp}: ${msg.content}`);
|
|
285
352
|
}
|
|
286
353
|
}
|
|
287
354
|
await client.disconnect();
|
|
288
355
|
});
|
|
356
|
+
// ── invite ─────────────────────────────────────────────
|
|
357
|
+
program
|
|
358
|
+
.command("invite")
|
|
359
|
+
.description("Generate an invite link for a channel")
|
|
360
|
+
.requiredOption("--channel <name>", "Channel name")
|
|
361
|
+
.action((opts) => {
|
|
362
|
+
const key = getChannelKey(opts.channel);
|
|
363
|
+
if (!key) {
|
|
364
|
+
console.error(`Error: No key for #${opts.channel}. Join or create it first.`);
|
|
365
|
+
process.exit(1);
|
|
366
|
+
}
|
|
367
|
+
const inviteCmd = `agentchannel join --channel ${opts.channel} --key ${key}`;
|
|
368
|
+
const mcpConfig = `{"mcpServers":{"agentchannel":{"command":"npx","args":["-y","agentchannel","serve","--channel","${opts.channel}","--key","${key}"]}}}`;
|
|
369
|
+
console.log(`
|
|
370
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
371
|
+
Invite to #${opts.channel}
|
|
372
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
373
|
+
|
|
374
|
+
Share this with your team:
|
|
375
|
+
|
|
376
|
+
${inviteCmd}
|
|
377
|
+
|
|
378
|
+
MCP config (for AI tools):
|
|
379
|
+
|
|
380
|
+
${mcpConfig}
|
|
381
|
+
|
|
382
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
383
|
+
`);
|
|
384
|
+
});
|
|
289
385
|
// ── helpers ─────────────────────────────────────────────
|
|
290
386
|
function notify(sender, content, channel, isMention = false) {
|
|
291
387
|
const truncated = content.length > 100 ? content.slice(0, 100) + "..." : content;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
import type { ChannelConfig } from "./types.js";
|
|
2
|
+
export { ensureIdentity } from "./identity.js";
|
|
2
3
|
export interface AppConfig {
|
|
3
4
|
name: string;
|
|
4
5
|
channels: ChannelConfig[];
|
|
5
6
|
muted: string[];
|
|
6
7
|
permissions: Record<string, string[]>;
|
|
7
8
|
}
|
|
9
|
+
export declare function channelLabel(ch: {
|
|
10
|
+
channel: string;
|
|
11
|
+
subchannel?: string;
|
|
12
|
+
}): string;
|
|
13
|
+
export declare function channelFullLabel(ch: {
|
|
14
|
+
channel: string;
|
|
15
|
+
subchannel?: string;
|
|
16
|
+
}): string;
|
|
17
|
+
export declare function channelId(ch: {
|
|
18
|
+
channel: string;
|
|
19
|
+
subchannel?: string;
|
|
20
|
+
}): string;
|
|
8
21
|
export declare function loadConfig(): AppConfig;
|
|
9
22
|
export declare function saveConfig(config: AppConfig): void;
|
|
10
|
-
export declare function addChannel(channel: string, key: string): void;
|
|
11
|
-
export declare function removeChannel(channel: string): void;
|
|
23
|
+
export declare function addChannel(channel: string, key: string, subchannel?: string): void;
|
|
24
|
+
export declare function removeChannel(channel: string, subchannel?: string): void;
|
|
12
25
|
export declare function setName(name: string): void;
|
|
13
|
-
export declare function getChannelKey(channel: string): string | undefined;
|
|
26
|
+
export declare function getChannelKey(channel: string, subchannel?: string): string | undefined;
|
|
14
27
|
export declare function muteChannel(channel: string): void;
|
|
15
28
|
export declare function unmuteChannel(channel: string): void;
|
|
16
29
|
export declare function isMuted(channel: string): boolean;
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,9 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { userInfo } from "node:os";
|
|
5
|
+
import { validateSubchannelName } from "./crypto.js";
|
|
6
|
+
// Re-export identity for convenience
|
|
7
|
+
export { ensureIdentity } from "./identity.js";
|
|
5
8
|
const CONFIG_DIR = join(homedir(), ".agentchannel");
|
|
6
9
|
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
7
10
|
const OFFICIAL_CHANNEL = { channel: "AgentChannel", key: "agentchannel-public-2026" };
|
|
@@ -13,14 +16,36 @@ function defaultConfig() {
|
|
|
13
16
|
permissions: {},
|
|
14
17
|
};
|
|
15
18
|
}
|
|
19
|
+
// Migrate old "channel/sub" format to { channel, subchannel }
|
|
20
|
+
function migrateChannel(ch) {
|
|
21
|
+
if (!ch.subchannel && ch.channel.includes("/")) {
|
|
22
|
+
const parts = ch.channel.split("/");
|
|
23
|
+
return { channel: parts[0], subchannel: parts.slice(1).join("/"), key: ch.key };
|
|
24
|
+
}
|
|
25
|
+
return ch;
|
|
26
|
+
}
|
|
27
|
+
// Display label: #channel or ##subchannel
|
|
28
|
+
export function channelLabel(ch) {
|
|
29
|
+
return ch.subchannel ? `##${ch.subchannel}` : `#${ch.channel}`;
|
|
30
|
+
}
|
|
31
|
+
// Full display: #channel ##subchannel
|
|
32
|
+
export function channelFullLabel(ch) {
|
|
33
|
+
return ch.subchannel ? `#${ch.channel} ##${ch.subchannel}` : `#${ch.channel}`;
|
|
34
|
+
}
|
|
35
|
+
// Unique identifier for a channel/subchannel combo
|
|
36
|
+
export function channelId(ch) {
|
|
37
|
+
return ch.subchannel ? `${ch.channel}/${ch.subchannel}` : ch.channel;
|
|
38
|
+
}
|
|
16
39
|
export function loadConfig() {
|
|
17
40
|
if (!existsSync(CONFIG_FILE))
|
|
18
41
|
return defaultConfig();
|
|
19
42
|
try {
|
|
20
43
|
const data = JSON.parse(readFileSync(CONFIG_FILE, "utf8"));
|
|
21
|
-
const
|
|
44
|
+
const rawChannels = Array.isArray(data.channels) ? data.channels : [];
|
|
45
|
+
// Migrate old "/" format and deduplicate
|
|
46
|
+
const channels = rawChannels.map(migrateChannel);
|
|
22
47
|
// Ensure official channel is always present
|
|
23
|
-
if (!channels.some((c) => c.channel.toLowerCase() === OFFICIAL_CHANNEL.channel.toLowerCase())) {
|
|
48
|
+
if (!channels.some((c) => c.channel.toLowerCase() === OFFICIAL_CHANNEL.channel.toLowerCase() && !c.subchannel)) {
|
|
24
49
|
channels.push(OFFICIAL_CHANNEL);
|
|
25
50
|
}
|
|
26
51
|
return {
|
|
@@ -40,20 +65,30 @@ export function saveConfig(config) {
|
|
|
40
65
|
}
|
|
41
66
|
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + "\n");
|
|
42
67
|
}
|
|
43
|
-
export function addChannel(channel, key) {
|
|
68
|
+
export function addChannel(channel, key, subchannel) {
|
|
69
|
+
if (subchannel && !validateSubchannelName(subchannel)) {
|
|
70
|
+
throw new Error(`Invalid subchannel name "${subchannel}". Must match [a-zA-Z0-9._-]{1,64}`);
|
|
71
|
+
}
|
|
44
72
|
const config = loadConfig();
|
|
45
|
-
const existing = config.channels.find((c) => c.channel === channel);
|
|
73
|
+
const existing = config.channels.find((c) => c.channel === channel && c.subchannel === subchannel);
|
|
46
74
|
if (existing) {
|
|
47
75
|
existing.key = key;
|
|
48
76
|
}
|
|
49
77
|
else {
|
|
50
|
-
config.channels.push({ channel, key });
|
|
78
|
+
config.channels.push(subchannel ? { channel, subchannel, key } : { channel, key });
|
|
51
79
|
}
|
|
52
80
|
saveConfig(config);
|
|
53
81
|
}
|
|
54
|
-
export function removeChannel(channel) {
|
|
82
|
+
export function removeChannel(channel, subchannel) {
|
|
55
83
|
const config = loadConfig();
|
|
56
|
-
|
|
84
|
+
if (subchannel) {
|
|
85
|
+
// Remove only the specific subchannel
|
|
86
|
+
config.channels = config.channels.filter((c) => !(c.channel === channel && c.subchannel === subchannel));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Remove channel AND all its subchannels
|
|
90
|
+
config.channels = config.channels.filter((c) => c.channel !== channel);
|
|
91
|
+
}
|
|
57
92
|
saveConfig(config);
|
|
58
93
|
}
|
|
59
94
|
export function setName(name) {
|
|
@@ -61,9 +96,9 @@ export function setName(name) {
|
|
|
61
96
|
config.name = name;
|
|
62
97
|
saveConfig(config);
|
|
63
98
|
}
|
|
64
|
-
export function getChannelKey(channel) {
|
|
99
|
+
export function getChannelKey(channel, subchannel) {
|
|
65
100
|
const config = loadConfig();
|
|
66
|
-
return config.channels.find((c) => c.channel === channel)?.key;
|
|
101
|
+
return config.channels.find((c) => c.channel === channel && c.subchannel === subchannel)?.key;
|
|
67
102
|
}
|
|
68
103
|
export function muteChannel(channel) {
|
|
69
104
|
const config = loadConfig();
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/crypto.d.ts
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP-1 Cryptographic Layer
|
|
3
|
+
* AgentChannel Protocol v1 — LOCKED, no breaking changes after release.
|
|
4
|
+
*
|
|
5
|
+
* Key derivation: HKDF-SHA256 (RFC 5869)
|
|
6
|
+
* Encryption: AES-256-GCM
|
|
7
|
+
* Topic IDs: derived from PRK (not raw key) — 128-bit
|
|
8
|
+
*/
|
|
1
9
|
import type { EncryptedPayload } from "./types.js";
|
|
2
|
-
export declare function
|
|
3
|
-
|
|
10
|
+
export declare function validateSubchannelName(name: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Derive channel encryption key (epoch 0).
|
|
13
|
+
*/
|
|
14
|
+
export declare function deriveKey(channelKey: string): Buffer;
|
|
15
|
+
/**
|
|
16
|
+
* Derive subchannel encryption key (epoch 0).
|
|
17
|
+
*/
|
|
18
|
+
export declare function deriveSubKey(channelKey: string, subName: string): Buffer;
|
|
19
|
+
/**
|
|
20
|
+
* Derive channel topic ID (32 hex chars, 128 bits).
|
|
21
|
+
* Derived from PRK — not computable without the channel key.
|
|
22
|
+
*/
|
|
23
|
+
export declare function hashRoom(channelKey: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Derive subchannel topic ID (32 hex chars, 128 bits).
|
|
26
|
+
*/
|
|
27
|
+
export declare function hashSub(channelKey: string, subName: string): string;
|
|
4
28
|
export declare function encrypt(plaintext: string, key: Buffer): EncryptedPayload;
|
|
5
29
|
export declare function decrypt(payload: EncryptedPayload, key: Buffer): string;
|
package/dist/crypto.js
CHANGED
|
@@ -1,14 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ACP-1 Cryptographic Layer
|
|
3
|
+
* AgentChannel Protocol v1 — LOCKED, no breaking changes after release.
|
|
4
|
+
*
|
|
5
|
+
* Key derivation: HKDF-SHA256 (RFC 5869)
|
|
6
|
+
* Encryption: AES-256-GCM
|
|
7
|
+
* Topic IDs: derived from PRK (not raw key) — 128-bit
|
|
8
|
+
*/
|
|
9
|
+
import { hkdfSync, randomBytes, createCipheriv, createDecipheriv } from "node:crypto";
|
|
10
|
+
const EXTRACT_SALT = "acp1:extract";
|
|
5
11
|
const IV_LENGTH = 12;
|
|
6
|
-
|
|
7
|
-
|
|
12
|
+
const KEY_LENGTH = 32;
|
|
13
|
+
const TOPIC_LENGTH = 16; // 128-bit topic IDs
|
|
14
|
+
// Subchannel name validation: [a-zA-Z0-9._-]{1,64}
|
|
15
|
+
const SUBCHANNEL_RE = /^[a-zA-Z0-9._-]{1,64}$/;
|
|
16
|
+
export function validateSubchannelName(name) {
|
|
17
|
+
return SUBCHANNEL_RE.test(name);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Extract PRK from channel key using HKDF-Extract.
|
|
21
|
+
* This is the root of all key derivation for a channel.
|
|
22
|
+
*/
|
|
23
|
+
function extractPRK(channelKey) {
|
|
24
|
+
// For now, all keys are treated as passphrases (string input).
|
|
25
|
+
// Future: detect 32-byte base64url keys and skip Argon2id.
|
|
26
|
+
// HKDF-Extract: PRK = HMAC-SHA256(salt, IKM)
|
|
27
|
+
return Buffer.from(hkdfSync("sha256", channelKey, EXTRACT_SALT, "", KEY_LENGTH));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Derive a key using HKDF-Expand from PRK.
|
|
31
|
+
*/
|
|
32
|
+
function expand(prk, info, length = KEY_LENGTH) {
|
|
33
|
+
return Buffer.from(hkdfSync("sha256", prk, "", info, length));
|
|
34
|
+
}
|
|
35
|
+
// ── Channel key derivation ─────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* Derive channel encryption key (epoch 0).
|
|
38
|
+
*/
|
|
39
|
+
export function deriveKey(channelKey) {
|
|
40
|
+
const prk = extractPRK(channelKey);
|
|
41
|
+
return expand(prk, "acp1:enc:channel:epoch:0");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Derive subchannel encryption key (epoch 0).
|
|
45
|
+
*/
|
|
46
|
+
export function deriveSubKey(channelKey, subName) {
|
|
47
|
+
const prk = extractPRK(channelKey);
|
|
48
|
+
return expand(prk, `acp1:enc:sub:${subName}:epoch:0`);
|
|
49
|
+
}
|
|
50
|
+
// ── Topic ID derivation (128-bit, from PRK) ────────────
|
|
51
|
+
/**
|
|
52
|
+
* Derive channel topic ID (32 hex chars, 128 bits).
|
|
53
|
+
* Derived from PRK — not computable without the channel key.
|
|
54
|
+
*/
|
|
55
|
+
export function hashRoom(channelKey) {
|
|
56
|
+
const prk = extractPRK(channelKey);
|
|
57
|
+
return expand(prk, "acp1:topic:channel", TOPIC_LENGTH).toString("hex");
|
|
8
58
|
}
|
|
9
|
-
|
|
10
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Derive subchannel topic ID (32 hex chars, 128 bits).
|
|
61
|
+
*/
|
|
62
|
+
export function hashSub(channelKey, subName) {
|
|
63
|
+
const prk = extractPRK(channelKey);
|
|
64
|
+
return expand(prk, `acp1:topic:sub:${subName}`, TOPIC_LENGTH).toString("hex");
|
|
11
65
|
}
|
|
66
|
+
// ── AES-256-GCM encryption ────────────────────────────
|
|
12
67
|
export function encrypt(plaintext, key) {
|
|
13
68
|
const iv = randomBytes(IV_LENGTH);
|
|
14
69
|
const cipher = createCipheriv("aes-256-gcm", key, iv);
|
package/dist/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface Identity {
|
|
2
|
+
publicKeyPem: string;
|
|
3
|
+
privateKeyPem: string;
|
|
4
|
+
fingerprint: string;
|
|
5
|
+
createdAt: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function getFingerprint(publicKeyPem: string): string;
|
|
8
|
+
export declare function ensureIdentity(): Identity;
|
|
9
|
+
export declare function signMessage(content: string, privateKeyPem: string): string;
|
|
10
|
+
export declare function verifySignature(content: string, signature: string, publicKeyPem: string): boolean;
|
package/dist/identity.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { generateKeyPairSync, sign, verify, createPublicKey, createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
const IDENTITY_DIR = join(homedir(), ".agentchannel");
|
|
6
|
+
const IDENTITY_FILE = join(IDENTITY_DIR, "identity.json");
|
|
7
|
+
export function getFingerprint(publicKeyPem) {
|
|
8
|
+
const hash = createHash("sha256").update(publicKeyPem).digest("hex");
|
|
9
|
+
return hash.slice(0, 12);
|
|
10
|
+
}
|
|
11
|
+
export function ensureIdentity() {
|
|
12
|
+
if (existsSync(IDENTITY_FILE)) {
|
|
13
|
+
try {
|
|
14
|
+
const data = JSON.parse(readFileSync(IDENTITY_FILE, "utf-8"));
|
|
15
|
+
if (data.publicKeyPem && data.privateKeyPem && data.fingerprint) {
|
|
16
|
+
return data;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch { }
|
|
20
|
+
}
|
|
21
|
+
const { publicKey, privateKey } = generateKeyPairSync("ed25519");
|
|
22
|
+
const publicKeyPem = publicKey.export({ format: "pem", type: "spki" });
|
|
23
|
+
const privateKeyPem = privateKey.export({ format: "pem", type: "pkcs8" });
|
|
24
|
+
const fingerprint = getFingerprint(publicKeyPem);
|
|
25
|
+
const identity = {
|
|
26
|
+
publicKeyPem,
|
|
27
|
+
privateKeyPem,
|
|
28
|
+
fingerprint,
|
|
29
|
+
createdAt: Date.now(),
|
|
30
|
+
};
|
|
31
|
+
mkdirSync(IDENTITY_DIR, { recursive: true });
|
|
32
|
+
writeFileSync(IDENTITY_FILE, JSON.stringify(identity, null, 2), { mode: 0o600 });
|
|
33
|
+
return identity;
|
|
34
|
+
}
|
|
35
|
+
export function signMessage(content, privateKeyPem) {
|
|
36
|
+
const sig = sign(null, Buffer.from(content), privateKeyPem);
|
|
37
|
+
return sig.toString("base64");
|
|
38
|
+
}
|
|
39
|
+
export function verifySignature(content, signature, publicKeyPem) {
|
|
40
|
+
try {
|
|
41
|
+
const pubKey = createPublicKey({ key: publicKeyPem, format: "pem", type: "spki" });
|
|
42
|
+
return verify(null, Buffer.from(content), pubKey, Buffer.from(signature, "base64"));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=identity.js.map
|