aismemory 0.3.0 → 0.5.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/__tests__/device-flow-recovery.test.d.ts +1 -0
- package/dist/__tests__/device-flow-recovery.test.js +206 -0
- package/dist/__tests__/device-flow-recovery.test.js.map +1 -0
- package/dist/__tests__/key-auth.test.d.ts +1 -0
- package/dist/__tests__/key-auth.test.js +284 -0
- package/dist/__tests__/key-auth.test.js.map +1 -0
- package/dist/__tests__/mcp-init-no-auth.test.d.ts +1 -0
- package/dist/__tests__/mcp-init-no-auth.test.js +75 -0
- package/dist/__tests__/mcp-init-no-auth.test.js.map +1 -0
- package/dist/cli/enable-key-auth.d.ts +1 -0
- package/dist/cli/enable-key-auth.js +131 -0
- package/dist/cli/enable-key-auth.js.map +1 -0
- package/dist/index.js +199 -47
- package/dist/index.js.map +1 -1
- package/dist/key-auth.d.ts +66 -0
- package/dist/key-auth.js +179 -0
- package/dist/key-auth.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aismemory enable-key-auth` — one-shot enrollment for DID-based auth.
|
|
3
|
+
*
|
|
4
|
+
* Generates an Ed25519 keypair on the user's device, registers the public
|
|
5
|
+
* key with AIS, and writes the private key to `~/.aismemory/keys/`. After
|
|
6
|
+
* this runs once per device, every subsequent aismemory session authenticates
|
|
7
|
+
* silently with the key — no browser, no activation URL.
|
|
8
|
+
*
|
|
9
|
+
* Bootstrap requirements: the user needs a working bearer token from the
|
|
10
|
+
* existing device-flow credentials file (`~/.aismemory/credentials.json`).
|
|
11
|
+
* If absent, we tell them to run a normal aismemory session once first.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* npx aismemory enable-key-auth
|
|
15
|
+
* AIS_URL=https://other.example.com npx aismemory enable-key-auth
|
|
16
|
+
*
|
|
17
|
+
* Exit codes:
|
|
18
|
+
* 0 — key registered + saved
|
|
19
|
+
* 1 — bootstrap credentials missing or registration failed
|
|
20
|
+
*/
|
|
21
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
22
|
+
import { join } from 'node:path';
|
|
23
|
+
import { homedir } from 'node:os';
|
|
24
|
+
import { generateAndSaveKeypair } from '../key-auth.js';
|
|
25
|
+
const PREFIX = '[aismemory enable-key-auth]';
|
|
26
|
+
function loadBootstrapCreds() {
|
|
27
|
+
const path = join(homedir(), '.aismemory', 'credentials.json');
|
|
28
|
+
if (!existsSync(path))
|
|
29
|
+
return null;
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Decode a JWT payload WITHOUT verifying the signature. We trust the token
|
|
39
|
+
* because it came from our own credentials file — we just need its claims
|
|
40
|
+
* to know who we are.
|
|
41
|
+
*/
|
|
42
|
+
function decodeJwtPayload(token) {
|
|
43
|
+
const parts = token.split('.');
|
|
44
|
+
if (parts.length !== 3)
|
|
45
|
+
throw new Error('Malformed JWT');
|
|
46
|
+
const json = Buffer.from(parts[1], 'base64url').toString('utf-8');
|
|
47
|
+
return JSON.parse(json);
|
|
48
|
+
}
|
|
49
|
+
function log(msg) {
|
|
50
|
+
process.stderr.write(`${PREFIX} ${msg}\n`);
|
|
51
|
+
}
|
|
52
|
+
async function main() {
|
|
53
|
+
const aisUrl = process.env['AIS_URL'] ?? 'https://ais.agentsandswarms.ai';
|
|
54
|
+
// 1. Find a bootstrap bearer token.
|
|
55
|
+
const creds = loadBootstrapCreds();
|
|
56
|
+
if (!creds) {
|
|
57
|
+
log('No bootstrap credentials found at ~/.aismemory/credentials.json');
|
|
58
|
+
log('Run `npx aismemory` first (and complete the bond URL) to get an initial token,');
|
|
59
|
+
log('then re-run this command.');
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
if (new Date(creds.expiresAt) <= new Date()) {
|
|
63
|
+
log('Bootstrap credentials at ~/.aismemory/credentials.json have expired.');
|
|
64
|
+
log('Run `npx aismemory` once to refresh them, then re-run this command.');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
// 2. Extract userId from the JWT.
|
|
68
|
+
let payload;
|
|
69
|
+
try {
|
|
70
|
+
payload = decodeJwtPayload(creds.token);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
log(`Failed to decode bootstrap JWT: ${err.message}`);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const userId = payload.user_id ?? payload.sub;
|
|
77
|
+
if (!userId) {
|
|
78
|
+
log('Bootstrap JWT does not carry a user_id claim. This token may be agent-only —');
|
|
79
|
+
log('claim your agent to a user account first, then re-run.');
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
// Derive the userDid. The domain is the host portion of AIS_URL — strip
|
|
83
|
+
// the protocol so the resulting DID matches what AIS computes server-side.
|
|
84
|
+
const aisHost = new URL(aisUrl).host;
|
|
85
|
+
const userDid = `did:web:${aisHost}:users:${userId}`;
|
|
86
|
+
log(`AIS URL : ${aisUrl}`);
|
|
87
|
+
log(`userId : ${userId}`);
|
|
88
|
+
log(`userDid : ${userDid}`);
|
|
89
|
+
// 3. Generate keypair + write to disk.
|
|
90
|
+
const label = `${process.env['USER'] ?? 'user'}-${process.platform}`;
|
|
91
|
+
log('Generating Ed25519 keypair…');
|
|
92
|
+
const keyFile = await generateAndSaveKeypair({ userId, userDid });
|
|
93
|
+
// 4. POST public key to AIS.
|
|
94
|
+
log('Registering public key with AIS…');
|
|
95
|
+
const res = await fetch(`${aisUrl}/v1/users/me/keys`, {
|
|
96
|
+
method: 'POST',
|
|
97
|
+
headers: {
|
|
98
|
+
'Content-Type': 'application/json',
|
|
99
|
+
Authorization: `Bearer ${creds.token}`,
|
|
100
|
+
},
|
|
101
|
+
body: JSON.stringify({
|
|
102
|
+
publicKey: keyFile.publicKeyJwk,
|
|
103
|
+
label,
|
|
104
|
+
}),
|
|
105
|
+
});
|
|
106
|
+
const body = (await res.json().catch(() => ({})));
|
|
107
|
+
if (!res.ok || !body.success) {
|
|
108
|
+
// Special-case: 409 = key already registered. Treat as success since we
|
|
109
|
+
// still wrote the file locally and the server already knows about us.
|
|
110
|
+
if (res.status === 409) {
|
|
111
|
+
log('Public key was already registered (server says 409 — duplicate).');
|
|
112
|
+
log('Local key file is up to date; no further action needed.');
|
|
113
|
+
process.exit(0);
|
|
114
|
+
}
|
|
115
|
+
log(`Failed to register key: HTTP ${res.status} ${body.error?.code ?? ''} ${body.error?.message ?? ''}`);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
log('✓ Public key registered with AIS');
|
|
119
|
+
log(` key id : ${body.data?.id ?? '<unknown>'}`);
|
|
120
|
+
log(` label : ${label}`);
|
|
121
|
+
log('');
|
|
122
|
+
log('Done. Future aismemory sessions will authenticate silently with this key.');
|
|
123
|
+
log(`Private key lives at ~/.aismemory/keys/${userDid}.json (mode 0600).`);
|
|
124
|
+
log('Treat it like an SSH private key — back it up, do not share.');
|
|
125
|
+
process.exit(0);
|
|
126
|
+
}
|
|
127
|
+
main().catch((err) => {
|
|
128
|
+
log(`Fatal: ${err instanceof Error ? err.message : String(err)}`);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=enable-key-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enable-key-auth.js","sourceRoot":"","sources":["../../src/cli/enable-key-auth.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
11
11
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
12
|
+
import { tryKeyAuth } from './key-auth.js';
|
|
12
13
|
import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
13
14
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
14
15
|
import { join } from 'path';
|
|
@@ -134,11 +135,30 @@ async function resolveAgent(token, fallbackAgentId, fallbackTenantId) {
|
|
|
134
135
|
return { agentId: fallbackAgentId, tenantId: fallbackTenantId };
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Bond URL/code surfaced when a tool is called before the user has approved
|
|
140
|
+
* the device flow. Caller catches this and returns a friendly error to the MCP
|
|
141
|
+
* client so the agent can show the URL inline in chat.
|
|
142
|
+
*/
|
|
143
|
+
class BondPendingError extends Error {
|
|
144
|
+
verificationUri;
|
|
145
|
+
userCode;
|
|
146
|
+
bondPending = true;
|
|
147
|
+
constructor(verificationUri, userCode) {
|
|
148
|
+
super(`Memory bond required.\n\n` +
|
|
149
|
+
`Visit: ${verificationUri}\n` +
|
|
150
|
+
`Code: ${userCode}\n\n` +
|
|
151
|
+
`Enter your email and tap Approve, then retry this tool. Takes about 30 seconds.`);
|
|
152
|
+
this.verificationUri = verificationUri;
|
|
153
|
+
this.userCode = userCode;
|
|
154
|
+
this.name = 'BondPendingError';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async function startDeviceFlow() {
|
|
138
158
|
stderr('Starting authentication...');
|
|
139
|
-
const authRes = await aisPost('/v1/oauth/device/authorize', {
|
|
159
|
+
const authRes = (await aisPost('/v1/oauth/device/authorize', {
|
|
140
160
|
name: `agent-${homedir().split('/').pop() ?? 'user'}`,
|
|
141
|
-
});
|
|
161
|
+
}));
|
|
142
162
|
if (!authRes.success || !authRes.data) {
|
|
143
163
|
throw new Error(`Authentication failed: ${authRes.error?.message ?? 'Unknown error'}`);
|
|
144
164
|
}
|
|
@@ -147,30 +167,37 @@ async function authenticate() {
|
|
|
147
167
|
stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
148
168
|
stderr(' aismemory — memory bond required');
|
|
149
169
|
stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
150
|
-
stderr('');
|
|
151
170
|
stderr(` Bond URL : ${verification_uri_complete}`);
|
|
152
171
|
stderr(` Code : ${user_code}`);
|
|
153
|
-
stderr('');
|
|
154
172
|
stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
//
|
|
173
|
+
const poll = pollForToken(device_code, interval, agent_id, provisional_tenant_id);
|
|
174
|
+
const flow = {
|
|
175
|
+
device_code,
|
|
176
|
+
user_code,
|
|
177
|
+
verification_uri_complete,
|
|
178
|
+
agent_id,
|
|
179
|
+
provisional_tenant_id,
|
|
180
|
+
poll,
|
|
181
|
+
dead: false,
|
|
182
|
+
};
|
|
183
|
+
// Mark the flow dead as soon as its poll rejects so the next
|
|
184
|
+
// `ensureCredentials` call starts a fresh flow. The `.catch` here is purely
|
|
185
|
+
// for state-tracking — the original rejection is still observed by callers
|
|
186
|
+
// racing `flow.poll`. We swallow on this branch to suppress unhandled
|
|
187
|
+
// rejection warnings between rejection and the next ensureCredentials call.
|
|
188
|
+
poll.catch(() => {
|
|
189
|
+
flow.dead = true;
|
|
190
|
+
});
|
|
191
|
+
return flow;
|
|
192
|
+
}
|
|
193
|
+
async function pollForToken(device_code, interval, agent_id, provisional_tenant_id) {
|
|
166
194
|
const pollInterval = Math.max(interval, 5) * 1000;
|
|
167
195
|
const deadline = Date.now() + 30 * 60 * 1000; // 30 min
|
|
168
196
|
while (Date.now() < deadline) {
|
|
169
197
|
await new Promise((r) => setTimeout(r, pollInterval));
|
|
170
|
-
const pollRes = await aisPost('/v1/oauth/token', { device_code });
|
|
198
|
+
const pollRes = (await aisPost('/v1/oauth/token', { device_code }));
|
|
171
199
|
if (pollRes.access_token) {
|
|
172
200
|
const expiresAt = new Date(Date.now() + (pollRes.expires_in ?? 604800) * 1000).toISOString();
|
|
173
|
-
// Resolve to an existing agent if available
|
|
174
201
|
const { agentId, tenantId } = await resolveAgent(pollRes.access_token, agent_id, provisional_tenant_id);
|
|
175
202
|
const creds = {
|
|
176
203
|
token: pollRes.access_token,
|
|
@@ -268,27 +295,137 @@ const tools = [
|
|
|
268
295
|
},
|
|
269
296
|
];
|
|
270
297
|
// ── MCP Server ──────────────────────────────────────────
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
298
|
+
/**
|
|
299
|
+
* Decode the user_id + tenant_id claims from a (presumed valid) JWT without
|
|
300
|
+
* verifying the signature. Used to derive bootstrap context after a successful
|
|
301
|
+
* key-auth handshake — we trust the token because the server just minted it.
|
|
302
|
+
*/
|
|
303
|
+
function decodeJwtClaims(token) {
|
|
304
|
+
const parts = token.split('.');
|
|
305
|
+
if (parts.length !== 3)
|
|
306
|
+
return {};
|
|
307
|
+
try {
|
|
308
|
+
const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf-8'));
|
|
309
|
+
return { userId: payload.user_id ?? payload.sub, tenantId: payload.tenant_id };
|
|
276
310
|
}
|
|
277
|
-
|
|
278
|
-
|
|
311
|
+
catch {
|
|
312
|
+
return {};
|
|
279
313
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
if (
|
|
285
|
-
|
|
314
|
+
}
|
|
315
|
+
async function main() {
|
|
316
|
+
// Subcommand dispatch — `aismemory enable-key-auth` runs the enrollment
|
|
317
|
+
// CLI and exits, never touching the MCP server. Other subcommands TBD.
|
|
318
|
+
if (process.argv[2] === 'enable-key-auth') {
|
|
319
|
+
await import('./cli/enable-key-auth.js');
|
|
320
|
+
return; // CLI calls process.exit() itself
|
|
286
321
|
}
|
|
287
|
-
|
|
288
|
-
|
|
322
|
+
// Lazy-auth state. We connect the MCP transport before the user has approved
|
|
323
|
+
// the device flow so Claude Code's 30s connection timeout is not blocked on
|
|
324
|
+
// human approval. The first tool call surfaces the bond URL via its result.
|
|
325
|
+
let creds = loadCredentials();
|
|
326
|
+
let activeFlow = null;
|
|
327
|
+
let postAuthDone = false;
|
|
328
|
+
// Created here so `agent_load` and post-auth setup can reference it via closure.
|
|
329
|
+
const server = new Server({ name: 'aismemory', version: '0.5.0' }, { capabilities: { tools: {}, prompts: {} } });
|
|
330
|
+
/**
|
|
331
|
+
* Wait briefly for the in-flight device-flow poll to complete. If the user
|
|
332
|
+
* has already approved, this returns the fresh credentials. If not, throws
|
|
333
|
+
* BondPendingError so the calling tool returns the bond URL to the agent.
|
|
334
|
+
*
|
|
335
|
+
* Recovery: if the previous flow's poll rejected (expired_token,
|
|
336
|
+
* access_denied, 30-min deadline, etc.), the dead flow is discarded and a
|
|
337
|
+
* new device flow is started inline — the user gets a fresh bond URL on
|
|
338
|
+
* the next tool call without having to restart the MCP process.
|
|
339
|
+
*/
|
|
340
|
+
async function ensureCredentials(softTimeoutMs = 7000) {
|
|
341
|
+
if (creds)
|
|
342
|
+
return creds;
|
|
343
|
+
// ── Key auth (Phase 1 DID auth) ───────────────────────────────────────
|
|
344
|
+
// If the user has enrolled a private key for this device, sign a
|
|
345
|
+
// server-issued challenge and skip the device-flow ceremony entirely.
|
|
346
|
+
// tryKeyAuth() returns null if no key file is present (clean fallback
|
|
347
|
+
// to device flow) and throws only on real failures (e.g. server says
|
|
348
|
+
// INVALID_SIGNATURE). On throw we log and continue to device flow —
|
|
349
|
+
// device flow is the recovery path for "user wiped their key file".
|
|
350
|
+
try {
|
|
351
|
+
const keyResult = await tryKeyAuth({ aisUrl: AIS_URL });
|
|
352
|
+
if (keyResult) {
|
|
353
|
+
const claims = decodeJwtClaims(keyResult.token);
|
|
354
|
+
const tenantId = claims.tenantId ?? '';
|
|
355
|
+
const resolved = await resolveAgent(keyResult.token, '', tenantId);
|
|
356
|
+
creds = {
|
|
357
|
+
token: keyResult.token,
|
|
358
|
+
agentId: resolved.agentId,
|
|
359
|
+
tenantId: resolved.tenantId || tenantId,
|
|
360
|
+
expiresAt: keyResult.expiresAt,
|
|
361
|
+
};
|
|
362
|
+
saveCredentials(creds);
|
|
363
|
+
stderr('Authenticated via DID key auth (no browser required)');
|
|
364
|
+
if (!postAuthDone) {
|
|
365
|
+
postAuthDone = true;
|
|
366
|
+
void runPostAuth(creds);
|
|
367
|
+
}
|
|
368
|
+
return creds;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
stderr(`Key auth failed: ${err instanceof Error ? err.message : String(err)}. Falling back to device flow.`);
|
|
373
|
+
}
|
|
374
|
+
if (!activeFlow || activeFlow.dead) {
|
|
375
|
+
activeFlow = await startDeviceFlow();
|
|
376
|
+
}
|
|
377
|
+
const sentinel = Symbol('bond-pending');
|
|
378
|
+
let got;
|
|
379
|
+
try {
|
|
380
|
+
got = await Promise.race([
|
|
381
|
+
activeFlow.poll,
|
|
382
|
+
new Promise((r) => setTimeout(() => r(sentinel), softTimeoutMs)),
|
|
383
|
+
]);
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
// Poll rejected (deadline / expired / denied). Start a fresh flow
|
|
387
|
+
// immediately and surface its new bond URL — no restart required.
|
|
388
|
+
activeFlow = await startDeviceFlow();
|
|
389
|
+
throw new BondPendingError(activeFlow.verification_uri_complete, activeFlow.user_code);
|
|
390
|
+
}
|
|
391
|
+
if (got === sentinel) {
|
|
392
|
+
throw new BondPendingError(activeFlow.verification_uri_complete, activeFlow.user_code);
|
|
393
|
+
}
|
|
394
|
+
creds = got;
|
|
395
|
+
activeFlow = null;
|
|
396
|
+
if (!postAuthDone) {
|
|
397
|
+
postAuthDone = true;
|
|
398
|
+
void runPostAuth(creds);
|
|
399
|
+
}
|
|
400
|
+
return creds;
|
|
401
|
+
}
|
|
402
|
+
/** Identity hydration, prompt refresh, and auto-handoff — all post-auth. */
|
|
403
|
+
async function runPostAuth(c) {
|
|
404
|
+
try {
|
|
405
|
+
agentContext = await hydrateIdentity(AIS_URL, c.agentId, c.token);
|
|
406
|
+
if (agentContext) {
|
|
407
|
+
stderr(`Agent loaded: ${agentContext.identity.name} (${agentContext.recentMemories.length} memories, ${agentContext.goals.length} goals)`);
|
|
408
|
+
server.notification({ method: 'notifications/prompts/list_changed' });
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
stderr('Agent identity not loaded — tools work, but no identity prompt');
|
|
412
|
+
}
|
|
413
|
+
startRefreshTimer(AIS_URL, c.agentId, c.token, (memories) => {
|
|
414
|
+
if (agentContext) {
|
|
415
|
+
agentContext.recentMemories = memories;
|
|
416
|
+
}
|
|
417
|
+
server.notification({ method: 'notifications/prompts/list_changed' });
|
|
418
|
+
stderr(`Memory refresh: ${memories.length} memories`);
|
|
419
|
+
});
|
|
420
|
+
setupAutoHandoff(AIS_URL, c.agentId, c.token, activityTracker, () => {
|
|
421
|
+
stopRefreshTimer();
|
|
422
|
+
stderr('Session handoff saved');
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
catch (e) {
|
|
426
|
+
stderr(`Post-auth setup failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
427
|
+
}
|
|
289
428
|
}
|
|
290
|
-
// Create MCP server
|
|
291
|
-
const server = new Server({ name: 'aismemory', version: '0.2.0' }, { capabilities: { tools: {}, prompts: {} } });
|
|
292
429
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
|
|
293
430
|
server.setRequestHandler(ListPromptsRequestSchema, async () => ({
|
|
294
431
|
prompts: agentContext
|
|
@@ -306,6 +443,10 @@ async function main() {
|
|
|
306
443
|
const a = (args ?? {});
|
|
307
444
|
activityTracker.recordToolUse(name);
|
|
308
445
|
try {
|
|
446
|
+
const c = await ensureCredentials();
|
|
447
|
+
const token = c.token;
|
|
448
|
+
// agentId is mutable across `agent_load` calls within this session.
|
|
449
|
+
let agentId = c.agentId;
|
|
309
450
|
let result;
|
|
310
451
|
switch (name) {
|
|
311
452
|
case 'remember':
|
|
@@ -349,6 +490,10 @@ async function main() {
|
|
|
349
490
|
}
|
|
350
491
|
const target = await resolveAgentForLoad(token, query);
|
|
351
492
|
agentId = target.id;
|
|
493
|
+
// Persist the switch so subsequent tool calls use the new agent.
|
|
494
|
+
if (creds) {
|
|
495
|
+
creds = { ...creds, agentId };
|
|
496
|
+
}
|
|
352
497
|
agentContext = await hydrateIdentity(AIS_URL, agentId, token);
|
|
353
498
|
server.notification({ method: 'notifications/prompts/list_changed' });
|
|
354
499
|
stderr(`agent_load: switched to "${target.name}" (${target.id})`);
|
|
@@ -374,26 +519,33 @@ async function main() {
|
|
|
374
519
|
};
|
|
375
520
|
}
|
|
376
521
|
catch (error) {
|
|
522
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
523
|
+
// BondPendingError carries human-readable text that the agent should
|
|
524
|
+
// render verbatim — return as plain text rather than JSON.
|
|
525
|
+
if (error instanceof BondPendingError) {
|
|
526
|
+
return {
|
|
527
|
+
content: [{ type: 'text', text: message }],
|
|
528
|
+
isError: true,
|
|
529
|
+
};
|
|
530
|
+
}
|
|
377
531
|
return {
|
|
378
|
-
content: [{ type: 'text', text: JSON.stringify({ error:
|
|
532
|
+
content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
|
|
379
533
|
isError: true,
|
|
380
534
|
};
|
|
381
535
|
}
|
|
382
536
|
});
|
|
537
|
+
// Connect the transport BEFORE any auth so MCP `initialize` returns in <1s.
|
|
383
538
|
const transport = new StdioServerTransport();
|
|
384
539
|
await server.connect(transport);
|
|
385
|
-
startRefreshTimer(AIS_URL, agentId, token, (memories) => {
|
|
386
|
-
if (agentContext) {
|
|
387
|
-
agentContext.recentMemories = memories;
|
|
388
|
-
}
|
|
389
|
-
server.notification({ method: 'notifications/prompts/list_changed' });
|
|
390
|
-
stderr(`Memory refresh: ${memories.length} memories`);
|
|
391
|
-
});
|
|
392
|
-
setupAutoHandoff(AIS_URL, agentId, token, activityTracker, () => {
|
|
393
|
-
stopRefreshTimer();
|
|
394
|
-
stderr('Session handoff saved');
|
|
395
|
-
});
|
|
396
540
|
stderr(`MCP server running. Tools: ${tools.map((t) => t.name).join(', ')}`);
|
|
541
|
+
if (creds) {
|
|
542
|
+
stderr(`Authenticated as agent ${creds.agentId}`);
|
|
543
|
+
postAuthDone = true;
|
|
544
|
+
void runPostAuth(creds);
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
stderr('No saved credentials. Bond URL will be surfaced on first tool call.');
|
|
548
|
+
}
|
|
397
549
|
}
|
|
398
550
|
main().catch((error) => {
|
|
399
551
|
stderr(`Fatal: ${error instanceof Error ? error.message : String(error)}`);
|
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,66 @@
|
|
|
1
|
+
/** Public key in JWK form. */
|
|
2
|
+
export interface Ed25519PublicJwk {
|
|
3
|
+
kty: 'OKP';
|
|
4
|
+
crv: 'Ed25519';
|
|
5
|
+
x: string;
|
|
6
|
+
}
|
|
7
|
+
/** Private key file shape persisted at `~/.aismemory/keys/<userDid>.json`. */
|
|
8
|
+
export interface KeyFile {
|
|
9
|
+
/** Schema version. Bump for breaking changes; readers should refuse unknown versions. */
|
|
10
|
+
version: 1;
|
|
11
|
+
userId: string;
|
|
12
|
+
userDid: string;
|
|
13
|
+
keyType: 'Ed25519';
|
|
14
|
+
/** base64url(raw 32-byte private key seed) */
|
|
15
|
+
privateKey: string;
|
|
16
|
+
/** base64url(raw 32-byte public key) */
|
|
17
|
+
publicKey: string;
|
|
18
|
+
/** Public key in JWK form — kept alongside `publicKey` for convenience. */
|
|
19
|
+
publicKeyJwk: Ed25519PublicJwk;
|
|
20
|
+
createdAt: string;
|
|
21
|
+
}
|
|
22
|
+
/** Credentials handed back to the caller after a successful key-auth. */
|
|
23
|
+
export interface KeyAuthCredentials {
|
|
24
|
+
userId: string;
|
|
25
|
+
userDid: string;
|
|
26
|
+
/** Bearer JWT to use in `Authorization: Bearer ...` headers. */
|
|
27
|
+
token: string;
|
|
28
|
+
/** ISO timestamp at which `token` will be rejected. */
|
|
29
|
+
expiresAt: string;
|
|
30
|
+
tokenType: 'owner';
|
|
31
|
+
}
|
|
32
|
+
/** Read a key file. Returns null if the file is absent. Throws on malformed JSON. */
|
|
33
|
+
export declare function readKeyFile(opts: {
|
|
34
|
+
userDid: string;
|
|
35
|
+
keysDir?: string;
|
|
36
|
+
}): KeyFile | null;
|
|
37
|
+
/**
|
|
38
|
+
* Generate a fresh Ed25519 keypair, write it to disk, and return the result.
|
|
39
|
+
* The directory is created with mode 0700 and the key file with mode 0600.
|
|
40
|
+
*
|
|
41
|
+
* This is called once per device by the `enable-key-auth` CLI bootstrap.
|
|
42
|
+
*/
|
|
43
|
+
export declare function generateAndSaveKeypair(opts: {
|
|
44
|
+
userId: string;
|
|
45
|
+
userDid: string;
|
|
46
|
+
keysDir?: string;
|
|
47
|
+
}): Promise<KeyFile>;
|
|
48
|
+
export interface TryKeyAuthOpts {
|
|
49
|
+
/** AIS base URL, e.g. `https://ais.agentsandswarms.ai` */
|
|
50
|
+
aisUrl: string;
|
|
51
|
+
/** Override the default keys directory (for tests). */
|
|
52
|
+
keysDir?: string;
|
|
53
|
+
/**
|
|
54
|
+
* If supplied, load the key for this specific userDid. Otherwise the
|
|
55
|
+
* helper auto-discovers a single key file in `keysDir`.
|
|
56
|
+
*/
|
|
57
|
+
userDid?: string;
|
|
58
|
+
/** Override fetch (for tests). */
|
|
59
|
+
fetchImpl?: typeof globalThis.fetch;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Attempt key-based authentication against AIS. Returns null if no usable
|
|
63
|
+
* key file exists (caller should fall back to device flow). Throws on any
|
|
64
|
+
* fatal error (bad signature, network failure, server rejection).
|
|
65
|
+
*/
|
|
66
|
+
export declare function tryKeyAuth(opts: TryKeyAuthOpts): Promise<KeyAuthCredentials | null>;
|