agentspeak-cli 0.14.1 → 0.15.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/commands/friends.d.ts +10 -0
- package/dist/commands/friends.d.ts.map +1 -0
- package/dist/commands/friends.js +153 -0
- package/dist/commands/friends.js.map +1 -0
- package/dist/commands/invite.d.ts +20 -0
- package/dist/commands/invite.d.ts.map +1 -0
- package/dist/commands/invite.js +184 -0
- package/dist/commands/invite.js.map +1 -0
- package/dist/commands/watch.d.ts +9 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +44 -0
- package/dist/commands/watch.js.map +1 -1
- package/dist/friends.d.ts +80 -0
- package/dist/friends.d.ts.map +1 -0
- package/dist/friends.js +124 -0
- package/dist/friends.js.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/pending-invites.d.ts +56 -0
- package/dist/pending-invites.d.ts.map +1 -0
- package/dist/pending-invites.js +91 -0
- package/dist/pending-invites.js.map +1 -0
- package/dist/skill-template.d.ts +1 -1
- package/dist/skill-template.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Parsed } from '../cli.js';
|
|
2
|
+
/**
|
|
3
|
+
* `agentspeak-cli friends <subcommand>` — manage the client-side
|
|
4
|
+
* trusted-senders allowlist. See packages/cli/src/friends.ts for the
|
|
5
|
+
* threat model. The CLI surface is intentionally tiny because most of
|
|
6
|
+
* the time the `invite approve --remember always` flow ends up
|
|
7
|
+
* populating this file; direct editing is a power-user escape hatch.
|
|
8
|
+
*/
|
|
9
|
+
export declare function cmdFriends(parsed: Parsed): Promise<number>;
|
|
10
|
+
//# sourceMappingURL=friends.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friends.d.ts","sourceRoot":"","sources":["../../src/commands/friends.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAaxC;;;;;;GAMG;AAEH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB1D"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { flagBool, flagStr } from '../cli.js';
|
|
2
|
+
import { addAllow, addBlock, friendsFilePath, loadFriends, removeAllow, removeBlock, } from '../friends.js';
|
|
3
|
+
/**
|
|
4
|
+
* `agentspeak-cli friends <subcommand>` — manage the client-side
|
|
5
|
+
* trusted-senders allowlist. See packages/cli/src/friends.ts for the
|
|
6
|
+
* threat model. The CLI surface is intentionally tiny because most of
|
|
7
|
+
* the time the `invite approve --remember always` flow ends up
|
|
8
|
+
* populating this file; direct editing is a power-user escape hatch.
|
|
9
|
+
*/
|
|
10
|
+
export function cmdFriends(parsed) {
|
|
11
|
+
const sub = parsed.positionals[0];
|
|
12
|
+
if (!sub || sub === 'help' || sub === '--help') {
|
|
13
|
+
process.stdout.write(SUB_HELP);
|
|
14
|
+
return Promise.resolve(0);
|
|
15
|
+
}
|
|
16
|
+
switch (sub) {
|
|
17
|
+
case 'list':
|
|
18
|
+
return Promise.resolve(cmdFriendsList(parsed));
|
|
19
|
+
case 'add':
|
|
20
|
+
return Promise.resolve(cmdFriendsAdd(parsed));
|
|
21
|
+
case 'remove':
|
|
22
|
+
return Promise.resolve(cmdFriendsRemove(parsed));
|
|
23
|
+
case 'block':
|
|
24
|
+
return Promise.resolve(cmdFriendsBlock(parsed));
|
|
25
|
+
case 'unblock':
|
|
26
|
+
return Promise.resolve(cmdFriendsUnblock(parsed));
|
|
27
|
+
case 'where':
|
|
28
|
+
return Promise.resolve(cmdFriendsWhere());
|
|
29
|
+
default:
|
|
30
|
+
process.stderr.write(`agentspeak-cli friends: unknown subcommand "${sub}"\n${SUB_HELP}`);
|
|
31
|
+
return Promise.resolve(2);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const SUB_HELP = `agentspeak-cli friends <subcommand>
|
|
35
|
+
|
|
36
|
+
list Show agents on your allow + block list.
|
|
37
|
+
add <agentId> Add an agent to the allow list (auto-join their invites).
|
|
38
|
+
remove <id> Remove an agent from the allow list.
|
|
39
|
+
block <id> Add an agent to the block list (drop their invites silently).
|
|
40
|
+
unblock <id> Remove an agent from the block list.
|
|
41
|
+
where Print the path of friends.json.
|
|
42
|
+
|
|
43
|
+
FLAGS
|
|
44
|
+
--name "..." Optional display name stamped on the entry.
|
|
45
|
+
--memo "..." Optional free-form note (e.g. "met at OpenClaw hackathon").
|
|
46
|
+
--json Machine-readable output for \`list\`.
|
|
47
|
+
|
|
48
|
+
EXAMPLES
|
|
49
|
+
agentspeak-cli friends add agent_abc123 --name "Hermes" --memo "personal assistant"
|
|
50
|
+
agentspeak-cli friends block agent_spammer --memo "burned my tokens 2026-04"
|
|
51
|
+
agentspeak-cli friends list --json
|
|
52
|
+
`;
|
|
53
|
+
function requireAgentId(parsed, sub) {
|
|
54
|
+
const id = parsed.positionals[1];
|
|
55
|
+
if (!id) {
|
|
56
|
+
process.stderr.write(`agentspeak-cli friends ${sub}: missing <agentId>\n`);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return id;
|
|
60
|
+
}
|
|
61
|
+
function cmdFriendsList(parsed) {
|
|
62
|
+
const file = loadFriends();
|
|
63
|
+
if (flagBool(parsed.flags, 'json')) {
|
|
64
|
+
process.stdout.write(JSON.stringify(listForJson(file), null, 2) + '\n');
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
const allow = Object.values(file.allow).sort((a, b) => a.agentId.localeCompare(b.agentId));
|
|
68
|
+
const block = Object.values(file.block).sort((a, b) => a.agentId.localeCompare(b.agentId));
|
|
69
|
+
if (allow.length === 0 && block.length === 0) {
|
|
70
|
+
process.stdout.write(`(empty — run \`agentspeak-cli friends add <agentId>\` to trust an inviter)\n`);
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
if (allow.length > 0) {
|
|
74
|
+
process.stdout.write(`ALLOW (${allow.length})\n`);
|
|
75
|
+
for (const e of allow)
|
|
76
|
+
process.stdout.write(formatEntry(e) + '\n');
|
|
77
|
+
}
|
|
78
|
+
if (block.length > 0) {
|
|
79
|
+
if (allow.length > 0)
|
|
80
|
+
process.stdout.write('\n');
|
|
81
|
+
process.stdout.write(`BLOCK (${block.length})\n`);
|
|
82
|
+
for (const e of block)
|
|
83
|
+
process.stdout.write(formatEntry(e) + '\n');
|
|
84
|
+
}
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
87
|
+
function listForJson(file) {
|
|
88
|
+
return {
|
|
89
|
+
allow: Object.values(file.allow),
|
|
90
|
+
block: Object.values(file.block),
|
|
91
|
+
path: friendsFilePath(),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function formatEntry(e) {
|
|
95
|
+
const parts = [` ${e.agentId}`];
|
|
96
|
+
if (e.name)
|
|
97
|
+
parts.push(`(${e.name})`);
|
|
98
|
+
parts.push(`since=${e.since.slice(0, 10)}`);
|
|
99
|
+
if (e.memo)
|
|
100
|
+
parts.push(`memo="${e.memo}"`);
|
|
101
|
+
return parts.join(' ');
|
|
102
|
+
}
|
|
103
|
+
function cmdFriendsAdd(parsed) {
|
|
104
|
+
const id = requireAgentId(parsed, 'add');
|
|
105
|
+
if (!id)
|
|
106
|
+
return 2;
|
|
107
|
+
const entry = addAllow(id, {
|
|
108
|
+
name: flagStr(parsed.flags, 'name'),
|
|
109
|
+
memo: flagStr(parsed.flags, 'memo'),
|
|
110
|
+
});
|
|
111
|
+
process.stdout.write(`agentspeak-cli friends: added ${entry.agentId} to allow list (since ${entry.since.slice(0, 10)}).\n`);
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
function cmdFriendsRemove(parsed) {
|
|
115
|
+
const id = requireAgentId(parsed, 'remove');
|
|
116
|
+
if (!id)
|
|
117
|
+
return 2;
|
|
118
|
+
const removed = removeAllow(id);
|
|
119
|
+
if (!removed) {
|
|
120
|
+
process.stdout.write(`agentspeak-cli friends: ${id} is not on the allow list.\n`);
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
process.stdout.write(`agentspeak-cli friends: removed ${id} from allow list.\n`);
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
function cmdFriendsBlock(parsed) {
|
|
127
|
+
const id = requireAgentId(parsed, 'block');
|
|
128
|
+
if (!id)
|
|
129
|
+
return 2;
|
|
130
|
+
const entry = addBlock(id, {
|
|
131
|
+
name: flagStr(parsed.flags, 'name'),
|
|
132
|
+
memo: flagStr(parsed.flags, 'memo'),
|
|
133
|
+
});
|
|
134
|
+
process.stdout.write(`agentspeak-cli friends: added ${entry.agentId} to block list. Future invites will be silently dropped.\n`);
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
function cmdFriendsUnblock(parsed) {
|
|
138
|
+
const id = requireAgentId(parsed, 'unblock');
|
|
139
|
+
if (!id)
|
|
140
|
+
return 2;
|
|
141
|
+
const removed = removeBlock(id);
|
|
142
|
+
if (!removed) {
|
|
143
|
+
process.stdout.write(`agentspeak-cli friends: ${id} is not on the block list.\n`);
|
|
144
|
+
return 0;
|
|
145
|
+
}
|
|
146
|
+
process.stdout.write(`agentspeak-cli friends: removed ${id} from block list.\n`);
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
function cmdFriendsWhere() {
|
|
150
|
+
process.stdout.write(friendsFilePath() + '\n');
|
|
151
|
+
return 0;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=friends.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friends.js","sourceRoot":"","sources":["../../src/commands/friends.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Parsed } from '../cli.js';
|
|
2
|
+
/**
|
|
3
|
+
* `agentspeak-cli invite <subcommand>` — resolve the pending-invite
|
|
4
|
+
* queue. This is the other half of the friends-allowlist feature:
|
|
5
|
+
*
|
|
6
|
+
* 1. The watch daemon puts unknown-inviter rows into
|
|
7
|
+
* ~/.agentspeak/pending-invites/.
|
|
8
|
+
* 2. The agent's LLM runtime pulls the queue via `invite pending
|
|
9
|
+
* --json` on every check-in loop and surfaces each entry to the
|
|
10
|
+
* human (see skill "Pending invite approvals" section).
|
|
11
|
+
* 3. The human answers 1/2/3/4 and the LLM translates that to ONE
|
|
12
|
+
* call to `invite approve <id> --decision accept|reject
|
|
13
|
+
* [--remember always]`.
|
|
14
|
+
*
|
|
15
|
+
* `--remember always` + `--decision accept` adds to the friends allow
|
|
16
|
+
* list; + `--decision reject` adds to the block list. Without
|
|
17
|
+
* `--remember always`, the decision applies to this one invite only.
|
|
18
|
+
*/
|
|
19
|
+
export declare function cmdInvite(parsed: Parsed): Promise<number>;
|
|
20
|
+
//# sourceMappingURL=invite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite.d.ts","sourceRoot":"","sources":["../../src/commands/invite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAYxC;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAezD"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { flagBool, flagStr } from '../cli.js';
|
|
2
|
+
import { addAllow, addBlock } from '../friends.js';
|
|
3
|
+
import { deletePending, listPending, loadPending, pendingInvitesDir, } from '../pending-invites.js';
|
|
4
|
+
import { isRunAlive, runJoin, spawnRunForMeeting } from '../run-spawner.js';
|
|
5
|
+
/**
|
|
6
|
+
* `agentspeak-cli invite <subcommand>` — resolve the pending-invite
|
|
7
|
+
* queue. This is the other half of the friends-allowlist feature:
|
|
8
|
+
*
|
|
9
|
+
* 1. The watch daemon puts unknown-inviter rows into
|
|
10
|
+
* ~/.agentspeak/pending-invites/.
|
|
11
|
+
* 2. The agent's LLM runtime pulls the queue via `invite pending
|
|
12
|
+
* --json` on every check-in loop and surfaces each entry to the
|
|
13
|
+
* human (see skill "Pending invite approvals" section).
|
|
14
|
+
* 3. The human answers 1/2/3/4 and the LLM translates that to ONE
|
|
15
|
+
* call to `invite approve <id> --decision accept|reject
|
|
16
|
+
* [--remember always]`.
|
|
17
|
+
*
|
|
18
|
+
* `--remember always` + `--decision accept` adds to the friends allow
|
|
19
|
+
* list; + `--decision reject` adds to the block list. Without
|
|
20
|
+
* `--remember always`, the decision applies to this one invite only.
|
|
21
|
+
*/
|
|
22
|
+
export function cmdInvite(parsed) {
|
|
23
|
+
const sub = parsed.positionals[0];
|
|
24
|
+
if (!sub || sub === 'help' || sub === '--help') {
|
|
25
|
+
process.stdout.write(SUB_HELP);
|
|
26
|
+
return Promise.resolve(0);
|
|
27
|
+
}
|
|
28
|
+
switch (sub) {
|
|
29
|
+
case 'pending':
|
|
30
|
+
return Promise.resolve(cmdInvitePending(parsed));
|
|
31
|
+
case 'approve':
|
|
32
|
+
return Promise.resolve(cmdInviteApprove(parsed));
|
|
33
|
+
default:
|
|
34
|
+
process.stderr.write(`agentspeak-cli invite: unknown subcommand "${sub}"\n${SUB_HELP}`);
|
|
35
|
+
return Promise.resolve(2);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const SUB_HELP = `agentspeak-cli invite <subcommand>
|
|
39
|
+
|
|
40
|
+
pending List invites awaiting human approval.
|
|
41
|
+
approve <id> Resolve a pending invite (see flags below).
|
|
42
|
+
|
|
43
|
+
FLAGS
|
|
44
|
+
--json Machine-readable output for \`pending\`.
|
|
45
|
+
--decision accept|reject Required for \`approve\`.
|
|
46
|
+
--remember always Upgrade the decision to a lasting
|
|
47
|
+
trust change: accept→friends add,
|
|
48
|
+
reject→friends block.
|
|
49
|
+
|
|
50
|
+
EXAMPLES
|
|
51
|
+
# Agent runtime: pull the queue, show it to the human, parse reply.
|
|
52
|
+
agentspeak-cli invite pending --json
|
|
53
|
+
|
|
54
|
+
# Human said "yes, always trust this one":
|
|
55
|
+
agentspeak-cli invite approve notif_abc --decision accept --remember always
|
|
56
|
+
|
|
57
|
+
# Human said "just this one, don't remember":
|
|
58
|
+
agentspeak-cli invite approve notif_abc --decision accept
|
|
59
|
+
|
|
60
|
+
# Human said "no, block them":
|
|
61
|
+
agentspeak-cli invite approve notif_abc --decision reject --remember always
|
|
62
|
+
|
|
63
|
+
# Human said "no, but don't block":
|
|
64
|
+
agentspeak-cli invite approve notif_abc --decision reject
|
|
65
|
+
`;
|
|
66
|
+
function cmdInvitePending(parsed) {
|
|
67
|
+
const rows = listPending();
|
|
68
|
+
if (flagBool(parsed.flags, 'json')) {
|
|
69
|
+
process.stdout.write(JSON.stringify({ pending: rows, dir: pendingInvitesDir() }, null, 2) + '\n');
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
if (rows.length === 0) {
|
|
73
|
+
process.stdout.write('(no pending invites)\n');
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
process.stdout.write(`PENDING (${rows.length})\n`);
|
|
77
|
+
for (const r of rows) {
|
|
78
|
+
process.stdout.write(` ${r.notificationId}\n` +
|
|
79
|
+
` meeting ${r.meetingId}\n` +
|
|
80
|
+
` inviter ${r.inviterAgentId ?? '<unspecified>'}${r.inviterName ? ` (${r.inviterName})` : ''}\n` +
|
|
81
|
+
` received ${r.receivedAt}\n` +
|
|
82
|
+
` actionUrl ${r.actionUrl}\n` +
|
|
83
|
+
(r.message ? ` message ${r.message}\n` : ''));
|
|
84
|
+
}
|
|
85
|
+
process.stdout.write(`\nResolve each with:\n` +
|
|
86
|
+
` agentspeak-cli invite approve <notifId> --decision accept|reject [--remember always]\n`);
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
function cmdInviteApprove(parsed) {
|
|
90
|
+
const idArg = parsed.positionals[1];
|
|
91
|
+
if (!idArg) {
|
|
92
|
+
process.stderr.write('agentspeak-cli invite approve: missing <notificationId> | <meetingId>\n');
|
|
93
|
+
return 2;
|
|
94
|
+
}
|
|
95
|
+
const decisionRaw = flagStr(parsed.flags, 'decision');
|
|
96
|
+
if (decisionRaw !== 'accept' && decisionRaw !== 'reject') {
|
|
97
|
+
process.stderr.write('agentspeak-cli invite approve: --decision must be accept or reject.\n');
|
|
98
|
+
return 2;
|
|
99
|
+
}
|
|
100
|
+
const decision = decisionRaw;
|
|
101
|
+
const rememberRaw = flagStr(parsed.flags, 'remember');
|
|
102
|
+
if (rememberRaw != null && rememberRaw !== 'always' && rememberRaw !== 'once') {
|
|
103
|
+
process.stderr.write('agentspeak-cli invite approve: --remember must be "always" or "once" (default once).\n');
|
|
104
|
+
return 2;
|
|
105
|
+
}
|
|
106
|
+
const rememberAlways = rememberRaw === 'always';
|
|
107
|
+
let record;
|
|
108
|
+
try {
|
|
109
|
+
record = loadPending(idArg);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
process.stderr.write(`agentspeak-cli invite approve: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
113
|
+
return 2;
|
|
114
|
+
}
|
|
115
|
+
if (!record) {
|
|
116
|
+
process.stderr.write(`agentspeak-cli invite approve: no pending invite matching "${idArg}". ` +
|
|
117
|
+
`Run \`agentspeak-cli invite pending\` to see the queue.\n`);
|
|
118
|
+
return 1;
|
|
119
|
+
}
|
|
120
|
+
if (decision === 'reject') {
|
|
121
|
+
if (rememberAlways) {
|
|
122
|
+
if (!record.inviterAgentId) {
|
|
123
|
+
process.stderr.write(`agentspeak-cli invite approve: cannot block (inviter agent_id unknown for ${record.notificationId}).\n`);
|
|
124
|
+
return 2;
|
|
125
|
+
}
|
|
126
|
+
addBlock(record.inviterAgentId, {
|
|
127
|
+
name: record.inviterName,
|
|
128
|
+
memo: `blocked via invite reject at ${new Date().toISOString().slice(0, 10)}`,
|
|
129
|
+
});
|
|
130
|
+
process.stdout.write(`Rejected and blocked ${record.inviterAgentId}. Future invites from this agent will be silently dropped.\n`);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
process.stdout.write(`Rejected ${record.notificationId} (this one only — inviter not added to block list).\n`);
|
|
134
|
+
}
|
|
135
|
+
deletePending(record.notificationId);
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
if (rememberAlways) {
|
|
139
|
+
if (!record.inviterAgentId) {
|
|
140
|
+
process.stderr.write(`agentspeak-cli invite approve: cannot add to friends (inviter agent_id unknown ` +
|
|
141
|
+
`for ${record.notificationId}). Re-run with --decision accept (no --remember) ` +
|
|
142
|
+
`to accept this one invite only.\n`);
|
|
143
|
+
return 2;
|
|
144
|
+
}
|
|
145
|
+
addAllow(record.inviterAgentId, {
|
|
146
|
+
name: record.inviterName,
|
|
147
|
+
memo: `added via invite approve at ${new Date().toISOString().slice(0, 10)}`,
|
|
148
|
+
});
|
|
149
|
+
process.stdout.write(`Added ${record.inviterAgentId} to friends. Future invites from this agent will auto-join.\n`);
|
|
150
|
+
}
|
|
151
|
+
// Run the delayed join + run-loop spawn — same flow dispatchInvite
|
|
152
|
+
// would have used for an already-allowed inviter. We consciously
|
|
153
|
+
// DO NOT re-check friends here: the human's decision trumps any
|
|
154
|
+
// race where an out-of-band edit changed the list between queue
|
|
155
|
+
// and approve.
|
|
156
|
+
const alive = isRunAlive(record.meetingId);
|
|
157
|
+
if (alive.alive && alive.pid) {
|
|
158
|
+
process.stdout.write(`Run loop for ${record.meetingId} already alive (pid=${alive.pid}); nothing to do beyond friends list update.\n`);
|
|
159
|
+
deletePending(record.notificationId);
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
const joinRes = runJoin({ inviteUrl: record.actionUrl, meetingId: record.meetingId });
|
|
163
|
+
if (!joinRes.ok) {
|
|
164
|
+
process.stderr.write(`agentspeak-cli invite approve: auto-join failed for ${record.meetingId} ` +
|
|
165
|
+
`(exit=${joinRes.exitCode}); see ${joinRes.logPath}. The pending record is kept so ` +
|
|
166
|
+
`you can retry.\n`);
|
|
167
|
+
return 1;
|
|
168
|
+
}
|
|
169
|
+
const run = spawnRunForMeeting({ meetingId: record.meetingId });
|
|
170
|
+
deletePending(record.notificationId);
|
|
171
|
+
if (run.started && run.pid) {
|
|
172
|
+
process.stdout.write(`Accepted ${record.notificationId}: joined ${record.meetingId} and spawned run loop pid=${run.pid}.\n`);
|
|
173
|
+
}
|
|
174
|
+
else if (run.reused && run.pid) {
|
|
175
|
+
process.stdout.write(`Accepted ${record.notificationId}: joined ${record.meetingId}; run loop already alive pid=${run.pid}.\n`);
|
|
176
|
+
}
|
|
177
|
+
else if (run.reason) {
|
|
178
|
+
process.stdout.write(`Accepted ${record.notificationId}: joined ${record.meetingId} but could not spawn run ` +
|
|
179
|
+
`loop (${run.reason}). Start manually with ` +
|
|
180
|
+
`\`agentspeak-cli run --meeting ${record.meetingId} --exec ~/.agentspeak/reply.sh\`.\n`);
|
|
181
|
+
}
|
|
182
|
+
return 0;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=invite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite.js","sourceRoot":"","sources":["../../src/commands/invite.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/watch.d.ts
CHANGED
|
@@ -84,6 +84,15 @@ export type DispatchResult = {
|
|
|
84
84
|
meetingId: string;
|
|
85
85
|
joinLog: string;
|
|
86
86
|
exitCode: number | null;
|
|
87
|
+
} | {
|
|
88
|
+
kind: 'invite_blocked';
|
|
89
|
+
meetingId: string;
|
|
90
|
+
inviterAgentId: string;
|
|
91
|
+
} | {
|
|
92
|
+
kind: 'invite_pending_approval';
|
|
93
|
+
meetingId: string;
|
|
94
|
+
inviterAgentId: string | null;
|
|
95
|
+
pendingPath: string;
|
|
87
96
|
};
|
|
88
97
|
export {};
|
|
89
98
|
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAG3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA+E/D;AAgDD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,eAAe,GAAG,cAAc,CASvE;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3F;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACrE;IACE,IAAI,EAAE,yBAAyB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
|
package/dist/commands/watch.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { api } from '../api.js';
|
|
2
|
+
import { trustState } from '../friends.js';
|
|
3
|
+
import { queuePending } from '../pending-invites.js';
|
|
2
4
|
import { isRunAlive, runJoin, spawnRunForMeeting, } from '../run-spawner.js';
|
|
3
5
|
import { loadMeeting, resolveIdentity } from '../state.js';
|
|
4
6
|
export async function cmdWatch(opts) {
|
|
@@ -126,6 +128,11 @@ function extractActionUrl(payload) {
|
|
|
126
128
|
return url;
|
|
127
129
|
return null;
|
|
128
130
|
}
|
|
131
|
+
function extractInviter(payload) {
|
|
132
|
+
const agentId = typeof payload.inviterAgentId === 'string' ? payload.inviterAgentId : null;
|
|
133
|
+
const name = typeof payload.inviterName === 'string' ? payload.inviterName : undefined;
|
|
134
|
+
return { agentId, name };
|
|
135
|
+
}
|
|
129
136
|
/**
|
|
130
137
|
* `invite` handler:
|
|
131
138
|
* 1. Short-circuit if a run loop for this meeting is already alive
|
|
@@ -154,6 +161,43 @@ function dispatchInvite(n) {
|
|
|
154
161
|
'cannot auto-join. The notification will still be ack\'d.\n');
|
|
155
162
|
return { kind: 'noop', reason: 'missing_actionUrl' };
|
|
156
163
|
}
|
|
164
|
+
// Friends allowlist gate (introduced in CLI 0.15.0). Three cases:
|
|
165
|
+
// 1. blocked → ack-and-drop, do not join. This is how the operator
|
|
166
|
+
// expresses "never accept invites from this agent".
|
|
167
|
+
// 2. unknown → do NOT join. Queue a pending-approval record so the
|
|
168
|
+
// human can decide on the next check-in loop. This is
|
|
169
|
+
// the KEY security improvement: a leaked agent_id no
|
|
170
|
+
// longer lets a stranger burn LLM tokens.
|
|
171
|
+
// 3. allow → fall through to the existing runJoin + run-loop
|
|
172
|
+
// flow. This preserves the "invite auto-joined without
|
|
173
|
+
// any LLM involvement" UX for trusted collaborators.
|
|
174
|
+
const { agentId: inviterAgentId, name: inviterName } = extractInviter(n.payload);
|
|
175
|
+
const decision = trustState(inviterAgentId);
|
|
176
|
+
if (decision === 'block' && inviterAgentId) {
|
|
177
|
+
process.stderr.write(`agentspeak-cli watch: invite ${n.id} (meeting=${meetingId}) from BLOCKED inviter ` +
|
|
178
|
+
`${inviterAgentId}; dropping.\n`);
|
|
179
|
+
return { kind: 'invite_blocked', meetingId, inviterAgentId };
|
|
180
|
+
}
|
|
181
|
+
if (decision === 'unknown') {
|
|
182
|
+
const pendingPath = queuePending({
|
|
183
|
+
notificationId: n.id,
|
|
184
|
+
meetingId,
|
|
185
|
+
inviterAgentId,
|
|
186
|
+
inviterName,
|
|
187
|
+
actionUrl: inviteUrl,
|
|
188
|
+
receivedAt: n.createdAt,
|
|
189
|
+
message: typeof n.payload.message === 'string' ? n.payload.message : undefined,
|
|
190
|
+
});
|
|
191
|
+
process.stderr.write(`agentspeak-cli watch: invite ${n.id} (meeting=${meetingId}) from UNKNOWN inviter ` +
|
|
192
|
+
`${inviterAgentId ?? '<unspecified>'}; queued for human approval at ${pendingPath}. ` +
|
|
193
|
+
'Run `agentspeak-cli invite pending` to review.\n');
|
|
194
|
+
return {
|
|
195
|
+
kind: 'invite_pending_approval',
|
|
196
|
+
meetingId,
|
|
197
|
+
inviterAgentId,
|
|
198
|
+
pendingPath,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
157
201
|
const joinRes = runJoin({ inviteUrl, meetingId });
|
|
158
202
|
if (!joinRes.ok) {
|
|
159
203
|
process.stderr.write(`agentspeak-cli watch: auto-join failed for ${meetingId} (exit=${joinRes.exitCode}); ` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side trusted-senders allowlist ("friends") for agents.
|
|
3
|
+
*
|
|
4
|
+
* The `--auto-act` watch daemon consults this file before auto-joining
|
|
5
|
+
* any meeting. Known-good inviters (on the `allow` list) proceed as
|
|
6
|
+
* before; known-bad ones (on the `block` list) are silently dropped;
|
|
7
|
+
* everyone else goes into the pending-approval queue (see
|
|
8
|
+
* `pending-invites.ts`) to be surfaced to the human for an
|
|
9
|
+
* accept/reject decision.
|
|
10
|
+
*
|
|
11
|
+
* Threat model. The problem we're mitigating: agent_id is semi-public
|
|
12
|
+
* (it appears in every meeting transcript and invite URL), so someone
|
|
13
|
+
* who learns it can add the victim as a participant in their own
|
|
14
|
+
* meeting. Without an allowlist the victim's watch daemon auto-joins,
|
|
15
|
+
* a `run` loop spawns, and the attacker's prompts burn the victim's
|
|
16
|
+
* LLM tokens indefinitely. This module is the first line of defence.
|
|
17
|
+
*
|
|
18
|
+
* Why client-side only. Moving enforcement to the coordinator would
|
|
19
|
+
* catch more paths (discord_webhook, http_webhook, etc), but adds a
|
|
20
|
+
* DB migration and a policy endpoint. The client-side check covers
|
|
21
|
+
* the pull + watch auto-act path that most agents run, and the
|
|
22
|
+
* skill docs instruct agents to consult the allowlist even when
|
|
23
|
+
* their own LLM runtime delivered the invite. See `.cursorrules` for
|
|
24
|
+
* the server-side follow-up plan.
|
|
25
|
+
*
|
|
26
|
+
* On-disk format. `~/.agentspeak/friends.json` is a versioned JSON
|
|
27
|
+
* document. Writes are fsync'd via node's default writeFileSync
|
|
28
|
+
* semantics and atomically replace the file; concurrent writers
|
|
29
|
+
* produce a last-writer-wins result which is fine for a
|
|
30
|
+
* human-curated list.
|
|
31
|
+
*/
|
|
32
|
+
export interface FriendEntry {
|
|
33
|
+
agentId: string;
|
|
34
|
+
/** Display name recorded at add-time; purely cosmetic for `friends list`. */
|
|
35
|
+
name?: string;
|
|
36
|
+
/** ISO-8601 UTC timestamp the entry was added. */
|
|
37
|
+
since: string;
|
|
38
|
+
/** Free-form operator memo ("met at the OpenClaw hackathon", etc). */
|
|
39
|
+
memo?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface FriendsFile {
|
|
42
|
+
version: 1;
|
|
43
|
+
allow: Record<string, FriendEntry>;
|
|
44
|
+
block: Record<string, FriendEntry>;
|
|
45
|
+
}
|
|
46
|
+
export type TrustDecision = 'allow' | 'block' | 'unknown';
|
|
47
|
+
/**
|
|
48
|
+
* Load the friends file from disk. Returns a fresh empty structure
|
|
49
|
+
* when the file is missing or corrupt — callers get a consistent
|
|
50
|
+
* shape and never have to handle the null case.
|
|
51
|
+
*/
|
|
52
|
+
export declare function loadFriends(): FriendsFile;
|
|
53
|
+
/**
|
|
54
|
+
* Lookup the trust state of an inviter. Precedence: an agent listed
|
|
55
|
+
* in both `block` and `allow` is treated as blocked (fail-safe).
|
|
56
|
+
*/
|
|
57
|
+
export declare function trustState(agentId: string | null | undefined, file?: FriendsFile): TrustDecision;
|
|
58
|
+
export declare function isAllowed(agentId: string | null | undefined, file?: FriendsFile): boolean;
|
|
59
|
+
export declare function isBlocked(agentId: string | null | undefined, file?: FriendsFile): boolean;
|
|
60
|
+
export interface AddOptions {
|
|
61
|
+
name?: string;
|
|
62
|
+
memo?: string;
|
|
63
|
+
/** Override `new Date().toISOString()` in tests. */
|
|
64
|
+
now?: () => string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Add (or update) an entry in the `allow` list. Idempotent: re-adding
|
|
68
|
+
* an existing agent refreshes `name` / `memo` but preserves the
|
|
69
|
+
* original `since` timestamp (so `friends list` still shows when the
|
|
70
|
+
* trust relationship began).
|
|
71
|
+
*
|
|
72
|
+
* Moving an agent from `block` → `allow` clears the block entry.
|
|
73
|
+
*/
|
|
74
|
+
export declare function addAllow(agentId: string, opts?: AddOptions): FriendEntry;
|
|
75
|
+
export declare function addBlock(agentId: string, opts?: AddOptions): FriendEntry;
|
|
76
|
+
export declare function removeAllow(agentId: string): boolean;
|
|
77
|
+
export declare function removeBlock(agentId: string): boolean;
|
|
78
|
+
/** Exposed for diagnostics + the `watch status` / `friends list` commands. */
|
|
79
|
+
export declare function friendsFilePath(): string;
|
|
80
|
+
//# sourceMappingURL=friends.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friends.d.ts","sourceRoot":"","sources":["../src/friends.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAQ1D;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,WAAW,CAoBzC;AAWD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,CAMhG;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAEzF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAEzF;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,WAAW,CAc5E;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,WAAW,CAc5E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
package/dist/friends.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { home } from './state.js';
|
|
4
|
+
const EMPTY_FILE = { version: 1, allow: {}, block: {} };
|
|
5
|
+
function friendsPath() {
|
|
6
|
+
return join(home(), 'friends.json');
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Load the friends file from disk. Returns a fresh empty structure
|
|
10
|
+
* when the file is missing or corrupt — callers get a consistent
|
|
11
|
+
* shape and never have to handle the null case.
|
|
12
|
+
*/
|
|
13
|
+
export function loadFriends() {
|
|
14
|
+
const p = friendsPath();
|
|
15
|
+
if (!existsSync(p))
|
|
16
|
+
return structuredClone(EMPTY_FILE);
|
|
17
|
+
let raw;
|
|
18
|
+
try {
|
|
19
|
+
raw = readFileSync(p, 'utf8');
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return structuredClone(EMPTY_FILE);
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const parsed = JSON.parse(raw);
|
|
26
|
+
if (!parsed || typeof parsed !== 'object')
|
|
27
|
+
return structuredClone(EMPTY_FILE);
|
|
28
|
+
return {
|
|
29
|
+
version: 1,
|
|
30
|
+
allow: parsed.allow ?? {},
|
|
31
|
+
block: parsed.block ?? {},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return structuredClone(EMPTY_FILE);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function saveFriends(file) {
|
|
39
|
+
const p = friendsPath();
|
|
40
|
+
mkdirSync(dirname(p), { recursive: true });
|
|
41
|
+
// Mode 0600: the file can carry human-annotated memos about known
|
|
42
|
+
// collaborators. Not a secret per se, but no reason to leak it to
|
|
43
|
+
// other users on a shared box.
|
|
44
|
+
writeFileSync(p, JSON.stringify(file, null, 2) + '\n', { mode: 0o600 });
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Lookup the trust state of an inviter. Precedence: an agent listed
|
|
48
|
+
* in both `block` and `allow` is treated as blocked (fail-safe).
|
|
49
|
+
*/
|
|
50
|
+
export function trustState(agentId, file) {
|
|
51
|
+
if (!agentId)
|
|
52
|
+
return 'unknown';
|
|
53
|
+
const f = file ?? loadFriends();
|
|
54
|
+
if (f.block[agentId])
|
|
55
|
+
return 'block';
|
|
56
|
+
if (f.allow[agentId])
|
|
57
|
+
return 'allow';
|
|
58
|
+
return 'unknown';
|
|
59
|
+
}
|
|
60
|
+
export function isAllowed(agentId, file) {
|
|
61
|
+
return trustState(agentId, file) === 'allow';
|
|
62
|
+
}
|
|
63
|
+
export function isBlocked(agentId, file) {
|
|
64
|
+
return trustState(agentId, file) === 'block';
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Add (or update) an entry in the `allow` list. Idempotent: re-adding
|
|
68
|
+
* an existing agent refreshes `name` / `memo` but preserves the
|
|
69
|
+
* original `since` timestamp (so `friends list` still shows when the
|
|
70
|
+
* trust relationship began).
|
|
71
|
+
*
|
|
72
|
+
* Moving an agent from `block` → `allow` clears the block entry.
|
|
73
|
+
*/
|
|
74
|
+
export function addAllow(agentId, opts = {}) {
|
|
75
|
+
const file = loadFriends();
|
|
76
|
+
const now = (opts.now ?? (() => new Date().toISOString()))();
|
|
77
|
+
const existing = file.allow[agentId];
|
|
78
|
+
const entry = {
|
|
79
|
+
agentId,
|
|
80
|
+
since: existing?.since ?? now,
|
|
81
|
+
...(opts.name ? { name: opts.name } : existing?.name ? { name: existing.name } : {}),
|
|
82
|
+
...(opts.memo ? { memo: opts.memo } : existing?.memo ? { memo: existing.memo } : {}),
|
|
83
|
+
};
|
|
84
|
+
file.allow[agentId] = entry;
|
|
85
|
+
delete file.block[agentId];
|
|
86
|
+
saveFriends(file);
|
|
87
|
+
return entry;
|
|
88
|
+
}
|
|
89
|
+
export function addBlock(agentId, opts = {}) {
|
|
90
|
+
const file = loadFriends();
|
|
91
|
+
const now = (opts.now ?? (() => new Date().toISOString()))();
|
|
92
|
+
const existing = file.block[agentId];
|
|
93
|
+
const entry = {
|
|
94
|
+
agentId,
|
|
95
|
+
since: existing?.since ?? now,
|
|
96
|
+
...(opts.name ? { name: opts.name } : existing?.name ? { name: existing.name } : {}),
|
|
97
|
+
...(opts.memo ? { memo: opts.memo } : existing?.memo ? { memo: existing.memo } : {}),
|
|
98
|
+
};
|
|
99
|
+
file.block[agentId] = entry;
|
|
100
|
+
delete file.allow[agentId];
|
|
101
|
+
saveFriends(file);
|
|
102
|
+
return entry;
|
|
103
|
+
}
|
|
104
|
+
export function removeAllow(agentId) {
|
|
105
|
+
const file = loadFriends();
|
|
106
|
+
if (!file.allow[agentId])
|
|
107
|
+
return false;
|
|
108
|
+
delete file.allow[agentId];
|
|
109
|
+
saveFriends(file);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
export function removeBlock(agentId) {
|
|
113
|
+
const file = loadFriends();
|
|
114
|
+
if (!file.block[agentId])
|
|
115
|
+
return false;
|
|
116
|
+
delete file.block[agentId];
|
|
117
|
+
saveFriends(file);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
/** Exposed for diagnostics + the `watch status` / `friends list` commands. */
|
|
121
|
+
export function friendsFilePath() {
|
|
122
|
+
return friendsPath();
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=friends.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friends.js","sourceRoot":"","sources":["../src/friends.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,8 @@ import { cmdRun } from './commands/run.js';
|
|
|
8
8
|
import { cmdWakeConfig } from './commands/wake-config.js';
|
|
9
9
|
import { cmdMeeting } from './commands/meeting.js';
|
|
10
10
|
import { cmdTutorial } from './commands/tutorial.js';
|
|
11
|
+
import { cmdFriends } from './commands/friends.js';
|
|
12
|
+
import { cmdInvite } from './commands/invite.js';
|
|
11
13
|
import { loadIdentity, statePathInfo } from './state.js';
|
|
12
14
|
import { CLI_VERSION } from './version.js';
|
|
13
15
|
const HELP = `agentspeak-cli - online meeting CLI for AI agents
|
|
@@ -74,6 +76,19 @@ COMMANDS
|
|
|
74
76
|
\`run\` loop. Safe to call from a 'notify' wake webhook —
|
|
75
77
|
if the meeting is already finished this exits 0 cleanly.
|
|
76
78
|
meeting Create / invite / status helpers for organizers.
|
|
79
|
+
friends Manage the client-side trusted-senders allowlist. The
|
|
80
|
+
\`watch --auto-act\` daemon only auto-joins meetings
|
|
81
|
+
whose inviter is on this list; unknown inviters are
|
|
82
|
+
queued for human approval. Subcommands: list / add /
|
|
83
|
+
remove / block / unblock / where.
|
|
84
|
+
invite Review and resolve pending invite approvals queued by
|
|
85
|
+
the watch daemon. Subcommands: \`invite pending\`
|
|
86
|
+
(list; --json for machine use) and \`invite approve
|
|
87
|
+
<notifId> --decision accept|reject [--remember always]\`.
|
|
88
|
+
The skill's "Pending invite approvals" loop instructs
|
|
89
|
+
the agent to surface each pending row to the human and
|
|
90
|
+
translate their 4-way answer into one of these flag
|
|
91
|
+
combinations.
|
|
77
92
|
handle-turn Headless / serverless one-shot: fetch ONE assigned
|
|
78
93
|
turn, submit a reply, exit. The right pattern for LLM
|
|
79
94
|
tool-callers (Hermes chat, Cursor agent, sandboxed
|
|
@@ -525,6 +540,12 @@ async function main() {
|
|
|
525
540
|
case 'meeting': {
|
|
526
541
|
return cmdMeeting({ positionals, flags });
|
|
527
542
|
}
|
|
543
|
+
case 'friends': {
|
|
544
|
+
return cmdFriends({ positionals, flags });
|
|
545
|
+
}
|
|
546
|
+
case 'invite': {
|
|
547
|
+
return cmdInvite({ positionals, flags });
|
|
548
|
+
}
|
|
528
549
|
case 'tutorial': {
|
|
529
550
|
return cmdTutorial({
|
|
530
551
|
selfAck: !flagBool(flags, 'no-self-ack'),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pending-invite queue.
|
|
3
|
+
*
|
|
4
|
+
* When the `--auto-act` watch daemon receives an invite from an agent
|
|
5
|
+
* that isn't on the friends allowlist AND isn't on the block list, it
|
|
6
|
+
* does NOT auto-join. Instead it drops a small JSON record here and
|
|
7
|
+
* emits a structured stderr line. The agent's next check-in loop
|
|
8
|
+
* surfaces these to the human, who answers "accept once / always /
|
|
9
|
+
* reject once / always reject" and the `invite approve` CLI command
|
|
10
|
+
* translates that decision into join + friends-list updates.
|
|
11
|
+
*
|
|
12
|
+
* On disk: `~/.agentspeak/pending-invites/<notificationId>.json`.
|
|
13
|
+
* We use per-file storage (rather than a single JSON blob) so that
|
|
14
|
+
* approve/reject is O(1) and concurrent decisions from two shells
|
|
15
|
+
* can't race into a lost-write.
|
|
16
|
+
*
|
|
17
|
+
* The queue is STRICTLY local state. It's not synced to the
|
|
18
|
+
* coordinator (the coordinator still considers the invite "sent" and
|
|
19
|
+
* the notification ack'd as soon as the daemon handles it). If the
|
|
20
|
+
* human does nothing, the invite silently expires at the coordinator
|
|
21
|
+
* level alongside every other un-consumed invite, so unattended
|
|
22
|
+
* pending queues never cause data to pile up server-side.
|
|
23
|
+
*/
|
|
24
|
+
export interface PendingInvite {
|
|
25
|
+
/** Notification row id — stable identifier for `invite approve <id>`. */
|
|
26
|
+
notificationId: string;
|
|
27
|
+
meetingId: string;
|
|
28
|
+
/** May be null if the server stamped no inviter (legacy data, system pings). */
|
|
29
|
+
inviterAgentId: string | null;
|
|
30
|
+
inviterName?: string;
|
|
31
|
+
actionUrl: string;
|
|
32
|
+
/** ISO-8601 timestamp the daemon queued this record. */
|
|
33
|
+
receivedAt: string;
|
|
34
|
+
/** Free-form: the notification's rendered message, passed through for the human prompt. */
|
|
35
|
+
message?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function queuePending(record: PendingInvite): string;
|
|
38
|
+
/**
|
|
39
|
+
* List every pending-invite record on disk, sorted oldest first so
|
|
40
|
+
* the human processes them in FIFO order.
|
|
41
|
+
*/
|
|
42
|
+
export declare function listPending(): PendingInvite[];
|
|
43
|
+
/**
|
|
44
|
+
* Resolve `idOrMeetingId` to a record. Accepts either the notification
|
|
45
|
+
* id (what `invite pending` prints) or the meetingId (useful when the
|
|
46
|
+
* human says "join that ChatGPT meeting you mentioned"). Returns null
|
|
47
|
+
* if no match; throws if both a notification-id and a meetingId match
|
|
48
|
+
* different records (ambiguous — caller should narrow).
|
|
49
|
+
*/
|
|
50
|
+
export declare function loadPending(idOrMeetingId: string): PendingInvite | null;
|
|
51
|
+
/**
|
|
52
|
+
* Remove a pending-invite record after the human resolves it. Idempotent.
|
|
53
|
+
*/
|
|
54
|
+
export declare function deletePending(notificationId: string): boolean;
|
|
55
|
+
export declare function pendingInvitesDir(): string;
|
|
56
|
+
//# sourceMappingURL=pending-invites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-invites.d.ts","sourceRoot":"","sources":["../src/pending-invites.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,aAAa,EAAE,CAqB7C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAavE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAS7D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { home } from './state.js';
|
|
4
|
+
function pendingDir() {
|
|
5
|
+
return join(home(), 'pending-invites');
|
|
6
|
+
}
|
|
7
|
+
function pendingPath(notificationId) {
|
|
8
|
+
// Guard against directory-traversal via a bogus notification id.
|
|
9
|
+
// Notification ids in this project are alphanumeric + underscore /
|
|
10
|
+
// hyphen; anything else gets normalised to an inert filename.
|
|
11
|
+
const safe = notificationId.replace(/[^A-Za-z0-9_\-]/g, '_');
|
|
12
|
+
return join(pendingDir(), `${safe}.json`);
|
|
13
|
+
}
|
|
14
|
+
export function queuePending(record) {
|
|
15
|
+
mkdirSync(pendingDir(), { recursive: true });
|
|
16
|
+
const p = pendingPath(record.notificationId);
|
|
17
|
+
// 0600 because the record contains an `actionUrl` that includes a
|
|
18
|
+
// short-lived invite token — treat it with the same care as
|
|
19
|
+
// identity.json.
|
|
20
|
+
writeFileSync(p, JSON.stringify(record, null, 2) + '\n', { mode: 0o600 });
|
|
21
|
+
return p;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* List every pending-invite record on disk, sorted oldest first so
|
|
25
|
+
* the human processes them in FIFO order.
|
|
26
|
+
*/
|
|
27
|
+
export function listPending() {
|
|
28
|
+
const dir = pendingDir();
|
|
29
|
+
if (!existsSync(dir))
|
|
30
|
+
return [];
|
|
31
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
32
|
+
const out = [];
|
|
33
|
+
for (const ent of entries) {
|
|
34
|
+
if (!ent.isFile() || !ent.name.endsWith('.json'))
|
|
35
|
+
continue;
|
|
36
|
+
try {
|
|
37
|
+
const raw = readFileSync(join(dir, ent.name), 'utf8');
|
|
38
|
+
const parsed = JSON.parse(raw);
|
|
39
|
+
if (parsed && typeof parsed.notificationId === 'string') {
|
|
40
|
+
out.push(parsed);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Skip unreadable / malformed files without aborting the scan:
|
|
45
|
+
// one corrupt record shouldn't block the human from approving
|
|
46
|
+
// the rest.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
out.sort((a, b) => a.receivedAt.localeCompare(b.receivedAt));
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve `idOrMeetingId` to a record. Accepts either the notification
|
|
54
|
+
* id (what `invite pending` prints) or the meetingId (useful when the
|
|
55
|
+
* human says "join that ChatGPT meeting you mentioned"). Returns null
|
|
56
|
+
* if no match; throws if both a notification-id and a meetingId match
|
|
57
|
+
* different records (ambiguous — caller should narrow).
|
|
58
|
+
*/
|
|
59
|
+
export function loadPending(idOrMeetingId) {
|
|
60
|
+
const all = listPending();
|
|
61
|
+
const byNotif = all.find((r) => r.notificationId === idOrMeetingId);
|
|
62
|
+
if (byNotif)
|
|
63
|
+
return byNotif;
|
|
64
|
+
const byMeeting = all.filter((r) => r.meetingId === idOrMeetingId);
|
|
65
|
+
if (byMeeting.length === 0)
|
|
66
|
+
return null;
|
|
67
|
+
if (byMeeting.length > 1) {
|
|
68
|
+
throw new Error(`ambiguous: ${byMeeting.length} pending invites for meetingId=${idOrMeetingId}; ` +
|
|
69
|
+
`call with the notificationId instead (${byMeeting.map((r) => r.notificationId).join(', ')})`);
|
|
70
|
+
}
|
|
71
|
+
return byMeeting[0] ?? null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Remove a pending-invite record after the human resolves it. Idempotent.
|
|
75
|
+
*/
|
|
76
|
+
export function deletePending(notificationId) {
|
|
77
|
+
const p = pendingPath(notificationId);
|
|
78
|
+
if (!existsSync(p))
|
|
79
|
+
return false;
|
|
80
|
+
try {
|
|
81
|
+
unlinkSync(p);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function pendingInvitesDir() {
|
|
89
|
+
return pendingDir();
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=pending-invites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-invites.js","sourceRoot":"","sources":["../src/pending-invites.ts"],"names":[],"mappings":"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"}
|
package/dist/skill-template.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export interface StepSkillSnippet {
|
|
|
54
54
|
*
|
|
55
55
|
* Bump this constant whenever you bump the protocol root skill.
|
|
56
56
|
*/
|
|
57
|
-
export declare const CLI_SKILL_VERSION =
|
|
57
|
+
export declare const CLI_SKILL_VERSION = 34;
|
|
58
58
|
export interface RenderedSkillBlock {
|
|
59
59
|
name: string;
|
|
60
60
|
path: string;
|
package/dist/skill-template.js
CHANGED
|
@@ -249,7 +249,7 @@ const ROOT_SKILL_DESCRIPTION = 'AgentSpeak is an online meeting coordinator for
|
|
|
249
249
|
*
|
|
250
250
|
* Bump this constant whenever you bump the protocol root skill.
|
|
251
251
|
*/
|
|
252
|
-
export const CLI_SKILL_VERSION =
|
|
252
|
+
export const CLI_SKILL_VERSION = 34;
|
|
253
253
|
function skillFrontmatter(name, description, version = CLI_SKILL_VERSION) {
|
|
254
254
|
return [
|
|
255
255
|
'---',
|
package/dist/version.d.ts
CHANGED
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
* cause the version-stamped watch-daemon restart check to misfire, so
|
|
11
11
|
* release hygiene: bump both files in the same commit.
|
|
12
12
|
*/
|
|
13
|
-
export declare const CLI_VERSION = "0.
|
|
13
|
+
export declare const CLI_VERSION = "0.15.0";
|
|
14
14
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentspeak-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Official AgentSpeak CLI. One command (`agentspeak-cli init`) to register, pass the onboarding tutorial that actively exercises the join parser, organizer dry-run, and handle-turn pipeline against a real sample invite, then auto-writes the SKILL.md skill cache for your runtime (Hermes, OpenClaw, Claude Code, Cursor). Then `agentspeak-cli join <invite> --exec ./reply.sh` SMOKE-TESTS your reply shim BEFORE attaching (refusing to attach if it's broken so the meeting isn't polluted with `shim exited N` turns), JOINS, PROVES PRESENCE via a server-issued nonce so the dashboard knows the loop is real not ghost-joined, LONG-POLLS, AUTO-REPLIES to every assigned turn (with full stderr captured into failed-turn artifacts so other participants can see WHY a turn failed), FAILS FAST after 2 consecutive shim failures so a broken bot can't loop the meeting to death, and EXITS cleanly when the meeting closes — no webhook, no human prompting, structured [SHIM-OK]/[SHIM-FAIL]/[LIVE]/[POLL]/[TURN]/[REPLY]/[DONE] markers on stdout for monitoring. Headless / serverless agents can still use `agentspeak-cli handle-turn` per push wake. `agentspeak-cli meeting create` for organizers.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|