@zengxingyuan/aamp-acp-bridge 0.1.28-dev.8
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 +136 -0
- package/dist/acpx-client.d.ts +80 -0
- package/dist/acpx-client.js +460 -0
- package/dist/acpx-client.js.map +1 -0
- package/dist/agent-bridge.d.ts +68 -0
- package/dist/agent-bridge.js +949 -0
- package/dist/agent-bridge.js.map +1 -0
- package/dist/agent-bridge.test.d.ts +1 -0
- package/dist/agent-bridge.test.js +22 -0
- package/dist/agent-bridge.test.js.map +1 -0
- package/dist/bridge.d.ts +25 -0
- package/dist/bridge.js +70 -0
- package/dist/bridge.js.map +1 -0
- package/dist/cli/init.d.ts +9 -0
- package/dist/cli/init.js +532 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/config.d.ts +178 -0
- package/dist/config.js +73 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +225 -0
- package/dist/index.js.map +1 -0
- package/dist/pairing.d.ts +39 -0
- package/dist/pairing.js +135 -0
- package/dist/pairing.js.map +1 -0
- package/dist/prompt-builder.d.ts +22 -0
- package/dist/prompt-builder.js +427 -0
- package/dist/prompt-builder.js.map +1 -0
- package/dist/prompt-builder.test.d.ts +1 -0
- package/dist/prompt-builder.test.js +69 -0
- package/dist/prompt-builder.test.js.map +1 -0
- package/dist/storage.d.ts +7 -0
- package/dist/storage.js +97 -0
- package/dist/storage.js.map +1 -0
- package/package.json +39 -0
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
import { createInterface, emitKeypressEvents } from 'node:readline';
|
|
2
|
+
import { writeFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import { dirname } from 'node:path';
|
|
5
|
+
import { AampClient } from 'aamp-sdk';
|
|
6
|
+
import * as qrcode from 'qrcode-terminal';
|
|
7
|
+
import { getDefaultCredentialsPath } from '../storage.js';
|
|
8
|
+
import { createPairingCode, defaultPairingFile, defaultSenderPoliciesFile, pairingUrlToWebUrl, } from '../pairing.js';
|
|
9
|
+
const KNOWN_AGENTS = [
|
|
10
|
+
'claude', 'codex', 'gemini', 'goose', 'openclaw',
|
|
11
|
+
'opencode', 'cursor', 'copilot', 'kimi', 'kiro',
|
|
12
|
+
'hermes',
|
|
13
|
+
];
|
|
14
|
+
function ask(rl, question) {
|
|
15
|
+
if (rl.closed)
|
|
16
|
+
return Promise.resolve('');
|
|
17
|
+
return new Promise((resolve) => {
|
|
18
|
+
const onClose = () => resolve('');
|
|
19
|
+
rl.once('close', onClose);
|
|
20
|
+
try {
|
|
21
|
+
rl.question(question, (answer) => {
|
|
22
|
+
rl.off('close', onClose);
|
|
23
|
+
resolve(answer);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
rl.off('close', onClose);
|
|
28
|
+
resolve('');
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async function multiSelect(rl, prompt, items) {
|
|
33
|
+
if (items.length === 0)
|
|
34
|
+
return [];
|
|
35
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
36
|
+
const input = await ask(rl, `${prompt} (comma-separated, empty for none, "all" for all): `);
|
|
37
|
+
const normalized = input.trim().toLowerCase();
|
|
38
|
+
if (!normalized)
|
|
39
|
+
return [];
|
|
40
|
+
if (normalized === 'all')
|
|
41
|
+
return items.map((item) => item.value);
|
|
42
|
+
const requested = new Set(normalized.split(',').map((item) => item.trim()).filter(Boolean));
|
|
43
|
+
return items
|
|
44
|
+
.filter((item) => requested.has(item.value.toLowerCase()))
|
|
45
|
+
.map((item) => item.value);
|
|
46
|
+
}
|
|
47
|
+
return await new Promise((resolve, reject) => {
|
|
48
|
+
let cursor = 0;
|
|
49
|
+
const selected = new Set();
|
|
50
|
+
let renderedLines = 0;
|
|
51
|
+
const render = () => {
|
|
52
|
+
if (renderedLines > 0) {
|
|
53
|
+
process.stdout.write(`\x1B[${renderedLines}A\x1B[0J`);
|
|
54
|
+
}
|
|
55
|
+
const lines = [
|
|
56
|
+
`${prompt} (↑/↓ to move, Space to select, Enter to confirm)`,
|
|
57
|
+
...items.map((item, index) => {
|
|
58
|
+
const pointer = index === cursor ? '>' : ' ';
|
|
59
|
+
const checkbox = selected.has(item.value) ? '[x]' : '[ ]';
|
|
60
|
+
const details = item.description ? ` ${item.description}` : '';
|
|
61
|
+
return `${pointer} ${checkbox} ${item.label}${details}`;
|
|
62
|
+
}),
|
|
63
|
+
];
|
|
64
|
+
process.stdout.write(`${lines.join('\n')}\n`);
|
|
65
|
+
renderedLines = lines.length;
|
|
66
|
+
};
|
|
67
|
+
const wasRawMode = process.stdin.isRaw;
|
|
68
|
+
const cleanup = () => {
|
|
69
|
+
process.stdin.off('keypress', onKeypress);
|
|
70
|
+
process.stdin.setRawMode(wasRawMode);
|
|
71
|
+
rl.resume();
|
|
72
|
+
process.stdout.write('\n');
|
|
73
|
+
};
|
|
74
|
+
const onKeypress = (_str, key) => {
|
|
75
|
+
if (key.ctrl && key.name === 'c') {
|
|
76
|
+
cleanup();
|
|
77
|
+
reject(new Error('Selection cancelled'));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
switch (key.name) {
|
|
81
|
+
case 'up':
|
|
82
|
+
case 'k':
|
|
83
|
+
cursor = (cursor - 1 + items.length) % items.length;
|
|
84
|
+
render();
|
|
85
|
+
break;
|
|
86
|
+
case 'down':
|
|
87
|
+
case 'j':
|
|
88
|
+
cursor = (cursor + 1) % items.length;
|
|
89
|
+
render();
|
|
90
|
+
break;
|
|
91
|
+
case 'space': {
|
|
92
|
+
const value = items[cursor].value;
|
|
93
|
+
if (selected.has(value))
|
|
94
|
+
selected.delete(value);
|
|
95
|
+
else
|
|
96
|
+
selected.add(value);
|
|
97
|
+
render();
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
case 'return':
|
|
101
|
+
case 'enter':
|
|
102
|
+
cleanup();
|
|
103
|
+
resolve(items.filter((item) => selected.has(item.value)).map((item) => item.value));
|
|
104
|
+
break;
|
|
105
|
+
default:
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
rl.pause();
|
|
110
|
+
emitKeypressEvents(process.stdin);
|
|
111
|
+
process.stdin.setRawMode(true);
|
|
112
|
+
process.stdin.resume();
|
|
113
|
+
process.stdin.on('keypress', onKeypress);
|
|
114
|
+
render();
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
async function singleSelect(rl, prompt, items) {
|
|
118
|
+
if (items.length === 0)
|
|
119
|
+
throw new Error('No options available');
|
|
120
|
+
const defaultIndex = Math.max(0, items.findIndex((item) => item.selected));
|
|
121
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
122
|
+
const input = await ask(rl, `${prompt} (${items.map((item, index) => `${index + 1}=${item.label}`).join(', ')}, default: ${defaultIndex + 1}): `);
|
|
123
|
+
const normalized = input.trim().toLowerCase();
|
|
124
|
+
if (!normalized)
|
|
125
|
+
return items[defaultIndex].value;
|
|
126
|
+
const numericIndex = Number(normalized);
|
|
127
|
+
if (Number.isInteger(numericIndex) && numericIndex >= 1 && numericIndex <= items.length) {
|
|
128
|
+
return items[numericIndex - 1].value;
|
|
129
|
+
}
|
|
130
|
+
return items.find((item) => (item.value.toLowerCase() === normalized
|
|
131
|
+
|| item.label.toLowerCase() === normalized))?.value ?? items[defaultIndex].value;
|
|
132
|
+
}
|
|
133
|
+
return await new Promise((resolve, reject) => {
|
|
134
|
+
let cursor = defaultIndex;
|
|
135
|
+
let renderedLines = 0;
|
|
136
|
+
const render = () => {
|
|
137
|
+
if (renderedLines > 0) {
|
|
138
|
+
process.stdout.write(`\x1B[${renderedLines}A\x1B[0J`);
|
|
139
|
+
}
|
|
140
|
+
const lines = [
|
|
141
|
+
`${prompt} (↑/↓ to move, Enter to confirm)`,
|
|
142
|
+
...items.map((item, index) => {
|
|
143
|
+
const pointer = index === cursor ? '>' : ' ';
|
|
144
|
+
const details = item.description ? ` ${item.description}` : '';
|
|
145
|
+
return `${pointer} ${item.label}${details}`;
|
|
146
|
+
}),
|
|
147
|
+
];
|
|
148
|
+
process.stdout.write(`${lines.join('\n')}\n`);
|
|
149
|
+
renderedLines = lines.length;
|
|
150
|
+
};
|
|
151
|
+
const wasRawMode = process.stdin.isRaw;
|
|
152
|
+
const cleanup = () => {
|
|
153
|
+
process.stdin.off('keypress', onKeypress);
|
|
154
|
+
process.stdin.setRawMode(wasRawMode);
|
|
155
|
+
rl.resume();
|
|
156
|
+
process.stdout.write('\n');
|
|
157
|
+
};
|
|
158
|
+
const onKeypress = (_str, key) => {
|
|
159
|
+
if (key.ctrl && key.name === 'c') {
|
|
160
|
+
cleanup();
|
|
161
|
+
reject(new Error('Selection cancelled'));
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
switch (key.name) {
|
|
165
|
+
case 'up':
|
|
166
|
+
case 'k':
|
|
167
|
+
cursor = (cursor - 1 + items.length) % items.length;
|
|
168
|
+
render();
|
|
169
|
+
break;
|
|
170
|
+
case 'down':
|
|
171
|
+
case 'j':
|
|
172
|
+
cursor = (cursor + 1) % items.length;
|
|
173
|
+
render();
|
|
174
|
+
break;
|
|
175
|
+
case 'return':
|
|
176
|
+
case 'enter':
|
|
177
|
+
cleanup();
|
|
178
|
+
resolve(items[cursor].value);
|
|
179
|
+
break;
|
|
180
|
+
default:
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
rl.pause();
|
|
185
|
+
emitKeypressEvents(process.stdin);
|
|
186
|
+
process.stdin.setRawMode(true);
|
|
187
|
+
process.stdin.resume();
|
|
188
|
+
process.stdin.on('keypress', onKeypress);
|
|
189
|
+
render();
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function parseEmailList(input) {
|
|
193
|
+
return input
|
|
194
|
+
.split(',')
|
|
195
|
+
.map((item) => item.trim().toLowerCase())
|
|
196
|
+
.filter(Boolean);
|
|
197
|
+
}
|
|
198
|
+
function parseDispatchContextRules(raw) {
|
|
199
|
+
const trimmed = raw.trim();
|
|
200
|
+
if (!trimmed)
|
|
201
|
+
return undefined;
|
|
202
|
+
const rules = {};
|
|
203
|
+
for (const part of trimmed.split(';')) {
|
|
204
|
+
const segment = part.trim();
|
|
205
|
+
if (!segment)
|
|
206
|
+
continue;
|
|
207
|
+
const eqIdx = segment.indexOf('=');
|
|
208
|
+
if (eqIdx <= 0)
|
|
209
|
+
continue;
|
|
210
|
+
const key = segment.slice(0, eqIdx).trim().toLowerCase();
|
|
211
|
+
if (!/^[a-z0-9_-]+$/.test(key))
|
|
212
|
+
continue;
|
|
213
|
+
const values = segment
|
|
214
|
+
.slice(eqIdx + 1)
|
|
215
|
+
.split(',')
|
|
216
|
+
.map((value) => value.trim())
|
|
217
|
+
.filter(Boolean);
|
|
218
|
+
if (values.length > 0) {
|
|
219
|
+
rules[key] = values;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return Object.keys(rules).length > 0 ? rules : undefined;
|
|
223
|
+
}
|
|
224
|
+
function extractSenderPolicies(rawAgent) {
|
|
225
|
+
if (!rawAgent)
|
|
226
|
+
return undefined;
|
|
227
|
+
if (Array.isArray(rawAgent.senderPolicies) && rawAgent.senderPolicies.length > 0) {
|
|
228
|
+
return rawAgent.senderPolicies;
|
|
229
|
+
}
|
|
230
|
+
if (Array.isArray(rawAgent.senderWhitelist) && rawAgent.senderWhitelist.length > 0) {
|
|
231
|
+
return rawAgent.senderWhitelist
|
|
232
|
+
.filter((sender) => typeof sender === 'string' && sender.trim().length > 0)
|
|
233
|
+
.map((sender) => ({ sender: sender.trim().toLowerCase() }));
|
|
234
|
+
}
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
function loadPreviousSenderPolicies(configPath) {
|
|
238
|
+
if (!existsSync(configPath))
|
|
239
|
+
return new Map();
|
|
240
|
+
try {
|
|
241
|
+
const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
242
|
+
if (!Array.isArray(raw.agents))
|
|
243
|
+
return new Map();
|
|
244
|
+
const entries = raw.agents.flatMap((agent) => {
|
|
245
|
+
if (!agent || typeof agent !== 'object')
|
|
246
|
+
return [];
|
|
247
|
+
const record = agent;
|
|
248
|
+
const name = typeof record.name === 'string' ? record.name : '';
|
|
249
|
+
if (!name)
|
|
250
|
+
return [];
|
|
251
|
+
const policies = extractSenderPolicies(record);
|
|
252
|
+
return policies?.length ? [[name, policies]] : [];
|
|
253
|
+
});
|
|
254
|
+
return new Map(entries);
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return new Map();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function formatPolicySenders(policies) {
|
|
261
|
+
return policies.map((policy) => policy.sender).join(', ');
|
|
262
|
+
}
|
|
263
|
+
function getReusableSenderPolicies(name, previousPolicies, allPreviousPolicies) {
|
|
264
|
+
const reusablePolicies = [];
|
|
265
|
+
if (previousPolicies?.length) {
|
|
266
|
+
reusablePolicies.push({ label: `${name} (current)`, policies: previousPolicies });
|
|
267
|
+
}
|
|
268
|
+
reusablePolicies.push(...[...allPreviousPolicies.entries()]
|
|
269
|
+
.filter(([agentName, policies]) => agentName !== name && policies.length > 0)
|
|
270
|
+
.map(([agentName, policies]) => ({ label: agentName, policies })));
|
|
271
|
+
return reusablePolicies;
|
|
272
|
+
}
|
|
273
|
+
async function promptReusableSenderPolicies(rl, name, previousPolicies, allPreviousPolicies) {
|
|
274
|
+
const reusablePolicies = getReusableSenderPolicies(name, previousPolicies, allPreviousPolicies);
|
|
275
|
+
if (reusablePolicies.length === 0) {
|
|
276
|
+
return undefined;
|
|
277
|
+
}
|
|
278
|
+
if (reusablePolicies.length === 1) {
|
|
279
|
+
const [selected] = reusablePolicies;
|
|
280
|
+
console.log(` Reusing sender policies from ${selected.label} (${formatPolicySenders(selected.policies)})`);
|
|
281
|
+
return selected.policies;
|
|
282
|
+
}
|
|
283
|
+
const selectedIndex = await singleSelect(rl, `? Reuse which sender policies for ${name}?`, reusablePolicies.map(({ label, policies }, index) => ({
|
|
284
|
+
value: String(index),
|
|
285
|
+
label,
|
|
286
|
+
description: `(${formatPolicySenders(policies)})`,
|
|
287
|
+
selected: index === 0,
|
|
288
|
+
})));
|
|
289
|
+
return reusablePolicies[Number(selectedIndex)].policies;
|
|
290
|
+
}
|
|
291
|
+
async function promptManualSenderPolicies(rl, name) {
|
|
292
|
+
const sendersInput = await ask(rl, `? Allowed sender emails for ${name} (comma-separated): `);
|
|
293
|
+
const senders = parseEmailList(sendersInput);
|
|
294
|
+
if (senders.length === 0) {
|
|
295
|
+
console.log(` Warning: no valid sender entries provided; ${name} will reject all senders until paired or configured.`);
|
|
296
|
+
return undefined;
|
|
297
|
+
}
|
|
298
|
+
const senderPolicies = [];
|
|
299
|
+
for (const sender of senders) {
|
|
300
|
+
const rulesInput = await ask(rl, `? Dispatch context rules for ${sender} (optional, format: project_key=proj1,proj2; user_key=alice): `);
|
|
301
|
+
const dispatchContextRules = parseDispatchContextRules(rulesInput);
|
|
302
|
+
senderPolicies.push({
|
|
303
|
+
sender,
|
|
304
|
+
...(dispatchContextRules ? { dispatchContextRules } : {}),
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
return senderPolicies;
|
|
308
|
+
}
|
|
309
|
+
async function promptSenderPolicies(rl, name, method, previousPolicies, allPreviousPolicies) {
|
|
310
|
+
if (method === 'reuse-sender-policy') {
|
|
311
|
+
return promptReusableSenderPolicies(rl, name, previousPolicies, allPreviousPolicies);
|
|
312
|
+
}
|
|
313
|
+
return promptManualSenderPolicies(rl, name);
|
|
314
|
+
}
|
|
315
|
+
async function promptConnectionSetupMethod(rl, name, canReuseSenderPolicy) {
|
|
316
|
+
return singleSelect(rl, `? How should ${name} authorize senders?`, [
|
|
317
|
+
{
|
|
318
|
+
value: 'pairing-code',
|
|
319
|
+
label: 'Pair with QR code',
|
|
320
|
+
description: '(recommended)',
|
|
321
|
+
selected: true,
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
value: 'manual-sender-policy',
|
|
325
|
+
label: 'Manually enter sender policy',
|
|
326
|
+
},
|
|
327
|
+
...(canReuseSenderPolicy ? [{
|
|
328
|
+
value: 'reuse-sender-policy',
|
|
329
|
+
label: 'Reuse existing sender policy',
|
|
330
|
+
}] : []),
|
|
331
|
+
{
|
|
332
|
+
value: 'later',
|
|
333
|
+
label: 'Configure later',
|
|
334
|
+
},
|
|
335
|
+
]);
|
|
336
|
+
}
|
|
337
|
+
function detectAgent(name) {
|
|
338
|
+
try {
|
|
339
|
+
execSync(`which ${name}`, { stdio: 'pipe' });
|
|
340
|
+
try {
|
|
341
|
+
const version = execSync(`${name} --version 2>/dev/null || echo unknown`, { stdio: 'pipe' }).toString().trim().split('\n')[0];
|
|
342
|
+
return version;
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
return 'installed';
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
catch {
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
function defaultAcpCommand(name) {
|
|
353
|
+
return name === 'hermes' ? 'hermes acp' : name;
|
|
354
|
+
}
|
|
355
|
+
function renderQrFallback(value) {
|
|
356
|
+
console.log(' Could not render a terminal QR code. Paste this pairing URL instead:');
|
|
357
|
+
console.log(` ${value}`);
|
|
358
|
+
}
|
|
359
|
+
function renderTerminalQr(value) {
|
|
360
|
+
const qrModule = (qrcode.generate ? qrcode : qrcode.default);
|
|
361
|
+
if (!qrModule?.generate) {
|
|
362
|
+
renderQrFallback(value);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
try {
|
|
366
|
+
console.log(' Scan this QR code with AAMP App:');
|
|
367
|
+
qrModule.generate(pairingUrlToWebUrl(value), { small: true }, (qr) => console.log(qr));
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
renderQrFallback(value);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
export function renderPairingCode(name, mailbox, pairingFile) {
|
|
374
|
+
const pairing = createPairingCode({ mailbox, file: pairingFile });
|
|
375
|
+
console.log(`\n Pair ${name} with AAMP App (expires ${pairing.expiresAt})`);
|
|
376
|
+
renderTerminalQr(pairing.connectUrl);
|
|
377
|
+
console.log(` Pairing URL: ${pairing.connectUrl}`);
|
|
378
|
+
}
|
|
379
|
+
export async function runInit(configPath, opts = {}) {
|
|
380
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
381
|
+
console.log('\nAAMP ACP Bridge Setup\n');
|
|
382
|
+
// 1. AAMP host
|
|
383
|
+
const aampHostInput = opts.aampHost
|
|
384
|
+
? opts.aampHost
|
|
385
|
+
: (await ask(rl, '? AAMP Service URL (default: https://meshmail.ai): ')).trim();
|
|
386
|
+
const aampHost = aampHostInput || 'https://meshmail.ai';
|
|
387
|
+
if (!aampHost) {
|
|
388
|
+
rl.close();
|
|
389
|
+
throw new Error('AAMP host is required');
|
|
390
|
+
}
|
|
391
|
+
// Verify connectivity
|
|
392
|
+
try {
|
|
393
|
+
const res = await fetch(`${aampHost}/health`);
|
|
394
|
+
if (res.ok) {
|
|
395
|
+
const data = await res.json();
|
|
396
|
+
console.log(` Connected (${data.service})\n`);
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
console.log(` Warning: Server responded with ${res.status}\n`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
console.log(` Warning: Could not reach ${aampHost} -- continuing anyway\n`);
|
|
404
|
+
}
|
|
405
|
+
// 2. Scan for ACP agents
|
|
406
|
+
const scanTargets = opts.agent
|
|
407
|
+
? KNOWN_AGENTS.filter((name) => name === opts.agent)
|
|
408
|
+
: KNOWN_AGENTS;
|
|
409
|
+
if (opts.agent && scanTargets.length === 0) {
|
|
410
|
+
rl.close();
|
|
411
|
+
throw new Error(`Unknown ACP agent "${opts.agent}". Known agents: ${KNOWN_AGENTS.join(', ')}`);
|
|
412
|
+
}
|
|
413
|
+
console.log(opts.agent ? `? Scanning for ACP agent: ${opts.agent}` : '? Scanning for ACP agents...');
|
|
414
|
+
const detected = [];
|
|
415
|
+
for (const name of scanTargets) {
|
|
416
|
+
const version = detectAgent(name);
|
|
417
|
+
if (version) {
|
|
418
|
+
console.log(` + ${name.padEnd(12)} (${version})`);
|
|
419
|
+
detected.push({ name, version });
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
console.log(` - ${name.padEnd(12)} (not installed)`);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
console.log();
|
|
426
|
+
if (detected.length === 0) {
|
|
427
|
+
console.log('No ACP agents found. Install an agent first (e.g. npm i -g @anthropic-ai/claude-code).');
|
|
428
|
+
rl.close();
|
|
429
|
+
return false;
|
|
430
|
+
}
|
|
431
|
+
// 3. Select agents
|
|
432
|
+
const selected = opts.agent
|
|
433
|
+
? detected.map(({ name }) => name)
|
|
434
|
+
: await multiSelect(rl, '? Select ACP agents to bridge', detected.map(({ name, version }) => ({
|
|
435
|
+
value: name,
|
|
436
|
+
label: name,
|
|
437
|
+
description: `(${version})`,
|
|
438
|
+
})));
|
|
439
|
+
if (selected.length === 0) {
|
|
440
|
+
console.log('No agents selected. Exiting.');
|
|
441
|
+
rl.close();
|
|
442
|
+
return false;
|
|
443
|
+
}
|
|
444
|
+
// 4. Register AAMP identities
|
|
445
|
+
console.log('\n? Registering AAMP identities...');
|
|
446
|
+
const agents = [];
|
|
447
|
+
const previousSenderPolicies = loadPreviousSenderPolicies(configPath);
|
|
448
|
+
for (const name of selected) {
|
|
449
|
+
const slug = `${name}-bridge`;
|
|
450
|
+
const acpCommand = defaultAcpCommand(name);
|
|
451
|
+
const credFile = getDefaultCredentialsPath(name);
|
|
452
|
+
const pairingFile = defaultPairingFile(name);
|
|
453
|
+
const senderPoliciesFile = defaultSenderPoliciesFile(name);
|
|
454
|
+
const previousPolicies = previousSenderPolicies.get(name);
|
|
455
|
+
const canReuseSenderPolicy = getReusableSenderPolicies(name, previousPolicies, previousSenderPolicies).length > 0;
|
|
456
|
+
const connectionSetup = opts.connectionSetup
|
|
457
|
+
?? await promptConnectionSetupMethod(rl, name, canReuseSenderPolicy);
|
|
458
|
+
if (connectionSetup === 'reuse-sender-policy' && !canReuseSenderPolicy) {
|
|
459
|
+
rl.close();
|
|
460
|
+
throw new Error(`Cannot reuse sender policy for ${name}: no existing sender policies found`);
|
|
461
|
+
}
|
|
462
|
+
const senderPolicies = connectionSetup === 'manual-sender-policy' || connectionSetup === 'reuse-sender-policy'
|
|
463
|
+
? await promptSenderPolicies(rl, name, connectionSetup, previousPolicies, previousSenderPolicies)
|
|
464
|
+
: undefined;
|
|
465
|
+
if (existsSync(credFile)) {
|
|
466
|
+
console.log(` + ${name} -> using existing credentials (${credFile})`);
|
|
467
|
+
const saved = JSON.parse(readFileSync(credFile, 'utf-8'));
|
|
468
|
+
if (connectionSetup === 'pairing-code' && saved.email) {
|
|
469
|
+
renderPairingCode(name, saved.email, pairingFile);
|
|
470
|
+
}
|
|
471
|
+
else if (connectionSetup === 'later') {
|
|
472
|
+
console.log(` Sender authorization for ${name} was left for later; task.dispatch will be rejected until paired or configured.`);
|
|
473
|
+
}
|
|
474
|
+
agents.push({
|
|
475
|
+
name,
|
|
476
|
+
acpCommand,
|
|
477
|
+
slug,
|
|
478
|
+
credentialsFile: credFile,
|
|
479
|
+
pairingFile,
|
|
480
|
+
senderPoliciesFile,
|
|
481
|
+
senderPolicies,
|
|
482
|
+
});
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
try {
|
|
486
|
+
const creds = await AampClient.registerMailbox({
|
|
487
|
+
aampHost,
|
|
488
|
+
slug,
|
|
489
|
+
description: `${name} via ACP bridge`,
|
|
490
|
+
});
|
|
491
|
+
mkdirSync(dirname(credFile), { recursive: true });
|
|
492
|
+
writeFileSync(credFile, JSON.stringify({
|
|
493
|
+
email: creds.email,
|
|
494
|
+
mailboxToken: creds.mailboxToken,
|
|
495
|
+
smtpPassword: creds.smtpPassword,
|
|
496
|
+
}, null, 2));
|
|
497
|
+
console.log(` + ${name} -> ${creds.email}`);
|
|
498
|
+
if (connectionSetup === 'pairing-code') {
|
|
499
|
+
renderPairingCode(name, creds.email, pairingFile);
|
|
500
|
+
}
|
|
501
|
+
else if (connectionSetup === 'later') {
|
|
502
|
+
console.log(` Sender authorization for ${name} was left for later; task.dispatch will be rejected until paired or configured.`);
|
|
503
|
+
}
|
|
504
|
+
agents.push({
|
|
505
|
+
name,
|
|
506
|
+
acpCommand,
|
|
507
|
+
slug,
|
|
508
|
+
credentialsFile: credFile,
|
|
509
|
+
pairingFile,
|
|
510
|
+
senderPoliciesFile,
|
|
511
|
+
description: `${name} via ACP bridge`,
|
|
512
|
+
senderPolicies,
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
catch (err) {
|
|
516
|
+
console.log(` x ${name} -> registration failed: ${err.message}`);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
if (agents.length === 0) {
|
|
520
|
+
console.log('No agents registered. Exiting.');
|
|
521
|
+
rl.close();
|
|
522
|
+
return false;
|
|
523
|
+
}
|
|
524
|
+
// 5. Write config
|
|
525
|
+
const config = { aampHost, rejectUnauthorized: false, agents };
|
|
526
|
+
mkdirSync(dirname(configPath), { recursive: true });
|
|
527
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
528
|
+
console.log(`\nConfig written to ${configPath}`);
|
|
529
|
+
rl.close();
|
|
530
|
+
return true;
|
|
531
|
+
}
|
|
532
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|