aismemory 0.7.2 → 0.7.3
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 +110 -0
- package/dist/__tests__/agent-key-mode.test.js +60 -0
- package/dist/__tests__/agent-key-mode.test.js.map +1 -1
- package/dist/__tests__/agent-load-persistence.test.js +25 -2
- package/dist/__tests__/agent-load-persistence.test.js.map +1 -1
- package/dist/__tests__/agentmemory.test.d.ts +1 -0
- package/dist/__tests__/agentmemory.test.js +73 -0
- package/dist/__tests__/agentmemory.test.js.map +1 -0
- package/dist/__tests__/ais-http.test.js +65 -45
- package/dist/__tests__/ais-http.test.js.map +1 -1
- package/dist/__tests__/auto-enroll-key.test.js +10 -6
- package/dist/__tests__/auto-enroll-key.test.js.map +1 -1
- package/dist/__tests__/beacon-contract.test.d.ts +1 -0
- package/dist/__tests__/beacon-contract.test.js +106 -0
- package/dist/__tests__/beacon-contract.test.js.map +1 -0
- package/dist/__tests__/credential-isolation.test.d.ts +1 -0
- package/dist/__tests__/credential-isolation.test.js +61 -0
- package/dist/__tests__/credential-isolation.test.js.map +1 -0
- package/dist/__tests__/credential-resolution.test.d.ts +1 -0
- package/dist/__tests__/credential-resolution.test.js +141 -0
- package/dist/__tests__/credential-resolution.test.js.map +1 -0
- package/dist/__tests__/doctor.test.js +250 -9
- package/dist/__tests__/doctor.test.js.map +1 -1
- package/dist/__tests__/ender-receipt-auth.test.d.ts +1 -0
- package/dist/__tests__/ender-receipt-auth.test.js +26 -0
- package/dist/__tests__/ender-receipt-auth.test.js.map +1 -0
- package/dist/__tests__/fixtures/beacon-contract.d.ts +66 -0
- package/dist/__tests__/fixtures/beacon-contract.js +72 -0
- package/dist/__tests__/fixtures/beacon-contract.js.map +1 -0
- package/dist/__tests__/list-all-agents.test.js +2 -0
- package/dist/__tests__/list-all-agents.test.js.map +1 -1
- package/dist/__tests__/lost-agent.test.d.ts +1 -0
- package/dist/__tests__/lost-agent.test.js +108 -0
- package/dist/__tests__/lost-agent.test.js.map +1 -0
- package/dist/__tests__/memory-write-failure.test.js +5 -1
- package/dist/__tests__/memory-write-failure.test.js.map +1 -1
- package/dist/__tests__/no-registered-keys-disk-bearer-fallback.test.d.ts +1 -0
- package/dist/__tests__/no-registered-keys-disk-bearer-fallback.test.js +207 -0
- package/dist/__tests__/no-registered-keys-disk-bearer-fallback.test.js.map +1 -0
- package/dist/__tests__/provisional-register-mcp-remember.test.js +5 -1
- package/dist/__tests__/provisional-register-mcp-remember.test.js.map +1 -1
- package/dist/__tests__/readme-tools-parity.test.d.ts +1 -0
- package/dist/__tests__/readme-tools-parity.test.js +64 -0
- package/dist/__tests__/readme-tools-parity.test.js.map +1 -0
- package/dist/__tests__/reconnect-survival-e2e.test.js +63 -1
- package/dist/__tests__/reconnect-survival-e2e.test.js.map +1 -1
- package/dist/__tests__/token-manager.test.js +12 -0
- package/dist/__tests__/token-manager.test.js.map +1 -1
- package/dist/__tests__/tool-args.test.js +129 -1
- package/dist/__tests__/tool-args.test.js.map +1 -1
- package/dist/__tests__/workspace-key-mode.test.d.ts +1 -0
- package/dist/__tests__/workspace-key-mode.test.js +264 -0
- package/dist/__tests__/workspace-key-mode.test.js.map +1 -0
- package/dist/agent-key-mode.d.ts +4 -2
- package/dist/agent-key-mode.js +68 -7
- package/dist/agent-key-mode.js.map +1 -1
- package/dist/ais-http.d.ts +1 -0
- package/dist/ais-http.js +67 -5
- package/dist/ais-http.js.map +1 -1
- package/dist/auth-staleness.d.ts +2 -0
- package/dist/auth-staleness.js +5 -0
- package/dist/auth-staleness.js.map +1 -1
- package/dist/auto-handoff.d.ts +1 -1
- package/dist/auto-handoff.js +5 -3
- package/dist/auto-handoff.js.map +1 -1
- package/dist/cli/doctor.d.ts +4 -0
- package/dist/cli/doctor.js +120 -8
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/enable-key-auth.js +4 -5
- package/dist/cli/enable-key-auth.js.map +1 -1
- package/dist/cli/orientation.d.ts +15 -0
- package/dist/cli/orientation.js +89 -0
- package/dist/cli/orientation.js.map +1 -0
- package/dist/harness-identity.d.ts +17 -0
- package/dist/harness-identity.js +105 -0
- package/dist/harness-identity.js.map +1 -0
- package/dist/hydration.d.ts +1 -1
- package/dist/hydration.js +3 -2
- package/dist/hydration.js.map +1 -1
- package/dist/index.js +364 -43
- package/dist/index.js.map +1 -1
- package/dist/key-auth.js +9 -9
- package/dist/key-auth.js.map +1 -1
- package/dist/oauth-credentials.d.ts +11 -0
- package/dist/oauth-credentials.js +31 -3
- package/dist/oauth-credentials.js.map +1 -1
- package/dist/token-manager.d.ts +3 -2
- package/dist/token-manager.js +7 -4
- package/dist/token-manager.js.map +1 -1
- package/dist/tool-args.d.ts +56 -0
- package/dist/tool-args.js +85 -0
- package/dist/tool-args.js.map +1 -1
- package/dist/workspace-key-mode.d.ts +40 -0
- package/dist/workspace-key-mode.js +258 -0
- package/dist/workspace-key-mode.js.map +1 -0
- package/package.json +1 -1
package/dist/auth-staleness.js
CHANGED
|
@@ -38,4 +38,9 @@ export function isAuthErrorResult(result) {
|
|
|
38
38
|
const code = r.error?.code;
|
|
39
39
|
return code === 'TOKEN_EXPIRED' || code === 'INVALID_TOKEN';
|
|
40
40
|
}
|
|
41
|
+
/** True when AIS rejected did-prove because no human key is registered for this DID. */
|
|
42
|
+
export function isNoRegisteredKeysAuthError(err) {
|
|
43
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
44
|
+
return /NO_REGISTERED_KEYS?/i.test(message);
|
|
45
|
+
}
|
|
41
46
|
//# sourceMappingURL=auth-staleness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-staleness.js","sourceRoot":"","sources":["../src/auth-staleness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,KAAa,EACb,WAAmB,yBAAyB;IAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChE,MAAM,CAAC,GAAG,MAA0D,CAAC;IACrE,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;IAC3B,OAAO,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,eAAe,CAAC;AAC9D,CAAC"}
|
|
1
|
+
{"version":3,"file":"auth-staleness.js","sourceRoot":"","sources":["../src/auth-staleness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,KAAa,EACb,WAAmB,yBAAyB;IAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChE,MAAM,CAAC,GAAG,MAA0D,CAAC;IACrE,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;IAC3B,OAAO,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,eAAe,CAAC;AAC9D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,2BAA2B,CAAC,GAAY;IACtD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/auto-handoff.d.ts
CHANGED
|
@@ -14,4 +14,4 @@ export interface HandoffPayload {
|
|
|
14
14
|
keyLearnings: string[];
|
|
15
15
|
}
|
|
16
16
|
export declare function buildHandoffPayload(tracker: ActivityTracker): HandoffPayload;
|
|
17
|
-
export declare function setupAutoHandoff(aisUrl: string, agentId: string, token: string, tracker: ActivityTracker, onBeforeExit?: () => void): void;
|
|
17
|
+
export declare function setupAutoHandoff(aisUrl: string, agentId: string, token: string, tracker: ActivityTracker, onBeforeExit?: () => void, beforeWrite?: () => Promise<void>): void;
|
package/dist/auto-handoff.js
CHANGED
|
@@ -45,7 +45,7 @@ export function buildHandoffPayload(tracker) {
|
|
|
45
45
|
return { summary, keyLearnings: memories };
|
|
46
46
|
}
|
|
47
47
|
const HANDOFF_FETCH_TIMEOUT_MS = 5_000;
|
|
48
|
-
export function setupAutoHandoff(aisUrl, agentId, token, tracker, onBeforeExit) {
|
|
48
|
+
export function setupAutoHandoff(aisUrl, agentId, token, tracker, onBeforeExit, beforeWrite) {
|
|
49
49
|
let exiting = false;
|
|
50
50
|
const doHandoff = async () => {
|
|
51
51
|
if (exiting)
|
|
@@ -55,6 +55,8 @@ export function setupAutoHandoff(aisUrl, agentId, token, tracker, onBeforeExit)
|
|
|
55
55
|
return;
|
|
56
56
|
const payload = buildHandoffPayload(tracker);
|
|
57
57
|
try {
|
|
58
|
+
if (beforeWrite)
|
|
59
|
+
await beforeWrite();
|
|
58
60
|
await fetch(`${aisUrl}/v1/agents/${agentId}/handoff`, {
|
|
59
61
|
method: 'POST',
|
|
60
62
|
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },
|
|
@@ -62,8 +64,8 @@ export function setupAutoHandoff(aisUrl, agentId, token, tracker, onBeforeExit)
|
|
|
62
64
|
signal: AbortSignal.timeout(HANDOFF_FETCH_TIMEOUT_MS),
|
|
63
65
|
});
|
|
64
66
|
}
|
|
65
|
-
catch {
|
|
66
|
-
|
|
67
|
+
catch (error) {
|
|
68
|
+
process.stderr.write(`[aismemory] Auto-handoff stopped: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
67
69
|
}
|
|
68
70
|
if (onBeforeExit)
|
|
69
71
|
onBeforeExit();
|
package/dist/auto-handoff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-handoff.js","sourceRoot":"","sources":["../src/auto-handoff.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACtC,2DAA2D;AAC3D,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAE5C,MAAM,OAAO,eAAe;IAClB,UAAU,GAA2B,EAAE,CAAC;IACxC,cAAc,GAAa,EAAE,CAAC;IAC9B,iBAAiB,GAAG,CAAC,CAAC;IAE9B,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,kBAAkB,CAAC,OAAe;QAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,OAAO,GACX,OAAO,CAAC,MAAM,GAAG,+BAA+B;YAC9C,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,+BAA+B,CAAC,GAAG;YACzD,CAAC,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5D,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,iBAAiB;QACf,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,WAAW;QACT,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,CAAC;CACF;AAOD,MAAM,UAAU,mBAAmB,CAAC,OAAwB;IAC1D,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,uCAAuC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;SACtD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC;SAC5C,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,eAAe,SAAS,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,WAAW,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACxG,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAEvC,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,OAAe,EACf,KAAa,EACb,OAAwB,EACxB,YAAyB;
|
|
1
|
+
{"version":3,"file":"auto-handoff.js","sourceRoot":"","sources":["../src/auto-handoff.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export interface CheckResult {
|
|
|
8
8
|
hint?: string;
|
|
9
9
|
}
|
|
10
10
|
export interface DoctorReport {
|
|
11
|
+
scope: 'cli-environment';
|
|
12
|
+
runtimeEvidence: 'unavailable';
|
|
11
13
|
aisUrl: string;
|
|
12
14
|
checks: CheckResult[];
|
|
13
15
|
problemCount: number;
|
|
@@ -52,6 +54,8 @@ export interface DoctorOptions {
|
|
|
52
54
|
tlsProbe?: TlsProbeFn;
|
|
53
55
|
loadCreds?: (home?: string) => OAuthCredentials | null;
|
|
54
56
|
home?: string;
|
|
57
|
+
argv?: string[];
|
|
55
58
|
}
|
|
59
|
+
export declare function checkHarnessIdentity(baseUrl: string, options?: DoctorOptions): Promise<CheckResult>;
|
|
56
60
|
export declare function runDoctor(options?: DoctorOptions): Promise<DoctorReport>;
|
|
57
61
|
export declare function main(argv?: string[]): Promise<void>;
|
package/dist/cli/doctor.js
CHANGED
|
@@ -18,10 +18,16 @@
|
|
|
18
18
|
* 0 — no FAIL checks (WARNs are still reported but don't fail the command)
|
|
19
19
|
* 1 — at least one FAIL check
|
|
20
20
|
*/
|
|
21
|
+
import { pathToFileURL } from 'node:url';
|
|
22
|
+
import { openSync, fstatSync, readSync, closeSync, constants, realpathSync } from 'node:fs';
|
|
23
|
+
import { orient } from './orientation.js';
|
|
21
24
|
import { lookup as dnsLookupDefault } from 'node:dns/promises';
|
|
22
25
|
import { connect as tlsConnectDefault } from 'node:tls';
|
|
23
26
|
import { loadOAuthCredentials, credentialsFilePath } from '../oauth-credentials.js';
|
|
24
27
|
import { isCredsStale } from '../auth-staleness.js';
|
|
28
|
+
import { loadHarnessIdentity, verifyPinnedIdentity, IDENTITY_REPAIR } from '../harness-identity.js';
|
|
29
|
+
import { loadAgentApiKeyConfig, dispatchToolKeyMode, AgentApiKeyConfigError } from '../agent-key-mode.js';
|
|
30
|
+
import { loadWorkspaceKeyConfig, dispatchToolWorkspaceKeyMode, WorkspaceKeyConfigError } from '../workspace-key-mode.js';
|
|
25
31
|
/** Minimum Node major version this package requires (per @modelcontextprotocol/sdk engines). */
|
|
26
32
|
const MIN_NODE_MAJOR = 18;
|
|
27
33
|
const PROXY_ENV_KEYS = ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy', 'NO_PROXY', 'no_proxy'];
|
|
@@ -149,9 +155,19 @@ export async function checkRestHealth(baseUrl, fetchImpl = fetch) {
|
|
|
149
155
|
export async function checkMcpEndpoint(baseUrl, fetchImpl = fetch) {
|
|
150
156
|
const url = `${baseUrl}/mcp`;
|
|
151
157
|
try {
|
|
152
|
-
const res = await fetchImpl(url);
|
|
153
|
-
//
|
|
154
|
-
//
|
|
158
|
+
const res = await fetchImpl(url, { redirect: 'manual' });
|
|
159
|
+
// An unauthenticated probe can expect an auth challenge, but error pages
|
|
160
|
+
// and redirects do not establish that the configured MCP endpoint works.
|
|
161
|
+
if (!res.ok && res.status !== 401 && res.status !== 403) {
|
|
162
|
+
return {
|
|
163
|
+
name: 'MCP HTTP endpoint',
|
|
164
|
+
status: 'FAIL',
|
|
165
|
+
message: `${url} responded HTTP ${res.status} — MCP endpoint health could not be confirmed.`,
|
|
166
|
+
hint: res.status >= 500
|
|
167
|
+
? 'The MCP service reported a server error. Check service health and retry.'
|
|
168
|
+
: 'Check AIS_URL and the canonical /mcp route; resolve the reported HTTP error or redirect and retry.',
|
|
169
|
+
};
|
|
170
|
+
}
|
|
155
171
|
const authNote = res.status === 401 || res.status === 403 ? ' (auth required, as expected without a key)' : '';
|
|
156
172
|
return {
|
|
157
173
|
name: 'MCP HTTP endpoint',
|
|
@@ -266,6 +282,60 @@ export function checkClockSkew(dateHeader, now = Date.now, warnThresholdMs = CLO
|
|
|
266
282
|
message: `Local clock is within ${skewMinutes} min of the AIS server.`,
|
|
267
283
|
};
|
|
268
284
|
}
|
|
285
|
+
export async function checkHarnessIdentity(baseUrl, options = {}) {
|
|
286
|
+
const env = options.env ?? process.env;
|
|
287
|
+
let pin;
|
|
288
|
+
try {
|
|
289
|
+
const loadedPin = loadHarnessIdentity(options.argv ?? [], env, options.home);
|
|
290
|
+
if (!loadedPin) {
|
|
291
|
+
return {
|
|
292
|
+
name: 'Harness identity gate',
|
|
293
|
+
status: 'PASS',
|
|
294
|
+
message: 'No harness identity pin configured; legacy unpinned mode remains allowed.',
|
|
295
|
+
hint: 'Install and launch with a harness pin to protect against shared-default identity drift.',
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
pin = loadedPin;
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
return { name: 'Harness identity gate', status: 'FAIL', message: errMsg(error), hint: IDENTITY_REPAIR };
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
const adapterEnv = { ...env, AIS_AGENT_ID: pin.agentId };
|
|
305
|
+
const workspace = loadWorkspaceKeyConfig(adapterEnv);
|
|
306
|
+
const agentKey = workspace ? null : loadAgentApiKeyConfig(adapterEnv);
|
|
307
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
308
|
+
await verifyPinnedIdentity(pin, pin.agentId, async () => {
|
|
309
|
+
if (workspace)
|
|
310
|
+
return dispatchToolWorkspaceKeyMode(baseUrl, workspace, 'whoami', {}, fetchImpl);
|
|
311
|
+
if (agentKey)
|
|
312
|
+
return dispatchToolKeyMode(baseUrl, agentKey, 'whoami', {}, fetchImpl);
|
|
313
|
+
const creds = (options.loadCreds ?? loadOAuthCredentials)(options.home);
|
|
314
|
+
if (!creds || isCredsStale(creds.expiresAt, (options.now ?? Date.now)())) {
|
|
315
|
+
throw new Error('No current bearer available to doctor; run whoami in the restarted harness to verify its live key-auth session.');
|
|
316
|
+
}
|
|
317
|
+
const response = await fetchImpl(`${baseUrl}/v1/agents/${pin.agentId}`, {
|
|
318
|
+
headers: { Authorization: `Bearer ${creds.token}` },
|
|
319
|
+
signal: AbortSignal.timeout(10_000),
|
|
320
|
+
});
|
|
321
|
+
if (!response.ok)
|
|
322
|
+
throw new Error(`whoami returned HTTP ${response.status}`);
|
|
323
|
+
return response.json();
|
|
324
|
+
});
|
|
325
|
+
return { name: 'Harness identity gate', status: 'PASS', message: `${pin.harness} pinned to ${pin.agentId}; whoami verified in this CLI process.` };
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
if (error instanceof WorkspaceKeyConfigError || error instanceof AgentApiKeyConfigError) {
|
|
329
|
+
return {
|
|
330
|
+
name: 'Harness identity gate',
|
|
331
|
+
status: 'FAIL',
|
|
332
|
+
message: errMsg(error),
|
|
333
|
+
hint: 'Fix the scoped key environment (AIS_WORKSPACE_KEY/AIS_AGENT_API_KEY and AIS_AGENT_ID), then rerun doctor.',
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
return { name: 'Harness identity gate', status: 'FAIL', message: errMsg(error), hint: IDENTITY_REPAIR };
|
|
337
|
+
}
|
|
338
|
+
}
|
|
269
339
|
export async function runDoctor(options = {}) {
|
|
270
340
|
const env = options.env ?? process.env;
|
|
271
341
|
const aisUrl = options.aisUrl ?? env['AIS_URL'] ?? 'https://ais.agentsandswarms.ai';
|
|
@@ -273,6 +343,7 @@ export async function runDoctor(options = {}) {
|
|
|
273
343
|
const fetchImpl = options.fetchImpl ?? fetch;
|
|
274
344
|
const now = options.now ?? Date.now;
|
|
275
345
|
const checks = [];
|
|
346
|
+
checks.push(await checkHarnessIdentity(aisUrl, options));
|
|
276
347
|
checks.push(checkNodeVersion(options.nodeVersion));
|
|
277
348
|
checks.push(await checkDnsResolution(host, options.dnsLookup));
|
|
278
349
|
checks.push(await checkTlsReachability(host, options.tlsProbe));
|
|
@@ -290,6 +361,8 @@ export async function runDoctor(options = {}) {
|
|
|
290
361
|
const problemCount = checks.filter((c) => c.status !== 'PASS').length;
|
|
291
362
|
const hasFail = checks.some((c) => c.status === 'FAIL');
|
|
292
363
|
return {
|
|
364
|
+
scope: 'cli-environment',
|
|
365
|
+
runtimeEvidence: 'unavailable',
|
|
293
366
|
aisUrl,
|
|
294
367
|
checks,
|
|
295
368
|
problemCount,
|
|
@@ -301,6 +374,7 @@ export async function runDoctor(options = {}) {
|
|
|
301
374
|
function formatText(report) {
|
|
302
375
|
const lines = [];
|
|
303
376
|
lines.push(`aismemory doctor — ${report.aisUrl}`);
|
|
377
|
+
lines.push('Scope: CLI environment only. Runtime evidence unavailable; desktop hooks and harness wiring are not verified.');
|
|
304
378
|
lines.push('');
|
|
305
379
|
for (const c of report.checks) {
|
|
306
380
|
lines.push(`[${c.status}] ${c.name}: ${c.message}`);
|
|
@@ -314,9 +388,45 @@ function formatText(report) {
|
|
|
314
388
|
: `doctor: ${report.problemCount} problem(s) found`);
|
|
315
389
|
return lines.join('\n');
|
|
316
390
|
}
|
|
391
|
+
/** Enforce the byte limit on the opened file, even if its path or size changes. */
|
|
392
|
+
function readOrientation(path) {
|
|
393
|
+
if (!path)
|
|
394
|
+
throw new Error('Orientation requires a public-safe JSON file of at most 8192 bytes.');
|
|
395
|
+
let descriptor;
|
|
396
|
+
try {
|
|
397
|
+
descriptor = openSync(path, constants.O_RDONLY | constants.O_NONBLOCK);
|
|
398
|
+
if (!fstatSync(descriptor).isFile())
|
|
399
|
+
throw new Error('Not a regular file.');
|
|
400
|
+
const bytes = Buffer.alloc(8193);
|
|
401
|
+
let length = 0;
|
|
402
|
+
while (length < bytes.length) {
|
|
403
|
+
const count = readSync(descriptor, bytes, length, bytes.length - length, length);
|
|
404
|
+
if (count === 0)
|
|
405
|
+
break;
|
|
406
|
+
length += count;
|
|
407
|
+
}
|
|
408
|
+
if (length > 8192)
|
|
409
|
+
throw new Error('File exceeds byte limit.');
|
|
410
|
+
return JSON.parse(bytes.subarray(0, length).toString('utf8'));
|
|
411
|
+
}
|
|
412
|
+
catch {
|
|
413
|
+
throw new Error('Cannot read orientation JSON. Use a public-safe regular JSON file of at most 8192 bytes; include no secrets.');
|
|
414
|
+
}
|
|
415
|
+
finally {
|
|
416
|
+
if (descriptor !== undefined)
|
|
417
|
+
closeSync(descriptor);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
317
420
|
export async function main(argv = process.argv.slice(2)) {
|
|
421
|
+
const orientationIndex = argv.indexOf('--orientation');
|
|
422
|
+
if (orientationIndex !== -1) {
|
|
423
|
+
const report = orient(readOrientation(argv[orientationIndex + 1]));
|
|
424
|
+
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
425
|
+
process.exit(report.exitCode);
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
318
428
|
const json = argv.includes('--json');
|
|
319
|
-
const report = await runDoctor();
|
|
429
|
+
const report = await runDoctor({ argv });
|
|
320
430
|
if (json) {
|
|
321
431
|
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
322
432
|
}
|
|
@@ -325,8 +435,10 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
325
435
|
}
|
|
326
436
|
process.exit(report.exitCode);
|
|
327
437
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
438
|
+
if (process.argv[1] && pathToFileURL(realpathSync(process.argv[1])).href === import.meta.url) {
|
|
439
|
+
main().catch((err) => {
|
|
440
|
+
process.stderr.write(`[aismemory doctor] Fatal: ${errMsg(err)}\n`);
|
|
441
|
+
process.exit(1);
|
|
442
|
+
});
|
|
443
|
+
}
|
|
332
444
|
//# sourceMappingURL=doctor.js.map
|
package/dist/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,12 +19,11 @@
|
|
|
19
19
|
* 1 — bootstrap credentials missing or registration failed
|
|
20
20
|
*/
|
|
21
21
|
import { readFileSync, existsSync } from 'node:fs';
|
|
22
|
-
import {
|
|
23
|
-
import { homedir } from 'node:os';
|
|
22
|
+
import { credentialsFilePath } from '../oauth-credentials.js';
|
|
24
23
|
import { generateAndSaveKeypair } from '../key-auth.js';
|
|
25
24
|
const PREFIX = '[aismemory enable-key-auth]';
|
|
26
25
|
function loadBootstrapCreds() {
|
|
27
|
-
const path =
|
|
26
|
+
const path = credentialsFilePath();
|
|
28
27
|
if (!existsSync(path))
|
|
29
28
|
return null;
|
|
30
29
|
try {
|
|
@@ -54,13 +53,13 @@ async function main() {
|
|
|
54
53
|
// 1. Find a bootstrap bearer token.
|
|
55
54
|
const creds = loadBootstrapCreds();
|
|
56
55
|
if (!creds) {
|
|
57
|
-
log('No bootstrap credentials found
|
|
56
|
+
log('No bootstrap credentials found in the selected credential store');
|
|
58
57
|
log('Run `npx aismemory` first (and complete the bond URL) to get an initial token,');
|
|
59
58
|
log('then re-run this command.');
|
|
60
59
|
process.exit(1);
|
|
61
60
|
}
|
|
62
61
|
if (new Date(creds.expiresAt) <= new Date()) {
|
|
63
|
-
log('Bootstrap credentials
|
|
62
|
+
log('Bootstrap credentials in the selected store have expired.');
|
|
64
63
|
log('Run `npx aismemory` once to refresh them, then re-run this command.');
|
|
65
64
|
process.exit(1);
|
|
66
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enable-key-auth.js","sourceRoot":"","sources":["../../src/cli/enable-key-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"enable-key-auth.js","sourceRoot":"","sources":["../../src/cli/enable-key-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface OrientationCheck {
|
|
2
|
+
step: string;
|
|
3
|
+
status: 'PASS' | 'FAIL';
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export interface OrientationReport {
|
|
7
|
+
scope: 'public-orientation';
|
|
8
|
+
runtimeEvidence: 'unverified';
|
|
9
|
+
checks: OrientationCheck[];
|
|
10
|
+
bondUrl: string;
|
|
11
|
+
beacon: 'unknown-signing-capability';
|
|
12
|
+
exitCode: 0 | 1;
|
|
13
|
+
}
|
|
14
|
+
/** Pure read-only evaluation: no network, credential loading, relocation or delivery. */
|
|
15
|
+
export declare function orient(input: unknown): OrientationReport;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const host = z.enum(['local-mac', 'cloud-vm', 'local-other']);
|
|
3
|
+
const account = z.enum(['owner-account', 'fleet-account']);
|
|
4
|
+
const channel = z.enum(['ais', 'mcp', 'inbox']);
|
|
5
|
+
const evidence = z.enum(['pass', 'missing', 'unknown']);
|
|
6
|
+
const marker = z.string().regex(/^[a-zA-Z0-9-]{1,64}$/);
|
|
7
|
+
const activationDoor = 'https://agentsandswarms.ai/activate';
|
|
8
|
+
const inputSchema = z.object({
|
|
9
|
+
version: z.literal(1),
|
|
10
|
+
identity: z.string().uuid(),
|
|
11
|
+
requirements: z.object({
|
|
12
|
+
host,
|
|
13
|
+
account,
|
|
14
|
+
channels: z.array(channel).min(1).max(3).refine((values) => new Set(values).size === values.length),
|
|
15
|
+
}).strict(),
|
|
16
|
+
current: z.object({ host: host.or(z.literal('unknown')), account: account.or(z.literal('unknown')), session: marker }).strict(),
|
|
17
|
+
evidence: z.object({
|
|
18
|
+
session: marker,
|
|
19
|
+
host: host.or(z.literal('unknown')),
|
|
20
|
+
account: account.or(z.literal('unknown')),
|
|
21
|
+
credentials: evidence,
|
|
22
|
+
credentialSource: z.enum(['ais-bond', 'ais-oauth', 'ais-agent-key', 'none']),
|
|
23
|
+
channels: z.object({ ais: evidence, mcp: evidence, inbox: evidence }).strict(),
|
|
24
|
+
}).strict(),
|
|
25
|
+
relocation: z.object({
|
|
26
|
+
verified: z.boolean(),
|
|
27
|
+
observedAction: z.string().min(1).max(160).regex(/^[a-zA-Z0-9 .,():/-]+$/).optional(),
|
|
28
|
+
}).strict(),
|
|
29
|
+
activationUrl: z.string().max(160).optional(),
|
|
30
|
+
}).strict();
|
|
31
|
+
/** Accept only the canonical AIS device-flow URL; never relay an arbitrary link. */
|
|
32
|
+
function bondDoor(value) {
|
|
33
|
+
if (value === undefined || value === activationDoor)
|
|
34
|
+
return activationDoor;
|
|
35
|
+
if (!/^https:\/\/agentsandswarms\.ai\/activate\?user_code=[A-Z0-9]{4}-[A-Z0-9]{4}$/.test(value)) {
|
|
36
|
+
throw new Error('Invalid AIS activation URL. Use the AIS OAuth device-flow activation door.');
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
/** Pure read-only evaluation: no network, credential loading, relocation or delivery. */
|
|
41
|
+
export function orient(input) {
|
|
42
|
+
const parsed = inputSchema.safeParse(input);
|
|
43
|
+
if (!parsed.success)
|
|
44
|
+
throw new Error('Invalid public orientation input. Follow the packaged README schema; include no secrets.');
|
|
45
|
+
const data = parsed.data;
|
|
46
|
+
const bondUrl = bondDoor(data.activationUrl);
|
|
47
|
+
const fresh = data.current.session === data.evidence.session
|
|
48
|
+
&& data.current.host === data.evidence.host && data.current.account === data.evidence.account;
|
|
49
|
+
const atHome = data.current.host === data.requirements.host && data.current.account === data.requirements.account;
|
|
50
|
+
const checks = [
|
|
51
|
+
{
|
|
52
|
+
step: 'Know home', status: atHome ? 'PASS' : 'FAIL',
|
|
53
|
+
message: atHome ? 'Host and account match this manifest.'
|
|
54
|
+
: `Wrong machine or account for this manifest: requires ${data.requirements.host}/${data.requirements.account}; observed ${data.current.host}/${data.current.account}. This is a requirement mismatch, not a runtime verdict.`,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
step: 'Re-bootstrap on arrival', status: fresh ? 'PASS' : 'FAIL',
|
|
58
|
+
message: fresh ? 'Evidence reports the current host/account/process session.'
|
|
59
|
+
: 'Previous bootstrap evidence is stale. Reprove identity, tools, channels, ownership and live state in this session before claims or dispatch.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
step: 'AIS human bonding',
|
|
63
|
+
status: fresh && data.evidence.credentials === 'pass' && data.evidence.credentialSource !== 'none' ? 'PASS' : 'FAIL',
|
|
64
|
+
message: fresh && data.evidence.credentials === 'pass' && data.evidence.credentialSource !== 'none'
|
|
65
|
+
? 'Reported AIS credential acceptance for this session.'
|
|
66
|
+
: 'Human: obtain the device code/URL through an aismemory MCP tool and complete AIS activation, or use your AIS-issued agent key. Never retrieve AIS credentials from Railway or infrastructure consoles.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
for (const required of data.requirements.channels) {
|
|
70
|
+
checks.push({
|
|
71
|
+
step: `Channel: ${required}`, status: fresh && data.evidence.channels[required] === 'pass' ? 'PASS' : 'FAIL',
|
|
72
|
+
message: fresh ? `Reported ${required}: ${data.evidence.channels[required]}.` : `Recheck ${required} in the current session.`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (!atHome) {
|
|
76
|
+
checks.push({
|
|
77
|
+
step: 'Know the way back', status: data.relocation.verified && data.relocation.observedAction ? 'PASS' : 'FAIL',
|
|
78
|
+
message: data.relocation.verified && data.relocation.observedAction
|
|
79
|
+
? `Human: ${data.relocation.observedAction}. After moving, use a new session marker and recollect all evidence.`
|
|
80
|
+
: 'Stop: relocation capability is unverified. Ask the human to inspect the harness; do not invent a button or copy credentials.',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
scope: 'public-orientation', runtimeEvidence: 'unverified', checks, bondUrl,
|
|
85
|
+
beacon: 'unknown-signing-capability',
|
|
86
|
+
exitCode: checks.some((check) => check.status === 'FAIL') ? 1 : 0,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=orientation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orientation.js","sourceRoot":"","sources":["../../src/cli/orientation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const manifestSchema: z.ZodObject<{
|
|
3
|
+
version: z.ZodLiteral<1>;
|
|
4
|
+
harness: z.ZodString;
|
|
5
|
+
agentId: z.ZodString;
|
|
6
|
+
}, z.core.$strict>;
|
|
7
|
+
export type HarnessIdentity = z.infer<typeof manifestSchema>;
|
|
8
|
+
export declare const IDENTITY_REPAIR = "Create a JSON manifest {\"version\":1,\"harness\":\"<harness>\",\"agentId\":\"<intended-agent-id>\"}; run aismemory install --manifest <file>; launch this harness with aismemory --harness <harness>, restart it, then run aismemory doctor --harness <harness>.";
|
|
9
|
+
export declare function optionValue(argv: string[], option: string): string | undefined;
|
|
10
|
+
/** Installs only non-secret identity metadata; never edits a harness env or credentials. */
|
|
11
|
+
export declare function installHarnessIdentity(source: string, home?: string): HarnessIdentity;
|
|
12
|
+
export declare function loadHarnessIdentity(argv?: string[], env?: NodeJS.ProcessEnv, home?: string): HarnessIdentity | null;
|
|
13
|
+
export declare function assertPinnedAgent(pin: HarnessIdentity | null, agentId: string): void;
|
|
14
|
+
/** Verify the same whoami response exposed by the selected auth adapter, before every mutation. */
|
|
15
|
+
export declare function verifyPinnedIdentity(pin: HarnessIdentity | null, agentId: string, whoami: () => Promise<unknown>): Promise<void>;
|
|
16
|
+
export declare function requiresIdentityGate(name: string, args: Record<string, unknown>): boolean;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install one non-secret {version: 1, harness, agentId} manifest per harness:
|
|
3
|
+
* aismemory install --manifest <file>, then launch aismemory --harness <name>.
|
|
4
|
+
* Installation refuses to replace an existing pin. To change it deliberately,
|
|
5
|
+
* stop the harness, preserve/remove its manifest, install the replacement, and
|
|
6
|
+
* restart. Undo by restoring the preserved manifest before restarting.
|
|
7
|
+
* Neither installer nor doctor edits live harness configuration or credentials.
|
|
8
|
+
* A CLI doctor PASS verifies its own credential context, not a desktop restart.
|
|
9
|
+
*/
|
|
10
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { homedir } from 'node:os';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
const manifestSchema = z.object({
|
|
15
|
+
version: z.literal(1),
|
|
16
|
+
harness: z.string().regex(/^[a-z][a-z0-9-]{0,63}$/),
|
|
17
|
+
agentId: z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9-]{0,127}$/),
|
|
18
|
+
}).strict();
|
|
19
|
+
export const IDENTITY_REPAIR = 'Create a JSON manifest {"version":1,"harness":"<harness>","agentId":"<intended-agent-id>"}; run aismemory install --manifest <file>; launch this harness with aismemory --harness <harness>, restart it, then run aismemory doctor --harness <harness>.';
|
|
20
|
+
export function optionValue(argv, option) {
|
|
21
|
+
const index = argv.indexOf(option);
|
|
22
|
+
if (index === -1)
|
|
23
|
+
return undefined;
|
|
24
|
+
const value = argv[index + 1];
|
|
25
|
+
if (!value || value.startsWith('--'))
|
|
26
|
+
throw new Error(`Missing value for ${option}. ${IDENTITY_REPAIR}`);
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function manifestPath(harness, home) {
|
|
30
|
+
const name = manifestSchema.shape.harness.parse(harness);
|
|
31
|
+
return join(home, '.aismemory', 'harnesses', `${name}.json`);
|
|
32
|
+
}
|
|
33
|
+
/** Installs only non-secret identity metadata; never edits a harness env or credentials. */
|
|
34
|
+
export function installHarnessIdentity(source, home = homedir()) {
|
|
35
|
+
const identity = manifestSchema.parse(JSON.parse(readFileSync(source, 'utf8')));
|
|
36
|
+
const path = manifestPath(identity.harness, home);
|
|
37
|
+
mkdirSync(join(home, '.aismemory', 'harnesses'), { recursive: true, mode: 0o700 });
|
|
38
|
+
// An existing pin must be deliberately removed before it can be replaced.
|
|
39
|
+
writeFileSync(path, `${JSON.stringify(identity, null, 2)}\n`, { flag: 'wx', mode: 0o600 });
|
|
40
|
+
return identity;
|
|
41
|
+
}
|
|
42
|
+
export function loadHarnessIdentity(argv = process.argv.slice(2), env = process.env, home = homedir()) {
|
|
43
|
+
const harness = optionValue(argv, '--harness');
|
|
44
|
+
if (harness) {
|
|
45
|
+
try {
|
|
46
|
+
const pin = manifestSchema.parse(JSON.parse(readFileSync(manifestPath(harness, home), 'utf8')));
|
|
47
|
+
if (pin.harness !== harness)
|
|
48
|
+
throw new Error('Harness name mismatch');
|
|
49
|
+
const envAgentId = env['AIS_AGENT_ID']?.trim();
|
|
50
|
+
if (envAgentId !== undefined && envAgentId !== '' && envAgentId !== pin.agentId) {
|
|
51
|
+
throw new Error('AIS_AGENT_ID conflicts with the installed harness pin');
|
|
52
|
+
}
|
|
53
|
+
return pin;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
throw new Error(`Identity gate: invalid, missing, or conflicting pin for ${harness}. ${IDENTITY_REPAIR}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Trim before validating: secret injection (a sourced .env file, a CI secret,
|
|
60
|
+
// a Kubernetes secret mount) commonly appends a trailing newline. This runs
|
|
61
|
+
// BEFORE main()'s agent-API-key check, so an untrimmed value failed the
|
|
62
|
+
// agentId regex here and killed the process with a raw schema error — agent
|
|
63
|
+
// API key mode could never engage even though its own loader trims for
|
|
64
|
+
// exactly this reason (CORBOT-D8D35CF0).
|
|
65
|
+
const agentId = env['AIS_AGENT_ID']?.trim();
|
|
66
|
+
if (agentId === undefined || agentId === '')
|
|
67
|
+
return null;
|
|
68
|
+
return manifestSchema.parse({ version: 1, harness: 'env-pin', agentId });
|
|
69
|
+
}
|
|
70
|
+
function repairFor(pin) {
|
|
71
|
+
if (!pin || pin.harness === 'env-pin')
|
|
72
|
+
return IDENTITY_REPAIR;
|
|
73
|
+
return `Restart this harness with aismemory --harness ${pin.harness}; run aismemory doctor --harness ${pin.harness} and confirm whoami is ${pin.agentId}. Restore that harness manifest if incorrect; never change the shared credential default to repair attribution.`;
|
|
74
|
+
}
|
|
75
|
+
export function assertPinnedAgent(pin, agentId) {
|
|
76
|
+
if (!pin)
|
|
77
|
+
return;
|
|
78
|
+
if (pin.agentId !== agentId) {
|
|
79
|
+
throw new Error(`Identity gate: expected ${pin.agentId}, received ${agentId}. Writes stopped. ${repairFor(pin)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Verify the same whoami response exposed by the selected auth adapter, before every mutation. */
|
|
83
|
+
export async function verifyPinnedIdentity(pin, agentId, whoami) {
|
|
84
|
+
if (!pin)
|
|
85
|
+
return;
|
|
86
|
+
assertPinnedAgent(pin, agentId);
|
|
87
|
+
let result;
|
|
88
|
+
try {
|
|
89
|
+
result = await whoami();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
throw new Error(`Identity gate: whoami unavailable for ${agentId}. Writes stopped. ${repairFor(pin)}`);
|
|
93
|
+
}
|
|
94
|
+
const parsed = z.object({ success: z.literal(true), data: z.object({
|
|
95
|
+
id: z.string().optional(), agentId: z.string().optional(),
|
|
96
|
+
}) }).safeParse(result);
|
|
97
|
+
if (!parsed.success || (parsed.data.data.id ?? parsed.data.data.agentId) !== agentId) {
|
|
98
|
+
throw new Error(`Identity gate: whoami did not confirm ${agentId}. Writes stopped. ${repairFor(pin)}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export function requiresIdentityGate(name, args) {
|
|
102
|
+
return ['remember', 'handoff', 'dream', 'inbox_send'].includes(name) ||
|
|
103
|
+
(name === 'inbox_read' && args['ack'] === true);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=harness-identity.js.map
|