aismemory 0.8.2 → 0.8.4
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 +146 -3
- package/dist/__tests__/agent-key-mode.test.js +46 -5
- package/dist/__tests__/agent-key-mode.test.js.map +1 -1
- package/dist/__tests__/ais-http.test.js +49 -1
- package/dist/__tests__/ais-http.test.js.map +1 -1
- package/dist/__tests__/auto-enroll-key.test.js +20 -1
- package/dist/__tests__/auto-enroll-key.test.js.map +1 -1
- package/dist/__tests__/cli-info.test.d.ts +1 -0
- package/dist/__tests__/cli-info.test.js +117 -0
- package/dist/__tests__/cli-info.test.js.map +1 -0
- package/dist/__tests__/client-credential-expiry.test.d.ts +1 -0
- package/dist/__tests__/client-credential-expiry.test.js +319 -0
- package/dist/__tests__/client-credential-expiry.test.js.map +1 -0
- package/dist/__tests__/credential-resolution.test.js +10 -4
- package/dist/__tests__/credential-resolution.test.js.map +1 -1
- package/dist/__tests__/declared-agent.test.d.ts +1 -0
- package/dist/__tests__/declared-agent.test.js +60 -0
- package/dist/__tests__/declared-agent.test.js.map +1 -0
- package/dist/__tests__/doctor.test.js +21 -2
- package/dist/__tests__/doctor.test.js.map +1 -1
- package/dist/__tests__/dream-poll.test.d.ts +1 -0
- package/dist/__tests__/dream-poll.test.js +130 -0
- package/dist/__tests__/dream-poll.test.js.map +1 -0
- package/dist/__tests__/enable-key-auth.test.d.ts +1 -0
- package/dist/__tests__/enable-key-auth.test.js +180 -0
- package/dist/__tests__/enable-key-auth.test.js.map +1 -0
- package/dist/__tests__/existing-hashes.test.js +3 -6
- package/dist/__tests__/existing-hashes.test.js.map +1 -1
- package/dist/__tests__/full-context-view-forwarding.test.js +20 -1
- package/dist/__tests__/full-context-view-forwarding.test.js.map +1 -1
- package/dist/__tests__/hooks.test.d.ts +1 -0
- package/dist/__tests__/hooks.test.js +455 -0
- package/dist/__tests__/hooks.test.js.map +1 -0
- package/dist/__tests__/hydration.test.js +2 -0
- package/dist/__tests__/hydration.test.js.map +1 -1
- package/dist/__tests__/install.test.js +28 -1
- package/dist/__tests__/install.test.js.map +1 -1
- package/dist/__tests__/invite-accept.test.d.ts +1 -0
- package/dist/__tests__/invite-accept.test.js +282 -0
- package/dist/__tests__/invite-accept.test.js.map +1 -0
- package/dist/__tests__/list-all-agents.test.js +17 -15
- package/dist/__tests__/list-all-agents.test.js.map +1 -1
- package/dist/__tests__/mcp-instructions.test.d.ts +1 -0
- package/dist/__tests__/mcp-instructions.test.js +26 -0
- package/dist/__tests__/mcp-instructions.test.js.map +1 -0
- package/dist/__tests__/mcp-tools.test.js +136 -5
- package/dist/__tests__/mcp-tools.test.js.map +1 -1
- package/dist/__tests__/memory-export.test.d.ts +1 -0
- package/dist/__tests__/memory-export.test.js +78 -0
- package/dist/__tests__/memory-export.test.js.map +1 -0
- package/dist/__tests__/missing-credential-help.test.d.ts +1 -0
- package/dist/__tests__/missing-credential-help.test.js +14 -0
- package/dist/__tests__/missing-credential-help.test.js.map +1 -0
- package/dist/__tests__/owner-credentials.test.d.ts +1 -0
- package/dist/__tests__/owner-credentials.test.js +250 -0
- package/dist/__tests__/owner-credentials.test.js.map +1 -0
- package/dist/__tests__/owner-keychain-agent-load.test.d.ts +1 -0
- package/dist/__tests__/owner-keychain-agent-load.test.js +57 -0
- package/dist/__tests__/owner-keychain-agent-load.test.js.map +1 -0
- package/dist/__tests__/recall-order-by.test.d.ts +1 -0
- package/dist/__tests__/recall-order-by.test.js +115 -0
- package/dist/__tests__/recall-order-by.test.js.map +1 -0
- package/dist/__tests__/reconnect-survival-e2e.test.js +3 -2
- package/dist/__tests__/reconnect-survival-e2e.test.js.map +1 -1
- package/dist/__tests__/remember-duplicate-truth.test.js +11 -0
- package/dist/__tests__/remember-duplicate-truth.test.js.map +1 -1
- package/dist/__tests__/request-timeout.test.js +15 -0
- package/dist/__tests__/request-timeout.test.js.map +1 -1
- package/dist/__tests__/resolve-agent-preference.test.js +19 -8
- package/dist/__tests__/resolve-agent-preference.test.js.map +1 -1
- package/dist/__tests__/retry-after.test.js +53 -0
- package/dist/__tests__/retry-after.test.js.map +1 -1
- package/dist/__tests__/run-pass-mode.test.js +34 -1
- package/dist/__tests__/run-pass-mode.test.js.map +1 -1
- package/dist/__tests__/session-identity.test.js +63 -0
- package/dist/__tests__/session-identity.test.js.map +1 -1
- package/dist/__tests__/signin-keychain.test.d.ts +1 -0
- package/dist/__tests__/signin-keychain.test.js +79 -0
- package/dist/__tests__/signin-keychain.test.js.map +1 -0
- package/dist/__tests__/startup-identity.test.d.ts +1 -0
- package/dist/__tests__/startup-identity.test.js +213 -0
- package/dist/__tests__/startup-identity.test.js.map +1 -0
- package/dist/__tests__/sync-auth.test.d.ts +1 -0
- package/dist/__tests__/sync-auth.test.js +69 -0
- package/dist/__tests__/sync-auth.test.js.map +1 -0
- package/dist/__tests__/sync-doc.test.d.ts +1 -0
- package/dist/__tests__/sync-doc.test.js +13 -0
- package/dist/__tests__/sync-doc.test.js.map +1 -0
- package/dist/__tests__/sync-memory-cli.test.js +1 -1
- package/dist/__tests__/sync-memory-cli.test.js.map +1 -1
- package/dist/__tests__/tool-args.test.js +6 -0
- package/dist/__tests__/tool-args.test.js.map +1 -1
- package/dist/__tests__/version-check.test.js +16 -1
- package/dist/__tests__/version-check.test.js.map +1 -1
- package/dist/agent-key-mode.js +24 -24
- package/dist/agent-key-mode.js.map +1 -1
- package/dist/agent-preference.d.ts +4 -0
- package/dist/agent-preference.js +7 -1
- package/dist/agent-preference.js.map +1 -1
- package/dist/ais-http-error.d.ts +5 -0
- package/dist/ais-http-error.js +10 -0
- package/dist/ais-http-error.js.map +1 -1
- package/dist/ais-http.d.ts +2 -0
- package/dist/ais-http.js +41 -6
- package/dist/ais-http.js.map +1 -1
- package/dist/auto-handoff.js +2 -1
- package/dist/auto-handoff.js.map +1 -1
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/doctor.js +19 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/enable-key-auth.js +39 -18
- package/dist/cli/enable-key-auth.js.map +1 -1
- package/dist/cli/export-harness.d.ts +13 -0
- package/dist/cli/export-harness.js +110 -0
- package/dist/cli/export-harness.js.map +1 -0
- package/dist/cli/hooks.d.ts +62 -0
- package/dist/cli/hooks.js +634 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/install.d.ts +4 -0
- package/dist/cli/install.js +44 -5
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/invite-accept.d.ts +67 -0
- package/dist/cli/invite-accept.js +295 -0
- package/dist/cli/invite-accept.js.map +1 -0
- package/dist/cli/owner-credentials.d.ts +52 -0
- package/dist/cli/owner-credentials.js +387 -0
- package/dist/cli/owner-credentials.js.map +1 -0
- package/dist/cli/sync-memory.js +7 -9
- package/dist/cli/sync-memory.js.map +1 -1
- package/dist/cli-info.d.ts +18 -0
- package/dist/cli-info.js +77 -0
- package/dist/cli-info.js.map +1 -0
- package/dist/credential-expiry.d.ts +10 -0
- package/dist/credential-expiry.js +41 -0
- package/dist/credential-expiry.js.map +1 -0
- package/dist/credential-whoami.js +1 -1
- package/dist/credential-whoami.js.map +1 -1
- package/dist/declared-agent.d.ts +20 -0
- package/dist/declared-agent.js +40 -0
- package/dist/declared-agent.js.map +1 -0
- package/dist/device-poll.d.ts +1 -0
- package/dist/device-poll.js.map +1 -1
- package/dist/dream-poll.d.ts +19 -0
- package/dist/dream-poll.js +93 -0
- package/dist/dream-poll.js.map +1 -0
- package/dist/env-agent.d.ts +6 -1
- package/dist/env-agent.js +18 -5
- package/dist/env-agent.js.map +1 -1
- package/dist/hydration.js +2 -1
- package/dist/hydration.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +145 -18
- package/dist/index.js.map +1 -1
- package/dist/key-auth.d.ts +13 -3
- package/dist/key-auth.js +27 -5
- package/dist/key-auth.js.map +1 -1
- package/dist/mcp/tools.js +55 -25
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp-instructions.d.ts +6 -0
- package/dist/mcp-instructions.js +7 -0
- package/dist/mcp-instructions.js.map +1 -0
- package/dist/memory-export.d.ts +30 -0
- package/dist/memory-export.js +116 -0
- package/dist/memory-export.js.map +1 -0
- package/dist/pipeline/bulk-store.d.ts +2 -5
- package/dist/pipeline/bulk-store.js +2 -4
- package/dist/pipeline/bulk-store.js.map +1 -1
- package/dist/pipeline/existing-hashes.d.ts +2 -5
- package/dist/pipeline/existing-hashes.js +1 -2
- package/dist/pipeline/existing-hashes.js.map +1 -1
- package/dist/pipeline/sync-auth.d.ts +12 -0
- package/dist/pipeline/sync-auth.js +64 -0
- package/dist/pipeline/sync-auth.js.map +1 -0
- package/dist/refresh.js +2 -1
- package/dist/refresh.js.map +1 -1
- package/dist/request-timeout.d.ts +4 -4
- package/dist/request-timeout.js +15 -6
- package/dist/request-timeout.js.map +1 -1
- package/dist/run-pass-mode.js +48 -15
- package/dist/run-pass-mode.js.map +1 -1
- package/dist/session-identity.js +14 -12
- package/dist/session-identity.js.map +1 -1
- package/dist/signin-keychain.d.ts +54 -0
- package/dist/signin-keychain.js +200 -0
- package/dist/signin-keychain.js.map +1 -0
- package/dist/startup-identity.d.ts +71 -0
- package/dist/startup-identity.js +213 -0
- package/dist/startup-identity.js.map +1 -0
- package/dist/tool-args.d.ts +10 -0
- package/dist/tool-args.js +39 -0
- package/dist/tool-args.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/version-check.d.ts +8 -0
- package/dist/version-check.js +21 -1
- package/dist/version-check.js.map +1 -1
- package/dist/workspace-key-mode.js +54 -33
- package/dist/workspace-key-mode.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aismemory rotate-token` and `aismemory api-keys list|create|revoke`
|
|
3
|
+
* (CORBOT-C206B318) — owner-side credential management for one agent — and
|
|
4
|
+
* `aismemory agents create` (CORBOT-F8BA698D) — new agents for the owner.
|
|
5
|
+
*
|
|
6
|
+
* aismemory agents create <name...> [--description <text>]
|
|
7
|
+
* aismemory rotate-token [--agent <id>]
|
|
8
|
+
* aismemory api-keys list [--agent <id>]
|
|
9
|
+
* aismemory api-keys create [--agent <id>] [--name <label>] [--expires-in-days <n>] [--read-only]
|
|
10
|
+
* aismemory api-keys revoke <key id> [--agent <id>]
|
|
11
|
+
*
|
|
12
|
+
* AIS routes (packages/agent-identity-service):
|
|
13
|
+
* POST /v1/agents/:id/rotate-token -> { data: { bearerToken, expiresAt } }
|
|
14
|
+
* GET /v1/agents/:id/api-keys -> { data: AgentApiKeyMetadata[] }
|
|
15
|
+
* POST /v1/agents/:id/api-keys -> { data: { id, key, keyPrefix, ... } } (201)
|
|
16
|
+
* DELETE /v1/agents/:id/api-keys/:keyId -> { data: { revoked: true } }
|
|
17
|
+
* POST /v1/agents -> { data: { id, name, claimUrl, ... } } (201)
|
|
18
|
+
*
|
|
19
|
+
* Creating an agent mints no bond (CORBOT-0D97FEEF): each new agent comes
|
|
20
|
+
* back with its own claim link, and the owner bonds each by opening it. One
|
|
21
|
+
* approval for a whole batch would change that ceremony (CORBOT-4F41A5B7).
|
|
22
|
+
*
|
|
23
|
+
* All four need the OWNER session: the service refuses an agent credential
|
|
24
|
+
* (bonded pass, agent token, agent API key, workspace key). The owner session
|
|
25
|
+
* here is the one `aismemory enable-key-auth` enrolled on this device; the
|
|
26
|
+
* short-lived owner token is fetched per run and held in memory only.
|
|
27
|
+
*
|
|
28
|
+
* Secret handling: the only secrets that are ever printed are the newly
|
|
29
|
+
* created key and the rotated token, once, on stdout, with a store-it-now note
|
|
30
|
+
* on stderr. Nothing is written to disk (the CLI authenticates with the
|
|
31
|
+
* device key, not with the token that rotate-token returns, so there is no
|
|
32
|
+
* stored credential to update). List output carries non-secret fields only.
|
|
33
|
+
* Error messages never include request bodies, headers, or the owner token.
|
|
34
|
+
*/
|
|
35
|
+
import { DEFAULT_AIS_URL } from '../ais-http.js';
|
|
36
|
+
import { extractServerMessage } from '../ais-http-error.js';
|
|
37
|
+
import { decodeEnrollmentClaims, tryKeyAuth } from '../key-auth.js';
|
|
38
|
+
export class OwnerCredentialsError extends Error {
|
|
39
|
+
constructor(message) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.name = 'OwnerCredentialsError';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const MAX_KEY_DAYS = 90;
|
|
45
|
+
const MAX_AGENTS_PER_RUN = 20;
|
|
46
|
+
const ID_PATTERN = /^[A-Za-z0-9_-]{1,128}$/;
|
|
47
|
+
const USAGE = `aismemory agents / rotate-token / api-keys — create agents and manage their credentials (owner only)
|
|
48
|
+
|
|
49
|
+
Usage:
|
|
50
|
+
aismemory agents create <name...> [--description <text>]
|
|
51
|
+
aismemory rotate-token [--agent <id>]
|
|
52
|
+
aismemory api-keys list [--agent <id>]
|
|
53
|
+
aismemory api-keys create [--agent <id>] [--name <label>] [--expires-in-days <n>] [--read-only]
|
|
54
|
+
aismemory api-keys revoke <key id> [--agent <id>]
|
|
55
|
+
|
|
56
|
+
Options:
|
|
57
|
+
--description <text> Description for every agent created in this run.
|
|
58
|
+
--agent <id> The agent (default: AIS_AGENT_ID).
|
|
59
|
+
--name <label> Label for the new key (at most 64 characters, no URLs).
|
|
60
|
+
--expires-in-days <n> Key lifetime in days, 1-${MAX_KEY_DAYS} (default ${MAX_KEY_DAYS}).
|
|
61
|
+
--read-only The new key may only read.
|
|
62
|
+
--help, -h Show this message.
|
|
63
|
+
|
|
64
|
+
These commands need the owner sign-in of the agent's owner: run
|
|
65
|
+
\`aismemory enable-key-auth\` once on this machine. An agent credential
|
|
66
|
+
(AIS_API_KEY, AIS_WORKSPACE_KEY, a run pass or an agent token) is refused by
|
|
67
|
+
the service. A new key or rotated token is printed once and never again.
|
|
68
|
+
agents create makes up to ${MAX_AGENTS_PER_RUN} agents owned by you and prints a claim
|
|
69
|
+
link for each: open each link to bond that agent to you.
|
|
70
|
+
`;
|
|
71
|
+
function takeValue(rest, i, flag) {
|
|
72
|
+
const value = rest[i + 1];
|
|
73
|
+
if (value === undefined || value.startsWith('--')) {
|
|
74
|
+
throw new OwnerCredentialsError(`${flag} needs a value. Run aismemory ${flag === '--agent' ? 'rotate-token' : flag === '--description' ? 'agents' : 'api-keys'} --help.`);
|
|
75
|
+
}
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
function validId(value, what) {
|
|
79
|
+
if (!ID_PATTERN.test(value)) {
|
|
80
|
+
throw new OwnerCredentialsError(`${what} must contain only letters, digits, underscores or hyphens.`);
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
function parseAgentsArgs(argv) {
|
|
85
|
+
if (argv[0] !== 'create') {
|
|
86
|
+
throw new OwnerCredentialsError('Unknown agents command. Use: aismemory agents create <name...>.');
|
|
87
|
+
}
|
|
88
|
+
const names = [];
|
|
89
|
+
let description;
|
|
90
|
+
const rest = argv.slice(1);
|
|
91
|
+
for (let i = 0; i < rest.length; i++) {
|
|
92
|
+
const arg = rest[i];
|
|
93
|
+
if (arg === '--help' || arg === '-h')
|
|
94
|
+
return { kind: 'help' };
|
|
95
|
+
if (arg === '--description') {
|
|
96
|
+
description = takeValue(rest, i, arg);
|
|
97
|
+
i++;
|
|
98
|
+
}
|
|
99
|
+
else if (arg.startsWith('-')) {
|
|
100
|
+
throw new OwnerCredentialsError(`Unknown option: ${arg}. Run aismemory agents --help.`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
names.push(arg.trim());
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (names.length === 0)
|
|
107
|
+
throw new OwnerCredentialsError('Name at least one agent: aismemory agents create <name...>.');
|
|
108
|
+
if (names.length > MAX_AGENTS_PER_RUN)
|
|
109
|
+
throw new OwnerCredentialsError(`At most ${MAX_AGENTS_PER_RUN} agents per run.`);
|
|
110
|
+
const seen = new Set();
|
|
111
|
+
for (const name of names) {
|
|
112
|
+
if (name === '')
|
|
113
|
+
throw new OwnerCredentialsError('Agent names cannot be empty.');
|
|
114
|
+
const key = name.toLowerCase();
|
|
115
|
+
if (seen.has(key))
|
|
116
|
+
throw new OwnerCredentialsError(`The name ${safeText(name)} is given twice.`);
|
|
117
|
+
seen.add(key);
|
|
118
|
+
}
|
|
119
|
+
return { kind: 'agents-create', names, ...(description === undefined ? {} : { description }) };
|
|
120
|
+
}
|
|
121
|
+
export function parseOwnerArgs(command, argv, env) {
|
|
122
|
+
const first = argv[0];
|
|
123
|
+
if (first === '--help' || first === '-h' || ((command === 'api-keys' || command === 'agents') && first === undefined)) {
|
|
124
|
+
return { kind: 'help' };
|
|
125
|
+
}
|
|
126
|
+
if (command === 'agents')
|
|
127
|
+
return parseAgentsArgs(argv);
|
|
128
|
+
let sub;
|
|
129
|
+
let rest;
|
|
130
|
+
if (command === 'rotate-token') {
|
|
131
|
+
sub = 'rotate';
|
|
132
|
+
rest = argv;
|
|
133
|
+
}
|
|
134
|
+
else if (first === 'list' || first === 'create' || first === 'revoke') {
|
|
135
|
+
sub = first;
|
|
136
|
+
rest = argv.slice(1);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
throw new OwnerCredentialsError(`Unknown api-keys command: ${String(first).startsWith('-') ? first : '(unrecognised)'}. Use list, create or revoke.`);
|
|
140
|
+
}
|
|
141
|
+
let agent;
|
|
142
|
+
let name;
|
|
143
|
+
let days;
|
|
144
|
+
let readOnly = false;
|
|
145
|
+
let keyId;
|
|
146
|
+
for (let i = 0; i < rest.length; i++) {
|
|
147
|
+
const arg = rest[i];
|
|
148
|
+
if (arg === '--help' || arg === '-h')
|
|
149
|
+
return { kind: 'help' };
|
|
150
|
+
if (arg === '--agent') {
|
|
151
|
+
agent = takeValue(rest, i, arg);
|
|
152
|
+
i++;
|
|
153
|
+
}
|
|
154
|
+
else if (sub === 'create' && arg === '--name') {
|
|
155
|
+
name = takeValue(rest, i, arg);
|
|
156
|
+
i++;
|
|
157
|
+
}
|
|
158
|
+
else if (sub === 'create' && arg === '--expires-in-days') {
|
|
159
|
+
const raw = takeValue(rest, i, arg);
|
|
160
|
+
i++;
|
|
161
|
+
days = Number(raw);
|
|
162
|
+
if (!Number.isInteger(days) || days < 1 || days > MAX_KEY_DAYS) {
|
|
163
|
+
throw new OwnerCredentialsError(`--expires-in-days must be a whole number from 1 to ${MAX_KEY_DAYS}.`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else if (sub === 'create' && arg === '--read-only') {
|
|
167
|
+
readOnly = true;
|
|
168
|
+
}
|
|
169
|
+
else if (sub === 'revoke' && keyId === undefined && !arg.startsWith('-')) {
|
|
170
|
+
keyId = arg;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
throw new OwnerCredentialsError(`Unknown option: ${arg.startsWith('-') ? arg : '(positional argument)'}. Run aismemory ${command} --help.`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const agentRaw = (agent ?? env['AIS_AGENT_ID'] ?? '').trim();
|
|
177
|
+
if (agentRaw === '')
|
|
178
|
+
throw new OwnerCredentialsError('Name the agent: pass --agent <id> or set AIS_AGENT_ID.');
|
|
179
|
+
const agentId = validId(agentRaw, 'The agent id');
|
|
180
|
+
switch (sub) {
|
|
181
|
+
case 'rotate':
|
|
182
|
+
return { kind: 'rotate', agentId };
|
|
183
|
+
case 'list':
|
|
184
|
+
return { kind: 'list', agentId };
|
|
185
|
+
case 'create':
|
|
186
|
+
return { kind: 'create', agentId, ...(name === undefined ? {} : { name }), ...(days === undefined ? {} : { expiresInDays: days }), readOnly };
|
|
187
|
+
case 'revoke':
|
|
188
|
+
if (keyId === undefined)
|
|
189
|
+
throw new OwnerCredentialsError('revoke needs the key id: aismemory api-keys revoke <key id>.');
|
|
190
|
+
return { kind: 'revoke', agentId, keyId: validId(keyId, 'The key id') };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function asRecord(value) {
|
|
194
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : {};
|
|
195
|
+
}
|
|
196
|
+
function str(source, key) {
|
|
197
|
+
const v = source[key];
|
|
198
|
+
return typeof v === 'string' ? v : undefined;
|
|
199
|
+
}
|
|
200
|
+
/** One request with the owner token. Failures name the status and the server's own message only. */
|
|
201
|
+
async function ownerRequest(deps, aisUrl, token, method, path, body) {
|
|
202
|
+
const headers = { Authorization: `Bearer ${token}` };
|
|
203
|
+
if (body !== undefined)
|
|
204
|
+
headers['Content-Type'] = 'application/json';
|
|
205
|
+
let res;
|
|
206
|
+
try {
|
|
207
|
+
res = await deps.fetchImpl(`${aisUrl}${path}`, {
|
|
208
|
+
method,
|
|
209
|
+
headers,
|
|
210
|
+
...(body === undefined ? {} : { body: JSON.stringify(body) }),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
throw new OwnerCredentialsError(`Could not reach the service at ${aisUrl}. Check AIS_URL and your network.`);
|
|
215
|
+
}
|
|
216
|
+
const parsed = await res.json().catch(() => null);
|
|
217
|
+
if (!res.ok) {
|
|
218
|
+
const code = str(asRecord(asRecord(parsed)['error']), 'code');
|
|
219
|
+
if (res.status === 401) {
|
|
220
|
+
throw new OwnerCredentialsError('The service did not accept the owner sign-in (HTTP 401). Run aismemory enable-key-auth again.');
|
|
221
|
+
}
|
|
222
|
+
if (code === 'INTERACTIVE_OWNER_REQUIRED' || code === 'OWNER_SESSION_REQUIRED') {
|
|
223
|
+
throw new OwnerCredentialsError('This needs the interactive owner sign-in, not an agent or service credential (HTTP 403). Run aismemory enable-key-auth.');
|
|
224
|
+
}
|
|
225
|
+
if (code === 'OWNER_ID_MISMATCH') {
|
|
226
|
+
throw new OwnerCredentialsError('In a workspace with more than one person, an agent you create must be owned by you (HTTP 403 OWNER_ID_MISMATCH).');
|
|
227
|
+
}
|
|
228
|
+
if (code === 'OWNER_CHECK_UNAVAILABLE') {
|
|
229
|
+
throw new OwnerCredentialsError('The service could not check who may own the agent (HTTP 403 OWNER_CHECK_UNAVAILABLE). Try again later.');
|
|
230
|
+
}
|
|
231
|
+
if (res.status === 403) {
|
|
232
|
+
throw new OwnerCredentialsError('You do not own this agent (HTTP 403).');
|
|
233
|
+
}
|
|
234
|
+
const raw = extractServerMessage(parsed);
|
|
235
|
+
const detail = raw === null ? null : safeText(raw);
|
|
236
|
+
throw new OwnerCredentialsError(`The service refused the request (HTTP ${res.status})${detail === null ? '' : `: ${detail}`}.`);
|
|
237
|
+
}
|
|
238
|
+
return asRecord(parsed);
|
|
239
|
+
}
|
|
240
|
+
// Server text reaches the terminal: drop control characters (escape sequences) and cap the length.
|
|
241
|
+
function safeText(value) {
|
|
242
|
+
const clean = value.replace(/[\u0000-\u001f\u007f-\u009f\u200b-\u200f\u202a-\u202e\u2066-\u2069\ufeff]/g, '');
|
|
243
|
+
return clean.length > 200 ? `${clean.slice(0, 200)}…` : clean;
|
|
244
|
+
}
|
|
245
|
+
function field(value) {
|
|
246
|
+
if (value === null || value === undefined)
|
|
247
|
+
return '-';
|
|
248
|
+
return typeof value === 'boolean' ? (value ? 'yes' : 'no') : safeText(value);
|
|
249
|
+
}
|
|
250
|
+
const NEVER_AGAIN = 'Store it now: it will not be shown again.';
|
|
251
|
+
export async function runOwnerCommand(command, argv, deps) {
|
|
252
|
+
const action = parseOwnerArgs(command, argv, deps.env);
|
|
253
|
+
if (action.kind === 'help') {
|
|
254
|
+
deps.stdout(USAGE);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const aisUrl = (deps.env['AIS_URL']?.trim() || DEFAULT_AIS_URL).replace(/\/+$/, '');
|
|
258
|
+
const session = await deps.getOwnerSession(aisUrl);
|
|
259
|
+
if (session === null) {
|
|
260
|
+
const hasAgentCredential = ['AIS_API_KEY', 'AIS_AGENT_API_KEY', 'AIS_WORKSPACE_KEY', 'AIS_RUN_PASS_FILE'].some((name) => (deps.env[name] ?? '').trim() !== '');
|
|
261
|
+
throw new OwnerCredentialsError('No owner sign-in on this machine. ' +
|
|
262
|
+
(hasAgentCredential ? 'The agent credential in your environment cannot do this. ' : '') +
|
|
263
|
+
'Run aismemory enable-key-auth once as the agent\'s owner, then try again.');
|
|
264
|
+
}
|
|
265
|
+
const token = session.token;
|
|
266
|
+
if (action.kind === 'agents-create') {
|
|
267
|
+
await createAgents(deps, aisUrl, session, action.names, action.description);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const base = `/v1/agents/${encodeURIComponent(action.agentId)}`;
|
|
271
|
+
switch (action.kind) {
|
|
272
|
+
case 'rotate': {
|
|
273
|
+
const data = asRecord((await ownerRequest(deps, aisUrl, token, 'POST', `${base}/rotate-token`))['data']);
|
|
274
|
+
const bearerToken = str(data, 'bearerToken');
|
|
275
|
+
if (bearerToken === undefined)
|
|
276
|
+
throw new OwnerCredentialsError('The service reply had no token.');
|
|
277
|
+
deps.stderr(`New bearer token for agent ${action.agentId} (expires ${field(str(data, 'expiresAt'))}). ${NEVER_AGAIN} Tokens issued earlier stay valid until they expire.\n`);
|
|
278
|
+
deps.stdout(`${bearerToken}\n`);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
case 'list': {
|
|
282
|
+
const raw = (await ownerRequest(deps, aisUrl, token, 'GET', `${base}/api-keys`))['data'];
|
|
283
|
+
const keys = Array.isArray(raw) ? raw.map(asRecord) : [];
|
|
284
|
+
if (keys.length === 0) {
|
|
285
|
+
deps.stdout('No API keys for this agent.\n');
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
const lines = keys.map((k) => {
|
|
289
|
+
const flags = k['readOnly'] === true ? ' read-only' : '';
|
|
290
|
+
const revoked = str(k, 'revokedAt');
|
|
291
|
+
return [
|
|
292
|
+
field(str(k, 'id')),
|
|
293
|
+
field(str(k, 'keyPrefix')),
|
|
294
|
+
`name=${field(str(k, 'name'))}`,
|
|
295
|
+
`created=${field(str(k, 'createdAt'))}`,
|
|
296
|
+
`expires=${field(str(k, 'expiresAt'))}`,
|
|
297
|
+
`lastUsed=${field(str(k, 'lastUsedAt'))}`,
|
|
298
|
+
revoked === undefined ? 'active' : `revoked=${revoked}`,
|
|
299
|
+
].join(' ') + flags;
|
|
300
|
+
});
|
|
301
|
+
deps.stdout(`${lines.join('\n')}\n`);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
case 'create': {
|
|
305
|
+
const body = {};
|
|
306
|
+
if (action.name !== undefined)
|
|
307
|
+
body['name'] = action.name;
|
|
308
|
+
if (action.expiresInDays !== undefined)
|
|
309
|
+
body['expiresIn'] = Math.round(action.expiresInDays * 86400);
|
|
310
|
+
if (action.readOnly)
|
|
311
|
+
body['readOnly'] = true;
|
|
312
|
+
const data = asRecord((await ownerRequest(deps, aisUrl, token, 'POST', `${base}/api-keys`, body))['data']);
|
|
313
|
+
const key = str(data, 'key');
|
|
314
|
+
if (key === undefined)
|
|
315
|
+
throw new OwnerCredentialsError('The service reply had no key. Run aismemory api-keys list and revoke any key you do not recognise.');
|
|
316
|
+
deps.stderr(`Created API key ${field(str(data, 'id'))} (expires ${field(str(data, 'expiresAt'))}). ${NEVER_AGAIN}\n`);
|
|
317
|
+
deps.stdout(`${key}\n`);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
case 'revoke': {
|
|
321
|
+
await ownerRequest(deps, aisUrl, token, 'DELETE', `${base}/api-keys/${encodeURIComponent(action.keyId)}`);
|
|
322
|
+
deps.stdout(`Revoked API key ${action.keyId}.\n`);
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* One POST per name, in order, owned by the signed-in human. Stops at the
|
|
329
|
+
* first refusal so a quota or owner error is not repeated N times; agents
|
|
330
|
+
* already created are listed first so their claim links are not lost.
|
|
331
|
+
*/
|
|
332
|
+
async function createAgents(deps, aisUrl, session, names, description) {
|
|
333
|
+
let created = 0;
|
|
334
|
+
for (const name of names) {
|
|
335
|
+
const body = { name, ownerId: session.userId };
|
|
336
|
+
if (description !== undefined)
|
|
337
|
+
body['description'] = description;
|
|
338
|
+
let data;
|
|
339
|
+
try {
|
|
340
|
+
data = asRecord((await ownerRequest(deps, aisUrl, session.token, 'POST', '/v1/agents', body))['data']);
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
if (created > 0)
|
|
344
|
+
deps.stderr(`Created ${created} of ${names.length} agents before this failure; open the claim links above to bond them.\n`);
|
|
345
|
+
throw new OwnerCredentialsError(`Creating ${safeText(name)}: ${err instanceof Error ? err.message : 'unknown error'}`);
|
|
346
|
+
}
|
|
347
|
+
created++;
|
|
348
|
+
if (str(data, 'claimUrl') === undefined) {
|
|
349
|
+
deps.stderr(`The service returned no claim link for ${safeText(name)}; bond it from the console.\n`);
|
|
350
|
+
}
|
|
351
|
+
deps.stdout(`${field(str(data, 'name') ?? name)} ${field(str(data, 'id'))} ${field(str(data, 'claimUrl'))}\n`);
|
|
352
|
+
}
|
|
353
|
+
deps.stderr(`Created ${created} agent${created === 1 ? '' : 's'}. Open each claim link to bond that agent to you; until then it cannot keep memories.\n`);
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* The user id comes from the token the service signed, not from the local key
|
|
357
|
+
* file: a copied or edited key file must not set another person as owner.
|
|
358
|
+
*/
|
|
359
|
+
export function ownerSessionFromCreds(creds) {
|
|
360
|
+
const signedUserId = decodeEnrollmentClaims(creds.token)?.userId;
|
|
361
|
+
if (signedUserId === undefined || signedUserId !== creds.userId) {
|
|
362
|
+
throw new OwnerCredentialsError('This device\'s key file and the owner sign-in name different users. Run aismemory enable-key-auth again.');
|
|
363
|
+
}
|
|
364
|
+
return { token: creds.token, userId: signedUserId };
|
|
365
|
+
}
|
|
366
|
+
async function ownerSessionFromDeviceKey(aisUrl) {
|
|
367
|
+
const creds = await tryKeyAuth({ aisUrl });
|
|
368
|
+
return creds === null ? null : ownerSessionFromCreds(creds);
|
|
369
|
+
}
|
|
370
|
+
/** Entry from `aismemory rotate-token|api-keys|agents ...`: one failure line, exit 1. */
|
|
371
|
+
export async function runFromCli(command, argv) {
|
|
372
|
+
try {
|
|
373
|
+
await runOwnerCommand(command, argv, {
|
|
374
|
+
env: process.env,
|
|
375
|
+
fetchImpl: fetch,
|
|
376
|
+
getOwnerSession: ownerSessionFromDeviceKey,
|
|
377
|
+
stdout: (text) => { process.stdout.write(text); },
|
|
378
|
+
stderr: (text) => { process.stderr.write(text); },
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
catch (err) {
|
|
382
|
+
const message = err instanceof Error ? err.message : 'unknown error';
|
|
383
|
+
process.stderr.write(`[aismemory ${command}] Failed: ${message}\n`);
|
|
384
|
+
process.exit(1);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=owner-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-credentials.js","sourceRoot":"","sources":["../../src/cli/owner-credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/sync-memory.js
CHANGED
|
@@ -5,6 +5,7 @@ import { createInterface } from 'node:readline/promises';
|
|
|
5
5
|
import { runIngestion } from '../pipeline/ingestion.js';
|
|
6
6
|
import { loadExistingHashes } from '../pipeline/existing-hashes.js';
|
|
7
7
|
import { bulkStoreViaAis, singleWriteAllViaAis } from '../pipeline/bulk-store.js';
|
|
8
|
+
import { resolveSyncCreds } from '../pipeline/sync-auth.js';
|
|
8
9
|
import { LocalClaudeSource } from '../sources/local-claude.js';
|
|
9
10
|
import { SyncConfig } from '../config.js';
|
|
10
11
|
import { TrustLedger } from '../trust-ledger.js';
|
|
@@ -101,25 +102,22 @@ async function main() {
|
|
|
101
102
|
scopeLabel: scope.label,
|
|
102
103
|
firstSyncForScope,
|
|
103
104
|
});
|
|
104
|
-
const
|
|
105
|
-
const tenantId = process.env['AIS_TENANT_ID'];
|
|
106
|
-
const apiBase = process.env['AIS_DOMAIN']
|
|
107
|
-
? `https://${process.env['AIS_DOMAIN']}`
|
|
108
|
-
: 'https://ais.agentsandswarms.ai';
|
|
105
|
+
const creds = await resolveSyncCreds(process.env);
|
|
109
106
|
const bulkStore = args.dryRun
|
|
110
107
|
? async (drafts) => ({
|
|
111
108
|
created: drafts.map((_, i) => ({ index: i, id: `dry-run-${i}` })),
|
|
112
109
|
failed: [],
|
|
113
110
|
})
|
|
114
111
|
: (() => {
|
|
115
|
-
if (!
|
|
116
|
-
throw new Error('
|
|
117
|
-
|
|
112
|
+
if (!creds) {
|
|
113
|
+
throw new Error('no AIS credential: set AIS_WORKSPACE_KEY, AIS_AGENT_API_KEY or AIS_RUN_PASS_FILE (as for the MCP server), ' +
|
|
114
|
+
'or AIS_API_KEY and AIS_TENANT_ID');
|
|
115
|
+
}
|
|
118
116
|
return args.singleWrite
|
|
119
117
|
? (drafts) => singleWriteAllViaAis(agentId, drafts, creds)
|
|
120
118
|
: (drafts) => bulkStoreViaAis(agentId, drafts, creds);
|
|
121
119
|
})();
|
|
122
|
-
const existingHashes = await loadExistingHashes(agentId, mirror,
|
|
120
|
+
const existingHashes = await loadExistingHashes(agentId, mirror, creds ?? undefined);
|
|
123
121
|
const result = await runIngestion({
|
|
124
122
|
adapter,
|
|
125
123
|
rawSourceData,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-memory.js","sourceRoot":"","sources":["../../src/cli/sync-memory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sync-memory.js","sourceRoot":"","sources":["../../src/cli/sync-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORBOT-AF282BD7: `--help` / `--version` must print and exit before any
|
|
3
|
+
* credential or server code runs. Pure helpers so they are testable without
|
|
4
|
+
* starting the MCP server.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* CORBOT-73753A98: shown to a person who runs `npx aismemory` in a terminal
|
|
8
|
+
* (stdin is a TTY). MCP clients launch the server with piped stdin, so they
|
|
9
|
+
* never see this.
|
|
10
|
+
*/
|
|
11
|
+
export declare const HUMAN_HOWTO_TEXT: string;
|
|
12
|
+
export declare const USAGE_TEXT: string;
|
|
13
|
+
/**
|
|
14
|
+
* Returns the text to print for a help or version request, or null when the
|
|
15
|
+
* arguments are not one. Only the first argument counts, so subcommand flags
|
|
16
|
+
* (e.g. `aismemory sync --help`) still reach their own handlers.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveInfoRequest(args: readonly string[], version: string): string | null;
|
package/dist/cli-info.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORBOT-AF282BD7: `--help` / `--version` must print and exit before any
|
|
3
|
+
* credential or server code runs. Pure helpers so they are testable without
|
|
4
|
+
* starting the MCP server.
|
|
5
|
+
*/
|
|
6
|
+
const HUMAN_MCP_CONFIG = [
|
|
7
|
+
' {',
|
|
8
|
+
' "mcpServers": {',
|
|
9
|
+
' "aismemory": {',
|
|
10
|
+
' "command": "npx",',
|
|
11
|
+
' "args": ["aismemory"]',
|
|
12
|
+
' }',
|
|
13
|
+
' }',
|
|
14
|
+
' }',
|
|
15
|
+
].join('\n');
|
|
16
|
+
/**
|
|
17
|
+
* CORBOT-73753A98: shown to a person who runs `npx aismemory` in a terminal
|
|
18
|
+
* (stdin is a TTY). MCP clients launch the server with piped stdin, so they
|
|
19
|
+
* never see this.
|
|
20
|
+
*/
|
|
21
|
+
export const HUMAN_HOWTO_TEXT = [
|
|
22
|
+
'aismemory - persistent memory for your AI agents.',
|
|
23
|
+
'',
|
|
24
|
+
'This is an MCP server: your AI client starts it, you do not run it by hand.',
|
|
25
|
+
'Add this to your client\'s MCP server config:',
|
|
26
|
+
'',
|
|
27
|
+
HUMAN_MCP_CONFIG,
|
|
28
|
+
'',
|
|
29
|
+
'The first time your agent uses memory it will show you a bond link.',
|
|
30
|
+
'Open it and press Bond.',
|
|
31
|
+
'',
|
|
32
|
+
'Run `aismemory --help` for all commands.',
|
|
33
|
+
'',
|
|
34
|
+
].join('\n');
|
|
35
|
+
export const USAGE_TEXT = [
|
|
36
|
+
'aismemory - persistent memory for AI agents (MCP server)',
|
|
37
|
+
'',
|
|
38
|
+
'Usage:',
|
|
39
|
+
' aismemory Start the MCP server on stdio',
|
|
40
|
+
' aismemory install --identity <agent-id> Write a pinned MCP config for one agent\'s session',
|
|
41
|
+
' aismemory hooks install Add the session-start and pre-compact hook to Claude Code',
|
|
42
|
+
' aismemory enable-key-auth Enroll a device key for silent sign-in',
|
|
43
|
+
' aismemory sync Sync memories into AIS',
|
|
44
|
+
' aismemory pull Pull memories from AIS to local files',
|
|
45
|
+
' aismemory export-harness Export lessons, rules and skills as Markdown',
|
|
46
|
+
' aismemory doctor Diagnose configuration and credentials',
|
|
47
|
+
' aismemory agents create <name...> Create agents you own; prints a claim link for each',
|
|
48
|
+
' aismemory rotate-token Re-issue an agent bearer token (owner)',
|
|
49
|
+
' aismemory api-keys List, create or revoke an agent API key (owner)',
|
|
50
|
+
'',
|
|
51
|
+
'Options:',
|
|
52
|
+
' -h, --help Show this help and exit',
|
|
53
|
+
' -v, --version Print the version and exit',
|
|
54
|
+
'',
|
|
55
|
+
'Setup:',
|
|
56
|
+
' Add this to your AI client\'s MCP server config:',
|
|
57
|
+
'',
|
|
58
|
+
HUMAN_MCP_CONFIG,
|
|
59
|
+
'',
|
|
60
|
+
' The first time your agent uses memory it will show you a bond link.',
|
|
61
|
+
' Open it and press Bond.',
|
|
62
|
+
'',
|
|
63
|
+
].join('\n');
|
|
64
|
+
/**
|
|
65
|
+
* Returns the text to print for a help or version request, or null when the
|
|
66
|
+
* arguments are not one. Only the first argument counts, so subcommand flags
|
|
67
|
+
* (e.g. `aismemory sync --help`) still reach their own handlers.
|
|
68
|
+
*/
|
|
69
|
+
export function resolveInfoRequest(args, version) {
|
|
70
|
+
const first = args[0];
|
|
71
|
+
if (first === '--help' || first === '-h')
|
|
72
|
+
return USAGE_TEXT;
|
|
73
|
+
if (first === '--version' || first === '-v')
|
|
74
|
+
return `${version}\n`;
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=cli-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-info.js","sourceRoot":"","sources":["../src/cli-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,gBAAgB,GAAG;IACvB,KAAK;IACL,qBAAqB;IACrB,sBAAsB;IACtB,2BAA2B;IAC3B,+BAA+B;IAC/B,SAAS;IACT,OAAO;IACP,KAAK;CACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mDAAmD;IACnD,EAAE;IACF,6EAA6E;IAC7E,+CAA+C;IAC/C,EAAE;IACF,gBAAgB;IAChB,EAAE;IACF,qEAAqE;IACrE,yBAAyB;IACzB,EAAE;IACF,0CAA0C;IAC1C,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,0DAA0D;IAC1D,EAAE;IACF,QAAQ;IACR,8DAA8D;IAC9D,gGAAgG;IAChG,0FAA0F;IAC1F,uEAAuE;IACvE,uDAAuD;IACvD,sEAAsE;IACtE,6EAA6E;IAC7E,uEAAuE;IACvE,2FAA2F;IAC3F,uEAAuE;IACvE,gFAAgF;IAChF,EAAE;IACF,UAAU;IACV,wDAAwD;IACxD,2DAA2D;IAC3D,EAAE;IACF,QAAQ;IACR,oDAAoD;IACpD,EAAE;IACF,gBAAgB;IAChB,EAAE;IACF,uEAAuE;IACvE,2BAA2B;IAC3B,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAuB,EAAE,OAAe;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAC5D,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,GAAG,OAAO,IAAI,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface CredentialExpiryWarning {
|
|
2
|
+
expiresAt: string;
|
|
3
|
+
severity: 'warning' | 'urgent';
|
|
4
|
+
}
|
|
5
|
+
/** Latest captured expiry metadata, also available when a tool rebuilds its result. */
|
|
6
|
+
export declare function getCredentialExpiryWarning(): CredentialExpiryWarning | undefined;
|
|
7
|
+
/** Shared across auth modes: one warning, then one urgent escalation per expiry per process. */
|
|
8
|
+
export declare function captureCredentialExpiry(res: Response): CredentialExpiryWarning | undefined;
|
|
9
|
+
/** Preserve response bodies; add metadata only to object results near expiry. */
|
|
10
|
+
export declare function withCredentialExpiry(data: unknown, warning: CredentialExpiryWarning | undefined): unknown;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const credentialExpiryTimestamp = z.iso.datetime({ offset: true });
|
|
3
|
+
const warnedExpiryLevels = new Map();
|
|
4
|
+
let latestWarning;
|
|
5
|
+
/** Latest captured expiry metadata, also available when a tool rebuilds its result. */
|
|
6
|
+
export function getCredentialExpiryWarning() {
|
|
7
|
+
return latestWarning === undefined ? undefined : { ...latestWarning };
|
|
8
|
+
}
|
|
9
|
+
/** Shared across auth modes: one warning, then one urgent escalation per expiry per process. */
|
|
10
|
+
export function captureCredentialExpiry(res) {
|
|
11
|
+
latestWarning = undefined;
|
|
12
|
+
const parsed = credentialExpiryTimestamp.safeParse(res.headers.get('AIS-Credential-Expires-At'));
|
|
13
|
+
if (!parsed.success)
|
|
14
|
+
return undefined;
|
|
15
|
+
const expiresAtMs = Date.parse(parsed.data);
|
|
16
|
+
const serverTimeMs = Date.parse(res.headers.get('Date') ?? '');
|
|
17
|
+
const nowMs = Number.isFinite(serverTimeMs) ? serverTimeMs : Date.now();
|
|
18
|
+
const remainingMs = expiresAtMs - nowMs;
|
|
19
|
+
if (remainingMs <= 0 || remainingMs > 24 * 60 * 60 * 1000)
|
|
20
|
+
return undefined;
|
|
21
|
+
const level = remainingMs <= 60 * 60 * 1000 ? 2 : 1;
|
|
22
|
+
const warning = {
|
|
23
|
+
expiresAt: parsed.data,
|
|
24
|
+
severity: level === 2 ? 'urgent' : 'warning',
|
|
25
|
+
};
|
|
26
|
+
latestWarning = { ...warning };
|
|
27
|
+
if (level > (warnedExpiryLevels.get(expiresAtMs) ?? 0)) {
|
|
28
|
+
warnedExpiryLevels.set(expiresAtMs, level);
|
|
29
|
+
process.stderr.write(level === 2
|
|
30
|
+
? '[aismemory] URGENT: AIS credential expires within 1 hour. Renew it now.\n'
|
|
31
|
+
: '[aismemory] WARNING: AIS credential expires within 24 hours. Renew it soon.\n');
|
|
32
|
+
}
|
|
33
|
+
return warning;
|
|
34
|
+
}
|
|
35
|
+
/** Preserve response bodies; add metadata only to object results near expiry. */
|
|
36
|
+
export function withCredentialExpiry(data, warning) {
|
|
37
|
+
return warning && typeof data === 'object' && data !== null && !Array.isArray(data) && !('credentialExpiry' in data)
|
|
38
|
+
? { ...data, credentialExpiry: warning }
|
|
39
|
+
: data;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=credential-expiry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-expiry.js","sourceRoot":"","sources":["../src/credential-expiry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,MAAM,yBAAyB,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;AACrD,IAAI,aAAkD,CAAC;AAEvD,uFAAuF;AACvF,MAAM,UAAU,0BAA0B;IACxC,OAAO,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC;AACxE,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,uBAAuB,CAAC,GAAa;IACnD,aAAa,GAAG,SAAS,CAAC;IAC1B,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACjG,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxE,MAAM,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC;IACxC,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,KAAK,GAAG,WAAW,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAA4B;QACvC,SAAS,EAAE,MAAM,CAAC,IAAI;QACtB,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KAC7C,CAAC;IACF,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACvD,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;YAC9B,CAAC,CAAC,2EAA2E;YAC7E,CAAC,CAAC,+EAA+E,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,oBAAoB,CAAC,IAAa,EAAE,OAA4C;IAC9F,OAAO,OAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,IAAI,IAAI,CAAC;QAClH,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE;QACxC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC"}
|